@metaobjectsdev/codegen-ts 0.24.5 → 1.0.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 (237) hide show
  1. package/README.md +37 -12
  2. package/dist/api-surface.d.ts +29 -0
  3. package/dist/api-surface.d.ts.map +1 -1
  4. package/dist/api-surface.js +47 -0
  5. package/dist/api-surface.js.map +1 -1
  6. package/dist/column-mapper.d.ts +12 -0
  7. package/dist/column-mapper.d.ts.map +1 -1
  8. package/dist/column-mapper.js +1 -0
  9. package/dist/column-mapper.js.map +1 -1
  10. package/dist/constants.d.ts +24 -11
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +54 -19
  13. package/dist/constants.js.map +1 -1
  14. package/dist/db-emitting.d.ts +6 -0
  15. package/dist/db-emitting.d.ts.map +1 -0
  16. package/dist/db-emitting.js +26 -0
  17. package/dist/db-emitting.js.map +1 -0
  18. package/dist/generator-registry.d.ts.map +1 -1
  19. package/dist/generator-registry.js +14 -1
  20. package/dist/generator-registry.js.map +1 -1
  21. package/dist/generator.d.ts +5 -0
  22. package/dist/generator.d.ts.map +1 -1
  23. package/dist/generator.js.map +1 -1
  24. package/dist/generators/agent-docs-file.d.ts +19 -0
  25. package/dist/generators/agent-docs-file.d.ts.map +1 -0
  26. package/dist/generators/agent-docs-file.js +257 -0
  27. package/dist/generators/agent-docs-file.js.map +1 -0
  28. package/dist/generators/agent-requirements-page.d.ts +22 -0
  29. package/dist/generators/agent-requirements-page.d.ts.map +1 -0
  30. package/dist/generators/agent-requirements-page.js +175 -0
  31. package/dist/generators/agent-requirements-page.js.map +1 -0
  32. package/dist/generators/agent-schema-input.d.ts +69 -0
  33. package/dist/generators/agent-schema-input.d.ts.map +1 -0
  34. package/dist/generators/agent-schema-input.js +23 -0
  35. package/dist/generators/agent-schema-input.js.map +1 -0
  36. package/dist/generators/agent-schema-page.d.ts +21 -0
  37. package/dist/generators/agent-schema-page.d.ts.map +1 -0
  38. package/dist/generators/agent-schema-page.js +241 -0
  39. package/dist/generators/agent-schema-page.js.map +1 -0
  40. package/dist/generators/agent-ui-page.d.ts +22 -0
  41. package/dist/generators/agent-ui-page.d.ts.map +1 -0
  42. package/dist/generators/agent-ui-page.js +253 -0
  43. package/dist/generators/agent-ui-page.js.map +1 -0
  44. package/dist/generators/api-docs-file.d.ts.map +1 -1
  45. package/dist/generators/api-docs-file.js +13 -6
  46. package/dist/generators/api-docs-file.js.map +1 -1
  47. package/dist/generators/api-model.d.ts +6 -0
  48. package/dist/generators/api-model.d.ts.map +1 -1
  49. package/dist/generators/api-model.js +54 -35
  50. package/dist/generators/api-model.js.map +1 -1
  51. package/dist/generators/callable-file.js +1 -1
  52. package/dist/generators/callable-file.js.map +1 -1
  53. package/dist/generators/docs-data-builder.d.ts.map +1 -1
  54. package/dist/generators/docs-data-builder.js +47 -2
  55. package/dist/generators/docs-data-builder.js.map +1 -1
  56. package/dist/generators/docs-data.d.ts +6 -2
  57. package/dist/generators/docs-data.d.ts.map +1 -1
  58. package/dist/generators/index.d.ts +3 -8
  59. package/dist/generators/index.d.ts.map +1 -1
  60. package/dist/generators/index.js +19 -14
  61. package/dist/generators/index.js.map +1 -1
  62. package/dist/generators/names-file.d.ts +17 -0
  63. package/dist/generators/names-file.d.ts.map +1 -0
  64. package/dist/generators/names-file.js +95 -0
  65. package/dist/generators/names-file.js.map +1 -0
  66. package/dist/generators/requirements-markdown.d.ts +18 -1
  67. package/dist/generators/requirements-markdown.d.ts.map +1 -1
  68. package/dist/generators/requirements-markdown.js +11 -9
  69. package/dist/generators/requirements-markdown.js.map +1 -1
  70. package/dist/generators/routes-file-hono.d.ts +17 -2
  71. package/dist/generators/routes-file-hono.d.ts.map +1 -1
  72. package/dist/generators/routes-file-hono.js +9 -11
  73. package/dist/generators/routes-file-hono.js.map +1 -1
  74. package/dist/generators/routes-file.d.ts +17 -2
  75. package/dist/generators/routes-file.d.ts.map +1 -1
  76. package/dist/generators/routes-file.js +10 -8
  77. package/dist/generators/routes-file.js.map +1 -1
  78. package/dist/generators/template-generator.d.ts.map +1 -1
  79. package/dist/generators/template-generator.js +20 -6
  80. package/dist/generators/template-generator.js.map +1 -1
  81. package/dist/index.d.ts +20 -5
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +43 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/metaobjects-config.d.ts +38 -1
  86. package/dist/metaobjects-config.d.ts.map +1 -1
  87. package/dist/metaobjects-config.js +9 -1
  88. package/dist/metaobjects-config.js.map +1 -1
  89. package/dist/names.d.ts +275 -0
  90. package/dist/names.d.ts.map +1 -0
  91. package/dist/names.js +433 -0
  92. package/dist/names.js.map +1 -0
  93. package/dist/overwrite-policy.d.ts.map +1 -1
  94. package/dist/overwrite-policy.js +15 -3
  95. package/dist/overwrite-policy.js.map +1 -1
  96. package/dist/projection/extract-view-spec.d.ts +25 -1
  97. package/dist/projection/extract-view-spec.d.ts.map +1 -1
  98. package/dist/projection/extract-view-spec.js +79 -6
  99. package/dist/projection/extract-view-spec.js.map +1 -1
  100. package/dist/reference-templates.d.ts +1 -1
  101. package/dist/reference-templates.d.ts.map +1 -1
  102. package/dist/reference-templates.js +1 -1
  103. package/dist/reference-templates.js.map +1 -1
  104. package/dist/render-context.d.ts +12 -1
  105. package/dist/render-context.d.ts.map +1 -1
  106. package/dist/render-context.js +1 -0
  107. package/dist/render-context.js.map +1 -1
  108. package/dist/retired-codegen-attrs.d.ts +32 -0
  109. package/dist/retired-codegen-attrs.d.ts.map +1 -0
  110. package/dist/retired-codegen-attrs.js +47 -0
  111. package/dist/retired-codegen-attrs.js.map +1 -0
  112. package/dist/routes-expose.d.ts +63 -0
  113. package/dist/routes-expose.d.ts.map +1 -0
  114. package/dist/routes-expose.js +57 -0
  115. package/dist/routes-expose.js.map +1 -0
  116. package/dist/runner.d.ts +18 -0
  117. package/dist/runner.d.ts.map +1 -1
  118. package/dist/runner.js +109 -7
  119. package/dist/runner.js.map +1 -1
  120. package/dist/templates/callable-file.d.ts +7 -2
  121. package/dist/templates/callable-file.d.ts.map +1 -1
  122. package/dist/templates/callable-file.js +54 -9
  123. package/dist/templates/callable-file.js.map +1 -1
  124. package/dist/templates/drizzle-schema.d.ts.map +1 -1
  125. package/dist/templates/drizzle-schema.js +236 -65
  126. package/dist/templates/drizzle-schema.js.map +1 -1
  127. package/dist/templates/entity-constants.d.ts +15 -6
  128. package/dist/templates/entity-constants.d.ts.map +1 -1
  129. package/dist/templates/entity-constants.js +85 -161
  130. package/dist/templates/entity-constants.js.map +1 -1
  131. package/dist/templates/entity-file.d.ts.map +1 -1
  132. package/dist/templates/entity-file.js +38 -4
  133. package/dist/templates/entity-file.js.map +1 -1
  134. package/dist/templates/entity-meta-file.d.ts +15 -1
  135. package/dist/templates/entity-meta-file.d.ts.map +1 -1
  136. package/dist/templates/entity-meta-file.js +12 -2
  137. package/dist/templates/entity-meta-file.js.map +1 -1
  138. package/dist/templates/entity-ui-descriptor.d.ts +112 -0
  139. package/dist/templates/entity-ui-descriptor.d.ts.map +1 -0
  140. package/dist/templates/entity-ui-descriptor.js +238 -0
  141. package/dist/templates/entity-ui-descriptor.js.map +1 -0
  142. package/dist/templates/field-meta.d.ts +46 -9
  143. package/dist/templates/field-meta.d.ts.map +1 -1
  144. package/dist/templates/field-meta.js +95 -21
  145. package/dist/templates/field-meta.js.map +1 -1
  146. package/dist/templates/names-decl.d.ts +38 -0
  147. package/dist/templates/names-decl.d.ts.map +1 -0
  148. package/dist/templates/names-decl.js +104 -0
  149. package/dist/templates/names-decl.js.map +1 -0
  150. package/dist/templates/projection-decl.d.ts +21 -0
  151. package/dist/templates/projection-decl.d.ts.map +1 -1
  152. package/dist/templates/projection-decl.js +53 -29
  153. package/dist/templates/projection-decl.js.map +1 -1
  154. package/dist/templates/queries-file.d.ts.map +1 -1
  155. package/dist/templates/queries-file.js +17 -2
  156. package/dist/templates/queries-file.js.map +1 -1
  157. package/dist/templates/requirement-test.d.ts.map +1 -1
  158. package/dist/templates/requirement-test.js +13 -2
  159. package/dist/templates/requirement-test.js.map +1 -1
  160. package/dist/templates/routes-file-hono.d.ts +2 -1
  161. package/dist/templates/routes-file-hono.d.ts.map +1 -1
  162. package/dist/templates/routes-file-hono.js +11 -2
  163. package/dist/templates/routes-file-hono.js.map +1 -1
  164. package/dist/templates/routes-file.d.ts +2 -1
  165. package/dist/templates/routes-file.d.ts.map +1 -1
  166. package/dist/templates/routes-file.js +54 -21
  167. package/dist/templates/routes-file.js.map +1 -1
  168. package/dist/templates/value-object-file.d.ts.map +1 -1
  169. package/dist/templates/value-object-file.js +15 -1
  170. package/dist/templates/value-object-file.js.map +1 -1
  171. package/dist/templates/view-decl.d.ts +37 -1
  172. package/dist/templates/view-decl.d.ts.map +1 -1
  173. package/dist/templates/view-decl.js +27 -3
  174. package/dist/templates/view-decl.js.map +1 -1
  175. package/dist/templates/zod-validators.d.ts +21 -0
  176. package/dist/templates/zod-validators.d.ts.map +1 -1
  177. package/dist/templates/zod-validators.js +40 -5
  178. package/dist/templates/zod-validators.js.map +1 -1
  179. package/dist/view-context.d.ts +24 -0
  180. package/dist/view-context.d.ts.map +1 -0
  181. package/dist/view-context.js +81 -0
  182. package/dist/view-context.js.map +1 -0
  183. package/package.json +6 -6
  184. package/src/api-surface.ts +53 -0
  185. package/src/column-mapper.ts +13 -0
  186. package/src/constants.ts +91 -16
  187. package/src/db-emitting.ts +31 -0
  188. package/src/generator-registry.ts +14 -4
  189. package/src/generator.ts +5 -0
  190. package/src/generators/agent-docs-file.ts +297 -0
  191. package/src/generators/agent-requirements-page.ts +199 -0
  192. package/src/generators/agent-schema-input.ts +88 -0
  193. package/src/generators/agent-schema-page.ts +297 -0
  194. package/src/generators/agent-ui-page.ts +290 -0
  195. package/src/generators/api-docs-file.ts +13 -6
  196. package/src/generators/api-model.ts +63 -34
  197. package/src/generators/callable-file.ts +1 -1
  198. package/src/generators/docs-data-builder.ts +46 -2
  199. package/src/generators/docs-data.ts +6 -2
  200. package/src/generators/index.ts +25 -14
  201. package/src/generators/names-file.ts +98 -0
  202. package/src/generators/requirements-markdown.ts +36 -2
  203. package/src/generators/routes-file-hono.ts +19 -10
  204. package/src/generators/routes-file.ts +20 -7
  205. package/src/generators/template-generator.ts +20 -6
  206. package/src/index.ts +64 -4
  207. package/src/metaobjects-config.ts +48 -2
  208. package/src/names.ts +629 -0
  209. package/src/overwrite-policy.ts +15 -3
  210. package/src/projection/extract-view-spec.ts +85 -6
  211. package/src/reference/entity.ts +21 -2
  212. package/src/reference/names.ts +125 -0
  213. package/src/reference/queries.ts +19 -3
  214. package/src/reference/routes-hono.ts +19 -9
  215. package/src/reference/routes.ts +25 -9
  216. package/src/reference-templates.ts +1 -1
  217. package/src/render-context.ts +13 -1
  218. package/src/retired-codegen-attrs.ts +52 -0
  219. package/src/routes-expose.ts +86 -0
  220. package/src/runner.ts +122 -11
  221. package/src/templates/callable-file.ts +60 -8
  222. package/src/templates/drizzle-schema.ts +248 -60
  223. package/src/templates/entity-constants.ts +95 -184
  224. package/src/templates/entity-file.ts +46 -4
  225. package/src/templates/entity-meta-file.ts +16 -3
  226. package/src/templates/entity-ui-descriptor.ts +305 -0
  227. package/src/templates/field-meta.ts +100 -19
  228. package/src/templates/names-decl.ts +165 -0
  229. package/src/templates/projection-decl.ts +72 -31
  230. package/src/templates/queries-file.ts +17 -2
  231. package/src/templates/requirement-test.ts +13 -2
  232. package/src/templates/routes-file-hono.ts +14 -2
  233. package/src/templates/routes-file.ts +69 -24
  234. package/src/templates/value-object-file.ts +15 -1
  235. package/src/templates/view-decl.ts +53 -3
  236. package/src/templates/zod-validators.ts +41 -5
  237. package/src/view-context.ts +88 -0
