@warp-drive/experiments 0.2.7-alpha.9 → 0.2.7-beta.1

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 (93) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +2 -1
  3. package/declarations/data-worker.d.ts +35 -2
  4. package/declarations/data-worker.d.ts.map +1 -0
  5. package/declarations/document-storage-CwwTQ49-.d.ts +91 -0
  6. package/declarations/document-storage-CwwTQ49-.d.ts.map +1 -0
  7. package/declarations/document-storage.d.ts +2 -1
  8. package/declarations/image-fetch.d.ts +60 -1
  9. package/declarations/image-fetch.d.ts.map +1 -0
  10. package/declarations/image-worker.d.ts +40 -1
  11. package/declarations/image-worker.d.ts.map +1 -0
  12. package/declarations/storage.d.ts +359 -0
  13. package/declarations/storage.d.ts.map +1 -0
  14. package/declarations/types-CRs-Qww6.d.ts +17 -0
  15. package/declarations/types-CRs-Qww6.d.ts.map +1 -0
  16. package/declarations/worker-fetch.d.ts +23 -1
  17. package/declarations/worker-fetch.d.ts.map +1 -0
  18. package/dist/data-worker.js +235 -339
  19. package/dist/data-worker.js.map +1 -0
  20. package/dist/document-storage-LM925Stz.js +270 -0
  21. package/dist/document-storage-LM925Stz.js.map +1 -0
  22. package/dist/document-storage.js +3 -1
  23. package/dist/image-fetch.js +108 -79
  24. package/dist/image-fetch.js.map +1 -0
  25. package/dist/image-worker.js +95 -95
  26. package/dist/image-worker.js.map +1 -0
  27. package/dist/storage.js +914 -0
  28. package/dist/storage.js.map +1 -0
  29. package/dist/unpkg/dev/data-worker.js +231 -338
  30. package/dist/unpkg/dev/data-worker.js.map +1 -0
  31. package/dist/unpkg/dev/document-storage-DkiEg9rY.js +268 -0
  32. package/dist/unpkg/dev/document-storage-DkiEg9rY.js.map +1 -0
  33. package/dist/unpkg/dev/document-storage.js +2 -348
  34. package/dist/unpkg/dev/image-fetch.js +104 -71
  35. package/dist/unpkg/dev/image-fetch.js.map +1 -0
  36. package/dist/unpkg/dev/image-worker.js +93 -94
  37. package/dist/unpkg/dev/image-worker.js.map +1 -0
  38. package/dist/unpkg/dev/storage.js +913 -0
  39. package/dist/unpkg/dev/storage.js.map +1 -0
  40. package/dist/unpkg/dev/worker-fetch.js +112 -145
  41. package/dist/unpkg/dev/worker-fetch.js.map +1 -0
  42. package/dist/unpkg/dev-deprecated/data-worker.js +231 -338
  43. package/dist/unpkg/dev-deprecated/data-worker.js.map +1 -0
  44. package/dist/unpkg/dev-deprecated/document-storage-DkiEg9rY.js +268 -0
  45. package/dist/unpkg/dev-deprecated/document-storage-DkiEg9rY.js.map +1 -0
  46. package/dist/unpkg/dev-deprecated/document-storage.js +2 -348
  47. package/dist/unpkg/dev-deprecated/image-fetch.js +104 -71
  48. package/dist/unpkg/dev-deprecated/image-fetch.js.map +1 -0
  49. package/dist/unpkg/dev-deprecated/image-worker.js +93 -94
  50. package/dist/unpkg/dev-deprecated/image-worker.js.map +1 -0
  51. package/dist/unpkg/dev-deprecated/storage.js +913 -0
  52. package/dist/unpkg/dev-deprecated/storage.js.map +1 -0
  53. package/dist/unpkg/dev-deprecated/worker-fetch.js +112 -145
  54. package/dist/unpkg/dev-deprecated/worker-fetch.js.map +1 -0
  55. package/dist/unpkg/prod/data-worker.js +224 -324
  56. package/dist/unpkg/prod/data-worker.js.map +1 -0
  57. package/dist/unpkg/prod/document-storage-D0k_6GM9.js +262 -0
  58. package/dist/unpkg/prod/document-storage-D0k_6GM9.js.map +1 -0
  59. package/dist/unpkg/prod/document-storage.js +2 -338
  60. package/dist/unpkg/prod/image-fetch.js +101 -71
  61. package/dist/unpkg/prod/image-fetch.js.map +1 -0
  62. package/dist/unpkg/prod/image-worker.js +93 -94
  63. package/dist/unpkg/prod/image-worker.js.map +1 -0
  64. package/dist/unpkg/prod/storage.js +844 -0
  65. package/dist/unpkg/prod/storage.js.map +1 -0
  66. package/dist/unpkg/prod/worker-fetch.js +109 -145
  67. package/dist/unpkg/prod/worker-fetch.js.map +1 -0
  68. package/dist/unpkg/prod-deprecated/data-worker.js +224 -324
  69. package/dist/unpkg/prod-deprecated/data-worker.js.map +1 -0
  70. package/dist/unpkg/prod-deprecated/document-storage-D0k_6GM9.js +262 -0
  71. package/dist/unpkg/prod-deprecated/document-storage-D0k_6GM9.js.map +1 -0
  72. package/dist/unpkg/prod-deprecated/document-storage.js +2 -338
  73. package/dist/unpkg/prod-deprecated/image-fetch.js +101 -71
  74. package/dist/unpkg/prod-deprecated/image-fetch.js.map +1 -0
  75. package/dist/unpkg/prod-deprecated/image-worker.js +93 -94
  76. package/dist/unpkg/prod-deprecated/image-worker.js.map +1 -0
  77. package/dist/unpkg/prod-deprecated/storage.js +844 -0
  78. package/dist/unpkg/prod-deprecated/storage.js.map +1 -0
  79. package/dist/unpkg/prod-deprecated/worker-fetch.js +109 -145
  80. package/dist/unpkg/prod-deprecated/worker-fetch.js.map +1 -0
  81. package/dist/worker-fetch.js +116 -153
  82. package/dist/worker-fetch.js.map +1 -0
  83. package/package.json +9 -9
  84. package/declarations/data-worker/cache-handler.d.ts +0 -7
  85. package/declarations/data-worker/fetch.d.ts +0 -21
  86. package/declarations/data-worker/types.d.ts +0 -31
  87. package/declarations/data-worker/utils.d.ts +0 -12
  88. package/declarations/data-worker/worker.d.ts +0 -23
  89. package/declarations/document-storage/index.d.ts +0 -90
  90. package/declarations/image-worker/fetch.d.ts +0 -18
  91. package/declarations/image-worker/types.d.ts +0 -21
  92. package/declarations/image-worker/worker.d.ts +0 -14
  93. package/dist/index-CGCX7hY2.js +0 -349
