@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.
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/json-loader.js +1 -1
- package/dist/lib/binary-utils/buffer-utils.js +1 -1
- package/dist/lib/binary-utils/buffer-utils.js.map +1 -1
- package/dist/lib/env-utils/globals.js +1 -1
- package/dist/lib/env-utils/globals.js.map +1 -1
- package/dist/lib/filesystems/node-filesystem.js +60 -0
- package/dist/lib/filesystems/node-filesystem.js.map +1 -0
- package/dist/lib/node/{buffer-utils.node.js → buffer.js} +1 -1
- package/dist/lib/node/buffer.js.map +1 -0
- package/dist/lib/node/fs.js +12 -14
- package/dist/lib/node/fs.js.map +1 -1
- package/dist/lib/node/util.js +3 -0
- package/dist/lib/node/util.js.map +1 -0
- package/dist/lib/parser-utils/parse-json.js +1 -1
- package/dist/lib/parser-utils/parse-json.js.map +1 -1
- package/dist/lib/path-utils/file-aliases.js +1 -1
- package/dist/lib/path-utils/file-aliases.js.map +1 -1
- package/dist/lib/path-utils/path.js +6 -2
- package/dist/lib/path-utils/path.js.map +1 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.js +1 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.js.map +1 -1
- package/dist/lib/worker-loader-utils/parse-with-worker.js +2 -2
- package/dist/lib/worker-loader-utils/parse-with-worker.js.map +1 -1
- package/package.json +11 -7
- package/src/index.ts +26 -8
- package/src/lib/binary-utils/buffer-utils.ts +1 -1
- package/src/lib/env-utils/globals.ts +1 -1
- package/src/lib/filesystems/node-filesystem.ts +79 -0
- package/src/lib/node/{buffer-utils.node.ts → buffer.ts} +0 -0
- package/src/lib/node/fs.ts +29 -13
- package/src/lib/node/util.ts +4 -0
- package/src/lib/path-utils/path.ts +9 -0
- package/src/lib/worker-loader-utils/parse-with-worker.ts +6 -5
- 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 {
|
|
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","
|
|
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"}
|
package/dist/json-loader.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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"}
|
|
@@ -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"}
|
package/dist/lib/node/fs.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
|
-
import { toArrayBuffer } from './buffer
|
|
3
|
-
import { promisify } from 'util';
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
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 {
|
package/dist/lib/node/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/node/fs.ts"],"names":["fs","toArrayBuffer","promisify","
|
|
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 @@
|
|
|
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(
|
|
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,
|
|
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"}
|
|
@@ -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,
|
|
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(
|
|
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(
|
|
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":["
|
|
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(
|
|
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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
|
|
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(
|
|
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","
|
|
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
|
+
"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
|
|
31
|
-
"./src/lib/node/buffer
|
|
32
|
-
"./dist/es5/lib/node/buffer
|
|
33
|
-
"./dist/esm/lib/node/buffer
|
|
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": "
|
|
51
|
+
"@loaders.gl/worker-utils": "4.0.0-alpha.3",
|
|
48
52
|
"@probe.gl/stats": "^3.4.0"
|
|
49
53
|
},
|
|
50
|
-
"gitHead": "
|
|
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
|
-
//
|
|
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
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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';
|
|
@@ -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
|
package/src/lib/node/fs.ts
CHANGED
|
@@ -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
|
|
4
|
-
import {promisify} from 'util';
|
|
3
|
+
import {toArrayBuffer} from './buffer';
|
|
4
|
+
import {promisify} from './util';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
throw new Error(`${fsFunction} not available in browser`);
|
|
8
|
-
};
|
|
6
|
+
export type {Stats} from 'fs';
|
|
9
7
|
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
export const
|
|
18
|
-
|
|
19
|
-
export const
|
|
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);
|
|
@@ -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
|
-
//
|
|
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"}
|