zarr-metadata 0.7.0 → 0.8.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.
@@ -1,49 +1,21 @@
1
1
  /**
2
- * Semantic (cross-field) validation for v3 array metadata.
2
+ * Semantic (cross-field) validation for v3 array metadata: the
3
+ * orchestrator. The rules themselves live with their content —
4
+ * `chunk-grids.ts`, `codecs.ts`, and `data-types.ts` each hold the syntax
5
+ * (types) and semantics (procedures) for the names this package
6
+ * interprets, mirroring how the spec, the Python reference's type layout,
7
+ * and the zarr-extensions registry are organized. This module only walks
8
+ * documents: extract shape, ask each content module for its verdicts,
9
+ * thread the chunk-size context into codec pipelines, and descend into a
10
+ * group's inline consolidated entries.
3
11
  *
4
- * The structural validators never interpret what an extension point names;
5
- * this module deliberately interprets a small set of WELL-KNOWN core
6
- * extension points to enforce the cross-field rules the specs state in
7
- * prose:
8
- *
9
- * - the `regular` chunk grid REQUIRES a configuration with `chunk_shape`,
10
- * which has one length per dimension of `shape`;
11
- * - the `rectilinear` chunk grid requires a configuration with `kind` and
12
- * `chunk_shapes`; `chunk_shapes` has one entry per dimension, and each
13
- * explicit chunk list (integers and `[size, count]` run-length pairs)
14
- * sums exactly to that dimension's length (the bare-integer uniform
15
- * shorthand carries no sum constraint, like the regular grid);
16
- * - a `transpose` codec requires a configuration with `order`, a
17
- * permutation of `0..n-1` with one entry per array dimension;
18
- * - a `sharding_indexed` codec requires a configuration with
19
- * `chunk_shape`, `codecs`, and `index_codecs`; its inner `chunk_shape`
20
- * matches the array's
21
- * dimensionality and evenly divides every chunk it shards — the grid's
22
- * chunk at the top level (each distinct per-dimension size, for
23
- * rectilinear grids), the parent shard's inner chunk when sharding
24
- * nests;
25
- * - `fill_value` has a JSON shape permitted for the named core data type
26
- * (booleans for `bool`, ranged integers for the int types, numbers /
27
- * the "NaN"-family sentinels / width-checked "0x…" strings for the
28
- * float types, two-element arrays for the complex types).
29
- *
30
- * Dimensional context is THREADED through codec pipelines rather than
31
- * assumed constant (mirroring zarr-python's chunk-spec threading): a valid
32
- * `transpose` permutes the per-dimension chunk sizes for the codecs after
33
- * it, and any codec this layer cannot reason about — `reshape` may change
34
- * a chunk's rank, and unknown codecs may do anything — invalidates the
35
- * dimensional context for the rest of the pipeline instead of letting
36
- * stale array-level facts produce false verdicts.
37
- *
38
- * Required-configuration rules cover ONLY the names this layer interprets
39
- * (the two grids, transpose, sharding). Other extensions' required fields
40
- * are registry-schema facts — the editor's registry layer enforces them
41
- * from the vendored schemas, and duplicating that knowledge here as
42
- * hardcoded rules would drift. Unrecognized names are skipped everywhere —
43
- * the extension name space is open, and a rule that guessed would lie. This layer has no counterpart
12
+ * Unrecognized names are skipped everywhere — the extension name space is
13
+ * open, and a rule that guessed would lie. This layer has no counterpart
44
14
  * in the Python reference implementation (which stops at structure), so it
45
15
  * is covered by this package's own tests rather than the conformance
46
- * corpus.
16
+ * corpus. The structural document layer (validation.ts) stays
17
+ * content-agnostic and corpus-governed; it never reads the content
18
+ * modules.
47
19
  */
48
20
  import { type ErrorTree } from "./errors.js";