@@ -1,99 +1,98 @@
1
+ //#region src/image-worker/worker.ts
1
2
  const WorkerScope = globalThis.SharedWorkerGlobalScope;
2
3
  async function loadImage(url) {
3
- const response = await fetch(url);
4
- const fileBlob = await response.blob();
5
- return URL.createObjectURL(fileBlob);
6
- }
7
- class ImageWorker {
8
- constructor(options) {
9
- // disable if running on main thread
10
- if (typeof window !== 'undefined') {
11
- return;
12
- }
13
- this.threads = new Map();
14
- this.pendingImages = new Map();
15
- this.cache = new Map();
16
- this.options = options || {
17
- persisted: false
18
- };
19
- this.isSharedWorker = WorkerScope && globalThis instanceof WorkerScope;
20
- this.initialize();
21
- }
22
- fetch(url) {
23
- const objectUrl = this.cache.get(url);
24
- if (objectUrl) {
25
- return Promise.resolve(objectUrl);
26
- }
27
- const pending = this.pendingImages.get(url);
28
- if (pending) {
29
- return pending;
30
- }
31
- const promise = loadImage(url);
32
- this.pendingImages.set(url, promise);
33
- return promise.finally(() => {
34
- this.pendingImages.delete(url);
35
- });
36
- }
37
- initialize() {
38
- if (this.isSharedWorker) {
39
- globalThis.onconnect = e => {
40
- const port = e.ports[0];
41
- port.onmessage = event => {
42
- const {
43
- type
44
- } = event.data;
45
- switch (type) {
46
- case 'connect':
47
- this.setupThread(event.data.thread, port);
48
- break;
49
- }
50
- };
51
- port.start();
52
- };
53
- } else {
54
- globalThis.onmessage = event => {
55
- const {
56
- type
57
- } = event.data;
58
- switch (type) {
59
- case 'connect':
60
- this.setupThread(event.data.thread, event.ports[0]);
61
- break;
62
- }
63
- };
64
- }
65
- }
66
- setupThread(thread, port) {
67
- this.threads.set(thread, port);
68
- port.onmessage = event => {
69
- if (event.type === 'close') {
70
- this.threads.delete(thread);
71
- return;
72
- }
73
- const {
74
- type
75
- } = event.data;
76
- switch (type) {
77
- case 'load':
78
- void this.request(event.data);
79
- break;
80
- }
81
- };
82
- }
83
- async request(event) {
84
- const {
85
- thread,
86
- url
87
- } = event;
88
- const objectUrl = await this.fetch(url);
89
- const port = this.threads.get(thread);
90
- port.postMessage({
91
- type: 'success-response',
92
- thread,
93
- url,
94
- objectUrl
95
- });
96
- }
4
+ const fileBlob = await (await fetch(url)).blob();
5
+ return URL.createObjectURL(fileBlob);
97
6
  }
