polyfills.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
  2. /* eslint-disable @typescript-eslint/no-empty-function */
  3. /* eslint-disable @typescript-eslint/no-extraneous-class */
  4. import './polyfills.buffer'
  5. import { Duplex } from 'stream-browserify'
  6. const Tabby = window['Tabby']
  7. export class SocketProxy extends Duplex {
  8. socket: any
  9. constructor (...args: any[]) {
  10. super({
  11. allowHalfOpen: false,
  12. })
  13. this.socket = window['__connector__'].createSocket(...args)
  14. this.socket.connect$.subscribe(() => this['emit']('connect'))
  15. this.socket.data$.subscribe(data => this['emit']('data', Buffer.from(data)))
  16. this.socket.error$.subscribe(error => this['emit']('error', error))
  17. }
  18. connect (...args: any[]) {
  19. this.socket.connect(...args)
  20. }
  21. setNoDelay () { }
  22. setTimeout () { }
  23. _read (_size: number): void { }
  24. _write (chunk: Buffer, _encoding: string, callback: (error?: Error | null) => void): void {
  25. this.socket.write(chunk)
  26. callback()
  27. }
  28. _destroy (error: Error|null, callback: (error: Error|null) => void): void {
  29. this.socket.close(error)
  30. callback(error)
  31. }
  32. }
  33. Tabby.registerMock('fs', {
  34. realpathSync: () => null,
  35. readdir: () => null,
  36. stat: () => null,
  37. appendFile: () => null,
  38. constants: {},
  39. })
  40. Tabby.registerMock('any-promise', Promise)
  41. Tabby.registerMock('tls', {})
  42. Tabby.registerMock('module', {
  43. globalPaths: [],
  44. prototype: { require: window['require'] },
  45. })
  46. Tabby.registerMock('http', {
  47. Agent: class {},
  48. request: {},
  49. })
  50. Tabby.registerMock('https', {
  51. Agent: class {},
  52. request: {},
  53. })
  54. Tabby.registerMock('querystring', {})
  55. Tabby.registerMock('tty', { isatty: () => false })
  56. Tabby.registerMock('child_process', {})
  57. Tabby.registerMock('readable-stream', {})
  58. Tabby.registerMock('os', {
  59. platform: () => 'web',
  60. homedir: () => '/home',
  61. })
  62. Tabby.registerModule('buffer', {
  63. Buffer: window['Buffer'],
  64. })
  65. Tabby.registerModule('crypto', {
  66. ...require('crypto-browserify'),
  67. getHashes () {
  68. return ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160']
  69. },
  70. timingSafeEqual (a, b) {
  71. return a.equals(b)
  72. },
  73. })
  74. Tabby.registerMock('dns', {})
  75. Tabby.registerMock('@luminati-io/socksv5', {})
  76. Tabby.registerMock('util', require('util/'))
  77. Tabby.registerMock('keytar', {
  78. getPassword: () => null,
  79. })
  80. Tabby.registerMock('@serialport/bindings', {})
  81. Tabby.registerModule('net', {
  82. Socket: SocketProxy,
  83. })
  84. Tabby.registerModule('events', require('events'))
  85. Tabby.registerModule('path', require('path-browserify'))
  86. Tabby.registerModule('url', {
  87. ...require('url'),
  88. pathToFileURL: x => `file://${x}`,
  89. })
  90. Tabby.registerModule('zlib', {
  91. ...require('browserify-zlib'),
  92. constants: require('browserify-zlib'),
  93. })
  94. Tabby.registerModule('assert', Object.assign(
  95. require('assert'),
  96. {
  97. assertNotStrictEqual: () => true,
  98. notStrictEqual: () => true,
  99. },
  100. ))
  101. Tabby.registerModule('constants', require('constants-browserify'))
  102. Tabby.registerModule('stream', require('stream-browserify'))
  103. Tabby.registerModule('readline', {
  104. ...require('readline-browserify'),
  105. cursorTo: () => null,
  106. clearLine: stream => stream.write('\r'),
  107. })
  108. Tabby.registerModule('@angular/core', require('@angular/core'))
  109. Tabby.registerModule('@angular/cdk', require('@angular/cdk'))
  110. Tabby.registerModule('@angular/cdk/clipboard', require('@angular/cdk/clipboard'))
  111. Tabby.registerModule('@angular/cdk/drag-drop', require('@angular/cdk/drag-drop'))
  112. Tabby.registerModule('@angular/compiler', require('@angular/compiler'))
  113. Tabby.registerModule('@angular/common', require('@angular/common'))
  114. Tabby.registerModule('@angular/forms', require('@angular/forms'))
  115. Tabby.registerModule('@angular/platform-browser', require('@angular/platform-browser'))
  116. Tabby.registerModule('@angular/platform-browser/animations', require('@angular/platform-browser/animations'))
  117. Tabby.registerModule('@angular/platform-browser-dynamic', require('@angular/platform-browser-dynamic'))
  118. Tabby.registerModule('@angular/animations', require('@angular/animations'))
  119. Tabby.registerModule('@ng-bootstrap/ng-bootstrap', require('@ng-bootstrap/ng-bootstrap'))
  120. Tabby.registerModule('ngx-toastr', require('ngx-toastr'))
  121. Tabby.registerModule('deepmerge', require('deepmerge'))
  122. Tabby.registerModule('rxjs', require('rxjs'))
  123. Tabby.registerModule('rxjs/operators', require('rxjs'))
  124. Tabby.registerModule('js-yaml', require('js-yaml'))
  125. Tabby.registerModule('zone.js/dist/zone.js', require('zone.js/dist/zone.js'))
  126. Object.assign(window, {
  127. __dirname: '__dirname',
  128. setImmediate: setTimeout as any,
  129. })