49
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAoB,MAAM,aAAa,CAAC;AAiavE;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAElE;AA0BD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAE7D"}
1
+ {"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAU,KAAK,SAAS,EAAoB,MAAM,aAAa,CAAC;AA4BvE;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAElE;AA0BD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAE7D"}
package/dist/semantics.js CHANGED
@@ -1,422 +1,34 @@
1
1
  /**
2
- * Semantic (cross-field) validation for v3 array metadata.
2
+ * Semantic (cross-field) validation for v3 array metadata: the
3
+ * orchestrator. The rules themselves live with their content —
4
+ * `chunk-grids.ts`, `codecs.ts`, and `data-types.ts` each hold the syntax
5
+ * (types) and semantics (procedures) for the names this package
6
+ * interprets, mirroring how the spec, the Python reference's type layout,
7
+ * and the zarr-extensions registry are organized. This module only walks
8
+ * documents: extract shape, ask each content module for its verdicts,
9
+ * thread the chunk-size context into codec pipelines, and descend into a
10
+ * group's inline consolidated entries.
3
11
  *
4
- * The structural validators never interpret what an extension point names;
5
- * this module deliberately interprets a small set of WELL-KNOWN core
6
- * extension points to enforce the cross-field rules the specs state in
7
- * prose:
8
- *
9
- * - the `regular` chunk grid REQUIRES a configuration with `chunk_shape`,
10
- * which has one length per dimension of `shape`;
11
- * - the `rectilinear` chunk grid requires a configuration with `kind` and
12
- * `chunk_shapes`; `chunk_shapes` has one entry per dimension, and each
13
- * explicit chunk list (integers and `[size, count]` run-length pairs)
14
- * sums exactly to that dimension's length (the bare-integer uniform
15
- * shorthand carries no sum constraint, like the regular grid);
16
- * - a `transpose` codec requires a configuration with `order`, a
17
- * permutation of `0..n-1` with one entry per array dimension;
18
- * - a `sharding_indexed` codec requires a configuration with
19
- * `chunk_shape`, `codecs`, and `index_codecs`; its inner `chunk_shape`
20
- * matches the array's
21
- * dimensionality and evenly divides every chunk it shards — the grid's
22
- * chunk at the top level (each distinct per-dimension size, for
23
- * rectilinear grids), the parent shard's inner chunk when sharding
24
- * nests;
25
- * - `fill_value` has a JSON shape permitted for the named core data type
26
- * (booleans for `bool`, ranged integers for the int types, numbers /
27
- * the "NaN"-family sentinels / width-checked "0x…" strings for the
28
- * float types, two-element arrays for the complex types).
29
- *
30
- * Dimensional context is THREADED through codec pipelines rather than
31
- * assumed constant (mirroring zarr-python's chunk-spec threading): a valid
32
- * `transpose` permutes the per-dimension chunk sizes for the codecs after
33
- * it, and any codec this layer cannot reason about — `reshape` may change
34
- * a chunk's rank, and unknown codecs may do anything — invalidates the
35
- * dimensional context for the rest of the pipeline instead of letting
36
- * stale array-level facts produce false verdicts.
37
- *
38
- * Required-configuration rules cover ONLY the names this layer interprets
39
- * (the two grids, transpose, sharding). Other extensions' required fields
40
- * are registry-schema facts — the editor's registry layer enforces them
41
- * from the vendored schemas, and duplicating that knowledge here as
42
- * hardcoded rules would drift. Unrecognized names are skipped everywhere —
43
- * the extension name space is open, and a rule that guessed would lie. This layer has no counterpart
12
+ * Unrecognized names are skipped everywhere — the extension name space is
13
+ * open, and a rule that guessed would lie. This layer has no counterpart
44
14
  * in the Python reference implementation (which stops at structure), so it
45
15
  * is covered by this package's own tests rather than the conformance
46
- * corpus.
16
+ * corpus. The structural document layer (validation.ts) stays
17
+ * content-agnostic and corpus-governed; it never reads the content
18
+ * modules.
47
19
  */
20
+ import { chunkGridVerdict } from "./chunk-grids.js";
21
+ import { pipelineIssues } from "./codecs.js";
22
+ import { fillValueIssue } from "./data-types.js";
48
23
  import { treeOf } from "./errors.js";
