@metaobjectsdev/codegen-ts 0.5.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 (198) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +101 -0
  3. package/dist/column-mapper.d.ts +38 -0
  4. package/dist/column-mapper.d.ts.map +1 -0
  5. package/dist/column-mapper.js +205 -0
  6. package/dist/column-mapper.js.map +1 -0
  7. package/dist/constants.d.ts +7 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +8 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/errors.d.ts +7 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +11 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/format.d.ts +2 -0
  16. package/dist/format.d.ts.map +1 -0
  17. package/dist/format.js +47 -0
  18. package/dist/format.js.map +1 -0
  19. package/dist/generator.d.ts +44 -0
  20. package/dist/generator.d.ts.map +1 -0
  21. package/dist/generator.js +17 -0
  22. package/dist/generator.js.map +1 -0
  23. package/dist/generators/barrel.d.ts +6 -0
  24. package/dist/generators/barrel.d.ts.map +1 -0
  25. package/dist/generators/barrel.js +17 -0
  26. package/dist/generators/barrel.js.map +1 -0
  27. package/dist/generators/entity-file.d.ts +8 -0
  28. package/dist/generators/entity-file.d.ts.map +1 -0
  29. package/dist/generators/entity-file.js +27 -0
  30. package/dist/generators/entity-file.js.map +1 -0
  31. package/dist/generators/index.d.ts +5 -0
  32. package/dist/generators/index.d.ts.map +1 -0
  33. package/dist/generators/index.js +5 -0
  34. package/dist/generators/index.js.map +1 -0
  35. package/dist/generators/queries-file.d.ts +8 -0
  36. package/dist/generators/queries-file.d.ts.map +1 -0
  37. package/dist/generators/queries-file.js +26 -0
  38. package/dist/generators/queries-file.js.map +1 -0
  39. package/dist/generators/routes-file.d.ts +12 -0
  40. package/dist/generators/routes-file.d.ts.map +1 -0
  41. package/dist/generators/routes-file.js +30 -0
  42. package/dist/generators/routes-file.js.map +1 -0
  43. package/dist/import-path.d.ts +41 -0
  44. package/dist/import-path.d.ts.map +1 -0
  45. package/dist/import-path.js +95 -0
  46. package/dist/import-path.js.map +1 -0
  47. package/dist/index.d.ts +29 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +21 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/metaobjects-config.d.ts +56 -0
  52. package/dist/metaobjects-config.d.ts.map +1 -0
  53. package/dist/metaobjects-config.js +42 -0
  54. package/dist/metaobjects-config.js.map +1 -0
  55. package/dist/naming.d.ts +29 -0
  56. package/dist/naming.d.ts.map +1 -0
  57. package/dist/naming.js +67 -0
  58. package/dist/naming.js.map +1 -0
  59. package/dist/overwrite-policy.d.ts +8 -0
  60. package/dist/overwrite-policy.d.ts.map +1 -0
  61. package/dist/overwrite-policy.js +23 -0
  62. package/dist/overwrite-policy.js.map +1 -0
  63. package/dist/pk-resolver.d.ts +18 -0
  64. package/dist/pk-resolver.d.ts.map +1 -0
  65. package/dist/pk-resolver.js +36 -0
  66. package/dist/pk-resolver.js.map +1 -0
  67. package/dist/projection/extract-view-spec.d.ts +18 -0
  68. package/dist/projection/extract-view-spec.d.ts.map +1 -0
  69. package/dist/projection/extract-view-spec.js +272 -0
  70. package/dist/projection/extract-view-spec.js.map +1 -0
  71. package/dist/projection/index.d.ts +5 -0
  72. package/dist/projection/index.d.ts.map +1 -0
  73. package/dist/projection/index.js +5 -0
  74. package/dist/projection/index.js.map +1 -0
  75. package/dist/projection/projection-detector.d.ts +4 -0
  76. package/dist/projection/projection-detector.d.ts.map +1 -0
  77. package/dist/projection/projection-detector.js +13 -0
  78. package/dist/projection/projection-detector.js.map +1 -0
  79. package/dist/projection/view-ddl-emit.d.ts +10 -0
  80. package/dist/projection/view-ddl-emit.d.ts.map +1 -0
  81. package/dist/projection/view-ddl-emit.js +47 -0
  82. package/dist/projection/view-ddl-emit.js.map +1 -0
  83. package/dist/projection/view-spec.d.ts +56 -0
  84. package/dist/projection/view-spec.d.ts.map +1 -0
  85. package/dist/projection/view-spec.js +2 -0
  86. package/dist/projection/view-spec.js.map +1 -0
  87. package/dist/relation-resolver.d.ts +21 -0
  88. package/dist/relation-resolver.d.ts.map +1 -0
  89. package/dist/relation-resolver.js +62 -0
  90. package/dist/relation-resolver.js.map +1 -0
  91. package/dist/render-context.d.ts +65 -0
  92. package/dist/render-context.d.ts.map +1 -0
  93. package/dist/render-context.js +28 -0
  94. package/dist/render-context.js.map +1 -0
  95. package/dist/runner.d.ts +17 -0
  96. package/dist/runner.d.ts.map +1 -0
  97. package/dist/runner.js +135 -0
  98. package/dist/runner.js.map +1 -0
  99. package/dist/templates/barrel.d.ts +8 -0
  100. package/dist/templates/barrel.d.ts.map +1 -0
  101. package/dist/templates/barrel.js +12 -0
  102. package/dist/templates/barrel.js.map +1 -0
  103. package/dist/templates/drizzle-schema.d.ts +13 -0
  104. package/dist/templates/drizzle-schema.d.ts.map +1 -0
  105. package/dist/templates/drizzle-schema.js +251 -0
  106. package/dist/templates/drizzle-schema.js.map +1 -0
  107. package/dist/templates/entity-constants.d.ts +4 -0
  108. package/dist/templates/entity-constants.d.ts.map +1 -0
  109. package/dist/templates/entity-constants.js +215 -0
  110. package/dist/templates/entity-constants.js.map +1 -0
  111. package/dist/templates/entity-file.d.ts +4 -0
  112. package/dist/templates/entity-file.d.ts.map +1 -0
  113. package/dist/templates/entity-file.js +45 -0
  114. package/dist/templates/entity-file.js.map +1 -0
  115. package/dist/templates/field-meta.d.ts +24 -0
  116. package/dist/templates/field-meta.d.ts.map +1 -0
  117. package/dist/templates/field-meta.js +117 -0
  118. package/dist/templates/field-meta.js.map +1 -0
  119. package/dist/templates/filter-allowlist.d.ts +5 -0
  120. package/dist/templates/filter-allowlist.d.ts.map +1 -0
  121. package/dist/templates/filter-allowlist.js +86 -0
  122. package/dist/templates/filter-allowlist.js.map +1 -0
  123. package/dist/templates/filter-shared.d.ts +15 -0
  124. package/dist/templates/filter-shared.d.ts.map +1 -0
  125. package/dist/templates/filter-shared.js +30 -0
  126. package/dist/templates/filter-shared.js.map +1 -0
  127. package/dist/templates/filter-type.d.ts +4 -0
  128. package/dist/templates/filter-type.d.ts.map +1 -0
  129. package/dist/templates/filter-type.js +78 -0
  130. package/dist/templates/filter-type.js.map +1 -0
  131. package/dist/templates/inferred-types.d.ts +4 -0
  132. package/dist/templates/inferred-types.d.ts.map +1 -0
  133. package/dist/templates/inferred-types.js +14 -0
  134. package/dist/templates/inferred-types.js.map +1 -0
  135. package/dist/templates/projection-decl.d.ts +21 -0
  136. package/dist/templates/projection-decl.d.ts.map +1 -0
  137. package/dist/templates/projection-decl.js +116 -0
  138. package/dist/templates/projection-decl.js.map +1 -0
  139. package/dist/templates/queries-file.d.ts +4 -0
  140. package/dist/templates/queries-file.d.ts.map +1 -0
  141. package/dist/templates/queries-file.js +39 -0
  142. package/dist/templates/queries-file.js.map +1 -0
  143. package/dist/templates/queries.d.ts +9 -0
  144. package/dist/templates/queries.d.ts.map +1 -0
  145. package/dist/templates/queries.js +115 -0
  146. package/dist/templates/queries.js.map +1 -0
  147. package/dist/templates/relations-block.d.ts +9 -0
  148. package/dist/templates/relations-block.d.ts.map +1 -0
  149. package/dist/templates/relations-block.js +45 -0
  150. package/dist/templates/relations-block.js.map +1 -0
  151. package/dist/templates/routes-file.d.ts +4 -0
  152. package/dist/templates/routes-file.d.ts.map +1 -0
  153. package/dist/templates/routes-file.js +158 -0
  154. package/dist/templates/routes-file.js.map +1 -0
  155. package/dist/templates/zod-validators.d.ts +4 -0
  156. package/dist/templates/zod-validators.d.ts.map +1 -0
  157. package/dist/templates/zod-validators.js +129 -0
  158. package/dist/templates/zod-validators.js.map +1 -0
  159. package/package.json +59 -0
  160. package/src/column-mapper.ts +266 -0
  161. package/src/constants.ts +10 -0
  162. package/src/errors.ts +10 -0
  163. package/src/format.ts +50 -0
  164. package/src/generator.ts +73 -0
  165. package/src/generators/barrel.ts +28 -0
  166. package/src/generators/entity-file.ts +33 -0
  167. package/src/generators/index.ts +4 -0
  168. package/src/generators/queries-file.ts +32 -0
  169. package/src/generators/routes-file.ts +36 -0
  170. package/src/import-path.ts +153 -0
  171. package/src/index.ts +45 -0
  172. package/src/metaobjects-config.ts +95 -0
  173. package/src/naming.ts +84 -0
  174. package/src/overwrite-policy.ts +39 -0
  175. package/src/pk-resolver.ts +47 -0
  176. package/src/projection/extract-view-spec.ts +372 -0
  177. package/src/projection/index.ts +4 -0
  178. package/src/projection/projection-detector.ts +26 -0
  179. package/src/projection/view-ddl-emit.ts +66 -0
  180. package/src/projection/view-spec.ts +62 -0
  181. package/src/relation-resolver.ts +87 -0
  182. package/src/render-context.ts +93 -0
  183. package/src/runner.ts +178 -0
  184. package/src/templates/barrel.ts +23 -0
  185. package/src/templates/drizzle-schema.ts +286 -0
  186. package/src/templates/entity-constants.ts +248 -0
  187. package/src/templates/entity-file.ts +51 -0
  188. package/src/templates/field-meta.ts +150 -0
  189. package/src/templates/filter-allowlist.ts +104 -0
  190. package/src/templates/filter-shared.ts +30 -0
  191. package/src/templates/filter-type.ts +93 -0
  192. package/src/templates/inferred-types.ts +16 -0
  193. package/src/templates/projection-decl.ts +146 -0
  194. package/src/templates/queries-file.ts +56 -0
  195. package/src/templates/queries.ts +132 -0
  196. package/src/templates/relations-block.ts +65 -0
  197. package/src/templates/routes-file.ts +179 -0
  198. package/src/templates/zod-validators.ts +140 -0