@@ -12,9 +12,7 @@
12
12
  // name: "email",
13
13
  // label: "Email Address", // from @label on the view, falls back to humanized field name
14
14
  // view: "text", // MetaView subtype
15
- // htmlType: "email", // optional; only when it maps to a real HTML input type
16
- // placeholder: "you@example.com", // optional; only when @placeholder is set on the view
17
- // helpText: "We never share this.", // optional; only when @helpText is set
15
+ // htmlType: "email", // optional; only when the view maps to a real HTML input type
18
16
  // rules: { // optional; derived from validator children
19
17
  // required: "Email is required",
20
18
  // maxLength: { value: 255, message: "Must be 255 characters or fewer" },
@@ -27,184 +25,110 @@
27
25
  // Consumers spread `form.input.email` from useEntityForm and never touch
28
26
  // per-attribute access (placeholder, rules, etc.) by hand — the helper
29
27
  // picks them up from this object automatically.
30
- import { code } from "ts-poet";
31
- import { MetaObject, MetaField } from "@metaobjectsdev/metadata";
32
- import { VIEW_SUBTYPE_TEXT, VIEW_SUBTYPE_TEXTAREA, VIEW_SUBTYPE_NUMBER, VIEW_SUBTYPE_CHECKBOX, VIEW_SUBTYPE_DATE, VIEW_SUBTYPE_PASSWORD, VIEW_SUBTYPE_HIDDEN, VIEW_SUBTYPE_DROPDOWN, VIEW_SUBTYPE_RADIO, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, VALIDATOR_SUBTYPE_REGEX, VALIDATOR_ATTR_MIN, VALIDATOR_ATTR_MAX, VALIDATOR_ATTR_PATTERN, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_REQUIRED, } from "@metaobjectsdev/metadata";
33
- import { resolveTableName, pluralize, toSnakeCase } from "@metaobjectsdev/metadata";
34
- import { inferViewKind, currencyMetaFor, labelFor } from "./field-meta.js";
35
- /** Convert a camelCase or PascalCase field name to a human-friendly label. */
36
- function humanize(s) {
37
- return s
38
- .replace(/([a-z])([A-Z])/g, "$1 $2")
39
- .replace(/_/g, " ")
40
- .replace(/\b\w/g, (c) => c.toUpperCase())
41
- .trim();
42
- }
43
- /**
44
- * REST resource path for an entity. Pluralized + snake_cased + lowercased.
45
- * "Subscriber" → "/subscribers"
46
- * "WorkoutEvent" → "/workout_events"
47
- */
48
- export function resourcePath(entity) {
49
- // ADR-0039: resolving — a concrete entity may inherit @routePath via extends.
50
- const overrideAttr = entity.attr("routePath");
51
- if (typeof overrideAttr === "string" && overrideAttr.length > 0) {
52
- return overrideAttr.startsWith("/") ? overrideAttr : `/${overrideAttr}`;
53
- }
54
- return `/${pluralize(toSnakeCase(entity.name))}`;
55
- }
56
- /** Resolve the view subtype: explicit `view` child (own or inherited) wins, else inferred from field subType. */
57
- function resolveView(field) {
58
- const viewChild = field.views()[0];
59
- if (viewChild) {
60
- return { view: viewChild.subType, viewNode: viewChild };
61
- }
62
- return { view: inferViewKind(field) };
63
- }
64
- /**
65
- * Map a MetaView subtype to a real HTML <input type=...> value. Returns
66
- * undefined for views that don't map to <input> at all (textarea, dropdown,
67
- * radio) — consumers render the right element type themselves.
68
- */
69
- function htmlTypeFromView(view, override) {
70
- if (typeof override === "string" && override.length > 0)
71
- return override;
72
- switch (view) {
73
- case VIEW_SUBTYPE_TEXT:
74
- return "text";
75
- case VIEW_SUBTYPE_NUMBER:
76
- return "number";
77
- case VIEW_SUBTYPE_DATE:
78
- return "date";
79
- case VIEW_SUBTYPE_PASSWORD:
80
- return "password";
81
- case VIEW_SUBTYPE_CHECKBOX:
82
- return "checkbox";
83
- case VIEW_SUBTYPE_HIDDEN:
84
- return "hidden";
85
- case VIEW_SUBTYPE_RADIO:
86
- return "radio";
87
- case "month":
88
- return "month";
89
- case "email":
90
- return "email";
91
- case VIEW_SUBTYPE_TEXTAREA:
92
- case VIEW_SUBTYPE_DROPDOWN:
93
- return undefined;
94
- default:
95
- return undefined;
96
- }
97
- }
28
+ import { code, joinCode } from "ts-poet";
29
+ import { MetaObject } from "@metaobjectsdev/metadata";
30
+ import { resolveTableName } from "@metaobjectsdev/metadata";
31
+ import { physicalNameExpr } from "../names.js";
32
+ import { buildEntityUiDescriptor, resourcePath, } from "./entity-ui-descriptor.js";
33
+ // `resourcePath` moved to entity-ui-descriptor.ts with the rest of the form derivation.
34
+ // Re-exported here because it is part of this module's published surface (the package
35
+ // barrel re-exports it from this path, and api-model.ts imports it from here).
36
+ export { resourcePath };
98
37
  /**
99
- * Build RHF rules JSON-ish code from a field's validator children plus
100
- * field-level attrs (`@required`, `@maxLength`). Returns the code string
101
- * (e.g. `{ required: "X", maxLength: { value: 255, message: "..." } }`)
102
- * or undefined when there are no rules to emit.
38
+ * Render one rule entry as the RHF-shaped code fragment the descriptor emits.
39
+ *
40
+ * Order is the descriptor's, which is declaration order see the ordering note in
41
+ * entity-ui-descriptor.ts for why that is not incidental.
103
42
  */
