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 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:toneflix/arkstack"
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:toneflix/arkstack",
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:toneflix/arkstack"
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:toneflix/arkstack",
90
+ source: "github:arkstack-hq/arkstack",
91
91
  lean: true,
92
92
  baseAlias: "h3"
93
93
  }
94
94
  ];
95
- const dependencyTemplates = {
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(dependencyTemplates)) pkg.dependencies[name] = version;
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 { 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");
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, `font-family: monospace`);
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)(`Loading Template...`).start();
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:toneflix/arkstack"
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:toneflix/arkstack",
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:toneflix/arkstack"
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:toneflix/arkstack",
55
+ source: "github:arkstack-hq/arkstack",
56
56
  lean: true,
57
57
  baseAlias: "h3"
58
58
  }
59
59
  ];
60
- const dependencyTemplates = {
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(dependencyTemplates)) pkg.dependencies[name] = version;
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 { 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");
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, `font-family: monospace`);
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(`Loading Template...`).start();
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-arkstack",
3
3
  "type": "module",
4
- "version": "0.1.1",
4
+ "version": "0.1.3",
5
5
  "description": "Scaffold new H3.js or Express.js applications using Toneflix's arkstack templates and starter kits",
6
6
  "repository": {
7
7
  "type": "git",