@metaobjectsdev/metadata 0.16.0-rc.1 → 0.17.0-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.
Files changed (86) hide show
  1. package/dist/core/attr/attr-constants.d.ts +2 -1
  2. package/dist/core/attr/attr-constants.d.ts.map +1 -1
  3. package/dist/core/attr/attr-constants.js +4 -0
  4. package/dist/core/attr/attr-constants.js.map +1 -1
  5. package/dist/core/attr/attr-definition.embedded.d.ts.map +1 -1
  6. package/dist/core/attr/attr-definition.embedded.js +6 -0
  7. package/dist/core/attr/attr-definition.embedded.js.map +1 -1
  8. package/dist/core/attr/meta-attr-expression.d.ts +62 -0
  9. package/dist/core/attr/meta-attr-expression.d.ts.map +1 -0
  10. package/dist/core/attr/meta-attr-expression.js +203 -0
  11. package/dist/core/attr/meta-attr-expression.js.map +1 -0
  12. package/dist/core/field/meta-field.d.ts +8 -0
  13. package/dist/core/field/meta-field.d.ts.map +1 -1
  14. package/dist/core/field/meta-field.js +12 -1
  15. package/dist/core/field/meta-field.js.map +1 -1
  16. package/dist/core/object/object-constants.d.ts +6 -0
  17. package/dist/core/object/object-constants.d.ts.map +1 -1
  18. package/dist/core/object/object-constants.js +9 -0
  19. package/dist/core/object/object-constants.js.map +1 -1
  20. package/dist/core/object/object-definition.embedded.d.ts.map +1 -1
  21. package/dist/core/object/object-definition.embedded.js +11 -1
  22. package/dist/core/object/object-definition.embedded.js.map +1 -1
  23. package/dist/core-types.d.ts +1 -0
  24. package/dist/core-types.d.ts.map +1 -1
  25. package/dist/core-types.js +5 -2
  26. package/dist/core-types.js.map +1 -1
  27. package/dist/errors.d.ts +2 -2
  28. package/dist/errors.d.ts.map +1 -1
  29. package/dist/errors.js +28 -0
  30. package/dist/errors.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  36. package/dist/loader/meta-data-loader.js +12 -1
  37. package/dist/loader/meta-data-loader.js.map +1 -1
  38. package/dist/loader/validation-passes.d.ts +1 -0
  39. package/dist/loader/validation-passes.d.ts.map +1 -1
  40. package/dist/loader/validation-passes.js +264 -13
  41. package/dist/loader/validation-passes.js.map +1 -1
  42. package/dist/persistence/db/db-definition.embedded.d.ts.map +1 -1
  43. package/dist/persistence/db/db-definition.embedded.js +16 -0
  44. package/dist/persistence/db/db-definition.embedded.js.map +1 -1
  45. package/dist/persistence/origin/meta-origin.d.ts +30 -3
  46. package/dist/persistence/origin/meta-origin.d.ts.map +1 -1
  47. package/dist/persistence/origin/meta-origin.js +44 -2
  48. package/dist/persistence/origin/meta-origin.js.map +1 -1
  49. package/dist/persistence/origin/origin-constants.d.ts +15 -1
  50. package/dist/persistence/origin/origin-constants.d.ts.map +1 -1
  51. package/dist/persistence/origin/origin-constants.js +40 -3
  52. package/dist/persistence/origin/origin-constants.js.map +1 -1
  53. package/dist/persistence/origin/origin-definition.embedded.d.ts.map +1 -1
  54. package/dist/persistence/origin/origin-definition.embedded.js +86 -8
  55. package/dist/persistence/origin/origin-definition.embedded.js.map +1 -1
  56. package/dist/persistence/source/meta-source.d.ts +12 -0
  57. package/dist/persistence/source/meta-source.d.ts.map +1 -1
  58. package/dist/persistence/source/meta-source.js +20 -1
  59. package/dist/persistence/source/meta-source.js.map +1 -1
  60. package/dist/persistence/source/source-constants.d.ts +9 -0
  61. package/dist/persistence/source/source-constants.d.ts.map +1 -1
  62. package/dist/persistence/source/source-constants.js +9 -0
  63. package/dist/persistence/source/source-constants.js.map +1 -1
  64. package/dist/persistence/source/validate-source-escapes.d.ts +9 -0
  65. package/dist/persistence/source/validate-source-escapes.d.ts.map +1 -0
  66. package/dist/persistence/source/validate-source-escapes.js +115 -0
  67. package/dist/persistence/source/validate-source-escapes.js.map +1 -0
  68. package/package.json +1 -1
  69. package/src/core/attr/attr-constants.ts +4 -0
  70. package/src/core/attr/attr-definition.embedded.ts +6 -0
  71. package/src/core/attr/meta-attr-expression.ts +230 -0
  72. package/src/core/field/meta-field.ts +13 -1
  73. package/src/core/object/object-constants.ts +10 -0
  74. package/src/core/object/object-definition.embedded.ts +11 -1
  75. package/src/core-types.ts +6 -1
  76. package/src/errors.ts +28 -0
  77. package/src/index.ts +2 -0
  78. package/src/loader/meta-data-loader.ts +14 -1
  79. package/src/loader/validation-passes.ts +370 -15
  80. package/src/persistence/db/db-definition.embedded.ts +16 -0
  81. package/src/persistence/origin/meta-origin.ts +55 -4
  82. package/src/persistence/origin/origin-constants.ts +45 -3
  83. package/src/persistence/origin/origin-definition.embedded.ts +86 -8
  84. package/src/persistence/source/meta-source.ts +23 -0
  85. package/src/persistence/source/source-constants.ts +10 -0
  86. package/src/persistence/source/validate-source-escapes.ts +158 -0
