zarr-metadata 0.1.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/LICENSE +21 -0
- package/README.md +113 -0
- package/dist/common.d.ts +35 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +10 -0
- package/dist/common.js.map +1 -0
- package/dist/errors.d.ts +88 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +80 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +39 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +22 -0
- package/dist/keys.js.map +1 -0
- package/dist/schemas.d.ts +31 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +43 -0
- package/dist/schemas.js.map +1 -0
- package/dist/standard-schema.d.ts +65 -0
- package/dist/standard-schema.d.ts.map +1 -0
- package/dist/standard-schema.js +11 -0
- package/dist/standard-schema.js.map +1 -0
- package/dist/v2.d.ts +104 -0
- package/dist/v2.d.ts.map +1 -0
- package/dist/v2.js +41 -0
- package/dist/v2.js.map +1 -0
- package/dist/v3.d.ts +89 -0
- package/dist/v3.d.ts.map +1 -0
- package/dist/v3.js +44 -0
- package/dist/v3.js.map +1 -0
- package/dist/validation.d.ts +136 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +784 -0
- package/dist/validation.js.map +1 -0
- package/package.json +51 -0
- package/src/common.ts +39 -0
- package/src/errors.ts +142 -0
- package/src/index.ts +27 -0
- package/src/keys.ts +45 -0
- package/src/schemas.ts +96 -0
- package/src/standard-schema.ts +78 -0
- package/src/v2.ts +126 -0
- package/src/v3.ts +111 -0
- package/src/validation.ts +937 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Standard Schema V1 interface (https://standardschema.dev), vendored.
|
|
3
|
+
*
|
|
4
|
+
* Standard Schema is the interoperability contract implemented by Zod,
|
|
5
|
+
* Valibot, ArkType, and consumed by tRPC, form libraries, and others. The
|
|
6
|
+
* spec is designed to be copied into implementing libraries so they stay
|
|
7
|
+
* dependency-free; the test suite checks this copy against the official
|
|
8
|
+
* `@standard-schema/spec` types (a devDependency) so it cannot drift.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=standard-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-schema.js","sourceRoot":"","sources":["../src/standard-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
package/dist/v2.d.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zarr v2 metadata document types.
|
|
3
|
+
*
|
|
4
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v2/v2.0.html
|
|
5
|
+
*/
|
|
6
|
+
import type { JSONValue } from "./common.js";
|
|
7
|
+
/**
|
|
8
|
+
* The v2 dtype representation.
|
|
9
|
+
*
|
|
10
|
+
* Either a numpy-style dtype string (e.g. `"<f8"`, `"|S10"`) or an array of
|
|
11
|
+
* field records describing a structured dtype. Each field record is either a
|
|
12
|
+
* 2-tuple `[name, datatype]` or a 3-tuple `[name, datatype, shape]` (the
|
|
13
|
+
* 3-tuple form indicates a subarray field). A field datatype may itself be
|
|
14
|
+
* another structured dtype.
|
|
15
|
+
*
|
|
16
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v2/v2.0.html#data-type-encoding
|
|
17
|
+
*/
|
|
18
|
+
export type ZarrV2DataTypeMetadata = string | Array<[string, ZarrV2DataTypeMetadata] | [string, ZarrV2DataTypeMetadata, number[]]>;
|
|
19
|
+
/** `"C"` (row-major) or `"F"` (column-major) — the in-chunk byte layout. */
|
|
20
|
+
export declare const ZARR_V2_ARRAY_ORDER: readonly ["C", "F"];
|
|
21
|
+
export type ZarrV2ArrayOrder = (typeof ZARR_V2_ARRAY_ORDER)[number];
|
|
22
|
+
/** `"."` (legacy default) or `"/"` (nested directories). */
|
|
23
|
+
export declare const ZARR_V2_ARRAY_DIMENSION_SEPARATOR: readonly [".", "/"];
|
|
24
|
+
export type ZarrV2ArrayDimensionSeparator = (typeof ZARR_V2_ARRAY_DIMENSION_SEPARATOR)[number];
|
|
25
|
+
/**
|
|
26
|
+
* A numcodecs configuration object, used as a v2 compressor or filter.
|
|
27
|
+
*
|
|
28
|
+
* The required `id` field names the codec; codec-specific parameters
|
|
29
|
+
* (e.g. `cname`, `clevel` for blosc) appear as extra fields.
|
|
30
|
+
*/
|
|
31
|
+
export type ZarrV2CodecMetadata = {
|
|
32
|
+
id: string;
|
|
33
|
+
} & {
|
|
34
|
+
[key: string]: JSONValue;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* On-disk `.zarray` file content.
|
|
38
|
+
*
|
|
39
|
+
* User attributes live in a sibling `.zattrs` file and are NOT part of this
|
|
40
|
+
* type; see `ZarrV2ZAttrsJSON`.
|
|
41
|
+
*/
|
|
42
|
+
export type ZarrV2ZArrayJSON = {
|
|
43
|
+
zarr_format: 2;
|
|
44
|
+
shape: number[];
|
|
45
|
+
chunks: number[];
|
|
46
|
+
dtype: ZarrV2DataTypeMetadata;
|
|
47
|
+
compressor: ZarrV2CodecMetadata | null;
|
|
48
|
+
fill_value: JSONValue;
|
|
49
|
+
order: ZarrV2ArrayOrder;
|
|
50
|
+
filters: ZarrV2CodecMetadata[] | null;
|
|
51
|
+
dimension_separator?: ZarrV2ArrayDimensionSeparator;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Zarr v2 array metadata document, in-memory merged form: the `.zarray`
|
|
55
|
+
* fields plus the sibling `.zattrs` attributes folded in as `attributes`.
|
|
56
|
+
*/
|
|
57
|
+
export type ZarrV2ArrayMetadataJSON = ZarrV2ZArrayJSON & {
|
|
58
|
+
attributes?: {
|
|
59
|
+
[key: string]: JSONValue;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/** On-disk `.zgroup` file content. The spec defines exactly one field. */
|
|
63
|
+
export type ZarrV2ZGroupJSON = {
|
|
64
|
+
zarr_format: 2;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Zarr v2 group metadata document, in-memory merged form: the `.zgroup`
|
|
68
|
+
* field plus the sibling `.zattrs` attributes folded in as `attributes`.
|
|
69
|
+
*/
|
|
70
|
+
export type ZarrV2GroupMetadataJSON = ZarrV2ZGroupJSON & {
|
|
71
|
+
attributes?: {
|
|
72
|
+
[key: string]: JSONValue;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
/** On-disk `.zattrs` file content: a JSON object of user attributes. */
|
|
76
|
+
export type ZarrV2ZAttrsJSON = {
|
|
77
|
+
[key: string]: JSONValue;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* `.zmetadata` file contents (v2 consolidated metadata).
|
|
81
|
+
*
|
|
82
|
+
* NOT a spec artifact: a reference-implementation convention. The `metadata`
|
|
83
|
+
* map uses flat path keys (`"foo/bar/.zarray"`, `"foo/.zattrs"`, ...)
|
|
84
|
+
* pointing to the JSON contents of the file at that path.
|
|
85
|
+
*/
|
|
86
|
+
export type ZarrV2ConsolidatedMetadataJSON = {
|
|
87
|
+
zarr_consolidated_format: 1;
|
|
88
|
+
metadata: {
|
|
89
|
+
[key: string]: JSONValue;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
export declare const ZARR_V2_ARRAY_METADATA_STORE_KEY = ".zarray";
|
|
93
|
+
export declare const ZARR_V2_GROUP_METADATA_STORE_KEY = ".zgroup";
|
|
94
|
+
export declare const ZARR_V2_ATTRIBUTES_STORE_KEY = ".zattrs";
|
|
95
|
+
export declare const ZARR_V2_CONSOLIDATED_METADATA_STORE_KEY = ".zmetadata";
|
|
96
|
+
/** The standard top-level keys of a merged v2 array metadata document. */
|
|
97
|
+
export declare const ARRAY_METADATA_REQUIRED_KEYS_V2: readonly ["zarr_format", "shape", "chunks", "dtype", "compressor", "fill_value", "order", "filters"];
|
|
98
|
+
export declare const ARRAY_METADATA_OPTIONAL_KEYS_V2: readonly ["dimension_separator", "attributes"];
|
|
99
|
+
export declare const ARRAY_METADATA_STANDARD_KEYS_V2: readonly ["zarr_format", "shape", "chunks", "dtype", "compressor", "fill_value", "order", "filters", "dimension_separator", "attributes"];
|
|
100
|
+
/** The standard top-level keys of a merged v2 group metadata document. */
|
|
101
|
+
export declare const GROUP_METADATA_REQUIRED_KEYS_V2: readonly ["zarr_format"];
|
|
102
|
+
export declare const GROUP_METADATA_OPTIONAL_KEYS_V2: readonly ["attributes"];
|
|
103
|
+
export declare const GROUP_METADATA_STANDARD_KEYS_V2: readonly ["zarr_format", "attributes"];
|
|
104
|
+
//# sourceMappingURL=v2.d.ts.map
|
package/dist/v2.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2.d.ts","sourceRoot":"","sources":["../src/v2.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,KAAK,CAAC,CAAC,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAEzF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,qBAAsB,CAAC;AACvD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,4DAA4D;AAC5D,eAAO,MAAM,iCAAiC,qBAAsB,CAAC;AACrE,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/F;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,CAAC,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,6BAA6B,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG;IACvD,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CAC3C,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,CAAC,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG;IACvD,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CAC3C,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,wBAAwB,EAAE,CAAC,CAAC;IAC5B,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,gCAAgC,YAAY,CAAC;AAC1D,eAAO,MAAM,gCAAgC,YAAY,CAAC;AAC1D,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,uCAAuC,eAAe,CAAC;AAEpE,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,sGAS1C,CAAC;AACH,eAAO,MAAM,+BAA+B,gDAG1C,CAAC;AACH,eAAO,MAAM,+BAA+B,2IAGlC,CAAC;AAEX,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,0BAAwE,CAAC;AACrH,eAAO,MAAM,+BAA+B,yBAAuE,CAAC;AACpH,eAAO,MAAM,+BAA+B,wCAGlC,CAAC"}
|
package/dist/v2.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zarr v2 metadata document types.
|
|
3
|
+
*
|
|
4
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v2/v2.0.html
|
|
5
|
+
*/
|
|
6
|
+
import { exactKeys } from "./keys.js";
|
|
7
|
+
/** `"C"` (row-major) or `"F"` (column-major) — the in-chunk byte layout. */
|
|
8
|
+
export const ZARR_V2_ARRAY_ORDER = ["C", "F"];
|
|
9
|
+
/** `"."` (legacy default) or `"/"` (nested directories). */
|
|
10
|
+
export const ZARR_V2_ARRAY_DIMENSION_SEPARATOR = [".", "/"];
|
|
11
|
+
export const ZARR_V2_ARRAY_METADATA_STORE_KEY = ".zarray";
|
|
12
|
+
export const ZARR_V2_GROUP_METADATA_STORE_KEY = ".zgroup";
|
|
13
|
+
export const ZARR_V2_ATTRIBUTES_STORE_KEY = ".zattrs";
|
|
14
|
+
export const ZARR_V2_CONSOLIDATED_METADATA_STORE_KEY = ".zmetadata";
|
|
15
|
+
/** The standard top-level keys of a merged v2 array metadata document. */
|
|
16
|
+
export const ARRAY_METADATA_REQUIRED_KEYS_V2 = exactKeys()([
|
|
17
|
+
"zarr_format",
|
|
18
|
+
"shape",
|
|
19
|
+
"chunks",
|
|
20
|
+
"dtype",
|
|
21
|
+
"compressor",
|
|
22
|
+
"fill_value",
|
|
23
|
+
"order",
|
|
24
|
+
"filters",
|
|
25
|
+
]);
|
|
26
|
+
export const ARRAY_METADATA_OPTIONAL_KEYS_V2 = exactKeys()([
|
|
27
|
+
"dimension_separator",
|
|
28
|
+
"attributes",
|
|
29
|
+
]);
|
|
30
|
+
export const ARRAY_METADATA_STANDARD_KEYS_V2 = [
|
|
31
|
+
...ARRAY_METADATA_REQUIRED_KEYS_V2,
|
|
32
|
+
...ARRAY_METADATA_OPTIONAL_KEYS_V2,
|
|
33
|
+
];
|
|
34
|
+
/** The standard top-level keys of a merged v2 group metadata document. */
|
|
35
|
+
export const GROUP_METADATA_REQUIRED_KEYS_V2 = exactKeys()(["zarr_format"]);
|
|
36
|
+
export const GROUP_METADATA_OPTIONAL_KEYS_V2 = exactKeys()(["attributes"]);
|
|
37
|
+
export const GROUP_METADATA_STANDARD_KEYS_V2 = [
|
|
38
|
+
...GROUP_METADATA_REQUIRED_KEYS_V2,
|
|
39
|
+
...GROUP_METADATA_OPTIONAL_KEYS_V2,
|
|
40
|
+
];
|
|
41
|
+
//# sourceMappingURL=v2.js.map
|
package/dist/v2.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2.js","sourceRoot":"","sources":["../src/v2.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAA4C,MAAM,WAAW,CAAC;AAiBhF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU,CAAC;AAGvD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU,CAAC;AAiErE,MAAM,CAAC,MAAM,gCAAgC,GAAG,SAAS,CAAC;AAC1D,MAAM,CAAC,MAAM,gCAAgC,GAAG,SAAS,CAAC;AAC1D,MAAM,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AACtD,MAAM,CAAC,MAAM,uCAAuC,GAAG,YAAY,CAAC;AAEpE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC;IAClG,aAAa;IACb,OAAO;IACP,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,SAAS;CACV,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC;IAClG,qBAAqB;IACrB,YAAY;CACb,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,GAAG,+BAA+B;IAClC,GAAG,+BAA+B;CAC1B,CAAC;AAEX,0EAA0E;AAC1E,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrH,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,GAAG,+BAA+B;IAClC,GAAG,+BAA+B;CAC1B,CAAC"}
|
package/dist/v3.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zarr v3 metadata document types.
|
|
3
|
+
*
|
|
4
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v3/core/index.html
|
|
5
|
+
*/
|
|
6
|
+
import type { JSONValue, ZarrV3MetadataFieldJSON } from "./common.js";
|
|
7
|
+
/**
|
|
8
|
+
* The JSON value of an unknown top-level v3 metadata field.
|
|
9
|
+
*
|
|
10
|
+
* An object carrying the literal member `must_understand: false` may be
|
|
11
|
+
* ignored. Every other JSON shape implicitly requires understanding;
|
|
12
|
+
* recognition itself belongs to the reader rather than this structural type.
|
|
13
|
+
*/
|
|
14
|
+
export type ZarrV3ExtensionField = JSONValue;
|
|
15
|
+
/**
|
|
16
|
+
* Zarr v3 array metadata document (the `zarr.json` content for an array).
|
|
17
|
+
*
|
|
18
|
+
* Extra keys may contain arbitrary JSON values (extension fields).
|
|
19
|
+
*
|
|
20
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v3/core/index.html#array-metadata
|
|
21
|
+
*/
|
|
22
|
+
export type ZarrV3ArrayMetadataJSON = {
|
|
23
|
+
zarr_format: 3;
|
|
24
|
+
node_type: "array";
|
|
25
|
+
data_type: ZarrV3MetadataFieldJSON;
|
|
26
|
+
shape: number[];
|
|
27
|
+
chunk_grid: ZarrV3MetadataFieldJSON;
|
|
28
|
+
chunk_key_encoding: ZarrV3MetadataFieldJSON;
|
|
29
|
+
fill_value: JSONValue;
|
|
30
|
+
codecs: ZarrV3MetadataFieldJSON[];
|
|
31
|
+
attributes?: {
|
|
32
|
+
[key: string]: JSONValue;
|
|
33
|
+
};
|
|
34
|
+
storage_transformers?: ZarrV3MetadataFieldJSON[];
|
|
35
|
+
dimension_names?: (string | null)[];
|
|
36
|
+
} & {
|
|
37
|
+
[key: string]: JSONValue;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Zarr v3 group metadata document (the `zarr.json` content for a group).
|
|
41
|
+
*
|
|
42
|
+
* Extra keys may contain arbitrary JSON values (extension fields).
|
|
43
|
+
*
|
|
44
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v3/core/index.html#group-metadata
|
|
45
|
+
*/
|
|
46
|
+
export type ZarrV3GroupMetadataJSON = {
|
|
47
|
+
zarr_format: 3;
|
|
48
|
+
node_type: "group";
|
|
49
|
+
attributes?: {
|
|
50
|
+
[key: string]: JSONValue;
|
|
51
|
+
};
|
|
52
|
+
} & {
|
|
53
|
+
[key: string]: JSONValue;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Either v3 document form of `zarr.json`, discriminated by `node_type`.
|
|
57
|
+
*/
|
|
58
|
+
export type ZarrV3MetadataJSON = ZarrV3ArrayMetadataJSON | ZarrV3GroupMetadataJSON;
|
|
59
|
+
/**
|
|
60
|
+
* Inline consolidated metadata embedded in a v3 group.
|
|
61
|
+
*
|
|
62
|
+
* There is no Zarr v3 specification for consolidated metadata; this models
|
|
63
|
+
* the inline-on-group convention used by the reference Python implementation
|
|
64
|
+
* (and zarrs), where consolidated metadata is embedded as an extension field
|
|
65
|
+
* on a group's `zarr.json`.
|
|
66
|
+
*/
|
|
67
|
+
export type ZarrV3ConsolidatedMetadataJSON = {
|
|
68
|
+
kind: "inline";
|
|
69
|
+
must_understand: false;
|
|
70
|
+
metadata: {
|
|
71
|
+
[key: string]: ZarrV3ArrayMetadataJSON | ZarrV3GroupMetadataJSON;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* The store key both v3 node types persist their metadata document under.
|
|
76
|
+
* The document's `node_type` field distinguishes an array from a group.
|
|
77
|
+
*/
|
|
78
|
+
export declare const ZARR_V3_METADATA_STORE_KEY = "zarr.json";
|
|
79
|
+
/** The key under which consolidated metadata is embedded in a v3 group document. */
|
|
80
|
+
export declare const ZARR_V3_CONSOLIDATED_METADATA_KEY = "consolidated_metadata";
|
|
81
|
+
/** The standard top-level keys of a v3 array metadata document. */
|
|
82
|
+
export declare const ARRAY_METADATA_REQUIRED_KEYS_V3: readonly ["zarr_format", "node_type", "data_type", "shape", "chunk_grid", "chunk_key_encoding", "fill_value", "codecs"];
|
|
83
|
+
export declare const ARRAY_METADATA_OPTIONAL_KEYS_V3: readonly ["attributes", "storage_transformers", "dimension_names"];
|
|
84
|
+
export declare const ARRAY_METADATA_STANDARD_KEYS_V3: readonly ["zarr_format", "node_type", "data_type", "shape", "chunk_grid", "chunk_key_encoding", "fill_value", "codecs", "attributes", "storage_transformers", "dimension_names"];
|
|
85
|
+
/** The standard top-level keys of a v3 group metadata document. */
|
|
86
|
+
export declare const GROUP_METADATA_REQUIRED_KEYS_V3: readonly ["zarr_format", "node_type"];
|
|
87
|
+
export declare const GROUP_METADATA_OPTIONAL_KEYS_V3: readonly ["attributes"];
|
|
88
|
+
export declare const GROUP_METADATA_STANDARD_KEYS_V3: readonly ["zarr_format", "node_type", "attributes"];
|
|
89
|
+
//# sourceMappingURL=v3.d.ts.map
|
package/dist/v3.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3.d.ts","sourceRoot":"","sources":["../src/v3.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGtE;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,CAAC,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,uBAAuB,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,uBAAuB,CAAC;IACpC,kBAAkB,EAAE,uBAAuB,CAAC;IAC5C,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC1C,oBAAoB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CACrC,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,CAAC,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CAC3C,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,GAAG,uBAAuB,CAAC;AAEnF;;;;;;;GAOG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,EAAE,KAAK,CAAC;IACvB,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,GAAG,uBAAuB,CAAA;KAAE,CAAC;CAChF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,cAAc,CAAC;AAEtD,oFAAoF;AACpF,eAAO,MAAM,iCAAiC,0BAA0B,CAAC;AAEzE,mEAAmE;AACnE,eAAO,MAAM,+BAA+B,yHAS1C,CAAC;AACH,eAAO,MAAM,+BAA+B,oEAI1C,CAAC;AACH,eAAO,MAAM,+BAA+B,kLAGlC,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,+BAA+B,uCAG1C,CAAC;AACH,eAAO,MAAM,+BAA+B,yBAAuE,CAAC;AACpH,eAAO,MAAM,+BAA+B,qDAGlC,CAAC"}
|
package/dist/v3.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zarr v3 metadata document types.
|
|
3
|
+
*
|
|
4
|
+
* See https://zarr-specs.readthedocs.io/en/latest/v3/core/index.html
|
|
5
|
+
*/
|
|
6
|
+
import { exactKeys } from "./keys.js";
|
|
7
|
+
/**
|
|
8
|
+
* The store key both v3 node types persist their metadata document under.
|
|
9
|
+
* The document's `node_type` field distinguishes an array from a group.
|
|
10
|
+
*/
|
|
11
|
+
export const ZARR_V3_METADATA_STORE_KEY = "zarr.json";
|
|
12
|
+
/** The key under which consolidated metadata is embedded in a v3 group document. */
|
|
13
|
+
export const ZARR_V3_CONSOLIDATED_METADATA_KEY = "consolidated_metadata";
|
|
14
|
+
/** The standard top-level keys of a v3 array metadata document. */
|
|
15
|
+
export const ARRAY_METADATA_REQUIRED_KEYS_V3 = exactKeys()([
|
|
16
|
+
"zarr_format",
|
|
17
|
+
"node_type",
|
|
18
|
+
"data_type",
|
|
19
|
+
"shape",
|
|
20
|
+
"chunk_grid",
|
|
21
|
+
"chunk_key_encoding",
|
|
22
|
+
"fill_value",
|
|
23
|
+
"codecs",
|
|
24
|
+
]);
|
|
25
|
+
export const ARRAY_METADATA_OPTIONAL_KEYS_V3 = exactKeys()([
|
|
26
|
+
"attributes",
|
|
27
|
+
"storage_transformers",
|
|
28
|
+
"dimension_names",
|
|
29
|
+
]);
|
|
30
|
+
export const ARRAY_METADATA_STANDARD_KEYS_V3 = [
|
|
31
|
+
...ARRAY_METADATA_REQUIRED_KEYS_V3,
|
|
32
|
+
...ARRAY_METADATA_OPTIONAL_KEYS_V3,
|
|
33
|
+
];
|
|
34
|
+
/** The standard top-level keys of a v3 group metadata document. */
|
|
35
|
+
export const GROUP_METADATA_REQUIRED_KEYS_V3 = exactKeys()([
|
|
36
|
+
"zarr_format",
|
|
37
|
+
"node_type",
|
|
38
|
+
]);
|
|
39
|
+
export const GROUP_METADATA_OPTIONAL_KEYS_V3 = exactKeys()(["attributes"]);
|
|
40
|
+
export const GROUP_METADATA_STANDARD_KEYS_V3 = [
|
|
41
|
+
...GROUP_METADATA_REQUIRED_KEYS_V3,
|
|
42
|
+
...GROUP_METADATA_OPTIONAL_KEYS_V3,
|
|
43
|
+
];
|
|
44
|
+
//# sourceMappingURL=v3.js.map
|
package/dist/v3.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3.js","sourceRoot":"","sources":["../src/v3.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAA4C,MAAM,WAAW,CAAC;AAgEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAW,CAAC;AAEtD,oFAAoF;AACpF,MAAM,CAAC,MAAM,iCAAiC,GAAG,uBAAuB,CAAC;AAEzE,mEAAmE;AACnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC;IAClG,aAAa;IACb,WAAW;IACX,WAAW;IACX,OAAO;IACP,YAAY;IACZ,oBAAoB;IACpB,YAAY;IACZ,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC;IAClG,YAAY;IACZ,sBAAsB;IACtB,iBAAiB;CAClB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,GAAG,+BAA+B;IAClC,GAAG,+BAA+B;CAC1B,CAAC;AAEX,mEAAmE;AACnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC;IAClG,aAAa;IACb,WAAW;CACZ,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,EAA2C,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,GAAG,+BAA+B;IAClC,GAAG,+BAA+B;CAC1B,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural validation for Zarr metadata documents.
|
|
3
|
+
*
|
|
4
|
+
* A faithful port of `zarr_metadata.model._validation` (the Python reference
|
|
5
|
+
* implementation). Validators check JSON structure (key presence, value
|
|
6
|
+
* shapes, and fixed literals like `zarr_format`), not domain validity. Each
|
|
7
|
+
* concept gets a `validate*` function returning every problem found, an
|
|
8
|
+
* `is*` type guard, and a `parse*` function that narrows or throws
|
|
9
|
+
* `MetadataValidationError`.
|
|
10
|
+
*
|
|
11
|
+
* Two Python behaviors have no JS analog and are intentionally absent:
|
|
12
|
+
*
|
|
13
|
+
* - tuple-vs-list canonicalization (`arrays_to_tuples`): JSON arrays are
|
|
14
|
+
* plain arrays in JS, so there is nothing to normalize;
|
|
15
|
+
* - int-vs-float literal spelling (`zarr_format: 3.0` vs `3`): `JSON.parse`
|
|
16
|
+
* collapses both to the number `3`, so JS cannot reject the float
|
|
17
|
+
* spelling. The shared conformance corpus avoids fixtures that hinge on
|
|
18
|
+
* this distinction.
|
|
19
|
+
*
|
|
20
|
+
* Three behaviors are deliberate TS-side hardening divergences:
|
|
21
|
+
*
|
|
22
|
+
* - a "mapping" means a plain object (prototype `null` or
|
|
23
|
+
* `Object.prototype`). Python accepts any `Mapping`; here `Date`, `Map`,
|
|
24
|
+
* `Set`, and class instances are rejected as non-JSON rather than
|
|
25
|
+
* validated as empty objects and mis-serialized later. Unobservable for
|
|
26
|
+
* `JSON.parse` output;
|
|
27
|
+
* - an array must be dense with index-only own properties: holes (which
|
|
28
|
+
* `every`/`forEach` would silently skip) and extra own properties like a
|
|
29
|
+
* `toJSON` method (which `JSON.stringify` would honor, serializing
|
|
30
|
+
* something other than what was validated) are rejected. Unobservable
|
|
31
|
+
* for `JSON.parse` output;
|
|
32
|
+
* - containers (and the group ↔ consolidated-metadata document recursion)
|
|
33
|
+
* nested deeper than `MAX_JSON_DEPTH` are reported as a problem instead
|
|
34
|
+
* of overflowing the stack. This one IS observable for JSON text —
|
|
35
|
+
* `JSON.parse` accepts documents nested past the cap, where Python
|
|
36
|
+
* reports no problem (or raises `RecursionError` far deeper) — so the
|
|
37
|
+
* corpus must never contain fixtures that exceed the cap.
|
|
38
|
+
*/
|
|
39
|
+
import type { JSONValue, ZarrV3MetadataFieldJSON } from "./common.js";
|
|
40
|
+
import { type ErrorTree, type ParseResult } from "./errors.js";
|
|
41
|
+
import { type ZarrV2ArrayMetadataJSON, type ZarrV2ConsolidatedMetadataJSON, type ZarrV2GroupMetadataJSON } from "./v2.js";
|
|
42
|
+
import { type ZarrV3ArrayMetadataJSON, type ZarrV3ConsolidatedMetadataJSON, type ZarrV3GroupMetadataJSON, type ZarrV3MetadataJSON } from "./v3.js";
|
|
43
|
+
/**
|
|
44
|
+
* Maximum container nesting depth accepted by `validateJson` (and, through
|
|
45
|
+
* it, every document validator) before validation reports a problem instead
|
|
46
|
+
* of recursing further. Mirrors `zarr.core.json_parse.MAX_JSON_DEPTH`; no
|
|
47
|
+
* real metadata document approaches it. The cap also terminates validation
|
|
48
|
+
* of circular object graphs.
|
|
49
|
+
*/
|
|
50
|
+
export declare const MAX_JSON_DEPTH = 64;
|
|
51
|
+
/**
|
|
52
|
+
* A key-value store fragment holding metadata documents as bytes or text:
|
|
53
|
+
* either a `Map` or a plain object keyed by store key.
|
|
54
|
+
*/
|
|
55
|
+
export type StoreMapping = ReadonlyMap<string, Uint8Array | string> | Record<string, Uint8Array | string | undefined>;
|
|
56
|
+
/**
|
|
57
|
+
* Decode the JSON document stored at `key` in `mapping`.
|
|
58
|
+
*
|
|
59
|
+
* Ported from the Python reference's `load_store_json`. Every ingestion
|
|
60
|
+
* failure surfaces as `MetadataValidationError`: a missing store key is a
|
|
61
|
+
* `missing_key` problem and undecodable bytes or malformed JSON are an
|
|
62
|
+
* `invalid_json` problem, rather than leaking a decode exception to
|
|
63
|
+
* callers. `JSON.parse` already rejects the non-standard `NaN`/`Infinity`
|
|
64
|
+
* constants Python has to opt out of explicitly.
|
|
65
|
+
*
|
|
66
|
+
* One intentional divergence: bytes must be UTF-8 (RFC 8259's mandated
|
|
67
|
+
* interchange encoding). Python's `json.loads` auto-detects UTF-16/32 and
|
|
68
|
+
* would accept such documents; here they are reported as `invalid_json`.
|
|
69
|
+
*/
|
|
70
|
+
export declare function loadStoreJson(mapping: StoreMapping, key: string): unknown;
|
|
71
|
+
/**
|
|
72
|
+
* Encode a metadata document as strict RFC 8259 JSON bytes.
|
|
73
|
+
*
|
|
74
|
+
* Ported from the Python reference's `dump_store_json` (`allow_nan=False`):
|
|
75
|
+
* a non-JSON value — a non-finite number, a `Map`, a `BigInt` — throws
|
|
76
|
+
* `MetadataValidationError` instead of being silently rewritten to `null`
|
|
77
|
+
* the way bare `JSON.stringify` would.
|
|
78
|
+
*/
|
|
79
|
+
export declare function dumpStoreJson(value: unknown, options?: {
|
|
80
|
+
indent?: number | string;
|
|
81
|
+
}): Uint8Array;
|
|
82
|
+
/** Every reason `value` is not JSON-serializable, as an error tree. */
|
|
83
|
+
export declare function validateJson(value: unknown): ErrorTree;
|
|
84
|
+
/** Whether `value` is a JSON structure (recursively). */
|
|
85
|
+
export declare function isJson(value: unknown): value is JSONValue;
|
|
86
|
+
/** Return `value` narrowed to `JSONValue`, or throw `MetadataValidationError`. */
|
|
87
|
+
export declare function parseJson(value: unknown): JSONValue;
|
|
88
|
+
export declare function safeParseJson(value: unknown): ParseResult<JSONValue>;
|
|
89
|
+
/** Every reason `value` is not a v3 metadata field, as an error tree. */
|
|
90
|
+
export declare function validateMetadataFieldV3(value: unknown, options?: {
|
|
91
|
+
allowMustUnderstandFalse?: boolean;
|
|
92
|
+
}): ErrorTree;
|
|
93
|
+
/** Whether `value` is a v3 metadata field: a bare name or a named config. */
|
|
94
|
+
export declare function isMetadataFieldV3(value: unknown): value is ZarrV3MetadataFieldJSON;
|
|
95
|
+
export declare function parseMetadataFieldV3(value: unknown): ZarrV3MetadataFieldJSON;
|
|
96
|
+
export declare function safeParseMetadataFieldV3(value: unknown): ParseResult<ZarrV3MetadataFieldJSON>;
|
|
97
|
+
/** Every reason `value` is not a v3 array document, as an error tree. */
|
|
98
|
+
export declare function validateArrayMetadataV3(value: unknown): ErrorTree;
|
|
99
|
+
export declare function isArrayMetadataV3(value: unknown): value is ZarrV3ArrayMetadataJSON;
|
|
100
|
+
export declare function parseArrayMetadataV3(value: unknown): ZarrV3ArrayMetadataJSON;
|
|
101
|
+
export declare function safeParseArrayMetadataV3(value: unknown): ParseResult<ZarrV3ArrayMetadataJSON>;
|
|
102
|
+
/** Every reason `value` is not a v3 group document, as an error tree. */
|
|
103
|
+
export declare function validateGroupMetadataV3(value: unknown): ErrorTree;
|
|
104
|
+
export declare function isGroupMetadataV3(value: unknown): value is ZarrV3GroupMetadataJSON;
|
|
105
|
+
export declare function parseGroupMetadataV3(value: unknown): ZarrV3GroupMetadataJSON;
|
|
106
|
+
export declare function safeParseGroupMetadataV3(value: unknown): ParseResult<ZarrV3GroupMetadataJSON>;
|
|
107
|
+
/** Every reason `value` is not an inline consolidated envelope, as an error tree. */
|
|
108
|
+
export declare function validateConsolidatedMetadataV3(value: unknown): ErrorTree;
|
|
109
|
+
export declare function isConsolidatedMetadataV3(value: unknown): value is ZarrV3ConsolidatedMetadataJSON;
|
|
110
|
+
export declare function parseConsolidatedMetadataV3(value: unknown): ZarrV3ConsolidatedMetadataJSON;
|
|
111
|
+
export declare function safeParseConsolidatedMetadataV3(value: unknown): ParseResult<ZarrV3ConsolidatedMetadataJSON>;
|
|
112
|
+
/**
|
|
113
|
+
* Every reason `value` is not a v3 metadata document of either node type
|
|
114
|
+
* (the complete `zarr.json` grammar, dispatching on `node_type`), as an
|
|
115
|
+
* error tree.
|
|
116
|
+
*/
|
|
117
|
+
export declare function validateMetadataV3(value: unknown): ErrorTree;
|
|
118
|
+
export declare function isMetadataV3(value: unknown): value is ZarrV3MetadataJSON;
|
|
119
|
+
export declare function parseMetadataV3(value: unknown): ZarrV3MetadataJSON;
|
|
120
|
+
export declare function safeParseMetadataV3(value: unknown): ParseResult<ZarrV3MetadataJSON>;
|
|
121
|
+
/** Every reason `value` is not a merged v2 array document, as an error tree. */
|
|
122
|
+
export declare function validateArrayMetadataV2(value: unknown): ErrorTree;
|
|
123
|
+
export declare function isArrayMetadataV2(value: unknown): value is ZarrV2ArrayMetadataJSON;
|
|
124
|
+
export declare function parseArrayMetadataV2(value: unknown): ZarrV2ArrayMetadataJSON;
|
|
125
|
+
export declare function safeParseArrayMetadataV2(value: unknown): ParseResult<ZarrV2ArrayMetadataJSON>;
|
|
126
|
+
/** Every reason `value` is not a merged v2 group document, as an error tree. */
|
|
127
|
+
export declare function validateGroupMetadataV2(value: unknown): ErrorTree;
|
|
128
|
+
export declare function isGroupMetadataV2(value: unknown): value is ZarrV2GroupMetadataJSON;
|
|
129
|
+
export declare function parseGroupMetadataV2(value: unknown): ZarrV2GroupMetadataJSON;
|
|
130
|
+
export declare function safeParseGroupMetadataV2(value: unknown): ParseResult<ZarrV2GroupMetadataJSON>;
|
|
131
|
+
/** Every reason `value` is not a `.zmetadata` document, as an error tree. */
|
|
132
|
+
export declare function validateConsolidatedMetadataV2(value: unknown): ErrorTree;
|
|
133
|
+
export declare function isConsolidatedMetadataV2(value: unknown): value is ZarrV2ConsolidatedMetadataJSON;
|
|
134
|
+
export declare function parseConsolidatedMetadataV2(value: unknown): ZarrV2ConsolidatedMetadataJSON;
|
|
135
|
+
export declare function safeParseConsolidatedMetadataV2(value: unknown): ParseResult<ZarrV2ConsolidatedMetadataJSON>;
|
|
136
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|