@metaobjectsdev/metadata 0.20.14 → 0.20.15-rc.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/errors.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { ErrorSource, LoaderError, NodeContext } from "./source.js";
2
2
  /** Stable, language-neutral error codes — mirrors fixtures/conformance/ERROR-CODES.json. */
3
- export declare const ERROR_CODES: readonly ["ERR_TOP_LEVEL_NOT_OBJECT", "ERR_UNKNOWN_TYPE", "ERR_UNKNOWN_SUBTYPE", "ERR_MISSING_SUBTYPE", "ERR_DUPLICATE_NAME", "ERR_UNRESOLVED_SUPER", "ERR_EXTENDS_TARGET_MISMATCH", "ERR_IDENTITY_NAME_REQUIRED", "ERR_TOO_MANY_OCCURRENCES", "ERR_PROJECTION_IDENTITY_NOT_EXTENDED", "ERR_IDENTITY_KEY_MISMATCH", "ERR_PROJECTION_SOURCE_WRITABLE", "ERR_INVALID_SUBTYPE_CHILD", "ERR_CHILD_NOT_ALLOWED", "ERR_UNKNOWN_ATTR", "ERR_BAD_ATTR_VALUE", "ERR_BAD_DEFAULT_SORT_FIELD", "ERR_PROVIDER_DEPENDENCY_CYCLE", "ERR_PROVIDER_DUPLICATE_ID", "ERR_PROVIDER_MISSING_DEPENDENCY", "ERR_PROVIDER_ATTR_CONFLICT", "ERR_MALFORMED_JSON", "ERR_MISSING_REQUIRED_ATTR", "ERR_SUBTYPE_RULE_VIOLATION", "ERR_OVERLAY_NO_TARGET", "ERR_MALFORMED_YAML", "ERR_INVALID_ORIGIN", "ERR_AMBIGUOUS_PATH", "ERR_ORIGIN_CARDINALITY", "ERR_EXTENDS_ORIGIN_MISMATCH", "ERR_PASSTHROUGH_TYPE_MISMATCH", "ERR_DERIVED_FIELD_NO_READ_SOURCE", "ERR_ENTITY_PRIMARY_SOURCE_READONLY", "ERR_INVALID_TEMPLATE", "ERR_INVALID_RELATIONSHIP", "ERR_INVALID_REFERENCE", "ERR_VAR_NOT_ON_PAYLOAD", "ERR_PAYLOAD_NAME_COLLISION", "ERR_PARTIAL_UNRESOLVED", "ERR_REQUIRED_SLOT_UNUSED", "ERR_OUTPUT_TAG_MISSING", "ERR_BAD_ATTR_FILTER", "ERR_STORAGE_FLATTENED_ARRAY", "ERR_STORAGE_WITHOUT_OBJECT_REF", "ERR_OBJECT_FIELD_WITHOUT_OBJECT_REF", "ERR_UNRESOLVED_OBJECT_REF", "ERR_RESERVED_ATTR", "ERR_SOURCE_NO_PRIMARY", "ERR_SOURCE_MULTIPLE_PRIMARY", "ERR_PHYSICAL_NAME_KIND_MISMATCH", "ERR_PHYSICAL_NAME_MULTIPLE", "ERR_READONLY_ASSIGNED_PRIMARY", "ERR_READONLY_DOWNGRADE", "ERR_PARAMETER_REF_UNRESOLVED", "ERR_PARAMETER_REF_NOT_VALUE_OBJECT", "ERR_PARAMETER_REF_ON_NON_CALLABLE_KIND", "ERR_DISCRIMINATOR_FIELD_NOT_FOUND", "ERR_DISCRIMINATOR_VALUE_DUPLICATE", "ERR_DISCRIMINATOR_VALUE_MISSING", "ERR_DISCRIMINATOR_VALUE_TYPE_MISMATCH", "ERR_YAML_COERCION", "ERR_MERGE_CONFLICT", "ERR_FILTERABLE_UNSUPPORTED_SUBTYPE", "ERR_REGISTRY_SEALED", "ERR_RELATIVE_REF_IN_CANONICAL", "ERR_INVALID_METAMODEL_CONSTRAINT", "ERR_INVALID_INDEX", "ERR_COMPUTED_TYPE_MISMATCH", "ERR_UNKNOWN_EXPR_NODE", "ERR_SQL_BODY_WITH_UNMANAGED", "ERR_SQL_BODY_ON_WRITABLE_KIND", "ERR_ORIGIN_UNDER_SQL_BODY", "ERR_ENUM_EXTENDS_VALUES_CONFLICT", "ERR_UNKNOWN"];
3
+ export declare const ERROR_CODES: readonly ["ERR_TOP_LEVEL_NOT_OBJECT", "ERR_UNKNOWN_TYPE", "ERR_UNKNOWN_SUBTYPE", "ERR_MISSING_SUBTYPE", "ERR_DUPLICATE_NAME", "ERR_UNRESOLVED_SUPER", "ERR_EXTENDS_TARGET_MISMATCH", "ERR_IDENTITY_NAME_REQUIRED", "ERR_TOO_MANY_OCCURRENCES", "ERR_PROJECTION_IDENTITY_NOT_EXTENDED", "ERR_IDENTITY_KEY_MISMATCH", "ERR_PROJECTION_SOURCE_WRITABLE", "ERR_PROJECTION_INHERITED_SOURCE", "ERR_INVALID_SUBTYPE_CHILD", "ERR_CHILD_NOT_ALLOWED", "ERR_UNKNOWN_ATTR", "ERR_BAD_ATTR_VALUE", "ERR_BAD_DEFAULT_SORT_FIELD", "ERR_PROVIDER_DEPENDENCY_CYCLE", "ERR_PROVIDER_DUPLICATE_ID", "ERR_PROVIDER_MISSING_DEPENDENCY", "ERR_PROVIDER_ATTR_CONFLICT", "ERR_MALFORMED_JSON", "ERR_MISSING_REQUIRED_ATTR", "ERR_SUBTYPE_RULE_VIOLATION", "ERR_OVERLAY_NO_TARGET", "ERR_MALFORMED_YAML", "ERR_INVALID_ORIGIN", "ERR_AMBIGUOUS_PATH", "ERR_ORIGIN_CARDINALITY", "ERR_EXTENDS_ORIGIN_MISMATCH", "ERR_PASSTHROUGH_TYPE_MISMATCH", "ERR_DERIVED_FIELD_NO_READ_SOURCE", "ERR_ENTITY_PRIMARY_SOURCE_READONLY", "ERR_INVALID_TEMPLATE", "ERR_INVALID_RELATIONSHIP", "ERR_INVALID_REFERENCE", "ERR_VAR_NOT_ON_PAYLOAD", "ERR_PAYLOAD_NAME_COLLISION", "ERR_PARTIAL_UNRESOLVED", "ERR_REQUIRED_SLOT_UNUSED", "ERR_OUTPUT_TAG_MISSING", "ERR_BAD_ATTR_FILTER", "ERR_STORAGE_FLATTENED_ARRAY", "ERR_STORAGE_WITHOUT_OBJECT_REF", "ERR_OBJECT_FIELD_WITHOUT_OBJECT_REF", "ERR_UNRESOLVED_OBJECT_REF", "ERR_RESERVED_ATTR", "ERR_SOURCE_NO_PRIMARY", "ERR_SOURCE_MULTIPLE_PRIMARY", "ERR_PHYSICAL_NAME_KIND_MISMATCH", "ERR_PHYSICAL_NAME_MULTIPLE", "ERR_READONLY_ASSIGNED_PRIMARY", "ERR_READONLY_DOWNGRADE", "ERR_PARAMETER_REF_UNRESOLVED", "ERR_PARAMETER_REF_NOT_VALUE_OBJECT", "ERR_PARAMETER_REF_ON_NON_CALLABLE_KIND", "ERR_DISCRIMINATOR_FIELD_NOT_FOUND", "ERR_DISCRIMINATOR_VALUE_DUPLICATE", "ERR_DISCRIMINATOR_VALUE_MISSING", "ERR_DISCRIMINATOR_VALUE_TYPE_MISMATCH", "ERR_YAML_COERCION", "ERR_MERGE_CONFLICT", "ERR_FILTERABLE_UNSUPPORTED_SUBTYPE", "ERR_REGISTRY_SEALED", "ERR_RELATIVE_REF_IN_CANONICAL", "ERR_INVALID_METAMODEL_CONSTRAINT", "ERR_INVALID_INDEX", "ERR_COMPUTED_TYPE_MISMATCH", "ERR_UNKNOWN_EXPR_NODE", "ERR_SQL_BODY_WITH_UNMANAGED", "ERR_SQL_BODY_ON_WRITABLE_KIND", "ERR_ORIGIN_UNDER_SQL_BODY", "ERR_ENUM_EXTENDS_VALUES_CONFLICT", "ERR_UNKNOWN"];
4
4
  /** Warning codes — same envelope shape as errors but advisory. */