@@ -6,6 +6,7 @@ export declare const ATTR_SUBTYPE_BOOLEAN = "boolean";
6
6
  export declare const ATTR_SUBTYPE_CLASS = "class";
7
7
  export declare const ATTR_SUBTYPE_PROPERTIES = "properties";
8
8
  export declare const ATTR_SUBTYPE_FILTER = "filter";
9
+ export declare const ATTR_SUBTYPE_EXPRESSION = "expression";
9
10
  /**
10
11
  * The retired `stringarray` array attr subtype. It is NO LONGER a registered
11
12
  * `(attr, subType)` — array-ness is modeled as a `string` attr with the
@@ -17,6 +18,6 @@ export declare const ATTR_SUBTYPE_FILTER = "filter";
17
18
  * `ATTR_SUBTYPES`.
18
19
  */
19
20
  export declare const ATTR_SUBTYPE_STRINGARRAY = "stringarray";
20
- export declare const ATTR_SUBTYPES: readonly ["base", "string", "int", "long", "double", "boolean", "class", "properties", "filter"];
21
+ export declare const ATTR_SUBTYPES: readonly ["base", "string", "int", "long", "double", "boolean", "class", "properties", "filter", "expression"];
21
22
  export type AttrSubType = (typeof ATTR_SUBTYPES)[number] | typeof ATTR_SUBTYPE_STRINGARRAY;
22
23
  //# sourceMappingURL=attr-constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attr-constants.d.ts","sourceRoot":"","sources":["../../../src/core/attr/attr-constants.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AAEtD,eAAO,MAAM,aAAa,kGAUhB,CAAC;AACX,MAAM,MAAM,WAAW,GACnB,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,GAC9B,OAAO,wBAAwB,CAAC"}
