@loaders.gl/compression 3.1.0-alpha.5 → 3.1.0-beta.4

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 (73) hide show
  1. package/dist/brotli/decode.d.ts +5 -0
  2. package/dist/brotli/decode.d.ts.map +1 -0
  3. package/dist/brotli/decode.js +2346 -0
  4. package/dist/bundle.d.ts +1 -0
  5. package/dist/bundle.d.ts.map +1 -0
  6. package/dist/bundle.js +5 -0
  7. package/dist/compression-worker.d.ts +1 -0
  8. package/dist/compression-worker.d.ts.map +1 -0
  9. package/dist/compression-worker.js +4 -13
  10. package/dist/compression-worker.js.map +7 -1
  11. package/dist/dist.min.js +9 -2
  12. package/dist/dist.min.js.map +7 -1
  13. package/dist/es5/brotli/decode.js +2220 -0
  14. package/dist/es5/brotli/decode.js.map +1 -0
  15. package/dist/es5/compression-worker.js +1 -1
  16. package/dist/es5/compression-worker.js.map +1 -1
  17. package/dist/es5/lib/brotli-compression.js +17 -2
  18. package/dist/es5/lib/brotli-compression.js.map +1 -1
  19. package/dist/es5/lib/zstd-compression.js +1 -1
  20. package/dist/es5/lib/zstd-compression.js.map +1 -1
  21. package/dist/es5/workers/worker.js +1 -12
  22. package/dist/es5/workers/worker.js.map +1 -1
  23. package/dist/esm/brotli/decode.js +2213 -0
  24. package/dist/esm/brotli/decode.js.map +1 -0
  25. package/dist/esm/compression-worker.js +1 -1
  26. package/dist/esm/compression-worker.js.map +1 -1
  27. package/dist/esm/lib/brotli-compression.js +16 -2
  28. package/dist/esm/lib/brotli-compression.js.map +1 -1
  29. package/dist/esm/lib/zstd-compression.js +1 -1
  30. package/dist/esm/lib/zstd-compression.js.map +1 -1
  31. package/dist/esm/workers/worker.js +1 -10
  32. package/dist/esm/workers/worker.js.map +1 -1
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +24 -0
  36. package/dist/lib/brotli-compression.d.ts +1 -0
  37. package/dist/lib/brotli-compression.d.ts.map +1 -0
  38. package/dist/lib/brotli-compression.js +91 -0
  39. package/dist/lib/compression.d.ts +1 -0
  40. package/dist/lib/compression.d.ts.map +1 -0
  41. package/dist/lib/compression.js +57 -0
  42. package/dist/lib/deflate-compression.d.ts +1 -0
  43. package/dist/lib/deflate-compression.d.ts.map +1 -0
  44. package/dist/lib/deflate-compression.js +135 -0
  45. package/dist/lib/gzip-compression.d.ts +1 -0
  46. package/dist/lib/gzip-compression.d.ts.map +1 -0
  47. package/dist/lib/gzip-compression.js +17 -0
  48. package/dist/lib/lz4-compression.d.ts +1 -0
  49. package/dist/lib/lz4-compression.d.ts.map +1 -0
  50. package/dist/lib/lz4-compression.js +141 -0
  51. package/dist/lib/lzo-compression.d.ts +1 -0
  52. package/dist/lib/lzo-compression.d.ts.map +1 -0
  53. package/dist/lib/lzo-compression.js +58 -0
  54. package/dist/lib/no-compression.d.ts +1 -0
  55. package/dist/lib/no-compression.d.ts.map +1 -0
  56. package/dist/lib/no-compression.js +30 -0
  57. package/dist/lib/snappy-compression.d.ts +1 -0
  58. package/dist/lib/snappy-compression.d.ts.map +1 -0
  59. package/dist/lib/snappy-compression.js +27 -0
  60. package/dist/lib/zstd-compression.d.ts +1 -0
  61. package/dist/lib/zstd-compression.d.ts.map +1 -0
  62. package/dist/lib/zstd-compression.js +44 -0
  63. package/dist/types.d.ts +1 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +2 -0
  66. package/dist/workers/worker.d.ts +1 -0
  67. package/dist/workers/worker.d.ts.map +1 -0
  68. package/dist/workers/worker.js +77 -0
  69. package/package.json +6 -7
  70. package/src/brotli/decode.ts +2441 -0
  71. package/src/lib/brotli-compression.ts +17 -3
  72. package/src/lib/zstd-compression.ts +1 -1
  73. package/src/workers/worker.ts +10 -10
@@ -1,5 +1,5 @@
1
1
  import { processOnWorker } from '@loaders.gl/worker-utils';
