create-warlock 4.0.41 → 4.0.42
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/cjs/index.js +1 -0
- package/cjs/index.js.map +1 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/package.json +1 -1
package/cjs/index.js
CHANGED
|
@@ -127,6 +127,7 @@ function runCommand(cmd, args, cwd) {
|
|
|
127
127
|
var import_meta = {};
|
|
128
128
|
var __filename$1 = url.fileURLToPath(import_meta.url);
|
|
129
129
|
var __dirname$1 = path__namespace.default.dirname(__filename$1);
|
|
130
|
+
console.log("Executing from", __dirname$1);
|
|
130
131
|
function template(templateName) {
|
|
131
132
|
return path__namespace.default.resolve(__dirname$1, "../", "../", "templates", templateName);
|
|
132
133
|
}
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/helpers/exec.ts","../../../../../../warlock.js/create-warlock/src/helpers/paths.ts","../../../../../../warlock.js/create-warlock/src/helpers/package-manager.ts","../../../../../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts","../../../../../../warlock.js/create-warlock/src/helpers/app.ts","../../../../../../warlock.js/create-warlock/src/commands/create-warlock-app/index.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/get-app-path.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/index.ts","../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["resolve","spawn","log","colors","__filename","fileURLToPath","__dirname","path","detectPackageManager","outro","copyDirectory","fileExists","copyFile","renameFile","getFile","putFile","getJsonFile","putJsonFile","confirm","rimraf","spinner","path4","isDirectory","intro","text","isCancel","cancel","select"],"mappings":"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","file":"index.js","sourcesContent":["import { log } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { ChildProcess } from \"child_process\";\r\nimport { default as childProcess, default as spawn } from \"cross-spawn\";\r\n\r\nexport default async function exec(command: string, options: any = {}) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n\r\n const commandOutput = childProcess.sync(commandName, optionsList, options);\r\n\r\n // it means command didn't end as expected, then stop the rest of the program\r\n if (commandOutput.error !== null) {\r\n process.exit(1);\r\n }\r\n\r\n return commandOutput;\r\n}\r\n\r\n/**\r\n * This function directly executes a command\r\n */\r\nexport async function executeCommand(cmd: string, args: string[], cwd: string) {\r\n return new Promise<boolean>(resolve => {\r\n const child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function runCommand(cmd: string, args: string[], cwd: string) {\r\n let child: ChildProcess;\r\n\r\n const install = new Promise<boolean>(resolve => {\r\n try {\r\n child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } catch (e) {\r\n resolve(false);\r\n }\r\n });\r\n\r\n const abort = async () => {\r\n if (child) {\r\n child.kill(\"SIGINT\");\r\n }\r\n };\r\n\r\n return { abort, install };\r\n}\r\n","import path from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\n\r\nconst __dirname = path.dirname(__filename);\r\n\r\nexport type Template = \"warlock\";\r\n\r\nexport function template(templateName: Template): string {\r\n return path.resolve(__dirname, \"../\", \"../\", \"templates\", templateName);\r\n}\r\n\r\nexport function packageRoot(...paths: string[]): string {\r\n return path.resolve(__dirname, \"../\", \"../\", ...paths);\r\n}\r\n","import detectPackageManager from \"which-pm-runs\";\r\n\r\nlet detectedPackageManager: string | undefined;\r\n\r\nexport function getPackageManager() {\r\n if (detectedPackageManager) {\r\n return detectedPackageManager;\r\n }\r\n\r\n const packageManager = detectPackageManager();\r\n\r\n return packageManager.name || \"npm\";\r\n}\r\n\r\nexport function setPackageManager(packageManager: string) {\r\n detectedPackageManager = packageManager;\r\n}\r\n\r\nexport function installCommand() {\r\n return `${getPackageManager()} install`;\r\n}\r\n\r\nexport function startCommand() {\r\n if (getPackageManager() === \"npm\") return \"npm run dev\";\r\n\r\n return `${getPackageManager()} dev`;\r\n}\r\n\r\nexport function runPackageManagerCommand(command: string) {\r\n const packageManager = getPackageManager();\r\n\r\n if (packageManager === \"npm\") return `npm run ${command}`;\r\n\r\n return `${packageManager} ${command}`;\r\n}\r\n","import { outro } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport {\r\n copyDirectory,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { executeCommand } from \"./exec\";\r\nimport { startCommand } from \"./package-manager\";\r\nimport { Template, template } from \"./paths\";\r\n\r\nexport async function initializeGitRepository(appPath: string) {\r\n // initialize git repository\r\n await executeCommand(`git`, [\"init\"], appPath);\r\n // switching to `main` branch\r\n await executeCommand(`git`, [\"checkout\", \"-b\", \"main\"], appPath);\r\n\r\n // add files\r\n await executeCommand(`git`, [\"add\", \".\"], appPath);\r\n\r\n // commit files\r\n await executeCommand(`git`, [\"commit\", \"-m\", \"Initial commit ⚡️\"], appPath);\r\n\r\n return true;\r\n}\r\n\r\nexport async function updateEnvFile(appPath: string, appName: string) {\r\n // update package.json file\r\n const packageJson: any = getJsonFile(path.resolve(appPath, \"package.json\"));\r\n\r\n packageJson.name = appName;\r\n\r\n putJsonFile(path.resolve(appPath, \"package.json\"), packageJson);\r\n\r\n // update env file\r\n const dotEnv = getFile(path.resolve(appPath, \".env\"))\r\n .replace(\"AppName\", appName)\r\n .replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env\"), dotEnv);\r\n\r\n // update .env.production file\r\n let dotEnvProduction = getFile(path.resolve(appPath, \".env.shared\"));\r\n\r\n dotEnvProduction = dotEnvProduction.replace(\"AppName\", appName).replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env.shared\"), dotEnvProduction);\r\n}\r\n\r\nexport async function copyTemplateFiles(\r\n templateName: Template,\r\n appPath: string,\r\n _appName: string,\r\n) {\r\n // copy project files\r\n copyDirectory(template(templateName), appPath);\r\n\r\n // replace _.gitignore to\r\n renameFile(\r\n path.resolve(appPath, \"_.gitignore\"),\r\n path.resolve(appPath, \".gitignore\"),\r\n );\r\n}\r\n\r\nexport async function allDone(appName: string) {\r\n outro(\r\n \"🌟 Awesome! Your project is ready to rock! \" +\r\n \"Run the following command to start development:\",\r\n );\r\n\r\n console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));\r\n\r\n console.log();\r\n\r\n console.log(\r\n `💡 Pro tip: Install the ${colors.yellow(\r\n \"Generator Z\",\r\n )} extension in VSCode for helpful code snippets and productivity boosters! 🚀`,\r\n );\r\n}\r\n","import {\r\n copyDirectory,\r\n copyFile,\r\n fileExists,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { Application } from \"src/commands/create-new-app/types\";\r\nimport { executeCommand, runCommand } from \"src/helpers/exec\";\r\nimport { Template, template } from \"src/helpers/paths\";\r\nimport {\r\n allDone,\r\n initializeGitRepository,\r\n} from \"src/helpers/project-builder-helpers\";\r\nimport { getPackageManager } from \"./package-manager\";\r\n\r\nexport class App {\r\n /**\r\n * Resolved files\r\n */\r\n protected files: Record<string, FileManager> = {};\r\n\r\n public isInstalled = false;\r\n\r\n public constructor(protected app: Application) {}\r\n\r\n public use(templateName: Template) {\r\n copyDirectory(template(templateName), this.path);\r\n\r\n if (fileExists(this.path + \"/.env.example\")) {\r\n copyFile(this.path + \"/.env.example\", this.path + \"/.env\");\r\n }\r\n\r\n renameFile(this.path + \"/_.gitignore\", this.path + \"/.gitignore\");\r\n\r\n return this;\r\n }\r\n\r\n public init() {\r\n return this;\r\n }\r\n\r\n public terminate() {\r\n allDone(this.name);\r\n }\r\n\r\n public install() {\r\n return runCommand(getPackageManager(), [\"install\"], this.path);\r\n }\r\n\r\n public async exec(command: string) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n return await executeCommand(commandName, optionsList, this.path);\r\n }\r\n\r\n public async git() {\r\n return await initializeGitRepository(this.path);\r\n }\r\n\r\n public updatePackageJson() {\r\n this.package\r\n .replace(\"name\", this.name.replaceAll(\"/\", \"-\"))\r\n .replaceAll(\"yarn\", getPackageManager())\r\n .save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get package json file\r\n */\r\n public get package() {\r\n return this.json(\"package.json\");\r\n }\r\n\r\n public updateDotEnv() {\r\n this.file(\".env\").replaceAll(\"appName\", this.name).save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get env file to update\r\n */\r\n public get env() {\r\n return this.file(\".env\");\r\n }\r\n\r\n public get name() {\r\n return this.app.appName;\r\n }\r\n\r\n public get path() {\r\n return this.app.appPath;\r\n }\r\n\r\n public file(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = file(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n\r\n public json(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = jsonFile(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n}\r\n\r\nexport function app(app: Application) {\r\n return new App(app);\r\n}\r\n\r\nexport class FileManager {\r\n public content!: string;\r\n public constructor(protected filePath) {\r\n this.parseContent();\r\n }\r\n\r\n protected parseContent() {\r\n this.content = getFile(this.filePath) as string;\r\n }\r\n\r\n public replace(search: string, replace: string) {\r\n this.content = this.content.replace(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(search: string, replace: string) {\r\n this.content = this.content.replaceAll(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public save() {\r\n putFile(this.filePath, this.content);\r\n }\r\n}\r\n\r\nexport class JsonFileManager extends FileManager {\r\n protected parseContent() {\r\n this.content = getJsonFile(this.filePath);\r\n }\r\n\r\n public save() {\r\n putJsonFile(this.filePath, this.content);\r\n }\r\n\r\n public has(key: string) {\r\n return this.content[key] !== undefined;\r\n }\r\n\r\n public replace(key: string, value: any) {\r\n this.content[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(key: string, value: any) {\r\n const contentAsString = JSON.stringify(this.content);\r\n\r\n this.content = JSON.parse(contentAsString.replaceAll(key, value));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function file(path: string) {\r\n return new FileManager(path);\r\n}\r\n\r\nexport function jsonFile(path: string) {\r\n return new JsonFileManager(path);\r\n}\r\n","import { confirm, spinner } from \"@clack/prompts\";\r\nimport path from \"path\";\r\nimport { rimraf } from \"rimraf\";\r\nimport { App } from \"src/helpers/app\";\r\nimport { runPackageManagerCommand } from \"../../helpers/package-manager\";\r\n\r\nexport async function createWarlockApp(application: App) {\r\n // Initialize the basic app structure\r\n application.init().use(\"warlock\").updatePackageJson().updateDotEnv();\r\n\r\n // Start the installation process in background immediately\r\n const installProcess = application.install();\r\n\r\n // Collect all answers first\r\n const installDeps =\r\n (await confirm({\r\n message: \"Do you want to install dependencies?\",\r\n })) === true;\r\n\r\n // If user doesn't want to install dependencies, abort the background process\r\n if (!installDeps) {\r\n installProcess.abort();\r\n\r\n // Remove node_modules Asynchronously\r\n const nodeModulesPath = path.join(application.path, \"node_modules\");\r\n\r\n rimraf(nodeModulesPath);\r\n }\r\n\r\n const useGit =\r\n (await confirm({\r\n message: \"Do you want to initialize Git repository?\",\r\n })) === true;\r\n\r\n // Only ask about JWT if dependencies will be installed\r\n let useJWT = false;\r\n if (installDeps) {\r\n useJWT =\r\n (await confirm({\r\n message: \"Do you want to generate JWT Secret key?\",\r\n })) === true;\r\n }\r\n\r\n // Now execute all confirmed tasks\r\n\r\n // Handle Git initialization first if requested\r\n if (useGit) {\r\n const loading = spinner();\r\n loading.start(\"📂 Initializing Git repository...\");\r\n await application.git();\r\n loading.stop(\"📂 Git repository initialized ✅\");\r\n }\r\n\r\n // Wait for dependencies installation if it was requested\r\n if (installDeps) {\r\n const loading = spinner();\r\n loading.start(\"📦 Installing dependencies...\");\r\n await installProcess.install;\r\n loading.stop(\"📦 Dependencies installed successfully!\");\r\n\r\n // Generate JWT if requested\r\n if (useJWT) {\r\n const jwtLoading = spinner();\r\n jwtLoading.start(\"🔑 Generating JWT Secret...\");\r\n await application.exec(runPackageManagerCommand(\"jwt\"));\r\n jwtLoading.stop(\"🔑 JWT Secret generated 🔒\");\r\n }\r\n }\r\n\r\n application.terminate();\r\n}\r\n","import { colors } from \"@mongez/copper\";\r\nimport { isDirectory } from \"@mongez/fs\";\r\nimport * as path from \"path\";\r\n\r\nexport default function getAppPath(appName: string) {\r\n const appPath: string = path.resolve(process.cwd(), appName);\r\n\r\n if (isDirectory(appPath)) {\r\n console.log(\r\n colors.redBright(\r\n `${process.cwd()} has an existing directory \\`${colors.cyan(\r\n appName,\r\n )}\\`, please choose another app name or another directory to run the command from.`,\r\n ),\r\n );\r\n\r\n process.exit(1);\r\n }\r\n\r\n return appPath;\r\n}\r\n","import { cancel, intro, isCancel, select, text } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { App } from \"../../helpers/app\";\r\nimport {\r\n getPackageManager,\r\n setPackageManager,\r\n} from \"../../helpers/package-manager\";\r\nimport { createWarlockApp } from \"../create-warlock-app\";\r\nimport getAppPath from \"./get-app-path\";\r\nimport { App as AppType } from \"./types\";\r\n\r\nconst appDetails: Required<AppType> = {\r\n appName: \"\",\r\n appType: \"\",\r\n appPath: \"\",\r\n pkgManager: \"\",\r\n options: {},\r\n};\r\n\r\nexport default async function createNewApp(createWarlockVersion: string) {\r\n intro(\r\n `✨ Let's create a new ${colors.yellowBright(\"Warlock Js App\")} ✨ ${colors.greenBright(`v` + createWarlockVersion)}`,\r\n );\r\n\r\n const appName = await text({\r\n message: \"Enter the app name\",\r\n placeholder: \"warlock-app\",\r\n });\r\n\r\n if (isCancel(appName) || !appName.trim()) {\r\n cancel(\"Application name is required to create a new app\");\r\n process.exit(0);\r\n }\r\n\r\n // Validate the nodejs version to be not less than 20\r\n const [major] = process.versions.node.split(\".\").map(Number);\r\n\r\n if (major < 20) {\r\n cancel(\"Node.js version must be at least 20.0.0\");\r\n process.exit(0);\r\n }\r\n\r\n const packageManager = await select({\r\n message: \"Select package manager to use 📦 \",\r\n initialValue: getPackageManager(),\r\n options: [\r\n {\r\n label: \"Npm\",\r\n value: \"npm\",\r\n },\r\n {\r\n label: \"Yarn\",\r\n value: \"yarn\",\r\n },\r\n {\r\n label: \"Pnpm\",\r\n value: \"pnpm\",\r\n },\r\n ],\r\n });\r\n\r\n setPackageManager(packageManager);\r\n\r\n appDetails.appName = appName;\r\n appDetails.appPath = getAppPath(appName);\r\n appDetails.pkgManager = packageManager;\r\n\r\n if (!appDetails.appPath) return;\r\n\r\n appDetails.appType = \"warlock\";\r\n\r\n createWarlockApp(new App(appDetails));\r\n}\r\n","import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/helpers/exec.ts","../../../../../../warlock.js/create-warlock/src/helpers/paths.ts","../../../../../../warlock.js/create-warlock/src/helpers/package-manager.ts","../../../../../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts","../../../../../../warlock.js/create-warlock/src/helpers/app.ts","../../../../../../warlock.js/create-warlock/src/commands/create-warlock-app/index.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/get-app-path.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/index.ts","../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["resolve","spawn","log","colors","__filename","fileURLToPath","__dirname","path","detectPackageManager","outro","copyDirectory","fileExists","copyFile","renameFile","getFile","putFile","getJsonFile","putJsonFile","confirm","rimraf","spinner","path4","isDirectory","intro","text","isCancel","cancel","select"],"mappings":"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","file":"index.js","sourcesContent":["import { log } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { ChildProcess } from \"child_process\";\r\nimport { default as childProcess, default as spawn } from \"cross-spawn\";\r\n\r\nexport default async function exec(command: string, options: any = {}) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n\r\n const commandOutput = childProcess.sync(commandName, optionsList, options);\r\n\r\n // it means command didn't end as expected, then stop the rest of the program\r\n if (commandOutput.error !== null) {\r\n process.exit(1);\r\n }\r\n\r\n return commandOutput;\r\n}\r\n\r\n/**\r\n * This function directly executes a command\r\n */\r\nexport async function executeCommand(cmd: string, args: string[], cwd: string) {\r\n return new Promise<boolean>(resolve => {\r\n const child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function runCommand(cmd: string, args: string[], cwd: string) {\r\n let child: ChildProcess;\r\n\r\n const install = new Promise<boolean>(resolve => {\r\n try {\r\n child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } catch (e) {\r\n resolve(false);\r\n }\r\n });\r\n\r\n const abort = async () => {\r\n if (child) {\r\n child.kill(\"SIGINT\");\r\n }\r\n };\r\n\r\n return { abort, install };\r\n}\r\n","import path from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\n\r\nconst __dirname = path.dirname(__filename);\r\n\r\nconsole.log(\"Executing from\", __dirname);\r\n\r\nexport type Template = \"warlock\";\r\n\r\nexport function template(templateName: Template): string {\r\n return path.resolve(__dirname, \"../\", \"../\", \"templates\", templateName);\r\n}\r\n\r\nexport function packageRoot(...paths: string[]): string {\r\n return path.resolve(__dirname, \"../\", \"../\", ...paths);\r\n}\r\n","import detectPackageManager from \"which-pm-runs\";\r\n\r\nlet detectedPackageManager: string | undefined;\r\n\r\nexport function getPackageManager() {\r\n if (detectedPackageManager) {\r\n return detectedPackageManager;\r\n }\r\n\r\n const packageManager = detectPackageManager();\r\n\r\n return packageManager.name || \"npm\";\r\n}\r\n\r\nexport function setPackageManager(packageManager: string) {\r\n detectedPackageManager = packageManager;\r\n}\r\n\r\nexport function installCommand() {\r\n return `${getPackageManager()} install`;\r\n}\r\n\r\nexport function startCommand() {\r\n if (getPackageManager() === \"npm\") return \"npm run dev\";\r\n\r\n return `${getPackageManager()} dev`;\r\n}\r\n\r\nexport function runPackageManagerCommand(command: string) {\r\n const packageManager = getPackageManager();\r\n\r\n if (packageManager === \"npm\") return `npm run ${command}`;\r\n\r\n return `${packageManager} ${command}`;\r\n}\r\n","import { outro } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport {\r\n copyDirectory,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { executeCommand } from \"./exec\";\r\nimport { startCommand } from \"./package-manager\";\r\nimport { Template, template } from \"./paths\";\r\n\r\nexport async function initializeGitRepository(appPath: string) {\r\n // initialize git repository\r\n await executeCommand(`git`, [\"init\"], appPath);\r\n // switching to `main` branch\r\n await executeCommand(`git`, [\"checkout\", \"-b\", \"main\"], appPath);\r\n\r\n // add files\r\n await executeCommand(`git`, [\"add\", \".\"], appPath);\r\n\r\n // commit files\r\n await executeCommand(`git`, [\"commit\", \"-m\", \"Initial commit ⚡️\"], appPath);\r\n\r\n return true;\r\n}\r\n\r\nexport async function updateEnvFile(appPath: string, appName: string) {\r\n // update package.json file\r\n const packageJson: any = getJsonFile(path.resolve(appPath, \"package.json\"));\r\n\r\n packageJson.name = appName;\r\n\r\n putJsonFile(path.resolve(appPath, \"package.json\"), packageJson);\r\n\r\n // update env file\r\n const dotEnv = getFile(path.resolve(appPath, \".env\"))\r\n .replace(\"AppName\", appName)\r\n .replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env\"), dotEnv);\r\n\r\n // update .env.production file\r\n let dotEnvProduction = getFile(path.resolve(appPath, \".env.shared\"));\r\n\r\n dotEnvProduction = dotEnvProduction.replace(\"AppName\", appName).replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env.shared\"), dotEnvProduction);\r\n}\r\n\r\nexport async function copyTemplateFiles(\r\n templateName: Template,\r\n appPath: string,\r\n _appName: string,\r\n) {\r\n // copy project files\r\n copyDirectory(template(templateName), appPath);\r\n\r\n // replace _.gitignore to\r\n renameFile(\r\n path.resolve(appPath, \"_.gitignore\"),\r\n path.resolve(appPath, \".gitignore\"),\r\n );\r\n}\r\n\r\nexport async function allDone(appName: string) {\r\n outro(\r\n \"🌟 Awesome! Your project is ready to rock! \" +\r\n \"Run the following command to start development:\",\r\n );\r\n\r\n console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));\r\n\r\n console.log();\r\n\r\n console.log(\r\n `💡 Pro tip: Install the ${colors.yellow(\r\n \"Generator Z\",\r\n )} extension in VSCode for helpful code snippets and productivity boosters! 🚀`,\r\n );\r\n}\r\n","import {\r\n copyDirectory,\r\n copyFile,\r\n fileExists,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { Application } from \"src/commands/create-new-app/types\";\r\nimport { executeCommand, runCommand } from \"src/helpers/exec\";\r\nimport { Template, template } from \"src/helpers/paths\";\r\nimport {\r\n allDone,\r\n initializeGitRepository,\r\n} from \"src/helpers/project-builder-helpers\";\r\nimport { getPackageManager } from \"./package-manager\";\r\n\r\nexport class App {\r\n /**\r\n * Resolved files\r\n */\r\n protected files: Record<string, FileManager> = {};\r\n\r\n public isInstalled = false;\r\n\r\n public constructor(protected app: Application) {}\r\n\r\n public use(templateName: Template) {\r\n copyDirectory(template(templateName), this.path);\r\n\r\n if (fileExists(this.path + \"/.env.example\")) {\r\n copyFile(this.path + \"/.env.example\", this.path + \"/.env\");\r\n }\r\n\r\n renameFile(this.path + \"/_.gitignore\", this.path + \"/.gitignore\");\r\n\r\n return this;\r\n }\r\n\r\n public init() {\r\n return this;\r\n }\r\n\r\n public terminate() {\r\n allDone(this.name);\r\n }\r\n\r\n public install() {\r\n return runCommand(getPackageManager(), [\"install\"], this.path);\r\n }\r\n\r\n public async exec(command: string) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n return await executeCommand(commandName, optionsList, this.path);\r\n }\r\n\r\n public async git() {\r\n return await initializeGitRepository(this.path);\r\n }\r\n\r\n public updatePackageJson() {\r\n this.package\r\n .replace(\"name\", this.name.replaceAll(\"/\", \"-\"))\r\n .replaceAll(\"yarn\", getPackageManager())\r\n .save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get package json file\r\n */\r\n public get package() {\r\n return this.json(\"package.json\");\r\n }\r\n\r\n public updateDotEnv() {\r\n this.file(\".env\").replaceAll(\"appName\", this.name).save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get env file to update\r\n */\r\n public get env() {\r\n return this.file(\".env\");\r\n }\r\n\r\n public get name() {\r\n return this.app.appName;\r\n }\r\n\r\n public get path() {\r\n return this.app.appPath;\r\n }\r\n\r\n public file(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = file(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n\r\n public json(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = jsonFile(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n}\r\n\r\nexport function app(app: Application) {\r\n return new App(app);\r\n}\r\n\r\nexport class FileManager {\r\n public content!: string;\r\n public constructor(protected filePath) {\r\n this.parseContent();\r\n }\r\n\r\n protected parseContent() {\r\n this.content = getFile(this.filePath) as string;\r\n }\r\n\r\n public replace(search: string, replace: string) {\r\n this.content = this.content.replace(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(search: string, replace: string) {\r\n this.content = this.content.replaceAll(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public save() {\r\n putFile(this.filePath, this.content);\r\n }\r\n}\r\n\r\nexport class JsonFileManager extends FileManager {\r\n protected parseContent() {\r\n this.content = getJsonFile(this.filePath);\r\n }\r\n\r\n public save() {\r\n putJsonFile(this.filePath, this.content);\r\n }\r\n\r\n public has(key: string) {\r\n return this.content[key] !== undefined;\r\n }\r\n\r\n public replace(key: string, value: any) {\r\n this.content[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(key: string, value: any) {\r\n const contentAsString = JSON.stringify(this.content);\r\n\r\n this.content = JSON.parse(contentAsString.replaceAll(key, value));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function file(path: string) {\r\n return new FileManager(path);\r\n}\r\n\r\nexport function jsonFile(path: string) {\r\n return new JsonFileManager(path);\r\n}\r\n","import { confirm, spinner } from \"@clack/prompts\";\r\nimport path from \"path\";\r\nimport { rimraf } from \"rimraf\";\r\nimport { App } from \"src/helpers/app\";\r\nimport { runPackageManagerCommand } from \"../../helpers/package-manager\";\r\n\r\nexport async function createWarlockApp(application: App) {\r\n // Initialize the basic app structure\r\n application.init().use(\"warlock\").updatePackageJson().updateDotEnv();\r\n\r\n // Start the installation process in background immediately\r\n const installProcess = application.install();\r\n\r\n // Collect all answers first\r\n const installDeps =\r\n (await confirm({\r\n message: \"Do you want to install dependencies?\",\r\n })) === true;\r\n\r\n // If user doesn't want to install dependencies, abort the background process\r\n if (!installDeps) {\r\n installProcess.abort();\r\n\r\n // Remove node_modules Asynchronously\r\n const nodeModulesPath = path.join(application.path, \"node_modules\");\r\n\r\n rimraf(nodeModulesPath);\r\n }\r\n\r\n const useGit =\r\n (await confirm({\r\n message: \"Do you want to initialize Git repository?\",\r\n })) === true;\r\n\r\n // Only ask about JWT if dependencies will be installed\r\n let useJWT = false;\r\n if (installDeps) {\r\n useJWT =\r\n (await confirm({\r\n message: \"Do you want to generate JWT Secret key?\",\r\n })) === true;\r\n }\r\n\r\n // Now execute all confirmed tasks\r\n\r\n // Handle Git initialization first if requested\r\n if (useGit) {\r\n const loading = spinner();\r\n loading.start(\"📂 Initializing Git repository...\");\r\n await application.git();\r\n loading.stop(\"📂 Git repository initialized ✅\");\r\n }\r\n\r\n // Wait for dependencies installation if it was requested\r\n if (installDeps) {\r\n const loading = spinner();\r\n loading.start(\"📦 Installing dependencies...\");\r\n await installProcess.install;\r\n loading.stop(\"📦 Dependencies installed successfully!\");\r\n\r\n // Generate JWT if requested\r\n if (useJWT) {\r\n const jwtLoading = spinner();\r\n jwtLoading.start(\"🔑 Generating JWT Secret...\");\r\n await application.exec(runPackageManagerCommand(\"jwt\"));\r\n jwtLoading.stop(\"🔑 JWT Secret generated 🔒\");\r\n }\r\n }\r\n\r\n application.terminate();\r\n}\r\n","import { colors } from \"@mongez/copper\";\r\nimport { isDirectory } from \"@mongez/fs\";\r\nimport * as path from \"path\";\r\n\r\nexport default function getAppPath(appName: string) {\r\n const appPath: string = path.resolve(process.cwd(), appName);\r\n\r\n if (isDirectory(appPath)) {\r\n console.log(\r\n colors.redBright(\r\n `${process.cwd()} has an existing directory \\`${colors.cyan(\r\n appName,\r\n )}\\`, please choose another app name or another directory to run the command from.`,\r\n ),\r\n );\r\n\r\n process.exit(1);\r\n }\r\n\r\n return appPath;\r\n}\r\n","import { cancel, intro, isCancel, select, text } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { App } from \"../../helpers/app\";\r\nimport {\r\n getPackageManager,\r\n setPackageManager,\r\n} from \"../../helpers/package-manager\";\r\nimport { createWarlockApp } from \"../create-warlock-app\";\r\nimport getAppPath from \"./get-app-path\";\r\nimport { App as AppType } from \"./types\";\r\n\r\nconst appDetails: Required<AppType> = {\r\n appName: \"\",\r\n appType: \"\",\r\n appPath: \"\",\r\n pkgManager: \"\",\r\n options: {},\r\n};\r\n\r\nexport default async function createNewApp(createWarlockVersion: string) {\r\n intro(\r\n `✨ Let's create a new ${colors.yellowBright(\"Warlock Js App\")} ✨ ${colors.greenBright(`v` + createWarlockVersion)}`,\r\n );\r\n\r\n const appName = await text({\r\n message: \"Enter the app name\",\r\n placeholder: \"warlock-app\",\r\n });\r\n\r\n if (isCancel(appName) || !appName.trim()) {\r\n cancel(\"Application name is required to create a new app\");\r\n process.exit(0);\r\n }\r\n\r\n // Validate the nodejs version to be not less than 20\r\n const [major] = process.versions.node.split(\".\").map(Number);\r\n\r\n if (major < 20) {\r\n cancel(\"Node.js version must be at least 20.0.0\");\r\n process.exit(0);\r\n }\r\n\r\n const packageManager = await select({\r\n message: \"Select package manager to use 📦 \",\r\n initialValue: getPackageManager(),\r\n options: [\r\n {\r\n label: \"Npm\",\r\n value: \"npm\",\r\n },\r\n {\r\n label: \"Yarn\",\r\n value: \"yarn\",\r\n },\r\n {\r\n label: \"Pnpm\",\r\n value: \"pnpm\",\r\n },\r\n ],\r\n });\r\n\r\n setPackageManager(packageManager);\r\n\r\n appDetails.appName = appName;\r\n appDetails.appPath = getAppPath(appName);\r\n appDetails.pkgManager = packageManager;\r\n\r\n if (!appDetails.appPath) return;\r\n\r\n appDetails.appType = \"warlock\";\r\n\r\n createWarlockApp(new App(appDetails));\r\n}\r\n","import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|
package/esm/index.js
CHANGED
|
@@ -80,6 +80,7 @@ function runCommand(cmd, args, cwd) {
|
|
|
80
80
|
}
|
|
81
81
|
var __filename$1 = fileURLToPath(import.meta.url);
|
|
82
82
|
var __dirname$1 = path__default.dirname(__filename$1);
|
|
83
|
+
console.log("Executing from", __dirname$1);
|
|
83
84
|
function template(templateName) {
|
|
84
85
|
return path__default.resolve(__dirname$1, "../", "../", "templates", templateName);
|
|
85
86
|
}
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/helpers/exec.ts","../../../../../../warlock.js/create-warlock/src/helpers/paths.ts","../../../../../../warlock.js/create-warlock/src/helpers/package-manager.ts","../../../../../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts","../../../../../../warlock.js/create-warlock/src/helpers/app.ts","../../../../../../warlock.js/create-warlock/src/commands/create-warlock-app/index.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/get-app-path.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/index.ts","../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["resolve","__filename","__dirname","path","colors","copyDirectory","renameFile","getFile","putFile","getJsonFile","putJsonFile","path4"],"mappings":"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","file":"index.js","sourcesContent":["import { log } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { ChildProcess } from \"child_process\";\r\nimport { default as childProcess, default as spawn } from \"cross-spawn\";\r\n\r\nexport default async function exec(command: string, options: any = {}) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n\r\n const commandOutput = childProcess.sync(commandName, optionsList, options);\r\n\r\n // it means command didn't end as expected, then stop the rest of the program\r\n if (commandOutput.error !== null) {\r\n process.exit(1);\r\n }\r\n\r\n return commandOutput;\r\n}\r\n\r\n/**\r\n * This function directly executes a command\r\n */\r\nexport async function executeCommand(cmd: string, args: string[], cwd: string) {\r\n return new Promise<boolean>(resolve => {\r\n const child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function runCommand(cmd: string, args: string[], cwd: string) {\r\n let child: ChildProcess;\r\n\r\n const install = new Promise<boolean>(resolve => {\r\n try {\r\n child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } catch (e) {\r\n resolve(false);\r\n }\r\n });\r\n\r\n const abort = async () => {\r\n if (child) {\r\n child.kill(\"SIGINT\");\r\n }\r\n };\r\n\r\n return { abort, install };\r\n}\r\n","import path from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\n\r\nconst __dirname = path.dirname(__filename);\r\n\r\nexport type Template = \"warlock\";\r\n\r\nexport function template(templateName: Template): string {\r\n return path.resolve(__dirname, \"../\", \"../\", \"templates\", templateName);\r\n}\r\n\r\nexport function packageRoot(...paths: string[]): string {\r\n return path.resolve(__dirname, \"../\", \"../\", ...paths);\r\n}\r\n","import detectPackageManager from \"which-pm-runs\";\r\n\r\nlet detectedPackageManager: string | undefined;\r\n\r\nexport function getPackageManager() {\r\n if (detectedPackageManager) {\r\n return detectedPackageManager;\r\n }\r\n\r\n const packageManager = detectPackageManager();\r\n\r\n return packageManager.name || \"npm\";\r\n}\r\n\r\nexport function setPackageManager(packageManager: string) {\r\n detectedPackageManager = packageManager;\r\n}\r\n\r\nexport function installCommand() {\r\n return `${getPackageManager()} install`;\r\n}\r\n\r\nexport function startCommand() {\r\n if (getPackageManager() === \"npm\") return \"npm run dev\";\r\n\r\n return `${getPackageManager()} dev`;\r\n}\r\n\r\nexport function runPackageManagerCommand(command: string) {\r\n const packageManager = getPackageManager();\r\n\r\n if (packageManager === \"npm\") return `npm run ${command}`;\r\n\r\n return `${packageManager} ${command}`;\r\n}\r\n","import { outro } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport {\r\n copyDirectory,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { executeCommand } from \"./exec\";\r\nimport { startCommand } from \"./package-manager\";\r\nimport { Template, template } from \"./paths\";\r\n\r\nexport async function initializeGitRepository(appPath: string) {\r\n // initialize git repository\r\n await executeCommand(`git`, [\"init\"], appPath);\r\n // switching to `main` branch\r\n await executeCommand(`git`, [\"checkout\", \"-b\", \"main\"], appPath);\r\n\r\n // add files\r\n await executeCommand(`git`, [\"add\", \".\"], appPath);\r\n\r\n // commit files\r\n await executeCommand(`git`, [\"commit\", \"-m\", \"Initial commit ⚡️\"], appPath);\r\n\r\n return true;\r\n}\r\n\r\nexport async function updateEnvFile(appPath: string, appName: string) {\r\n // update package.json file\r\n const packageJson: any = getJsonFile(path.resolve(appPath, \"package.json\"));\r\n\r\n packageJson.name = appName;\r\n\r\n putJsonFile(path.resolve(appPath, \"package.json\"), packageJson);\r\n\r\n // update env file\r\n const dotEnv = getFile(path.resolve(appPath, \".env\"))\r\n .replace(\"AppName\", appName)\r\n .replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env\"), dotEnv);\r\n\r\n // update .env.production file\r\n let dotEnvProduction = getFile(path.resolve(appPath, \".env.shared\"));\r\n\r\n dotEnvProduction = dotEnvProduction.replace(\"AppName\", appName).replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env.shared\"), dotEnvProduction);\r\n}\r\n\r\nexport async function copyTemplateFiles(\r\n templateName: Template,\r\n appPath: string,\r\n _appName: string,\r\n) {\r\n // copy project files\r\n copyDirectory(template(templateName), appPath);\r\n\r\n // replace _.gitignore to\r\n renameFile(\r\n path.resolve(appPath, \"_.gitignore\"),\r\n path.resolve(appPath, \".gitignore\"),\r\n );\r\n}\r\n\r\nexport async function allDone(appName: string) {\r\n outro(\r\n \"🌟 Awesome! Your project is ready to rock! \" +\r\n \"Run the following command to start development:\",\r\n );\r\n\r\n console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));\r\n\r\n console.log();\r\n\r\n console.log(\r\n `💡 Pro tip: Install the ${colors.yellow(\r\n \"Generator Z\",\r\n )} extension in VSCode for helpful code snippets and productivity boosters! 🚀`,\r\n );\r\n}\r\n","import {\r\n copyDirectory,\r\n copyFile,\r\n fileExists,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { Application } from \"src/commands/create-new-app/types\";\r\nimport { executeCommand, runCommand } from \"src/helpers/exec\";\r\nimport { Template, template } from \"src/helpers/paths\";\r\nimport {\r\n allDone,\r\n initializeGitRepository,\r\n} from \"src/helpers/project-builder-helpers\";\r\nimport { getPackageManager } from \"./package-manager\";\r\n\r\nexport class App {\r\n /**\r\n * Resolved files\r\n */\r\n protected files: Record<string, FileManager> = {};\r\n\r\n public isInstalled = false;\r\n\r\n public constructor(protected app: Application) {}\r\n\r\n public use(templateName: Template) {\r\n copyDirectory(template(templateName), this.path);\r\n\r\n if (fileExists(this.path + \"/.env.example\")) {\r\n copyFile(this.path + \"/.env.example\", this.path + \"/.env\");\r\n }\r\n\r\n renameFile(this.path + \"/_.gitignore\", this.path + \"/.gitignore\");\r\n\r\n return this;\r\n }\r\n\r\n public init() {\r\n return this;\r\n }\r\n\r\n public terminate() {\r\n allDone(this.name);\r\n }\r\n\r\n public install() {\r\n return runCommand(getPackageManager(), [\"install\"], this.path);\r\n }\r\n\r\n public async exec(command: string) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n return await executeCommand(commandName, optionsList, this.path);\r\n }\r\n\r\n public async git() {\r\n return await initializeGitRepository(this.path);\r\n }\r\n\r\n public updatePackageJson() {\r\n this.package\r\n .replace(\"name\", this.name.replaceAll(\"/\", \"-\"))\r\n .replaceAll(\"yarn\", getPackageManager())\r\n .save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get package json file\r\n */\r\n public get package() {\r\n return this.json(\"package.json\");\r\n }\r\n\r\n public updateDotEnv() {\r\n this.file(\".env\").replaceAll(\"appName\", this.name).save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get env file to update\r\n */\r\n public get env() {\r\n return this.file(\".env\");\r\n }\r\n\r\n public get name() {\r\n return this.app.appName;\r\n }\r\n\r\n public get path() {\r\n return this.app.appPath;\r\n }\r\n\r\n public file(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = file(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n\r\n public json(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = jsonFile(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n}\r\n\r\nexport function app(app: Application) {\r\n return new App(app);\r\n}\r\n\r\nexport class FileManager {\r\n public content!: string;\r\n public constructor(protected filePath) {\r\n this.parseContent();\r\n }\r\n\r\n protected parseContent() {\r\n this.content = getFile(this.filePath) as string;\r\n }\r\n\r\n public replace(search: string, replace: string) {\r\n this.content = this.content.replace(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(search: string, replace: string) {\r\n this.content = this.content.replaceAll(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public save() {\r\n putFile(this.filePath, this.content);\r\n }\r\n}\r\n\r\nexport class JsonFileManager extends FileManager {\r\n protected parseContent() {\r\n this.content = getJsonFile(this.filePath);\r\n }\r\n\r\n public save() {\r\n putJsonFile(this.filePath, this.content);\r\n }\r\n\r\n public has(key: string) {\r\n return this.content[key] !== undefined;\r\n }\r\n\r\n public replace(key: string, value: any) {\r\n this.content[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(key: string, value: any) {\r\n const contentAsString = JSON.stringify(this.content);\r\n\r\n this.content = JSON.parse(contentAsString.replaceAll(key, value));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function file(path: string) {\r\n return new FileManager(path);\r\n}\r\n\r\nexport function jsonFile(path: string) {\r\n return new JsonFileManager(path);\r\n}\r\n","import { confirm, spinner } from \"@clack/prompts\";\r\nimport path from \"path\";\r\nimport { rimraf } from \"rimraf\";\r\nimport { App } from \"src/helpers/app\";\r\nimport { runPackageManagerCommand } from \"../../helpers/package-manager\";\r\n\r\nexport async function createWarlockApp(application: App) {\r\n // Initialize the basic app structure\r\n application.init().use(\"warlock\").updatePackageJson().updateDotEnv();\r\n\r\n // Start the installation process in background immediately\r\n const installProcess = application.install();\r\n\r\n // Collect all answers first\r\n const installDeps =\r\n (await confirm({\r\n message: \"Do you want to install dependencies?\",\r\n })) === true;\r\n\r\n // If user doesn't want to install dependencies, abort the background process\r\n if (!installDeps) {\r\n installProcess.abort();\r\n\r\n // Remove node_modules Asynchronously\r\n const nodeModulesPath = path.join(application.path, \"node_modules\");\r\n\r\n rimraf(nodeModulesPath);\r\n }\r\n\r\n const useGit =\r\n (await confirm({\r\n message: \"Do you want to initialize Git repository?\",\r\n })) === true;\r\n\r\n // Only ask about JWT if dependencies will be installed\r\n let useJWT = false;\r\n if (installDeps) {\r\n useJWT =\r\n (await confirm({\r\n message: \"Do you want to generate JWT Secret key?\",\r\n })) === true;\r\n }\r\n\r\n // Now execute all confirmed tasks\r\n\r\n // Handle Git initialization first if requested\r\n if (useGit) {\r\n const loading = spinner();\r\n loading.start(\"📂 Initializing Git repository...\");\r\n await application.git();\r\n loading.stop(\"📂 Git repository initialized ✅\");\r\n }\r\n\r\n // Wait for dependencies installation if it was requested\r\n if (installDeps) {\r\n const loading = spinner();\r\n loading.start(\"📦 Installing dependencies...\");\r\n await installProcess.install;\r\n loading.stop(\"📦 Dependencies installed successfully!\");\r\n\r\n // Generate JWT if requested\r\n if (useJWT) {\r\n const jwtLoading = spinner();\r\n jwtLoading.start(\"🔑 Generating JWT Secret...\");\r\n await application.exec(runPackageManagerCommand(\"jwt\"));\r\n jwtLoading.stop(\"🔑 JWT Secret generated 🔒\");\r\n }\r\n }\r\n\r\n application.terminate();\r\n}\r\n","import { colors } from \"@mongez/copper\";\r\nimport { isDirectory } from \"@mongez/fs\";\r\nimport * as path from \"path\";\r\n\r\nexport default function getAppPath(appName: string) {\r\n const appPath: string = path.resolve(process.cwd(), appName);\r\n\r\n if (isDirectory(appPath)) {\r\n console.log(\r\n colors.redBright(\r\n `${process.cwd()} has an existing directory \\`${colors.cyan(\r\n appName,\r\n )}\\`, please choose another app name or another directory to run the command from.`,\r\n ),\r\n );\r\n\r\n process.exit(1);\r\n }\r\n\r\n return appPath;\r\n}\r\n","import { cancel, intro, isCancel, select, text } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { App } from \"../../helpers/app\";\r\nimport {\r\n getPackageManager,\r\n setPackageManager,\r\n} from \"../../helpers/package-manager\";\r\nimport { createWarlockApp } from \"../create-warlock-app\";\r\nimport getAppPath from \"./get-app-path\";\r\nimport { App as AppType } from \"./types\";\r\n\r\nconst appDetails: Required<AppType> = {\r\n appName: \"\",\r\n appType: \"\",\r\n appPath: \"\",\r\n pkgManager: \"\",\r\n options: {},\r\n};\r\n\r\nexport default async function createNewApp(createWarlockVersion: string) {\r\n intro(\r\n `✨ Let's create a new ${colors.yellowBright(\"Warlock Js App\")} ✨ ${colors.greenBright(`v` + createWarlockVersion)}`,\r\n );\r\n\r\n const appName = await text({\r\n message: \"Enter the app name\",\r\n placeholder: \"warlock-app\",\r\n });\r\n\r\n if (isCancel(appName) || !appName.trim()) {\r\n cancel(\"Application name is required to create a new app\");\r\n process.exit(0);\r\n }\r\n\r\n // Validate the nodejs version to be not less than 20\r\n const [major] = process.versions.node.split(\".\").map(Number);\r\n\r\n if (major < 20) {\r\n cancel(\"Node.js version must be at least 20.0.0\");\r\n process.exit(0);\r\n }\r\n\r\n const packageManager = await select({\r\n message: \"Select package manager to use 📦 \",\r\n initialValue: getPackageManager(),\r\n options: [\r\n {\r\n label: \"Npm\",\r\n value: \"npm\",\r\n },\r\n {\r\n label: \"Yarn\",\r\n value: \"yarn\",\r\n },\r\n {\r\n label: \"Pnpm\",\r\n value: \"pnpm\",\r\n },\r\n ],\r\n });\r\n\r\n setPackageManager(packageManager);\r\n\r\n appDetails.appName = appName;\r\n appDetails.appPath = getAppPath(appName);\r\n appDetails.pkgManager = packageManager;\r\n\r\n if (!appDetails.appPath) return;\r\n\r\n appDetails.appType = \"warlock\";\r\n\r\n createWarlockApp(new App(appDetails));\r\n}\r\n","import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/helpers/exec.ts","../../../../../../warlock.js/create-warlock/src/helpers/paths.ts","../../../../../../warlock.js/create-warlock/src/helpers/package-manager.ts","../../../../../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts","../../../../../../warlock.js/create-warlock/src/helpers/app.ts","../../../../../../warlock.js/create-warlock/src/commands/create-warlock-app/index.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/get-app-path.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/index.ts","../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["resolve","__filename","__dirname","path","colors","copyDirectory","renameFile","getFile","putFile","getJsonFile","putJsonFile","path4"],"mappings":"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","file":"index.js","sourcesContent":["import { log } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { ChildProcess } from \"child_process\";\r\nimport { default as childProcess, default as spawn } from \"cross-spawn\";\r\n\r\nexport default async function exec(command: string, options: any = {}) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n\r\n const commandOutput = childProcess.sync(commandName, optionsList, options);\r\n\r\n // it means command didn't end as expected, then stop the rest of the program\r\n if (commandOutput.error !== null) {\r\n process.exit(1);\r\n }\r\n\r\n return commandOutput;\r\n}\r\n\r\n/**\r\n * This function directly executes a command\r\n */\r\nexport async function executeCommand(cmd: string, args: string[], cwd: string) {\r\n return new Promise<boolean>(resolve => {\r\n const child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function runCommand(cmd: string, args: string[], cwd: string) {\r\n let child: ChildProcess;\r\n\r\n const install = new Promise<boolean>(resolve => {\r\n try {\r\n child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } catch (e) {\r\n resolve(false);\r\n }\r\n });\r\n\r\n const abort = async () => {\r\n if (child) {\r\n child.kill(\"SIGINT\");\r\n }\r\n };\r\n\r\n return { abort, install };\r\n}\r\n","import path from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\n\r\nconst __dirname = path.dirname(__filename);\r\n\r\nconsole.log(\"Executing from\", __dirname);\r\n\r\nexport type Template = \"warlock\";\r\n\r\nexport function template(templateName: Template): string {\r\n return path.resolve(__dirname, \"../\", \"../\", \"templates\", templateName);\r\n}\r\n\r\nexport function packageRoot(...paths: string[]): string {\r\n return path.resolve(__dirname, \"../\", \"../\", ...paths);\r\n}\r\n","import detectPackageManager from \"which-pm-runs\";\r\n\r\nlet detectedPackageManager: string | undefined;\r\n\r\nexport function getPackageManager() {\r\n if (detectedPackageManager) {\r\n return detectedPackageManager;\r\n }\r\n\r\n const packageManager = detectPackageManager();\r\n\r\n return packageManager.name || \"npm\";\r\n}\r\n\r\nexport function setPackageManager(packageManager: string) {\r\n detectedPackageManager = packageManager;\r\n}\r\n\r\nexport function installCommand() {\r\n return `${getPackageManager()} install`;\r\n}\r\n\r\nexport function startCommand() {\r\n if (getPackageManager() === \"npm\") return \"npm run dev\";\r\n\r\n return `${getPackageManager()} dev`;\r\n}\r\n\r\nexport function runPackageManagerCommand(command: string) {\r\n const packageManager = getPackageManager();\r\n\r\n if (packageManager === \"npm\") return `npm run ${command}`;\r\n\r\n return `${packageManager} ${command}`;\r\n}\r\n","import { outro } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport {\r\n copyDirectory,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { executeCommand } from \"./exec\";\r\nimport { startCommand } from \"./package-manager\";\r\nimport { Template, template } from \"./paths\";\r\n\r\nexport async function initializeGitRepository(appPath: string) {\r\n // initialize git repository\r\n await executeCommand(`git`, [\"init\"], appPath);\r\n // switching to `main` branch\r\n await executeCommand(`git`, [\"checkout\", \"-b\", \"main\"], appPath);\r\n\r\n // add files\r\n await executeCommand(`git`, [\"add\", \".\"], appPath);\r\n\r\n // commit files\r\n await executeCommand(`git`, [\"commit\", \"-m\", \"Initial commit ⚡️\"], appPath);\r\n\r\n return true;\r\n}\r\n\r\nexport async function updateEnvFile(appPath: string, appName: string) {\r\n // update package.json file\r\n const packageJson: any = getJsonFile(path.resolve(appPath, \"package.json\"));\r\n\r\n packageJson.name = appName;\r\n\r\n putJsonFile(path.resolve(appPath, \"package.json\"), packageJson);\r\n\r\n // update env file\r\n const dotEnv = getFile(path.resolve(appPath, \".env\"))\r\n .replace(\"AppName\", appName)\r\n .replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env\"), dotEnv);\r\n\r\n // update .env.production file\r\n let dotEnvProduction = getFile(path.resolve(appPath, \".env.shared\"));\r\n\r\n dotEnvProduction = dotEnvProduction.replace(\"AppName\", appName).replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env.shared\"), dotEnvProduction);\r\n}\r\n\r\nexport async function copyTemplateFiles(\r\n templateName: Template,\r\n appPath: string,\r\n _appName: string,\r\n) {\r\n // copy project files\r\n copyDirectory(template(templateName), appPath);\r\n\r\n // replace _.gitignore to\r\n renameFile(\r\n path.resolve(appPath, \"_.gitignore\"),\r\n path.resolve(appPath, \".gitignore\"),\r\n );\r\n}\r\n\r\nexport async function allDone(appName: string) {\r\n outro(\r\n \"🌟 Awesome! Your project is ready to rock! \" +\r\n \"Run the following command to start development:\",\r\n );\r\n\r\n console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));\r\n\r\n console.log();\r\n\r\n console.log(\r\n `💡 Pro tip: Install the ${colors.yellow(\r\n \"Generator Z\",\r\n )} extension in VSCode for helpful code snippets and productivity boosters! 🚀`,\r\n );\r\n}\r\n","import {\r\n copyDirectory,\r\n copyFile,\r\n fileExists,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { Application } from \"src/commands/create-new-app/types\";\r\nimport { executeCommand, runCommand } from \"src/helpers/exec\";\r\nimport { Template, template } from \"src/helpers/paths\";\r\nimport {\r\n allDone,\r\n initializeGitRepository,\r\n} from \"src/helpers/project-builder-helpers\";\r\nimport { getPackageManager } from \"./package-manager\";\r\n\r\nexport class App {\r\n /**\r\n * Resolved files\r\n */\r\n protected files: Record<string, FileManager> = {};\r\n\r\n public isInstalled = false;\r\n\r\n public constructor(protected app: Application) {}\r\n\r\n public use(templateName: Template) {\r\n copyDirectory(template(templateName), this.path);\r\n\r\n if (fileExists(this.path + \"/.env.example\")) {\r\n copyFile(this.path + \"/.env.example\", this.path + \"/.env\");\r\n }\r\n\r\n renameFile(this.path + \"/_.gitignore\", this.path + \"/.gitignore\");\r\n\r\n return this;\r\n }\r\n\r\n public init() {\r\n return this;\r\n }\r\n\r\n public terminate() {\r\n allDone(this.name);\r\n }\r\n\r\n public install() {\r\n return runCommand(getPackageManager(), [\"install\"], this.path);\r\n }\r\n\r\n public async exec(command: string) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n return await executeCommand(commandName, optionsList, this.path);\r\n }\r\n\r\n public async git() {\r\n return await initializeGitRepository(this.path);\r\n }\r\n\r\n public updatePackageJson() {\r\n this.package\r\n .replace(\"name\", this.name.replaceAll(\"/\", \"-\"))\r\n .replaceAll(\"yarn\", getPackageManager())\r\n .save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get package json file\r\n */\r\n public get package() {\r\n return this.json(\"package.json\");\r\n }\r\n\r\n public updateDotEnv() {\r\n this.file(\".env\").replaceAll(\"appName\", this.name).save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get env file to update\r\n */\r\n public get env() {\r\n return this.file(\".env\");\r\n }\r\n\r\n public get name() {\r\n return this.app.appName;\r\n }\r\n\r\n public get path() {\r\n return this.app.appPath;\r\n }\r\n\r\n public file(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = file(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n\r\n public json(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = jsonFile(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n}\r\n\r\nexport function app(app: Application) {\r\n return new App(app);\r\n}\r\n\r\nexport class FileManager {\r\n public content!: string;\r\n public constructor(protected filePath) {\r\n this.parseContent();\r\n }\r\n\r\n protected parseContent() {\r\n this.content = getFile(this.filePath) as string;\r\n }\r\n\r\n public replace(search: string, replace: string) {\r\n this.content = this.content.replace(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(search: string, replace: string) {\r\n this.content = this.content.replaceAll(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public save() {\r\n putFile(this.filePath, this.content);\r\n }\r\n}\r\n\r\nexport class JsonFileManager extends FileManager {\r\n protected parseContent() {\r\n this.content = getJsonFile(this.filePath);\r\n }\r\n\r\n public save() {\r\n putJsonFile(this.filePath, this.content);\r\n }\r\n\r\n public has(key: string) {\r\n return this.content[key] !== undefined;\r\n }\r\n\r\n public replace(key: string, value: any) {\r\n this.content[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(key: string, value: any) {\r\n const contentAsString = JSON.stringify(this.content);\r\n\r\n this.content = JSON.parse(contentAsString.replaceAll(key, value));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function file(path: string) {\r\n return new FileManager(path);\r\n}\r\n\r\nexport function jsonFile(path: string) {\r\n return new JsonFileManager(path);\r\n}\r\n","import { confirm, spinner } from \"@clack/prompts\";\r\nimport path from \"path\";\r\nimport { rimraf } from \"rimraf\";\r\nimport { App } from \"src/helpers/app\";\r\nimport { runPackageManagerCommand } from \"../../helpers/package-manager\";\r\n\r\nexport async function createWarlockApp(application: App) {\r\n // Initialize the basic app structure\r\n application.init().use(\"warlock\").updatePackageJson().updateDotEnv();\r\n\r\n // Start the installation process in background immediately\r\n const installProcess = application.install();\r\n\r\n // Collect all answers first\r\n const installDeps =\r\n (await confirm({\r\n message: \"Do you want to install dependencies?\",\r\n })) === true;\r\n\r\n // If user doesn't want to install dependencies, abort the background process\r\n if (!installDeps) {\r\n installProcess.abort();\r\n\r\n // Remove node_modules Asynchronously\r\n const nodeModulesPath = path.join(application.path, \"node_modules\");\r\n\r\n rimraf(nodeModulesPath);\r\n }\r\n\r\n const useGit =\r\n (await confirm({\r\n message: \"Do you want to initialize Git repository?\",\r\n })) === true;\r\n\r\n // Only ask about JWT if dependencies will be installed\r\n let useJWT = false;\r\n if (installDeps) {\r\n useJWT =\r\n (await confirm({\r\n message: \"Do you want to generate JWT Secret key?\",\r\n })) === true;\r\n }\r\n\r\n // Now execute all confirmed tasks\r\n\r\n // Handle Git initialization first if requested\r\n if (useGit) {\r\n const loading = spinner();\r\n loading.start(\"📂 Initializing Git repository...\");\r\n await application.git();\r\n loading.stop(\"📂 Git repository initialized ✅\");\r\n }\r\n\r\n // Wait for dependencies installation if it was requested\r\n if (installDeps) {\r\n const loading = spinner();\r\n loading.start(\"📦 Installing dependencies...\");\r\n await installProcess.install;\r\n loading.stop(\"📦 Dependencies installed successfully!\");\r\n\r\n // Generate JWT if requested\r\n if (useJWT) {\r\n const jwtLoading = spinner();\r\n jwtLoading.start(\"🔑 Generating JWT Secret...\");\r\n await application.exec(runPackageManagerCommand(\"jwt\"));\r\n jwtLoading.stop(\"🔑 JWT Secret generated 🔒\");\r\n }\r\n }\r\n\r\n application.terminate();\r\n}\r\n","import { colors } from \"@mongez/copper\";\r\nimport { isDirectory } from \"@mongez/fs\";\r\nimport * as path from \"path\";\r\n\r\nexport default function getAppPath(appName: string) {\r\n const appPath: string = path.resolve(process.cwd(), appName);\r\n\r\n if (isDirectory(appPath)) {\r\n console.log(\r\n colors.redBright(\r\n `${process.cwd()} has an existing directory \\`${colors.cyan(\r\n appName,\r\n )}\\`, please choose another app name or another directory to run the command from.`,\r\n ),\r\n );\r\n\r\n process.exit(1);\r\n }\r\n\r\n return appPath;\r\n}\r\n","import { cancel, intro, isCancel, select, text } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { App } from \"../../helpers/app\";\r\nimport {\r\n getPackageManager,\r\n setPackageManager,\r\n} from \"../../helpers/package-manager\";\r\nimport { createWarlockApp } from \"../create-warlock-app\";\r\nimport getAppPath from \"./get-app-path\";\r\nimport { App as AppType } from \"./types\";\r\n\r\nconst appDetails: Required<AppType> = {\r\n appName: \"\",\r\n appType: \"\",\r\n appPath: \"\",\r\n pkgManager: \"\",\r\n options: {},\r\n};\r\n\r\nexport default async function createNewApp(createWarlockVersion: string) {\r\n intro(\r\n `✨ Let's create a new ${colors.yellowBright(\"Warlock Js App\")} ✨ ${colors.greenBright(`v` + createWarlockVersion)}`,\r\n );\r\n\r\n const appName = await text({\r\n message: \"Enter the app name\",\r\n placeholder: \"warlock-app\",\r\n });\r\n\r\n if (isCancel(appName) || !appName.trim()) {\r\n cancel(\"Application name is required to create a new app\");\r\n process.exit(0);\r\n }\r\n\r\n // Validate the nodejs version to be not less than 20\r\n const [major] = process.versions.node.split(\".\").map(Number);\r\n\r\n if (major < 20) {\r\n cancel(\"Node.js version must be at least 20.0.0\");\r\n process.exit(0);\r\n }\r\n\r\n const packageManager = await select({\r\n message: \"Select package manager to use 📦 \",\r\n initialValue: getPackageManager(),\r\n options: [\r\n {\r\n label: \"Npm\",\r\n value: \"npm\",\r\n },\r\n {\r\n label: \"Yarn\",\r\n value: \"yarn\",\r\n },\r\n {\r\n label: \"Pnpm\",\r\n value: \"pnpm\",\r\n },\r\n ],\r\n });\r\n\r\n setPackageManager(packageManager);\r\n\r\n appDetails.appName = appName;\r\n appDetails.appPath = getAppPath(appName);\r\n appDetails.pkgManager = packageManager;\r\n\r\n if (!appDetails.appPath) return;\r\n\r\n appDetails.appType = \"warlock\";\r\n\r\n createWarlockApp(new App(appDetails));\r\n}\r\n","import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|