create-taserjs 0.0.2 → 0.0.3
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 +2 -0
- package/dist/cjs/addons/arktype/index.cjs.map +1 -1
- package/dist/cjs/addons/drizzle/index.cjs.map +1 -1
- package/dist/cjs/addons/kysely/index.cjs.map +1 -1
- package/dist/cjs/addons/pino/index.cjs.map +1 -1
- package/dist/cjs/addons/prisma/index.cjs +84 -24
- package/dist/cjs/addons/prisma/index.cjs.map +1 -1
- package/dist/cjs/addons/registry.cjs +1 -1
- package/dist/cjs/addons/registry.cjs.map +1 -1
- package/dist/cjs/addons/types.d.cts +1 -1
- package/dist/cjs/addons/valibot/index.cjs.map +1 -1
- package/dist/cjs/addons/validators.cjs.map +1 -1
- package/dist/cjs/addons/winston/index.cjs.map +1 -1
- package/dist/cjs/addons/zod/index.cjs.map +1 -1
- package/dist/cjs/cli.cjs +5 -0
- package/dist/cjs/cli.cjs.map +1 -1
- package/dist/cjs/commands/create.cjs +44 -11
- package/dist/cjs/commands/create.cjs.map +1 -1
- package/dist/cjs/commands/create.d.cts +1 -0
- package/dist/cjs/core/json-output.cjs.map +1 -1
- package/dist/cjs/core/package-manager.cjs.map +1 -1
- package/dist/cjs/core/package-manager.d.cts +1 -1
- package/dist/cjs/core/parse-options.cjs +7 -7
- package/dist/cjs/core/parse-options.cjs.map +1 -1
- package/dist/cjs/core/parse-options.d.cts +3 -3
- package/dist/cjs/core/project-config.cjs +1 -1
- package/dist/cjs/core/project-config.cjs.map +1 -1
- package/dist/cjs/core/resolve-packages.cjs +41 -7
- package/dist/cjs/core/resolve-packages.cjs.map +1 -1
- package/dist/cjs/core/resolve-packages.d.cts +2 -2
- package/dist/cjs/core/scaffold-engine.cjs +33 -6
- package/dist/cjs/core/scaffold-engine.cjs.map +1 -1
- package/dist/cjs/core/types.cjs +11 -3
- package/dist/cjs/core/types.cjs.map +1 -1
- package/dist/cjs/core/types.d.cts +8 -8
- package/dist/cjs/core/validate-project-name.cjs.map +1 -1
- package/dist/cjs/frameworks/index.cjs +138 -17
- package/dist/cjs/frameworks/index.cjs.map +1 -1
- package/dist/cjs/frameworks/index.d.cts +3 -3
- package/dist/cjs/scaffold.d.cts +1 -1
- package/dist/cjs/templates/base.cjs +6 -6
- package/dist/cjs/templates/base.cjs.map +1 -1
- package/dist/cjs/types.d.cts +1 -1
- package/dist/esm/addons/arktype/index.js.map +1 -1
- package/dist/esm/addons/drizzle/index.js.map +1 -1
- package/dist/esm/addons/kysely/index.js.map +1 -1
- package/dist/esm/addons/pino/index.js.map +1 -1
- package/dist/esm/addons/prisma/index.js +84 -24
- package/dist/esm/addons/prisma/index.js.map +1 -1
- package/dist/esm/addons/registry.js +2 -2
- package/dist/esm/addons/registry.js.map +1 -1
- package/dist/esm/addons/types.d.ts +1 -1
- package/dist/esm/addons/valibot/index.js.map +1 -1
- package/dist/esm/addons/validators.js.map +1 -1
- package/dist/esm/addons/winston/index.js.map +1 -1
- package/dist/esm/addons/zod/index.js.map +1 -1
- package/dist/esm/cli.js +5 -0
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/create.d.ts +1 -0
- package/dist/esm/commands/create.js +46 -13
- package/dist/esm/commands/create.js.map +1 -1
- package/dist/esm/core/json-output.js.map +1 -1
- package/dist/esm/core/package-manager.d.ts +1 -1
- package/dist/esm/core/package-manager.js.map +1 -1
- package/dist/esm/core/parse-options.d.ts +3 -3
- package/dist/esm/core/parse-options.js +8 -8
- package/dist/esm/core/parse-options.js.map +1 -1
- package/dist/esm/core/project-config.js +1 -1
- package/dist/esm/core/project-config.js.map +1 -1
- package/dist/esm/core/resolve-packages.d.ts +2 -2
- package/dist/esm/core/resolve-packages.js +41 -7
- package/dist/esm/core/resolve-packages.js.map +1 -1
- package/dist/esm/core/scaffold-engine.js +34 -7
- package/dist/esm/core/scaffold-engine.js.map +1 -1
- package/dist/esm/core/types.d.ts +8 -8
- package/dist/esm/core/types.js +11 -3
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/core/validate-project-name.js.map +1 -1
- package/dist/esm/frameworks/index.d.ts +3 -3
- package/dist/esm/frameworks/index.js +138 -17
- package/dist/esm/frameworks/index.js.map +1 -1
- package/dist/esm/scaffold.d.ts +1 -1
- package/dist/esm/templates/base.js +6 -6
- package/dist/esm/templates/base.js.map +1 -1
- package/dist/esm/types.d.ts +1 -1
- package/package.json +13 -13
- package/src/addons/arktype/index.ts +2 -2
- package/src/addons/drizzle/index.ts +53 -53
- package/src/addons/kysely/index.ts +42 -42
- package/src/addons/pino/index.ts +12 -12
- package/src/addons/prisma/index.ts +128 -55
- package/src/addons/registry.ts +37 -37
- package/src/addons/types.ts +14 -14
- package/src/addons/valibot/index.ts +2 -2
- package/src/addons/validators.ts +9 -9
- package/src/addons/winston/index.ts +12 -12
- package/src/addons/zod/index.ts +2 -2
- package/src/cli.ts +27 -26
- package/src/commands/create.ts +181 -152
- package/src/core/json-output.ts +4 -4
- package/src/core/package-manager.ts +38 -31
- package/src/core/parse-options.ts +50 -48
- package/src/core/project-config.ts +10 -14
- package/src/core/resolve-packages.ts +79 -41
- package/src/core/scaffold-engine.ts +106 -36
- package/src/core/types.ts +61 -36
- package/src/core/validate-project-name.ts +40 -40
- package/src/frameworks/index.ts +164 -29
- package/src/scaffold.ts +3 -3
- package/src/templates/base.ts +57 -51
- package/src/types.ts +5 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_types = require("./types.cjs");
|
|
2
2
|
//#region src/core/parse-options.ts
|
|
3
|
-
function
|
|
4
|
-
return require_types.
|
|
3
|
+
function isProjectType(value) {
|
|
4
|
+
return require_types.PROJECT_TYPES.includes(value);
|
|
5
5
|
}
|
|
6
6
|
function isDbOdm(value) {
|
|
7
7
|
return require_types.DB_ODMS.includes(value);
|
|
@@ -29,7 +29,7 @@ function parseDbFlag(value) {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
function resolveScaffoldDefaults(args) {
|
|
32
|
-
const
|
|
32
|
+
const type = args.type ?? "node";
|
|
33
33
|
const db = args.db;
|
|
34
34
|
const logger = args.logger;
|
|
35
35
|
const validator = args.validator;
|
|
@@ -37,7 +37,7 @@ function resolveScaffoldDefaults(args) {
|
|
|
37
37
|
const result = {
|
|
38
38
|
projectName: args.projectName.trim(),
|
|
39
39
|
targetDir: "",
|
|
40
|
-
|
|
40
|
+
type
|
|
41
41
|
};
|
|
42
42
|
if (db) {
|
|
43
43
|
result.db = db;
|
|
@@ -47,8 +47,8 @@ function resolveScaffoldDefaults(args) {
|
|
|
47
47
|
if (validator) result.validator = validator;
|
|
48
48
|
return result;
|
|
49
49
|
}
|
|
50
|
-
function
|
|
51
|
-
if (!
|
|
50
|
+
function parseTypeFlag(value) {
|
|
51
|
+
if (!isProjectType(value)) throw new Error(`Invalid --type "${value}". Use ${require_types.PROJECT_TYPES.join(", ")}.`);
|
|
52
52
|
return value;
|
|
53
53
|
}
|
|
54
54
|
function parseLoggerFlag(value) {
|
|
@@ -61,8 +61,8 @@ function parseValidatorFlag(value) {
|
|
|
61
61
|
}
|
|
62
62
|
//#endregion
|
|
63
63
|
exports.parseDbFlag = parseDbFlag;
|
|
64
|
-
exports.parseFrameworkFlag = parseFrameworkFlag;
|
|
65
64
|
exports.parseLoggerFlag = parseLoggerFlag;
|
|
65
|
+
exports.parseTypeFlag = parseTypeFlag;
|
|
66
66
|
exports.parseValidatorFlag = parseValidatorFlag;
|
|
67
67
|
exports.resolveScaffoldDefaults = resolveScaffoldDefaults;
|
|
68
68
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-options.cjs","names":[],"sources":["../../../src/core/parse-options.ts"],"sourcesContent":["import {\n DB_DRIVERS,\n DB_ODMS,\n DEFAULT_DB_DRIVER,\n
|
|
1
|
+
{"version":3,"file":"parse-options.cjs","names":[],"sources":["../../../src/core/parse-options.ts"],"sourcesContent":["import {\n DB_DRIVERS,\n DB_ODMS,\n DEFAULT_DB_DRIVER,\n LOGGERS,\n PROJECT_TYPES,\n VALIDATORS,\n type DbDriver,\n type DbOdm,\n type LoggerId,\n type ProjectType,\n type ScaffoldContext,\n type ValidatorId,\n} from \"./types.js\";\n\nexport type ParsedCreateArgs = {\n projectName?: string;\n type?: ProjectType;\n db?: DbOdm;\n driver?: DbDriver;\n logger?: LoggerId;\n validator?: ValidatorId;\n yes: boolean;\n noInstall: boolean;\n json: boolean;\n};\n\nfunction isProjectType(value: string): value is ProjectType {\n return (PROJECT_TYPES as readonly string[]).includes(value);\n}\n\nfunction isDbOdm(value: string): value is DbOdm {\n return (DB_ODMS as readonly string[]).includes(value);\n}\n\nfunction isDbDriver(value: string): value is DbDriver {\n return (DB_DRIVERS as readonly string[]).includes(value);\n}\n\nfunction isLoggerId(value: string): value is LoggerId {\n return (LOGGERS as readonly string[]).includes(value);\n}\n\nfunction isValidatorId(value: string): value is ValidatorId {\n return (VALIDATORS as readonly string[]).includes(value);\n}\n\nexport function parseDbFlag(value: string): { db: DbOdm; driver: DbDriver } {\n const [odm, driver] = value.split(\":\");\n if (!odm || !isDbOdm(odm)) {\n throw new Error(\n `Invalid --db value \"${value}\". Use drizzle, prisma, or kysely (optionally with :postgres, :sqlite, or :mysql).`,\n );\n }\n\n if (driver === undefined || driver === \"\") {\n return { db: odm, driver: DEFAULT_DB_DRIVER };\n }\n\n if (!isDbDriver(driver)) {\n throw new Error(`Invalid database driver \"${driver}\". Use postgres, sqlite, or mysql.`);\n }\n\n return { db: odm, driver };\n}\n\nexport function resolveScaffoldDefaults(args: ParsedCreateArgs): ScaffoldContext {\n const type = args.type ?? \"node\";\n const db = args.db;\n const logger = args.logger;\n const validator = args.validator;\n\n if (!args.projectName) {\n throw new Error(\"Project name is required\");\n }\n\n const result: ScaffoldContext = {\n projectName: args.projectName.trim(),\n targetDir: \"\",\n type,\n };\n\n if (db) {\n result.db = db;\n result.driver = args.driver ?? DEFAULT_DB_DRIVER;\n }\n\n if (logger) {\n result.logger = logger;\n }\n\n if (validator) {\n result.validator = validator;\n }\n\n return result;\n}\n\nexport function parseTypeFlag(value: string): ProjectType {\n if (!isProjectType(value)) {\n throw new Error(`Invalid --type \"${value}\". Use ${PROJECT_TYPES.join(\", \")}.`);\n }\n return value;\n}\n\nexport function parseLoggerFlag(value: string): LoggerId {\n if (!isLoggerId(value)) {\n throw new Error(`Invalid --logger \"${value}\". Use pino or winston.`);\n }\n return value;\n}\n\nexport function parseValidatorFlag(value: string): ValidatorId {\n if (!isValidatorId(value)) {\n throw new Error(`Invalid --validator \"${value}\". Use zod, arktype, or valibot.`);\n }\n return value;\n}\n"],"mappings":";;AA2BA,SAAS,cAAc,OAAqC;CAC1D,OAAQ,cAAA,cAAoC,SAAS,KAAK;AAC5D;AAEA,SAAS,QAAQ,OAA+B;CAC9C,OAAQ,cAAA,QAA8B,SAAS,KAAK;AACtD;AAEA,SAAS,WAAW,OAAkC;CACpD,OAAQ,cAAA,WAAiC,SAAS,KAAK;AACzD;AAEA,SAAS,WAAW,OAAkC;CACpD,OAAQ,cAAA,QAA8B,SAAS,KAAK;AACtD;AAEA,SAAS,cAAc,OAAqC;CAC1D,OAAQ,cAAA,WAAiC,SAAS,KAAK;AACzD;AAEA,SAAgB,YAAY,OAAgD;CAC1E,MAAM,CAAC,KAAK,UAAU,MAAM,MAAM,GAAG;CACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GACtB,MAAM,IAAI,MACR,uBAAuB,MAAM,mFAC/B;CAGF,IAAI,WAAW,KAAA,KAAa,WAAW,IACrC,OAAO;EAAE,IAAI;EAAK,QAAQ,cAAA;CAAkB;CAG9C,IAAI,CAAC,WAAW,MAAM,GACpB,MAAM,IAAI,MAAM,4BAA4B,OAAO,mCAAmC;CAGxF,OAAO;EAAE,IAAI;EAAK;CAAO;AAC3B;AAEA,SAAgB,wBAAwB,MAAyC;CAC/E,MAAM,OAAO,KAAK,QAAQ;CAC1B,MAAM,KAAK,KAAK;CAChB,MAAM,SAAS,KAAK;CACpB,MAAM,YAAY,KAAK;CAEvB,IAAI,CAAC,KAAK,aACR,MAAM,IAAI,MAAM,0BAA0B;CAG5C,MAAM,SAA0B;EAC9B,aAAa,KAAK,YAAY,KAAK;EACnC,WAAW;EACX;CACF;CAEA,IAAI,IAAI;EACN,OAAO,KAAK;EACZ,OAAO,SAAS,KAAK,UAAA;CACvB;CAEA,IAAI,QACF,OAAO,SAAS;CAGlB,IAAI,WACF,OAAO,YAAY;CAGrB,OAAO;AACT;AAEA,SAAgB,cAAc,OAA4B;CACxD,IAAI,CAAC,cAAc,KAAK,GACtB,MAAM,IAAI,MAAM,mBAAmB,MAAM,SAAS,cAAA,cAAc,KAAK,IAAI,EAAE,EAAE;CAE/E,OAAO;AACT;AAEA,SAAgB,gBAAgB,OAAyB;CACvD,IAAI,CAAC,WAAW,KAAK,GACnB,MAAM,IAAI,MAAM,qBAAqB,MAAM,wBAAwB;CAErE,OAAO;AACT;AAEA,SAAgB,mBAAmB,OAA4B;CAC7D,IAAI,CAAC,cAAc,KAAK,GACtB,MAAM,IAAI,MAAM,wBAAwB,MAAM,iCAAiC;CAEjF,OAAO;AACT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DbDriver, DbOdm,
|
|
1
|
+
import { DbDriver, DbOdm, LoggerId, ProjectType, ScaffoldContext, ValidatorId } from './types.js';
|
|
2
2
|
export type ParsedCreateArgs = {
|
|
3
3
|
projectName?: string;
|
|
4
|
-
|
|
4
|
+
type?: ProjectType;
|
|
5
5
|
db?: DbOdm;
|
|
6
6
|
driver?: DbDriver;
|
|
7
7
|
logger?: LoggerId;
|
|
@@ -15,6 +15,6 @@ export declare function parseDbFlag(value: string): {
|
|
|
15
15
|
driver: DbDriver;
|
|
16
16
|
};
|
|
17
17
|
export declare function resolveScaffoldDefaults(args: ParsedCreateArgs): ScaffoldContext;
|
|
18
|
-
export declare function
|
|
18
|
+
export declare function parseTypeFlag(value: string): ProjectType;
|
|
19
19
|
export declare function parseLoggerFlag(value: string): LoggerId;
|
|
20
20
|
export declare function parseValidatorFlag(value: string): ValidatorId;
|
|
@@ -4,7 +4,7 @@ node_path = require_runtime.__toESM(node_path, 1);
|
|
|
4
4
|
let node_fs_promises = require("node:fs/promises");
|
|
5
5
|
//#region src/core/project-config.ts
|
|
6
6
|
async function writeProjectConfig(root, ctx) {
|
|
7
|
-
const config = {
|
|
7
|
+
const config = { type: ctx.type };
|
|
8
8
|
if (ctx.db) {
|
|
9
9
|
config.db = ctx.db;
|
|
10
10
|
if (ctx.driver) config.driver = ctx.driver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.cjs","names":[],"sources":["../../../src/core/project-config.ts"],"sourcesContent":["import { writeFile } from
|
|
1
|
+
{"version":3,"file":"project-config.cjs","names":[],"sources":["../../../src/core/project-config.ts"],"sourcesContent":["import { writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { ScaffoldContext } from \"./types.js\";\n\nexport async function writeProjectConfig(root: string, ctx: ScaffoldContext): Promise<void> {\n const config: Record<string, string> = {\n type: ctx.type,\n };\n\n if (ctx.db) {\n config.db = ctx.db;\n if (ctx.driver) {\n config.driver = ctx.driver;\n }\n }\n\n if (ctx.logger) {\n config.logger = ctx.logger;\n }\n\n if (ctx.validator) {\n config.validator = ctx.validator;\n }\n\n await writeFile(path.join(root, \".taser.json\"), `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n}\n"],"mappings":";;;;;AAKA,eAAsB,mBAAmB,MAAc,KAAqC;CAC1F,MAAM,SAAiC,EACrC,MAAM,IAAI,KACZ;CAEA,IAAI,IAAI,IAAI;EACV,OAAO,KAAK,IAAI;EAChB,IAAI,IAAI,QACN,OAAO,SAAS,IAAI;CAExB;CAEA,IAAI,IAAI,QACN,OAAO,SAAS,IAAI;CAGtB,IAAI,IAAI,WACN,OAAO,YAAY,IAAI;CAGzB,OAAA,GAAM,iBAAA,UAAA,CAAU,UAAA,QAAK,KAAK,MAAM,aAAa,GAAG,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,KAAK,MAAM;AAChG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_registry = require("../addons/registry.cjs");
|
|
2
2
|
//#region src/core/resolve-packages.ts
|
|
3
|
-
function
|
|
4
|
-
const dependencies = ["@taserjs/router"];
|
|
3
|
+
function typePackages(type) {
|
|
4
|
+
const dependencies = ["@taserjs/router", "dotenv"];
|
|
5
5
|
const devDependencies = [
|
|
6
6
|
"@taserjs/router-cli",
|
|
7
7
|
"npm-run-all2",
|
|
@@ -11,18 +11,52 @@ function frameworkPackages(framework) {
|
|
|
11
11
|
"@types/node"
|
|
12
12
|
];
|
|
13
13
|
const scripts = {};
|
|
14
|
-
switch (
|
|
14
|
+
switch (type) {
|
|
15
15
|
case "express":
|
|
16
16
|
dependencies.push("@taserjs/adapter-express", "express");
|
|
17
17
|
devDependencies.push("@types/express");
|
|
18
18
|
break;
|
|
19
|
+
case "fastify":
|
|
20
|
+
dependencies.push("@taserjs/adapter-fastify", "fastify");
|
|
21
|
+
break;
|
|
19
22
|
case "hono":
|
|
20
23
|
dependencies.push("@hono/node-server", "hono");
|
|
21
24
|
break;
|
|
22
|
-
case "
|
|
23
|
-
|
|
25
|
+
case "bun":
|
|
26
|
+
devDependencies.push("@types/bun");
|
|
27
|
+
scripts["dev:server"] = "bun --watch src/index.ts";
|
|
28
|
+
scripts.start = "bun src/index.ts";
|
|
29
|
+
scripts.serve = "bun dist/index.mjs";
|
|
30
|
+
break;
|
|
31
|
+
case "deno":
|
|
32
|
+
scripts["dev:server"] = "deno run --watch --allow-net --allow-env --allow-read src/index.ts";
|
|
33
|
+
scripts.start = "deno run --allow-net --allow-env --allow-read src/index.ts";
|
|
34
|
+
scripts.serve = "deno run --allow-net --allow-env --allow-read dist/index.mjs";
|
|
35
|
+
break;
|
|
36
|
+
case "aws-lambda":
|
|
37
|
+
dependencies.push("hono");
|
|
38
|
+
devDependencies.push("@types/aws-lambda");
|
|
39
|
+
break;
|
|
40
|
+
case "cloudflare-workers": {
|
|
41
|
+
const cfDevDeps = devDependencies.filter((d) => d !== "tsx");
|
|
42
|
+
cfDevDeps.push("wrangler", "@cloudflare/workers-types");
|
|
43
|
+
devDependencies.length = 0;
|
|
44
|
+
devDependencies.push(...cfDevDeps);
|
|
45
|
+
scripts["dev:server"] = "wrangler dev";
|
|
46
|
+
scripts.deploy = "wrangler deploy";
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case "netlify":
|
|
50
|
+
dependencies.push("hono", "@netlify/functions");
|
|
51
|
+
break;
|
|
52
|
+
case "vercel":
|
|
53
|
+
dependencies.push("hono");
|
|
54
|
+
devDependencies.push("@vercel/node");
|
|
55
|
+
break;
|
|
56
|
+
case "azure-functions":
|
|
57
|
+
dependencies.push("hono", "@azure/functions", "@marplex/hono-azurefunc-adapter");
|
|
24
58
|
break;
|
|
25
|
-
default: dependencies.push("@
|
|
59
|
+
default: dependencies.push("@hono/node-server");
|
|
26
60
|
}
|
|
27
61
|
return {
|
|
28
62
|
dependencies,
|
|
@@ -31,7 +65,7 @@ function frameworkPackages(framework) {
|
|
|
31
65
|
};
|
|
32
66
|
}
|
|
33
67
|
function resolvePackages(ctx) {
|
|
34
|
-
const base =
|
|
68
|
+
const base = typePackages(ctx.type);
|
|
35
69
|
const addons = require_registry.resolveAddons(ctx);
|
|
36
70
|
const dependencies = [...base.dependencies];
|
|
37
71
|
const devDependencies = [...base.devDependencies];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-packages.cjs","names":[],"sources":["../../../src/core/resolve-packages.ts"],"sourcesContent":["import { resolveAddons } from
|
|
1
|
+
{"version":3,"file":"resolve-packages.cjs","names":[],"sources":["../../../src/core/resolve-packages.ts"],"sourcesContent":["import { resolveAddons } from \"../addons/registry.js\";\nimport type { PackageGroups, ProjectType, ScaffoldContext } from \"../core/types.js\";\n\nfunction typePackages(type: ProjectType): PackageGroups {\n const dependencies = [\"@taserjs/router\", \"dotenv\"];\n const devDependencies = [\n \"@taserjs/router-cli\",\n \"npm-run-all2\",\n \"tsdown\",\n \"tsx\",\n \"typescript\",\n \"@types/node\",\n ];\n const scripts: Record<string, string> = {};\n\n switch (type) {\n case \"express\":\n dependencies.push(\"@taserjs/adapter-express\", \"express\");\n devDependencies.push(\"@types/express\");\n break;\n case \"fastify\":\n dependencies.push(\"@taserjs/adapter-fastify\", \"fastify\");\n break;\n case \"hono\":\n dependencies.push(\"@hono/node-server\", \"hono\");\n break;\n case \"bun\":\n // Bun has native TypeScript and runtime execution\n devDependencies.push(\"@types/bun\");\n scripts[\"dev:server\"] = \"bun --watch src/index.ts\";\n scripts.start = \"bun src/index.ts\";\n scripts.serve = \"bun dist/index.mjs\";\n break;\n case \"deno\":\n scripts[\"dev:server\"] = \"deno run --watch --allow-net --allow-env --allow-read src/index.ts\";\n scripts.start = \"deno run --allow-net --allow-env --allow-read src/index.ts\";\n scripts.serve = \"deno run --allow-net --allow-env --allow-read dist/index.mjs\";\n break;\n case \"aws-lambda\":\n dependencies.push(\"hono\");\n devDependencies.push(\"@types/aws-lambda\");\n break;\n case \"cloudflare-workers\": {\n // Cloudflare workers uses wrangler\n const cfDevDeps = devDependencies.filter((d) => d !== \"tsx\");\n cfDevDeps.push(\"wrangler\", \"@cloudflare/workers-types\");\n devDependencies.length = 0;\n devDependencies.push(...cfDevDeps);\n scripts[\"dev:server\"] = \"wrangler dev\";\n scripts.deploy = \"wrangler deploy\";\n break;\n }\n case \"netlify\":\n dependencies.push(\"hono\", \"@netlify/functions\");\n break;\n case \"vercel\":\n dependencies.push(\"hono\");\n devDependencies.push(\"@vercel/node\");\n break;\n case \"azure-functions\":\n dependencies.push(\"hono\", \"@azure/functions\", \"@marplex/hono-azurefunc-adapter\");\n break;\n case \"google-cloud-run\":\n case \"node\":\n default:\n dependencies.push(\"@hono/node-server\");\n break;\n }\n\n return { dependencies, devDependencies, scripts };\n}\n\nexport function resolvePackages(ctx: ScaffoldContext): PackageGroups {\n const base = typePackages(ctx.type);\n const addons = resolveAddons(ctx);\n\n const dependencies = [...base.dependencies];\n const devDependencies = [...base.devDependencies];\n const scripts = { ...base.scripts };\n\n for (const addon of addons) {\n dependencies.push(...addon.dependencies(ctx));\n devDependencies.push(...addon.devDependencies(ctx));\n if (addon.scripts) {\n Object.assign(scripts, addon.scripts(ctx));\n }\n }\n\n return {\n dependencies: [...new Set(dependencies)],\n devDependencies: [...new Set(devDependencies)],\n scripts,\n };\n}\n\nexport function getPackageGroups(\n type: ProjectType,\n): Omit<PackageGroups, \"scripts\"> & { scripts?: Record<string, string> } {\n const groups = typePackages(type);\n return groups;\n}\n"],"mappings":";;AAGA,SAAS,aAAa,MAAkC;CACtD,MAAM,eAAe,CAAC,mBAAmB,QAAQ;CACjD,MAAM,kBAAkB;EACtB;EACA;EACA;EACA;EACA;EACA;CACF;CACA,MAAM,UAAkC,CAAC;CAEzC,QAAQ,MAAR;EACE,KAAK;GACH,aAAa,KAAK,4BAA4B,SAAS;GACvD,gBAAgB,KAAK,gBAAgB;GACrC;EACF,KAAK;GACH,aAAa,KAAK,4BAA4B,SAAS;GACvD;EACF,KAAK;GACH,aAAa,KAAK,qBAAqB,MAAM;GAC7C;EACF,KAAK;GAEH,gBAAgB,KAAK,YAAY;GACjC,QAAQ,gBAAgB;GACxB,QAAQ,QAAQ;GAChB,QAAQ,QAAQ;GAChB;EACF,KAAK;GACH,QAAQ,gBAAgB;GACxB,QAAQ,QAAQ;GAChB,QAAQ,QAAQ;GAChB;EACF,KAAK;GACH,aAAa,KAAK,MAAM;GACxB,gBAAgB,KAAK,mBAAmB;GACxC;EACF,KAAK,sBAAsB;GAEzB,MAAM,YAAY,gBAAgB,QAAQ,MAAM,MAAM,KAAK;GAC3D,UAAU,KAAK,YAAY,2BAA2B;GACtD,gBAAgB,SAAS;GACzB,gBAAgB,KAAK,GAAG,SAAS;GACjC,QAAQ,gBAAgB;GACxB,QAAQ,SAAS;GACjB;EACF;EACA,KAAK;GACH,aAAa,KAAK,QAAQ,oBAAoB;GAC9C;EACF,KAAK;GACH,aAAa,KAAK,MAAM;GACxB,gBAAgB,KAAK,cAAc;GACnC;EACF,KAAK;GACH,aAAa,KAAK,QAAQ,oBAAoB,iCAAiC;GAC/E;EAGF,SACE,aAAa,KAAK,mBAAmB;CAEzC;CAEA,OAAO;EAAE;EAAc;EAAiB;CAAQ;AAClD;AAEA,SAAgB,gBAAgB,KAAqC;CACnE,MAAM,OAAO,aAAa,IAAI,IAAI;CAClC,MAAM,SAAS,iBAAA,cAAc,GAAG;CAEhC,MAAM,eAAe,CAAC,GAAG,KAAK,YAAY;CAC1C,MAAM,kBAAkB,CAAC,GAAG,KAAK,eAAe;CAChD,MAAM,UAAU,EAAE,GAAG,KAAK,QAAQ;CAElC,KAAK,MAAM,SAAS,QAAQ;EAC1B,aAAa,KAAK,GAAG,MAAM,aAAa,GAAG,CAAC;EAC5C,gBAAgB,KAAK,GAAG,MAAM,gBAAgB,GAAG,CAAC;EAClD,IAAI,MAAM,SACR,OAAO,OAAO,SAAS,MAAM,QAAQ,GAAG,CAAC;CAE7C;CAEA,OAAO;EACL,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC;EACvC,iBAAiB,CAAC,GAAG,IAAI,IAAI,eAAe,CAAC;EAC7C;CACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PackageGroups,
|
|
1
|
+
import { PackageGroups, ProjectType, ScaffoldContext } from '../core/types.js';
|
|
2
2
|
export declare function resolvePackages(ctx: ScaffoldContext): PackageGroups;
|
|
3
|
-
export declare function getPackageGroups(
|
|
3
|
+
export declare function getPackageGroups(type: ProjectType): Omit<PackageGroups, "scripts"> & {
|
|
4
4
|
scripts?: Record<string, string>;
|
|
5
5
|
};
|
|
@@ -18,7 +18,7 @@ async function scaffoldProject(options) {
|
|
|
18
18
|
const ctx = {
|
|
19
19
|
projectName: options.projectName,
|
|
20
20
|
targetDir: root,
|
|
21
|
-
|
|
21
|
+
type: options.type,
|
|
22
22
|
...options.db ? {
|
|
23
23
|
db: options.db,
|
|
24
24
|
driver: options.driver
|
|
@@ -34,18 +34,45 @@ async function scaffoldProject(options) {
|
|
|
34
34
|
await write(node_path.default.join(root, "tsdown.config.ts"), require_base.tsdownConfigTemplate());
|
|
35
35
|
await write(node_path.default.join(root, ".gitignore"), require_base.gitignoreTemplate());
|
|
36
36
|
await write(node_path.default.join(root, "src/context.ts"), require_base.contextTemplate(bootBindings));
|
|
37
|
-
await write(node_path.default.join(root, "src/taser.ts"), require_index.taserTsTemplate(options.
|
|
38
|
-
await write(node_path.default.join(root, "src/index.ts"), require_index.indexTemplate(options.
|
|
37
|
+
await write(node_path.default.join(root, "src/taser.ts"), require_index.taserTsTemplate(options.type));
|
|
38
|
+
await write(node_path.default.join(root, "src/index.ts"), require_index.indexTemplate(options.type));
|
|
39
39
|
await write(node_path.default.join(root, "src/routes/$.ts"), require_base.rootLayoutTemplate());
|
|
40
40
|
await write(node_path.default.join(root, "src/routes/index.get.ts"), require_base.indexRouteTemplate());
|
|
41
41
|
await write(node_path.default.join(root, "src/routes/health.get.ts"), require_base.healthRouteTemplate(ctx));
|
|
42
42
|
await write(node_path.default.join(root, "src/routeManifest.gen.ts"), require_base.starterManifestTemplate());
|
|
43
|
-
|
|
43
|
+
if (options.type === "cloudflare-workers") await write(node_path.default.join(root, "wrangler.jsonc"), JSON.stringify({
|
|
44
|
+
$schema: "node_modules/wrangler/config-schema.json",
|
|
45
|
+
name: options.projectName,
|
|
46
|
+
main: "src/index.ts",
|
|
47
|
+
compatibility_date: "2024-11-01"
|
|
48
|
+
}, null, 2) + "\n");
|
|
49
|
+
if (options.type === "vercel") await write(node_path.default.join(root, "vercel.json"), JSON.stringify({ rewrites: [{
|
|
50
|
+
source: "/(.*)",
|
|
51
|
+
destination: "/src/index.ts"
|
|
52
|
+
}] }, null, 2) + "\n");
|
|
53
|
+
if (options.type === "azure-functions") await write(node_path.default.join(root, "host.json"), JSON.stringify({
|
|
54
|
+
version: "2.0",
|
|
55
|
+
logging: { applicationInsights: { samplingSettings: {
|
|
56
|
+
isEnabled: true,
|
|
57
|
+
excludedTypes: "Request"
|
|
58
|
+
} } },
|
|
59
|
+
extensionBundle: {
|
|
60
|
+
id: "Microsoft.Azure.Functions.ExtensionBundle",
|
|
61
|
+
version: "[4.*, 5.0.0)"
|
|
62
|
+
},
|
|
63
|
+
extensions: { http: { routePrefix: "" } }
|
|
64
|
+
}, null, 2) + "\n");
|
|
65
|
+
await Promise.all(addons.map(async (addon) => {
|
|
66
|
+
await addon.apply(ctx, (filePath, contents) => write(node_path.default.join(root, filePath), contents));
|
|
67
|
+
}));
|
|
68
|
+
try {
|
|
69
|
+
await (0, node_fs_promises.copyFile)(node_path.default.join(root, ".env.example"), node_path.default.join(root, ".env"));
|
|
70
|
+
} catch {}
|
|
44
71
|
await require_project_config.writeProjectConfig(root, ctx);
|
|
45
72
|
if (options.skipInstall) return {
|
|
46
73
|
projectName: ctx.projectName,
|
|
47
74
|
targetDir: root,
|
|
48
|
-
|
|
75
|
+
type: ctx.type,
|
|
49
76
|
...ctx.db ? {
|
|
50
77
|
db: ctx.db,
|
|
51
78
|
driver: ctx.driver
|
|
@@ -61,7 +88,7 @@ async function scaffoldProject(options) {
|
|
|
61
88
|
return {
|
|
62
89
|
projectName: ctx.projectName,
|
|
63
90
|
targetDir: root,
|
|
64
|
-
|
|
91
|
+
type: ctx.type,
|
|
65
92
|
...ctx.db ? {
|
|
66
93
|
db: ctx.db,
|
|
67
94
|
driver: ctx.driver
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-engine.cjs","names":[],"sources":["../../../src/core/scaffold-engine.ts"],"sourcesContent":["import { mkdir, writeFile } from
|
|
1
|
+
{"version":3,"file":"scaffold-engine.cjs","names":[],"sources":["../../../src/core/scaffold-engine.ts"],"sourcesContent":["import { copyFile, mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { collectBootBindings, resolveAddons } from \"../addons/registry.js\";\nimport { indexTemplate, taserTsTemplate } from \"../frameworks/index.js\";\nimport { installPackages, resolveUserAgent } from \"./package-manager.js\";\nimport { writeProjectConfig } from \"./project-config.js\";\nimport { resolvePackages } from \"./resolve-packages.js\";\nimport type { ScaffoldOptions, ScaffoldResult } from \"./types.js\";\nimport {\n contextTemplate,\n gitignoreTemplate,\n healthRouteTemplate,\n indexRouteTemplate,\n packageJsonTemplate,\n rootLayoutTemplate,\n starterManifestTemplate,\n tsconfigTemplate,\n tsdownConfigTemplate,\n} from \"../templates/base.js\";\n\nasync function write(filePath: string, contents: string): Promise<void> {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, contents, \"utf8\");\n}\n\nexport async function scaffoldProject(options: ScaffoldOptions): Promise<ScaffoldResult> {\n const root = options.targetDir;\n const ctx = {\n projectName: options.projectName,\n targetDir: root,\n type: options.type,\n ...(options.db ? { db: options.db, driver: options.driver } : {}),\n ...(options.logger ? { logger: options.logger } : {}),\n ...(options.validator ? { validator: options.validator } : {}),\n };\n\n const addons = resolveAddons(ctx);\n const packages = resolvePackages(ctx);\n const bootBindings = collectBootBindings(ctx);\n\n await write(\n path.join(root, \"package.json\"),\n packageJsonTemplate(options.projectName, packages.scripts),\n );\n await write(path.join(root, \"tsconfig.json\"), tsconfigTemplate());\n await write(path.join(root, \"tsdown.config.ts\"), tsdownConfigTemplate());\n await write(path.join(root, \".gitignore\"), gitignoreTemplate());\n await write(path.join(root, \"src/context.ts\"), contextTemplate(bootBindings));\n await write(path.join(root, \"src/taser.ts\"), taserTsTemplate(options.type));\n await write(path.join(root, \"src/index.ts\"), indexTemplate(options.type));\n await write(path.join(root, \"src/routes/$.ts\"), rootLayoutTemplate());\n await write(path.join(root, \"src/routes/index.get.ts\"), indexRouteTemplate());\n await write(path.join(root, \"src/routes/health.get.ts\"), healthRouteTemplate(ctx));\n await write(path.join(root, \"src/routeManifest.gen.ts\"), starterManifestTemplate());\n\n if (options.type === \"cloudflare-workers\") {\n await write(\n path.join(root, \"wrangler.jsonc\"),\n JSON.stringify(\n {\n $schema: \"node_modules/wrangler/config-schema.json\",\n name: options.projectName,\n main: \"src/index.ts\",\n compatibility_date: \"2024-11-01\",\n },\n null,\n 2,\n ) + \"\\n\",\n );\n }\n\n if (options.type === \"vercel\") {\n await write(\n path.join(root, \"vercel.json\"),\n JSON.stringify(\n {\n rewrites: [{ source: \"/(.*)\", destination: \"/src/index.ts\" }],\n },\n null,\n 2,\n ) + \"\\n\",\n );\n }\n\n if (options.type === \"azure-functions\") {\n await write(\n path.join(root, \"host.json\"),\n JSON.stringify(\n {\n version: \"2.0\",\n logging: {\n applicationInsights: {\n samplingSettings: {\n isEnabled: true,\n excludedTypes: \"Request\",\n },\n },\n },\n extensionBundle: {\n id: \"Microsoft.Azure.Functions.ExtensionBundle\",\n version: \"[4.*, 5.0.0)\",\n },\n extensions: {\n http: {\n routePrefix: \"\",\n },\n },\n },\n null,\n 2,\n ) + \"\\n\",\n );\n }\n\n await Promise.all(\n addons.map(async (addon) => {\n await addon.apply(ctx, (filePath, contents) => write(path.join(root, filePath), contents));\n }),\n );\n\n try {\n await copyFile(path.join(root, \".env.example\"), path.join(root, \".env\"));\n } catch {\n // .env.example was not created\n }\n\n await writeProjectConfig(root, ctx);\n\n if (options.skipInstall) {\n return {\n projectName: ctx.projectName,\n targetDir: root,\n type: ctx.type,\n ...(ctx.db ? { db: ctx.db, driver: ctx.driver } : {}),\n ...(ctx.logger ? { logger: ctx.logger } : {}),\n ...(ctx.validator ? { validator: ctx.validator } : {}),\n };\n }\n\n const agent = options.agent ?? resolveUserAgent();\n await installPackages(agent, root, {\n dependencies: packages.dependencies,\n devDependencies: packages.devDependencies,\n });\n\n return {\n projectName: ctx.projectName,\n targetDir: root,\n type: ctx.type,\n ...(ctx.db ? { db: ctx.db, driver: ctx.driver } : {}),\n ...(ctx.logger ? { logger: ctx.logger } : {}),\n ...(ctx.validator ? { validator: ctx.validator } : {}),\n };\n}\n"],"mappings":";;;;;;;;;;;AAqBA,eAAe,MAAM,UAAkB,UAAiC;CACtE,OAAA,GAAM,iBAAA,MAAA,CAAM,UAAA,QAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;CACvD,OAAA,GAAM,iBAAA,UAAA,CAAU,UAAU,UAAU,MAAM;AAC5C;AAEA,eAAsB,gBAAgB,SAAmD;CACvF,MAAM,OAAO,QAAQ;CACrB,MAAM,MAAM;EACV,aAAa,QAAQ;EACrB,WAAW;EACX,MAAM,QAAQ;EACd,GAAI,QAAQ,KAAK;GAAE,IAAI,QAAQ;GAAI,QAAQ,QAAQ;EAAO,IAAI,CAAC;EAC/D,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;EACnD,GAAI,QAAQ,YAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;CAC9D;CAEA,MAAM,SAAS,iBAAA,cAAc,GAAG;CAChC,MAAM,WAAW,yBAAA,gBAAgB,GAAG;CACpC,MAAM,eAAe,iBAAA,oBAAoB,GAAG;CAE5C,MAAM,MACJ,UAAA,QAAK,KAAK,MAAM,cAAc,GAC9B,aAAA,oBAAoB,QAAQ,aAAa,SAAS,OAAO,CAC3D;CACA,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,eAAe,GAAG,aAAA,iBAAiB,CAAC;CAChE,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,kBAAkB,GAAG,aAAA,qBAAqB,CAAC;CACvE,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,YAAY,GAAG,aAAA,kBAAkB,CAAC;CAC9D,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,gBAAgB,GAAG,aAAA,gBAAgB,YAAY,CAAC;CAC5E,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,cAAc,GAAG,cAAA,gBAAgB,QAAQ,IAAI,CAAC;CAC1E,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,cAAc,GAAG,cAAA,cAAc,QAAQ,IAAI,CAAC;CACxE,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,iBAAiB,GAAG,aAAA,mBAAmB,CAAC;CACpE,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,yBAAyB,GAAG,aAAA,mBAAmB,CAAC;CAC5E,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,0BAA0B,GAAG,aAAA,oBAAoB,GAAG,CAAC;CACjF,MAAM,MAAM,UAAA,QAAK,KAAK,MAAM,0BAA0B,GAAG,aAAA,wBAAwB,CAAC;CAElF,IAAI,QAAQ,SAAS,sBACnB,MAAM,MACJ,UAAA,QAAK,KAAK,MAAM,gBAAgB,GAChC,KAAK,UACH;EACE,SAAS;EACT,MAAM,QAAQ;EACd,MAAM;EACN,oBAAoB;CACtB,GACA,MACA,CACF,IAAI,IACN;CAGF,IAAI,QAAQ,SAAS,UACnB,MAAM,MACJ,UAAA,QAAK,KAAK,MAAM,aAAa,GAC7B,KAAK,UACH,EACE,UAAU,CAAC;EAAE,QAAQ;EAAS,aAAa;CAAgB,CAAC,EAC9D,GACA,MACA,CACF,IAAI,IACN;CAGF,IAAI,QAAQ,SAAS,mBACnB,MAAM,MACJ,UAAA,QAAK,KAAK,MAAM,WAAW,GAC3B,KAAK,UACH;EACE,SAAS;EACT,SAAS,EACP,qBAAqB,EACnB,kBAAkB;GAChB,WAAW;GACX,eAAe;EACjB,EACF,EACF;EACA,iBAAiB;GACf,IAAI;GACJ,SAAS;EACX;EACA,YAAY,EACV,MAAM,EACJ,aAAa,GACf,EACF;CACF,GACA,MACA,CACF,IAAI,IACN;CAGF,MAAM,QAAQ,IACZ,OAAO,IAAI,OAAO,UAAU;EAC1B,MAAM,MAAM,MAAM,MAAM,UAAU,aAAa,MAAM,UAAA,QAAK,KAAK,MAAM,QAAQ,GAAG,QAAQ,CAAC;CAC3F,CAAC,CACH;CAEA,IAAI;EACF,OAAA,GAAM,iBAAA,SAAA,CAAS,UAAA,QAAK,KAAK,MAAM,cAAc,GAAG,UAAA,QAAK,KAAK,MAAM,MAAM,CAAC;CACzE,QAAQ,CAER;CAEA,MAAM,uBAAA,mBAAmB,MAAM,GAAG;CAElC,IAAI,QAAQ,aACV,OAAO;EACL,aAAa,IAAI;EACjB,WAAW;EACX,MAAM,IAAI;EACV,GAAI,IAAI,KAAK;GAAE,IAAI,IAAI;GAAI,QAAQ,IAAI;EAAO,IAAI,CAAC;EACnD,GAAI,IAAI,SAAS,EAAE,QAAQ,IAAI,OAAO,IAAI,CAAC;EAC3C,GAAI,IAAI,YAAY,EAAE,WAAW,IAAI,UAAU,IAAI,CAAC;CACtD;CAGF,MAAM,QAAQ,QAAQ,SAAS,wBAAA,iBAAiB;CAChD,MAAM,wBAAA,gBAAgB,OAAO,MAAM;EACjC,cAAc,SAAS;EACvB,iBAAiB,SAAS;CAC5B,CAAC;CAED,OAAO;EACL,aAAa,IAAI;EACjB,WAAW;EACX,MAAM,IAAI;EACV,GAAI,IAAI,KAAK;GAAE,IAAI,IAAI;GAAI,QAAQ,IAAI;EAAO,IAAI,CAAC;EACnD,GAAI,IAAI,SAAS,EAAE,QAAQ,IAAI,OAAO,IAAI,CAAC;EAC3C,GAAI,IAAI,YAAY,EAAE,WAAW,IAAI,UAAU,IAAI,CAAC;CACtD;AACF"}
|
package/dist/cjs/core/types.cjs
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
//#region src/core/types.ts
|
|
2
|
-
var
|
|
2
|
+
var PROJECT_TYPES = [
|
|
3
3
|
"node",
|
|
4
4
|
"express",
|
|
5
|
+
"fastify",
|
|
5
6
|
"hono",
|
|
6
|
-
"
|
|
7
|
+
"bun",
|
|
8
|
+
"deno",
|
|
9
|
+
"aws-lambda",
|
|
10
|
+
"cloudflare-workers",
|
|
11
|
+
"netlify",
|
|
12
|
+
"vercel",
|
|
13
|
+
"azure-functions",
|
|
14
|
+
"google-cloud-run"
|
|
7
15
|
];
|
|
8
16
|
var DB_ODMS = [
|
|
9
17
|
"drizzle",
|
|
@@ -26,8 +34,8 @@ var VALIDATORS = [
|
|
|
26
34
|
exports.DB_DRIVERS = DB_DRIVERS;
|
|
27
35
|
exports.DB_ODMS = DB_ODMS;
|
|
28
36
|
exports.DEFAULT_DB_DRIVER = DEFAULT_DB_DRIVER;
|
|
29
|
-
exports.FRAMEWORKS = FRAMEWORKS;
|
|
30
37
|
exports.LOGGERS = LOGGERS;
|
|
38
|
+
exports.PROJECT_TYPES = PROJECT_TYPES;
|
|
31
39
|
exports.VALIDATORS = VALIDATORS;
|
|
32
40
|
|
|
33
41
|
//# sourceMappingURL=types.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","names":[],"sources":["../../../src/core/types.ts"],"sourcesContent":["import type { Agent } from
|
|
1
|
+
{"version":3,"file":"types.cjs","names":[],"sources":["../../../src/core/types.ts"],"sourcesContent":["import type { Agent } from \"package-manager-detector\";\n\nexport type ProjectType =\n | \"node\"\n | \"express\"\n | \"fastify\"\n | \"hono\"\n | \"bun\"\n | \"deno\"\n | \"aws-lambda\"\n | \"cloudflare-workers\"\n | \"netlify\"\n | \"vercel\"\n | \"azure-functions\"\n | \"google-cloud-run\";\n\nexport const PROJECT_TYPES: readonly ProjectType[] = [\n \"node\",\n \"express\",\n \"fastify\",\n \"hono\",\n \"bun\",\n \"deno\",\n \"aws-lambda\",\n \"cloudflare-workers\",\n \"netlify\",\n \"vercel\",\n \"azure-functions\",\n \"google-cloud-run\",\n];\n\nexport type DbOdm = \"drizzle\" | \"prisma\" | \"kysely\";\n\nexport const DB_ODMS: readonly DbOdm[] = [\"drizzle\", \"prisma\", \"kysely\"];\n\nexport type DbDriver = \"postgres\" | \"sqlite\" | \"mysql\";\n\nexport const DB_DRIVERS: readonly DbDriver[] = [\"postgres\", \"sqlite\", \"mysql\"];\n\nexport const DEFAULT_DB_DRIVER: DbDriver = \"sqlite\";\n\nexport type LoggerId = \"pino\" | \"winston\";\n\nexport const LOGGERS: readonly LoggerId[] = [\"pino\", \"winston\"];\n\nexport type ValidatorId = \"zod\" | \"arktype\" | \"valibot\";\n\nexport const VALIDATORS: readonly ValidatorId[] = [\"zod\", \"arktype\", \"valibot\"];\n\nexport type PackageGroups = {\n dependencies: string[];\n devDependencies: string[];\n scripts: Record<string, string>;\n};\n\nexport type ScaffoldContext = {\n projectName: string;\n targetDir: string;\n type: ProjectType;\n db?: DbOdm;\n driver?: DbDriver;\n logger?: LoggerId;\n validator?: ValidatorId;\n};\n\nexport type ScaffoldOptions = ScaffoldContext & {\n skipInstall?: boolean;\n agent?: Agent;\n};\n\nexport type ScaffoldResult = ScaffoldContext;\n\nexport type CapabilitiesCatalog = {\n types: ProjectType[];\n db: {\n odms: DbOdm[];\n drivers: DbDriver[];\n defaultDriver: DbDriver;\n };\n loggers: LoggerId[];\n validators: ValidatorId[];\n};\n"],"mappings":";AAgBA,IAAa,gBAAwC;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAIA,IAAa,UAA4B;CAAC;CAAW;CAAU;AAAQ;AAIvE,IAAa,aAAkC;CAAC;CAAY;CAAU;AAAO;AAE7E,IAAa,oBAA8B;AAI3C,IAAa,UAA+B,CAAC,QAAQ,SAAS;AAI9D,IAAa,aAAqC;CAAC;CAAO;CAAW;AAAS"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Agent } from 'package-manager-detector';
|
|
2
|
-
export type
|
|
3
|
-
export declare const
|
|
4
|
-
export type DbOdm =
|
|
2
|
+
export type ProjectType = "node" | "express" | "fastify" | "hono" | "bun" | "deno" | "aws-lambda" | "cloudflare-workers" | "netlify" | "vercel" | "azure-functions" | "google-cloud-run";
|
|
3
|
+
export declare const PROJECT_TYPES: readonly ProjectType[];
|
|
4
|
+
export type DbOdm = "drizzle" | "prisma" | "kysely";
|
|
5
5
|
export declare const DB_ODMS: readonly DbOdm[];
|
|
6
|
-
export type DbDriver =
|
|
6
|
+
export type DbDriver = "postgres" | "sqlite" | "mysql";
|
|
7
7
|
export declare const DB_DRIVERS: readonly DbDriver[];
|
|
8
8
|
export declare const DEFAULT_DB_DRIVER: DbDriver;
|
|
9
|
-
export type LoggerId =
|
|
9
|
+
export type LoggerId = "pino" | "winston";
|
|
10
10
|
export declare const LOGGERS: readonly LoggerId[];
|
|
11
|
-
export type ValidatorId =
|
|
11
|
+
export type ValidatorId = "zod" | "arktype" | "valibot";
|
|
12
12
|
export declare const VALIDATORS: readonly ValidatorId[];
|
|
13
13
|
export type PackageGroups = {
|
|
14
14
|
dependencies: string[];
|
|
@@ -18,7 +18,7 @@ export type PackageGroups = {
|
|
|
18
18
|
export type ScaffoldContext = {
|
|
19
19
|
projectName: string;
|
|
20
20
|
targetDir: string;
|
|
21
|
-
|
|
21
|
+
type: ProjectType;
|
|
22
22
|
db?: DbOdm;
|
|
23
23
|
driver?: DbDriver;
|
|
24
24
|
logger?: LoggerId;
|
|
@@ -30,7 +30,7 @@ export type ScaffoldOptions = ScaffoldContext & {
|
|
|
30
30
|
};
|
|
31
31
|
export type ScaffoldResult = ScaffoldContext;
|
|
32
32
|
export type CapabilitiesCatalog = {
|
|
33
|
-
|
|
33
|
+
types: ProjectType[];
|
|
34
34
|
db: {
|
|
35
35
|
odms: DbOdm[];
|
|
36
36
|
drivers: DbDriver[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-project-name.cjs","names":[],"sources":["../../../src/core/validate-project-name.ts"],"sourcesContent":["import path from
|
|
1
|
+
{"version":3,"file":"validate-project-name.cjs","names":[],"sources":["../../../src/core/validate-project-name.ts"],"sourcesContent":["import path from \"node:path\";\n\nconst RESERVED_WINDOWS_NAMES = new Set([\n \"CON\",\n \"PRN\",\n \"AUX\",\n \"NVR\",\n \"NULL\",\n \"COM1\",\n \"COM2\",\n \"COM3\",\n \"COM4\",\n \"COM5\",\n \"COM6\",\n \"COM7\",\n \"COM8\",\n \"COM9\",\n \"LPT1\",\n \"LPT2\",\n \"LPT3\",\n \"LPT4\",\n \"LPT5\",\n \"LPT6\",\n \"LPT7\",\n \"LPT8\",\n \"LPT9\",\n]);\n\nexport function validateProjectName(name: string, cwd = process.cwd()): string | undefined {\n const trimmed = name.trim();\n if (!trimmed) {\n return \"Project name is required\";\n }\n\n if (trimmed.includes(\"..\")) {\n return 'Project name cannot contain \"..\"';\n }\n\n if (trimmed.includes(\"/\") || trimmed.includes(\"\\\\\")) {\n return \"Project name cannot contain path separators\";\n }\n\n if (trimmed.startsWith(\".\") || trimmed.endsWith(\".\")) {\n return \"Project name cannot start or end with a dot\";\n }\n\n const baseName = trimmed.split(\".\")[0]?.toUpperCase();\n if (baseName && RESERVED_WINDOWS_NAMES.has(baseName)) {\n return `Project name \"${trimmed}\" is reserved on Windows`;\n }\n\n const targetDir = path.resolve(cwd, trimmed);\n const relative = path.relative(cwd, targetDir);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n return \"Project name resolves outside the current directory\";\n }\n\n return undefined;\n}\n"],"mappings":";;;;AAEA,IAAM,yCAAyB,IAAI,IAAI;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAgB,oBAAoB,MAAc,MAAM,QAAQ,IAAI,GAAuB;CACzF,MAAM,UAAU,KAAK,KAAK;CAC1B,IAAI,CAAC,SACH,OAAO;CAGT,IAAI,QAAQ,SAAS,IAAI,GACvB,OAAO;CAGT,IAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,IAAI,GAChD,OAAO;CAGT,IAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GACjD,OAAO;CAGT,MAAM,WAAW,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,YAAY;CACpD,IAAI,YAAY,uBAAuB,IAAI,QAAQ,GACjD,OAAO,iBAAiB,QAAQ;CAGlC,MAAM,YAAY,UAAA,QAAK,QAAQ,KAAK,OAAO;CAC3C,MAAM,WAAW,UAAA,QAAK,SAAS,KAAK,SAAS;CAC7C,IAAI,SAAS,WAAW,IAAI,KAAK,UAAA,QAAK,WAAW,QAAQ,GACvD,OAAO;AAIX"}
|