@loaders.gl/loader-utils 3.1.0-alpha.2 → 4.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/index.js +8 -4
  2. package/dist/index.js.map +1 -1
  3. package/dist/json-loader.js +1 -1
  4. package/dist/lib/binary-utils/buffer-utils.js +1 -1
  5. package/dist/lib/binary-utils/buffer-utils.js.map +1 -1
  6. package/dist/lib/env-utils/globals.js +1 -1
  7. package/dist/lib/env-utils/globals.js.map +1 -1
  8. package/dist/lib/filesystems/node-filesystem.js +60 -0
  9. package/dist/lib/filesystems/node-filesystem.js.map +1 -0
  10. package/dist/lib/node/{buffer-utils.node.js → buffer.js} +1 -1
  11. package/dist/lib/node/buffer.js.map +1 -0
  12. package/dist/lib/node/fs.js +12 -14
  13. package/dist/lib/node/fs.js.map +1 -1
  14. package/dist/lib/node/util.js +3 -0
  15. package/dist/lib/node/util.js.map +1 -0
  16. package/dist/lib/parser-utils/parse-json.js +1 -1
  17. package/dist/lib/parser-utils/parse-json.js.map +1 -1
  18. package/dist/lib/path-utils/file-aliases.js +1 -1
  19. package/dist/lib/path-utils/file-aliases.js.map +1 -1
  20. package/dist/lib/path-utils/path.js +6 -2
  21. package/dist/lib/path-utils/path.js.map +1 -1
  22. package/dist/lib/worker-loader-utils/create-loader-worker.js +1 -1
  23. package/dist/lib/worker-loader-utils/create-loader-worker.js.map +1 -1
  24. package/dist/lib/worker-loader-utils/parse-with-worker.js +2 -2
  25. package/dist/lib/worker-loader-utils/parse-with-worker.js.map +1 -1
  26. package/package.json +11 -7
  27. package/src/index.ts +26 -8
  28. package/src/lib/binary-utils/buffer-utils.ts +1 -1
  29. package/src/lib/env-utils/globals.ts +1 -1
  30. package/src/lib/filesystems/node-filesystem.ts +79 -0
  31. package/src/lib/node/{buffer-utils.node.ts → buffer.ts} +0 -0
  32. package/src/lib/node/fs.ts +29 -13
  33. package/src/lib/node/util.ts +4 -0
  34. package/src/lib/path-utils/path.ts +9 -0
  35. package/src/lib/worker-loader-utils/parse-with-worker.ts +6 -5
  36. package/dist/lib/node/buffer-utils.node.js.map +0 -1
package/dist/index.js CHANGED
@@ -11,12 +11,16 @@ export { getFirstCharacters, getMagicString } from './lib/binary-utils/get-first
11
11
  export { makeTextEncoderIterator, makeTextDecoderIterator, makeLineIterator, makeNumberedLineIterator } from './lib/iterators/text-iterators';
12
12
  export { forEach, concatenateArrayBuffersAsync } from './lib/iterators/async-iteration';
13
13
  export { default as RequestScheduler } from './lib/request-utils/request-scheduler';
14
- import * as path from './lib/path-utils/path';
15
- export { path };
16
14
  export { setPathPrefix, getPathPrefix, resolvePath } from './lib/path-utils/file-aliases';
17
15
  export { addAliases as _addAliases } from './lib/path-utils/file-aliases';
16
+ export { JSONLoader } from './json-loader';
17
+ import * as path from './lib/path-utils/path';
18
+ export { path };
19
+ export { isBuffer, toBuffer, bufferToArrayBuffer } from './lib/binary-utils/buffer-utils';
20
+ import * as util from './lib/node/util';
21
+ export { util };
22
+ export { promisify } from './lib/node/util';
18
23
  import * as fs from './lib/node/fs';
19
24
  export { fs };
