@metaobjectsdev/codegen-ts 0.6.0-rc.1 → 0.7.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.
- package/README.md +131 -4
- package/dist/column-mapper.d.ts.map +1 -1
- package/dist/column-mapper.js +2 -1
- package/dist/column-mapper.js.map +1 -1
- package/dist/generators/index.d.ts +2 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +2 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/output-parser-file.d.ts +9 -0
- package/dist/generators/output-parser-file.d.ts.map +1 -0
- package/dist/generators/output-parser-file.js +37 -0
- package/dist/generators/output-parser-file.js.map +1 -0
- package/dist/generators/prompt-render-file.d.ts +9 -0
- package/dist/generators/prompt-render-file.d.ts.map +1 -0
- package/dist/generators/prompt-render-file.js +52 -0
- package/dist/generators/prompt-render-file.js.map +1 -0
- package/dist/metaobjects-config.d.ts +3 -1
- package/dist/metaobjects-config.d.ts.map +1 -1
- package/dist/metaobjects-config.js +2 -1
- package/dist/metaobjects-config.js.map +1 -1
- package/dist/naming.d.ts +3 -12
- package/dist/naming.d.ts.map +1 -1
- package/dist/naming.js +14 -44
- package/dist/naming.js.map +1 -1
- package/dist/projection/extract-view-spec.d.ts +1 -1
- package/dist/projection/extract-view-spec.js +1 -1
- package/dist/templates/output-parser.d.ts +8 -0
- package/dist/templates/output-parser.d.ts.map +1 -0
- package/dist/templates/output-parser.js +129 -0
- package/dist/templates/output-parser.js.map +1 -0
- package/dist/templates/projection-decl.d.ts +1 -1
- package/dist/templates/projection-decl.js +1 -1
- package/dist/templates/queries-file.d.ts.map +1 -1
- package/dist/templates/queries-file.js +15 -4
- package/dist/templates/queries-file.js.map +1 -1
- package/dist/templates/queries.d.ts.map +1 -1
- package/dist/templates/queries.js +11 -30
- package/dist/templates/queries.js.map +1 -1
- package/package.json +4 -4
- package/src/column-mapper.ts +2 -1
- package/src/generators/index.ts +2 -0
- package/src/generators/output-parser-file.ts +50 -0
- package/src/generators/prompt-render-file.ts +69 -0
- package/src/metaobjects-config.ts +4 -2
- package/src/naming.ts +22 -46
- package/src/projection/extract-view-spec.ts +1 -1
- package/src/templates/output-parser.ts +143 -0
- package/src/templates/projection-decl.ts +1 -1
- package/src/templates/queries-file.ts +18 -4
- package/src/templates/queries.ts +11 -33
package/README.md
CHANGED
|
@@ -12,11 +12,13 @@ npm install @metaobjectsdev/codegen-ts @metaobjectsdev/metadata drizzle-orm zod
|
|
|
12
12
|
## Usage
|
|
13
13
|
|
|
14
14
|
```typescript
|
|
15
|
-
import {
|
|
15
|
+
import { MetaDataLoader } from "@metaobjectsdev/metadata";
|
|
16
|
+
import { FileSource } from "@metaobjectsdev/metadata/core";
|
|
16
17
|
import { generate } from "@metaobjectsdev/codegen-ts";
|
|
17
18
|
|
|
18
|
-
const
|
|
19
|
-
|
|
19
|
+
const { root } = await new MetaDataLoader().load([
|
|
20
|
+
new FileSource("metaobjects/meta.blog.json"),
|
|
21
|
+
]);
|
|
20
22
|
|
|
21
23
|
const result = await generate({
|
|
22
24
|
metadata: root,
|
|
@@ -34,7 +36,7 @@ Per entity, codegen emits **two files**:
|
|
|
34
36
|
|
|
35
37
|
- `<Entity>.ts` — Drizzle table definition (with FK `.references()` + `relations()` blocks
|
|
36
38
|
auto-emitted from metadata relationships) + Drizzle-inferred types + Zod validators
|
|
37
|
-
- `<Entity>.queries.ts` — typed CRUD query functions
|
|
39
|
+
- `<Entity>.queries.ts` — typed CRUD query functions
|
|
38
40
|
(`findPostById`, `listPosts`, `createPost`, `updatePost`, `deletePostById`)
|
|
39
41
|
|
|
40
42
|
Plus a barrel `index.ts` re-exporting from each `<Entity>.ts`.
|
|
@@ -55,6 +57,14 @@ codegen-ts overwrites files with the header but refuses to touch files
|
|
|
55
57
|
without it. Hand-customizations live in sibling `<Entity>.extra.ts` files
|
|
56
58
|
(for custom queries, derived-column indexes, etc. that metadata can't express).
|
|
57
59
|
|
|
60
|
+
### Consumer wiring
|
|
61
|
+
|
|
62
|
+
Generated query helpers accept a Drizzle `db` instance as their first
|
|
63
|
+
parameter. See [wiring-generated-queries.md](../../../../docs/recipes/wiring-generated-queries.md)
|
|
64
|
+
for per-dialect setup, edge (Workers / D1) examples, and a 0.6.0 → 0.7.0
|
|
65
|
+
migration guide. The cross-language design decision is in
|
|
66
|
+
[ADR-0008](../../../../spec/decisions/ADR-0008-parameter-passing-generated-repo-helpers.md).
|
|
67
|
+
|
|
58
68
|
## Output targets
|
|
59
69
|
|
|
60
70
|
Each generator can be routed to its own output directory via a named **target**
|
|
@@ -96,6 +106,123 @@ It does **not** work on `better-sqlite3` or `bun:sqlite` (no native
|
|
|
96
106
|
functions in the sibling `<Entity>.extra.ts` file with a non-`.returning()`
|
|
97
107
|
form, or switch to a supported driver.
|
|
98
108
|
|
|
109
|
+
## `outputParser()` — typed parsers for `template.output`
|
|
110
|
+
|
|
111
|
+
For every `template.output` declared in your metadata, `outputParser()` emits
|
|
112
|
+
`<TemplateName>.output.ts` containing a Zod schema + dual-API parser:
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
// metaobjects.config.ts
|
|
116
|
+
import { defineConfig } from "@metaobjectsdev/cli";
|
|
117
|
+
import { entityFile, queriesFile, barrel, promptRender, outputParser } from "@metaobjectsdev/codegen-ts/generators";
|
|
118
|
+
|
|
119
|
+
export default defineConfig({
|
|
120
|
+
generators: [entityFile(), queriesFile(), barrel(), promptRender(), outputParser()],
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
For a `template.output` named `NpcResponseOutput` with `@payloadRef: "NpcResponsePayload"`:
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
// Generated NpcResponseOutput.output.ts — self-contained, no cross-file imports
|
|
128
|
+
import { z } from "zod";
|
|
129
|
+
|
|
130
|
+
const NpcResponseOutputSchema = z.object({
|
|
131
|
+
name: z.string(),
|
|
132
|
+
age: z.number().int(),
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
export type NpcResponseOutputData = z.infer<typeof NpcResponseOutputSchema>;
|
|
136
|
+
export type NpcResponseOutputValidationError = z.ZodError;
|
|
137
|
+
|
|
138
|
+
/** Throws ZodError on validation failure. */
|
|
139
|
+
export function parseNpcResponseOutput(text: string): NpcResponseOutputData { ... }
|
|
140
|
+
|
|
141
|
+
/** Result-style; never throws. */
|
|
142
|
+
export function safeParseNpcResponseOutput(text: string):
|
|
143
|
+
| { success: true; data: NpcResponseOutputData }
|
|
144
|
+
| { success: false; error: NpcResponseOutputValidationError } { ... }
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`parseXxx` and `safeParseXxx` return the local `<Name>Data` type, derived from
|
|
148
|
+
the schema via `z.infer<>`. It is structurally identical to the payload-VO
|
|
149
|
+
interface emitted by `promptRender()` (e.g., `NpcResponsePayload` in
|
|
150
|
+
`prompts.ts`) — consumers who wire both generators can assign back and forth
|
|
151
|
+
between `NpcResponseOutputData` and `NpcResponsePayload` interchangeably. The
|
|
152
|
+
output-parser file is intentionally self-contained so it compiles standalone
|
|
153
|
+
even when `promptRender()` is not wired in.
|
|
154
|
+
|
|
155
|
+
Consumer usage:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
import { parseNpcResponseOutput, safeParseNpcResponseOutput } from "./generated/NpcResponseOutput.output";
|
|
159
|
+
|
|
160
|
+
const npc = parseNpcResponseOutput(llmResponseText); // throws on bad shape
|
|
161
|
+
|
|
162
|
+
const r = safeParseNpcResponseOutput(llmResponseText);
|
|
163
|
+
if (!r.success) { /* handle r.error (a ZodError) */ } else { /* use r.data */ }
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Field-type → Zod-type mapping:**
|
|
167
|
+
|
|
168
|
+
| Field subtype | Emitted Zod |
|
|
169
|
+
|---|---|
|
|
170
|
+
| `field.string`, `field.class` | `z.string()` |
|
|
171
|
+
| `field.int`, `field.long`, `field.short`, `field.byte` | `z.number().int()` |
|
|
172
|
+
| `field.double`, `field.float` | `z.number()` |
|
|
173
|
+
| `field.boolean` | `z.boolean()` |
|
|
174
|
+
| `field.object` (with `@objectRef`) | nested `z.object({ ... })` |
|
|
175
|
+
| `isArray: true` on any of the above | wrapped in `z.array(...)` |
|
|
176
|
+
|
|
177
|
+
**Options:**
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
outputParser({
|
|
181
|
+
outDir: "src/generated/outputs", // default: emits at the target's root
|
|
182
|
+
target: "default", // default: "default" (the entity-module target)
|
|
183
|
+
})
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**`meta verify` integration:** when `meta verify` runs, every `template.output`'s
|
|
187
|
+
`@payloadRef` resolution is checked. Unresolved refs fail the build (`exit 1`)
|
|
188
|
+
with a `(output)` prefix on the diagnostic. See [ADR-0010](../../../../spec/decisions/ADR-0010-template-output-parser-codegen.md)
|
|
189
|
+
for the cross-language design rationale.
|
|
190
|
+
|
|
191
|
+
## Naming conventions: camelCase TS ↔ snake_case SQL
|
|
192
|
+
|
|
193
|
+
`@metaobjectsdev/codegen-ts` maps `snake_case` metadata field names to
|
|
194
|
+
`camelCase` TS property names by default. The underlying SQL column stays
|
|
195
|
+
`snake_case`.
|
|
196
|
+
|
|
197
|
+
```jsonc
|
|
198
|
+
// Metadata
|
|
199
|
+
{ "field.long": { "name": "council_id" } }
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
// Generated TS — property is camelCase
|
|
204
|
+
import { councils } from "./generated/Council";
|
|
205
|
+
const id = council.councilId;
|
|
206
|
+
db.select().from(councils).where(eq(councils.councilId, "abc"));
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```sql
|
|
210
|
+
-- Generated DDL — column stays snake_case
|
|
211
|
+
CREATE TABLE councils (
|
|
212
|
+
council_id TEXT NOT NULL PRIMARY KEY,
|
|
213
|
+
...
|
|
214
|
+
);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
To override the SQL column name per-field, use `@dbColumn`:
|
|
218
|
+
|
|
219
|
+
```jsonc
|
|
220
|
+
{ "field.long": { "name": "councilId", "@dbColumn": "council_uuid" } }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
The mapping policy is project-wide via `columnNamingStrategy` in
|
|
224
|
+
`metaobjects.config.ts`: `snake_case` (default) | `literal` | `kebab-case`.
|
|
225
|
+
|
|
99
226
|
## License
|
|
100
227
|
|
|
101
228
|
Apache-2.0.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-mapper.d.ts","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"column-mapper.d.ts","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA2B1D,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAiCxC,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,oBAAqD,GAC9D,UAAU,CAoKZ"}
|
package/dist/column-mapper.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
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_CLASS, FIELD_SUBTYPE_ENUM, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, VALIDATOR_ATTR_MAX, } from "@metaobjectsdev/metadata";
|
|
4
4
|
import { columnNameFromField } from "./naming.js";
|
|
5
5
|
import { enumValues } from "./enum-meta.js";
|
|
6
|
+
import { DEFAULT_COLUMN_NAMING_STRATEGY } from "@metaobjectsdev/metadata";
|
|
6
7
|
/**
|
|
7
8
|
* Patterns recognized as SQL expressions in a default value. Anything matching
|
|
8
9
|
* these is treated as a SQL expression, not a string literal. Mirrors
|
|
@@ -55,7 +56,7 @@ function isRequired(field) {
|
|
|
55
56
|
return true;
|
|
56
57
|
return field.validators().some((child) => child.subType === VALIDATOR_SUBTYPE_REQUIRED);
|
|
57
58
|
}
|
|
58
|
-
export function mapColumnType(field, dialect, strategy =
|
|
59
|
+
export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_STRATEGY) {
|
|
59
60
|
const dbName = field.column ?? columnNameFromField(field.name, strategy);
|
|
60
61
|
const importModule = dialect === "sqlite" ? "drizzle-orm/sqlite-core" : "drizzle-orm/pg-core";
|
|
61
62
|
const subType = field.subType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-mapper.js","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,4GAA4G;AAG5G,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"column-mapper.js","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,6 @@ export { queriesFile, type QueriesFileOpts } from "./queries-file.js";
|
|
|
3
3
|
export { routesFile, type RoutesFileOpts } from "./routes-file.js";
|
|
4
4
|
export { barrel, type BarrelOpts } from "./barrel.js";
|
|
5
5
|
export { mermaidErDiagram, type MermaidErOptions } from "./mermaid-er.js";
|
|
6
|
+
export { promptRender, type PromptRenderOpts } from "./prompt-render-file.js";
|
|
7
|
+
export { outputParser, type OutputParserOpts } from "./output-parser-file.js";
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/generators/index.js
CHANGED
|
@@ -3,4 +3,6 @@ export { queriesFile } from "./queries-file.js";
|
|
|
3
3
|
export { routesFile } from "./routes-file.js";
|
|
4
4
|
export { barrel } from "./barrel.js";
|
|
5
5
|
export { mermaidErDiagram } from "./mermaid-er.js";
|
|
6
|
+
export { promptRender } from "./prompt-render-file.js";
|
|
7
|
+
export { outputParser } from "./output-parser-file.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type GeneratorFactory } from "../generator.js";
|
|
2
|
+
export interface OutputParserOpts {
|
|
3
|
+
/** Output directory prefix relative to the target's outDir. Default: "" (root). */
|
|
4
|
+
outDir?: string;
|
|
5
|
+
/** Optional named output target (registry key). Defaults to "default". */
|
|
6
|
+
target?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const outputParser: GeneratorFactory<OutputParserOpts>;
|
|
9
|
+
//# sourceMappingURL=output-parser-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-parser-file.d.ts","sourceRoot":"","sources":["../../src/generators/output-parser-file.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,EAsBpB,gBAAgB,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// server/typescript/packages/codegen-ts/src/generators/output-parser-file.ts
|
|
2
|
+
//
|
|
3
|
+
// Stock generator that emits one <TemplateName>.output.ts file per declared
|
|
4
|
+
// template.output node. Wraps renderOutputParser() from templates/output-parser.ts.
|
|
5
|
+
//
|
|
6
|
+
// Consumer wiring (metaobjects.config.ts):
|
|
7
|
+
// generators: [..., promptRender(), outputParser()]
|
|
8
|
+
//
|
|
9
|
+
// Custom output directory:
|
|
10
|
+
// generators: [..., outputParser({ outDir: "src/generated/outputs" })]
|
|
11
|
+
import { TYPE_TEMPLATE, TEMPLATE_SUBTYPE_OUTPUT } from "@metaobjectsdev/metadata";
|
|
12
|
+
import { oncePerRun, } from "../generator.js";
|
|
13
|
+
import { renderOutputParser } from "../templates/output-parser.js";
|
|
14
|
+
export const outputParser = function outputParser(opts) {
|
|
15
|
+
const dirPrefix = opts?.outDir ? `${opts.outDir.replace(/\/$/, "")}/` : "";
|
|
16
|
+
const generator = {
|
|
17
|
+
name: "output-parser",
|
|
18
|
+
generate: oncePerRun((_entities, ctx) => {
|
|
19
|
+
const outputs = ctx.loadedRoot
|
|
20
|
+
.ownChildren()
|
|
21
|
+
.filter((c) => c.type === TYPE_TEMPLATE && c.subType === TEMPLATE_SUBTYPE_OUTPUT);
|
|
22
|
+
const files = [];
|
|
23
|
+
for (const t of outputs) {
|
|
24
|
+
files.push({
|
|
25
|
+
path: `${dirPrefix}${t.name}.output.ts`,
|
|
26
|
+
content: renderOutputParser(ctx.loadedRoot, t.name),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return files;
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
|
+
if (opts?.target) {
|
|
33
|
+
generator.target = opts.target;
|
|
34
|
+
}
|
|
35
|
+
return generator;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=output-parser-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-parser-file.js","sourceRoot":"","sources":["../../src/generators/output-parser-file.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,oFAAoF;AACpF,EAAE;AACF,2CAA2C;AAC3C,sDAAsD;AACtD,EAAE;AACF,2BAA2B;AAC3B,yEAAyE;AAEzE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAIL,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AASnE,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,YAAY,CAAC,IAAuB;IACvE,MAAM,SAAS,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU;iBAC3B,WAAW,EAAE;iBACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,OAAO,KAAK,uBAAuB,CAAC,CAAC;YACpF,MAAM,KAAK,GAAkB,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,YAAY;oBACvC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;iBACpD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;KACH,CAAC;IACF,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAuC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type GeneratorFactory } from "../generator.js";
|
|
2
|
+
export interface PromptRenderOpts {
|
|
3
|
+
/** Output file path relative to the target's outDir. Default: "prompts.ts". */
|
|
4
|
+
outFile?: string;
|
|
5
|
+
/** Optional named output target (registry key). Defaults to "default". */
|
|
6
|
+
target?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const promptRender: GeneratorFactory<PromptRenderOpts>;
|
|
9
|
+
//# sourceMappingURL=prompt-render-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-render-file.d.ts","sourceRoot":"","sources":["../../src/generators/prompt-render-file.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,EAuCpB,gBAAgB,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Stock generator that wraps generatePayloadInterfaces() + generateRenderHandle()
|
|
2
|
+
// from payload-codegen.ts into a Generator factory. Emits ONE file aggregating
|
|
3
|
+
// typed payload interfaces (for object.value entities) and render handles (for
|
|
4
|
+
// template.prompt nodes).
|
|
5
|
+
//
|
|
6
|
+
// Consumer wiring (metaobjects.config.ts):
|
|
7
|
+
// generators: [..., promptRender()]
|
|
8
|
+
//
|
|
9
|
+
// Custom output path:
|
|
10
|
+
// generators: [..., promptRender({ outFile: "src/render/generated/prompts.ts" })]
|
|
11
|
+
import { TYPE_TEMPLATE, TEMPLATE_SUBTYPE_PROMPT, OBJECT_SUBTYPE_VALUE } from "@metaobjectsdev/metadata";
|
|
12
|
+
import { oncePerRun, } from "../generator.js";
|
|
13
|
+
import { generatePayloadInterfaces, generateRenderHandle, } from "../payload-codegen.js";
|
|
14
|
+
export const promptRender = function promptRender(opts) {
|
|
15
|
+
const outFile = opts?.outFile ?? "prompts.ts";
|
|
16
|
+
const generator = {
|
|
17
|
+
name: "prompt-render",
|
|
18
|
+
generate: oncePerRun((entities, ctx) => {
|
|
19
|
+
const payloads = entities.filter((e) => e.subType === OBJECT_SUBTYPE_VALUE);
|
|
20
|
+
const prompts = ctx.loadedRoot
|
|
21
|
+
.ownChildren()
|
|
22
|
+
.filter((c) => c.type === TYPE_TEMPLATE && c.subType === TEMPLATE_SUBTYPE_PROMPT);
|
|
23
|
+
if (payloads.length === 0 && prompts.length === 0) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const parts = [];
|
|
27
|
+
for (const p of payloads) {
|
|
28
|
+
parts.push(generatePayloadInterfaces(ctx.loadedRoot, p.name));
|
|
29
|
+
}
|
|
30
|
+
// Strip the `import type { ... } from "./payloads.js"` line that
|
|
31
|
+
// generateRenderHandle() emits for the standalone two-file scenario.
|
|
32
|
+
// In the single-file output here the payload interfaces are already
|
|
33
|
+
// defined above, so the import is a self-reference to a non-existent module.
|
|
34
|
+
for (const t of prompts) {
|
|
35
|
+
const handle = generateRenderHandle(ctx.loadedRoot, t.name)
|
|
36
|
+
.split("\n")
|
|
37
|
+
.filter((line) => !line.startsWith("import type {") || !line.includes("./payloads.js"))
|
|
38
|
+
.join("\n");
|
|
39
|
+
parts.push(handle);
|
|
40
|
+
}
|
|
41
|
+
return [{
|
|
42
|
+
path: outFile,
|
|
43
|
+
content: parts.filter((s) => s.length > 0).map((s) => s.trimEnd()).join("\n\n") + "\n",
|
|
44
|
+
}];
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
if (opts?.target) {
|
|
48
|
+
generator.target = opts.target;
|
|
49
|
+
}
|
|
50
|
+
return generator;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=prompt-render-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-render-file.js","sourceRoot":"","sources":["../../src/generators/prompt-render-file.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,+EAA+E;AAC/E,+EAA+E;AAC/E,0BAA0B;AAC1B,EAAE;AACF,2CAA2C;AAC3C,sCAAsC;AACtC,EAAE;AACF,sBAAsB;AACtB,oFAAoF;AAEpF,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACxG,OAAO,EAGL,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAS/B,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,YAAY,CAAC,IAAuB;IACvE,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,YAAY,CAAC;IAC9C,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,oBAAoB,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU;iBAC3B,WAAW,EAAE;iBACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,OAAO,KAAK,uBAAuB,CAAC,CAAC;YAEpF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,iEAAiE;YACjE,qEAAqE;YACrE,oEAAoE;YACpE,6EAA6E;YAC7E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;qBACxD,KAAK,CAAC,IAAI,CAAC;qBACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;qBACtF,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,CAAC;oBACN,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;iBACvF,CAAC,CAAC;QACL,CAAC,CAAC;KACH,CAAC;IACF,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAuC,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { type ColumnNamingStrategy } from "@metaobjectsdev/metadata";
|
|
1
2
|
import type { Generator } from "./generator.js";
|
|
2
3
|
import type { ExtStyle } from "./render-context.js";
|
|
3
4
|
import type { OutputLayout, ResolvedTarget } from "./import-path.js";
|
|
4
5
|
export type Dialect = "sqlite" | "postgres";
|
|
5
|
-
|
|
6
|
+
/** Re-exported from metadata so codegen-ts consumers see one canonical type. */
|
|
7
|
+
export type { ColumnNamingStrategy } from "@metaobjectsdev/metadata";
|
|
6
8
|
export type { ExtStyle };
|
|
7
9
|
export type { OutputLayout };
|
|
8
10
|
export type { ResolvedTarget };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaobjects-config.d.ts","sourceRoot":"","sources":["../src/metaobjects-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC5C,
|
|
1
|
+
{"version":3,"file":"metaobjects-config.d.ts","sourceRoot":"","sources":["../src/metaobjects-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC5C,gFAAgF;AAChF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,kIAAkI;IAClI,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,kGAAkG;IAClG,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;6CAG6C;AAC7C,MAAM,WAAW,8BAA+B,SAAQ,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAC3F,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACzC;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAE/E;AAED;;kEAEkE;AAClE,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAqB3F;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,8BAA8B,CAQ5F"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEFAULT_COLUMN_NAMING_STRATEGY } from "@metaobjectsdev/metadata";
|
|
1
2
|
/** The implicit target synthesized from top-level config (outDir/outputLayout/dbImport). */
|
|
2
3
|
export const DEFAULT_TARGET_NAME = "default";
|
|
3
4
|
/** Identity passthrough; exists for IDE type-inference + autocomplete. */
|
|
@@ -33,7 +34,7 @@ export function resolveTargets(config) {
|
|
|
33
34
|
export function normalizeConfig(config) {
|
|
34
35
|
return {
|
|
35
36
|
...config,
|
|
36
|
-
columnNamingStrategy: config.columnNamingStrategy ??
|
|
37
|
+
columnNamingStrategy: config.columnNamingStrategy ?? DEFAULT_COLUMN_NAMING_STRATEGY,
|
|
37
38
|
apiPrefix: config.apiPrefix ?? "",
|
|
38
39
|
outputLayout: config.outputLayout ?? "flat",
|
|
39
40
|
targets: resolveTargets(config),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaobjects-config.js","sourceRoot":"","sources":["../src/metaobjects-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metaobjects-config.js","sourceRoot":"","sources":["../src/metaobjects-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAA6B,MAAM,0BAA0B,CAAC;AAYrG,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AA2C7C,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,MAA4B;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;kEAEkE;AAClE,MAAM,UAAU,cAAc,CAAC,MAA4B;IACzD,MAAM,MAAM,GAAiB,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC;IAC3D,MAAM,GAAG,GAAmC;QAC1C,CAAC,mBAAmB,CAAC,EAAE;YACrB,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM;YACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B;KACF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,GAAG;YACV,IAAI;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM;YACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;SACxC,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAAC,MAA4B;IAC1D,OAAO;QACL,GAAG,MAAM;QACT,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,8BAA8B;QACnF,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM;QAC3C,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC;KAChC,CAAC;AACJ,CAAC"}
|
package/dist/naming.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import type
|
|
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;
|
|
1
|
+
import { toKebabCase, type ColumnNamingStrategy } from "@metaobjectsdev/metadata";
|
|
2
|
+
export { pluralize, toSnakeCase } from "@metaobjectsdev/metadata";
|
|
7
3
|
/**
|
|
8
4
|
* Convert snake_case to camelCase. Preserves already-camelCase input.
|
|
9
5
|
*/
|
|
@@ -12,12 +8,6 @@ export declare function toCamelCase(s: string): string;
|
|
|
12
8
|
* Capitalize the first character of a string (camelCase → PascalCase).
|
|
13
9
|
*/
|
|
14
10
|
export declare function toPascalCase(s: string): string;
|
|
15
|
-
/**
|
|
16
|
-
* Simple English pluralization. Documented imperfection per design §13 #1:
|
|
17
|
-
* irregular plurals (Person → Persons, not People) are not handled.
|
|
18
|
-
* Users override via source[dbTable]@name in metadata.
|
|
19
|
-
*/
|
|
20
|
-
export declare function pluralize(s: string): string;
|
|
21
11
|
/** PascalCase entity → strategy-applied plural for DB table name. */
|
|
22
12
|
export declare function tableNameFromEntity(entityName: string, strategy?: ColumnNamingStrategy): string;
|
|
23
13
|
/** camelCase or PascalCase field → strategy-applied DB column name. */
|
|
@@ -30,4 +20,5 @@ export declare function columnNameFromField(fieldName: string, strategy?: Column
|
|
|
30
20
|
export declare function viewNameFromProjection(projectionName: string, strategy: ColumnNamingStrategy): string;
|
|
31
21
|
/** PascalCase entity → camelCase plural for the Drizzle table variable. */
|
|
32
22
|
export declare function variableNameFromEntity(entityName: string): string;
|
|
23
|
+
export { toKebabCase };
|
|
33
24
|
//# sourceMappingURL=naming.d.ts.map
|
package/dist/naming.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,WAAW,EAEX,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAElE;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,oBAAqD,GAC9D,MAAM,CAER;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,oBAAqD,GAC9D,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAGR;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/naming.js
CHANGED
|
@@ -1,27 +1,10 @@
|
|
|
1
1
|
// Naming helpers — case conversion + pluralization for codegen output.
|
|
2
|
-
// All functions are pure.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
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
|
-
}
|
|
2
|
+
// All functions are pure. The strategy primitives (toSnakeCase, toKebabCase,
|
|
3
|
+
// applyColumnNamingStrategy, pluralize, DEFAULT_COLUMN_NAMING_STRATEGY) are
|
|
4
|
+
// re-exported from @metaobjectsdev/metadata so codegen + runtime + migrate
|
|
5
|
+
// share a single source of truth for how field/table names lower to columns.
|
|
6
|
+
import { applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, pluralize, toKebabCase, toSnakeCase, } from "@metaobjectsdev/metadata";
|
|
7
|
+
export { pluralize, toSnakeCase } from "@metaobjectsdev/metadata";
|
|
25
8
|
/**
|
|
26
9
|
* Convert snake_case to camelCase. Preserves already-camelCase input.
|
|
27
10
|
*/
|
|
@@ -34,25 +17,13 @@ export function toCamelCase(s) {
|
|
|
34
17
|
export function toPascalCase(s) {
|
|
35
18
|
return s.length > 0 ? s[0].toUpperCase() + s.slice(1) : s;
|
|
36
19
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Simple English pluralization. Documented imperfection per design §13 #1:
|
|
39
|
-
* irregular plurals (Person → Persons, not People) are not handled.
|
|
40
|
-
* Users override via source[dbTable]@name in metadata.
|
|
41
|
-
*/
|
|
42
|
-
export function pluralize(s) {
|
|
43
|
-
if (/(s|x|z|ch|sh)$/i.test(s))
|
|
44
|
-
return s + "es";
|
|
45
|
-
if (/[^aeiou]y$/i.test(s))
|
|
46
|
-
return s.slice(0, -1) + "ies";
|
|
47
|
-
return s + "s";
|
|
48
|
-
}
|
|
49
20
|
/** PascalCase entity → strategy-applied plural for DB table name. */
|
|
50
|
-
export function tableNameFromEntity(entityName, strategy =
|
|
51
|
-
return
|
|
21
|
+
export function tableNameFromEntity(entityName, strategy = DEFAULT_COLUMN_NAMING_STRATEGY) {
|
|
22
|
+
return applyColumnNamingStrategy(pluralize(entityName), strategy);
|
|
52
23
|
}
|
|
53
24
|
/** camelCase or PascalCase field → strategy-applied DB column name. */
|
|
54
|
-
export function columnNameFromField(fieldName, strategy =
|
|
55
|
-
return
|
|
25
|
+
export function columnNameFromField(fieldName, strategy = DEFAULT_COLUMN_NAMING_STRATEGY) {
|
|
26
|
+
return applyColumnNamingStrategy(fieldName, strategy);
|
|
56
27
|
}
|
|
57
28
|
/**
|
|
58
29
|
* PascalCase projection name → "v_" prefix + strategy applied (not pluralized).
|
|
@@ -60,14 +31,13 @@ export function columnNameFromField(fieldName, strategy = "snake_case") {
|
|
|
60
31
|
* With kebab-case the separator prefix is "v-" to stay consistent.
|
|
61
32
|
*/
|
|
62
33
|
export function viewNameFromProjection(projectionName, strategy) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
case "literal": return "v_" + projectionName;
|
|
66
|
-
case "kebab-case": return "v-" + toKebabCase(projectionName);
|
|
67
|
-
}
|
|
34
|
+
const sep = strategy === "kebab-case" ? "-" : "_";
|
|
35
|
+
return "v" + sep + applyColumnNamingStrategy(projectionName, strategy);
|
|
68
36
|
}
|
|
69
37
|
/** PascalCase entity → camelCase plural for the Drizzle table variable. */
|
|
70
38
|
export function variableNameFromEntity(entityName) {
|
|
71
39
|
return pluralize(toCamelCase(entityName.charAt(0).toLowerCase() + entityName.slice(1)));
|
|
72
40
|
}
|
|
41
|
+
// Re-exported here for callers that import from codegen-ts's naming module.
|
|
42
|
+
export { toKebabCase };
|
|
73
43
|
//# sourceMappingURL=naming.js.map
|
package/dist/naming.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAE7E,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,SAAS,EACT,WAAW,EACX,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAElE;;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;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,WAAiC,8BAA8B;IAE/D,OAAO,yBAAyB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,WAAiC,8BAA8B;IAE/D,OAAO,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,QAA8B;IAE9B,MAAM,GAAG,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,OAAO,GAAG,GAAG,GAAG,GAAG,yBAAyB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACzE,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;AAED,4EAA4E;AAC5E,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -11,7 +11,7 @@ export interface ExtractContext {
|
|
|
11
11
|
* and extends a writable entity).
|
|
12
12
|
* @param root The loader's MetaRoot — all top-level objects are
|
|
13
13
|
* direct children of root (returned by `MetaDataLoader.load()`
|
|
14
|
-
*
|
|
14
|
+
* or `MetaDataLoader.fromDirectory()` as `result.root`).
|
|
15
15
|
* @param ctx Column naming strategy for SQL identifiers.
|
|
16
16
|
*/
|
|
17
17
|
export declare function extractViewSpec(projection: MetaObject, root: MetaRoot, ctx: ExtractContext): ViewSpec;
|
|
@@ -255,7 +255,7 @@ function buildGroupBy(spec) {
|
|
|
255
255
|
* and extends a writable entity).
|
|
256
256
|
* @param root The loader's MetaRoot — all top-level objects are
|
|
257
257
|
* direct children of root (returned by `MetaDataLoader.load()`
|
|
258
|
-
*
|
|
258
|
+
* or `MetaDataLoader.fromDirectory()` as `result.root`).
|
|
259
259
|
* @param ctx Column naming strategy for SQL identifiers.
|
|
260
260
|
*/
|
|
261
261
|
export function extractViewSpec(projection, root, ctx) {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type MetaData } from "@metaobjectsdev/metadata";
|
|
2
|
+
/**
|
|
3
|
+
* Render the full output-parser file for one `template.output` node.
|
|
4
|
+
* Throws if the template isn't found, isn't a template.output, or its
|
|
5
|
+
* @payloadRef doesn't resolve to an object.value.
|
|
6
|
+
*/
|
|
7
|
+
export declare function renderOutputParser(root: MetaData, templateName: string): string;
|
|
8
|
+
//# sourceMappingURL=output-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-parser.d.ts","sourceRoot":"","sources":["../../src/templates/output-parser.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,QAAQ,EAQd,MAAM,0BAA0B,CAAC;AAyDlC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CA6D/E"}
|