@metaobjectsdev/metadata 1.0.0-rc.4 → 1.0.0-rc.6

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.
@@ -8,6 +8,35 @@ export declare const RESERVED_KEY_CHILDREN = "children";
8
8
  /** attr-child-node body key carrying the typed value. */
9
9
  export declare const RESERVED_KEY_VALUE = "value";
10
10
  export declare const RESERVED_KEYS: Set<string>;
11
+ /**
12
+ * The reserved structural keywords that can NEVER be an attribute, mapped to the
13
+ * native accessor that answers the same question.
14
+ *
15
+ * `value` is deliberately absent: an `attr` node stores its own typed payload under
16
+ * that key and reads it back with `ownAttr(RESERVED_KEY_VALUE)`, which is the one
17
+ * legitimate reserved-key attr read in the model.
18
+ */
19
+ export declare const STRUCTURAL_KEYWORD_ACCESSORS: ReadonlyMap<string, string>;
20
+ /**
21
+ * Refuse an attribute lookup for a reserved structural keyword.
22
+ *
23
+ * These names are NATIVE PROPERTIES, not attributes: `@isArray` and friends are
24
+ * rejected at the load with ERR_RESERVED_ATTR, so no document can ever set one and
25
+ * the lookup can only ever answer `undefined`. That answer is indistinguishable
26
+ * from "the author did not set that attribute", which is what made this silent.
27
+ *
28
+ * It was not hypothetical. An adopter's own generator typed a field as
29
+ * `f.attr("isArray") === true ? base + "[]" : base`, and the reference document it
30
+ * generated — the one bot authors read — described ALL 31 of that model's array
31
+ * fields as scalars. Its sibling module had used the resolving accessor since the
32
+ * day it was written, with a comment naming the trap, and nothing compared the two.
33
+ * The file's own header taught the rule fourteen lines above the violation: prose
34
+ * is not a gate.
35
+ *
36
+ * A throw rather than a warning because there is no reading under which this call
37
+ * is correct, and the fix is one line at the call site.
38
+ */
39
+ export declare function assertNotStructuralKeyword(name: string, accessor: string): void;
11
40
  export declare const JSON_KEY_SCHEMA = "$schema";
12
41
  export declare const ATTR_PREFIX = "@";
13
42
  /** Separator fusing type and subType in a node's wrapper key (`object.entity`). */
