@fideus-labs/ngff-zarr 0.2.7 → 0.3.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/esm/browser-mod.d.ts +3 -1
- package/esm/browser-mod.d.ts.map +1 -1
- package/esm/browser-mod.js +3 -1
- package/esm/browser-mod.js.map +1 -1
- package/esm/io/from_ngff_zarr.d.ts.map +1 -1
- package/esm/io/from_ngff_zarr.js +34 -116
- package/esm/io/from_ngff_zarr.js.map +1 -1
- package/esm/io/rfc9_zip.d.ts +80 -0
- package/esm/io/rfc9_zip.d.ts.map +1 -0
- package/esm/io/rfc9_zip.js +337 -0
- package/esm/io/rfc9_zip.js.map +1 -0
- package/esm/io/to_ngff_zarr-browser.d.ts +26 -0
- package/esm/io/to_ngff_zarr-browser.d.ts.map +1 -1
- package/esm/io/to_ngff_zarr-browser.js +37 -6
- package/esm/io/to_ngff_zarr-browser.js.map +1 -1
- package/esm/io/to_ngff_zarr.d.ts +76 -0
- package/esm/io/to_ngff_zarr.d.ts.map +1 -1
- package/esm/io/to_ngff_zarr.js +129 -7
- package/esm/io/to_ngff_zarr.js.map +1 -1
- package/esm/io/to_ngff_zarr_ozx_common.d.ts +51 -0
- package/esm/io/to_ngff_zarr_ozx_common.d.ts.map +1 -0
- package/esm/io/to_ngff_zarr_ozx_common.js +126 -0
- package/esm/io/to_ngff_zarr_ozx_common.js.map +1 -0
- package/esm/methods/itkwasm-browser.d.ts.map +1 -1
- package/esm/methods/itkwasm-browser.js +262 -4
- package/esm/methods/itkwasm-browser.js.map +1 -1
- package/esm/methods/itkwasm-node.d.ts.map +1 -1
- package/esm/methods/itkwasm-node.js +262 -4
- package/esm/methods/itkwasm-node.js.map +1 -1
- package/esm/methods/itkwasm-shared.d.ts +6 -0
- package/esm/methods/itkwasm-shared.d.ts.map +1 -1
- package/esm/methods/itkwasm-shared.js +6 -0
- package/esm/methods/itkwasm-shared.js.map +1 -1
- package/esm/mod.d.ts +5 -0
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +5 -0
- package/esm/mod.js.map +1 -1
- package/esm/process/to_multiscales-shared.d.ts.map +1 -1
- package/esm/process/to_multiscales-shared.js +3 -2
- package/esm/process/to_multiscales-shared.js.map +1 -1
- package/esm/types/supported_versions.d.ts +20 -0
- package/esm/types/supported_versions.d.ts.map +1 -0
- package/esm/types/supported_versions.js +31 -0
- package/esm/types/supported_versions.js.map +1 -0
- package/esm/types/zarr_metadata.d.ts +43 -1
- package/esm/types/zarr_metadata.d.ts.map +1 -1
- package/esm/types/zarr_metadata.js +40 -0
- package/esm/types/zarr_metadata.js.map +1 -1
- package/esm/utils/factory.d.ts +3 -2
- package/esm/utils/factory.d.ts.map +1 -1
- package/esm/utils/factory.js +6 -2
- package/esm/utils/factory.js.map +1 -1
- package/esm/utils/from_zarr_attrs.d.ts +21 -0
- package/esm/utils/from_zarr_attrs.d.ts.map +1 -0
- package/esm/utils/from_zarr_attrs.js +326 -0
- package/esm/utils/from_zarr_attrs.js.map +1 -0
- package/esm/utils/parse_metadata.d.ts +27 -0
- package/esm/utils/parse_metadata.d.ts.map +1 -0
- package/esm/utils/parse_metadata.js +138 -0
- package/esm/utils/parse_metadata.js.map +1 -0
- package/esm/utils/rfc4_validation.d.ts +20 -0
- package/esm/utils/rfc4_validation.d.ts.map +1 -0
- package/esm/utils/rfc4_validation.js +98 -0
- package/esm/utils/rfc4_validation.js.map +1 -0
- package/package.json +2 -2
package/esm/browser-mod.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export { isValidDimension, isValidUnit, validateMetadata, } from "./utils/valida
|
|
|
13
13
|
export { createAxis, createDataset, createMetadata, createMultiscales, createNgffImage, } from "./utils/factory.js";
|
|
14
14
|
export { getMethodMetadata } from "./utils/method_metadata.js";
|
|
15
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";
|
|
16
|
+
export { isOzxPath, toNgffZarr, type ToNgffZarrOptions, toNgffZarrOzx, type ToNgffZarrOzxOptions, } from "./io/to_ngff_zarr-browser.js";
|
|
17
|
+
export { getZipFileCompressionMethod, getZipFileList, memoryStoreToZip, orderFilesForRfc9, readOzxVersion, } from "./io/rfc9_zip.js";
|
|
18
|
+
export type { MemoryStoreToZipOptions } from "./io/rfc9_zip.js";
|
|
17
19
|
export * from "./process/to_multiscales-browser.js";
|
|
18
20
|
//# sourceMappingURL=browser-mod.d.ts.map
|
package/esm/browser-mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,SAAS,EACT,UAAU,EACV,KAAK,iBAAiB,EACtB,aAAa,EACb,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,cAAc,qCAAqC,CAAC"}
|
package/esm/browser-mod.js
CHANGED
|
@@ -23,7 +23,9 @@ export { getMethodMetadata } from "./utils/method_metadata.js";
|
|
|
23
23
|
// Note: Uses browser-specific versions that don't import @zarrita/storage
|
|
24
24
|
// (which contains Node.js-specific modules like node:fs, node:buffer, node:path)
|
|
25
25
|
export { fromNgffZarr, } from "./io/from_ngff_zarr-browser.js";
|
|
26
|
-
export { toNgffZarr, } from "./io/to_ngff_zarr-browser.js";
|
|
26
|
+
export { isOzxPath, toNgffZarr, toNgffZarrOzx, } from "./io/to_ngff_zarr-browser.js";
|
|
27
|
+
// RFC-9 exports
|
|
28
|
+
export { getZipFileCompressionMethod, getZipFileList, memoryStoreToZip, orderFilesForRfc9, readOzxVersion, } from "./io/rfc9_zip.js";
|
|
27
29
|
// Browser-compatible processing modules
|
|
28
30
|
export * from "./process/to_multiscales-browser.js";
|
|
29
31
|
//# sourceMappingURL=browser-mod.js.map
|
package/esm/browser-mod.js.map
CHANGED
|
@@ -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,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,
|
|
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,SAAS,EACT,UAAU,EAEV,aAAa,GAEd,MAAM,8BAA8B,CAAC;AAEtC,gBAAgB;AAChB,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,wCAAwC;AACxC,cAAc,qCAAqC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from_ngff_zarr.d.ts","sourceRoot":"","sources":["../../src/io/from_ngff_zarr.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"from_ngff_zarr.d.ts","sourceRoot":"","sources":["../../src/io/from_ngff_zarr.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAWtD,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,wBAAsB,YAAY,CAEhC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,EAC7C,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,WAAW,CAAC,CAsHtB;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAmClB"}
|
package/esm/io/from_ngff_zarr.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
import * as zarr from "zarrita";
|
|
4
4
|
import { Multiscales } from "../types/multiscales.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { NgffVersion } from "../types/supported_versions.js";
|
|
6
|
+
import { detectVersion, extractMethodMetadata, } from "../utils/parse_metadata.js";
|
|
7
|
+
import { fromZarrAttrsV04, fromZarrAttrsV05, } from "../utils/from_zarr_attrs.js";
|
|
7
8
|
export async function fromNgffZarr(
|
|
8
9
|
// Also accepts FileSystemStore, ZipFileStore objects in Node.js/Deno
|
|
9
10
|
store, options = {}) {
|
|
10
11
|
const validate = options.validate ?? false;
|
|
11
|
-
const
|
|
12
|
+
const requestedVersion = options.version;
|
|
12
13
|
try {
|
|
13
14
|
// Determine the appropriate store type based on the path
|
|
14
15
|
let resolvedStore;
|
|
@@ -56,131 +57,48 @@ store, options = {}) {
|
|
|
56
57
|
kind: "group",
|
|
57
58
|
});
|
|
58
59
|
const attrs = root.attrs;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
const rootAttrs = attrs;
|
|
61
|
+
// Handle both v0.4 (multiscales at root) and v0.5 (multiscales under "ome")
|
|
62
|
+
const hasOmeWrapper = "ome" in rootAttrs;
|
|
63
|
+
const multiscalesSource = hasOmeWrapper
|
|
64
|
+
? rootAttrs.ome
|
|
65
|
+
: rootAttrs;
|
|
66
|
+
if (!multiscalesSource.multiscales) {
|
|
67
|
+
throw new Error("No multiscales metadata found in Zarr store");
|
|
68
|
+
}
|
|
69
|
+
// Detect version from attributes
|
|
70
|
+
const detectedVersion = detectVersion(rootAttrs);
|
|
71
|
+
// Validate version if requested
|
|
72
|
+
if (validate && requestedVersion) {
|
|
73
|
+
if (detectedVersion !== requestedVersion) {
|
|
74
|
+
throw new Error(`Expected OME-Zarr version ${requestedVersion}, but found ${detectedVersion}`);
|
|
67
75
|
}
|
|
68
|
-
multiscalesArray = omeAttrs.multiscales;
|
|
69
|
-
detectedVersion = omeAttrs.version;
|
|
70
76
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
77
|
+
// Parse metadata using version-specific function
|
|
78
|
+
let result;
|
|
79
|
+
if (detectedVersion === NgffVersion.V05) {
|
|
80
|
+
result = await fromZarrAttrsV05(rootAttrs, resolvedStore, validate);
|
|
75
81
|
}
|
|
76
82
|
else {
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
if (!Array.isArray(multiscalesArray) || multiscalesArray.length === 0) {
|
|
80
|
-
throw new Error("No multiscales metadata found in Zarr store");
|
|
83
|
+
result = await fromZarrAttrsV04(rootAttrs, resolvedStore, validate);
|
|
81
84
|
}
|
|
85
|
+
const { metadata, images } = result;
|
|
86
|
+
// Extract method metadata from the multiscales metadata
|
|
87
|
+
const multiscalesArray = multiscalesSource.multiscales;
|
|
82
88
|
const multiscalesMetadata = multiscalesArray[0];
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
// Check version compatibility if specified
|
|
89
|
-
if (version) {
|
|
90
|
-
const metadataWithVersion = multiscalesMetadata;
|
|
91
|
-
const actualVersion = metadataWithVersion.version || detectedVersion;
|
|
92
|
-
if (actualVersion !== version) {
|
|
93
|
-
throw new Error(`Expected OME-Zarr version ${version}, but found ${actualVersion || "unknown"}`);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
const metadata = multiscalesMetadata;
|
|
98
|
-
// Extract omero metadata from root attributes if present
|
|
99
|
-
if (attrs.omero) {
|
|
100
|
-
const omeroData = attrs.omero;
|
|
101
|
-
// Handle backward compatibility for OMERO window metadata
|
|
102
|
-
if (omeroData.channels && Array.isArray(omeroData.channels)) {
|
|
103
|
-
for (const channel of omeroData.channels) {
|
|
104
|
-
if (channel.window && typeof channel.window === "object") {
|
|
105
|
-
const window = channel.window;
|
|
106
|
-
// Ensure both min/max and start/end are present for compatibility
|
|
107
|
-
if (window.min !== undefined && window.max !== undefined) {
|
|
108
|
-
// If only min/max present, use them for start/end
|
|
109
|
-
if (window.start === undefined) {
|
|
110
|
-
window.start = window.min;
|
|
111
|
-
}
|
|
112
|
-
if (window.end === undefined) {
|
|
113
|
-
window.end = window.max;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else if (window.start !== undefined && window.end !== undefined) {
|
|
117
|
-
// If only start/end present, use them for min/max
|
|
118
|
-
if (window.min === undefined) {
|
|
119
|
-
window.min = window.start;
|
|
120
|
-
}
|
|
121
|
-
if (window.max === undefined) {
|
|
122
|
-
window.max = window.end;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
metadata.omero = omeroData;
|
|
89
|
+
const { method, methodType, methodMetadata } = extractMethodMetadata(multiscalesMetadata);
|
|
90
|
+
// Update metadata with method information
|
|
91
|
+
if (methodType) {
|
|
92
|
+
metadata.type = methodType;
|
|
129
93
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const arrayPath = dataset.path;
|
|
133
|
-
const zarrArray = (await zarr.open(root.resolve(arrayPath), {
|
|
134
|
-
kind: "array",
|
|
135
|
-
}));
|
|
136
|
-
// Verify we have an array with the expected properties
|
|
137
|
-
if (!zarrArray ||
|
|
138
|
-
!("shape" in zarrArray) ||
|
|
139
|
-
!("dtype" in zarrArray) ||
|
|
140
|
-
!("chunks" in zarrArray)) {
|
|
141
|
-
throw new Error(`Invalid zarr array at path ${arrayPath}: missing shape property`);
|
|
142
|
-
}
|
|
143
|
-
const scale = {};
|
|
144
|
-
const translation = {};
|
|
145
|
-
for (const transform of dataset.coordinateTransformations) {
|
|
146
|
-
if (transform.type === "scale") {
|
|
147
|
-
metadata.axes.forEach((axis, i) => {
|
|
148
|
-
if (i < transform.scale.length) {
|
|
149
|
-
scale[axis.name] = transform.scale[i];
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
else if (transform.type === "translation") {
|
|
154
|
-
metadata.axes.forEach((axis, i) => {
|
|
155
|
-
if (i < transform.translation.length) {
|
|
156
|
-
translation[axis.name] = transform.translation[i];
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
const dims = metadata.axes.map((axis) => axis.name);
|
|
162
|
-
const axesUnits = metadata.axes.reduce((acc, axis) => {
|
|
163
|
-
if (axis.unit) {
|
|
164
|
-
acc[axis.name] = axis.unit;
|
|
165
|
-
}
|
|
166
|
-
return acc;
|
|
167
|
-
}, {});
|
|
168
|
-
const ngffImage = new NgffImage({
|
|
169
|
-
data: zarrArray,
|
|
170
|
-
dims,
|
|
171
|
-
scale,
|
|
172
|
-
translation,
|
|
173
|
-
name: metadata.name,
|
|
174
|
-
axesUnits: Object.keys(axesUnits).length > 0 ? axesUnits : undefined,
|
|
175
|
-
computedCallbacks: undefined,
|
|
176
|
-
});
|
|
177
|
-
images.push(ngffImage);
|
|
94
|
+
if (methodMetadata) {
|
|
95
|
+
metadata.metadata = methodMetadata;
|
|
178
96
|
}
|
|
179
97
|
return new Multiscales({
|
|
180
98
|
images,
|
|
181
99
|
metadata,
|
|
182
100
|
scaleFactors: undefined,
|
|
183
|
-
method
|
|
101
|
+
method,
|
|
184
102
|
chunks: undefined,
|
|
185
103
|
});
|
|
186
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from_ngff_zarr.js","sourceRoot":"","sources":["../../src/io/from_ngff_zarr.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,+BAA+B;AAC/B,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"from_ngff_zarr.js","sourceRoot":"","sources":["../../src/io/from_ngff_zarr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC-9: Zipped OME-Zarr (.ozx) support
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for writing OME-Zarr hierarchies
|
|
5
|
+
* to ZIP archives according to RFC-9 specification.
|
|
6
|
+
*
|
|
7
|
+
* @see https://ngff.openmicroscopy.org/rfc/9/index.html
|
|
8
|
+
*/
|
|
9
|
+
/** MemoryStore type for zarr data */
|
|
10
|
+
export type MemoryStore = Map<string, Uint8Array>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a path refers to a .ozx file.
|
|
13
|
+
*
|
|
14
|
+
* @param path - Path to check
|
|
15
|
+
* @returns True if path ends with .ozx extension
|
|
16
|
+
*/
|
|
17
|
+
export declare function isOzxPath(path: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Order files for RFC-9 compliance.
|
|
20
|
+
*
|
|
21
|
+
* According to RFC-9:
|
|
22
|
+
* - Root-level zarr.json must be the first entry
|
|
23
|
+
* - Other zarr.json files should follow in breadth-first order
|
|
24
|
+
* - Data files come after all zarr.json files
|
|
25
|
+
*
|
|
26
|
+
* @param keys - Array of file paths from the store
|
|
27
|
+
* @returns Ordered array of file paths
|
|
28
|
+
*/
|
|
29
|
+
export declare function orderFilesForRfc9(keys: string[]): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Read the OME-Zarr version from ZIP comment.
|
|
32
|
+
*
|
|
33
|
+
* @param zipData - ZIP file data
|
|
34
|
+
* @returns OME-Zarr version string if found, null otherwise
|
|
35
|
+
*/
|
|
36
|
+
export declare function readOzxVersion(zipData: Uint8Array): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Read the jsonFirst flag from ZIP comment.
|
|
39
|
+
*
|
|
40
|
+
* The jsonFirst flag indicates that zarr.json files are ordered
|
|
41
|
+
* breadth-first in the central directory and precede other content.
|
|
42
|
+
*
|
|
43
|
+
* @param zipData - ZIP file data
|
|
44
|
+
* @returns true if jsonFirst is set to true in the ZIP comment, false otherwise
|
|
45
|
+
*/
|
|
46
|
+
export declare function readOzxJsonFirst(zipData: Uint8Array): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Check if a file in the ZIP uses compression.
|
|
49
|
+
*
|
|
50
|
+
* @param zipData - ZIP file data
|
|
51
|
+
* @param filename - Name of the file to check
|
|
52
|
+
* @returns Compression method (0 = stored, 8 = deflate, etc.)
|
|
53
|
+
*/
|
|
54
|
+
export declare function getZipFileCompressionMethod(zipData: Uint8Array, filename: string): number | null;
|
|
55
|
+
/**
|
|
56
|
+
* Get the list of files in a ZIP archive in order.
|
|
57
|
+
*
|
|
58
|
+
* @param zipData - ZIP file data
|
|
59
|
+
* @returns Array of filenames in the order they appear in the central directory
|
|
60
|
+
*/
|
|
61
|
+
export declare function getZipFileList(zipData: Uint8Array): string[];
|
|
62
|
+
export interface MemoryStoreToZipOptions {
|
|
63
|
+
/** OME-Zarr version string (default: "0.5") */
|
|
64
|
+
version?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Convert a MemoryStore to ZIP data following RFC-9 specification.
|
|
68
|
+
*
|
|
69
|
+
* According to RFC-9:
|
|
70
|
+
* - Root-level zarr.json must be the first entry
|
|
71
|
+
* - Other zarr.json files should follow in breadth-first order
|
|
72
|
+
* - ZIP-level compression should be disabled (ZIP_STORED)
|
|
73
|
+
* - A comment with OME-Zarr version should be added
|
|
74
|
+
*
|
|
75
|
+
* @param store - MemoryStore containing zarr data
|
|
76
|
+
* @param options - Options for ZIP creation
|
|
77
|
+
* @returns ZIP file data as Uint8Array
|
|
78
|
+
*/
|
|
79
|
+
export declare function memoryStoreToZip(store: MemoryStore, options?: MemoryStoreToZipOptions): Uint8Array;
|
|
80
|
+
//# sourceMappingURL=rfc9_zip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rfc9_zip.d.ts","sourceRoot":"","sources":["../../src/io/rfc9_zip.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAIH,qCAAqC;AACrC,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmB1D;AA4DD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CA8CjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CA8C7D;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAiDf;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,CAoE5D;AAED,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,uBAA4B,GACpC,UAAU,CAkCZ"}
|