2
- const VERSION = typeof "3.1.0-alpha.5" !== 'undefined' ? "3.1.0-alpha.5" : 'latest';
2
+ const VERSION = typeof "3.1.0-beta.4" !== 'undefined' ? "3.1.0-beta.4" : 'latest';
3
3
  export const CompressionWorker = {
4
4
  id: 'compression',
5
5
  name: 'compression',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compression-worker.ts"],"names":["processOnWorker","VERSION","CompressionWorker","id","name","module","version","options","compressOnWorker","data","_typecheckCompressionWorker"],"mappings":"AACA,SAAQA,eAAR,QAA8B,0BAA9B;AAIA,MAAMC,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAUA,OAAO,MAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,EAAE,EAAE,aAD2B;AAE/BC,EAAAA,IAAI,EAAE,aAFyB;AAG/BC,EAAAA,MAAM,EAAE,aAHuB;AAI/BC,EAAAA,OAAO,EAAEL,OAJsB;AAK/BM,EAAAA,OAAO,EAAE;AALsB,CAA1B;AAWP,OAAO,SAASC,gBAAT,CACLC,IADK,EAELF,OAFK,EAGiB;AACtB,SAAOP,eAAe,CAACE,iBAAD,EAAoBO,IAApB,EAA0BF,OAA1B,CAAtB;AACD;AAED,OAAO,MAAMG,2BAAyC,GAAGR,iBAAlD","sourcesContent":["import type {WorkerObject} from '@loaders.gl/worker-utils';\nimport {processOnWorker} from '@loaders.gl/worker-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type CompressionWorkerOptions = {\n compression: string;\n operation: 'compress' | 'decompress';\n};\n\n/**\n * Worker for Zlib real-time compression and decompression\n */\nexport const CompressionWorker = {\n id: 'compression',\n name: 'compression',\n module: 'compression',\n version: VERSION,\n options: {}\n};\n\n/**\n * Provide type safety\n */\nexport function compressOnWorker(\n data: ArrayBuffer,\n options: CompressionWorkerOptions\n): Promise<ArrayBuffer> {\n return processOnWorker(CompressionWorker, data, options);\n}\n\nexport const _typecheckCompressionWorker: WorkerObject = CompressionWorker;\n"],"file":"compression-worker.js"}
1
+ {"version":3,"sources":["../../src/compression-worker.ts"],"names":["processOnWorker","VERSION","CompressionWorker","id","name","module","version","options","compressOnWorker","data","_typecheckCompressionWorker"],"mappings":"AACA,SAAQA,eAAR,QAA8B,0BAA9B;AAIA,MAAMC,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAUA,OAAO,MAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,EAAE,EAAE,aAD2B;AAE/BC,EAAAA,IAAI,EAAE,aAFyB;AAG/BC,EAAAA,MAAM,EAAE,aAHuB;AAI/BC,EAAAA,OAAO,EAAEL,OAJsB;AAK/BM,EAAAA,OAAO,EAAE;AALsB,CAA1B;AAWP,OAAO,SAASC,gBAAT,CACLC,IADK,EAELF,OAFK,EAGiB;AACtB,SAAOP,eAAe,CAACE,iBAAD,EAAoBO,IAApB,EAA0BF,OAA1B,CAAtB;AACD;AAED,OAAO,MAAMG,2BAAyC,GAAGR,iBAAlD","sourcesContent":["import type {WorkerObject} from '@loaders.gl/worker-utils';\nimport {processOnWorker} from '@loaders.gl/worker-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type CompressionWorkerOptions = {\n compression: string;\n operation: 'compress' | 'decompress';\n};\n\n/**\n * Worker for Zlib real-time compression and decompression\n */\nexport const CompressionWorker = {\n id: 'compression',\n name: 'compression',\n module: 'compression',\n version: VERSION,\n options: {}\n};\n\n/**\n * Provide type safety\n */\nexport function compressOnWorker(\n data: ArrayBuffer,\n options: CompressionWorkerOptions\n): Promise<ArrayBuffer> {\n return processOnWorker(CompressionWorker, data, options);\n}\n\nexport const _typecheckCompressionWorker: WorkerObject = CompressionWorker;\n"],"file":"compression-worker.js"}
@@ -1,6 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import { Compression } from './compression';
3
3
  import { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';
4
+ import { BrotliDecode } from '../brotli/decode';
4
5
  import zlib from 'zlib';
5
6
  import { promisify } from '@loaders.gl/loader-utils';
6
7
  const DEFAULT_BROTLI_OPTIONS = {
@@ -61,7 +62,13 @@ export class BrotliCompression extends Compression {
61
62
  ...((_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.brotli)
62
63
  };
63
64
  const inputArray = new Uint8Array(input);
64
- return brotli.compress(inputArray, brotliOptions);
65
+
66
+ if (!brotli) {
67
+ throw new Error('brotli compression: brotli module not installed');
68
+ }
69
+
70
+ const outputArray = brotli.compress(inputArray, brotliOptions);
71
+ return outputArray.buffer;
65
72
  }
66
73
 
67
74
  async decompress(input) {
@@ -87,7 +94,14 @@ export class BrotliCompression extends Compression {
87
94
  ...((_this$options3 = this.options) === null || _this$options3 === void 0 ? void 0 : _this$options3.brotli)
88
95
  };
89
96
  const inputArray = new Uint8Array(input);
90
- return brotli.decompress(inputArray, brotliOptions);
97
+
98
+ if (brotli) {
99
+ const outputArray = brotli.decompress(inputArray, brotliOptions);
100
+ return outputArray.buffer;
101
+ }
102
+
103
+ const outputArray = BrotliDecode(inputArray, undefined);
104
+ return outputArray.buffer;
91
105
  }
92
106
 
93
107
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/brotli-compression.ts"],"names":["Compression","isBrowser","toArrayBuffer","zlib","promisify","DEFAULT_BROTLI_OPTIONS","brotli","mode","quality","lgwin","BrotliCompression","constructor","options","preload","modules","Error","name","compress","input","useZlib","buffer","brotliCompress","compressSync","brotliCompressSync","brotliOptions","inputArray","Uint8Array","decompress","brotliDecompress","decompressSync","brotliDecompressSync"],"mappings":"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","sourcesContent":["// BROTLI\nimport type {CompressionOptions} from './compression';\nimport {Compression} from './compression';\nimport {isBrowser, toArrayBuffer} from '@loaders.gl/loader-utils';\nimport type brotliNamespace from 'brotli';\n// import brotli from 'brotli'; // https://bundlephobia.com/package/brotli\nimport zlib from 'zlib';\nimport {promisify} from '@loaders.gl/loader-utils';\n\nexport type BrotliCompressionOptions = CompressionOptions & {\n brotli?: {\n mode?: number;\n quality?: number;\n lgwin?: number;\n useZlib?: boolean;\n };\n};\n\nconst DEFAULT_BROTLI_OPTIONS = {\n brotli: {\n mode: 0,\n quality: 8,\n lgwin: 22\n }\n};\n\nlet brotli: typeof brotliNamespace;\n\n/**\n * brotli compression / decompression\n */\nexport class BrotliCompression extends Compression {\n readonly name: string = 'brotli';\n readonly extensions = ['br'];\n readonly contentEncodings = ['br'];\n readonly isSupported = true;\n readonly options: BrotliCompressionOptions;\n\n constructor(options: BrotliCompressionOptions) {\n super(options);\n this.options = options;\n }\n\n /**\n * brotli is an injectable dependency due to big size\n * @param options\n */\n async preload(): Promise<void> {\n brotli = brotli || this.options?.modules?.brotli;\n if (!brotli) {\n throw new Error(this.name);\n }\n }\n\n async compress(input: ArrayBuffer): Promise<ArrayBuffer> {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = await promisify(zlib.brotliCompress)(input);\n return toArrayBuffer(buffer);\n }\n return this.compressSync(input);\n }\n\n compressSync(input: ArrayBuffer): ArrayBuffer {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = zlib.brotliCompressSync(input);\n return toArrayBuffer(buffer);\n }\n const brotliOptions = {...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli};\n const inputArray = new Uint8Array(input);\n // @ts-ignore brotli types state that only Buffers are accepted...\n return brotli.compress(inputArray, brotliOptions);\n }\n\n async decompress(input: ArrayBuffer): Promise<ArrayBuffer> {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = await promisify(zlib.brotliDecompress)(input);\n return toArrayBuffer(buffer);\n }\n return this.decompressSync(input);\n }\n\n decompressSync(input: ArrayBuffer): ArrayBuffer {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = zlib.brotliDecompressSync(input);\n return toArrayBuffer(buffer);\n }\n const brotliOptions = {...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli};\n const inputArray = new Uint8Array(input);\n // @ts-ignore brotli types state that only Buffers are accepted...\n return brotli.decompress(inputArray, brotliOptions);\n }\n}\n"],"file":"brotli-compression.js"}
1
+ {"version":3,"sources":["../../../src/lib/brotli-compression.ts"],"names":["Compression","isBrowser","toArrayBuffer","BrotliDecode","zlib","promisify","DEFAULT_BROTLI_OPTIONS","brotli","mode","quality","lgwin","BrotliCompression","constructor","options","preload","modules","Error","name","compress","input","useZlib","buffer","brotliCompress","compressSync","brotliCompressSync","brotliOptions","inputArray","Uint8Array","outputArray","decompress","brotliDecompress","decompressSync","brotliDecompressSync","undefined"],"mappings":"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","sourcesContent":["// BROTLI\nimport type {CompressionOptions} from './compression';\nimport {Compression} from './compression';\nimport {isBrowser, toArrayBuffer} from '@loaders.gl/loader-utils';\nimport type brotliNamespace from 'brotli';\n// import brotli from 'brotli'; // https://bundlephobia.com/package/brotli\nimport {BrotliDecode} from '../brotli/decode';\nimport zlib from 'zlib';\nimport {promisify} from '@loaders.gl/loader-utils';\n\nexport type BrotliCompressionOptions = CompressionOptions & {\n brotli?: {\n mode?: number;\n quality?: number;\n lgwin?: number;\n useZlib?: boolean;\n };\n};\n\nconst DEFAULT_BROTLI_OPTIONS = {\n brotli: {\n mode: 0,\n quality: 8,\n lgwin: 22\n }\n};\n\nlet brotli: typeof brotliNamespace;\n\n/**\n * brotli compression / decompression\n */\nexport class BrotliCompression extends Compression {\n readonly name: string = 'brotli';\n readonly extensions = ['br'];\n readonly contentEncodings = ['br'];\n readonly isSupported = true;\n readonly options: BrotliCompressionOptions;\n\n constructor(options: BrotliCompressionOptions) {\n super(options);\n this.options = options;\n }\n\n /**\n * brotli is an injectable dependency due to big size\n * @param options\n */\n async preload(): Promise<void> {\n brotli = brotli || this.options?.modules?.brotli;\n if (!brotli) {\n throw new Error(this.name);\n }\n }\n\n async compress(input: ArrayBuffer): Promise<ArrayBuffer> {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = await promisify(zlib.brotliCompress)(input);\n return toArrayBuffer(buffer);\n }\n return this.compressSync(input);\n }\n\n compressSync(input: ArrayBuffer): ArrayBuffer {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = zlib.brotliCompressSync(input);\n return toArrayBuffer(buffer);\n }\n const brotliOptions = {...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli};\n const inputArray = new Uint8Array(input);\n\n if (!brotli) {\n throw new Error('brotli compression: brotli module not installed');\n }\n\n // @ts-ignore brotli types state that only Buffers are accepted...\n const outputArray = brotli.compress(inputArray, brotliOptions);\n return outputArray.buffer;\n }\n\n async decompress(input: ArrayBuffer): Promise<ArrayBuffer> {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = await promisify(zlib.brotliDecompress)(input);\n return toArrayBuffer(buffer);\n }\n return this.decompressSync(input);\n }\n\n decompressSync(input: ArrayBuffer): ArrayBuffer {\n // On Node.js we can use built-in zlib\n if (!isBrowser && this.options.brotli?.useZlib) {\n const buffer = zlib.brotliDecompressSync(input);\n return toArrayBuffer(buffer);\n }\n\n const brotliOptions = {...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli};\n const inputArray = new Uint8Array(input);\n\n if (brotli) {\n // @ts-ignore brotli types state that only Buffers are accepted...\n const outputArray = brotli.decompress(inputArray, brotliOptions);\n return outputArray.buffer;\n }\n const outputArray = BrotliDecode(inputArray, undefined);\n return outputArray.buffer;\n }\n}\n"],"file":"brotli-compression.js"}
@@ -22,7 +22,7 @@ export class ZstdCompression extends Compression {
22
22
  ZstdCodec = (_this$options = this.options) === null || _this$options === void 0 ? void 0 : (_this$options$modules = _this$options.modules) === null || _this$options$modules === void 0 ? void 0 : _this$options$modules['zstd-codec'];
23
23
 
24
24
  if (!ZstdCodec) {
25
- throw new Error(this.name);
25
+ console.warn("".concat(this.name, " library not installed"));
26
26
  }
27
27
  }
28
28
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/zstd-compression.ts"],"names":["Compression","ZstdCodec","zstd","ZstdCompression","constructor","options","modules","Error","name","preload","Promise","resolve","run","compressSync","input","simpleZstd","Simple","inputArray","Uint8Array","compress","buffer","decompressSync","decompress"],"mappings":";AAEA,SAAQA,WAAR,QAA0B,eAA1B;AAGA,IAAIC,SAAJ;AACA,IAAIC,IAAJ;AAKA,OAAO,MAAMC,eAAN,SAA8BH,WAA9B,CAA0C;AAW/CI,EAAAA,WAAW,CAACC,OAAD,EAA8B;AAAA;;AACvC,UAAMA,OAAN;;AADuC,kCAVjB,MAUiB;;AAAA,wCATnB,EASmB;;AAAA,8CARb,EAQa;;AAAA,yCAPlB,IAOkB;;AAAA;;AAEvC,SAAKA,OAAL,GAAeA,OAAf;AAEAJ,IAAAA,SAAS,oBAAG,KAAKI,OAAR,2EAAG,cAAcC,OAAjB,0DAAG,sBAAwB,YAAxB,CAAZ;;AACA,QAAI,CAACL,SAAL,EAAgB;AACd,YAAM,IAAIM,KAAJ,CAAU,KAAKC,IAAf,CAAN;AACD;AACF;;AAEY,QAAPC,OAAO,GAAkB;AAC7BP,IAAAA,IAAI,GAAGA,IAAI,KAAK,MAAM,IAAIQ,OAAJ,CAAaC,OAAD,IAAaV,SAAS,CAACW,GAAV,CAAeV,IAAD,IAAUS,OAAO,CAACT,IAAD,CAA/B,CAAzB,CAAX,CAAX;AACD;;AAEDW,EAAAA,YAAY,CAACC,KAAD,EAAkC;AAC5C,UAAMC,UAAU,GAAG,IAAIb,IAAI,CAACc,MAAT,EAAnB;AACA,UAAMC,UAAU,GAAG,IAAIC,UAAJ,CAAeJ,KAAf,CAAnB;AACA,WAAOC,UAAU,CAACI,QAAX,CAAoBF,UAApB,EAAgCG,MAAvC;AACD;;AAEDC,EAAAA,cAAc,CAACP,KAAD,EAAkC;AAC9C,UAAMC,UAAU,GAAG,IAAIb,IAAI,CAACc,MAAT,EAAnB;AAGA,UAAMC,UAAU,GAAG,IAAIC,UAAJ,CAAeJ,KAAf,CAAnB;AACA,WAAOC,UAAU,CAACO,UAAX,CAAsBL,UAAtB,EAAkCG,MAAzC;AACD;;AArC8C","sourcesContent":["// ZSTD\nimport type {CompressionOptions} from './compression';\nimport {Compression} from './compression';\n// import {ZstdCodec} from 'zstd-codec'; // https://bundlephobia.com/package/zstd-codec\n\nlet ZstdCodec;\nlet zstd;\n\n/**\n * Zstandard compression / decompression\n */\nexport class ZstdCompression extends Compression {\n readonly name: string = 'zstd';\n readonly extensions = [];\n readonly contentEncodings = [];\n readonly isSupported = true;\n readonly options: CompressionOptions;\n\n /**\n * zstd-codec is an injectable dependency due to big size\n * @param options\n */\n constructor(options: CompressionOptions) {\n super(options);\n this.options = options;\n\n ZstdCodec = this.options?.modules?.['zstd-codec'];\n if (!ZstdCodec) {\n throw new Error(this.name);\n }\n }\n\n async preload(): Promise<void> {\n zstd = zstd || (await new Promise((resolve) => ZstdCodec.run((zstd) => resolve(zstd))));\n }\n\n compressSync(input: ArrayBuffer): ArrayBuffer {\n const simpleZstd = new zstd.Simple();\n const inputArray = new Uint8Array(input);\n return simpleZstd.compress(inputArray).buffer;\n }\n\n decompressSync(input: ArrayBuffer): ArrayBuffer {\n const simpleZstd = new zstd.Simple();\n // var ddict = new zstd.Dict.Decompression(dictData);\n // var jsonBytes = simpleZstd.decompressUsingDict(jsonZstData, ddict);\n const inputArray = new Uint8Array(input);\n return simpleZstd.decompress(inputArray).buffer;\n }\n}\n"],"file":"zstd-compression.js"}
1
+ {"version":3,"sources":["../../../src/lib/zstd-compression.ts"],"names":["Compression","ZstdCodec","zstd","ZstdCompression","constructor","options","modules","console","warn","name","preload","Promise","resolve","run","compressSync","input","simpleZstd","Simple","inputArray","Uint8Array","compress","buffer","decompressSync","decompress"],"mappings":";AAEA,SAAQA,WAAR,QAA0B,eAA1B;AAGA,IAAIC,SAAJ;AACA,IAAIC,IAAJ;AAKA,OAAO,MAAMC,eAAN,SAA8BH,WAA9B,CAA0C;AAW/CI,EAAAA,WAAW,CAACC,OAAD,EAA8B;AAAA;;AACvC,UAAMA,OAAN;;AADuC,kCAVjB,MAUiB;;AAAA,wCATnB,EASmB;;AAAA,8CARb,EAQa;;AAAA,yCAPlB,IAOkB;;AAAA;;AAEvC,SAAKA,OAAL,GAAeA,OAAf;AAEAJ,IAAAA,SAAS,oBAAG,KAAKI,OAAR,2EAAG,cAAcC,OAAjB,0DAAG,sBAAwB,YAAxB,CAAZ;;AACA,QAAI,CAACL,SAAL,EAAgB;AACdM,MAAAA,OAAO,CAACC,IAAR,WAAgB,KAAKC,IAArB;AACD;AACF;;AAEY,QAAPC,OAAO,GAAkB;AAC7BR,IAAAA,IAAI,GAAGA,IAAI,KAAK,MAAM,IAAIS,OAAJ,CAAaC,OAAD,IAAaX,SAAS,CAACY,GAAV,CAAeX,IAAD,IAAUU,OAAO,CAACV,IAAD,CAA/B,CAAzB,CAAX,CAAX;AACD;;AAEDY,EAAAA,YAAY,CAACC,KAAD,EAAkC;AAC5C,UAAMC,UAAU,GAAG,IAAId,IAAI,CAACe,MAAT,EAAnB;AACA,UAAMC,UAAU,GAAG,IAAIC,UAAJ,CAAeJ,KAAf,CAAnB;AACA,WAAOC,UAAU,CAACI,QAAX,CAAoBF,UAApB,EAAgCG,MAAvC;AACD;;AAEDC,EAAAA,cAAc,CAACP,KAAD,EAAkC;AAC9C,UAAMC,UAAU,GAAG,IAAId,IAAI,CAACe,MAAT,EAAnB;AAGA,UAAMC,UAAU,GAAG,IAAIC,UAAJ,CAAeJ,KAAf,CAAnB;AACA,WAAOC,UAAU,CAACO,UAAX,CAAsBL,UAAtB,EAAkCG,MAAzC;AACD;;AArC8C","sourcesContent":["// ZSTD\nimport type {CompressionOptions} from './compression';\nimport {Compression} from './compression';\n// import {ZstdCodec} from 'zstd-codec'; // https://bundlephobia.com/package/zstd-codec\n\nlet ZstdCodec;\nlet zstd;\n\n/**\n * Zstandard compression / decompression\n */\nexport class ZstdCompression extends Compression {\n readonly name: string = 'zstd';\n readonly extensions = [];\n readonly contentEncodings = [];\n readonly isSupported = true;\n readonly options: CompressionOptions;\n\n /**\n * zstd-codec is an injectable dependency due to big size\n * @param options\n */\n constructor(options: CompressionOptions) {\n super(options);\n this.options = options;\n\n ZstdCodec = this.options?.modules?.['zstd-codec'];\n if (!ZstdCodec) {\n console.warn(`${this.name} library not installed`);\n }\n }\n\n async preload(): Promise<void> {\n zstd = zstd || (await new Promise((resolve) => ZstdCodec.run((zstd) => resolve(zstd))));\n }\n\n compressSync(input: ArrayBuffer): ArrayBuffer {\n const simpleZstd = new zstd.Simple();\n const inputArray = new Uint8Array(input);\n return simpleZstd.compress(inputArray).buffer;\n }\n\n decompressSync(input: ArrayBuffer): ArrayBuffer {\n const simpleZstd = new zstd.Simple();\n // var ddict = new zstd.Dict.Decompression(dictData);\n // var jsonBytes = simpleZstd.decompressUsingDict(jsonZstData, ddict);\n const inputArray = new Uint8Array(input);\n return simpleZstd.decompress(inputArray).buffer;\n }\n}\n"],"file":"zstd-compression.js"}
@@ -6,18 +6,9 @@ import { GZipCompression } from '../lib/gzip-compression';
6
6
  import { LZ4Compression } from '../lib/lz4-compression';
7
7
  import { SnappyCompression } from '../lib/snappy-compression';
8
8
  import { ZstdCompression } from '../lib/zstd-compression';
9
- import brotliDecompress from 'brotli/decompress';
10
9
  import lz4js from 'lz4js';
11
- import { ZstdCodec } from 'zstd-codec';
12
10
  const modules = {
13
- brotli: {
14
- decompress: brotliDecompress,
15
- compress: () => {
16
- throw new Error('brotli compress');
17
- }
18
- },
19
- lz4js,
20
- 'zstd-codec': ZstdCodec
11
+ lz4js
21
12
  };
22
13
  const COMPRESSIONS = [new NoCompression({
23
14
  modules
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/workers/worker.ts"],"names":["createWorker","NoCompression","BrotliCompression","DeflateCompression","GZipCompression","LZ4Compression","SnappyCompression","ZstdCompression","brotliDecompress","lz4js","ZstdCodec","modules","brotli","decompress","compress","Error","COMPRESSIONS","data","options","operation","getOperation","String","compression","getCompression","name","Compression","find","compression_"],"mappings":"AAAA,SAAQA,YAAR,QAA2B,0BAA3B;AAGA,SAAQC,aAAR,QAA4B,uBAA5B;AACA,SAAQC,iBAAR,QAAgC,2BAAhC;AACA,SAAQC,kBAAR,QAAiC,4BAAjC;AACA,SAAQC,eAAR,QAA8B,yBAA9B;AACA,SAAQC,cAAR,QAA6B,wBAA7B;AAEA,SAAQC,iBAAR,QAAgC,2BAAhC;AACA,SAAQC,eAAR,QAA8B,yBAA9B;AAKA,OAAOC,gBAAP,MAA6B,mBAA7B;AACA,OAAOC,KAAP,MAAkB,OAAlB;AAEA,SAAQC,SAAR,QAAwB,YAAxB;AAGA,MAAMC,OAAO,GAAG;AAEdC,EAAAA,MAAM,EAAE;AACNC,IAAAA,UAAU,EAAEL,gBADN;AAENM,IAAAA,QAAQ,EAAE,MAAM;AACd,YAAM,IAAIC,KAAJ,CAAU,iBAAV,CAAN;AACD;AAJK,GAFM;AAQdN,EAAAA,KARc;AAUd,gBAAcC;AAVA,CAAhB;AAcA,MAAMM,YAAY,GAAG,CACnB,IAAIf,aAAJ,CAAkB;AAACU,EAAAA;AAAD,CAAlB,CADmB,EAEnB,IAAIT,iBAAJ,CAAsB;AAACS,EAAAA;AAAD,CAAtB,CAFmB,EAGnB,IAAIR,kBAAJ,CAAuB;AAACQ,EAAAA;AAAD,CAAvB,CAHmB,EAInB,IAAIP,eAAJ,CAAoB;AAACO,EAAAA;AAAD,CAApB,CAJmB,EAMnB,IAAIN,cAAJ,CAAmB;AAACM,EAAAA;AAAD,CAAnB,CANmB,EAOnB,IAAIL,iBAAJ,CAAsB;AAACK,EAAAA;AAAD,CAAtB,CAPmB,EAQnB,IAAIJ,eAAJ,CAAoB;AAACI,EAAAA;AAAD,CAApB,CARmB,CAArB;AAWAX,YAAY,CAAC,OAAOiB,IAAP,EAAaC,OAAO,GAAG,EAAvB,KAA8B;AACzC,QAAMC,SAAS,GAAGC,YAAY,CAACC,MAAM,CAACH,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEC,SAAV,CAAP,CAA9B;AACA,QAAMG,WAAW,GAAGC,cAAc,CAACF,MAAM,CAACH,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEI,WAAV,CAAP,CAAlC;;AAGA,UAAQH,SAAR;AACE,SAAK,UAAL;AACE,aAAO,MAAMG,WAAW,CAACR,QAAZ,CAAqBG,IAArB,CAAb;;AACF,SAAK,YAAL;AACE,aAAO,MAAMK,WAAW,CAACT,UAAZ,CAAuBI,IAAvB,CAAb;;AACF;AACE,YAAM,IAAIF,KAAJ,CAAU,gBAAV,CAAN;AANJ;AAQD,CAbW,CAAZ;;AAeA,SAASK,YAAT,CAAsBD,SAAtB,EAAoE;AAClE,UAAQA,SAAR;AACE,SAAK,UAAL;AACA,SAAK,SAAL;AACE,aAAO,UAAP;;AACF,SAAK,YAAL;AACA,SAAK,SAAL;AACE,aAAO,YAAP;;AACF;AACE,YAAM,IAAIJ,KAAJ,0DAC8CI,SAD9C,2CAAN;AARJ;AAYD;;AAED,SAASI,cAAT,CAAwBC,IAAxB,EAAsC;AACpC,QAAMC,WAAW,GAAGT,YAAY,CAACU,IAAb,CAAmBC,YAAD,IAAkBH,IAAI,KAAKG,YAAY,CAACH,IAA1D,CAApB;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,UAAM,IAAIV,KAAJ,4DAA8DS,IAA9D,EAAN;AACD;;AACD,SAAOC,WAAP;AACD","sourcesContent":["import {createWorker} from '@loaders.gl/worker-utils';\n\n// Compressors\nimport {NoCompression} from '../lib/no-compression';\nimport {BrotliCompression} from '../lib/brotli-compression';\nimport {DeflateCompression} from '../lib/deflate-compression';\nimport {GZipCompression} from '../lib/gzip-compression';\nimport {LZ4Compression} from '../lib/lz4-compression';\n// import {LZOCompression} from '../lib/lzo-compression';\nimport {SnappyCompression} from '../lib/snappy-compression';\nimport {ZstdCompression} from '../lib/zstd-compression';\n\n// Import big dependencies\n\n// import brotli from 'brotli'; - brotli has problems with decompress in browsers\nimport brotliDecompress from 'brotli/decompress';\nimport lz4js from 'lz4js';\n// import lzo from 'lzo';\nimport {ZstdCodec} from 'zstd-codec';\n\n// Inject large dependencies through Compression constructor options\nconst modules = {\n // brotli has problems with decompress in browsers\n brotli: {\n decompress: brotliDecompress,\n compress: () => {\n throw new Error('brotli compress');\n }\n },\n lz4js,\n // lzo,\n 'zstd-codec': ZstdCodec\n};\n\n/** @type {Compression[]} */\nconst COMPRESSIONS = [\n new NoCompression({modules}),\n new BrotliCompression({modules}),\n new DeflateCompression({modules}),\n new GZipCompression({modules}),\n // new LZOCompression({modules}),\n new LZ4Compression({modules}),\n new SnappyCompression({modules}),\n new ZstdCompression({modules})\n];\n\ncreateWorker(async (data, options = {}) => {\n const operation = getOperation(String(options?.operation));\n const compression = getCompression(String(options?.compression));\n\n // @ts-ignore\n switch (operation) {\n case 'compress':\n return await compression.compress(data);\n case 'decompress':\n return await compression.decompress(data);\n default:\n throw new Error('invalid option');\n }\n});\n\nfunction getOperation(operation: string): 'compress' | 'decompress' {\n switch (operation) {\n case 'compress':\n case 'deflate':\n return 'compress';\n case 'decompress':\n case 'inflate':\n return 'decompress';\n default:\n throw new Error(\n `@loaders.gl/compression: Unsupported operation ${operation}. Expected 'compress' or 'decompress'`\n );\n }\n}\n\nfunction getCompression(name: string) {\n const Compression = COMPRESSIONS.find((compression_) => name === compression_.name);\n if (!Compression) {\n throw new Error(`@loaders.gl/compression: Unsupported compression ${name}`);\n }\n return Compression;\n}\n"],"file":"worker.js"}
1
+ {"version":3,"sources":["../../../src/workers/worker.ts"],"names":["createWorker","NoCompression","BrotliCompression","DeflateCompression","GZipCompression","LZ4Compression","SnappyCompression","ZstdCompression","lz4js","modules","COMPRESSIONS","data","options","operation","getOperation","String","compression","getCompression","compress","decompress","Error","name","Compression","find","compression_"],"mappings":"AAAA,SAAQA,YAAR,QAA2B,0BAA3B;AAGA,SAAQC,aAAR,QAA4B,uBAA5B;AACA,SAAQC,iBAAR,QAAgC,2BAAhC;AACA,SAAQC,kBAAR,QAAiC,4BAAjC;AACA,SAAQC,eAAR,QAA8B,yBAA9B;AACA,SAAQC,cAAR,QAA6B,wBAA7B;AAEA,SAAQC,iBAAR,QAAgC,2BAAhC;AACA,SAAQC,eAAR,QAA8B,yBAA9B;AAMA,OAAOC,KAAP,MAAkB,OAAlB;AAKA,MAAMC,OAAO,GAAG;AAQdD,EAAAA;AARc,CAAhB;AAcA,MAAME,YAAY,GAAG,CACnB,IAAIT,aAAJ,CAAkB;AAACQ,EAAAA;AAAD,CAAlB,CADmB,EAEnB,IAAIP,iBAAJ,CAAsB;AAACO,EAAAA;AAAD,CAAtB,CAFmB,EAGnB,IAAIN,kBAAJ,CAAuB;AAACM,EAAAA;AAAD,CAAvB,CAHmB,EAInB,IAAIL,eAAJ,CAAoB;AAACK,EAAAA;AAAD,CAApB,CAJmB,EAMnB,IAAIJ,cAAJ,CAAmB;AAACI,EAAAA;AAAD,CAAnB,CANmB,EAOnB,IAAIH,iBAAJ,CAAsB;AAACG,EAAAA;AAAD,CAAtB,CAPmB,EAQnB,IAAIF,eAAJ,CAAoB;AAACE,EAAAA;AAAD,CAApB,CARmB,CAArB;AAWAT,YAAY,CAAC,OAAOW,IAAP,EAAaC,OAAO,GAAG,EAAvB,KAA8B;AACzC,QAAMC,SAAS,GAAGC,YAAY,CAACC,MAAM,CAACH,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEC,SAAV,CAAP,CAA9B;AACA,QAAMG,WAAW,GAAGC,cAAc,CAACF,MAAM,CAACH,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEI,WAAV,CAAP,CAAlC;;AAGA,UAAQH,SAAR;AACE,SAAK,UAAL;AACE,aAAO,MAAMG,WAAW,CAACE,QAAZ,CAAqBP,IAArB,CAAb;;AACF,SAAK,YAAL;AACE,aAAO,MAAMK,WAAW,CAACG,UAAZ,CAAuBR,IAAvB,CAAb;;AACF;AACE,YAAM,IAAIS,KAAJ,CAAU,gBAAV,CAAN;AANJ;AAQD,CAbW,CAAZ;;AAeA,SAASN,YAAT,CAAsBD,SAAtB,EAAoE;AAClE,UAAQA,SAAR;AACE,SAAK,UAAL;AACA,SAAK,SAAL;AACE,aAAO,UAAP;;AACF,SAAK,YAAL;AACA,SAAK,SAAL;AACE,aAAO,YAAP;;AACF;AACE,YAAM,IAAIO,KAAJ,0DAC8CP,SAD9C,2CAAN;AARJ;AAYD;;AAED,SAASI,cAAT,CAAwBI,IAAxB,EAAsC;AACpC,QAAMC,WAAW,GAAGZ,YAAY,CAACa,IAAb,CAAmBC,YAAD,IAAkBH,IAAI,KAAKG,YAAY,CAACH,IAA1D,CAApB;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,UAAM,IAAIF,KAAJ,4DAA8DC,IAA9D,EAAN;AACD;;AACD,SAAOC,WAAP;AACD","sourcesContent":["import {createWorker} from '@loaders.gl/worker-utils';\n\n// Compressors\nimport {NoCompression} from '../lib/no-compression';\nimport {BrotliCompression} from '../lib/brotli-compression';\nimport {DeflateCompression} from '../lib/deflate-compression';\nimport {GZipCompression} from '../lib/gzip-compression';\nimport {LZ4Compression} from '../lib/lz4-compression';\n// import {LZOCompression} from '../lib/lzo-compression';\nimport {SnappyCompression} from '../lib/snappy-compression';\nimport {ZstdCompression} from '../lib/zstd-compression';\n\n// Import big dependencies\n\n// import brotli from 'brotli'; - brotli has problems with decompress in browsers\n// import brotliDecompress from 'brotli/decompress';\nimport lz4js from 'lz4js';\n// import lzo from 'lzo';\n// import {ZstdCodec} from 'zstd-codec';\n\n// Inject large dependencies through Compression constructor options\nconst modules = {\n // brotli has problems with decompress in browsers\n // brotli: {\n // decompress: brotliDecompress,\n // compress: () => {\n // throw new Error('brotli compress');\n // }\n // },\n lz4js\n // lzo,\n // 'zstd-codec': ZstdCodec\n};\n\n/** @type {Compression[]} */\nconst COMPRESSIONS = [\n new NoCompression({modules}),\n new BrotliCompression({modules}),\n new DeflateCompression({modules}),\n new GZipCompression({modules}),\n // new LZOCompression({modules}),\n new LZ4Compression({modules}),\n new SnappyCompression({modules}),\n new ZstdCompression({modules})\n];\n\ncreateWorker(async (data, options = {}) => {\n const operation = getOperation(String(options?.operation));\n const compression = getCompression(String(options?.compression));\n\n // @ts-ignore\n switch (operation) {\n case 'compress':\n return await compression.compress(data);\n case 'decompress':\n return await compression.decompress(data);\n default:\n throw new Error('invalid option');\n }\n});\n\nfunction getOperation(operation: string): 'compress' | 'decompress' {\n switch (operation) {\n case 'compress':\n case 'deflate':\n return 'compress';\n case 'decompress':\n case 'inflate':\n return 'decompress';\n default:\n throw new Error(\n `@loaders.gl/compression: Unsupported operation ${operation}. Expected 'compress' or 'decompress'`\n );\n }\n}\n\nfunction getCompression(name: string) {\n const Compression = COMPRESSIONS.find((compression_) => name === compression_.name);\n if (!Compression) {\n throw new Error(`@loaders.gl/compression: Unsupported compression ${name}`);\n }\n return Compression;\n}\n"],"file":"worker.js"}
package/dist/index.d.ts CHANGED
@@ -10,3 +10,4 @@ export { BrotliCompression } from './lib/brotli-compression';
10
10
  export { LZOCompression } from './lib/lzo-compression';
11
11
  export type { CompressionWorkerOptions } from './compression-worker';
12
12
  export { CompressionWorker, compressOnWorker } from './compression-worker';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAErD,YAAY,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compressOnWorker = exports.CompressionWorker = exports.LZOCompression = exports.BrotliCompression = exports.SnappyCompression = exports.ZstdCompression = exports.LZ4Compression = exports.GZipCompression = exports.DeflateCompression = exports.NoCompression = exports.Compression = void 0;
4
+ var compression_1 = require("./lib/compression");
5
+ Object.defineProperty(exports, "Compression", { enumerable: true, get: function () { return compression_1.Compression; } });
6
+ var no_compression_1 = require("./lib/no-compression");
7
+ Object.defineProperty(exports, "NoCompression", { enumerable: true, get: function () { return no_compression_1.NoCompression; } });
8
+ var deflate_compression_1 = require("./lib/deflate-compression");
9
+ Object.defineProperty(exports, "DeflateCompression", { enumerable: true, get: function () { return deflate_compression_1.DeflateCompression; } });
10
+ var gzip_compression_1 = require("./lib/gzip-compression");
11
+ Object.defineProperty(exports, "GZipCompression", { enumerable: true, get: function () { return gzip_compression_1.GZipCompression; } });
12
+ var lz4_compression_1 = require("./lib/lz4-compression");
13
+ Object.defineProperty(exports, "LZ4Compression", { enumerable: true, get: function () { return lz4_compression_1.LZ4Compression; } });
14
+ var zstd_compression_1 = require("./lib/zstd-compression");
15
+ Object.defineProperty(exports, "ZstdCompression", { enumerable: true, get: function () { return zstd_compression_1.ZstdCompression; } });
16
+ var snappy_compression_1 = require("./lib/snappy-compression");
17
+ Object.defineProperty(exports, "SnappyCompression", { enumerable: true, get: function () { return snappy_compression_1.SnappyCompression; } });
18
+ var brotli_compression_1 = require("./lib/brotli-compression");
19
+ Object.defineProperty(exports, "BrotliCompression", { enumerable: true, get: function () { return brotli_compression_1.BrotliCompression; } });
20
+ var lzo_compression_1 = require("./lib/lzo-compression");
21
+ Object.defineProperty(exports, "LZOCompression", { enumerable: true, get: function () { return lzo_compression_1.LZOCompression; } });
22
+ var compression_worker_1 = require("./compression-worker");
23
+ Object.defineProperty(exports, "CompressionWorker", { enumerable: true, get: function () { return compression_worker_1.CompressionWorker; } });
24
+ Object.defineProperty(exports, "compressOnWorker", { enumerable: true, get: function () { return compression_worker_1.compressOnWorker; } });
@@ -28,3 +28,4 @@ export declare class BrotliCompression extends Compression {
28
28
  decompress(input: ArrayBuffer): Promise<ArrayBuffer>;
29
29
  decompressSync(input: ArrayBuffer): ArrayBuffer;
30
30
  }
31
+ //# sourceMappingURL=brotli-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brotli-compression.d.ts","sourceRoot":"","sources":["../../src/lib/brotli-compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,oBAAY,wBAAwB,GAAG,kBAAkB,GAAG;IAC1D,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAYF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IACjC,QAAQ,CAAC,UAAU,WAAU;IAC7B,QAAQ,CAAC,gBAAgB,WAAU;IACnC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;gBAE/B,OAAO,EAAE,wBAAwB;IAK7C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IASxD,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAkBvC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAS1D,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;CAkBhD"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BrotliCompression = void 0;
7
+ const compression_1 = require("./compression");
8
+ const loader_utils_1 = require("@loaders.gl/loader-utils");
9
+ // import brotli from 'brotli'; // https://bundlephobia.com/package/brotli
10
+ const decode_1 = require("../brotli/decode");
11
+ const zlib_1 = __importDefault(require("zlib"));
12
+ const loader_utils_2 = require("@loaders.gl/loader-utils");
13
+ const DEFAULT_BROTLI_OPTIONS = {
14
+ brotli: {
15
+ mode: 0,
16
+ quality: 8,
17
+ lgwin: 22
18
+ }
19
+ };
20
+ let brotli;
21
+ /**
22
+ * brotli compression / decompression
23
+ */
24
+ class BrotliCompression extends compression_1.Compression {
25
+ constructor(options) {
26
+ super(options);
27
+ this.name = 'brotli';
28
+ this.extensions = ['br'];
29
+ this.contentEncodings = ['br'];
30
+ this.isSupported = true;
31
+ this.options = options;
32
+ }
33
+ /**
34
+ * brotli is an injectable dependency due to big size
35
+ * @param options
36
+ */
37
+ async preload() {
38
+ brotli = brotli || this.options?.modules?.brotli;
39
+ if (!brotli) {
40
+ throw new Error(this.name);
41
+ }
42
+ }
43
+ async compress(input) {
44
+ // On Node.js we can use built-in zlib
45
+ if (!loader_utils_1.isBrowser && this.options.brotli?.useZlib) {
46
+ const buffer = await (0, loader_utils_2.promisify)(zlib_1.default.brotliCompress)(input);
47
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
48
+ }
49
+ return this.compressSync(input);
50
+ }
51
+ compressSync(input) {
52
+ // On Node.js we can use built-in zlib
53
+ if (!loader_utils_1.isBrowser && this.options.brotli?.useZlib) {
54
+ const buffer = zlib_1.default.brotliCompressSync(input);
55
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
56
+ }
57
+ const brotliOptions = { ...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli };
58
+ const inputArray = new Uint8Array(input);
59
+ if (!brotli) {
60
+ throw new Error('brotli compression: brotli module not installed');
61
+ }
62
+ // @ts-ignore brotli types state that only Buffers are accepted...
63
+ const outputArray = brotli.compress(inputArray, brotliOptions);
64
+ return outputArray.buffer;
65
+ }
66
+ async decompress(input) {
67
+ // On Node.js we can use built-in zlib
68
+ if (!loader_utils_1.isBrowser && this.options.brotli?.useZlib) {
69
+ const buffer = await (0, loader_utils_2.promisify)(zlib_1.default.brotliDecompress)(input);
70
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
71
+ }
72
+ return this.decompressSync(input);
73
+ }
74
+ decompressSync(input) {
75
+ // On Node.js we can use built-in zlib
76
+ if (!loader_utils_1.isBrowser && this.options.brotli?.useZlib) {
77
+ const buffer = zlib_1.default.brotliDecompressSync(input);
78
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
79
+ }
80
+ const brotliOptions = { ...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli };
81
+ const inputArray = new Uint8Array(input);
82
+ if (brotli) {
83
+ // @ts-ignore brotli types state that only Buffers are accepted...
84
+ const outputArray = brotli.decompress(inputArray, brotliOptions);
85
+ return outputArray.buffer;
86
+ }
87
+ const outputArray = (0, decode_1.BrotliDecode)(inputArray, undefined);
88
+ return outputArray.buffer;
89
+ }
90
+ }
91
+ exports.BrotliCompression = BrotliCompression;
@@ -28,3 +28,4 @@ export declare abstract class Compression {
28
28
  protected concatenate(asyncIterator: any): Promise<ArrayBuffer>;
29
29
  protected improveError(error: any): any;
30
30
  }
31
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/lib/compression.ts"],"names":[],"mappings":"AAGA,0BAA0B;AAC1B,oBAAY,kBAAkB,GAAG;IAE/B,OAAO,CAAC,EAAE;QAAC,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;CACvC,CAAC;AAEF,kBAAkB;AAClB,8BAAsB,WAAW;IAC/B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;gBAE3B,OAAO,CAAC,EAAE,kBAAkB;IAKxC,gEAAgE;IAC1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,mCAAmC;IAC7B,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAKxD,qCAAqC;IAC/B,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKzE,kCAAkC;IAClC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAI7C,kCAAkC;IAClC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW;IAI9D,uBAAuB;IAChB,eAAe,CACpB,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAM7B,yBAAyB;IAClB,iBAAiB,CACtB,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAQ7B,SAAS,CAAC,WAAW,CAAC,aAAa,KAAA,GAAG,OAAO,CAAC,WAAW,CAAC;IAI1D,SAAS,CAAC,YAAY,CAAC,KAAK,KAAA;CAM7B"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Compression = void 0;
4
+ // Compression interface
5
+ const loader_utils_1 = require("@loaders.gl/loader-utils");
6
+ /** Compression */
7
+ class Compression {
8
+ constructor(options) {
9
+ this.compressBatches = this.compressBatches.bind(this);
10
+ this.decompressBatches = this.decompressBatches.bind(this);
11
+ }
12
+ /** Preloads any dynamic libraries. May enable sync functions */
13
+ async preload() {
14
+ return;
15
+ }
16
+ /** Asynchronously compress data */
17
+ async compress(input) {
18
+ await this.preload();
19
+ return this.compressSync(input);
20
+ }
21
+ /** Asynchronously decompress data */
22
+ async decompress(input, size) {
23
+ await this.preload();
24
+ return this.decompressSync(input, size);
25
+ }
26
+ /** Synchronously compress data */
27
+ compressSync(input) {
28
+ throw new Error(`${this.name}: sync compression not supported`);
29
+ }
30
+ /** Synchronously compress data */
31
+ decompressSync(input, size) {
32
+ throw new Error(`${this.name}: sync decompression not supported`);
33
+ }
34
+ /** Compress batches */
35
+ async *compressBatches(asyncIterator) {
36
+ // TODO - implement incremental compression
37
+ const input = await this.concatenate(asyncIterator);
38
+ yield this.compress(input);
39
+ }
40
+ /** Decompress batches */
41
+ async *decompressBatches(asyncIterator) {
42
+ // TODO - implement incremental compression
43
+ const input = await this.concatenate(asyncIterator);
44
+ yield this.decompress(input);
45
+ }
46
+ // HELPERS
47
+ concatenate(asyncIterator) {
48
+ return (0, loader_utils_1.concatenateArrayBuffersAsync)(asyncIterator);
49
+ }
50
+ improveError(error) {
51
+ if (!error.message.includes(this.name)) {
52
+ error.message = `${this.name} ${error.message}`;
53
+ }
54
+ return error;
55
+ }
56
+ }
57
+ exports.Compression = Compression;
@@ -29,3 +29,4 @@ export declare class DeflateCompression extends Compression {
29
29
  _getChunks(): ArrayBuffer[];
30
30
  _getError(code?: number): string;
31
31
  }
32
+ //# sourceMappingURL=deflate-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deflate-compression.d.ts","sourceRoot":"","sources":["../../src/lib/deflate-compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,oBAAY,yBAAyB,GAAG,kBAAkB,GAAG;IAC3D,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;CAC3E,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAa;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IACnC,QAAQ,CAAC,gBAAgB,WAAe;IACxC,QAAQ,CAAC,WAAW,QAAQ;IAE5B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAE5C,OAAO,CAAC,OAAO,CAAqB;gBAExB,OAAO,GAAE,yBAA8B;IAK7C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAWlD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAW1D,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAW7C,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAWxC,eAAe,CACpB,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAMtB,iBAAiB,CACtB,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAMtB,gBAAgB,CACrB,aAAa,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAC1C,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAwB7B,OAAO,CAAC,KAAK,KAAA;IAIb,MAAM,CAAC,MAAM,KAAA;IAMb,UAAU,IAAI,WAAW,EAAE;IAO3B,SAAS,CAAC,IAAI,GAAE,MAAU,GAAG,MAAM;CAuBpC"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeflateCompression = void 0;
7
+ const compression_1 = require("./compression");
8
+ const loader_utils_1 = require("@loaders.gl/loader-utils");
9
+ const pako_1 = __importDefault(require("pako")); // https://bundlephobia.com/package/pako
10
+ const zlib_1 = __importDefault(require("zlib"));
11
+ const loader_utils_2 = require("@loaders.gl/loader-utils");
12
+ /**
13
+ * DEFLATE compression / decompression
14
+ */
15
+ class DeflateCompression extends compression_1.Compression {
16
+ constructor(options = {}) {
17
+ super(options);
18
+ this.name = 'deflate';
19
+ this.extensions = [];
20
+ this.contentEncodings = ['deflate'];
21
+ this.isSupported = true;
22
+ this._chunks = [];
23
+ this.options = options;
24
+ }
25
+ async compress(input) {
26
+ // On Node.js we can use built-in zlib
27
+ if (!loader_utils_1.isBrowser && this.options.deflate?.useZlib) {
28
+ const buffer = this.options.deflate?.gzip
29
+ ? await (0, loader_utils_2.promisify)(zlib_1.default.gzip)(input)
30
+ : await (0, loader_utils_2.promisify)(zlib_1.default.deflate)(input);
31
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
32
+ }
33
+ return this.compressSync(input);
34
+ }
35
+ async decompress(input) {
36
+ // On Node.js we can use built-in zlib
37
+ if (!loader_utils_1.isBrowser && this.options.deflate?.useZlib) {
38
+ const buffer = this.options.deflate?.gzip
39
+ ? await (0, loader_utils_2.promisify)(zlib_1.default.gunzip)(input)
40
+ : await (0, loader_utils_2.promisify)(zlib_1.default.inflate)(input);
41
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
42
+ }
43
+ return this.decompressSync(input);
44
+ }
45
+ compressSync(input) {
46
+ // On Node.js we can use built-in zlib
47
+ if (!loader_utils_1.isBrowser && this.options.deflate?.useZlib) {
48
+ const buffer = this.options.deflate?.gzip ? zlib_1.default.gzipSync(input) : zlib_1.default.deflateSync(input);
49
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
50
+ }
51
+ const pakoOptions = this.options?.deflate || {};
52
+ const inputArray = new Uint8Array(input);
53
+ return pako_1.default.deflate(inputArray, pakoOptions).buffer;
54
+ }
55
+ decompressSync(input) {
56
+ // On Node.js we can use built-in zlib
57
+ if (!loader_utils_1.isBrowser && this.options.deflate?.useZlib) {
58
+ const buffer = this.options.deflate?.gzip ? zlib_1.default.gunzipSync(input) : zlib_1.default.inflateSync(input);
59
+ return (0, loader_utils_1.toArrayBuffer)(buffer);
60
+ }
61
+ const pakoOptions = this.options?.deflate || {};
62
+ const inputArray = new Uint8Array(input);
63
+ return pako_1.default.inflate(inputArray, pakoOptions).buffer;
64
+ }
65
+ async *compressBatches(asyncIterator) {
66
+ const pakoOptions = this.options?.deflate || {};
67
+ const pakoProcessor = new pako_1.default.Deflate(pakoOptions);
68
+ yield* this.transformBatches(pakoProcessor, asyncIterator);
69
+ }
70
+ async *decompressBatches(asyncIterator) {
71
+ const pakoOptions = this.options?.deflate || {};
72
+ const pakoProcessor = new pako_1.default.Inflate(pakoOptions);
73
+ yield* this.transformBatches(pakoProcessor, asyncIterator);
74
+ }
75
+ async *transformBatches(pakoProcessor, asyncIterator) {
76
+ pakoProcessor.onData = this._onData.bind(this);
77
+ pakoProcessor.onEnd = this._onEnd.bind(this);
78
+ for await (const chunk of asyncIterator) {
79
+ const uint8Array = new Uint8Array(chunk);
80
+ const ok = pakoProcessor.push(uint8Array, false); // false -> not last chunk
81
+ if (!ok) {
82
+ throw new Error(`${this._getError()}write`);
83
+ }
84
+ const chunks = this._getChunks();
85
+ yield* chunks;
86
+ }
87
+ // End
88
+ const emptyChunk = new Uint8Array(0);
89
+ const ok = pakoProcessor.push(emptyChunk, true); // true -> last chunk
90
+ if (!ok) {
91
+ // For some reason we get error but it still works???
92
+ // throw new Error(this._getError() + 'end');
93
+ }
94
+ const chunks = this._getChunks();
95
+ yield* chunks;
96
+ }
97
+ _onData(chunk) {
98
+ this._chunks.push(chunk);
99
+ }
100
+ _onEnd(status) {
101
+ if (status !== 0) {
102
+ throw new Error(this._getError(status) + this._chunks.length);
103
+ }
104
+ }
105
+ _getChunks() {
106
+ const chunks = this._chunks;
107
+ this._chunks = [];
108
+ return chunks;
109
+ }
110
+ // TODO - For some reason we don't get the error message from pako in _onEnd?
111
+ _getError(code = 0) {
112
+ const MESSAGES = {
113
+ /* Z_NEED_DICT 2 */
114
+ 2: 'need dictionary',
115
+ /* Z_STREAM_END 1 */
116
+ 1: 'stream end',
117
+ /* Z_OK 0 */
118
+ 0: '',
119
+ /* Z_ERRNO (-1) */
120
+ '-1': 'file error',
121
+ /* Z_STREAM_ERROR (-2) */
122
+ '-2': 'stream error',
123
+ /* Z_DATA_ERROR (-3) */
124
+ '-3': 'data error',
125
+ /* Z_MEM_ERROR (-4) */
126
+ '-4': 'insufficient memory',
127
+ /* Z_BUF_ERROR (-5) */
128
+ '-5': 'buffer error',
129
+ /* Z_VERSION_ERROR (-6) */
130
+ '-6': 'incompatible version'
131
+ };
132
+ return `${this.name}: ${MESSAGES[code]}`;
133
+ }
134
+ }
135
+ exports.DeflateCompression = DeflateCompression;
@@ -14,3 +14,4 @@ export declare class GZipCompression extends DeflateCompression {
14
14
  readonly isSupported = true;
15
15
  constructor(options?: GZipCompressionOptions);
16
16
  }
17
+ //# sourceMappingURL=gzip-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gzip-compression.d.ts","sourceRoot":"","sources":["../../src/lib/gzip-compression.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,oBAAY,sBAAsB,GAAG,kBAAkB,GAAG;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAU;IAC/B,QAAQ,CAAC,UAAU,WAAkB;IACrC,QAAQ,CAAC,gBAAgB,WAAsB;IAC/C,QAAQ,CAAC,WAAW,QAAQ;gBAEhB,OAAO,CAAC,EAAE,sBAAsB;CAG7C"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GZipCompression = void 0;
4
+ const deflate_compression_1 = require("./deflate-compression");
5
+ /**
6
+ * GZIP compression / decompression
7
+ */
8
+ class GZipCompression extends deflate_compression_1.DeflateCompression {
9
+ constructor(options) {
10
+ super({ ...options, deflate: { ...options?.gzip, gzip: true } });
11
+ this.name = 'gzip';
12
+ this.extensions = ['gz', 'gzip'];
13
+ this.contentEncodings = ['gzip', 'x-gzip'];
14
+ this.isSupported = true;
15
+ }
16
+ }
17
+ exports.GZipCompression = GZipCompression;
@@ -34,3 +34,4 @@ export declare class LZ4Compression extends Compression {
34
34
  */
35
35
  checkMagicNumber(data: ArrayBuffer): boolean;
36
36
  }
37
+ //# sourceMappingURL=lz4-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lz4-compression.d.ts","sourceRoot":"","sources":["../../src/lib/lz4-compression.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAM1C;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IAC9B,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,gBAAgB,WAAa;IACtC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAEzB,OAAO,EAAE,kBAAkB;IAUvC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAK7C;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;IAwBhE;;;;;;;;OAQG;IACH,WAAW,CACT,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,UAAU,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM;IAgET;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;CAI7C"}