@pixpilot/scaffoldfy 0.37.0 → 0.38.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.
@@ -0,0 +1,26 @@
1
+ const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./config-inheritance-CtSb5haE.cjs`),n=require(`./config-CQ-mWBG5.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 t.M{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)}},d=class e extends t.M{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`)}},f=class e extends t.M{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`)}},p=class e extends t.M{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 m(e){return e.template!=null&&e.template!==``}function h(e){return e.templateFile!=null&&e.templateFile!==``}function g(e){return e.endsWith(`.hbs`)}function _(e){let t=m(e),n=h(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 v(e,n,r,i={}){let{enableHandlebars:a=!0,sourceUrl:o=r?.$sourceUrl}=i,s=m(e),c=h(e);if(s)return t.s(e.template,n);if(c){let r=e.templateFile,i=a&&g(r),s=await t.n(t.f(r,o));return i?(await import(`handlebars`)).default.compile(s)(n):t.s(s,n)}throw Error(`No template content available`)}function ee(e){return m(e)?`inline template`:h(e)?`template file: ${e.templateFile}`:`no template source`}const y=(0,o.promisify)(r.default.readFile),te=2,ne=10,re=55,b={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function x(e,t){switch(t){case`add`:return`${b.green}+ ${e}${b.reset}`;case`remove`:return`${b.red}- ${e}${b.reset}`;case`context`:return`${b.gray} ${e}${b.reset}`;default:return e}}function S(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(x(t,`context`)):(t!==void 0&&i.push(x(t,`remove`)),a!==void 0&&i.push(x(a,`add`)))}return i}async function C(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${b.red}✗ File not found: ${e.file}${b.reset}`;try{let r=await y(o,`utf-8`),i=JSON.parse(r),a={...i};function s(e){if(typeof e==`string`)return t.s(e,n);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[n,r]of Object.entries(e.updates)){let e=s(r);n.includes(`.`)?t.m(i,n,e):i[n]=e}let c=JSON.stringify(a,null,2),l=JSON.stringify(i,null,2);if(c===l)return`${b.cyan}→ No changes${b.reset}`;let u=S(c,l);return`${b.blue}File: ${e.file}${b.reset}\n${u.join(`
4
+ `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function ie(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;if(e.template==null||e.template===``)return`${b.red}✗ No template content provided for file: ${e.file}${b.reset}`;let o=i.default.join(a.default.cwd(),e.file),s=t.s(e.template,n);if(!r.default.existsSync(o)){let t=s.split(`
5
+ `).slice(0,10).join(`
6
+ `),n=s.split(`
7
+ `).length>10;return`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created${b.reset}\n${b.gray}Content preview:${b.reset}\n${t}${n?`
8
+ ...`:``}`}try{let t=await y(o,`utf-8`);if(t===s)return`${b.cyan}→ No changes${b.reset}`;let n=S(t,s);return`${b.blue}File: ${e.file}${b.reset}\n${n.join(`
9
+ `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function ae(e,n,o){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s))return`${b.cyan}→ File already exists, would be skipped: ${e.file}${b.reset}`;try{if(m(e)){let t=await v(e,n,o),r=t.split(`
10
+ `).slice(0,10).join(`
11
+ `),i=t.split(`
12
+ `).length>10;return`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created${b.reset}\n${b.gray}Content preview:${b.reset}\n${r}${i?`
13
+ ...`:``}`}let t=ee(e);return`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created from ${t}${b.reset}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function w(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${b.red}✗ File not found: ${e.file}${b.reset}`;try{let r=await y(o,`utf-8`),i=new RegExp(e.pattern,e.flags??`g`),a=t.s(e.replacement,n),s=r.replace(i,a);if(r===s)return`${b.cyan}→ No matches found${b.reset}`;let c=S(r,s);return`${b.blue}File: ${e.file}${b.reset}\n${c.join(`
14
+ `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function T(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${b.red}✗ File not found: ${e.file}${b.reset}`;try{let r=await y(o,`utf-8`),i=r;for(let{find:i,replace:a}of e.replacements){let e=t.s(i,n),o=t.s(a,n);r=r.replace(e,o)}if(i===r)return`${b.cyan}→ No changes${b.reset}`;let a=S(i,r);return`${b.blue}File: ${e.file}${b.reset}\n${a.join(`
15
+ `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}function E(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=e.paths.map(e=>t.s(e,n)).filter(e=>r.default.existsSync(i.default.join(a.default.cwd(),e)));return o.length===0?`${b.cyan}→ No files/directories to delete${b.reset}`:`${b.red}Would delete:${b.reset}\n${o.map(e=>`${b.red} - ${e}${b.reset}`).join(`
16
+ `)}`}function D(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=t.s(e.from,n),s=t.s(e.to,n),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)?`${b.yellow}⚠ Destination already exists: ${s}${b.reset}\n${b.cyan}Would rename: ${o} → ${s}${b.reset}`:`${b.cyan}Would rename: ${o} → ${s}${b.reset}`:`${b.red}✗ Source not found: ${o}${b.reset}`}function oe(e){if(e.condition!=null&&e.condition!==``)return`${b.yellow}⊘ Condition check skipped in dry-run${b.reset}`;let t=i.default.join(a.default.cwd(),`.git`),n=r.default.existsSync(t),o=[];if(e.removeExisting&&n&&o.push(`${b.red}Would remove existing .git directory${b.reset}`),o.push(`${b.green}Would initialize git repository${b.reset}`),e.initialCommit){let t=e.message??`Initial commit`;o.push(`${b.green}Would create initial commit: "${t}"${b.reset}`)}return o.join(`
17
+ `)}function O(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=t.s(e.command,n),i=e.cwd==null?a.default.cwd():t.s(e.cwd,n);return`${b.yellow}Would execute:${b.reset}\n${b.cyan} Command: ${r}${b.reset}\n${b.cyan} Working directory: ${i}${b.reset}`}function se(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=t.s(e.from,n),s=t.s(e.to,n),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)?`${b.yellow}⚠ Destination already exists: ${s}${b.reset}\n${b.cyan}Would move: ${o} → ${s}${b.reset}`:`${b.cyan}Would move: ${o} → ${s}${b.reset}`:`${b.red}✗ Source not found: ${o}${b.reset}`}function ce(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=t.s(e.from,n),s=t.s(e.to,n),c=i.default.join(a.default.cwd(),o),l=i.default.join(a.default.cwd(),s);if(!r.default.existsSync(c))return`${b.red}✗ Source not found: ${o}${b.reset}`;let u=r.default.statSync(c).isDirectory()?`directory`:`file`;return r.default.existsSync(l)?`${b.yellow}⚠ Destination already exists: ${s}${b.reset}\n${b.cyan}Would copy ${u}: ${o} → ${s}${b.reset}`:`${b.cyan}Would copy ${u}: ${o} → ${s}${b.reset}`}async function le(e,n,o){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.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 t=await v(c,n,o),i=t.split(`
18
+ `).slice(0,10).join(`
19
+ `),a=t.split(`
20
+ `).length>10;return r.default.existsSync(s)?`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ Would append content${b.reset}\n${b.gray}Content preview:${b.reset}\n${i}${a?`
21
+ ...`:``}`:`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created with content${b.reset}\n${b.gray}Content preview:${b.reset}\n${i}${a?`
22
+ ...`:``}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}function ue(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=t.s(e.path,n),s=i.default.join(a.default.cwd(),o);return r.default.existsSync(s)?`${b.cyan}→ Directory already exists: ${o}${b.reset}`:`${b.green}+ Would create directory: ${o}${b.reset}`}async function k(e,t){try{switch(e.type){case`update-json`:return await C(e.config,t);case`write`:return await ie(e.config,t);case`create`:return await ae(e.config,t,e);case`regex-replace`:return await w(e.config,t);case`replace-in-file`:return await T(e.config,t);case`delete`:return E(e.config,t);case`rename`:return D(e.config,t);case`move`:return se(e.config,t);case`copy`:return ce(e.config,t);case`append`:return await le(e.config,t,e);case`mkdir`:return ue(e.config,t);case`git-init`:return oe(e.config);case`exec`:return O(e.config,t);case`exec-file`:return O(e.config,t);default:{let t=e.type;return`${b.yellow}⚠ Diff not available for task type: ${t}${b.reset}`}}}catch(e){return`${b.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function A(e,t){console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.blue} DRY RUN - Preview of changes${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`);for(let n of e){console.log(`${b.cyan}▶ Task: ${n.name}${b.reset}`),n.description!=null&&n.description!==``&&console.log(`${b.gray} ${n.description}${b.reset}`);let e=await k(n,t);console.log(e),console.log(`${b.gray}${`─`.repeat(55)}${b.reset}`)}console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.yellow} No changes were applied (dry-run mode)${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`)}const j=new Map,M={},N=new Map;function P(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(j.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(N.has(t)){let e=N.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}j.set(e.name,e);for(let t of e.taskTypes)N.set(t,e.name);t.T(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function de(e){let t=j.get(e);if(t!=null){for(let e of t.taskTypes)N.delete(e);j.delete(e)}}function fe(e){return j.get(e)}function F(e){let t=N.get(e);if(t!=null)return j.get(t)}function I(e){return N.has(e)}function pe(){return Array.from(j.keys())}function me(){j.clear(),N.clear()}function he(e){e.beforeAll!=null&&(M.beforeAll=e.beforeAll),e.afterAll!=null&&(M.afterAll=e.afterAll),e.beforeTask!=null&&(M.beforeTask=e.beforeTask),e.afterTask!=null&&(M.afterTask=e.afterTask),e.onError!=null&&(M.onError=e.onError)}async function L(e,...n){let r=M[e];if(r!=null)try{e===`beforeAll`||e===`afterAll`?await r(n[0]):(e===`beforeTask`||e===`afterTask`||e===`onError`)&&await r(n[0],n[1])}catch(n){t.O(`Error in ${e} hook: ${n instanceof Error?n.message:String(n)}`,`error`)}}async function R(e,t,n){let r=F(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function ge(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 _e=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)&&t.O(`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 p.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof p?t:p.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 p.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 p.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 p.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 p.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 p.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 z=new _e;async function B(e,n,r,i){if(e!==void 0)return t.c(e,{id:n,contextType:`Prompt`,...r!=null&&{context:r},...i?.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}})}async function V(e,n=new Map,r={}){let i={};if(e.length===0)return i;for(let a of e){if(a.$configEnabled!=null&&!await t.C(a.$configEnabled,{...r,...i}))continue;let e={...r,...i};if(await t.C(a.enabled,e))try{let r,o=n.get(a.id);switch(a.default!==void 0&&(o=await B(a.default,a.id,e,a)),a.type){case`input`:{let n={message:a.message};o!==void 0&&(n.default=String(o));let i=await t.x(a.required,e);if(i!==void 0&&(n.required=i),r=await(0,c.input)(n),i&&(r==null||typeof r==`string`&&r.trim()===``))throw t.O(`${a.message} is required`,`error`),d.required(a.id);break}case`password`:if(r=await(0,c.password)({message:a.message,mask:`*`}),await t.x(a.required,e)&&(r==null||typeof r==`string`&&r.trim()===``))throw t.O(`${a.message} is required`,`error`),d.required(a.id);break;case`number`:{let n={message:a.message};o!==void 0&&(n.default=Number(o));let i=await t.x(a.required,e);if(i!==void 0&&(n.required=i),a.min!==void 0&&(n.min=a.min),a.max!==void 0&&(n.max=a.max),r=await(0,c.number)(n),i&&r==null)throw t.O(`${a.message} is required`,`error`),d.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 t.O(`Unknown prompt type: ${a.type}`,`error`),d.unknownType(a.type)}a.transformers!==void 0&&(r=await z.apply(a.transformers,r,{...e,...i})),i[a.id]=r}catch(e){throw e instanceof Error&&t.O(`Failed to collect prompt "${a.id}": ${e.message}`,`error`),e}}return i}async function H(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await B(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function U(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 W=(0,o.promisify)(r.default.appendFile),ve=(0,o.promisify)(r.default.readFile),ye=(0,o.promisify)(r.default.stat);async function be(e,n,r){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`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=_(s);if(!c.isValid)throw c.error?.includes(`cannot have both`)?f.templateHasBothTemplateAndFile():f.templateMissingTemplateOrFile();let l=await v(s,n,r),u=!1,d=!1;try{await ye(o),u=!0;let t=await ve(o,`utf-8`);t.length>0&&!t.endsWith(`
23
+ `)&&(d=e.newline!==!1)}catch{}u&&d?await W(o,`\n${l}`):await W(o,l),t.O(`Appended content to ${e.file}`,`success`)}const xe={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await be(e.config,t,e)}},G=(0,o.promisify)(r.default.copyFile),Se=(0,o.promisify)(r.default.stat),K=(0,o.promisify)(r.default.mkdir),Ce=(0,o.promisify)(r.default.readdir);async function q(e,t){await K(t,{recursive:!0});let n=await Ce(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 q(r,a):await G(r,a)}))}async function we(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`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 Se(r)}catch{t.O(`Source path does not exist: ${r}`,`warn`);return}await K(i.default.dirname(o),{recursive:!0}),s.isDirectory()?(await q(r,o),t.O(`Copied directory ${e.from} to ${e.to}`,`success`)):(await G(r,o),t.O(`Copied file ${e.from} to ${e.to}`,`success`))}const Te={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await we(e.config,t)}},Ee=(0,o.promisify)(r.default.writeFile);async function De(e,n,o){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`Condition not met, skipping create task`,`info`);return}let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s)){t.O(`File already exists, skipping: ${e.file}`,`info`);return}let c=_(e);if(!c.isValid)throw c.error?.includes(`cannot have both`)?f.createHasBothTemplateAndFile():f.createMissingTemplateOrFile();let l=await v(e,n,o),u=i.default.dirname(s);r.default.existsSync(u)||r.default.mkdirSync(u,{recursive:!0}),await Ee(s,l),t.O(`Created file: ${e.file}`,`success`)}const Oe={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await De(e.config,t,e)}};async function ke(e,n){let{paths:o,condition:s}=e;if(s!=null&&s!==``){if(!n){t.O(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!t.w(s,n)){t.O(`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 Ae={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await ke(e.config,t)}};async function je(e,n,r){e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)||await t.l({file:e.file,...e.runtime&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!=null&&e.cwd.trim()!==``&&{cwd:e.cwd},...r?.$sourceUrl!=null&&r.$sourceUrl.trim()!==``&&{sourceUrl:r.$sourceUrl},captureOutput:!1},n)}const Me={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await je(e.config,t,e)}};async function Ne(e,n){if(e.condition!=null&&e.condition!==``){if(!n){t.O(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!t.w(e.condition,n)){t.O(`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 Pe={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Ne(e.config,t)}};async function Fe(e,n){if(e.condition!=null&&e.condition!==``){if(!n){t.O(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!t.w(e.condition,n)){t.O(`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 Ie={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Fe(e.config,t)}},Le=(0,o.promisify)(r.default.mkdir);async function Re(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`Condition not met, skipping mkdir task`,`info`);return}await Le(i.default.join(a.default.cwd(),e.path),{recursive:!0}),t.O(`Created directory: ${e.path}`,`success`)}const ze={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Re(e.config,t)}},Be=(0,o.promisify)(r.default.rename),Ve=(0,o.promisify)(r.default.stat),He=(0,o.promisify)(r.default.mkdir);async function Ue(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`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 Ve(r)}catch{t.O(`Source path does not exist: ${r}`,`warn`);return}await He(i.default.dirname(o),{recursive:!0}),await Be(r,o),t.O(`Moved ${e.from} to ${e.to}`,`success`)}const We={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Ue(e.config,t)}},Ge=(0,o.promisify)(r.default.readFile),Ke=(0,o.promisify)(r.default.writeFile);async function qe(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`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 Ge(r,`utf-8`),u=new RegExp(o,s);l=l.replace(u,t.s(c,n)),await Ke(r,l)}const Je={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await qe(e.config,t)}},Ye=(0,o.promisify)(r.default.rename);async function Xe(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`Condition not met, skipping rename task`,`info`);return}let o=i.default.join(a.default.cwd(),t.s(e.from,n)),s=i.default.join(a.default.cwd(),t.s(e.to,n));if(!r.default.existsSync(o)){t.O(`Source path does not exist: ${o}`,`warn`);return}await Ye(o,s)}const Ze={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await Xe(e.config,t)}},Qe=(0,o.promisify)(r.default.readFile),$e=(0,o.promisify)(r.default.writeFile);async function et(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`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)){t.O(`File not found: ${o}, skipping`,`warn`);return}let c=await Qe(o,`utf-8`);for(let{find:e,replace:r}of s){let i=t.s(r,n);c=c.replace(new RegExp(e,`gu`),i)}await $e(o,c)}const tt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await et(e.config,t)}},nt=(0,o.promisify)(r.default.readFile),rt=(0,o.promisify)(r.default.writeFile),it=2;async function at(e,n){if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`Condition not met, skipping update-json task`,`info`);return}let r=i.default.join(a.default.cwd(),e.file),{updates:o}=e,s=await nt(r,`utf-8`),c=JSON.parse(s);function l(e){if(typeof e==`string`)return t.s(e,n);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,n]of Object.entries(o)){let r=l(n);e.includes(`.`)?t.m(c,e,r):c[e]=r}await rt(r,`${JSON.stringify(c,null,2)}\n`)}const ot={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await at(e.config,t)}},st=(0,o.promisify)(r.default.writeFile);async function ct(e,n,o){let{allowCreate:s=!0}=e;if(e.condition!=null&&e.condition!==``&&!t.w(e.condition,n)){t.O(`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})`);t.O(`File not found, creating new file: ${e.file}`,`info`)}let l=_(e);if(!l.isValid)throw l.error?.includes(`cannot have both`)?f.templateHasBothTemplateAndFile():f.templateMissingTemplateOrFile();let u=await v(e,n,o),d=i.default.dirname(c);r.default.existsSync(d)||r.default.mkdirSync(d,{recursive:!0}),await st(c,u)}const lt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await ct(e.config,t,e)}};function J(){I(`update-json`)||(P(ot),P(lt),P(Oe),P(Je),P(tt),P(Ae),P(Ze),P(Ie),P(Pe),P(Me),P(We),P(Te),P(xe),P(ze))}async function ut(e,n,r=!1){if(J(),r){t.O(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(I(e.type)){await R(e,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${e.type}`)}async function Y(e,n,r,i,o=!1){try{return t.O(`[${r}/${i}] Running: ${e.name}...`,`info`),await ut(e,n,o),t.O(`[${r}/${i}] Completed: ${e.name}...`,`success`),!0}catch(n){return t.O(`Failed: ${e.name}`,`error`),n instanceof Error&&(t.O(` Reason: ${n.message}`,`error`),n.stack!=null&&a.default.env.DEBUG!=null&&console.error(n.stack)),!1}}function X(e){let n=[],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 t.j.forTaskDependency(e);i.add(e);let s=a.get(e);if(!s)throw u.forId(e);if(s.dependencies)for(let e of s.dependencies)o(e);i.delete(e),r.add(e),n.push(s)}for(let t of e)r.has(t.id)||o(t.id);return n}function dt(e){let t=[];for(let n of e)if(!I(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=ft(n);t.push(...e)}return t}function ft(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=_({...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 pt(e){t.O(`❌ Template validation failed:`,`error`),t.O(``,`error`);for(let n of e)t.O(` • ${n}`,`error`);t.O(``,`error`),t.O(`Please fix these errors before continuing.`,`error`)}async function Z(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 z.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}async function Q(e,n,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.$configEnabled!=null){let e={...n};for(let[t,n]of i.entries())e[t]=n;if(!await t.C(a.$configEnabled,e))continue}let e={...n};for(let[t,n]of i.entries())e[t]=n;let o=await t.c(a.value,{id:a.id,contextType:`Variable`,context:e,...a.$sourceUrl!=null&&{sourceUrl:a.$sourceUrl}});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 mt(e,r){let i=n.t();if(!await t.C(r.configEnabled,i,{lazy:!0})){t._(`⊘ Template is disabled - skipping all execution`);return}r.transformers!==void 0&&r.transformers.length>0&&(t.g(`Registering ${r.transformers.length} transformer(s)...`),z.registerAll(r.transformers)),t.g(`Registering built-in plugins...`),J(),t.g(`Validating task configurations...`);let o=dt(e);o.length>0&&(pt(o),a.default.exit(1)),t.g(`All tasks validated successfully`);let s=e.filter(e=>t.S(e.enabled,n.t(),{lazy:!0}));t.g(`Resolving task dependencies...`);let c=X(s);t.g(`Sorted ${c.length} task(s) by dependencies`),t._(`Welcome! Let's execute your tasks.`),r.dryRun&&t.b(`🔍 DRY RUN MODE - No changes will be made`),t._(`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&&(t.O(`❌ Variable validation errors:`,`error`),e.forEach(e=>t.O(` - ${e}`,`error`)),a.default.exit(1)),t.g(`Resolving variable values...`);let n=await Z(u,await Q(u,l,{skipConditional:!0}),l);Object.assign(l,n),Object.keys(n).length>0&&(t.g(`Resolved ${Object.keys(n).length} variable(s)`),t.g(`Variable values: ${JSON.stringify(n)}`))}let d=r.prompts??[],f=[...d];if(f.length>0){let e=U(f);e.length>0&&(t.O(`❌ Prompt validation errors:`,`error`),e.forEach(e=>t.O(` - ${e}`,`error`)),a.default.exit(1)),t.g(`Resolving prompt default values...`);let n=await H(f,l);if(d.length>0){t._(`📋 Collecting prompts (available to all tasks):`);let e=await V(d,n,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){t.g(`Re-resolving conditional variables with prompt values...`);let n=await Z(e,await Q(e,l),l);Object.assign(l,n),Object.keys(n).length>0&&t.g(`Resolved ${Object.keys(n).length} conditional variable(s)`)}}if(!await t.C(r.configEnabled,l)){t._(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let p=[];for(let e of c)e.$configEnabled!=null&&!await t.C(e.$configEnabled,l)||await t.C(e.enabled,l)&&p.push(e);if(t.O(`${p.length} of ${c.length} task(s) enabled for execution`,`info`),r.dryRun){await A(p,l),t._(`🔍 Dry run completed - no changes were made`),t._(`Run without --dry-run to apply changes`);return}t.g(`Calling beforeAll hook...`),await L(`beforeAll`,l);let m=p.length,h=0,g=0,_=[],v=[];for(let e=0;e<p.length;e++){let n=p[e];n!=null&&(t.g(`Calling beforeTask hook for task: ${n.name}`),await L(`beforeTask`,n,l),await Y(n,l,e+1,m,r.dryRun)?(h++,_.push(n.id),t.g(`Calling afterTask hook for task: ${n.name}`),await L(`afterTask`,n,l)):(await t.x(n.required,l)&&(g++,v.push(n.name)),t.g(`Calling onError hook for task: ${n.name}`),await L(`onError`,Error(`Task ${n.name} failed`),n),t.b(`⚠️ Task "${n.name}" failed, continuing with remaining tasks...`)))}g>0&&(t.O(`\n❌ Task execution completed with ${g} error(s)`,`error`),t.O(`Completed: ${h}/${m} tasks`,`info`),t.O(`Failed tasks: ${v.join(`, `)}`,`error`),a.default.exit(1)),t.g(`Calling afterAll hook...`),await L(`afterAll`,l),t.y(`✅ All tasks completed successfully!`),t.y(` Completed: ${h}/${m} tasks`)}async function ht(e,n,r={}){t.g(`Running templates with sequential variable/prompt resolution...`),t.g(`Total templates to process: ${e.length}`),t.g(`Registering built-in plugins...`),J();let i=[];console.log(``),t._(`📋 Collecting input...`),console.log(``);for(let n=0;n<e.length;n++){let o=e[n];if(o==null)continue;let s=`=`.repeat(60);if(t.g(`\n${s}`),t.g(`Processing template ${n+1}/${e.length}: "${o.name}"`),t.g(s),t.g(`Current config keys: ${Object.keys(r).join(`, `)}`),!await t.C(o.enabled,r)){t._(`⊘ Template "${o.name}" is disabled - skipping`),t.g(` Enabled condition: ${JSON.stringify(o.enabled)}`);continue}let c=o.variables??[];if(c.length>0){t.g(`Processing ${c.length} variable(s) for template "${o.name}"...`);let e=$(c);e.length>0&&(t.O(`❌ Variable validation errors:`,`error`),e.forEach(e=>t.O(` - ${e}`,`error`)),a.default.exit(1));let n=await Z(c,await Q(c,r,{skipConditional:!0}),r);Object.assign(r,n);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 Z(i,await Q(i,r),r);if(s=Object.keys(e).length,Object.assign(r,e),s>0){t.g(`Resolved ${s} conditional variable(s)`);for(let[n,r]of Object.entries(e))t.g(` ${n} = ${JSON.stringify(r)}`)}}let l=Object.keys(n).length+s;if(l>0){t.g(`Total variables resolved for template: ${l}`);for(let[e,r]of Object.entries(n))t.g(` ${e} = ${JSON.stringify(r)}`)}}let l=o.prompts??[];if(l.length>0){t.g(`Processing ${l.length} prompt(s) for template "${o.name}"...`);let e=U(l);e.length>0&&(t.O(`❌ Prompt validation errors:`,`error`),e.forEach(e=>t.O(` - ${e}`,`error`)),a.default.exit(1));let n=await V(l,await H(l,r),r);Object.assign(r,n),t.g(`Collected ${Object.keys(n).length} prompt answer(s)`)}if(!await t.C(o.enabled,r)){t._(`⊘ Template "${o.name}" became disabled after variable/prompt resolution - skipping tasks`);continue}let u=o.tasks??[];u.length>0&&(t.g(`Found ${u.length} task(s) in template "${o.name}" (will execute later)`),i.push(...u))}if(t.g(`
24
+ 🔧 Validating and filtering all collected tasks...`),i.length===0){t.O(`No tasks found in any template`,`info`);return}let o=dt(i);o.length>0&&(pt(o),a.default.exit(1)),console.log(``),t.O(`🛠️ Preparing tasks...`,`info`);let s=[];for(let e of i)await t.C(e.enabled,r)&&s.push(e);if(console.log(``),t.O(`Found ${i.length} tasks (${s.length} enabled)`,`info`),t.O(`All tasks validated successfully`,`success`),s.length===0){t.O(`No enabled tasks to execute`,`info`);return}let c=X(s);if(n.dryRun){t.O(`
25
+ 🔍 Dry run - showing task changes...`,`info`),await A(c,r),t.O(`
26
+ 🔍 Dry run completed - no changes were made`,`info`),t.O(`Run without --dry-run to apply changes`,`info`);return}console.log(``),t.D(`⚙️ Executing tasks...`),console.log(``),await L(`beforeAll`,r);let l=0,u=0,d=[];for(let e=0;e<c.length;e++){let i=c[e];i!=null&&(await L(`beforeTask`,i,r),await Y(i,r,e+1,c.length,n.dryRun)?(l++,await L(`afterTask`,i,r)):(await t.x(i.required,r)&&(u++,d.push(i.name)),await L(`onError`,Error(`Task ${i.name} failed`),i),t.b(`⚠️ Task "${i.name}" failed, continuing with remaining tasks...`)))}await L(`afterAll`,r),u>0&&(t.O(`\n❌ Task execution completed with ${u} error(s)`,`error`),t.O(`Completed: ${l}/${c.length} tasks`,`info`),t.O(`Failed tasks: ${d.join(`, `)}`,`error`),a.default.exit(1)),t.O(`Completed: ${l}/${c.length} tasks`,`success`)}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ht}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return mt}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return T}});
@@ -0,0 +1 @@
1
+ import"./config-inheritance-DLd3amMI.js";import{n as e,t}from"./run-tasks-C0IZQ4SX.js";import"./config-nfiOxhDM.js";export{t as runTasks,e as runTemplatesSequentially};
@@ -0,0 +1 @@
1
+ const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./config-inheritance-CtSb5haE.cjs`),n=require(`./run-tasks-CgFJyU4i.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,o){try{await n.t(e,{dryRun:o?.dryRun??i,force:o?.force??a,configFilePath:o?.configFilePath??void 0,...o?.variables!=null&&{variables:o.variables},...o?.prompts!=null&&{prompts:o.prompts},...o?.configEnabled!=null&&{configEnabled:o.configEnabled},...o?.transformers!=null&&{transformers:o.transformers}})}catch(e){t.O(`❌ Task execution failed`,`error`),e instanceof Error?(t.O(`Error: ${e.message}`,`error`),r.default.env.DEBUG!=null&&console.error(e.stack)):console.error(e),r.default.exit(1)}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
@@ -0,0 +1 @@
1
+ import{O as e}from"./config-inheritance-DLd3amMI.js";import{t}from"./run-tasks-C0IZQ4SX.js";import n from"node:process";const r=n.argv.includes(`--dry-run`),i=n.argv.includes(`--force`);async function a(a,o){try{await t(a,{dryRun:o?.dryRun??r,force:o?.force??i,configFilePath:o?.configFilePath??void 0,...o?.variables!=null&&{variables:o.variables},...o?.prompts!=null&&{prompts:o.prompts},...o?.configEnabled!=null&&{configEnabled:o.configEnabled},...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{a as t};
@@ -0,0 +1 @@
1
+ const e=require(`./config-inheritance-CtSb5haE.cjs`);exports.cleanupTempFile=e.u,exports.debug=e.T,exports.error=e.E,exports.logError=e.E,exports.evaluateCondition=e.w,exports.evaluateEnabled=e.S,exports.evaluateEnabledAsync=e.C,exports.evaluateRequiredAsync=e.x,exports.getNestedProperty=e.p,exports.info=e.D,exports.logInfo=e.D,exports.interpolateTemplate=e.s,exports.isUrl=e.h,exports.log=e.O,exports.logSuccess=e.k,exports.success=e.k,exports.logWarn=e.A,exports.warn=e.A,exports.resolveAndFetchFile=e.d,exports.resolveFilePath=e.f,exports.resolveValue=e.c,exports.setNestedProperty=e.m;
@@ -0,0 +1 @@
1
+ import{A as e,C as t,D as n,E as r,O as i,S as a,T as o,c as s,d as c,f as l,h as u,k as d,m as f,p,s as m,u as h,w as g,x as _}from"./config-inheritance-DLd3amMI.js";export{h as cleanupTempFile,o as debug,r as error,r as logError,g as evaluateCondition,a as evaluateEnabled,t as evaluateEnabledAsync,_ as evaluateRequiredAsync,p as getNestedProperty,n as info,n as logInfo,m as interpolateTemplate,u as isUrl,i as log,d as logSuccess,d as success,e as logWarn,e as warn,c as resolveAndFetchFile,l as resolveFilePath,s as resolveValue,f as setNestedProperty};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pixpilot/scaffoldfy",
3
3
  "type": "module",
4
- "version": "0.37.0",
4
+ "version": "0.38.0",
5
5
  "author": "PixPilot <m.doaie@hotmail.com>",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -49,10 +49,10 @@
49
49
  "tsdown": "^0.15.10",
50
50
  "typescript": "^5.9.3",
51
51
  "@internal/eslint-config": "0.3.0",
52
- "@internal/prettier-config": "0.0.1",
53
52
  "@internal/tsconfig": "0.1.0",
54
- "@internal/vitest-config": "0.1.0",
55
- "@internal/tsdown-config": "0.1.0"
53
+ "@internal/prettier-config": "0.0.1",
54
+ "@internal/tsdown-config": "0.1.0",
55
+ "@internal/vitest-config": "0.1.0"
56
56
  },
57
57
  "prettier": "@internal/prettier-config",
58
58
  "scripts": {
@@ -12,7 +12,7 @@
12
12
  },
13
13
  "name": {
14
14
  "type": "string",
15
- "description": "Unique identifier name for this template. Must contain only lowercase letters, digits, and hyphens. Cannot start or end with a hyphen.",
15
+ "description": "Unique identifier name for this config. Must contain only lowercase letters, digits, and hyphens. Cannot start or end with a hyphen.",
16
16
  "pattern": "^[a-z\\d]+(?:-[a-z\\d]+)*$"
17
17
  },
18
18
  "description": {
@@ -30,7 +30,7 @@
30
30
  "items": {
31
31
  "type": "string"
32
32
  },
33
- "description": "Names or identifiers of other templates that this Write depends on"
33
+ "description": "Names or identifiers of other configs that this Write depends on"
34
34
  },
35
35
  "extends": {
36
36
  "description": "Base Write file(s) to extend from. Can be a local path or URL (http/https). Supports single path or array of paths.",
@@ -412,7 +412,7 @@
412
412
  "override": {
413
413
  "type": "string",
414
414
  "enum": ["merge", "replace"],
415
- "description": "Strategy for merging with base item when extending templates. 'merge' (default) intelligently merges properties, 'replace' completely replaces the base item. Must be specified when item ID conflicts with base template."
415
+ "description": "Strategy for merging with base item when extending configs. 'merge' (default) intelligently merges properties, 'replace' completely replaces the base item. Must be specified when item ID conflicts with base config."
416
416
  },
417
417
  "promptItem": {
418
418
  "type": "object",
@@ -1 +0,0 @@
1
- import{t as e}from"./config-DfRbCqsT.js";export{e as createInitialConfig};
@@ -1 +0,0 @@
1
- const e=require(`./config-DlJs75hK.cjs`);exports.createInitialConfig=e.t;
@@ -1 +0,0 @@
1
- import"./config-DfRbCqsT.js";import"./template-inheritance-BVct9RJf.js";import{n as e,t}from"./run-tasks-JGU1NDnc.js";export{t as runTasks,e as runTemplatesSequentially};
@@ -1 +0,0 @@
1
- require(`./config-DlJs75hK.cjs`),require(`./template-inheritance-Ds-FkR_6.cjs`);const e=require(`./run-tasks-bN0ievNj.cjs`);exports.runTasks=e.t,exports.runTemplatesSequentially=e.n;
@@ -1,26 +0,0 @@
1
- import{t as e}from"./config-DfRbCqsT.js";import{C as t,E as n,M as r,N as i,O as a,S as o,T as s,_ as c,b as l,c as u,h as d,k as f,l as p,n as m,p as h,u as g,v as _,w as v,x as y}from"./template-inheritance-BVct9RJf.js";import b from"node:path";import x from"node:fs";import S from"node:process";import{promisify as C}from"node:util";import{execSync as w}from"node:child_process";import{confirm as ee,input as te,number as ne,password as re,select as ie}from"@inquirer/prompts";import{camelCase as ae,capitalCase as oe,constantCase as se,kebabCase as ce,lowerCase as le,pascalCase as ue,snakeCase as de,upperCase as fe}from"case-anything";var pe=class e extends i{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)}},T=class e extends i{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`)}},E=class e extends i{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`)}},D=class e extends i{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 O(e){return e.template!=null&&e.template!==``}function k(e){return e.templateFile!=null&&e.templateFile!==``}function me(e){return e.endsWith(`.hbs`)}function A(e){let t=O(e),n=k(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 j(e,t,n,r={}){let{enableHandlebars:i=!0,sourceUrl:a=n?.$sourceUrl}=r,o=O(e),s=k(e);if(o)return u(e.template,t);if(s){let n=e.templateFile,r=i&&me(n),o=await m(h(n,a));return r?(await import(`handlebars`)).default.compile(o)(t):u(o,t)}throw Error(`No template content available`)}function he(e){return O(e)?`inline template`:k(e)?`template file: ${e.templateFile}`:`no template source`}const M=C(x.readFile),N={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function P(e,t){switch(t){case`add`:return`${N.green}+ ${e}${N.reset}`;case`remove`:return`${N.red}- ${e}${N.reset}`;case`context`:return`${N.gray} ${e}${N.reset}`;default:return e}}function F(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(P(t,`context`)):(t!==void 0&&i.push(P(t,`remove`)),a!==void 0&&i.push(P(a,`add`)))}return i}async function ge(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=b.join(S.cwd(),e.file);if(!x.existsSync(n))return`${N.red}✗ File not found: ${e.file}${N.reset}`;try{let r=await M(n,`utf-8`),i=JSON.parse(r),a={...i};function o(e){if(typeof e==`string`)return u(e,t);if(Array.isArray(e))return e.map(e=>o(e));if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=o(r);return t}return e}for(let[t,n]of Object.entries(e.updates)){let e=o(n);t.includes(`.`)?d(i,t,e):i[t]=e}let s=JSON.stringify(a,null,2),c=JSON.stringify(i,null,2);if(s===c)return`${N.cyan}→ No changes${N.reset}`;let l=F(s,c);return`${N.blue}File: ${e.file}${N.reset}\n${l.join(`
4
- `)}`}catch(e){return`${N.red}✗ Error: ${e instanceof Error?e.message:String(e)}${N.reset}`}}async function _e(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;if(e.template==null||e.template===``)return`${N.red}✗ No template content provided for file: ${e.file}${N.reset}`;let n=b.join(S.cwd(),e.file),r=u(e.template,t);if(!x.existsSync(n)){let t=r.split(`
5
- `).slice(0,10).join(`
6
- `),n=r.split(`
7
- `).length>10;return`${N.blue}File: ${e.file}${N.reset}\n${N.green}+ New file would be created${N.reset}\n${N.gray}Content preview:${N.reset}\n${t}${n?`
8
- ...`:``}`}try{let t=await M(n,`utf-8`);if(t===r)return`${N.cyan}→ No changes${N.reset}`;let i=F(t,r);return`${N.blue}File: ${e.file}${N.reset}\n${i.join(`
9
- `)}`}catch(e){return`${N.red}✗ Error: ${e instanceof Error?e.message:String(e)}${N.reset}`}}async function ve(e,t,n){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let r=b.join(S.cwd(),e.file);if(x.existsSync(r))return`${N.cyan}→ File already exists, would be skipped: ${e.file}${N.reset}`;try{if(O(e)){let r=await j(e,t,n),i=r.split(`
10
- `).slice(0,10).join(`
11
- `),a=r.split(`
12
- `).length>10;return`${N.blue}File: ${e.file}${N.reset}\n${N.green}+ New file would be created${N.reset}\n${N.gray}Content preview:${N.reset}\n${i}${a?`
13
- ...`:``}`}let r=he(e);return`${N.blue}File: ${e.file}${N.reset}\n${N.green}+ New file would be created from ${r}${N.reset}`}catch(e){return`${N.red}✗ Error: ${e instanceof Error?e.message:String(e)}${N.reset}`}}async function ye(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=b.join(S.cwd(),e.file);if(!x.existsSync(n))return`${N.red}✗ File not found: ${e.file}${N.reset}`;try{let r=await M(n,`utf-8`),i=new RegExp(e.pattern,e.flags??`g`),a=u(e.replacement,t),o=r.replace(i,a);if(r===o)return`${N.cyan}→ No matches found${N.reset}`;let s=F(r,o);return`${N.blue}File: ${e.file}${N.reset}\n${s.join(`
14
- `)}`}catch(e){return`${N.red}✗ Error: ${e instanceof Error?e.message:String(e)}${N.reset}`}}async function be(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=b.join(S.cwd(),e.file);if(!x.existsSync(n))return`${N.red}✗ File not found: ${e.file}${N.reset}`;try{let r=await M(n,`utf-8`),i=r;for(let{find:n,replace:i}of e.replacements){let e=u(n,t),a=u(i,t);r=r.replace(e,a)}if(i===r)return`${N.cyan}→ No changes${N.reset}`;let a=F(i,r);return`${N.blue}File: ${e.file}${N.reset}\n${a.join(`
15
- `)}`}catch(e){return`${N.red}✗ Error: ${e instanceof Error?e.message:String(e)}${N.reset}`}}function xe(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=e.paths.map(e=>u(e,t)).filter(e=>x.existsSync(b.join(S.cwd(),e)));return n.length===0?`${N.cyan}→ No files/directories to delete${N.reset}`:`${N.red}Would delete:${N.reset}\n${n.map(e=>`${N.red} - ${e}${N.reset}`).join(`
16
- `)}`}function Se(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=u(e.from,t),r=u(e.to,t),i=b.join(S.cwd(),n),a=b.join(S.cwd(),r);return x.existsSync(i)?x.existsSync(a)?`${N.yellow}⚠ Destination already exists: ${r}${N.reset}\n${N.cyan}Would rename: ${n} → ${r}${N.reset}`:`${N.cyan}Would rename: ${n} → ${r}${N.reset}`:`${N.red}✗ Source not found: ${n}${N.reset}`}function Ce(e){if(e.condition!=null&&e.condition!==``)return`${N.yellow}⊘ Condition check skipped in dry-run${N.reset}`;let t=b.join(S.cwd(),`.git`),n=x.existsSync(t),r=[];if(e.removeExisting&&n&&r.push(`${N.red}Would remove existing .git directory${N.reset}`),r.push(`${N.green}Would initialize git repository${N.reset}`),e.initialCommit){let t=e.message??`Initial commit`;r.push(`${N.green}Would create initial commit: "${t}"${N.reset}`)}return r.join(`
17
- `)}function I(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=u(e.command,t),r=e.cwd==null?S.cwd():u(e.cwd,t);return`${N.yellow}Would execute:${N.reset}\n${N.cyan} Command: ${n}${N.reset}\n${N.cyan} Working directory: ${r}${N.reset}`}function we(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=u(e.from,t),r=u(e.to,t),i=b.join(S.cwd(),n),a=b.join(S.cwd(),r);return x.existsSync(i)?x.existsSync(a)?`${N.yellow}⚠ Destination already exists: ${r}${N.reset}\n${N.cyan}Would move: ${n} → ${r}${N.reset}`:`${N.cyan}Would move: ${n} → ${r}${N.reset}`:`${N.red}✗ Source not found: ${n}${N.reset}`}function Te(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=u(e.from,t),r=u(e.to,t),i=b.join(S.cwd(),n),a=b.join(S.cwd(),r);if(!x.existsSync(i))return`${N.red}✗ Source not found: ${n}${N.reset}`;let o=x.statSync(i).isDirectory()?`directory`:`file`;return x.existsSync(a)?`${N.yellow}⚠ Destination already exists: ${r}${N.reset}\n${N.cyan}Would copy ${o}: ${n} → ${r}${N.reset}`:`${N.cyan}Would copy ${o}: ${n} → ${r}${N.reset}`}async function Ee(e,t,n){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let r=b.join(S.cwd(),e.file),i={};e.content==null?e.template!=null&&(i.template=e.template):i.template=e.content,e.templateFile!=null&&(i.templateFile=e.templateFile);try{let a=await j(i,t,n),o=a.split(`
18
- `).slice(0,10).join(`
19
- `),s=a.split(`
20
- `).length>10;return x.existsSync(r)?`${N.blue}File: ${e.file}${N.reset}\n${N.green}+ Would append content${N.reset}\n${N.gray}Content preview:${N.reset}\n${o}${s?`
21
- ...`:``}`:`${N.blue}File: ${e.file}${N.reset}\n${N.green}+ New file would be created with content${N.reset}\n${N.gray}Content preview:${N.reset}\n${o}${s?`
22
- ...`:``}`}catch(e){return`${N.red}✗ Error: ${e instanceof Error?e.message:String(e)}${N.reset}`}}function De(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t))return`${N.yellow}⊘ Condition not met - task would be skipped${N.reset}`;let n=u(e.path,t),r=b.join(S.cwd(),n);return x.existsSync(r)?`${N.cyan}→ Directory already exists: ${n}${N.reset}`:`${N.green}+ Would create directory: ${n}${N.reset}`}async function Oe(e,t){try{switch(e.type){case`update-json`:return await ge(e.config,t);case`write`:return await _e(e.config,t);case`create`:return await ve(e.config,t,e);case`regex-replace`:return await ye(e.config,t);case`replace-in-file`:return await be(e.config,t);case`delete`:return xe(e.config,t);case`rename`:return Se(e.config,t);case`move`:return we(e.config,t);case`copy`:return Te(e.config,t);case`append`:return await Ee(e.config,t,e);case`mkdir`:return De(e.config,t);case`git-init`:return Ce(e.config);case`exec`:return I(e.config,t);case`exec-file`:return I(e.config,t);default:{let t=e.type;return`${N.yellow}⚠ Diff not available for task type: ${t}${N.reset}`}}}catch(e){return`${N.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${N.reset}`}}async function L(e,t){console.log(`${N.blue}═══════════════════════════════════════════════════════${N.reset}`),console.log(`${N.blue} DRY RUN - Preview of changes${N.reset}`),console.log(`${N.blue}═══════════════════════════════════════════════════════${N.reset}`);for(let n of e){console.log(`${N.cyan}▶ Task: ${n.name}${N.reset}`),n.description!=null&&n.description!==``&&console.log(`${N.gray} ${n.description}${N.reset}`);let e=await Oe(n,t);console.log(e),console.log(`${N.gray}${`─`.repeat(55)}${N.reset}`)}console.log(`${N.blue}═══════════════════════════════════════════════════════${N.reset}`),console.log(`${N.yellow} No changes were applied (dry-run mode)${N.reset}`),console.log(`${N.blue}═══════════════════════════════════════════════════════${N.reset}`)}const R=new Map,z={},B=new Map;function V(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(R.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(B.has(t)){let e=B.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}R.set(e.name,e);for(let t of e.taskTypes)B.set(t,e.name);n(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function ke(e){let t=R.get(e);if(t!=null){for(let e of t.taskTypes)B.delete(e);R.delete(e)}}function Ae(e){return R.get(e)}function H(e){let t=B.get(e);if(t!=null)return R.get(t)}function U(e){return B.has(e)}function je(){return Array.from(R.keys())}function Me(){R.clear(),B.clear()}function Ne(e){e.beforeAll!=null&&(z.beforeAll=e.beforeAll),e.afterAll!=null&&(z.afterAll=e.afterAll),e.beforeTask!=null&&(z.beforeTask=e.beforeTask),e.afterTask!=null&&(z.afterTask=e.afterTask),e.onError!=null&&(z.onError=e.onError)}async function W(e,...t){let n=z[e];if(n!=null)try{e===`beforeAll`||e===`afterAll`?await n(t[0]):(e===`beforeTask`||e===`afterTask`||e===`onError`)&&await n(t[0],t[1])}catch(t){f(`Error in ${e} hook: ${t instanceof Error?t.message:String(t)}`,`error`)}}async function Pe(e,t,n){let r=H(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}async function Fe(e,t){let n=H(e.type);if(!(n==null||n.getDiff==null))return n.getDiff(e,t)}function Ie(e){let t=H(e.type);return t==null?[`No plugin found for task type: ${e.type}`]:t.validate==null?[]:t.validate(e)}function Le(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}}}const G=new 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)&&f(`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 D.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof D?t:D.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 D.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 D.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 D.executionFailed(e.id,`Expression evaluation failed: ${t instanceof Error?t.message:String(t)}`)}}executeLowercase(e){return le(String(e))}executeUppercase(e){return fe(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 D.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 D.executionFailed(e.id,`Chain transformer must have at least one transformer`);return this.executeChain(r,t,n)}executeCapitalize(e){return oe(String(e))}executeTitlecase(e){return oe(String(e))}executeCamelcase(e){return ae(String(e))}executePascalcase(e){return ue(String(e))}executeSnakecase(e){return de(String(e))}executeKebabcase(e){return ce(String(e))}executeConstantcase(e){return se(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 ce(String(e))}executeUnderscore(e){return de(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};async function K(e,t,n,r){if(e!==void 0)return p(e,{id:t,contextType:`Prompt`,...n!=null&&{context:n},...r?.$sourceUrl!=null&&{sourceUrl:r.$sourceUrl}})}async function q(e,t=new Map,n={}){let r={};if(e.length===0)return r;for(let i of e){if(i.$templateEnabled!=null&&!await v(i.$templateEnabled,{...n,...r}))continue;let e={...n,...r};if(await v(i.enabled,e))try{let n,a=t.get(i.id);switch(i.default!==void 0&&(a=await K(i.default,i.id,e,i)),i.type){case`input`:{let t={message:i.message};a!==void 0&&(t.default=String(a));let r=await o(i.required,e);if(r!==void 0&&(t.required=r),n=await te(t),r&&(n==null||typeof n==`string`&&n.trim()===``))throw f(`${i.message} is required`,`error`),T.required(i.id);break}case`password`:if(n=await re({message:i.message,mask:`*`}),await o(i.required,e)&&(n==null||typeof n==`string`&&n.trim()===``))throw f(`${i.message} is required`,`error`),T.required(i.id);break;case`number`:{let t={message:i.message};a!==void 0&&(t.default=Number(a));let r=await o(i.required,e);if(r!==void 0&&(t.required=r),i.min!==void 0&&(t.min=i.min),i.max!==void 0&&(t.max=i.max),n=await ne(t),r&&n==null)throw f(`${i.message} is required`,`error`),T.required(i.id);break}case`select`:{let e={message:i.message,choices:i.choices.map(e=>({name:e.name,value:e.value}))};a!==void 0&&(e.default=a),n=await ie(e);break}case`confirm`:{let e=a===void 0?!1:!!a;n=await ee({message:i.message,default:e});break}default:throw f(`Unknown prompt type: ${i.type}`,`error`),T.unknownType(i.type)}i.transformers!==void 0&&(n=await G.apply(i.transformers,n,{...e,...r})),r[i.id]=n}catch(e){throw e instanceof Error&&f(`Failed to collect prompt "${i.id}": ${e.message}`,`error`),e}}return r}async function J(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await K(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function Y(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 Re=C(x.appendFile),ze=C(x.readFile),Be=C(x.stat);async function Ve(e,t,n){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping append task`,`info`);return}let r=b.join(S.cwd(),e.file),i={};e.content==null?e.template!=null&&(i.template=e.template):i.template=e.content,e.templateFile!=null&&(i.templateFile=e.templateFile);let a=A(i);if(!a.isValid)throw a.error?.includes(`cannot have both`)?E.templateHasBothTemplateAndFile():E.templateMissingTemplateOrFile();let o=await j(i,t,n),c=!1,l=!1;try{await Be(r),c=!0;let t=await ze(r,`utf-8`);t.length>0&&!t.endsWith(`
23
- `)&&(l=e.newline!==!1)}catch{}c&&l?await Re(r,`\n${o}`):await Re(r,o),f(`Appended content to ${e.file}`,`success`)}const He={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await Ve(e.config,t,e)}},Ue=C(x.copyFile),We=C(x.stat),Ge=C(x.mkdir),Ke=C(x.readdir);async function qe(e,t){await Ge(t,{recursive:!0});let n=await Ke(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=b.join(e,n.name),i=b.join(t,n.name);n.isDirectory()?await qe(r,i):await Ue(r,i)}))}async function Je(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping copy task`,`info`);return}let n=b.join(S.cwd(),e.from),r=b.join(S.cwd(),e.to),i;try{i=await We(n)}catch{f(`Source path does not exist: ${n}`,`warn`);return}await Ge(b.dirname(r),{recursive:!0}),i.isDirectory()?(await qe(n,r),f(`Copied directory ${e.from} to ${e.to}`,`success`)):(await Ue(n,r),f(`Copied file ${e.from} to ${e.to}`,`success`))}const Ye={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Je(e.config,t)}},Xe=C(x.writeFile);async function Ze(e,t,n){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping create task`,`info`);return}let r=b.join(S.cwd(),e.file);if(x.existsSync(r)){f(`File already exists, skipping: ${e.file}`,`info`);return}let i=A(e);if(!i.isValid)throw i.error?.includes(`cannot have both`)?E.createHasBothTemplateAndFile():E.createMissingTemplateOrFile();let a=await j(e,t,n),o=b.dirname(r);x.existsSync(o)||x.mkdirSync(o,{recursive:!0}),await Xe(r,a),f(`Created file: ${e.file}`,`success`)}const Qe={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Ze(e.config,t,e)}};async function $e(e,t){let{paths:n,condition:r}=e;if(r!=null&&r!==``){if(!t){f(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!s(r,t)){f(`Condition not met, skipping deletion`,`info`);return}}for(let e of n){let t=b.join(S.cwd(),e);x.existsSync(t)&&x.rmSync(t,{recursive:!0,force:!0})}}const et={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t)}};async function tt(e,t,n){e.condition!=null&&e.condition!==``&&!s(e.condition,t)||await g({file:e.file,...e.runtime&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!=null&&e.cwd.trim()!==``&&{cwd:e.cwd},...n?.$sourceUrl!=null&&n.$sourceUrl.trim()!==``&&{sourceUrl:n.$sourceUrl},captureOutput:!1},t)}const nt={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await tt(e.config,t,e)}};async function rt(e,t){if(e.condition!=null&&e.condition!==``){if(!t){f(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!s(e.condition,t)){f(`Condition not met, skipping exec task`,`info`);return}}let n=e.cwd==null?S.cwd():b.join(S.cwd(),e.cwd);w(e.command,{cwd:n,stdio:`inherit`})}const it={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await rt(e.config,t)}};async function at(e,t){if(e.condition!=null&&e.condition!==``){if(!t){f(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!s(e.condition,t)){f(`Condition not met, skipping git-init task`,`info`);return}}if(e.removeExisting){let e=b.join(S.cwd(),`.git`);x.existsSync(e)&&x.rmSync(e,{recursive:!0,force:!0})}if(w(`git init`,{stdio:`inherit`}),e.initialCommit){let t=e.message??`Initial commit`;w(`git add .`,{stdio:`inherit`}),w(`git commit -m "${t}"`,{stdio:`inherit`})}}const ot={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await at(e.config,t)}},st=C(x.mkdir);async function ct(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping mkdir task`,`info`);return}await st(b.join(S.cwd(),e.path),{recursive:!0}),f(`Created directory: ${e.path}`,`success`)}const lt={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await ct(e.config,t)}},ut=C(x.rename),dt=C(x.stat),ft=C(x.mkdir);async function pt(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping move task`,`info`);return}let n=b.join(S.cwd(),e.from),r=b.join(S.cwd(),e.to);try{await dt(n)}catch{f(`Source path does not exist: ${n}`,`warn`);return}await ft(b.dirname(r),{recursive:!0}),await ut(n,r),f(`Moved ${e.from} to ${e.to}`,`success`)}const mt={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await pt(e.config,t)}},ht=C(x.readFile),gt=C(x.writeFile);async function _t(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping regex-replace task`,`info`);return}let n=b.join(S.cwd(),e.file),{pattern:r}=e,i=e.flags??``,a=e.replacement||``,o=await ht(n,`utf-8`),c=new RegExp(r,i);o=o.replace(c,u(a,t)),await gt(n,o)}const vt={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await _t(e.config,t)}},yt=C(x.rename);async function bt(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping rename task`,`info`);return}let n=b.join(S.cwd(),u(e.from,t)),r=b.join(S.cwd(),u(e.to,t));if(!x.existsSync(n)){f(`Source path does not exist: ${n}`,`warn`);return}await yt(n,r)}const xt={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await bt(e.config,t)}},St=C(x.readFile),Ct=C(x.writeFile);async function wt(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping replace-in-file task`,`info`);return}let n=b.join(S.cwd(),e.file),{replacements:r}=e;if(!x.existsSync(n)){f(`File not found: ${n}, skipping`,`warn`);return}let i=await St(n,`utf-8`);for(let{find:e,replace:n}of r){let r=u(n,t);i=i.replace(new RegExp(e,`gu`),r)}await Ct(n,i)}const Tt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await wt(e.config,t)}},Et=C(x.readFile),Dt=C(x.writeFile);async function Ot(e,t){if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping update-json task`,`info`);return}let n=b.join(S.cwd(),e.file),{updates:r}=e,i=await Et(n,`utf-8`),a=JSON.parse(i);function o(e){if(typeof e==`string`)return u(e,t);if(Array.isArray(e))return e.map(e=>o(e));if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=o(r);return t}return e}for(let[e,t]of Object.entries(r)){let n=o(t);e.includes(`.`)?d(a,e,n):a[e]=n}await Dt(n,`${JSON.stringify(a,null,2)}\n`)}const kt={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await Ot(e.config,t)}},At=C(x.writeFile);async function jt(e,t,n){let{allowCreate:r=!0}=e;if(e.condition!=null&&e.condition!==``&&!s(e.condition,t)){f(`Condition not met, skipping write task`,`info`);return}let i=b.join(S.cwd(),e.file);if(!x.existsSync(i)){if(r===!1)throw Error(`Write task failed: file does not exist (${e.file})`);f(`File not found, creating new file: ${e.file}`,`info`)}let a=A(e);if(!a.isValid)throw a.error?.includes(`cannot have both`)?E.templateHasBothTemplateAndFile():E.templateMissingTemplateOrFile();let o=await j(e,t,n),c=b.dirname(i);x.existsSync(c)||x.mkdirSync(c,{recursive:!0}),await At(i,o)}const Mt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await jt(e.config,t,e)}};function X(){U(`update-json`)||(V(kt),V(Mt),V(Qe),V(vt),V(Tt),V(et),V(xt),V(ot),V(it),V(nt),V(mt),V(Ye),V(He),V(lt))}async function Nt(e,t,n=!1){if(X(),n){f(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(U(e.type)){await Pe(e,t,{dryRun:n});return}throw TypeError(`Unknown task type: ${e.type}`)}async function Z(e,t,n,r,i=!1){try{return f(`[${n}/${r}] Running: ${e.name}...`,`info`),await Nt(e,t,i),f(`[${n}/${r}] Completed: ${e.name}...`,`success`),!0}catch(t){return f(`Failed: ${e.name}`,`error`),t instanceof Error&&(f(` Reason: ${t.message}`,`error`),t.stack!=null&&S.env.DEBUG!=null&&console.error(t.stack)),!1}}function Pt(e){let t=[],n=new Set,i=new Set,a=new Map(e.map(e=>[e.id,e]));function o(e){if(n.has(e))return;if(i.has(e))throw r.forTaskDependency(e);i.add(e);let s=a.get(e);if(!s)throw pe.forId(e);if(s.dependencies)for(let e of s.dependencies)o(e);i.delete(e),n.add(e),t.push(s)}for(let t of e)n.has(t.id)||o(t.id);return t}function Ft(e){let t=[];for(let n of e)if(!U(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=It(n);t.push(...e)}return t}function It(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=A({...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 Lt(e){f(`❌ Template validation failed:`,`error`),f(``,`error`);for(let t of e)f(` • ${t}`,`error`);f(``,`error`),f(`Please fix these errors before continuing.`,`error`)}async function Q(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 G.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}async function $(e,t,n){let r=new Map;for(let i of e){if(n?.skipConditional===!0&&typeof i.value==`object`&&i.value!==null&&!Array.isArray(i.value)&&i.value.type===`conditional`)continue;if(i.$templateEnabled!=null){let e={...t};for(let[t,n]of r.entries())e[t]=n;if(!await v(i.$templateEnabled,e))continue}let e={...t};for(let[t,n]of r.entries())e[t]=n;let a=await p(i.value,{id:i.id,contextType:`Variable`,context:e,...i.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}});a!==void 0&&r.set(i.id,a)}return r}async function Rt(e,t,n,r){if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let i=e;if(i.type===`conditional`){if(!n){f(`Variable "${t}": conditional value requires context but none provided`,`warn`);return}if(typeof i.condition!=`string`){f(`Variable "${t}": conditional value must have a string condition`,`error`);return}try{let{evaluateCondition:e}=await import(`./utils-413ckp1r.js`),a=e(i.condition,n)?i.ifTrue:i.ifFalse;return typeof a==`object`&&a?await Rt(a,t,n,r):a}catch(e){f(`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`){f(`Variable "${t}": exec value must have a string command`,`error`);return}try{let t=w(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){f(`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`){f(`Variable "${t}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!n)return f(`Variable "${t}": interpolate value requires context but none provided`,`warn`),e;try{return u(e,n)}catch(n){return f(`Variable "${t}": failed to interpolate interpolate value: ${n instanceof Error?n.message:`Unknown error`}`,`warn`),e}}else if(i.type===`exec-file`){if(!n){f(`Variable "${t}": exec-file value requires context but none provided`,`warn`);return}let e=i;if(typeof e.file!=`string`){f(`Variable "${t}": exec-file value must have a file path`,`error`);return}try{let t=await g({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...r!=null&&{sourceUrl:r},captureOutput:!0},n);if(t===void 0)return;let i=t.trim();if(i.startsWith(`{`)||i.startsWith(`[`))try{return JSON.parse(i)}catch{return i}if(/^-?\d+(?:\.\d+)?$/u.test(i)){let e=Number.parseFloat(i);if(!Number.isNaN(e))return e}return i===`true`||i===`false`?i===`true`:i}catch(e){f(`Variable "${t}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}else if(i.type!==void 0){f(`Variable "${t}": unknown value type "${i.type}". Expected "static", "exec", "conditional", "interpolate", or "exec-file".`,`error`);return}return e}function zt(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 Bt(n,r){let i=e();if(!await v(r.templateEnabled,i,{lazy:!0})){_(`⊘ Template is disabled - skipping all execution`);return}r.transformers!==void 0&&r.transformers.length>0&&(c(`Registering ${r.transformers.length} transformer(s)...`),G.registerAll(r.transformers)),c(`Registering built-in plugins...`),X(),c(`Validating task configurations...`);let a=Ft(n);a.length>0&&(Lt(a),S.exit(1)),c(`All tasks validated successfully`);let s=n.filter(n=>t(n.enabled,e(),{lazy:!0}));c(`Resolving task dependencies...`);let u=Pt(s);c(`Sorted ${u.length} task(s) by dependencies`),_(`Welcome! Let's execute your tasks.`),r.dryRun&&y(`🔍 DRY RUN MODE - No changes will be made`),_(`This will execute your project tasks based on the defined configuration.`);let d=i,p=[...r.variables??[]];if(p.length>0){let e=zt(p);e.length>0&&(f(`❌ Variable validation errors:`,`error`),e.forEach(e=>f(` - ${e}`,`error`)),S.exit(1)),c(`Resolving variable values...`);let t=await Q(p,await $(p,d,{skipConditional:!0}),d);Object.assign(d,t),Object.keys(t).length>0&&(c(`Resolved ${Object.keys(t).length} variable(s)`),c(`Variable values: ${JSON.stringify(t)}`))}let m=r.prompts??[],h=[...m];if(h.length>0){let e=Y(h);e.length>0&&(f(`❌ Prompt validation errors:`,`error`),e.forEach(e=>f(` - ${e}`,`error`)),S.exit(1)),c(`Resolving prompt default values...`);let t=await J(h,d);if(m.length>0){_(`📋 Collecting prompts (available to all tasks):`);let e=await q(m,t,d);Object.assign(d,e)}}if(p.length>0){let e=p.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(e.length>0){c(`Re-resolving conditional variables with prompt values...`);let t=await Q(e,await $(e,d),d);Object.assign(d,t),Object.keys(t).length>0&&c(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await v(r.templateEnabled,d)){_(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let g=[];for(let e of u)e.$templateEnabled!=null&&!await v(e.$templateEnabled,d)||await v(e.enabled,d)&&g.push(e);if(f(`${g.length} of ${u.length} task(s) enabled for execution`,`info`),r.dryRun){await L(g,d),_(`🔍 Dry run completed - no changes were made`),_(`Run without --dry-run to apply changes`);return}c(`Calling beforeAll hook...`),await W(`beforeAll`,d);let b=g.length,x=0,C=0,w=[],ee=[];for(let e=0;e<g.length;e++){let t=g[e];t!=null&&(c(`Calling beforeTask hook for task: ${t.name}`),await W(`beforeTask`,t,d),await Z(t,d,e+1,b,r.dryRun)?(x++,w.push(t.id),c(`Calling afterTask hook for task: ${t.name}`),await W(`afterTask`,t,d)):(await o(t.required,d)&&(C++,ee.push(t.name)),c(`Calling onError hook for task: ${t.name}`),await W(`onError`,Error(`Task ${t.name} failed`),t),y(`⚠️ Task "${t.name}" failed, continuing with remaining tasks...`)))}C>0&&(f(`\n❌ Task execution completed with ${C} error(s)`,`error`),f(`Completed: ${x}/${b} tasks`,`info`),f(`Failed tasks: ${ee.join(`, `)}`,`error`),S.exit(1)),c(`Calling afterAll hook...`),await W(`afterAll`,d),l(`✅ All tasks completed successfully!`),l(` Completed: ${x}/${b} tasks`)}async function Vt(e,t,n={}){c(`Running templates with sequential variable/prompt resolution...`),c(`Total templates to process: ${e.length}`),c(`Registering built-in plugins...`),X();let r=[];console.log(``),_(`📋 Collecting input...`),console.log(``);for(let t=0;t<e.length;t++){let i=e[t];if(i==null)continue;let a=`=`.repeat(60);if(c(`\n${a}`),c(`Processing template ${t+1}/${e.length}: "${i.name}"`),c(a),c(`Current config keys: ${Object.keys(n).join(`, `)}`),!await v(i.enabled,n)){_(`⊘ Template "${i.name}" is disabled - skipping`),c(` Enabled condition: ${JSON.stringify(i.enabled)}`);continue}let o=i.variables??[];if(o.length>0){c(`Processing ${o.length} variable(s) for template "${i.name}"...`);let e=zt(o);e.length>0&&(f(`❌ Variable validation errors:`,`error`),e.forEach(e=>f(` - ${e}`,`error`)),S.exit(1));let t=await Q(o,await $(o,n,{skipConditional:!0}),n);Object.assign(n,t);let r=o.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1),a=0;if(r.length>0){let e=await Q(r,await $(r,n),n);if(a=Object.keys(e).length,Object.assign(n,e),a>0){c(`Resolved ${a} conditional variable(s)`);for(let[t,n]of Object.entries(e))c(` ${t} = ${JSON.stringify(n)}`)}}let s=Object.keys(t).length+a;if(s>0){c(`Total variables resolved for template: ${s}`);for(let[e,n]of Object.entries(t))c(` ${e} = ${JSON.stringify(n)}`)}}let s=i.prompts??[];if(s.length>0){c(`Processing ${s.length} prompt(s) for template "${i.name}"...`);let e=Y(s);e.length>0&&(f(`❌ Prompt validation errors:`,`error`),e.forEach(e=>f(` - ${e}`,`error`)),S.exit(1));let t=await q(s,await J(s,n),n);Object.assign(n,t),c(`Collected ${Object.keys(t).length} prompt answer(s)`)}if(!await v(i.enabled,n)){_(`⊘ Template "${i.name}" became disabled after variable/prompt resolution - skipping tasks`);continue}let l=i.tasks??[];l.length>0&&(c(`Found ${l.length} task(s) in template "${i.name}" (will execute later)`),r.push(...l))}if(c(`
24
- 🔧 Validating and filtering all collected tasks...`),r.length===0){f(`No tasks found in any template`,`info`);return}let i=Ft(r);i.length>0&&(Lt(i),S.exit(1)),console.log(``),f(`🛠️ Preparing tasks...`,`info`);let s=[];for(let e of r)await v(e.enabled,n)&&s.push(e);if(console.log(``),f(`Found ${r.length} tasks (${s.length} enabled)`,`info`),f(`All tasks validated successfully`,`success`),s.length===0){f(`No enabled tasks to execute`,`info`);return}let l=Pt(s);if(t.dryRun){f(`
25
- 🔍 Dry run - showing task changes...`,`info`),await L(l,n),f(`
26
- 🔍 Dry run completed - no changes were made`,`info`),f(`Run without --dry-run to apply changes`,`info`);return}console.log(``),a(`⚙️ Executing tasks...`),console.log(``),await W(`beforeAll`,n);let u=0,d=0,p=[];for(let e=0;e<l.length;e++){let r=l[e];r!=null&&(await W(`beforeTask`,r,n),await Z(r,n,e+1,l.length,t.dryRun)?(u++,await W(`afterTask`,r,n)):(await o(r.required,n)&&(d++,p.push(r.name)),await W(`onError`,Error(`Task ${r.name} failed`),r),y(`⚠️ Task "${r.name}" failed, continuing with remaining tasks...`)))}await W(`afterAll`,n),d>0&&(f(`\n❌ Task execution completed with ${d} error(s)`,`error`),f(`Completed: ${u}/${l.length} tasks`,`info`),f(`Failed tasks: ${p.join(`, `)}`,`error`),S.exit(1)),f(`Completed: ${u}/${l.length} tasks`,`success`)}export{xe as A,O as B,je as C,Ie as D,ke as E,be as F,j as H,Oe as I,ge as L,Ce as M,ye as N,L as O,Se as P,_e as R,U as S,V as T,me as U,k as V,A as W,Le as _,$ as a,H as b,Nt as c,Y as d,J as f,Me as g,W as h,Rt as i,I as j,ve as k,X as l,K as m,Vt as n,Q as o,q as p,zt as r,Pt as s,Bt as t,Z as u,Pe as v,Ne as w,Fe as x,Ae as y,he as z};
@@ -1,26 +0,0 @@
1
- const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./config-DlJs75hK.cjs`),n=require(`./template-inheritance-Ds-FkR_6.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.N{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)}},d=class e extends n.N{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`)}},f=class e extends n.N{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`)}},p=class e extends n.N{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 m(e){return e.template!=null&&e.template!==``}function h(e){return e.templateFile!=null&&e.templateFile!==``}function g(e){return e.endsWith(`.hbs`)}function _(e){let t=m(e),n=h(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 v(e,t,r,i={}){let{enableHandlebars:a=!0,sourceUrl:o=r?.$sourceUrl}=i,s=m(e),c=h(e);if(s)return n.c(e.template,t);if(c){let r=e.templateFile,i=a&&g(r),s=await n.n(n.p(r,o));return i?(await import(`handlebars`)).default.compile(s)(t):n.c(s,t)}throw Error(`No template content available`)}function ee(e){return m(e)?`inline template`:h(e)?`template file: ${e.templateFile}`:`no template source`}const y=(0,o.promisify)(r.default.readFile),te=2,ne=10,re=55,b={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function x(e,t){switch(t){case`add`:return`${b.green}+ ${e}${b.reset}`;case`remove`:return`${b.red}- ${e}${b.reset}`;case`context`:return`${b.gray} ${e}${b.reset}`;default:return e}}function S(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(x(t,`context`)):(t!==void 0&&i.push(x(t,`remove`)),a!==void 0&&i.push(x(a,`add`)))}return i}async function ie(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${b.red}✗ File not found: ${e.file}${b.reset}`;try{let r=await y(o,`utf-8`),i=JSON.parse(r),a={...i};function s(e){if(typeof e==`string`)return n.c(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.h(i,t,e):i[t]=e}let c=JSON.stringify(a,null,2),l=JSON.stringify(i,null,2);if(c===l)return`${b.cyan}→ No changes${b.reset}`;let u=S(c,l);return`${b.blue}File: ${e.file}${b.reset}\n${u.join(`
4
- `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function C(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;if(e.template==null||e.template===``)return`${b.red}✗ No template content provided for file: ${e.file}${b.reset}`;let o=i.default.join(a.default.cwd(),e.file),s=n.c(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`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created${b.reset}\n${b.gray}Content preview:${b.reset}\n${t}${n?`
8
- ...`:``}`}try{let t=await y(o,`utf-8`);if(t===s)return`${b.cyan}→ No changes${b.reset}`;let n=S(t,s);return`${b.blue}File: ${e.file}${b.reset}\n${n.join(`
9
- `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function w(e,t,o){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s))return`${b.cyan}→ File already exists, would be skipped: ${e.file}${b.reset}`;try{if(m(e)){let n=await v(e,t,o),r=n.split(`
10
- `).slice(0,10).join(`
11
- `),i=n.split(`
12
- `).length>10;return`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created${b.reset}\n${b.gray}Content preview:${b.reset}\n${r}${i?`
13
- ...`:``}`}let n=ee(e);return`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created from ${n}${b.reset}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function T(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${b.red}✗ File not found: ${e.file}${b.reset}`;try{let r=await y(o,`utf-8`),i=new RegExp(e.pattern,e.flags??`g`),a=n.c(e.replacement,t),s=r.replace(i,a);if(r===s)return`${b.cyan}→ No matches found${b.reset}`;let c=S(r,s);return`${b.blue}File: ${e.file}${b.reset}\n${c.join(`
14
- `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function E(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=i.default.join(a.default.cwd(),e.file);if(!r.default.existsSync(o))return`${b.red}✗ File not found: ${e.file}${b.reset}`;try{let r=await y(o,`utf-8`),i=r;for(let{find:i,replace:a}of e.replacements){let e=n.c(i,t),o=n.c(a,t);r=r.replace(e,o)}if(i===r)return`${b.cyan}→ No changes${b.reset}`;let a=S(i,r);return`${b.blue}File: ${e.file}${b.reset}\n${a.join(`
15
- `)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}function D(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=e.paths.map(e=>n.c(e,t)).filter(e=>r.default.existsSync(i.default.join(a.default.cwd(),e)));return o.length===0?`${b.cyan}→ No files/directories to delete${b.reset}`:`${b.red}Would delete:${b.reset}\n${o.map(e=>`${b.red} - ${e}${b.reset}`).join(`
16
- `)}`}function O(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=n.c(e.from,t),s=n.c(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)?`${b.yellow}⚠ Destination already exists: ${s}${b.reset}\n${b.cyan}Would rename: ${o} → ${s}${b.reset}`:`${b.cyan}Would rename: ${o} → ${s}${b.reset}`:`${b.red}✗ Source not found: ${o}${b.reset}`}function k(e){if(e.condition!=null&&e.condition!==``)return`${b.yellow}⊘ Condition check skipped in dry-run${b.reset}`;let t=i.default.join(a.default.cwd(),`.git`),n=r.default.existsSync(t),o=[];if(e.removeExisting&&n&&o.push(`${b.red}Would remove existing .git directory${b.reset}`),o.push(`${b.green}Would initialize git repository${b.reset}`),e.initialCommit){let t=e.message??`Initial commit`;o.push(`${b.green}Would create initial commit: "${t}"${b.reset}`)}return o.join(`
17
- `)}function A(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=n.c(e.command,t),i=e.cwd==null?a.default.cwd():n.c(e.cwd,t);return`${b.yellow}Would execute:${b.reset}\n${b.cyan} Command: ${r}${b.reset}\n${b.cyan} Working directory: ${i}${b.reset}`}function ae(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=n.c(e.from,t),s=n.c(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)?`${b.yellow}⚠ Destination already exists: ${s}${b.reset}\n${b.cyan}Would move: ${o} → ${s}${b.reset}`:`${b.cyan}Would move: ${o} → ${s}${b.reset}`:`${b.red}✗ Source not found: ${o}${b.reset}`}function oe(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=n.c(e.from,t),s=n.c(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`${b.red}✗ Source not found: ${o}${b.reset}`;let u=r.default.statSync(c).isDirectory()?`directory`:`file`;return r.default.existsSync(l)?`${b.yellow}⚠ Destination already exists: ${s}${b.reset}\n${b.cyan}Would copy ${u}: ${o} → ${s}${b.reset}`:`${b.cyan}Would copy ${u}: ${o} → ${s}${b.reset}`}async function se(e,t,o){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.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 v(c,t,o),i=n.split(`
18
- `).slice(0,10).join(`
19
- `),a=n.split(`
20
- `).length>10;return r.default.existsSync(s)?`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ Would append content${b.reset}\n${b.gray}Content preview:${b.reset}\n${i}${a?`
21
- ...`:``}`:`${b.blue}File: ${e.file}${b.reset}\n${b.green}+ New file would be created with content${b.reset}\n${b.gray}Content preview:${b.reset}\n${i}${a?`
22
- ...`:``}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}function ce(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let o=n.c(e.path,t),s=i.default.join(a.default.cwd(),o);return r.default.existsSync(s)?`${b.cyan}→ Directory already exists: ${o}${b.reset}`:`${b.green}+ Would create directory: ${o}${b.reset}`}async function le(e,t){try{switch(e.type){case`update-json`:return await ie(e.config,t);case`write`:return await C(e.config,t);case`create`:return await w(e.config,t,e);case`regex-replace`:return await T(e.config,t);case`replace-in-file`:return await E(e.config,t);case`delete`:return D(e.config,t);case`rename`:return O(e.config,t);case`move`:return ae(e.config,t);case`copy`:return oe(e.config,t);case`append`:return await se(e.config,t,e);case`mkdir`:return ce(e.config,t);case`git-init`:return k(e.config);case`exec`:return A(e.config,t);case`exec-file`:return A(e.config,t);default:{let t=e.type;return`${b.yellow}⚠ Diff not available for task type: ${t}${b.reset}`}}}catch(e){return`${b.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function j(e,t){console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.blue} DRY RUN - Preview of changes${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`);for(let n of e){console.log(`${b.cyan}▶ Task: ${n.name}${b.reset}`),n.description!=null&&n.description!==``&&console.log(`${b.gray} ${n.description}${b.reset}`);let e=await le(n,t);console.log(e),console.log(`${b.gray}${`─`.repeat(55)}${b.reset}`)}console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.yellow} No changes were applied (dry-run mode)${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`)}const M=new Map,N={},P=new Map;function F(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(M.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(P.has(t)){let e=P.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}M.set(e.name,e);for(let t of e.taskTypes)P.set(t,e.name);n.E(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function ue(e){let t=M.get(e);if(t!=null){for(let e of t.taskTypes)P.delete(e);M.delete(e)}}function de(e){return M.get(e)}function I(e){let t=P.get(e);if(t!=null)return M.get(t)}function L(e){return P.has(e)}function fe(){return Array.from(M.keys())}function pe(){M.clear(),P.clear()}function me(e){e.beforeAll!=null&&(N.beforeAll=e.beforeAll),e.afterAll!=null&&(N.afterAll=e.afterAll),e.beforeTask!=null&&(N.beforeTask=e.beforeTask),e.afterTask!=null&&(N.afterTask=e.afterTask),e.onError!=null&&(N.onError=e.onError)}async function R(e,...t){let r=N[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.k(`Error in ${e} hook: ${t instanceof Error?t.message:String(t)}`,`error`)}}async function z(e,t,n){let r=I(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}async function he(e,t){let n=I(e.type);if(!(n==null||n.getDiff==null))return n.getDiff(e,t)}function ge(e){let t=I(e.type);return t==null?[`No plugin found for task type: ${e.type}`]:t.validate==null?[]:t.validate(e)}function _e(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.k(`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 p.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof p?t:p.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 p.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 p.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 p.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 p.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 p.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 B=new ve;async function V(e,t,r,i){if(e!==void 0)return n.l(e,{id:t,contextType:`Prompt`,...r!=null&&{context:r},...i?.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}})}async function H(e,t=new Map,r={}){let i={};if(e.length===0)return i;for(let a of e){if(a.$templateEnabled!=null&&!await n.w(a.$templateEnabled,{...r,...i}))continue;let e={...r,...i};if(await n.w(a.enabled,e))try{let r,o=t.get(a.id);switch(a.default!==void 0&&(o=await V(a.default,a.id,e,a)),a.type){case`input`:{let t={message:a.message};o!==void 0&&(t.default=String(o));let i=await n.S(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.k(`${a.message} is required`,`error`),d.required(a.id);break}case`password`:if(r=await(0,c.password)({message:a.message,mask:`*`}),await n.S(a.required,e)&&(r==null||typeof r==`string`&&r.trim()===``))throw n.k(`${a.message} is required`,`error`),d.required(a.id);break;case`number`:{let t={message:a.message};o!==void 0&&(t.default=Number(o));let i=await n.S(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.k(`${a.message} is required`,`error`),d.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.k(`Unknown prompt type: ${a.type}`,`error`),d.unknownType(a.type)}a.transformers!==void 0&&(r=await B.apply(a.transformers,r,{...e,...i})),i[a.id]=r}catch(e){throw e instanceof Error&&n.k(`Failed to collect prompt "${a.id}": ${e.message}`,`error`),e}}return i}async function U(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await V(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function W(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 G=(0,o.promisify)(r.default.appendFile),ye=(0,o.promisify)(r.default.readFile),be=(0,o.promisify)(r.default.stat);async function xe(e,t,r){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`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=_(s);if(!c.isValid)throw c.error?.includes(`cannot have both`)?f.templateHasBothTemplateAndFile():f.templateMissingTemplateOrFile();let l=await v(s,t,r),u=!1,d=!1;try{await be(o),u=!0;let t=await ye(o,`utf-8`);t.length>0&&!t.endsWith(`
23
- `)&&(d=e.newline!==!1)}catch{}u&&d?await G(o,`\n${l}`):await G(o,l),n.k(`Appended content to ${e.file}`,`success`)}const Se={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await xe(e.config,t,e)}},K=(0,o.promisify)(r.default.copyFile),Ce=(0,o.promisify)(r.default.stat),q=(0,o.promisify)(r.default.mkdir),we=(0,o.promisify)(r.default.readdir);async function Te(e,t){await q(t,{recursive:!0});let n=await we(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 Te(r,a):await K(r,a)}))}async function Ee(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`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 Ce(r)}catch{n.k(`Source path does not exist: ${r}`,`warn`);return}await q(i.default.dirname(o),{recursive:!0}),s.isDirectory()?(await Te(r,o),n.k(`Copied directory ${e.from} to ${e.to}`,`success`)):(await K(r,o),n.k(`Copied file ${e.from} to ${e.to}`,`success`))}const De={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Ee(e.config,t)}},Oe=(0,o.promisify)(r.default.writeFile);async function ke(e,t,o){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`Condition not met, skipping create task`,`info`);return}let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s)){n.k(`File already exists, skipping: ${e.file}`,`info`);return}let c=_(e);if(!c.isValid)throw c.error?.includes(`cannot have both`)?f.createHasBothTemplateAndFile():f.createMissingTemplateOrFile();let l=await v(e,t,o),u=i.default.dirname(s);r.default.existsSync(u)||r.default.mkdirSync(u,{recursive:!0}),await Oe(s,l),n.k(`Created file: ${e.file}`,`success`)}const Ae={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await ke(e.config,t,e)}};async function je(e,t){let{paths:o,condition:s}=e;if(s!=null&&s!==``){if(!t){n.k(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!n.T(s,t)){n.k(`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 Me={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await je(e.config,t)}};async function Ne(e,t,r){e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)||await n.u({file:e.file,...e.runtime&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!=null&&e.cwd.trim()!==``&&{cwd:e.cwd},...r?.$sourceUrl!=null&&r.$sourceUrl.trim()!==``&&{sourceUrl:r.$sourceUrl},captureOutput:!1},t)}const Pe={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ne(e.config,t,e)}};async function Fe(e,t){if(e.condition!=null&&e.condition!==``){if(!t){n.k(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!n.T(e.condition,t)){n.k(`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 Ie={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Fe(e.config,t)}};async function Le(e,t){if(e.condition!=null&&e.condition!==``){if(!t){n.k(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!n.T(e.condition,t)){n.k(`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 Re={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Le(e.config,t)}},ze=(0,o.promisify)(r.default.mkdir);async function Be(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`Condition not met, skipping mkdir task`,`info`);return}await ze(i.default.join(a.default.cwd(),e.path),{recursive:!0}),n.k(`Created directory: ${e.path}`,`success`)}const Ve={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Be(e.config,t)}},He=(0,o.promisify)(r.default.rename),Ue=(0,o.promisify)(r.default.stat),We=(0,o.promisify)(r.default.mkdir);async function Ge(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`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 Ue(r)}catch{n.k(`Source path does not exist: ${r}`,`warn`);return}await We(i.default.dirname(o),{recursive:!0}),await He(r,o),n.k(`Moved ${e.from} to ${e.to}`,`success`)}const Ke={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t)}},qe=(0,o.promisify)(r.default.readFile),Je=(0,o.promisify)(r.default.writeFile);async function Ye(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`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 qe(r,`utf-8`),u=new RegExp(o,s);l=l.replace(u,n.c(c,t)),await Je(r,l)}const Xe={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await Ye(e.config,t)}},Ze=(0,o.promisify)(r.default.rename);async function Qe(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`Condition not met, skipping rename task`,`info`);return}let o=i.default.join(a.default.cwd(),n.c(e.from,t)),s=i.default.join(a.default.cwd(),n.c(e.to,t));if(!r.default.existsSync(o)){n.k(`Source path does not exist: ${o}`,`warn`);return}await Ze(o,s)}const $e={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await Qe(e.config,t)}},et=(0,o.promisify)(r.default.readFile),tt=(0,o.promisify)(r.default.writeFile);async function nt(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`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.k(`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.c(r,t);c=c.replace(new RegExp(e,`gu`),i)}await tt(o,c)}const rt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await nt(e.config,t)}},it=(0,o.promisify)(r.default.readFile),at=(0,o.promisify)(r.default.writeFile),ot=2;async function st(e,t){if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`Condition not met, skipping update-json task`,`info`);return}let r=i.default.join(a.default.cwd(),e.file),{updates:o}=e,s=await it(r,`utf-8`),c=JSON.parse(s);function l(e){if(typeof e==`string`)return n.c(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.h(c,e,r):c[e]=r}await at(r,`${JSON.stringify(c,null,2)}\n`)}const ct={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await st(e.config,t)}},lt=(0,o.promisify)(r.default.writeFile);async function ut(e,t,o){let{allowCreate:s=!0}=e;if(e.condition!=null&&e.condition!==``&&!n.T(e.condition,t)){n.k(`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.k(`File not found, creating new file: ${e.file}`,`info`)}let l=_(e);if(!l.isValid)throw l.error?.includes(`cannot have both`)?f.templateHasBothTemplateAndFile():f.templateMissingTemplateOrFile();let u=await v(e,t,o),d=i.default.dirname(c);r.default.existsSync(d)||r.default.mkdirSync(d,{recursive:!0}),await lt(c,u)}const dt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await ut(e.config,t,e)}};function J(){L(`update-json`)||(F(ct),F(dt),F(Ae),F(Xe),F(rt),F(Me),F($e),F(Re),F(Ie),F(Pe),F(Ke),F(De),F(Se),F(Ve))}async function ft(e,t,r=!1){if(J(),r){n.k(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(L(e.type)){await z(e,t,{dryRun:r});return}throw TypeError(`Unknown task type: ${e.type}`)}async function Y(e,t,r,i,o=!1){try{return n.k(`[${r}/${i}] Running: ${e.name}...`,`info`),await ft(e,t,o),n.k(`[${r}/${i}] Completed: ${e.name}...`,`success`),!0}catch(t){return n.k(`Failed: ${e.name}`,`error`),t instanceof Error&&(n.k(` Reason: ${t.message}`,`error`),t.stack!=null&&a.default.env.DEBUG!=null&&console.error(t.stack)),!1}}function X(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.M.forTaskDependency(e);i.add(e);let s=a.get(e);if(!s)throw u.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 pt(e){let t=[];for(let n of e)if(!L(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=mt(n);t.push(...e)}return t}function mt(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=_({...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 ht(e){n.k(`❌ Template validation failed:`,`error`),n.k(``,`error`);for(let t of e)n.k(` • ${t}`,`error`);n.k(``,`error`),n.k(`Please fix these errors before continuing.`,`error`)}async function Z(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 B.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}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.w(a.$templateEnabled,e))continue}let e={...t};for(let[t,n]of i.entries())e[t]=n;let o=await n.l(a.value,{id:a.id,contextType:`Variable`,context:e,...a.$sourceUrl!=null&&{sourceUrl:a.$sourceUrl}});o!==void 0&&i.set(a.id,o)}return i}async function gt(e,t,r,i){if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let a=e;if(a.type===`conditional`){if(!r){n.k(`Variable "${t}": conditional value requires context but none provided`,`warn`);return}if(typeof a.condition!=`string`){n.k(`Variable "${t}": conditional value must have a string condition`,`error`);return}try{let{evaluateCondition:e}=await Promise.resolve().then(()=>require(`./utils-1Uvvc2xc.cjs`)),n=e(a.condition,r)?a.ifTrue:a.ifFalse;return typeof n==`object`&&n?await gt(n,t,r,i):n}catch(e){n.k(`Variable "${t}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(a.type===`exec`){let e=a.value;if(typeof e!=`string`){n.k(`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.k(`Variable "${t}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}else if(a.type===`static`)return a.value;else if(a.type===`interpolate`){let e=a.value;if(typeof e!=`string`){n.k(`Variable "${t}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!r)return n.k(`Variable "${t}": interpolate value requires context but none provided`,`warn`),e;try{return n.c(e,r)}catch(r){return n.k(`Variable "${t}": failed to interpolate interpolate value: ${r instanceof Error?r.message:`Unknown error`}`,`warn`),e}}else if(a.type===`exec-file`){if(!r){n.k(`Variable "${t}": exec-file value requires context but none provided`,`warn`);return}let e=a;if(typeof e.file!=`string`){n.k(`Variable "${t}": exec-file value must have a file path`,`error`);return}try{let t=await n.u({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...i!=null&&{sourceUrl:i},captureOutput:!0},r);if(t===void 0)return;let a=t.trim();if(a.startsWith(`{`)||a.startsWith(`[`))try{return JSON.parse(a)}catch{return a}if(/^-?\d+(?:\.\d+)?$/u.test(a)){let e=Number.parseFloat(a);if(!Number.isNaN(e))return e}return a===`true`||a===`false`?a===`true`:a}catch(e){n.k(`Variable "${t}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}else if(a.type!==void 0){n.k(`Variable "${t}": unknown value type "${a.type}". Expected "static", "exec", "conditional", "interpolate", or "exec-file".`,`error`);return}return e}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 _t(e,r){let i=t.t();if(!await n.w(r.templateEnabled,i,{lazy:!0})){n.v(`⊘ Template is disabled - skipping all execution`);return}r.transformers!==void 0&&r.transformers.length>0&&(n._(`Registering ${r.transformers.length} transformer(s)...`),B.registerAll(r.transformers)),n._(`Registering built-in plugins...`),J(),n._(`Validating task configurations...`);let o=pt(e);o.length>0&&(ht(o),a.default.exit(1)),n._(`All tasks validated successfully`);let s=e.filter(e=>n.C(e.enabled,t.t(),{lazy:!0}));n._(`Resolving task dependencies...`);let c=X(s);n._(`Sorted ${c.length} task(s) by dependencies`),n.v(`Welcome! Let's execute your tasks.`),r.dryRun&&n.x(`🔍 DRY RUN MODE - No changes will be made`),n.v(`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.k(`❌ Variable validation errors:`,`error`),e.forEach(e=>n.k(` - ${e}`,`error`)),a.default.exit(1)),n._(`Resolving variable values...`);let t=await Z(u,await Q(u,l,{skipConditional:!0}),l);Object.assign(l,t),Object.keys(t).length>0&&(n._(`Resolved ${Object.keys(t).length} variable(s)`),n._(`Variable values: ${JSON.stringify(t)}`))}let d=r.prompts??[],f=[...d];if(f.length>0){let e=W(f);e.length>0&&(n.k(`❌ Prompt validation errors:`,`error`),e.forEach(e=>n.k(` - ${e}`,`error`)),a.default.exit(1)),n._(`Resolving prompt default values...`);let t=await U(f,l);if(d.length>0){n.v(`📋 Collecting prompts (available to all tasks):`);let e=await H(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._(`Re-resolving conditional variables with prompt values...`);let t=await Z(e,await Q(e,l),l);Object.assign(l,t),Object.keys(t).length>0&&n._(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await n.w(r.templateEnabled,l)){n.v(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let p=[];for(let e of c)e.$templateEnabled!=null&&!await n.w(e.$templateEnabled,l)||await n.w(e.enabled,l)&&p.push(e);if(n.k(`${p.length} of ${c.length} task(s) enabled for execution`,`info`),r.dryRun){await j(p,l),n.v(`🔍 Dry run completed - no changes were made`),n.v(`Run without --dry-run to apply changes`);return}n._(`Calling beforeAll hook...`),await R(`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._(`Calling beforeTask hook for task: ${t.name}`),await R(`beforeTask`,t,l),await Y(t,l,e+1,m,r.dryRun)?(h++,_.push(t.id),n._(`Calling afterTask hook for task: ${t.name}`),await R(`afterTask`,t,l)):(await n.S(t.required,l)&&(g++,v.push(t.name)),n._(`Calling onError hook for task: ${t.name}`),await R(`onError`,Error(`Task ${t.name} failed`),t),n.x(`⚠️ Task "${t.name}" failed, continuing with remaining tasks...`)))}g>0&&(n.k(`\n❌ Task execution completed with ${g} error(s)`,`error`),n.k(`Completed: ${h}/${m} tasks`,`info`),n.k(`Failed tasks: ${v.join(`, `)}`,`error`),a.default.exit(1)),n._(`Calling afterAll hook...`),await R(`afterAll`,l),n.b(`✅ All tasks completed successfully!`),n.b(` Completed: ${h}/${m} tasks`)}async function vt(e,t,r={}){n._(`Running templates with sequential variable/prompt resolution...`),n._(`Total templates to process: ${e.length}`),n._(`Registering built-in plugins...`),J();let i=[];console.log(``),n.v(`📋 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._(`\n${s}`),n._(`Processing template ${t+1}/${e.length}: "${o.name}"`),n._(s),n._(`Current config keys: ${Object.keys(r).join(`, `)}`),!await n.w(o.enabled,r)){n.v(`⊘ Template "${o.name}" is disabled - skipping`),n._(` Enabled condition: ${JSON.stringify(o.enabled)}`);continue}let c=o.variables??[];if(c.length>0){n._(`Processing ${c.length} variable(s) for template "${o.name}"...`);let e=$(c);e.length>0&&(n.k(`❌ Variable validation errors:`,`error`),e.forEach(e=>n.k(` - ${e}`,`error`)),a.default.exit(1));let t=await Z(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 Z(i,await Q(i,r),r);if(s=Object.keys(e).length,Object.assign(r,e),s>0){n._(`Resolved ${s} conditional variable(s)`);for(let[t,r]of Object.entries(e))n._(` ${t} = ${JSON.stringify(r)}`)}}let l=Object.keys(t).length+s;if(l>0){n._(`Total variables resolved for template: ${l}`);for(let[e,r]of Object.entries(t))n._(` ${e} = ${JSON.stringify(r)}`)}}let l=o.prompts??[];if(l.length>0){n._(`Processing ${l.length} prompt(s) for template "${o.name}"...`);let e=W(l);e.length>0&&(n.k(`❌ Prompt validation errors:`,`error`),e.forEach(e=>n.k(` - ${e}`,`error`)),a.default.exit(1));let t=await H(l,await U(l,r),r);Object.assign(r,t),n._(`Collected ${Object.keys(t).length} prompt answer(s)`)}if(!await n.w(o.enabled,r)){n.v(`⊘ Template "${o.name}" became disabled after variable/prompt resolution - skipping tasks`);continue}let u=o.tasks??[];u.length>0&&(n._(`Found ${u.length} task(s) in template "${o.name}" (will execute later)`),i.push(...u))}if(n._(`
24
- 🔧 Validating and filtering all collected tasks...`),i.length===0){n.k(`No tasks found in any template`,`info`);return}let o=pt(i);o.length>0&&(ht(o),a.default.exit(1)),console.log(``),n.k(`🛠️ Preparing tasks...`,`info`);let s=[];for(let e of i)await n.w(e.enabled,r)&&s.push(e);if(console.log(``),n.k(`Found ${i.length} tasks (${s.length} enabled)`,`info`),n.k(`All tasks validated successfully`,`success`),s.length===0){n.k(`No enabled tasks to execute`,`info`);return}let c=X(s);if(t.dryRun){n.k(`
25
- 🔍 Dry run - showing task changes...`,`info`),await j(c,r),n.k(`
26
- 🔍 Dry run completed - no changes were made`,`info`),n.k(`Run without --dry-run to apply changes`,`info`);return}console.log(``),n.O(`⚙️ Executing tasks...`),console.log(``),await R(`beforeAll`,r);let l=0,u=0,d=[];for(let e=0;e<c.length;e++){let i=c[e];i!=null&&(await R(`beforeTask`,i,r),await Y(i,r,e+1,c.length,t.dryRun)?(l++,await R(`afterTask`,i,r)):(await n.S(i.required,r)&&(u++,d.push(i.name)),await R(`onError`,Error(`Task ${i.name} failed`),i),n.x(`⚠️ Task "${i.name}" failed, continuing with remaining tasks...`)))}await R(`afterAll`,r),u>0&&(n.k(`\n❌ Task execution completed with ${u} error(s)`,`error`),n.k(`Completed: ${l}/${c.length} tasks`,`info`),n.k(`Failed tasks: ${d.join(`, `)}`,`error`),a.default.exit(1)),n.k(`Completed: ${l}/${c.length} tasks`,`success`)}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`W`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return ft}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return gt}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return vt}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _t}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return ee}});
@@ -1 +0,0 @@
1
- import{k as e}from"./template-inheritance-BVct9RJf.js";import{t}from"./run-tasks-JGU1NDnc.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 +0,0 @@
1
- const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./template-inheritance-Ds-FkR_6.cjs`),n=require(`./run-tasks-bN0ievNj.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.k(`⚠️ No tasks defined. Use --config to specify tasks or call runWithTasks() programmatically.`,`warn`),t.k(`Example: scaffoldfy --config ./tasks.json`,`info`),r.default.exit(1)),await n.t(o,{dryRun:i,force:a,tasksFilePath:void 0})}catch(e){t.k(`❌ Task execution failed`,`error`),e instanceof Error?(t.k(`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.k(`❌ Task execution failed`,`error`),e instanceof Error?(t.k(`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 +0,0 @@
1
- import e from"node:path";import t from"node:fs";import n from"node:process";import{promisify as r}from"node:util";import"handlebars";import i from"node:os";import{execSync as a}from"node:child_process";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,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)}},l=class e extends o{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`)}},u=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)}},d=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)}},f=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)}},p=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)}};function m(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 n=new Map,r=new Map,i=new Map;for(let t of e)if(n.set(t.name,t),i.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)i.get(t.name).add(e),r.has(e)||r.set(e,new Set),r.get(e).add(t.name);let a=new Set,o=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=i.get(n.name).size>0,c=r.has(n.name)&&r.get(n.name).size>0;!s&&!c&&(a.add(n.name),o.set(n.name,t))}let c=e.filter(e=>!a.has(e.name)),l=[],u=new Set,d=new Set;function f(e){if(u.has(e))return;if(d.has(e))throw s.forTemplateDependencies(Array.from(d),e);d.add(e);let t=n.get(e);if(t!=null){let t=i.get(e);if(t!=null&&t.size>0)for(let e of t)f(e)}d.delete(e),u.add(e),t!=null&&!a.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];a.has(n.name)?p.push(n):m<l.length&&(p.push(l[m]),m++)}return p}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){}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){console.log(`${g.error}${h.error} ${e}${_}`)}function C(e,t=`info`){switch(t){case`debug`:break;case`info`:y(e);break;case`success`:b(e);break;case`warn`:x(e);break;case`error`:S(e);break}}function w(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&&(C(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&C(` Error: ${t.message}`,`warn`)),!1)}}function ee(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 w(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function te(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-413ckp1r.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-413ckp1r.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 w(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function T(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function ne(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 re(e,t){let n=ne(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 import(`./utils-413ckp1r.js`);return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await import(`./utils-413ckp1r.js`);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 T(n.value,t)}return!0}let E=!1;function ie(e){E=e}const D={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},O={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},k=`\x1B[0m`;function A(e){E&&console.log(`${O.debug}${D.debug} ${e}${k}`)}function ae(e){console.log(`${O.info}${D.info} ${e}${k}`)}function oe(e){console.log(`${O.success}${D.success} ${e}${k}`)}function se(e){console.log(`${O.warn}${D.warn} ${e}${k}`)}function j(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function ce(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 M(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 N(t,r){if(j(t))return t;if(r==null||r===``)return e.isAbsolute(t)?t:e.resolve(n.cwd(),t);if(j(r))try{let e=new URL(`.`,r);return new URL(t,e).href}catch{throw Error(`Failed to resolve file path '${t}' relative to source URL '${r}'`)}let i=e.dirname(r);return e.isAbsolute(t)?t:e.resolve(i,t)}async function P(n){let{file:r,sourceUrl:a,tempFileExtension:o=`.tmp`,tempFilePrefix:s=`scaffoldfy`}=n,c=r,l,u,d=!1;if(j(r)){l=r,`${l}`;let n=await W(l);d=!0;let a=i.tmpdir(),c=`${s}-${Date.now()}${o}`;u=e.join(a,c),t.writeFileSync(u,n,`utf-8`),`${u}`}else if(l=N(r,a),j(l)){`${l}`;let n=await W(l);d=!0;let r=i.tmpdir(),a=`${s}-${Date.now()}${o}`;u=e.join(r,a),t.writeFileSync(u,n,`utf-8`),`${u}`}else{if(!t.existsSync(l))throw Error(`File not found: ${l}`);u=l,`${u}`}return{localFilePath:u,isRemote:d,originalPath:c,resolvedPath:l}}function F(e){if(e.isRemote&&t.existsSync(e.localFilePath))try{t.unlinkSync(e.localFilePath),`${e.localFilePath}`}catch(e){`${e instanceof Error?e.message:String(e)}`}}function I(t){switch(e.extname(t).toLowerCase()){case`.js`:case`.cjs`:case`.mjs`:return`node`;case`.sh`:return`bash`;case`.bash`:return`bash`;case`.ps1`:return`pwsh`;default:return}}function le(e,t){switch(e){case`node`:return`node "${t}"`;case`bash`:return`bash "${t}"`;case`sh`:return`sh "${t}"`;case`pwsh`:return`pwsh -File "${t}"`;case`powershell`:return`powershell -File "${t}"`;default:return`node "${t}"`}}function ue(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function L(t,r){let i=B(t.file,r),o=t.args?.map(e=>B(e,r))??[],s={};if(t.parameters)for(let[e,n]of Object.entries(t.parameters))s[e]=B(n,r);let c=t.cwd!=null&&t.cwd!==``?e.join(n.cwd(),B(t.cwd,r)):n.cwd(),l=await P({file:i,...t.sourceUrl!=null&&t.sourceUrl!==``&&{sourceUrl:t.sourceUrl},tempFileExtension:ue(t.runtime??I(i)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:u}=l,d=t.runtime??I(u)??`node`;!t.runtime&&!I(u)&&C(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let e=le(d,u),r=o.join(` `),i=r?`${e} ${r}`:e;`${i}`;let l=a(i,{cwd:c,stdio:t.captureOutput?[`pipe`,`pipe`,`pipe`]:`inherit`,env:{...n.env,...s},encoding:t.captureOutput?`utf-8`:void 0});return t.captureOutput&&typeof l==`string`?l:void 0}finally{F(l)}}async function R(e,t){let{id:n,contextType:r,context:i,sourceUrl:o}=t;if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let s=e;if(s.type===`conditional`){if(!i){C(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof s.condition!=`string`){C(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=w(s.condition,i)?s.ifTrue:s.ifFalse;return typeof e==`object`&&e?await R(e,t):e}catch(e){C(`${r} "${n}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec`){let e=s.value;if(typeof e!=`string`){C(`${r} "${n}": exec value must have a string command`,`error`);return}try{return z(a(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim())}catch(e){C(`${r} "${n}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec-file`){let e=s;if(typeof e.file!=`string`){C(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await L({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...o!=null&&{sourceUrl:o},captureOutput:!0},i??{});return t===void 0?void 0:z(t.trim())}catch(e){C(`${r} "${n}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`static`)return s.value;if(s.type===`interpolate`){let e=s.value;if(typeof e!=`string`){C(`${r} "${n}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!i)return C(`${r} "${n}": interpolate value requires context but none provided`,`warn`),e;try{return B(e,i)}catch(t){return C(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(s.type!==void 0){C(`${r} "${n}": unknown value type "${s.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function z(e){if(e.startsWith(`{`)||e.startsWith(`[`))try{return JSON.parse(e)}catch{return e}if(/^-?\d+(?:\.\d+)?$/u.test(e)){let t=Number.parseFloat(e);if(!Number.isNaN(t))return t}return e===`true`||e===`false`?e===`true`:e}function B(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>M(t,n)?.toString()??``)}const V=r(t.readFile),H={template:[[`template`,`templateFile`]]};function U(t){if(t==null||t===``)return`current template`;if(j(t))return t;let r=n.cwd();return t.startsWith(r)?e.relative(r,t):t}async function W(e){if(j(e))return G(e);if(!t.existsSync(e))throw u.forPath(e);return V(e,`utf-8`)}async function G(e){try{let t=await fetch(e);if(!t.ok)throw d.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:d.forUrl(e,t instanceof Error?t:void 0)}}const K=new Map;async function q(r,i=new Set){let a=j(r),o;if(o=a||e.isAbsolute(r)?r:e.resolve(n.cwd(),r),K.has(o))return K.get(o);if(i.has(o))throw s.forTemplateInheritance(i,o);i.add(o);let c;if(a)c=await G(o);else{if(!t.existsSync(o))throw u.forPath(o);c=await V(o,`utf-8`)}let l;try{l=JSON.parse(c)}catch(e){throw f.forFile(o,e instanceof Error?e:Error(String(e)))}if(l.name==null||l.name.trim()===``)throw p.missingName(o);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(l.name))throw p.invalidNameFormat(o,l.name);if(l.tasks!==void 0&&!Array.isArray(l.tasks))throw p.tasksNotArray(o);l.tasks===void 0&&(l.tasks=[]);for(let e of l.tasks)e.$sourceUrl=o;if(l.variables!==void 0)for(let e of l.variables)e.$sourceUrl=o;if(l.prompts!==void 0)for(let e of l.prompts)e.$sourceUrl=o;return K.set(o,l),l}async function J(t,r,i,a,o){let c=j(t),l;if(l=c||e.isAbsolute(t)?t:r==null?e.resolve(n.cwd(),t):j(r)?new URL(t,r).href:e.resolve(r,t),i.has(l))return;if(a.has(l))throw s.forTemplateInheritance(a,l);a.add(l);let u=await q(l),d=j(l)?new URL(`.`,l).href:e.dirname(l);if(u.extends!=null&&u.extends!==``){let e=Array.isArray(u.extends)?u.extends:[u.extends];for(let t of e)await J(t,d,i,a,o)}a.delete(l),i.add(l),o.push(u)}async function Y(e,t,n=new Set){let r=[];return await J(e,t,n,new Set,r),m(r)}async function X(e,t,n=new Set){return Q(await Y(e,t,n))}function Z(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw c.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 c.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 c.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function de(e,t){if((t.override??`merge`)===`replace`){C(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}C(` → Variable "${t.id}" merged (value replaced)`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}function fe(e,t){if((t.override??`merge`)===`replace`){C(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}C(` → Prompt "${t.id}" merged`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}function Q(e){if(e.length===0)return{name:`Empty Template`,tasks:[]};if(e.length===1){let t=e[0];return Z(t.tasks??[],t.variables,t.prompts),t}let t=new Map,n=new Map,r=new Map,i={};for(let a of e){if(a.enabled!=null&&(i[a.name]=a.enabled),a.enabled===!1){C(`⊘ Skipping disabled template "${a.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(a.prompts!=null)for(let e of a.prompts)if(r.has(e.id)){if(e.override==null)throw l.forPrompt(e.id);let t=fe(r.get(e.id),e);a.enabled!=null&&(t.$templateEnabled=a.enabled),r.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$templateEnabled=a.enabled),r.set(e.id,t)}if(a.variables!=null)for(let e of a.variables)if(n.has(e.id)){if(e.override==null)throw l.forVariable(e.id);let t=de(n.get(e.id),e);a.enabled!=null&&(t.$templateEnabled=a.enabled),n.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$templateEnabled=a.enabled),n.set(e.id,t)}for(let e of a.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw l.forTask(e.id,U(n.$sourceUrl),U(e.$sourceUrl))}let n=me(t.get(e.id),e);a.enabled!=null&&(n.$templateEnabled=a.enabled),t.set(e.id,n)}else{let n={...e};a.enabled!=null&&(n.$templateEnabled=a.enabled),t.set(e.id,n)}}let a=Array.from(t.values()),o=r.size>0?Array.from(r.values()):void 0,s=n.size>0?Array.from(n.values()):void 0;Z(a,s,o);let c=e[e.length-1],u={name:c.name,tasks:a};return c.description!=null&&(u.description=c.description),c.dependencies!=null&&(u.dependencies=c.dependencies),c.enabled!=null&&(u.enabled=c.enabled),o!=null&&(u.prompts=o),s!=null&&(u.variables=s),u}function $(e,t){let n=H[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 pe(e,t,n){let r={...e},i=H[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 me(e,t){if((t.override??`merge`)===`replace`){C(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),C(` Base: ${U(e.$sourceUrl)}`,`info`),C(` Override: ${U(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}C(` → Merging task "${t.id}"`,`info`),C(` Base: ${U(e.$sourceUrl)}`,`info`),C(` Override: ${U(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=pe(e.config,t.config,t.type);let r=$(t.type,n);r!==null&&r.length>0&&(C(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),C(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function he(){K.clear()}async function ge(e,t){if(`${e}`,t?.sequential===!0){let t=await Y(e);return`${t.length}`,{tasks:[],templates:t}}let n=await X(e);C(`Loaded ${n.tasks?.length??0} task(s)`,`info`),n.extends!=null&&n.extends!==``&&C(`Extended from: ${(Array.isArray(n.extends)?n.extends:[n.extends]).join(`, `)}`,`info`),n.prompts!=null&&n.prompts.length>0&&C(`Found ${n.prompts.length} top-level prompt(s)`,`info`),n.variables!=null&&n.variables.length>0&&C(`Found ${n.variables.length} top-level variable(s)`,`info`);let r={tasks:n.tasks??[]};return n.prompts!=null&&(r.prompts=n.prompts),n.variables!=null&&(r.variables=n.variables),n.enabled!=null&&(r.enabled=n.enabled),n.transformers!=null&&(r.transformers=n.transformers),r}export{b as A,ee as C,S as D,v as E,s as M,o as N,y as O,re as S,w as T,A as _,q as a,oe as b,B as c,F as d,P as f,j as g,ce as h,ge as i,x as j,C as k,R as l,M as m,W as n,Y as o,N as p,X as r,Q as s,he as t,L as u,ae as v,te as w,se as x,ie as y};
@@ -1 +0,0 @@
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:util`);i=e.t(i),require(`handlebars`);let a=require(`node:os`);a=e.t(a);let o=require(`node:child_process`);o=e.t(o);var s=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},c=class e extends s{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)}},l=class e extends 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)}},u=class e extends 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`)}},d=class e extends s{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)}},f=class e extends s{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)}},p=class e extends s{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)}},m=class e extends s{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)}};function ee(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 n=new Map,r=new Map,i=new Map;for(let t of e)if(n.set(t.name,t),i.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)i.get(t.name).add(e),r.has(e)||r.set(e,new Set),r.get(e).add(t.name);let a=new Set,o=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=i.get(n.name).size>0,c=r.has(n.name)&&r.get(n.name).size>0;!s&&!c&&(a.add(n.name),o.set(n.name,t))}let s=e.filter(e=>!a.has(e.name)),l=[],u=new Set,d=new Set;function f(e){if(u.has(e))return;if(d.has(e))throw c.forTemplateDependencies(Array.from(d),e);d.add(e);let t=n.get(e);if(t!=null){let t=i.get(e);if(t!=null&&t.size>0)for(let e of t)f(e)}d.delete(e),u.add(e),t!=null&&!a.has(e)&&l.push(t)}for(let e of s)f(e.name);let p=[],m=0;for(let t=0;t<e.length;t++){let n=e[t];a.has(n.name)?p.push(n):m<l.length&&(p.push(l[m]),m++)}return p}let te=!1;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){}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){console.log(`${g.error}${h.error} ${e}${_}`)}function C(e,t=`info`){switch(t){case`debug`:break;case`info`:y(e);break;case`success`:b(e);break;case`warn`:x(e);break;case`error`:S(e);break}}function w(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&&(C(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&C(` Error: ${t.message}`,`warn`)),!1)}}function ne(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 w(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function re(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-1Uvvc2xc.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-1Uvvc2xc.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 w(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function ie(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function ae(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 oe(e,t){let n=ae(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-1Uvvc2xc.cjs`));return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await Promise.resolve().then(()=>require(`./utils-1Uvvc2xc.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 ie(n.value,t)}return!0}let T=!1;function se(e){T=e}const E={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},D={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},O=`\x1B[0m`;function k(e){T&&console.log(`${D.debug}${E.debug} ${e}${O}`)}function ce(e){console.log(`${D.info}${E.info} ${e}${O}`)}function le(e){console.log(`${D.success}${E.success} ${e}${O}`)}function ue(e){console.log(`${D.warn}${E.warn} ${e}${O}`)}function A(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function j(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 M(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 N(e,t){if(A(e))return e;if(t==null||t===``)return n.default.isAbsolute(e)?e:n.default.resolve(r.default.cwd(),e);if(A(t))try{let n=new URL(`.`,t);return new URL(e,n).href}catch{throw Error(`Failed to resolve file path '${e}' relative to source URL '${t}'`)}let i=n.default.dirname(t);return n.default.isAbsolute(e)?e:n.default.resolve(i,e)}async function P(e){let{file:r,sourceUrl:i,tempFileExtension:o=`.tmp`,tempFilePrefix:s=`scaffoldfy`}=e,c=r,l,u,d=!1;if(A(r)){l=r,`${l}`;let e=await W(l);d=!0;let i=a.default.tmpdir(),c=`${s}-${Date.now()}${o}`;u=n.default.join(i,c),t.default.writeFileSync(u,e,`utf-8`),`${u}`}else if(l=N(r,i),A(l)){`${l}`;let e=await W(l);d=!0;let r=a.default.tmpdir(),i=`${s}-${Date.now()}${o}`;u=n.default.join(r,i),t.default.writeFileSync(u,e,`utf-8`),`${u}`}else{if(!t.default.existsSync(l))throw Error(`File not found: ${l}`);u=l,`${u}`}return{localFilePath:u,isRemote:d,originalPath:c,resolvedPath:l}}function F(e){if(e.isRemote&&t.default.existsSync(e.localFilePath))try{t.default.unlinkSync(e.localFilePath),`${e.localFilePath}`}catch(e){`${e instanceof Error?e.message:String(e)}`}}function I(e){switch(n.default.extname(e).toLowerCase()){case`.js`:case`.cjs`:case`.mjs`:return`node`;case`.sh`:return`bash`;case`.bash`:return`bash`;case`.ps1`:return`pwsh`;default:return}}function de(e,t){switch(e){case`node`:return`node "${t}"`;case`bash`:return`bash "${t}"`;case`sh`:return`sh "${t}"`;case`pwsh`:return`pwsh -File "${t}"`;case`powershell`:return`powershell -File "${t}"`;default:return`node "${t}"`}}function fe(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function L(e,t){let i=B(e.file,t),a=e.args?.map(e=>B(e,t))??[],s={};if(e.parameters)for(let[n,r]of Object.entries(e.parameters))s[n]=B(r,t);let c=e.cwd!=null&&e.cwd!==``?n.default.join(r.default.cwd(),B(e.cwd,t)):r.default.cwd(),l=await P({file:i,...e.sourceUrl!=null&&e.sourceUrl!==``&&{sourceUrl:e.sourceUrl},tempFileExtension:fe(e.runtime??I(i)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:u}=l,d=e.runtime??I(u)??`node`;!e.runtime&&!I(u)&&C(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let t=de(d,u),n=a.join(` `),i=n?`${t} ${n}`:t;`${i}`;let l=(0,o.execSync)(i,{cwd:c,stdio:e.captureOutput?[`pipe`,`pipe`,`pipe`]:`inherit`,env:{...r.default.env,...s},encoding:e.captureOutput?`utf-8`:void 0});return e.captureOutput&&typeof l==`string`?l:void 0}finally{F(l)}}async function R(e,t){let{id:n,contextType:r,context:i,sourceUrl:a}=t;if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let s=e;if(s.type===`conditional`){if(!i){C(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof s.condition!=`string`){C(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=w(s.condition,i)?s.ifTrue:s.ifFalse;return typeof e==`object`&&e?await R(e,t):e}catch(e){C(`${r} "${n}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec`){let e=s.value;if(typeof e!=`string`){C(`${r} "${n}": exec value must have a string command`,`error`);return}try{return z((0,o.execSync)(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim())}catch(e){C(`${r} "${n}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec-file`){let e=s;if(typeof e.file!=`string`){C(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await L({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...a!=null&&{sourceUrl:a},captureOutput:!0},i??{});return t===void 0?void 0:z(t.trim())}catch(e){C(`${r} "${n}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`static`)return s.value;if(s.type===`interpolate`){let e=s.value;if(typeof e!=`string`){C(`${r} "${n}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!i)return C(`${r} "${n}": interpolate value requires context but none provided`,`warn`),e;try{return B(e,i)}catch(t){return C(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(s.type!==void 0){C(`${r} "${n}": unknown value type "${s.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function z(e){if(e.startsWith(`{`)||e.startsWith(`[`))try{return JSON.parse(e)}catch{return e}if(/^-?\d+(?:\.\d+)?$/u.test(e)){let t=Number.parseFloat(e);if(!Number.isNaN(t))return t}return e===`true`||e===`false`?e===`true`:e}function B(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>M(t,n)?.toString()??``)}const V=(0,i.promisify)(t.default.readFile),H={template:[[`template`,`templateFile`]]};function U(e){if(e==null||e===``)return`current template`;if(A(e))return e;let t=r.default.cwd();return e.startsWith(t)?n.default.relative(t,e):e}async function W(e){if(A(e))return G(e);if(!t.default.existsSync(e))throw d.forPath(e);return V(e,`utf-8`)}async function G(e){try{let t=await fetch(e);if(!t.ok)throw f.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:f.forUrl(e,t instanceof Error?t:void 0)}}const K=new Map;async function q(e,i=new Set){let a=A(e),o;if(o=a||n.default.isAbsolute(e)?e:n.default.resolve(r.default.cwd(),e),K.has(o))return K.get(o);if(i.has(o))throw c.forTemplateInheritance(i,o);i.add(o);let s;if(a)s=await G(o);else{if(!t.default.existsSync(o))throw d.forPath(o);s=await V(o,`utf-8`)}let l;try{l=JSON.parse(s)}catch(e){throw p.forFile(o,e instanceof Error?e:Error(String(e)))}if(l.name==null||l.name.trim()===``)throw m.missingName(o);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(l.name))throw m.invalidNameFormat(o,l.name);if(l.tasks!==void 0&&!Array.isArray(l.tasks))throw m.tasksNotArray(o);l.tasks===void 0&&(l.tasks=[]);for(let e of l.tasks)e.$sourceUrl=o;if(l.variables!==void 0)for(let e of l.variables)e.$sourceUrl=o;if(l.prompts!==void 0)for(let e of l.prompts)e.$sourceUrl=o;return K.set(o,l),l}async function J(e,t,i,a,o){let s=A(e),l;if(l=s||n.default.isAbsolute(e)?e:t==null?n.default.resolve(r.default.cwd(),e):A(t)?new URL(e,t).href:n.default.resolve(t,e),i.has(l))return;if(a.has(l))throw c.forTemplateInheritance(a,l);a.add(l);let u=await q(l),d=A(l)?new URL(`.`,l).href:n.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 J(t,d,i,a,o)}a.delete(l),i.add(l),o.push(u)}async function Y(e,t,n=new Set){let r=[];return await J(e,t,n,new Set,r),ee(r)}async function X(e,t,n=new Set){return $(await Y(e,t,n))}function Z(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw l.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 l.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 l.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function pe(e,t){if((t.override??`merge`)===`replace`){C(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}C(` → Variable "${t.id}" merged (value replaced)`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}function Q(e,t){if((t.override??`merge`)===`replace`){C(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}C(` → Prompt "${t.id}" merged`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}function $(e){if(e.length===0)return{name:`Empty Template`,tasks:[]};if(e.length===1){let t=e[0];return Z(t.tasks??[],t.variables,t.prompts),t}let t=new Map,n=new Map,r=new Map,i={};for(let a of e){if(a.enabled!=null&&(i[a.name]=a.enabled),a.enabled===!1){C(`⊘ Skipping disabled template "${a.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(a.prompts!=null)for(let e of a.prompts)if(r.has(e.id)){if(e.override==null)throw u.forPrompt(e.id);let t=Q(r.get(e.id),e);a.enabled!=null&&(t.$templateEnabled=a.enabled),r.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$templateEnabled=a.enabled),r.set(e.id,t)}if(a.variables!=null)for(let e of a.variables)if(n.has(e.id)){if(e.override==null)throw u.forVariable(e.id);let t=pe(n.get(e.id),e);a.enabled!=null&&(t.$templateEnabled=a.enabled),n.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$templateEnabled=a.enabled),n.set(e.id,t)}for(let e of a.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw u.forTask(e.id,U(n.$sourceUrl),U(e.$sourceUrl))}let n=ge(t.get(e.id),e);a.enabled!=null&&(n.$templateEnabled=a.enabled),t.set(e.id,n)}else{let n={...e};a.enabled!=null&&(n.$templateEnabled=a.enabled),t.set(e.id,n)}}let a=Array.from(t.values()),o=r.size>0?Array.from(r.values()):void 0,s=n.size>0?Array.from(n.values()):void 0;Z(a,s,o);let c=e[e.length-1],l={name:c.name,tasks:a};return c.description!=null&&(l.description=c.description),c.dependencies!=null&&(l.dependencies=c.dependencies),c.enabled!=null&&(l.enabled=c.enabled),o!=null&&(l.prompts=o),s!=null&&(l.variables=s),l}function me(e,t){let n=H[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 he(e,t,n){let r={...e},i=H[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 ge(e,t){if((t.override??`merge`)===`replace`){C(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),C(` Base: ${U(e.$sourceUrl)}`,`info`),C(` Override: ${U(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}C(` → Merging task "${t.id}"`,`info`),C(` Base: ${U(e.$sourceUrl)}`,`info`),C(` Override: ${U(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=he(e.config,t.config,t.type);let r=me(t.type,n);r!==null&&r.length>0&&(C(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),C(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function _e(){K.clear()}async function ve(e,t){if(`${e}`,t?.sequential===!0){let t=await Y(e);return`${t.length}`,{tasks:[],templates:t}}let n=await X(e);C(`Loaded ${n.tasks?.length??0} task(s)`,`info`),n.extends!=null&&n.extends!==``&&C(`Extended from: ${(Array.isArray(n.extends)?n.extends:[n.extends]).join(`, `)}`,`info`),n.prompts!=null&&n.prompts.length>0&&C(`Found ${n.prompts.length} top-level prompt(s)`,`info`),n.variables!=null&&n.variables.length>0&&C(`Found ${n.variables.length} top-level variable(s)`,`info`);let r={tasks:n.tasks??[]};return n.prompts!=null&&(r.prompts=n.prompts),n.variables!=null&&(r.variables=n.variables),n.enabled!=null&&(r.enabled=n.enabled),n.transformers!=null&&(r.transformers=n.transformers),r}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return se}});
@@ -1 +0,0 @@
1
- const e=require(`./template-inheritance-Ds-FkR_6.cjs`);exports.cleanupTempFile=e.d,exports.debug=e.E,exports.error=e.D,exports.logError=e.D,exports.evaluateCondition=e.T,exports.evaluateEnabled=e.C,exports.evaluateEnabledAsync=e.w,exports.evaluateRequiredAsync=e.S,exports.getNestedProperty=e.m,exports.info=e.O,exports.logInfo=e.O,exports.interpolateTemplate=e.c,exports.isUrl=e.g,exports.log=e.k,exports.logSuccess=e.A,exports.success=e.A,exports.logWarn=e.j,exports.warn=e.j,exports.resolveAndFetchFile=e.f,exports.resolveFilePath=e.p,exports.resolveValue=e.l,exports.setNestedProperty=e.h;