create-arkstack 0.1.1 → 0.1.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/bin/run.cjs +41 -25
- package/bin/run.cjs.map +1 -1
- package/bin/run.js +41 -25
- package/bin/run.js.map +1 -1
- package/package.json +1 -1
package/bin/run.cjs
CHANGED
|
@@ -67,13 +67,13 @@ const templates = [
|
|
|
67
67
|
name: "Express Starter Kit",
|
|
68
68
|
alias: "express",
|
|
69
69
|
hint: "An Express application starter kit",
|
|
70
|
-
source: "github:
|
|
70
|
+
source: "github:arkstack-hq/arkstack"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
name: "Express Lean Starter Kit",
|
|
74
74
|
alias: "express-lean",
|
|
75
75
|
hint: "A minimal Express application starter kit",
|
|
76
|
-
source: "github:
|
|
76
|
+
source: "github:arkstack-hq/arkstack",
|
|
77
77
|
lean: true,
|
|
78
78
|
baseAlias: "express"
|
|
79
79
|
},
|
|
@@ -81,22 +81,49 @@ const templates = [
|
|
|
81
81
|
name: "H3 Starter Kit",
|
|
82
82
|
alias: "h3",
|
|
83
83
|
hint: "A H3 application starter kit",
|
|
84
|
-
source: "github:
|
|
84
|
+
source: "github:arkstack-hq/arkstack"
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
name: "H3 Lean Starter Kit",
|
|
88
88
|
alias: "h3-lean",
|
|
89
89
|
hint: "A minimal H3 application starter kit",
|
|
90
|
-
source: "github:
|
|
90
|
+
source: "github:arkstack-hq/arkstack",
|
|
91
91
|
lean: true,
|
|
92
92
|
baseAlias: "h3"
|
|
93
93
|
}
|
|
94
94
|
];
|
|
95
|
-
|
|
95
|
+
|
|
96
|
+
//#endregion
|
|
97
|
+
//#region src/data.ts
|
|
98
|
+
const filesToRemove = [
|
|
99
|
+
"src/app",
|
|
100
|
+
"src/models",
|
|
101
|
+
"database",
|
|
102
|
+
"src/routes/api.ts",
|
|
103
|
+
"src/core/database.ts",
|
|
104
|
+
"prisma",
|
|
105
|
+
"prisma.config.ts",
|
|
106
|
+
"arkorm.config.ts",
|
|
107
|
+
"arkormx.config.ts",
|
|
108
|
+
"arkorm.config.js",
|
|
109
|
+
"arkormx.config.js",
|
|
110
|
+
"arkorm.config.mjs",
|
|
111
|
+
"arkormx.config.mjs"
|
|
112
|
+
];
|
|
113
|
+
const depsToRemove = [
|
|
114
|
+
"@prisma/adapter-pg",
|
|
115
|
+
"@arkstack/console",
|
|
116
|
+
"@prisma/client",
|
|
117
|
+
"@types/pg",
|
|
118
|
+
"pg",
|
|
119
|
+
"prisma",
|
|
120
|
+
"arkormx"
|
|
121
|
+
];
|
|
122
|
+
const depsToAdd = { "@arkstack/console-slim": "^0.1.2" };
|
|
123
|
+
const depsList = {
|
|
96
124
|
"@arkstack/common": "^0.1.4",
|
|
97
125
|
"@arkstack/console": "^0.1.4",
|
|
98
126
|
"@arkstack/contract": "^0.1.4",
|
|
99
|
-
"@arkstack/database": "^0.1.4",
|
|
100
127
|
"@arkstack/driver-express": "^0.1.4"
|
|
101
128
|
};
|
|
102
129
|
|
|
@@ -139,6 +166,7 @@ var actions_default = class {
|
|
|
139
166
|
dir: this.location,
|
|
140
167
|
auth,
|
|
141
168
|
install,
|
|
169
|
+
provider: "github",
|
|
142
170
|
registry: await this.pm(),
|
|
143
171
|
forceClean: false
|
|
144
172
|
});
|
|
@@ -179,7 +207,7 @@ var actions_default = class {
|
|
|
179
207
|
delete pkg.scripts.dev;
|
|
180
208
|
pkg.name = __h3ravel_support.Str.slugify(this.appName ?? (0, node_path.basename)(this.location).replace(".", ""), "-");
|
|
181
209
|
if (this.description) pkg.description = this.description;
|
|
182
|
-
for (const [name, version] of Object.entries(
|
|
210
|
+
for (const [name, version] of Object.entries(depsList)) pkg.dependencies[name] = version;
|
|
183
211
|
await Promise.allSettled([
|
|
184
212
|
(0, node_fs_promises.writeFile)(pkgPath, JSON.stringify(pkg, null, 2)),
|
|
185
213
|
this.removeLockFile(),
|
|
@@ -207,37 +235,25 @@ var actions_default = class {
|
|
|
207
235
|
if ((0, node_fs.existsSync)(exampleEnvPath)) await (0, node_fs_promises.copyFile)(exampleEnvPath, envPath);
|
|
208
236
|
}
|
|
209
237
|
async makeLeanProfile(_kit) {
|
|
210
|
-
await Promise.allSettled(
|
|
211
|
-
"src/app",
|
|
212
|
-
"src/routes/api.ts",
|
|
213
|
-
"src/core/database.ts",
|
|
214
|
-
"prisma",
|
|
215
|
-
"prisma.config.ts"
|
|
216
|
-
].map((file) => (0, node_fs_promises.rm)((0, node_path.join)(this.location, file), {
|
|
238
|
+
await Promise.allSettled(filesToRemove.map((file) => (0, node_fs_promises.rm)((0, node_path.join)(this.location, file), {
|
|
217
239
|
force: true,
|
|
218
240
|
recursive: true
|
|
219
241
|
})));
|
|
220
242
|
const pkgPath = (0, node_path.join)(this.location, "package.json");
|
|
221
243
|
if ((0, node_fs.existsSync)(pkgPath)) {
|
|
222
244
|
const pkg = await (0, node_fs_promises.readFile)(pkgPath, "utf-8").then(JSON.parse);
|
|
223
|
-
for (const dep of
|
|
224
|
-
"@arkstack/database",
|
|
225
|
-
"@prisma/adapter-pg",
|
|
226
|
-
"@prisma/client",
|
|
227
|
-
"pg",
|
|
228
|
-
"prisma",
|
|
229
|
-
"@types/pg"
|
|
230
|
-
]) {
|
|
245
|
+
for (const dep of depsToRemove) {
|
|
231
246
|
delete pkg.dependencies?.[dep];
|
|
232
247
|
delete pkg.devDependencies?.[dep];
|
|
233
248
|
}
|
|
249
|
+
for (const [name, version] of Object.entries(depsToAdd)) pkg.dependencies[name] = version;
|
|
234
250
|
await (0, node_fs_promises.writeFile)(pkgPath, JSON.stringify(pkg, null, 2));
|
|
235
251
|
}
|
|
236
252
|
for (const file of ["src/core/app.ts", "src/core/utils/request-handlers.ts"]) {
|
|
237
253
|
const filePath = (0, node_path.join)(this.location, file);
|
|
238
254
|
if (!(0, node_fs.existsSync)(filePath)) continue;
|
|
239
255
|
let content = await (0, node_fs_promises.readFile)(filePath, "utf-8");
|
|
240
|
-
content = content.replace("import {
|
|
256
|
+
content = content.replace("import { ModelNotFoundException } from 'arkormx'\n", "").replace("import { prisma } from 'src/core/database'\n", "").replace("import { Prisma } from '@prisma/client'\n", "").replace(" async shutdown () {\n await prisma.$disconnect()\n process.exit(0)\n }", " async shutdown () {\n process.exit(0)\n }").replace(" * Shuts down the application by disconnecting from the database and exiting the process.", " * Shuts down the application and exits the process.").replace(/\n\s*if \((?:err|cause) instanceof Prisma\.PrismaClientKnownRequestError && (?:err|cause)\.code === "P2025"\) \{\n\s*error\.code = 404\n\s*error\.message = `\$\{(?:err|cause)\.meta\?\.modelName\} not found!`\n\s*\}\n/g, "\n").replace(/\n\s*if \((?:err|cause) instanceof ModelNotFoundException\) \{\n\s*error\.code = 404\n\s*error\.message = `\$\{(?:err|cause)\.getModelName\(\)\} not found!`\n\s*\}\n/g, "\n");
|
|
241
257
|
await (0, node_fs_promises.writeFile)(filePath, content, "utf-8");
|
|
242
258
|
}
|
|
243
259
|
}
|
|
@@ -293,7 +309,7 @@ var CreateArkstackCommand = class extends __h3ravel_musket.Command {
|
|
|
293
309
|
async handle() {
|
|
294
310
|
const options = this.options();
|
|
295
311
|
const pathName = this.argument("location");
|
|
296
|
-
console.log(altLogo,
|
|
312
|
+
console.log(altLogo, "font-family: monospace");
|
|
297
313
|
let { template } = await inquirer.default.prompt([{
|
|
298
314
|
type: "list",
|
|
299
315
|
name: "template",
|
|
@@ -393,7 +409,7 @@ var CreateArkstackCommand = class extends __h3ravel_musket.Command {
|
|
|
393
409
|
const source = pre && kit.prereleaseSource ? kit.prereleaseSource : kit.source;
|
|
394
410
|
const selectedAlias = (kit.baseAlias ?? kit.alias).replace(/-lean$/i, "");
|
|
395
411
|
const actions = new actions_default((0, node_path.join)(process.cwd(), location), appName, description);
|
|
396
|
-
const spinner = (0, ora.default)(
|
|
412
|
+
const spinner = (0, ora.default)("Loading Template...").start();
|
|
397
413
|
const result = await actions.download(source, install, token, options.overwrite);
|
|
398
414
|
if (result.dir && selectedAlias) {
|
|
399
415
|
await cleanDirectoryExcept(result.dir, selectedAlias);
|
package/bin/run.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.cjs","names":["templates: {\n name: string;\n alias: \"express\" | \"h3\" | \"express-lean\" | \"h3-lean\";\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: \"express\" | \"h3\";\n prereleaseSource?: string;\n}[]","location?: string","appName?: string","description?: string","path","Resolver","Str","path","Command","AbortPromptError","ExitPromptError","Str","source: string","Actions","Logger","Kernel"],"sources":["../src/logo.ts","../src/templates.ts","../src/actions.ts","../src/utils.ts","../src/Commands/CreateArkstackCommand.ts","../src/run.ts"],"sourcesContent":["export const altLogo = String.raw`%c\n _ __ _ _ \n /_\\ _ __ ___/ _\\ |_ __ _ ___| | __\n //_\\\\| '__/ __\\ \\| __/ _\\ |/ __| |/ /\n/ _ \\ | | (___\\ \\ || (_| | (__| < \n\\_/ \\_/_| \\___\\__/\\__\\__,_|\\___|_|\\_\\\n \n`;\n","/*\n * create-h3ravel\n *\n * (c) H3ravel Framework\n *\n * The H3ravel framework and all it's base packages are\n * open-sourced software licensed under the MIT license.\n */\n\n/**\n * List of first party templates\n */\nexport const templates: {\n name: string;\n alias: \"express\" | \"h3\" | \"express-lean\" | \"h3-lean\";\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: \"express\" | \"h3\";\n prereleaseSource?: string;\n}[] = [\n {\n name: \"Express Starter Kit\",\n alias: \"express\",\n hint: \"An Express application starter kit\",\n source: \"github:toneflix/arkstack\",\n },\n {\n name: \"Express Lean Starter Kit\",\n alias: \"express-lean\",\n hint: \"A minimal Express application starter kit\",\n source: \"github:toneflix/arkstack\",\n lean: true,\n baseAlias: \"express\",\n },\n {\n name: \"H3 Starter Kit\",\n alias: \"h3\",\n hint: \"A H3 application starter kit\",\n source: \"github:toneflix/arkstack\",\n },\n {\n name: \"H3 Lean Starter Kit\",\n alias: \"h3-lean\",\n hint: \"A minimal H3 application starter kit\",\n source: \"github:toneflix/arkstack\",\n lean: true,\n baseAlias: \"h3\",\n },\n ];\n\nexport const dependencyTemplates = {\n \"@arkstack/common\": \"^0.1.4\",\n \"@arkstack/console\": \"^0.1.4\",\n \"@arkstack/contract\": \"^0.1.4\",\n \"@arkstack/database\": \"^0.1.4\",\n \"@arkstack/driver-express\": \"^0.1.4\"\n}","import { Logger, Resolver } from \"@h3ravel/shared\";\nimport { copyFile, readFile, rm, unlink, writeFile } from \"node:fs/promises\";\nimport { detectPackageManager, installPackage } from \"@antfu/install-pkg\";\nimport path, { basename, join, relative } from \"node:path\";\n\nimport { Str } from \"@h3ravel/support\";\nimport { chdir } from \"node:process\";\nimport { dependencyTemplates } from \"./templates\";\nimport { downloadTemplate } from \"giget\";\nimport { existsSync } from \"node:fs\";\n\nexport default class {\n skipInstallation?: boolean;\n\n constructor(\n private location?: string,\n private appName?: string,\n private description?: string,\n ) {\n if (!this.location) {\n this.location = join(process.cwd(), \".temp\");\n }\n }\n\n async pm () {\n return (await detectPackageManager()) ?? \"npm\";\n }\n\n async runCmd (npx: boolean = false) {\n if (npx) return \"npx\";\n\n const pm = await this.pm();\n\n return pm === \"npm\" ? \"npm run\" : pm;\n }\n\n async download (template: string, install = false, auth?: string, overwrite = false) {\n if (this.location?.includes(\".temp\") || (overwrite && existsSync(this.location!))) {\n await rm(this.location!, { force: true, recursive: true });\n } else if (existsSync(this.location!)) {\n console.log(\"\\n\");\n Logger.parse(\n [\n [\" ERROR \", \"bgRed\"],\n [this.location!, [\"gray\", \"italic\"]],\n [\"is not empty.\", \"white\"],\n ],\n \" \",\n );\n console.log(\"\");\n process.exit(0);\n }\n\n this.skipInstallation = !install;\n this.removeLockFile();\n\n return await downloadTemplate(template, {\n dir: this.location,\n auth,\n install,\n registry: await this.pm(),\n forceClean: false,\n });\n }\n\n async installPackage (name: string) {\n await installPackage(name, {\n cwd: this.location,\n silent: true,\n });\n }\n\n async complete (installed = false) {\n console.log(\"\");\n\n const installPath = \"./\" + relative(process.cwd(), this.location!);\n\n try {\n chdir(path.join(process.cwd(), installPath));\n } catch {\n /** */\n }\n\n Logger.success(\"Your Arkstack project has been created successfully\");\n Logger.parse(\n [\n [\"cd\", \"cyan\"],\n [installPath, \"yellow\"],\n installPath === process.cwd() ? [\"✔\", \"green\"] : [\"\", \"green\"],\n ],\n \" \",\n );\n\n if (!installed) {\n Logger.parse([[await Resolver.getPakageInstallCommand(), \"cyan\"]]);\n }\n\n Logger.parse(\n [\n [await this.runCmd(), \"cyan\"],\n [\"dev\", \"yellow\"],\n ],\n \" \",\n );\n Logger.parse([\n [\"Open\", \"cyan\"],\n [\"http://localhost:3000\", \"yellow\"],\n ]);\n\n console.log(\"\");\n\n Logger.parse([[\"Have any questions\", \"white\"]]);\n // Logger.parse([\n // [\"Join our Discord server -\", \"white\"],\n // [\"https://discord.gg/hsG2A8PuGb\", \"yellow\"],\n // ]);\n Logger.parse([\n [\"Checkout our other projects -\", \"white\"],\n [\"https://toneflix.net/open-source\", \"yellow\"],\n ]);\n }\n\n async cleanup () {\n const pkgPath = join(this.location!, \"package.json\");\n const pkg = await readFile(pkgPath!, \"utf-8\").then(JSON.parse);\n\n delete pkg.packageManager;\n delete pkg.scripts.predev;\n delete pkg.scripts.prebuild;\n delete pkg.scripts.precmd;\n delete pkg.scripts.build;\n delete pkg.scripts.dev;\n\n pkg.name = Str.slugify(\n this.appName ?? basename(this.location!).replace('.', ''), '-'\n );\n\n if (this.description) {\n pkg.description = this.description;\n }\n\n for (const [name, version] of Object.entries(dependencyTemplates)) {\n pkg.dependencies[name] = version;\n }\n\n await Promise.allSettled([\n writeFile(pkgPath, JSON.stringify(pkg, null, 2)),\n this.removeLockFile(),\n rm(join(this.location!, \"pnpm-workspace.yaml\"), { force: true }),\n rm(join(this.location!, \".github\"), { force: true, recursive: true }),\n ]);\n }\n\n async removeLockFile () {\n if (!this.skipInstallation) {\n return;\n }\n\n await Promise.allSettled([\n unlink(join(this.location!, \"package-lock.json\")),\n unlink(join(this.location!, \"yarn.lock\")),\n unlink(join(this.location!, \"pnpm-lock.yaml\")),\n ]);\n }\n\n async getBanner () {\n return await readFile(join(process.cwd(), \"./logo.txt\"), \"utf-8\");\n }\n\n async copyExampleEnv () {\n const envPath = join(this.location!, \".env\");\n const exampleEnvPath = join(this.location!, \".env.example\");\n\n if (existsSync(exampleEnvPath)) {\n await copyFile(exampleEnvPath, envPath);\n }\n }\n\n async makeLeanProfile (_kit: \"express\" | \"h3\") {\n const filesToRemove = [\n \"src/app\",\n \"src/routes/api.ts\",\n \"src/core/database.ts\",\n \"prisma\",\n \"prisma.config.ts\",\n ];\n\n await Promise.allSettled(\n filesToRemove.map((file) => rm(join(this.location!, file), { force: true, recursive: true })),\n );\n\n const pkgPath = join(this.location!, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = await readFile(pkgPath, \"utf-8\").then(JSON.parse);\n const depsToRemove = [\n \"@arkstack/database\",\n \"@prisma/adapter-pg\",\n \"@prisma/client\",\n \"pg\",\n \"prisma\",\n \"@types/pg\",\n ];\n\n for (const dep of depsToRemove) {\n delete pkg.dependencies?.[dep];\n delete pkg.devDependencies?.[dep];\n }\n\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2));\n }\n\n const filesToPatch = [\n \"src/core/app.ts\",\n \"src/core/utils/request-handlers.ts\",\n ];\n\n for (const file of filesToPatch) {\n const filePath = join(this.location!, file);\n\n if (!existsSync(filePath)) {\n continue;\n }\n\n let content = await readFile(filePath, \"utf-8\");\n\n content = content\n .replace('import { prisma } from \"src/core/database\";\\n', \"\")\n .replace('import { Prisma } from \"@prisma/client\";\\n', \"\")\n .replace(\" async shutdown () {\\n await prisma.$disconnect();\\n process.exit(0);\\n }\", \" async shutdown () {\\n process.exit(0);\\n }\")\n .replace(\n \" * Shuts down the application by disconnecting from the database and exiting the process.\",\n \" * Shuts down the application and exits the process.\",\n )\n .replace(\n /\\n\\s*if \\((?:err|cause) instanceof Prisma\\.PrismaClientKnownRequestError && (?:err|cause)\\.code === \"P2025\"\\) \\{\\n\\s*error\\.code = 404;\\n\\s*error\\.message = `\\$\\{(?:err|cause)\\.meta\\?\\.modelName\\} not found!`;\\n\\s*\\}\\n/g,\n \"\\n\",\n );\n\n await writeFile(filePath, content, \"utf-8\");\n }\n\n }\n}\n","import { readdir, rename, rm } from \"node:fs/promises\";\n\nimport path from \"node:path\";\n\n/**\n * Removes all files in dirPath except the one specified by keepFileName\n *\n * @param dirPath\n * @param keepFileName\n */\nexport async function cleanDirectoryExcept (dirPath: string, keepFileName: string) {\n const files = await readdir(dirPath);\n\n for (const file of files) {\n if (file === keepFileName) continue;\n\n const fullPath = path.join(dirPath, file);\n\n await rm(fullPath, { recursive: true, force: true });\n }\n}\n\n/**\n * Moves all files from dirPath to parent directory and removes dirPath\n *\n * @param dirPath\n * @param parent\n */\nexport async function hoistDirectoryContents (parent: string, dirPath: string) {\n const source = path.isAbsolute(dirPath) ? dirPath : path.join(process.cwd(), dirPath);\n\n const targetParent = path.isAbsolute(parent) ? parent : path.join(process.cwd(), parent);\n\n if (!source.startsWith(targetParent)) {\n throw new Error(\"Source must be inside the parent directory\");\n }\n\n const entries = await readdir(source);\n\n for (const entry of entries) {\n const from = path.join(source, entry);\n const to = path.join(targetParent, entry);\n\n await rename(from, to);\n }\n\n await rm(source, { recursive: true });\n}\n","import { Command } from \"@h3ravel/musket\";\nimport { altLogo } from \"src/logo\";\nimport inquirer from \"inquirer\";\nimport { AbortPromptError, ExitPromptError } from \"@inquirer/core\";\nimport { basename, join } from \"node:path\";\nimport { templates } from \"src/templates\";\nimport { Str } from \"@h3ravel/support\";\nimport Actions from \"src/actions\";\nimport ora from \"ora\";\nimport { Logger } from \"@h3ravel/shared\";\nimport { cleanDirectoryExcept, hoistDirectoryContents } from \"src/utils\";\n\nexport class CreateArkstackCommand extends Command {\n protected signature = `create-arkstack\n {location?: The location where this project should be created relative to the current dir.}\n {--n|name?: The name of your project.}\n {--i|install: Install node_modules right away}\n {--t|token?: Kit repo authentication token.}\n {--d|desc?: Project Description.}\n {--k|kit?: Starter template kit.}\n {--p|pre: Download prerelease version if available.}\n {--o|overwrite: Overwrite the installation directory if it is not empty.}\n `;\n protected description = \"Display a personalized greeting.\";\n\n async handle () {\n const options = this.options();\n const pathName = this.argument(\"location\");\n // const defaultName = pathName ? Str.of(pathName).afterLast(\"/\") : undefined;\n\n console.log(altLogo, `font-family: monospace`);\n\n let { template } = await inquirer\n .prompt([\n {\n type: \"list\",\n name: \"template\",\n message: \"Choose starter template kit:\",\n choices: <never>templates.map((e) => ({\n name: e.name,\n value: e.alias,\n disabled: !e.source ? \"(Unavailable at this time)\" : false,\n })),\n default: \"full\",\n when: () => !options.kit,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n let { appName, description } = await inquirer\n .prompt([\n {\n type: \"input\",\n name: \"appName\",\n message: \"What is the name of your project:\",\n default: `arkstack-${template}`,\n // default: defaultName ?? `arkstack-${template}`,\n when: () => !options.name,\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Project Description:\",\n default: `Simple ${Str.of(template).ucfirst()}.js project created with Arkstack.`,\n when: () => !options.desc,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n let { location } = await inquirer\n .prompt([\n {\n type: \"input\",\n name: \"location\",\n message: \"Installation location relative to the current dir:\",\n default: Str.slugify(options.name ?? appName ?? basename(process.cwd()), \"-\"),\n when: () => !pathName,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n /**\n * Find selected template kit\n */\n const kit = templates.find((e) => e.alias === template)!;\n\n let { install, token, pre } = await inquirer\n .prompt([\n {\n type: \"confirm\",\n name: \"pre\",\n message: `An alpha version of the ${kit.name.replace(/\\s*kit$/i, \"\").trim()} kit is available. Would you like to use it instead?`,\n default: false,\n when: () => kit.prereleaseSource && !options.pre,\n } as never,\n {\n type: \"input\",\n name: \"token\",\n message: \"Authentication token:\",\n when: () => options.kit && !options.token,\n },\n {\n type: \"confirm\",\n name: \"install\",\n message: \"Would you want to install node_modules right away:\",\n default: true,\n when: () => !options.install,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n pre = options.pre ?? pre;\n token = options.token ?? token;\n appName = options.name ?? appName;\n install = options.install ?? install;\n template = options.kit ?? template;\n location = pathName ?? location;\n description = options.description ?? description;\n\n /**\n * Validate selected kit\n */\n if (kit && !kit.source) {\n this.error(`ERROR: The ${kit.name} kit is not currently available`);\n process.exit(1);\n }\n\n const source: string = pre && kit.prereleaseSource ? kit.prereleaseSource! : kit.source;\n const selectedAlias = (kit.baseAlias ?? kit.alias).replace(/-lean$/i, \"\") as \"express\" | \"h3\";\n const actions = new Actions(join(process.cwd(), location), appName, description);\n const spinner = ora(`Loading Template...`).start();\n\n const result = await actions.download(source, install, token, options.overwrite);\n\n if (result.dir && selectedAlias) {\n await cleanDirectoryExcept(result.dir, selectedAlias);\n await hoistDirectoryContents(result.dir, join(result.dir, selectedAlias));\n }\n\n if (kit.lean) {\n spinner.info(Logger.parse([[\n \"Applying lean profile...\",\n \"green\",\n ]], \"\", false)).start();\n await actions.makeLeanProfile(selectedAlias);\n }\n\n spinner.info(Logger.parse([[\"Cleaning Up...\", \"green\"]], \"\", false)).start();\n await actions.cleanup();\n\n spinner.info(Logger.parse([[\"Initializing Project...\", \"green\"]], \"\", false)).start();\n await actions.copyExampleEnv();\n\n spinner.succeed(Logger.parse([[\"Project initialization complete!\", \"green\"]], \"\", false));\n\n await actions.complete(install);\n }\n}\n","#!/usr/bin/env node\n\nimport { CreateArkstackCommand } from \"./Commands/CreateArkstackCommand\";\nimport { Kernel } from \"@h3ravel/musket\";\n\nclass Application { }\n\nKernel.init(new Application(), {\n rootCommand: CreateArkstackCommand,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.cjs","names":["templates: {\n name: string;\n alias: 'express' | 'h3' | 'express-lean' | 'h3-lean';\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: 'express' | 'h3';\n prereleaseSource?: string;\n}[]","location?: string","appName?: string","description?: string","path","Resolver","Str","path","Command","AbortPromptError","ExitPromptError","Str","source: string","Actions","Logger","Kernel"],"sources":["../src/logo.ts","../src/templates.ts","../src/data.ts","../src/actions.ts","../src/utils.ts","../src/Commands/CreateArkstackCommand.ts","../src/run.ts"],"sourcesContent":["export const altLogo = String.raw`%c\n _ __ _ _ \n /_\\ _ __ ___/ _\\ |_ __ _ ___| | __\n //_\\\\| '__/ __\\ \\| __/ _\\ |/ __| |/ /\n/ _ \\ | | (___\\ \\ || (_| | (__| < \n\\_/ \\_/_| \\___\\__/\\__\\__,_|\\___|_|\\_\\\n \n`\n","/*\n * create-h3ravel\n *\n * (c) H3ravel Framework\n *\n * The H3ravel framework and all it's base packages are\n * open-sourced software licensed under the MIT license.\n */\n\n/**\n * List of first party templates\n */\nexport const templates: {\n name: string;\n alias: 'express' | 'h3' | 'express-lean' | 'h3-lean';\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: 'express' | 'h3';\n prereleaseSource?: string;\n}[] = [\n {\n name: 'Express Starter Kit',\n alias: 'express',\n hint: 'An Express application starter kit',\n source: 'github:arkstack-hq/arkstack',\n },\n {\n name: 'Express Lean Starter Kit',\n alias: 'express-lean',\n hint: 'A minimal Express application starter kit',\n source: 'github:arkstack-hq/arkstack',\n lean: true,\n baseAlias: 'express',\n },\n {\n name: 'H3 Starter Kit',\n alias: 'h3',\n hint: 'A H3 application starter kit',\n source: 'github:arkstack-hq/arkstack',\n },\n {\n name: 'H3 Lean Starter Kit',\n alias: 'h3-lean',\n hint: 'A minimal H3 application starter kit',\n source: 'github:arkstack-hq/arkstack',\n lean: true,\n baseAlias: 'h3',\n },\n ]","export const filesToRemove = [\n 'src/app',\n 'src/models',\n 'database',\n 'src/routes/api.ts',\n 'src/core/database.ts',\n 'prisma',\n 'prisma.config.ts',\n 'arkorm.config.ts',\n 'arkormx.config.ts',\n 'arkorm.config.js',\n 'arkormx.config.js',\n 'arkorm.config.mjs',\n 'arkormx.config.mjs',\n]\n\nexport const depsToRemove = [\n '@prisma/adapter-pg',\n '@arkstack/console',\n '@prisma/client',\n '@types/pg',\n 'pg',\n 'prisma',\n 'arkormx',\n]\n\nexport const depsToAdd = {\n '@arkstack/console-slim': '^0.1.2',\n}\n\nexport const depsList = {\n '@arkstack/common': '^0.1.4',\n '@arkstack/console': '^0.1.4',\n '@arkstack/contract': '^0.1.4',\n '@arkstack/driver-express': '^0.1.4'\n}","import { Logger, Resolver } from '@h3ravel/shared'\nimport { copyFile, readFile, rm, unlink, writeFile } from 'node:fs/promises'\nimport { depsToAdd, depsToRemove, filesToRemove } from './data'\nimport { detectPackageManager, installPackage } from '@antfu/install-pkg'\nimport path, { basename, join, relative } from 'node:path'\n\nimport { Str } from '@h3ravel/support'\nimport { chdir } from 'node:process'\nimport { depsList } from './data'\nimport { downloadTemplate } from 'giget'\nimport { existsSync } from 'node:fs'\n\nexport default class {\n skipInstallation?: boolean\n\n constructor(\n private location?: string,\n private appName?: string,\n private description?: string,\n ) {\n if (!this.location) {\n this.location = join(process.cwd(), '.temp')\n }\n }\n\n async pm () {\n return (await detectPackageManager()) ?? 'npm'\n }\n\n async runCmd (npx: boolean = false) {\n if (npx) return 'npx'\n\n const pm = await this.pm()\n\n return pm === 'npm' ? 'npm run' : pm\n }\n\n async download (template: string, install = false, auth?: string, overwrite = false) {\n if (this.location?.includes('.temp') || (overwrite && existsSync(this.location!))) {\n await rm(this.location!, { force: true, recursive: true })\n } else if (existsSync(this.location!)) {\n console.log('\\n')\n Logger.parse(\n [\n [' ERROR ', 'bgRed'],\n [this.location!, ['gray', 'italic']],\n ['is not empty.', 'white'],\n ],\n ' ',\n )\n console.log('')\n process.exit(0)\n }\n\n this.skipInstallation = !install\n this.removeLockFile()\n\n const status = await downloadTemplate(template, {\n dir: this.location,\n auth,\n install,\n provider: 'github',\n registry: await this.pm(),\n forceClean: false,\n })\n\n return status\n }\n\n async installPackage (name: string) {\n await installPackage(name, {\n cwd: this.location,\n silent: true,\n })\n }\n\n async complete (installed = false) {\n console.log('')\n\n const installPath = './' + relative(process.cwd(), this.location!)\n\n try {\n chdir(path.join(process.cwd(), installPath))\n } catch {\n /** */\n }\n\n Logger.success('Your Arkstack project has been created successfully')\n Logger.parse(\n [\n ['cd', 'cyan'],\n [installPath, 'yellow'],\n installPath === process.cwd() ? ['✔', 'green'] : ['', 'green'],\n ],\n ' ',\n )\n\n if (!installed) {\n Logger.parse([[await Resolver.getPakageInstallCommand(), 'cyan']])\n }\n\n Logger.parse(\n [\n [await this.runCmd(), 'cyan'],\n ['dev', 'yellow'],\n ],\n ' ',\n )\n Logger.parse([\n ['Open', 'cyan'],\n ['http://localhost:3000', 'yellow'],\n ])\n\n console.log('')\n\n Logger.parse([['Have any questions', 'white']])\n // Logger.parse([\n // [\"Join our Discord server -\", \"white\"],\n // [\"https://discord.gg/hsG2A8PuGb\", \"yellow\"],\n // ]);\n Logger.parse([\n ['Checkout our other projects -', 'white'],\n ['https://toneflix.net/open-source', 'yellow'],\n ])\n }\n\n async cleanup () {\n const pkgPath = join(this.location!, 'package.json')\n const pkg = await readFile(pkgPath!, 'utf-8').then(JSON.parse)\n\n delete pkg.packageManager\n delete pkg.scripts.predev\n delete pkg.scripts.prebuild\n delete pkg.scripts.precmd\n delete pkg.scripts.build\n delete pkg.scripts.dev\n\n pkg.name = Str.slugify(\n this.appName ?? basename(this.location!).replace('.', ''), '-'\n )\n\n if (this.description) {\n pkg.description = this.description\n }\n\n for (const [name, version] of Object.entries(depsList)) {\n pkg.dependencies[name] = version\n }\n\n await Promise.allSettled([\n writeFile(pkgPath, JSON.stringify(pkg, null, 2)),\n this.removeLockFile(),\n rm(join(this.location!, 'pnpm-workspace.yaml'), { force: true }),\n rm(join(this.location!, '.github'), { force: true, recursive: true }),\n ])\n }\n\n async removeLockFile () {\n if (!this.skipInstallation) {\n return\n }\n\n await Promise.allSettled([\n unlink(join(this.location!, 'package-lock.json')),\n unlink(join(this.location!, 'yarn.lock')),\n unlink(join(this.location!, 'pnpm-lock.yaml')),\n ])\n }\n\n async getBanner () {\n return await readFile(join(process.cwd(), './logo.txt'), 'utf-8')\n }\n\n async copyExampleEnv () {\n const envPath = join(this.location!, '.env')\n const exampleEnvPath = join(this.location!, '.env.example')\n\n if (existsSync(exampleEnvPath)) {\n await copyFile(exampleEnvPath, envPath)\n }\n }\n\n async makeLeanProfile (_kit: 'express' | 'h3') {\n await Promise.allSettled(\n filesToRemove.map((file) => rm(join(this.location!, file), { force: true, recursive: true })),\n )\n\n const pkgPath = join(this.location!, 'package.json')\n if (existsSync(pkgPath)) {\n const pkg = await readFile(pkgPath, 'utf-8').then(JSON.parse)\n\n for (const dep of depsToRemove) {\n delete pkg.dependencies?.[dep]\n delete pkg.devDependencies?.[dep]\n }\n\n for (const [name, version] of Object.entries(depsToAdd)) {\n pkg.dependencies[name] = version\n }\n\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2))\n }\n\n const filesToPatch = [\n 'src/core/app.ts',\n 'src/core/utils/request-handlers.ts',\n ]\n\n for (const file of filesToPatch) {\n const filePath = join(this.location!, file)\n\n if (!existsSync(filePath)) {\n continue\n }\n\n let content = await readFile(filePath, 'utf-8')\n\n content = content\n .replace('import { ModelNotFoundException } from \\'arkormx\\'\\n', '')\n .replace('import { prisma } from \\'src/core/database\\'\\n', '')\n .replace('import { Prisma } from \\'@prisma/client\\'\\n', '')\n .replace(' async shutdown () {\\n await prisma.$disconnect()\\n process.exit(0)\\n }', ' async shutdown () {\\n process.exit(0)\\n }')\n .replace(\n ' * Shuts down the application by disconnecting from the database and exiting the process.',\n ' * Shuts down the application and exits the process.',\n )\n .replace(\n /\\n\\s*if \\((?:err|cause) instanceof Prisma\\.PrismaClientKnownRequestError && (?:err|cause)\\.code === \"P2025\"\\) \\{\\n\\s*error\\.code = 404\\n\\s*error\\.message = `\\$\\{(?:err|cause)\\.meta\\?\\.modelName\\} not found!`\\n\\s*\\}\\n/g,\n '\\n',\n )\n .replace(\n /\\n\\s*if \\((?:err|cause) instanceof ModelNotFoundException\\) \\{\\n\\s*error\\.code = 404\\n\\s*error\\.message = `\\$\\{(?:err|cause)\\.getModelName\\(\\)\\} not found!`\\n\\s*\\}\\n/g,\n '\\n',\n )\n\n await writeFile(filePath, content, 'utf-8')\n }\n\n }\n}\n","import { readdir, rename, rm } from 'node:fs/promises'\n\nimport path from 'node:path'\n\n/**\n * Removes all files in dirPath except the one specified by keepFileName\n *\n * @param dirPath\n * @param keepFileName\n */\nexport async function cleanDirectoryExcept (dirPath: string, keepFileName: string) {\n const files = await readdir(dirPath)\n\n for (const file of files) {\n if (file === keepFileName) continue\n\n const fullPath = path.join(dirPath, file)\n\n await rm(fullPath, { recursive: true, force: true })\n }\n}\n\n/**\n * Moves all files from dirPath to parent directory and removes dirPath\n *\n * @param dirPath\n * @param parent\n */\nexport async function hoistDirectoryContents (parent: string, dirPath: string) {\n const source = path.isAbsolute(dirPath) ? dirPath : path.join(process.cwd(), dirPath)\n\n const targetParent = path.isAbsolute(parent) ? parent : path.join(process.cwd(), parent)\n\n if (!source.startsWith(targetParent)) {\n throw new Error('Source must be inside the parent directory')\n }\n\n const entries = await readdir(source)\n\n for (const entry of entries) {\n const from = path.join(source, entry)\n const to = path.join(targetParent, entry)\n\n await rename(from, to)\n }\n\n await rm(source, { recursive: true })\n}\n","import { Command } from '@h3ravel/musket'\nimport { altLogo } from 'src/logo'\nimport inquirer from 'inquirer'\nimport { AbortPromptError, ExitPromptError } from '@inquirer/core'\nimport { basename, join } from 'node:path'\nimport { templates } from 'src/templates'\nimport { Str } from '@h3ravel/support'\nimport Actions from 'src/actions'\nimport ora from 'ora'\nimport { Logger } from '@h3ravel/shared'\nimport { cleanDirectoryExcept, hoistDirectoryContents } from 'src/utils'\n\nexport class CreateArkstackCommand extends Command {\n protected signature = `create-arkstack\n {location?: The location where this project should be created relative to the current dir.}\n {--n|name?: The name of your project.}\n {--i|install: Install node_modules right away}\n {--t|token?: Kit repo authentication token.}\n {--d|desc?: Project Description.}\n {--k|kit?: Starter template kit.}\n {--p|pre: Download prerelease version if available.}\n {--o|overwrite: Overwrite the installation directory if it is not empty.}\n `\n protected description = 'Display a personalized greeting.'\n\n async handle () {\n const options = this.options()\n const pathName = this.argument('location')\n // const defaultName = pathName ? Str.of(pathName).afterLast(\"/\") : undefined;\n\n console.log(altLogo, 'font-family: monospace')\n\n let { template } = await inquirer\n .prompt([\n {\n type: 'list',\n name: 'template',\n message: 'Choose starter template kit:',\n choices: <never>templates.map((e) => ({\n name: e.name,\n value: e.alias,\n disabled: !e.source ? '(Unavailable at this time)' : false,\n })),\n default: 'full',\n when: () => !options.kit,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n let { appName, description } = await inquirer\n .prompt([\n {\n type: 'input',\n name: 'appName',\n message: 'What is the name of your project:',\n default: `arkstack-${template}`,\n // default: defaultName ?? `arkstack-${template}`,\n when: () => !options.name,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Project Description:',\n default: `Simple ${Str.of(template).ucfirst()}.js project created with Arkstack.`,\n when: () => !options.desc,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n let { location } = await inquirer\n .prompt([\n {\n type: 'input',\n name: 'location',\n message: 'Installation location relative to the current dir:',\n default: Str.slugify(options.name ?? appName ?? basename(process.cwd()), '-'),\n when: () => !pathName,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n /**\n * Find selected template kit\n */\n const kit = templates.find((e) => e.alias === template)!\n\n let { install, token, pre } = await inquirer\n .prompt([\n {\n type: 'confirm',\n name: 'pre',\n message: `An alpha version of the ${kit.name.replace(/\\s*kit$/i, '').trim()} kit is available. Would you like to use it instead?`,\n default: false,\n when: () => kit.prereleaseSource && !options.pre,\n } as never,\n {\n type: 'input',\n name: 'token',\n message: 'Authentication token:',\n when: () => options.kit && !options.token,\n },\n {\n type: 'confirm',\n name: 'install',\n message: 'Would you want to install node_modules right away:',\n default: true,\n when: () => !options.install,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n pre = options.pre ?? pre\n token = options.token ?? token\n appName = options.name ?? appName\n install = options.install ?? install\n template = options.kit ?? template\n location = pathName ?? location\n description = options.description ?? description\n\n /**\n * Validate selected kit\n */\n if (kit && !kit.source) {\n this.error(`ERROR: The ${kit.name} kit is not currently available`)\n process.exit(1)\n }\n\n const source: string = pre && kit.prereleaseSource ? kit.prereleaseSource! : kit.source\n const selectedAlias = (kit.baseAlias ?? kit.alias).replace(/-lean$/i, '') as 'express' | 'h3'\n const actions = new Actions(join(process.cwd(), location), appName, description)\n const spinner = ora('Loading Template...').start()\n\n const result = await actions.download(source, install, token, options.overwrite)\n\n if (result.dir && selectedAlias) {\n await cleanDirectoryExcept(result.dir, selectedAlias)\n await hoistDirectoryContents(result.dir, join(result.dir, selectedAlias))\n }\n\n if (kit.lean) {\n spinner.info(Logger.parse([[\n 'Applying lean profile...',\n 'green',\n ]], '', false)).start()\n await actions.makeLeanProfile(selectedAlias)\n }\n\n spinner.info(Logger.parse([['Cleaning Up...', 'green']], '', false)).start()\n await actions.cleanup()\n\n spinner.info(Logger.parse([['Initializing Project...', 'green']], '', false)).start()\n await actions.copyExampleEnv()\n\n spinner.succeed(Logger.parse([['Project initialization complete!', 'green']], '', false))\n\n await actions.complete(install)\n }\n}\n","#!/usr/bin/env node\n\nimport { CreateArkstackCommand } from './Commands/CreateArkstackCommand'\nimport { Kernel } from '@h3ravel/musket'\n\nclass Application { }\n\nKernel.init(new Application(), {\n rootCommand: CreateArkstackCommand,\n})\n"],"mappings":"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"}
|
package/bin/run.js
CHANGED
|
@@ -32,13 +32,13 @@ const templates = [
|
|
|
32
32
|
name: "Express Starter Kit",
|
|
33
33
|
alias: "express",
|
|
34
34
|
hint: "An Express application starter kit",
|
|
35
|
-
source: "github:
|
|
35
|
+
source: "github:arkstack-hq/arkstack"
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
name: "Express Lean Starter Kit",
|
|
39
39
|
alias: "express-lean",
|
|
40
40
|
hint: "A minimal Express application starter kit",
|
|
41
|
-
source: "github:
|
|
41
|
+
source: "github:arkstack-hq/arkstack",
|
|
42
42
|
lean: true,
|
|
43
43
|
baseAlias: "express"
|
|
44
44
|
},
|
|
@@ -46,22 +46,49 @@ const templates = [
|
|
|
46
46
|
name: "H3 Starter Kit",
|
|
47
47
|
alias: "h3",
|
|
48
48
|
hint: "A H3 application starter kit",
|
|
49
|
-
source: "github:
|
|
49
|
+
source: "github:arkstack-hq/arkstack"
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
name: "H3 Lean Starter Kit",
|
|
53
53
|
alias: "h3-lean",
|
|
54
54
|
hint: "A minimal H3 application starter kit",
|
|
55
|
-
source: "github:
|
|
55
|
+
source: "github:arkstack-hq/arkstack",
|
|
56
56
|
lean: true,
|
|
57
57
|
baseAlias: "h3"
|
|
58
58
|
}
|
|
59
59
|
];
|
|
60
|
-
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/data.ts
|
|
63
|
+
const filesToRemove = [
|
|
64
|
+
"src/app",
|
|
65
|
+
"src/models",
|
|
66
|
+
"database",
|
|
67
|
+
"src/routes/api.ts",
|
|
68
|
+
"src/core/database.ts",
|
|
69
|
+
"prisma",
|
|
70
|
+
"prisma.config.ts",
|
|
71
|
+
"arkorm.config.ts",
|
|
72
|
+
"arkormx.config.ts",
|
|
73
|
+
"arkorm.config.js",
|
|
74
|
+
"arkormx.config.js",
|
|
75
|
+
"arkorm.config.mjs",
|
|
76
|
+
"arkormx.config.mjs"
|
|
77
|
+
];
|
|
78
|
+
const depsToRemove = [
|
|
79
|
+
"@prisma/adapter-pg",
|
|
80
|
+
"@arkstack/console",
|
|
81
|
+
"@prisma/client",
|
|
82
|
+
"@types/pg",
|
|
83
|
+
"pg",
|
|
84
|
+
"prisma",
|
|
85
|
+
"arkormx"
|
|
86
|
+
];
|
|
87
|
+
const depsToAdd = { "@arkstack/console-slim": "^0.1.2" };
|
|
88
|
+
const depsList = {
|
|
61
89
|
"@arkstack/common": "^0.1.4",
|
|
62
90
|
"@arkstack/console": "^0.1.4",
|
|
63
91
|
"@arkstack/contract": "^0.1.4",
|
|
64
|
-
"@arkstack/database": "^0.1.4",
|
|
65
92
|
"@arkstack/driver-express": "^0.1.4"
|
|
66
93
|
};
|
|
67
94
|
|
|
@@ -104,6 +131,7 @@ var actions_default = class {
|
|
|
104
131
|
dir: this.location,
|
|
105
132
|
auth,
|
|
106
133
|
install,
|
|
134
|
+
provider: "github",
|
|
107
135
|
registry: await this.pm(),
|
|
108
136
|
forceClean: false
|
|
109
137
|
});
|
|
@@ -144,7 +172,7 @@ var actions_default = class {
|
|
|
144
172
|
delete pkg.scripts.dev;
|
|
145
173
|
pkg.name = Str.slugify(this.appName ?? basename(this.location).replace(".", ""), "-");
|
|
146
174
|
if (this.description) pkg.description = this.description;
|
|
147
|
-
for (const [name, version] of Object.entries(
|
|
175
|
+
for (const [name, version] of Object.entries(depsList)) pkg.dependencies[name] = version;
|
|
148
176
|
await Promise.allSettled([
|
|
149
177
|
writeFile(pkgPath, JSON.stringify(pkg, null, 2)),
|
|
150
178
|
this.removeLockFile(),
|
|
@@ -172,37 +200,25 @@ var actions_default = class {
|
|
|
172
200
|
if (existsSync(exampleEnvPath)) await copyFile(exampleEnvPath, envPath);
|
|
173
201
|
}
|
|
174
202
|
async makeLeanProfile(_kit) {
|
|
175
|
-
await Promise.allSettled(
|
|
176
|
-
"src/app",
|
|
177
|
-
"src/routes/api.ts",
|
|
178
|
-
"src/core/database.ts",
|
|
179
|
-
"prisma",
|
|
180
|
-
"prisma.config.ts"
|
|
181
|
-
].map((file) => rm(join(this.location, file), {
|
|
203
|
+
await Promise.allSettled(filesToRemove.map((file) => rm(join(this.location, file), {
|
|
182
204
|
force: true,
|
|
183
205
|
recursive: true
|
|
184
206
|
})));
|
|
185
207
|
const pkgPath = join(this.location, "package.json");
|
|
186
208
|
if (existsSync(pkgPath)) {
|
|
187
209
|
const pkg = await readFile(pkgPath, "utf-8").then(JSON.parse);
|
|
188
|
-
for (const dep of
|
|
189
|
-
"@arkstack/database",
|
|
190
|
-
"@prisma/adapter-pg",
|
|
191
|
-
"@prisma/client",
|
|
192
|
-
"pg",
|
|
193
|
-
"prisma",
|
|
194
|
-
"@types/pg"
|
|
195
|
-
]) {
|
|
210
|
+
for (const dep of depsToRemove) {
|
|
196
211
|
delete pkg.dependencies?.[dep];
|
|
197
212
|
delete pkg.devDependencies?.[dep];
|
|
198
213
|
}
|
|
214
|
+
for (const [name, version] of Object.entries(depsToAdd)) pkg.dependencies[name] = version;
|
|
199
215
|
await writeFile(pkgPath, JSON.stringify(pkg, null, 2));
|
|
200
216
|
}
|
|
201
217
|
for (const file of ["src/core/app.ts", "src/core/utils/request-handlers.ts"]) {
|
|
202
218
|
const filePath = join(this.location, file);
|
|
203
219
|
if (!existsSync(filePath)) continue;
|
|
204
220
|
let content = await readFile(filePath, "utf-8");
|
|
205
|
-
content = content.replace("import {
|
|
221
|
+
content = content.replace("import { ModelNotFoundException } from 'arkormx'\n", "").replace("import { prisma } from 'src/core/database'\n", "").replace("import { Prisma } from '@prisma/client'\n", "").replace(" async shutdown () {\n await prisma.$disconnect()\n process.exit(0)\n }", " async shutdown () {\n process.exit(0)\n }").replace(" * Shuts down the application by disconnecting from the database and exiting the process.", " * Shuts down the application and exits the process.").replace(/\n\s*if \((?:err|cause) instanceof Prisma\.PrismaClientKnownRequestError && (?:err|cause)\.code === "P2025"\) \{\n\s*error\.code = 404\n\s*error\.message = `\$\{(?:err|cause)\.meta\?\.modelName\} not found!`\n\s*\}\n/g, "\n").replace(/\n\s*if \((?:err|cause) instanceof ModelNotFoundException\) \{\n\s*error\.code = 404\n\s*error\.message = `\$\{(?:err|cause)\.getModelName\(\)\} not found!`\n\s*\}\n/g, "\n");
|
|
206
222
|
await writeFile(filePath, content, "utf-8");
|
|
207
223
|
}
|
|
208
224
|
}
|
|
@@ -258,7 +274,7 @@ var CreateArkstackCommand = class extends Command {
|
|
|
258
274
|
async handle() {
|
|
259
275
|
const options = this.options();
|
|
260
276
|
const pathName = this.argument("location");
|
|
261
|
-
console.log(altLogo,
|
|
277
|
+
console.log(altLogo, "font-family: monospace");
|
|
262
278
|
let { template } = await inquirer.prompt([{
|
|
263
279
|
type: "list",
|
|
264
280
|
name: "template",
|
|
@@ -358,7 +374,7 @@ var CreateArkstackCommand = class extends Command {
|
|
|
358
374
|
const source = pre && kit.prereleaseSource ? kit.prereleaseSource : kit.source;
|
|
359
375
|
const selectedAlias = (kit.baseAlias ?? kit.alias).replace(/-lean$/i, "");
|
|
360
376
|
const actions = new actions_default(join(process.cwd(), location), appName, description);
|
|
361
|
-
const spinner = ora(
|
|
377
|
+
const spinner = ora("Loading Template...").start();
|
|
362
378
|
const result = await actions.download(source, install, token, options.overwrite);
|
|
363
379
|
if (result.dir && selectedAlias) {
|
|
364
380
|
await cleanDirectoryExcept(result.dir, selectedAlias);
|
package/bin/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","names":["templates: {\n name: string;\n alias: \"express\" | \"h3\" | \"express-lean\" | \"h3-lean\";\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: \"express\" | \"h3\";\n prereleaseSource?: string;\n}[]","location?: string","appName?: string","description?: string","source: string","Actions"],"sources":["../src/logo.ts","../src/templates.ts","../src/actions.ts","../src/utils.ts","../src/Commands/CreateArkstackCommand.ts","../src/run.ts"],"sourcesContent":["export const altLogo = String.raw`%c\n _ __ _ _ \n /_\\ _ __ ___/ _\\ |_ __ _ ___| | __\n //_\\\\| '__/ __\\ \\| __/ _\\ |/ __| |/ /\n/ _ \\ | | (___\\ \\ || (_| | (__| < \n\\_/ \\_/_| \\___\\__/\\__\\__,_|\\___|_|\\_\\\n \n`;\n","/*\n * create-h3ravel\n *\n * (c) H3ravel Framework\n *\n * The H3ravel framework and all it's base packages are\n * open-sourced software licensed under the MIT license.\n */\n\n/**\n * List of first party templates\n */\nexport const templates: {\n name: string;\n alias: \"express\" | \"h3\" | \"express-lean\" | \"h3-lean\";\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: \"express\" | \"h3\";\n prereleaseSource?: string;\n}[] = [\n {\n name: \"Express Starter Kit\",\n alias: \"express\",\n hint: \"An Express application starter kit\",\n source: \"github:toneflix/arkstack\",\n },\n {\n name: \"Express Lean Starter Kit\",\n alias: \"express-lean\",\n hint: \"A minimal Express application starter kit\",\n source: \"github:toneflix/arkstack\",\n lean: true,\n baseAlias: \"express\",\n },\n {\n name: \"H3 Starter Kit\",\n alias: \"h3\",\n hint: \"A H3 application starter kit\",\n source: \"github:toneflix/arkstack\",\n },\n {\n name: \"H3 Lean Starter Kit\",\n alias: \"h3-lean\",\n hint: \"A minimal H3 application starter kit\",\n source: \"github:toneflix/arkstack\",\n lean: true,\n baseAlias: \"h3\",\n },\n ];\n\nexport const dependencyTemplates = {\n \"@arkstack/common\": \"^0.1.4\",\n \"@arkstack/console\": \"^0.1.4\",\n \"@arkstack/contract\": \"^0.1.4\",\n \"@arkstack/database\": \"^0.1.4\",\n \"@arkstack/driver-express\": \"^0.1.4\"\n}","import { Logger, Resolver } from \"@h3ravel/shared\";\nimport { copyFile, readFile, rm, unlink, writeFile } from \"node:fs/promises\";\nimport { detectPackageManager, installPackage } from \"@antfu/install-pkg\";\nimport path, { basename, join, relative } from \"node:path\";\n\nimport { Str } from \"@h3ravel/support\";\nimport { chdir } from \"node:process\";\nimport { dependencyTemplates } from \"./templates\";\nimport { downloadTemplate } from \"giget\";\nimport { existsSync } from \"node:fs\";\n\nexport default class {\n skipInstallation?: boolean;\n\n constructor(\n private location?: string,\n private appName?: string,\n private description?: string,\n ) {\n if (!this.location) {\n this.location = join(process.cwd(), \".temp\");\n }\n }\n\n async pm () {\n return (await detectPackageManager()) ?? \"npm\";\n }\n\n async runCmd (npx: boolean = false) {\n if (npx) return \"npx\";\n\n const pm = await this.pm();\n\n return pm === \"npm\" ? \"npm run\" : pm;\n }\n\n async download (template: string, install = false, auth?: string, overwrite = false) {\n if (this.location?.includes(\".temp\") || (overwrite && existsSync(this.location!))) {\n await rm(this.location!, { force: true, recursive: true });\n } else if (existsSync(this.location!)) {\n console.log(\"\\n\");\n Logger.parse(\n [\n [\" ERROR \", \"bgRed\"],\n [this.location!, [\"gray\", \"italic\"]],\n [\"is not empty.\", \"white\"],\n ],\n \" \",\n );\n console.log(\"\");\n process.exit(0);\n }\n\n this.skipInstallation = !install;\n this.removeLockFile();\n\n return await downloadTemplate(template, {\n dir: this.location,\n auth,\n install,\n registry: await this.pm(),\n forceClean: false,\n });\n }\n\n async installPackage (name: string) {\n await installPackage(name, {\n cwd: this.location,\n silent: true,\n });\n }\n\n async complete (installed = false) {\n console.log(\"\");\n\n const installPath = \"./\" + relative(process.cwd(), this.location!);\n\n try {\n chdir(path.join(process.cwd(), installPath));\n } catch {\n /** */\n }\n\n Logger.success(\"Your Arkstack project has been created successfully\");\n Logger.parse(\n [\n [\"cd\", \"cyan\"],\n [installPath, \"yellow\"],\n installPath === process.cwd() ? [\"✔\", \"green\"] : [\"\", \"green\"],\n ],\n \" \",\n );\n\n if (!installed) {\n Logger.parse([[await Resolver.getPakageInstallCommand(), \"cyan\"]]);\n }\n\n Logger.parse(\n [\n [await this.runCmd(), \"cyan\"],\n [\"dev\", \"yellow\"],\n ],\n \" \",\n );\n Logger.parse([\n [\"Open\", \"cyan\"],\n [\"http://localhost:3000\", \"yellow\"],\n ]);\n\n console.log(\"\");\n\n Logger.parse([[\"Have any questions\", \"white\"]]);\n // Logger.parse([\n // [\"Join our Discord server -\", \"white\"],\n // [\"https://discord.gg/hsG2A8PuGb\", \"yellow\"],\n // ]);\n Logger.parse([\n [\"Checkout our other projects -\", \"white\"],\n [\"https://toneflix.net/open-source\", \"yellow\"],\n ]);\n }\n\n async cleanup () {\n const pkgPath = join(this.location!, \"package.json\");\n const pkg = await readFile(pkgPath!, \"utf-8\").then(JSON.parse);\n\n delete pkg.packageManager;\n delete pkg.scripts.predev;\n delete pkg.scripts.prebuild;\n delete pkg.scripts.precmd;\n delete pkg.scripts.build;\n delete pkg.scripts.dev;\n\n pkg.name = Str.slugify(\n this.appName ?? basename(this.location!).replace('.', ''), '-'\n );\n\n if (this.description) {\n pkg.description = this.description;\n }\n\n for (const [name, version] of Object.entries(dependencyTemplates)) {\n pkg.dependencies[name] = version;\n }\n\n await Promise.allSettled([\n writeFile(pkgPath, JSON.stringify(pkg, null, 2)),\n this.removeLockFile(),\n rm(join(this.location!, \"pnpm-workspace.yaml\"), { force: true }),\n rm(join(this.location!, \".github\"), { force: true, recursive: true }),\n ]);\n }\n\n async removeLockFile () {\n if (!this.skipInstallation) {\n return;\n }\n\n await Promise.allSettled([\n unlink(join(this.location!, \"package-lock.json\")),\n unlink(join(this.location!, \"yarn.lock\")),\n unlink(join(this.location!, \"pnpm-lock.yaml\")),\n ]);\n }\n\n async getBanner () {\n return await readFile(join(process.cwd(), \"./logo.txt\"), \"utf-8\");\n }\n\n async copyExampleEnv () {\n const envPath = join(this.location!, \".env\");\n const exampleEnvPath = join(this.location!, \".env.example\");\n\n if (existsSync(exampleEnvPath)) {\n await copyFile(exampleEnvPath, envPath);\n }\n }\n\n async makeLeanProfile (_kit: \"express\" | \"h3\") {\n const filesToRemove = [\n \"src/app\",\n \"src/routes/api.ts\",\n \"src/core/database.ts\",\n \"prisma\",\n \"prisma.config.ts\",\n ];\n\n await Promise.allSettled(\n filesToRemove.map((file) => rm(join(this.location!, file), { force: true, recursive: true })),\n );\n\n const pkgPath = join(this.location!, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = await readFile(pkgPath, \"utf-8\").then(JSON.parse);\n const depsToRemove = [\n \"@arkstack/database\",\n \"@prisma/adapter-pg\",\n \"@prisma/client\",\n \"pg\",\n \"prisma\",\n \"@types/pg\",\n ];\n\n for (const dep of depsToRemove) {\n delete pkg.dependencies?.[dep];\n delete pkg.devDependencies?.[dep];\n }\n\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2));\n }\n\n const filesToPatch = [\n \"src/core/app.ts\",\n \"src/core/utils/request-handlers.ts\",\n ];\n\n for (const file of filesToPatch) {\n const filePath = join(this.location!, file);\n\n if (!existsSync(filePath)) {\n continue;\n }\n\n let content = await readFile(filePath, \"utf-8\");\n\n content = content\n .replace('import { prisma } from \"src/core/database\";\\n', \"\")\n .replace('import { Prisma } from \"@prisma/client\";\\n', \"\")\n .replace(\" async shutdown () {\\n await prisma.$disconnect();\\n process.exit(0);\\n }\", \" async shutdown () {\\n process.exit(0);\\n }\")\n .replace(\n \" * Shuts down the application by disconnecting from the database and exiting the process.\",\n \" * Shuts down the application and exits the process.\",\n )\n .replace(\n /\\n\\s*if \\((?:err|cause) instanceof Prisma\\.PrismaClientKnownRequestError && (?:err|cause)\\.code === \"P2025\"\\) \\{\\n\\s*error\\.code = 404;\\n\\s*error\\.message = `\\$\\{(?:err|cause)\\.meta\\?\\.modelName\\} not found!`;\\n\\s*\\}\\n/g,\n \"\\n\",\n );\n\n await writeFile(filePath, content, \"utf-8\");\n }\n\n }\n}\n","import { readdir, rename, rm } from \"node:fs/promises\";\n\nimport path from \"node:path\";\n\n/**\n * Removes all files in dirPath except the one specified by keepFileName\n *\n * @param dirPath\n * @param keepFileName\n */\nexport async function cleanDirectoryExcept (dirPath: string, keepFileName: string) {\n const files = await readdir(dirPath);\n\n for (const file of files) {\n if (file === keepFileName) continue;\n\n const fullPath = path.join(dirPath, file);\n\n await rm(fullPath, { recursive: true, force: true });\n }\n}\n\n/**\n * Moves all files from dirPath to parent directory and removes dirPath\n *\n * @param dirPath\n * @param parent\n */\nexport async function hoistDirectoryContents (parent: string, dirPath: string) {\n const source = path.isAbsolute(dirPath) ? dirPath : path.join(process.cwd(), dirPath);\n\n const targetParent = path.isAbsolute(parent) ? parent : path.join(process.cwd(), parent);\n\n if (!source.startsWith(targetParent)) {\n throw new Error(\"Source must be inside the parent directory\");\n }\n\n const entries = await readdir(source);\n\n for (const entry of entries) {\n const from = path.join(source, entry);\n const to = path.join(targetParent, entry);\n\n await rename(from, to);\n }\n\n await rm(source, { recursive: true });\n}\n","import { Command } from \"@h3ravel/musket\";\nimport { altLogo } from \"src/logo\";\nimport inquirer from \"inquirer\";\nimport { AbortPromptError, ExitPromptError } from \"@inquirer/core\";\nimport { basename, join } from \"node:path\";\nimport { templates } from \"src/templates\";\nimport { Str } from \"@h3ravel/support\";\nimport Actions from \"src/actions\";\nimport ora from \"ora\";\nimport { Logger } from \"@h3ravel/shared\";\nimport { cleanDirectoryExcept, hoistDirectoryContents } from \"src/utils\";\n\nexport class CreateArkstackCommand extends Command {\n protected signature = `create-arkstack\n {location?: The location where this project should be created relative to the current dir.}\n {--n|name?: The name of your project.}\n {--i|install: Install node_modules right away}\n {--t|token?: Kit repo authentication token.}\n {--d|desc?: Project Description.}\n {--k|kit?: Starter template kit.}\n {--p|pre: Download prerelease version if available.}\n {--o|overwrite: Overwrite the installation directory if it is not empty.}\n `;\n protected description = \"Display a personalized greeting.\";\n\n async handle () {\n const options = this.options();\n const pathName = this.argument(\"location\");\n // const defaultName = pathName ? Str.of(pathName).afterLast(\"/\") : undefined;\n\n console.log(altLogo, `font-family: monospace`);\n\n let { template } = await inquirer\n .prompt([\n {\n type: \"list\",\n name: \"template\",\n message: \"Choose starter template kit:\",\n choices: <never>templates.map((e) => ({\n name: e.name,\n value: e.alias,\n disabled: !e.source ? \"(Unavailable at this time)\" : false,\n })),\n default: \"full\",\n when: () => !options.kit,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n let { appName, description } = await inquirer\n .prompt([\n {\n type: \"input\",\n name: \"appName\",\n message: \"What is the name of your project:\",\n default: `arkstack-${template}`,\n // default: defaultName ?? `arkstack-${template}`,\n when: () => !options.name,\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Project Description:\",\n default: `Simple ${Str.of(template).ucfirst()}.js project created with Arkstack.`,\n when: () => !options.desc,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n let { location } = await inquirer\n .prompt([\n {\n type: \"input\",\n name: \"location\",\n message: \"Installation location relative to the current dir:\",\n default: Str.slugify(options.name ?? appName ?? basename(process.cwd()), \"-\"),\n when: () => !pathName,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n /**\n * Find selected template kit\n */\n const kit = templates.find((e) => e.alias === template)!;\n\n let { install, token, pre } = await inquirer\n .prompt([\n {\n type: \"confirm\",\n name: \"pre\",\n message: `An alpha version of the ${kit.name.replace(/\\s*kit$/i, \"\").trim()} kit is available. Would you like to use it instead?`,\n default: false,\n when: () => kit.prereleaseSource && !options.pre,\n } as never,\n {\n type: \"input\",\n name: \"token\",\n message: \"Authentication token:\",\n when: () => options.kit && !options.token,\n },\n {\n type: \"confirm\",\n name: \"install\",\n message: \"Would you want to install node_modules right away:\",\n default: true,\n when: () => !options.install,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info(\"Thanks for trying out our starter kit.\");\n process.exit(0);\n }\n return err;\n });\n\n pre = options.pre ?? pre;\n token = options.token ?? token;\n appName = options.name ?? appName;\n install = options.install ?? install;\n template = options.kit ?? template;\n location = pathName ?? location;\n description = options.description ?? description;\n\n /**\n * Validate selected kit\n */\n if (kit && !kit.source) {\n this.error(`ERROR: The ${kit.name} kit is not currently available`);\n process.exit(1);\n }\n\n const source: string = pre && kit.prereleaseSource ? kit.prereleaseSource! : kit.source;\n const selectedAlias = (kit.baseAlias ?? kit.alias).replace(/-lean$/i, \"\") as \"express\" | \"h3\";\n const actions = new Actions(join(process.cwd(), location), appName, description);\n const spinner = ora(`Loading Template...`).start();\n\n const result = await actions.download(source, install, token, options.overwrite);\n\n if (result.dir && selectedAlias) {\n await cleanDirectoryExcept(result.dir, selectedAlias);\n await hoistDirectoryContents(result.dir, join(result.dir, selectedAlias));\n }\n\n if (kit.lean) {\n spinner.info(Logger.parse([[\n \"Applying lean profile...\",\n \"green\",\n ]], \"\", false)).start();\n await actions.makeLeanProfile(selectedAlias);\n }\n\n spinner.info(Logger.parse([[\"Cleaning Up...\", \"green\"]], \"\", false)).start();\n await actions.cleanup();\n\n spinner.info(Logger.parse([[\"Initializing Project...\", \"green\"]], \"\", false)).start();\n await actions.copyExampleEnv();\n\n spinner.succeed(Logger.parse([[\"Project initialization complete!\", \"green\"]], \"\", false));\n\n await actions.complete(install);\n }\n}\n","#!/usr/bin/env node\n\nimport { CreateArkstackCommand } from \"./Commands/CreateArkstackCommand\";\nimport { Kernel } from \"@h3ravel/musket\";\n\nclass Application { }\n\nKernel.init(new Application(), {\n rootCommand: CreateArkstackCommand,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.js","names":["templates: {\n name: string;\n alias: 'express' | 'h3' | 'express-lean' | 'h3-lean';\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: 'express' | 'h3';\n prereleaseSource?: string;\n}[]","location?: string","appName?: string","description?: string","source: string","Actions"],"sources":["../src/logo.ts","../src/templates.ts","../src/data.ts","../src/actions.ts","../src/utils.ts","../src/Commands/CreateArkstackCommand.ts","../src/run.ts"],"sourcesContent":["export const altLogo = String.raw`%c\n _ __ _ _ \n /_\\ _ __ ___/ _\\ |_ __ _ ___| | __\n //_\\\\| '__/ __\\ \\| __/ _\\ |/ __| |/ /\n/ _ \\ | | (___\\ \\ || (_| | (__| < \n\\_/ \\_/_| \\___\\__/\\__\\__,_|\\___|_|\\_\\\n \n`\n","/*\n * create-h3ravel\n *\n * (c) H3ravel Framework\n *\n * The H3ravel framework and all it's base packages are\n * open-sourced software licensed under the MIT license.\n */\n\n/**\n * List of first party templates\n */\nexport const templates: {\n name: string;\n alias: 'express' | 'h3' | 'express-lean' | 'h3-lean';\n hint: string;\n source: string;\n lean?: boolean;\n baseAlias?: 'express' | 'h3';\n prereleaseSource?: string;\n}[] = [\n {\n name: 'Express Starter Kit',\n alias: 'express',\n hint: 'An Express application starter kit',\n source: 'github:arkstack-hq/arkstack',\n },\n {\n name: 'Express Lean Starter Kit',\n alias: 'express-lean',\n hint: 'A minimal Express application starter kit',\n source: 'github:arkstack-hq/arkstack',\n lean: true,\n baseAlias: 'express',\n },\n {\n name: 'H3 Starter Kit',\n alias: 'h3',\n hint: 'A H3 application starter kit',\n source: 'github:arkstack-hq/arkstack',\n },\n {\n name: 'H3 Lean Starter Kit',\n alias: 'h3-lean',\n hint: 'A minimal H3 application starter kit',\n source: 'github:arkstack-hq/arkstack',\n lean: true,\n baseAlias: 'h3',\n },\n ]","export const filesToRemove = [\n 'src/app',\n 'src/models',\n 'database',\n 'src/routes/api.ts',\n 'src/core/database.ts',\n 'prisma',\n 'prisma.config.ts',\n 'arkorm.config.ts',\n 'arkormx.config.ts',\n 'arkorm.config.js',\n 'arkormx.config.js',\n 'arkorm.config.mjs',\n 'arkormx.config.mjs',\n]\n\nexport const depsToRemove = [\n '@prisma/adapter-pg',\n '@arkstack/console',\n '@prisma/client',\n '@types/pg',\n 'pg',\n 'prisma',\n 'arkormx',\n]\n\nexport const depsToAdd = {\n '@arkstack/console-slim': '^0.1.2',\n}\n\nexport const depsList = {\n '@arkstack/common': '^0.1.4',\n '@arkstack/console': '^0.1.4',\n '@arkstack/contract': '^0.1.4',\n '@arkstack/driver-express': '^0.1.4'\n}","import { Logger, Resolver } from '@h3ravel/shared'\nimport { copyFile, readFile, rm, unlink, writeFile } from 'node:fs/promises'\nimport { depsToAdd, depsToRemove, filesToRemove } from './data'\nimport { detectPackageManager, installPackage } from '@antfu/install-pkg'\nimport path, { basename, join, relative } from 'node:path'\n\nimport { Str } from '@h3ravel/support'\nimport { chdir } from 'node:process'\nimport { depsList } from './data'\nimport { downloadTemplate } from 'giget'\nimport { existsSync } from 'node:fs'\n\nexport default class {\n skipInstallation?: boolean\n\n constructor(\n private location?: string,\n private appName?: string,\n private description?: string,\n ) {\n if (!this.location) {\n this.location = join(process.cwd(), '.temp')\n }\n }\n\n async pm () {\n return (await detectPackageManager()) ?? 'npm'\n }\n\n async runCmd (npx: boolean = false) {\n if (npx) return 'npx'\n\n const pm = await this.pm()\n\n return pm === 'npm' ? 'npm run' : pm\n }\n\n async download (template: string, install = false, auth?: string, overwrite = false) {\n if (this.location?.includes('.temp') || (overwrite && existsSync(this.location!))) {\n await rm(this.location!, { force: true, recursive: true })\n } else if (existsSync(this.location!)) {\n console.log('\\n')\n Logger.parse(\n [\n [' ERROR ', 'bgRed'],\n [this.location!, ['gray', 'italic']],\n ['is not empty.', 'white'],\n ],\n ' ',\n )\n console.log('')\n process.exit(0)\n }\n\n this.skipInstallation = !install\n this.removeLockFile()\n\n const status = await downloadTemplate(template, {\n dir: this.location,\n auth,\n install,\n provider: 'github',\n registry: await this.pm(),\n forceClean: false,\n })\n\n return status\n }\n\n async installPackage (name: string) {\n await installPackage(name, {\n cwd: this.location,\n silent: true,\n })\n }\n\n async complete (installed = false) {\n console.log('')\n\n const installPath = './' + relative(process.cwd(), this.location!)\n\n try {\n chdir(path.join(process.cwd(), installPath))\n } catch {\n /** */\n }\n\n Logger.success('Your Arkstack project has been created successfully')\n Logger.parse(\n [\n ['cd', 'cyan'],\n [installPath, 'yellow'],\n installPath === process.cwd() ? ['✔', 'green'] : ['', 'green'],\n ],\n ' ',\n )\n\n if (!installed) {\n Logger.parse([[await Resolver.getPakageInstallCommand(), 'cyan']])\n }\n\n Logger.parse(\n [\n [await this.runCmd(), 'cyan'],\n ['dev', 'yellow'],\n ],\n ' ',\n )\n Logger.parse([\n ['Open', 'cyan'],\n ['http://localhost:3000', 'yellow'],\n ])\n\n console.log('')\n\n Logger.parse([['Have any questions', 'white']])\n // Logger.parse([\n // [\"Join our Discord server -\", \"white\"],\n // [\"https://discord.gg/hsG2A8PuGb\", \"yellow\"],\n // ]);\n Logger.parse([\n ['Checkout our other projects -', 'white'],\n ['https://toneflix.net/open-source', 'yellow'],\n ])\n }\n\n async cleanup () {\n const pkgPath = join(this.location!, 'package.json')\n const pkg = await readFile(pkgPath!, 'utf-8').then(JSON.parse)\n\n delete pkg.packageManager\n delete pkg.scripts.predev\n delete pkg.scripts.prebuild\n delete pkg.scripts.precmd\n delete pkg.scripts.build\n delete pkg.scripts.dev\n\n pkg.name = Str.slugify(\n this.appName ?? basename(this.location!).replace('.', ''), '-'\n )\n\n if (this.description) {\n pkg.description = this.description\n }\n\n for (const [name, version] of Object.entries(depsList)) {\n pkg.dependencies[name] = version\n }\n\n await Promise.allSettled([\n writeFile(pkgPath, JSON.stringify(pkg, null, 2)),\n this.removeLockFile(),\n rm(join(this.location!, 'pnpm-workspace.yaml'), { force: true }),\n rm(join(this.location!, '.github'), { force: true, recursive: true }),\n ])\n }\n\n async removeLockFile () {\n if (!this.skipInstallation) {\n return\n }\n\n await Promise.allSettled([\n unlink(join(this.location!, 'package-lock.json')),\n unlink(join(this.location!, 'yarn.lock')),\n unlink(join(this.location!, 'pnpm-lock.yaml')),\n ])\n }\n\n async getBanner () {\n return await readFile(join(process.cwd(), './logo.txt'), 'utf-8')\n }\n\n async copyExampleEnv () {\n const envPath = join(this.location!, '.env')\n const exampleEnvPath = join(this.location!, '.env.example')\n\n if (existsSync(exampleEnvPath)) {\n await copyFile(exampleEnvPath, envPath)\n }\n }\n\n async makeLeanProfile (_kit: 'express' | 'h3') {\n await Promise.allSettled(\n filesToRemove.map((file) => rm(join(this.location!, file), { force: true, recursive: true })),\n )\n\n const pkgPath = join(this.location!, 'package.json')\n if (existsSync(pkgPath)) {\n const pkg = await readFile(pkgPath, 'utf-8').then(JSON.parse)\n\n for (const dep of depsToRemove) {\n delete pkg.dependencies?.[dep]\n delete pkg.devDependencies?.[dep]\n }\n\n for (const [name, version] of Object.entries(depsToAdd)) {\n pkg.dependencies[name] = version\n }\n\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2))\n }\n\n const filesToPatch = [\n 'src/core/app.ts',\n 'src/core/utils/request-handlers.ts',\n ]\n\n for (const file of filesToPatch) {\n const filePath = join(this.location!, file)\n\n if (!existsSync(filePath)) {\n continue\n }\n\n let content = await readFile(filePath, 'utf-8')\n\n content = content\n .replace('import { ModelNotFoundException } from \\'arkormx\\'\\n', '')\n .replace('import { prisma } from \\'src/core/database\\'\\n', '')\n .replace('import { Prisma } from \\'@prisma/client\\'\\n', '')\n .replace(' async shutdown () {\\n await prisma.$disconnect()\\n process.exit(0)\\n }', ' async shutdown () {\\n process.exit(0)\\n }')\n .replace(\n ' * Shuts down the application by disconnecting from the database and exiting the process.',\n ' * Shuts down the application and exits the process.',\n )\n .replace(\n /\\n\\s*if \\((?:err|cause) instanceof Prisma\\.PrismaClientKnownRequestError && (?:err|cause)\\.code === \"P2025\"\\) \\{\\n\\s*error\\.code = 404\\n\\s*error\\.message = `\\$\\{(?:err|cause)\\.meta\\?\\.modelName\\} not found!`\\n\\s*\\}\\n/g,\n '\\n',\n )\n .replace(\n /\\n\\s*if \\((?:err|cause) instanceof ModelNotFoundException\\) \\{\\n\\s*error\\.code = 404\\n\\s*error\\.message = `\\$\\{(?:err|cause)\\.getModelName\\(\\)\\} not found!`\\n\\s*\\}\\n/g,\n '\\n',\n )\n\n await writeFile(filePath, content, 'utf-8')\n }\n\n }\n}\n","import { readdir, rename, rm } from 'node:fs/promises'\n\nimport path from 'node:path'\n\n/**\n * Removes all files in dirPath except the one specified by keepFileName\n *\n * @param dirPath\n * @param keepFileName\n */\nexport async function cleanDirectoryExcept (dirPath: string, keepFileName: string) {\n const files = await readdir(dirPath)\n\n for (const file of files) {\n if (file === keepFileName) continue\n\n const fullPath = path.join(dirPath, file)\n\n await rm(fullPath, { recursive: true, force: true })\n }\n}\n\n/**\n * Moves all files from dirPath to parent directory and removes dirPath\n *\n * @param dirPath\n * @param parent\n */\nexport async function hoistDirectoryContents (parent: string, dirPath: string) {\n const source = path.isAbsolute(dirPath) ? dirPath : path.join(process.cwd(), dirPath)\n\n const targetParent = path.isAbsolute(parent) ? parent : path.join(process.cwd(), parent)\n\n if (!source.startsWith(targetParent)) {\n throw new Error('Source must be inside the parent directory')\n }\n\n const entries = await readdir(source)\n\n for (const entry of entries) {\n const from = path.join(source, entry)\n const to = path.join(targetParent, entry)\n\n await rename(from, to)\n }\n\n await rm(source, { recursive: true })\n}\n","import { Command } from '@h3ravel/musket'\nimport { altLogo } from 'src/logo'\nimport inquirer from 'inquirer'\nimport { AbortPromptError, ExitPromptError } from '@inquirer/core'\nimport { basename, join } from 'node:path'\nimport { templates } from 'src/templates'\nimport { Str } from '@h3ravel/support'\nimport Actions from 'src/actions'\nimport ora from 'ora'\nimport { Logger } from '@h3ravel/shared'\nimport { cleanDirectoryExcept, hoistDirectoryContents } from 'src/utils'\n\nexport class CreateArkstackCommand extends Command {\n protected signature = `create-arkstack\n {location?: The location where this project should be created relative to the current dir.}\n {--n|name?: The name of your project.}\n {--i|install: Install node_modules right away}\n {--t|token?: Kit repo authentication token.}\n {--d|desc?: Project Description.}\n {--k|kit?: Starter template kit.}\n {--p|pre: Download prerelease version if available.}\n {--o|overwrite: Overwrite the installation directory if it is not empty.}\n `\n protected description = 'Display a personalized greeting.'\n\n async handle () {\n const options = this.options()\n const pathName = this.argument('location')\n // const defaultName = pathName ? Str.of(pathName).afterLast(\"/\") : undefined;\n\n console.log(altLogo, 'font-family: monospace')\n\n let { template } = await inquirer\n .prompt([\n {\n type: 'list',\n name: 'template',\n message: 'Choose starter template kit:',\n choices: <never>templates.map((e) => ({\n name: e.name,\n value: e.alias,\n disabled: !e.source ? '(Unavailable at this time)' : false,\n })),\n default: 'full',\n when: () => !options.kit,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n let { appName, description } = await inquirer\n .prompt([\n {\n type: 'input',\n name: 'appName',\n message: 'What is the name of your project:',\n default: `arkstack-${template}`,\n // default: defaultName ?? `arkstack-${template}`,\n when: () => !options.name,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Project Description:',\n default: `Simple ${Str.of(template).ucfirst()}.js project created with Arkstack.`,\n when: () => !options.desc,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n let { location } = await inquirer\n .prompt([\n {\n type: 'input',\n name: 'location',\n message: 'Installation location relative to the current dir:',\n default: Str.slugify(options.name ?? appName ?? basename(process.cwd()), '-'),\n when: () => !pathName,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n /**\n * Find selected template kit\n */\n const kit = templates.find((e) => e.alias === template)!\n\n let { install, token, pre } = await inquirer\n .prompt([\n {\n type: 'confirm',\n name: 'pre',\n message: `An alpha version of the ${kit.name.replace(/\\s*kit$/i, '').trim()} kit is available. Would you like to use it instead?`,\n default: false,\n when: () => kit.prereleaseSource && !options.pre,\n } as never,\n {\n type: 'input',\n name: 'token',\n message: 'Authentication token:',\n when: () => options.kit && !options.token,\n },\n {\n type: 'confirm',\n name: 'install',\n message: 'Would you want to install node_modules right away:',\n default: true,\n when: () => !options.install,\n },\n ])\n .catch((err) => {\n if (err instanceof AbortPromptError || err instanceof ExitPromptError) {\n this.info('Thanks for trying out our starter kit.')\n process.exit(0)\n }\n\n return err\n })\n\n pre = options.pre ?? pre\n token = options.token ?? token\n appName = options.name ?? appName\n install = options.install ?? install\n template = options.kit ?? template\n location = pathName ?? location\n description = options.description ?? description\n\n /**\n * Validate selected kit\n */\n if (kit && !kit.source) {\n this.error(`ERROR: The ${kit.name} kit is not currently available`)\n process.exit(1)\n }\n\n const source: string = pre && kit.prereleaseSource ? kit.prereleaseSource! : kit.source\n const selectedAlias = (kit.baseAlias ?? kit.alias).replace(/-lean$/i, '') as 'express' | 'h3'\n const actions = new Actions(join(process.cwd(), location), appName, description)\n const spinner = ora('Loading Template...').start()\n\n const result = await actions.download(source, install, token, options.overwrite)\n\n if (result.dir && selectedAlias) {\n await cleanDirectoryExcept(result.dir, selectedAlias)\n await hoistDirectoryContents(result.dir, join(result.dir, selectedAlias))\n }\n\n if (kit.lean) {\n spinner.info(Logger.parse([[\n 'Applying lean profile...',\n 'green',\n ]], '', false)).start()\n await actions.makeLeanProfile(selectedAlias)\n }\n\n spinner.info(Logger.parse([['Cleaning Up...', 'green']], '', false)).start()\n await actions.cleanup()\n\n spinner.info(Logger.parse([['Initializing Project...', 'green']], '', false)).start()\n await actions.copyExampleEnv()\n\n spinner.succeed(Logger.parse([['Project initialization complete!', 'green']], '', false))\n\n await actions.complete(install)\n }\n}\n","#!/usr/bin/env node\n\nimport { CreateArkstackCommand } from './Commands/CreateArkstackCommand'\nimport { Kernel } from '@h3ravel/musket'\n\nclass Application { }\n\nKernel.init(new Application(), {\n rootCommand: CreateArkstackCommand,\n})\n"],"mappings":"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"}
|
package/package.json
CHANGED