1n-broadutils 0.0.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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/browser/broadutils.d.ts +9 -0
  4. package/dist/browser/broadutils.d.ts.map +1 -0
  5. package/dist/browser/broadutils.js +3 -0
  6. package/dist/browser/broadutils.js.map +10 -0
  7. package/dist/browser/canvas/canvas.d.ts +66 -0
  8. package/dist/browser/canvas/canvas.d.ts.map +1 -0
  9. package/dist/browser/canvas/canvas.js +3 -0
  10. package/dist/browser/canvas/canvas.js.map +10 -0
  11. package/dist/browser/canvas/types.d.ts +35 -0
  12. package/dist/browser/canvas/types.d.ts.map +1 -0
  13. package/dist/browser/chunk-2h1wek3q.js +4 -0
  14. package/dist/browser/chunk-2h1wek3q.js.map +10 -0
  15. package/dist/browser/chunk-3p7c1apf.js +4 -0
  16. package/dist/browser/chunk-3p7c1apf.js.map +10 -0
  17. package/dist/browser/chunk-8r5jmymq.js +4 -0
  18. package/dist/browser/chunk-8r5jmymq.js.map +9 -0
  19. package/dist/browser/chunk-te4pbrw5.js +4 -0
  20. package/dist/browser/chunk-te4pbrw5.js.map +10 -0
  21. package/dist/browser/data/data.d.ts +11 -0
  22. package/dist/browser/data/data.d.ts.map +1 -0
  23. package/dist/browser/data/data.js +3 -0
  24. package/dist/browser/data/data.js.map +9 -0
  25. package/dist/browser/data/types.d.ts +178 -0
  26. package/dist/browser/data/types.d.ts.map +1 -0
  27. package/dist/browser/math/math.d.ts +11 -0
  28. package/dist/browser/math/math.d.ts.map +1 -0
  29. package/dist/browser/math/math.js +3 -0
  30. package/dist/browser/math/math.js.map +10 -0
  31. package/dist/browser/math/types.d.ts +134 -0
  32. package/dist/browser/math/types.d.ts.map +1 -0
  33. package/dist/browser/misc/misc.d.ts +7 -0
  34. package/dist/browser/misc/misc.d.ts.map +1 -0
  35. package/dist/browser/misc/misc.js +3 -0
  36. package/dist/browser/misc/misc.js.map +10 -0
  37. package/dist/browser/misc/types.d.ts +44 -0
  38. package/dist/browser/misc/types.d.ts.map +1 -0
  39. package/dist/browser/network/network.d.ts +4 -0
  40. package/dist/browser/network/network.d.ts.map +1 -0
  41. package/dist/browser/network/network.js +3 -0
  42. package/dist/browser/network/network.js.map +9 -0
  43. package/dist/browser/network/types.d.ts +32 -0
  44. package/dist/browser/network/types.d.ts.map +1 -0
  45. package/dist/browser/timing/timing.d.ts +7 -0
  46. package/dist/browser/timing/timing.d.ts.map +1 -0
  47. package/dist/browser/timing/timing.js +3 -0
  48. package/dist/browser/timing/timing.js.map +10 -0
  49. package/dist/browser/timing/types.d.ts +112 -0
  50. package/dist/browser/timing/types.d.ts.map +1 -0
  51. package/dist/browser/types/types.d.ts +129 -0
  52. package/dist/browser/types/types.d.ts.map +1 -0
  53. package/dist/browser/validate/types.d.ts +93 -0
  54. package/dist/browser/validate/types.d.ts.map +1 -0
  55. package/dist/browser/validate/validate.d.ts +7 -0
  56. package/dist/browser/validate/validate.d.ts.map +1 -0
  57. package/dist/browser/validate/validate.js +3 -0
  58. package/dist/browser/validate/validate.js.map +9 -0
  59. package/dist/node/broadutils.d.ts +8 -0
  60. package/dist/node/broadutils.d.ts.map +1 -0
  61. package/dist/node/broadutils.js +3 -0
  62. package/dist/node/broadutils.js.map +10 -0
  63. package/dist/node/chunk-hwenktbz.js +4 -0
  64. package/dist/node/chunk-hwenktbz.js.map +9 -0
  65. package/dist/node/data/data.d.ts +11 -0
  66. package/dist/node/data/data.d.ts.map +1 -0
  67. package/dist/node/data/data.js +3 -0
  68. package/dist/node/data/data.js.map +10 -0
  69. package/dist/node/data/types.d.ts +178 -0
  70. package/dist/node/data/types.d.ts.map +1 -0
  71. package/dist/node/filesystem/filesystem.d.ts +5 -0
  72. package/dist/node/filesystem/filesystem.d.ts.map +1 -0
  73. package/dist/node/filesystem/filesystem.js +3 -0
  74. package/dist/node/filesystem/filesystem.js.map +10 -0
  75. package/dist/node/filesystem/types.d.ts +76 -0
  76. package/dist/node/filesystem/types.d.ts.map +1 -0
  77. package/dist/node/math/math.d.ts +11 -0
  78. package/dist/node/math/math.d.ts.map +1 -0
  79. package/dist/node/math/math.js +3 -0
  80. package/dist/node/math/math.js.map +10 -0
  81. package/dist/node/math/types.d.ts +134 -0
  82. package/dist/node/math/types.d.ts.map +1 -0
  83. package/dist/node/misc/misc.d.ts +7 -0
  84. package/dist/node/misc/misc.d.ts.map +1 -0
  85. package/dist/node/misc/misc.js +3 -0
  86. package/dist/node/misc/misc.js.map +10 -0
  87. package/dist/node/misc/types.d.ts +44 -0
  88. package/dist/node/misc/types.d.ts.map +1 -0
  89. package/dist/node/timing/timing.d.ts +5 -0
  90. package/dist/node/timing/timing.d.ts.map +1 -0
  91. package/dist/node/timing/timing.js +3 -0
  92. package/dist/node/timing/timing.js.map +10 -0
  93. package/dist/node/timing/types.d.ts +70 -0
  94. package/dist/node/timing/types.d.ts.map +1 -0
  95. package/dist/node/types/types.d.ts +129 -0
  96. package/dist/node/types/types.d.ts.map +1 -0
  97. package/dist/node/validate/types.d.ts +93 -0
  98. package/dist/node/validate/types.d.ts.map +1 -0
  99. package/dist/node/validate/validate.d.ts +7 -0
  100. package/dist/node/validate/validate.d.ts.map +1 -0
  101. package/dist/node/validate/validate.js +3 -0
  102. package/dist/node/validate/validate.js.map +10 -0
  103. package/package.json +120 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 Oghenevwegba Obire
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,161 @@
1
+ # broadutils
2
+
3
+ A comprehensive utility library covering a wide range of use cases for both browser and Node.js environments.
4
+
5
+ ## Features
6
+
7
+ - **Environment-specific Builds**: Optimised subpath exports for both `browser` and `node`.
8
+ - **Modular Design**: Import only what you need (e.g., `1n-broadutils/node/filesystem` or `1n-broadutils/browser/math`).
9
+ - **Fully Typed**: Built with TypeScript, providing excellent autocompletion and type safety.
10
+ - **Isomorphic Core**: Many utilities (`math`, `timing`, `validate`, `data`, `misc`) share a common API across environments.
11
+
12
+ ## Installation
13
+
14
+ You can install `1n-broadutils` using npm, yarn, pnpm, bun, or jsr:
15
+
16
+ ```bash
17
+ # npm
18
+ npm install 1n-broadutils
19
+
20
+ # yarn
21
+ yarn add 1n-broadutils
22
+
23
+ # pnpm
24
+ pnpm add 1n-broadutils
25
+
26
+ # bun
27
+ bun add 1n-broadutils
28
+
29
+ # jsr
30
+ npx jsr add @1natsie/broadutils
31
+ ```
32
+
33
+ ## Structure & Exports
34
+
35
+ The library is split into two primary environments: `./browser` and `./node`. Each environment has its own set of utilities, and some utilities are shared between both environments.
36
+
37
+ ### Browser Exports
38
+
39
+ - `1n-broadutils/browser` - Main entry point for browser utilities.
40
+ - `1n-broadutils/browser/canvas` - Canvas utilities (`resize`, `getImage`, `getImageData`, `cloneImageData`, `getDimensions`, `mirrorImageToCanvas`, `createContextSnapshot`, `applyContextSnapshot`)
41
+ - `1n-broadutils/browser/data` - Data utilities (`array`, `base64`, `object`, `string`, `clone`, `convertToDataUrl`, `textEncoder`, `textDecoder`)
42
+ - `1n-broadutils/browser/math` - Math utilities (`min`, `max`, `clamp`, `constrain`, `average`, `hcf`, `lcm`, `convert`)
43
+ - `1n-broadutils/browser/misc` - Miscellaneous utilities (`noop`, `createDeferred`, `allowGC`, `preventGC`)
44
+ - `1n-broadutils/browser/network` - Network utilities (`fetch`)
45
+ - `1n-broadutils/browser/timing` - Timing utilities (`time`, `sleep`, `setImmediate`, `clearImmediate`)
46
+ - `1n-broadutils/browser/validate` - Validation utilities (`assert`, `check`, `isNonNullable`, `nonNullable`)
47
+ - `1n-broadutils/browser/types` - Type definitions
48
+
49
+ ### Node.js Exports
50
+
51
+ - `1n-broadutils/node` - Main entry point for Node utilities.
52
+ - `1n-broadutils/node/data` - Data utilities
53
+ - `1n-broadutils/node/filesystem` - File system utilities (`betterReadStream`, `which`)
54
+ - `1n-broadutils/node/math` - Math utilities
55
+ - `1n-broadutils/node/misc` - Miscellaneous utilities
56
+ - `1n-broadutils/node/timing` - Timing utilities (`time`, `sleep`)
57
+ - `1n-broadutils/node/validate` - Validation utilities
58
+ - `1n-broadutils/node/types` - Type definitions
59
+
60
+ ## Usage Examples
61
+
62
+ ### Node.js Filesystem Utilities
63
+
64
+ ```typescript
65
+ import { which, betterReadStream } from "1n-broadutils/node/filesystem";
66
+
67
+ // Locate an executable in the system PATH
68
+ const nodePath = which("node");
69
+ console.log(nodePath); // e.g. /usr/bin/node
70
+
71
+ const multipleExes = which.many(["node", "npm"]);
72
+
73
+ // Read a file using an async generator
74
+ for await (const chunk of betterReadStream("./large-file.txt", { chunkSize: 8192 })) {
75
+ console.log(chunk.byteLength);
76
+ }
77
+ ```
78
+
79
+ ### Isomorphic Math Utilities
80
+
81
+ ```typescript
82
+ // Import works from both browser or node entries
83
+ import { clamp, average, convert } from "1n-broadutils/browser/math";
84
+
85
+ const clamped = clamp(150, 0, 100); // 100
86
+ const avg = average([1, 2, 3, 4, 5]); // 3
87
+ ```
88
+
89
+ ### Browser Canvas Utilities
90
+
91
+ ```typescript
92
+ import { resize, createContextSnapshot, applyContextSnapshot } from "1n-broadutils/browser/canvas";
93
+
94
+ const canvas = document.createElement("canvas");
95
+ const ctx = canvas.getContext("2d")!;
96
+
97
+ // Resize canvas to [width, height]
98
+ resize(canvas, [800, 600]);
99
+
100
+ // Save and restore context state easily
101
+ const snapshot = createContextSnapshot(ctx);
102
+ // ... draw things ...
103
+ applyContextSnapshot(ctx, snapshot);
104
+ ```
105
+
106
+ ### Data Utilities
107
+
108
+ ```typescript
109
+ import { array, clone, string } from "1n-broadutils/node/data";
110
+
111
+ // Deep clone objects
112
+ const original = { a: 1, b: { c: 2 } };
113
+ const copied = clone(original);
114
+ ```
115
+
116
+ ### Timing Utilities
117
+
118
+ ```typescript
119
+ import { time } from "1n-broadutils/node/timing";
120
+
121
+ // Measure execution time
122
+ const [duration, result] = time(() => {
123
+ // expensive operation
124
+ return 42;
125
+ });
126
+ console.log(`Execution took ${duration}ms`);
127
+ ```
128
+
129
+ ## Contributing
130
+
131
+ 1. Clone the repository.
132
+ 2. Install dependencies using Bun:
133
+
134
+ ```bash
135
+ bun install --dev
136
+ ```
137
+
138
+ 3. Add awesome features or bug fixes.
139
+
140
+ 4. Format the code:
141
+
142
+ ```bash
143
+ bun run format
144
+ ```
145
+
146
+ 5. Run the test suites:
147
+
148
+ ```bash
149
+ bun run test:node
150
+ bun run test:browser
151
+ ```
152
+
153
+ 6. Build the project for distribution:
154
+
155
+ ```bash
156
+ bun run build
157
+ ```
158
+
159
+ ## License
160
+
161
+ This project is licensed under the MIT License - see the [`LICENSE`](./LICENSE) file for details.
@@ -0,0 +1,9 @@
1
+ export declare const canvas: typeof import("./canvas/canvas.ts");
2
+ export declare const data: typeof import("./data/data.ts");
3
+ export declare const math: typeof import("./math/math.ts");
4
+ export declare const misc: typeof import("./misc/misc.ts");
5
+ export declare const network: typeof import("./network/network.ts");
6
+ export declare const timing: typeof import("./timing/timing.ts");
7
+ export declare const validate: typeof import("./validate/validate.ts");
8
+ export * as Types from "./types/types.ts";
9
+ //# sourceMappingURL=broadutils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadutils.d.ts","sourceRoot":"","sources":["../../src/browser/broadutils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,EAAE,cAAc,oBAAoB,CAAsC,CAAC;AAC9F,eAAO,MAAM,IAAI,EAAE,cAAc,gBAAgB,CAAkC,CAAC;AACpF,eAAO,MAAM,IAAI,EAAE,cAAc,gBAAgB,CAAkC,CAAC;AACpF,eAAO,MAAM,IAAI,EAAE,cAAc,gBAAgB,CAAkC,CAAC;AACpF,eAAO,MAAM,OAAO,EAAE,cAAc,sBAAsB,CAAwC,CAAC;AACnG,eAAO,MAAM,MAAM,EAAE,cAAc,oBAAoB,CAAsC,CAAC;AAC9F,eAAO,MAAM,QAAQ,EAAE,cAAc,wBAAwB,CACrB,CAAC;AAEzC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import{n as t}from"./chunk-8r5jmymq.js";var o={};var a=await import("./canvas/canvas.js"),i=await import("./data/data.js"),m=await import("./math/math.js"),p=await import("./misc/misc.js"),r=await import("./network/network.js"),s=await import("./timing/timing.js"),e=await import("./validate/validate.js");export{e as validate,s as timing,r as network,p as misc,m as math,i as data,a as canvas,o as Types};
2
+
3
+ //# debugId=FA745D9234CE25EA64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\src\\browser\\broadutils.ts"],
4
+ "sourcesContent": [
5
+ "export const canvas: typeof import(\"./canvas/canvas.ts\") = await import(\"./canvas/canvas.ts\");\nexport const data: typeof import(\"./data/data.ts\") = await import(\"./data/data.ts\");\nexport const math: typeof import(\"./math/math.ts\") = await import(\"./math/math.ts\");\nexport const misc: typeof import(\"./misc/misc.ts\") = await import(\"./misc/misc.ts\");\nexport const network: typeof import(\"./network/network.ts\") = await import(\"./network/network.ts\");\nexport const timing: typeof import(\"./timing/timing.ts\") = await import(\"./timing/timing.ts\");\nexport const validate: typeof import(\"./validate/validate.ts\") =\n await import(\"./validate/validate.ts\");\n\nexport * as Types from \"./types/types.ts\";\n"
6
+ ],
7
+ "mappings": "iDAAO,IAAM,EAA8C,KAAa,8BAC3D,EAAwC,KAAa,0BACrD,EAAwC,KAAa,0BACrD,EAAwC,KAAa,0BACrD,EAAiD,KAAa,gCAC9D,EAA8C,KAAa,8BAC3D,EACX,KAAa",
8
+ "debugId": "FA745D9234CE25EA64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,66 @@
1
+ import type { Vector2 } from "../types/types.ts";
2
+ import type { ContextSnapshot, ExtendedImageSource, RenderingContext } from "./types.ts";
3
+ /**
4
+ * Resizes a canvas element, offscreen canvas, or rendering context to the specified dimensions.
5
+ *
6
+ * @param target The canvas element or rendering context to resize.
7
+ * @param dimensions The new dimensions for the canvas.
8
+ * @returns The resized canvas element or rendering context.
9
+ */
10
+ export declare const resize: <T extends HTMLCanvasElement | OffscreenCanvas | CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D>(target: T, dimensions: Vector2 | Partial<Record<"width" | "height", number>>) => T;
11
+ /**
12
+ * Creates a snapshot of the canvas rendering context's state.
13
+ *
14
+ * @param context The canvas rendering context to create a snapshot of.
15
+ * @returns A snapshot of the canvas rendering context's state, including its properties and
16
+ * transformation matrix.
17
+ */
18
+ export declare const createContextSnapshot: (context: CanvasRenderingContext2D) => ContextSnapshot;
19
+ /**
20
+ * Applies a snapshot of the canvas rendering context's state to the context.
21
+ *
22
+ * @param context The canvas rendering context to apply the snapshot to.
23
+ * @param snapshot The snapshot of the canvas rendering context's state.
24
+ * @returns The updated canvas rendering context.
25
+ */
26
+ export declare const applyContextSnapshot: (context: CanvasRenderingContext2D, snapshot: Partial<ContextSnapshot>) => CanvasRenderingContext2D;
27
+ /**
28
+ * Creates a clone of the given ImageData object.
29
+ *
30
+ * @param imageData The ImageData object to clone.
31
+ * @returns A new ImageData object with the same data and dimensions.
32
+ */
33
+ export declare const cloneImageData: (imageData: ImageData) => ImageData;
34
+ /**
35
+ * Gets the dimensions of the given image source.
36
+ *
37
+ * @param source The image source to get the dimensions of.
38
+ * @returns The dimensions of the image source as a Vector2 [width, height].
39
+ */
40
+ export declare const getDimensions: (source: ImageData | CanvasImageSource) => Vector2;
41
+ /**
42
+ * Mirrors an image to a canvas.
43
+ *
44
+ * @param context The rendering context to use.
45
+ * @param image The image to mirror.
46
+ * @returns The rendering context.
47
+ */
48
+ export declare const mirrorImageToCanvas: <T extends RenderingContext>(context: T, image: ImageData | CanvasImageSource) => T;
49
+ /**
50
+ * Converts an image source to an HTMLImageElement.
51
+ *
52
+ * @param source The image source to convert to an HTMLImageElement. Can be a URL string, an
53
+ * ArrayBuffer, a Blob, an ImageData object, or any CanvasImageSource.
54
+ * @returns A Promise that resolves to an HTMLImageElement representing the image source.
55
+ */
56
+ export declare const getImage: (source: ExtendedImageSource) => Promise<HTMLImageElement>;
57
+ /**
58
+ * Converts an image source to ImageData.
59
+ *
60
+ * @param source The image source to convert to ImageData. Can be a URL string, an ArrayBuffer,
61
+ * a Blob, an ImageData object, or any CanvasImageSource.
62
+ * @returns A Promise that resolves to an ImageData object representing the image source.
63
+ */
64
+ export declare const getImageData: (source: ExtendedImageSource) => Promise<ImageData>;
65
+ export * from "./types.ts";
66
+ //# sourceMappingURL=canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/browser/canvas/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASzF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GACjB,CAAC,SACG,iBAAiB,GACjB,eAAe,GACf,wBAAwB,GACxB,iCAAiC,EAErC,QAAQ,CAAC,EACT,YAAY,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,KAChE,CAcF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,wBAAwB,KAAG,eA+BzE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,wBAAwB,EACjC,UAAU,OAAO,CAAC,eAAe,CAAC,KACjC,wBA+BF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,SAAS,KAAG,SAIrD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,SAAS,GAAG,iBAAiB,KAAG,OAmBrE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,gBAAgB,EAC5D,SAAS,CAAC,EACV,OAAO,SAAS,GAAG,iBAAiB,KACnC,CAWF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAU,QAAQ,mBAAmB,KAAG,OAAO,CAAC,gBAAgB,CAoBpF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAU,QAAQ,mBAAmB,KAAG,OAAO,CAAC,SAAS,CAWjF,CAAC;AAEF,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import{c as Q,d as V}from"../chunk-3p7c1apf.js";import{i as O}from"../chunk-te4pbrw5.js";import{m as W}from"../chunk-2h1wek3q.js";import"../chunk-8r5jmymq.js";var J=new OffscreenCanvas(1,1),M=W(J.getContext("2d",{willReadFrequently:!0})),Z=(q,F)=>{let G;if(q instanceof HTMLCanvasElement)G=q;else if(q instanceof OffscreenCanvas)G=q;else G=q.canvas;if(Array.isArray(F))G.width=F[0],G.height=F[1];else G.width=F.width??G.width,G.height=F.height??G.height;return q},R=(q)=>{return{direction:q.direction,fillStyle:q.fillStyle,filter:q.filter,font:q.font,fontKerning:q.fontKerning,fontStretch:q.fontStretch,fontVariantCaps:q.fontVariantCaps,globalAlpha:q.globalAlpha,globalCompositeOperation:q.globalCompositeOperation,imageSmoothingEnabled:q.imageSmoothingEnabled,imageSmoothingQuality:q.imageSmoothingQuality,letterSpacing:q.letterSpacing,lineCap:q.lineCap,lineDashOffset:q.lineDashOffset,lineJoin:q.lineJoin,lineWidth:q.lineWidth,miterLimit:q.miterLimit,shadowBlur:q.shadowBlur,shadowColor:q.shadowColor,shadowOffsetX:q.shadowOffsetX,shadowOffsetY:q.shadowOffsetY,strokeStyle:q.strokeStyle,textAlign:q.textAlign,textBaseline:q.textBaseline,textRendering:q.textRendering,wordSpacing:q.wordSpacing,transform:q.getTransform()}},j=(q,F)=>{return q.direction=F.direction??q.direction,q.fillStyle=F.fillStyle??q.fillStyle,q.filter=F.filter??q.filter,q.font=F.font??q.font,q.fontKerning=F.fontKerning??q.fontKerning,q.fontStretch=F.fontStretch??q.fontStretch,q.fontVariantCaps=F.fontVariantCaps??q.fontVariantCaps,q.globalAlpha=F.globalAlpha??q.globalAlpha,q.globalCompositeOperation=F.globalCompositeOperation??q.globalCompositeOperation,q.imageSmoothingEnabled=F.imageSmoothingEnabled??q.imageSmoothingEnabled,q.imageSmoothingQuality=F.imageSmoothingQuality??q.imageSmoothingQuality,q.letterSpacing=F.letterSpacing??q.letterSpacing,q.lineCap=F.lineCap??q.lineCap,q.lineDashOffset=F.lineDashOffset??q.lineDashOffset,q.lineJoin=F.lineJoin??q.lineJoin,q.lineWidth=F.lineWidth??q.lineWidth,q.miterLimit=F.miterLimit??q.miterLimit,q.shadowBlur=F.shadowBlur??q.shadowBlur,q.shadowColor=F.shadowColor??q.shadowColor,q.shadowOffsetX=F.shadowOffsetX??q.shadowOffsetX,q.shadowOffsetY=F.shadowOffsetY??q.shadowOffsetY,q.strokeStyle=F.strokeStyle??q.strokeStyle,q.textAlign=F.textAlign??q.textAlign,q.textBaseline=F.textBaseline??q.textBaseline,q.textRendering=F.textRendering??q.textRendering,q.wordSpacing=F.wordSpacing??q.wordSpacing,F.transform&&q.setTransform(F.transform),q},_=(q)=>{return new ImageData(q.data.slice(),q.width,q.height,{colorSpace:q.colorSpace})},$=(q)=>{if(q instanceof VideoFrame)return[q.displayWidth,q.displayHeight];if(!(q instanceof SVGImageElement))return[q.width,q.height];let F=q.width.baseVal.unitType,G=q.height.baseVal.unitType;q.width.baseVal.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX),q.height.baseVal.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);let H=[q.width.baseVal.valueInSpecifiedUnits,q.height.baseVal.valueInSpecifiedUnits];return q.width.baseVal.convertToSpecifiedUnits(F),q.height.baseVal.convertToSpecifiedUnits(G),H},X=(q,F)=>{let{canvas:G,imageSmoothingEnabled:H}=q;if(q.imageSmoothingEnabled=!1,Z(G,$(F)),F instanceof ImageData)q.putImageData(F,0,0);else q.drawImage(F,0,0);return q.imageSmoothingEnabled=H,q},z=async(q)=>{if(typeof q==="string")return O.image(q);if(q instanceof ArrayBuffer||ArrayBuffer.isView(q)||q instanceof Blob){let Y=await new Blob([q]).bytes(),K=document.createElement("img");return K.src=`data:application/octet-stream;base64,${Q.encode(Y)}`,await K.decode(),K}X(M,q);let F=document.createElement("img"),G=await J.convertToBlob({type:"image/webp",quality:1}),H=await V(G);return F.src=H,await F.decode(),F},k=async(q)=>{let F;if(typeof q==="string")F=await O.image(q);else if(q instanceof ImageData)return _(q);else if(q instanceof ArrayBuffer||ArrayBuffer.isView(q)||q instanceof Blob)F=await z(q);else F=q;return X(M,F),M.getImageData(0,0,J.width,J.height)};export{Z as resize,X as mirrorImageToCanvas,k as getImageData,z as getImage,$ as getDimensions,R as createContextSnapshot,_ as cloneImageData,j as applyContextSnapshot};
2
+
3
+ //# debugId=AAAE32A1CB492DF764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\src\\browser\\canvas\\canvas.ts"],
4
+ "sourcesContent": [
5
+ "import type { Vector2 } from \"../types/types.ts\";\nimport type { ContextSnapshot, ExtendedImageSource, RenderingContext } from \"./types.ts\";\n\nimport { base64, convertToDataUrl } from \"../data/data.ts\";\nimport { fetch } from \"../network/network.ts\";\nimport { nonNullable } from \"../validate/validate.ts\";\n\nconst sharedCanvas = new OffscreenCanvas(1, 1);\nconst sharedContext = nonNullable(sharedCanvas.getContext(\"2d\", { willReadFrequently: true }));\n\n/**\n * Resizes a canvas element, offscreen canvas, or rendering context to the specified dimensions.\n *\n * @param target The canvas element or rendering context to resize.\n * @param dimensions The new dimensions for the canvas.\n * @returns The resized canvas element or rendering context.\n */\nexport const resize = <\n T extends\n | HTMLCanvasElement\n | OffscreenCanvas\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D,\n>(\n target: T,\n dimensions: Vector2 | Partial<Record<\"width\" | \"height\", number>>,\n): T => {\n let canvas: HTMLCanvasElement | OffscreenCanvas;\n\n if (target instanceof HTMLCanvasElement) canvas = target;\n else if (target instanceof OffscreenCanvas) canvas = target;\n else canvas = target.canvas;\n\n if (Array.isArray(dimensions)) ((canvas.width = dimensions[0]), (canvas.height = dimensions[1]));\n else {\n canvas.width = dimensions.width ?? canvas.width;\n canvas.height = dimensions.height ?? canvas.height;\n }\n\n return target;\n};\n\n/**\n * Creates a snapshot of the canvas rendering context's state.\n *\n * @param context The canvas rendering context to create a snapshot of.\n * @returns A snapshot of the canvas rendering context's state, including its properties and\n * transformation matrix.\n */\nexport const createContextSnapshot = (context: CanvasRenderingContext2D): ContextSnapshot => {\n return {\n direction: context.direction,\n fillStyle: context.fillStyle,\n filter: context.filter,\n font: context.font,\n fontKerning: context.fontKerning,\n fontStretch: context.fontStretch,\n fontVariantCaps: context.fontVariantCaps,\n globalAlpha: context.globalAlpha,\n globalCompositeOperation: context.globalCompositeOperation,\n imageSmoothingEnabled: context.imageSmoothingEnabled,\n imageSmoothingQuality: context.imageSmoothingQuality,\n letterSpacing: context.letterSpacing,\n lineCap: context.lineCap,\n lineDashOffset: context.lineDashOffset,\n lineJoin: context.lineJoin,\n lineWidth: context.lineWidth,\n miterLimit: context.miterLimit,\n shadowBlur: context.shadowBlur,\n shadowColor: context.shadowColor,\n shadowOffsetX: context.shadowOffsetX,\n shadowOffsetY: context.shadowOffsetY,\n strokeStyle: context.strokeStyle,\n textAlign: context.textAlign,\n textBaseline: context.textBaseline,\n textRendering: context.textRendering,\n wordSpacing: context.wordSpacing,\n\n transform: context.getTransform(),\n };\n};\n\n/**\n * Applies a snapshot of the canvas rendering context's state to the context.\n *\n * @param context The canvas rendering context to apply the snapshot to.\n * @param snapshot The snapshot of the canvas rendering context's state.\n * @returns The updated canvas rendering context.\n */\nexport const applyContextSnapshot = (\n context: CanvasRenderingContext2D,\n snapshot: Partial<ContextSnapshot>,\n): CanvasRenderingContext2D => {\n context.direction = snapshot.direction ?? context.direction;\n context.fillStyle = snapshot.fillStyle ?? context.fillStyle;\n context.filter = snapshot.filter ?? context.filter;\n context.font = snapshot.font ?? context.font;\n context.fontKerning = snapshot.fontKerning ?? context.fontKerning;\n context.fontStretch = snapshot.fontStretch ?? context.fontStretch;\n context.fontVariantCaps = snapshot.fontVariantCaps ?? context.fontVariantCaps;\n context.globalAlpha = snapshot.globalAlpha ?? context.globalAlpha;\n context.globalCompositeOperation =\n snapshot.globalCompositeOperation ?? context.globalCompositeOperation;\n context.imageSmoothingEnabled = snapshot.imageSmoothingEnabled ?? context.imageSmoothingEnabled;\n context.imageSmoothingQuality = snapshot.imageSmoothingQuality ?? context.imageSmoothingQuality;\n context.letterSpacing = snapshot.letterSpacing ?? context.letterSpacing;\n context.lineCap = snapshot.lineCap ?? context.lineCap;\n context.lineDashOffset = snapshot.lineDashOffset ?? context.lineDashOffset;\n context.lineJoin = snapshot.lineJoin ?? context.lineJoin;\n context.lineWidth = snapshot.lineWidth ?? context.lineWidth;\n context.miterLimit = snapshot.miterLimit ?? context.miterLimit;\n context.shadowBlur = snapshot.shadowBlur ?? context.shadowBlur;\n context.shadowColor = snapshot.shadowColor ?? context.shadowColor;\n context.shadowOffsetX = snapshot.shadowOffsetX ?? context.shadowOffsetX;\n context.shadowOffsetY = snapshot.shadowOffsetY ?? context.shadowOffsetY;\n context.strokeStyle = snapshot.strokeStyle ?? context.strokeStyle;\n context.textAlign = snapshot.textAlign ?? context.textAlign;\n context.textBaseline = snapshot.textBaseline ?? context.textBaseline;\n context.textRendering = snapshot.textRendering ?? context.textRendering;\n context.wordSpacing = snapshot.wordSpacing ?? context.wordSpacing;\n snapshot.transform && context.setTransform(snapshot.transform);\n\n return context;\n};\n\n/**\n * Creates a clone of the given ImageData object.\n *\n * @param imageData The ImageData object to clone.\n * @returns A new ImageData object with the same data and dimensions.\n */\nexport const cloneImageData = (imageData: ImageData): ImageData => {\n return new ImageData(imageData.data.slice(), imageData.width, imageData.height, {\n colorSpace: imageData.colorSpace,\n });\n};\n\n/**\n * Gets the dimensions of the given image source.\n *\n * @param source The image source to get the dimensions of.\n * @returns The dimensions of the image source as a Vector2 [width, height].\n */\nexport const getDimensions = (source: ImageData | CanvasImageSource): Vector2 => {\n if (source instanceof VideoFrame) return [source.displayWidth, source.displayHeight];\n if (!(source instanceof SVGImageElement)) return [source.width, source.height];\n\n const widthUnit = source.width.baseVal.unitType;\n const heightUnit = source.height.baseVal.unitType;\n\n source.width.baseVal.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);\n source.height.baseVal.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);\n\n const dimensions: Vector2 = [\n source.width.baseVal.valueInSpecifiedUnits,\n source.height.baseVal.valueInSpecifiedUnits,\n ];\n\n source.width.baseVal.convertToSpecifiedUnits(widthUnit);\n source.height.baseVal.convertToSpecifiedUnits(heightUnit);\n\n return dimensions;\n};\n\n/**\n * Mirrors an image to a canvas.\n *\n * @param context The rendering context to use.\n * @param image The image to mirror.\n * @returns The rendering context.\n */\nexport const mirrorImageToCanvas = <T extends RenderingContext>(\n context: T,\n image: ImageData | CanvasImageSource,\n): T => {\n const canvas = context.canvas;\n const imageSmoothingEnabled = context.imageSmoothingEnabled;\n\n context.imageSmoothingEnabled = false;\n resize(canvas, getDimensions(image));\n if (image instanceof ImageData) context.putImageData(image, 0, 0);\n else context.drawImage(image, 0, 0);\n\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n return context;\n};\n\n/**\n * Converts an image source to an HTMLImageElement.\n *\n * @param source The image source to convert to an HTMLImageElement. Can be a URL string, an\n * ArrayBuffer, a Blob, an ImageData object, or any CanvasImageSource.\n * @returns A Promise that resolves to an HTMLImageElement representing the image source.\n */\nexport const getImage = async (source: ExtendedImageSource): Promise<HTMLImageElement> => {\n if (typeof source === \"string\") return fetch.image(source);\n if (source instanceof ArrayBuffer || ArrayBuffer.isView(source) || source instanceof Blob) {\n const blob = new Blob([source]);\n const bytes = await blob.bytes();\n const image = document.createElement(\"img\");\n image.src = `data:application/octet-stream;base64,${base64.encode(bytes)}`;\n await image.decode();\n return image;\n }\n\n mirrorImageToCanvas(sharedContext, source);\n const image = document.createElement(\"img\");\n const blob = await sharedCanvas.convertToBlob({ type: \"image/webp\", quality: 1 });\n const dataUrl = await convertToDataUrl(blob);\n\n image.src = dataUrl;\n await image.decode();\n\n return image;\n};\n\n/**\n * Converts an image source to ImageData.\n *\n * @param source The image source to convert to ImageData. Can be a URL string, an ArrayBuffer,\n * a Blob, an ImageData object, or any CanvasImageSource.\n * @returns A Promise that resolves to an ImageData object representing the image source.\n */\nexport const getImageData = async (source: ExtendedImageSource): Promise<ImageData> => {\n let imageSource: CanvasImageSource;\n\n if (typeof source === \"string\") imageSource = await fetch.image(source);\n else if (source instanceof ImageData) return cloneImageData(source);\n else if (source instanceof ArrayBuffer || ArrayBuffer.isView(source) || source instanceof Blob) {\n imageSource = await getImage(source);\n } else imageSource = source;\n\n mirrorImageToCanvas(sharedContext, imageSource);\n return sharedContext.getImageData(0, 0, sharedCanvas.width, sharedCanvas.height);\n};\n\nexport * from \"./types.ts\";\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "AAAE32A1CB492DF764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,35 @@
1
+ /** A type that represents various sources for images that can be used by the canvas utilities. */
2
+ export type ExtendedImageSource = string | ArrayBuffer | ArrayBufferView<ArrayBuffer> | Blob | ImageData | CanvasImageSource;
3
+ /** A type that represents the rendering context for a canvas. */
4
+ export type RenderingContext = CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
5
+ /** An interface representing a snapshot of a rendering context's state. */
6
+ export interface ContextSnapshot {
7
+ direction: CanvasRenderingContext2D["direction"];
8
+ fillStyle: CanvasRenderingContext2D["fillStyle"];
9
+ filter: CanvasRenderingContext2D["filter"];
10
+ font: CanvasRenderingContext2D["font"];
11
+ fontKerning: CanvasRenderingContext2D["fontKerning"];
12
+ fontStretch: CanvasRenderingContext2D["fontStretch"];
13
+ fontVariantCaps: CanvasRenderingContext2D["fontVariantCaps"];
14
+ globalAlpha: CanvasRenderingContext2D["globalAlpha"];
15
+ globalCompositeOperation: CanvasRenderingContext2D["globalCompositeOperation"];
16
+ imageSmoothingEnabled: CanvasRenderingContext2D["imageSmoothingEnabled"];
17
+ imageSmoothingQuality: CanvasRenderingContext2D["imageSmoothingQuality"];
18
+ letterSpacing: CanvasRenderingContext2D["letterSpacing"];
19
+ lineCap: CanvasRenderingContext2D["lineCap"];
20
+ lineDashOffset: CanvasRenderingContext2D["lineDashOffset"];
21
+ lineJoin: CanvasRenderingContext2D["lineJoin"];
22
+ lineWidth: CanvasRenderingContext2D["lineWidth"];
23
+ miterLimit: CanvasRenderingContext2D["miterLimit"];
24
+ shadowBlur: CanvasRenderingContext2D["shadowBlur"];
25
+ shadowColor: CanvasRenderingContext2D["shadowColor"];
26
+ shadowOffsetX: CanvasRenderingContext2D["shadowOffsetX"];
27
+ shadowOffsetY: CanvasRenderingContext2D["shadowOffsetY"];
28
+ strokeStyle: CanvasRenderingContext2D["strokeStyle"];
29
+ textAlign: CanvasRenderingContext2D["textAlign"];
30
+ textBaseline: CanvasRenderingContext2D["textBaseline"];
31
+ textRendering: CanvasRenderingContext2D["textRendering"];
32
+ wordSpacing: CanvasRenderingContext2D["wordSpacing"];
33
+ transform: DOMMatrix;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/canvas/types.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,WAAW,GACX,eAAe,CAAC,WAAW,CAAC,GAC5B,IAAI,GACJ,SAAS,GACT,iBAAiB,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,iCAAiC,CAAC;AAE5F,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACjD,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACrD,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;IAC7D,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACrD,wBAAwB,EAAE,wBAAwB,CAAC,0BAA0B,CAAC,CAAC;IAC/E,qBAAqB,EAAE,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IACzE,qBAAqB,EAAE,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IACzE,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACzD,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC7C,cAAc,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IAC3D,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAC/C,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACjD,UAAU,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACnD,UAAU,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACnD,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACrD,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACzD,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACzD,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACrD,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACjD,YAAY,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;IACvD,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACzD,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAErD,SAAS,EAAE,SAAS,CAAC;CACtB"}
@@ -0,0 +1,4 @@
1
+ var a=(e)=>typeof e==="string",s=(e)=>typeof e==="number";s.positive=(e)=>s(e)&&e>0;s.negative=(e)=>s(e)&&e<0;s.zero=(e)=>s(e)&&e===0;s.integer=(e)=>s(e)&&Number.isInteger(e);s.float=(e)=>s(e)&&Number.isFinite(e)&&!Number.isInteger(e);s.finite=(e)=>s(e)&&Number.isFinite(e);s.safeInteger=(e)=>s(e)&&Number.isSafeInteger(e);var o=(e)=>typeof e==="boolean",h=(e)=>o(e)&&e,p=(e)=>o(e)&&!e,i=(e)=>typeof e==="symbol",l=(e)=>e===null,u=(e)=>e===void 0,c=(e)=>typeof e==="object"&&e!==null,f=(e)=>Array.isArray(e),b=(e)=>e instanceof ArrayBuffer,d=(e)=>ArrayBuffer.isView(e),_=(e)=>e instanceof RegExp,v=(e)=>e!=null,n=(e,r)=>{if(!e)throw TypeError(r||"value is not truthy")},y=(e,r)=>n(a(e),r||"The provided value is not a string"),t=(e,r)=>n(s(e),r||"The provided value is not a number");t.positive=(e,r)=>n(s.positive(e),r||"The provided value is not a positive number");t.negative=(e,r)=>n(s.negative(e),r||"The provided value is not a negative number");t.zero=(e,r)=>n(s.zero(e),r||"The provided value is not zero");t.integer=(e,r)=>n(s.integer(e),r||"The provided value is not an integer");t.float=(e,r)=>n(s.float(e),r||"The provided value is not a float");t.finite=(e,r)=>n(s.finite(e),r||"The provided value is not a finite number");t.safeInteger=(e,r)=>n(s.safeInteger(e),r||"The provided value is not a safe integer");var m=(e,r)=>n(o(e),r||"The provided value is not a boolean"),g=(e,r)=>n(o(e)&&e,r||"The provided value is not true"),k=(e,r)=>n(o(e)&&!e,r||"The provided value is not false"),T=(e,r)=>n(i(e),r||"The provided value is not a symbol"),A=(e,r)=>n(l(e),r||"The provided value is not null"),N=(e,r)=>n(u(e),r||"The provided value is not undefined"),C=(e,r)=>n(c(e),r||"The provided value is not an object"),x=(e,r)=>n(f(e),r||"The provided value is not an array"),w=(e,r)=>n(b(e),r||"The provided value is not an arraybuffer"),j=(e,r)=>n(d(e),r||"The provided value is not an arraybuffer view"),I=(e,r)=>n(_(e),r||"The provided value is not a regexp"),z=(e,r)=>n(v(e),r||"The provided value is null or undefined"),B={string:y,number:t,boolean:m,true:g,false:k,symbol:T,null:A,undefined:N,object:C,array:x,arraybuffer:w,arraybufferview:j,regexp:I,nonNullable:z},E={string:a,number:s,boolean:o,true:h,false:p,symbol:i,null:l,undefined:u,object:c,array:f,arraybuffer:b,arraybufferview:d,regexp:_,nonNullable:v},F=(e)=>e!=null,S=(e,r)=>(B.false(e==null,r||"The provided value is null or undefined"),e);
2
+ export{B as j,E as k,F as l,S as m};
3
+
4
+ //# debugId=6B5A086AE7F825B464756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\src\\browser\\validate\\validate.ts"],
4
+ "sourcesContent": [
5
+ "import type { Assert, Check } from \"./types.ts\";\n\nconst _check_string: Check[\"string\"] = (value) => typeof value === \"string\";\nconst _check_number: Check[\"number\"] = (value) => typeof value === \"number\";\n_check_number.positive = (value): value is number => _check_number(value) && value > 0;\n_check_number.negative = (value): value is number => _check_number(value) && value < 0;\n_check_number.zero = (value): value is number => _check_number(value) && value === 0;\n_check_number.integer = (value): value is number => _check_number(value) && Number.isInteger(value);\n_check_number.float = (value): value is number =>\n _check_number(value) && Number.isFinite(value) && !Number.isInteger(value);\n_check_number.finite = (value): value is number => _check_number(value) && Number.isFinite(value);\n_check_number.safeInteger = (value): value is number =>\n _check_number(value) && Number.isSafeInteger(value);\nconst _check_boolean: Check[\"boolean\"] = (value) => typeof value === \"boolean\";\nconst _check_true: Check[\"true\"] = (value) => _check_boolean(value) && value;\nconst _check_false: Check[\"false\"] = (value) => _check_boolean(value) && !value;\nconst _check_symbol: Check[\"symbol\"] = (value) => typeof value === \"symbol\";\nconst _check_null: Check[\"null\"] = (value) => value === null;\nconst _check_undefined: Check[\"undefined\"] = (value) => value === undefined;\nconst _check_object: Check[\"object\"] = (value) => typeof value === \"object\" && value !== null;\nconst _check_array: Check[\"array\"] = (value) => Array.isArray(value);\nconst _check_arraybuffer: Check[\"arraybuffer\"] = (value) => value instanceof ArrayBuffer;\nconst _check_arraybufferview: Check[\"arraybufferview\"] = (value) => ArrayBuffer.isView(value);\nconst _check_regexp: Check[\"regexp\"] = (value) => value instanceof RegExp;\nconst _check_nonNullable: Check[\"nonNullable\"] = (value) => value != null;\n\nconst _base_assert = (value: unknown, message?: string): asserts value => {\n if (!value) throw new TypeError(message || \"value is not truthy\");\n};\nconst _assert_string: Assert[\"string\"] = (value, message) =>\n _base_assert(_check_string(value), message || \"The provided value is not a string\");\nconst _assert_number: Assert[\"number\"] = (value, message) =>\n _base_assert(_check_number(value), message || \"The provided value is not a number\");\n_assert_number.positive = (value, message) =>\n _base_assert(\n _check_number.positive(value),\n message || \"The provided value is not a positive number\",\n );\n_assert_number.negative = (value, message) =>\n _base_assert(\n _check_number.negative(value),\n message || \"The provided value is not a negative number\",\n );\n_assert_number.zero = (value, message) =>\n _base_assert(_check_number.zero(value), message || \"The provided value is not zero\");\n_assert_number.integer = (value, message) =>\n _base_assert(_check_number.integer(value), message || \"The provided value is not an integer\");\n_assert_number.float = (value, message) =>\n _base_assert(_check_number.float(value), message || \"The provided value is not a float\");\n_assert_number.finite = (value, message) =>\n _base_assert(_check_number.finite(value), message || \"The provided value is not a finite number\");\n_assert_number.safeInteger = (value, message) =>\n _base_assert(\n _check_number.safeInteger(value),\n message || \"The provided value is not a safe integer\",\n );\nconst _assert_boolean: Assert[\"boolean\"] = (value, message) =>\n _base_assert(_check_boolean(value), message || \"The provided value is not a boolean\");\nconst _assert_true: Assert[\"true\"] = (value, message) =>\n _base_assert(_check_boolean(value) && value, message || \"The provided value is not true\");\nconst _assert_false: Assert[\"false\"] = (value, message) =>\n _base_assert(_check_boolean(value) && !value, message || \"The provided value is not false\");\nconst _assert_symbol: Assert[\"symbol\"] = (value, message) =>\n _base_assert(_check_symbol(value), message || \"The provided value is not a symbol\");\nconst _assert_null: Assert[\"null\"] = (value, message) =>\n _base_assert(_check_null(value), message || \"The provided value is not null\");\nconst _assert_undefined: Assert[\"undefined\"] = (value, message) =>\n _base_assert(_check_undefined(value), message || \"The provided value is not undefined\");\nconst _assert_object: Assert[\"object\"] = (value, message) =>\n _base_assert(_check_object(value), message || \"The provided value is not an object\");\nconst _assert_array: Assert[\"array\"] = (value, message) =>\n _base_assert(_check_array(value), message || \"The provided value is not an array\");\nconst _assert_arraybuffer: Assert[\"arraybuffer\"] = (value, message) =>\n _base_assert(_check_arraybuffer(value), message || \"The provided value is not an arraybuffer\");\nconst _assert_arraybufferview: Assert[\"arraybufferview\"] = (value, message) =>\n _base_assert(\n _check_arraybufferview(value),\n message || \"The provided value is not an arraybuffer view\",\n );\nconst _assert_regexp: Assert[\"regexp\"] = (value, message) =>\n _base_assert(_check_regexp(value), message || \"The provided value is not a regexp\");\nconst _assert_nonNullable: Assert[\"nonNullable\"] = (value, message) =>\n _base_assert(_check_nonNullable(value), message || \"The provided value is null or undefined\");\n\nexport const assert: Assert = {\n string: _assert_string,\n number: _assert_number,\n boolean: _assert_boolean,\n true: _assert_true,\n false: _assert_false,\n symbol: _assert_symbol,\n null: _assert_null,\n undefined: _assert_undefined,\n object: _assert_object,\n array: _assert_array,\n arraybuffer: _assert_arraybuffer,\n arraybufferview: _assert_arraybufferview,\n regexp: _assert_regexp,\n nonNullable: _assert_nonNullable,\n};\n\nexport const check: Check = {\n string: _check_string,\n number: _check_number,\n boolean: _check_boolean,\n true: _check_true,\n false: _check_false,\n symbol: _check_symbol,\n null: _check_null,\n undefined: _check_undefined,\n object: _check_object,\n array: _check_array,\n arraybuffer: _check_arraybuffer,\n arraybufferview: _check_arraybufferview,\n regexp: _check_regexp,\n nonNullable: _check_nonNullable,\n};\n\nexport const isNonNullable = <T>(value: T): value is NonNullable<T> => value != null;\nexport const nonNullable = <T>(value: T, message?: string): NonNullable<T> =>\n (assert.false(value == null, message || \"The provided value is null or undefined\"),\n value) as NonNullable<T>;\n\nexport * from \"./types.ts\";\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "6B5A086AE7F825B464756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,4 @@
1
+ var i=new TextEncoder,d=new TextDecoder,f=Object.freeze({alphabet:(()=>{let e=(r)=>{let n=Array(64).fill(0),t=Array(256).fill(64);for(let o=0;o<r.length;o++)n[o]=r.charCodeAt(o),t[r.charCodeAt(o)]=o;return[n,t]};return Object.freeze([e("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),e("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")])})(),encode:(e,r=!1)=>{let n=typeof e==="string"?i.encode(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),t=0,o=0,s=n.length,a=r?f.alphabet[1][0]:f.alphabet[0][0],c=new Uint8Array(Math.ceil(s/3)*4);while(t<s){let l=n[t++]<<16|n[t++]<<8|n[t++];c[o++]=a[(l&16515072)>>18],c[o++]=a[(l&258048)>>12],c[o++]=a[(l&4032)>>6],c[o++]=a[l&63]}if(s%3){let l=c.length-1;if(s%3===1)c[l]=c[l-1]=61;else c[l]=61}return d.decode(c)},decode:(e,r=!1)=>{let n=r?f.alphabet[1][1]:f.alphabet[0][1],t=new Uint8Array(Math.ceil(e.length/4)*3),o=i.encode(e),s=0,a=0;while(a<o.length){let c=n[o[a++]]<<18|n[o[a++]]<<12|n[o[a++]]<<6|n[o[a++]];t[s++]=c>>16&255,t[s++]=c>>8&255,t[s++]=c&255}if(o[o.length-1]===61)return t.slice(0,s-(o[o.length-2]===61?2:1));return t},decodeNonStrict:(e,r=!1)=>{let n=r?f.alphabet[1][1]:f.alphabet[0][1],t=new Uint8Array(Math.ceil(e.length/4)*3),o=i.encode(e),s=()=>{while(c<o.length&&n[o[c]]===64)c++;return n[o[c++]]&63},a=0,c=0;while(c<o.length){let l=s()<<18|s()<<12|s()<<6|s();t[a++]=l>>16&255,t[a++]=l>>8&255,t[a++]=l&255}if(o[o.length-1]===61)return t.slice(0,a-(o[o.length-2]===61?2:1));return t}}),b=async(e,r)=>{let n;if(e instanceof Blob)n=r?new Blob([e],{type:r}):e;else n=new Blob(Array.isArray(e)?e:[e],r?{type:r}:void 0);let t=new FileReader;return new Promise((o,s)=>{t.onloadend=()=>{if(typeof t.result==="string")o(t.result);else s(Error("Failed to convert to data URL"))},t.onerror=()=>s(t.error),t.readAsDataURL(n)})},y=(e,r)=>{if(Array.isArray(e)&&Array.isArray(r))return h.compare(e,r);if(typeof e==="number"&&typeof r==="number")return e===r?0:+(e>r)-1||1;let n=String(e),t=String(r);return n===t?0:+(n>t)-1||1},h={append:(e,...r)=>{return e.push(...r.flat()),e},prepend:(e,...r)=>{return e.unshift(...r.flat()),e},compare:(e,r,n=y)=>{if(e.length<r.length)return-1;if(r.length<e.length)return 1;for(let t=0;t<e.length;t++){let o=n(e[t],r[t]);if(o)return o<0?-1:1}return 0},padStart:(e,r,n=0)=>{while(e.length<r)e.unshift(n);return e},padEnd:(e,r,n=0)=>{while(e.length<r)e.push(n);return e},toReversed:(e)=>[...e].reverse()},u=()=>({cache:new WeakMap}),p=(e,r=u())=>{if(e==null)return e;if(typeof e!=="object")return e;if(r.cache.has(e))return r.cache.get(e);if(Array.isArray(e)){let n=[];r.cache.set(e,n);for(let t=0;t<e.length;t++)n[t]=p(e[t],r);return n}else if(e instanceof Map)return new Map(e);else if(e instanceof Set){let n=new Set,t=[...e];r.cache.set(e,n);for(let o=0;o<t.length;o++)n.add(p(t[o],r));return n}else{let n={};r.cache.set(e,n);for(let[t,o]of Object.entries(e))n[t]=p(o,r);return n}},g={deepFreeze:(e)=>{let r=[e],n=new WeakSet;do{let t=r.pop();if(!(t&&typeof t==="object"))continue;if(n.has(t))continue;if(Object.freeze(t),n.add(t),Array.isArray(t))r.push(...t);else r.push(...Object.values(t))}while(r.length);return e},merge:(...e)=>Object.assign({},...e),mergeInto:(...e)=>Object.assign(e[0],...e),omit:(e,r)=>{let n={},t=new Set(r);for(let[o,s]of Object.entries(e)){if(t.has(o))continue;n[o]=s}return n},pick:(e,r)=>{let n={};for(let t of r)n[t]=e[t];return n}},A={reverse:(e)=>e.split("").reverse().join(""),substitute:(e,r)=>{return(r instanceof Map?[...r]:Object.entries(r)).reduce((t,[o,s])=>{return typeof o==="string"?t.replaceAll(o,s):t.replace(o,s)},e)}};
2
+ export{i as a,d as b,f as c,b as d,h as e,p as f,g,A as h};
3
+
4
+ //# debugId=95623EE685C33B5364756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\src\\browser\\data\\data.ts"],
4
+ "sourcesContent": [
5
+ "import type { DeepFrozen } from \"../types/types.ts\";\nimport type {\n ArrayUtils,\n Base64,\n CloneState,\n ConverToDataUrl,\n DataUrlSource,\n ObjectUtils,\n StringUtils,\n} from \"./types.ts\";\n\nexport const textEncoder: TextEncoder = new TextEncoder();\nexport const textDecoder: TextDecoder = new TextDecoder();\n\nexport const base64: Base64 = Object.freeze({\n alphabet: (() => {\n const mapAlphabet = (\n alphabet: string,\n ): readonly [base64ToAlpha: readonly number[], alphaToBase64: readonly number[]] => {\n const base64ToAlpha: number[] = new Array(64).fill(0);\n const alphaToBase64: number[] = new Array(256).fill(64);\n for (let i = 0; i < alphabet.length; i++) {\n base64ToAlpha[i] = alphabet.charCodeAt(i);\n alphaToBase64[alphabet.charCodeAt(i)] = i;\n }\n return [base64ToAlpha, alphaToBase64];\n };\n\n return Object.freeze([\n mapAlphabet(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"),\n mapAlphabet(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\"),\n ] as const);\n })(),\n\n encode: (data: ArrayBuffer | ArrayBufferView | string, urlSafe: boolean = false): string => {\n const bytes =\n typeof data === \"string\"\n ? textEncoder.encode(data)\n : ArrayBuffer.isView(data)\n ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n : new Uint8Array(data);\n\n let offset = 0;\n let resultOffset = 0;\n\n const byteLength = bytes.length;\n const alphabet = urlSafe ? base64.alphabet[1][0] : base64.alphabet[0][0];\n const result = new Uint8Array(Math.ceil(byteLength / 3) * 4);\n\n while (offset < byteLength) {\n const triplet = (bytes[offset++]! << 16) | (bytes[offset++]! << 8) | bytes[offset++]!;\n result[resultOffset++] = alphabet[(triplet & 0xfc0000) >> 18]!;\n result[resultOffset++] = alphabet[(triplet & 0x3f000) >> 12]!;\n result[resultOffset++] = alphabet[(triplet & 0xfc0) >> 6]!;\n result[resultOffset++] = alphabet[triplet & 0x3f]!;\n }\n\n if (byteLength % 3) {\n const lastIndex = result.length - 1;\n if (byteLength % 3 === 1) result[lastIndex] = result[lastIndex - 1] = 61;\n else result[lastIndex] = 61;\n }\n\n return textDecoder.decode(result);\n },\n\n decode: (data: string, urlSafe: boolean = false): Uint8Array<ArrayBuffer> => {\n const alphabet = urlSafe ? base64.alphabet[1][1] : base64.alphabet[0][1];\n const result = new Uint8Array(Math.ceil(data.length / 4) * 3);\n\n const charCodes = textEncoder.encode(data);\n let resultOffset = 0;\n let charCodesIndex = 0;\n\n while (charCodesIndex < charCodes.length) {\n const triplet =\n (alphabet[charCodes[charCodesIndex++]!]! << 18) |\n (alphabet[charCodes[charCodesIndex++]!]! << 12) |\n (alphabet[charCodes[charCodesIndex++]!]! << 6) |\n alphabet[charCodes[charCodesIndex++]!]!;\n\n result[resultOffset++] = (triplet >> 16) & 0xff;\n result[resultOffset++] = (triplet >> 8) & 0xff;\n result[resultOffset++] = triplet & 0xff;\n }\n\n if (charCodes[charCodes.length - 1] === 61) {\n return result.slice(0, resultOffset - (charCodes[charCodes.length - 2] === 61 ? 2 : 1));\n }\n\n return result;\n },\n\n decodeNonStrict: (data: string, urlSafe: boolean = false): Uint8Array<ArrayBuffer> => {\n const alpha = urlSafe ? base64.alphabet[1][1] : base64.alphabet[0][1];\n const result = new Uint8Array(Math.ceil(data.length / 4) * 3);\n\n const charCodes = textEncoder.encode(data);\n const n16b = () => {\n while (index < charCodes.length && alpha[charCodes[index]!] === 64) index++;\n return alpha[charCodes[index++]!]! & 63;\n };\n\n let resultOffset = 0;\n let index = 0;\n\n while (index < charCodes.length) {\n const triplet = (n16b() << 18) | (n16b() << 12) | (n16b() << 6) | n16b();\n\n result[resultOffset++] = (triplet >> 16) & 0xff;\n result[resultOffset++] = (triplet >> 8) & 0xff;\n result[resultOffset++] = triplet & 0xff;\n }\n\n if (charCodes[charCodes.length - 1] === 61) {\n return result.slice(0, resultOffset - (charCodes[charCodes.length - 2] === 61 ? 2 : 1));\n }\n\n return result;\n },\n});\n\nexport const convertToDataUrl: ConverToDataUrl = async (\n source: DataUrlSource,\n mimeType?: string,\n): Promise<string> => {\n let blob: Blob;\n\n if (source instanceof Blob) blob = mimeType ? new Blob([source], { type: mimeType }) : source;\n else\n blob = new Blob(\n Array.isArray(source) ? source : [source],\n mimeType ? { type: mimeType } : undefined,\n );\n\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onloadend = () => {\n if (typeof fileReader.result === \"string\") resolve(fileReader.result);\n else reject(new Error(\"Failed to convert to data URL\"));\n };\n fileReader.onerror = () => reject(fileReader.error);\n fileReader.readAsDataURL(blob);\n });\n};\n\nconst arrayCompare = (a: any, b: any): number => {\n if (Array.isArray(a) && Array.isArray(b)) return array.compare(a, b);\n if (typeof a === \"number\" && typeof b === \"number\") {\n return (a === b ? 0 : +(a > b) - 1 || 1) as -1 | 0 | 1;\n }\n\n const _a = String(a);\n const _b = String(b);\n\n return (_a === _b ? 0 : +(_a > _b) - 1 || 1) as -1 | 0 | 1;\n};\n\nexport const array: ArrayUtils = {\n append: <T extends unknown[], Appended>(\n target: T,\n ...sources: Appended[][]\n ): [...T, ...Appended[]] => {\n target.push(...sources.flat());\n return target as unknown as [...T, ...Appended[]];\n },\n prepend: <T extends unknown[], Prepended>(\n target: T,\n ...sources: Prepended[][]\n ): [...Prepended[], ...T] => {\n target.unshift(...sources.flat());\n return target as unknown as [...Prepended[], ...T];\n },\n compare: <T, U>(a: T[], b: U[], compareFn = arrayCompare): -1 | 0 | 1 => {\n if (a.length < b.length) return -1;\n if (b.length < a.length) return 1;\n for (let i = 0; i < a.length; i++) {\n const result = compareFn(a[i], b[i]);\n if (result) return result < 0 ? -1 : 1;\n }\n\n return 0;\n },\n padStart: (value, length, padWith = 0) => {\n while (value.length < length) value.unshift(padWith as any);\n return value;\n },\n padEnd: (value, length, padWith = 0) => {\n while (value.length < length) value.push(padWith as any);\n return value;\n },\n toReversed: (value) => [...value].reverse(),\n};\n\nconst createCloneState = (): CloneState => ({ cache: new WeakMap() });\nexport const clone = <T>(value: T, state: CloneState = createCloneState()): T => {\n if (value == null) return value;\n if (typeof value !== \"object\") return value;\n if (state.cache.has(value)) return state.cache.get(value) as T;\n\n if (Array.isArray(value)) {\n const result: any[] = [];\n state.cache.set(value, result);\n for (let i = 0; i < value.length; i++) result[i] = clone(value[i], state);\n return result as T;\n } else if (value instanceof Map) return new Map(value) as T;\n else if (value instanceof Set) {\n const result = new Set();\n const values = [...value];\n state.cache.set(value, result);\n for (let i = 0; i < values.length; i++) result.add(clone(values[i], state));\n return result as T;\n } else {\n const result: any = {};\n state.cache.set(value, result);\n for (const [key, _value] of Object.entries(value)) result[key] = clone(_value, state);\n return result as T;\n }\n};\n\nexport const object: ObjectUtils = {\n deepFreeze: (value) => {\n const stack: any[] = [value];\n const encounterSet: WeakSet<object> = new WeakSet();\n\n do {\n const current = stack.pop();\n if (!(current && typeof current === \"object\")) continue;\n\n if (encounterSet.has(current)) continue; // circular reference\n\n Object.freeze(current);\n encounterSet.add(current);\n\n if (Array.isArray(current)) stack.push(...current);\n else stack.push(...Object.values(current));\n } while (stack.length);\n\n return value as DeepFrozen<typeof value>;\n },\n merge: (...sources: any[]) => Object.assign({}, ...sources),\n mergeInto: (...sources: any[]) => Object.assign(sources[0], ...sources),\n omit: <T extends {}, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> => {\n const result = {} as Omit<T, K>;\n const toOmit = new Set(keys);\n for (const [key, value] of Object.entries(obj)) {\n if (toOmit.has(key as K)) continue;\n result[key as Exclude<keyof T, K>] = value as T[Exclude<keyof T, K>];\n }\n return result;\n },\n pick: <T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> => {\n const result = {} as Pick<T, K>;\n for (const key of keys) result[key] = obj[key];\n return result;\n },\n};\n\nexport const string: StringUtils = {\n reverse: (inputStr) => inputStr.split(\"\").reverse().join(\"\"),\n substitute: (inputStr, substitions) => {\n const subPairs = substitions instanceof Map ? [...substitions] : Object.entries(substitions);\n return subPairs.reduce((acc, [key, value]) => {\n return typeof key === \"string\" ? acc.replaceAll(key, value) : acc.replace(key, value);\n }, inputStr);\n },\n};\n\nexport * from \"./types.ts\";\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "95623EE685C33B5364756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,4 @@
1
+ var d=((a)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});
2
+ export{d as n};
3
+
4
+ //# debugId=7936CB637C6E4EF564756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "7936CB637C6E4EF564756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,4 @@
1
+ import{j as n}from"./chunk-2h1wek3q.js";var o=(e)=>new Promise((t,s)=>{let r=(...c)=>{return e.onloadedmetadata=e.onerror=null,null};e.onloadedmetadata=()=>r(t(e)),e.onerror=()=>r(s(Error("Failed to load metadata")))}),a=Object.assign((...e)=>globalThis.fetch(...e),{ok:async(...e)=>{let t=await a(...e);return n.true(t.ok,"The response was not okay."),t},arraybuffer:async(...e)=>{let t=await a(...e);return[t,await t.arrayBuffer()]},blob:async(...e)=>{let t=await a.ok(...e);return[t,await t.blob()]},bytes:async(...e)=>{let t=await a.ok(...e);return[t,await t.bytes()]},headers:async(...e)=>{let t=await a(...e);return[t,Object.fromEntries(t.headers.entries())]},json:async(...e)=>{let t=await a.ok(...e);return[t,await t.json()]},stream:async(...e)=>{let t=await a.ok(...e),s=t.body;if(!s)throw Error("No response body.");return[t,s]},text:async(...e)=>{let t=await a.ok(...e);return[t,await t.text()]},audio:async(...e)=>{let t;if(typeof e[0]==="string")t=e[0];else if(e[0]instanceof URL)t=e[0].href;else t=e[0].url;let s=new Audio(t);return o(s)},image:async(...e)=>{let t;if(typeof e[0]==="string")t=e[0];else if(e[0]instanceof URL)t=e[0].href;else t=e[0].url;let s=document.createElement("img");return s.src=t,await s.decode(),s},video:async(...e)=>{let t;if(typeof e[0]==="string")t=e[0];else if(e[0]instanceof URL)t=e[0].href;else t=e[0].url;let s=document.createElement("video");return s.src=t,o(s)}});
2
+ export{a as i};
3
+
4
+ //# debugId=F59BD91E6348844364756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\src\\browser\\network\\network.ts"],
4
+ "sourcesContent": [
5
+ "import { assert } from \"../validate/validate.ts\";\nimport type { ExtendedFetch, FetchParams, LoadMetadata } from \"./types.ts\";\n\nconst loadMetadata: LoadMetadata = (mediaElement) =>\n new Promise((resolve, reject) => {\n const cleanup = (...args: any[]) => {\n mediaElement.onloadedmetadata = mediaElement.onerror = null;\n return null;\n };\n mediaElement.onloadedmetadata = () => cleanup(resolve(mediaElement));\n mediaElement.onerror = () => cleanup(reject(new Error(\"Failed to load metadata\")));\n });\n\nexport const fetch: ExtendedFetch = Object.assign(\n (...params: FetchParams) => globalThis.fetch(...params),\n {\n ok: async (...params: FetchParams) => {\n const response = await fetch(...params);\n assert.true(response.ok, \"The response was not okay.\");\n return response as Response & { ok: true };\n },\n\n arraybuffer: async (...params: FetchParams) => {\n const response = await fetch(...params);\n return [response, await response.arrayBuffer()] as const;\n },\n\n blob: async (...params: FetchParams) => {\n const response = await fetch.ok(...params);\n return [response, await response.blob()] as const;\n },\n\n bytes: async (...params: FetchParams) => {\n const response = await fetch.ok(...params);\n return [response, await response.bytes()] as const;\n },\n\n headers: async (...params: FetchParams) => {\n const response = await fetch(...params);\n return [response, Object.fromEntries(response.headers.entries())] as const;\n },\n\n json: async (...params: FetchParams) => {\n const response = await fetch.ok(...params);\n return [response, await response.json()] as const;\n },\n\n stream: async (...params: FetchParams) => {\n const response = await fetch.ok(...params);\n const body = response.body;\n\n if (!body) throw new Error(\"No response body.\");\n return [response, body] as const;\n },\n\n text: async (...params: FetchParams) => {\n const response = await fetch.ok(...params);\n return [response, await response.text()] as const;\n },\n\n audio: async (...params: FetchParams) => {\n let url: string;\n if (typeof params[0] === \"string\") url = params[0];\n else if (params[0] instanceof URL) url = params[0].href;\n else url = params[0].url;\n\n const audio = new Audio(url);\n return loadMetadata(audio);\n },\n\n image: async (...params: FetchParams) => {\n let url: string;\n if (typeof params[0] === \"string\") url = params[0];\n else if (params[0] instanceof URL) url = params[0].href;\n else url = params[0].url;\n\n const image = document.createElement(\"img\");\n image.src = url;\n\n await image.decode();\n return image;\n },\n\n video: async (...params: FetchParams) => {\n let url: string;\n if (typeof params[0] === \"string\") url = params[0];\n else if (params[0] instanceof URL) url = params[0].href;\n else url = params[0].url;\n\n const video = document.createElement(\"video\");\n video.src = url;\n return loadMetadata(video);\n },\n },\n);\n\nexport * from \"./types.ts\";\n"
6
+ ],
7
+ "mappings": "wCAGA,IAAM,EAA6B,CAAC,IAClC,IAAI,QAAQ,CAAC,EAAS,IAAW,CAC/B,IAAM,EAAU,IAAI,IAAgB,CAElC,OADA,EAAa,iBAAmB,EAAa,QAAU,KAChD,MAET,EAAa,iBAAmB,IAAM,EAAQ,EAAQ,CAAY,CAAC,EACnE,EAAa,QAAU,IAAM,EAAQ,EAAW,MAAM,yBAAyB,CAAC,CAAC,EAClF,EAEU,EAAuB,OAAO,OACzC,IAAI,IAAwB,WAAW,MAAM,GAAG,CAAM,EACtD,CACE,GAAI,SAAU,IAAwB,CACpC,IAAM,EAAW,MAAM,EAAM,GAAG,CAAM,EAEtC,OADA,EAAO,KAAK,EAAS,GAAI,4BAA4B,EAC9C,GAGT,YAAa,SAAU,IAAwB,CAC7C,IAAM,EAAW,MAAM,EAAM,GAAG,CAAM,EACtC,MAAO,CAAC,EAAU,MAAM,EAAS,YAAY,CAAC,GAGhD,KAAM,SAAU,IAAwB,CACtC,IAAM,EAAW,MAAM,EAAM,GAAG,GAAG,CAAM,EACzC,MAAO,CAAC,EAAU,MAAM,EAAS,KAAK,CAAC,GAGzC,MAAO,SAAU,IAAwB,CACvC,IAAM,EAAW,MAAM,EAAM,GAAG,GAAG,CAAM,EACzC,MAAO,CAAC,EAAU,MAAM,EAAS,MAAM,CAAC,GAG1C,QAAS,SAAU,IAAwB,CACzC,IAAM,EAAW,MAAM,EAAM,GAAG,CAAM,EACtC,MAAO,CAAC,EAAU,OAAO,YAAY,EAAS,QAAQ,QAAQ,CAAC,CAAC,GAGlE,KAAM,SAAU,IAAwB,CACtC,IAAM,EAAW,MAAM,EAAM,GAAG,GAAG,CAAM,EACzC,MAAO,CAAC,EAAU,MAAM,EAAS,KAAK,CAAC,GAGzC,OAAQ,SAAU,IAAwB,CACxC,IAAM,EAAW,MAAM,EAAM,GAAG,GAAG,CAAM,EACnC,EAAO,EAAS,KAEtB,GAAI,CAAC,EAAM,MAAU,MAAM,mBAAmB,EAC9C,MAAO,CAAC,EAAU,CAAI,GAGxB,KAAM,SAAU,IAAwB,CACtC,IAAM,EAAW,MAAM,EAAM,GAAG,GAAG,CAAM,EACzC,MAAO,CAAC,EAAU,MAAM,EAAS,KAAK,CAAC,GAGzC,MAAO,SAAU,IAAwB,CACvC,IAAI,EACJ,GAAI,OAAO,EAAO,KAAO,SAAU,EAAM,EAAO,GAC3C,QAAI,EAAO,aAAc,IAAK,EAAM,EAAO,GAAG,KAC9C,OAAM,EAAO,GAAG,IAErB,IAAM,EAAQ,IAAI,MAAM,CAAG,EAC3B,OAAO,EAAa,CAAK,GAG3B,MAAO,SAAU,IAAwB,CACvC,IAAI,EACJ,GAAI,OAAO,EAAO,KAAO,SAAU,EAAM,EAAO,GAC3C,QAAI,EAAO,aAAc,IAAK,EAAM,EAAO,GAAG,KAC9C,OAAM,EAAO,GAAG,IAErB,IAAM,EAAQ,SAAS,cAAc,KAAK,EAI1C,OAHA,EAAM,IAAM,EAEZ,MAAM,EAAM,OAAO,EACZ,GAGT,MAAO,SAAU,IAAwB,CACvC,IAAI,EACJ,GAAI,OAAO,EAAO,KAAO,SAAU,EAAM,EAAO,GAC3C,QAAI,EAAO,aAAc,IAAK,EAAM,EAAO,GAAG,KAC9C,OAAM,EAAO,GAAG,IAErB,IAAM,EAAQ,SAAS,cAAc,OAAO,EAE5C,OADA,EAAM,IAAM,EACL,EAAa,CAAK,EAE7B,CACF",
8
+ "debugId": "F59BD91E6348844364756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,11 @@
1
+ import type { ArrayUtils, Base64, CloneState, ConverToDataUrl, ObjectUtils, StringUtils } from "./types.ts";
2
+ export declare const textEncoder: TextEncoder;
3
+ export declare const textDecoder: TextDecoder;
4
+ export declare const base64: Base64;
5
+ export declare const convertToDataUrl: ConverToDataUrl;
6
+ export declare const array: ArrayUtils;
7
+ export declare const clone: <T>(value: T, state?: CloneState) => T;
8
+ export declare const object: ObjectUtils;
9
+ export declare const string: StringUtils;
10
+ export * from "./types.ts";
11
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/browser/data/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,UAAU,EACV,eAAe,EAEf,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,WAAW,EAAE,WAA+B,CAAC;AAC1D,eAAO,MAAM,WAAW,EAAE,WAA+B,CAAC;AAE1D,eAAO,MAAM,MAAM,EAAE,MA0GnB,CAAC;AAEH,eAAO,MAAM,gBAAgB,EAAE,eAsB9B,CAAC;AAcF,eAAO,MAAM,KAAK,EAAE,UAkCnB,CAAC;AAGF,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,QAAO,UAA+B,KAAG,CAuB3E,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,WAoCpB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,WAQpB,CAAC;AAEF,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import{a,b,c,d,e,f,g,h}from"../chunk-3p7c1apf.js";import"../chunk-8r5jmymq.js";export{a as textEncoder,b as textDecoder,h as string,g as object,d as convertToDataUrl,f as clone,c as base64,e as array};
2
+
3
+ //# debugId=C74AF6C1B3C632E564756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "C74AF6C1B3C632E564756E2164756E21",
8
+ "names": []
9
+ }