@fideus-labs/ngff-zarr 0.2.6 → 0.2.7

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.
@@ -12,5 +12,7 @@ export * from "./schemas/multiscales.js";
12
12
  export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/validation.js";
13
13
  export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
14
14
  export { getMethodMetadata } from "./utils/method_metadata.js";
15
+ export { fromNgffZarr, type FromNgffZarrOptions, type MemoryStore, } from "./io/from_ngff_zarr-browser.js";
16
+ export { toNgffZarr, type ToNgffZarrOptions, } from "./io/to_ngff_zarr-browser.js";
15
17
  export * from "./process/to_multiscales-browser.js";
16
18
  //# sourceMappingURL=browser-mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-mod.d.ts","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AASA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"browser-mod.d.ts","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAOA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAK/D,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC;AAGtC,cAAc,qCAAqC,CAAC"}
@@ -1,12 +1,10 @@
1
1
  // SPDX-FileCopyrightText: Copyright (c) Fideus Labs LLC
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Browser-compatible module exports
4
- // This module excludes I/O functionality (from_ngff_zarr, to_ngff_zarr)
5
- // because those modules depend on Node.js/Deno-specific filesystem APIs
6
- // that are not available in browser environments.
4
+ // This module includes browser versions of fromNgffZarr and toNgffZarr.
7
5
  //
8
- // For browser use cases, the schemas, types, and validation utilities
9
- // are the most commonly needed functionality.
6
+ // The browser versions support MemoryStore (Map) and HTTP/HTTPS URLs (read-only),
7
+ // but not local file paths (which require Node.js/Deno filesystem APIs).
10
8
  export * from "./types/units.js";
11
9
  export * from "./types/methods.js";
12
10
  export * from "./types/array_interface.js";
@@ -21,6 +19,11 @@ export * from "./schemas/multiscales.js";
21
19
  export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/validation.js";
22
20
  export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
23
21
  export { getMethodMetadata } from "./utils/method_metadata.js";
22
+ // Browser-compatible I/O modules
23
+ // Note: Uses browser-specific versions that don't import @zarrita/storage
24
+ // (which contains Node.js-specific modules like node:fs, node:buffer, node:path)
25
+ export { fromNgffZarr, } from "./io/from_ngff_zarr-browser.js";
26
+ export { toNgffZarr, } from "./io/to_ngff_zarr-browser.js";
24
27
  // Browser-compatible processing modules
25
28
  export * from "./process/to_multiscales-browser.js";
26
29
  //# sourceMappingURL=browser-mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-mod.js","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,oCAAoC;AACpC,wEAAwE;AACxE,wEAAwE;AACxE,kDAAkD;AAClD,EAAE;AACF,sEAAsE;AACtE,8CAA8C;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,wCAAwC;AACxC,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"browser-mod.js","sourceRoot":"","sources":["../src/browser-mod.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,oCAAoC;AACpC,wEAAwE;AACxE,EAAE;AACF,kFAAkF;AAClF,yEAAyE;AACzE,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,iCAAiC;AACjC,0EAA0E;AAC1E,iFAAiF;AACjF,OAAO,EACL,YAAY,GAGb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,UAAU,GAEX,MAAM,8BAA8B,CAAC;AAEtC,wCAAwC;AACxC,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as zarr from "zarrita";
