@fragno-dev/create 0.0.4 → 0.1.1
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/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +13 -2
- package/src/integration.test.ts +17 -8
- package/src/package-json.ts +28 -1
- package/src/utils.ts +6 -2
- package/templates/fragment/package.template.json +1 -15
- package/templates/fragment/src/index.ts +2 -2
- package/templates/optional/agent/AGENTS.md +120 -1
- package/templates/optional/database/index.ts +141 -0
- package/templates/optional/database/schema.ts +15 -0
- package/.turbo/turbo-test.log +0 -66
- package/.turbo/turbo-types$colon$check.log +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -4,9 +4,9 @@ $ tsdown
|
|
|
4
4
|
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
5
5
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
6
6
|
[34mℹ[39m Build start
|
|
7
|
-
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 5.
|
|
8
|
-
[34mℹ[39m [2mdist/[22mindex.js.map [
|
|
7
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 5.95 kB[22m [2m│ gzip: 1.91 kB[22m
|
|
8
|
+
[34mℹ[39m [2mdist/[22mindex.js.map [2m11.69 kB[22m [2m│ gzip: 3.44 kB[22m
|
|
9
9
|
[34mℹ[39m [2mdist/[22mindex.d.ts.map [2m 0.58 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
10
|
-
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m 1.
|
|
11
|
-
[34mℹ[39m 4 files, total:
|
|
12
|
-
[32m✔[39m Build complete in [
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m 1.28 kB[22m [2m│ gzip: 0.48 kB[22m
|
|
11
|
+
[34mℹ[39m 4 files, total: 19.50 kB
|
|
12
|
+
[32m✔[39m Build complete in [32m3193ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @fragno-dev/create
|
|
2
2
|
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1032f44: Use new defaults API in schema
|
|
8
|
+
|
|
9
|
+
## 0.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 4cd4081: Support optionally initializing a Fragment template with data layer
|
|
14
|
+
|
|
3
15
|
## 0.0.4
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ declare const createOptionsSchema: z.ZodObject<{
|
|
|
37
37
|
"AGENTS.md": "AGENTS.md";
|
|
38
38
|
"CLAUDE.md": "CLAUDE.md";
|
|
39
39
|
}>;
|
|
40
|
+
withDatabase: z.ZodBoolean;
|
|
40
41
|
}, z.core.$strip>;
|
|
41
42
|
type CreateOptions = z.infer<typeof createOptionsSchema>;
|
|
42
43
|
declare function create(options: CreateOptions): void;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;cAOM,qBAAmB,CAAA,CAAA;KACb,aAAA,GAAgB,CAAA,CAAE,aAAa;AAHnB,cAKlB,gBAH2C,EAG3B,CAAA,CAAA,OAHG,CAAA;EACb,OAAA,EAAA,SAAa;EAEnB,MAAA,EAAA,QAAA;EASM,IAAA,EAAA,MAAA;EAEN,MAAA,EAAA,QAAA;EACM,OAAA,EAAA,SAAS;EAER,MAAA,EAAA,QAAA;;;KALD,UAAA,GAAa,CAAA,CAAE,aAAa;cAElC,iBAAe,CAAA,CAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;cAOM,qBAAmB,CAAA,CAAA;KACb,aAAA,GAAgB,CAAA,CAAE,aAAa;AAHnB,cAKlB,gBAH2C,EAG3B,CAAA,CAAA,OAHG,CAAA;EACb,OAAA,EAAA,SAAa;EAEnB,MAAA,EAAA,QAAA;EASM,IAAA,EAAA,MAAA;EAEN,MAAA,EAAA,QAAA;EACM,OAAA,EAAA,SAAS;EAER,MAAA,EAAA,QAAA;;;KALD,UAAA,GAAa,CAAA,CAAE,aAAa;cAElC,iBAAe,CAAA,CAAA;;;;CAGW,CAAA;AAAA,KAFpB,SAAA,GAAY,CAAA,CAAE,KAEM,CAAA,OAFO,eAEP,CAAA;AAS3B,cATQ,mBASuB,EATJ,CAAA,CAAA,SASX,CAAE;EAEP,IAAA,aAAM;;;;;;;;;;;;;;;;;;;KAFjB,aAAA,GAAgB,CAAA,CAAE,aAAa;iBAEpB,MAAA,UAAgB"}
|
package/dist/index.js
CHANGED
|
@@ -47,7 +47,28 @@ function copy(from, to, rename = identity) {
|
|
|
47
47
|
|
|
48
48
|
//#endregion
|
|
49
49
|
//#region src/package-json.ts
|
|
50
|
-
const
|
|
50
|
+
const fragnoCoreVersion = "^0.1.2";
|
|
51
|
+
const fragnoDbVersion = "^0.1.2";
|
|
52
|
+
const unpluginFragnoVersion = "^0.0.2";
|
|
53
|
+
const fragnoCliVersion = "^0.1.3";
|
|
54
|
+
const basePkg = {
|
|
55
|
+
dependencies: {
|
|
56
|
+
"@fragno-dev/core": fragnoCoreVersion,
|
|
57
|
+
zod: "^4.0.5"
|
|
58
|
+
},
|
|
59
|
+
devDependencies: {
|
|
60
|
+
"@fragno-dev/cli": fragnoCliVersion,
|
|
61
|
+
"@types/node": "^22"
|
|
62
|
+
},
|
|
63
|
+
peerDependencies: {
|
|
64
|
+
typescript: "^5",
|
|
65
|
+
react: ">=18.0.0",
|
|
66
|
+
svelte: ">=4.0.0",
|
|
67
|
+
"solid-js": ">=1.0.0",
|
|
68
|
+
vue: ">=3.0.0"
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const databasePkg = { dependencies: { "@fragno-dev/db": fragnoDbVersion } };
|
|
51
72
|
const buildToolPkg = {
|
|
52
73
|
none: {},
|
|
53
74
|
tsdown: {
|
|
@@ -122,11 +143,13 @@ const createOptionsSchema = z.object({
|
|
|
122
143
|
buildTool: buildToolsSchema,
|
|
123
144
|
name: z.string(),
|
|
124
145
|
template: templateTypesSchema,
|
|
125
|
-
agentDocs: agentDocsSchema
|
|
146
|
+
agentDocs: agentDocsSchema,
|
|
147
|
+
withDatabase: z.boolean()
|
|
126
148
|
});
|
|
127
149
|
function create(options) {
|
|
128
|
-
let pkgOverride = { name: options.name };
|
|
150
|
+
let pkgOverride = merge(basePkg, { name: options.name });
|
|
129
151
|
pkgOverride = merge(pkgOverride, buildToolPkg[options.buildTool]);
|
|
152
|
+
if (options.withDatabase) pkgOverride = merge(pkgOverride, databasePkg);
|
|
130
153
|
if (options.template == "fragment") writeFragmentTemplate(options.path, pkgOverride);
|
|
131
154
|
else throw new Error(`Unsupported template type: ${options.template}`);
|
|
132
155
|
switch (options.buildTool) {
|
|
@@ -159,6 +182,10 @@ function create(options) {
|
|
|
159
182
|
break;
|
|
160
183
|
case "none": break;
|
|
161
184
|
}
|
|
185
|
+
if (options.withDatabase) {
|
|
186
|
+
writeOptionalTemplate(options.path, "database/index.ts", "src/index.ts");
|
|
187
|
+
writeOptionalTemplate(options.path, "database/schema.ts", "src/schema.ts");
|
|
188
|
+
}
|
|
162
189
|
}
|
|
163
190
|
function getTemplateDir() {
|
|
164
191
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["e: unknown","buildToolPkg: Record<BuildTools, Record<string, unknown>>","pkgOverride: Record<string, unknown>"],"sources":["../src/utils.ts","../src/package-json.ts","../src/index.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function mkdirp(dir: string): void {\n try {\n fs.mkdirSync(dir, { recursive: true });\n } catch (e: unknown) {\n if (e instanceof Error && \"code\" in e && e.code === \"EEXIST\") return;\n throw e;\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === \"[object Object]\"\n );\n}\n\n/**\n * Deep merge plain objects. Arrays and primitives are overwritten, not merged.\n * @param target The target object\n * @param source The source object\n * @returns The merged object\n */\nexport function merge<T extends Record<string, unknown>>(\n target: T,\n source: Record<string, unknown>,\n): T {\n const result = { ...target } as Record<string, unknown>;\n\n for (const key in source) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {\n result[key] = merge(targetValue, sourceValue);\n } else {\n result[key] = sourceValue;\n }\n }\n\n return result as T;\n}\n\nfunction identity<T>(x: T): T {\n return x;\n}\n\nexport function copy(\n from: string,\n to: string,\n rename: (basename: string) => string = identity,\n): void {\n if (!fs.existsSync(from)) return;\n\n const stats = fs.statSync(from);\n\n if (stats.isDirectory()) {\n fs.readdirSync(from).forEach((file) => {\n copy(path.join(from, file), path.join(to, rename(file)));\n });\n } else {\n mkdirp(path.dirname(to));\n fs.copyFileSync(from, to);\n }\n}\n","import type { BuildTools } from \"./index\";\n\nconst unpluginFragnoVersion = \"^0.0.1\";\n\nexport const buildToolPkg: Record<BuildTools, Record<string, unknown>> = {\n none: {},\n tsdown: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n tsdown: \"^0.11.9\",\n },\n scripts: {\n build: \"tsdown\",\n },\n },\n esbuild: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n esbuild: \"^0.25.10\",\n },\n scripts: {\n build: \"./esbuild.config.js\",\n },\n },\n vite: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n vite: \"^6.0.0\",\n },\n scripts: {\n build: \"vite build\",\n },\n },\n rollup: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rollup/plugin-node-resolve\": \"^16.0.2\",\n \"@rollup/plugin-typescript\": \"^12.1.4\",\n tslib: \"^2.8.1\",\n rollup: \"^4.52.4\",\n },\n scripts: {\n build: \"rollup -c\",\n },\n },\n webpack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n webpack: \"^5.102.0\",\n \"webpack-cli\": \"^6.0.1\",\n \"ts-loader\": \"^9.5.1\",\n },\n scripts: {\n build: \"webpack\",\n },\n },\n rspack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rspack/core\": \"^1.5.8\",\n \"@rspack/cli\": \"^1.5.8\",\n },\n scripts: {\n build: \"rspack build\",\n },\n },\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { copy, merge } from \"./utils.ts\";\nimport { buildToolPkg } from \"./package-json.ts\";\nimport { z } from \"zod\";\n\nconst templateTypesSchema = z.literal(\"fragment\");\nexport type TemplateTypes = z.infer<typeof templateTypesSchema>;\n\nconst buildToolsSchema = z.enum([\n \"esbuild\",\n \"tsdown\",\n \"vite\",\n \"rollup\",\n \"webpack\",\n \"rspack\",\n \"none\",\n]);\nexport type BuildTools = z.infer<typeof buildToolsSchema>;\n\nconst agentDocsSchema = z.enum([\"AGENTS.md\", \"CLAUDE.md\", \"none\"]);\nexport type AgentDocs = z.infer<typeof agentDocsSchema>;\n\nexport const createOptionsSchema = z.object({\n path: z.string(),\n buildTool: buildToolsSchema,\n name: z.string(),\n template: templateTypesSchema,\n agentDocs: agentDocsSchema,\n});\n\ntype CreateOptions = z.infer<typeof createOptionsSchema>;\n\nexport function create(options: CreateOptions) {\n let pkgOverride: Record<string, unknown> = { name: options.name };\n\n // Build tool pkg overrides\n pkgOverride = merge(pkgOverride, buildToolPkg[options.buildTool]);\n\n if (options.template == \"fragment\") {\n writeFragmentTemplate(options.path, pkgOverride);\n } else {\n throw new Error(`Unsupported template type: ${options.template}`);\n }\n\n switch (options.buildTool) {\n case \"esbuild\":\n writeOptionalTemplate(options.path, \"builder/esbuild.config.js\");\n break;\n case \"tsdown\":\n writeOptionalTemplate(options.path, \"builder/tsdown.config.ts\");\n break;\n case \"vite\":\n writeOptionalTemplate(options.path, \"builder/vite.config.ts\");\n break;\n case \"rollup\":\n writeOptionalTemplate(options.path, \"builder/rollup.config.js\");\n break;\n case \"webpack\":\n writeOptionalTemplate(options.path, \"builder/webpack.config.js\");\n break;\n case \"rspack\":\n writeOptionalTemplate(options.path, \"builder/rspack.config.js\");\n break;\n case \"none\":\n break;\n }\n\n switch (options.agentDocs) {\n case \"AGENTS.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\");\n break;\n case \"CLAUDE.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\", \"CLAUDE.md\");\n break;\n case \"none\":\n break;\n }\n}\n\nfunction getTemplateDir(): string {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n return path.join(__dirname, \"..\", \"templates\");\n}\n\nfunction writeOptionalTemplate(targetPath: string, template: string, rename?: string) {\n const templatePath = path.join(getTemplateDir(), \"optional\", template);\n const targetFileName = rename ? rename : path.basename(template);\n const targetFile = path.join(targetPath, targetFileName);\n\n copy(templatePath, targetFile);\n}\n\nfunction writeFragmentTemplate(targetPath: string, pkgOverrides: Record<string, unknown>) {\n const templateDir = path.join(getTemplateDir(), \"fragment\");\n\n // Copy template files\n copy(templateDir, targetPath, (basename) => {\n if (basename === \"package.template.json\") {\n return \"package.json\";\n }\n return basename;\n });\n\n // Update package.json based on chosen options\n const packageJsonPath = path.join(targetPath, \"package.json\");\n const basePkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const newPkg = merge(basePkg, pkgOverrides);\n\n // Write to disk\n fs.writeFileSync(packageJsonPath, JSON.stringify(newPkg, null, 2) + \"\\n\");\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["e: unknown","basePkg: Record<string, unknown>","databasePkg: Record<string, unknown>","buildToolPkg: Record<BuildTools, Record<string, unknown>>","pkgOverride: Record<string, unknown>"],"sources":["../src/utils.ts","../src/package-json.ts","../src/index.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function mkdirp(dir: string): void {\n try {\n fs.mkdirSync(dir, { recursive: true });\n } catch (e: unknown) {\n if (e instanceof Error && \"code\" in e && e.code === \"EEXIST\") {\n return;\n }\n throw e;\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === \"[object Object]\"\n );\n}\n\n/**\n * Deep merge plain objects. Arrays and primitives are overwritten, not merged.\n * @param target The target object\n * @param source The source object\n * @returns The merged object\n */\nexport function merge<T extends Record<string, unknown>>(\n target: T,\n source: Record<string, unknown>,\n): T {\n const result = { ...target } as Record<string, unknown>;\n\n for (const key in source) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {\n result[key] = merge(targetValue, sourceValue);\n } else {\n result[key] = sourceValue;\n }\n }\n\n return result as T;\n}\n\nfunction identity<T>(x: T): T {\n return x;\n}\n\nexport function copy(\n from: string,\n to: string,\n rename: (basename: string) => string = identity,\n): void {\n if (!fs.existsSync(from)) {\n return;\n }\n\n const stats = fs.statSync(from);\n\n if (stats.isDirectory()) {\n fs.readdirSync(from).forEach((file) => {\n copy(path.join(from, file), path.join(to, rename(file)));\n });\n } else {\n mkdirp(path.dirname(to));\n fs.copyFileSync(from, to);\n }\n}\n","import type { BuildTools } from \"./index\";\n\nconst fragnoCoreVersion = \"^0.1.2\";\nconst fragnoDbVersion = \"^0.1.2\";\nconst unpluginFragnoVersion = \"^0.0.2\";\nconst fragnoCliVersion = \"^0.1.3\";\n\nexport const basePkg: Record<string, unknown> = {\n dependencies: {\n \"@fragno-dev/core\": fragnoCoreVersion,\n zod: \"^4.0.5\",\n },\n devDependencies: {\n \"@fragno-dev/cli\": fragnoCliVersion,\n \"@types/node\": \"^22\",\n },\n peerDependencies: {\n typescript: \"^5\",\n react: \">=18.0.0\",\n svelte: \">=4.0.0\",\n \"solid-js\": \">=1.0.0\",\n vue: \">=3.0.0\",\n },\n};\n\nexport const databasePkg: Record<string, unknown> = {\n dependencies: {\n \"@fragno-dev/db\": fragnoDbVersion,\n },\n};\n\nexport const buildToolPkg: Record<BuildTools, Record<string, unknown>> = {\n none: {},\n tsdown: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n tsdown: \"^0.11.9\",\n },\n scripts: {\n build: \"tsdown\",\n },\n },\n esbuild: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n esbuild: \"^0.25.10\",\n },\n scripts: {\n build: \"./esbuild.config.js\",\n },\n },\n vite: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n vite: \"^6.0.0\",\n },\n scripts: {\n build: \"vite build\",\n },\n },\n rollup: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rollup/plugin-node-resolve\": \"^16.0.2\",\n \"@rollup/plugin-typescript\": \"^12.1.4\",\n tslib: \"^2.8.1\",\n rollup: \"^4.52.4\",\n },\n scripts: {\n build: \"rollup -c\",\n },\n },\n webpack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n webpack: \"^5.102.0\",\n \"webpack-cli\": \"^6.0.1\",\n \"ts-loader\": \"^9.5.1\",\n },\n scripts: {\n build: \"webpack\",\n },\n },\n rspack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rspack/core\": \"^1.5.8\",\n \"@rspack/cli\": \"^1.5.8\",\n },\n scripts: {\n build: \"rspack build\",\n },\n },\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { copy, merge } from \"./utils.ts\";\nimport { basePkg, buildToolPkg, databasePkg } from \"./package-json.ts\";\nimport { z } from \"zod\";\n\nconst templateTypesSchema = z.literal(\"fragment\");\nexport type TemplateTypes = z.infer<typeof templateTypesSchema>;\n\nconst buildToolsSchema = z.enum([\n \"esbuild\",\n \"tsdown\",\n \"vite\",\n \"rollup\",\n \"webpack\",\n \"rspack\",\n \"none\",\n]);\nexport type BuildTools = z.infer<typeof buildToolsSchema>;\n\nconst agentDocsSchema = z.enum([\"AGENTS.md\", \"CLAUDE.md\", \"none\"]);\nexport type AgentDocs = z.infer<typeof agentDocsSchema>;\n\nexport const createOptionsSchema = z.object({\n path: z.string(),\n buildTool: buildToolsSchema,\n name: z.string(),\n template: templateTypesSchema,\n agentDocs: agentDocsSchema,\n withDatabase: z.boolean(),\n});\n\ntype CreateOptions = z.infer<typeof createOptionsSchema>;\n\nexport function create(options: CreateOptions) {\n let pkgOverride: Record<string, unknown> = merge(basePkg, { name: options.name });\n\n // Build tool pkg overrides\n pkgOverride = merge(pkgOverride, buildToolPkg[options.buildTool]);\n\n // Database pkg overrides\n if (options.withDatabase) {\n pkgOverride = merge(pkgOverride, databasePkg);\n }\n\n if (options.template == \"fragment\") {\n writeFragmentTemplate(options.path, pkgOverride);\n } else {\n throw new Error(`Unsupported template type: ${options.template}`);\n }\n\n switch (options.buildTool) {\n case \"esbuild\":\n writeOptionalTemplate(options.path, \"builder/esbuild.config.js\");\n break;\n case \"tsdown\":\n writeOptionalTemplate(options.path, \"builder/tsdown.config.ts\");\n break;\n case \"vite\":\n writeOptionalTemplate(options.path, \"builder/vite.config.ts\");\n break;\n case \"rollup\":\n writeOptionalTemplate(options.path, \"builder/rollup.config.js\");\n break;\n case \"webpack\":\n writeOptionalTemplate(options.path, \"builder/webpack.config.js\");\n break;\n case \"rspack\":\n writeOptionalTemplate(options.path, \"builder/rspack.config.js\");\n break;\n case \"none\":\n break;\n }\n\n switch (options.agentDocs) {\n case \"AGENTS.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\");\n break;\n case \"CLAUDE.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\", \"CLAUDE.md\");\n break;\n case \"none\":\n break;\n }\n\n if (options.withDatabase) {\n writeOptionalTemplate(options.path, \"database/index.ts\", \"src/index.ts\");\n writeOptionalTemplate(options.path, \"database/schema.ts\", \"src/schema.ts\");\n }\n}\n\nfunction getTemplateDir(): string {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n return path.join(__dirname, \"..\", \"templates\");\n}\n\nfunction writeOptionalTemplate(targetPath: string, template: string, rename?: string) {\n const templatePath = path.join(getTemplateDir(), \"optional\", template);\n const targetFileName = rename ? rename : path.basename(template);\n const targetFile = path.join(targetPath, targetFileName);\n\n copy(templatePath, targetFile);\n}\n\nfunction writeFragmentTemplate(targetPath: string, pkgOverrides: Record<string, unknown>) {\n const templateDir = path.join(getTemplateDir(), \"fragment\");\n\n // Copy template files\n copy(templateDir, targetPath, (basename) => {\n if (basename === \"package.template.json\") {\n return \"package.json\";\n }\n return basename;\n });\n\n // Update package.json based on chosen options\n const packageJsonPath = path.join(targetPath, \"package.json\");\n const basePkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const newPkg = merge(basePkg, pkgOverrides);\n\n // Write to disk\n fs.writeFileSync(packageJsonPath, JSON.stringify(newPkg, null, 2) + \"\\n\");\n}\n"],"mappings":"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"}
|