@loaders.gl/core 3.1.0-alpha.4 → 3.1.0-alpha.5

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 (103) hide show
  1. package/dist/dist.min.js +1 -1
  2. package/dist/dist.min.js.map +1 -1
  3. package/dist/es5/bundle.js +1 -1
  4. package/dist/es5/bundle.js.map +1 -1
  5. package/dist/es5/index.js +56 -56
  6. package/dist/es5/iterators/batch-iterators/timed-batch-iterator.js +14 -119
  7. package/dist/es5/iterators/batch-iterators/timed-batch-iterator.js.map +1 -1
  8. package/dist/es5/iterators/make-iterator/make-array-buffer-iterator.js +17 -53
  9. package/dist/es5/iterators/make-iterator/make-array-buffer-iterator.js.map +1 -1
  10. package/dist/es5/iterators/make-iterator/make-blob-iterator.js +12 -53
  11. package/dist/es5/iterators/make-iterator/make-blob-iterator.js.map +1 -1
  12. package/dist/es5/iterators/make-iterator/make-iterator.js +1 -1
  13. package/dist/es5/iterators/make-iterator/make-iterator.js.map +1 -1
  14. package/dist/es5/iterators/make-iterator/make-stream-iterator.js +24 -161
  15. package/dist/es5/iterators/make-iterator/make-stream-iterator.js.map +1 -1
  16. package/dist/es5/iterators/make-iterator/make-string-iterator.js +13 -41
  17. package/dist/es5/iterators/make-iterator/make-string-iterator.js.map +1 -1
  18. package/dist/es5/iterators/make-stream/make-dom-stream.js +24 -69
  19. package/dist/es5/iterators/make-stream/make-dom-stream.js.map +1 -1
  20. package/dist/es5/iterators/make-stream/make-node-stream.js +53 -189
  21. package/dist/es5/iterators/make-stream/make-node-stream.js.map +1 -1
  22. package/dist/es5/javascript-utils/is-type.js +18 -58
  23. package/dist/es5/javascript-utils/is-type.js.map +1 -1
  24. package/dist/es5/lib/api/encode.js +46 -242
  25. package/dist/es5/lib/api/encode.js.map +1 -1
  26. package/dist/es5/lib/api/load-in-batches.js +9 -52
  27. package/dist/es5/lib/api/load-in-batches.js.map +1 -1
  28. package/dist/es5/lib/api/load.js +15 -60
  29. package/dist/es5/lib/api/load.js.map +1 -1
  30. package/dist/es5/lib/api/parse-in-batches.js +81 -333
  31. package/dist/es5/lib/api/parse-in-batches.js.map +1 -1
  32. package/dist/es5/lib/api/parse-sync.js +11 -15
  33. package/dist/es5/lib/api/parse-sync.js.map +1 -1
  34. package/dist/es5/lib/api/parse.js +50 -142
  35. package/dist/es5/lib/api/parse.js.map +1 -1
  36. package/dist/es5/lib/api/register-loaders.js +8 -30
  37. package/dist/es5/lib/api/register-loaders.js.map +1 -1
  38. package/dist/es5/lib/api/save.js +4 -37
  39. package/dist/es5/lib/api/save.js.map +1 -1
  40. package/dist/es5/lib/api/select-loader.js +74 -209
  41. package/dist/es5/lib/api/select-loader.js.map +1 -1
  42. package/dist/es5/lib/fetch/fetch-error-message.js +13 -55
  43. package/dist/es5/lib/fetch/fetch-error-message.js.map +1 -1
  44. package/dist/es5/lib/fetch/fetch-file.js +10 -47
  45. package/dist/es5/lib/fetch/fetch-file.js.map +1 -1
  46. package/dist/es5/lib/fetch/read-array-buffer.js +19 -80
  47. package/dist/es5/lib/fetch/read-array-buffer.js.map +1 -1
  48. package/dist/es5/lib/fetch/read-file.js +2 -3
  49. package/dist/es5/lib/fetch/read-file.js.map +1 -1
  50. package/dist/es5/lib/fetch/write-file.js +9 -38
  51. package/dist/es5/lib/fetch/write-file.js.map +1 -1
  52. package/dist/es5/lib/filesystems/browser-filesystem.js +77 -266
  53. package/dist/es5/lib/filesystems/browser-filesystem.js.map +1 -1
  54. package/dist/es5/lib/filesystems/read-array-buffer.js +6 -43
  55. package/dist/es5/lib/filesystems/read-array-buffer.js.map +1 -1
  56. package/dist/es5/lib/init.js +1 -1
  57. package/dist/es5/lib/init.js.map +1 -1
  58. package/dist/es5/lib/loader-utils/check-errors.js +12 -50
  59. package/dist/es5/lib/loader-utils/check-errors.js.map +1 -1
  60. package/dist/es5/lib/loader-utils/get-data.js +71 -238
  61. package/dist/es5/lib/loader-utils/get-data.js.map +1 -1
  62. package/dist/es5/lib/loader-utils/loader-context.js +8 -19
  63. package/dist/es5/lib/loader-utils/loader-context.js.map +1 -1
  64. package/dist/es5/lib/loader-utils/loggers.js +36 -81
  65. package/dist/es5/lib/loader-utils/loggers.js.map +1 -1
  66. package/dist/es5/lib/loader-utils/normalize-loader.js +7 -13
  67. package/dist/es5/lib/loader-utils/normalize-loader.js.map +1 -1
  68. package/dist/es5/lib/loader-utils/option-defaults.js +2 -2
  69. package/dist/es5/lib/loader-utils/option-defaults.js.map +1 -1
  70. package/dist/es5/lib/loader-utils/option-utils.js +51 -85
  71. package/dist/es5/lib/loader-utils/option-utils.js.map +1 -1
  72. package/dist/es5/lib/progress/fetch-progress.js +49 -150
  73. package/dist/es5/lib/progress/fetch-progress.js.map +1 -1
  74. package/dist/es5/lib/utils/mime-type-utils.js +4 -4
  75. package/dist/es5/lib/utils/mime-type-utils.js.map +1 -1
  76. package/dist/es5/lib/utils/resource-utils.js +4 -4
  77. package/dist/es5/lib/utils/resource-utils.js.map +1 -1
  78. package/dist/es5/lib/utils/response-utils.js +88 -215
  79. package/dist/es5/lib/utils/response-utils.js.map +1 -1
  80. package/dist/es5/null-loader.js +10 -137
  81. package/dist/es5/null-loader.js.map +1 -1
  82. package/dist/esm/lib/api/encode.js +1 -1
  83. package/dist/esm/lib/api/encode.js.map +1 -1
  84. package/dist/esm/lib/api/parse-sync.js +1 -1
  85. package/dist/esm/lib/api/parse-sync.js.map +1 -1
  86. package/dist/esm/lib/api/parse.js +1 -1
  87. package/dist/esm/lib/api/parse.js.map +1 -1
  88. package/dist/esm/lib/api/select-loader.js +4 -4
  89. package/dist/esm/lib/api/select-loader.js.map +1 -1
  90. package/dist/esm/lib/fetch/fetch-error-message.js +2 -2
  91. package/dist/esm/lib/fetch/fetch-error-message.js.map +1 -1
  92. package/dist/esm/lib/init.js +1 -1
  93. package/dist/esm/lib/loader-utils/check-errors.js +4 -4
  94. package/dist/esm/lib/loader-utils/check-errors.js.map +1 -1
  95. package/dist/esm/lib/loader-utils/option-utils.js +5 -5
  96. package/dist/esm/lib/loader-utils/option-utils.js.map +1 -1
  97. package/dist/esm/lib/utils/response-utils.js +7 -7
  98. package/dist/esm/lib/utils/response-utils.js.map +1 -1
  99. package/dist/esm/null-loader.js +1 -1
  100. package/dist/null-worker.js +1 -1
  101. package/dist/null-worker.js.map +1 -1
  102. package/package.json +4 -4
  103. package/src/lib/api/encode.ts +1 -0
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.parseMIMEType = parseMIMEType;
7
7
  exports.parseMIMETypeFromURL = parseMIMETypeFromURL;
