@patterkit/core 0.2.0 → 0.2.1

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/dist/index.cjs CHANGED
@@ -460,6 +460,21 @@ function checkDecls(decls, where, issues) {
460
460
  message: `${where}: '${decl.name}' is ${decl.type} but declares no values`
461
461
  });
462
462
  }
463
+ if (decl.type === "quality") {
464
+ const stages = decl.stages ?? [];
465
+ if (stages.length < 2) {
466
+ issues.push({
467
+ code: "invalid-declaration",
468
+ message: `${where}: '${decl.name}' is a quality but declares ${stages.length === 0 ? "no stages" : "only one stage"} (a ladder needs at least two)`
469
+ });
470
+ }
471
+ const seenStages = /* @__PURE__ */ new Set();
472
+ for (const s of stages) {
473
+ if (!s.trim()) issues.push({ code: "invalid-declaration", message: `${where}: '${decl.name}' has an empty stage name` });
474
+ else if (seenStages.has(s)) issues.push({ code: "invalid-declaration", message: `${where}: '${decl.name}' declares stage '${s}' more than once` });
475
+ else seenStages.add(s);
476
+ }
477
+ }
463
478
  if (decl.default !== void 0 && !defaultMatchesType(decl.default, decl)) {
464
479
  issues.push({
465
480
  code: "invalid-declaration",
@@ -480,6 +495,8 @@ function defaultMatchesType(value, decl) {
480
495
  return typeof value === "string" && (decl.values?.includes(value) ?? true);
481
496
  case "flags":
482
497
  return Array.isArray(value) && value.every((v) => typeof v === "string" && (decl.values?.includes(v) ?? true));
498
+ case "quality":
499
+ return typeof value === "string" && (decl.stages?.includes(value) ?? true);
483
500
  }
484
501
  }
485
502
  // Annotate the CommonJS export names for ESM import in node:
package/dist/index.js CHANGED
@@ -415,6 +415,21 @@ function checkDecls(decls, where, issues) {
415
415
  message: `${where}: '${decl.name}' is ${decl.type} but declares no values`
416
416
  });
417
417
  }
418
+ if (decl.type === "quality") {
419
+ const stages = decl.stages ?? [];
420
+ if (stages.length < 2) {
421
+ issues.push({
422
+ code: "invalid-declaration",
423
+ message: `${where}: '${decl.name}' is a quality but declares ${stages.length === 0 ? "no stages" : "only one stage"} (a ladder needs at least two)`
424
+ });
425
+ }
426
+ const seenStages = /* @__PURE__ */ new Set();
427
+ for (const s of stages) {
428
+ if (!s.trim()) issues.push({ code: "invalid-declaration", message: `${where}: '${decl.name}' has an empty stage name` });
429
+ else if (seenStages.has(s)) issues.push({ code: "invalid-declaration", message: `${where}: '${decl.name}' declares stage '${s}' more than once` });
430
+ else seenStages.add(s);
431
+ }
432
+ }
418
433
  if (decl.default !== void 0 && !defaultMatchesType(decl.default, decl)) {
419
434
  issues.push({
420
435
  code: "invalid-declaration",
@@ -435,6 +450,8 @@ function defaultMatchesType(value, decl) {
435
450
  return typeof value === "string" && (decl.values?.includes(value) ?? true);
436
451
  case "flags":
437
452
  return Array.isArray(value) && value.every((v) => typeof v === "string" && (decl.values?.includes(v) ?? true));
453
+ case "quality":
454
+ return typeof value === "string" && (decl.stages?.includes(value) ?? true);
438
455
  }
439
456
  }
440
457
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patterkit/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Patter core: stable id generation, readable-handle computation, canonical (de)serialisation, and the structural validator.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -34,7 +34,7 @@
34
34
  "build": "tsup src/index.ts --format esm,cjs --dts --clean"
35
35
  },
36
36
  "dependencies": {
37
- "@patterkit/model": "0.3.0",
37
+ "@patterkit/model": "0.4.0",
38
38
  "json5": "^2.2.3"
39
39
  }
40
40
  }