20
- export { isBuffer, toBuffer, bufferToArrayBuffer } from './lib/binary-utils/buffer-utils';
21
- export { JSONLoader } from './json-loader';
25
+ export { default as _NodeFileSystem } from './lib/filesystems/node-filesystem';
22
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["assert","isBrowser","isWorker","nodeVersion","self","window","global","document","createLoaderWorker","parseWithWorker","canParseWithWorker","parseJSON","toArrayBuffer","sliceArrayBuffer","concatenateArrayBuffers","concatenateTypedArrays","compareArrayBuffers","padToNBytes","copyToArray","copyArrayBuffer","copyPaddedArrayBufferToDataView","copyPaddedStringToDataView","padStringToByteAlignment","copyStringToDataView","copyBinaryToDataView","getFirstCharacters","getMagicString","makeTextEncoderIterator","makeTextDecoderIterator","makeLineIterator","makeNumberedLineIterator","forEach","concatenateArrayBuffersAsync","default","RequestScheduler","path","setPathPrefix","getPathPrefix","resolvePath","addAliases","_addAliases","fs","isBuffer","toBuffer","bufferToArrayBuffer","JSONLoader"],"mappings":"AAgBA,SAAQA,MAAR,QAAqB,wBAArB;AACA,SACEC,SADF,EAEEC,QAFF,EAGEC,WAHF,EAIEC,IAJF,EAKEC,MALF,EAMEC,MANF,EAOEC,QAPF,QAQO,yBARP;AAWA,SAAQC,kBAAR,QAAiC,gDAAjC;AACA,SAAQC,eAAR,EAAyBC,kBAAzB,QAAkD,6CAAlD;AAGA,SAAQC,SAAR,QAAwB,+BAAxB;AAGA,SACEC,aADF,EAEEC,gBAFF,EAGEC,uBAHF,EAIEC,sBAJF,EAKEC,mBALF,QAMO,uCANP;AAOA,SAAQC,WAAR,EAAqBC,WAArB,EAAkCC,eAAlC,QAAwD,sCAAxD;AACA,SACEC,+BADF,EAEEC,0BAFF,QAGO,sCAHP;AAIA,SACEC,wBADF,EAEEC,oBAFF,EAGEC,oBAHF,QAIO,iCAJP;AAKA,SAAQC,kBAAR,EAA4BC,cAA5B,QAAiD,yCAAjD;AAGA,SACEC,uBADF,EAEEC,uBAFF,EAGEC,gBAHF,EAIEC,wBAJF,QAKO,gCALP;AAMA,SAAQC,OAAR,EAAiBC,4BAAjB,QAAoD,iCAApD;AAGA,SAAQC,OAAO,IAAIC,gBAAnB,QAA0C,uCAA1C;AAGA,OAAO,KAAKC,IAAZ,MAAsB,uBAAtB;AACA,SAAQA,IAAR;AACA,SAAQC,aAAR,EAAuBC,aAAvB,EAAsCC,WAAtC,QAAwD,+BAAxD;AACA,SAAQC,UAAU,IAAIC,WAAtB,QAAwC,+BAAxC;AAGA,OAAO,KAAKC,EAAZ,MAAoB,eAApB;AACA,SAAQA,EAAR;AAGA,SAAQC,QAAR,EAAkBC,QAAlB,EAA4BC,mBAA5B,QAAsD,iCAAtD;AAEA,SAAQC,UAAR,QAAyB,eAAzB","sourcesContent":["// TYPES\nexport type {\n Loader,\n LoaderWithParser,\n LoaderContext,\n LoaderOptions,\n Writer,\n WriterOptions,\n DataType,\n SyncDataType,\n BatchableDataType,\n IFileSystem,\n IRandomAccessReadFileSystem\n} from './types';\n\n// GENERAL UTILS\nexport {assert} from './lib/env-utils/assert';\nexport {\n isBrowser,\n isWorker,\n nodeVersion,\n self,\n window,\n global,\n document\n} from './lib/env-utils/globals';\n\n// LOADERS.GL-SPECIFIC WORKER UTILS\nexport {createLoaderWorker} from './lib/worker-loader-utils/create-loader-worker';\nexport {parseWithWorker, canParseWithWorker} from './lib/worker-loader-utils/parse-with-worker';\n\n// PARSER UTILS\nexport {parseJSON} from './lib/parser-utils/parse-json';\n\n// MEMORY COPY UTILS\nexport {\n toArrayBuffer,\n sliceArrayBuffer,\n concatenateArrayBuffers,\n concatenateTypedArrays,\n compareArrayBuffers\n} from './lib/binary-utils/array-buffer-utils';\nexport {padToNBytes, copyToArray, copyArrayBuffer} from './lib/binary-utils/memory-copy-utils';\nexport {\n copyPaddedArrayBufferToDataView,\n copyPaddedStringToDataView\n} from './lib/binary-utils/binary-copy-utils';\nexport {\n padStringToByteAlignment,\n copyStringToDataView,\n copyBinaryToDataView\n} from './lib/binary-utils/encode-utils';\nexport {getFirstCharacters, getMagicString} from './lib/binary-utils/get-first-characters';\n\n// ITERATOR UTILS\nexport {\n makeTextEncoderIterator,\n makeTextDecoderIterator,\n makeLineIterator,\n makeNumberedLineIterator\n} from './lib/iterators/text-iterators';\nexport {forEach, concatenateArrayBuffersAsync} from './lib/iterators/async-iteration';\n\n// REQUEST UTILS\nexport {default as RequestScheduler} from './lib/request-utils/request-scheduler';\n\n// NODE `path`` REPLACEMENT\nimport * as path from './lib/path-utils/path';\nexport {path};\nexport {setPathPrefix, getPathPrefix, resolvePath} from './lib/path-utils/file-aliases';\nexport {addAliases as _addAliases} from './lib/path-utils/file-aliases';\n\n// NODE `fs` WRAPPERS\nimport * as fs from './lib/node/fs';\nexport {fs};\n\n// NODE `buffer` WRAPPERS\nexport {isBuffer, toBuffer, bufferToArrayBuffer} from './lib/binary-utils/buffer-utils';\n\nexport {JSONLoader} from './json-loader';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["assert","isBrowser","isWorker","nodeVersion","self","window","global","document","createLoaderWorker","parseWithWorker","canParseWithWorker","parseJSON","toArrayBuffer","sliceArrayBuffer","concatenateArrayBuffers","concatenateTypedArrays","compareArrayBuffers","padToNBytes","copyToArray","copyArrayBuffer","copyPaddedArrayBufferToDataView","copyPaddedStringToDataView","padStringToByteAlignment","copyStringToDataView","copyBinaryToDataView","getFirstCharacters","getMagicString","makeTextEncoderIterator","makeTextDecoderIterator","makeLineIterator","makeNumberedLineIterator","forEach","concatenateArrayBuffersAsync","default","RequestScheduler","setPathPrefix","getPathPrefix","resolvePath","addAliases","_addAliases","JSONLoader","path","isBuffer","toBuffer","bufferToArrayBuffer","util","promisify","fs","_NodeFileSystem"],"mappings":"AAgBA,SAAQA,MAAR,QAAqB,wBAArB;AACA,SACEC,SADF,EAEEC,QAFF,EAGEC,WAHF,EAIEC,IAJF,EAKEC,MALF,EAMEC,MANF,EAOEC,QAPF,QAQO,yBARP;AAWA,SAAQC,kBAAR,QAAiC,gDAAjC;AACA,SAAQC,eAAR,EAAyBC,kBAAzB,QAAkD,6CAAlD;AAGA,SAAQC,SAAR,QAAwB,+BAAxB;AAGA,SACEC,aADF,EAEEC,gBAFF,EAGEC,uBAHF,EAIEC,sBAJF,EAKEC,mBALF,QAMO,uCANP;AAOA,SAAQC,WAAR,EAAqBC,WAArB,EAAkCC,eAAlC,QAAwD,sCAAxD;AACA,SACEC,+BADF,EAEEC,0BAFF,QAGO,sCAHP;AAIA,SACEC,wBADF,EAEEC,oBAFF,EAGEC,oBAHF,QAIO,iCAJP;AAKA,SAAQC,kBAAR,EAA4BC,cAA5B,QAAiD,yCAAjD;AAGA,SACEC,uBADF,EAEEC,uBAFF,EAGEC,gBAHF,EAIEC,wBAJF,QAKO,gCALP;AAMA,SAAQC,OAAR,EAAiBC,4BAAjB,QAAoD,iCAApD;AAGA,SAAQC,OAAO,IAAIC,gBAAnB,QAA0C,uCAA1C;AAGA,SAAQC,aAAR,EAAuBC,aAAvB,EAAsCC,WAAtC,QAAwD,+BAAxD;AACA,SAAQC,UAAU,IAAIC,WAAtB,QAAwC,+BAAxC;AAGA,SAAQC,UAAR,QAAyB,eAAzB;AAOA,OAAO,KAAKC,IAAZ,MAAsB,uBAAtB;AACA,SAAQA,IAAR;AAGA,SAAQC,QAAR,EAAkBC,QAAlB,EAA4BC,mBAA5B,QAAsD,iCAAtD;AAKA,OAAO,KAAKC,IAAZ,MAAsB,iBAAtB;AACA,SAAQA,IAAR;AAEA,SAAQC,SAAR,QAAwB,iBAAxB;AAGA,OAAO,KAAKC,EAAZ,MAAoB,eAApB;AACA,SAAQA,EAAR;AAGA,SAAQd,OAAO,IAAIe,eAAnB,QAAyC,mCAAzC","sourcesContent":["// TYPES\nexport type {\n Loader,\n LoaderWithParser,\n LoaderContext,\n LoaderOptions,\n Writer,\n WriterOptions,\n DataType,\n SyncDataType,\n BatchableDataType,\n IFileSystem,\n IRandomAccessReadFileSystem\n} from './types';\n\n// GENERAL UTILS\nexport {assert} from './lib/env-utils/assert';\nexport {\n isBrowser,\n isWorker,\n nodeVersion,\n self,\n window,\n global,\n document\n} from './lib/env-utils/globals';\n\n// LOADERS.GL-SPECIFIC WORKER UTILS\nexport {createLoaderWorker} from './lib/worker-loader-utils/create-loader-worker';\nexport {parseWithWorker, canParseWithWorker} from './lib/worker-loader-utils/parse-with-worker';\n\n// PARSER UTILS\nexport {parseJSON} from './lib/parser-utils/parse-json';\n\n// MEMORY COPY UTILS\nexport {\n toArrayBuffer,\n sliceArrayBuffer,\n concatenateArrayBuffers,\n concatenateTypedArrays,\n compareArrayBuffers\n} from './lib/binary-utils/array-buffer-utils';\nexport {padToNBytes, copyToArray, copyArrayBuffer} from './lib/binary-utils/memory-copy-utils';\nexport {\n copyPaddedArrayBufferToDataView,\n copyPaddedStringToDataView\n} from './lib/binary-utils/binary-copy-utils';\nexport {\n padStringToByteAlignment,\n copyStringToDataView,\n copyBinaryToDataView\n} from './lib/binary-utils/encode-utils';\nexport {getFirstCharacters, getMagicString} from './lib/binary-utils/get-first-characters';\n\n// ITERATOR UTILS\nexport {\n makeTextEncoderIterator,\n makeTextDecoderIterator,\n makeLineIterator,\n makeNumberedLineIterator\n} from './lib/iterators/text-iterators';\nexport {forEach, concatenateArrayBuffersAsync} from './lib/iterators/async-iteration';\n\n// REQUEST UTILS\nexport {default as RequestScheduler} from './lib/request-utils/request-scheduler';\n\n// PATH HELPERS\nexport {setPathPrefix, getPathPrefix, resolvePath} from './lib/path-utils/file-aliases';\nexport {addAliases as _addAliases} from './lib/path-utils/file-aliases';\n\n// MICRO LOADERS\nexport {JSONLoader} from './json-loader';\n\n// NODE support\n\n// Node.js emulation (can be used in browser)\n\n// `path` replacement (avoids bundling big path polyfill)\nimport * as path from './lib/path-utils/path';\nexport {path};\n\n// Avoid direct use of `Buffer` which pulls in 50KB polyfill\nexport {isBuffer, toBuffer, bufferToArrayBuffer} from './lib/binary-utils/buffer-utils';\n\n// Note.js wrappers (can be safely imported, but not used in browser)\n\n// Use instead of importing 'util'\nimport * as util from './lib/node/util';\nexport {util};\n// TODO - remove\nexport {promisify} from './lib/node/util';\n\n// Use instead of importing 'fs';`\nimport * as fs from './lib/node/fs';\nexport {fs};\n\n// EXPERIMENTAL\nexport {default as _NodeFileSystem} from './lib/filesystems/node-filesystem';\n"],"file":"index.js"}
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "3.1.0-alpha.2" !== 'undefined' ? "3.1.0-alpha.2" : 'latest';
1
+ const VERSION = typeof "4.0.0-alpha.3" !== 'undefined' ? "4.0.0-alpha.3" : 'latest';
2
2
  export const JSONLoader = {
3
3
  name: 'JSON',
4
4
  id: 'json',
@@ -1,4 +1,4 @@
1
- import * as node from '../node/buffer-utils.node';
1
+ import * as node from '../node/buffer';
2
2
  export function isBuffer(value) {
3
3
  return value && typeof value === 'object' && value.isBuffer;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/binary-utils/buffer-utils.ts"],"names":["node","isBuffer","value","toBuffer","data","bufferToArrayBuffer","buffer","typedArray","Uint8Array","byteOffset","length","slice"],"mappings":"AAAA,OAAO,KAAKA,IAAZ,MAAsB,2BAAtB;AAKA,OAAO,SAASC,QAAT,CAAkBC,KAAlB,EAAuC;AAC5C,SAAOA,KAAK,IAAI,OAAOA,KAAP,KAAiB,QAA1B,IAAsCA,KAAK,CAACD,QAAnD;AACD;AAMD,OAAO,SAASE,QAAT,CAAkBC,IAAlB,EAAqC;AAC1C,SAAOJ,IAAI,CAACG,QAAL,GAAgBH,IAAI,CAACG,QAAL,CAAcC,IAAd,CAAhB,GAAsCA,IAA7C;AACD;AAMD,OAAO,SAASC,mBAAT,CAA6BC,MAA7B,EAAuD;AAC5D,MAAIL,QAAQ,CAACK,MAAD,CAAZ,EAAsB;AACpB,UAAMC,UAAU,GAAG,IAAIC,UAAJ,CAAeF,MAAM,CAACA,MAAtB,EAA8BA,MAAM,CAACG,UAArC,EAAiDH,MAAM,CAACI,MAAxD,CAAnB;AACA,WAAOH,UAAU,CAACI,KAAX,GAAmBL,MAA1B;AACD;;AACD,SAAOA,MAAP;AACD","sourcesContent":["import * as node from '../node/buffer-utils.node';\n\n/**\n * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n */\nexport function isBuffer(value: any): boolean {\n return value && typeof value === 'object' && value.isBuffer;\n}\n\n/**\n * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toBuffer(data: any): Buffer {\n return node.toBuffer ? node.toBuffer(data) : data;\n}\n\n/**\n * Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function bufferToArrayBuffer(buffer: any): ArrayBuffer {\n if (isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n return buffer;\n}\n"],"file":"buffer-utils.js"}
1
+ {"version":3,"sources":["../../../src/lib/binary-utils/buffer-utils.ts"],"names":["node","isBuffer","value","toBuffer","data","bufferToArrayBuffer","buffer","typedArray","Uint8Array","byteOffset","length","slice"],"mappings":"AAAA,OAAO,KAAKA,IAAZ,MAAsB,gBAAtB;AAKA,OAAO,SAASC,QAAT,CAAkBC,KAAlB,EAAuC;AAC5C,SAAOA,KAAK,IAAI,OAAOA,KAAP,KAAiB,QAA1B,IAAsCA,KAAK,CAACD,QAAnD;AACD;AAMD,OAAO,SAASE,QAAT,CAAkBC,IAAlB,EAAqC;AAC1C,SAAOJ,IAAI,CAACG,QAAL,GAAgBH,IAAI,CAACG,QAAL,CAAcC,IAAd,CAAhB,GAAsCA,IAA7C;AACD;AAMD,OAAO,SAASC,mBAAT,CAA6BC,MAA7B,EAAuD;AAC5D,MAAIL,QAAQ,CAACK,MAAD,CAAZ,EAAsB;AACpB,UAAMC,UAAU,GAAG,IAAIC,UAAJ,CAAeF,MAAM,CAACA,MAAtB,EAA8BA,MAAM,CAACG,UAArC,EAAiDH,MAAM,CAACI,MAAxD,CAAnB;AACA,WAAOH,UAAU,CAACI,KAAX,GAAmBL,MAA1B;AACD;;AACD,SAAOA,MAAP;AACD","sourcesContent":["import * as node from '../node/buffer';\n\n/**\n * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n */\nexport function isBuffer(value: any): boolean {\n return value && typeof value === 'object' && value.isBuffer;\n}\n\n/**\n * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toBuffer(data: any): Buffer {\n return node.toBuffer ? node.toBuffer(data) : data;\n}\n\n/**\n * Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function bufferToArrayBuffer(buffer: any): ArrayBuffer {\n if (isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n return buffer;\n}\n"],"file":"buffer-utils.js"}
@@ -9,7 +9,7 @@ const window_ = globals.window || globals.self || globals.global || {};
9
9
  const global_ = globals.global || globals.self || globals.window || {};
10
10
  const document_ = globals.document || {};
11
11
  export { self_ as self, window_ as window, global_ as global, document_ as document };
12
- export const isBrowser = typeof process !== 'object' || String(process) !== '[object process]' || process.browser;
12
+ export const isBrowser = Boolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);
13
13
  export const isWorker = typeof importScripts === 'function';
14
14
  const matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);
15
15
  export const nodeVersion = matches && parseFloat(matches[1]) || 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/env-utils/globals.ts"],"names":["globals","self","window","global","document","self_","window_","global_","document_","isBrowser","process","String","browser","isWorker","importScripts","matches","version","exec","nodeVersion","parseFloat"],"mappings":"AAIA,MAAMA,OAAO,GAAG;AACdC,EAAAA,IAAI,EAAE,OAAOA,IAAP,KAAgB,WAAhB,IAA+BA,IADvB;AAEdC,EAAAA,MAAM,EAAE,OAAOA,MAAP,KAAkB,WAAlB,IAAiCA,MAF3B;AAGdC,EAAAA,MAAM,EAAE,OAAOA,MAAP,KAAkB,WAAlB,IAAiCA,MAH3B;AAIdC,EAAAA,QAAQ,EAAE,OAAOA,QAAP,KAAoB,WAApB,IAAmCA;AAJ/B,CAAhB;AAQA,MAAMC,KAAU,GAAGL,OAAO,CAACC,IAAR,IAAgBD,OAAO,CAACE,MAAxB,IAAkCF,OAAO,CAACG,MAA1C,IAAoD,EAAvE;AACA,MAAMG,OAAY,GAAGN,OAAO,CAACE,MAAR,IAAkBF,OAAO,CAACC,IAA1B,IAAkCD,OAAO,CAACG,MAA1C,IAAoD,EAAzE;AACA,MAAMI,OAAY,GAAGP,OAAO,CAACG,MAAR,IAAkBH,OAAO,CAACC,IAA1B,IAAkCD,OAAO,CAACE,MAA1C,IAAoD,EAAzE;AACA,MAAMM,SAAc,GAAGR,OAAO,CAACI,QAAR,IAAoB,EAA3C;AAEA,SAAQC,KAAK,IAAIJ,IAAjB,EAAuBK,OAAO,IAAIJ,MAAlC,EAA0CK,OAAO,IAAIJ,MAArD,EAA6DK,SAAS,IAAIJ,QAA1E;AAGA,OAAO,MAAMK,SAAkB,GAE7B,OAAOC,OAAP,KAAmB,QAAnB,IAA+BC,MAAM,CAACD,OAAD,CAAN,KAAoB,kBAAnD,IAAyEA,OAAO,CAACE,OAF5E;AAKP,OAAO,MAAMC,QAAiB,GAAG,OAAOC,aAAP,KAAyB,UAAnD;AAGP,MAAMC,OAAO,GACX,OAAOL,OAAP,KAAmB,WAAnB,IAAkCA,OAAO,CAACM,OAA1C,IAAqD,YAAYC,IAAZ,CAAiBP,OAAO,CAACM,OAAzB,CADvD;AAGA,OAAO,MAAME,WAAmB,GAAIH,OAAO,IAAII,UAAU,CAACJ,OAAO,CAAC,CAAD,CAAR,CAAtB,IAAuC,CAAnE","sourcesContent":["// Purpose: include this in your module to avoid\n// dependencies on micro modules like 'global' and 'is-browser';\n\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\n\ntype obj = {[key: string]: any};\nconst self_: obj = globals.self || globals.window || globals.global || {};\nconst window_: obj = globals.window || globals.self || globals.global || {};\nconst global_: obj = globals.global || globals.self || globals.window || {};\nconst document_: obj = globals.document || {};\n\nexport {self_ as self, window_ as window, global_ as global, document_ as document};\n\n/** true if running in a browser */\nexport const isBrowser: boolean =\n // @ts-ignore process does not exist on browser\n typeof process !== 'object' || String(process) !== '[object process]' || process.browser;\n\n/** true if running in a worker thread */\nexport const isWorker: boolean = typeof importScripts === 'function';\n\n// Extract node major version\nconst matches =\n typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Major Node version (as a number) */\nexport const nodeVersion: number = (matches && parseFloat(matches[1])) || 0;\n"],"file":"globals.js"}
1
+ {"version":3,"sources":["../../../src/lib/env-utils/globals.ts"],"names":["globals","self","window","global","document","self_","window_","global_","document_","isBrowser","Boolean","process","String","browser","isWorker","importScripts","matches","version","exec","nodeVersion","parseFloat"],"mappings":"AAIA,MAAMA,OAAO,GAAG;AACdC,EAAAA,IAAI,EAAE,OAAOA,IAAP,KAAgB,WAAhB,IAA+BA,IADvB;AAEdC,EAAAA,MAAM,EAAE,OAAOA,MAAP,KAAkB,WAAlB,IAAiCA,MAF3B;AAGdC,EAAAA,MAAM,EAAE,OAAOA,MAAP,KAAkB,WAAlB,IAAiCA,MAH3B;AAIdC,EAAAA,QAAQ,EAAE,OAAOA,QAAP,KAAoB,WAApB,IAAmCA;AAJ/B,CAAhB;AAQA,MAAMC,KAAU,GAAGL,OAAO,CAACC,IAAR,IAAgBD,OAAO,CAACE,MAAxB,IAAkCF,OAAO,CAACG,MAA1C,IAAoD,EAAvE;AACA,MAAMG,OAAY,GAAGN,OAAO,CAACE,MAAR,IAAkBF,OAAO,CAACC,IAA1B,IAAkCD,OAAO,CAACG,MAA1C,IAAoD,EAAzE;AACA,MAAMI,OAAY,GAAGP,OAAO,CAACG,MAAR,IAAkBH,OAAO,CAACC,IAA1B,IAAkCD,OAAO,CAACE,MAA1C,IAAoD,EAAzE;AACA,MAAMM,SAAc,GAAGR,OAAO,CAACI,QAAR,IAAoB,EAA3C;AAEA,SAAQC,KAAK,IAAIJ,IAAjB,EAAuBK,OAAO,IAAIJ,MAAlC,EAA0CK,OAAO,IAAIJ,MAArD,EAA6DK,SAAS,IAAIJ,QAA1E;AAGA,OAAO,MAAMK,SAAkB,GAE7BC,OAAO,CAAC,OAAOC,OAAP,KAAmB,QAAnB,IAA+BC,MAAM,CAACD,OAAD,CAAN,KAAoB,kBAAnD,IAAyEA,OAAO,CAACE,OAAlF,CAFF;AAKP,OAAO,MAAMC,QAAiB,GAAG,OAAOC,aAAP,KAAyB,UAAnD;AAGP,MAAMC,OAAO,GACX,OAAOL,OAAP,KAAmB,WAAnB,IAAkCA,OAAO,CAACM,OAA1C,IAAqD,YAAYC,IAAZ,CAAiBP,OAAO,CAACM,OAAzB,CADvD;AAGA,OAAO,MAAME,WAAmB,GAAIH,OAAO,IAAII,UAAU,CAACJ,OAAO,CAAC,CAAD,CAAR,CAAtB,IAAuC,CAAnE","sourcesContent":["// Purpose: include this in your module to avoid\n// dependencies on micro modules like 'global' and 'is-browser';\n\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\n\ntype obj = {[key: string]: any};\nconst self_: obj = globals.self || globals.window || globals.global || {};\nconst window_: obj = globals.window || globals.self || globals.global || {};\nconst global_: obj = globals.global || globals.self || globals.window || {};\nconst document_: obj = globals.document || {};\n\nexport {self_ as self, window_ as window, global_ as global, document_ as document};\n\n/** true if running in a browser */\nexport const isBrowser: boolean =\n // @ts-ignore process does not exist on browser\n Boolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);\n\n/** true if running in a worker thread */\nexport const isWorker: boolean = typeof importScripts === 'function';\n\n// Extract node major version\nconst matches =\n typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Major Node version (as a number) */\nexport const nodeVersion: number = (matches && parseFloat(matches[1])) || 0;\n"],"file":"globals.js"}
@@ -0,0 +1,60 @@
1
+ import * as fs from '../node/fs';
2
+ export default class NodeFileSystem {
3
+ constructor(options) {
4
+ this.fetch = options._fetch;
5
+ }
6
+
7
+ async readdir(dirname = '.', options) {
8
+ return await fs.readdir(dirname, options);
9
+ }
10
+
11
+ async stat(path, options) {
12
+ const info = await fs.stat(path, options);
13
+ return {
14
+ size: Number(info.size),
15
+ isDirectory: () => false,
16
+ info
17
+ };
18
+ }
19
+
20
+ async fetch(path, options) {
21
+ const fallbackFetch = options.fetch || this.fetch;
22
+ return fallbackFetch(path, options);
23
+ }
24
+
25
+ async open(path, flags, mode) {
26
+ return await fs.open(path, flags);
27
+ }
28
+
29
+ async close(fd) {
30
+ return await fs.close(fd);
31
+ }
32
+
33
+ async fstat(fd) {
34
+ const info = await fs.fstat(fd);
35
+ return info;
36
+ }
37
+
38
+ async read(fd, {
39
+ buffer = null,
40
+ offset = 0,
41
+ length = buffer.byteLength,
42
+ position = null
43
+ }) {
44
+ let totalBytesRead = 0;
45
+
46
+ while (totalBytesRead < length) {
47
+ const {
48
+ bytesRead
49
+ } = await fs.read(fd, buffer, offset + totalBytesRead, length - totalBytesRead, position + totalBytesRead);
50
+ totalBytesRead += bytesRead;
51
+ }
52
+
53
+ return {
54
+ bytesRead: totalBytesRead,
55
+ buffer
56
+ };
57
+ }
58
+
59
+ }
60
+ //# sourceMappingURL=node-filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/filesystems/node-filesystem.ts"],"names":["fs","NodeFileSystem","constructor","options","fetch","_fetch","readdir","dirname","stat","path","info","size","Number","isDirectory","fallbackFetch","open","flags","mode","close","fd","fstat","read","buffer","offset","length","byteLength","position","totalBytesRead","bytesRead"],"mappings":"AAAA,OAAO,KAAKA,EAAZ,MAAoB,YAApB;AAuBA,eAAe,MAAMC,cAAN,CAAyE;AAEtFC,EAAAA,WAAW,CAACC,OAAD,EAAgC;AACzC,SAAKC,KAAL,GAAaD,OAAO,CAACE,MAArB;AACD;;AAEY,QAAPC,OAAO,CAACC,OAAO,GAAG,GAAX,EAAgBJ,OAAhB,EAA8C;AACzD,WAAO,MAAMH,EAAE,CAACM,OAAH,CAAWC,OAAX,EAAoBJ,OAApB,CAAb;AACD;;AAES,QAAJK,IAAI,CAACC,IAAD,EAAeN,OAAf,EAA4C;AACpD,UAAMO,IAAI,GAAG,MAAMV,EAAE,CAACQ,IAAH,CAAQC,IAAR,EAAcN,OAAd,CAAnB;AACA,WAAO;AAACQ,MAAAA,IAAI,EAAEC,MAAM,CAACF,IAAI,CAACC,IAAN,CAAb;AAA0BE,MAAAA,WAAW,EAAE,MAAM,KAA7C;AAAoDH,MAAAA;AAApD,KAAP;AACD;;AAEU,QAALN,KAAK,CAACK,IAAD,EAAeN,OAAf,EAA8C;AAGvD,UAAMW,aAAa,GAAGX,OAAO,CAACC,KAAR,IAAiB,KAAKA,KAA5C;AACA,WAAOU,aAAa,CAACL,IAAD,EAAON,OAAP,CAApB;AACD;;AAGS,QAAJY,IAAI,CAACN,IAAD,EAAeO,KAAf,EAAuCC,IAAvC,EAAoE;AAC5E,WAAO,MAAMjB,EAAE,CAACe,IAAH,CAAQN,IAAR,EAAcO,KAAd,CAAb;AACD;;AAEU,QAALE,KAAK,CAACC,EAAD,EAA4B;AACrC,WAAO,MAAMnB,EAAE,CAACkB,KAAH,CAASC,EAAT,CAAb;AACD;;AAEU,QAALC,KAAK,CAACD,EAAD,EAA4B;AACrC,UAAMT,IAAI,GAAG,MAAMV,EAAE,CAACoB,KAAH,CAASD,EAAT,CAAnB;AACA,WAAOT,IAAP;AACD;;AAES,QAAJW,IAAI,CACRF,EADQ,EAGR;AAACG,IAAAA,MAAM,GAAG,IAAV;AAAgBC,IAAAA,MAAM,GAAG,CAAzB;AAA4BC,IAAAA,MAAM,GAAGF,MAAM,CAACG,UAA5C;AAAwDC,IAAAA,QAAQ,GAAG;AAAnE,GAHQ,EAIsC;AAC9C,QAAIC,cAAc,GAAG,CAArB;;AAEA,WAAOA,cAAc,GAAGH,MAAxB,EAAgC;AAC9B,YAAM;AAACI,QAAAA;AAAD,UAAc,MAAM5B,EAAE,CAACqB,IAAH,CACxBF,EADwB,EAExBG,MAFwB,EAGxBC,MAAM,GAAGI,cAHe,EAIxBH,MAAM,GAAGG,cAJe,EAKxBD,QAAQ,GAAGC,cALa,CAA1B;AAOAA,MAAAA,cAAc,IAAIC,SAAlB;AACD;;AACD,WAAO;AAACA,MAAAA,SAAS,EAAED,cAAZ;AAA4BL,MAAAA;AAA5B,KAAP;AACD;;AAtDqF","sourcesContent":["import * as fs from '../node/fs';\nimport {IFileSystem, IRandomAccessReadFileSystem} from '../../types';\n// import {fetchFile} from \"../fetch/fetch-file\"\n// import {selectLoader} from \"../api/select-loader\";\n\ntype Stat = {\n size: number;\n isDirectory: () => boolean;\n info?: fs.Stats;\n};\n\ntype ReadOptions = {\n buffer?: Buffer;\n offset?: number;\n length?: number;\n position?: number;\n};\n\n/**\n * FileSystem pass-through for Node.js\n * Compatible with BrowserFileSystem.\n * @param options\n */\nexport default class NodeFileSystem implements IFileSystem, IRandomAccessReadFileSystem {\n // implements IFileSystem\n constructor(options: {[key: string]: any}) {\n this.fetch = options._fetch;\n }\n\n async readdir(dirname = '.', options?: {}): Promise<any[]> {\n return await fs.readdir(dirname, options);\n }\n\n async stat(path: string, options?: {}): Promise<Stat> {\n const info = await fs.stat(path, options);\n return {size: Number(info.size), isDirectory: () => false, info};\n }\n\n async fetch(path: string, options: {[key: string]: any}) {\n // Falls back to handle https:/http:/data: etc fetches\n // eslint-disable-next-line\n const fallbackFetch = options.fetch || this.fetch;\n return fallbackFetch(path, options);\n }\n\n // implements IRandomAccessFileSystem\n async open(path: string, flags: string | number, mode?: any): Promise<number> {\n return await fs.open(path, flags);\n }\n\n async close(fd: number): Promise<void> {\n return await fs.close(fd);\n }\n\n async fstat(fd: number): Promise<Stat> {\n const info = await fs.fstat(fd);\n return info;\n }\n\n async read(\n fd: number,\n // @ts-ignore Possibly null\n {buffer = null, offset = 0, length = buffer.byteLength, position = null}: ReadOptions\n ): Promise<{bytesRead: number; buffer: Buffer}> {\n let totalBytesRead = 0;\n // Read in loop until we get required number of bytes\n while (totalBytesRead < length) {\n const {bytesRead} = await fs.read(\n fd,\n buffer,\n offset + totalBytesRead,\n length - totalBytesRead,\n position + totalBytesRead\n );\n totalBytesRead += bytesRead;\n }\n return {bytesRead: totalBytesRead, buffer};\n }\n}\n"],"file":"node-filesystem.js"}
@@ -25,4 +25,4 @@ export function toBuffer(binaryData) {
25
25
 
26
26
  return assert(false);
27
27
  }
28
- //# sourceMappingURL=buffer-utils.node.js.map
28
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/node/buffer.ts"],"names":["assert","toArrayBuffer","buffer","Buffer","isBuffer","typedArray","Uint8Array","byteOffset","length","slice","toBuffer","binaryData","ArrayBuffer","isView","byteLength","view","i"],"mappings":"AAGA,SAAQA,MAAR,QAAqB,qBAArB;AAKA,OAAO,SAASC,aAAT,CAAuBC,MAAvB,EAA+B;AAEpC,MAAIC,MAAM,CAACC,QAAP,CAAgBF,MAAhB,CAAJ,EAA6B;AAC3B,UAAMG,UAAU,GAAG,IAAIC,UAAJ,CAAeJ,MAAM,CAACA,MAAtB,EAA8BA,MAAM,CAACK,UAArC,EAAiDL,MAAM,CAACM,MAAxD,CAAnB;AACA,WAAOH,UAAU,CAACI,KAAX,GAAmBP,MAA1B;AACD;;AACD,SAAOA,MAAP;AACD;AAKD,OAAO,SAASQ,QAAT,CAAkBC,UAAlB,EAA8B;AACnC,MAAIC,WAAW,CAACC,MAAZ,CAAmBF,UAAnB,CAAJ,EAAoC;AAClCA,IAAAA,UAAU,GAAGA,UAAU,CAACT,MAAxB;AACD;;AAED,MAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCQ,UAAU,YAAYC,WAA3D,EAAwE;AACtE,UAAMV,MAAM,GAAG,IAAIC,MAAJ,CAAWQ,UAAU,CAACG,UAAtB,CAAf;AACA,UAAMC,IAAI,GAAG,IAAIT,UAAJ,CAAeK,UAAf,CAAb;;AACA,SAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACM,MAA3B,EAAmC,EAAEQ,CAArC,EAAwC;AACtCd,MAAAA,MAAM,CAACc,CAAD,CAAN,GAAYD,IAAI,CAACC,CAAD,CAAhB;AACD;;AACD,WAAOd,MAAP;AACD;;AAED,SAAOF,MAAM,CAAC,KAAD,CAAb;AACD","sourcesContent":["// Isolates Buffer references to ensure they are only bundled under Node.js (avoids big webpack polyfill)\n// this file is not visible to webpack (it is excluded in the package.json \"browser\" field).\n\nimport {assert} from '../env-utils/assert';\n\n/**\n * Convert Buffer to ArrayBuffer\n */\nexport function toArrayBuffer(buffer) {\n // TODO - per docs we should just be able to call buffer.buffer, but there are issues\n if (Buffer.isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n return buffer;\n}\n\n/**\n * Convert (copy) ArrayBuffer to Buffer\n */\nexport function toBuffer(binaryData) {\n if (ArrayBuffer.isView(binaryData)) {\n binaryData = binaryData.buffer;\n }\n\n if (typeof Buffer !== 'undefined' && binaryData instanceof ArrayBuffer) {\n const buffer = new Buffer(binaryData.byteLength);\n const view = new Uint8Array(binaryData);\n for (let i = 0; i < buffer.length; ++i) {\n buffer[i] = view[i];\n }\n return buffer;\n }\n\n return assert(false);\n}\n"],"file":"buffer.js"}
@@ -1,19 +1,17 @@
1
1
  import fs from 'fs';
2
- import { toArrayBuffer } from './buffer-utils.node';
3
- import { promisify } from 'util';
4
-
5
- const error = fsFunction => () => {
6
- throw new Error(`${fsFunction} not available in browser`);
7
- };
8
-
2
+ import { toArrayBuffer } from './buffer';
3
+ import { promisify } from './util';
4
+ export const readdir = promisify(fs.readdir);
5
+ export const stat = promisify(fs.stat);
6
+ export const readFile = promisify(fs.readFile);
7
+ export const readFileSync = fs.readFileSync;
8
+ export const writeFile = promisify(fs.writeFile);
9
+ export const writeFileSync = fs.writeFileSync;
10
+ export const open = promisify(fs.open);
11
+ export const close = promisify(fs.close);
12
+ export const read = promisify(fs.read);
13
+ export const fstat = promisify(fs.fstat);
9
14
  export const isSupported = Boolean(fs);
10
- export const open = fs !== null && fs !== void 0 && fs.open ? promisify(fs.open) : error('fs.open');
11
- export const close = fs !== null && fs !== void 0 && fs.close ? promisify(fs.close) : error('fs.close');
12
- export const read = fs !== null && fs !== void 0 && fs.read ? promisify(fs.read) : error('fs.read');
13
- export const readFile = fs !== null && fs !== void 0 && fs.readFile ? promisify(fs.readFile) : error('fs.readFile');
14
- export const readFileSync = fs !== null && fs !== void 0 && fs.readFileSync ? fs.readFileSync : error('fs.readFileSync');
15
- export const writeFile = fs !== null && fs !== void 0 && fs.writeFile ? promisify(fs.writeFile) : error('fs.writeFile');
16
- export const writeFileSync = fs !== null && fs !== void 0 && fs.writeFileSync ? fs.writeFileSync : error('fs.writeFileSync');
17
15
  export async function _readToArrayBuffer(fd, start, length) {
18
16
  const buffer = Buffer.alloc(length);
19
17
  const {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/node/fs.ts"],"names":["fs","toArrayBuffer","promisify","error","fsFunction","Error","isSupported","Boolean","open","close","read","readFile","readFileSync","writeFile","writeFileSync","_readToArrayBuffer","fd","start","length","buffer","Buffer","alloc","bytesRead"],"mappings":"AACA,OAAOA,EAAP,MAAe,IAAf;AACA,SAAQC,aAAR,QAA4B,qBAA5B;AACA,SAAQC,SAAR,QAAwB,MAAxB;;AAEA,MAAMC,KAAK,GAAIC,UAAD,IAAgB,MAAM;AAClC,QAAM,IAAIC,KAAJ,CAAW,GAAED,UAAW,2BAAxB,CAAN;AACD,CAFD;;AAIA,OAAO,MAAME,WAAW,GAAGC,OAAO,CAACP,EAAD,CAA3B;AAEP,OAAO,MAAMQ,IAAI,GAAGR,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAEQ,IAAJ,GAAWN,SAAS,CAACF,EAAE,CAACQ,IAAJ,CAApB,GAAgCL,KAAK,CAAC,SAAD,CAAlD;AACP,OAAO,MAAMM,KAAK,GAAGT,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAES,KAAJ,GAAYP,SAAS,CAACF,EAAE,CAACS,KAAJ,CAArB,GAAkCN,KAAK,CAAC,UAAD,CAArD;AACP,OAAO,MAAMO,IAAI,GAAGV,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAEU,IAAJ,GAAWR,SAAS,CAACF,EAAE,CAACU,IAAJ,CAApB,GAAgCP,KAAK,CAAC,SAAD,CAAlD;AAEP,OAAO,MAAMQ,QAAQ,GAAGX,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAEW,QAAJ,GAAeT,SAAS,CAACF,EAAE,CAACW,QAAJ,CAAxB,GAAwCR,KAAK,CAAC,aAAD,CAA9D;AACP,OAAO,MAAMS,YAAY,GAAGZ,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAEY,YAAJ,GAAmBZ,EAAE,CAACY,YAAtB,GAAqCT,KAAK,CAAC,iBAAD,CAA/D;AACP,OAAO,MAAMU,SAAS,GAAGb,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAEa,SAAJ,GAAgBX,SAAS,CAACF,EAAE,CAACa,SAAJ,CAAzB,GAA0CV,KAAK,CAAC,cAAD,CAAjE;AACP,OAAO,MAAMW,aAAa,GAAGd,EAAE,SAAF,IAAAA,EAAE,WAAF,IAAAA,EAAE,CAAEc,aAAJ,GAAoBd,EAAE,CAACc,aAAvB,GAAuCX,KAAK,CAAC,kBAAD,CAAlE;AAEP,OAAO,eAAeY,kBAAf,CAAkCC,EAAlC,EAA8CC,KAA9C,EAA6DC,MAA7D,EAA6E;AAClF,QAAMC,MAAM,GAAGC,MAAM,CAACC,KAAP,CAAaH,MAAb,CAAf;AACA,QAAM;AAACI,IAAAA;AAAD,MAAc,MAAMZ,IAAI,CAACM,EAAD,EAAKG,MAAL,EAAa,CAAb,EAAgBD,MAAhB,EAAwBD,KAAxB,CAA9B;;AACA,MAAIK,SAAS,KAAKJ,MAAlB,EAA0B;AACxB,UAAM,IAAIb,KAAJ,CAAU,gBAAV,CAAN;AACD;;AACD,SAAOJ,aAAa,CAACkB,MAAD,CAApB;AACD","sourcesContent":["// fs wrapper (promisified fs + avoids bundling fs in browsers)\nimport fs from 'fs';\nimport {toArrayBuffer} from './buffer-utils.node';\nimport {promisify} from 'util';\n\nconst error = (fsFunction) => () => {\n throw new Error(`${fsFunction} not available in browser`);\n};\n\nexport const isSupported = Boolean(fs);\n\nexport const open = fs?.open ? promisify(fs.open) : error('fs.open');\nexport const close = fs?.close ? promisify(fs.close) : error('fs.close');\nexport const read = fs?.read ? promisify(fs.read) : error('fs.read');\n\nexport const readFile = fs?.readFile ? promisify(fs.readFile) : error('fs.readFile');\nexport const readFileSync = fs?.readFileSync ? fs.readFileSync : error('fs.readFileSync');\nexport const writeFile = fs?.writeFile ? promisify(fs.writeFile) : error('fs.writeFile');\nexport const writeFileSync = fs?.writeFileSync ? fs.writeFileSync : error('fs.writeFileSync');\n\nexport async function _readToArrayBuffer(fd: number, start: number, length: number) {\n const buffer = Buffer.alloc(length);\n const {bytesRead} = await read(fd, buffer, 0, length, start);\n if (bytesRead !== length) {\n throw new Error('fs.read failed');\n }\n return toArrayBuffer(buffer);\n}\n"],"file":"fs.js"}
1
+ {"version":3,"sources":["../../../src/lib/node/fs.ts"],"names":["fs","toArrayBuffer","promisify","readdir","stat","readFile","readFileSync","writeFile","writeFileSync","open","close","read","fstat","isSupported","Boolean","_readToArrayBuffer","fd","start","length","buffer","Buffer","alloc","bytesRead","Error"],"mappings":"AACA,OAAOA,EAAP,MAAe,IAAf;AACA,SAAQC,aAAR,QAA4B,UAA5B;AACA,SAAQC,SAAR,QAAwB,QAAxB;AAOA,OAAO,MAAMC,OAAO,GAAGD,SAAS,CAACF,EAAE,CAACG,OAAJ,CAAzB;AAEP,OAAO,MAAMC,IAAI,GAAGF,SAAS,CAACF,EAAE,CAACI,IAAJ,CAAtB;AAGP,OAAO,MAAMC,QAAQ,GAAGH,SAAS,CAACF,EAAE,CAACK,QAAJ,CAA1B;AAEP,OAAO,MAAMC,YAAY,GAAGN,EAAE,CAACM,YAAxB;AAEP,OAAO,MAAMC,SAAS,GAAGL,SAAS,CAACF,EAAE,CAACO,SAAJ,CAA3B;AAEP,OAAO,MAAMC,aAAa,GAAGR,EAAE,CAACQ,aAAzB;AAKP,OAAO,MAAMC,IAAI,GAAGP,SAAS,CAACF,EAAE,CAACS,IAAJ,CAAtB;AAEP,OAAO,MAAMC,KAAK,GAAGR,SAAS,CAACF,EAAE,CAACU,KAAJ,CAAvB;AAEP,OAAO,MAAMC,IAAI,GAAGT,SAAS,CAACF,EAAE,CAACW,IAAJ,CAAtB;AAEP,OAAO,MAAMC,KAAK,GAAGV,SAAS,CAACF,EAAE,CAACY,KAAJ,CAAvB;AAEP,OAAO,MAAMC,WAAW,GAAGC,OAAO,CAACd,EAAD,CAA3B;AAEP,OAAO,eAAee,kBAAf,CAAkCC,EAAlC,EAA8CC,KAA9C,EAA6DC,MAA7D,EAA6E;AAClF,QAAMC,MAAM,GAAGC,MAAM,CAACC,KAAP,CAAaH,MAAb,CAAf;AACA,QAAM;AAACI,IAAAA;AAAD,MAAc,MAAMX,IAAI,CAACK,EAAD,EAAKG,MAAL,EAAa,CAAb,EAAgBD,MAAhB,EAAwBD,KAAxB,CAA9B;;AACA,MAAIK,SAAS,KAAKJ,MAAlB,EAA0B;AACxB,UAAM,IAAIK,KAAJ,CAAU,gBAAV,CAAN;AACD;;AACD,SAAOtB,aAAa,CAACkB,MAAD,CAApB;AACD","sourcesContent":["// fs wrapper (promisified fs + avoids bundling fs in browsers)\nimport fs from 'fs';\nimport {toArrayBuffer} from './buffer';\nimport {promisify} from './util';\n\nexport type {Stats} from 'fs';\n\n// paths\n\n/** Wrapper for Node.js fs method */\nexport const readdir = promisify(fs.readdir);\n/** Wrapper for Node.js fs method */\nexport const stat = promisify(fs.stat);\n\n/** Wrapper for Node.js fs method */\nexport const readFile = promisify(fs.readFile);\n/** Wrapper for Node.js fs method */\nexport const readFileSync = fs.readFileSync;\n/** Wrapper for Node.js fs method */\nexport const writeFile = promisify(fs.writeFile);\n/** Wrapper for Node.js fs method */\nexport const writeFileSync = fs.writeFileSync;\n\n// file descriptors\n\n/** Wrapper for Node.js fs method */\nexport const open = promisify(fs.open);\n/** Wrapper for Node.js fs method */\nexport const close = promisify(fs.close);\n/** Wrapper for Node.js fs method */\nexport const read = promisify(fs.read);\n/** Wrapper for Node.js fs method */\nexport const fstat = promisify(fs.fstat);\n\nexport const isSupported = Boolean(fs);\n\nexport async function _readToArrayBuffer(fd: number, start: number, length: number) {\n const buffer = Buffer.alloc(length);\n const {bytesRead} = await read(fd, buffer, 0, length, start);\n if (bytesRead !== length) {\n throw new Error('fs.read failed');\n }\n return toArrayBuffer(buffer);\n}\n"],"file":"fs.js"}
@@ -0,0 +1,3 @@
1
+ import * as util from 'util';
2
+ export const promisify = util.promisify;
3
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/node/util.ts"],"names":["util","promisify"],"mappings":"AAAA,OAAO,KAAKA,IAAZ,MAAsB,MAAtB;AAGA,OAAO,MAAMC,SAAS,GAAGD,IAAI,CAACC,SAAvB","sourcesContent":["import * as util from 'util';\n\n/** Wrapper for Node.js promisify */\nexport const promisify = util.promisify;\n"],"file":"util.js"}
@@ -3,7 +3,7 @@ export function parseJSON(string) {
3
3
  try {
4
4
  return JSON.parse(string);
5
5
  } catch (_) {
6
- throw new Error(`Failed to parse JSON from data starting with "${getFirstCharacters(string)}"`);
6
+ throw new Error("Failed to parse JSON from data starting with \"".concat(getFirstCharacters(string), "\""));
7
7
  }
8
8
  }
9
9
  //# sourceMappingURL=parse-json.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parser-utils/parse-json.ts"],"names":["getFirstCharacters","parseJSON","string","JSON","parse","_","Error"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,sCAAjC;AAKA,OAAO,SAASC,SAAT,CAAmBC,MAAnB,EAAwC;AAC7C,MAAI;AACF,WAAOC,IAAI,CAACC,KAAL,CAAWF,MAAX,CAAP;AACD,GAFD,CAEE,OAAOG,CAAP,EAAU;AACV,UAAM,IAAIC,KAAJ,CAAW,iDAAgDN,kBAAkB,CAACE,MAAD,CAAS,GAAtF,CAAN;AACD;AACF","sourcesContent":["import {getFirstCharacters} from '../binary-utils/get-first-characters';\n\n/**\n * Minimal JSON parser that throws more meaningful error messages\n */\nexport function parseJSON(string: string): any {\n try {\n return JSON.parse(string);\n } catch (_) {\n throw new Error(`Failed to parse JSON from data starting with \"${getFirstCharacters(string)}\"`);\n }\n}\n"],"file":"parse-json.js"}
1
+ {"version":3,"sources":["../../../src/lib/parser-utils/parse-json.ts"],"names":["getFirstCharacters","parseJSON","string","JSON","parse","_","Error"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,sCAAjC;AAKA,OAAO,SAASC,SAAT,CAAmBC,MAAnB,EAAwC;AAC7C,MAAI;AACF,WAAOC,IAAI,CAACC,KAAL,CAAWF,MAAX,CAAP;AACD,GAFD,CAEE,OAAOG,CAAP,EAAU;AACV,UAAM,IAAIC,KAAJ,0DAA2DN,kBAAkB,CAACE,MAAD,CAA7E,QAAN;AACD;AACF","sourcesContent":["import {getFirstCharacters} from '../binary-utils/get-first-characters';\n\n/**\n * Minimal JSON parser that throws more meaningful error messages\n */\nexport function parseJSON(string: string): any {\n try {\n return JSON.parse(string);\n } catch (_) {\n throw new Error(`Failed to parse JSON from data starting with \"${getFirstCharacters(string)}\"`);\n }\n}\n"],"file":"parse-json.js"}
@@ -18,7 +18,7 @@ export function resolvePath(filename) {
18
18
  }
19
19
 
20
20
  if (!filename.startsWith('http://') && !filename.startsWith('https://')) {
21
- filename = `${pathPrefix}${filename}`;
21
+ filename = "".concat(pathPrefix).concat(filename);
22
22
  }
23
23
 
24
24
  return filename;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/path-utils/file-aliases.ts"],"names":["pathPrefix","fileAliases","setPathPrefix","prefix","getPathPrefix","addAliases","aliases","Object","assign","resolvePath","filename","alias","startsWith","replacement","replace"],"mappings":"AAEA,IAAIA,UAAU,GAAG,EAAjB;AACA,MAAMC,WAA0C,GAAG,EAAnD;AAKA,OAAO,SAASC,aAAT,CAAuBC,MAAvB,EAA6C;AAClDH,EAAAA,UAAU,GAAGG,MAAb;AACD;AAKD,OAAO,SAASC,aAAT,GAAiC;AACtC,SAAOJ,UAAP;AACD;AASD,OAAO,SAASK,UAAT,CAAoBC,OAApB,EAAkE;AACvEC,EAAAA,MAAM,CAACC,MAAP,CAAcP,WAAd,EAA2BK,OAA3B;AACD;AAKD,OAAO,SAASG,WAAT,CAAqBC,QAArB,EAA+C;AACpD,OAAK,MAAMC,KAAX,IAAoBV,WAApB,EAAiC;AAC/B,QAAIS,QAAQ,CAACE,UAAT,CAAoBD,KAApB,CAAJ,EAAgC;AAC9B,YAAME,WAAW,GAAGZ,WAAW,CAACU,KAAD,CAA/B;AACAD,MAAAA,QAAQ,GAAGA,QAAQ,CAACI,OAAT,CAAiBH,KAAjB,EAAwBE,WAAxB,CAAX;AACD;AACF;;AACD,MAAI,CAACH,QAAQ,CAACE,UAAT,CAAoB,SAApB,CAAD,IAAmC,CAACF,QAAQ,CAACE,UAAT,CAAoB,UAApB,CAAxC,EAAyE;AACvEF,IAAAA,QAAQ,GAAI,GAAEV,UAAW,GAAEU,QAAS,EAApC;AACD;;AACD,SAAOA,QAAP;AACD","sourcesContent":["// Simple file alias mechanisms for tests.\n\nlet pathPrefix = '';\nconst fileAliases: {[aliasPath: string]: string} = {};\n\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix: string): void {\n pathPrefix = prefix;\n}\n\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix(): string {\n return pathPrefix;\n}\n\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases: {[aliasPath: string]: string}): void {\n Object.assign(fileAliases, aliases);\n}\n\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename: string): string {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = `${pathPrefix}${filename}`;\n }\n return filename;\n}\n"],"file":"file-aliases.js"}
1
+ {"version":3,"sources":["../../../src/lib/path-utils/file-aliases.ts"],"names":["pathPrefix","fileAliases","setPathPrefix","prefix","getPathPrefix","addAliases","aliases","Object","assign","resolvePath","filename","alias","startsWith","replacement","replace"],"mappings":"AAEA,IAAIA,UAAU,GAAG,EAAjB;AACA,MAAMC,WAA0C,GAAG,EAAnD;AAKA,OAAO,SAASC,aAAT,CAAuBC,MAAvB,EAA6C;AAClDH,EAAAA,UAAU,GAAGG,MAAb;AACD;AAKD,OAAO,SAASC,aAAT,GAAiC;AACtC,SAAOJ,UAAP;AACD;AASD,OAAO,SAASK,UAAT,CAAoBC,OAApB,EAAkE;AACvEC,EAAAA,MAAM,CAACC,MAAP,CAAcP,WAAd,EAA2BK,OAA3B;AACD;AAKD,OAAO,SAASG,WAAT,CAAqBC,QAArB,EAA+C;AACpD,OAAK,MAAMC,KAAX,IAAoBV,WAApB,EAAiC;AAC/B,QAAIS,QAAQ,CAACE,UAAT,CAAoBD,KAApB,CAAJ,EAAgC;AAC9B,YAAME,WAAW,GAAGZ,WAAW,CAACU,KAAD,CAA/B;AACAD,MAAAA,QAAQ,GAAGA,QAAQ,CAACI,OAAT,CAAiBH,KAAjB,EAAwBE,WAAxB,CAAX;AACD;AACF;;AACD,MAAI,CAACH,QAAQ,CAACE,UAAT,CAAoB,SAApB,CAAD,IAAmC,CAACF,QAAQ,CAACE,UAAT,CAAoB,UAApB,CAAxC,EAAyE;AACvEF,IAAAA,QAAQ,aAAMV,UAAN,SAAmBU,QAAnB,CAAR;AACD;;AACD,SAAOA,QAAP;AACD","sourcesContent":["// Simple file alias mechanisms for tests.\n\nlet pathPrefix = '';\nconst fileAliases: {[aliasPath: string]: string} = {};\n\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix: string): void {\n pathPrefix = prefix;\n}\n\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix(): string {\n return pathPrefix;\n}\n\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases: {[aliasPath: string]: string}): void {\n Object.assign(fileAliases, aliases);\n}\n\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename: string): string {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = `${pathPrefix}${filename}`;\n }\n return filename;\n}\n"],"file":"file-aliases.js"}
@@ -1,3 +1,7 @@
1
+ export function filename(url) {
2
+ const slashIndex = url && url.lastIndexOf('/');
3
+ return slashIndex >= 0 ? url.substr(slashIndex + 1) : '';
4
+ }
1
5
  export function dirname(url) {
2
6
  const slashIndex = url && url.lastIndexOf('/');
3
7
  return slashIndex >= 0 ? url.substr(0, slashIndex) : '';
@@ -6,11 +10,11 @@ export function join(...parts) {
6
10
  const separator = '/';
7
11
  parts = parts.map((part, index) => {
8
12
  if (index) {
9
- part = part.replace(new RegExp(`^${separator}`), '');
13
+ part = part.replace(new RegExp("^".concat(separator)), '');
10
14
  }
11
15
 
12
16
  if (index !== parts.length - 1) {
13
- part = part.replace(new RegExp(`${separator}$`), '');
17
+ part = part.replace(new RegExp("".concat(separator, "$")), '');
14
18
  }
15
19
 
16
20
  return part;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/path-utils/path.ts"],"names":["dirname","url","slashIndex","lastIndexOf","substr","join","parts","separator","map","part","index","replace","RegExp","length"],"mappings":"AAMA,OAAO,SAASA,OAAT,CAAiBC,GAAjB,EAAsC;AAC3C,QAAMC,UAAU,GAAGD,GAAG,IAAIA,GAAG,CAACE,WAAJ,CAAgB,GAAhB,CAA1B;AACA,SAAOD,UAAU,IAAI,CAAd,GAAkBD,GAAG,CAACG,MAAJ,CAAW,CAAX,EAAcF,UAAd,CAAlB,GAAwD,EAA/D;AACD;AAMD,OAAO,SAASG,IAAT,CAAc,GAAGC,KAAjB,EAA0C;AAC/C,QAAMC,SAAS,GAAG,GAAlB;AACAD,EAAAA,KAAK,GAAGA,KAAK,CAACE,GAAN,CAAU,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACjC,QAAIA,KAAJ,EAAW;AACTD,MAAAA,IAAI,GAAGA,IAAI,CAACE,OAAL,CAAa,IAAIC,MAAJ,CAAY,IAAGL,SAAU,EAAzB,CAAb,EAA0C,EAA1C,CAAP;AACD;;AACD,QAAIG,KAAK,KAAKJ,KAAK,CAACO,MAAN,GAAe,CAA7B,EAAgC;AAC9BJ,MAAAA,IAAI,GAAGA,IAAI,CAACE,OAAL,CAAa,IAAIC,MAAJ,CAAY,GAAEL,SAAU,GAAxB,CAAb,EAA0C,EAA1C,CAAP;AACD;;AACD,WAAOE,IAAP;AACD,GARO,CAAR;AASA,SAAOH,KAAK,CAACD,IAAN,CAAWE,SAAX,CAAP;AACD","sourcesContent":["// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\n\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url: string): string {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr(0, slashIndex as number) : '';\n}\n\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts: string[]): string {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(`^${separator}`), '');\n }\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(`${separator}$`), '');\n }\n return part;\n });\n return parts.join(separator);\n}\n"],"file":"path.js"}
1
+ {"version":3,"sources":["../../../src/lib/path-utils/path.ts"],"names":["filename","url","slashIndex","lastIndexOf","substr","dirname","join","parts","separator","map","part","index","replace","RegExp","length"],"mappings":"AAMA,OAAO,SAASA,QAAT,CAAkBC,GAAlB,EAAuC;AAC5C,QAAMC,UAAU,GAAGD,GAAG,IAAIA,GAAG,CAACE,WAAJ,CAAgB,GAAhB,CAA1B;AACA,SAAOD,UAAU,IAAI,CAAd,GAAkBD,GAAG,CAACG,MAAJ,CAAYF,UAAD,GAAyB,CAApC,CAAlB,GAA2D,EAAlE;AACD;AAMD,OAAO,SAASG,OAAT,CAAiBJ,GAAjB,EAAsC;AAC3C,QAAMC,UAAU,GAAGD,GAAG,IAAIA,GAAG,CAACE,WAAJ,CAAgB,GAAhB,CAA1B;AACA,SAAOD,UAAU,IAAI,CAAd,GAAkBD,GAAG,CAACG,MAAJ,CAAW,CAAX,EAAcF,UAAd,CAAlB,GAAwD,EAA/D;AACD;AAMD,OAAO,SAASI,IAAT,CAAc,GAAGC,KAAjB,EAA0C;AAC/C,QAAMC,SAAS,GAAG,GAAlB;AACAD,EAAAA,KAAK,GAAGA,KAAK,CAACE,GAAN,CAAU,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACjC,QAAIA,KAAJ,EAAW;AACTD,MAAAA,IAAI,GAAGA,IAAI,CAACE,OAAL,CAAa,IAAIC,MAAJ,YAAeL,SAAf,EAAb,EAA0C,EAA1C,CAAP;AACD;;AACD,QAAIG,KAAK,KAAKJ,KAAK,CAACO,MAAN,GAAe,CAA7B,EAAgC;AAC9BJ,MAAAA,IAAI,GAAGA,IAAI,CAACE,OAAL,CAAa,IAAIC,MAAJ,WAAcL,SAAd,OAAb,EAA0C,EAA1C,CAAP;AACD;;AACD,WAAOE,IAAP;AACD,GARO,CAAR;AASA,SAAOH,KAAK,CAACD,IAAN,CAAWE,SAAX,CAAP;AACD","sourcesContent":["// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\n\n/**\n * Replacement for Node.js path.filename\n * @param url\n */\nexport function filename(url: string): string {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr((slashIndex as number) + 1) : '';\n}\n\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url: string): string {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr(0, slashIndex as number) : '';\n}\n\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts: string[]): string {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(`^${separator}`), '');\n }\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(`${separator}$`), '');\n }\n return part;\n });\n return parts.join(separator);\n}\n"],"file":"path.js"}
@@ -89,7 +89,7 @@ async function parseData({
89
89
  data = textDecoder.decode(arrayBuffer);
90
90
  parser = loader.parseTextSync;
91
91
  } else {
92
- throw new Error(`Could not load data with ${loader.name} loader`);
92
+ throw new Error("Could not load data with ".concat(loader.name, " loader"));
93
93
  }
94
94
 
95
95
  options = { ...options,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/worker-loader-utils/create-loader-worker.ts"],"names":["WorkerBody","requestId","createLoaderWorker","loader","self","onmessage","type","payload","input","options","result","parseData","arrayBuffer","context","parse","parseOnMainThread","postMessage","error","message","Error","Promise","resolve","reject","id","onMessage","removeEventListener","addEventListener","data","parser","parseSync","parseTextSync","textDecoder","TextDecoder","decode","name","modules","worker"],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport type {LoaderWithParser} from '../../types';\nimport {WorkerBody} from '@loaders.gl/worker-utils';\n// import {validateLoaderVersion} from './validate-loader-version';\n\nlet requestId = 0;\n\n/**\n * Set up a WebWorkerGlobalScope to talk with the main thread\n * @param loader\n */\nexport function createLoaderWorker(loader: LoaderWithParser) {\n // Check that we are actually in a worker thread\n if (typeof self === 'undefined') {\n return;\n }\n\n WorkerBody.onmessage = async (type, payload) => {\n switch (type) {\n case 'process':\n try {\n // validateLoaderVersion(loader, data.source.split('@')[1]);\n\n const {input, options = {}} = payload;\n\n const result = await parseData({\n loader,\n arrayBuffer: input,\n options,\n context: {\n parse: parseOnMainThread\n }\n });\n WorkerBody.postMessage('done', {result});\n } catch (error) {\n const message = error instanceof Error ? error.message : '';\n WorkerBody.postMessage('error', {error: message});\n }\n break;\n default:\n }\n };\n}\n\nfunction parseOnMainThread(arrayBuffer: ArrayBuffer, options: {[key: string]: any}): Promise<void> {\n return new Promise((resolve, reject) => {\n const id = requestId++;\n\n /**\n */\n const onMessage = (type, payload) => {\n if (payload.id !== id) {\n // not ours\n return;\n }\n\n switch (type) {\n case 'done':\n WorkerBody.removeEventListener(onMessage);\n resolve(payload.result);\n break;\n\n case 'error':\n WorkerBody.removeEventListener(onMessage);\n reject(payload.error);\n break;\n\n default:\n // ignore\n }\n };\n\n WorkerBody.addEventListener(onMessage);\n\n // Ask the main thread to decode data\n const payload = {id, input: arrayBuffer, options};\n WorkerBody.postMessage('process', payload);\n });\n}\n\n// TODO - Support byteOffset and byteLength (enabling parsing of embedded binaries without copies)\n// TODO - Why not support async loader.parse* funcs here?\n// TODO - Why not reuse a common function instead of reimplementing loader.parse* selection logic? Keeping loader small?\n// TODO - Lack of appropriate parser functions can be detected when we create worker, no need to wait until parse\nasync function parseData({loader, arrayBuffer, options, context}) {\n let data;\n let parser;\n if (loader.parseSync || loader.parse) {\n data = arrayBuffer;\n parser = loader.parseSync || loader.parse;\n } else if (loader.parseTextSync) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(arrayBuffer);\n parser = loader.parseTextSync;\n } else {\n throw new Error(`Could not load data with ${loader.name} loader`);\n }\n\n // TODO - proper merge in of loader options...\n options = {\n ...options,\n modules: (loader && loader.options && loader.options.modules) || {},\n worker: false\n };\n\n return await parser(data, {...options}, context, loader);\n}\n"],"file":"create-loader-worker.js"}
1
+ {"version":3,"sources":["../../../src/lib/worker-loader-utils/create-loader-worker.ts"],"names":["WorkerBody","requestId","createLoaderWorker","loader","self","onmessage","type","payload","input","options","result","parseData","arrayBuffer","context","parse","parseOnMainThread","postMessage","error","message","Error","Promise","resolve","reject","id","onMessage","removeEventListener","addEventListener","data","parser","parseSync","parseTextSync","textDecoder","TextDecoder","decode","name","modules","worker"],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport type {LoaderWithParser} from '../../types';\nimport {WorkerBody} from '@loaders.gl/worker-utils';\n// import {validateLoaderVersion} from './validate-loader-version';\n\nlet requestId = 0;\n\n/**\n * Set up a WebWorkerGlobalScope to talk with the main thread\n * @param loader\n */\nexport function createLoaderWorker(loader: LoaderWithParser) {\n // Check that we are actually in a worker thread\n if (typeof self === 'undefined') {\n return;\n }\n\n WorkerBody.onmessage = async (type, payload) => {\n switch (type) {\n case 'process':\n try {\n // validateLoaderVersion(loader, data.source.split('@')[1]);\n\n const {input, options = {}} = payload;\n\n const result = await parseData({\n loader,\n arrayBuffer: input,\n options,\n context: {\n parse: parseOnMainThread\n }\n });\n WorkerBody.postMessage('done', {result});\n } catch (error) {\n const message = error instanceof Error ? error.message : '';\n WorkerBody.postMessage('error', {error: message});\n }\n break;\n default:\n }\n };\n}\n\nfunction parseOnMainThread(arrayBuffer: ArrayBuffer, options: {[key: string]: any}): Promise<void> {\n return new Promise((resolve, reject) => {\n const id = requestId++;\n\n /**\n */\n const onMessage = (type, payload) => {\n if (payload.id !== id) {\n // not ours\n return;\n }\n\n switch (type) {\n case 'done':\n WorkerBody.removeEventListener(onMessage);\n resolve(payload.result);\n break;\n\n case 'error':\n WorkerBody.removeEventListener(onMessage);\n reject(payload.error);\n break;\n\n default:\n // ignore\n }\n };\n\n WorkerBody.addEventListener(onMessage);\n\n // Ask the main thread to decode data\n const payload = {id, input: arrayBuffer, options};\n WorkerBody.postMessage('process', payload);\n });\n}\n\n// TODO - Support byteOffset and byteLength (enabling parsing of embedded binaries without copies)\n// TODO - Why not support async loader.parse* funcs here?\n// TODO - Why not reuse a common function instead of reimplementing loader.parse* selection logic? Keeping loader small?\n// TODO - Lack of appropriate parser functions can be detected when we create worker, no need to wait until parse\nasync function parseData({loader, arrayBuffer, options, context}) {\n let data;\n let parser;\n if (loader.parseSync || loader.parse) {\n data = arrayBuffer;\n parser = loader.parseSync || loader.parse;\n } else if (loader.parseTextSync) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(arrayBuffer);\n parser = loader.parseTextSync;\n } else {\n throw new Error(`Could not load data with ${loader.name} loader`);\n }\n\n // TODO - proper merge in of loader options...\n options = {\n ...options,\n modules: (loader && loader.options && loader.options.modules) || {},\n worker: false\n };\n\n return await parser(data, {...options}, context, loader);\n}\n"],"file":"create-loader-worker.js"}
@@ -31,7 +31,7 @@ async function onMessage(parseOnMainThread, job, type, payload) {
31
31
  break;
32
32
 
33
33
  case 'error':
34
- job.error(payload.error);
34
+ job.error(new Error(payload.error));
35
35
  break;
36
36
 
37
37
  case 'process':
@@ -58,7 +58,7 @@ async function onMessage(parseOnMainThread, job, type, payload) {
58
58
  break;
59
59
 
60
60
  default:
61
- console.warn(`parse-with-worker unknown message ${type}`);
61
+ console.warn("parse-with-worker unknown message ".concat(type));
62
62
  }
63
63
  }
64
64
  //# sourceMappingURL=parse-with-worker.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/worker-loader-utils/parse-with-worker.ts"],"names":["WorkerFarm","getWorkerURL","canParseWithWorker","loader","options","isSupported","worker","parseWithWorker","data","context","parseOnMainThread","name","id","url","workerFarm","getWorkerFarm","workerPool","getWorkerPool","JSON","parse","stringify","job","startJob","onMessage","bind","postMessage","input","result","type","payload","done","error","message","Error","console","warn"],"mappings":"AAEA,SAAQA,UAAR,EAAoBC,YAApB,QAAuC,0BAAvC;AAOA,OAAO,SAASC,kBAAT,CAA4BC,MAA5B,EAA4CC,OAA5C,EAAqE;AAC1E,MAAI,CAACJ,UAAU,CAACK,WAAX,EAAL,EAA+B;AAC7B,WAAO,KAAP;AACD;;AAED,SAAOF,MAAM,CAACG,MAAP,KAAiBF,OAAjB,aAAiBA,OAAjB,uBAAiBA,OAAO,CAAEE,MAA1B,CAAP;AACD;AAMD,OAAO,eAAeC,eAAf,CACLJ,MADK,EAELK,IAFK,EAGLJ,OAHK,EAILK,OAJK,EAKLC,iBALK,EAML;AACA,QAAMC,IAAI,GAAGR,MAAM,CAACS,EAApB;AACA,QAAMC,GAAG,GAAGZ,YAAY,CAACE,MAAD,EAASC,OAAT,CAAxB;AAEA,QAAMU,UAAU,GAAGd,UAAU,CAACe,aAAX,CAAyBX,OAAzB,CAAnB;AACA,QAAMY,UAAU,GAAGF,UAAU,CAACG,aAAX,CAAyB;AAACN,IAAAA,IAAD;AAAOE,IAAAA;AAAP,GAAzB,CAAnB;AAIAT,EAAAA,OAAO,GAAGc,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAehB,OAAf,CAAX,CAAV;AAEA,QAAMiB,GAAG,GAAG,MAAML,UAAU,CAACM,QAAX,CAChB,mBADgB,EAGhBC,SAAS,CAACC,IAAV,CAAe,IAAf,EAAqBd,iBAArB,CAHgB,CAAlB;AAMAW,EAAAA,GAAG,CAACI,WAAJ,CAAgB,SAAhB,EAA2B;AAEzBC,IAAAA,KAAK,EAAElB,IAFkB;AAGzBJ,IAAAA;AAHyB,GAA3B;AAMA,QAAMuB,MAAM,GAAG,MAAMN,GAAG,CAACM,MAAzB;AACA,SAAO,MAAMA,MAAM,CAACA,MAApB;AACD;;AAQD,eAAeJ,SAAf,CACEb,iBADF,EAEEW,GAFF,EAGEO,IAHF,EAIEC,OAJF,EAKE;AACA,UAAQD,IAAR;AACE,SAAK,MAAL;AACEP,MAAAA,GAAG,CAACS,IAAJ,CAASD,OAAT;AACA;;AAEF,SAAK,OAAL;AACER,MAAAA,GAAG,CAACU,KAAJ,CAAUF,OAAO,CAACE,KAAlB;AACA;;AAEF,SAAK,SAAL;AAEE,YAAM;AAACnB,QAAAA,EAAD;AAAKc,QAAAA,KAAL;AAAYtB,QAAAA;AAAZ,UAAuByB,OAA7B;;AACA,UAAI;AACF,cAAMF,MAAM,GAAG,MAAMjB,iBAAiB,CAACgB,KAAD,EAAQtB,OAAR,CAAtC;AACAiB,QAAAA,GAAG,CAACI,WAAJ,CAAgB,MAAhB,EAAwB;AAACb,UAAAA,EAAD;AAAKe,UAAAA;AAAL,SAAxB;AACD,OAHD,CAGE,OAAOI,KAAP,EAAc;AACd,cAAMC,OAAO,GAAGD,KAAK,YAAYE,KAAjB,GAAyBF,KAAK,CAACC,OAA/B,GAAyC,eAAzD;AACAX,QAAAA,GAAG,CAACI,WAAJ,CAAgB,OAAhB,EAAyB;AAACb,UAAAA,EAAD;AAAKmB,UAAAA,KAAK,EAAEC;AAAZ,SAAzB;AACD;;AACD;;AAEF;AAEEE,MAAAA,OAAO,CAACC,IAAR,CAAc,qCAAoCP,IAAK,EAAvD;AAvBJ;AAyBD","sourcesContent":["import type {WorkerJob, WorkerMessageType, WorkerMessagePayload} from '@loaders.gl/worker-utils';\nimport type {Loader, LoaderOptions, LoaderContext} from '../../types';\nimport {WorkerFarm, getWorkerURL} from '@loaders.gl/worker-utils';\n\n/**\n * Determines if a loader can parse with worker\n * @param loader\n * @param options\n */\nexport function canParseWithWorker(loader: Loader, options?: LoaderOptions) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n\n return loader.worker && options?.worker;\n}\n\n/**\n * this function expects that the worker function sends certain messages,\n * this can be automated if the worker is wrapper by a call to createLoaderWorker in @loaders.gl/loader-utils.\n */\nexport async function parseWithWorker(\n loader: Loader,\n data,\n options?: LoaderOptions,\n context?: LoaderContext,\n parseOnMainThread?: (arrayBuffer: ArrayBuffer, options: {[key: string]: any}) => Promise<void>\n) {\n const name = loader.id; // TODO\n const url = getWorkerURL(loader, options);\n\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const workerPool = workerFarm.getWorkerPool({name, url});\n\n // options.log object contains functions which cannot be transferred\n // TODO - decide how to handle logging on workers\n options = JSON.parse(JSON.stringify(options));\n\n const job = await workerPool.startJob(\n 'process-on-worker',\n // eslint-disable-next-line\n onMessage.bind(null, parseOnMainThread)\n );\n\n job.postMessage('process', {\n // @ts-ignore\n input: data,\n options\n });\n\n const result = await job.result;\n return await result.result;\n}\n\n/**\n * Handle worker's responses to the main thread\n * @param job\n * @param type\n * @param payload\n */\nasync function onMessage(\n parseOnMainThread,\n job: WorkerJob,\n type: WorkerMessageType,\n payload: WorkerMessagePayload\n) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n\n case 'error':\n job.error(payload.error);\n break;\n\n case 'process':\n // Worker is asking for main thread to parseO\n const {id, input, options} = payload;\n try {\n const result = await parseOnMainThread(input, options);\n job.postMessage('done', {id, result});\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', {id, error: message});\n }\n break;\n\n default:\n // eslint-disable-next-line\n console.warn(`parse-with-worker unknown message ${type}`);\n }\n}\n"],"file":"parse-with-worker.js"}
1
+ {"version":3,"sources":["../../../src/lib/worker-loader-utils/parse-with-worker.ts"],"names":["WorkerFarm","getWorkerURL","canParseWithWorker","loader","options","isSupported","worker","parseWithWorker","data","context","parseOnMainThread","name","id","url","workerFarm","getWorkerFarm","workerPool","getWorkerPool","JSON","parse","stringify","job","startJob","onMessage","bind","postMessage","input","result","type","payload","done","error","Error","message","console","warn"],"mappings":"AAEA,SAAQA,UAAR,EAAoBC,YAApB,QAAuC,0BAAvC;AAOA,OAAO,SAASC,kBAAT,CAA4BC,MAA5B,EAA4CC,OAA5C,EAAqE;AAC1E,MAAI,CAACJ,UAAU,CAACK,WAAX,EAAL,EAA+B;AAC7B,WAAO,KAAP;AACD;;AAED,SAAOF,MAAM,CAACG,MAAP,KAAiBF,OAAjB,aAAiBA,OAAjB,uBAAiBA,OAAO,CAAEE,MAA1B,CAAP;AACD;AAMD,OAAO,eAAeC,eAAf,CACLJ,MADK,EAELK,IAFK,EAGLJ,OAHK,EAILK,OAJK,EAKLC,iBALK,EAML;AACA,QAAMC,IAAI,GAAGR,MAAM,CAACS,EAApB;AACA,QAAMC,GAAG,GAAGZ,YAAY,CAACE,MAAD,EAASC,OAAT,CAAxB;AAEA,QAAMU,UAAU,GAAGd,UAAU,CAACe,aAAX,CAAyBX,OAAzB,CAAnB;AACA,QAAMY,UAAU,GAAGF,UAAU,CAACG,aAAX,CAAyB;AAACN,IAAAA,IAAD;AAAOE,IAAAA;AAAP,GAAzB,CAAnB;AAIAT,EAAAA,OAAO,GAAGc,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAehB,OAAf,CAAX,CAAV;AAEA,QAAMiB,GAAG,GAAG,MAAML,UAAU,CAACM,QAAX,CAChB,mBADgB,EAGhBC,SAAS,CAACC,IAAV,CAAe,IAAf,EAAqBd,iBAArB,CAHgB,CAAlB;AAMAW,EAAAA,GAAG,CAACI,WAAJ,CAAgB,SAAhB,EAA2B;AAEzBC,IAAAA,KAAK,EAAElB,IAFkB;AAGzBJ,IAAAA;AAHyB,GAA3B;AAMA,QAAMuB,MAAM,GAAG,MAAMN,GAAG,CAACM,MAAzB;AAEA,SAAO,MAAMA,MAAM,CAACA,MAApB;AACD;;AAQD,eAAeJ,SAAf,CACEb,iBADF,EAEEW,GAFF,EAGEO,IAHF,EAIEC,OAJF,EAKE;AACA,UAAQD,IAAR;AACE,SAAK,MAAL;AACEP,MAAAA,GAAG,CAACS,IAAJ,CAASD,OAAT;AACA;;AAEF,SAAK,OAAL;AACER,MAAAA,GAAG,CAACU,KAAJ,CAAU,IAAIC,KAAJ,CAAUH,OAAO,CAACE,KAAlB,CAAV;AACA;;AAEF,SAAK,SAAL;AAEE,YAAM;AAACnB,QAAAA,EAAD;AAAKc,QAAAA,KAAL;AAAYtB,QAAAA;AAAZ,UAAuByB,OAA7B;;AACA,UAAI;AACF,cAAMF,MAAM,GAAG,MAAMjB,iBAAiB,CAACgB,KAAD,EAAQtB,OAAR,CAAtC;AACAiB,QAAAA,GAAG,CAACI,WAAJ,CAAgB,MAAhB,EAAwB;AAACb,UAAAA,EAAD;AAAKe,UAAAA;AAAL,SAAxB;AACD,OAHD,CAGE,OAAOI,KAAP,EAAc;AACd,cAAME,OAAO,GAAGF,KAAK,YAAYC,KAAjB,GAAyBD,KAAK,CAACE,OAA/B,GAAyC,eAAzD;AACAZ,QAAAA,GAAG,CAACI,WAAJ,CAAgB,OAAhB,EAAyB;AAACb,UAAAA,EAAD;AAAKmB,UAAAA,KAAK,EAAEE;AAAZ,SAAzB;AACD;;AACD;;AAEF;AAEEC,MAAAA,OAAO,CAACC,IAAR,6CAAkDP,IAAlD;AAvBJ;AAyBD","sourcesContent":["import type {WorkerJob, WorkerMessageType, WorkerMessagePayload} from '@loaders.gl/worker-utils';\nimport type {Loader, LoaderOptions, LoaderContext} from '../../types';\nimport {WorkerFarm, getWorkerURL} from '@loaders.gl/worker-utils';\n\n/**\n * Determines if a loader can parse with worker\n * @param loader\n * @param options\n */\nexport function canParseWithWorker(loader: Loader, options?: LoaderOptions) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n\n return loader.worker && options?.worker;\n}\n\n/**\n * this function expects that the worker function sends certain messages,\n * this can be automated if the worker is wrapper by a call to createLoaderWorker in @loaders.gl/loader-utils.\n */\nexport async function parseWithWorker(\n loader: Loader,\n data: any,\n options?: LoaderOptions,\n context?: LoaderContext,\n parseOnMainThread?: (arrayBuffer: ArrayBuffer, options: {[key: string]: any}) => Promise<void>\n) {\n const name = loader.id; // TODO\n const url = getWorkerURL(loader, options);\n\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const workerPool = workerFarm.getWorkerPool({name, url});\n\n // options.log object contains functions which cannot be transferred\n // TODO - decide how to handle logging on workers\n options = JSON.parse(JSON.stringify(options));\n\n const job = await workerPool.startJob(\n 'process-on-worker',\n // @ts-expect-error\n onMessage.bind(null, parseOnMainThread) // eslint-disable-this-line\n );\n\n job.postMessage('process', {\n // @ts-ignore\n input: data,\n options\n });\n\n const result = await job.result;\n // TODO - what is going on here?\n return await result.result;\n}\n\n/**\n * Handle worker's responses to the main thread\n * @param job\n * @param type\n * @param payload\n */\nasync function onMessage(\n parseOnMainThread: (arrayBuffer: ArrayBuffer, options?: {[key: string]: any}) => Promise<void>,\n job: WorkerJob,\n type: WorkerMessageType,\n payload: WorkerMessagePayload\n) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n\n case 'error':\n job.error(new Error(payload.error));\n break;\n\n case 'process':\n // Worker is asking for main thread to parseO\n const {id, input, options} = payload;\n try {\n const result = await parseOnMainThread(input, options);\n job.postMessage('done', {id, result});\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', {id, error: message});\n }\n break;\n\n default:\n // eslint-disable-next-line\n console.warn(`parse-with-worker unknown message ${type}`);\n }\n}\n"],"file":"parse-with-worker.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/loader-utils",
3
- "version": "3.1.0-alpha.2",
3
+ "version": "4.0.0-alpha.3",
4
4
  "description": "Framework-independent loaders for 3D graphics formats",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -27,14 +27,18 @@
27
27
  "README.md"
28
28
  ],
29
29
  "browser": {
30
- "./src/lib/node/buffer-utils.node.ts": false,
31
- "./src/lib/node/buffer-utils.node.js": false,
32
- "./dist/es5/lib/node/buffer-utils.node.js": false,
33
- "./dist/esm/lib/node/buffer-utils.node.js": false,
30
+ "./src/lib/node/buffer.ts": false,
31
+ "./src/lib/node/buffer.js": false,
32
+ "./dist/es5/lib/node/buffer.js": false,
33
+ "./dist/esm/lib/node/buffer.js": false,
34
34
  "./src/lib/node/fs.ts": false,
35
35
  "./src/lib/node/fs.js": false,
36
36
  "./dist/es5/lib/node/fs.js": false,
37
37
  "./dist/esm/lib/node/fs.js": false,
38
+ "./src/lib/node/util.ts": false,
39
+ "./src/lib/node/util.js": false,
40
+ "./dist/es5/lib/node/util.js": false,
41
+ "./dist/esm/lib/node/util.js": false,
38
42
  "fs": false,
39
43
  "util": false
40
44
  },
@@ -44,8 +48,8 @@
44
48
  },
45
49
  "dependencies": {
46
50
  "@babel/runtime": "^7.3.1",
47
- "@loaders.gl/worker-utils": "3.1.0-alpha.2",
51
+ "@loaders.gl/worker-utils": "4.0.0-alpha.3",
48
52
  "@probe.gl/stats": "^3.4.0"
49
53
  },
50
- "gitHead": "ca83b8f05a6874db93051d446266d9ea360affb2"
54
+ "gitHead": "ded84630d02ba4fc97277ebecea3e42ae1bc2616"
51
55
  }
package/src/index.ts CHANGED
@@ -64,17 +64,35 @@ export {forEach, concatenateArrayBuffersAsync} from './lib/iterators/async-itera
64
64
  // REQUEST UTILS
65
65
  export {default as RequestScheduler} from './lib/request-utils/request-scheduler';
66
66
 
67
- // NODE `path`` REPLACEMENT
68
- import * as path from './lib/path-utils/path';
69
- export {path};
67
+ // PATH HELPERS
70
68
  export {setPathPrefix, getPathPrefix, resolvePath} from './lib/path-utils/file-aliases';
71
69
  export {addAliases as _addAliases} from './lib/path-utils/file-aliases';
72
70
 
73
- // NODE `fs` WRAPPERS
74
- import * as fs from './lib/node/fs';
75
- export {fs};
71
+ // MICRO LOADERS
72
+ export {JSONLoader} from './json-loader';
73
+
74
+ // NODE support
75
+
76
+ // Node.js emulation (can be used in browser)
77
+
78
+ // `path` replacement (avoids bundling big path polyfill)
79
+ import * as path from './lib/path-utils/path';
80
+ export {path};
76
81
 
77
- // NODE `buffer` WRAPPERS
82
+ // Avoid direct use of `Buffer` which pulls in 50KB polyfill
78
83
  export {isBuffer, toBuffer, bufferToArrayBuffer} from './lib/binary-utils/buffer-utils';
79
84
 
80
- export {JSONLoader} from './json-loader';
85
+ // Note.js wrappers (can be safely imported, but not used in browser)
86
+
87
+ // Use instead of importing 'util'
88
+ import * as util from './lib/node/util';
89
+ export {util};
90
+ // TODO - remove
91
+ export {promisify} from './lib/node/util';
92
+
93
+ // Use instead of importing 'fs';`
94
+ import * as fs from './lib/node/fs';
95
+ export {fs};
96
+
97
+ // EXPERIMENTAL
98
+ export {default as _NodeFileSystem} from './lib/filesystems/node-filesystem';
@@ -1,4 +1,4 @@
1
- import * as node from '../node/buffer-utils.node';
1
+ import * as node from '../node/buffer';
2
2
 
3
3
  /**
4
4
  * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)
@@ -20,7 +20,7 @@ export {self_ as self, window_ as window, global_ as global, document_ as docume
20
20
  /** true if running in a browser */
21
21
  export const isBrowser: boolean =
22
22
  // @ts-ignore process does not exist on browser
23
- typeof process !== 'object' || String(process) !== '[object process]' || process.browser;
23
+ Boolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);
24
24
 
25
25
  /** true if running in a worker thread */
26
26
  export const isWorker: boolean = typeof importScripts === 'function';
@@ -0,0 +1,79 @@
1
+ import * as fs from '../node/fs';
2
+ import {IFileSystem, IRandomAccessReadFileSystem} from '../../types';
3
+ // import {fetchFile} from "../fetch/fetch-file"
4
+ // import {selectLoader} from "../api/select-loader";
5
+
6
+ type Stat = {
7
+ size: number;
8
+ isDirectory: () => boolean;
9
+ info?: fs.Stats;
10
+ };
11
+
12
+ type ReadOptions = {
13
+ buffer?: Buffer;
14
+ offset?: number;
15
+ length?: number;
16
+ position?: number;
17
+ };
18
+
19
+ /**
20
+ * FileSystem pass-through for Node.js
21
+ * Compatible with BrowserFileSystem.
22
+ * @param options
23
+ */
24
+ export default class NodeFileSystem implements IFileSystem, IRandomAccessReadFileSystem {
25
+ // implements IFileSystem
26
+ constructor(options: {[key: string]: any}) {
27
+ this.fetch = options._fetch;
28
+ }
29
+
30
+ async readdir(dirname = '.', options?: {}): Promise<any[]> {
31
+ return await fs.readdir(dirname, options);
32
+ }
33
+
34
+ async stat(path: string, options?: {}): Promise<Stat> {
35
+ const info = await fs.stat(path, options);
36
+ return {size: Number(info.size), isDirectory: () => false, info};
37
+ }
38
+
39
+ async fetch(path: string, options: {[key: string]: any}) {
40
+ // Falls back to handle https:/http:/data: etc fetches
41
+ // eslint-disable-next-line
42
+ const fallbackFetch = options.fetch || this.fetch;
43
+ return fallbackFetch(path, options);
44
+ }
45
+
46
+ // implements IRandomAccessFileSystem
47
+ async open(path: string, flags: string | number, mode?: any): Promise<number> {
48
+ return await fs.open(path, flags);
49
+ }
50
+
51
+ async close(fd: number): Promise<void> {
52
+ return await fs.close(fd);
53
+ }
54
+
55
+ async fstat(fd: number): Promise<Stat> {
56
+ const info = await fs.fstat(fd);
57
+ return info;
58
+ }
59
+
60
+ async read(
61
+ fd: number,
62
+ // @ts-ignore Possibly null
63
+ {buffer = null, offset = 0, length = buffer.byteLength, position = null}: ReadOptions
64
+ ): Promise<{bytesRead: number; buffer: Buffer}> {
65
+ let totalBytesRead = 0;
66
+ // Read in loop until we get required number of bytes
67
+ while (totalBytesRead < length) {
68
+ const {bytesRead} = await fs.read(
69
+ fd,
70
+ buffer,
71
+ offset + totalBytesRead,
72
+ length - totalBytesRead,
73
+ position + totalBytesRead
74
+ );
75
+ totalBytesRead += bytesRead;
76
+ }
77
+ return {bytesRead: totalBytesRead, buffer};
78
+ }
79
+ }
File without changes
@@ -1,22 +1,38 @@
1
1
  // fs wrapper (promisified fs + avoids bundling fs in browsers)
2
2
  import fs from 'fs';
3
- import {toArrayBuffer} from './buffer-utils.node';
4
- import {promisify} from 'util';
3
+ import {toArrayBuffer} from './buffer';
4
+ import {promisify} from './util';
5
5
 
6
- const error = (fsFunction) => () => {
7
- throw new Error(`${fsFunction} not available in browser`);
8
- };
6
+ export type {Stats} from 'fs';
9
7
 
10
- export const isSupported = Boolean(fs);
8
+ // paths
9
+
10
+ /** Wrapper for Node.js fs method */
11
+ export const readdir = promisify(fs.readdir);
12
+ /** Wrapper for Node.js fs method */
13
+ export const stat = promisify(fs.stat);
14
+
15
+ /** Wrapper for Node.js fs method */
16
+ export const readFile = promisify(fs.readFile);
17
+ /** Wrapper for Node.js fs method */
18
+ export const readFileSync = fs.readFileSync;
19
+ /** Wrapper for Node.js fs method */
20
+ export const writeFile = promisify(fs.writeFile);
21
+ /** Wrapper for Node.js fs method */
22
+ export const writeFileSync = fs.writeFileSync;
11
23
 
12
- export const open = fs?.open ? promisify(fs.open) : error('fs.open');
13
- export const close = fs?.close ? promisify(fs.close) : error('fs.close');
14
- export const read = fs?.read ? promisify(fs.read) : error('fs.read');
24
+ // file descriptors
15
25
 
16
- export const readFile = fs?.readFile ? promisify(fs.readFile) : error('fs.readFile');
17
- export const readFileSync = fs?.readFileSync ? fs.readFileSync : error('fs.readFileSync');
18
- export const writeFile = fs?.writeFile ? promisify(fs.writeFile) : error('fs.writeFile');
19
- export const writeFileSync = fs?.writeFileSync ? fs.writeFileSync : error('fs.writeFileSync');
26
+ /** Wrapper for Node.js fs method */
27
+ export const open = promisify(fs.open);
28
+ /** Wrapper for Node.js fs method */
29
+ export const close = promisify(fs.close);
30
+ /** Wrapper for Node.js fs method */
31
+ export const read = promisify(fs.read);
32
+ /** Wrapper for Node.js fs method */
33
+ export const fstat = promisify(fs.fstat);
34
+
35
+ export const isSupported = Boolean(fs);
20
36
 
21
37
  export async function _readToArrayBuffer(fd: number, start: number, length: number) {
22
38
  const buffer = Buffer.alloc(length);
@@ -0,0 +1,4 @@
1
+ import * as util from 'util';
2
+
3
+ /** Wrapper for Node.js promisify */
4
+ export const promisify = util.promisify;
@@ -1,5 +1,14 @@
1
1
  // Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.
2
2
 
3
+ /**
4
+ * Replacement for Node.js path.filename
5
+ * @param url
6
+ */
7
+ export function filename(url: string): string {
8
+ const slashIndex = url && url.lastIndexOf('/');
9
+ return slashIndex >= 0 ? url.substr((slashIndex as number) + 1) : '';
10
+ }
11
+
3
12
  /**
4
13
  * Replacement for Node.js path.dirname
5
14
  * @param url
@@ -21,7 +21,7 @@ export function canParseWithWorker(loader: Loader, options?: LoaderOptions) {
21
21
  */
22
22
  export async function parseWithWorker(
23
23
  loader: Loader,
24
- data,
24
+ data: any,
25
25
  options?: LoaderOptions,
26
26
  context?: LoaderContext,
27
27
  parseOnMainThread?: (arrayBuffer: ArrayBuffer, options: {[key: string]: any}) => Promise<void>
@@ -38,8 +38,8 @@ export async function parseWithWorker(
38
38
 
39
39
  const job = await workerPool.startJob(
40
40
  'process-on-worker',
41
- // eslint-disable-next-line
42
- onMessage.bind(null, parseOnMainThread)
41
+ // @ts-expect-error
42
+ onMessage.bind(null, parseOnMainThread) // eslint-disable-this-line
43
43
  );
44
44
 
45
45
  job.postMessage('process', {
@@ -49,6 +49,7 @@ export async function parseWithWorker(
49
49
  });
50
50
 
51
51
  const result = await job.result;
52
+ // TODO - what is going on here?
52
53
  return await result.result;
53
54
  }
54
55
 
@@ -59,7 +60,7 @@ export async function parseWithWorker(
59
60
  * @param payload
60
61
  */
61
62
  async function onMessage(
62
- parseOnMainThread,
63
+ parseOnMainThread: (arrayBuffer: ArrayBuffer, options?: {[key: string]: any}) => Promise<void>,
63
64
  job: WorkerJob,
64
65
  type: WorkerMessageType,
65
66
  payload: WorkerMessagePayload
@@ -70,7 +71,7 @@ async function onMessage(
70
71
  break;
71
72
 
72
73
  case 'error':
73
- job.error(payload.error);
74
+ job.error(new Error(payload.error));
74
75
  break;
75
76
 
76
77
  case 'process':
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/node/buffer-utils.node.ts"],"names":["assert","toArrayBuffer","buffer","Buffer","isBuffer","typedArray","Uint8Array","byteOffset","length","slice","toBuffer","binaryData","ArrayBuffer","isView","byteLength","view","i"],"mappings":"AAGA,SAAQA,MAAR,QAAqB,qBAArB;AAKA,OAAO,SAASC,aAAT,CAAuBC,MAAvB,EAA+B;AAEpC,MAAIC,MAAM,CAACC,QAAP,CAAgBF,MAAhB,CAAJ,EAA6B;AAC3B,UAAMG,UAAU,GAAG,IAAIC,UAAJ,CAAeJ,MAAM,CAACA,MAAtB,EAA8BA,MAAM,CAACK,UAArC,EAAiDL,MAAM,CAACM,MAAxD,CAAnB;AACA,WAAOH,UAAU,CAACI,KAAX,GAAmBP,MAA1B;AACD;;AACD,SAAOA,MAAP;AACD;AAKD,OAAO,SAASQ,QAAT,CAAkBC,UAAlB,EAA8B;AACnC,MAAIC,WAAW,CAACC,MAAZ,CAAmBF,UAAnB,CAAJ,EAAoC;AAClCA,IAAAA,UAAU,GAAGA,UAAU,CAACT,MAAxB;AACD;;AAED,MAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCQ,UAAU,YAAYC,WAA3D,EAAwE;AACtE,UAAMV,MAAM,GAAG,IAAIC,MAAJ,CAAWQ,UAAU,CAACG,UAAtB,CAAf;AACA,UAAMC,IAAI,GAAG,IAAIT,UAAJ,CAAeK,UAAf,CAAb;;AACA,SAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACM,MAA3B,EAAmC,EAAEQ,CAArC,EAAwC;AACtCd,MAAAA,MAAM,CAACc,CAAD,CAAN,GAAYD,IAAI,CAACC,CAAD,CAAhB;AACD;;AACD,WAAOd,MAAP;AACD;;AAED,SAAOF,MAAM,CAAC,KAAD,CAAb;AACD","sourcesContent":["// Isolates Buffer references to ensure they are only bundled under Node.js (avoids big webpack polyfill)\n// this file is not visible to webpack (it is excluded in the package.json \"browser\" field).\n\nimport {assert} from '../env-utils/assert';\n\n/**\n * Convert Buffer to ArrayBuffer\n */\nexport function toArrayBuffer(buffer) {\n // TODO - per docs we should just be able to call buffer.buffer, but there are issues\n if (Buffer.isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n return buffer;\n}\n\n/**\n * Convert (copy) ArrayBuffer to Buffer\n */\nexport function toBuffer(binaryData) {\n if (ArrayBuffer.isView(binaryData)) {\n binaryData = binaryData.buffer;\n }\n\n if (typeof Buffer !== 'undefined' && binaryData instanceof ArrayBuffer) {\n const buffer = new Buffer(binaryData.byteLength);\n const view = new Uint8Array(binaryData);\n for (let i = 0; i < buffer.length; ++i) {\n buffer[i] = view[i];\n }\n return buffer;\n }\n\n return assert(false);\n}\n"],"file":"buffer-utils.node.js"}