1
+ {"version":3,"file":"attr-constants.d.ts","sourceRoot":"","sources":["../../../src/core/attr/attr-constants.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAEpD;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AAEtD,eAAO,MAAM,aAAa,gHAWhB,CAAC;AACX,MAAM,MAAM,WAAW,GACnB,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,GAC9B,OAAO,wBAAwB,CAAC"}
@@ -11,6 +11,9 @@ export const ATTR_SUBTYPE_BOOLEAN = "boolean";
11
11
  export const ATTR_SUBTYPE_CLASS = "class";
12
12
  export const ATTR_SUBTYPE_PROPERTIES = "properties";
13
13
  export const ATTR_SUBTYPE_FILTER = "filter";
14
+ // #195 — a structured expression tree over a base entity's own fields (backs
15
+ // origin.computed). Object-shaped; a closed node grammar (see meta-attr-expression.ts).
16
+ export const ATTR_SUBTYPE_EXPRESSION = "expression";
14
17
  /**
15
18
  * The retired `stringarray` array attr subtype. It is NO LONGER a registered
16
19
  * `(attr, subType)` — array-ness is modeled as a `string` attr with the
@@ -32,5 +35,6 @@ export const ATTR_SUBTYPES = [
32
35
  ATTR_SUBTYPE_CLASS,
33
36
  ATTR_SUBTYPE_PROPERTIES,
34
37
  ATTR_SUBTYPE_FILTER,
38
+ ATTR_SUBTYPE_EXPRESSION,
35
39
  ];
36
40
  //# sourceMappingURL=attr-constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attr-constants.js","sourceRoot":"","sources":["../../../src/core/attr/attr-constants.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;CACX,CAAC"}
1
+ {"version":3,"file":"attr-constants.js","sourceRoot":"","sources":["../../../src/core/attr/attr-constants.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,6EAA6E;AAC7E,wFAAwF;AACxF,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;CACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"attr-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/core/attr/attr-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,kBA0D7B,CAAC"}
1
+ {"version":3,"file":"attr-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/core/attr/attr-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,kBAgE7B,CAAC"}
@@ -54,6 +54,12 @@ export const ATTR_DEFINITION = {
54
54
  "subType": "filter",
55
55
  "dataType": "object",
56
56
  "description": "A filter-expression-valued metadata attribute. Object-shaped value that desugars a preset filter to the canonical { field: { op: value } } form (scalar→eq, array→in, null→isNull; or/and recurse)."
57
+ },
58
+ {
59
+ "type": "attr",
60
+ "subType": "expression",
61
+ "dataType": "object",
62
+ "description": "A structured expression tree over a base entity's own fields (closed node grammar: field/value refs, comparisons sharing the filter op vocabulary, isNull/isNotNull, and/or/not, coalesce). Backs origin.computed; a filter object embeds canonically. Additive node kinds (arithmetic/case/via-joined refs) are #159."
57
63
  }
58
64
  ]
59
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"attr-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/attr/attr-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,8PAA8P;SAC9Q;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,4KAA4K;SAC5L;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,mFAAmF;SACnG;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,mFAAmF;SACnG;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,oGAAoG;SACpH;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,8EAA8E;SAC9F;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,iIAAiI;SACjJ;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,YAAY;YACvB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,2MAA2M;SAC3N;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,qMAAqM;SACrN;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"attr-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/attr/attr-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,8PAA8P;SAC9Q;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,4KAA4K;SAC5L;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,mFAAmF;SACnG;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,mFAAmF;SACnG;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,oGAAoG;SACpH;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,8EAA8E;SAC9F;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,iIAAiI;SACjJ;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,YAAY;YACvB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,2MAA2M;SAC3N;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,qMAAqM;SACrN;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,YAAY;YACvB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,wTAAwT;SACxU;KACF;CACF,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { MetaAttr, type ValueError } from "./meta-attr.js";
2
+ import { type AttrValue } from "../../shared/meta-data.js";
3
+ import { type DataType } from "../../data-type.js";
4
+ export declare const EXPR_OP_IS_NOT_NULL = "isNotNull";
5
+ export declare const EXPR_OP_NOT = "not";
6
+ export declare const EXPR_FN_COALESCE = "coalesce";
7
+ export type ExprLiteral = string | number | boolean | null;
8
+ export type ExprNode = {
9
+ field: string;
10
+ } | {
11
+ value: ExprLiteral;
12
+ } | {
13
+ op: string;
14
+ left: ExprNode;
15
+ right: ExprNode;
16
+ } | {
17
+ op: string;
18
+ arg: ExprNode;
19
+ } | {
20
+ op: string;
21
+ args: ExprNode[];
22
+ } | {
23
+ fn: string;
24
+ args: ExprNode[];
25
+ };
26
+ /** Structural well-formedness of an expression tree (known node kinds, ops, arity).
27
+ * Returns [] when valid. No entity/type context — see `inferExprType` for typing. */
28
+ export declare function validateExprNode(node: unknown): string[];
29
+ export interface InferResult {
30
+ /** The inferred field subType of the expression's root, or undefined if untypable. */
31
+ type: string | undefined;
32
+ /** Type/resolution/op-legality errors (empty when the tree types cleanly). */
33
+ errors: string[];
34
+ }
35
+ /**
36
+ * Bottom-up type inference for a computed expression. `resolveField(name)` returns
37
+ * the subType of a base-entity field ref (undefined = unresolvable). Comparisons /
38
+ * null-tests / logic → boolean; a field ref → its subType; coalesce → the unified
39
+ * arg subType. Also enforces per-operand op legality against `OPS_BY_SUBTYPE`
40
+ * (the same bands filters use), so e.g. `gt` on a boolean operand is rejected.
41
+ */
42
+ export declare function inferExprType(node: ExprNode, resolveField: (name: string) => string | undefined): InferResult;
43
+ /**
44
+ * Embed a CANONICAL filter object (`{ field: { op: value } }` with `and`/`or`
45
+ * composition — the desugared `attr.filter` form) into an expression tree, so the
46
+ * two languages share one evaluator. `isNull: false` becomes `isNotNull`.
47
+ */
48
+ export declare function filterToExpr(filter: Record<string, unknown>): ExprNode;
49
+ /**
50
+ * ExpressionAttr — attr subtype `expression`. Object-shaped value holding a
51
+ * closed expression tree (`@expr` on origin.computed). Stored verbatim (no
52
+ * desugar); `validateValue` enforces STRUCTURAL well-formedness of the node
53
+ * grammar (a fail-closed unknown op/fn/kind is a load error, ADR-0023). Entity-
54
+ * aware TYPE inference (`inferExprType` → ERR_COMPUTED_TYPE_MISMATCH) runs later
55
+ * in the projection validation pass, where the base entity's fields are known.
56
+ */
57
+ export declare class ExpressionAttr extends MetaAttr {
58
+ get dataType(): DataType;
59
+ coerce(raw: unknown): AttrValue;
60
+ validateValue(value: AttrValue): ValueError[];
61
+ }
62
+ //# sourceMappingURL=meta-attr-expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-attr-expression.d.ts","sourceRoot":"","sources":["../../../src/core/attr/meta-attr-expression.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAMrE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAQ3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC3D,MAAM,MAAM,QAAQ,GAChB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC;AAMrC;sFACsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAiCxD;AAUD,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,WAAW,CAkD7G;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAqBtE;AAED;;;;;;;GAOG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,IAAa,QAAQ,IAAI,QAAQ,CAEhC;IAEQ,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS;IAM/B,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,EAAE;CAWvD"}
@@ -0,0 +1,203 @@
1
+ // attr.expression — the closed structured-expression node grammar backing
2
+ // origin.computed (#195). A row-level value computed from a base entity's own
3
+ // fields. Deliberately NOT a raw-SQL string: a declarative, backend-agnostic
4
+ // tree that any lowering (SQL view DDL, an in-process evaluator, a document
5
+ // store) can walk.
6
+ //
7
+ // It shares the FILTER op vocabulary and per-subtype legality bands
8
+ // (query-constants.ts) so the two languages stay ONE vocabulary, and a canonical
9
+ // filter object embeds into it (`filterToExpr`) — so each port implements one
10
+ // expression engine and the filter renderers become thin adapters. The filter's
11
+ // leaves are `field → {op: literal}` and cannot hold a value tree (field-vs-field,
12
+ // coalesce), which is why the expression tree is its own grammar rather than a
13
+ // reused filter object.
14
+ //
15
+ // This module exposes the STANDALONE grammar (validate / infer / embed) AND the
16
+ // `attr.expression` MetaAttr registration. The registration is only live once the
17
+ // subtype is in ATTR_SUBTYPES + the canonical spec (a COORDINATED cross-port step,
18
+ // since the registry manifest is a single shared byte-matched file) — #195.
19
+ import { FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IS_NULL, FILTER_COMPOSE_AND, FILTER_COMPOSE_OR, opsForSubType, } from "../query/query-constants.js";
20
+ import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_BOOLEAN, } from "../field/field-constants.js";
21
+ import { MetaAttr, runtimeTypeName } from "./meta-attr.js";
22
+ import {} from "../../shared/meta-data.js";
23
+ import { DATA_TYPE_OBJECT } from "../../data-type.js";
24
+ import { ATTR_SUBTYPE_EXPRESSION } from "./attr-constants.js";
25
+ import { registerAttrClass } from "../../attr-class-map.js";
26
+ // --- Expression-only op/fn names (the comparison + and/or/isNull names are the
27
+ // --- shared filter vocabulary above; these three are new). ---
28
+ export const EXPR_OP_IS_NOT_NULL = "isNotNull";
29
+ export const EXPR_OP_NOT = "not";
30
+ export const EXPR_FN_COALESCE = "coalesce";
31
+ const COMPARISON_OPS = new Set([
32
+ FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE,
33
+ ]);
34
+ const NULL_OPS = new Set([FILTER_OP_IS_NULL, EXPR_OP_IS_NOT_NULL]);
35
+ const VARIADIC_LOGIC_OPS = new Set([FILTER_COMPOSE_AND, FILTER_COMPOSE_OR]);
36
+ function isObj(v) {
37
+ return typeof v === "object" && v !== null && !Array.isArray(v);
38
+ }
39
+ /** Structural well-formedness of an expression tree (known node kinds, ops, arity).
40
+ * Returns [] when valid. No entity/type context — see `inferExprType` for typing. */
41
+ export function validateExprNode(node) {
42
+ if (!isObj(node))
43
+ return [`expression node must be an object, got ${node === null ? "null" : Array.isArray(node) ? "array" : typeof node}`];
44
+ if ("field" in node) {
45
+ return typeof node.field === "string" && node.field.length > 0 ? [] : ["expression 'field' must be a non-empty string"];
46
+ }
47
+ if ("value" in node) {
48
+ const v = node.value;
49
+ return v === null || typeof v === "string" || typeof v === "number" || typeof v === "boolean"
50
+ ? [] : ["expression 'value' must be a scalar literal (string/number/boolean/null)"];
51
+ }
52
+ if ("fn" in node) {
53
+ if (node.fn !== EXPR_FN_COALESCE)
54
+ return [`unknown expression fn '${String(node.fn)}'`];
55
+ return Array.isArray(node.args) && node.args.length >= 1
56
+ ? node.args.flatMap(validateExprNode) : [`'${EXPR_FN_COALESCE}' requires a non-empty args array`];
57
+ }
58
+ if ("op" in node) {
59
+ const op = node.op;
60
+ if (typeof op !== "string")
61
+ return ["expression 'op' must be a string"];
62
+ if (COMPARISON_OPS.has(op)) {
63
+ return "left" in node && "right" in node
64
+ ? [...validateExprNode(node.left), ...validateExprNode(node.right)]
65
+ : [`comparison op '${op}' requires 'left' and 'right'`];
66
+ }
67
+ if (NULL_OPS.has(op) || op === EXPR_OP_NOT) {
68
+ return "arg" in node ? validateExprNode(node.arg) : [`op '${op}' requires 'arg'`];
69
+ }
70
+ if (VARIADIC_LOGIC_OPS.has(op)) {
71
+ return Array.isArray(node.args) && node.args.length >= 1
72
+ ? node.args.flatMap(validateExprNode) : [`op '${op}' requires a non-empty args array`];
73
+ }
74
+ return [`unknown expression op '${op}'`];
75
+ }
76
+ return ["expression node must be one of {field}, {value}, {op,…}, {fn,…}"];
77
+ }
78
+ /** The subtype of a scalar literal (coarse: an integer number → int, else double). */
79
+ function literalType(v) {
80
+ if (typeof v === "string")
81
+ return FIELD_SUBTYPE_STRING;
82
+ if (typeof v === "boolean")
83
+ return FIELD_SUBTYPE_BOOLEAN;
84
+ if (typeof v === "number")
85
+ return Number.isInteger(v) ? FIELD_SUBTYPE_INT : FIELD_SUBTYPE_DOUBLE;
86
+ return undefined; // null literal
87
+ }
88
+ /**
89
+ * Bottom-up type inference for a computed expression. `resolveField(name)` returns
90
+ * the subType of a base-entity field ref (undefined = unresolvable). Comparisons /
91
+ * null-tests / logic → boolean; a field ref → its subType; coalesce → the unified
92
+ * arg subType. Also enforces per-operand op legality against `OPS_BY_SUBTYPE`
93
+ * (the same bands filters use), so e.g. `gt` on a boolean operand is rejected.
94
+ */
95
+ export function inferExprType(node, resolveField) {
96
+ const structural = validateExprNode(node);
97
+ if (structural.length)
98
+ return { type: undefined, errors: structural };
99
+ const n = node;
100
+ if ("field" in n) {
101
+ const t = resolveField(n.field);
102
+ return t === undefined
103
+ ? { type: undefined, errors: [`expression field '${String(n.field)}' does not resolve to a base entity field`] }
104
+ : { type: t, errors: [] };
105
+ }
106
+ if ("value" in n)
107
+ return { type: literalType(n.value), errors: [] };
108
+ if ("fn" in n) { // coalesce
109
+ const argResults = n.args.map((a) => inferExprType(a, resolveField));
110
+ const errors = argResults.flatMap((a) => a.errors);
111
+ const argTypes = argResults.map((a) => a.type).filter((t) => t !== undefined);
112
+ const unified = argTypes[0];
113
+ if (unified !== undefined && argTypes.some((t) => t !== unified)) {
114
+ errors.push(`'${EXPR_FN_COALESCE}' arguments have differing types (${[...new Set(argTypes)].join(", ")})`);
115
+ }
116
+ return { type: unified, errors };
117
+ }
118
+ const op = n.op;
119
+ if (COMPARISON_OPS.has(op)) {
120
+ const l = inferExprType(n.left, resolveField);
121
+ const r = inferExprType(n.right, resolveField);
122
+ const errors = [...l.errors, ...r.errors];
123
+ if (l.type !== undefined && !opsForSubType(l.type).includes(op)) {
124
+ errors.push(`op '${op}' is not legal for a ${l.type} operand`);
125
+ }
126
+ return { type: FIELD_SUBTYPE_BOOLEAN, errors };
127
+ }
128
+ if (NULL_OPS.has(op)) {
129
+ return { type: FIELD_SUBTYPE_BOOLEAN, errors: inferExprType(n.arg, resolveField).errors };
130
+ }
131
+ if (op === EXPR_OP_NOT || VARIADIC_LOGIC_OPS.has(op)) {
132
+ const kids = op === EXPR_OP_NOT ? [n.arg] : n.args;
133
+ const errors = [];
134
+ for (const k of kids) {
135
+ const kt = inferExprType(k, resolveField);
136
+ errors.push(...kt.errors);
137
+ if (kt.type !== undefined && kt.type !== FIELD_SUBTYPE_BOOLEAN) {
138
+ errors.push(`op '${op}' requires boolean operands, got ${kt.type}`);
139
+ }
140
+ }
141
+ return { type: FIELD_SUBTYPE_BOOLEAN, errors };
142
+ }
143
+ return { type: undefined, errors: [`unknown expression op '${op}'`] };
144
+ }
145
+ /**
146
+ * Embed a CANONICAL filter object (`{ field: { op: value } }` with `and`/`or`
147
+ * composition — the desugared `attr.filter` form) into an expression tree, so the
148
+ * two languages share one evaluator. `isNull: false` becomes `isNotNull`.
149
+ */
150
+ export function filterToExpr(filter) {
151
+ const clauses = [];
152
+ for (const [key, raw] of Object.entries(filter)) {
153
+ if (key === FILTER_COMPOSE_AND || key === FILTER_COMPOSE_OR) {
154
+ const subs = raw.map(filterToExpr);
155
+ clauses.push({ op: key, args: subs });
156
+ continue;
157
+ }
158
+ const opObj = raw;
159
+ for (const [op, val] of Object.entries(opObj)) {
160
+ if (op === FILTER_OP_IS_NULL) {
161
+ clauses.push(val === false
162
+ ? { op: EXPR_OP_IS_NOT_NULL, arg: { field: key } }
163
+ : { op: FILTER_OP_IS_NULL, arg: { field: key } });
164
+ }
165
+ else {
166
+ clauses.push({ op, left: { field: key }, right: { value: val } });
167
+ }
168
+ }
169
+ }
170
+ const [only] = clauses;
171
+ return clauses.length === 1 && only !== undefined ? only : { op: FILTER_COMPOSE_AND, args: clauses };
172
+ }
173
+ /**
174
+ * ExpressionAttr — attr subtype `expression`. Object-shaped value holding a
175
+ * closed expression tree (`@expr` on origin.computed). Stored verbatim (no
176
+ * desugar); `validateValue` enforces STRUCTURAL well-formedness of the node
177
+ * grammar (a fail-closed unknown op/fn/kind is a load error, ADR-0023). Entity-
178
+ * aware TYPE inference (`inferExprType` → ERR_COMPUTED_TYPE_MISMATCH) runs later
179
+ * in the projection validation pass, where the base entity's fields are known.
180
+ */
181
+ export class ExpressionAttr extends MetaAttr {
182
+ get dataType() {
183
+ return DATA_TYPE_OBJECT;
184
+ }
185
+ coerce(raw) {
186
+ // The expression tree is the canonical shape; pass a non-object through so
187
+ // validateValue rejects it.
188
+ return raw;
189
+ }
190
+ validateValue(value) {
191
+ // Only shape (must be an object) is checked here — the CLOSED node grammar
192
+ // (fail-closed unknown op/fn/kind → ERR_UNKNOWN_EXPR_NODE) and entity-aware
193
+ // type inference are validated in the origin.computed validation pass, where
194
+ // the base entity's fields are known. Keeping the deep check out of the attr
195
+ // class matches the cross-port contract (C#/Java/Python store @expr verbatim)
196
+ // and mirrors FilterAttr, which likewise validates only shape.
197
+ return typeof value === "object" && value !== null && !Array.isArray(value)
198
+ ? []
199
+ : [{ message: `attribute '@${this.name}' must be of type 'expression' but got ${runtimeTypeName(value)}` }];
200
+ }
201
+ }
202
+ registerAttrClass(ATTR_SUBTYPE_EXPRESSION, ExpressionAttr);
203
+ //# sourceMappingURL=meta-attr-expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-attr-expression.js","sourceRoot":"","sources":["../../../src/core/attr/meta-attr-expression.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,14 @@ export declare class MetaField extends MetaData implements DataTypeAware {
54
54
  views(): MetaView[];