49
- function isPlainObject(value) {
50
- if (typeof value !== "object" || value === null || Array.isArray(value))
51
- return false;
52
- const proto = Object.getPrototypeOf(value);
53
- return proto === null || proto === Object.prototype;
54
- }
55
- function isIntArray(value) {
56
- return (Array.isArray(value) &&
57
- Object.keys(value).length === value.length &&
58
- value.every((item) => Number.isInteger(item)));
59
- }
60
- /** The `{name, configuration}` of a metadata field, when extractable. */
61
- function fieldParts(field) {
62
- if (typeof field === "string")
63
- return { name: field, configuration: undefined };
64
- if (isPlainObject(field) && typeof field["name"] === "string") {
65
- const configuration = field["configuration"];
66
- return {
67
- name: field["name"],
68
- configuration: isPlainObject(configuration) ? configuration : undefined,
69
- };
70
- }
71
- return undefined;
72
- }
73
- // --- fill_value vs data_type ----------------------------------------------
74
- const INT_RANGES = {
75
- int8: [-128, 127],
76
- int16: [-32768, 32767],
77
- int32: [-2147483648, 2147483647],
78
- int64: [-9223372036854775808, 9223372036854775807],
79
- uint8: [0, 255],
80
- uint16: [0, 65535],
81
- uint32: [0, 4294967295],
82
- uint64: [0, 18446744073709551615],
83
- };
84
- const FLOAT_HEX_DIGITS = {
85
- float16: 4,
86
- float32: 8,
87
- float64: 16,
88
- };
89
- /** Hex digit width of each complex type's component floats. */
90
- const COMPLEX_COMPONENT_HEX_DIGITS = {
91
- complex64: 8,
92
- complex128: 16,
93
- };
94
- function isFloatFill(value, hexDigits) {
95
- if (typeof value === "number")
96
- return true;
97
- if (typeof value !== "string")
98
- return false;
99
- if (value === "NaN" || value === "Infinity" || value === "-Infinity")
100
- return true;
101
- return new RegExp(`^0x[0-9a-fA-F]{${hexDigits}}$`).test(value);
102
- }
103
- function floatFillMessage(name, hexDigits) {
104
- return (`expected a number, "NaN", "Infinity", "-Infinity", or a ` +
105
- `${hexDigits}-hex-digit "0x..." string for data type ${JSON.stringify(name)}`);
106
- }
107
- /** The fill_value issue for a KNOWN core data type, if any; undefined otherwise. */
108
- function fillValueIssue(dataTypeName, fill) {
109
- if (dataTypeName === "bool") {
110
- return typeof fill === "boolean"
111
- ? undefined
112
- : 'expected a boolean fill value for data type "bool"';
113
- }
114
- const intRange = INT_RANGES[dataTypeName];
115
- if (intRange !== undefined) {
116
- const [low, high] = intRange;
117
- return Number.isInteger(fill) && fill >= low && fill <= high
118
- ? undefined
119
- : `expected an integer in [${low}, ${high}] for data type ${JSON.stringify(dataTypeName)}`;
120
- }
121
- const floatDigits = FLOAT_HEX_DIGITS[dataTypeName];
122
- if (floatDigits !== undefined) {
123
- return isFloatFill(fill, floatDigits)
124
- ? undefined
125
- : floatFillMessage(dataTypeName, floatDigits);
126
- }
127
- const complexDigits = COMPLEX_COMPONENT_HEX_DIGITS[dataTypeName];
128
- if (complexDigits !== undefined) {
129
- const ok = Array.isArray(fill) &&
130
- fill.length === 2 &&
131
- fill.every((part) => isFloatFill(part, complexDigits));
132
- return ok
133
- ? undefined
134
- : `expected a two-element [real, imaginary] array for data type ${JSON.stringify(dataTypeName)}`;
135
- }
136
- return undefined; // unrecognized data type: no verdict
137
- }
138
- // --- codec pipelines (transpose / sharding) --------------------------------
139
- function isPermutation(order) {
140
- const seen = new Set(order);
141
- return seen.size === order.length && order.every((entry) => entry >= 0 && entry < order.length);
142
- }
143
- /**
144
- * Walk one codec pipeline. `dims` is the array dimensionality at this point
145
- * (undefined when unknowable); `outerChunkSizes` holds the distinct chunk
146
- * lengths per dimension this pipeline may encode — what a sharding codec's
147
- * inner chunks must divide. A regular grid contributes one size per
148
- * dimension; a rectilinear grid may contribute several.
149
- */
150
- function pipelineIssues(pipeline, path, initialDims, initialChunkSizes) {
151
- const issues = [];
152
- // The dimensional context THREADS through the pipeline: transpose permutes
153
- // it, and anything this layer cannot reason about invalidates it for the
154
- // remaining codecs.
155
- let dims = initialDims;
156
- let chunkSizes = initialChunkSizes;
157
- const dropContext = () => {
158
- dims = undefined;
159
- chunkSizes = undefined;
160
- };
161
- pipeline.forEach((entry, index) => {
162
- const parts = fieldParts(entry);
163
- if (parts === undefined) {
164
- dropContext(); // structurally invalid entry: no further reasoning
165
- return;
166
- }
167
- const { name, configuration } = parts;
168
- // Whether the entry genuinely lacks a configuration member (a malformed
169
- // one is the structural layer's complaint, not ours).
170
- const configMissing = typeof entry === "string" ||
171
- (isPlainObject(entry) && !Object.hasOwn(entry, "configuration"));
172
- if (name === "transpose") {
173
- if (configMissing) {
174
- issues.push({
175
- path: [...path, index],
176
- message: '"transpose" requires a configuration with "order"',
177
- kind: "missing_key",
178
- });
179
- dropContext();
180
- return;
181
- }
182
- if (configuration !== undefined && !Object.hasOwn(configuration, "order")) {
183
- issues.push({
184
- path: [...path, index, "configuration", "order"],
185
- message: "missing required key",
186
- kind: "missing_key",
187
- });
188
- dropContext();
189
- return;
190
- }
191
- const order = configuration?.["order"];
192
- if (!isIntArray(order)) {
193
- dropContext(); // shape errors are the schema layer's
194
- return;
195
- }
196
- const orderPath = [...path, index, "configuration", "order"];
197
- let sound = true;
198
- if (!isPermutation(order)) {
199
- sound = false;
200
- issues.push({
201
- path: orderPath,
202
- message: `expected a permutation of the integers 0..${order.length - 1}`,
203
- kind: "invalid_value",
204
- });
205
- }
206
- if (dims !== undefined && order.length !== dims) {
207
- sound = false;
208
- issues.push({
209
- path: orderPath,
210
- message: `expected one entry per array dimension (${dims})`,
211
- kind: "invalid_value",
212
- });
213
- }
214
- if (!sound) {
215
- dropContext();
216
- }
217
- else if (chunkSizes !== undefined) {
218
- const sizes = chunkSizes;
219
- chunkSizes =
220
- order.length === sizes.length
221
- ? order.map((axis) => sizes[axis])
222
- : undefined;
223
- }
224
- }
225
- else if (name === "sharding_indexed") {
226
- if (configMissing) {
227
- issues.push({
228
- path: [...path, index],
229
- message: '"sharding_indexed" requires a configuration with "chunk_shape", "codecs", and "index_codecs"',
230
- kind: "missing_key",
231
- });
232
- dropContext();
233
- return;
234
- }
235
- if (configuration !== undefined) {
236
- for (const key of ["chunk_shape", "codecs", "index_codecs"]) {
237
- if (!Object.hasOwn(configuration, key)) {
238
- issues.push({
239
- path: [...path, index, "configuration", key],
240
- message: "missing required key",
241
- kind: "missing_key",
242
- });
243
- }
244
- }
245
- }
246
- const chunkShape = configuration?.["chunk_shape"];
247
- if (!isIntArray(chunkShape)) {
248
- // Still walk a present inner pipeline (entries deserve their own
249
- // verdicts) before the context becomes unknowable.
250
- const inner = configuration?.["codecs"];
251
- if (Array.isArray(inner)) {
252
- issues.push(...pipelineIssues(inner, [...path, index, "configuration", "codecs"], undefined, undefined));
253
- }
254
- dropContext();
255
- return;
256
- }
257
- const chunkShapePath = [...path, index, "configuration", "chunk_shape"];
258
- if (dims !== undefined && chunkShape.length !== dims) {
259
- issues.push({
260
- path: chunkShapePath,
261
- message: `expected one length per array dimension (${dims})`,
262
- kind: "invalid_value",
263
- });
264
- }
265
- else if (chunkSizes !== undefined &&
266
- chunkShape.length === chunkSizes.length &&
267
- chunkShape.every((length) => length > 0)) {
268
- let violation;
269
- chunkSizes.forEach((sizes, axis) => {
270
- if (violation !== undefined)
271
- return;
272
- const bad = sizes.find((size) => size % chunkShape[axis] !== 0);
273
- if (bad !== undefined)
274
- violation = { axis, size: bad };
275
- });
276
- if (violation !== undefined) {
277
- const { axis, size } = violation;
278
- const sizesNow = chunkSizes;
279
- const uniform = sizesNow.every((sizes) => sizes.length === 1);
280
- issues.push({
281
- path: chunkShapePath,
282
- message: uniform
283
- ? `expected ${JSON.stringify(chunkShape)} to evenly divide the outer chunk shape ${JSON.stringify(sizesNow.map((sizes) => sizes[0]))}`
284
- : `expected ${JSON.stringify(chunkShape)} to evenly divide every chunk size of the grid (dimension ${axis} has chunk size ${size})`,
285
- kind: "invalid_value",
286
- });
287
- }
288
- }
289
- const inner = configuration?.["codecs"];
290
- if (Array.isArray(inner)) {
291
- issues.push(...pipelineIssues(inner, [...path, index, "configuration", "codecs"], chunkShape.length, chunkShape.map((length) => [length])));
292
- }
293
- // index_codecs encode the shard index, whose shape differs from the
294
- // array's — no dimensional context applies there. After the
295
- // array -> bytes boundary the dimensional context is spent.
296
- dropContext();
297
- }
298
- else {
299
- // A codec this layer cannot reason about (reshape may change a
300
- // chunk's rank; unknown codecs may do anything): stale array-level
301
- // facts must not judge the codecs after it.
302
- dropContext();
303
- }
304
- });
305
- return issues;
306
- }
24
+ import { fieldParts, isIntArray, isPlainObject } from "./guards.js";
307
25
  function arraySemanticsIssues(value) {
308
26
  if (!isPlainObject(value) || value["node_type"] !== "array")
309
27
  return [];
310
28
  const issues = [];
311
29
  const shape = isIntArray(value["shape"]) ? value["shape"] : undefined;
312
- const dims = shape?.length;
313
- const rawGrid = value["chunk_grid"];
314
- const grid = fieldParts(rawGrid);
315
- // Whether the field genuinely lacks a configuration member (a malformed
316
- // one — configuration: 5 — is the structural layer's complaint, not ours).
317
- const configMissing = typeof rawGrid === "string" ||
318
- (isPlainObject(rawGrid) && !Object.hasOwn(rawGrid, "configuration"));
319
- let chunkSizes;
320
- if (grid?.name === "regular") {
321
- if (configMissing) {
322
- issues.push({
323
- path: ["chunk_grid"],
324
- message: '"regular" requires a configuration with "chunk_shape"',
325
- kind: "missing_key",
326
- });
327
- }
328
- else if (grid.configuration !== undefined && !Object.hasOwn(grid.configuration, "chunk_shape")) {
329
- issues.push({
330
- path: ["chunk_grid", "configuration", "chunk_shape"],
331
- message: "missing required key",
332
- kind: "missing_key",
333
- });
334
- }
335
- const configured = grid.configuration?.["chunk_shape"];
336
- if (isIntArray(configured)) {
337
- if (dims !== undefined && configured.length !== dims) {
338
- issues.push({
339
- path: ["chunk_grid", "configuration", "chunk_shape"],
340
- message: `expected one length per dimension of shape (${dims})`,
341
- kind: "invalid_value",
342
- });
343
- // wrong arity: unusable as division context
344
- }
345
- else {
346
- chunkSizes = configured.map((length) => [length]);
347
- }
348
- }
349
- }
350
- else if (grid?.name === "rectilinear") {
351
- if (configMissing) {
352
- issues.push({
353
- path: ["chunk_grid"],
354
- message: '"rectilinear" requires a configuration with "kind" and "chunk_shapes"',
355
- kind: "missing_key",
356
- });
357
- }
358
- else if (grid.configuration !== undefined) {
359
- for (const key of ["kind", "chunk_shapes"]) {
360
- if (!Object.hasOwn(grid.configuration, key)) {
361
- issues.push({
362
- path: ["chunk_grid", "configuration", key],
363
- message: "missing required key",
364
- kind: "missing_key",
365
- });
366
- }
367
- }
368
- }
369
- const specs = grid.configuration?.["chunk_shapes"];
370
- if (Array.isArray(specs)) {
371
- if (dims !== undefined && specs.length !== dims) {
372
- issues.push({
373
- path: ["chunk_grid", "configuration", "chunk_shapes"],
374
- message: `expected one entry per dimension of shape (${dims})`,
375
- kind: "invalid_value",
376
- });
377
- }
378
- else {
379
- const perDim = specs.map((spec, dim) => {
380
- // Bare integer: uniform shorthand, no sum constraint (edge chunks
381
- // are permitted, as with the regular grid).
382
- if (Number.isInteger(spec))
383
- return spec > 0 ? [spec] : undefined;
384
- if (!Array.isArray(spec))
385
- return undefined; // registry schema's problem
386
- const sizes = new Set();
387
- let total = 0;
388
- for (const entry of spec) {
389
- if (Number.isInteger(entry)) {
390
- sizes.add(entry);
391
- total += entry;
392
- }
393
- else if (Array.isArray(entry) &&
394
- entry.length === 2 &&
395
- Number.isInteger(entry[0]) &&
396
- Number.isInteger(entry[1])) {
397
- sizes.add(entry[0]);
398
- total += entry[0] * entry[1];
399
- }
400
- else {
401
- return undefined; // malformed entry: registry schema's problem
402
- }
403
- }
404
- const extent = shape?.[dim];
405
- if (extent !== undefined && total !== extent) {
406
- issues.push({
407
- path: ["chunk_grid", "configuration", "chunk_shapes", dim],
408
- message: `expected chunk sizes summing to ${extent} along dimension ${dim}, got ${total}`,
409
- kind: "invalid_value",
410
- });
411
- }
412
- return [...sizes];
413
- });
414
- if (perDim.every((sizes) => sizes !== undefined)) {
415
- chunkSizes = perDim;
416
- }
417
- }
418
- }
419
- }
30
+ const grid = chunkGridVerdict(value["chunk_grid"], shape);
31
+ issues.push(...grid.issues.map((issue) => ({ ...issue, path: ["chunk_grid", ...issue.path] })));
420
32
  const dataType = fieldParts(value["data_type"]);
421
33
  if (dataType !== undefined && "fill_value" in value) {
422
34
  const message = fillValueIssue(dataType.name, value["fill_value"]);
@@ -426,7 +38,7 @@ function arraySemanticsIssues(value) {
426
38
  }
427
39
  const codecs = value["codecs"];
428
40
  if (Array.isArray(codecs)) {
429
- issues.push(...pipelineIssues(codecs, ["codecs"], dims, chunkSizes));
41
+ issues.push(...pipelineIssues(codecs, ["codecs"], shape?.length, grid.chunkSizes));
430
42
  }
431
43
  return issues;
432
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"semantics.js","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantics.js","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zarr-metadata",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Spec-defined metadata types and validators for Zarr v2 and v3.",
5
5
  "license": "MIT",
6
6
  "type": "module",