@@ -1 +1 @@
1
- {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAMH,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
1
+ {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAGH;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAQnE,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ/E;AAMD,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
@@ -25,6 +25,50 @@ export const RESERVED_KEYS = new Set([
25
25
  RESERVED_KEY_CHILDREN,
26
26
  RESERVED_KEY_VALUE,
27
27
  ]);
28
+ /**
29
+ * The reserved structural keywords that can NEVER be an attribute, mapped to the
30
+ * native accessor that answers the same question.
31
+ *
32
+ * `value` is deliberately absent: an `attr` node stores its own typed payload under
33
+ * that key and reads it back with `ownAttr(RESERVED_KEY_VALUE)`, which is the one
34
+ * legitimate reserved-key attr read in the model.
35
+ */
36
+ export const STRUCTURAL_KEYWORD_ACCESSORS = new Map([
37
+ [RESERVED_KEY_NAME, "the `.name` property"],
38
+ [RESERVED_KEY_PACKAGE, "the `.package` property (or effectivePackage(node) for the file-default fold)"],
39
+ [RESERVED_KEY_EXTENDS, "the `.superData` property"],
40
+ [RESERVED_KEY_ABSTRACT, "the `.isAbstract` property"],
41
+ [RESERVED_KEY_OVERLAY, "the node's overlay flag"],
42
+ [RESERVED_KEY_IS_ARRAY, "`.resolvedIsArray()` (NOT the `.isArray` own flag — that one drops what `extends` contributes)"],
43
+ [RESERVED_KEY_CHILDREN, "`.children()`"],
44
+ ]);
45
+ /**
46
+ * Refuse an attribute lookup for a reserved structural keyword.
47
+ *
48
+ * These names are NATIVE PROPERTIES, not attributes: `@isArray` and friends are
49
+ * rejected at the load with ERR_RESERVED_ATTR, so no document can ever set one and
50
+ * the lookup can only ever answer `undefined`. That answer is indistinguishable
51
+ * from "the author did not set that attribute", which is what made this silent.
52
+ *
53
+ * It was not hypothetical. An adopter's own generator typed a field as
54
+ * `f.attr("isArray") === true ? base + "[]" : base`, and the reference document it
55
+ * generated — the one bot authors read — described ALL 31 of that model's array
56
+ * fields as scalars. Its sibling module had used the resolving accessor since the
57
+ * day it was written, with a comment naming the trap, and nothing compared the two.
58
+ * The file's own header taught the rule fourteen lines above the violation: prose
59
+ * is not a gate.
60
+ *
61
+ * A throw rather than a warning because there is no reading under which this call
62
+ * is correct, and the fix is one line at the call site.
63
+ */
64
+ export function assertNotStructuralKeyword(name, accessor) {
65
+ const native = STRUCTURAL_KEYWORD_ACCESSORS.get(name);
66
+ if (native === undefined)
67
+ return;
68
+ throw new Error(`${accessor}(${JSON.stringify(name)}): '${name}' is a reserved structural keyword, ` +
69
+ `not an attribute — '@${name}' fails the load with ERR_RESERVED_ATTR, so this ` +
70
+ `lookup can only ever return undefined. Read ${native} instead.`);
71
+ }
28
72
  // ---------------------------------------------------------------------------
29
73
  // JSON document special keys (top-level, ignored during wrapper-key detection)
30
74
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,0BAA0B;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,8BAA8B;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,8CAA8C;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,CAAE,8BAA8B;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAC3C,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,0BAA0B;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,8BAA8B;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,8CAA8C;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,CAAE,8BAA8B;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAC3C,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC,CAAC;AAGH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAgC,IAAI,GAAG,CAAC;IAC/E,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAC3C,CAAC,oBAAoB,EAAE,+EAA+E,CAAC;IACvG,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;IACnD,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;IACrD,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;IACjD,CAAC,qBAAqB,EAAE,gGAAgG,CAAC;IACzH,CAAC,qBAAqB,EAAE,eAAe,CAAC;CACzC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,QAAgB;IACvE,MAAM,MAAM,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO;IACjC,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,sCAAsC;QAClF,wBAAwB,IAAI,mDAAmD;QAC/E,+CAA+C,MAAM,WAAW,CACnE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC"}
@@ -14,6 +14,28 @@ export interface RewriteRefusal extends RetirementNote {
14
14
  readonly value?: string;
15
15
  readonly line: number;
16
16
  }
17
+ /**
18
+ * The refusal for an authored `<type>.base`, or `undefined` when `typeKey` is not one.
19
+ *
20
+ * Shared by BOTH rewriters. Their detection legitimately differs — one walks JSON key
21
+ * ranges, the other YAML node spans — but the verdict does not, and the `why` plus the
22
+ * migration path were spelled out twice, byte-identically, in two files. A message an
23
+ * adopter reads is a contract: two copies are two places for the next wording or the next
24
+ * guide path to reach one and not the other, and the reader has no way to tell which arm
25
+ * answered them.
26
+ *
27
+ * `line` is deliberately NOT returned. It is the one part that genuinely differs between
28
+ * the arms (a JSON key index vs a YAML span start), so each caller supplies its own.
29
+ *
30
+ * An authored `base` is a LOAD ERROR, not a retirement — the anchor was never authorable,
31
+ * and three of five ports accepted it anyway until 1.0. It is reported here for the same
32
+ * reason retired subtypes are: `meta upgrade` is the command an adopter runs to ask "what
33
+ * does the new version need me to change?", and answering "nothing" about the change the
34
+ * migration guide LEADS WITH is worse than not being asked. It is a REFUSAL rather than a
35
+ * rewrite because choosing the concrete subtype is a decision about what the node IS,
36
+ * which no rewriter can make.
37
+ */
38
+ export declare function authoredBaseRefusal(typeKey: string, abstractAnchorTypes: readonly string[] | undefined): Omit<RewriteRefusal, "line"> | undefined;
17
39
  export interface RewriteResult {
18
40
  readonly text: string;
19
41
  readonly changes: readonly RewriteChange[];
@@ -22,6 +44,17 @@ export interface RewriteResult {
22
44
  export interface RewriteOpts {
23
45
  /** Only apply retirements at or before this version. */
24
46
  readonly maxVersion?: string;
47
+ /**
48
+ * Types whose `<type>.base` is an ABSTRACT ANCHOR, so authoring one is a load error
49
+ * (`ERR_ABSTRACT_SUBTYPE_AUTHORED`). Supplied by the CALLER rather than derived here,
50
+ * because this module is deliberately registry-free — and the fact is a registry
51
+ * question: `base` is an anchor exactly when the type registers some OTHER subtype for
52
+ * it to anchor, which a third-party provider's base-only type does not.
53
+ *
54
+ * Omitted ⇒ no anchor refusals, which is the honest default for a caller that cannot
55
+ * say. `meta upgrade` supplies the core set.
56
+ */
57
+ readonly abstractAnchorTypes?: readonly string[];
25
58
  }
26
59
  /**
27
60
  * Rewrite retired vocabulary in one raw canonical-JSON metadata document.
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary-rewrite.d.ts","sourceRoot":"","sources":["../src/vocabulary-rewrite.ts"],"names":[],"mappings":"AAwDA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD;yFACqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAoOD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,aAAa,CA+IrF"}
1
+ {"version":3,"file":"vocabulary-rewrite.d.ts","sourceRoot":"","sources":["../src/vocabulary-rewrite.ts"],"names":[],"mappings":"AAwDA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD;yFACqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACjD,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,SAAS,CAY1C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;OASG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAoOD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,aAAa,CAwJrF"}
@@ -53,6 +53,41 @@
53
53
  // believe the migration finished.
54
54
  import { ATTR_CONTRADICTIONS, contradictionScopeMatches } from "./attr-contradictions.js";
55
55
  import { RETIRED_VOCABULARY, note, scopeMatches, } from "./retired-vocabulary.js";
56
+ /**
57
+ * The refusal for an authored `<type>.base`, or `undefined` when `typeKey` is not one.
58
+ *
59
+ * Shared by BOTH rewriters. Their detection legitimately differs — one walks JSON key
60
+ * ranges, the other YAML node spans — but the verdict does not, and the `why` plus the
61
+ * migration path were spelled out twice, byte-identically, in two files. A message an
62
+ * adopter reads is a contract: two copies are two places for the next wording or the next
63
+ * guide path to reach one and not the other, and the reader has no way to tell which arm
64
+ * answered them.
65
+ *
66
+ * `line` is deliberately NOT returned. It is the one part that genuinely differs between
67
+ * the arms (a JSON key index vs a YAML span start), so each caller supplies its own.
68
+ *
69
+ * An authored `base` is a LOAD ERROR, not a retirement — the anchor was never authorable,
70
+ * and three of five ports accepted it anyway until 1.0. It is reported here for the same
71
+ * reason retired subtypes are: `meta upgrade` is the command an adopter runs to ask "what
72
+ * does the new version need me to change?", and answering "nothing" about the change the
73
+ * migration guide LEADS WITH is worse than not being asked. It is a REFUSAL rather than a
74
+ * rewrite because choosing the concrete subtype is a decision about what the node IS,
75
+ * which no rewriter can make.
76
+ */
77
+ export function authoredBaseRefusal(typeKey, abstractAnchorTypes) {
78
+ const dot = typeKey.lastIndexOf(".");
79
+ if (dot < 0 || typeKey.slice(dot + 1) !== "base")
80
+ return undefined;
81
+ if (!(abstractAnchorTypes ?? []).includes(typeKey.slice(0, dot)))
82
+ return undefined;
83
+ return {
84
+ since: "1.0.0",
85
+ why: `"${typeKey}" may not be authored — every "base" subtype is an abstract registry ` +
86
+ "anchor that concrete subtypes inherit from, with no runtime semantics of its own.",
87
+ migration: "docs/features/migrations/base-subtypes-are-not-authorable.md",
88
+ subject: typeKey,
89
+ };
90
+ }
56
91
  /** `0.24.0` → `[0,24,0]`, for an ordered comparison rather than a string one. */
57
92
  function parts(v) {
58
93
  return v.split(".").map((n) => Number.parseInt(n, 10) || 0);
@@ -297,6 +332,14 @@ export function rewriteDocument(source, opts = {}) {
297
332
  refusals.push({ ...note(entry), subject: r.typeKey, line: lineAt(source, r.keyIndex) });
298
333
  }
299
334
  }
335
+ // An authored `<type>.base` — see authoredBaseRefusal for why this is reported at all.
336
+ // Only the LINE is this arm's own; the verdict is shared with the YAML rewriter.
337
+ for (const r of ranges) {
338
+ const refusal = authoredBaseRefusal(r.typeKey, opts.abstractAnchorTypes);
339
+ if (refusal !== undefined) {
340
+ refusals.push({ ...refusal, line: lineAt(source, r.keyIndex) });
341
+ }
342
+ }
300
343
  // ── Attribute contradictions: two LIVE attrs that may not sit on one node ──
301
344
  //
302
345
  // Matched per NODE, not per occurrence, because the illegal thing is the pair. `ownKeys`
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary-rewrite.js","sourceRoot":"","sources":["../src/vocabulary-rewrite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vocabulary-rewrite.js","sourceRoot":"","sources":["../src/vocabulary-rewrite.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/metadata",
3
- "version": "1.0.0-rc.4",
3
+ "version": "1.0.0-rc.6",
4
4
  "description": "Metamodel loader, types, and constants for the MetaObjects standard.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -42,6 +42,7 @@ import {
42
42
  type RetiredEntry,
43
43
  } from "../retired-vocabulary.js";
44
44
  import type { RewriteChange, RewriteRefusal, RewriteOpts, RewriteResult } from "../vocabulary-rewrite.js";
45
+ import { authoredBaseRefusal } from "../vocabulary-rewrite.js";
45
46
 
46
47
  /**
47
48
  * A rewrite result that can also report "I could not read this file".
@@ -304,6 +305,14 @@ export function rewriteYamlDocument(source: string, opts: RewriteOpts = {}): Yam
304
305
  if (`${entry.type}.${entry.subType}` !== key) continue;
305
306
  refusals.push({ ...note(entry), subject: key, line: lineOf(span.keyStart) });
306
307
  }
308
+ // The SAME verdict as the JSON arm, from the SAME function. The two rewriters walk
309
+ // different structures — JSON key ranges vs YAML node spans — so the DETECTION stays
310
+ // per-arm, but the refusal an adopter reads is one decision and now has one source.
311
+ // Only the line number is this arm's own.
312
+ const baseRefusal = authoredBaseRefusal(key, opts.abstractAnchorTypes);
313
+ if (baseRefusal !== undefined) {
314
+ refusals.push({ ...baseRefusal, line: lineOf(span.keyStart) });
315
+ }
307
316
  return;
308
317
  }
309
318
 
@@ -243,6 +243,30 @@ function abstractSubtypeMessage(type: string): string {
243
243
  );
244
244
  }
245
245
 
246
+ /**
247
+ * The concrete subtypes to offer instead, as ADR-0009 `suggestions[]`.
248
+ *
249
+ * DERIVED from the registry, never a written list: the substitution the migration guide
250
+ * prints for `object.base` is exactly "the other subtypes this type registers", so reading
251
+ * it from the registry means a new subtype appears in the advice the day it is registered,
252
+ * and a removed one stops being suggested. The message alone said "declare a concrete
253
+ * subtype" without ever naming one, so the next step was in a guide the reader had to
254
+ * already know existed.
255
+ */
256
+ function abstractSubtypeSuggestions(type: string, registry: TypeRegistry): string[] {
257
+ const concrete = registry.allSubTypesOf(type).filter((sub) => sub !== SUBTYPE_BASE).sort();
258
+ const out = [
259
+ concrete.length > 0
260
+ ? `declare one of: ${concrete.map((sub) => `"${type}.${sub}"`).join(" | ")}`
261
+ : `declare a concrete "${type}.<subType>"`,
262
+ ];
263
+ out.push(
264
+ "which one is a decision about the node, not a rename — see " +
265
+ "docs/features/migrations/base-subtypes-are-not-authorable.md",
266
+ );
267
+ return out;
268
+ }
269
+
246
270
  // The same rule reached by the OTHER spelling: a BARE wrapper key (`{"field": …}`, no fused
247
271
  // subType) whose registry default resolves to the abstract anchor. The author did not type
248
272
  // `.base`, so this is a MISSING subtype rather than an authored-anchor error — and
@@ -507,6 +531,7 @@ export function buildTree(parsed: unknown, opts: ParseOptions): ParseResult {
507
531
  ? new ParseError(abstractSubtypeMessage(rootType), {
508
532
  code: "ERR_ABSTRACT_SUBTYPE_AUTHORED",
509
533
  source: src,
534
+ suggestions: abstractSubtypeSuggestions(rootType, opts.registry),
510
535
  })
511
536
  : new ParseError(missingSubtypeMessage(rootType), {
512
537
  code: "ERR_MISSING_SUBTYPE",
@@ -1372,6 +1397,7 @@ function processChildren(
1372
1397
  ? new ParseError(abstractSubtypeMessage(childType), {
1373
1398
  code: "ERR_ABSTRACT_SUBTYPE_AUTHORED",
1374
1399
  source: errSource(),
1400
+ suggestions: abstractSubtypeSuggestions(childType, registry),
1375
1401
  })
1376
1402
  : new ParseError(missingSubtypeMessage(childType), {
1377
1403
  code: "ERR_MISSING_SUBTYPE",
@@ -39,7 +39,7 @@ export const UI_DEFINITION: ProviderDefinition = {
39
39
  "asc",
40
40
  "desc"
41
41
  ],
42
- "description": "Default sort direction applied when this field is the default sort field."
42
+ "description": "Direction a sort takes when it names this field but omits the order: a ?sort=<field> with no :order, and a layout.dataGrid whose @defaultSortField names it with no @defaultSortOrder. Defaults to 'asc'."
43
43
  },
44
44
  {
45
45
  "type": "attr",
@@ -96,7 +96,7 @@ export const UI_DEFINITION: ProviderDefinition = {
96
96
  "asc",
97
97
  "desc"
98
98
  ],
99
- "description": "Initial sort direction for the default sort field: 'asc' or 'desc'."
99
+ "description": "Initial sort direction for the default sort field: 'asc' or 'desc'. When omitted, the named field's @sortableDefaultOrder applies."
100
100
  },
101
101
  {
102
102
  "type": "attr",
@@ -89,7 +89,8 @@ export type VocabularyRewrite =
89
89
  readonly otherwise: "drop" | "refuse";
90
90
  };
91
91
 
92
- /** One retirement. `subType: "*"` means every subtype of `type`. */
92
+ /** One retirement. `subType: "*"` means every subtype of `type`; `type: "*"` means
93
+ * every type, which is what a retired COMMON attribute needs. */
93
94
  export interface RetiredEntry extends RetirementNote {
94
95
  readonly type: string;
95
96
  /** `*` for every subtype of `type`, else the exact subtype. */
@@ -109,6 +110,44 @@ const REQUIREMENT_MIGRATION = "docs/features/migrations/verified-by-retirement.m
109
110
  const RETIRED_STATUS_MIGRATION = "docs/features/migrations/retired-status-restore.md";
110
111
  const EMIT_ATTR_MIGRATION = "docs/features/migrations/emit-attrs-to-generator-config.md";
111
112
 
113
+ const FORGE_MIGRATION = "docs/features/migrations/0.x-to-1.0.md";
114
+
115
+ /**
116
+ * The `@forge*` common attributes, deregistered from the DEFAULT provider composition at
117
+ * the 1.0 cut (`forgeTypesProvider` left `defaultLoadMemoryProviders`).
118
+ *
119
+ * They are here so `meta upgrade` NAMES them and points at the migration — and
120
+ * deliberately WITHOUT a `rewrite`, which is the map's way of saying the fix is judgment.
121
+ * That is not conservatism: this vocabulary still LOADS for a project that opts the
122
+ * provider back in (`loadMemory(root, { providers: [forgeTypesProvider] })`, the chartered
123
+ * ADR-0023 escape hatch). An automated strip would therefore destroy valid metadata for
124
+ * exactly the adopters who made that choice deliberately, while the two real options —
125
+ * opt the provider in, or delete the attributes — are a decision only they can make.
126
+ *
127
+ * Before this, three shipped places promised `meta upgrade --apply` would strip them and
128
+ * the tool reported "nothing to rewrite, exit 0" on a project carrying nine such nodes.
129
+ * A migration instruction that silently does nothing is worse than one that refuses.
130
+ */
131
+ const FORGE_ATTRS = [
132
+ "forgeAlternatives", "forgeAppliesTo", "forgeCapturedAt", "forgeCodeAnchors",
133
+ "forgeConfidence", "forgeCounterExamples", "forgeDefinition", "forgeEnforcement",
134
+ "forgeExamples", "forgeLastValidatedCommit", "forgeOccurrences",
135
+ "forgePatternDescription", "forgePrimaryLocation", "forgeRationale", "forgeScope",
136
+ "forgeSeeAlso", "forgeSource", "forgeStatement", "forgeSynonyms", "forgeTerm",
137
+ "forgeWhatWasTried", "forgeWhyItFailed",
138
+ ] as const;
139
+
140
+ const FORGE_ENTRIES: readonly RetiredEntry[] = FORGE_ATTRS.map((attr) => ({
141
+ type: "*", subType: "*", attr,
142
+ since: "1.0.0",
143
+ why: "it was registered by a TypeScript-only provider and appears nowhere in " +
144
+ "expected-registry.json, so one document had two verdicts depending on which " +
145
+ "port read it — and 1.0 would have frozen that",
146
+ replacedBy: "`forgeTypesProvider`, opted in explicitly — " +
147
+ "loadMemory(root, { providers: [forgeTypesProvider] }) — or delete them",
148
+ migration: FORGE_MIGRATION,
149
+ }));
150
+
112
151
  export const RETIRED_VOCABULARY: readonly RetiredEntry[] = [
113
152
  // ── 0.24.0: `@violation` is renamed `@counterexample` ──
114
153
  //
@@ -326,6 +365,9 @@ export const RETIRED_VOCABULARY: readonly RetiredEntry[] = [
326
365
  migration: EMIT_ATTR_MIGRATION,
327
366
  rewrite: { kind: "dropAttr" },
328
367
  },
368
+
369
+ // Deregistered from the default composition at the 1.0 cut — see FORGE_ENTRIES.
370
+ ...FORGE_ENTRIES,
329
371
  ];
330
372
 
331
373
 
@@ -339,7 +381,11 @@ export const RETIRED_VOCABULARY: readonly RetiredEntry[] = [
339
381
  export function scopeMatches(entry: RetiredEntry, typeKey: string): boolean {
340
382
  const dot = typeKey.indexOf(".");
341
383
  if (dot < 0) return false;
342
- if (entry.type !== typeKey.slice(0, dot)) return false;
384
+ // `type: "*"` is for an attribute that was registered as a COMMON attr — valid on
385
+ // EVERY node, so its retirement is scoped the way its registration was. Without it
386
+ // such an entry needs one row per top-level type, and the row for whichever type
387
+ // nobody thought of is the one that goes silently unmatched.
388
+ if (entry.type !== "*" && entry.type !== typeKey.slice(0, dot)) return false;
343
389
  return entry.subType === "*" || entry.subType === typeKey.slice(dot + 1);
344
390
  }
345
391
 
@@ -1,6 +1,6 @@
1
1
  import { TypeId } from "../registry.js";
2
2
  import { TYPE_ATTR } from "./base-types.js";
3
- import { PACKAGE_SEPARATOR, RESERVED_KEY_VALUE } from "./structural.js";
3
+ import { PACKAGE_SEPARATOR, RESERVED_KEY_VALUE, assertNotStructuralKeyword } from "./structural.js";
4
4
  import type { DataType } from "../data-type.js";
5
5
  import type { MetaAttr } from "../core/attr/meta-attr.js";
6
6
  import { inferAttrSubType } from "../serializer-json.js";
@@ -321,11 +321,20 @@ export abstract class MetaData {
321
321
  if (name === RESERVED_KEY_VALUE) {
322
322
  return this._ownValueSet ? this._ownValue : undefined;
323
323
  }
324
+ // Guarded for the same reason attr()/hasAttr() are, and it is the SAME rule:
325
+ // a reserved keyword can never be an attr, so this can only ever answer
326
+ // undefined — indistinguishable from "not set". Closing the resolving door and
327
+ // leaving the own-only ones open would be one rule with four doors, three of
328
+ // them still silent, and `ownAttr` is a documented public accessor an owned
329
+ // generator can reach for. The RESERVED_KEY_VALUE read above is the one
330
+ // legitimate reserved-key attr read and is settled before the guard.
331
+ assertNotStructuralKeyword(name, "ownAttr");
324
332
  return this._attrNodes.get(name)?.value;
325
333
  }
326
334
 
327
335
  /** Own (locally declared) MetaAttr instance for `name`, or undefined. */
328
336
  ownMetaAttr(name: string): MetaAttr | undefined {
337
+ assertNotStructuralKeyword(name, "ownMetaAttr");
329
338
  return this._attrNodes.get(name);
330
339
  }
331
340
 
@@ -350,6 +359,7 @@ export abstract class MetaData {
350
359
  if (name === RESERVED_KEY_VALUE) {
351
360
  return this._ownValueSet;
352
361
  }
362
+ assertNotStructuralKeyword(name, "ownHasAttr");
353
363
  return this._attrNodes.has(name);
354
364
  }
355
365
 
@@ -370,11 +380,13 @@ export abstract class MetaData {
370
380
 
371
381
  /** Effective attr value for `name`, or undefined. */
372
382
  attr(name: string): AttrValue | undefined {
383
+ assertNotStructuralKeyword(name, "attr");
373
384
  return this.attrs().get(name);
374
385
  }
375
386
 
376
387
  /** True if `name` resolves to an effective attr (own or inherited). */
377
388
  hasAttr(name: string): boolean {
389
+ assertNotStructuralKeyword(name, "hasAttr");
378
390
  return this.attrs().has(name);
379
391
  }
380
392
 
@@ -30,6 +30,54 @@ export const RESERVED_KEYS = new Set<string>([
30
30
  RESERVED_KEY_VALUE,
31
31
  ]);
32
32
 
33
+
34
+ /**
35
+ * The reserved structural keywords that can NEVER be an attribute, mapped to the
36
+ * native accessor that answers the same question.
37
+ *
38
+ * `value` is deliberately absent: an `attr` node stores its own typed payload under
39
+ * that key and reads it back with `ownAttr(RESERVED_KEY_VALUE)`, which is the one
40
+ * legitimate reserved-key attr read in the model.
41
+ */
42
+ export const STRUCTURAL_KEYWORD_ACCESSORS: ReadonlyMap<string, string> = new Map([
43
+ [RESERVED_KEY_NAME, "the `.name` property"],
44
+ [RESERVED_KEY_PACKAGE, "the `.package` property (or effectivePackage(node) for the file-default fold)"],
45
+ [RESERVED_KEY_EXTENDS, "the `.superData` property"],
46
+ [RESERVED_KEY_ABSTRACT, "the `.isAbstract` property"],
47
+ [RESERVED_KEY_OVERLAY, "the node's overlay flag"],
48
+ [RESERVED_KEY_IS_ARRAY, "`.resolvedIsArray()` (NOT the `.isArray` own flag — that one drops what `extends` contributes)"],
49
+ [RESERVED_KEY_CHILDREN, "`.children()`"],
50
+ ]);
51
+
52
+ /**
53
+ * Refuse an attribute lookup for a reserved structural keyword.
54
+ *
55
+ * These names are NATIVE PROPERTIES, not attributes: `@isArray` and friends are
56
+ * rejected at the load with ERR_RESERVED_ATTR, so no document can ever set one and
57
+ * the lookup can only ever answer `undefined`. That answer is indistinguishable
58
+ * from "the author did not set that attribute", which is what made this silent.
59
+ *
60
+ * It was not hypothetical. An adopter's own generator typed a field as
61
+ * `f.attr("isArray") === true ? base + "[]" : base`, and the reference document it
62
+ * generated — the one bot authors read — described ALL 31 of that model's array
63
+ * fields as scalars. Its sibling module had used the resolving accessor since the
64
+ * day it was written, with a comment naming the trap, and nothing compared the two.
65
+ * The file's own header taught the rule fourteen lines above the violation: prose
66
+ * is not a gate.
67
+ *
68
+ * A throw rather than a warning because there is no reading under which this call
69
+ * is correct, and the fix is one line at the call site.
70
+ */
71
+ export function assertNotStructuralKeyword(name: string, accessor: string): void {
72
+ const native = STRUCTURAL_KEYWORD_ACCESSORS.get(name);
73
+ if (native === undefined) return;
74
+ throw new Error(
75
+ `${accessor}(${JSON.stringify(name)}): '${name}' is a reserved structural keyword, ` +
76
+ `not an attribute — '@${name}' fails the load with ERR_RESERVED_ATTR, so this ` +
77
+ `lookup can only ever return undefined. Read ${native} instead.`,
78
+ );
79
+ }
80
+
33
81
  // ---------------------------------------------------------------------------
34
82
  // JSON document special keys (top-level, ignored during wrapper-key detection)
35
83
  // ---------------------------------------------------------------------------