@danceroutine/tango-codegen 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/domain/CodegenModel.d.ts +19 -0
- package/dist/domain/index.d.ts +4 -0
- package/dist/domain/index.js +1 -0
- package/dist/domain-Cufz6y1q.js +7 -0
- package/dist/domain-Cufz6y1q.js.map +1 -0
- package/dist/generators/index.d.ts +12 -0
- package/dist/generators/index.js +3 -0
- package/dist/generators/migration/generateMigrationFromModels.d.ts +2 -0
- package/dist/generators/migration/index.d.ts +4 -0
- package/dist/generators/model/generateModelInterface.d.ts +2 -0
- package/dist/generators/model/index.d.ts +4 -0
- package/dist/generators/repository/generateRepository.d.ts +1 -0
- package/dist/generators/repository/index.d.ts +4 -0
- package/dist/generators/viewset/generateViewSet.d.ts +1 -0
- package/dist/generators/viewset/index.d.ts +4 -0
- package/dist/generators-CDXkQAkq.js +181 -0
- package/dist/generators-CDXkQAkq.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mappers/fieldType.d.ts +3 -0
- package/dist/mappers/fieldType.js +32 -0
- package/dist/mappers/index.d.ts +4 -0
- package/dist/version.d.ts +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type CodegenFieldMeta = {
|
|
2
|
+
type: string;
|
|
3
|
+
dbType?: string;
|
|
4
|
+
primaryKey?: boolean;
|
|
5
|
+
unique?: boolean;
|
|
6
|
+
nullable?: boolean;
|
|
7
|
+
default?: unknown;
|
|
8
|
+
};
|
|
9
|
+
export type CodegenModel = {
|
|
10
|
+
name: string;
|
|
11
|
+
fields: Record<string, CodegenFieldMeta> | Array<{
|
|
12
|
+
name: string;
|
|
13
|
+
type: string;
|
|
14
|
+
primaryKey?: boolean;
|
|
15
|
+
unique?: boolean;
|
|
16
|
+
notNull?: boolean;
|
|
17
|
+
default?: unknown;
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "../domain-Cufz6y1q.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-Cufz6y1q.js","names":[],"sources":["../src/domain/index.ts"],"sourcesContent":["/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport type { CodegenFieldMeta, CodegenModel } from './CodegenModel';\n"],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain boundary barrel: exposes namespaced exports for Django-style drill-down
|
|
3
|
+
* imports and curated flat exports for TS-native ergonomics.
|
|
4
|
+
*/
|
|
5
|
+
export * as migration from './migration/index';
|
|
6
|
+
export * as model from './model/index';
|
|
7
|
+
export * as repository from './repository/index';
|
|
8
|
+
export * as viewset from './viewset/index';
|
|
9
|
+
export { generateRepository } from './repository/index';
|
|
10
|
+
export { generateModelInterface } from './model/index';
|
|
11
|
+
export { generateMigrationFromModels } from './migration/index';
|
|
12
|
+
export { generateViewSet } from './viewset/index';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { generateMigrationFromModels, generateModelInterface, generateRepository, generateViewSet, migration_exports, model_exports, repository_exports, viewset_exports } from "../generators-CDXkQAkq.js";
|
|
2
|
+
|
|
3
|
+
export { generateMigrationFromModels, generateModelInterface, generateRepository, generateViewSet, migration_exports as migration, model_exports as model, repository_exports as repository, viewset_exports as viewset };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateRepository(modelName: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateViewSet(modelName: string): string;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
|
|
2
|
+
//#region rolldown:runtime
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __export = (target, all) => {
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/mappers/fieldType.ts
|
|
13
|
+
function mapFieldTypeToTS(type) {
|
|
14
|
+
const typeMap = {
|
|
15
|
+
string: "string",
|
|
16
|
+
number: "number",
|
|
17
|
+
boolean: "boolean",
|
|
18
|
+
date: "Date",
|
|
19
|
+
serial: "number",
|
|
20
|
+
int: "number",
|
|
21
|
+
bigint: "number",
|
|
22
|
+
text: "string",
|
|
23
|
+
bool: "boolean",
|
|
24
|
+
uuid: "string",
|
|
25
|
+
jsonb: "any",
|
|
26
|
+
timestamptz: "Date"
|
|
27
|
+
};
|
|
28
|
+
return typeMap[type] || "unknown";
|
|
29
|
+
}
|
|
30
|
+
function normalizeFields(fields) {
|
|
31
|
+
if (Array.isArray(fields)) return fields.map((field) => [field.name, {
|
|
32
|
+
type: field.type,
|
|
33
|
+
primaryKey: field.primaryKey,
|
|
34
|
+
unique: field.unique,
|
|
35
|
+
nullable: !field.notNull,
|
|
36
|
+
default: field.default
|
|
37
|
+
}]);
|
|
38
|
+
return Object.entries(fields);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/mappers/index.ts
|
|
43
|
+
var mappers_exports = {};
|
|
44
|
+
__export(mappers_exports, {
|
|
45
|
+
mapFieldTypeToTS: () => mapFieldTypeToTS,
|
|
46
|
+
normalizeFields: () => normalizeFields
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/generators/migration/generateMigrationFromModels.ts
|
|
51
|
+
function generateMigrationFromModels(models) {
|
|
52
|
+
const generatedId = `auto_generated_${Date.now()}`;
|
|
53
|
+
const className = `Migration_${generatedId}`;
|
|
54
|
+
const operations = models.map((model) => {
|
|
55
|
+
const fields = normalizeFields(model.fields).map(([name, meta]) => {
|
|
56
|
+
return ` cols.add('${name}', (b) => b.${meta.dbType || meta.type}()${meta.primaryKey ? ".primaryKey()" : ""}${meta.unique ? ".unique()" : ""}${meta.nullable ? "" : ".notNull()"});`;
|
|
57
|
+
}).join("\n");
|
|
58
|
+
return ` op.table('${model.name.toLowerCase()}s').create((cols) => {\n${fields}\n }),`;
|
|
59
|
+
}).join("\n\n");
|
|
60
|
+
const reverseOperations = models.slice().reverse().map((model) => ` op.table('${model.name.toLowerCase()}s').drop(),`).join("\n");
|
|
61
|
+
return `
|
|
62
|
+
import { Migration, op } from '@danceroutine/tango-migrations';
|
|
63
|
+
|
|
64
|
+
export default class ${className} extends Migration {
|
|
65
|
+
id = '${generatedId}';
|
|
66
|
+
|
|
67
|
+
up(m) {
|
|
68
|
+
m.run(
|
|
69
|
+
${operations}
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
down() {
|
|
74
|
+
m.run(
|
|
75
|
+
${reverseOperations}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
`.trim();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/generators/migration/index.ts
|
|
84
|
+
var migration_exports = {};
|
|
85
|
+
__export(migration_exports, { generateMigrationFromModels: () => generateMigrationFromModels });
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/generators/model/generateModelInterface.ts
|
|
89
|
+
function generateModelInterface(model) {
|
|
90
|
+
const fields = normalizeFields(model.fields).map(([name, meta]) => {
|
|
91
|
+
const type = mapFieldTypeToTS(meta.type);
|
|
92
|
+
const optional = !meta.primaryKey && meta.default !== undefined ? "?" : "";
|
|
93
|
+
return ` ${name}${optional}: ${type};`;
|
|
94
|
+
}).join("\n");
|
|
95
|
+
return `
|
|
96
|
+
export interface ${model.name} {
|
|
97
|
+
${fields}
|
|
98
|
+
}
|
|
99
|
+
`.trim();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/generators/model/index.ts
|
|
104
|
+
var model_exports = {};
|
|
105
|
+
__export(model_exports, { generateModelInterface: () => generateModelInterface });
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region src/generators/repository/generateRepository.ts
|
|
109
|
+
function generateRepository(modelName) {
|
|
110
|
+
return `
|
|
111
|
+
import { Repository } from '@danceroutine/tango-orm';
|
|
112
|
+
import type { DBClient } from '@danceroutine/tango-orm/connection';
|
|
113
|
+
import { ${modelName} } from './models';
|
|
114
|
+
|
|
115
|
+
export class ${modelName}Repository extends Repository<typeof ${modelName}> {
|
|
116
|
+
constructor(client: DBClient) {
|
|
117
|
+
super(client);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Add custom repository methods here
|
|
121
|
+
}
|
|
122
|
+
`.trim();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
//#endregion
|
|
126
|
+
//#region src/generators/repository/index.ts
|
|
127
|
+
var repository_exports = {};
|
|
128
|
+
__export(repository_exports, { generateRepository: () => generateRepository });
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/generators/viewset/generateViewSet.ts
|
|
132
|
+
function generateViewSet(modelName) {
|
|
133
|
+
const repoName = `${modelName}Repository`;
|
|
134
|
+
return `
|
|
135
|
+
import { ModelViewSet } from '@danceroutine/tango-resources';
|
|
136
|
+
import { FilterSet } from '@danceroutine/tango-resources';
|
|
137
|
+
import { ${repoName} } from './repositories';
|
|
138
|
+
import { ${modelName} } from './models';
|
|
139
|
+
|
|
140
|
+
export class ${modelName}ViewSet extends ModelViewSet<typeof ${modelName}> {
|
|
141
|
+
constructor(repo: ${repoName}) {
|
|
142
|
+
super({
|
|
143
|
+
repository: repo,
|
|
144
|
+
filterSet: new FilterSet({
|
|
145
|
+
// Add filters here
|
|
146
|
+
}),
|
|
147
|
+
pagination: {
|
|
148
|
+
defaultLimit: 25,
|
|
149
|
+
maxLimit: 100,
|
|
150
|
+
cursorColumn: 'id',
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Add custom actions here
|
|
156
|
+
}
|
|
157
|
+
`.trim();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/generators/viewset/index.ts
|
|
162
|
+
var viewset_exports = {};
|
|
163
|
+
__export(viewset_exports, { generateViewSet: () => generateViewSet });
|
|
164
|
+
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region src/generators/index.ts
|
|
167
|
+
var generators_exports = {};
|
|
168
|
+
__export(generators_exports, {
|
|
169
|
+
generateMigrationFromModels: () => generateMigrationFromModels,
|
|
170
|
+
generateModelInterface: () => generateModelInterface,
|
|
171
|
+
generateRepository: () => generateRepository,
|
|
172
|
+
generateViewSet: () => generateViewSet,
|
|
173
|
+
migration: () => migration_exports,
|
|
174
|
+
model: () => model_exports,
|
|
175
|
+
repository: () => repository_exports,
|
|
176
|
+
viewset: () => viewset_exports
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
//#endregion
|
|
180
|
+
export { generateMigrationFromModels, generateModelInterface, generateRepository, generateViewSet, generators_exports, mapFieldTypeToTS, mappers_exports, migration_exports, model_exports, normalizeFields, repository_exports, viewset_exports };
|
|
181
|
+
//# sourceMappingURL=generators-CDXkQAkq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generators-CDXkQAkq.js","names":["type: string","typeMap: Record<string, string>","fields: CodegenModel['fields']","models: CodegenModel[]","model: CodegenModel","modelName: string","modelName: string"],"sources":["../src/mappers/fieldType.ts","../src/mappers/index.ts","../src/generators/migration/generateMigrationFromModels.ts","../src/generators/migration/index.ts","../src/generators/model/generateModelInterface.ts","../src/generators/model/index.ts","../src/generators/repository/generateRepository.ts","../src/generators/repository/index.ts","../src/generators/viewset/generateViewSet.ts","../src/generators/viewset/index.ts","../src/generators/index.ts"],"sourcesContent":["import type { CodegenFieldMeta, CodegenModel } from '../domain';\n\nexport function mapFieldTypeToTS(type: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n serial: 'number',\n int: 'number',\n bigint: 'number',\n text: 'string',\n bool: 'boolean',\n uuid: 'string',\n jsonb: 'any',\n timestamptz: 'Date',\n };\n\n return typeMap[type] || 'unknown';\n}\n\nexport function normalizeFields(fields: CodegenModel['fields']): Array<[string, CodegenFieldMeta]> {\n if (Array.isArray(fields)) {\n return fields.map((field) => [\n field.name,\n {\n type: field.type,\n primaryKey: field.primaryKey,\n unique: field.unique,\n nullable: !field.notNull,\n default: field.default,\n },\n ]);\n }\n\n return Object.entries(fields);\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { mapFieldTypeToTS, normalizeFields } from './fieldType';\n","import type { CodegenModel } from '../../domain';\nimport { normalizeFields } from '../../mappers';\n\nexport function generateMigrationFromModels(models: CodegenModel[]): string {\n const generatedId = `auto_generated_${Date.now()}`;\n const className = `Migration_${generatedId}`;\n const operations = models\n .map((model) => {\n const fields = normalizeFields(model.fields)\n .map(([name, meta]) => {\n return ` cols.add('${name}', (b) => b.${meta.dbType || meta.type}()${meta.primaryKey ? '.primaryKey()' : ''}${meta.unique ? '.unique()' : ''}${meta.nullable ? '' : '.notNull()'});`;\n })\n .join('\\n');\n\n return ` op.table('${model.name.toLowerCase()}s').create((cols) => {\\n${fields}\\n }),`;\n })\n .join('\\n\\n');\n const reverseOperations = models\n .slice()\n .reverse()\n .map((model) => ` op.table('${model.name.toLowerCase()}s').drop(),`)\n .join('\\n');\n\n return `\nimport { Migration, op } from '@danceroutine/tango-migrations';\n\nexport default class ${className} extends Migration {\n id = '${generatedId}';\n\n up(m) {\n m.run(\n${operations}\n );\n }\n\n down() {\n m.run(\n${reverseOperations}\n );\n }\n}\n `.trim();\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { generateMigrationFromModels } from './generateMigrationFromModels';\n","import type { CodegenModel } from '../../domain';\nimport { mapFieldTypeToTS, normalizeFields } from '../../mappers';\n\nexport function generateModelInterface(model: CodegenModel): string {\n const fields = normalizeFields(model.fields)\n .map(([name, meta]) => {\n const type = mapFieldTypeToTS(meta.type);\n const optional = !meta.primaryKey && meta.default !== undefined ? '?' : '';\n return ` ${name}${optional}: ${type};`;\n })\n .join('\\n');\n\n return `\nexport interface ${model.name} {\n${fields}\n}\n `.trim();\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { generateModelInterface } from './generateModelInterface';\n","export function generateRepository(modelName: string): string {\n return `\nimport { Repository } from '@danceroutine/tango-orm';\nimport type { DBClient } from '@danceroutine/tango-orm/connection';\nimport { ${modelName} } from './models';\n\nexport class ${modelName}Repository extends Repository<typeof ${modelName}> {\n constructor(client: DBClient) {\n super(client);\n }\n\n // Add custom repository methods here\n}\n `.trim();\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { generateRepository } from './generateRepository';\n","export function generateViewSet(modelName: string): string {\n const repoName = `${modelName}Repository`;\n\n return `\nimport { ModelViewSet } from '@danceroutine/tango-resources';\nimport { FilterSet } from '@danceroutine/tango-resources';\nimport { ${repoName} } from './repositories';\nimport { ${modelName} } from './models';\n\nexport class ${modelName}ViewSet extends ModelViewSet<typeof ${modelName}> {\n constructor(repo: ${repoName}) {\n super({\n repository: repo,\n filterSet: new FilterSet({\n // Add filters here\n }),\n pagination: {\n defaultLimit: 25,\n maxLimit: 100,\n cursorColumn: 'id',\n },\n });\n }\n\n // Add custom actions here\n}\n `.trim();\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { generateViewSet } from './generateViewSet';\n","/**\n * Domain boundary barrel: exposes namespaced exports for Django-style drill-down\n * imports and curated flat exports for TS-native ergonomics.\n */\n\nexport * as migration from './migration/index';\nexport * as model from './model/index';\nexport * as repository from './repository/index';\nexport * as viewset from './viewset/index';\n\nexport { generateRepository } from './repository/index';\nexport { generateModelInterface } from './model/index';\nexport { generateMigrationFromModels } from './migration/index';\nexport { generateViewSet } from './viewset/index';\n"],"mappings":";;;;;;;;;;;;AAEO,SAAS,iBAAiBA,MAAsB;CACnD,MAAMC,UAAkC;EACpC,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,MAAM;EACN,QAAQ;EACR,KAAK;EACL,QAAQ;EACR,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;CAChB;AAED,QAAO,QAAQ,SAAS;AAC3B;AAEM,SAAS,gBAAgBC,QAAmE;AAC/F,KAAI,MAAM,QAAQ,OAAO,CACrB,QAAO,OAAO,IAAI,CAAC,UAAU,CACzB,MAAM,MACN;EACI,MAAM,MAAM;EACZ,YAAY,MAAM;EAClB,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,SAAS,MAAM;CAEtB,CAAA,EAAC;AAGN,QAAO,OAAO,QAAQ,OAAO;AAChC;;;;;;;;;;;;ACjCM,SAAS,4BAA4BC,QAAgC;CACxE,MAAM,eAAe,iBAAiB,KAAK,KAAK,CAAC;CACjD,MAAM,aAAa,YAAY,YAAY;CAC3C,MAAM,aAAa,OACd,IAAI,CAAC,UAAU;EACZ,MAAM,SAAS,gBAAgB,MAAM,OAAO,CACvC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;AACnB,WAAQ,kBAAkB,KAAK,cAAc,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,aAAa,kBAAkB,GAAG,EAAE,KAAK,SAAS,cAAc,GAAG,EAAE,KAAK,WAAW,KAAK,aAAa;EACzL,EAAC,CACD,KAAK,KAAK;AAEf,UAAQ,kBAAkB,MAAM,KAAK,aAAa,CAAC,0BAA0B,OAAO;CACvF,EAAC,CACD,KAAK,OAAO;CACjB,MAAM,oBAAoB,OACrB,OAAO,CACP,SAAS,CACT,IAAI,CAAC,WAAW,kBAAkB,MAAM,KAAK,aAAa,CAAC,aAAa,CACxE,KAAK,KAAK;AAEf,QAAO,CAAC;;;uBAGW,UAAU;UACvB,YAAY;;;;EAIpB,WAAW;;;;;;EAMX,kBAAkB;;;;IAIhB,MAAM;AACT;;;;;;;;;ACvCM,SAAS,uBAAuBC,OAA6B;CAChE,MAAM,SAAS,gBAAgB,MAAM,OAAO,CACvC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;EACnB,MAAM,OAAO,iBAAiB,KAAK,KAAK;EACxC,MAAM,YAAY,KAAK,cAAc,KAAK,YAAY,YAAY,MAAM;AACxE,UAAQ,IAAI,KAAK,EAAE,SAAS,IAAI,KAAK;CACxC,EAAC,CACD,KAAK,KAAK;AAEf,QAAO,CAAC;mBACO,MAAM,KAAK;EAC5B,OAAO;;IAEL,MAAM;AACT;;;;;;;;;ACjBM,SAAS,mBAAmBC,WAA2B;AAC1D,QAAO,CAAC;;;WAGD,UAAU;;eAEN,UAAU,uCAAuC,UAAU;;;;;;;IAOtE,MAAM;AACT;;;;;;;;;ACdM,SAAS,gBAAgBC,WAA2B;CACvD,MAAM,YAAY,EAAE,UAAU;AAE9B,QAAO,CAAC;;;WAGD,SAAS;WACT,UAAU;;eAEN,UAAU,sCAAsC,UAAU;sBACnD,SAAS;;;;;;;;;;;;;;;;IAgB3B,MAAM;AACT"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundled exports for Django-style domain drill-down imports, plus curated
|
|
3
|
+
* top-level symbols for TS-native ergonomic imports.
|
|
4
|
+
*/
|
|
5
|
+
export * as domain from './domain/index';
|
|
6
|
+
export * as generators from './generators/index';
|
|
7
|
+
export * as mappers from './mappers/index';
|
|
8
|
+
export { VERSION as version } from './version';
|
|
9
|
+
export type { CodegenFieldMeta, CodegenModel } from './domain/index';
|
|
10
|
+
export { generateMigrationFromModels, generateModelInterface, generateRepository, generateViewSet, } from './generators/index';
|
|
11
|
+
export { mapFieldTypeToTS, normalizeFields } from './mappers/index';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { generateMigrationFromModels, generateModelInterface, generateRepository, generateViewSet, generators_exports, mapFieldTypeToTS, mappers_exports, normalizeFields } from "./generators-CDXkQAkq.js";
|
|
2
|
+
import { domain_exports } from "./domain-Cufz6y1q.js";
|
|
3
|
+
|
|
4
|
+
//#region src/version.ts
|
|
5
|
+
const VERSION = "0.1.0";
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
export { domain_exports as domain, generateMigrationFromModels, generateModelInterface, generateRepository, generateViewSet, generators_exports as generators, mapFieldTypeToTS, mappers_exports as mappers, normalizeFields, VERSION as version };
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["export const VERSION = '0.1.0';\n"],"mappings":";;;;MAAa,UAAU"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function mapFieldTypeToTS(type) {
|
|
2
|
+
const typeMap = {
|
|
3
|
+
string: 'string',
|
|
4
|
+
number: 'number',
|
|
5
|
+
boolean: 'boolean',
|
|
6
|
+
date: 'Date',
|
|
7
|
+
serial: 'number',
|
|
8
|
+
int: 'number',
|
|
9
|
+
bigint: 'number',
|
|
10
|
+
text: 'string',
|
|
11
|
+
bool: 'boolean',
|
|
12
|
+
uuid: 'string',
|
|
13
|
+
jsonb: 'unknown',
|
|
14
|
+
timestamptz: 'Date',
|
|
15
|
+
};
|
|
16
|
+
return typeMap[type] || 'unknown';
|
|
17
|
+
}
|
|
18
|
+
export function normalizeFields(fields) {
|
|
19
|
+
if (Array.isArray(fields)) {
|
|
20
|
+
return fields.map((field) => [
|
|
21
|
+
field.name,
|
|
22
|
+
{
|
|
23
|
+
type: field.type,
|
|
24
|
+
primaryKey: field.primaryKey,
|
|
25
|
+
unique: field.unique,
|
|
26
|
+
nullable: !field.notNull,
|
|
27
|
+
default: field.default,
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
return Object.entries(fields);
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0";
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@danceroutine/tango-codegen",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for generating repositories, types, migrations, and OpenAPI specs for Tango",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./domain": {
|
|
14
|
+
"types": "./dist/domain/index.d.ts",
|
|
15
|
+
"import": "./dist/domain/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./generators": {
|
|
18
|
+
"types": "./dist/generators/index.d.ts",
|
|
19
|
+
"import": "./dist/generators/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsdown",
|
|
27
|
+
"test": "vitest run --coverage",
|
|
28
|
+
"test:watch": "vitest",
|
|
29
|
+
"typecheck": "tsc --noEmit"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"tango",
|
|
33
|
+
"codegen",
|
|
34
|
+
"cli",
|
|
35
|
+
"generator",
|
|
36
|
+
"migrations"
|
|
37
|
+
],
|
|
38
|
+
"author": "Pedro Del Moral Lopez",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/danceroutine/tango.git",
|
|
43
|
+
"directory": "packages/codegen"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@danceroutine/tango-schema": "workspace:*"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.9.0",
|
|
50
|
+
"tsdown": "^0.4.0",
|
|
51
|
+
"typescript": "^5.6.3",
|
|
52
|
+
"vitest": "^4.0.6"
|
|
53
|
+
}
|
|
54
|
+
}
|