polyfills.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. rmdirSync: () => null,
  35. realpathSync: () => null,
  36. readdir: () => null,
  37. stat: () => null,
  38. appendFile: () => null,
  39. constants: {},
  40. })
  41. Tabby.registerMock('fs/promises', {})
  42. Tabby.registerMock('tls', {})
  43. Tabby.registerMock('module', {
  44. globalPaths: [],
  45. prototype: { require: window['require'] },
  46. })
  47. Tabby.registerMock('http', {
  48. Agent: class {},
  49. request: {},
  50. })
  51. Tabby.registerMock('https', {
  52. Agent: class {},
  53. request: {},
  54. })
  55. Tabby.registerMock('querystring', {})
  56. Tabby.registerMock('tty', { isatty: () => false })
  57. Tabby.registerMock('child_process', {})
  58. Tabby.registerMock('readable-stream', {})
  59. Tabby.registerMock('os', {
  60. arch: () => 'web',
  61. platform: () => 'web',
  62. homedir: () => '/home',
  63. tmpdir: () => '/tmp',
  64. constants: {
  65. errno: {},
  66. },
  67. })
  68. Tabby.registerModule('buffer', {
  69. Buffer: window['Buffer'],
  70. })
  71. Tabby.registerModule('crypto', {
  72. ...require('crypto-browserify'),
  73. getHashes () {
  74. return ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160']
  75. },
  76. timingSafeEqual (a, b) {
  77. return a.equals(b)
  78. },
  79. })
  80. Tabby.registerMock('dns', {})
  81. Tabby.registerMock('@luminati-io/socksv5', {})
  82. Tabby.registerMock('util', require('util/'))
  83. Tabby.registerMock('keytar', {
  84. getPassword: () => null,
  85. })
  86. Tabby.registerMock('@serialport/bindings', {})
  87. Tabby.registerMock('@serialport/bindings-cpp', {})
  88. Tabby.registerMock('tmp', {})
  89. Tabby.registerModule('net', {
  90. Socket: SocketProxy,
  91. })
  92. Tabby.registerModule('events', require('events'))
  93. Tabby.registerModule('path', require('path-browserify'))
  94. Tabby.registerModule('url', {
  95. ...require('url'),
  96. pathToFileURL: x => `file://${x}`,
  97. })
  98. Tabby.registerModule('zlib', {
  99. ...require('browserify-zlib'),
  100. constants: require('browserify-zlib'),
  101. })
  102. Tabby.registerModule('assert', Object.assign(
  103. require('assert'),
  104. {
  105. assertNotStrictEqual: () => true,
  106. notStrictEqual: () => true,
  107. },
  108. ))
  109. Tabby.registerModule('constants', require('constants-browserify'))
  110. Tabby.registerModule('stream', require('stream-browserify'))
  111. Tabby.registerModule('readline', {
  112. ...require('readline-browserify'),
  113. cursorTo: () => null,
  114. clearLine: stream => stream.write('\r'),
  115. })
  116. Tabby.registerModule('@angular/core', require('@angular/core'))
  117. Tabby.registerModule('@angular/cdk', require('@angular/cdk'))
  118. Tabby.registerModule('@angular/cdk/clipboard', require('@angular/cdk/clipboard'))
  119. Tabby.registerModule('@angular/cdk/drag-drop', require('@angular/cdk/drag-drop'))
  120. Tabby.registerModule('@angular/compiler', require('@angular/compiler'))
  121. Tabby.registerModule('@angular/common', require('@angular/common'))
  122. Tabby.registerModule('@angular/forms', require('@angular/forms'))
  123. Tabby.registerModule('@angular/platform-browser', require('@angular/platform-browser'))
  124. Tabby.registerModule('@angular/platform-browser/animations', require('@angular/platform-browser/animations'))
  125. Tabby.registerModule('@angular/platform-browser-dynamic', require('@angular/platform-browser-dynamic'))
  126. Tabby.registerModule('@angular/animations', require('@angular/animations'))
  127. Tabby.registerModule('@angular/localize', require('@angular/localize'))
  128. Tabby.registerModule('@angular/localize/init', require('@angular/localize/init'))
  129. Tabby.registerModule('@ng-bootstrap/ng-bootstrap', require('@ng-bootstrap/ng-bootstrap'))
  130. Tabby.registerModule('ngx-toastr', require('ngx-toastr'))
  131. Tabby.registerModule('deepmerge', require('deepmerge'))
  132. Tabby.registerModule('rxjs', require('rxjs'))
  133. Tabby.registerModule('rxjs/operators', require('rxjs'))
  134. Tabby.registerModule('string_decoder', require('string_decoder'))
  135. Tabby.registerModule('js-yaml', require('js-yaml'))
  136. Tabby.registerModule('zone.js/dist/zone.js', require('zone.js/dist/zone.js'))
  137. Tabby.registerModule('any-promise', require('any-promise'))
  138. Object.assign(window, {
  139. __dirname: '__dirname',
  140. setImmediate: setTimeout as any,
  141. })
  142. process.addListener = () => null