jazz-tools 0.16.5 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.svelte-kit/__package__/index.d.ts +1 -0
- package/.svelte-kit/__package__/index.d.ts.map +1 -1
- package/.svelte-kit/__package__/index.js +1 -0
- package/.svelte-kit/__package__/media/image.svelte +131 -0
- package/.svelte-kit/__package__/media/image.svelte.d.ts +10 -0
- package/.svelte-kit/__package__/media/image.svelte.d.ts.map +1 -0
- package/.svelte-kit/__package__/media/index.d.ts +2 -0
- package/.svelte-kit/__package__/media/index.d.ts.map +1 -0
- package/.svelte-kit/__package__/media/index.js +1 -0
- package/.svelte-kit/__package__/tests/media/image.svelte.test.d.ts +2 -0
- package/.svelte-kit/__package__/tests/media/image.svelte.test.d.ts.map +1 -0
- package/.svelte-kit/__package__/tests/media/image.svelte.test.js +430 -0
- package/.svelte-kit/__package__/tests/testUtils.d.ts +11 -0
- package/.svelte-kit/__package__/tests/testUtils.d.ts.map +1 -0
- package/.svelte-kit/__package__/tests/testUtils.js +17 -0
- package/.svelte-kit/__package__/tests/types.d.ts +3 -0
- package/.turbo/turbo-build.log +44 -48
- package/CHANGELOG.md +28 -0
- package/dist/{chunk-H3BIFFQG.js → chunk-2SH44VLX.js} +35 -40
- package/dist/chunk-2SH44VLX.js.map +1 -0
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/inspector/{custom-element-TUXKXSZU.js → custom-element-I7L56H6B.js} +3 -5
- package/dist/inspector/{custom-element-TUXKXSZU.js.map → custom-element-I7L56H6B.js.map} +1 -1
- package/dist/inspector/index.js +2 -4
- package/dist/inspector/index.js.map +1 -1
- package/dist/inspector/register-custom-element.js +1 -1
- package/dist/inspector/viewer/co-plain-text-view.d.ts +1 -1
- package/dist/inspector/viewer/co-plain-text-view.d.ts.map +1 -1
- package/dist/inspector/viewer/role-display.d.ts.map +1 -1
- package/dist/media/chunk-BBSS3NEY.js +211 -0
- package/dist/media/chunk-BBSS3NEY.js.map +1 -0
- package/dist/media/create-image.d.ts +48 -0
- package/dist/media/create-image.d.ts.map +1 -0
- package/dist/media/create-image.test.d.ts +2 -0
- package/dist/media/create-image.test.d.ts.map +1 -0
- package/dist/media/index.browser.d.ts +15 -0
- package/dist/media/index.browser.d.ts.map +1 -0
- package/dist/media/index.browser.js +113 -0
- package/dist/media/index.browser.js.map +1 -0
- package/dist/media/index.d.ts +53 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +13 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/index.native.d.ts +17 -0
- package/dist/media/index.native.d.ts.map +1 -0
- package/dist/media/index.native.js +126 -0
- package/dist/media/index.native.js.map +1 -0
- package/dist/media/utils.d.ts +17 -0
- package/dist/media/utils.d.ts.map +1 -0
- package/dist/media/utils.test.d.ts +2 -0
- package/dist/media/utils.test.d.ts.map +1 -0
- package/dist/react/index.d.ts +1 -2
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +176 -59
- package/dist/react/index.js.map +1 -1
- package/dist/react/media/image.d.ts +62 -0
- package/dist/react/media/image.d.ts.map +1 -0
- package/dist/react/ssr.d.ts.map +1 -1
- package/dist/react/ssr.js.map +1 -1
- package/dist/react/tests/media/image.test.d.ts +2 -0
- package/dist/react/tests/media/image.test.d.ts.map +1 -0
- package/dist/react/tests/testUtils.d.ts.map +1 -1
- package/dist/react-core/auth/PassphraseAuth.d.ts +1 -1
- package/dist/react-core/auth/PassphraseAuth.d.ts.map +1 -1
- package/dist/react-core/index.js +1 -3
- package/dist/react-core/index.js.map +1 -1
- package/dist/react-core/tests/testUtils.d.ts.map +1 -1
- package/dist/react-core/tests/useDemoAuth.test.d.ts +2 -0
- package/dist/react-core/tests/useDemoAuth.test.d.ts.map +1 -0
- package/dist/react-native-core/index.d.ts +1 -1
- package/dist/react-native-core/index.d.ts.map +1 -1
- package/dist/react-native-core/index.js +84 -66
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/react-native-core/media/image.d.ts +93 -0
- package/dist/react-native-core/media/image.d.ts.map +1 -0
- package/dist/react-native-core/testing.d.ts +2 -0
- package/dist/react-native-core/testing.d.ts.map +1 -0
- package/dist/svelte/index.d.ts +1 -0
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +1 -0
- package/dist/svelte/media/image.svelte +131 -0
- package/dist/svelte/media/image.svelte.d.ts +10 -0
- package/dist/svelte/media/image.svelte.d.ts.map +1 -0
- package/dist/svelte/media/index.d.ts +2 -0
- package/dist/svelte/media/index.d.ts.map +1 -0
- package/dist/svelte/media/index.js +1 -0
- package/dist/svelte/tests/media/image.svelte.test.d.ts +2 -0
- package/dist/svelte/tests/media/image.svelte.test.d.ts.map +1 -0
- package/dist/svelte/tests/media/image.svelte.test.js +430 -0
- package/dist/svelte/tests/testUtils.d.ts +11 -0
- package/dist/svelte/tests/testUtils.d.ts.map +1 -0
- package/dist/svelte/tests/testUtils.js +17 -0
- package/dist/svelte/tests/types.d.ts +3 -0
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/tools/coValues/coFeed.d.ts +15 -0
- package/dist/tools/coValues/coFeed.d.ts.map +1 -1
- package/dist/tools/coValues/deepLoading.d.ts +10 -10
- package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
- package/dist/tools/coValues/extensions/imageDef.d.ts +3 -9
- package/dist/tools/coValues/extensions/imageDef.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +1 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/testing.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/inspector/viewer/co-plain-text-view.tsx +1 -5
- package/src/inspector/viewer/co-stream-view.tsx +1 -1
- package/src/inspector/viewer/role-display.tsx +4 -1
- package/src/{browser-media-images/index.test.browser.ts → media/create-image.test.ts} +146 -24
- package/src/media/create-image.ts +180 -0
- package/src/media/index.browser.ts +150 -0
- package/src/media/index.native.ts +153 -0
- package/src/media/index.ts +61 -0
- package/src/media/utils.test.ts +327 -0
- package/src/media/utils.ts +202 -0
- package/src/react/index.ts +1 -2
- package/src/react/media/image.tsx +210 -0
- package/src/react/ssr.ts +1 -3
- package/src/react/tests/media/image.test.tsx +588 -0
- package/src/react/tests/testUtils.tsx +2 -10
- package/src/react-core/auth/PassphraseAuth.tsx +1 -5
- package/src/react-core/tests/testUtils.tsx +2 -10
- package/src/react-native-core/index.ts +1 -1
- package/src/react-native-core/media/image.tsx +159 -0
- package/src/svelte/index.ts +1 -0
- package/src/svelte/media/image.svelte +131 -0
- package/src/svelte/media/index.ts +1 -0
- package/src/svelte/tests/media/image.svelte.test.ts +583 -0
- package/src/svelte/tests/testUtils.ts +33 -0
- package/src/svelte/tests/types.d.ts +3 -0
- package/src/tools/coValues/coFeed.ts +40 -7
- package/src/tools/coValues/deepLoading.ts +46 -32
- package/src/tools/coValues/extensions/imageDef.ts +3 -49
- package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +6 -0
- package/src/tools/index.ts +0 -1
- package/src/tools/testing.ts +3 -1
- package/src/tools/tests/coList.test.ts +1 -1
- package/src/tools/tests/coMap.record.test-d.ts +105 -0
- package/src/tools/tests/coMap.record.test.ts +48 -2
- package/src/tools/tests/coMap.test-d.ts +50 -0
- package/src/tools/tests/coOptional.test.ts +3 -1
- package/tsconfig.json +1 -0
- package/tsup.config.ts +4 -9
- package/vitest.config.ts +14 -21
- package/dist/browser-media-images/index.d.ts +0 -9
- package/dist/browser-media-images/index.d.ts.map +0 -1
- package/dist/browser-media-images/index.js +0 -72
- package/dist/browser-media-images/index.js.map +0 -1
- package/dist/browser-media-images/index.test.browser.d.ts +0 -2
- package/dist/browser-media-images/index.test.browser.d.ts.map +0 -1
- package/dist/chunk-H3BIFFQG.js.map +0 -1
- package/dist/react/media.d.ts +0 -24
- package/dist/react/media.d.ts.map +0 -1
- package/dist/react-native-core/media.d.ts +0 -24
- package/dist/react-native-core/media.d.ts.map +0 -1
- package/dist/react-native-media-images/index.d.ts +0 -7
- package/dist/react-native-media-images/index.d.ts.map +0 -1
- package/dist/react-native-media-images/index.js +0 -177
- package/dist/react-native-media-images/index.js.map +0 -1
- package/dist/tools/tests/imageDef.test.d.ts +0 -2
- package/dist/tools/tests/imageDef.test.d.ts.map +0 -1
- package/src/browser-media-images/index.ts +0 -131
- package/src/react/media.tsx +0 -74
- package/src/react/scratch.tsx +0 -50
- package/src/react-native-core/media.tsx +0 -79
- package/src/react-native-media-images/index.ts +0 -238
- package/src/tools/tests/imageDef.test.ts +0 -278
@@ -51,6 +51,12 @@ export type Resolved<T, R extends RefsToResolve<T> | undefined = true> = DeeplyL
|
|
51
51
|
type onErrorNullEnabled<Depth> = Depth extends {
|
52
52
|
$onError: null;
|
53
53
|
} ? null : never;
|
54
|
+
type CoMapLikeLoaded<V extends object, Depth, DepthLimit extends number, CurrentDepth extends number[]> = {
|
55
|
+
-readonly [Key in keyof Depth]-?: Key extends CoKeys<V> ? NonNullable<V[Key]> extends CoValue ? DeeplyLoaded<NonNullable<V[Key]>, Depth[Key], DepthLimit, [
|
56
|
+
0,
|
57
|
+
...CurrentDepth
|
58
|
+
]> | (undefined extends V[Key] ? undefined : never) | onErrorNullEnabled<Depth[Key]> : never : never;
|
59
|
+
} & V;
|
54
60
|
export type DeeplyLoaded<V, Depth, DepthLimit extends number = 10, CurrentDepth extends number[] = []> = DepthLimit extends CurrentDepth["length"] ? V : Depth extends boolean | undefined ? V : [
|
55
61
|
V
|
56
62
|
] extends [Array<infer Item>] ? NotNull<Item> extends CoValue ? Depth extends {
|
@@ -63,21 +69,15 @@ export type DeeplyLoaded<V, Depth, DepthLimit extends number = 10, CurrentDepth
|
|
63
69
|
V
|
64
70
|
] extends [{
|
65
71
|
_type: "CoMap" | "Group" | "Account";
|
66
|
-
}] ? ItemsSym extends keyof V ? Depth extends {
|
72
|
+
}] ? keyof Depth extends never ? V : ItemsSym extends keyof V ? Depth extends {
|
67
73
|
$each: infer ItemDepth;
|
68
|
-
} ?
|
69
|
-
{
|
74
|
+
} ? {
|
70
75
|
[key: string]: DeeplyLoaded<NonNullable<V[ItemsSym]>, ItemDepth, DepthLimit, [
|
71
76
|
0,
|
72
77
|
...CurrentDepth
|
73
78
|
]> | onErrorNullEnabled<Depth["$each"]>;
|
74
|
-
} & V :
|
75
|
-
{
|
76
|
-
-readonly [Key in keyof Depth]-?: Key extends CoKeys<V> ? NonNullable<V[Key]> extends CoValue ? DeeplyLoaded<NonNullable<V[Key]>, Depth[Key], DepthLimit, [
|
77
|
-
0,
|
78
|
-
...CurrentDepth
|
79
|
-
]> | (undefined extends V[Key] ? undefined : never) | onErrorNullEnabled<Depth[Key]> : never : never;
|
80
|
-
} & V : [V] extends [
|
79
|
+
} & V : string extends keyof Depth ? // if at least one key is `string`, then we treat the resolve as it was empty
|
80
|
+
DeeplyLoaded<V, {}, DepthLimit, [0, ...CurrentDepth]> & V : CoMapLikeLoaded<V, Depth, DepthLimit, CurrentDepth> : CoMapLikeLoaded<V, Depth, DepthLimit, CurrentDepth> : [V] extends [
|
81
81
|
{
|
82
82
|
_type: "CoStream";
|
83
83
|
byMe: CoFeedEntry<infer Item> | undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/deepLoading.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/deepLoading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAE1C;;;;;GAKG;AACH,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CACxE,CAAC,EAAE,CAAC,KACD,IAAI,GACL,KAAK,GACL,IAAI,CAAC;AAET,MAAM,MAAM,aAAa,CACvB,CAAC,EACD,UAAU,SAAS,MAAM,GAAG,EAAE,EAC9B,YAAY,SAAS,MAAM,EAAE,GAAG,EAAE,IAEhC,OAAO,GACP,CAAC,UAAU,SAAS,YAAY,CAAC,QAAQ,CAAC,GAEtC,GAAG,GACH,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAClC,IAAI,GAEJ,CAAC,SAAS,KAAK,CAAC,MAAM,IAAI,CAAC,GAErB;IACE,KAAK,EAAE,aAAa,CAClB,OAAO,CAAC,IAAI,CAAC,EACb,UAAU,EACV;QAAC,CAAC;QAAE,GAAG,YAAY;KAAC,CACrB,CAAC;IACF,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB,GACD,OAAO,GAEX,CAAC,SAAS;IAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;CAAE,GAE5C,CAAC;KACE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,GACpD,GAAG,GACH,KAAK,CAAC,CAAC,EAAE,aAAa,CACxB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACnB,UAAU,EACV;QAAC,CAAC;QAAE,GAAG,YAAY;KAAC,CACrB;CACF,GAAG;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,GACxB,CAAC,QAAQ,SAAS,MAAM,CAAC,GACrB;IACE,KAAK,EAAE,aAAa,CAClB,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EACxB,UAAU,EACV;QAAC,CAAC;QAAE,GAAG,YAAY;KAAC,CACrB,CAAC;IACF,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB,GACD,KAAK,CAAC,GACV,OAAO,GACX,CAAC,SAAS;IACN,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3C,GAEG;IACE,KAAK,EAAE,aAAa,CAClB,OAAO,CAAC,IAAI,CAAC,EACb,UAAU,EACV;QAAC,CAAC;QAAE,GAAG,YAAY;KAAC,CACrB,CAAC;IACF,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB,GACD,OAAO,GACX,OAAO,CAAC,CAAC;AAEzB,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAC9D,aAAa,CAAC,CAAC,CAAC,GAChB,CAAC,CAAC;AAEN,MAAM,MAAM,QAAQ,CAClB,CAAC,EACD,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,IAC3C,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE/B,KAAK,kBAAkB,CAAC,KAAK,IAAI,KAAK,SAAS;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAC7D,IAAI,GACJ,KAAK,CAAC;AAEV,KAAK,eAAe,CAClB,CAAC,SAAS,MAAM,EAChB,KAAK,EACL,UAAU,SAAS,MAAM,EACzB,YAAY,SAAS,MAAM,EAAE,IAC3B;IACF,CAAC,UAAU,GAAG,IAAI,MAAM,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC,GACnD,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,GAE7B,YAAY,CACV,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACnB,KAAK,CAAC,GAAG,CAAC,EACV,UAAU,EACV;QAAC,CAAC;QAAE,GAAG,YAAY;KAAC,CACrB,GACD,CAAC,SAAS,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,GAC9C,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAClC,KAAK,GACP,KAAK;CACV,GAAG,CAAC,CAAC;AAEN,MAAM,MAAM,YAAY,CACtB,CAAC,EACD,KAAK,EACL,UAAU,SAAS,MAAM,GAAG,EAAE,EAC9B,YAAY,SAAS,MAAM,EAAE,GAAG,EAAE,IAChC,UAAU,SAAS,YAAY,CAAC,QAAQ,CAAC,GACzC,CAAC,GACD,KAAK,SAAS,OAAO,GAAG,SAAS,GAC/B,CAAC,GAED;IAAC,CAAC;CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,GAC3B,KAAK,SAAS;IAAE,KAAK,EAAE,MAAM,SAAS,CAAA;CAAE,GAEtC,AADA,uBAAuB;AACvB,CACI,CAAC,OAAO,CAAC,IAAI,CAAC,GACZ,YAAY,CACV,OAAO,CAAC,IAAI,CAAC,EACb,SAAS,EACT,UAAU,EACV;IAAC,CAAC;IAAE,GAAG,YAAY;CAAC,CACrB,CAAC,GACJ,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CACrC,EAAE,GACD,CAAC,GACH,KAAK,GACP,CAAC,GAEH;IAAC,CAAC;CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;CAAE,CAAC,GAEpD,MAAM,KAAK,SAAS,KAAK,GACvB,CAAC,GAED,QAAQ,SAAS,MAAM,CAAC,GAEtB,KAAK,SAAS;IAAE,KAAK,EAAE,MAAM,SAAS,CAAA;CAAE,GACtC;IACE,CAAC,GAAG,EAAE,MAAM,GACR,YAAY,CACV,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EACxB,SAAS,EACT,UAAU,EACV;QAAC,CAAC;QAAE,GAAG,YAAY;KAAC,CACrB,GACD,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CACxC,GAAG,CAAC,GAEL,MAAM,SAAS,MAAM,KAAK,GAExB,AADA,6EAA6E;AAC7E,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,GAEzD,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,GAEvD,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,GACvD,CAAC,CAAC,CAAC,SAAS;IACR;QACE,KAAK,EAAE,UAAU,CAAC;QAClB,IAAI,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KAC3C;CACF,GAED,AADA,yBAAyB;AACzB;IACE,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IAC5C,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,SAAS,GAAG;YAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;SAAE,CAAC;KAC5C,CAAC;CACH,GAAG;IAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAA;CAAE,GAAG,CAAC,GACxD,CAAC,CAAC,CAAC,SAAS;IACR;QACE,KAAK,EAAE,gBAAgB,CAAC;KACzB;CACF,GACD,CAAC,GACD,CAAC,CAAC,CAAC,SAAS;IACR;QACE,KAAK,EAAE,aAAa,CAAC;KACtB;CACF,GACD,CAAC,GACD,KAAK,CAAC"}
|
@@ -2,16 +2,10 @@ import { z } from "../../implementation/zodSchema/zodReExport.js";
|
|
2
2
|
import { Loaded } from "../../internal.js";
|
3
3
|
/** @category Media */
|
4
4
|
export declare const ImageDefinition: import("../../internal.js").CoMapSchema<{
|
5
|
+
original: import("../../internal.js").FileStreamSchema;
|
5
6
|
originalSize: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
6
7
|
placeholderDataURL: z.ZodOptional<z.ZodString>;
|
7
|
-
|
8
|
-
|
9
|
-
maxWidth?: number;
|
10
|
-
targetWidth?: number;
|
11
|
-
}): {
|
12
|
-
res: `${number}x${number}`;
|
13
|
-
stream: import("../coFeed.js").BinaryCoStream;
|
14
|
-
} | undefined;
|
15
|
-
};
|
8
|
+
progressive: z.ZodBoolean;
|
9
|
+
}, import("../../internal.js").FileStreamSchema, import("../account.js").Account | import("../group.js").Group>;
|
16
10
|
export type ImageDefinition = Loaded<typeof ImageDefinition>;
|
17
11
|
//# sourceMappingURL=imageDef.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"imageDef.d.ts","sourceRoot":"","sources":["../../../../src/tools/coValues/extensions/imageDef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,+CAA+C,CAAC;AAClE,OAAO,EAAE,MAAM,EAAqC,MAAM,mBAAmB,CAAC;
|
1
|
+
{"version":3,"file":"imageDef.d.ts","sourceRoot":"","sources":["../../../../src/tools/coValues/extensions/imageDef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,+CAA+C,CAAC;AAClE,OAAO,EAAE,MAAM,EAAqC,MAAM,mBAAmB,CAAC;AAU9E,sBAAsB;AACtB,eAAO,MAAM,eAAe;;;;;+GAAsB,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
@@ -17,6 +17,7 @@ export declare class FileStreamSchema implements CoreFileStreamSchema {
|
|
17
17
|
owner?: Group | Account;
|
18
18
|
onProgress?: (progress: number) => void;
|
19
19
|
} | Account | Group): Promise<FileStream>;
|
20
|
+
createFromArrayBuffer(...args: Parameters<typeof FileStream.createFromArrayBuffer>): Promise<FileStream>;
|
20
21
|
loadAsBlob(id: string, options?: {
|
21
22
|
allowUnfinished?: boolean;
|
22
23
|
loadAs?: Account | AnonymousJazzAgent;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FileStreamSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,KAAK,EAEN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAKjE;AAED,qBAAa,gBAAiB,YAAW,oBAAoB;IAI/C,OAAO,CAAC,YAAY;IAHhC,QAAQ,CAAC,aAAa,OAAiB;IACvC,QAAQ,CAAC,OAAO,eAAyB;gBAErB,YAAY,EAAE,OAAO,UAAU;IAEnD,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU;IAI3E,cAAc,CACZ,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,CAAC,EACJ;QACE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;KACzC,GACD,OAAO,GACP,KAAK,GACR,OAAO,CAAC,UAAU,CAAC;IAItB,UAAU,CACR,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;KACvC,GACA,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAI5B,IAAI,CACF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,GAChD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI7B,SAAS,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,EACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IACb,SAAS,CACP,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IAMb,eAAe,IAAI,OAAO,UAAU;IAIpC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;CAGnC"}
|
1
|
+
{"version":3,"file":"FileStreamSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,KAAK,EAEN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAKjE;AAED,qBAAa,gBAAiB,YAAW,oBAAoB;IAI/C,OAAO,CAAC,YAAY;IAHhC,QAAQ,CAAC,aAAa,OAAiB;IACvC,QAAQ,CAAC,OAAO,eAAyB;gBAErB,YAAY,EAAE,OAAO,UAAU;IAEnD,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU;IAI3E,cAAc,CACZ,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,CAAC,EACJ;QACE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;KACzC,GACD,OAAO,GACP,KAAK,GACR,OAAO,CAAC,UAAU,CAAC;IAItB,qBAAqB,CACnB,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,qBAAqB,CAAC;IAK9D,UAAU,CACR,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;KACvC,GACA,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAI5B,IAAI,CACF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,GAChD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI7B,SAAS,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,EACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IACb,SAAS,CACP,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IAMb,eAAe,IAAI,OAAO,UAAU;IAIpC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;CAGnC"}
|
package/dist/tools/index.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EACL,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,MAAM,EACN,QAAQ,GACT,MAAM,QAAQ,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,kBAAkB,EAEvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAM5B,MAAM,eAAe,CAAC;AAOvB,qBAAa,YAAa,SAAQ,YAAY;WAC/B,MAAM;CAoBpB;AAED,wBAAgB,gCAAgC,0BAiC/C;AAKD,wBAAsB,qBAAqB,CACzC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,OAAO,CAAC,EAAE;IACV,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAuD/B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAEhD;AAED,wBAAsB,mBAAmB;;GASxC;AAED,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IACzD,2BAA2B,CAAC,GAAG,CAAC,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,GAAG,SAAS,OAAO,CACnB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,OAAO,EAC3C,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EAC7C,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IAS1C,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,OAAO,EACpC,OAAO,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IA0C1C,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,OAAO,EAClC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EACxC,KAAK,GAAE,2BAA2B,CAAC,GAAG,CAAM;IAmBxC,aAAa,CACjB,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,EACvC,SAAS,CAAC,EAAE,2BAA2B;;
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,kBAAkB,EAEvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAM5B,MAAM,eAAe,CAAC;AAOvB,qBAAa,YAAa,SAAQ,YAAY;WAC/B,MAAM;CAoBpB;AAED,wBAAgB,gCAAgC,0BAiC/C;AAKD,wBAAsB,qBAAqB,CACzC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,OAAO,CAAC,EAAE;IACV,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAuD/B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAEhD;AAED,wBAAsB,mBAAmB;;GASxC;AAED,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IACzD,2BAA2B,CAAC,GAAG,CAAC,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,GAAG,SAAS,OAAO,CACnB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,OAAO,EAC3C,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EAC7C,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IAS1C,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,OAAO,EACpC,OAAO,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IA0C1C,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,OAAO,EAClC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EACxC,KAAK,GAAE,2BAA2B,CAAC,GAAG,CAAM;IAmBxC,aAAa,CACjB,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,EACvC,SAAS,CAAC,EAAE,2BAA2B;;uBAuEy7K,cAAc;;;;;;;;CAzCj/K;AAED,wBAAsB,YAAY,CAChC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,KAAK,GAAE,QAAQ,GAAG,QAAmB,EACrC,KAAK,GAAE,QAAQ,GAAG,QAAmB,iBAYtC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,UAAkB,GACnB,GAAE;IACD,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,oBAgBL"}
|
package/package.json
CHANGED
@@ -24,6 +24,12 @@
|
|
24
24
|
"types": "./dist/browser-media-images/index.d.ts",
|
25
25
|
"default": "./dist/browser-media-images/index.js"
|
26
26
|
},
|
27
|
+
"./media": {
|
28
|
+
"@jazz-tools/source": "./src/media/index.ts",
|
29
|
+
"types": "./dist/media/index.d.ts",
|
30
|
+
"react-native": "./dist/media/index.native.js",
|
31
|
+
"default": "./dist/media/index.browser.js"
|
32
|
+
},
|
27
33
|
"./expo": {
|
28
34
|
"@jazz-tools/source": "./src/expo/index.ts",
|
29
35
|
"types": "./dist/expo/index.d.ts",
|
@@ -109,11 +115,6 @@
|
|
109
115
|
"types": "./dist/react-native-core/testing.d.ts",
|
110
116
|
"default": "./dist/react-native-core/testing.js"
|
111
117
|
},
|
112
|
-
"./react-native-media-images": {
|
113
|
-
"@jazz-tools/source": "./src/react-native-media-images/index.ts",
|
114
|
-
"types": "./dist/react-native-media-images/index.d.ts",
|
115
|
-
"default": "./dist/react-native-media-images/index.js"
|
116
|
-
},
|
117
118
|
"./svelte": {
|
118
119
|
"svelte": "./dist/svelte/index.js",
|
119
120
|
"@jazz-tools/source": "./src/svelte/index.ts",
|
@@ -139,18 +140,15 @@
|
|
139
140
|
},
|
140
141
|
"type": "module",
|
141
142
|
"license": "MIT",
|
142
|
-
"version": "0.
|
143
|
+
"version": "0.17.0",
|
143
144
|
"dependencies": {
|
144
145
|
"@manuscripts/prosemirror-recreate-steps": "^0.1.4",
|
145
146
|
"@scure/base": "1.2.1",
|
146
147
|
"@scure/bip39": "^1.3.0",
|
147
148
|
"@tiptap/core": "^2.12.0",
|
148
|
-
"@types/image-blob-reduce": "^4.1.1",
|
149
149
|
"clsx": "^2.0.0",
|
150
150
|
"fast-myers-diff": "^3.2.0",
|
151
151
|
"goober": "^2.1.16",
|
152
|
-
"image-blob-reduce": "^4.1.0",
|
153
|
-
"pica": "^9.0.1",
|
154
152
|
"prosemirror-example-setup": "^1.2.2",
|
155
153
|
"prosemirror-menu": "^1.2.4",
|
156
154
|
"prosemirror-model": "^1.21.1",
|
@@ -158,16 +156,18 @@
|
|
158
156
|
"prosemirror-state": "^1.4.3",
|
159
157
|
"prosemirror-transform": "^1.9.0",
|
160
158
|
"zod": "3.25.76",
|
161
|
-
"cojson": "0.
|
162
|
-
"cojson-
|
163
|
-
"cojson-
|
159
|
+
"cojson": "0.17.0",
|
160
|
+
"cojson-transport-ws": "0.17.0",
|
161
|
+
"cojson-storage-indexeddb": "0.17.0"
|
164
162
|
},
|
165
163
|
"devDependencies": {
|
166
164
|
"@scure/bip39": "^1.3.0",
|
167
165
|
"@sveltejs/package": "^2.0.0",
|
166
|
+
"@sveltejs/vite-plugin-svelte": "^6.1.0",
|
168
167
|
"@testing-library/dom": "^10.4.0",
|
169
168
|
"@testing-library/jest-dom": "^6.6.3",
|
170
169
|
"@testing-library/react": "16.2.0",
|
170
|
+
"@testing-library/svelte": "^5.2.6",
|
171
171
|
"@types/react": "19.1.0",
|
172
172
|
"@types/react-dom": "19.1.0",
|
173
173
|
"@vitest/browser": "^3.2.4",
|
@@ -1,11 +1,7 @@
|
|
1
1
|
import { JsonObject } from "cojson";
|
2
2
|
import { RawDataCard } from "./raw-data-card.js";
|
3
3
|
|
4
|
-
export function CoPlainTextView({
|
5
|
-
data,
|
6
|
-
}: {
|
7
|
-
data: JsonObject;
|
8
|
-
}) {
|
4
|
+
export function CoPlainTextView({ data }: { data: JsonObject }) {
|
9
5
|
if (!data) return;
|
10
6
|
|
11
7
|
return (
|
@@ -321,7 +321,7 @@ function RenderCoStream({
|
|
321
321
|
{/* @ts-expect-error - TODO: fix types */}
|
322
322
|
{value.items[streamPerUser[idx]]?.map(
|
323
323
|
(item: CoStreamItem<JsonValue>) => (
|
324
|
-
<div>
|
324
|
+
<div key={item.tx.txIndex + item.tx.sessionID}>
|
325
325
|
{new Date(item.madeAt).toLocaleString()}{" "}
|
326
326
|
{JSON.stringify(item.value)}
|
327
327
|
</div>
|
@@ -5,7 +5,10 @@ import { useResolvedCoValue } from "./use-resolve-covalue.js";
|
|
5
5
|
export function RoleDisplay({
|
6
6
|
node,
|
7
7
|
value,
|
8
|
-
}: {
|
8
|
+
}: {
|
9
|
+
node: LocalNode;
|
10
|
+
value: RawCoValue;
|
11
|
+
}) {
|
9
12
|
const { snapshot } = useResolvedCoValue(value.group.id, node);
|
10
13
|
|
11
14
|
if (!snapshot || snapshot === "unavailable") {
|
@@ -1,48 +1,157 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import { FileStream } from "jazz-tools";
|
3
2
|
import { createJazzTestAccount } from "jazz-tools/testing";
|
4
|
-
import { describe, expect, it } from "vitest";
|
5
|
-
import {
|
3
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
4
|
+
import { createImageFactory } from "./create-image.js";
|
5
|
+
|
6
|
+
describe("createImage", async () => {
|
7
|
+
const account = await createJazzTestAccount();
|
8
|
+
|
9
|
+
const getImageSize = vi.fn();
|
10
|
+
const getPlaceholderBase64 = vi.fn();
|
11
|
+
const createFileStreamFromSource = vi
|
12
|
+
.fn()
|
13
|
+
.mockResolvedValue(FileStream.create({ owner: account._owner }));
|
14
|
+
const resize = vi.fn();
|
15
|
+
|
16
|
+
const createImage = createImageFactory({
|
17
|
+
getImageSize,
|
18
|
+
getPlaceholderBase64,
|
19
|
+
createFileStreamFromSource,
|
20
|
+
resize,
|
21
|
+
});
|
6
22
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
23
|
+
afterEach(() => {
|
24
|
+
vi.clearAllMocks();
|
25
|
+
});
|
26
|
+
|
27
|
+
it("should create a single original image if all settings are off", async () => {
|
11
28
|
const imageBlob = new Blob(
|
12
|
-
[Uint8Array.from(
|
29
|
+
[Uint8Array.from(OnePixel, (c) => c.charCodeAt(0))],
|
13
30
|
{ type: "image/png" },
|
14
31
|
);
|
15
32
|
|
16
|
-
|
33
|
+
getImageSize.mockResolvedValue({ width: 1, height: 1 });
|
34
|
+
|
35
|
+
const image = await createImage(imageBlob, {
|
36
|
+
owner: account._owner,
|
37
|
+
placeholder: false,
|
38
|
+
progressive: false,
|
39
|
+
});
|
17
40
|
|
18
|
-
const image = await createImage(imageBlob, { owner: account._owner });
|
19
41
|
expect(image).toBeDefined();
|
20
42
|
|
21
43
|
expect(image.originalSize).toEqual([1, 1]);
|
22
|
-
expect(image.placeholderDataURL).toBeDefined();
|
23
|
-
|
44
|
+
expect(image.placeholderDataURL).not.toBeDefined();
|
45
|
+
expect(image.progressive).toBe(false);
|
46
|
+
expect(image.original).toBeDefined();
|
24
47
|
expect(image[`1x1`]).toBeDefined();
|
25
|
-
expect(image[`1x1`]
|
26
|
-
expect(image["256x256"]).not.toBeDefined();
|
27
|
-
expect(image["1024x1024"]).not.toBeDefined();
|
48
|
+
expect(image[`1x1`]).toStrictEqual(image.original);
|
28
49
|
});
|
29
50
|
|
30
|
-
it("should create
|
51
|
+
it("should create the image with original and placeholder", async () => {
|
52
|
+
const imageBlob = new Blob(
|
53
|
+
[Uint8Array.from(OnePixel, (c) => c.charCodeAt(0))],
|
54
|
+
{ type: "image/png" },
|
55
|
+
);
|
56
|
+
|
57
|
+
getImageSize.mockResolvedValue({ width: 1, height: 1 });
|
58
|
+
getPlaceholderBase64.mockResolvedValue(
|
59
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
|
60
|
+
);
|
61
|
+
|
62
|
+
const image = await createImage(imageBlob, {
|
63
|
+
owner: account._owner,
|
64
|
+
placeholder: "blur",
|
65
|
+
progressive: false,
|
66
|
+
});
|
67
|
+
|
68
|
+
expect(image).toBeDefined();
|
69
|
+
|
70
|
+
expect(image.originalSize).toEqual([1, 1]);
|
71
|
+
expect(image.placeholderDataURL).toBeDefined();
|
72
|
+
expect(image.progressive).toBe(false);
|
73
|
+
expect(image.original).toBeDefined();
|
74
|
+
});
|
75
|
+
|
76
|
+
it("should create a resized image if maxSize is set", async () => {
|
31
77
|
const imageBlob = new Blob(
|
32
78
|
[Uint8Array.from(White1920, (c) => c.charCodeAt(0))],
|
33
79
|
{ type: "image/png" },
|
34
80
|
);
|
35
81
|
|
36
|
-
|
82
|
+
getImageSize.mockResolvedValue({ width: 1920, height: 400 });
|
83
|
+
resize.mockResolvedValue(new Blob([White1920], { type: "image/png" }));
|
84
|
+
|
85
|
+
const image = await createImage(imageBlob, {
|
86
|
+
owner: account._owner,
|
87
|
+
placeholder: false,
|
88
|
+
progressive: false,
|
89
|
+
maxSize: 256,
|
90
|
+
});
|
37
91
|
|
38
|
-
const image = await createImage(imageBlob, { owner: account._owner });
|
39
92
|
expect(image).toBeDefined();
|
40
93
|
|
94
|
+
expect(image.originalSize).toEqual([256, 53]);
|
95
|
+
expect(image.placeholderDataURL).not.toBeDefined();
|
96
|
+
expect(image.progressive).toBe(false);
|
97
|
+
expect(image.original).toBeDefined();
|
98
|
+
expect(image[`256x53`]).toStrictEqual(image.original);
|
99
|
+
|
100
|
+
expect(resize).toHaveBeenCalledWith(imageBlob, 256, 53);
|
101
|
+
});
|
102
|
+
|
103
|
+
it("should not resize the original image if maxSize is higher than the original size", async () => {
|
104
|
+
const imageBlob = new Blob(
|
105
|
+
[Uint8Array.from(OnePixel, (c) => c.charCodeAt(0))],
|
106
|
+
{ type: "image/png" },
|
107
|
+
);
|
108
|
+
|
109
|
+
getImageSize.mockResolvedValue({ width: 1, height: 1 });
|
110
|
+
|
111
|
+
const image = await createImage(imageBlob, {
|
112
|
+
owner: account._owner,
|
113
|
+
placeholder: false,
|
114
|
+
progressive: false,
|
115
|
+
maxSize: 256,
|
116
|
+
});
|
117
|
+
|
118
|
+
expect(image).toBeDefined();
|
119
|
+
|
120
|
+
expect(image.originalSize).toEqual([1, 1]);
|
121
|
+
expect(image.placeholderDataURL).not.toBeDefined();
|
122
|
+
expect(image.progressive).toBe(false);
|
123
|
+
expect(image.original).toBeDefined();
|
124
|
+
expect(image[`1x1`]).toStrictEqual(image.original);
|
125
|
+
|
126
|
+
expect(resize).not.toHaveBeenCalled();
|
127
|
+
});
|
128
|
+
|
129
|
+
it("should create an image with intermediate sizes for progressive loading", async () => {
|
130
|
+
const imageBlob = new Blob(
|
131
|
+
[Uint8Array.from(White1920, (c) => c.charCodeAt(0))],
|
132
|
+
{ type: "image/png" },
|
133
|
+
);
|
134
|
+
|
135
|
+
getImageSize.mockResolvedValue({ width: 1920, height: 400 });
|
136
|
+
resize.mockResolvedValue(new Blob([White1920], { type: "image/png" }));
|
137
|
+
|
138
|
+
const image = await createImage(imageBlob, {
|
139
|
+
owner: account._owner,
|
140
|
+
progressive: true,
|
141
|
+
placeholder: false,
|
142
|
+
});
|
143
|
+
|
144
|
+
expect(image).toBeDefined();
|
41
145
|
expect(image.originalSize).toEqual([1920, 400]);
|
42
|
-
expect(image.placeholderDataURL).toBeDefined();
|
146
|
+
expect(image.placeholderDataURL).not.toBeDefined();
|
147
|
+
|
43
148
|
expect(image[`256x53`]).toBeDefined();
|
44
149
|
expect(image[`1024x213`]).toBeDefined();
|
45
|
-
expect(image[`
|
150
|
+
expect(image[`2048x427`]).not.toBeDefined();
|
151
|
+
|
152
|
+
expect(resize).toHaveBeenCalledWith(imageBlob, 256, 53);
|
153
|
+
expect(resize).toHaveBeenCalledWith(imageBlob, 1024, 213);
|
154
|
+
expect(resize).not.toHaveBeenCalledWith(imageBlob, 2048, 427);
|
46
155
|
});
|
47
156
|
|
48
157
|
it("should lose the original size and create image based on maxSize", async () => {
|
@@ -51,22 +160,35 @@ describe("createImage", () => {
|
|
51
160
|
{ type: "image/png" },
|
52
161
|
);
|
53
162
|
|
54
|
-
|
163
|
+
getImageSize.mockResolvedValue({ width: 1920, height: 400 });
|
164
|
+
resize.mockResolvedValue(new Blob([White1920], { type: "image/png" }));
|
55
165
|
|
56
166
|
const image = await createImage(imageBlob, {
|
57
167
|
owner: account._owner,
|
58
168
|
maxSize: 256,
|
169
|
+
placeholder: false,
|
170
|
+
progressive: true,
|
59
171
|
});
|
172
|
+
|
60
173
|
expect(image).toBeDefined();
|
61
174
|
|
62
175
|
expect(image.originalSize).toEqual([256, 53]);
|
63
|
-
expect(image.placeholderDataURL).toBeDefined();
|
176
|
+
expect(image.placeholderDataURL).not.toBeDefined();
|
64
177
|
expect(image[`256x53`]).toBeDefined();
|
65
178
|
expect(image[`1024x213`]).not.toBeDefined();
|
66
|
-
expect(image[`
|
179
|
+
expect(image[`2048x427`]).not.toBeDefined();
|
180
|
+
|
181
|
+
expect(resize).toHaveBeenCalledWith(imageBlob, 256, 53);
|
182
|
+
expect(resize).not.toHaveBeenCalledWith(imageBlob, 1024, 213);
|
183
|
+
expect(resize).not.toHaveBeenCalledWith(imageBlob, 2048, 427);
|
67
184
|
});
|
68
185
|
});
|
69
186
|
|
187
|
+
// 1x1 png
|
188
|
+
const OnePixel = atob(
|
189
|
+
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
|
190
|
+
);
|
191
|
+
|
70
192
|
// Image 1920x400
|
71
193
|
const White1920 = atob(
|
72
194
|
"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAGQB4ADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAP/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//2Q==",
|
@@ -0,0 +1,180 @@
|
|
1
|
+
import {
|
2
|
+
Account,
|
3
|
+
FileStream,
|
4
|
+
Group,
|
5
|
+
ImageDefinition,
|
6
|
+
type Loaded,
|
7
|
+
} from "jazz-tools";
|
8
|
+
|
9
|
+
export type SourceType = Blob | File | string;
|
10
|
+
|
11
|
+
export type CreateImageOptions = {
|
12
|
+
/** The owner of the image. Can be either a Group or Account. If not specified, the current user will be the owner. */
|
13
|
+
owner?: Group | Account;
|
14
|
+
/**
|
15
|
+
* Controls placeholder generation for the image.
|
16
|
+
* - `"blur"`: Generates a blurred placeholder image (default)
|
17
|
+
* - `false`: No placeholder is generated
|
18
|
+
* @default "blur"
|
19
|
+
*/
|
20
|
+
placeholder?: "blur" | false;
|
21
|
+
/**
|
22
|
+
* Maximum size constraint for the image. The image will be resized to fit within this size while maintaining aspect ratio.
|
23
|
+
* If the image is smaller than maxSize in both dimensions, no resizing occurs.
|
24
|
+
* @example 1024 // Resizes image to fit within 1024px in the largest dimension
|
25
|
+
*/
|
26
|
+
maxSize?: number; // | [number, number];
|
27
|
+
/**
|
28
|
+
* The progressive loading pattern is a technique that allows images to load incrementally, starting with a small version and gradually replacing it with a larger version as it becomes available.
|
29
|
+
* This is useful for improving the user experience by showing a placeholder while the image is loading.
|
30
|
+
*
|
31
|
+
* Passing progressive: true to createImage() will create internal smaller versions of the image for future uses.
|
32
|
+
*
|
33
|
+
* @default false
|
34
|
+
*/
|
35
|
+
progressive?: boolean;
|
36
|
+
};
|
37
|
+
|
38
|
+
export type CreateImageImpl = {
|
39
|
+
createFileStreamFromSource: (
|
40
|
+
imageBlobOrFile: SourceType,
|
41
|
+
owner?: Group | Account,
|
42
|
+
) => Promise<FileStream>;
|
43
|
+
getImageSize: (
|
44
|
+
imageBlobOrFile: SourceType,
|
45
|
+
) => Promise<{ width: number; height: number }>;
|
46
|
+
getPlaceholderBase64: (imageBlobOrFile: SourceType) => Promise<string>;
|
47
|
+
resize: (
|
48
|
+
imageBlobOrFile: SourceType,
|
49
|
+
width: number,
|
50
|
+
height: number,
|
51
|
+
) => Promise<Blob | string>;
|
52
|
+
};
|
53
|
+
|
54
|
+
export function createImageFactory(impl: CreateImageImpl) {
|
55
|
+
return (source: SourceType, options: CreateImageOptions) =>
|
56
|
+
createImage(source, options, impl);
|
57
|
+
}
|
58
|
+
|
59
|
+
async function createImage(
|
60
|
+
imageBlobOrFile: SourceType,
|
61
|
+
options: CreateImageOptions,
|
62
|
+
impl: CreateImageImpl,
|
63
|
+
): Promise<Loaded<typeof ImageDefinition, { $each: true }>> {
|
64
|
+
// Get the original size of the image
|
65
|
+
const { width: originalWidth, height: originalHeight } =
|
66
|
+
await impl.getImageSize(imageBlobOrFile);
|
67
|
+
|
68
|
+
const def: {
|
69
|
+
originalSize: [number, number];
|
70
|
+
progressive: boolean;
|
71
|
+
placeholderDataURL: string | undefined;
|
72
|
+
original?: FileStream;
|
73
|
+
files: Record<string, FileStream>;
|
74
|
+
} = {
|
75
|
+
originalSize: [originalWidth, originalHeight],
|
76
|
+
progressive: false,
|
77
|
+
placeholderDataURL: undefined,
|
78
|
+
files: {},
|
79
|
+
};
|
80
|
+
|
81
|
+
// Placeholder
|
82
|
+
if (options?.placeholder === "blur") {
|
83
|
+
def.placeholderDataURL = await impl.getPlaceholderBase64(imageBlobOrFile);
|
84
|
+
}
|
85
|
+
|
86
|
+
/**
|
87
|
+
* Original
|
88
|
+
*
|
89
|
+
* Save the original image.
|
90
|
+
* If the maxSize is set, resize the image to the maxSize if needed
|
91
|
+
*/
|
92
|
+
if (options?.maxSize === undefined) {
|
93
|
+
def.original = await impl.createFileStreamFromSource(
|
94
|
+
imageBlobOrFile,
|
95
|
+
options?.owner,
|
96
|
+
);
|
97
|
+
def.files[`${originalWidth}x${originalHeight}`] = def.original;
|
98
|
+
} else if (
|
99
|
+
options?.maxSize >= originalWidth &&
|
100
|
+
options?.maxSize >= originalHeight
|
101
|
+
) {
|
102
|
+
// no resizes required, just return the original image
|
103
|
+
def.original = await impl.createFileStreamFromSource(
|
104
|
+
imageBlobOrFile,
|
105
|
+
options?.owner,
|
106
|
+
);
|
107
|
+
def.files[`${originalWidth}x${originalHeight}`] = def.original;
|
108
|
+
} else {
|
109
|
+
const { width, height } = getNewDimensions(
|
110
|
+
originalWidth,
|
111
|
+
originalHeight,
|
112
|
+
options.maxSize,
|
113
|
+
);
|
114
|
+
|
115
|
+
const blob = await impl.resize(imageBlobOrFile, width, height);
|
116
|
+
def.originalSize = [width, height];
|
117
|
+
def.original = await impl.createFileStreamFromSource(blob, options?.owner);
|
118
|
+
def.files[`${width}x${height}`] = def.original;
|
119
|
+
}
|
120
|
+
|
121
|
+
const imageCoValue = ImageDefinition.create(
|
122
|
+
{
|
123
|
+
originalSize: def.originalSize,
|
124
|
+
progressive: def.progressive,
|
125
|
+
placeholderDataURL: def.placeholderDataURL,
|
126
|
+
original: def.original,
|
127
|
+
...def.files,
|
128
|
+
},
|
129
|
+
options?.owner,
|
130
|
+
);
|
131
|
+
|
132
|
+
/**
|
133
|
+
* Progressive loading
|
134
|
+
*
|
135
|
+
* Save a set of resized images using three sizes: 256, 1024, 2048
|
136
|
+
*
|
137
|
+
* On the client side, the image will be loaded progressively, starting from the smallest size and increasing the size until the original size is reached.
|
138
|
+
*/
|
139
|
+
if (options?.progressive) {
|
140
|
+
imageCoValue.progressive = true;
|
141
|
+
|
142
|
+
const resizes = ([256, 1024, 2048] as const).filter(
|
143
|
+
(s) =>
|
144
|
+
s <
|
145
|
+
Math.max(imageCoValue.originalSize[0], imageCoValue.originalSize[1]),
|
146
|
+
);
|
147
|
+
|
148
|
+
for (const size of resizes) {
|
149
|
+
const { width, height } = getNewDimensions(
|
150
|
+
originalWidth,
|
151
|
+
originalHeight,
|
152
|
+
size,
|
153
|
+
);
|
154
|
+
|
155
|
+
const blob = await impl.resize(imageBlobOrFile, width, height);
|
156
|
+
imageCoValue[`${width}x${height}`] =
|
157
|
+
await impl.createFileStreamFromSource(blob, options?.owner);
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
return imageCoValue;
|
162
|
+
}
|
163
|
+
|
164
|
+
const getNewDimensions = (
|
165
|
+
originalWidth: number,
|
166
|
+
originalHeight: number,
|
167
|
+
maxSize: number,
|
168
|
+
) => {
|
169
|
+
if (originalWidth > originalHeight) {
|
170
|
+
return {
|
171
|
+
width: maxSize,
|
172
|
+
height: Math.round(maxSize * (originalHeight / originalWidth)),
|
173
|
+
};
|
174
|
+
}
|
175
|
+
|
176
|
+
return {
|
177
|
+
width: Math.round(maxSize * (originalWidth / originalHeight)),
|
178
|
+
height: maxSize,
|
179
|
+
};
|
180
|
+
};
|