55
55
  /** Own views only — excludes views inherited via extends. */
56
56
  ownViews(): MetaView[];
57
+ /**
58
+ * True when this field carries an `origin.*` child (passthrough / aggregate /
59
+ * computed / first): its value is DERIVED from other data, not stored in the
60
+ * object's own writable table. A derived field is read-only wherever it lives
61
+ * (ADR-0028) — excluded from the write-table DDL, the ORM table def, and the
62
+ * Insert/Update codecs; it exists only on the read (view) side. `origin.*` never
63
+ * inherits (ADR-0029), so the check is own-only (category 4). */
64
+ isDerived(): boolean;
57
65
  /** The typed supertype field if `extends:` resolved, else undefined. */
58
66
  resolveSuper(): MetaField | undefined;
59
67
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"meta-field.d.ts","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAQnB,MAAM,oBAAoB,CAAC;AA8B5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAiCrE,qBAAa,SAAU,SAAQ,QAAS,YAAW,aAAa;IAC9D,qEAAqE;IACrE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,mFAAmF;IACnF,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS;IAI/B;4FACwF;IACxF,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED;yDACqD;IACrD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAG/B;IAED,yFAAyF;IACzF,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;;;OAWG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;IASrC,wFAAwF;IACxF,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,6EAA6E;IAC7E,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,6EAA6E;IAC7E,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAG9B;IAED;yDACqD;IACrD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;;;;OAOG;IACH,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,+IAA+I;IAC/I,UAAU,IAAI,aAAa,EAAE;IAM7B,+GAA+G;IAC/G,aAAa,IAAI,aAAa,EAAE;IAOhC,gIAAgI;IAChI,KAAK,IAAI,QAAQ,EAAE;IAMnB,6DAA6D;IAC7D,QAAQ,IAAI,QAAQ,EAAE;IAOtB,wEAAwE;IACxE,YAAY,IAAI,SAAS,GAAG,SAAS;IAerC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO;IAQxD;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,MAAkB,GAAG,IAAI;CAOtE"}
1
+ {"version":3,"file":"meta-field.d.ts","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAQnB,MAAM,oBAAoB,CAAC;AA8B5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAiCrE,qBAAa,SAAU,SAAQ,QAAS,YAAW,aAAa;IAC9D,qEAAqE;IACrE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,mFAAmF;IACnF,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS;IAI/B;4FACwF;IACxF,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED;yDACqD;IACrD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAG/B;IAED,yFAAyF;IACzF,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;;;OAWG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;IASrC,wFAAwF;IACxF,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,6EAA6E;IAC7E,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,6EAA6E;IAC7E,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAG9B;IAED;yDACqD;IACrD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;;;;OAOG;IACH,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,+IAA+I;IAC/I,UAAU,IAAI,aAAa,EAAE;IAM7B,+GAA+G;IAC/G,aAAa,IAAI,aAAa,EAAE;IAOhC,gIAAgI;IAChI,KAAK,IAAI,QAAQ,EAAE;IAMnB,6DAA6D;IAC7D,QAAQ,IAAI,QAAQ,EAAE;IAOtB;;;;;;qEAMiE;IACjE,SAAS,IAAI,OAAO;IAKpB,wEAAwE;IACxE,YAAY,IAAI,SAAS,GAAG,SAAS;IAerC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO;IAQxD;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,MAAkB,GAAG,IAAI;CAOtE"}
@@ -5,7 +5,7 @@
5
5
  import { MetaData } from "../../shared/meta-data.js";