7
+ /**
8
+ * Runs inside a `Worker` or `SharedWorker` to fetch images on behalf of
9
+ * one or more {@link ImageFetch} instances running on the main thread(s)
10
+ * that connect to it.
11
+ *
12
+ * Each connecting thread registers itself by sending a `connect` message
13
+ * along with a {@link MessagePort}. When a thread sends a `load` request
14
+ * for a url, the worker fetches the image via `fetch`, converts the
15
+ * response into a `Blob`, and creates an object url for it via
16
+ * `URL.createObjectURL`. The fetch for a given url is deduped and cached
17
+ * in-memory for the lifetime of the worker, so repeat `load` requests for
18
+ * the same url — whether from the same or a different connected thread —
19
+ * do not trigger another network request.
20
+ *
21
+ * Only intended for use inside a Worker context: constructing an
22
+ * `ImageWorker` on the main thread is a no-op.
23
+ *
24
+ * @public
25
+ */
26
+ var ImageWorker = class {
27
+ /**
28
+ * @param options.persisted - reserved for a future on-disk cache; currently unused.
29
+ */
30
+ constructor(options) {
31
+ if (typeof window !== "undefined") return;
32
+ this.threads = /* @__PURE__ */ new Map();
33
+ this.pendingImages = /* @__PURE__ */ new Map();
34
+ this.cache = /* @__PURE__ */ new Map();
35
+ this.options = options || { persisted: false };
36
+ this.isSharedWorker = WorkerScope && globalThis instanceof WorkerScope;
37
+ this.initialize();
38
+ }
39
+ fetch(url) {
40
+ const objectUrl = this.cache.get(url);
41
+ if (objectUrl) return Promise.resolve(objectUrl);
42
+ const pending = this.pendingImages.get(url);
43
+ if (pending) return pending;
44
+ const promise = loadImage(url).then((loadedObjectUrl) => {
45
+ this.cache.set(url, loadedObjectUrl);
46
+ return loadedObjectUrl;
47
+ });
48
+ this.pendingImages.set(url, promise);
49
+ return promise.finally(() => {
50
+ this.pendingImages.delete(url);
51
+ });
52
+ }
53
+ initialize() {
54
+ if (this.isSharedWorker) globalThis.onconnect = (e) => {
55
+ const port = e.ports[0];
56
+ port.onmessage = (event) => {
57
+ const { type } = event.data;
58
+ switch (type) {
59
+ case "connect": this.setupThread(event.data.thread, port);
60
+ }
61
+ };
62
+ port.start();
63
+ };
64
+ else globalThis.onmessage = (event) => {
65
+ const { type } = event.data;
66
+ switch (type) {
67
+ case "connect": this.setupThread(event.data.thread, event.ports[0]);
68
+ }
69
+ };
70
+ }
71
+ setupThread(thread, port) {
72
+ this.threads.set(thread, port);
73
+ port.onmessage = (event) => {
74
+ if (event.type === "close") {
75
+ this.threads.delete(thread);
76
+ return;
77
+ }
78
+ const { type } = event.data;
79
+ switch (type) {
80
+ case "load": this.request(event.data);
81
+ }
82
+ };
83
+ }
84
+ async request(event) {
85
+ const { thread, url } = event;
86
+ const objectUrl = await this.fetch(url);
87
+ this.threads.get(thread).postMessage({
88
+ type: "success-response",
89
+ thread,
90
+ url,
91
+ objectUrl
92
+ });
93
+ }
94
+ };
98
95
 
