@korajs/cli 0.1.14 → 0.2.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/README.md +49 -0
- package/dist/bin.cjs +2517 -332
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +12 -10
- package/dist/bin.js.map +1 -1
- package/dist/chunk-E4JG7THU.js +1550 -0
- package/dist/chunk-E4JG7THU.js.map +1 -0
- package/dist/chunk-KTSRAPSE.js +752 -0
- package/dist/chunk-KTSRAPSE.js.map +1 -0
- package/dist/chunk-ZGYRDYXS.js +609 -0
- package/dist/chunk-ZGYRDYXS.js.map +1 -0
- package/dist/create.cjs +974 -159
- package/dist/create.cjs.map +1 -1
- package/dist/create.js +2 -2
- package/dist/index.cjs +2103 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +617 -1
- package/dist/index.d.ts +617 -1
- package/dist/index.js +91 -5
- package/package.json +19 -13
- package/dist/chunk-N36PFOSA.js +0 -103
- package/dist/chunk-N36PFOSA.js.map +0 -1
- package/dist/chunk-SYOFLJLB.js +0 -437
- package/dist/chunk-SYOFLJLB.js.map +0 -1
- package/dist/chunk-VGOOQ56H.js +0 -103
- package/dist/chunk-VGOOQ56H.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,26 +1,112 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
DEPLOY_PLATFORMS,
|
|
4
|
+
FlyAdapter,
|
|
5
|
+
NodeFlyCommandRunner,
|
|
6
|
+
NodeRailwayCommandRunner,
|
|
7
|
+
RailwayAdapter,
|
|
8
|
+
StubDeployAdapter,
|
|
9
|
+
buildClient,
|
|
10
|
+
bundleServer,
|
|
11
|
+
createDeployAdapter,
|
|
12
|
+
deployCommand,
|
|
13
|
+
generateDeployPackageJson,
|
|
14
|
+
generateDockerIgnore,
|
|
15
|
+
generateDockerfile,
|
|
16
|
+
generateFlyToml,
|
|
17
|
+
generateRailwayJson,
|
|
18
|
+
generateTypes,
|
|
19
|
+
isDeployPlatform,
|
|
20
|
+
readDeployState,
|
|
21
|
+
resetDeployState,
|
|
22
|
+
resolveDeployDirectory,
|
|
23
|
+
resolveDeployStatePath,
|
|
24
|
+
updateDeployState,
|
|
25
|
+
writeDeployState,
|
|
26
|
+
writeDockerIgnoreArtifact,
|
|
27
|
+
writeDockerfileArtifact,
|
|
28
|
+
writeFlyTomlArtifact,
|
|
29
|
+
writeRailwayJsonArtifact
|
|
30
|
+
} from "./chunk-E4JG7THU.js";
|
|
5
31
|
import {
|
|
32
|
+
ClackPromptClient,
|
|
6
33
|
CliError,
|
|
7
34
|
DevServerError,
|
|
8
35
|
InvalidProjectError,
|
|
9
36
|
PACKAGE_MANAGERS,
|
|
37
|
+
PreferenceStore,
|
|
10
38
|
ProjectExistsError,
|
|
39
|
+
PromptCancelledError,
|
|
40
|
+
ReadlinePromptClient,
|
|
11
41
|
SchemaNotFoundError,
|
|
12
42
|
TEMPLATES,
|
|
13
|
-
TEMPLATE_INFO
|
|
14
|
-
|
|
43
|
+
TEMPLATE_INFO,
|
|
44
|
+
applySyncProviderPreset,
|
|
45
|
+
createPromptClient,
|
|
46
|
+
determineTemplateFromSelections,
|
|
47
|
+
getCreatePreferencesOrDefault,
|
|
48
|
+
getDefaultCreatePreferences,
|
|
49
|
+
isAuthValue,
|
|
50
|
+
isDatabaseProviderValue,
|
|
51
|
+
isDatabaseValue,
|
|
52
|
+
isFrameworkValue,
|
|
53
|
+
resolveCreatePreferencesFlow,
|
|
54
|
+
saveResolvedPreferences,
|
|
55
|
+
shouldSavePreferences,
|
|
56
|
+
validateProjectName
|
|
57
|
+
} from "./chunk-KTSRAPSE.js";
|
|
15
58
|
export {
|
|
59
|
+
ClackPromptClient,
|
|
16
60
|
CliError,
|
|
61
|
+
DEPLOY_PLATFORMS,
|
|
17
62
|
DevServerError,
|
|
63
|
+
FlyAdapter,
|
|
18
64
|
InvalidProjectError,
|
|
65
|
+
NodeFlyCommandRunner,
|
|
66
|
+
NodeRailwayCommandRunner,
|
|
19
67
|
PACKAGE_MANAGERS,
|
|
68
|
+
PreferenceStore,
|
|
20
69
|
ProjectExistsError,
|
|
70
|
+
PromptCancelledError,
|
|
71
|
+
RailwayAdapter,
|
|
72
|
+
ReadlinePromptClient,
|
|
21
73
|
SchemaNotFoundError,
|
|
74
|
+
StubDeployAdapter,
|
|
22
75
|
TEMPLATES,
|
|
23
76
|
TEMPLATE_INFO,
|
|
24
|
-
|
|
77
|
+
applySyncProviderPreset,
|
|
78
|
+
buildClient,
|
|
79
|
+
bundleServer,
|
|
80
|
+
createDeployAdapter,
|
|
81
|
+
createPromptClient,
|
|
82
|
+
deployCommand,
|
|
83
|
+
determineTemplateFromSelections,
|
|
84
|
+
generateDeployPackageJson,
|
|
85
|
+
generateDockerIgnore,
|
|
86
|
+
generateDockerfile,
|
|
87
|
+
generateFlyToml,
|
|
88
|
+
generateRailwayJson,
|
|
89
|
+
generateTypes,
|
|
90
|
+
getCreatePreferencesOrDefault,
|
|
91
|
+
getDefaultCreatePreferences,
|
|
92
|
+
isAuthValue,
|
|
93
|
+
isDatabaseProviderValue,
|
|
94
|
+
isDatabaseValue,
|
|
95
|
+
isDeployPlatform,
|
|
96
|
+
isFrameworkValue,
|
|
97
|
+
readDeployState,
|
|
98
|
+
resetDeployState,
|
|
99
|
+
resolveCreatePreferencesFlow,
|
|
100
|
+
resolveDeployDirectory,
|
|
101
|
+
resolveDeployStatePath,
|
|
102
|
+
saveResolvedPreferences,
|
|
103
|
+
shouldSavePreferences,
|
|
104
|
+
updateDeployState,
|
|
105
|
+
validateProjectName,
|
|
106
|
+
writeDeployState,
|
|
107
|
+
writeDockerIgnoreArtifact,
|
|
108
|
+
writeDockerfileArtifact,
|
|
109
|
+
writeFlyTomlArtifact,
|
|
110
|
+
writeRailwayJsonArtifact
|
|
25
111
|
};
|
|
26
112
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@korajs/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Kora.js CLI tooling and project scaffolding",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -30,6 +30,22 @@
|
|
|
30
30
|
"dist",
|
|
31
31
|
"templates"
|
|
32
32
|
],
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@clack/prompts": "^1.2.0",
|
|
35
|
+
"citty": "^0.1.6",
|
|
36
|
+
"conf": "^15.1.0",
|
|
37
|
+
"esbuild": "^0.28.0",
|
|
38
|
+
"validate-npm-package-name": "^7.0.2",
|
|
39
|
+
"@korajs/core": "0.1.3"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^25.5.2",
|
|
43
|
+
"@types/validate-npm-package-name": "^4.0.2",
|
|
44
|
+
"tsup": "^8.3.6",
|
|
45
|
+
"typescript": "^5.7.3",
|
|
46
|
+
"vitest": "^3.0.4"
|
|
47
|
+
},
|
|
48
|
+
"license": "MIT",
|
|
33
49
|
"scripts": {
|
|
34
50
|
"build": "tsup",
|
|
35
51
|
"dev": "tsup --watch",
|
|
@@ -38,15 +54,5 @@
|
|
|
38
54
|
"typecheck": "tsc --noEmit",
|
|
39
55
|
"lint": "biome check src/ tests/",
|
|
40
56
|
"clean": "rm -rf dist .turbo coverage"
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
"@korajs/core": "workspace:*",
|
|
44
|
-
"citty": "^0.1.6"
|
|
45
|
-
},
|
|
46
|
-
"devDependencies": {
|
|
47
|
-
"typescript": "^5.7.3",
|
|
48
|
-
"tsup": "^8.3.6",
|
|
49
|
-
"vitest": "^3.0.4"
|
|
50
|
-
},
|
|
51
|
-
"license": "MIT"
|
|
52
|
-
}
|
|
57
|
+
}
|
|
58
|
+
}
|
package/dist/chunk-N36PFOSA.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// src/commands/generate/type-generator.ts
|
|
4
|
-
function generateTypes(schema) {
|
|
5
|
-
const lines = [
|
|
6
|
-
"// Auto-generated by @korajs/cli \u2014 do not edit manually",
|
|
7
|
-
`// Generated from schema version ${String(schema.version)}`,
|
|
8
|
-
""
|
|
9
|
-
];
|
|
10
|
-
const collectionNames = Object.keys(schema.collections);
|
|
11
|
-
if (collectionNames.length === 0) {
|
|
12
|
-
return lines.join("\n");
|
|
13
|
-
}
|
|
14
|
-
for (const [name, collection] of Object.entries(schema.collections)) {
|
|
15
|
-
const pascal = toPascalCase(name);
|
|
16
|
-
const fields = collection.fields;
|
|
17
|
-
lines.push(`export interface ${pascal}Record {`);
|
|
18
|
-
lines.push(" readonly id: string");
|
|
19
|
-
for (const [fieldName, descriptor] of Object.entries(fields)) {
|
|
20
|
-
const tsType = fieldKindToTypeScript(descriptor);
|
|
21
|
-
const optional = !descriptor.required && !descriptor.auto ? "?" : "";
|
|
22
|
-
lines.push(` readonly ${fieldName}${optional}: ${tsType}`);
|
|
23
|
-
}
|
|
24
|
-
lines.push("}");
|
|
25
|
-
lines.push("");
|
|
26
|
-
lines.push(`export interface ${pascal}InsertInput {`);
|
|
27
|
-
for (const [fieldName, descriptor] of Object.entries(fields)) {
|
|
28
|
-
if (descriptor.auto) continue;
|
|
29
|
-
const tsType = fieldKindToTypeScript(descriptor);
|
|
30
|
-
const optional = !descriptor.required || descriptor.defaultValue !== void 0 ? "?" : "";
|
|
31
|
-
lines.push(` ${fieldName}${optional}: ${tsType}`);
|
|
32
|
-
}
|
|
33
|
-
lines.push("}");
|
|
34
|
-
lines.push("");
|
|
35
|
-
lines.push(`export interface ${pascal}UpdateInput {`);
|
|
36
|
-
for (const [fieldName, descriptor] of Object.entries(fields)) {
|
|
37
|
-
if (descriptor.auto) continue;
|
|
38
|
-
const tsType = fieldKindToTypeScript(descriptor);
|
|
39
|
-
lines.push(` ${fieldName}?: ${tsType}`);
|
|
40
|
-
}
|
|
41
|
-
lines.push("}");
|
|
42
|
-
lines.push("");
|
|
43
|
-
}
|
|
44
|
-
return lines.join("\n");
|
|
45
|
-
}
|
|
46
|
-
function fieldKindToTypeScript(descriptor) {
|
|
47
|
-
switch (descriptor.kind) {
|
|
48
|
-
case "string":
|
|
49
|
-
return "string";
|
|
50
|
-
case "number":
|
|
51
|
-
return "number";
|
|
52
|
-
case "boolean":
|
|
53
|
-
return "boolean";
|
|
54
|
-
case "timestamp":
|
|
55
|
-
return "number";
|
|
56
|
-
case "richtext":
|
|
57
|
-
return "string";
|
|
58
|
-
case "enum": {
|
|
59
|
-
if (descriptor.enumValues && descriptor.enumValues.length > 0) {
|
|
60
|
-
return descriptor.enumValues.map((v) => `'${v}'`).join(" | ");
|
|
61
|
-
}
|
|
62
|
-
return "string";
|
|
63
|
-
}
|
|
64
|
-
case "array": {
|
|
65
|
-
const itemType = itemKindToTypeScript(descriptor.itemKind);
|
|
66
|
-
return `Array<${itemType}>`;
|
|
67
|
-
}
|
|
68
|
-
default:
|
|
69
|
-
return "unknown";
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function itemKindToTypeScript(kind) {
|
|
73
|
-
switch (kind) {
|
|
74
|
-
case "string":
|
|
75
|
-
return "string";
|
|
76
|
-
case "number":
|
|
77
|
-
return "number";
|
|
78
|
-
case "boolean":
|
|
79
|
-
return "boolean";
|
|
80
|
-
case "timestamp":
|
|
81
|
-
return "number";
|
|
82
|
-
case "richtext":
|
|
83
|
-
return "string";
|
|
84
|
-
case "enum":
|
|
85
|
-
return "string";
|
|
86
|
-
case "array":
|
|
87
|
-
return "unknown[]";
|
|
88
|
-
default:
|
|
89
|
-
return "unknown";
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function toPascalCase(name) {
|
|
93
|
-
return name.split(/[_-]/).map((part) => {
|
|
94
|
-
if (part.length === 0) return "";
|
|
95
|
-
const first = part[0];
|
|
96
|
-
return first ? first.toUpperCase() + part.slice(1) : "";
|
|
97
|
-
}).join("");
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export {
|
|
101
|
-
generateTypes
|
|
102
|
-
};
|
|
103
|
-
//# sourceMappingURL=chunk-N36PFOSA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/generate/type-generator.ts"],"sourcesContent":["import type { FieldDescriptor, FieldKind, SchemaDefinition } from '@korajs/core'\n\n/**\n * Generates TypeScript interfaces from a SchemaDefinition.\n * For each collection, produces three interfaces:\n * - {Name}Record: full record type (all fields + id)\n * - {Name}InsertInput: insert input (omit auto fields, optional for fields with defaults)\n * - {Name}UpdateInput: update input (all non-auto fields optional)\n *\n * @param schema - A validated SchemaDefinition from defineSchema()\n * @returns A complete TypeScript file as a string\n */\nexport function generateTypes(schema: SchemaDefinition): string {\n\tconst lines: string[] = [\n\t\t'// Auto-generated by @korajs/cli — do not edit manually',\n\t\t`// Generated from schema version ${String(schema.version)}`,\n\t\t'',\n\t]\n\n\tconst collectionNames = Object.keys(schema.collections)\n\tif (collectionNames.length === 0) {\n\t\treturn lines.join('\\n')\n\t}\n\n\tfor (const [name, collection] of Object.entries(schema.collections)) {\n\t\tconst pascal = toPascalCase(name)\n\t\tconst fields = collection.fields\n\n\t\t// Record type: all fields + id\n\t\tlines.push(`export interface ${pascal}Record {`)\n\t\tlines.push('\\treadonly id: string')\n\t\tfor (const [fieldName, descriptor] of Object.entries(fields)) {\n\t\t\tconst tsType = fieldKindToTypeScript(descriptor)\n\t\t\tconst optional = !descriptor.required && !descriptor.auto ? '?' : ''\n\t\t\tlines.push(`\\treadonly ${fieldName}${optional}: ${tsType}`)\n\t\t}\n\t\tlines.push('}')\n\t\tlines.push('')\n\n\t\t// Insert input: omit auto fields, optional for fields with defaults\n\t\tlines.push(`export interface ${pascal}InsertInput {`)\n\t\tfor (const [fieldName, descriptor] of Object.entries(fields)) {\n\t\t\tif (descriptor.auto) continue\n\t\t\tconst tsType = fieldKindToTypeScript(descriptor)\n\t\t\tconst optional = !descriptor.required || descriptor.defaultValue !== undefined ? '?' : ''\n\t\t\tlines.push(`\\t${fieldName}${optional}: ${tsType}`)\n\t\t}\n\t\tlines.push('}')\n\t\tlines.push('')\n\n\t\t// Update input: all non-auto fields optional\n\t\tlines.push(`export interface ${pascal}UpdateInput {`)\n\t\tfor (const [fieldName, descriptor] of Object.entries(fields)) {\n\t\t\tif (descriptor.auto) continue\n\t\t\tconst tsType = fieldKindToTypeScript(descriptor)\n\t\t\tlines.push(`\\t${fieldName}?: ${tsType}`)\n\t\t}\n\t\tlines.push('}')\n\t\tlines.push('')\n\t}\n\n\treturn lines.join('\\n')\n}\n\n/** Maps a FieldDescriptor to its TypeScript type string */\nfunction fieldKindToTypeScript(descriptor: FieldDescriptor): string {\n\tswitch (descriptor.kind) {\n\t\tcase 'string':\n\t\t\treturn 'string'\n\t\tcase 'number':\n\t\t\treturn 'number'\n\t\tcase 'boolean':\n\t\t\treturn 'boolean'\n\t\tcase 'timestamp':\n\t\t\treturn 'number'\n\t\tcase 'richtext':\n\t\t\treturn 'string'\n\t\tcase 'enum': {\n\t\t\tif (descriptor.enumValues && descriptor.enumValues.length > 0) {\n\t\t\t\treturn descriptor.enumValues.map((v) => `'${v}'`).join(' | ')\n\t\t\t}\n\t\t\treturn 'string'\n\t\t}\n\t\tcase 'array': {\n\t\t\tconst itemType = itemKindToTypeScript(descriptor.itemKind)\n\t\t\treturn `Array<${itemType}>`\n\t\t}\n\t\tdefault:\n\t\t\treturn 'unknown'\n\t}\n}\n\n/** Maps an item FieldKind to its TypeScript type string */\nfunction itemKindToTypeScript(kind: FieldKind | null): string {\n\tswitch (kind) {\n\t\tcase 'string':\n\t\t\treturn 'string'\n\t\tcase 'number':\n\t\t\treturn 'number'\n\t\tcase 'boolean':\n\t\t\treturn 'boolean'\n\t\tcase 'timestamp':\n\t\t\treturn 'number'\n\t\tcase 'richtext':\n\t\t\treturn 'string'\n\t\tcase 'enum':\n\t\t\treturn 'string'\n\t\tcase 'array':\n\t\t\treturn 'unknown[]'\n\t\tdefault:\n\t\t\treturn 'unknown'\n\t}\n}\n\n/** Converts a snake_case or kebab-case name to PascalCase */\nfunction toPascalCase(name: string): string {\n\treturn name\n\t\t.split(/[_-]/)\n\t\t.map((part) => {\n\t\t\tif (part.length === 0) return ''\n\t\t\tconst first = part[0]\n\t\t\treturn first ? first.toUpperCase() + part.slice(1) : ''\n\t\t})\n\t\t.join('')\n}\n"],"mappings":"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","names":[]}
|