@pixpilot/scaffoldfy 0.31.0 → 0.32.0
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/dist/cli.cjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +33 -24
- package/dist/index.d.ts +33 -24
- package/dist/index.js +1 -1
- package/dist/run-tasks-A6tQe8q1.js +1 -0
- package/dist/{run-tasks-D5KLV8Tk.js → run-tasks-BsR0t7C5.js} +5 -5
- package/dist/run-tasks-CSR8df5O.cjs +26 -0
- package/dist/run-tasks-CcH22QWc.cjs +1 -0
- package/dist/scaffoldfy-config-json-validator/cli.cjs +3 -0
- package/dist/scaffoldfy-config-json-validator/cli.d.cts +1 -0
- package/dist/scaffoldfy-config-json-validator/cli.d.ts +1 -0
- package/dist/scaffoldfy-config-json-validator/cli.js +3 -0
- package/dist/scaffoldfy-config-json-validator/index.cjs +1 -0
- package/dist/scaffoldfy-config-json-validator/index.d.cts +3 -0
- package/dist/scaffoldfy-config-json-validator/index.d.ts +3 -0
- package/dist/scaffoldfy-config-json-validator/index.js +1 -0
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.cjs +1 -0
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.cts +2 -0
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.ts +2 -0
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.js +1 -0
- package/dist/scaffoldfy-config-json-validator-CpEXHRsI.cjs +0 -0
- package/dist/scaffoldfy-config-json-validator-DP8-e4Yy.js +1 -0
- package/dist/{src-DbtBS6he.js → src-CaQ2gXYF.js} +1 -1
- package/dist/{src-CmBriDDR.cjs → src-IYqxnNOO.cjs} +1 -1
- package/dist/{utils-Bn-L1Fmr.cjs → utils-B6BwGcug.cjs} +1 -1
- package/dist/{utils-Dsr6AHpq.js → utils-B6WSsvMT.js} +1 -1
- package/dist/utils-Bz23aLK_.cjs +1 -0
- package/dist/{utils-CmYva5oB.js → utils-CrJkuEEG.js} +1 -1
- package/dist/validate-scaffoldfy-json-Cfq-nQjy.js +1 -0
- package/dist/validate-scaffoldfy-json-Dkaz9ueq.cjs +1 -0
- package/dist/validate-scaffoldfy-json-bRhG4eG3.d.cts +10 -0
- package/dist/validate-scaffoldfy-json-vYYlnkxk.d.ts +10 -0
- package/package.json +3 -3
- package/schema/scaffoldfy.schema.json +157 -222
- package/dist/run-tasks-BZwbB2B0.cjs +0 -1
- package/dist/run-tasks-C6Bkzhq7.cjs +0 -26
- package/dist/run-tasks-DhVlAr4C.js +0 -1
- package/dist/utils-DjBGLPnu.cjs +0 -1
- package/dist/validate-scaffoldfy-json.cjs +0 -3
- package/dist/validate-scaffoldfy-json.js +0 -3
- /package/dist/{validate-scaffoldfy-json.d.cts → index-BoGG5KAY.d.ts} +0 -0
- /package/dist/{validate-scaffoldfy-json.d.ts → index-BtBZHVmz.d.cts} +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./config-DlJs75hK.cjs`),n=require(`./utils-Bz23aLK_.cjs`);let r=require(`node:fs`);r=e.t(r);let i=require(`node:path`);i=e.t(i);let a=require(`node:process`);a=e.t(a);let o=require(`node:util`);o=e.t(o);let s=require(`node:child_process`);s=e.t(s);let c=require(`@inquirer/prompts`);c=e.t(c);let l=require(`case-anything`);l=e.t(l);var u=class e extends n.S{constructor(e,t,n,r){super(e,`DUPLICATE_ID`),this.id=t,this.type=n,this.existingType=r,this.name=`DuplicateIdError`}static forId(t,n,r){return new e(`Duplicate ID "${t}" found in ${n}. This ID is already used in ${r??`unknown`}`,t,n,r)}},d=class e extends n.S{constructor(e,t,n,r,i){super(e,`ID_CONFLICT`),this.id=t,this.type=n,this.baseSource=r,this.overrideSource=i,this.name=`IdConflictError`}static forTask(t,n,r){return new e(`Task ID conflict: "${t}" is defined in multiple templates.\n Base task from: ${n??`unknown`}\n Override task from: ${r??`unknown`}\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the task.\n Task is being extended/overridden but no override strategy was specified.`,t,`task`,n,r)}static forVariable(t){return new e(`Variable ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the variable.\n Variable is being extended/overridden but no override strategy was specified.`,t,`variable`)}static forPrompt(t){return new e(`Prompt ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the prompt.\n Prompt is being extended/overridden but no override strategy was specified.`,t,`prompt`)}},f=class e extends n.S{constructor(e,t){super(e,`TASK_NOT_FOUND`),this.taskId=t,this.name=`TaskNotFoundError`}static forId(t){return new e(`Task not found: ${t}`,t)}},p=class e extends n.S{constructor(e,t,n){super(e,`PROMPT_VALIDATION_ERROR`),this.promptId=t,this.reason=n,this.name=`PromptValidationError`}static required(t){return new e(`Prompt "${t}" is required`,t,`required`)}static unknownType(t){return new e(`Unknown prompt type: ${t}`,t,`unknown_type`)}},m=class e extends n.S{constructor(e,t,n){super(e,`PLUGIN_CONFIGURATION_ERROR`),this.pluginType=t,this.configIssue=n,this.name=`PluginConfigurationError`}static templateMissingTemplateOrFile(){return new e(`Template task requires either "template" (inline) or "templateFile" (file path) to be specified`,`template`,`missing_template_or_file`)}static templateHasBothTemplateAndFile(){return new e(`Template task cannot have both "template" and "templateFile" specified. Use one or the other.`,`template`,`both_template_and_file`)}static createMissingTemplateOrFile(){return new e(`Create task requires either "template" (inline) or "templateFile" (file path) to be specified`,`create`,`missing_template_or_file`)}static createHasBothTemplateAndFile(){return new e(`Create task cannot have both "template" and "templateFile" specified. Use one or the other.`,`create`,`both_template_and_file`)}},h=class e extends n.S{constructor(e,t,n){super(e,`TRANSFORMER_ERROR`),this.transformerId=t,this.reason=n,this.name=`TransformerError`}static notFound(t){return new e(`Transformer "${t}" not found`,t,`not_found`)}static executionFailed(t,n){return new e(`Transformer "${t}" execution failed: ${n}`,t,`execution_failed`)}static invalidType(t,n){return new e(`Invalid transformer type "${n}" for transformer "${t}"`,t,`invalid_type`)}};function g(e){let t=new Map;for(let n of e){let e=t.get(n.name)||[];e.push(n),t.set(n.name,e)}if(Array.from(t.values()).some(e=>e.length>1))return e;let r=new Map,i=new Map,a=new Map;for(let t of e)if(r.set(t.name,t),a.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)a.get(t.name).add(e),i.has(e)||i.set(e,new Set),i.get(e).add(t.name);let o=new Set,s=new Map;for(let t=0;t<e.length;t++){let n=e[t],r=a.get(n.name).size>0,c=i.has(n.name)&&i.get(n.name).size>0;!r&&!c&&(o.add(n.name),s.set(n.name,t))}let c=e.filter(e=>!o.has(e.name)),l=[],u=new Set,d=new Set;function f(e){if(u.has(e))return;if(d.has(e))throw n.x.forTemplateDependencies(Array.from(d),e);d.add(e);let t=r.get(e);if(t!=null){let t=a.get(e);if(t!=null&&t.size>0)for(let e of t)f(e)}d.delete(e),u.add(e),t!=null&&!o.has(e)&&l.push(t)}for(let e of c)f(e.name);let p=[],m=0;for(let t=0;t<e.length;t++){let n=e[t];o.has(n.name)?p.push(n):m<l.length&&(p.push(l[m]),m++)}return p}const _=(0,o.promisify)(r.default.readFile),v={template:[[`template`,`templateFile`]]};function y(e){if(e==null||e===``)return`current template`;if(b(e))return e;let t=a.default.cwd();return e.startsWith(t)?i.default.relative(t,e):e}function b(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function ee(e,t){if(b(e))return e;if(t==null||t===``)return i.default.isAbsolute(e)?e:i.default.resolve(a.default.cwd(),e);if(b(t))try{let n=new URL(`.`,t);return new URL(e,n).href}catch{throw n.b.forRemoteTemplate(e,t)}let r=i.default.dirname(t);return i.default.isAbsolute(e)?e:i.default.resolve(r,e)}async function te(e){if(b(e))return ne(e);if(!r.default.existsSync(e))throw n.v.forPath(e);return _(e,`utf-8`)}async function ne(e){try{let t=await fetch(e);if(!t.ok)throw n._.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:n._.forUrl(e,t instanceof Error?t:void 0)}}const x=new Map;async function re(e,t=new Set){let o=b(e),s;if(s=o||i.default.isAbsolute(e)?e:i.default.resolve(a.default.cwd(),e),x.has(s))return x.get(s);if(t.has(s))throw n.x.forTemplateInheritance(t,s);t.add(s);let c;if(o)c=await ne(s);else{if(!r.default.existsSync(s))throw n.v.forPath(s);c=await _(s,`utf-8`)}let l;try{l=JSON.parse(c)}catch(e){throw n.y.forFile(s,e instanceof Error?e:Error(String(e)))}if(l.name==null||l.name.trim()===``)throw n.g.missingName(s);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(l.name))throw n.g.invalidNameFormat(s,l.name);if(l.tasks!==void 0&&!Array.isArray(l.tasks))throw n.g.tasksNotArray(s);l.tasks===void 0&&(l.tasks=[]);for(let e of l.tasks)e.$sourceUrl=s;return x.set(s,l),l}async function ie(e,t,r,o,s){let c=b(e),l;if(l=c||i.default.isAbsolute(e)?e:t==null?i.default.resolve(a.default.cwd(),e):b(t)?new URL(e,t).href:i.default.resolve(t,e),r.has(l))return;if(o.has(l))throw n.x.forTemplateInheritance(o,l);o.add(l);let u=await re(l),d=b(l)?new URL(`.`,l).href:i.default.dirname(l);if(u.extends!=null&&u.extends!==``){let e=Array.isArray(u.extends)?u.extends:[u.extends];for(let t of e)await ie(t,d,r,o,s)}o.delete(l),r.add(l),s.push(u)}async function S(e,t,n=new Set){let r=[];return await ie(e,t,n,new Set,r),g(r)}async function ae(e,t,n=new Set){return le(await S(e,t,n))}function oe(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw u.forId(t.id,`task`,r.get(t.id));r.set(t.id,`task`)}if(t!=null)for(let e of t){if(r.has(e.id))throw u.forId(e.id,`variable`,r.get(e.id));r.set(e.id,`variable`)}if(n!=null)for(let e of n){if(r.has(e.id))throw u.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function se(e,t){if((t.override??`merge`)===`replace`){n.a(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...r}=t;return r}n.a(` → Variable "${t.id}" merged (value replaced)`,`info`);let r={...e,...t};return delete r.override,r}function ce(e,t){if((t.override??`merge`)===`replace`){n.a(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...r}=t;return r}n.a(` → Prompt "${t.id}" merged`,`info`);let r={...e,...t};return delete r.override,r}function le(e){if(e.length===0)return{name:`Empty Template`,tasks:[]};if(e.length===1){let t=e[0];return oe(t.tasks??[],t.variables,t.prompts),t}let t=new Map,r=new Map,i=new Map,a={};for(let o of e){if(o.enabled!=null&&(a[o.name]=o.enabled),o.enabled===!1){n.a(`⊘ Skipping disabled template "${o.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(o.prompts!=null)for(let e of o.prompts)if(i.has(e.id)){if(e.override==null)throw d.forPrompt(e.id);let t=ce(i.get(e.id),e);o.enabled!=null&&(t.$templateEnabled=o.enabled),i.set(e.id,t)}else{let t={...e};o.enabled!=null&&(t.$templateEnabled=o.enabled),i.set(e.id,t)}if(o.variables!=null)for(let e of o.variables)if(r.has(e.id)){if(e.override==null)throw d.forVariable(e.id);let t=se(r.get(e.id),e);o.enabled!=null&&(t.$templateEnabled=o.enabled),r.set(e.id,t)}else{let t={...e};o.enabled!=null&&(t.$templateEnabled=o.enabled),r.set(e.id,t)}for(let e of o.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw d.forTask(e.id,y(n.$sourceUrl),y(e.$sourceUrl))}let n=fe(t.get(e.id),e);o.enabled!=null&&(n.$templateEnabled=o.enabled),t.set(e.id,n)}else{let n={...e};o.enabled!=null&&(n.$templateEnabled=o.enabled),t.set(e.id,n)}}let o=Array.from(t.values()),s=i.size>0?Array.from(i.values()):void 0,c=r.size>0?Array.from(r.values()):void 0;oe(o,c,s);let l=e[e.length-1],u={name:l.name,tasks:o};return l.description!=null&&(u.description=l.description),l.dependencies!=null&&(u.dependencies=l.dependencies),l.enabled!=null&&(u.enabled=l.enabled),s!=null&&(u.prompts=s),c!=null&&(u.variables=c),u}function ue(e,t){let n=v[e];if(!n)return null;for(let e of n){let n=e.filter(e=>e in t&&t[e]!=null);if(n.length>1)return n}return null}function de(e,t,n){let r={...e},i=v[n]??[];for(let[e,n]of Object.entries(t)){for(let t of i)if(t.includes(e)){for(let n of t)n!==e&&delete r[n];break}r[e]=n}return r}function fe(e,t){if((t.override??`merge`)===`replace`){n.a(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),n.a(` Base: ${y(e.$sourceUrl)}`,`info`),n.a(` Override: ${y(t.$sourceUrl)}`,`info`);let{override:r,...i}=t;return i}n.a(` → Merging task "${t.id}"`,`info`),n.a(` Base: ${y(e.$sourceUrl)}`,`info`),n.a(` Override: ${y(t.$sourceUrl)}`,`info`);let r;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){r=de(e.config,t.config,t.type);let i=ue(t.type,r);i!==null&&i.length>0&&(n.a(` ⚠️ Warning: Conflicting config fields detected: ${i.join(`, `)}`,`warn`),n.a(` Please use override: "replace" or specify only one of these fields`,`warn`))}else r=t.config??e.config;let i=[...e.dependencies??[],...t.dependencies??[]],a=i.length>0?[...new Set(i)]:void 0,o=t.$sourceUrl??e.$sourceUrl,s={...e,...t,config:r,...a!=null&&{dependencies:a},...o!=null&&{$sourceUrl:o}};return delete s.override,s}function pe(){x.clear()}async function me(e,t){if(n.d(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await S(e);return n.d(`Loaded ${t.length} template(s) for processing`),{tasks:[],templates:t}}let r=await ae(e);n.a(`Loaded ${r.tasks?.length??0} task(s)`,`info`),r.extends!=null&&r.extends!==``&&n.a(`Extended from: ${(Array.isArray(r.extends)?r.extends:[r.extends]).join(`, `)}`,`info`),r.prompts!=null&&r.prompts.length>0&&n.a(`Found ${r.prompts.length} top-level prompt(s)`,`info`),r.variables!=null&&r.variables.length>0&&n.a(`Found ${r.variables.length} top-level variable(s)`,`info`);let i={tasks:r.tasks??[]};return r.prompts!=null&&(i.prompts=r.prompts),r.variables!=null&&(i.variables=r.variables),r.enabled!=null&&(i.enabled=r.enabled),r.transformers!=null&&(i.transformers=r.transformers),i}function C(e){return e.template!=null&&e.template!==``}function w(e){return e.templateFile!=null&&e.templateFile!==``}function he(e){return e.endsWith(`.hbs`)}function T(e){let t=C(e),n=w(e);return!t&&!n?{isValid:!1,hasInlineTemplate:t,hasTemplateFile:n,error:`Template configuration requires either "template" (inline) or "templateFile" (file path) to be specified`}:t&&n?{isValid:!1,hasInlineTemplate:t,hasTemplateFile:n,error:`Template configuration cannot have both "template" and "templateFile" specified. Use one or the other.`}:{isValid:!0,hasInlineTemplate:t,hasTemplateFile:n}}async function E(e,t,r,i={}){let{enableHandlebars:a=!0,sourceUrl:o=r?.$sourceUrl}=i,s=C(e),c=w(e);if(s)return n.i(e.template,t);if(c){let r=e.templateFile,i=a&&he(r),s=await te(ee(r,o));return i?(await import(`handlebars`)).default.compile(s)(t):n.i(s,t)}throw Error(`No template content available`)}function D(e){return C(e)?`inline template`:w(e)?`template file: ${e.templateFile}`:`no template source`}const O=(0,o.promisify)(r.default.readFile),ge=2,_e=10,ve=55,k={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function A(e,t){switch(t){case`add`:return`${k.green}+ ${e}${k.reset}`;case`remove`:return`${k.red}- ${e}${k.reset}`;case`context`:return`${k.gray} ${e}${k.reset}`;default:return e}}function j(e,t){let n=e.split(`
|
|
2
|
+
`),r=t.split(`
|
|
3
|
+
`),i=[],a=Math.max(n.length,r.length);for(let e=0;e<a;e++){let t=n[e],a=r[e];t===a?t!==void 0&&i.push(A(t,`context`)):(t!==void 0&&i.push(A(t,`remove`)),a!==void 0&&i.push(A(a,`add`)))}return i}async function ye(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${k.red}✗ File not found: ${e.file}${k.reset}`;try{let r=await O(o,`utf-8`),i=JSON.parse(r),a={...i};function s(e){if(typeof e==`string`)return n.i(e,t);if(Array.isArray(e))return e.map(e=>s(e));if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=s(r);return t}return e}for(let[t,r]of Object.entries(e.updates)){let e=s(r);t.includes(`.`)?n.c(i,t,e):i[t]=e}let c=JSON.stringify(a,null,2),l=JSON.stringify(i,null,2);if(c===l)return`${k.cyan}→ No changes${k.reset}`;let u=j(c,l);return`${k.blue}File: ${e.file}${k.reset}\n${u.join(`
|
|
4
|
+
`)}`}catch(e){return`${k.red}✗ Error: ${e instanceof Error?e.message:String(e)}${k.reset}`}}async function be(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;if(e.template==null||e.template===``)return`${k.red}✗ No template content provided for file: ${e.file}${k.reset}`;let o=i.default.join(a.default.cwd(),e.file),s=n.i(e.template,t);if(!r.default.existsSync(o)){let t=s.split(`
|
|
5
|
+
`).slice(0,10).join(`
|
|
6
|
+
`),n=s.split(`
|
|
7
|
+
`).length>10;return`${k.blue}File: ${e.file}${k.reset}\n${k.green}+ New file would be created${k.reset}\n${k.gray}Content preview:${k.reset}\n${t}${n?`
|
|
8
|
+
...`:``}`}try{let t=await O(o,`utf-8`);if(t===s)return`${k.cyan}→ No changes${k.reset}`;let n=j(t,s);return`${k.blue}File: ${e.file}${k.reset}\n${n.join(`
|
|
9
|
+
`)}`}catch(e){return`${k.red}✗ Error: ${e instanceof Error?e.message:String(e)}${k.reset}`}}async function xe(e,t,o){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s))return`${k.cyan}→ File already exists, would be skipped: ${e.file}${k.reset}`;try{if(C(e)){let n=await E(e,t,o),r=n.split(`
|
|
10
|
+
`).slice(0,10).join(`
|
|
11
|
+
`),i=n.split(`
|
|
12
|
+
`).length>10;return`${k.blue}File: ${e.file}${k.reset}\n${k.green}+ New file would be created${k.reset}\n${k.gray}Content preview:${k.reset}\n${r}${i?`
|
|
13
|
+
...`:``}`}let n=D(e);return`${k.blue}File: ${e.file}${k.reset}\n${k.green}+ New file would be created from ${n}${k.reset}`}catch(e){return`${k.red}✗ Error: ${e instanceof Error?e.message:String(e)}${k.reset}`}}async function Se(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${k.red}✗ File not found: ${e.file}${k.reset}`;try{let r=await O(o,`utf-8`),i=new RegExp(e.pattern,e.flags??`g`),a=n.i(e.replacement,t),s=r.replace(i,a);if(r===s)return`${k.cyan}→ No matches found${k.reset}`;let c=j(r,s);return`${k.blue}File: ${e.file}${k.reset}\n${c.join(`
|
|
14
|
+
`)}`}catch(e){return`${k.red}✗ Error: ${e instanceof Error?e.message:String(e)}${k.reset}`}}async function Ce(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${k.red}✗ File not found: ${e.file}${k.reset}`;try{let r=await O(o,`utf-8`),i=r;for(let{find:i,replace:a}of e.replacements){let e=n.i(i,t),o=n.i(a,t);r=r.replace(e,o)}if(i===r)return`${k.cyan}→ No changes${k.reset}`;let a=j(i,r);return`${k.blue}File: ${e.file}${k.reset}\n${a.join(`
|
|
15
|
+
`)}`}catch(e){return`${k.red}✗ Error: ${e instanceof Error?e.message:String(e)}${k.reset}`}}function we(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=e.paths.map(e=>n.i(e,t)).filter(e=>r.default.existsSync(i.default.join(a.default.cwd(),e)));return o.length===0?`${k.cyan}→ No files/directories to delete${k.reset}`:`${k.red}Would delete:${k.reset}\n${o.map(e=>`${k.red} - ${e}${k.reset}`).join(`
|
|
16
|
+
`)}`}function M(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=n.i(e.from,t),s=n.i(e.to,t),c=i.default.join(a.default.cwd(),o),l=i.default.join(a.default.cwd(),s);return r.default.existsSync(c)?r.default.existsSync(l)?`${k.yellow}⚠ Destination already exists: ${s}${k.reset}\n${k.cyan}Would rename: ${o} → ${s}${k.reset}`:`${k.cyan}Would rename: ${o} → ${s}${k.reset}`:`${k.red}✗ Source not found: ${o}${k.reset}`}function Te(e){if(e.condition!=null&&e.condition!==``)return`${k.yellow}⊘ Condition check skipped in dry-run${k.reset}`;let t=i.default.join(a.default.cwd(),`.git`),n=r.default.existsSync(t),o=[];if(e.removeExisting&&n&&o.push(`${k.red}Would remove existing .git directory${k.reset}`),o.push(`${k.green}Would initialize git repository${k.reset}`),e.initialCommit){let t=e.message??`Initial commit`;o.push(`${k.green}Would create initial commit: "${t}"${k.reset}`)}return o.join(`
|
|
17
|
+
`)}function Ee(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let r=n.i(e.command,t),i=e.cwd==null?a.default.cwd():n.i(e.cwd,t);return`${k.yellow}Would execute:${k.reset}\n${k.cyan} Command: ${r}${k.reset}\n${k.cyan} Working directory: ${i}${k.reset}`}function De(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=n.i(e.from,t),s=n.i(e.to,t),c=i.default.join(a.default.cwd(),o),l=i.default.join(a.default.cwd(),s);return r.default.existsSync(c)?r.default.existsSync(l)?`${k.yellow}⚠ Destination already exists: ${s}${k.reset}\n${k.cyan}Would move: ${o} → ${s}${k.reset}`:`${k.cyan}Would move: ${o} → ${s}${k.reset}`:`${k.red}✗ Source not found: ${o}${k.reset}`}function Oe(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=n.i(e.from,t),s=n.i(e.to,t),c=i.default.join(a.default.cwd(),o),l=i.default.join(a.default.cwd(),s);if(!r.default.existsSync(c))return`${k.red}✗ Source not found: ${o}${k.reset}`;let u=r.default.statSync(c).isDirectory()?`directory`:`file`;return r.default.existsSync(l)?`${k.yellow}⚠ Destination already exists: ${s}${k.reset}\n${k.cyan}Would copy ${u}: ${o} → ${s}${k.reset}`:`${k.cyan}Would copy ${u}: ${o} → ${s}${k.reset}`}async function ke(e,t,o){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let s=i.default.join(a.default.cwd(),e.file),c={};e.content==null?e.template!=null&&(c.template=e.template):c.template=e.content,e.templateFile!=null&&(c.templateFile=e.templateFile);try{let n=await E(c,t,o),i=n.split(`
|
|
18
|
+
`).slice(0,10).join(`
|
|
19
|
+
`),a=n.split(`
|
|
20
|
+
`).length>10;return r.default.existsSync(s)?`${k.blue}File: ${e.file}${k.reset}\n${k.green}+ Would append content${k.reset}\n${k.gray}Content preview:${k.reset}\n${i}${a?`
|
|
21
|
+
...`:``}`:`${k.blue}File: ${e.file}${k.reset}\n${k.green}+ New file would be created with content${k.reset}\n${k.gray}Content preview:${k.reset}\n${i}${a?`
|
|
22
|
+
...`:``}`}catch(e){return`${k.red}✗ Error: ${e instanceof Error?e.message:String(e)}${k.reset}`}}function Ae(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t))return`${k.yellow}⊘ Condition not met - task would be skipped${k.reset}`;let o=n.i(e.path,t),s=i.default.join(a.default.cwd(),o);return r.default.existsSync(s)?`${k.cyan}→ Directory already exists: ${o}${k.reset}`:`${k.green}+ Would create directory: ${o}${k.reset}`}async function je(e,t){try{switch(e.type){case`update-json`:return await ye(e.config,t);case`write`:return await be(e.config,t);case`create`:return await xe(e.config,t,e);case`regex-replace`:return await Se(e.config,t);case`replace-in-file`:return await Ce(e.config,t);case`delete`:return we(e.config,t);case`rename`:return M(e.config,t);case`move`:return De(e.config,t);case`copy`:return Oe(e.config,t);case`append`:return await ke(e.config,t,e);case`mkdir`:return Ae(e.config,t);case`git-init`:return Te(e.config);case`exec`:return Ee(e.config,t);default:{let t=e.type;return`${k.yellow}⚠ Diff not available for task type: ${t}${k.reset}`}}}catch(e){return`${k.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${k.reset}`}}async function N(e,t){console.log(`${k.blue}═══════════════════════════════════════════════════════${k.reset}`),console.log(`${k.blue} DRY RUN - Preview of changes${k.reset}`),console.log(`${k.blue}═══════════════════════════════════════════════════════${k.reset}`);for(let n of e){console.log(`${k.cyan}▶ Task: ${n.name}${k.reset}`),n.description!=null&&n.description!==``&&console.log(`${k.gray} ${n.description}${k.reset}`);let e=await je(n,t);console.log(e),console.log(`${k.gray}${`─`.repeat(55)}${k.reset}`)}console.log(`${k.blue}═══════════════════════════════════════════════════════${k.reset}`),console.log(`${k.yellow} No changes were applied (dry-run mode)${k.reset}`),console.log(`${k.blue}═══════════════════════════════════════════════════════${k.reset}`)}const P=new Map,F={},I=new Map;function L(e){if(e.name==null||e.name===``)throw TypeError(`Plugin name is required`);if(!Array.isArray(e.taskTypes)||e.taskTypes.length===0)throw TypeError(`Plugin ${e.name} must define at least one task type`);if(typeof e.execute!=`function`)throw TypeError(`Plugin ${e.name} must provide an execute function`);if(P.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(I.has(t)){let e=I.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}P.set(e.name,e);for(let t of e.taskTypes)I.set(t,e.name);n.d(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function Me(e){let t=P.get(e);if(t!=null){for(let e of t.taskTypes)I.delete(e);P.delete(e)}}function Ne(e){return P.get(e)}function R(e){let t=I.get(e);if(t!=null)return P.get(t)}function z(e){return I.has(e)}function Pe(){return Array.from(P.keys())}function Fe(){P.clear(),I.clear()}function Ie(e){e.beforeAll!=null&&(F.beforeAll=e.beforeAll),e.afterAll!=null&&(F.afterAll=e.afterAll),e.beforeTask!=null&&(F.beforeTask=e.beforeTask),e.afterTask!=null&&(F.afterTask=e.afterTask),e.onError!=null&&(F.onError=e.onError)}async function B(e,...t){let r=F[e];if(r!=null)try{e===`beforeAll`||e===`afterAll`?await r(t[0]):(e===`beforeTask`||e===`afterTask`||e===`onError`)&&await r(t[0],t[1])}catch(t){n.a(`Error in ${e} hook: ${t instanceof Error?t.message:String(t)}`,`error`)}}async function Le(e,t,n){let r=R(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}async function Re(e,t){let n=R(e.type);if(!(n==null||n.getDiff==null))return n.getDiff(e,t)}function ze(e){let t=R(e.type);return t==null?[`No plugin found for task type: ${e.type}`]:t.validate==null?[]:t.validate(e)}function Be(e,t,n,r){return{name:e,...r?.version!=null&&{version:r.version},taskTypes:[t],execute:n,...r?.getDiff!=null&&{getDiff:r.getDiff},...r?.validate!=null&&{validate:r.validate}}}var Ve=class{transformers=new Map;constructor(){this.registerBuiltInTransformers()}registerBuiltInTransformers(){for(let e of[{id:`lowercase`,type:`lowercase`},{id:`uppercase`,type:`uppercase`},{id:`trim`,type:`trim`},{id:`slugify`,type:`slugify`},{id:`capitalize`,type:`capitalize`},{id:`titlecase`,type:`titlecase`},{id:`camelcase`,type:`camelcase`},{id:`pascalcase`,type:`pascalcase`},{id:`snakecase`,type:`snakecase`},{id:`kebabcase`,type:`kebabcase`},{id:`constantcase`,type:`constantcase`},{id:`alphanumeric`,type:`alphanumeric`},{id:`collapse-spaces`,type:`collapse-spaces`},{id:`remove-spaces`,type:`remove-spaces`},{id:`urlencode`,type:`urlencode`},{id:`dasherize`,type:`dasherize`},{id:`underscore`,type:`underscore`}])this.transformers.set(e.id,e)}register(e){this.transformers.has(e.id)&&n.a(`Transformer with id "${e.id}" is already registered. Overwriting.`,`warn`),this.transformers.set(e.id,e)}registerAll(e){for(let t of e)this.register(t)}get(e){return this.transformers.get(e)}has(e){return this.transformers.has(e)}async execute(e,t,n={}){let r=this.transformers.get(e);if(!r)throw h.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof h?t:h.executionFailed(e,t instanceof Error?t.message:String(t))}}async executeChain(e,t,n={}){let r=t;for(let t of e)r=await this.execute(t,r,n);return r}async apply(e,t,n={}){return e===void 0?t:this.executeChain(e,t,n)}validate(e){if(e===void 0)return[];let t=e,n=[];for(let e of t)this.has(e)||n.push(`Transformer "${e}" not found`);return n}async executeTransformer(e,t,n){switch(e.type){case`regex`:return this.executeRegex(e,t);case`computed`:return this.executeComputed(e,t,n);case`lowercase`:return this.executeLowercase(t);case`uppercase`:return this.executeUppercase(t);case`trim`:return this.executeTrim(t);case`slugify`:return this.executeSlugify(t);case`capitalize`:return this.executeCapitalize(t);case`titlecase`:return this.executeTitlecase(t);case`camelcase`:return this.executeCamelcase(t);case`pascalcase`:return this.executePascalcase(t);case`snakecase`:return this.executeSnakecase(t);case`kebabcase`:return this.executeKebabcase(t);case`constantcase`:return this.executeConstantcase(t);case`alphanumeric`:return this.executeAlphanumeric(t);case`collapse-spaces`:return this.executeCollapseSpaces(t);case`remove-spaces`:return this.executeRemoveSpaces(t);case`urlencode`:return this.executeUrlencode(t);case`dasherize`:return this.executeDasherize(t);case`underscore`:return this.executeUnderscore(t);case`custom`:return this.executeCustom(e,t,n);case`chain`:return this.executeChainTransformer(e,t,n);default:{let t=e;throw h.invalidType(t.id,t.type)}}}executeRegex(e,t){let n=String(t),{pattern:r,flags:i,replacement:a}=e.config;try{let e=new RegExp(r,i);return n.replace(e,a)}catch(t){throw h.executionFailed(e.id,`Invalid regex pattern: ${t instanceof Error?t.message:String(t)}`)}}executeComputed(e,t,n){let{expression:r}=e.config;try{return Function(`value`,`context`,...Object.keys(n),`return ${r}`)(t,n,...Object.values(n))}catch(t){throw h.executionFailed(e.id,`Expression evaluation failed: ${t instanceof Error?t.message:String(t)}`)}}executeLowercase(e){return(0,l.lowerCase)(String(e))}executeUppercase(e){return(0,l.upperCase)(String(e))}executeTrim(e){return String(e).trim()}executeSlugify(e){return String(e).toLowerCase().trim().replace(/[\s_]+/gu,`-`).replace(/[^\w-]+/gu,``).replace(/-{2,}/gu,`-`).replace(/^-+/u,``).replace(/-+$/u,``)}async executeCustom(e,t,n){let{handler:r}=e.config;if(typeof r==`function`)return r(t,n);throw h.executionFailed(e.id,`String-based custom handlers are not yet supported. Please use function handlers.`)}async executeChainTransformer(e,t,n){let{transformers:r}=e.config;if(r.length===0)throw h.executionFailed(e.id,`Chain transformer must have at least one transformer`);return this.executeChain(r,t,n)}executeCapitalize(e){return(0,l.capitalCase)(String(e))}executeTitlecase(e){return(0,l.capitalCase)(String(e))}executeCamelcase(e){return(0,l.camelCase)(String(e))}executePascalcase(e){return(0,l.pascalCase)(String(e))}executeSnakecase(e){return(0,l.snakeCase)(String(e))}executeKebabcase(e){return(0,l.kebabCase)(String(e))}executeConstantcase(e){return(0,l.constantCase)(String(e))}executeAlphanumeric(e){return String(e).replace(/[^a-zA-Z0-9]/gu,``)}executeCollapseSpaces(e){return String(e).replace(/\s+/gu,` `)}executeRemoveSpaces(e){return String(e).replace(/\s/gu,``)}executeUrlencode(e){return encodeURIComponent(String(e))}executeDasherize(e){return(0,l.kebabCase)(String(e))}executeUnderscore(e){return(0,l.snakeCase)(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};const V=new Ve;function He(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function Ue(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function H(e,t){let n=Ue(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-B6BwGcug.cjs`));return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await Promise.resolve().then(()=>require(`./utils-B6BwGcug.cjs`));if(typeof e==`object`&&e&&`status`in e&&typeof e.status==`number`){let{status:r}=e;if(r>=1&&r<=255)return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}if(n.type===`condition`)return He(n.value,t)}return!0}async function U(e,t,r){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let i=e;if(i.type===`conditional`){if(!r)return;if(typeof i.condition!=`string`){n.a(`Prompt "${t}": conditional default must have a string condition`,`error`);return}try{let{evaluateCondition:e}=await Promise.resolve().then(()=>require(`./utils-B6BwGcug.cjs`)),n=e(i.condition,r)?i.ifTrue:i.ifFalse;return typeof n==`object`&&n?await U(n,t,r):n}catch(e){n.a(`Prompt "${t}": failed to evaluate conditional default: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(i.type===`exec`){let e=i.value;if(typeof e!=`string`){n.a(`Prompt "${t}": exec default value must have a string command`,`error`);return}try{let t=(0,s.execSync)(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim();if(t.startsWith(`{`)||t.startsWith(`[`))try{return JSON.parse(t)}catch{return t}if(/^-?\d+(?:\.\d+)?$/u.test(t)){let e=Number.parseFloat(t);if(!Number.isNaN(e))return e}return t===`true`||t===`false`?t===`true`:t}catch(e){n.d(`Prompt "${t}": failed to execute default value command: ${e instanceof Error?e.message:`Unknown error`}`);return}}else if(i.type===`static`)return i.value;else if(i.type===`interpolate`){let e=i.value;if(typeof e!=`string`){n.a(`Prompt "${t}": interpolate default value must be a string with {{variable}} placeholders`,`error`);return}if(!r)return n.a(`Prompt "${t}": interpolate default value requires context but none provided`,`warn`),e;try{return n.i(e,r)}catch(r){return n.a(`Prompt "${t}": failed to interpolate interpolate default value: ${r instanceof Error?r.message:`Unknown error`}`,`warn`),e}}else if(i.type!==void 0){n.a(`Prompt "${t}": unknown default value type "${i.type}". Expected "static", "exec", "conditional", or "interpolate".`,`error`);return}return e}async function W(e,t=new Map,r={}){let i={};if(e.length===0)return i;for(let a of e){if(a.$templateEnabled!=null&&!await n.u(a.$templateEnabled,{...r,...i}))continue;let e={...r,...i};if(await n.u(a.enabled,e))try{let r,o=t.get(a.id);switch(a.default!==void 0&&(o=await U(a.default,a.id,e)),a.type){case`input`:{let t={message:a.message};o!==void 0&&(t.default=String(o));let i=await H(a.required,e);if(i!==void 0&&(t.required=i),r=await(0,c.input)(t),i&&(r==null||typeof r==`string`&&r.trim()===``))throw n.a(`${a.message} is required`,`error`),p.required(a.id);break}case`password`:if(r=await(0,c.password)({message:a.message,mask:`*`}),await H(a.required,e)&&(r==null||typeof r==`string`&&r.trim()===``))throw n.a(`${a.message} is required`,`error`),p.required(a.id);break;case`number`:{let t={message:a.message};o!==void 0&&(t.default=Number(o));let i=await H(a.required,e);if(i!==void 0&&(t.required=i),a.min!==void 0&&(t.min=a.min),a.max!==void 0&&(t.max=a.max),r=await(0,c.number)(t),i&&r==null)throw n.a(`${a.message} is required`,`error`),p.required(a.id);break}case`select`:{let e={message:a.message,choices:a.choices.map(e=>({name:e.name,value:e.value}))};o!==void 0&&(e.default=o),r=await(0,c.select)(e);break}case`confirm`:{let e=o===void 0?!1:!!o;r=await(0,c.confirm)({message:a.message,default:e});break}default:throw n.a(`Unknown prompt type: ${a.type}`,`error`),p.unknownType(a.type)}a.transformers!==void 0&&(r=await V.apply(a.transformers,r,{...e,...i})),i[a.id]=r}catch(e){throw e instanceof Error&&n.a(`Failed to collect prompt "${a.id}": ${e.message}`,`error`),e}}return i}async function G(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await U(e.default,e.id,t);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function K(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`){r.choices.length===0&&t.push(`Select prompt "${r.id}" must have at least one choice`);for(let e of r.choices)(!e.name||e.name.trim()===``)&&t.push(`Select prompt "${r.id}" has a choice with empty name`),e.value===void 0&&t.push(`Select prompt "${r.id}" has a choice with undefined value`)}r.type===`number`&&r.min!==void 0&&r.max!==void 0&&r.min>r.max&&t.push(`Number prompt "${r.id}" has min greater than max`)}return t}const We=(0,o.promisify)(r.default.appendFile),Ge=(0,o.promisify)(r.default.readFile),Ke=(0,o.promisify)(r.default.stat);async function qe(e,t,r){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping append task`,`info`);return}let o=i.default.join(a.default.cwd(),e.file),s={};e.content==null?e.template!=null&&(s.template=e.template):s.template=e.content,e.templateFile!=null&&(s.templateFile=e.templateFile);let c=T(s);if(!c.isValid)throw c.error?.includes(`cannot have both`)?m.templateHasBothTemplateAndFile():m.templateMissingTemplateOrFile();let l=await E(s,t,r),u=!1,d=!1;try{await Ke(o),u=!0;let t=await Ge(o,`utf-8`);t.length>0&&!t.endsWith(`
|
|
23
|
+
`)&&(d=e.newline!==!1)}catch{}u&&d?await We(o,`\n${l}`):await We(o,l),n.a(`Appended content to ${e.file}`,`success`)}const Je={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await qe(e.config,t,e)}},Ye=(0,o.promisify)(r.default.copyFile),Xe=(0,o.promisify)(r.default.stat),Ze=(0,o.promisify)(r.default.mkdir),Qe=(0,o.promisify)(r.default.readdir);async function $e(e,t){await Ze(t,{recursive:!0});let n=await Qe(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=i.default.join(e,n.name),a=i.default.join(t,n.name);n.isDirectory()?await $e(r,a):await Ye(r,a)}))}async function et(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping copy task`,`info`);return}let r=i.default.join(a.default.cwd(),e.from),o=i.default.join(a.default.cwd(),e.to),s;try{s=await Xe(r)}catch{n.a(`Source path does not exist: ${r}`,`warn`);return}await Ze(i.default.dirname(o),{recursive:!0}),s.isDirectory()?(await $e(r,o),n.a(`Copied directory ${e.from} to ${e.to}`,`success`)):(await Ye(r,o),n.a(`Copied file ${e.from} to ${e.to}`,`success`))}const tt={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await et(e.config,t)}},nt=(0,o.promisify)(r.default.writeFile);async function rt(e,t,o){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping create task`,`info`);return}let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s)){n.a(`File already exists, skipping: ${e.file}`,`info`);return}let c=T(e);if(!c.isValid)throw c.error?.includes(`cannot have both`)?m.createHasBothTemplateAndFile():m.createMissingTemplateOrFile();let l=await E(e,t,o),u=i.default.dirname(s);r.default.existsSync(u)||r.default.mkdirSync(u,{recursive:!0}),await nt(s,l),n.a(`Created file: ${e.file}`,`success`)}const it={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await rt(e.config,t,e)}};async function at(e,t){let{paths:o,condition:s}=e;if(s!=null&&s!==``){if(!t){n.a(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!n.t(s,t)){n.a(`Condition not met, skipping deletion`,`info`);return}}for(let e of o){let t=i.default.join(a.default.cwd(),e);r.default.existsSync(t)&&r.default.rmSync(t,{recursive:!0,force:!0})}}const ot={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await at(e.config,t)}};async function st(e,t){if(e.condition!=null&&e.condition!==``){if(!t){n.a(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!n.t(e.condition,t)){n.a(`Condition not met, skipping exec task`,`info`);return}}let r=e.cwd==null?a.default.cwd():i.default.join(a.default.cwd(),e.cwd);(0,s.execSync)(e.command,{cwd:r,stdio:`inherit`})}const ct={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await st(e.config,t)}};async function lt(e,t){if(e.condition!=null&&e.condition!==``){if(!t){n.a(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!n.t(e.condition,t)){n.a(`Condition not met, skipping git-init task`,`info`);return}}if(e.removeExisting){let e=i.default.join(a.default.cwd(),`.git`);r.default.existsSync(e)&&r.default.rmSync(e,{recursive:!0,force:!0})}if((0,s.execSync)(`git init`,{stdio:`inherit`}),e.initialCommit){let t=e.message??`Initial commit`;(0,s.execSync)(`git add .`,{stdio:`inherit`}),(0,s.execSync)(`git commit -m "${t}"`,{stdio:`inherit`})}}const ut={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await lt(e.config,t)}},dt=(0,o.promisify)(r.default.mkdir);async function ft(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping mkdir task`,`info`);return}await dt(i.default.join(a.default.cwd(),e.path),{recursive:!0}),n.a(`Created directory: ${e.path}`,`success`)}const pt={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await ft(e.config,t)}},mt=(0,o.promisify)(r.default.rename),ht=(0,o.promisify)(r.default.stat),gt=(0,o.promisify)(r.default.mkdir);async function _t(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping move task`,`info`);return}let r=i.default.join(a.default.cwd(),e.from),o=i.default.join(a.default.cwd(),e.to);try{await ht(r)}catch{n.a(`Source path does not exist: ${r}`,`warn`);return}await gt(i.default.dirname(o),{recursive:!0}),await mt(r,o),n.a(`Moved ${e.from} to ${e.to}`,`success`)}const vt={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await _t(e.config,t)}},yt=(0,o.promisify)(r.default.readFile),bt=(0,o.promisify)(r.default.writeFile);async function xt(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping regex-replace task`,`info`);return}let r=i.default.join(a.default.cwd(),e.file),{pattern:o}=e,s=e.flags??``,c=e.replacement||``,l=await yt(r,`utf-8`),u=new RegExp(o,s);l=l.replace(u,n.i(c,t)),await bt(r,l)}const St={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await xt(e.config,t)}},Ct=(0,o.promisify)(r.default.rename);async function wt(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping rename task`,`info`);return}let o=i.default.join(a.default.cwd(),n.i(e.from,t)),s=i.default.join(a.default.cwd(),n.i(e.to,t));if(!r.default.existsSync(o)){n.a(`Source path does not exist: ${o}`,`warn`);return}await Ct(o,s)}const Tt={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await wt(e.config,t)}},Et=(0,o.promisify)(r.default.readFile),Dt=(0,o.promisify)(r.default.writeFile);async function Ot(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping replace-in-file task`,`info`);return}let o=i.default.join(a.default.cwd(),e.file),{replacements:s}=e;if(!r.default.existsSync(o)){n.a(`File not found: ${o}, skipping`,`warn`);return}let c=await Et(o,`utf-8`);for(let{find:e,replace:r}of s){let i=n.i(r,t);c=c.replace(new RegExp(e,`gu`),i)}await Dt(o,c)}const kt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await Ot(e.config,t)}},At=(0,o.promisify)(r.default.readFile),jt=(0,o.promisify)(r.default.writeFile),Mt=2;async function Nt(e,t){if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping update-json task`,`info`);return}let r=i.default.join(a.default.cwd(),e.file),{updates:o}=e,s=await At(r,`utf-8`),c=JSON.parse(s);function l(e){if(typeof e==`string`)return n.i(e,t);if(Array.isArray(e))return e.map(e=>l(e));if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=l(r);return t}return e}for(let[e,t]of Object.entries(o)){let r=l(t);e.includes(`.`)?n.c(c,e,r):c[e]=r}await jt(r,`${JSON.stringify(c,null,2)}\n`)}const Pt={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await Nt(e.config,t)}},Ft=(0,o.promisify)(r.default.writeFile);async function It(e,t,o){let{allowCreate:s=!0}=e;if(e.condition!=null&&e.condition!==``&&!n.t(e.condition,t)){n.a(`Condition not met, skipping write task`,`info`);return}let c=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(c)){if(s===!1)throw Error(`Write task failed: file does not exist (${e.file})`);n.a(`File not found, creating new file: ${e.file}`,`info`)}let l=T(e);if(!l.isValid)throw l.error?.includes(`cannot have both`)?m.templateHasBothTemplateAndFile():m.templateMissingTemplateOrFile();let u=await E(e,t,o),d=i.default.dirname(c);r.default.existsSync(d)||r.default.mkdirSync(d,{recursive:!0}),await Ft(c,u)}const Lt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await It(e.config,t,e)}};function q(){z(`update-json`)||(L(Pt),L(Lt),L(it),L(St),L(kt),L(ot),L(Tt),L(ut),L(ct),L(vt),L(tt),L(Je),L(pt))}async function Rt(e,t,r=!1){if(q(),r){n.a(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(z(e.type)){await Le(e,t,{dryRun:r});return}throw TypeError(`Unknown task type: ${e.type}`)}async function J(e,t,r,i,o=!1){try{return n.a(`[${r}/${i}] Running: ${e.name}...`,`info`),await Rt(e,t,o),n.a(`[${r}/${i}] Completed: ${e.name}...`,`success`),!0}catch(t){return n.a(`Failed: ${e.name}`,`error`),t instanceof Error&&(n.a(` Reason: ${t.message}`,`error`),t.stack!=null&&a.default.env.DEBUG!=null&&console.error(t.stack)),!1}}function Y(e){let t=[],r=new Set,i=new Set,a=new Map(e.map(e=>[e.id,e]));function o(e){if(r.has(e))return;if(i.has(e))throw n.x.forTaskDependency(e);i.add(e);let s=a.get(e);if(!s)throw f.forId(e);if(s.dependencies)for(let e of s.dependencies)o(e);i.delete(e),r.add(e),t.push(s)}for(let t of e)r.has(t.id)||o(t.id);return t}function zt(e){let t=[];for(let n of e)if(!z(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=Bt(n);t.push(...e)}return t}function Bt(e){let t=[],n=e.config,r=typeof n.template==`string`?n.template:void 0,i=typeof n.templateFile==`string`?n.templateFile:void 0,a=T({...r!==void 0&&{template:r},...i!==void 0&&{templateFile:i}});return!a.isValid&&a.error!=null&&a.error!==``&&t.push(`Task "${e.id}" (${e.name}): ${a.error}`),(n.file==null||n.file===``)&&t.push(`Task "${e.id}" (${e.name}): Write task requires "file" property to specify the output file path`),t}function Vt(e){n.a(`❌ Template validation failed:`,`error`),n.a(``,`error`);for(let t of e)n.a(` • ${t}`,`error`);n.a(``,`error`),n.a(`Please fix these errors before continuing.`,`error`)}async function X(e,t=new Map,n={}){let r={};for(let i of e){let e=t.get(i.id);e!==void 0&&(i.transformers!==void 0&&(e=await V.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}async function Z(e,t,r){if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let i=e;if(i.type===`conditional`){if(!r){n.a(`Variable "${t}": conditional value requires context but none provided`,`warn`);return}if(typeof i.condition!=`string`){n.a(`Variable "${t}": conditional value must have a string condition`,`error`);return}try{let{evaluateCondition:e}=await Promise.resolve().then(()=>require(`./utils-B6BwGcug.cjs`)),n=e(i.condition,r)?i.ifTrue:i.ifFalse;return typeof n==`object`&&n?await Z(n,t,r):n}catch(e){n.a(`Variable "${t}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(i.type===`exec`){let e=i.value;if(typeof e!=`string`){n.a(`Variable "${t}": exec value must have a string command`,`error`);return}try{let t=(0,s.execSync)(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim();if(t.startsWith(`{`)||t.startsWith(`[`))try{return JSON.parse(t)}catch{return t}if(/^-?\d+(?:\.\d+)?$/u.test(t)){let e=Number.parseFloat(t);if(!Number.isNaN(e))return e}return t===`true`||t===`false`?t===`true`:t}catch(e){n.a(`Variable "${t}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}else if(i.type===`static`)return i.value;else if(i.type===`interpolate`){let e=i.value;if(typeof e!=`string`){n.a(`Variable "${t}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!r)return n.a(`Variable "${t}": interpolate value requires context but none provided`,`warn`),e;try{return n.i(e,r)}catch(r){return n.a(`Variable "${t}": failed to interpolate interpolate value: ${r instanceof Error?r.message:`Unknown error`}`,`warn`),e}}else if(i.type!==void 0){n.a(`Variable "${t}": unknown value type "${i.type}". Expected "static", "exec", "conditional", or "interpolate".`,`error`);return}return e}async function Q(e,t,r){let i=new Map;for(let a of e){if(r?.skipConditional===!0&&typeof a.value==`object`&&a.value!==null&&!Array.isArray(a.value)&&a.value.type===`conditional`)continue;if(a.$templateEnabled!=null){let e={...t};for(let[t,n]of i.entries())e[t]=n;if(!await n.u(a.$templateEnabled,e))continue}let e={...t};for(let[t,n]of i.entries())e[t]=n;let o=await Z(a.value,a.id,e);o!==void 0&&i.set(a.id,o)}return i}function $(e){let t=[],n=new Set;for(let r of e)n.has(r.id)&&t.push(`Duplicate variable ID: "${r.id}"`),n.add(r.id);return t}async function Ht(e,r){let i=t.t();if(!await n.u(r.templateEnabled,i,{lazy:!0})){n.f(`⊘ Template is disabled - skipping all execution`);return}r.transformers!==void 0&&r.transformers.length>0&&(n.d(`Registering ${r.transformers.length} transformer(s)...`),V.registerAll(r.transformers)),n.d(`Registering built-in plugins...`),q(),n.d(`Validating task configurations...`);let o=zt(e);o.length>0&&(Vt(o),a.default.exit(1)),n.d(`All tasks validated successfully`);let s=e.filter(e=>n.l(e.enabled,t.t(),{lazy:!0}));n.d(`Resolving task dependencies...`);let c=Y(s);n.d(`Sorted ${c.length} task(s) by dependencies`),n.f(`Welcome! Let's execute your tasks.`),r.dryRun&&n.h(`🔍 DRY RUN MODE - No changes will be made`),n.f(`This will execute your project tasks based on the defined configuration.`);let l=i,u=[...r.variables??[]];if(u.length>0){let e=$(u);e.length>0&&(n.a(`❌ Variable validation errors:`,`error`),e.forEach(e=>n.a(` - ${e}`,`error`)),a.default.exit(1)),n.d(`Resolving variable values...`);let t=await X(u,await Q(u,l,{skipConditional:!0}),l);Object.assign(l,t),Object.keys(t).length>0&&(n.d(`Resolved ${Object.keys(t).length} variable(s)`),n.d(`Variable values: ${JSON.stringify(t)}`))}let d=r.prompts??[],f=[...d];if(f.length>0){let e=K(f);e.length>0&&(n.a(`❌ Prompt validation errors:`,`error`),e.forEach(e=>n.a(` - ${e}`,`error`)),a.default.exit(1)),n.d(`Resolving prompt default values...`);let t=await G(f,l);if(d.length>0){n.f(`📋 Collecting prompts (available to all tasks):`);let e=await W(d,t,l);Object.assign(l,e)}}if(u.length>0){let e=u.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(e.length>0){n.d(`Re-resolving conditional variables with prompt values...`);let t=await X(e,await Q(e,l),l);Object.assign(l,t),Object.keys(t).length>0&&n.d(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await n.u(r.templateEnabled,l)){n.f(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let p=[];for(let e of c)e.$templateEnabled!=null&&!await n.u(e.$templateEnabled,l)||await n.u(e.enabled,l)&&p.push(e);if(n.a(`${p.length} of ${c.length} task(s) enabled for execution`,`info`),r.dryRun){await N(p,l),n.f(`🔍 Dry run completed - no changes were made`),n.f(`Run without --dry-run to apply changes`);return}n.d(`Calling beforeAll hook...`),await B(`beforeAll`,l);let m=p.length,h=0,g=0,_=[],v=[];for(let e=0;e<p.length;e++){let t=p[e];t!=null&&(n.d(`Calling beforeTask hook for task: ${t.name}`),await B(`beforeTask`,t,l),await J(t,l,e+1,m,r.dryRun)?(h++,_.push(t.id),n.d(`Calling afterTask hook for task: ${t.name}`),await B(`afterTask`,t,l)):(await H(t.required,l)&&(g++,v.push(t.name)),n.d(`Calling onError hook for task: ${t.name}`),await B(`onError`,Error(`Task ${t.name} failed`),t),n.h(`⚠️ Task "${t.name}" failed, continuing with remaining tasks...`)))}g>0&&(n.a(`\n❌ Task execution completed with ${g} error(s)`,`error`),n.a(`Completed: ${h}/${m} tasks`,`info`),n.a(`Failed tasks: ${v.join(`, `)}`,`error`),a.default.exit(1)),n.d(`Calling afterAll hook...`),await B(`afterAll`,l),n.m(`✅ All tasks completed successfully!`),n.m(` Completed: ${h}/${m} tasks`)}async function Ut(e,t,r={}){n.d(`Running templates with sequential variable/prompt resolution...`),n.d(`Total templates to process: ${e.length}`),n.d(`Registering built-in plugins...`),q();let i=[];console.log(``),n.f(`📋 Collecting input...`),console.log(``);for(let t=0;t<e.length;t++){let o=e[t];if(o==null)continue;let s=`=`.repeat(60);if(n.d(`\n${s}`),n.d(`Processing template ${t+1}/${e.length}: "${o.name}"`),n.d(s),n.d(`Current config keys: ${Object.keys(r).join(`, `)}`),!await n.u(o.enabled,r)){n.f(`⊘ Template "${o.name}" is disabled - skipping`),n.d(` Enabled condition: ${JSON.stringify(o.enabled)}`);continue}let c=o.variables??[];if(c.length>0){n.d(`Processing ${c.length} variable(s) for template "${o.name}"...`);let e=$(c);e.length>0&&(n.a(`❌ Variable validation errors:`,`error`),e.forEach(e=>n.a(` - ${e}`,`error`)),a.default.exit(1));let t=await X(c,await Q(c,r,{skipConditional:!0}),r);Object.assign(r,t);let i=c.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1),s=0;if(i.length>0){let e=await X(i,await Q(i,r),r);if(s=Object.keys(e).length,Object.assign(r,e),s>0){n.d(`Resolved ${s} conditional variable(s)`);for(let[t,r]of Object.entries(e))n.d(` ${t} = ${JSON.stringify(r)}`)}}let l=Object.keys(t).length+s;if(l>0){n.d(`Total variables resolved for template: ${l}`);for(let[e,r]of Object.entries(t))n.d(` ${e} = ${JSON.stringify(r)}`)}}let l=o.prompts??[];if(l.length>0){n.d(`Processing ${l.length} prompt(s) for template "${o.name}"...`);let e=K(l);e.length>0&&(n.a(`❌ Prompt validation errors:`,`error`),e.forEach(e=>n.a(` - ${e}`,`error`)),a.default.exit(1));let t=await W(l,await G(l,r),r);Object.assign(r,t),n.d(`Collected ${Object.keys(t).length} prompt answer(s)`)}if(!await n.u(o.enabled,r)){n.f(`⊘ Template "${o.name}" became disabled after variable/prompt resolution - skipping tasks`);continue}let u=o.tasks??[];u.length>0&&(n.d(`Found ${u.length} task(s) in template "${o.name}" (will execute later)`),i.push(...u))}if(n.d(`
|
|
24
|
+
🔧 Validating and filtering all collected tasks...`),i.length===0){n.a(`No tasks found in any template`,`info`);return}let o=zt(i);o.length>0&&(Vt(o),a.default.exit(1)),console.log(``),n.a(`🛠️ Preparing tasks...`,`info`);let s=[];for(let e of i)await n.u(e.enabled,r)&&s.push(e);if(console.log(``),n.a(`Found ${i.length} tasks (${s.length} enabled)`,`info`),n.a(`All tasks validated successfully`,`success`),s.length===0){n.a(`No enabled tasks to execute`,`info`);return}let c=Y(s);if(t.dryRun){n.a(`
|
|
25
|
+
🔍 Dry run - showing task changes...`,`info`),await N(c,r),n.a(`
|
|
26
|
+
🔍 Dry run completed - no changes were made`,`info`),n.a(`Run without --dry-run to apply changes`,`info`);return}console.log(``),n.f(`⚙️ Executing tasks...`),console.log(``),await B(`beforeAll`,r);let l=0,u=0,d=[];for(let e=0;e<c.length;e++){let i=c[e];i!=null&&(await B(`beforeTask`,i,r),await J(i,r,e+1,c.length,t.dryRun)?(l++,await B(`afterTask`,i,r)):(await H(i.required,r)&&(u++,d.push(i.name)),await B(`onError`,Error(`Task ${i.name} failed`),i),n.h(`⚠️ Task "${i.name}" failed, continuing with remaining tasks...`)))}await B(`afterAll`,r),u>0&&(n.a(`\n❌ Task execution completed with ${u} error(s)`,`error`),n.a(`Completed: ${l}/${c.length} tasks`,`info`),n.a(`Failed tasks: ${d.join(`, `)}`,`error`),a.default.exit(1)),n.a(`Completed: ${l}/${c.length} tasks`,`success`)}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,`G`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,`J`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`K`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`W`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`X`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`Y`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Rt}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Ut}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`q`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Ht}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Ne}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return D}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`./config-DlJs75hK.cjs`),require(`./utils-Bz23aLK_.cjs`);const e=require(`./run-tasks-CSR8df5O.cjs`);exports.runTasks=e.t,exports.runTemplatesSequentially=e.n;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const e=require(`../chunk-DjWAcSYV.cjs`),t=require(`../validate-scaffoldfy-json-Dkaz9ueq.cjs`);let n=require(`node:fs`);n=e.t(n);let r=require(`node:path`);r=e.t(r);let i=require(`node:process`);i=e.t(i);let a=require(`commander`);a=e.t(a);function o(e){let t=[];function i(e){let a=n.default.readdirSync(e,{withFileTypes:!0});for(let n of a){let a=r.default.join(e,n.name);n.isDirectory()?n.name!==`node_modules`&&n.name!==`.git`&&!n.name.startsWith(`.`)&&i(a):n.isFile()&&n.name.endsWith(`.json`)&&t.push(a)}}return i(e),t}function s(){let e=new a.Command;e.name(`validate-scaffoldfy-json`).description(`Validate scaffoldfy JSON files against their schemas`).version(`1.0.0`).option(`-f, --file <path>`,`Path to a JSON file to validate`).option(`-d, --dir <path>`,`Path to a directory to scan for JSON files`).parse(i.default.argv);let n=e.opts(),r=[];n.file!==void 0&&n.file!==``?r=[n.file]:n.dir!==void 0&&n.dir!==``?(console.log(`Scanning directory: ${n.dir}`),r=o(n.dir),console.log(`Found ${r.length} JSON file(s)\n`)):(console.error(`Error: Please provide either --file or --dir option`),e.help());let s=!1;for(let e of r){console.log(`Validating ${e}...`);let n=t.t(e);if(n.valid)console.log(`✅ ${e} is valid`);else if(s=!0,console.error(`❌ ${e} validation failed:`),n.errors)for(let e of n.errors)console.error(` ${e}`)}s&&i.default.exit(1),console.log(`
|
|
3
|
+
✅ All files validated successfully!`)}require(`url`).pathToFileURL(__filename).href===`file://${i.default.argv[1]}`&&s();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{t as e}from"../validate-scaffoldfy-json-Cfq-nQjy.js";import t from"node:path";import n from"node:fs";import r from"node:process";import{Command as i}from"commander";function a(e){let r=[];function i(e){let a=n.readdirSync(e,{withFileTypes:!0});for(let n of a){let a=t.join(e,n.name);n.isDirectory()?n.name!==`node_modules`&&n.name!==`.git`&&!n.name.startsWith(`.`)&&i(a):n.isFile()&&n.name.endsWith(`.json`)&&r.push(a)}}return i(e),r}function o(){let t=new i;t.name(`validate-scaffoldfy-json`).description(`Validate scaffoldfy JSON files against their schemas`).version(`1.0.0`).option(`-f, --file <path>`,`Path to a JSON file to validate`).option(`-d, --dir <path>`,`Path to a directory to scan for JSON files`).parse(r.argv);let n=t.opts(),o=[];n.file!==void 0&&n.file!==``?o=[n.file]:n.dir!==void 0&&n.dir!==``?(console.log(`Scanning directory: ${n.dir}`),o=a(n.dir),console.log(`Found ${o.length} JSON file(s)\n`)):(console.error(`Error: Please provide either --file or --dir option`),t.help());let s=!1;for(let t of o){console.log(`Validating ${t}...`);let n=e(t);if(n.valid)console.log(`✅ ${t} is valid`);else if(s=!0,console.error(`❌ ${t} validation failed:`),n.errors)for(let e of n.errors)console.error(` ${e}`)}s&&r.exit(1),console.log(`
|
|
3
|
+
✅ All files validated successfully!`)}import.meta.url===`file://${r.argv[1]}`&&o();export{};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../validate-scaffoldfy-json-Dkaz9ueq.cjs`);require(`../scaffoldfy-config-json-validator-CpEXHRsI.cjs`),exports.validateScaffoldfyJsonFile=e.t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"../validate-scaffoldfy-json-Cfq-nQjy.js";import"../scaffoldfy-config-json-validator-DP8-e4Yy.js";export{e as validateScaffoldfyJsonFile};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../validate-scaffoldfy-json-Dkaz9ueq.cjs`);exports.validateScaffoldfyJsonFile=e.t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"../validate-scaffoldfy-json-Cfq-nQjy.js";export{e as validateScaffoldfyJsonFile};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./utils-
|
|
1
|
+
import{a as e}from"./utils-CrJkuEEG.js";import{t}from"./run-tasks-BsR0t7C5.js";import n from"node:process";const r=n.argv.includes(`--dry-run`),i=n.argv.includes(`--force`);async function a(a){try{let o=a||[];o.length===0&&(e(`⚠️ No tasks defined. Use --config to specify tasks or call runWithTasks() programmatically.`,`warn`),e(`Example: scaffoldfy --config ./tasks.json`,`info`),n.exit(1)),await t(o,{dryRun:r,force:i,tasksFilePath:void 0})}catch(t){e(`❌ Task execution failed`,`error`),t instanceof Error?(e(`Error: ${t.message}`,`error`),n.env.DEBUG!=null&&console.error(t.stack)):console.error(t),n.exit(1)}}async function o(a,o){try{await t(a,{dryRun:o?.dryRun??r,force:o?.force??i,tasksFilePath:o?.tasksFilePath??void 0,...o?.variables!=null&&{variables:o.variables},...o?.prompts!=null&&{prompts:o.prompts},...o?.templateEnabled!=null&&{templateEnabled:o.templateEnabled},...o?.transformers!=null&&{transformers:o.transformers}})}catch(t){e(`❌ Task execution failed`,`error`),t instanceof Error?(e(`Error: ${t.message}`,`error`),n.env.DEBUG!=null&&console.error(t.stack)):console.error(t),n.exit(1)}}export{o as n,a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./utils-
|
|
1
|
+
const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./utils-Bz23aLK_.cjs`),n=require(`./run-tasks-CSR8df5O.cjs`);let r=require(`node:process`);r=e.t(r);const i=r.default.argv.includes(`--dry-run`),a=r.default.argv.includes(`--force`);async function o(e){try{let o=e||[];o.length===0&&(t.a(`⚠️ No tasks defined. Use --config to specify tasks or call runWithTasks() programmatically.`,`warn`),t.a(`Example: scaffoldfy --config ./tasks.json`,`info`),r.default.exit(1)),await n.t(o,{dryRun:i,force:a,tasksFilePath:void 0})}catch(e){t.a(`❌ Task execution failed`,`error`),e instanceof Error?(t.a(`Error: ${e.message}`,`error`),r.default.env.DEBUG!=null&&console.error(e.stack)):console.error(e),r.default.exit(1)}}async function s(e,o){try{await n.t(e,{dryRun:o?.dryRun??i,force:o?.force??a,tasksFilePath:o?.tasksFilePath??void 0,...o?.variables!=null&&{variables:o.variables},...o?.prompts!=null&&{prompts:o.prompts},...o?.templateEnabled!=null&&{templateEnabled:o.templateEnabled},...o?.transformers!=null&&{transformers:o.transformers}})}catch(e){t.a(`❌ Task execution failed`,`error`),e instanceof Error?(t.a(`Error: ${e.message}`,`error`),r.default.env.DEBUG!=null&&console.error(e.stack)):console.error(e),r.default.exit(1)}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./utils-
|
|
1
|
+
const e=require(`./utils-Bz23aLK_.cjs`);exports.debug=e.d,exports.evaluateCondition=e.t,exports.evaluateEnabled=e.l,exports.evaluateEnabledAsync=e.u,exports.getGitRepoInfo=e.n,exports.getNestedProperty=e.r,exports.interpolateTemplate=e.i,exports.log=e.a,exports.logInfo=e.f,exports.logSuccess=e.m,exports.logWarn=e.h,exports.prompt=e.o,exports.promptYesNo=e.s,exports.setNestedProperty=e.c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,m as s,n as c,o as l,r as u,s as d,t as f,u as p}from"./utils-
|
|
1
|
+
import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,m as s,n as c,o as l,r as u,s as d,t as f,u as p}from"./utils-CrJkuEEG.js";export{n as debug,f as evaluateCondition,o as evaluateEnabled,p as evaluateEnabledAsync,c as getGitRepoInfo,u as getNestedProperty,a as interpolateTemplate,e as log,r as logInfo,s as logSuccess,i as logWarn,l as prompt,d as promptYesNo,t as setNestedProperty};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./chunk-DjWAcSYV.cjs`);let t=require(`node:fs`);t=e.t(t);let n=require(`node:path`);n=e.t(n);let r=require(`node:process`);r=e.t(r);let i=require(`node:child_process`);i=e.t(i);let a=require(`node:readline`);a=e.t(a),require(`handlebars`);var o=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},s=class e extends o{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forTemplateInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forTemplateDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},c=class e extends o{constructor(e,t){super(e,`TEMPLATE_FILE_NOT_FOUND`),this.filePath=t,this.name=`TemplateFileNotFoundError`}static forPath(t){return new e(`Template file not found: ${t}`,t)}},l=class e extends o{constructor(e,t,n){super(e,`TEMPLATE_RESOLUTION_ERROR`),this.templateFilePath=t,this.sourceUrl=n,this.name=`TemplateResolutionError`}static forRemoteTemplate(t,n){return new e(`Failed to resolve templateFile "${t}" relative to remote template "${n}"`,t,n)}},u=class e extends o{constructor(e,t,n){super(e,`TEMPLATE_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`TemplateFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch template from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch template from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},d=class e extends o{constructor(e,t,n){super(e,`TEMPLATE_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`TemplateParseError`}static forFile(t,n){return new e(`Failed to parse template file ${t}: ${n.message}`,t,n)}},f=class e extends o{constructor(e,t){super(e,`INVALID_TEMPLATE`),this.filePath=t,this.name=`InvalidTemplateError`}static forFile(t,n){return new e(`Invalid template file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid template file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid template file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid template file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}};let p=!1;function m(e){p=e}const h={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},g={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},_=`\x1B[0m`;function v(e){p&&console.log(`${g.debug}${h.debug} ${e}${_}`)}function y(e){console.log(`${g.info}${h.info} ${e}${_}`)}function b(e){console.log(`${g.success}${h.success} ${e}${_}`)}function x(e){console.log(`${g.warn}${h.warn} ${e}${_}`)}function S(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)return n?.lazy===!0;if(e.type===`condition`)return j(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function C(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)try{let{execSync:n}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-B6BwGcug.cjs`)),i=n(r(e.value,t),{encoding:`utf-8`}).trim();if(i===``||i===`0`)return!1;let a=i.toLowerCase();return!(a===`false`||a===`no`)}catch(t){let{log:n}=await Promise.resolve().then(()=>require(`./utils-B6BwGcug.cjs`));return n(`Failed to execute enabled command: ${e.value}`,`warn`),t instanceof Error&&n(` Error: ${t.message}`,`warn`),!1}if(e.type===`condition`)return j(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function w(){try{let e=(0,i.execSync)(`git remote get-url origin`,{encoding:`utf-8`}).trim(),t=e.match(/github\.com[:/](?<owner>[^/]+)\/(?<name>[^/]+)$/u);if(t?.groups){let{owner:n,name:r}=t.groups,i=r;return i.endsWith(`.git`)&&(i=i.slice(0,-4)),{owner:n,name:i,url:e}}return null}catch{return null}}async function T(e,t){let n=a.default.createInterface({input:r.default.stdin,output:r.default.stdout});return new Promise(r=>{let i;i=t==null?`${e}: `:`${e} (${t}): `,n.question(i,e=>{n.close(),r(e.trim()||(t??``))})})}async function E(e,t=!1){return T(`${e} (${t?`Y/n`:`y/N`})`,t?`y`:`n`).then(e=>e.toLowerCase()===`y`||e.toLowerCase()===`yes`)}function D(e,t=`info`){console.log(`${{info:`\x1B[36m`,success:`\x1B[32m`,error:`\x1B[31m`,warn:`\x1B[33m`}[t]}${{info:`ℹ`,success:`✓`,error:`✗`,warn:`⚠`}[t]} ${e}[0m`)}function O(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>A(t,n)?.toString()??``)}function k(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];t!=null&&t!==``&&((!(t in i)||typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t])}let a=r[r.length-1];a!=null&&a!==``&&(i[a]=n)}function A(e,t){let n=t.split(`.`),r=e;for(let e of n)if(e!==``&&typeof r==`object`&&r)r=r[e];else return;return r}function j(e,t,n){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch(t){return n?.lazy===!0&&t instanceof ReferenceError?!0:(n?.silent!==!0&&(D(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&D(` Error: ${t.message}`,`warn`)),!1)}}Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return d}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"node:path";import t from"node:fs";import n from"node:process";import{execSync as r}from"node:child_process";import i from"node:readline";import"handlebars";var a=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},o=class e extends a{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forTemplateInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forTemplateDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},s=class e extends a{constructor(e,t){super(e,`TEMPLATE_FILE_NOT_FOUND`),this.filePath=t,this.name=`TemplateFileNotFoundError`}static forPath(t){return new e(`Template file not found: ${t}`,t)}},c=class e extends a{constructor(e,t,n){super(e,`TEMPLATE_RESOLUTION_ERROR`),this.templateFilePath=t,this.sourceUrl=n,this.name=`TemplateResolutionError`}static forRemoteTemplate(t,n){return new e(`Failed to resolve templateFile "${t}" relative to remote template "${n}"`,t,n)}},l=class e extends a{constructor(e,t,n){super(e,`TEMPLATE_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`TemplateFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch template from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch template from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},u=class e extends a{constructor(e,t,n){super(e,`TEMPLATE_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`TemplateParseError`}static forFile(t,n){return new e(`Failed to parse template file ${t}: ${n.message}`,t,n)}},d=class e extends a{constructor(e,t){super(e,`INVALID_TEMPLATE`),this.filePath=t,this.name=`InvalidTemplateError`}static forFile(t,n){return new e(`Invalid template file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid template file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid template file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid template file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}};let f=!1;function p(e){f=e}const m={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},h={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},g=`\x1B[0m`;function _(e){f&&console.log(`${h.debug}${m.debug} ${e}${g}`)}function v(e){console.log(`${h.info}${m.info} ${e}${g}`)}function y(e){console.log(`${h.success}${m.success} ${e}${g}`)}function b(e){console.log(`${h.warn}${m.warn} ${e}${g}`)}function x(e,t,n){
|
|
1
|
+
import e from"node:path";import t from"node:fs";import n from"node:process";import{execSync as r}from"node:child_process";import i from"node:readline";import"handlebars";var a=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},o=class e extends a{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forTemplateInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forTemplateDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},s=class e extends a{constructor(e,t){super(e,`TEMPLATE_FILE_NOT_FOUND`),this.filePath=t,this.name=`TemplateFileNotFoundError`}static forPath(t){return new e(`Template file not found: ${t}`,t)}},c=class e extends a{constructor(e,t,n){super(e,`TEMPLATE_RESOLUTION_ERROR`),this.templateFilePath=t,this.sourceUrl=n,this.name=`TemplateResolutionError`}static forRemoteTemplate(t,n){return new e(`Failed to resolve templateFile "${t}" relative to remote template "${n}"`,t,n)}},l=class e extends a{constructor(e,t,n){super(e,`TEMPLATE_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`TemplateFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch template from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch template from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},u=class e extends a{constructor(e,t,n){super(e,`TEMPLATE_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`TemplateParseError`}static forFile(t,n){return new e(`Failed to parse template file ${t}: ${n.message}`,t,n)}},d=class e extends a{constructor(e,t){super(e,`INVALID_TEMPLATE`),this.filePath=t,this.name=`InvalidTemplateError`}static forFile(t,n){return new e(`Invalid template file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid template file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid template file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid template file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}};let f=!1;function p(e){f=e}const m={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},h={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},g=`\x1B[0m`;function _(e){f&&console.log(`${h.debug}${m.debug} ${e}${g}`)}function v(e){console.log(`${h.info}${m.info} ${e}${g}`)}function y(e){console.log(`${h.success}${m.success} ${e}${g}`)}function b(e){console.log(`${h.warn}${m.warn} ${e}${g}`)}function x(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)return n?.lazy===!0;if(e.type===`condition`)return A(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function S(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)try{let{execSync:n}=await import(`node:child_process`),{interpolateTemplate:r}=await import(`./utils-B6WSsvMT.js`),i=n(r(e.value,t),{encoding:`utf-8`}).trim();if(i===``||i===`0`)return!1;let a=i.toLowerCase();return!(a===`false`||a===`no`)}catch(t){let{log:n}=await import(`./utils-B6WSsvMT.js`);return n(`Failed to execute enabled command: ${e.value}`,`warn`),t instanceof Error&&n(` Error: ${t.message}`,`warn`),!1}if(e.type===`condition`)return A(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function C(){try{let e=r(`git remote get-url origin`,{encoding:`utf-8`}).trim(),t=e.match(/github\.com[:/](?<owner>[^/]+)\/(?<name>[^/]+)$/u);if(t?.groups){let{owner:n,name:r}=t.groups,i=r;return i.endsWith(`.git`)&&(i=i.slice(0,-4)),{owner:n,name:i,url:e}}return null}catch{return null}}async function w(e,t){let r=i.createInterface({input:n.stdin,output:n.stdout});return new Promise(n=>{let i;i=t==null?`${e}: `:`${e} (${t}): `,r.question(i,e=>{r.close(),n(e.trim()||(t??``))})})}async function T(e,t=!1){return w(`${e} (${t?`Y/n`:`y/N`})`,t?`y`:`n`).then(e=>e.toLowerCase()===`y`||e.toLowerCase()===`yes`)}function E(e,t=`info`){console.log(`${{info:`\x1B[36m`,success:`\x1B[32m`,error:`\x1B[31m`,warn:`\x1B[33m`}[t]}${{info:`ℹ`,success:`✓`,error:`✗`,warn:`⚠`}[t]} ${e}[0m`)}function D(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>k(t,n)?.toString()??``)}function O(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];t!=null&&t!==``&&((!(t in i)||typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t])}let a=r[r.length-1];a!=null&&a!==``&&(i[a]=n)}function k(e,t){let n=t.split(`.`),r=e;for(let e of n)if(e!==``&&typeof r==`object`&&r)r=r[e];else return;return r}function A(e,t,n){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch(t){return n?.lazy===!0&&t instanceof ReferenceError?!0:(n?.silent!==!0&&(E(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&E(` Error: ${t.message}`,`warn`)),!1)}}export{a as S,l as _,E as a,c as b,O as c,_ as d,v as f,d as g,b as h,D as i,x as l,y as m,C as n,w as o,p,k as r,T as s,A as t,S as u,s as v,o as x,u as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:path";import{fileURLToPath as t}from"node:url";import n from"node:fs";import r from"node:process";import i from"ajv";const a=t(import.meta.url),o=e.dirname(a);function s(){return new i({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function c(e){try{let t=n.readFileSync(e,`utf-8`);return JSON.parse(t)}catch(t){throw Error(`Failed to load schema from ${e}: ${t instanceof Error?t.message:String(t)}`)}}function l(t){let i=e.isAbsolute(t)?t:e.resolve(r.cwd(),t);try{let t=n.readFileSync(i,`utf-8`),r=JSON.parse(t);if(!r||typeof r!=`object`||!(`$schema`in r))return{valid:!0};let a=r.$schema;if(typeof a!=`string`)return{valid:!0};let l;if(a.startsWith(`http`))if(a.includes(`scaffoldfy/schema`))l=e.join(o,`..`,`..`,`schema`,`scaffoldfy.schema.json`);else return{valid:!0};else l=a.startsWith(`../`)||a.startsWith(`./`)?e.resolve(e.dirname(i),a):a;if(!n.existsSync(l))return console.warn(`Schema file not found: ${l}`),{valid:!0};let u=c(l),d=s().compile(u);return d(r)?{valid:!0}:{valid:!1,errors:d.errors?.map(e=>`${e.instancePath||`root`}: ${e.message}`)||[]}}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${i}: ${e instanceof Error?e.message:String(e)}`]}}}export{l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./chunk-DjWAcSYV.cjs`);let t=require(`node:fs`);t=e.t(t);let n=require(`node:path`);n=e.t(n);let r=require(`node:process`);r=e.t(r);let i=require(`node:url`);i=e.t(i);let a=require(`ajv`);a=e.t(a);const o=(0,i.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),s=n.default.dirname(o);function c(){return new a.default({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function l(e){try{let n=t.default.readFileSync(e,`utf-8`);return JSON.parse(n)}catch(t){throw Error(`Failed to load schema from ${e}: ${t instanceof Error?t.message:String(t)}`)}}function u(e){let i=n.default.isAbsolute(e)?e:n.default.resolve(r.default.cwd(),e);try{let e=t.default.readFileSync(i,`utf-8`),r=JSON.parse(e);if(!r||typeof r!=`object`||!(`$schema`in r))return{valid:!0};let a=r.$schema;if(typeof a!=`string`)return{valid:!0};let o;if(a.startsWith(`http`))if(a.includes(`scaffoldfy/schema`))o=n.default.join(s,`..`,`..`,`schema`,`scaffoldfy.schema.json`);else return{valid:!0};else o=a.startsWith(`../`)||a.startsWith(`./`)?n.default.resolve(n.default.dirname(i),a):a;if(!t.default.existsSync(o))return console.warn(`Schema file not found: ${o}`),{valid:!0};let u=l(o),d=c().compile(u);return d(r)?{valid:!0}:{valid:!1,errors:d.errors?.map(e=>`${e.instancePath||`root`}: ${e.message}`)||[]}}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${i}: ${e instanceof Error?e.message:String(e)}`]}}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Validate a JSON file against its schema
|
|
4
|
+
*/
|
|
5
|
+
declare function validateScaffoldfyJsonFile(filePath: string): {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
errors?: string[];
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { validateScaffoldfyJsonFile as t };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Validate a JSON file against its schema
|
|
4
|
+
*/
|
|
5
|
+
declare function validateScaffoldfyJsonFile(filePath: string): {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
errors?: string[];
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { validateScaffoldfyJsonFile as t };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixpilot/scaffoldfy",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.32.0",
|
|
5
5
|
"author": "PixPilot <m.doaie@hotmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
"@types/handlebars": "^4.1.0",
|
|
47
47
|
"@types/node": "^22.18.11",
|
|
48
48
|
"eslint": "^9.38.0",
|
|
49
|
-
"tsdown": "^0.15.
|
|
49
|
+
"tsdown": "^0.15.10",
|
|
50
50
|
"typescript": "^5.9.3",
|
|
51
51
|
"@internal/eslint-config": "0.3.0",
|
|
52
|
-
"@internal/tsdown-config": "0.1.0",
|
|
53
52
|
"@internal/prettier-config": "0.0.1",
|
|
54
53
|
"@internal/tsconfig": "0.1.0",
|
|
54
|
+
"@internal/tsdown-config": "0.1.0",
|
|
55
55
|
"@internal/vitest-config": "0.1.0"
|
|
56
56
|
},
|
|
57
57
|
"prettier": "@internal/prettier-config",
|