96
+ //#endregion
99
97
  export { ImageWorker };
98
+ //# sourceMappingURL=image-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-worker.js","names":["WorkerScope","globalThis","SharedWorkerGlobalScope","loadImage","url","response","fetch","fileBlob","blob","URL","createObjectURL","ImageWorker","constructor","options","window","threads","Map","pendingImages","cache","persisted","isSharedWorker","initialize","objectUrl","get","Promise","resolve","pending","promise","then","loadedObjectUrl","set","finally","delete","onconnect","e","port","ports","onmessage","event","type","data","setupThread","thread","start","request","postMessage"],"sources":["../../../src/image-worker/worker.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { ImageFetch } from './fetch';\nimport type { RequestEventData, ThreadInitEventData, WorkerThreadEvent } from './types';\n\nconst WorkerScope = (globalThis as unknown as { SharedWorkerGlobalScope: FunctionConstructor }).SharedWorkerGlobalScope;\n\nasync function loadImage(url: string): Promise<string> {\n const response = await fetch(url);\n const fileBlob = await response.blob();\n return URL.createObjectURL(fileBlob);\n}\n\n/**\n * Runs inside a `Worker` or `SharedWorker` to fetch images on behalf of\n * one or more {@link ImageFetch} instances running on the main thread(s)\n * that connect to it.\n *\n * Each connecting thread registers itself by sending a `connect` message\n * along with a {@link MessagePort}. When a thread sends a `load` request\n * for a url, the worker fetches the image via `fetch`, converts the\n * response into a `Blob`, and creates an object url for it via\n * `URL.createObjectURL`. The fetch for a given url is deduped and cached\n * in-memory for the lifetime of the worker, so repeat `load` requests for\n * the same url — whether from the same or a different connected thread —\n * do not trigger another network request.\n *\n * Only intended for use inside a Worker context: constructing an\n * `ImageWorker` on the main thread is a no-op.\n *\n * @public\n */\nexport class ImageWorker {\n declare private threads: Map<string, MessagePort>;\n declare private pendingImages: Map<string, Promise<string>>;\n declare private options: { persisted: boolean };\n declare private isSharedWorker: boolean;\n declare private cache: Map<string, string>;\n\n /**\n * @param options.persisted - reserved for a future on-disk cache; currently unused.\n */\n constructor(options?: { persisted: boolean }) {\n // disable if running on main thread\n if (typeof window !== 'undefined') {\n return;\n }\n this.threads = new Map();\n this.pendingImages = new Map();\n this.cache = new Map();\n this.options = options || { persisted: false };\n this.isSharedWorker = WorkerScope && globalThis instanceof WorkerScope;\n this.initialize();\n }\n\n private fetch(url: string): Promise<string> {\n const objectUrl = this.cache.get(url);\n\n if (objectUrl) {\n return Promise.resolve(objectUrl);\n }\n\n const pending = this.pendingImages.get(url);\n if (pending) {\n return pending;\n }\n\n const promise = loadImage(url).then((loadedObjectUrl) => {\n this.cache.set(url, loadedObjectUrl);\n return loadedObjectUrl;\n });\n this.pendingImages.set(url, promise);\n return promise.finally(() => {\n this.pendingImages.delete(url);\n });\n }\n\n private initialize(): void {\n if (this.isSharedWorker) {\n (globalThis as unknown as { onconnect: typeof globalThis.onmessage }).onconnect = (e) => {\n const port = e.ports[0];\n port.onmessage = (event: MessageEvent<ThreadInitEventData>) => {\n const { type } = event.data;\n\n switch (type) {\n case 'connect':\n this.setupThread(event.data.thread, port);\n break;\n }\n };\n port.start();\n };\n } else {\n globalThis.onmessage = (event: MessageEvent<ThreadInitEventData>) => {\n const { type } = event.data;\n\n switch (type) {\n case 'connect':\n this.setupThread(event.data.thread, event.ports[0]);\n break;\n }\n };\n }\n }\n\n private setupThread(thread: string, port: MessagePort): void {\n this.threads.set(thread, port);\n port.onmessage = (event: WorkerThreadEvent) => {\n if (event.type === 'close') {\n this.threads.delete(thread);\n return;\n }\n\n const { type } = event.data;\n switch (type) {\n case 'load':\n void this.request(event.data);\n break;\n }\n };\n }\n\n private async request(event: RequestEventData): Promise<void> {\n const { thread, url } = event;\n\n const objectUrl = await this.fetch(url);\n const port = this.threads.get(thread)!;\n port.postMessage({ type: 'success-response', thread, url, objectUrl });\n }\n}\n"],"mappings":";AAIA,MAAMA,cAAeC,WAA2EC;AAEhG,eAAeC,UAAUC,KAA8B;CAErD,MAAMG,WAAW,OAAMF,MADAC,MAAMF,GAAG,EACD,CAACI,KAAK;CACrC,OAAOC,IAAIC,gBAAgBH,QAAQ;AACrC;;;;;;;;;;;;;;;;;;;;AAqBA,IAAaI,cAAb,MAAyB;;;;CAUvBC,YAAYC,SAAkC;EAE5C,IAAI,OAAOC,WAAW,aACpB;EAEF,KAAKC,0BAAU,IAAIC,IAAI;EACvB,KAAKC,gCAAgB,IAAID,IAAI;EAC7B,KAAKE,wBAAQ,IAAIF,IAAI;EACrB,KAAKH,UAAUA,WAAW,EAAEM,WAAW,MAAM;EAC7C,KAAKC,iBAAiBpB,eAAeC,sBAAsBD;EAC3D,KAAKqB,WAAW;CAClB;CAEQf,MAAMF,KAA8B;EAC1C,MAAMkB,YAAY,KAAKJ,MAAMK,IAAInB,GAAG;EAEpC,IAAIkB,WACF,OAAOE,QAAQC,QAAQH,SAAS;EAGlC,MAAMI,UAAU,KAAKT,cAAcM,IAAInB,GAAG;EAC1C,IAAIsB,SACF,OAAOA;EAGT,MAAMC,UAAUxB,UAAUC,GAAG,CAAC,CAACwB,MAAMC,oBAAoB;GACvD,KAAKX,MAAMY,IAAI1B,KAAKyB,eAAe;GACnC,OAAOA;EACT,CAAC;EACD,KAAKZ,cAAca,IAAI1B,KAAKuB,OAAO;EACnC,OAAOA,QAAQI,cAAc;GAC3B,KAAKd,cAAce,OAAO5B,GAAG;EAC/B,CAAC;CACH;CAEQiB,aAAmB;EACzB,IAAI,KAAKD,gBACNnB,WAAqEgC,aAAaC,MAAM;GACvF,MAAMC,OAAOD,EAAEE,MAAM;GACrBD,KAAKE,aAAaC,UAA6C;IAC7D,MAAM,EAAEC,SAASD,MAAME;IAEvB,QAAQD,MAAR;KACE,KAAK,WACH,KAAKE,YAAYH,MAAME,KAAKE,QAAQP,IAAI;IAE5C;GACF;GACAA,KAAKQ,MAAM;EACb;OAEA1C,WAAWoC,aAAaC,UAA6C;GACnE,MAAM,EAAEC,SAASD,MAAME;GAEvB,QAAQD,MAAR;IACE,KAAK,WACH,KAAKE,YAAYH,MAAME,KAAKE,QAAQJ,MAAMF,MAAM,EAAE;GAEtD;EACF;CAEJ;CAEQK,YAAYC,QAAgBP,MAAyB;EAC3D,KAAKpB,QAAQe,IAAIY,QAAQP,IAAI;EAC7BA,KAAKE,aAAaC,UAA6B;GAC7C,IAAIA,MAAMC,SAAS,SAAS;IAC1B,KAAKxB,QAAQiB,OAAOU,MAAM;IAC1B;GACF;GAEA,MAAM,EAAEH,SAASD,MAAME;GACvB,QAAQD,MAAR;IACE,KAAK,QACH,AAAK,KAAKK,QAAQN,MAAME,IAAI;GAEhC;EACF;CACF;CAEA,MAAcI,QAAQN,OAAwC;EAC5D,MAAM,EAAEI,QAAQtC,QAAQkC;EAExB,MAAMhB,YAAY,MAAM,KAAKhB,MAAMF,GAAG;EAEtC+B,AADa,KAAKpB,QAAQQ,IAAImB,MAC9BP,CAAI,CAACU,YAAY;GAAEN,MAAM;GAAoBG;GAAQtC;GAAKkB;EAAU,CAAC;CACvE;AACF"}