5
5
  export declare const WARNING_CODES: readonly ["WARN_DUPLICATE_DECLARATION", "WARN_LEGACY", "WARN_LEGACY_PHYSICAL_NAME_ALIAS", "WARN_READONLY_VALUE_OBJECT", "WARN_ORIGIN_UNDER_UNMANAGED", "WARN_ENUM_NORMALIZE_AMBIGUOUS"];
6
6
  export type WarningCode = (typeof WARNING_CODES)[number];
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzE,4FAA4F;AAc5F,eAAO,MAAM,WAAW,6mEAyLd,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,aAAa,yLA6BhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,SAAQ,KAAM,YAAW,WAAW;IAI1D,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;gBAG1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAChC,MAAM,EAAE,WAAW,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,WAAW,CAAC;KACpB;CAiBJ;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;CAKzD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzE,4FAA4F;AAc5F,eAAO,MAAM,WAAW,gpEA0Ld,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,aAAa,yLA6BhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,SAAQ,KAAM,YAAW,WAAW;IAI1D,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;gBAG1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAChC,MAAM,EAAE,WAAW,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,WAAW,CAAC;KACpB;CAiBJ;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;CAKzD"}
package/dist/errors.js CHANGED
@@ -41,6 +41,7 @@ export const ERROR_CODES = [
41
41
  // @kind (table, or @kind omitted which defaults to table). Projections are
42
42
  // derived read-only representations; their sources must be read-only kinds.
43
43
  "ERR_PROJECTION_SOURCE_WRITABLE",
44
+ "ERR_PROJECTION_INHERITED_SOURCE",
44
45
  "ERR_INVALID_SUBTYPE_CHILD",
45
46
  // FR-033 — a STRUCTURAL child (field/identity/source/validator/… — not an
46
47
  // attr) is placed under a parent whose registered childRules do not admit it
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -117,6 +117,49 @@ function validateProjectionLicensing(model, errors) {
117
117
  `${sup.type}.${sup.subType} — a projection may only extend another ` +
118
118
  `projection (FR-024, ADR-0028)`, { code: "ERR_SUBTYPE_RULE_VIOLATION", source: model.source }));