6
6
  import { DATA_TYPE_STRING, DATA_TYPE_INT, DATA_TYPE_LONG, DATA_TYPE_DOUBLE, DATA_TYPE_BOOLEAN, DATA_TYPE_DATE, DATA_TYPE_OBJECT, } from "../../data-type.js";
7
7
  import { convertToDataType } from "../../data-converter.js";
8
- import { TYPE_VALIDATOR, TYPE_VIEW, SUBTYPE_BASE } from "../../shared/base-types.js";
8
+ import { TYPE_VALIDATOR, TYPE_VIEW, TYPE_ORIGIN, SUBTYPE_BASE } from "../../shared/base-types.js";
9
9
  import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, FIELD_SUBTYPE_URI, FIELD_SUBTYPE_INET, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_OBJECT_REF, } from "./field-constants.js";
10
10
  import { FIELD_ATTR_COLUMN } from "../../persistence/db/db-constants.js";
11
11
  import { VALIDATOR_SUBTYPE_REQUIRED } from "../validator/validator-constants.js";
@@ -138,6 +138,17 @@ export class MetaField extends MetaData {
138
138
  // ADR-0039: own-accessor definition — the deliberate own-only API twin of views().
139
139
  this.ownChildren().filter((c) => c.type === TYPE_VIEW));