8
- var DATA_URL_PATTERN = /^data:([-\w.]+\/[-\w.+]+)(;|,)/;
9
- var MIME_TYPE_PATTERN = /^([-\w.]+\/[-\w.+]+)/;
8
+ const DATA_URL_PATTERN = /^data:([-\w.]+\/[-\w.+]+)(;|,)/;
9
+ const MIME_TYPE_PATTERN = /^([-\w.]+\/[-\w.+]+)/;
10
10
 
11
11
  function parseMIMEType(mimeString) {
12
- var matches = MIME_TYPE_PATTERN.exec(mimeString);
12
+ const matches = MIME_TYPE_PATTERN.exec(mimeString);
13
13
 
14
14
  if (matches) {
15
15
  return matches[1];
@@ -19,7 +19,7 @@ function parseMIMEType(mimeString) {
19
19
  }
20
20
 
21
21
  function parseMIMETypeFromURL(url) {
22
- var matches = DATA_URL_PATTERN.exec(url);
22
+ const matches = DATA_URL_PATTERN.exec(url);
23
23
 
24
24
  if (matches) {
25
25
  return matches[1];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/mime-type-utils.ts"],"names":["DATA_URL_PATTERN","MIME_TYPE_PATTERN","parseMIMEType","mimeString","matches","exec","parseMIMETypeFromURL","url"],"mappings":";;;;;;;AAGA,IAAMA,gBAAgB,GAAG,gCAAzB;AACA,IAAMC,iBAAiB,GAAG,sBAA1B;;AAUO,SAASC,aAAT,CAAuBC,UAAvB,EAAmD;AAExD,MAAMC,OAAO,GAAGH,iBAAiB,CAACI,IAAlB,CAAuBF,UAAvB,CAAhB;;AACA,MAAIC,OAAJ,EAAa;AACX,WAAOA,OAAO,CAAC,CAAD,CAAd;AACD;;AACD,SAAOD,UAAP;AACD;;AAWM,SAASG,oBAAT,CAA8BC,GAA9B,EAAmD;AAExD,MAAMH,OAAO,GAAGJ,gBAAgB,CAACK,IAAjB,CAAsBE,GAAtB,CAAhB;;AACA,MAAIH,OAAJ,EAAa;AACX,WAAOA,OAAO,CAAC,CAAD,CAAd;AACD;;AACD,SAAO,EAAP;AACD","sourcesContent":["// TODO - build/integrate proper MIME type parsing\n// https://mimesniff.spec.whatwg.org/\n\nconst DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\n\n/**\n * Remove extra data like `charset` from MIME types\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMEType(mimeString: string): string {\n // If resource is a data url, extract any embedded mime type\n const matches = MIME_TYPE_PATTERN.exec(mimeString);\n if (matches) {\n return matches[1];\n }\n return mimeString;\n}\n\n/**\n * Extract MIME type from data URL\n *\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMETypeFromURL(url: string): string {\n // If resource is a data URL, extract any embedded mime type\n const matches = DATA_URL_PATTERN.exec(url);\n if (matches) {\n return matches[1];\n }\n return '';\n}\n"],"file":"mime-type-utils.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/mime-type-utils.ts"],"names":["DATA_URL_PATTERN","MIME_TYPE_PATTERN","parseMIMEType","mimeString","matches","exec","parseMIMETypeFromURL","url"],"mappings":";;;;;;;AAGA,MAAMA,gBAAgB,GAAG,gCAAzB;AACA,MAAMC,iBAAiB,GAAG,sBAA1B;;AAUO,SAASC,aAAT,CAAuBC,UAAvB,EAAmD;AAExD,QAAMC,OAAO,GAAGH,iBAAiB,CAACI,IAAlB,CAAuBF,UAAvB,CAAhB;;AACA,MAAIC,OAAJ,EAAa;AACX,WAAOA,OAAO,CAAC,CAAD,CAAd;AACD;;AACD,SAAOD,UAAP;AACD;;AAWM,SAASG,oBAAT,CAA8BC,GAA9B,EAAmD;AAExD,QAAMH,OAAO,GAAGJ,gBAAgB,CAACK,IAAjB,CAAsBE,GAAtB,CAAhB;;AACA,MAAIH,OAAJ,EAAa;AACX,WAAOA,OAAO,CAAC,CAAD,CAAd;AACD;;AACD,SAAO,EAAP;AACD","sourcesContent":["// TODO - build/integrate proper MIME type parsing\n// https://mimesniff.spec.whatwg.org/\n\nconst DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\n\n/**\n * Remove extra data like `charset` from MIME types\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMEType(mimeString: string): string {\n // If resource is a data url, extract any embedded mime type\n const matches = MIME_TYPE_PATTERN.exec(mimeString);\n if (matches) {\n return matches[1];\n }\n return mimeString;\n}\n\n/**\n * Extract MIME type from data URL\n *\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMETypeFromURL(url: string): string {\n // If resource is a data URL, extract any embedded mime type\n const matches = DATA_URL_PATTERN.exec(url);\n if (matches) {\n return matches[1];\n }\n return '';\n}\n"],"file":"mime-type-utils.js"}
@@ -10,14 +10,14 @@ var _isType = require("../../javascript-utils/is-type");
10
10
 
11
11
  var _mimeTypeUtils = require("./mime-type-utils");
12
12
 
13
- var QUERY_STRING_PATTERN = /\?.*/;
13
+ const QUERY_STRING_PATTERN = /\?.*/;
14
14
 
15
15
  function getResourceUrlAndType(resource) {
16
16
  if ((0, _isType.isResponse)(resource)) {
17
- var url = stripQueryString(resource.url || '');
18
- var contentTypeHeader = resource.headers.get('content-type') || '';
17
+ const url = stripQueryString(resource.url || '');
18
+ const contentTypeHeader = resource.headers.get('content-type') || '';
19
19
  return {
20
- url: url,
20
+ url,
21
21
  type: (0, _mimeTypeUtils.parseMIMEType)(contentTypeHeader) || (0, _mimeTypeUtils.parseMIMETypeFromURL)(url)
22
22
  };
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/resource-utils.ts"],"names":["QUERY_STRING_PATTERN","getResourceUrlAndType","resource","url","stripQueryString","contentTypeHeader","headers","get","type","name","getResourceContentLength","size","length","ArrayBuffer","byteLength","isView","replace"],"mappings":";;;;;;;;AAAA;;AACA;;AAEA,IAAMA,oBAAoB,GAAG,MAA7B;;AAUO,SAASC,qBAAT,CAA+BC,QAA/B,EAA2E;AAEhF,MAAI,wBAAWA,QAAX,CAAJ,EAA0B;AACxB,QAAMC,GAAG,GAAGC,gBAAgB,CAACF,QAAQ,CAACC,GAAT,IAAgB,EAAjB,CAA5B;AACA,QAAME,iBAAiB,GAAGH,QAAQ,CAACI,OAAT,CAAiBC,GAAjB,CAAqB,cAArB,KAAwC,EAAlE;AACA,WAAO;AACLJ,MAAAA,GAAG,EAAHA,GADK;AAELK,MAAAA,IAAI,EAAE,kCAAcH,iBAAd,KAAoC,yCAAqBF,GAArB;AAFrC,KAAP;AAID;;AAGD,MAAI,oBAAOD,QAAP,CAAJ,EAAsB;AACpB,WAAO;AAGLC,MAAAA,GAAG,EAAEC,gBAAgB,CAACF,QAAQ,CAACO,IAAT,IAAiB,EAAlB,CAHhB;AAILD,MAAAA,IAAI,EAAEN,QAAQ,CAACM,IAAT,IAAiB;AAJlB,KAAP;AAMD;;AAED,MAAI,OAAON,QAAP,KAAoB,QAAxB,EAAkC;AAChC,WAAO;AAELC,MAAAA,GAAG,EAAEC,gBAAgB,CAACF,QAAD,CAFhB;AAILM,MAAAA,IAAI,EAAE,yCAAqBN,QAArB;AAJD,KAAP;AAMD;;AAGD,SAAO;AACLC,IAAAA,GAAG,EAAE,EADA;AAELK,IAAAA,IAAI,EAAE;AAFD,GAAP;AAID;;AASM,SAASE,wBAAT,CAAkCR,QAAlC,EAAyD;AAC9D,MAAI,wBAAWA,QAAX,CAAJ,EAA0B;AACxB,WAAOA,QAAQ,CAACI,OAAT,CAAiB,gBAAjB,KAAsC,CAAC,CAA9C;AACD;;AACD,MAAI,oBAAOJ,QAAP,CAAJ,EAAsB;AACpB,WAAOA,QAAQ,CAACS,IAAhB;AACD;;AACD,MAAI,OAAOT,QAAP,KAAoB,QAAxB,EAAkC;AAEhC,WAAOA,QAAQ,CAACU,MAAhB;AACD;;AACD,MAAIV,QAAQ,YAAYW,WAAxB,EAAqC;AACnC,WAAOX,QAAQ,CAACY,UAAhB;AACD;;AACD,MAAID,WAAW,CAACE,MAAZ,CAAmBb,QAAnB,CAAJ,EAAkC;AAChC,WAAOA,QAAQ,CAACY,UAAhB;AACD;;AACD,SAAO,CAAC,CAAR;AACD;;AAED,SAASV,gBAAT,CAA0BD,GAA1B,EAA+B;AAC7B,SAAOA,GAAG,CAACa,OAAJ,CAAYhB,oBAAZ,EAAkC,EAAlC,CAAP;AACD","sourcesContent":["import {isResponse, isBlob} from '../../javascript-utils/is-type';\nimport {parseMIMEType, parseMIMETypeFromURL} from './mime-type-utils';\n\nconst QUERY_STRING_PATTERN = /\\?.*/;\n\n/**\n * Returns an object with `url` and (MIME) `type` fields\n * If it cannot determine url or type, the corresponding value will be an empty string\n *\n * @param resource Any type, but only Responses, string URLs and data URLs are processed\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceUrlAndType(resource: any): {url: string; type: string} {\n // If resource is a response, it contains the information directly\n if (isResponse(resource)) {\n const url = stripQueryString(resource.url || '');\n const contentTypeHeader = resource.headers.get('content-type') || '';\n return {\n url,\n type: parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(url)\n };\n }\n\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n return {\n // File objects have a \"name\" property. Blob objects don't have any\n // url (name) information\n url: stripQueryString(resource.name || ''),\n type: resource.type || ''\n };\n }\n\n if (typeof resource === 'string') {\n return {\n // TODO this could mess up data URL but it doesn't matter as it is just used for inference\n url: stripQueryString(resource),\n // If a data url\n type: parseMIMETypeFromURL(resource)\n };\n }\n\n // Unknown\n return {\n url: '',\n type: ''\n };\n}\n\n/**\n * Returns (approximate) content length for a resource if it can be determined.\n * Returns -1 if content length cannot be determined.\n * @param resource\n\n * @note string parameters are NOT assumed to be URLs\n */\nexport function getResourceContentLength(resource: any): number {\n if (isResponse(resource)) {\n return resource.headers['content-length'] || -1;\n }\n if (isBlob(resource)) {\n return resource.size;\n }\n if (typeof resource === 'string') {\n // TODO - handle data URL?\n return resource.length;\n }\n if (resource instanceof ArrayBuffer) {\n return resource.byteLength;\n }\n if (ArrayBuffer.isView(resource)) {\n return resource.byteLength;\n }\n return -1;\n}\n\nfunction stripQueryString(url) {\n return url.replace(QUERY_STRING_PATTERN, '');\n}\n"],"file":"resource-utils.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/resource-utils.ts"],"names":["QUERY_STRING_PATTERN","getResourceUrlAndType","resource","url","stripQueryString","contentTypeHeader","headers","get","type","name","getResourceContentLength","size","length","ArrayBuffer","byteLength","isView","replace"],"mappings":";;;;;;;;AAAA;;AACA;;AAEA,MAAMA,oBAAoB,GAAG,MAA7B;;AAUO,SAASC,qBAAT,CAA+BC,QAA/B,EAA2E;AAEhF,MAAI,wBAAWA,QAAX,CAAJ,EAA0B;AACxB,UAAMC,GAAG,GAAGC,gBAAgB,CAACF,QAAQ,CAACC,GAAT,IAAgB,EAAjB,CAA5B;AACA,UAAME,iBAAiB,GAAGH,QAAQ,CAACI,OAAT,CAAiBC,GAAjB,CAAqB,cAArB,KAAwC,EAAlE;AACA,WAAO;AACLJ,MAAAA,GADK;AAELK,MAAAA,IAAI,EAAE,kCAAcH,iBAAd,KAAoC,yCAAqBF,GAArB;AAFrC,KAAP;AAID;;AAGD,MAAI,oBAAOD,QAAP,CAAJ,EAAsB;AACpB,WAAO;AAGLC,MAAAA,GAAG,EAAEC,gBAAgB,CAACF,QAAQ,CAACO,IAAT,IAAiB,EAAlB,CAHhB;AAILD,MAAAA,IAAI,EAAEN,QAAQ,CAACM,IAAT,IAAiB;AAJlB,KAAP;AAMD;;AAED,MAAI,OAAON,QAAP,KAAoB,QAAxB,EAAkC;AAChC,WAAO;AAELC,MAAAA,GAAG,EAAEC,gBAAgB,CAACF,QAAD,CAFhB;AAILM,MAAAA,IAAI,EAAE,yCAAqBN,QAArB;AAJD,KAAP;AAMD;;AAGD,SAAO;AACLC,IAAAA,GAAG,EAAE,EADA;AAELK,IAAAA,IAAI,EAAE;AAFD,GAAP;AAID;;AASM,SAASE,wBAAT,CAAkCR,QAAlC,EAAyD;AAC9D,MAAI,wBAAWA,QAAX,CAAJ,EAA0B;AACxB,WAAOA,QAAQ,CAACI,OAAT,CAAiB,gBAAjB,KAAsC,CAAC,CAA9C;AACD;;AACD,MAAI,oBAAOJ,QAAP,CAAJ,EAAsB;AACpB,WAAOA,QAAQ,CAACS,IAAhB;AACD;;AACD,MAAI,OAAOT,QAAP,KAAoB,QAAxB,EAAkC;AAEhC,WAAOA,QAAQ,CAACU,MAAhB;AACD;;AACD,MAAIV,QAAQ,YAAYW,WAAxB,EAAqC;AACnC,WAAOX,QAAQ,CAACY,UAAhB;AACD;;AACD,MAAID,WAAW,CAACE,MAAZ,CAAmBb,QAAnB,CAAJ,EAAkC;AAChC,WAAOA,QAAQ,CAACY,UAAhB;AACD;;AACD,SAAO,CAAC,CAAR;AACD;;AAED,SAASV,gBAAT,CAA0BD,GAA1B,EAA+B;AAC7B,SAAOA,GAAG,CAACa,OAAJ,CAAYhB,oBAAZ,EAAkC,EAAlC,CAAP;AACD","sourcesContent":["import {isResponse, isBlob} from '../../javascript-utils/is-type';\nimport {parseMIMEType, parseMIMETypeFromURL} from './mime-type-utils';\n\nconst QUERY_STRING_PATTERN = /\\?.*/;\n\n/**\n * Returns an object with `url` and (MIME) `type` fields\n * If it cannot determine url or type, the corresponding value will be an empty string\n *\n * @param resource Any type, but only Responses, string URLs and data URLs are processed\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceUrlAndType(resource: any): {url: string; type: string} {\n // If resource is a response, it contains the information directly\n if (isResponse(resource)) {\n const url = stripQueryString(resource.url || '');\n const contentTypeHeader = resource.headers.get('content-type') || '';\n return {\n url,\n type: parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(url)\n };\n }\n\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n return {\n // File objects have a \"name\" property. Blob objects don't have any\n // url (name) information\n url: stripQueryString(resource.name || ''),\n type: resource.type || ''\n };\n }\n\n if (typeof resource === 'string') {\n return {\n // TODO this could mess up data URL but it doesn't matter as it is just used for inference\n url: stripQueryString(resource),\n // If a data url\n type: parseMIMETypeFromURL(resource)\n };\n }\n\n // Unknown\n return {\n url: '',\n type: ''\n };\n}\n\n/**\n * Returns (approximate) content length for a resource if it can be determined.\n * Returns -1 if content length cannot be determined.\n * @param resource\n\n * @note string parameters are NOT assumed to be URLs\n */\nexport function getResourceContentLength(resource: any): number {\n if (isResponse(resource)) {\n return resource.headers['content-length'] || -1;\n }\n if (isBlob(resource)) {\n return resource.size;\n }\n if (typeof resource === 'string') {\n // TODO - handle data URL?\n return resource.length;\n }\n if (resource instanceof ArrayBuffer) {\n return resource.byteLength;\n }\n if (ArrayBuffer.isView(resource)) {\n return resource.byteLength;\n }\n return -1;\n}\n\nfunction stripQueryString(url) {\n return url.replace(QUERY_STRING_PATTERN, '');\n}\n"],"file":"resource-utils.js"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -9,244 +7,119 @@ exports.makeResponse = makeResponse;
9
7
  exports.checkResponse = checkResponse;
10
8
  exports.checkResponseSync = checkResponseSync;
11
9
 
12
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
-
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
10
  var _isType = require("../../javascript-utils/is-type");
17
11
 
18
12
  var _resourceUtils = require("./resource-utils");
19
13
 
20
- function makeResponse(_x) {
21
- return _makeResponse.apply(this, arguments);
22
- }
14
+ async function makeResponse(resource) {
15
+ if ((0, _isType.isResponse)(resource)) {
16
+ return resource;
17
+ }
23
18
 
24
- function _makeResponse() {
25
- _makeResponse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(resource) {
26
- var headers, contentLength, _getResourceUrlAndTyp, url, type, initialDataUrl, response;
27
-
28
- return _regenerator.default.wrap(function _callee$(_context) {
29
- while (1) {
30
- switch (_context.prev = _context.next) {
31
- case 0:
32
- if (!(0, _isType.isResponse)(resource)) {
33
- _context.next = 2;
34
- break;
35
- }
36
-
37
- return _context.abrupt("return", resource);
38
-
39
- case 2:
40
- headers = {};
41
- contentLength = (0, _resourceUtils.getResourceContentLength)(resource);
42
-
43
- if (contentLength >= 0) {
44
- headers['content-length'] = String(contentLength);
45
- }
46
-
47
- _getResourceUrlAndTyp = (0, _resourceUtils.getResourceUrlAndType)(resource), url = _getResourceUrlAndTyp.url, type = _getResourceUrlAndTyp.type;
48
-
49
- if (type) {
50
- headers['content-type'] = type;
51
- }
52
-
53
- _context.next = 9;
54
- return getInitialDataUrl(resource);
55
-
56
- case 9:
57
- initialDataUrl = _context.sent;
58
-
59
- if (initialDataUrl) {
60
- headers['x-first-bytes'] = initialDataUrl;
61
- }
62
-
63
- if (typeof resource === 'string') {
64
- resource = new TextEncoder().encode(resource);
65
- }
66
-
67
- response = new Response(resource, {
68
- headers: headers
69
- });
70
- Object.defineProperty(response, 'url', {
71
- value: url
72
- });
73
- return _context.abrupt("return", response);
74
-
75
- case 15:
76
- case "end":
77
- return _context.stop();
78
- }
79
- }
80
- }, _callee);
81
- }));
82
- return _makeResponse.apply(this, arguments);
83
- }
19
+ const headers = {};
20
+ const contentLength = (0, _resourceUtils.getResourceContentLength)(resource);
21
+
22
+ if (contentLength >= 0) {
23
+ headers['content-length'] = String(contentLength);
24
+ }
25
+
26
+ const {
27
+ url,
28
+ type
29
+ } = (0, _resourceUtils.getResourceUrlAndType)(resource);
84
30
 
85
- function checkResponse(_x2) {
86
- return _checkResponse.apply(this, arguments);
31
+ if (type) {
32
+ headers['content-type'] = type;
33
+ }
34
+
35
+ const initialDataUrl = await getInitialDataUrl(resource);
36
+
37
+ if (initialDataUrl) {
38
+ headers['x-first-bytes'] = initialDataUrl;
39
+ }
40
+
41
+ if (typeof resource === 'string') {
42
+ resource = new TextEncoder().encode(resource);
43
+ }
44
+
45
+ const response = new Response(resource, {
46
+ headers
47
+ });
48
+ Object.defineProperty(response, 'url', {
49
+ value: url
50
+ });
51
+ return response;
87
52
  }
88
53
 
89
- function _checkResponse() {
90
- _checkResponse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(response) {
91
- var message;
92
- return _regenerator.default.wrap(function _callee2$(_context2) {
93
- while (1) {
94
- switch (_context2.prev = _context2.next) {
95
- case 0:
96
- if (response.ok) {
97
- _context2.next = 5;
98
- break;
99
- }
100
-
101
- _context2.next = 3;
102
- return getResponseError(response);
103
-
104
- case 3:
105
- message = _context2.sent;
106
- throw new Error(message);
107
-
108
- case 5:
109
- case "end":
110
- return _context2.stop();
111
- }
112
- }
113
- }, _callee2);
114
- }));
115
- return _checkResponse.apply(this, arguments);
54
+ async function checkResponse(response) {
55
+ if (!response.ok) {
56
+ const message = await getResponseError(response);
57
+ throw new Error(message);
58
+ }
116
59
  }
117
60
 
118
61
  function checkResponseSync(response) {
119
62
  if (!response.ok) {
120
- var message = "".concat(response.status, " ").concat(response.statusText);
63
+ let message = "".concat(response.status, " ").concat(response.statusText);
121
64
  message = message.length > 60 ? "".concat(message.slice(60), "...") : message;
122
65
  throw new Error(message);
123
66
  }
124
67
  }
125
68
 
126
- function getResponseError(_x3) {
127
- return _getResponseError.apply(this, arguments);
128
- }
69
+ async function getResponseError(response) {
70
+ let message = "Failed to fetch resource ".concat(response.url, " (").concat(response.status, "): ");
129
71
 
130
- function _getResponseError() {
131
- _getResponseError = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(response) {
132
- var message, contentType, text;
133
- return _regenerator.default.wrap(function _callee3$(_context3) {
134
- while (1) {
135
- switch (_context3.prev = _context3.next) {
136
- case 0:
137
- message = "Failed to fetch resource ".concat(response.url, " (").concat(response.status, "): ");
138
- _context3.prev = 1;
139
- contentType = response.headers.get('Content-Type');
140
- text = response.statusText;
141
-
142
- if (!contentType.includes('application/json')) {
143
- _context3.next = 11;
144
- break;
145
- }
146
-
147
- _context3.t0 = text;
148
- _context3.t1 = " ";
149
- _context3.next = 9;
150
- return response.text();
151
-
152
- case 9:
153
- _context3.t2 = _context3.sent;
154
- text = _context3.t0 += _context3.t1.concat.call(_context3.t1, _context3.t2);
155
-
156
- case 11:
157
- message += text;
158
- message = message.length > 60 ? "".concat(message.slice(60), "...") : message;
159
- _context3.next = 17;
160
- break;
161
-
162
- case 15:
163
- _context3.prev = 15;
164
- _context3.t3 = _context3["catch"](1);
165
-
166
- case 17:
167
- return _context3.abrupt("return", message);
168
-
169
- case 18:
170
- case "end":
171
- return _context3.stop();
172
- }
173
- }
174
- }, _callee3, null, [[1, 15]]);
175
- }));
176
- return _getResponseError.apply(this, arguments);
177
- }
72
+ try {
73
+ const contentType = response.headers.get('Content-Type');
74
+ let text = response.statusText;
75
+
76
+ if (contentType.includes('application/json')) {
77
+ text += " ".concat(await response.text());
78
+ }
178
79
 
179
- function getInitialDataUrl(_x4) {
180
- return _getInitialDataUrl.apply(this, arguments);
80
+ message += text;
81
+ message = message.length > 60 ? "".concat(message.slice(60), "...") : message;
82
+ } catch (error) {}
83
+
84
+ return message;
181
85
  }
182
86
 
183
- function _getInitialDataUrl() {
184
- _getInitialDataUrl = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(resource) {
185
- var INITIAL_DATA_LENGTH, blobSlice, slice, base64;
186
- return _regenerator.default.wrap(function _callee4$(_context4) {
187
- while (1) {
188
- switch (_context4.prev = _context4.next) {
189
- case 0:
190
- INITIAL_DATA_LENGTH = 5;
191
-
192
- if (!(typeof resource === 'string')) {
193
- _context4.next = 3;
194
- break;
195
- }
196
-
197
- return _context4.abrupt("return", "data:,".concat(resource.slice(0, INITIAL_DATA_LENGTH)));
198
-
199
- case 3:
200
- if (!(resource instanceof Blob)) {
201
- _context4.next = 8;
202
- break;
203
- }
204
-
205
- blobSlice = resource.slice(0, 5);
206
- _context4.next = 7;
207
- return new Promise(function (resolve) {
208
- var reader = new FileReader();
209
-
210
- reader.onload = function (event) {
211
- var _event$target;
212
-
213
- return resolve(event === null || event === void 0 ? void 0 : (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.result);
214
- };
215
-
216
- reader.readAsDataURL(blobSlice);
217
- });
218
-
219
- case 7:
220
- return _context4.abrupt("return", _context4.sent);
221
-
222
- case 8:
223
- if (!(resource instanceof ArrayBuffer)) {
224
- _context4.next = 12;
225
- break;
226
- }
227
-
228
- slice = resource.slice(0, INITIAL_DATA_LENGTH);
229
- base64 = arrayBufferToBase64(slice);
230
- return _context4.abrupt("return", "data:base64,".concat(base64));
231
-
232
- case 12:
233
- return _context4.abrupt("return", null);
234
-
235
- case 13:
236
- case "end":
237
- return _context4.stop();
238
- }
239
- }
240
- }, _callee4);
241
- }));
242
- return _getInitialDataUrl.apply(this, arguments);
87
+ async function getInitialDataUrl(resource) {
88
+ const INITIAL_DATA_LENGTH = 5;
89
+
90
+ if (typeof resource === 'string') {
91
+ return "data:,".concat(resource.slice(0, INITIAL_DATA_LENGTH));
92
+ }
93
+
94
+ if (resource instanceof Blob) {
95
+ const blobSlice = resource.slice(0, 5);
96
+ return await new Promise(resolve => {
97
+ const reader = new FileReader();
98
+
99
+ reader.onload = event => {
100
+ var _event$target;
101
+
102
+ return resolve(event === null || event === void 0 ? void 0 : (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.result);
103
+ };
104
+
105
+ reader.readAsDataURL(blobSlice);
106
+ });
107
+ }
108
+
109
+ if (resource instanceof ArrayBuffer) {
110
+ const slice = resource.slice(0, INITIAL_DATA_LENGTH);
111
+ const base64 = arrayBufferToBase64(slice);
112
+ return "data:base64,".concat(base64);
113
+ }
114
+
115
+ return null;
243
116
  }
244
117
 
245
118
  function arrayBufferToBase64(buffer) {
246
- var binary = '';
247
- var bytes = new Uint8Array(buffer);
119
+ let binary = '';
120
+ const bytes = new Uint8Array(buffer);
248
121
 
249
- for (var i = 0; i < bytes.byteLength; i++) {
122
+ for (let i = 0; i < bytes.byteLength; i++) {
250
123
  binary += String.fromCharCode(bytes[i]);
251
124
  }
252
125
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/response-utils.ts"],"names":["makeResponse","resource","headers","contentLength","String","url","type","getInitialDataUrl","initialDataUrl","TextEncoder","encode","response","Response","Object","defineProperty","value","checkResponse","ok","getResponseError","message","Error","checkResponseSync","status","statusText","length","slice","contentType","get","text","includes","INITIAL_DATA_LENGTH","Blob","blobSlice","Promise","resolve","reader","FileReader","onload","event","target","result","readAsDataURL","ArrayBuffer","base64","arrayBufferToBase64","buffer","binary","bytes","Uint8Array","i","byteLength","fromCharCode","btoa"],"mappings":"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","sourcesContent":["import {isResponse} from '../../javascript-utils/is-type';\nimport {getResourceContentLength, getResourceUrlAndType} from './resource-utils';\n\n/**\n * Returns a Response object\n * Adds content-length header when possible\n *\n * @param resource\n */\nexport async function makeResponse(resource: any): Promise<Response> {\n if (isResponse(resource)) {\n return resource;\n }\n\n // Add content-length header if possible\n const headers: {[header: string]: string} = {};\n\n const contentLength = getResourceContentLength(resource);\n if (contentLength >= 0) {\n headers['content-length'] = String(contentLength);\n }\n\n // `new Response(File)` does not preserve content-type and URL\n // so we add them here\n const {url, type} = getResourceUrlAndType(resource);\n if (type) {\n headers['content-type'] = type;\n }\n\n // Add a custom header with initial bytes if available\n const initialDataUrl = await getInitialDataUrl(resource);\n if (initialDataUrl) {\n headers['x-first-bytes'] = initialDataUrl;\n }\n\n // TODO - is this the best way of handling strings?\n // Maybe package as data URL instead?\n if (typeof resource === 'string') {\n // Convert to ArrayBuffer to avoid Response treating it as a URL\n resource = new TextEncoder().encode(resource);\n }\n\n // Attempt to create a Response from the resource, adding headers and setting url\n const response = new Response(resource, {headers});\n // We can't control `Response.url` via constructor, use a property override to record URL.\n Object.defineProperty(response, 'url', {value: url});\n return response;\n}\n\n/**\n * Checks response status (async) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport async function checkResponse(response: Response): Promise<void> {\n if (!response.ok) {\n const message = await getResponseError(response);\n throw new Error(message);\n }\n}\n\n/**\n * Checks response status (sync) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport function checkResponseSync(response: Response): void {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n message = message.length > 60 ? `${message.slice(60)}...` : message;\n throw new Error(message);\n }\n}\n\n// HELPERS\n\nasync function getResponseError(response): Promise<string> {\n let message = `Failed to fetch resource ${response.url} (${response.status}): `;\n try {\n const contentType = response.headers.get('Content-Type');\n let text = response.statusText;\n if (contentType.includes('application/json')) {\n text += ` ${await response.text()}`;\n }\n message += text;\n message = message.length > 60 ? `${message.slice(60)}...` : message;\n } catch (error) {\n // eslint forbids return in a finally statement, so we just catch here\n }\n return message;\n}\n\nasync function getInitialDataUrl(resource): Promise<string | null> {\n const INITIAL_DATA_LENGTH = 5;\n if (typeof resource === 'string') {\n return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;\n }\n if (resource instanceof Blob) {\n const blobSlice = resource.slice(0, 5);\n return await new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event?.target?.result as string);\n reader.readAsDataURL(blobSlice);\n });\n }\n if (resource instanceof ArrayBuffer) {\n const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n const base64 = arrayBufferToBase64(slice);\n return `data:base64,${base64}`;\n }\n return null;\n}\n\n// https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\nfunction arrayBufferToBase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n"],"file":"response-utils.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/response-utils.ts"],"names":["makeResponse","resource","headers","contentLength","String","url","type","initialDataUrl","getInitialDataUrl","TextEncoder","encode","response","Response","Object","defineProperty","value","checkResponse","ok","message","getResponseError","Error","checkResponseSync","status","statusText","length","slice","contentType","get","text","includes","error","INITIAL_DATA_LENGTH","Blob","blobSlice","Promise","resolve","reader","FileReader","onload","event","target","result","readAsDataURL","ArrayBuffer","base64","arrayBufferToBase64","buffer","binary","bytes","Uint8Array","i","byteLength","fromCharCode","btoa"],"mappings":"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","sourcesContent":["import {isResponse} from '../../javascript-utils/is-type';\nimport {getResourceContentLength, getResourceUrlAndType} from './resource-utils';\n\n/**\n * Returns a Response object\n * Adds content-length header when possible\n *\n * @param resource\n */\nexport async function makeResponse(resource: any): Promise<Response> {\n if (isResponse(resource)) {\n return resource;\n }\n\n // Add content-length header if possible\n const headers: {[header: string]: string} = {};\n\n const contentLength = getResourceContentLength(resource);\n if (contentLength >= 0) {\n headers['content-length'] = String(contentLength);\n }\n\n // `new Response(File)` does not preserve content-type and URL\n // so we add them here\n const {url, type} = getResourceUrlAndType(resource);\n if (type) {\n headers['content-type'] = type;\n }\n\n // Add a custom header with initial bytes if available\n const initialDataUrl = await getInitialDataUrl(resource);\n if (initialDataUrl) {\n headers['x-first-bytes'] = initialDataUrl;\n }\n\n // TODO - is this the best way of handling strings?\n // Maybe package as data URL instead?\n if (typeof resource === 'string') {\n // Convert to ArrayBuffer to avoid Response treating it as a URL\n resource = new TextEncoder().encode(resource);\n }\n\n // Attempt to create a Response from the resource, adding headers and setting url\n const response = new Response(resource, {headers});\n // We can't control `Response.url` via constructor, use a property override to record URL.\n Object.defineProperty(response, 'url', {value: url});\n return response;\n}\n\n/**\n * Checks response status (async) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport async function checkResponse(response: Response): Promise<void> {\n if (!response.ok) {\n const message = await getResponseError(response);\n throw new Error(message);\n }\n}\n\n/**\n * Checks response status (sync) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport function checkResponseSync(response: Response): void {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n message = message.length > 60 ? `${message.slice(60)}...` : message;\n throw new Error(message);\n }\n}\n\n// HELPERS\n\nasync function getResponseError(response): Promise<string> {\n let message = `Failed to fetch resource ${response.url} (${response.status}): `;\n try {\n const contentType = response.headers.get('Content-Type');\n let text = response.statusText;\n if (contentType.includes('application/json')) {\n text += ` ${await response.text()}`;\n }\n message += text;\n message = message.length > 60 ? `${message.slice(60)}...` : message;\n } catch (error) {\n // eslint forbids return in a finally statement, so we just catch here\n }\n return message;\n}\n\nasync function getInitialDataUrl(resource): Promise<string | null> {\n const INITIAL_DATA_LENGTH = 5;\n if (typeof resource === 'string') {\n return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;\n }\n if (resource instanceof Blob) {\n const blobSlice = resource.slice(0, 5);\n return await new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event?.target?.result as string);\n reader.readAsDataURL(blobSlice);\n });\n }\n if (resource instanceof ArrayBuffer) {\n const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n const base64 = arrayBufferToBase64(slice);\n return `data:base64,${base64}`;\n }\n return null;\n}\n\n// https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\nfunction arrayBufferToBase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n"],"file":"response-utils.js"}
@@ -1,24 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.NullLoader = exports.NullWorkerLoader = void 0;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
- var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
15
-
16
- var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
17
-
18
- var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncIterator"));
19
-
20
- var VERSION = typeof "3.1.0-alpha.4" !== 'undefined' ? "3.1.0-alpha.4" : 'latest';
21
- var NullWorkerLoader = {
7
+ const VERSION = typeof "3.1.0-alpha.5" !== 'undefined' ? "3.1.0-alpha.5" : 'latest';
8
+ const NullWorkerLoader = {
22
9
  name: 'Null loader',
23
10
  id: 'null',
24
11
  module: 'core',
@@ -26,141 +13,27 @@ var NullWorkerLoader = {
26
13
  worker: true,
27
14
  mimeTypes: ['application/x.empty'],
28
15
  extensions: ['null'],
29
- tests: [function () {
30
- return false;
31
- }],
16
+ tests: [() => false],
32
17
  options: {
33
18
  null: {}
34
19
  }
35
20
  };
36
21
  exports.NullWorkerLoader = NullWorkerLoader;
37
- var NullLoader = {
22
+ const NullLoader = {
38
23
  name: 'Null loader',
39
24
  id: 'null',
40
25
  module: 'core',
41
26
  version: VERSION,
42
27
  mimeTypes: ['application/x.empty'],
43
28
  extensions: ['null'],
44
- parse: function () {
45
- var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer) {
46
- return _regenerator.default.wrap(function _callee$(_context) {
47
- while (1) {
48
- switch (_context.prev = _context.next) {
49
- case 0:
50
- return _context.abrupt("return", arrayBuffer);
51
-
52
- case 1:
53
- case "end":
54
- return _context.stop();
55
- }
56
- }
57
- }, _callee);
58
- }));
59
-
60
- function parse(_x2) {
61
- return _parse.apply(this, arguments);
29
+ parse: async arrayBuffer => arrayBuffer,
30
+ parseSync: arrayBuffer => arrayBuffer,
31
+ parseInBatches: async function* generator(asyncIterator) {
32
+ for await (const batch of asyncIterator) {
33
+ yield batch;
62
34
  }
63
-
64
- return parse;
65
- }(),
66
- parseSync: function parseSync(arrayBuffer) {
67
- return arrayBuffer;
68
35
  },
69
- parseInBatches: function () {
70
- var _generator = (0, _wrapAsyncGenerator2.default)(_regenerator.default.mark(function _callee2(asyncIterator) {
71
- var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, batch;
72
-
73
- return _regenerator.default.wrap(function _callee2$(_context2) {
74
- while (1) {
75
- switch (_context2.prev = _context2.next) {
76
- case 0:
77
- _iteratorNormalCompletion = true;
78
- _didIteratorError = false;
79
- _context2.prev = 2;
80
- _iterator = (0, _asyncIterator2.default)(asyncIterator);
81
-
82
- case 4:
83
- _context2.next = 6;
84
- return (0, _awaitAsyncGenerator2.default)(_iterator.next());
85
-
86
- case 6:
87
- _step = _context2.sent;
88
- _iteratorNormalCompletion = _step.done;
89
- _context2.next = 10;
90
- return (0, _awaitAsyncGenerator2.default)(_step.value);
91
-
92
- case 10:
93
- _value = _context2.sent;
94
-
95
- if (_iteratorNormalCompletion) {
96
- _context2.next = 18;
97
- break;
98
- }
99
-
100
- batch = _value;
101
- _context2.next = 15;
102
- return batch;
103
-
104
- case 15:
105
- _iteratorNormalCompletion = true;
106
- _context2.next = 4;
107
- break;
108
-
109
- case 18:
110
- _context2.next = 24;
111
- break;
112
-
113
- case 20:
114
- _context2.prev = 20;
115
- _context2.t0 = _context2["catch"](2);
116
- _didIteratorError = true;
117
- _iteratorError = _context2.t0;
118
-
119
- case 24:
120
- _context2.prev = 24;
121
- _context2.prev = 25;
122
-
123
- if (!(!_iteratorNormalCompletion && _iterator.return != null)) {
124
- _context2.next = 29;
125
- break;
126
- }
127
-
128
- _context2.next = 29;
129
- return (0, _awaitAsyncGenerator2.default)(_iterator.return());
130
-
131
- case 29:
132
- _context2.prev = 29;
133
-
134
- if (!_didIteratorError) {
135
- _context2.next = 32;
136
- break;
137
- }
138
-
139
- throw _iteratorError;
140
-
141
- case 32:
142
- return _context2.finish(29);
143
-
144
- case 33:
145
- return _context2.finish(24);
146
-
147
- case 34:
148
- case "end":
149
- return _context2.stop();
150
- }
151
- }
152
- }, _callee2, null, [[2, 20, 24, 34], [25,, 29, 33]]);
153
- }));
154
-
155
- function generator(_x) {
156
- return _generator.apply(this, arguments);
157
- }
158
-
159
- return generator;
160
- }(),
161
- tests: [function () {
162
- return false;
163
- }],
36
+ tests: [() => false],
164
37
  options: {
165
38
  null: {}
166
39
  }