119
119
  }
120
+ // A projection's `extends` is SHAPE lineage, not a shared-storage hierarchy, so a
121
+ // concrete projection must declare its own source rather than inherit one.
122
+ //
123
+ // Inheriting it is incoherent by construction: `extends` only ADDS members, so the
124
+ // child's extra fields have no provider in the parent's view, and both objects
125
+ // would claim one physical view while declaring different exposures (the declared
126
+ // field set IS the exposure, fail-closed — ADR-0028). It is also the shape that
127
+ // made two source predicates disagree: "which source am I bound to" resolves
128
+ // through the super chain while "what KIND of source am I" is own-only, so an
129
+ // inheriting projection read as bound-but-not-a-projection and TS mounted writable
130
+ // CRUD over a read-only view. Guarding the shape makes the predicates agree instead
131
+ // of flipping either one (own-only classification is the deliberate cross-port
132
+ // contract — see projection-detector.ts).
133
+ //
134
+ // Prior art agrees on the split: shared-storage inheritance (JPA @Inheritance,
135
+ // EF Core TPH, SQLAlchemy single-table) inherits binding AND writability together,
136
+ // while shape-reuse inheritance (JPA @MappedSuperclass, Django abstract bases) does
137
+ // not inherit the binding at all — Django documents inheriting `db_table` as a trap
138
+ // for exactly this reason. A projection is the second kind.
139
+ //
140
+ // Enforced at the CONCRETE level (mirrors #236): an abstract projection base may
141
+ // carry shared shape, and a source on an abstract base is inert until something
142
+ // extends it — at which point this fires on the concrete child.
143
+ //
144
+ // Only checked when the super is a legal projection: a non-projection super trips
145
+ // the extends rule above and inherits its source too, and one defect should yield
146
+ // one error, reported at its root cause.
147
+ const superIsLegalProjection = sup === undefined ||
148
+ (sup.type === TYPE_OBJECT && sup.subType === OBJECT_SUBTYPE_PROJECTION);
149
+ if (!model.isAbstract && superIsLegalProjection) {
150
+ const ownSourceCount = model.ownChildren().filter((c) => c.type === TYPE_SOURCE).length;
151
+ const inherited = model
152
+ .children()
153
+ .filter((c) => c.type === TYPE_SOURCE)
154
+ .slice(ownSourceCount);
155
+ if (model.children().filter((c) => c.type === TYPE_SOURCE).length > ownSourceCount) {
156
+ const src = inherited[0] ?? model;
157
+ errors.push(new ParseError(`projection '${model.fqn()}' inherits a source (${TYPE_SOURCE}.${src.subType}) ` +
158
+ `through extends instead of declaring its own — a projection's extends is ` +
159
+ `shape lineage, not a shared-storage hierarchy. Declare the source on this ` +
160
+ `projection; an abstract projection base carries shape only (FR-024, ADR-0028)`, { code: "ERR_PROJECTION_INHERITED_SOURCE", source: model.source }));
161
+ }
162
+ }
120
163
  // ADR-0039: own — OWN sources only: an inherited source is validated on the