140
140
  }
141
+ /**
142
+ * True when this field carries an `origin.*` child (passthrough / aggregate /
143
+ * computed / first): its value is DERIVED from other data, not stored in the
144
+ * object's own writable table. A derived field is read-only wherever it lives
145
+ * (ADR-0028) — excluded from the write-table DDL, the ORM table def, and the
146
+ * Insert/Update codecs; it exists only on the read (view) side. `origin.*` never
147
+ * inherits (ADR-0029), so the check is own-only (category 4). */
148
+ isDerived() {
149
+ // ADR-0039 own (category 4): origin.* never inherits (ADR-0029) — own by policy.
150
+ return this.ownChildren().some((c) => c.type === TYPE_ORIGIN);
151
+ }
141
152
  /** The typed supertype field if `extends:` resolved, else undefined. */
142
153
  resolveSuper() {
143
154
  return this.superData;
@@ -1 +1 @@
1
- {"version":3,"file":"meta-field.js","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta-field.js","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,10 @@ export declare const OBJECT_ATTR_DISCRIMINATOR = "discriminator";
10
10
  /** FR-014: on a subtype of an entity with @discriminator: the value that
11
11
  * identifies rows of this subtype in the shared discriminator field. */
12
12
  export declare const OBJECT_ATTR_DISCRIMINATOR_VALUE = "discriminatorValue";
13
+ /** #207: an optional row-scope predicate on an object.projection (an attr.filter
14
+ * object) selecting which rows the derived view returns — lowered to an outer
15
+ * SQL WHERE. Mirrors origin.aggregate's @filter placement (attr.filter subType),
16
+ * but resolves against the projection's OWN declared fields rather than one
17
+ * aggregated entity. An aggregate-derived field is not addressable (fail-closed). */
18
+ export declare const OBJECT_PROJECTION_ATTR_FILTER = "filter";
13
19
  //# sourceMappingURL=object-constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-constants.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,eAAO,MAAM,eAAe,oDAKlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAU7D;;gDAEgD;AAChD,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD;yEACyE;AACzE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC"}
1
+ {"version":3,"file":"object-constants.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,eAAO,MAAM,eAAe,oDAKlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAU7D;;gDAEgD;AAChD,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD;yEACyE;AACzE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAKpE;;;;sFAIsF;AACtF,eAAO,MAAM,6BAA6B,WAAW,CAAC"}
@@ -32,4 +32,13 @@ export const OBJECT_ATTR_DISCRIMINATOR = "discriminator";
32
32
  /** FR-014: on a subtype of an entity with @discriminator: the value that
33
33
  * identifies rows of this subtype in the shared discriminator field. */
34
34
  export const OBJECT_ATTR_DISCRIMINATOR_VALUE = "discriminatorValue";
35
+ // ---------------------------------------------------------------------------
36
+ // #207 — projection row-scope @filter (view-level WHERE)
37
+ // ---------------------------------------------------------------------------
38
+ /** #207: an optional row-scope predicate on an object.projection (an attr.filter
39
+ * object) selecting which rows the derived view returns — lowered to an outer
40
+ * SQL WHERE. Mirrors origin.aggregate's @filter placement (attr.filter subType),
41
+ * but resolves against the projection's OWN declared fields rather than one
42
+ * aggregated entity. An aggregate-derived field is not addressable (fail-closed). */
43
+ export const OBJECT_PROJECTION_ATTR_FILTER = "filter";
35
44
  //# sourceMappingURL=object-constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-constants.js","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAC9E,EAAE;AACF,wDAAwD;AACxD,mEAAmE;AACnE,+DAA+D;AAC/D,mFAAmF;AACnF,EAAE;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;CACjB,CAAC;AAGX,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,qEAAqE;AACrE,8EAA8E;AAC9E,mDAAmD;AAEnD;;gDAEgD;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAEzD;yEACyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC"}
1
+ {"version":3,"file":"object-constants.js","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAC9E,EAAE;AACF,wDAAwD;AACxD,mEAAmE;AACnE,+DAA+D;AAC/D,mFAAmF;AACnF,EAAE;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;CACjB,CAAC;AAGX,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,qEAAqE;AACrE,8EAA8E;AAC9E,mDAAmD;AAEnD;;gDAEgD;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAEzD;yEACyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;AAEpE,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAC9E;;;;sFAIsF;AACtF,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"object-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,iBAAiB,EAAE,kBAsH/B,CAAC"}
1
+ {"version":3,"file":"object-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,iBAAiB,EAAE,kBAgI/B,CAAC"}
@@ -113,7 +113,17 @@ export const OBJECT_DEFINITION = {
113
113
  "extendsBase": true,
114
114
  "description": "A derived read-only representation of entities. Its fields are extends-bound / origin-derived / self-declared-under-external-assembly, all read-only at the subtype level. Identity is optional and MUST extend an entity identity; sources are restricted to read-only @kinds. The declared field set IS the exposure (inclusive, fail-closed).",
115
115
  "whenToUse": "You need a derived, read-only view over entities — a report, summary, or joined/aggregated read model. Declare it (with origin.* children) instead of hand-writing the SELECT/joins; it stays read-only and regenerates.",
116
- "rules": "object.projection is a derived read-only representation: every field is extends-bound, origin-derived, or self-declared-under-external-assembly, and all are read-only at the subtype level. Identity is optional and, when present, MUST extend an entity identity. Sources are restricted to read-only @kinds. The declared field set IS the exposure — an inclusive list, fail-closed. A projection NEVER declares relationships (derivation is expressed via @via, not a relationship child) and NEVER co-locates templates — hence its child set omits both relationship and template. See ADR-0028 (object taxonomy, projection)."
116
+ "rules": "object.projection is a derived read-only representation: every field is extends-bound, origin-derived, or self-declared-under-external-assembly, and all are read-only at the subtype level. Identity is optional and, when present, MUST extend an entity identity. Sources are restricted to read-only @kinds. The declared field set IS the exposure — an inclusive list, fail-closed. A projection NEVER declares relationships (derivation is expressed via @via, not a relationship child) and NEVER co-locates templates — hence its child set omits both relationship and template. See ADR-0028 (object taxonomy, projection).",
117
+ "children": [
118
+ {
119
+ "type": "attr",
120
+ "subType": "filter",
121
+ "name": "filter",
122
+ "min": 0,
123
+ "max": 1,
124
+ "description": "Optional row-scope predicate (a portable attr.filter object: eq/ne/gt/gte/lt/lte/like/in/isNull with and/or, desugared to { field: { op: value } } at parse time) selecting which rows the view returns — lowered to an outer SQL WHERE. Resolves against the projection's own declared fields; an aggregate-derived field is not addressable (fail-closed)."
125
+ }
126
+ ]
117
127
  }
118
128
  ]
119
129
  };
@@ -1 +1 @@
1
- {"version":3,"file":"object-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,kZAAkZ;YACja,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,kOAAkO;YACjP,WAAW,EAAE,4HAA4H;YACzI,OAAO,EAAE,wYAAwY;YACjZ,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,cAAc;oBACtB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,mUAAmU;iBACnV;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,oBAAoB;oBAC5B,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,iUAAiU;iBACjV;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,0NAA0N;YACzO,WAAW,EAAE,yKAAyK;YACtL,OAAO,EAAE,2dAA2d;YACpe,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,cAAc;oBACtB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,kVAAkV;YACjW,WAAW,EAAE,0NAA0N;YACvO,OAAO,EAAE,ymBAAymB;SACnnB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"object-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { MetaDataTypeProvider } from "./provider.js";
3
3
  import "./core/attr/meta-attr-stringarray.js";
4
4
  import "./core/attr/meta-attr-filter.js";
5
5
  import "./core/attr/meta-attr-properties.js";
6
+ import "./core/attr/meta-attr-expression.js";
6
7
  /**
7
8
  * The core metaobjects metamodel — the seven base types (object, field, attr,
8
9
  * validator, view, identity, relationship) plus layout / source / origin and
@@ -1 +1 @@
1
- {"version":3,"file":"core-types.d.ts","sourceRoot":"","sources":["../src/core-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAgE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAe1D,OAAO,sCAAsC,CAAC;AAC9C,OAAO,iCAAiC,CAAC;AACzC,OAAO,qCAAqC,CAAC;AA8f7C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBAM/B,CAAC;AAEF;;;;wFAIwF;AACxF,eAAO,MAAM,aAAa,EAAE,SAAS,oBAAoB,EAMxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAE9D"}
1
+ {"version":3,"file":"core-types.d.ts","sourceRoot":"","sources":["../src/core-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAgE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAe1D,OAAO,sCAAsC,CAAC;AAC9C,OAAO,iCAAiC,CAAC;AACzC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,qCAAqC,CAAC;AAkgB7C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBAM/B,CAAC;AAEF;;;;wFAIwF;AACxF,eAAO,MAAM,aAAa,EAAE,SAAS,oBAAoB,EAMxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAE9D"}
@@ -16,13 +16,14 @@ import { attrClassFor } from "./attr-class-map.js";
16
16
  import "./core/attr/meta-attr-stringarray.js";
17
17
  import "./core/attr/meta-attr-filter.js";
18
18
  import "./core/attr/meta-attr-properties.js";
19
+ import "./core/attr/meta-attr-expression.js";
19
20
  import { MetaValidator, MetaRequiredValidator, MetaLengthValidator, MetaRegexValidator, MetaNumericValidator, MetaArrayValidator, } from "./core/validator/meta-validator.js";
20
21
  import { MetaView } from "./presentation/view/meta-view.js";
21
22
  import { MetaIdentity, MetaPrimaryIdentity, MetaSecondaryIdentity, MetaReferenceIdentity, } from "./core/identity/meta-identity.js";
22
23
  import { MetaRelationship } from "./core/relationship/meta-relationship.js";
23
24
  import { MetaLayout } from "./presentation/layout/meta-layout.js";
24
25
  import { MetaSource } from "./persistence/source/meta-source.js";
25
- import { MetaOrigin, MetaPassthroughOrigin, MetaAggregateOrigin, MetaCollectionOrigin } from "./persistence/origin/meta-origin.js";
26
+ import { MetaOrigin, MetaPassthroughOrigin, MetaAggregateOrigin, MetaCollectionOrigin, MetaComputedOrigin, MetaFirstOrigin } from "./persistence/origin/meta-origin.js";
26
27
  import { defineProviderFromData } from "./provider-data.js";
27
28
  import { FIELD_DEFINITION } from "./core/field/field-definition.embedded.js";
28
29
  import { OBJECT_DEFINITION } from "./core/object/object-definition.embedded.js";
@@ -51,7 +52,7 @@ import { IDENTITY_SUBTYPES, IDENTITY_SUBTYPE_PRIMARY, IDENTITY_SUBTYPE_SECONDARY
51
52
  import { RELATIONSHIP_SUBTYPES, RELATIONSHIP_ATTR_OBJECT_REF } from "./core/relationship/relationship-constants.js";
52
53
  import { LAYOUT_SUBTYPES } from "./presentation/layout/layout-constants.js";
53
54
  import { SOURCE_SUBTYPES } from "./persistence/source/source-constants.js";
54
- import { ORIGIN_SUBTYPES, ORIGIN_SUBTYPE_PASSTHROUGH, ORIGIN_SUBTYPE_AGGREGATE, ORIGIN_SUBTYPE_COLLECTION, } from "./persistence/origin/origin-constants.js";
55
+ import { ORIGIN_SUBTYPES, ORIGIN_SUBTYPE_PASSTHROUGH, ORIGIN_SUBTYPE_AGGREGATE, ORIGIN_SUBTYPE_COLLECTION, ORIGIN_SUBTYPE_COMPUTED, ORIGIN_SUBTYPE_FIRST, } from "./persistence/origin/origin-constants.js";
55
56
  // ---------------------------------------------------------------------------
56
57
  // The per-(type, subType) attribute schemas live in per-concern *-schema.ts
57
58
  // modules (e.g. presentation/view/view-schema.ts) or, increasingly under
@@ -102,6 +103,8 @@ const ORIGIN_CLASS_MAP = new Map([
102
103
  [ORIGIN_SUBTYPE_PASSTHROUGH, MetaPassthroughOrigin],
103
104
  [ORIGIN_SUBTYPE_AGGREGATE, MetaAggregateOrigin],
104
105
  [ORIGIN_SUBTYPE_COLLECTION, MetaCollectionOrigin],
106
+ [ORIGIN_SUBTYPE_COMPUTED, MetaComputedOrigin],
107
+ [ORIGIN_SUBTYPE_FIRST, MetaFirstOrigin],
105
108
  ]);
106
109
  // ATTR_CLASS_MAP + attrClassFor live in the leaf module ./attr-class-map.ts
107
110
  // (imported above) so MetaData.setAttr can resolve an attr subclass without