104
- function renderFieldRules(field) {
105
- const ruleParts = [];
106
- let hasRequired = false;
107
- let hasMaxLength = false;
108
- // ADR-0039: resolving — a validator may inherit its config attrs (@min/@max/
109
- // @pattern/@message/…) via extends.
110
- for (const child of field.validators()) {
111
- if (child.subType === VALIDATOR_SUBTYPE_REQUIRED) {
112
- const msg = child.attr("message") ?? `${humanize(field.name)} is required`;
113
- ruleParts.push(`required: ${JSON.stringify(msg)}`);
114
- hasRequired = true;
115
- }
116
- else if (child.subType === VALIDATOR_SUBTYPE_LENGTH) {
117
- const min = child.attr(VALIDATOR_ATTR_MIN);
118
- const max = child.attr(VALIDATOR_ATTR_MAX);
119
- if (typeof min === "number") {
120
- const msg = child.attr("minMessage") ?? `Must be at least ${min} characters`;
121
- ruleParts.push(`minLength: { value: ${min}, message: ${JSON.stringify(msg)} }`);
122
- }
123
- if (typeof max === "number") {
124
- const msg = child.attr("maxMessage") ?? `Must be ${max} characters or fewer`;
125
- ruleParts.push(`maxLength: { value: ${max}, message: ${JSON.stringify(msg)} }`);
126
- hasMaxLength = true;
127
- }
128
- }
129
- else if (child.subType === VALIDATOR_SUBTYPE_REGEX) {
130
- const pattern = child.attr(VALIDATOR_ATTR_PATTERN);
131
- if (typeof pattern === "string") {
132
- const msg = child.attr("message") ?? "Invalid format";
133
- // Emit as RegExp literal /.../ — `as const` preserves the value-ref.
134
- // Forward-slash inside the pattern is escaped so the literal closes correctly.
135
- const safe = pattern.replace(/\\/g, "\\\\").replace(/\//g, "\\/");
136
- ruleParts.push(`pattern: { value: /${safe}/, message: ${JSON.stringify(msg)} }`);
137
- }
43
+ function renderRule(r) {
44
+ switch (r.kind) {
45
+ case "required":
46
+ return `required: ${JSON.stringify(r.message)}`;
47
+ case "minLength":
48
+ return `minLength: { value: ${r.value}, message: ${JSON.stringify(r.message)} }`;
49
+ case "maxLength":
50
+ return `maxLength: { value: ${r.value}, message: ${JSON.stringify(r.message)} }`;
51
+ case "pattern": {
52
+ // Emit as a RegExp literal /.../ — `as const` preserves the value-ref. The
53
+ // descriptor carries the RAW pattern; forward-slash and backslash are escaped
54
+ // HERE, because closing a TypeScript regex literal is an emission concern.
55
+ const safe = r.pattern.replace(/\\/g, "\\\\").replace(/\//g, "\\/");
56
+ return `pattern: { value: /${safe}/, message: ${JSON.stringify(r.message)} }`;
138
57
  }
139
58
  }
140
- // Field-level @required attr (if not already covered by validator).
141
- if (!hasRequired && field.attr(FIELD_ATTR_REQUIRED) === true) {
142
- ruleParts.push(`required: ${JSON.stringify(`${humanize(field.name)} is required`)}`);
143
- }
144
- // Field-level @maxLength attr (if not already covered).
145
- const maxLenAttr = field.attr(FIELD_ATTR_MAX_LENGTH);
146
- if (!hasMaxLength && typeof maxLenAttr === "number") {
147
- ruleParts.push(`maxLength: { value: ${maxLenAttr}, message: ${JSON.stringify(`Must be ${maxLenAttr} characters or fewer`)} }`);
148
- }
149
- if (ruleParts.length === 0)
150
- return undefined;
151
- return `{ ${ruleParts.join(", ")} }`;
152
59
  }
153
60
  /** Build one nested field-object entry like `email: { name, label, ... },`. */
154
- function renderFieldEntry(field) {
155
- const { view, viewNode } = resolveView(field);
156
- const label = labelFor(field);
157
- // ADR-0039: resolving — a view node may inherit @placeholder/@helpText/@htmlType via extends.
158
- const placeholder = viewNode?.attr("placeholder");
159
- const helpText = viewNode?.attr("helpText");
160
- const htmlType = htmlTypeFromView(view, viewNode?.attr("htmlType"));
161
- const rules = renderFieldRules(field);
61
+ function renderFieldEntry(f) {
162
62
  const entries = [
163
- `name: ${JSON.stringify(field.name)}`,
164
- `label: ${JSON.stringify(label)}`,
165
- `view: ${JSON.stringify(view)}`,
63
+ `name: ${JSON.stringify(f.name)}`,
64
+ `label: ${JSON.stringify(f.label)}`,
65
+ `view: ${JSON.stringify(f.view)}`,
166
66
  ];
167
- if (htmlType !== undefined)
168
- entries.push(`htmlType: ${JSON.stringify(htmlType)}`);
169
- if (placeholder !== undefined)
170
- entries.push(`placeholder: ${JSON.stringify(placeholder)}`);
171
- if (helpText !== undefined)
172
- entries.push(`helpText: ${JSON.stringify(helpText)}`);
173
- if (rules !== undefined)
174
- entries.push(`rules: ${rules}`);
67
+ if (f.htmlType !== undefined)
68
+ entries.push(`htmlType: ${JSON.stringify(f.htmlType)}`);
69
+ if (f.rules.length > 0)
70
+ entries.push(`rules: { ${f.rules.map(renderRule).join(", ")} }`);
175
71
  // Currency-specific keys: only emitted for currency-subtype fields.
176
- const currencyMeta = currencyMetaFor(field);
177
- if (currencyMeta !== null) {
178
- entries.push(`currency: ${JSON.stringify(currencyMeta.currency)}`);
179
- entries.push(`locale: ${JSON.stringify(currencyMeta.locale)}`);
72
+ if (f.currency !== undefined) {
73
+ entries.push(`currency: ${JSON.stringify(f.currency.currency)}`);
74
+ entries.push(`locale: ${JSON.stringify(f.currency.locale)}`);
180
75
  }
181
- return ` ${field.name}: {\n ${entries.join(",\n ")},\n }`;
76
+ return ` ${f.name}: {\n ${entries.join(",\n ")},\n }`;
182
77
  }
183
- export function renderEntityConstants(obj, apiPrefix = "") {
184
- const entityName = obj.name;
78
+ export function renderEntityConstants(obj,
79
+ /**
80
+ * @deprecated Accepted and IGNORED. The API base URL left the descriptor: generated
81
+ * client artifacts emit entity-relative paths and the base is supplied once at the
82
+ * client provider (`baseUrl`), because where the browser sends a request is a
83
+ * deployment fact rather than something to freeze at `meta gen` time.
84
+ *
85
+ * It must STAY in the signature: `src/reference/entity.ts` is copied verbatim into
86
+ * adopter repos (ADR-0034) and calls this positionally, so removing the parameter
87
+ * would fail to compile in every ejected copy. Removal is a separate later break.
88
+ */
89
+ _apiPrefix = "",
90
+ // §A6. OPTIONAL, and it must stay optional: `src/reference/entity.ts` is copied
91
+ // verbatim into adopter repos by ADR-0034 scaffold-and-own and calls this with two
92
+ // arguments. A required parameter would fail to compile in every ejected copy.
93
+ names) {
94
+ // ONE derivation of the form surface, shared with the `agent/ui.md` docs page — see
95
+ // entity-ui-descriptor.ts. The descriptor already walks the RESOLVING fields(), so
96
+ // inherited fields (from extends:/super:) appear here as they always have.
97
+ const descriptor = buildEntityUiDescriptor(obj);
98
+ const entityName = descriptor.entity;
185
99
  const tableName = resolveTableName(obj);
186
- const path = resourcePath(obj);
187
- const fieldEntries = [];
188
- // Use fields() so inherited fields (from extends:/super:) appear in constants.
189
- for (const child of obj.fields()) {
190
- fieldEntries.push(renderFieldEntry(child));
191
- }
192
- const body = [
193
- ` $entity: ${JSON.stringify(entityName)}`,
194
- ` $table: ${JSON.stringify(tableName)}`,
195
- ` $path: ${JSON.stringify(path)}`,
196
- ` $apiPrefix: ${JSON.stringify(apiPrefix)}`,
197
- ...fieldEntries,
198
- ].join(",\n");
100
+ const path = descriptor.path;
101
+ const fieldEntries = descriptor.fields.map(renderFieldEntry);
102
+ // A6/B2 reference the constant whenever the artifact is in the run. No equality
103
+ // guard: primaryRdbSource (@metaobjectsdev/metadata) refuses any object whose
104
+ // @role: primary sources disagree on a physical name, and both the constant and the
105
+ // literal below resolve through it, so a reference here is the single spelling. `physicalNameExpr` accepts
106
+ // any `{ symbol }`-shaped value, so it works with this function's `{ name, symbol }`
107
+ // parameter as well as `namesRef`'s own `{ resolved, symbol }`.
108
+ const tableLine = code ` $table: ${physicalNameExpr(names, tableName, obj)}`;
109
+ const body = joinCode([
110
+ code ` $entity: ${JSON.stringify(entityName)}`,
111
+ tableLine,
112
+ code ` $path: ${JSON.stringify(path)}`,
113
+ ...fieldEntries.map((e) => code `${e}`),
114
+ ], { on: ",\n" });
199
115
  return code `
200
116
  /**
201
117
  * Metadata constants for ${entityName}.
202
118
  *
203
119
  * Use these instead of magic strings so TS catches typos and refactors stay
204
120
  * coherent. Each non-dollar-prefixed key is a per-field object carrying
205
- * name, label, view, optional htmlType/placeholder/helpText, and the
121
+ * name, label, view, an htmlType where the field's view maps to one, and the
206
122
  * RHF-shaped validation rules derived from the field's validator children.
207
123
  *
124
+ * placeholder and helpText are NOT emitted — no provider registers an attribute
125
+ * for them, so nothing here could derive one. (htmlType is emitted, but derived
126
+ * from the view subtype; the @htmlType override was removed for the same reason.)
127
+ * useEntityForm still honours placeholder if you add it: this file is generated,
128
+ * hand edits inside it survive regeneration through the three-way merge, and the
129
+ * consumers read this const rather than the metadata. That is the intended way
130
+ * to set it.
131
+ *
208
132
  * Typical usage with the metaobjects React form helper:
209
133
  *
210
134
  * import { useEntityForm } from '@metaobjectsdev/react';
@@ -1 +1 @@
1
- {"version":3,"file":"entity-constants.js","sourceRoot":"","sources":["../../src/templates/entity-constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-constants.js","sourceRoot":"","sources":["../../src/templates/entity-constants.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entity-file.d.ts","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmBjF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE,oBAAoB,GAC1B,MAAM,CAgIR"}
1
+ {"version":3,"file":"entity-file.d.ts","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAsBjF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE,oBAAoB,GAC1B,MAAM,CAuKR"}
@@ -6,7 +6,7 @@
6
6
  // !hasWritableRdbSource(entity) → renderValueObjectFile (in-memory / transit shape: interface + Zod schema)
7
7
  // vanilla / write-through entity → Drizzle table path
8
8
  import { code, imp, joinCode } from "ts-poet";
9
- import { FIELD_ATTR_OBJECT_REF } from "@metaobjectsdev/metadata";
9
+ import { FIELD_ATTR_OBJECT_REF, SOURCE_ROLE_REPLICA } from "@metaobjectsdev/metadata";
10
10
  import { fieldDeclaringPackage } from "../render-context.js";
11
11
  import { renderDrizzleSchema } from "./drizzle-schema.js";
12
12
  import { renderInferredTypes, renderEnumTypeAliases } from "./inferred-types.js";
@@ -18,10 +18,11 @@ import { renderTphDiscriminatorUnion, isTphDiscriminatorBase } from "./tph-discr
18
18
  import { GENERATED_HEADER } from "../constants.js";
19
19
  import { isProjection, isWriteThrough } from "../projection/projection-detector.js";
20
20
  import { renderProjectionDecl } from "./projection-decl.js";
21
- import { projectionViewName } from "../projection/extract-view-spec.js";
21
+ import { projectionViewName, projectionViewSchema, projectionViewRole, } from "../projection/extract-view-spec.js";
22
22
  import { renderExistingViewDecl, renderViewReadZodObject } from "./view-decl.js";
23
23
  import { renderDocsFor } from "./jsdoc.js";
24
24
  import { valueObjectModuleSpecifier } from "../import-path.js";
25
+ import { namesRef, namesConstArg, physicalNameExpr, sourceSchemaExpr } from "../names.js";
25
26
  import { hasWritableRdbSource } from "../source-detect.js";
26
27
  import { renderValueObjectFile } from "./value-object-file.js";
27
28
  import { isAbstract } from "../instance-artifacts.js";
@@ -45,6 +46,10 @@ export function renderEntityFile(entity, ctx, opts) {
45
46
  // Projections intentionally get the z.enum() validator but NOT a named enum
46
47
  // type alias — emitting aliases here is a deliberate v1 scope decision.
47
48
  if (isProjection(entity)) {
49
+ // §A6/§B2 — same `namesRef` pair drizzle-schema.ts builds, so the projection's view
50
+ // name + per-field dbCol reference the exact constant the names artifact exports
51
+ // (undefined when the artifact is not in this run — see names.ts). `namesRef`'s
52
+ // `{ resolved, symbol }` return is exactly the shape `ProjectionDeclOpts.names` wants.
48
53
  return renderProjectionDecl(entity, ctx.loadedRoot, {
49
54
  columnNamingStrategy: ctx.columnNamingStrategy,
50
55
  dialect: ctx.dialect,
@@ -54,6 +59,7 @@ export function renderEntityFile(entity, ctx, opts) {
54
59
  ctx,
55
60
  // Contract target drops the Drizzle .existing() view decl + drizzle-orm import.
56
61
  includeViewDecl: runtime,
62
+ names: namesRef(entity, ctx),
57
63
  });
58
64
  }
59
65
  // --- Value-only / contract path (no Drizzle table) ---
@@ -107,28 +113,56 @@ export function renderEntityFile(entity, ctx, opts) {
107
113
  const module = valueObjectModuleSpecifier(name, ctx.packageOf, entity.package, ctx.outputLayout, ctx.extStyle);
108
114
  return { name, module };
109
115
  };
116
+ // ONE selection of the replica source: `projectionViewName` names it, and this is the
117
+ // role its entry has in <Entity>Names.sources. Hardcoding "replica" here would be a
118
+ // second derivation of the very thing extract-view-spec.ts exists to decide once.
119
+ const viewRole = projectionViewRole(entity) ?? SOURCE_ROLE_REPLICA;
120
+ const entityNames = namesRef(entity, ctx);
110
121
  const viewOpts = {
111
122
  dialect: ctx.dialect, columnNamingStrategy: ctx.columnNamingStrategy, timestampMode: ctx.timestampMode, voRef,
112
123
  // PK fields type non-null in the replica-view decl + read schema even
113
124
  // without @required (a PK is never NULL; see ViewDeclOpts.pkFieldNames).
114
125
  pkFieldNames: new Set(primaryIdentityFieldNames(entity)),
126
+ // §A6 — the entity's names artifact supplies this view's COLUMN constants. A
127
+ // replica view exposes the entity's own fields, so `<Entity>Names.fields.<f>.column`
128
+ // is the same physical name the table side binds; a derived field the artifact
129
+ // does not carry falls back to the literal via `columnExpr`. The view's own NAME
130
+ // is passed separately below and stays a literal — the artifact holds the primary
131
+ // (table) source's name, not this one.
132
+ names: entityNames,
133
+ // The replica view's OWN @schema, from the same source node projectionViewName picks
134
+ // — never the entity's, which is the WRITE TABLE's and would qualify this view with a
135
+ // schema that belongs to something else. A view and the table it replicates need not
136
+ // live in the same schema, and a name paired with someone else's schema is worse than
137
+ // no schema at all.
138
+ //
139
+ // Both this and the view's NAME are now CONSTANTS. They were literals for a real
140
+ // reason that has stopped being true: <Entity>Names carried the primary source only,
141
+ // so a write-through entity's two physical names had one slot between them and the
142
+ // second was emitted in full — the same escape C#'s AppDbContext had, in a different
143
+ // language, which is what showed it was the artifact's shape and not the binding.
144
+ schema: sourceSchemaExpr(entityNames, viewRole) ?? projectionViewSchema(entity),
115
145
  };
116
146
  const z = imp("z@zod");
117
147
  const docs = renderDocsFor(entity);
118
148
  const docsPrefix = docs ? `${docs}\n` : "";
119
- viewSections.push(renderExistingViewDecl(fields, projectionViewName(entity, ctx.columnNamingStrategy), `${camel}View`, viewOpts), code `
149
+ viewSections.push(renderExistingViewDecl(fields, physicalNameExpr(entityNames, projectionViewName(entity, ctx.columnNamingStrategy), entity, viewRole), `${camel}View`, viewOpts), code `
120
150
  export const ${entity.name}Schema = ${renderViewReadZodObject(fields, viewOpts)};
121
151
  `, code `
122
152
  ${docsPrefix}export type ${entity.name} = ${z}.infer<typeof ${entity.name}Schema>;
123
153
  `);
124
154
  }
155
+ // §A6/§B2 — same `namesRef` pair drizzle-schema.ts (and this file's own projection
156
+ // branch above) build, so the descriptor's $table references the exact constant the
157
+ // names artifact exports (undefined when the artifact is not in this run).
158
+ const constantsNames = namesRef(entity, ctx);
125
159
  const sections = [
126
160
  renderDrizzleSchema(entity, ctx),
127
161
  ...viewSections,
128
162
  renderInferredTypes(entity, tphBase, ctx, writeThrough /* skipRow — read type is the view schema */),
129
163
  ...(enumAliases !== null ? [enumAliases] : []),
130
164
  renderZodValidators(entity, ctx),
131
- renderEntityConstants(entity, ctx.apiPrefix),
165
+ renderEntityConstants(entity, ctx.apiPrefix, namesConstArg(constantsNames)),
132
166
  ...(allowlists ? [renderFilterAllowlist(entity, undefined, ctx), renderSortAllowlist(entity)] : []),
133
167
  renderFilterType(entity),
134
168
  ...(tphBlock !== null ? [tphBlock] : []),
@@ -1 +1 @@
1
- {"version":3,"file":"entity-file.js","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-file.js","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,21 @@
1
+ import { type Code } from "ts-poet";
1
2
  import type { MetaObject } from "@metaobjectsdev/metadata";
2
3
  /** File name (no directory) of an entity's DB-free descriptor module. */
3
4
  export declare function entityMetaFileName(entityName: string): string;
4
5
  /** Module specifier the UI files use to reach it — a same-directory sibling. */
5
6
  export declare function entityMetaSpecifier(entityName: string, extStyle: string | undefined): string;
6
- export declare function renderEntityMetaFile(entity: MetaObject, apiPrefix?: string): string;
7
+ export declare function renderEntityMetaFile(entity: MetaObject,
8
+ /**
9
+ * @deprecated Accepted and IGNORED — see `renderEntityConstants`. The API base URL
10
+ * left the descriptor; the client provider's `baseUrl` supplies it at runtime.
11
+ *
12
+ * §A6 fix round 3. OPTIONAL, and it must stay optional: this function is called
13
+ * from codegen-ts-tanstack's reference/hooks.ts and reference/grid-hook.ts, both
14
+ * copied verbatim into adopter repos (ADR-0034). A required parameter would fail
15
+ * to compile in every ejected copy.
16
+ */
17
+ _apiPrefix?: string, names?: {
18
+ readonly name: string;
19
+ readonly symbol: Code;
20
+ } | undefined): string;
7
21
  //# sourceMappingURL=entity-meta-file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-meta-file.d.ts","sourceRoot":"","sources":["../../src/templates/entity-meta-file.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE5F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,SAAK,GAAG,MAAM,CAa/E"}
1
+ {"version":3,"file":"entity-meta-file.d.ts","sourceRoot":"","sources":["../../src/templates/entity-meta-file.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE5F;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU;AAClB;;;;;;;;GAQG;AACH,UAAU,SAAK,EACf,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,GACnE,MAAM,CAaR"}
@@ -30,7 +30,17 @@ export function entityMetaFileName(entityName) {
30
30
  export function entityMetaSpecifier(entityName, extStyle) {
31
31
  return `./${entityName}.meta${extStyle === "js" ? ".js" : ""}`;
32
32
  }
33
- export function renderEntityMetaFile(entity, apiPrefix = "") {
33
+ export function renderEntityMetaFile(entity,
34
+ /**
35
+ * @deprecated Accepted and IGNORED — see `renderEntityConstants`. The API base URL
36
+ * left the descriptor; the client provider's `baseUrl` supplies it at runtime.
37
+ *
38
+ * §A6 fix round 3. OPTIONAL, and it must stay optional: this function is called
39
+ * from codegen-ts-tanstack's reference/hooks.ts and reference/grid-hook.ts, both
40
+ * copied verbatim into adopter repos (ADR-0034). A required parameter would fail
41
+ * to compile in every ejected copy.
42
+ */
43
+ _apiPrefix = "", names) {
34
44
  const body = code `
35
45
  // ${GENERATED_HEADER} — DO NOT EDIT.
36
46
  // Source metadata: ${entity.name}
@@ -40,7 +50,7 @@ export function renderEntityMetaFile(entity, apiPrefix = "") {
40
50
  // from here so a client bundle never pulls the ORM in. \`${entity.name}.ts\` also
41
51
  // exports this descriptor, for server-side and pre-existing consumers.
42
52
 
43
- ${renderEntityConstants(entity, apiPrefix)}
53
+ ${renderEntityConstants(entity, "", names)}
44
54
  `;
45
55
  return body.toString();
46
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity-meta-file.js","sourceRoot":"","sources":["../../src/templates/entity-meta-file.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,qFAAqF;AACrF,oFAAoF;AACpF,oFAAoF;AACpF,sCAAsC;AACtC,EAAE;AACF,qFAAqF;AACrF,gFAAgF;AAChF,iFAAiF;AACjF,kFAAkF;AAClF,oCAAoC;AACpC,EAAE;AACF,sFAAsF;AACtF,mFAAmF;AACnF,kFAAkF;AAClF,mFAAmF;AACnF,0EAA0E;AAC1E,sEAAsE;AAEtE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,GAAG,UAAU,UAAU,CAAC;AACjC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,QAA4B;IAClF,OAAO,KAAK,UAAU,QAAQ,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAkB,EAAE,SAAS,GAAG,EAAE;IACrE,MAAM,IAAI,GAAG,IAAI,CAAA;KACd,gBAAgB;sBACC,MAAM,CAAC,IAAI;;;;4DAI2B,MAAM,CAAC,IAAI;;;EAGrE,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC;CACzC,CAAC;IACA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"entity-meta-file.js","sourceRoot":"","sources":["../../src/templates/entity-meta-file.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,qFAAqF;AACrF,oFAAoF;AACpF,oFAAoF;AACpF,sCAAsC;AACtC,EAAE;AACF,qFAAqF;AACrF,gFAAgF;AAChF,iFAAiF;AACjF,kFAAkF;AAClF,oCAAoC;AACpC,EAAE;AACF,sFAAsF;AACtF,mFAAmF;AACnF,kFAAkF;AAClF,mFAAmF;AACnF,0EAA0E;AAC1E,sEAAsE;AAEtE,OAAO,EAAE,IAAI,EAAa,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,GAAG,UAAU,UAAU,CAAC;AACjC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,QAA4B;IAClF,OAAO,KAAK,UAAU,QAAQ,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAkB;AAClB;;;;;;;;GAQG;AACH,UAAU,GAAG,EAAE,EACf,KAAoE;IAEpE,MAAM,IAAI,GAAG,IAAI,CAAA;KACd,gBAAgB;sBACC,MAAM,CAAC,IAAI;;;;4DAI2B,MAAM,CAAC,IAAI;;;EAGrE,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC;CACzC,CAAC;IACA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC"}