@objectifthunes/create-sandstone 0.2.0 → 1.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/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +31 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add-adapter.d.ts +2 -0
- package/dist/commands/add-adapter.d.ts.map +1 -0
- package/dist/commands/add-adapter.js +683 -0
- package/dist/commands/add-adapter.js.map +1 -0
- package/dist/commands/generate-adapter.d.ts +2 -0
- package/dist/commands/generate-adapter.d.ts.map +1 -0
- package/dist/commands/generate-adapter.js +467 -0
- package/dist/commands/generate-adapter.js.map +1 -0
- package/dist/commands/generate-entity.d.ts +2 -0
- package/dist/commands/generate-entity.d.ts.map +1 -0
- package/dist/commands/generate-entity.js +217 -0
- package/dist/commands/generate-entity.js.map +1 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +92 -25
- package/dist/generator.js.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/presets.d.ts +24 -4
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +42 -19
- package/dist/presets.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +181 -7
- package/dist/prompts.js.map +1 -1
- package/dist/templates/auth-test.d.ts +3 -0
- package/dist/templates/auth-test.d.ts.map +1 -0
- package/dist/templates/auth-test.js +52 -0
- package/dist/templates/auth-test.js.map +1 -0
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +472 -4
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/templates/docker-compose.d.ts.map +1 -1
- package/dist/templates/docker-compose.js +42 -0
- package/dist/templates/docker-compose.js.map +1 -1
- package/dist/templates/entities-repositories.d.ts +3 -0
- package/dist/templates/entities-repositories.d.ts.map +1 -0
- package/dist/templates/entities-repositories.js +19 -0
- package/dist/templates/entities-repositories.js.map +1 -0
- package/dist/templates/entities-types.d.ts +3 -0
- package/dist/templates/entities-types.d.ts.map +1 -0
- package/dist/templates/entities-types.js +24 -0
- package/dist/templates/entities-types.js.map +1 -0
- package/dist/templates/env-example.d.ts.map +1 -1
- package/dist/templates/env-example.js +81 -2
- package/dist/templates/env-example.js.map +1 -1
- package/dist/templates/graphql-auth.d.ts +3 -0
- package/dist/templates/graphql-auth.d.ts.map +1 -0
- package/dist/templates/graphql-auth.js +160 -0
- package/dist/templates/graphql-auth.js.map +1 -0
- package/dist/templates/graphql-enums.d.ts +2 -0
- package/dist/templates/graphql-enums.d.ts.map +1 -0
- package/dist/templates/graphql-enums.js +28 -0
- package/dist/templates/graphql-enums.js.map +1 -0
- package/dist/templates/graphql-helpers.d.ts +2 -0
- package/dist/templates/graphql-helpers.d.ts.map +1 -0
- package/dist/templates/graphql-helpers.js +134 -0
- package/dist/templates/graphql-helpers.js.map +1 -0
- package/dist/templates/graphql-inputs.d.ts +2 -0
- package/dist/templates/graphql-inputs.d.ts.map +1 -0
- package/dist/templates/graphql-inputs.js +28 -0
- package/dist/templates/graphql-inputs.js.map +1 -0
- package/dist/templates/graphql-schema.d.ts +3 -0
- package/dist/templates/graphql-schema.d.ts.map +1 -0
- package/dist/templates/graphql-schema.js +33 -0
- package/dist/templates/graphql-schema.js.map +1 -0
- package/dist/templates/graphql-types.d.ts +3 -0
- package/dist/templates/graphql-types.d.ts.map +1 -0
- package/dist/templates/graphql-types.js +61 -0
- package/dist/templates/graphql-types.js.map +1 -0
- package/dist/templates/graphql-validation.d.ts +3 -0
- package/dist/templates/graphql-validation.d.ts.map +1 -0
- package/dist/templates/graphql-validation.js +37 -0
- package/dist/templates/graphql-validation.js.map +1 -0
- package/dist/templates/health-e2e-test.d.ts +3 -0
- package/dist/templates/health-e2e-test.d.ts.map +1 -0
- package/dist/templates/health-e2e-test.js +50 -0
- package/dist/templates/health-e2e-test.js.map +1 -0
- package/dist/templates/infrastructure.d.ts.map +1 -1
- package/dist/templates/infrastructure.js +433 -32
- package/dist/templates/infrastructure.js.map +1 -1
- package/dist/templates/main-express.d.ts.map +1 -1
- package/dist/templates/main-express.js +87 -8
- package/dist/templates/main-express.js.map +1 -1
- package/dist/templates/main-fastify.d.ts +3 -0
- package/dist/templates/main-fastify.d.ts.map +1 -0
- package/dist/templates/main-fastify.js +73 -0
- package/dist/templates/main-fastify.js.map +1 -0
- package/dist/templates/main-hono.d.ts.map +1 -1
- package/dist/templates/main-hono.js +45 -9
- package/dist/templates/main-hono.js.map +1 -1
- package/dist/templates/package-json.d.ts.map +1 -1
- package/dist/templates/package-json.js +67 -3
- package/dist/templates/package-json.js.map +1 -1
- package/dist/templates/test-setup.d.ts +1 -1
- package/dist/templates/test-setup.d.ts.map +1 -1
- package/dist/templates/test-setup.js +10 -39
- package/dist/templates/test-setup.js.map +1 -1
- package/dist/templates/vitest-config.d.ts +2 -0
- package/dist/templates/vitest-config.d.ts.map +1 -0
- package/dist/templates/vitest-config.js +13 -0
- package/dist/templates/vitest-config.js.map +1 -0
- package/dist/templates/vitest-e2e-config.d.ts +2 -0
- package/dist/templates/vitest-e2e-config.d.ts.map +1 -0
- package/dist/templates/vitest-e2e-config.js +16 -0
- package/dist/templates/vitest-e2e-config.js.map +1 -0
- package/dist/templates/workers-index.d.ts +3 -0
- package/dist/templates/workers-index.d.ts.map +1 -0
- package/dist/templates/workers-index.js +19 -0
- package/dist/templates/workers-index.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { writeFile, mkdir, readdir } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
const TS_TO_SQL = {
|
|
5
|
+
string: 'TEXT',
|
|
6
|
+
number: 'INTEGER',
|
|
7
|
+
boolean: 'BOOLEAN',
|
|
8
|
+
Date: 'TIMESTAMPTZ',
|
|
9
|
+
uuid: 'UUID',
|
|
10
|
+
};
|
|
11
|
+
const TS_TO_GRAPHQL = {
|
|
12
|
+
string: 'GraphQLString',
|
|
13
|
+
number: 'GraphQLInt',
|
|
14
|
+
boolean: 'GraphQLBoolean',
|
|
15
|
+
Date: 'DateTimeScalar',
|
|
16
|
+
uuid: 'UUIDScalar',
|
|
17
|
+
};
|
|
18
|
+
function pascalToSnake(name) {
|
|
19
|
+
return name
|
|
20
|
+
.replace(/([A-Z])/g, (match, letter, offset) => offset > 0 ? `_${letter.toLowerCase()}` : letter.toLowerCase())
|
|
21
|
+
.replace(/_{2,}/g, '_');
|
|
22
|
+
}
|
|
23
|
+
const SAFE_IDENTIFIER = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
|
|
24
|
+
function assertSafeIdentifier(value, label) {
|
|
25
|
+
if (!SAFE_IDENTIFIER.test(value)) {
|
|
26
|
+
throw new Error(`Invalid ${label}: "${value}". Must match /^[a-zA-Z_][a-zA-Z0-9_]*$/ (letters, digits, underscores only, cannot start with a digit).`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function parseFields(fieldsStr) {
|
|
30
|
+
return fieldsStr
|
|
31
|
+
.split(',')
|
|
32
|
+
.map((f) => f.trim())
|
|
33
|
+
.filter((f) => f.length > 0)
|
|
34
|
+
.map((f) => {
|
|
35
|
+
const parts = f.split(':').map((s) => s.trim());
|
|
36
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
37
|
+
throw new Error(`Invalid field definition: "${f}". Expected format: "name:type" (exactly one colon).`);
|
|
38
|
+
}
|
|
39
|
+
const name = parts[0];
|
|
40
|
+
const rawType = parts[1];
|
|
41
|
+
assertSafeIdentifier(name, 'field name');
|
|
42
|
+
const nullable = rawType.endsWith('?');
|
|
43
|
+
const type = nullable ? rawType.slice(0, -1) : rawType;
|
|
44
|
+
return { name, type, nullable };
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function parseArgs(args) {
|
|
48
|
+
let name = null;
|
|
49
|
+
let fieldsStr = null;
|
|
50
|
+
for (let i = 0; i < args.length; i++) {
|
|
51
|
+
const arg = args[i];
|
|
52
|
+
if (arg === '--fields' || arg === '-f') {
|
|
53
|
+
fieldsStr = args[++i] ?? null;
|
|
54
|
+
}
|
|
55
|
+
else if (arg.startsWith('--fields=')) {
|
|
56
|
+
fieldsStr = arg.split('=').slice(1).join('=');
|
|
57
|
+
}
|
|
58
|
+
else if (!arg.startsWith('-')) {
|
|
59
|
+
name = arg;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (!name) {
|
|
63
|
+
console.error('Error: Entity name is required.');
|
|
64
|
+
console.error('Usage: sandstone generate entity <Name> --fields "field:type, ..."');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
if (!fieldsStr) {
|
|
68
|
+
console.error('Error: --fields is required.');
|
|
69
|
+
console.error('Usage: sandstone generate entity <Name> --fields "title:string, published:boolean"');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
return { name, fields: parseFields(fieldsStr) };
|
|
73
|
+
}
|
|
74
|
+
async function detectNextMigrationNumber(migrationsDir) {
|
|
75
|
+
if (!existsSync(migrationsDir)) {
|
|
76
|
+
return '001';
|
|
77
|
+
}
|
|
78
|
+
const entries = await readdir(migrationsDir);
|
|
79
|
+
const numbers = entries
|
|
80
|
+
.map((e) => {
|
|
81
|
+
const match = e.match(/^(\d+)/);
|
|
82
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
83
|
+
})
|
|
84
|
+
.filter((n) => n > 0);
|
|
85
|
+
if (numbers.length === 0)
|
|
86
|
+
return '001';
|
|
87
|
+
const next = Math.max(...numbers) + 1;
|
|
88
|
+
return String(next).padStart(3, '0');
|
|
89
|
+
}
|
|
90
|
+
function generateUpMigration(tableName, fields) {
|
|
91
|
+
const columns = [
|
|
92
|
+
' id UUID PRIMARY KEY DEFAULT gen_random_uuid()',
|
|
93
|
+
...fields.map((f) => {
|
|
94
|
+
const sqlType = TS_TO_SQL[f.type] ?? 'TEXT';
|
|
95
|
+
const nullable = f.nullable ? '' : ' NOT NULL';
|
|
96
|
+
return ` ${f.name} ${sqlType}${nullable}`;
|
|
97
|
+
}),
|
|
98
|
+
' created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()',
|
|
99
|
+
' updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()',
|
|
100
|
+
];
|
|
101
|
+
let sql = `CREATE TABLE ${tableName} (\n${columns.join(',\n')}\n);\n`;
|
|
102
|
+
// Add indexes for UUID FK columns
|
|
103
|
+
for (const f of fields) {
|
|
104
|
+
if (f.type === 'uuid') {
|
|
105
|
+
sql += `\nCREATE INDEX idx_${tableName}_${f.name} ON ${tableName}(${f.name});\n`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return sql;
|
|
109
|
+
}
|
|
110
|
+
function generateDownMigration(tableName) {
|
|
111
|
+
return `DROP TABLE IF EXISTS ${tableName};\n`;
|
|
112
|
+
}
|
|
113
|
+
function generateTypeScriptModule(entityName, tableName, fields) {
|
|
114
|
+
const tsFields = [
|
|
115
|
+
' id: string;',
|
|
116
|
+
...fields.map((f) => {
|
|
117
|
+
const tsType = f.type === 'uuid' ? 'string' : f.type;
|
|
118
|
+
const optional = f.nullable ? '?' : '';
|
|
119
|
+
return ` ${f.name}${optional}: ${tsType};`;
|
|
120
|
+
}),
|
|
121
|
+
' created_at: Date;',
|
|
122
|
+
' updated_at: Date;',
|
|
123
|
+
];
|
|
124
|
+
return `import { createRepository } from '@objectifthunes/sandstone-sdk';
|
|
125
|
+
import type { Repository } from '@objectifthunes/sandstone-sdk';
|
|
126
|
+
|
|
127
|
+
export interface ${entityName} {
|
|
128
|
+
${tsFields.join('\n')}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export const ${entityName.charAt(0).toLowerCase() + entityName.slice(1)}Repo: Repository<${entityName}> = createRepository<${entityName}>('${tableName}', {
|
|
132
|
+
primaryKey: 'id',
|
|
133
|
+
softDelete: false,
|
|
134
|
+
});
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
function generateGraphQLSnippet(entityName, fields) {
|
|
138
|
+
const graphqlImports = new Set();
|
|
139
|
+
graphqlImports.add('GraphQLObjectType');
|
|
140
|
+
graphqlImports.add('GraphQLNonNull');
|
|
141
|
+
graphqlImports.add('GraphQLString');
|
|
142
|
+
const fieldEntries = [
|
|
143
|
+
` id: { type: new GraphQLNonNull(UUIDScalar) },`,
|
|
144
|
+
];
|
|
145
|
+
for (const f of fields) {
|
|
146
|
+
const gqlType = TS_TO_GRAPHQL[f.type] ?? 'GraphQLString';
|
|
147
|
+
graphqlImports.add(gqlType);
|
|
148
|
+
const wrapped = f.nullable ? gqlType : `new GraphQLNonNull(${gqlType})`;
|
|
149
|
+
fieldEntries.push(` ${f.name}: { type: ${wrapped} },`);
|
|
150
|
+
}
|
|
151
|
+
graphqlImports.add('DateTimeScalar');
|
|
152
|
+
fieldEntries.push(` created_at: { type: new GraphQLNonNull(DateTimeScalar) },`);
|
|
153
|
+
fieldEntries.push(` updated_at: { type: new GraphQLNonNull(DateTimeScalar) },`);
|
|
154
|
+
// Separate standard GraphQL types from Sandstone scalars
|
|
155
|
+
const standardTypes = [
|
|
156
|
+
'GraphQLObjectType',
|
|
157
|
+
'GraphQLNonNull',
|
|
158
|
+
'GraphQLString',
|
|
159
|
+
'GraphQLInt',
|
|
160
|
+
'GraphQLBoolean',
|
|
161
|
+
].filter((t) => graphqlImports.has(t));
|
|
162
|
+
const sandstoneScalars = ['DateTimeScalar', 'UUIDScalar', 'EmailScalar'].filter((t) => graphqlImports.has(t));
|
|
163
|
+
const lines = [];
|
|
164
|
+
lines.push(`import { ${standardTypes.join(', ')} } from 'graphql';`);
|
|
165
|
+
if (sandstoneScalars.length > 0) {
|
|
166
|
+
lines.push(`import { ${sandstoneScalars.join(', ')} } from '@objectifthunes/sandstone-sdk';`);
|
|
167
|
+
}
|
|
168
|
+
lines.push('');
|
|
169
|
+
lines.push(`export const ${entityName}Type = new GraphQLObjectType({`);
|
|
170
|
+
lines.push(` name: '${entityName}',`);
|
|
171
|
+
lines.push(` fields: () => ({`);
|
|
172
|
+
lines.push(fieldEntries.join('\n'));
|
|
173
|
+
lines.push(` }),`);
|
|
174
|
+
lines.push(`});`);
|
|
175
|
+
return lines.join('\n');
|
|
176
|
+
}
|
|
177
|
+
export async function generateEntity(args) {
|
|
178
|
+
const { name: entityName, fields } = parseArgs(args);
|
|
179
|
+
const snakeName = pascalToSnake(entityName);
|
|
180
|
+
const tableName = `${snakeName}s`;
|
|
181
|
+
assertSafeIdentifier(tableName, 'table name');
|
|
182
|
+
const cwd = process.cwd();
|
|
183
|
+
const migrationsDir = join(cwd, 'migrations');
|
|
184
|
+
const srcDir = join(cwd, 'src');
|
|
185
|
+
// Detect next migration number
|
|
186
|
+
const migrationNum = await detectNextMigrationNumber(migrationsDir);
|
|
187
|
+
// File paths
|
|
188
|
+
const upPath = join(migrationsDir, `${migrationNum}_create_${tableName}.up.sql`);
|
|
189
|
+
const downPath = join(migrationsDir, `${migrationNum}_create_${tableName}.down.sql`);
|
|
190
|
+
const entitiesDir = join(srcDir, 'entities');
|
|
191
|
+
const modulePath = join(entitiesDir, `${snakeName}.ts`);
|
|
192
|
+
// Generate content
|
|
193
|
+
const upSql = generateUpMigration(tableName, fields);
|
|
194
|
+
const downSql = generateDownMigration(tableName);
|
|
195
|
+
const tsModule = generateTypeScriptModule(entityName, tableName, fields);
|
|
196
|
+
const graphqlSnippet = generateGraphQLSnippet(entityName, fields);
|
|
197
|
+
// File paths for GraphQL type
|
|
198
|
+
const graphqlTypesDir = join(srcDir, 'graphql', 'types');
|
|
199
|
+
const graphqlTypePath = join(graphqlTypesDir, `${snakeName}.ts`);
|
|
200
|
+
// Write files
|
|
201
|
+
await mkdir(migrationsDir, { recursive: true });
|
|
202
|
+
await mkdir(entitiesDir, { recursive: true });
|
|
203
|
+
await mkdir(graphqlTypesDir, { recursive: true });
|
|
204
|
+
await writeFile(upPath, upSql, 'utf-8');
|
|
205
|
+
await writeFile(downPath, downSql, 'utf-8');
|
|
206
|
+
await writeFile(modulePath, tsModule, 'utf-8');
|
|
207
|
+
await writeFile(graphqlTypePath, graphqlSnippet + '\n', 'utf-8');
|
|
208
|
+
// Report
|
|
209
|
+
console.log(`\n Generated entity: ${entityName}\n`);
|
|
210
|
+
console.log(` Files created:`);
|
|
211
|
+
console.log(` migrations/${migrationNum}_create_${tableName}.up.sql`);
|
|
212
|
+
console.log(` migrations/${migrationNum}_create_${tableName}.down.sql`);
|
|
213
|
+
console.log(` src/entities/${snakeName}.ts`);
|
|
214
|
+
console.log(` src/graphql/types/${snakeName}.ts`);
|
|
215
|
+
console.log();
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=generate-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-entity.js","sourceRoot":"","sources":["../../src/commands/generate-entity.ts"],"names":[],"mappings":"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"}
|
package/dist/generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgClD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiInB"}
|
package/dist/generator.js
CHANGED
|
@@ -8,63 +8,130 @@ import { dockerComposeTemplate } from './templates/docker-compose.js';
|
|
|
8
8
|
import { infrastructureTemplate } from './templates/infrastructure.js';
|
|
9
9
|
import { mainExpressTemplate } from './templates/main-express.js';
|
|
10
10
|
import { mainHonoTemplate } from './templates/main-hono.js';
|
|
11
|
-
import {
|
|
12
|
-
import { testSetupTemplate } from './templates/test-setup.js';
|
|
13
|
-
import { migrationTemplate } from './templates/migration.js';
|
|
11
|
+
import { mainFastifyTemplate } from './templates/main-fastify.js';
|
|
14
12
|
import { migrateScriptTemplate } from './templates/migrate-script.js';
|
|
15
13
|
import { claudeMdTemplate } from './templates/claude-md.js';
|
|
14
|
+
import { entitiesTypesTemplate } from './templates/entities-types.js';
|
|
15
|
+
import { entitiesRepositoriesTemplate } from './templates/entities-repositories.js';
|
|
16
|
+
import { workersIndexTemplate } from './templates/workers-index.js';
|
|
17
|
+
import { vitestConfigTemplate } from './templates/vitest-config.js';
|
|
18
|
+
import { vitestE2eConfigTemplate } from './templates/vitest-e2e-config.js';
|
|
19
|
+
import { authTestTemplate } from './templates/auth-test.js';
|
|
20
|
+
import { healthE2eTestTemplate } from './templates/health-e2e-test.js';
|
|
21
|
+
import { graphqlSchemaTemplate } from './templates/graphql-schema.js';
|
|
22
|
+
import { graphqlAuthTemplate } from './templates/graphql-auth.js';
|
|
23
|
+
import { graphqlHelpersTemplate } from './templates/graphql-helpers.js';
|
|
24
|
+
import { graphqlEnumsTemplate } from './templates/graphql-enums.js';
|
|
25
|
+
import { graphqlInputsTemplate } from './templates/graphql-inputs.js';
|
|
26
|
+
import { graphqlTypesTemplate } from './templates/graphql-types.js';
|
|
27
|
+
import { graphqlValidationTemplate } from './templates/graphql-validation.js';
|
|
16
28
|
export async function generateProject(targetDir, config) {
|
|
17
29
|
const files = [];
|
|
18
|
-
// Root config files
|
|
30
|
+
// ── Root config files ──────────────────────────────────────────────
|
|
19
31
|
files.push({ path: 'package.json', content: packageJsonTemplate(config) });
|
|
20
32
|
files.push({ path: 'tsconfig.json', content: tsconfigTemplate() });
|
|
21
33
|
files.push({ path: '.gitignore', content: gitignoreTemplate() });
|
|
22
34
|
files.push({ path: '.env.example', content: envExampleTemplate(config) });
|
|
35
|
+
files.push({ path: 'CLAUDE.md', content: claudeMdTemplate(config) });
|
|
23
36
|
if (!config.devMode) {
|
|
24
37
|
files.push({
|
|
25
38
|
path: 'docker-compose.yml',
|
|
26
39
|
content: dockerComposeTemplate(config),
|
|
27
40
|
});
|
|
28
41
|
}
|
|
29
|
-
|
|
30
|
-
// Source files
|
|
42
|
+
// ── Source files ───────────────────────────────────────────────────
|
|
31
43
|
files.push({
|
|
32
44
|
path: 'src/infrastructure.ts',
|
|
33
45
|
content: infrastructureTemplate(config),
|
|
34
46
|
});
|
|
35
47
|
if (config.framework === 'express') {
|
|
36
|
-
files.push({
|
|
37
|
-
path: 'src/main.ts',
|
|
38
|
-
content: mainExpressTemplate(config),
|
|
39
|
-
});
|
|
48
|
+
files.push({ path: 'src/main.ts', content: mainExpressTemplate(config) });
|
|
40
49
|
}
|
|
41
|
-
else {
|
|
42
|
-
files.push({
|
|
43
|
-
path: 'src/main.ts',
|
|
44
|
-
content: mainHonoTemplate(config),
|
|
45
|
-
});
|
|
50
|
+
else if (config.framework === 'fastify') {
|
|
51
|
+
files.push({ path: 'src/main.ts', content: mainFastifyTemplate(config) });
|
|
46
52
|
}
|
|
47
|
-
|
|
48
|
-
files.push({ path: 'src/
|
|
53
|
+
else {
|
|
54
|
+
files.push({ path: 'src/main.ts', content: mainHonoTemplate(config) });
|
|
49
55
|
}
|
|
50
|
-
//
|
|
56
|
+
// ── Entities ───────────────────────────────────────────────────────
|
|
51
57
|
files.push({
|
|
52
|
-
path: '
|
|
53
|
-
content:
|
|
58
|
+
path: 'src/entities/types.ts',
|
|
59
|
+
content: entitiesTypesTemplate(config),
|
|
54
60
|
});
|
|
55
|
-
|
|
61
|
+
files.push({
|
|
62
|
+
path: 'src/entities/repositories.ts',
|
|
63
|
+
content: entitiesRepositoriesTemplate(config),
|
|
64
|
+
});
|
|
65
|
+
// ── Workers ────────────────────────────────────────────────────────
|
|
66
|
+
files.push({
|
|
67
|
+
path: 'src/workers/index.ts',
|
|
68
|
+
content: workersIndexTemplate(config),
|
|
69
|
+
});
|
|
70
|
+
// ── GraphQL ────────────────────────────────────────────────────────
|
|
71
|
+
if (config.graphql) {
|
|
72
|
+
files.push({
|
|
73
|
+
path: 'src/graphql/schema.ts',
|
|
74
|
+
content: graphqlSchemaTemplate(config),
|
|
75
|
+
});
|
|
76
|
+
files.push({
|
|
77
|
+
path: 'src/graphql/auth.ts',
|
|
78
|
+
content: graphqlAuthTemplate(config),
|
|
79
|
+
});
|
|
80
|
+
files.push({
|
|
81
|
+
path: 'src/graphql/helpers.ts',
|
|
82
|
+
content: graphqlHelpersTemplate(),
|
|
83
|
+
});
|
|
84
|
+
files.push({
|
|
85
|
+
path: 'src/graphql/enums.ts',
|
|
86
|
+
content: graphqlEnumsTemplate(),
|
|
87
|
+
});
|
|
88
|
+
files.push({
|
|
89
|
+
path: 'src/graphql/inputs.ts',
|
|
90
|
+
content: graphqlInputsTemplate(),
|
|
91
|
+
});
|
|
92
|
+
files.push({
|
|
93
|
+
path: 'src/graphql/types.ts',
|
|
94
|
+
content: graphqlTypesTemplate(config),
|
|
95
|
+
});
|
|
96
|
+
files.push({
|
|
97
|
+
path: 'src/graphql/validation.ts',
|
|
98
|
+
content: graphqlValidationTemplate(config),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// ── Migrations ─────────────────────────────────────────────────────
|
|
102
|
+
files.push({ path: 'migrations/.gitkeep', content: '' });
|
|
103
|
+
// ── Scripts ────────────────────────────────────────────────────────
|
|
56
104
|
files.push({
|
|
57
105
|
path: 'scripts/migrate.ts',
|
|
58
106
|
content: migrateScriptTemplate(),
|
|
59
107
|
});
|
|
60
|
-
//
|
|
108
|
+
// ── Test configs ───────────────────────────────────────────────────
|
|
61
109
|
if (config.tests) {
|
|
62
110
|
files.push({
|
|
63
|
-
path: '
|
|
64
|
-
content:
|
|
111
|
+
path: 'vitest.config.ts',
|
|
112
|
+
content: vitestConfigTemplate(),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (config.e2e) {
|
|
116
|
+
files.push({
|
|
117
|
+
path: 'vitest.e2e.config.ts',
|
|
118
|
+
content: vitestE2eConfigTemplate(),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// ── Test files ─────────────────────────────────────────────────────
|
|
122
|
+
if (config.tests && config.auth) {
|
|
123
|
+
files.push({
|
|
124
|
+
path: 'tests/unit/auth.test.ts',
|
|
125
|
+
content: authTestTemplate(config),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (config.e2e) {
|
|
129
|
+
files.push({
|
|
130
|
+
path: 'tests/e2e/health.test.ts',
|
|
131
|
+
content: healthE2eTestTemplate(config),
|
|
65
132
|
});
|
|
66
133
|
}
|
|
67
|
-
//
|
|
134
|
+
// ── Write all files ────────────────────────────────────────────────
|
|
68
135
|
const createdFiles = [];
|
|
69
136
|
for (const file of files) {
|
|
70
137
|
const fullPath = join(targetDir, file.path);
|
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,17 +7,18 @@ import { generateProject } from './generator.js';
|
|
|
7
7
|
import { PRESETS, isPresetName } from './presets.js';
|
|
8
8
|
function printHelp() {
|
|
9
9
|
console.log(`
|
|
10
|
-
Usage: create-sandstone [project-name] [options]
|
|
10
|
+
Usage: npx @objectifthunes/create-sandstone [project-name] [options]
|
|
11
11
|
|
|
12
12
|
Options:
|
|
13
13
|
--yes, -y Non-interactive mode (use defaults or preset)
|
|
14
|
-
--template, -t Use a preset template (
|
|
14
|
+
--template, -t Use a preset template (complete, minimal, prototype)
|
|
15
15
|
--help, -h Show this help message
|
|
16
16
|
|
|
17
17
|
Examples:
|
|
18
18
|
npx @objectifthunes/create-sandstone my-backend
|
|
19
|
-
npx @objectifthunes/create-sandstone my-
|
|
20
|
-
npx @objectifthunes/create-sandstone my-
|
|
19
|
+
npx @objectifthunes/create-sandstone my-app --yes --template complete
|
|
20
|
+
npx @objectifthunes/create-sandstone my-app -y -t minimal
|
|
21
|
+
npx @objectifthunes/create-sandstone my-app -y -t prototype
|
|
21
22
|
`);
|
|
22
23
|
}
|
|
23
24
|
function parseArgs(args) {
|
|
@@ -61,7 +62,7 @@ async function main() {
|
|
|
61
62
|
// Non-interactive mode
|
|
62
63
|
if (args.template) {
|
|
63
64
|
if (!isPresetName(args.template)) {
|
|
64
|
-
console.error(` Error: Unknown template "${args.template}". Available:
|
|
65
|
+
console.error(` Error: Unknown template "${args.template}". Available: complete, minimal, prototype`);
|
|
65
66
|
process.exit(1);
|
|
66
67
|
}
|
|
67
68
|
config = { name: projectName, ...PRESETS[args.template] };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAY,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAEzE,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAY,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAEzE,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaX,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAM/B,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACpC,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACvC,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,kBAAkB,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAqB,CAAC;IAE1B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,uBAAuB;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CACX,8BAA8B,IAAI,CAAC,QAAQ,4CAA4C,CACxF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,MAAM,CAAC;QAChB,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,0BAA0B;IAC1B,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,uBAAuB,WAAW,mBAAmB,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,yBAAyB;IACzB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEvD,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/presets.d.ts
CHANGED
|
@@ -1,25 +1,45 @@
|
|
|
1
|
-
export type Framework = 'express' | 'hono';
|
|
2
|
-
export type Database = 'pg';
|
|
1
|
+
export type Framework = 'express' | 'hono' | 'fastify';
|
|
2
|
+
export type Database = 'pg' | 'supabase';
|
|
3
3
|
export type AuthStrategy = 'otp' | 'password+otp' | 'oauth+otp' | 'all' | null;
|
|
4
|
+
export type OAuthProviderChoice = 'google' | 'github' | 'apple' | 'discord';
|
|
4
5
|
export type EmailProvider = 'resend' | 'nodemailer' | null;
|
|
5
6
|
export type PaymentProvider = 'stripe' | 'revenuecat' | 'paddle' | 'lemonsqueezy' | null;
|
|
6
7
|
export type StorageProvider = 's3' | 'r2' | 'local' | null;
|
|
7
|
-
export type CacheProvider = 'upstash' | null;
|
|
8
|
+
export type CacheProvider = 'upstash' | 'redis' | 'memory' | null;
|
|
9
|
+
export type SmsProvider = 'twilio' | 'sns' | null;
|
|
10
|
+
export type PushProvider = 'fcm' | 'apns' | 'both' | null;
|
|
11
|
+
export type RealtimeProvider = 'socketio' | 'pusher' | 'ably' | null;
|
|
12
|
+
export type SearchProvider = 'meilisearch' | 'typesense' | 'pg-search' | null;
|
|
13
|
+
export type QueueProvider = 'bullmq' | 'pg-boss' | null;
|
|
14
|
+
export type FlagProvider = 'pg-flags' | 'env-flags' | 'launchdarkly' | null;
|
|
15
|
+
export type AuthzProvider = 'pg-authz' | 'casbin' | null;
|
|
8
16
|
export interface ProjectConfig {
|
|
9
17
|
name: string;
|
|
10
18
|
framework: Framework;
|
|
11
19
|
database: Database;
|
|
12
20
|
auth: AuthStrategy;
|
|
21
|
+
oauthProviders: OAuthProviderChoice[];
|
|
13
22
|
email: EmailProvider;
|
|
14
23
|
payments: PaymentProvider;
|
|
15
24
|
storage: StorageProvider;
|
|
16
25
|
cache: CacheProvider;
|
|
26
|
+
sms: SmsProvider;
|
|
27
|
+
push: PushProvider;
|
|
28
|
+
realtime: RealtimeProvider;
|
|
29
|
+
search: SearchProvider;
|
|
30
|
+
queue: QueueProvider;
|
|
31
|
+
scheduler: boolean;
|
|
32
|
+
flags: FlagProvider;
|
|
33
|
+
tracing: boolean;
|
|
34
|
+
audit: boolean;
|
|
35
|
+
authz: AuthzProvider;
|
|
17
36
|
graphql: boolean;
|
|
37
|
+
dashboard: boolean;
|
|
18
38
|
tests: boolean;
|
|
19
39
|
e2e: boolean;
|
|
20
40
|
devMode?: boolean;
|
|
21
41
|
}
|
|
22
|
-
export type PresetName = '
|
|
42
|
+
export type PresetName = 'complete' | 'minimal' | 'prototype';
|
|
23
43
|
export declare const PRESETS: Record<PresetName, Omit<ProjectConfig, 'name'>>;
|
|
24
44
|
export declare function isPresetName(value: string): value is PresetName;
|
|
25
45
|
//# sourceMappingURL=presets.d.ts.map
|
package/dist/presets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AACvD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,UAAU,CAAC;AACzC,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,cAAc,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AAC/E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,cAAc,GAAG,IAAI,CAAC;AACzF,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;AAC9E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAE9D,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CA4EnE,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D"}
|
package/dist/presets.js
CHANGED
|
@@ -1,52 +1,75 @@
|
|
|
1
1
|
export const PRESETS = {
|
|
2
|
-
|
|
3
|
-
framework: '
|
|
2
|
+
complete: {
|
|
3
|
+
framework: 'hono',
|
|
4
4
|
database: 'pg',
|
|
5
5
|
auth: 'all',
|
|
6
|
+
oauthProviders: ['github', 'discord'],
|
|
6
7
|
email: 'resend',
|
|
7
8
|
payments: 'stripe',
|
|
8
9
|
storage: 's3',
|
|
9
|
-
cache: '
|
|
10
|
+
cache: 'redis',
|
|
11
|
+
sms: 'sns',
|
|
12
|
+
push: 'fcm',
|
|
13
|
+
realtime: 'pusher',
|
|
14
|
+
search: 'meilisearch',
|
|
15
|
+
queue: 'bullmq',
|
|
16
|
+
scheduler: true,
|
|
17
|
+
flags: 'pg-flags',
|
|
18
|
+
tracing: true,
|
|
19
|
+
audit: true,
|
|
20
|
+
authz: 'pg-authz',
|
|
10
21
|
graphql: true,
|
|
22
|
+
dashboard: true,
|
|
11
23
|
tests: true,
|
|
12
24
|
e2e: true,
|
|
13
25
|
devMode: false,
|
|
14
26
|
},
|
|
15
|
-
|
|
27
|
+
minimal: {
|
|
16
28
|
framework: 'hono',
|
|
17
29
|
database: 'pg',
|
|
18
30
|
auth: 'otp',
|
|
31
|
+
oauthProviders: [],
|
|
19
32
|
email: 'resend',
|
|
20
33
|
payments: null,
|
|
21
34
|
storage: null,
|
|
22
35
|
cache: null,
|
|
36
|
+
sms: null,
|
|
37
|
+
push: null,
|
|
38
|
+
realtime: null,
|
|
39
|
+
search: null,
|
|
40
|
+
queue: null,
|
|
41
|
+
scheduler: false,
|
|
42
|
+
flags: null,
|
|
43
|
+
tracing: false,
|
|
44
|
+
audit: false,
|
|
45
|
+
authz: null,
|
|
23
46
|
graphql: true,
|
|
24
|
-
|
|
25
|
-
e2e: false,
|
|
26
|
-
devMode: false,
|
|
27
|
-
},
|
|
28
|
-
minimal: {
|
|
29
|
-
framework: 'express',
|
|
30
|
-
database: 'pg',
|
|
31
|
-
auth: 'otp',
|
|
32
|
-
email: 'nodemailer',
|
|
33
|
-
payments: null,
|
|
34
|
-
storage: null,
|
|
35
|
-
cache: null,
|
|
36
|
-
graphql: true,
|
|
47
|
+
dashboard: false,
|
|
37
48
|
tests: true,
|
|
38
49
|
e2e: false,
|
|
39
50
|
devMode: false,
|
|
40
51
|
},
|
|
41
52
|
prototype: {
|
|
42
|
-
framework: '
|
|
53
|
+
framework: 'hono',
|
|
43
54
|
database: 'pg',
|
|
44
55
|
auth: 'otp',
|
|
45
|
-
|
|
56
|
+
oauthProviders: [],
|
|
57
|
+
email: 'resend',
|
|
46
58
|
payments: null,
|
|
47
59
|
storage: null,
|
|
48
60
|
cache: null,
|
|
61
|
+
sms: null,
|
|
62
|
+
push: null,
|
|
63
|
+
realtime: null,
|
|
64
|
+
search: null,
|
|
65
|
+
queue: null,
|
|
66
|
+
scheduler: false,
|
|
67
|
+
flags: null,
|
|
68
|
+
tracing: false,
|
|
69
|
+
audit: false,
|
|
70
|
+
authz: null,
|
|
49
71
|
graphql: true,
|
|
72
|
+
dashboard: false,
|
|
50
73
|
tests: true,
|
|
51
74
|
e2e: false,
|
|
52
75
|
devMode: true,
|
package/dist/presets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,OAAO,GAAoD;IACtE,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;QACrC,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,OAAO,EAAE,KAAK;KACf;IACD,OAAO,EAAE;QACP,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,KAAK;QACV,OAAO,EAAE,KAAK;KACf;IACD,SAAS,EAAE;QACT,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,KAAK;QACV,OAAO,EAAE,IAAI;KACd;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,IAAI,OAAO,CAAC;AAC1B,CAAC"}
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAgBd,MAAM,cAAc,CAAC;AAEtB,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+R5E"}
|