@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.
@@ -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,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export type { CodegenFieldMeta, CodegenModel } from './CodegenModel';
@@ -0,0 +1 @@
1
+ import "../domain-Cufz6y1q.js";
@@ -0,0 +1,7 @@
1
+
2
+ //#region src/domain/index.ts
3
+ var domain_exports = {};
4
+
5
+ //#endregion
6
+ export { domain_exports };
7
+ //# sourceMappingURL=domain-Cufz6y1q.js.map
@@ -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,2 @@
1
+ import type { CodegenModel } from '../../domain';
2
+ export declare function generateMigrationFromModels(models: CodegenModel[]): string;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { generateMigrationFromModels } from './generateMigrationFromModels';
@@ -0,0 +1,2 @@
1
+ import type { CodegenModel } from '../../domain';
2
+ export declare function generateModelInterface(model: CodegenModel): string;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { generateModelInterface } from './generateModelInterface';
@@ -0,0 +1 @@
1
+ export declare function generateRepository(modelName: string): string;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { generateRepository } from './generateRepository';
@@ -0,0 +1 @@
1
+ export declare function generateViewSet(modelName: string): string;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { generateViewSet } from './generateViewSet';
@@ -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"}
@@ -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,3 @@
1
+ import type { CodegenFieldMeta, CodegenModel } from '../domain';
2
+ export declare function mapFieldTypeToTS(type: string): string;
3
+ export declare function normalizeFields(fields: CodegenModel['fields']): Array<[string, CodegenFieldMeta]>;
@@ -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,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { mapFieldTypeToTS, normalizeFields } from './fieldType';
@@ -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
+ }