@@ -0,0 +1,29 @@
1
+ import type { ColumnNamingStrategy } from "./metaobjects-config.js";
2
+ /**
3
+ * Convert PascalCase or camelCase to snake_case.
4
+ * Treats consecutive capitals (e.g., "APIKey") as a single word: "api_key".
5
+ */
6
+ export declare function toSnakeCase(s: string): string;
7
+ /**
8
+ * Convert snake_case to camelCase. Preserves already-camelCase input.
9
+ */
10
+ export declare function toCamelCase(s: string): string;
11
+ /**
12
+ * Simple English pluralization. Documented imperfection per design §13 #1:
13
+ * irregular plurals (Person → Persons, not People) are not handled.
14
+ * Users override via source[dbTable]@name in metadata.
15
+ */
16
+ export declare function pluralize(s: string): string;
17
+ /** PascalCase entity → strategy-applied plural for DB table name. */
18
+ export declare function tableNameFromEntity(entityName: string, strategy?: ColumnNamingStrategy): string;
19
+ /** camelCase or PascalCase field → strategy-applied DB column name. */
20
+ export declare function columnNameFromField(fieldName: string, strategy?: ColumnNamingStrategy): string;
21
+ /**
22
+ * PascalCase projection name → "v_" prefix + strategy applied (not pluralized).
23
+ * E.g. "ProgramSummary" + snake_case → "v_program_summary".
24
+ * With kebab-case the separator prefix is "v-" to stay consistent.
25
+ */
26
+ export declare function viewNameFromProjection(projectionName: string, strategy: ColumnNamingStrategy): string;
27
+ /** PascalCase entity → camelCase plural for the Drizzle table variable. */
28
+ export declare function variableNameFromEntity(entityName: string): string;
29
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAgBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3C;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,oBAAmC,GAC5C,MAAM,CAER;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,oBAAmC,GAC5C,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAMR;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE"}
package/dist/naming.js ADDED
@@ -0,0 +1,67 @@
1
+ // Naming helpers — case conversion + pluralization for codegen output.
2
+ // All functions are pure.
3
+ /**
4
+ * Convert PascalCase or camelCase to snake_case.
5
+ * Treats consecutive capitals (e.g., "APIKey") as a single word: "api_key".
6
+ */
7
+ export function toSnakeCase(s) {
8
+ return s
9
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2")
10
+ .replace(/([a-z0-9])([A-Z])/g, "$1_$2")
11
+ .toLowerCase();
12
+ }
13
+ /** Convert PascalCase or camelCase to kebab-case. */
14
+ function toKebabCase(s) {
15
+ return toSnakeCase(s).replace(/_/g, "-");
16
+ }
17
+ /** Apply a ColumnNamingStrategy to a name. */
18
+ function applyStrategy(name, strategy) {
19
+ switch (strategy) {
20
+ case "snake_case": return toSnakeCase(name);
21
+ case "literal": return name;
22
+ case "kebab-case": return toKebabCase(name);
23
+ }
24
+ }
25
+ /**
26
+ * Convert snake_case to camelCase. Preserves already-camelCase input.
27
+ */
28
+ export function toCamelCase(s) {
29
+ return s.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
30
+ }
31
+ /**
32
+ * Simple English pluralization. Documented imperfection per design §13 #1:
33
+ * irregular plurals (Person → Persons, not People) are not handled.
34
+ * Users override via source[dbTable]@name in metadata.
35
+ */
36
+ export function pluralize(s) {
37
+ if (/(s|x|z|ch|sh)$/i.test(s))
38
+ return s + "es";
39
+ if (/[^aeiou]y$/i.test(s))
40
+ return s.slice(0, -1) + "ies";
41
+ return s + "s";
42
+ }
43
+ /** PascalCase entity → strategy-applied plural for DB table name. */
44
+ export function tableNameFromEntity(entityName, strategy = "snake_case") {
45
+ return applyStrategy(pluralize(entityName), strategy);
46
+ }
47
+ /** camelCase or PascalCase field → strategy-applied DB column name. */
48
+ export function columnNameFromField(fieldName, strategy = "snake_case") {
49
+ return applyStrategy(fieldName, strategy);
50
+ }
51
+ /**
52
+ * PascalCase projection name → "v_" prefix + strategy applied (not pluralized).
53
+ * E.g. "ProgramSummary" + snake_case → "v_program_summary".
54
+ * With kebab-case the separator prefix is "v-" to stay consistent.
55
+ */
56
+ export function viewNameFromProjection(projectionName, strategy) {
57
+ switch (strategy) {
58
+ case "snake_case": return "v_" + toSnakeCase(projectionName);
59
+ case "literal": return "v_" + projectionName;
60
+ case "kebab-case": return "v-" + toKebabCase(projectionName);
61
+ }
62
+ }
63
+ /** PascalCase entity → camelCase plural for the Drizzle table variable. */
64
+ export function variableNameFromEntity(entityName) {
65
+ return pluralize(toCamelCase(entityName.charAt(0).toLowerCase() + entityName.slice(1)));
66
+ }
67
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,0BAA0B;AAI1B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC;SACL,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,qDAAqD;AACrD,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,8CAA8C;AAC9C,SAAS,aAAa,CAAC,IAAY,EAAE,QAA8B;IACjE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5C,KAAK,SAAS,CAAC,CAAI,OAAO,IAAI,CAAC;QAC/B,KAAK,YAAY,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACzD,OAAO,CAAC,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,WAAiC,YAAY;IAE7C,OAAO,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,WAAiC,YAAY;IAE7C,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,QAA8B;IAE9B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC,OAAO,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAC7D,KAAK,SAAS,CAAC,CAAI,OAAO,IAAI,GAAG,cAAc,CAAC;QAChD,KAAK,YAAY,CAAC,CAAC,OAAO,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type WriteStatus = "new" | "overwrite" | "refused" | "skipped";
2
+ export type MergeStrategy = "overwrite" | "skip-existing";
3
+ export interface WriteResult {
4
+ path: string;
5
+ status: WriteStatus;
6
+ }
7
+ export declare function decideAndWrite(path: string, content: string, strategy?: MergeStrategy): WriteResult;
8
+ //# sourceMappingURL=overwrite-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overwrite-policy.d.ts","sourceRoot":"","sources":["../src/overwrite-policy.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,eAAe,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAA2B,GACpC,WAAW,CAmBb"}
@@ -0,0 +1,23 @@
1
+ // Overwrite policy: drives the per-file write decision based on the @generated header.
2
+ // Per design §8 — read-only generated files; refuse to clobber hand-written code.
3
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
4
+ import { dirname } from "node:path";
5
+ import { GENERATED_HEADER } from "./constants.js";
6
+ export function decideAndWrite(path, content, strategy = "overwrite") {
7
+ // 'skip-existing' only skips overwrites, not new files.
8
+ if (!existsSync(path)) {
9
+ mkdirSync(dirname(path), { recursive: true });
10
+ writeFileSync(path, content);
11
+ return { path, status: "new" };
12
+ }
13
+ const current = readFileSync(path, "utf-8");
14
+ if (!current.includes(GENERATED_HEADER)) {
15
+ return { path, status: "refused" };
16
+ }
17
+ if (strategy === "skip-existing") {
18
+ return { path, status: "skipped" };
19
+ }
20
+ writeFileSync(path, content);
21
+ return { path, status: "overwrite" };
22
+ }
23
+ //# sourceMappingURL=overwrite-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overwrite-policy.js","sourceRoot":"","sources":["../src/overwrite-policy.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,kFAAkF;AAElF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAUlD,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,OAAe,EACf,WAA0B,WAAW;IAErC,wDAAwD;IACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrC,CAAC;IAED,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { MetaRoot } from "@metaobjectsdev/metadata";
2
+ export interface PkInfo {
3
+ /** Field name within the entity (e.g., "id"). */
4
+ fieldName: string;
5
+ /** Field subType (e.g., "long", "string", "int"). */
6
+ fieldSubType: string;
7
+ /** Generation strategy: 'increment' | 'uuid' | 'assigned' (or undefined). */
8
+ generation?: string;
9
+ }
10
+ /**
11
+ * Walk the loaded metadata root, find each object's primary identity,
12
+ * resolve the referenced field's subType, and build a name → PkInfo map.
13
+ *
14
+ * Used by FK column emission: when Post.authorId references User, codegen
15
+ * looks up User's PK info to choose the matching FK column type.
16
+ */
17
+ export declare function buildPkMap(root: MetaRoot): Map<string, PkInfo>;
18
+ //# sourceMappingURL=pk-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-resolver.d.ts","sourceRoot":"","sources":["../src/pk-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOzD,MAAM,WAAW,MAAM;IACrB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9D"}
@@ -0,0 +1,36 @@
1
+ // PK resolver — pre-pass over the loaded metadata to build a name → PK info map.
2
+ // codegen uses this when emitting FK columns (per design §13 #2).
3
+ import { FIELD_SUBTYPE_LONG, IDENTITY_ATTR_FIELDS, IDENTITY_ATTR_GENERATION, } from "@metaobjectsdev/metadata";
4
+ /**
5
+ * Walk the loaded metadata root, find each object's primary identity,
6
+ * resolve the referenced field's subType, and build a name → PkInfo map.
7
+ *
8
+ * Used by FK column emission: when Post.authorId references User, codegen
9
+ * looks up User's PK info to choose the matching FK column type.
10
+ */
11
+ export function buildPkMap(root) {
12
+ const result = new Map();
13
+ for (const obj of root.objects()) {
14
+ // primaryIdentity() resolves the primary identity across the super-chain.
15
+ const primary = obj.primaryIdentity();
16
+ if (!primary)
17
+ continue;
18
+ const fields = primary.ownAttr(IDENTITY_ATTR_FIELDS);
19
+ if (!Array.isArray(fields) && typeof fields !== "string")
20
+ continue;
21
+ const fieldsList = Array.isArray(fields) ? fields : [fields];
22
+ if (fieldsList.length === 0)
23
+ continue;
24
+ const pkFieldName = String(fieldsList[0]);
25
+ // findField() resolves the field across the super-chain (handles extends:).
26
+ const pkField = obj.findField(pkFieldName);
27
+ const fieldSubType = pkField?.subType ?? FIELD_SUBTYPE_LONG; // sane default
28
+ const generation = primary.ownAttr(IDENTITY_ATTR_GENERATION);
29
+ const info = { fieldName: pkFieldName, fieldSubType };
30
+ if (typeof generation === "string")
31
+ info.generation = generation;
32
+ result.set(obj.name, info);
33
+ }
34
+ return result;
35
+ }
36
+ //# sourceMappingURL=pk-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-resolver.js","sourceRoot":"","sources":["../src/pk-resolver.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,kEAAkE;AAGlE,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAWlC;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACjC,0EAA0E;QAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,SAAS;QACnE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,4EAA4E;QAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,EAAE,OAAO,IAAI,kBAAkB,CAAC,CAAC,eAAe;QAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;QAC9D,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type MetaRoot, MetaObject } from "@metaobjectsdev/metadata";
2
+ import type { ColumnNamingStrategy } from "../metaobjects-config.js";
3
+ import type { ViewSpec } from "./view-spec.js";
4
+ export interface ExtractContext {
5
+ readonly columnNamingStrategy: ColumnNamingStrategy;
6
+ }
7
+ /**
8
+ * Walk a projection's origin children to produce a ViewSpec.
9
+ *
10
+ * @param projection The projection entity (has a source[dbView] child
11
+ * and extends a writable entity).
12
+ * @param root The loader's MetaRoot — all top-level objects are
13
+ * direct children of root (returned by `MetaDataLoader.load()`
14
+ * / `FileMetaDataLoader.loadFiles()` as `result.root`).
15
+ * @param ctx Column naming strategy for SQL identifiers.
16
+ */
17
+ export declare function extractViewSpec(projection: MetaObject, root: MetaRoot, ctx: ExtractContext): ViewSpec;
18
+ //# sourceMappingURL=extract-view-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-view-spec.d.ts","sourceRoot":"","sources":["../../src/projection/extract-view-spec.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAiB,KAAK,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EACoC,QAAQ,EACvD,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;CACrD;AAkTD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,cAAc,GAClB,QAAQ,CAcV"}
@@ -0,0 +1,272 @@
1
+ import { TYPE_FIELD, TYPE_ORIGIN, TYPE_RELATIONSHIP, TYPE_SOURCE, SOURCE_SUBTYPE_DB_VIEW, SOURCE_DB_VIEW_ATTR_NAME, ORIGIN_SUBTYPE_PASSTHROUGH, ORIGIN_SUBTYPE_AGGREGATE, ORIGIN_PASSTHROUGH_ATTR_FROM, ORIGIN_PASSTHROUGH_ATTR_VIA, ORIGIN_AGGREGATE_ATTR_AGG, ORIGIN_AGGREGATE_ATTR_OF, ORIGIN_AGGREGATE_ATTR_VIA, RELATIONSHIP_ATTR_OBJECT_REF, RELATIONSHIP_ATTR_CARDINALITY, CARDINALITY_ONE, FIELD_ATTR_DB_COLUMN, findReferenceBetween, } from "@metaobjectsdev/metadata";
2
+ import { MetaObject } from "@metaobjectsdev/metadata";
3
+ import { columnNameFromField, viewNameFromProjection, } from "../naming.js";
4
+ // ---------------------------------------------------------------------------
5
+ // Private helpers
6
+ // ---------------------------------------------------------------------------
7
+ function findRelationship(obj, name) {
8
+ return obj.ownChildren().find((c) => c.type === TYPE_RELATIONSHIP && c.name === name);
9
+ }
10
+ function viewName(projection, ctx) {
11
+ const dbView = projection.ownChildren().find((c) => c.type === TYPE_SOURCE && c.subType === SOURCE_SUBTYPE_DB_VIEW);
12
+ const explicit = dbView?.ownAttr(SOURCE_DB_VIEW_ATTR_NAME);
13
+ return explicit ?? viewNameFromProjection(projection.name, ctx.columnNamingStrategy);
14
+ }
15
+ function baseEntityFor(projection, root) {
16
+ // v1: base entity is the resolved super (set via `extends:` in metadata).
17
+ const superModel = projection.superResolved;
18
+ const superName = superModel?.name ?? projection.superRef;
19
+ if (!superName) {
20
+ throw new Error(`Projection ${projection.name}: missing extends — projections must extend a writable entity in v1.`);
21
+ }
22
+ const base = superModel instanceof MetaObject ? superModel : root.findObject(superName);
23
+ if (!base) {
24
+ throw new Error(`Projection ${projection.name}: extends "${superName}" does not resolve to any entity.`);
25
+ }
26
+ return base;
27
+ }
28
+ function sourceColumnNameFor(entityField, ctx) {
29
+ const explicit = entityField.ownAttr(FIELD_ATTR_DB_COLUMN);
30
+ return explicit ?? columnNameFromField(entityField.name, ctx.columnNamingStrategy);
31
+ }
32
+ function shortAliasFor(entityName, used) {
33
+ const base = (entityName[0] ?? "x").toLowerCase();
34
+ if (!used.has(base)) {
35
+ used.add(base);
36
+ return base;
37
+ }
38
+ let i = 0;
39
+ let candidate;
40
+ do {
41
+ candidate = `${base}${i}`;
42
+ i++;
43
+ } while (used.has(candidate));
44
+ used.add(candidate);
45
+ return candidate;
46
+ }
47
+ function buildJoinTree(projection, base, root, usedAliases, baseAlias) {
48
+ const allPaths = [];
49
+ for (const field of projection.ownChildren()) {
50
+ if (field.type !== TYPE_FIELD)
51
+ continue;
52
+ for (const origin of field.ownChildren()) {
53
+ if (origin.type !== TYPE_ORIGIN)
54
+ continue;
55
+ const viaAttr = origin.subType === ORIGIN_SUBTYPE_AGGREGATE
56
+ ? origin.ownAttr(ORIGIN_AGGREGATE_ATTR_VIA)
57
+ : origin.ownAttr(ORIGIN_PASSTHROUGH_ATTR_VIA);
58
+ if (!viaAttr)
59
+ continue;
60
+ const segments = viaAttr.split(".");
61
+ const entityName = segments[0];
62
+ const relSegments = segments.slice(1);
63
+ if (!entityName)
64
+ continue;
65
+ let currentObj = root.findObject(entityName);
66
+ if (!currentObj)
67
+ continue;
68
+ const path = [];
69
+ for (const relName of relSegments) {
70
+ const rel = findRelationship(currentObj, relName);
71
+ if (!rel)
72
+ break;
73
+ const targetName = rel.ownAttr(RELATIONSHIP_ATTR_OBJECT_REF);
74
+ const target = targetName ? root.findObject(targetName) : undefined;
75
+ if (!target || !targetName)
76
+ break;
77
+ const cardAttr = rel.ownAttr(RELATIONSHIP_ATTR_CARDINALITY);
78
+ const cardinality = cardAttr === CARDINALITY_ONE ? "one" : "many";
79
+ const ref = findReferenceBetween(currentObj, target);
80
+ if (!ref)
81
+ break;
82
+ const fkField = ref.referenceIdentity.fields[0];
83
+ if (!fkField)
84
+ break;
85
+ const resolvedPkField = ref.referenceIdentity.resolvedTargetPkField(root) ?? "id";
86
+ const referenceHolder = ref.holder.name === currentObj.name ? "source" : "target";
87
+ path.push({
88
+ entity: currentObj,
89
+ relationship: relName,
90
+ cardinality,
91
+ fkField,
92
+ pkField: resolvedPkField,
93
+ referenceHolder,
94
+ targetEntity: targetName,
95
+ });
96
+ currentObj = target;
97
+ }
98
+ if (path.length > 0)
99
+ allPaths.push(path);
100
+ }
101
+ }
102
+ // Dedupe by prefix: paths sharing a prefix collapse into one join branch.
103
+ const trieRoot = { children: new Map() };
104
+ for (const path of allPaths) {
105
+ let node = trieRoot;
106
+ for (const step of path) {
107
+ let child = node.children.get(step.relationship);
108
+ if (!child) {
109
+ child = { children: new Map(), step };
110
+ node.children.set(step.relationship, child);
111
+ }
112
+ node = child;
113
+ }
114
+ }
115
+ function toJoinNode(node) {
116
+ const step = node.step;
117
+ return {
118
+ relationship: step.relationship,
119
+ targetEntity: step.targetEntity,
120
+ alias: shortAliasFor(step.targetEntity, usedAliases),
121
+ cardinality: step.cardinality,
122
+ fkField: step.fkField,
123
+ pkField: step.pkField,
124
+ referenceHolder: step.referenceHolder,
125
+ children: Array.from(node.children.values()).map(toJoinNode),
126
+ };
127
+ }
128
+ return {
129
+ baseEntity: base.name,
130
+ baseAlias,
131
+ joins: Array.from(trieRoot.children.values()).map(toJoinNode),
132
+ };
133
+ }
134
+ // ---------------------------------------------------------------------------
135
+ // Helpers for SelectSpec building
136
+ // ---------------------------------------------------------------------------
137
+ function findAliasInTree(joinTree, entityName) {
138
+ if (joinTree.baseEntity === entityName)
139
+ return joinTree.baseAlias;
140
+ function recurse(nodes) {
141
+ for (const n of nodes) {
142
+ if (n.targetEntity === entityName)
143
+ return n.alias;
144
+ const found = recurse(n.children);
145
+ if (found !== undefined)
146
+ return found;
147
+ }
148
+ return undefined;
149
+ }
150
+ return recurse(joinTree.joins);
151
+ }
152
+ function buildSelectSpec(projection, base, joinTree, root, ctx) {
153
+ const columns = [];
154
+ // Inherited fields from extends parent — emit as passthrough on baseAlias.
155
+ // Skip fields that the projection has overridden with an explicit origin.
156
+ // fields() is effective-by-default, so multi-level inheritance (base → BaseEntity) works.
157
+ for (const baseField of base.fields()) {
158
+ const overridden = projection.ownChildren().find((c) => c.type === TYPE_FIELD && c.name === baseField.name);
159
+ if (overridden)
160
+ continue;
161
+ columns.push({
162
+ kind: "passthrough",
163
+ fieldName: baseField.name,
164
+ dbColAlias: sourceColumnNameFor(baseField, ctx),
165
+ sourceAlias: joinTree.baseAlias,
166
+ sourceColumn: sourceColumnNameFor(baseField, ctx),
167
+ });
168
+ }
169
+ // Fields explicitly declared on the projection.
170
+ for (const field of projection.ownChildren()) {
171
+ if (field.type !== TYPE_FIELD)
172
+ continue;
173
+ const origin = field.ownChildren().find((c) => c.type === TYPE_ORIGIN);
174
+ const dbCol = sourceColumnNameFor(field, ctx);
175
+ if (!origin) {
176
+ // Declared on projection but no origin — passthrough from base table.
177
+ columns.push({
178
+ kind: "passthrough",
179
+ fieldName: field.name,
180
+ dbColAlias: dbCol,
181
+ sourceAlias: joinTree.baseAlias,
182
+ sourceColumn: dbCol,
183
+ });
184
+ continue;
185
+ }
186
+ if (origin.subType === ORIGIN_SUBTYPE_PASSTHROUGH) {
187
+ const from = origin.ownAttr(ORIGIN_PASSTHROUGH_ATTR_FROM);
188
+ const dotIdx = from.indexOf(".");
189
+ if (dotIdx < 1)
190
+ continue;
191
+ const entityName = from.slice(0, dotIdx);
192
+ const fieldName = from.slice(dotIdx + 1);
193
+ const targetEntity = root.findObject(entityName);
194
+ const sourceAlias = findAliasInTree(joinTree, entityName);
195
+ if (!targetEntity || sourceAlias === undefined)
196
+ continue;
197
+ const targetField = targetEntity.ownChildren().find((c) => c.type === TYPE_FIELD && c.name === fieldName);
198
+ if (!targetField)
199
+ continue;
200
+ columns.push({
201
+ kind: "passthrough",
202
+ fieldName: field.name,
203
+ dbColAlias: dbCol,
204
+ sourceAlias,
205
+ sourceColumn: sourceColumnNameFor(targetField, ctx),
206
+ });
207
+ }
208
+ else if (origin.subType === ORIGIN_SUBTYPE_AGGREGATE) {
209
+ const agg = origin.ownAttr(ORIGIN_AGGREGATE_ATTR_AGG);
210
+ const of_ = origin.ownAttr(ORIGIN_AGGREGATE_ATTR_OF);
211
+ if (!agg || !of_)
212
+ continue;
213
+ const dotIdx = of_.indexOf(".");
214
+ if (dotIdx < 1)
215
+ continue;
216
+ const entityName = of_.slice(0, dotIdx);
217
+ const fieldName = of_.slice(dotIdx + 1);
218
+ const targetEntity = root.findObject(entityName);
219
+ const sourceAlias = findAliasInTree(joinTree, entityName);
220
+ if (!targetEntity || sourceAlias === undefined)
221
+ continue;
222
+ const targetField = targetEntity.ownChildren().find((c) => c.type === TYPE_FIELD && c.name === fieldName);
223
+ if (!targetField)
224
+ continue;
225
+ columns.push({
226
+ kind: "aggregate",
227
+ fieldName: field.name,
228
+ dbColAlias: dbCol,
229
+ agg,
230
+ sourceAlias,
231
+ sourceColumn: sourceColumnNameFor(targetField, ctx),
232
+ });
233
+ }
234
+ }
235
+ return { columns };
236
+ }
237
+ function buildGroupBy(spec) {
238
+ const hasAgg = spec.columns.some((c) => c.kind === "aggregate");
239
+ if (!hasAgg)
240
+ return [];
241
+ return spec.columns
242
+ .filter((c) => c.kind === "passthrough")
243
+ .map((c) => `${c.sourceAlias}.${c.sourceColumn}`);
244
+ }
245
+ // ---------------------------------------------------------------------------
246
+ // Public API
247
+ // ---------------------------------------------------------------------------
248
+ /**
249
+ * Walk a projection's origin children to produce a ViewSpec.
250
+ *
251
+ * @param projection The projection entity (has a source[dbView] child
252
+ * and extends a writable entity).
253
+ * @param root The loader's MetaRoot — all top-level objects are
254
+ * direct children of root (returned by `MetaDataLoader.load()`
255
+ * / `FileMetaDataLoader.loadFiles()` as `result.root`).
256
+ * @param ctx Column naming strategy for SQL identifiers.
257
+ */
258
+ export function extractViewSpec(projection, root, ctx) {
259
+ const base = baseEntityFor(projection, root);
260
+ const usedAliases = new Set();
261
+ const baseAlias = shortAliasFor(base.name, usedAliases);
262
+ const joinTree = buildJoinTree(projection, base, root, usedAliases, baseAlias);
263
+ const selectSpec = buildSelectSpec(projection, base, joinTree, root, ctx);
264
+ const groupBy = buildGroupBy(selectSpec);
265
+ return {
266
+ viewName: viewName(projection, ctx),
267
+ joinTree,
268
+ selectSpec,
269
+ groupBy,
270
+ };
271
+ }
272
+ //# sourceMappingURL=extract-view-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-view-spec.js","sourceRoot":"","sources":["../../src/projection/extract-view-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./view-spec.js";
2
+ export * from "./extract-view-spec.js";
3
+ export * from "./view-ddl-emit.js";
4
+ export * from "./projection-detector.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/projection/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./view-spec.js";
2
+ export * from "./extract-view-spec.js";
3
+ export * from "./view-ddl-emit.js";
4
+ export * from "./projection-detector.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projection/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { MetaData } from "@metaobjectsdev/metadata";
2
+ export declare function isProjection(entity: MetaData): boolean;
3
+ export declare function isWriteThrough(entity: MetaData): boolean;
4
+ //# sourceMappingURL=projection-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-detector.d.ts","sourceRoot":"","sources":["../../src/projection/projection-detector.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAQzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAKtD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAKxD"}
@@ -0,0 +1,13 @@
1
+ import { TYPE_SOURCE, SOURCE_SUBTYPE_DB_TABLE, SOURCE_SUBTYPE_DB_VIEW, } from "@metaobjectsdev/metadata";
2
+ function hasSource(entity, subType) {
3
+ return entity.ownChildren().some((c) => c.type === TYPE_SOURCE && c.subType === subType);
4
+ }
5
+ export function isProjection(entity) {
6
+ return (hasSource(entity, SOURCE_SUBTYPE_DB_VIEW) &&
7
+ !hasSource(entity, SOURCE_SUBTYPE_DB_TABLE));
8
+ }
9
+ export function isWriteThrough(entity) {
10
+ return (hasSource(entity, SOURCE_SUBTYPE_DB_VIEW) &&
11
+ hasSource(entity, SOURCE_SUBTYPE_DB_TABLE));
12
+ }
13
+ //# sourceMappingURL=projection-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-detector.js","sourceRoot":"","sources":["../../src/projection/projection-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAGlC,SAAS,SAAS,CAAC,MAAgB,EAAE,OAAe;IAClD,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAgB;IAC3C,OAAO,CACL,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC;QACzC,CAAC,SAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAgB;IAC7C,OAAO,CACL,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC;QACzC,SAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ViewSpec } from "./view-spec.js";
2
+ export interface EmitOptions {
3
+ readonly dialect: "postgres" | "sqlite";
4
+ /** Resolved table name for the JoinTree's base entity. */
5
+ readonly baseTableName: string;
6
+ /** Map from entity name → table name for every entity referenced in joins. */
7
+ readonly joinTables: Readonly<Record<string, string>>;
8
+ }
9
+ export declare function emitViewDdl(spec: ViewSpec, options: EmitOptions): string;
10
+ //# sourceMappingURL=view-ddl-emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-ddl-emit.d.ts","sourceRoot":"","sources":["../../src/projection/view-ddl-emit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAyCD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAexE"}