@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 +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -1
- package/dist/subtype-rules.js +43 -0
- package/dist/subtype-rules.js.map +1 -1
- package/package.json +1 -1
- package/src/errors.ts +1 -0
- package/src/subtype-rules.ts +50 -0
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];
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
package/dist/errors.js.map
CHANGED
|
@@ -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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"}
|
package/dist/subtype-rules.js
CHANGED
|
@@ -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
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
|
package/src/subtype-rules.ts
CHANGED
|
@@ -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.
|