2
+ import { Multiscales } from "../types/multiscales.js";
3
+ export interface FromNgffZarrOptions {
4
+ validate?: boolean;
5
+ version?: "0.4" | "0.5";
6
+ }
7
+ export type MemoryStore = Map<string, Uint8Array>;
8
+ /**
9
+ * Browser-compatible version of fromNgffZarr.
10
+ * Supports HTTP/HTTPS URLs, MemoryStore (Map), and FetchStore.
11
+ * Does NOT support local file paths (use the full version in Node.js/Deno).
12
+ */
13
+ export declare function fromNgffZarr(store: string | MemoryStore | zarr.FetchStore, options?: FromNgffZarrOptions): Promise<Multiscales>;
14
+ //# sourceMappingURL=from_ngff_zarr-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from_ngff_zarr-browser.d.ts","sourceRoot":"","sources":["../../src/io/from_ngff_zarr-browser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAElD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,EAC7C,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,WAAW,CAAC,CAwMtB"}
@@ -0,0 +1,176 @@
1
+ // SPDX-FileCopyrightText: Copyright (c) Fideus Labs LLC
2
+ // SPDX-License-Identifier: MIT
3
+ // Browser-compatible version of from_ngff_zarr that doesn't import @zarrita/storage
4
+ // (which contains Node.js-specific modules like node:fs, node:buffer, node:path)
5
+ import * as zarr from "zarrita";
6
+ import { Multiscales } from "../types/multiscales.js";
7
+ import { NgffImage } from "../types/ngff_image.js";
8
+ import { MetadataSchema } from "../schemas/zarr_metadata.js";
9
+ /**
10
+ * Browser-compatible version of fromNgffZarr.
11
+ * Supports HTTP/HTTPS URLs, MemoryStore (Map), and FetchStore.
12
+ * Does NOT support local file paths (use the full version in Node.js/Deno).
13
+ */
14
+ export async function fromNgffZarr(store, options = {}) {
15
+ const validate = options.validate ?? false;
16
+ const version = options.version;
17
+ try {
18
+ // Determine the appropriate store type based on the path
19
+ let resolvedStore;
20
+ if (store instanceof Map || store instanceof zarr.FetchStore) {
21
+ resolvedStore = store;
22
+ }
23
+ else if (store.startsWith("http://") || store.startsWith("https://")) {
24
+ // Use FetchStore for HTTP/HTTPS URLs
25
+ resolvedStore = new zarr.FetchStore(store);
26
+ }
27
+ else {
28
+ // Local file paths are not supported in browser environments
29
+ throw new Error("Local file paths are not supported in browser environments. Use HTTP/HTTPS URLs or MemoryStore instead.");
30
+ }
31
+ // Try to use consolidated metadata for better performance
32
+ let optimizedStore;
33
+ try {
34
+ // @ts-ignore: tryWithConsolidated typing
35
+ optimizedStore = await zarr.tryWithConsolidated(resolvedStore);
36
+ }
37
+ catch {
38
+ optimizedStore = resolvedStore;
39
+ }
40
+ const root = await zarr.open(optimizedStore, {
41
+ kind: "group",
42
+ });
43
+ const attrs = root.attrs;
44
+ // Handle both 0.4 (multiscales at root) and 0.5 (multiscales under ome) formats
45
+ let multiscalesArray;
46
+ let detectedVersion;
47
+ if (attrs && typeof attrs === "object" && "ome" in attrs) {
48
+ // OME-Zarr 0.5 format: metadata is under the 'ome' property
49
+ const omeAttrs = attrs.ome;
50
+ if (!omeAttrs || !omeAttrs.multiscales) {
51
+ throw new Error("No multiscales metadata found in OME-Zarr 0.5 store");
52
+ }
53
+ multiscalesArray = omeAttrs.multiscales;
54
+ detectedVersion = omeAttrs.version;
55
+ }
56
+ else if (attrs && typeof attrs === "object" && "multiscales" in attrs) {
57
+ // OME-Zarr 0.4 format: metadata is at root
58
+ multiscalesArray = attrs
59
+ .multiscales;
60
+ }
61
+ else {
62
+ throw new Error("No multiscales metadata found in Zarr store");
63
+ }
64
+ if (!Array.isArray(multiscalesArray) || multiscalesArray.length === 0) {
65
+ throw new Error("No multiscales metadata found in Zarr store");
66
+ }
67
+ const multiscalesMetadata = multiscalesArray[0];
68
+ if (validate) {
69
+ const result = MetadataSchema.safeParse(multiscalesMetadata);
70
+ if (!result.success) {
71
+ throw new Error(`Invalid OME-Zarr metadata: ${result.error.message}`);
72
+ }
73
+ // Check version compatibility if specified
74
+ if (version) {
75
+ const metadataWithVersion = multiscalesMetadata;
76
+ const actualVersion = metadataWithVersion.version || detectedVersion;
77
+ if (actualVersion !== version) {
78
+ throw new Error(`Expected OME-Zarr version ${version}, but found ${actualVersion || "unknown"}`);
79
+ }
80
+ }
81
+ }
82
+ const metadata = multiscalesMetadata;
83
+ // Extract omero metadata from root attributes if present
84
+ if (attrs.omero) {
85
+ const omeroData = attrs.omero;
86
+ // Handle backward compatibility for OMERO window metadata
87
+ if (omeroData.channels && Array.isArray(omeroData.channels)) {
88
+ for (const channel of omeroData.channels) {
89
+ if (channel.window && typeof channel.window === "object") {
90
+ const window = channel.window;
91
+ // Ensure both min/max and start/end are present for compatibility
92
+ if (window.min !== undefined && window.max !== undefined) {
93
+ // If only min/max present, use them for start/end
94
+ if (window.start === undefined) {
95
+ window.start = window.min;
96
+ }
97
+ if (window.end === undefined) {
98
+ window.end = window.max;
99
+ }
100
+ }
101
+ else if (window.start !== undefined && window.end !== undefined) {
102
+ // If only start/end present, use them for min/max
103
+ if (window.min === undefined) {
104
+ window.min = window.start;
105
+ }
106
+ if (window.max === undefined) {
107
+ window.max = window.end;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+ metadata.omero = omeroData;
114
+ }
115
+ const images = [];
116
+ for (const dataset of metadata.datasets) {
117
+ const arrayPath = dataset.path;
118
+ const zarrArray = (await zarr.open(root.resolve(arrayPath), {
119
+ kind: "array",
120
+ }));
121
+ // Verify we have an array with the expected properties
122
+ if (!zarrArray ||
123
+ !("shape" in zarrArray) ||
124
+ !("dtype" in zarrArray) ||
125
+ !("chunks" in zarrArray)) {
126
+ throw new Error(`Invalid zarr array at path ${arrayPath}: missing shape property`);
127
+ }
128
+ const scale = {};
129
+ const translation = {};
130
+ for (const transform of dataset.coordinateTransformations) {
131
+ if (transform.type === "scale") {
132
+ metadata.axes.forEach((axis, i) => {
133
+ if (i < transform.scale.length) {
134
+ scale[axis.name] = transform.scale[i];
135
+ }
136
+ });
137
+ }
138
+ else if (transform.type === "translation") {
139
+ metadata.axes.forEach((axis, i) => {
140
+ if (i < transform.translation.length) {
141
+ translation[axis.name] = transform.translation[i];
142
+ }
143
+ });
144
+ }
145
+ }
146
+ const dims = metadata.axes.map((axis) => axis.name);
147
+ const axesUnits = metadata.axes.reduce((acc, axis) => {
148
+ if (axis.unit) {
149
+ acc[axis.name] = axis.unit;
150
+ }
151
+ return acc;
152
+ }, {});
153
+ const ngffImage = new NgffImage({
154
+ data: zarrArray,
155
+ dims,
156
+ scale,
157
+ translation,
158
+ name: metadata.name,
159
+ axesUnits: Object.keys(axesUnits).length > 0 ? axesUnits : undefined,
160
+ computedCallbacks: undefined,
161
+ });
162
+ images.push(ngffImage);
163
+ }
164
+ return new Multiscales({
165
+ images,
166
+ metadata,
167
+ scaleFactors: undefined,
168
+ method: undefined,
169
+ chunks: undefined,
170
+ });
171
+ }
172
+ catch (error) {
173
+ throw new Error(`Failed to read OME-Zarr: ${error instanceof Error ? error.message : String(error)}`);
174
+ }
175
+ }
176
+ //# sourceMappingURL=from_ngff_zarr-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from_ngff_zarr-browser.js","sourceRoot":"","sources":["../../src/io/from_ngff_zarr-browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import * as zarr from "zarrita";
2
+ import type { Multiscales } from "../types/multiscales.js";
3
+ import type { MemoryStore } from "./from_ngff_zarr-browser.js";
4
+ export interface ToNgffZarrOptions {
5
+ overwrite?: boolean;
6
+ version?: "0.4" | "0.5";
7
+ chunksPerShard?: number | number[] | Record<string, number>;
8
+ }
9
+ /**
10
+ * Browser-compatible version of toNgffZarr.
11
+ * Only supports MemoryStore (Map) for writing.
12
+ * Does NOT support local file paths or HTTP URLs (use the full version in Node.js/Deno).
13
+ */
14
+ export declare function toNgffZarr(store: string | MemoryStore | zarr.FetchStore, multiscales: Multiscales, options?: ToNgffZarrOptions): Promise<void>;
15
+ //# sourceMappingURL=to_ngff_zarr-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to_ngff_zarr-browser.d.ts","sourceRoot":"","sources":["../../src/io/to_ngff_zarr-browser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,EAC7C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAwFf"}
@@ -0,0 +1,324 @@
1
+ // SPDX-FileCopyrightText: Copyright (c) Fideus Labs LLC
2
+ // SPDX-License-Identifier: MIT
3
+ // Browser-compatible version of to_ngff_zarr that doesn't import @zarrita/storage
4
+ // (which contains Node.js-specific modules like node:fs, node:buffer, node:path)
5
+ import * as zarr from "zarrita";
6
+ import { createQueue } from "../utils/create_queue.js";
7
+ /**
8
+ * Browser-compatible version of toNgffZarr.
9
+ * Only supports MemoryStore (Map) for writing.
10
+ * Does NOT support local file paths or HTTP URLs (use the full version in Node.js/Deno).
11
+ */
12
+ export async function toNgffZarr(store, multiscales, options = {}) {
13
+ const _overwrite = options.overwrite ?? true;
14
+ const _version = options.version ?? "0.4";
15
+ try {
16
+ // Determine the appropriate store type based on the path
17
+ let _resolvedStore;
18
+ if (store instanceof Map) {
19
+ _resolvedStore = store;
20
+ }
21
+ else if (store instanceof zarr.FetchStore) {
22
+ throw new Error("FetchStore is read-only and cannot be used for writing. Use MemoryStore instead.");
23
+ }
24
+ else if (store.startsWith("http://") || store.startsWith("https://")) {
25
+ throw new Error("HTTP/HTTPS URLs are read-only and cannot be used for writing. Use MemoryStore instead.");
26
+ }
27
+ else {
28
+ // Local file paths are not supported in browser environments
29
+ throw new Error("Local file paths are not supported in browser environments. Use MemoryStore instead.");
30
+ }
31
+ // Create root location and group with zarrita v0.5.2 API
32
+ const root = zarr.root(_resolvedStore);
33
+ // Prepare multiscales metadata
34
+ const multiscalesMetadata = {
35
+ version: _version,
36
+ name: multiscales.metadata.name,
37
+ axes: multiscales.metadata.axes,
38
+ datasets: multiscales.metadata.datasets,
39
+ ...(multiscales.metadata.coordinateTransformations && {
40
+ coordinateTransformations: multiscales.metadata.coordinateTransformations,
41
+ }),
42
+ ...(multiscales.metadata.type && {
43
+ type: multiscales.metadata.type,
44
+ }),
45
+ ...(multiscales.metadata.metadata && {
46
+ metadata: multiscales.metadata.metadata,
47
+ }),
48
+ };
49
+ // Create the root group with OME-Zarr metadata
50
+ // For version 0.5, wrap metadata under "ome" property
51
+ // For version 0.4, place multiscales directly at root
52
+ const attributes = _version === "0.5"
53
+ ? {
54
+ ome: {
55
+ version: _version,
56
+ multiscales: [multiscalesMetadata],
57
+ },
58
+ }
59
+ : {
60
+ multiscales: [multiscalesMetadata],
61
+ };
62
+ // Add OMERO metadata at root level if present (both versions)
63
+ if (multiscales.metadata.omero) {
64
+ attributes.omero = multiscales.metadata.omero;
65
+ }
66
+ const rootGroup = await zarr.create(root, { attributes });
67
+ // Write each image in the multiscales
68
+ for (let i = 0; i < multiscales.images.length; i++) {
69
+ const image = multiscales.images[i];
70
+ const dataset = multiscales.metadata.datasets[i];
71
+ if (!dataset) {
72
+ throw new Error(`No dataset configuration found for image ${i}`);
73
+ }
74
+ await _writeImage(rootGroup, image, dataset.path);
75
+ }
76
+ }
77
+ catch (error) {
78
+ throw new Error(`Failed to write OME-Zarr: ${error instanceof Error ? error.message : String(error)}`);
79
+ }
80
+ }
81
+ function _convertDtypeToZarrType(dtype) {
82
+ // Map common numpy/LazyArray dtypes to zarrita data types
83
+ const dtypeMap = {
84
+ int8: "int8",
85
+ int16: "int16",
86
+ int32: "int32",
87
+ int64: "int64",
88
+ uint8: "uint8",
89
+ uint16: "uint16",
90
+ uint32: "uint32",
91
+ uint64: "uint64",
92
+ float32: "float32",
93
+ float64: "float64",
94
+ bool: "bool",
95
+ // Handle some alternative formats
96
+ i1: "int8",
97
+ i2: "int16",
98
+ i4: "int32",
99
+ i8: "int64",
100
+ u1: "uint8",
101
+ u2: "uint16",
102
+ u4: "uint32",
103
+ u8: "uint64",
104
+ f4: "float32",
105
+ f8: "float64",
106
+ };
107
+ if (dtype in dtypeMap) {
108
+ return dtypeMap[dtype];
109
+ }
110
+ else {
111
+ throw new Error(`Unsupported data type: ${dtype}`);
112
+ }
113
+ }
114
+ function getTypedArrayConstructor(dtype) {
115
+ // Map zarrita data types to TypedArray constructors
116
+ const constructorMap = {
117
+ int8: Int8Array,
118
+ int16: Int16Array,
119
+ int32: Int32Array,
120
+ int64: BigInt64Array,
121
+ uint8: Uint8Array,
122
+ uint16: Uint16Array,
123
+ uint32: Uint32Array,
124
+ uint64: BigUint64Array,
125
+ float32: Float32Array,
126
+ float64: Float64Array,
127
+ bool: Uint8Array, // Use Uint8Array for boolean, where 0 represents false and 1 represents true
128
+ // Note: float16 and "v2:object" not supported by standard TypedArrays
129
+ };
130
+ const constructor = constructorMap[dtype];
131
+ if (constructor) {
132
+ return constructor;
133
+ }
134
+ else {
135
+ throw new Error(`Unsupported data type for typed array: ${dtype}`);
136
+ }
137
+ }
138
+ async function _writeImage(group, image, arrayPath) {
139
+ try {
140
+ const chunks = getChunksFromImage(image);
141
+ // Convert LazyArray dtype to zarrita DataType
142
+ const zarrDataType = _convertDtypeToZarrType(image.data.dtype);
143
+ // Create array location
144
+ const arrayLocation = group.resolve(arrayPath);
145
+ // Create the zarr array with proper configuration
146
+ const zarrArray = await zarr.create(arrayLocation, {
147
+ shape: image.data.shape,
148
+ data_type: zarrDataType,
149
+ chunk_shape: chunks,
150
+ fill_value: 0,
151
+ });
152
+ await _writeArrayData(zarrArray, image);
153
+ }
154
+ catch (error) {
155
+ throw new Error(`Failed to write image array: ${error instanceof Error ? error.message : String(error)}`);
156
+ }
157
+ }
158
+ function getChunksFromImage(image) {
159
+ // zarr.Array.chunks is a number[] representing chunk shape
160
+ if (image.data.chunks && image.data.chunks.length > 0) {
161
+ return image.data.chunks;
162
+ }
163
+ return image.data.shape.map((dim) => Math.min(dim, 1024));
164
+ }
165
+ async function _writeArrayData(zarrArray, image) {
166
+ try {
167
+ // Get array shape for chunk calculation - we don't need the full data here
168
+ const shape = image.data.shape;
169
+ // Calculate chunk indices for parallel writing
170
+ const chunkIndices = calculateChunkIndices(shape, zarrArray.chunks);
171
+ // Create a queue for parallel chunk writing
172
+ const writeQueue = createQueue();
173
+ // Queue all chunks for writing
174
+ for (const chunkIndex of chunkIndices) {
175
+ writeQueue.add(async () => {
176
+ await writeChunkWithGet(zarrArray, image, chunkIndex);
177
+ });
178
+ }
179
+ // Wait for all chunks to be written
180
+ await writeQueue.onIdle();
181
+ }
182
+ catch (error) {
183
+ throw new Error(`Failed to write array data: ${error instanceof Error ? error.message : String(error)}`);
184
+ }
185
+ }
186
+ async function writeChunkWithGet(zarrArray, image, chunkIndex) {
187
+ // Calculate the chunk bounds
188
+ const shape = image.data.shape;
189
+ const chunkStart = chunkIndex.map((idx, dim) => idx * zarrArray.chunks[dim]);
190
+ const chunkEnd = chunkStart.map((start, dim) => Math.min(start + zarrArray.chunks[dim], shape[dim]));
191
+ // Calculate chunk shape
192
+ const chunkShape = chunkEnd.map((end, dim) => end - chunkStart[dim]);
193
+ // Create selection for this chunk from the source data
194
+ const sourceSelection = chunkStart.map((start, dim) => zarr.slice(start, chunkEnd[dim]));
195
+ // Get only the chunk data we need from the source
196
+ const { data: chunkSourceData } = await zarr.get(image.data, sourceSelection);
197
+ // Convert chunk data to target type
198
+ const targetTypedArrayConstructor = getTypedArrayConstructor(zarrArray.dtype);
199
+ const chunkTargetData = convertChunkToTargetType(chunkSourceData, zarrArray.dtype, targetTypedArrayConstructor);
200
+ // Validate chunk data size
201
+ const expectedSize = chunkShape.reduce((a, b) => a * b, 1);
202
+ const actualSize = chunkTargetData.byteLength /
203
+ (chunkTargetData
204
+ .BYTES_PER_ELEMENT || 1);
205
+ if (actualSize !== expectedSize) {
206
+ console.error(`[writeChunkWithGet] Chunk data size mismatch!`);
207
+ console.error(` Image shape:`, shape);
208
+ console.error(` Chunk index:`, chunkIndex);
209
+ console.error(` Chunk start:`, chunkStart);
210
+ console.error(` Chunk end:`, chunkEnd);
211
+ console.error(` Chunk shape:`, chunkShape);
212
+ console.error(` Expected size:`, expectedSize);
213
+ console.error(` Actual size:`, actualSize);
214
+ throw new Error(`Chunk data size mismatch: expected ${expectedSize} elements, got ${actualSize}`);
215
+ }
216
+ // Create the selection for writing to the target zarr array
217
+ const targetSelection = chunkStart.map((start, dim) => zarr.slice(start, chunkEnd[dim]));
218
+ // Write the chunk using zarrita's set function
219
+ await zarr.set(zarrArray, targetSelection, {
220
+ data: chunkTargetData,
221
+ shape: chunkShape,
222
+ stride: calculateChunkStride(chunkShape),
223
+ });
224
+ }
225
+ function convertChunkToTargetType(chunkData, targetDtype, targetTypedArrayConstructor) {
226
+ // Handle different source data types
227
+ if (chunkData instanceof BigInt64Array ||
228
+ chunkData instanceof BigUint64Array) {
229
+ // Handle BigInt arrays separately
230
+ if (chunkData.constructor === targetTypedArrayConstructor) {
231
+ return chunkData;
232
+ }
233
+ else if (targetDtype === "int64" || targetDtype === "uint64") {
234
+ // BigInt to BigInt conversion
235
+ const bigIntArray = new targetTypedArrayConstructor(chunkData.length);
236
+ for (let i = 0; i < chunkData.length; i++) {
237
+ bigIntArray[i] = chunkData[i];
238
+ }
239
+ return bigIntArray;
240
+ }
241
+ else {
242
+ // BigInt to regular number conversion
243
+ const numberArray = new targetTypedArrayConstructor(chunkData.length);
244
+ for (let i = 0; i < chunkData.length; i++) {
245
+ numberArray[i] = Number(chunkData[i]);
246
+ }
247
+ return numberArray;
248
+ }
249
+ }
250
+ else if (chunkData instanceof Uint8Array ||
251
+ chunkData instanceof Int8Array ||
252
+ chunkData instanceof Uint16Array ||
253
+ chunkData instanceof Int16Array ||
254
+ chunkData instanceof Uint32Array ||
255
+ chunkData instanceof Int32Array ||
256
+ chunkData instanceof Float32Array ||
257
+ chunkData instanceof Float64Array) {
258
+ // Handle regular typed arrays
259
+ if (chunkData.constructor === targetTypedArrayConstructor) {
260
+ return chunkData;
261
+ }
262
+ else {
263
+ // Convert between typed arrays
264
+ if (targetDtype === "int64" || targetDtype === "uint64") {
265
+ // Regular number to BigInt conversion
266
+ const bigIntArray = new targetTypedArrayConstructor(chunkData.length);
267
+ for (let i = 0; i < chunkData.length; i++) {
268
+ bigIntArray[i] = BigInt(chunkData[i]);
269
+ }
270
+ return bigIntArray;
271
+ }
272
+ else {
273
+ // Standard numeric conversion - use typed conversion
274
+ const typedArrayMap = new Map([
275
+ [Uint8Array, (data) => new Uint8Array(Array.from(data))],
276
+ [Int8Array, (data) => new Int8Array(Array.from(data))],
277
+ [Uint16Array, (data) => new Uint16Array(Array.from(data))],
278
+ [Int16Array, (data) => new Int16Array(Array.from(data))],
279
+ [Uint32Array, (data) => new Uint32Array(Array.from(data))],
280
+ [Int32Array, (data) => new Int32Array(Array.from(data))],
281
+ [Float32Array, (data) => new Float32Array(Array.from(data))],
282
+ [Float64Array, (data) => new Float64Array(Array.from(data))],
283
+ ]);
284
+ const createTypedArray = typedArrayMap.get(targetTypedArrayConstructor);
285
+ if (createTypedArray) {
286
+ return createTypedArray(chunkData);
287
+ }
288
+ else {
289
+ throw new Error(`Unsupported target constructor: ${targetTypedArrayConstructor.name}`);
290
+ }
291
+ }
292
+ }
293
+ }
294
+ else {
295
+ // Handle other types (fallback)
296
+ throw new Error(`Unsupported source data type: ${chunkData.constructor.name}`);
297
+ }
298
+ }
299
+ function calculateChunkIndices(shape, chunks) {
300
+ const indices = [];
301
+ function generateIndices(dimIndex, currentIndex) {
302
+ if (dimIndex === shape.length) {
303
+ indices.push([...currentIndex]);
304
+ return;
305
+ }
306
+ const chunkSize = chunks[dimIndex];
307
+ const dimSize = shape[dimIndex];
308
+ for (let i = 0; i < Math.ceil(dimSize / chunkSize); i++) {
309
+ currentIndex[dimIndex] = i;
310
+ generateIndices(dimIndex + 1, currentIndex);
311
+ }
312
+ }
313
+ generateIndices(0, new Array(shape.length));
314
+ return indices;
315
+ }
316
+ function calculateChunkStride(chunkShape) {
317
+ const stride = new Array(chunkShape.length);
318
+ stride[chunkShape.length - 1] = 1;
319
+ for (let i = chunkShape.length - 2; i >= 0; i--) {
320
+ stride[i] = stride[i + 1] * chunkShape[i + 1];
321
+ }
322
+ return stride;
323
+ }
324
+ //# sourceMappingURL=to_ngff_zarr-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to_ngff_zarr-browser.js","sourceRoot":"","sources":["../../src/io/to_ngff_zarr-browser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fideus-labs/ngff-zarr",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "TypeScript implementation of ngff-zarr for reading and writing OME-Zarr files",
5
5
  "license": "MIT",
6
6
  "type": "module",