create-codetie
Advanced tools
+3
-3
@@ -1,5 +0,5 @@ | ||
| import i from"fs-extra";import r from"path";import p from"minimist";import m from"prompts";import n from"chalk";import{fileURLToPath as d}from"url";const y=d(import.meta.url),u=r.dirname(y);async function g(){console.log(n.green(`Welcome to the codetie (Sync swift + xcode) Project Setup \u{1F680} | ||
| `));let e=p(process.argv.slice(2),{string:["_"]})._[0];const s=e||"codetie-project",t=await m([{type:e?null:"text",name:"projectName",message:"Project name:",initial:s,onState:a=>{e=a.value.trim()||s}},{type:"list",name:"setupType",message:"Select setup type:",choices:[{title:"Minimal",value:"minimal"},{title:"Advanced",value:"advanced"}],initial:0},{type:"text",name:"bundleIdPrefix",message:"Enter Bundle ID Prefix:",initial:"com.zunderai"},{type:"text",name:"deploymentTarget",message:"Enter Deployment Target iOS Version:",initial:"17.0"},{type:"text",name:"xcodeVersion",message:"Enter Xcode Version:",initial:"15.3"},{type:"text",name:"swiftVersion",message:"Enter Swift Version:",initial:"5.10.1"},{type:"text",name:"appVersion",message:"Enter App Version:",initial:"1.0.0"},{type:"text",name:"buildNumber",message:"Enter Build Number:",initial:"1"}]),o=r.join(process.cwd(),e);i.existsSync(o)?i.readdirSync(o).length===0?console.log(`Directory ${n.cyan(e)} is empty. Proceeding with project creation.`):(console.log(n.red(`Error: Directory ${e} is not empty. Please choose a different directory or empty it.`)),process.exit(1)):i.mkdirSync(o,{recursive:!0});const l=r.resolve(u,"../template");i.copySync(l,o);const c={project_name:e,setup_type:t.setupType,bundle_id_prefix:t.bundleIdPrefix,deployment_target:t.deploymentTarget,xcode_version:t.xcodeVersion,swift_version:t.swiftVersion,app_version:t.appVersion,build_number:t.buildNumber};i.writeFileSync(r.join(o,"codetie.yml"),JSON.stringify(c,null,2)),console.log(n.green(` | ||
| import t from"fs-extra";import n from"path";import S from"minimist";import j from"prompts";import l from"chalk";import{fileURLToPath as x}from"url";import b from"mustache";const v=x(import.meta.url),_=n.dirname(v),w={_gitignore:".gitignore"};async function P(){console.log(l.green(`Welcome to the codetie (Sync swift + xcode) Project Setup \u{1F680} | ||
| `));let e=S(process.argv.slice(2),{string:["_"]})._[0];const i=e||"codetie-project",o=await j([{type:e?null:"text",name:"projectName",message:"Project name:",initial:i,onState:r=>{e=r.value.trim()||i}}]),c=n.join(process.cwd(),e);t.existsSync(c)?t.readdirSync(c).length===0?console.log(`Directory ${l.cyan(e)} is empty. Proceeding with project creation.`):(console.log(l.red(`Error: Directory ${e} is not empty. Please choose a different directory or empty it.`)),process.exit(1)):t.mkdirSync(c,{recursive:!0});const s=n.resolve(_,"../template"),d=(r,p)=>{const m=n.join(c,w[r]??r);p?t.writeFileSync(m,p):y(n.join(s,r),m)},a=t.readdirSync(s);for(const r of a)d(r);const u={projectName:e,setupType:o.setupType,bundleIdPrefix:o.bundleIdPrefix,deploymentTarget:o.deploymentTarget,xcodeVersion:o.xcodeVersion,swiftVersion:o.swiftVersion,appVersion:o.appVersion,buildNumber:o.buildNumber},f=a.filter(r=>r.endsWith(".mustache"));for(const r of f){const p=t.readFileSync(n.join(s,r),"utf-8"),m=b.render(p,u);d(r.replace(".mustache",""),m),t.removeSync(n.join(c,r))}const g={project_name:e,setup_type:o.setupType,bundle_id_prefix:o.bundleIdPrefix,deployment_target:o.deploymentTarget,xcode_version:o.xcodeVersion,swift_version:o.swiftVersion,app_version:o.appVersion,build_number:o.buildNumber};t.writeFileSync(n.join(c,"codetie.yml"),JSON.stringify(g,null,2)),console.log(l.green(` | ||
| \u2705 Project setup complete! Happy coding! \u{1F388} | ||
| `)),console.log(` | ||
| Next steps:`),console.log(` cd ${e}`),console.log(" pnpm install"),console.log(" pnpm dev")}g().catch(e=>{console.error(n.red("Error:"),e),process.exit(1)}); | ||
| Next steps:`),console.log(` cd ${e}`),console.log(" pnpm install"),console.log(" pnpm dev")}function y(e,i){t.statSync(e).isDirectory()?V(e,i):t.copyFileSync(e,i)}function V(e,i){t.mkdirSync(i,{recursive:!0});for(const o of t.readdirSync(e)){const c=n.resolve(e,o),s=n.resolve(i,o);y(c,s)}}P().catch(e=>{console.error(l.red("Error:"),e),process.exit(1)}); |
+1
-1
| { | ||
| "name": "create-codetie", | ||
| "version": "1.0.2", | ||
| "version": "1.0.3", | ||
| "description": "CLI tool to set up codetie projects", | ||
@@ -5,0 +5,0 @@ "homepage": "https://codetie.ai", |
+58
-47
@@ -7,2 +7,3 @@ import fs from 'fs-extra'; | ||
| import { fileURLToPath } from 'url'; | ||
| import Mustache from 'mustache'; | ||
@@ -12,2 +13,6 @@ const __filename = fileURLToPath(import.meta.url); | ||
| const renameFiles: Record<string, string | undefined> = { | ||
| _gitignore: '.gitignore', | ||
| }; | ||
| async function init() { | ||
@@ -30,48 +35,3 @@ console.log(chalk.green('Welcome to the codetie (Sync swift + xcode) Project Setup š\n')); | ||
| }, | ||
| { | ||
| type: 'list', | ||
| name: 'setupType', | ||
| message: 'Select setup type:', | ||
| choices: [ | ||
| { title: 'Minimal', value: 'minimal' }, | ||
| { title: 'Advanced', value: 'advanced' }, | ||
| ], | ||
| initial: 0, | ||
| }, | ||
| { | ||
| type: 'text', | ||
| name: 'bundleIdPrefix', | ||
| message: 'Enter Bundle ID Prefix:', | ||
| initial: 'com.zunderai', | ||
| }, | ||
| { | ||
| type: 'text', | ||
| name: 'deploymentTarget', | ||
| message: 'Enter Deployment Target iOS Version:', | ||
| initial: '17.0', | ||
| }, | ||
| { | ||
| type: 'text', | ||
| name: 'xcodeVersion', | ||
| message: 'Enter Xcode Version:', | ||
| initial: '15.3', | ||
| }, | ||
| { | ||
| type: 'text', | ||
| name: 'swiftVersion', | ||
| message: 'Enter Swift Version:', | ||
| initial: '5.10.1', | ||
| }, | ||
| { | ||
| type: 'text', | ||
| name: 'appVersion', | ||
| message: 'Enter App Version:', | ||
| initial: '1.0.0', | ||
| }, | ||
| { | ||
| type: 'text', | ||
| name: 'buildNumber', | ||
| message: 'Enter Build Number:', | ||
| initial: '1', | ||
| }, | ||
| // ... (keep your other prompts) | ||
| ]); | ||
@@ -93,4 +53,37 @@ | ||
| const templateDir = path.resolve(__dirname, '../template'); | ||
| fs.copySync(templateDir, root); | ||
| const write = (file: string, content?: string) => { | ||
| const targetPath = path.join(root, renameFiles[file] ?? file); | ||
| if (content) { | ||
| fs.writeFileSync(targetPath, content); | ||
| } else { | ||
| copy(path.join(templateDir, file), targetPath); | ||
| } | ||
| }; | ||
| const files = fs.readdirSync(templateDir); | ||
| for (const file of files) { | ||
| write(file); | ||
| } | ||
| // Process mustache templates | ||
| const templateVariables = { | ||
| projectName: targetDir, | ||
| setupType: result.setupType, | ||
| bundleIdPrefix: result.bundleIdPrefix, | ||
| deploymentTarget: result.deploymentTarget, | ||
| xcodeVersion: result.xcodeVersion, | ||
| swiftVersion: result.swiftVersion, | ||
| appVersion: result.appVersion, | ||
| buildNumber: result.buildNumber, | ||
| }; | ||
| const mustacheFiles = files.filter(file => file.endsWith('.mustache')); | ||
| for (const file of mustacheFiles) { | ||
| const content = fs.readFileSync(path.join(templateDir, file), 'utf-8'); | ||
| const rendered = Mustache.render(content, templateVariables); | ||
| write(file.replace('.mustache', ''), rendered); | ||
| fs.removeSync(path.join(root, file)); // Remove the original .mustache file | ||
| } | ||
| // Generate codetie.yml | ||
@@ -116,2 +109,20 @@ const codetieConfig = { | ||
| function copy(src: string, dest: string) { | ||
| const stat = fs.statSync(src); | ||
| if (stat.isDirectory()) { | ||
| copyDir(src, dest); | ||
| } else { | ||
| fs.copyFileSync(src, dest); | ||
| } | ||
| } | ||
| function copyDir(srcDir: string, destDir: string) { | ||
| fs.mkdirSync(destDir, { recursive: true }); | ||
| for (const file of fs.readdirSync(srcDir)) { | ||
| const srcFile = path.resolve(srcDir, file); | ||
| const destFile = path.resolve(destDir, file); | ||
| copy(srcFile, destFile); | ||
| } | ||
| } | ||
| init().catch((e) => { | ||
@@ -118,0 +129,0 @@ console.error(chalk.red('Error:'), e); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
25821
2.7%267
1.91%0
-100%