121
164
  // (projection) object that declares it; an inherited source from a non-projection
122
165
  // super is unreachable without first tripping the extends rule above.
@@ -1 +1 @@
1
- {"version":3,"file":"subtype-rules.js","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subtype-rules.js","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/metadata",
3
- "version": "0.20.14",
3
+ "version": "0.20.15-rc.1",
4
4
  "description": "Metamodel loader, types, and constants for the MetaObjects standard.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/errors.ts CHANGED
@@ -44,6 +44,7 @@ export const ERROR_CODES = [
44
44
  // @kind (table, or @kind omitted which defaults to table). Projections are
45
45
  // derived read-only representations; their sources must be read-only kinds.
46
46
  "ERR_PROJECTION_SOURCE_WRITABLE",
47
+ "ERR_PROJECTION_INHERITED_SOURCE",
47
48
  "ERR_INVALID_SUBTYPE_CHILD",
48
49
  // FR-033 — a STRUCTURAL child (field/identity/source/validator/… — not an
49
50
  // attr) is placed under a parent whose registered childRules do not admit it
@@ -176,6 +176,56 @@ function validateProjectionLicensing(
176
176
  );
177
177
  }
178
178
 
179
+ // A projection's `extends` is SHAPE lineage, not a shared-storage hierarchy, so a
180
+ // concrete projection must declare its own source rather than inherit one.
181
+ //
182
+ // Inheriting it is incoherent by construction: `extends` only ADDS members, so the
183
+ // child's extra fields have no provider in the parent's view, and both objects
184
+ // would claim one physical view while declaring different exposures (the declared
185
+ // field set IS the exposure, fail-closed — ADR-0028). It is also the shape that
186
+ // made two source predicates disagree: "which source am I bound to" resolves
187
+ // through the super chain while "what KIND of source am I" is own-only, so an
188
+ // inheriting projection read as bound-but-not-a-projection and TS mounted writable
189
+ // CRUD over a read-only view. Guarding the shape makes the predicates agree instead
190
+ // of flipping either one (own-only classification is the deliberate cross-port
191
+ // contract — see projection-detector.ts).
192
+ //
193
+ // Prior art agrees on the split: shared-storage inheritance (JPA @Inheritance,
194
+ // EF Core TPH, SQLAlchemy single-table) inherits binding AND writability together,
195
+ // while shape-reuse inheritance (JPA @MappedSuperclass, Django abstract bases) does
196
+ // not inherit the binding at all — Django documents inheriting `db_table` as a trap
197
+ // for exactly this reason. A projection is the second kind.
198
+ //
199
+ // Enforced at the CONCRETE level (mirrors #236): an abstract projection base may
200
+ // carry shared shape, and a source on an abstract base is inert until something
201
+ // extends it — at which point this fires on the concrete child.
202
+ //
203
+ // Only checked when the super is a legal projection: a non-projection super trips
204
+ // the extends rule above and inherits its source too, and one defect should yield
205
+ // one error, reported at its root cause.
206
+ const superIsLegalProjection =
207
+ sup === undefined ||
208
+ (sup.type === TYPE_OBJECT && sup.subType === OBJECT_SUBTYPE_PROJECTION);
209
+ if (!model.isAbstract && superIsLegalProjection) {
210
+ const ownSourceCount = model.ownChildren().filter((c) => c.type === TYPE_SOURCE).length;
211
+ const inherited = model
212
+ .children()
213
+ .filter((c) => c.type === TYPE_SOURCE)
214
+ .slice(ownSourceCount);
215
+ if (model.children().filter((c) => c.type === TYPE_SOURCE).length > ownSourceCount) {
216
+ const src = inherited[0] ?? model;
217
+ errors.push(
218
+ new ParseError(
219
+ `projection '${model.fqn()}' inherits a source (${TYPE_SOURCE}.${src.subType}) ` +
220
+ `through extends instead of declaring its own — a projection's extends is ` +
221
+ `shape lineage, not a shared-storage hierarchy. Declare the source on this ` +
222
+ `projection; an abstract projection base carries shape only (FR-024, ADR-0028)`,
223
+ { code: "ERR_PROJECTION_INHERITED_SOURCE", source: model.source },
224
+ ),
225
+ );
226
+ }
227
+ }
228
+
179
229
  // ADR-0039: own — OWN sources only: an inherited source is validated on the
180
230
  // (projection) object that declares it; an inherited source from a non-projection
181
231
  // super is unreachable without first tripping the extends rule above.