@pixpilot/scaffoldfy 0.40.0 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/configurations-CKshmsrJ.js +1 -0
- package/dist/configurations-Dzwqq0PK.cjs +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +26 -26
- package/dist/index.d.ts +26 -26
- package/dist/index.js +1 -1
- package/dist/initial-config-CbzFPdT_.cjs +1 -0
- package/dist/initial-config-V9mm6hls.js +1 -0
- package/dist/run-configuration-sequentially-BXM4VcVd.js +4 -0
- package/dist/run-configuration-sequentially-aFTL6LLG.cjs +4 -0
- package/dist/scaffoldfy-config-validator/cli.cjs +3 -0
- package/dist/scaffoldfy-config-validator/cli.js +3 -0
- package/dist/scaffoldfy-config-validator/index.cjs +1 -0
- package/dist/scaffoldfy-config-validator/index.d.cts +3 -0
- package/dist/scaffoldfy-config-validator/index.d.ts +3 -0
- package/dist/scaffoldfy-config-validator/index.js +1 -0
- package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.cjs +1 -0
- package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.d.cts +2 -0
- package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.d.ts +2 -0
- package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.js +1 -0
- package/dist/src-B1q4_DaV.cjs +1 -0
- package/dist/src-DEgwCQk3.js +1 -0
- package/dist/tasks-B4iFJaO9.js +23 -0
- package/dist/tasks-CLC3xylo.cjs +23 -0
- package/dist/utils-BWYwAqXM.js +1 -0
- package/dist/utils-CkNjiSuw.cjs +1 -0
- package/dist/validate-scaffoldfy-json-BDtysLEj.d.cts +38 -0
- package/dist/validate-scaffoldfy-json-Bic4iKqc.cjs +1 -0
- package/dist/validate-scaffoldfy-json-CgAoowJb.d.ts +38 -0
- package/dist/validate-scaffoldfy-json-CwWx82nG.js +1 -0
- package/package.json +7 -7
- package/dist/chunk-DjWAcSYV.cjs +0 -1
- package/dist/config-DFR0mwj6.js +0 -1
- package/dist/config-DZmWkoaW.cjs +0 -1
- package/dist/configurations-Bjun5iKX.js +0 -1
- package/dist/configurations-KSynsxPT.cjs +0 -1
- package/dist/run-tasks-Bd7MRNHo.js +0 -26
- package/dist/run-tasks-CYqXNGt_.cjs +0 -1
- package/dist/run-tasks-CwrcjBpP.cjs +0 -26
- package/dist/run-tasks-D2K5zjO-.js +0 -1
- package/dist/scaffoldfy-config-json-validator/cli.cjs +0 -3
- package/dist/scaffoldfy-config-json-validator/cli.js +0 -3
- package/dist/scaffoldfy-config-json-validator/index.cjs +0 -1
- package/dist/scaffoldfy-config-json-validator/index.d.cts +0 -3
- package/dist/scaffoldfy-config-json-validator/index.d.ts +0 -3
- package/dist/scaffoldfy-config-json-validator/index.js +0 -1
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.cjs +0 -1
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.cts +0 -2
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.ts +0 -2
- package/dist/scaffoldfy-config-json-validator/validate-scaffoldfy-json.js +0 -1
- package/dist/src-BB92j9Us.cjs +0 -1
- package/dist/src-D8T_2x3i.js +0 -1
- package/dist/utils-C-yGs5_V.cjs +0 -1
- package/dist/utils-DXSrTxhI.js +0 -1
- package/dist/validate-scaffoldfy-json-Cfq-nQjy.js +0 -1
- package/dist/validate-scaffoldfy-json-Dkaz9ueq.cjs +0 -1
- package/dist/validate-scaffoldfy-json-bRhG4eG3.d.cts +0 -10
- package/dist/validate-scaffoldfy-json-vYYlnkxk.d.ts +0 -10
- /package/dist/{config-CQ-mWBG5.cjs → initial-config-CESipc-c.cjs} +0 -0
- /package/dist/{config-nfiOxhDM.js → initial-config-Dt0jw4Vs.js} +0 -0
- /package/dist/{scaffoldfy-config-json-validator → scaffoldfy-config-validator}/cli.d.cts +0 -0
- /package/dist/{scaffoldfy-config-json-validator → scaffoldfy-config-validator}/cli.d.ts +0 -0
- /package/dist/{scaffoldfy-config-json-validator-CpEXHRsI.cjs → scaffoldfy-config-validator-BvNnGMO1.cjs} +0 -0
- /package/dist/{scaffoldfy-config-json-validator-DP8-e4Yy.js → scaffoldfy-config-validator-D1iJBnRE.js} +0 -0
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import{D as e,E as t,S as n,T as r,_ as i,a,c as o,d as s,g as c,h as l,o as u,p as d,s as f,v as p,w as ee,x as m,y as h}from"./configurations-Bjun5iKX.js";import{t as te}from"./config-nfiOxhDM.js";import g from"node:path";import _ from"node:fs";import v from"node:process";import{promisify as y}from"node:util";import{execSync as b}from"node:child_process";import{confirm as x,input as ne,number as S,password as re,select as ie}from"@inquirer/prompts";import{camelCase as ae,capitalCase as oe,constantCase as se,kebabCase as C,lowerCase as ce,pascalCase as le,snakeCase as w,upperCase as ue}from"case-anything";var de=class t extends e{constructor(e,t){super(e,`TASK_NOT_FOUND`),this.taskId=t,this.name=`TaskNotFoundError`}static forId(e){return new t(`Task not found: ${e}`,e)}},T=class t extends e{constructor(e,t,n){super(e,`PROMPT_VALIDATION_ERROR`),this.promptId=t,this.reason=n,this.name=`PromptValidationError`}static required(e){return new t(`Prompt "${e}" is required`,e,`required`)}static unknownType(e){return new t(`Unknown prompt type: ${e}`,e,`unknown_type`)}},E=class t extends e{constructor(e,t,n){super(e,`PLUGIN_CONFIGURATION_ERROR`),this.pluginType=t,this.configIssue=n,this.name=`PluginConfigurationError`}static templateMissingTemplateOrFile(){return new t(`Template task requires either "template" (inline) or "templateFile" (file path) to be specified`,`template`,`missing_template_or_file`)}static templateHasBothTemplateAndFile(){return new t(`Template task cannot have both "template" and "templateFile" specified. Use one or the other.`,`template`,`both_template_and_file`)}static createMissingTemplateOrFile(){return new t(`Create task requires either "template" (inline) or "templateFile" (file path) to be specified`,`create`,`missing_template_or_file`)}static createHasBothTemplateAndFile(){return new t(`Create task cannot have both "template" and "templateFile" specified. Use one or the other.`,`create`,`both_template_and_file`)}},D=class t extends e{constructor(e,t,n){super(e,`TRANSFORMER_ERROR`),this.transformerId=t,this.reason=n,this.name=`TransformerError`}static notFound(e){return new t(`Transformer "${e}" not found`,e,`not_found`)}static executionFailed(e,n){return new t(`Transformer "${e}" execution failed: ${n}`,e,`execution_failed`)}static invalidType(e,n){return new t(`Invalid transformer type "${n}" for transformer "${e}"`,e,`invalid_type`)}};const fe=y(_.readFile),O={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function k(e,t){switch(t){case`add`:return`${O.green}+ ${e}${O.reset}`;case`remove`:return`${O.red}- ${e}${O.reset}`;case`context`:return`${O.gray} ${e}${O.reset}`;default:return e}}function A(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(k(t,`context`)):(t!==void 0&&i.push(k(t,`remove`)),a!==void 0&&i.push(k(a,`add`)))}return i}function j(e){return _.existsSync(g.join(v.cwd(),e))}async function M(e){return fe(g.join(v.cwd(),e),`utf-8`)}async function pe(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=e.file;if(!j(n))return`${O.red}✗ File not found: ${e.file}${O.reset}`;try{let r=await M(n),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`${O.cyan}→ No changes${O.reset}`;let l=A(s,c);return`${O.blue}File: ${e.file}${O.reset}\n${l.join(`
|
|
4
|
-
`)}`}catch(e){return`${O.red}✗ Error: ${e instanceof Error?e.message:String(e)}${O.reset}`}}async function me(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=e.file;if(!j(n))return`${O.red}✗ File not found: ${e.file}${O.reset}`;try{let r=await M(n),i=new RegExp(e.pattern,e.flags??`g`),a=u(e.replacement,t),o=r.replace(i,a);if(r===o)return`${O.cyan}→ No matches found${O.reset}`;let s=A(r,o);return`${O.blue}File: ${e.file}${O.reset}\n${s.join(`
|
|
5
|
-
`)}`}catch(e){return`${O.red}✗ Error: ${e instanceof Error?e.message:String(e)}${O.reset}`}}async function he(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=e.file;if(!j(n))return`${O.red}✗ File not found: ${e.file}${O.reset}`;try{let r=await M(n),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`${O.cyan}→ No changes${O.reset}`;let a=A(i,r);return`${O.blue}File: ${e.file}${O.reset}\n${a.join(`
|
|
6
|
-
`)}`}catch(e){return`${O.red}✗ Error: ${e instanceof Error?e.message:String(e)}${O.reset}`}}function N(e){return e.template!=null&&e.template!==``}function P(e){return e.templateFile!=null&&e.templateFile!==``}function ge(e){return e.endsWith(`.hbs`)}function F(e){let t=N(e),n=P(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}}function _e(e){return N(e)?`inline template`:P(e)?`template file: ${e.templateFile}`:`no template source`}async function I(e,t,n,r={}){let{enableHandlebars:i=!0,sourceUrl:o=n?.$sourceUrl}=r,c=N(e),l=P(e);if(c)return u(e.template,t);if(l){let n=e.templateFile,r=i&&ge(n),c=await a(s(n,o));return r?(await import(`handlebars`)).default.compile(c)(t):u(c,t)}throw Error(`No template content available`)}async function ve(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;if(e.template==null||e.template===``)return`${O.red}✗ No template content provided for file: ${e.file}${O.reset}`;let n=e.file,r=u(e.template,t);if(!j(n)){let t=r.split(`
|
|
7
|
-
`).slice(0,10).join(`
|
|
8
|
-
`),n=r.split(`
|
|
9
|
-
`).length>10;return`${O.blue}File: ${e.file}${O.reset}\n${O.green}+ New file would be created${O.reset}\n${O.gray}Content preview:${O.reset}\n${t}${n?`
|
|
10
|
-
...`:``}`}try{let t=await M(n);if(t===r)return`${O.cyan}→ No changes${O.reset}`;let i=A(t,r);return`${O.blue}File: ${e.file}${O.reset}\n${i.join(`
|
|
11
|
-
`)}`}catch(e){return`${O.red}✗ Error: ${e instanceof Error?e.message:String(e)}${O.reset}`}}async function ye(e,t,n){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let r=e.file;if(j(r))return`${O.cyan}→ File already exists, would be skipped: ${e.file}${O.reset}`;try{if(N(e)){let r=await I(e,t,n),i=r.split(`
|
|
12
|
-
`).slice(0,10).join(`
|
|
13
|
-
`),a=r.split(`
|
|
14
|
-
`).length>10;return`${O.blue}File: ${e.file}${O.reset}\n${O.green}+ New file would be created${O.reset}\n${O.gray}Content preview:${O.reset}\n${i}${a?`
|
|
15
|
-
...`:``}`}let r=_e(e);return`${O.blue}File: ${e.file}${O.reset}\n${O.green}+ New file would be created from ${r}${O.reset}`}catch(e){return`${O.red}✗ Error: ${e instanceof Error?e.message:String(e)}${O.reset}`}}async function be(e,t,n){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let r=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 I(i,t,n),o=a.split(`
|
|
16
|
-
`).slice(0,10).join(`
|
|
17
|
-
`),s=a.split(`
|
|
18
|
-
`).length>10;return j(r)?`${O.blue}File: ${e.file}${O.reset}\n${O.green}+ Would append content${O.reset}\n${O.gray}Content preview:${O.reset}\n${o}${s?`
|
|
19
|
-
...`:``}`:`${O.blue}File: ${e.file}${O.reset}\n${O.green}+ New file would be created with content${O.reset}\n${O.gray}Content preview:${O.reset}\n${o}${s?`
|
|
20
|
-
...`:``}`}catch(e){return`${O.red}✗ Error: ${e instanceof Error?e.message:String(e)}${O.reset}`}}function L(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=e.paths.map(e=>u(e,t)).filter(e=>j(e));return n.length===0?`${O.cyan}→ No files/directories to delete${O.reset}`:`${O.red}Would delete:${O.reset}\n${n.map(e=>`${O.red} - ${e}${O.reset}`).join(`
|
|
21
|
-
`)}`}function R(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=u(e.from,t),r=u(e.to,t);return j(n)?j(r)?`${O.yellow}⚠ Destination already exists: ${r}${O.reset}\n${O.cyan}Would rename: ${n} → ${r}${O.reset}`:`${O.cyan}Would rename: ${n} → ${r}${O.reset}`:`${O.red}✗ Source not found: ${n}${O.reset}`}function xe(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=u(e.from,t),r=u(e.to,t);return j(n)?j(r)?`${O.yellow}⚠ Destination already exists: ${r}${O.reset}\n${O.cyan}Would move: ${n} → ${r}${O.reset}`:`${O.cyan}Would move: ${n} → ${r}${O.reset}`:`${O.red}✗ Source not found: ${n}${O.reset}`}function Se(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=u(e.from,t),r=u(e.to,t);if(!j(n))return`${O.red}✗ Source not found: ${n}${O.reset}`;let i=`file`;return j(r)?`${O.yellow}⚠ Destination already exists: ${r}${O.reset}\n${O.cyan}Would copy ${i}: ${n} → ${r}${O.reset}`:`${O.cyan}Would copy ${i}: ${n} → ${r}${O.reset}`}function Ce(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=u(e.path,t);return j(n)?`${O.cyan}→ Directory already exists: ${n}${O.reset}`:`${O.green}+ Would create directory: ${n}${O.reset}`}function z(e){if(e.condition!=null&&e.condition!==``)return`${O.yellow}⊘ Condition check skipped in dry-run${O.reset}`;let t=j(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${O.red}Would remove existing .git directory${O.reset}`),n.push(`${O.green}Would initialize git repository${O.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${O.green}Would create initial commit: "${t}"${O.reset}`)}return n.join(`
|
|
22
|
-
`)}function B(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t))return`${O.yellow}⊘ Condition not met - task would be skipped${O.reset}`;let n=u(e.command,t),r=e.cwd==null?v.cwd():u(e.cwd,t);return`${O.yellow}Would execute:${O.reset}\n${O.cyan} Command: ${n}${O.reset}\n${O.cyan} Working directory: ${r}${O.reset}`}async function V(e,t){try{switch(e.type){case`update-json`:return await pe(e.config,t);case`write`:return await ve(e.config,t);case`create`:return await ye(e.config,t,e);case`regex-replace`:return await me(e.config,t);case`replace-in-file`:return await he(e.config,t);case`delete`:return L(e.config,t);case`rename`:return R(e.config,t);case`move`:return xe(e.config,t);case`copy`:return Se(e.config,t);case`append`:return await be(e.config,t,e);case`mkdir`:return Ce(e.config,t);case`git-init`:return z(e.config);case`exec`:return B(e.config,t);case`exec-file`:return B(e.config,t);default:{let t=e.type;return`${O.yellow}⚠ Diff not available for task type: ${t}${O.reset}`}}}catch(e){return`${O.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${O.reset}`}}async function H(e,t){console.log(`${O.blue}═══════════════════════════════════════════════════════${O.reset}`),console.log(`${O.blue} DRY RUN - Preview of changes${O.reset}`),console.log(`${O.blue}═══════════════════════════════════════════════════════${O.reset}`);for(let n of e){console.log(`${O.cyan}▶ Task: ${n.name}${O.reset}`),n.description!=null&&n.description!==``&&console.log(`${O.gray} ${n.description}${O.reset}`);let e=await V(n,t);console.log(e),console.log(`${O.gray}${`─`.repeat(55)}${O.reset}`)}console.log(`${O.blue}═══════════════════════════════════════════════════════${O.reset}`),console.log(`${O.yellow} No changes were applied (dry-run mode)${O.reset}`),console.log(`${O.blue}═══════════════════════════════════════════════════════${O.reset}`)}const U=new Map,W={},G=new Map;function we(e){e.beforeAll!=null&&(W.beforeAll=e.beforeAll),e.afterAll!=null&&(W.afterAll=e.afterAll),e.beforeTask!=null&&(W.beforeTask=e.beforeTask),e.afterTask!=null&&(W.afterTask=e.afterTask),e.onError!=null&&(W.onError=e.onError)}async function K(e,...t){let r=W[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(`Error in ${e} hook: ${t instanceof Error?t.message:String(t)}`,`error`)}}function q(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(U.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(G.has(t)){let e=G.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}U.set(e.name,e);for(let t of e.taskTypes)G.set(t,e.name);h(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function Te(e){let t=U.get(e);if(t!=null){for(let e of t.taskTypes)G.delete(e);U.delete(e)}}function Ee(e){return U.get(e)}function De(){return Array.from(U.keys())}function Oe(){U.clear(),G.clear()}function ke(e){let t=G.get(e);if(t!=null)return U.get(t)}function J(e){return G.has(e)}async function Ae(e,t,n){let r=ke(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function je(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 Y=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)&&n(`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 ce(String(e))}executeUppercase(e){return ue(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 le(String(e))}executeSnakecase(e){return w(String(e))}executeKebabcase(e){return C(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 C(String(e))}executeUnderscore(e){return w(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};async function Me(e,t,n,r){if(e!==void 0)return f(e,{id:t,contextType:`Prompt`,...n!=null&&{context:n},...r?.$sourceUrl!=null&&{sourceUrl:r.$sourceUrl}})}async function Ne(e,t=new Map,r={}){let a={};if(e.length===0)return a;for(let o of e){if(o.$configEnabled!=null&&!await i(o.$configEnabled,{...r,...a}))continue;let e={...r,...a};if(await i(o.enabled,e))try{let r,i=t.get(o.id);switch(o.default!==void 0&&(i=await Me(o.default,o.id,e,o)),o.type){case`input`:{let t={message:o.message};i!==void 0&&(t.default=String(i));let a=await l(o.required,e);if(a!==void 0&&(t.required=a),r=await ne(t),a&&(r==null||typeof r==`string`&&r.trim()===``))throw n(`${o.message} is required`,`error`),T.required(o.id);break}case`password`:if(r=await re({message:o.message,mask:`*`}),await l(o.required,e)&&(r==null||typeof r==`string`&&r.trim()===``))throw n(`${o.message} is required`,`error`),T.required(o.id);break;case`number`:{let t={message:o.message};i!==void 0&&(t.default=Number(i));let a=await l(o.required,e);if(a!==void 0&&(t.required=a),o.min!==void 0&&(t.min=o.min),o.max!==void 0&&(t.max=o.max),r=await S(t),a&&r==null)throw n(`${o.message} is required`,`error`),T.required(o.id);break}case`select`:{let e={message:o.message,choices:o.choices.map(e=>({name:e.name,value:e.value}))};i!==void 0&&(e.default=i),r=await ie(e);break}case`confirm`:{let e=i===void 0?!1:!!i;r=await x({message:o.message,default:e});break}default:throw n(`Unknown prompt type: ${o.type}`,`error`),T.unknownType(o.type)}o.transformers!==void 0&&(r=await Y.apply(o.transformers,r,{...e,...a})),a[o.id]=r}catch(e){throw e instanceof Error&&n(`Failed to collect prompt "${o.id}": ${e.message}`,`error`),e}}return a}async function Pe(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await Me(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function Fe(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 X=y(_.appendFile),Ie=y(_.readFile),Le=y(_.stat);async function Re(e,t,r){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping append task`,`info`);return}let i=g.join(v.cwd(),e.file),a={};e.content==null?e.template!=null&&(a.template=e.template):a.template=e.content,e.templateFile!=null&&(a.templateFile=e.templateFile);let o=F(a);if(!o.isValid)throw o.error?.includes(`cannot have both`)?E.templateHasBothTemplateAndFile():E.templateMissingTemplateOrFile();let s=await I(a,t,r),c=!1,l=!1;try{await Le(i),c=!0;let t=await Ie(i,`utf-8`);t.length>0&&!t.endsWith(`
|
|
23
|
-
`)&&(l=e.newline!==!1)}catch{}c&&l?await X(i,`\n${s}`):await X(i,s),n(`Appended content to ${e.file}`,`success`)}const ze={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await Re(e.config,t,e)}},Be=y(_.copyFile),Ve=y(_.stat),He=y(_.mkdir),Ue=y(_.readdir);async function We(e,t){await He(t,{recursive:!0});let n=await Ue(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=g.join(e,n.name),i=g.join(t,n.name);n.isDirectory()?await We(r,i):await Be(r,i)}))}async function Ge(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping copy task`,`info`);return}let r=g.join(v.cwd(),e.from),i=g.join(v.cwd(),e.to),a;try{a=await Ve(r)}catch{n(`Source path does not exist: ${r}`,`warn`);return}await He(g.dirname(i),{recursive:!0}),a.isDirectory()?(await We(r,i),n(`Copied directory ${e.from} to ${e.to}`,`success`)):(await Be(r,i),n(`Copied file ${e.from} to ${e.to}`,`success`))}const Ke={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t)}},qe=y(_.writeFile);async function Je(e,t,r){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping create task`,`info`);return}let i=g.join(v.cwd(),e.file);if(_.existsSync(i)){n(`File already exists, skipping: ${e.file}`,`info`);return}let a=F(e);if(!a.isValid)throw a.error?.includes(`cannot have both`)?E.createHasBothTemplateAndFile():E.createMissingTemplateOrFile();let o=await I(e,t,r),s=g.dirname(i);_.existsSync(s)||_.mkdirSync(s,{recursive:!0}),await qe(i,o),n(`Created file: ${e.file}`,`success`)}const Ye={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Je(e.config,t,e)}};async function Xe(e,t){let{paths:r,condition:i}=e;if(i!=null&&i!==``){if(!t){n(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!p(i,t)){n(`Condition not met, skipping deletion`,`info`);return}}for(let e of r){let t=g.join(v.cwd(),e);_.existsSync(t)&&_.rmSync(t,{recursive:!0,force:!0})}}const Ze={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await Xe(e.config,t)}};async function Qe(e,t,n){e.condition!=null&&e.condition!==``&&!p(e.condition,t)||await o({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 $e={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Qe(e.config,t,e)}};async function et(e,t){if(e.condition!=null&&e.condition!==``){if(!t){n(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!p(e.condition,t)){n(`Condition not met, skipping exec task`,`info`);return}}let r=e.cwd==null?v.cwd():g.join(v.cwd(),e.cwd);b(e.command,{cwd:r,stdio:`inherit`})}const tt={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await et(e.config,t)}};async function nt(e,t){if(e.condition!=null&&e.condition!==``){if(!t){n(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!p(e.condition,t)){n(`Condition not met, skipping git-init task`,`info`);return}}if(e.removeExisting){let e=g.join(v.cwd(),`.git`);_.existsSync(e)&&_.rmSync(e,{recursive:!0,force:!0})}if(b(`git init`,{stdio:`inherit`}),e.initialCommit){let t=e.message??`Initial commit`;b(`git add .`,{stdio:`inherit`}),b(`git commit -m "${t}"`,{stdio:`inherit`})}}const rt={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await nt(e.config,t)}},it=y(_.mkdir);async function at(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping mkdir task`,`info`);return}await it(g.join(v.cwd(),e.path),{recursive:!0}),n(`Created directory: ${e.path}`,`success`)}const ot={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await at(e.config,t)}},st=y(_.rename),ct=y(_.stat),lt=y(_.mkdir);async function ut(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping move task`,`info`);return}let r=g.join(v.cwd(),e.from),i=g.join(v.cwd(),e.to);try{await ct(r)}catch{n(`Source path does not exist: ${r}`,`warn`);return}await lt(g.dirname(i),{recursive:!0}),await st(r,i),n(`Moved ${e.from} to ${e.to}`,`success`)}const dt={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await ut(e.config,t)}},ft=y(_.readFile),pt=y(_.writeFile);async function mt(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping regex-replace task`,`info`);return}let r=g.join(v.cwd(),e.file),{pattern:i}=e,a=e.flags??``,o=e.replacement||``,s=await ft(r,`utf-8`),c=new RegExp(i,a);s=s.replace(c,u(o,t)),await pt(r,s)}const ht={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await mt(e.config,t)}},gt=y(_.rename);async function _t(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping rename task`,`info`);return}let r=g.join(v.cwd(),u(e.from,t)),i=g.join(v.cwd(),u(e.to,t));if(!_.existsSync(r)){n(`Source path does not exist: ${r}`,`warn`);return}await gt(r,i)}const vt={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await _t(e.config,t)}},yt=y(_.readFile),bt=y(_.writeFile);async function xt(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping replace-in-file task`,`info`);return}let r=g.join(v.cwd(),e.file),{replacements:i}=e;if(!_.existsSync(r)){n(`File not found: ${r}, skipping`,`warn`);return}let a=await yt(r,`utf-8`);for(let{find:e,replace:n}of i){let r=u(n,t);a=a.replace(new RegExp(e,`gu`),r)}await bt(r,a)}const St={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await xt(e.config,t)}},Ct=y(_.readFile),wt=y(_.writeFile);async function Tt(e,t){if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping update-json task`,`info`);return}let r=g.join(v.cwd(),e.file),{updates:i}=e,a=await Ct(r,`utf-8`),o=JSON.parse(a);function s(e){if(typeof e==`string`)return u(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[e,t]of Object.entries(i)){let n=s(t);e.includes(`.`)?d(o,e,n):o[e]=n}await wt(r,`${JSON.stringify(o,null,2)}\n`)}const Et={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await Tt(e.config,t)}},Dt=y(_.writeFile);async function Ot(e,t,r){let{allowCreate:i=!0}=e;if(e.condition!=null&&e.condition!==``&&!p(e.condition,t)){n(`Condition not met, skipping write task`,`info`);return}let a=g.join(v.cwd(),e.file);if(!_.existsSync(a)){if(i===!1)throw Error(`Write task failed: file does not exist (${e.file})`);n(`File not found, creating new file: ${e.file}`,`info`)}let o=F(e);if(!o.isValid)throw o.error?.includes(`cannot have both`)?E.templateHasBothTemplateAndFile():E.templateMissingTemplateOrFile();let s=await I(e,t,r),c=g.dirname(a);_.existsSync(c)||_.mkdirSync(c,{recursive:!0}),await Dt(a,s)}const kt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await Ot(e.config,t,e)}};function Z(){J(`update-json`)||(q(Et),q(kt),q(Ye),q(ht),q(St),q(Ze),q(vt),q(rt),q(tt),q($e),q(dt),q(Ke),q(ze),q(ot))}async function At(e,t,r=!1){if(Z(),r){n(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(J(e.type)){await Ae(e,t,{dryRun:r});return}throw TypeError(`Unknown task type: ${e.type}`)}async function jt(e,t,r,i,a=!1){try{return n(`[${r}/${i}] Running: ${e.name}...`,`info`),await At(e,t,a),n(`[${r}/${i}] Completed: ${e.name}...`,`success`),!0}catch(t){return n(`Failed: ${e.name}`,`error`),t instanceof Error&&(n(` Reason: ${t.message}`,`error`),t.stack!=null&&v.env.DEBUG!=null&&console.error(t.stack)),!1}}function Mt(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.forTaskDependency(e);i.add(e);let s=a.get(e);if(!s)throw de.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 Nt(e){let t=[];for(let n of e)if(!J(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=Pt(n);t.push(...e)}return t}function Pt(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=F({...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 Ft(e){n(`❌ Template validation failed:`,`error`),n(``,`error`);for(let t of e)n(` • ${t}`,`error`);n(``,`error`),n(`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 Y.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}async function $(e,t,n){let r=new Map;for(let a of e){if(n?.skipConditional===!0&&typeof a.value==`object`&&a.value!==null&&!Array.isArray(a.value)&&a.value.type===`conditional`)continue;if(a.$configEnabled!=null){let e={...t};for(let[t,n]of r.entries())e[t]=n;if(!await i(a.$configEnabled,e))continue}let e={...t};for(let[t,n]of r.entries())e[t]=n;let o=await f(a.value,{id:a.id,contextType:`Variable`,context:e,...a.$sourceUrl!=null&&{sourceUrl:a.$sourceUrl}});o!==void 0&&r.set(a.id,o)}return r}function It(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 Lt(e,t){let a=te();if(!await i(t.configEnabled,a,{lazy:!0})){m(`⊘ Template is disabled - skipping all execution`);return}t.transformers!==void 0&&t.transformers.length>0&&(h(`Registering ${t.transformers.length} transformer(s)...`),Y.registerAll(t.transformers)),h(`Registering built-in plugins...`),Z(),h(`Validating task configurations...`);let o=Nt(e);o.length>0&&(Ft(o),v.exit(1)),h(`All tasks validated successfully`);let s=e.filter(e=>c(e.enabled,te(),{lazy:!0}));h(`Resolving task dependencies...`);let u=Mt(s);h(`Sorted ${u.length} task(s) by dependencies`),m(`Welcome! Let's execute your tasks.`),t.dryRun&&r(`🔍 DRY RUN MODE - No changes will be made`),m(`This will execute your project tasks based on the defined configuration.`);let d=a,f=[...t.variables??[]];if(f.length>0){let e=It(f);e.length>0&&(n(`❌ Variable validation errors:`,`error`),e.forEach(e=>n(` - ${e}`,`error`)),v.exit(1)),h(`Resolving variable values...`);let t=await Q(f,await $(f,d,{skipConditional:!0}),d);Object.assign(d,t),Object.keys(t).length>0&&(h(`Resolved ${Object.keys(t).length} variable(s)`),h(`Variable values: ${JSON.stringify(t)}`))}let p=t.prompts??[],g=[...p];if(g.length>0){let e=Fe(g);e.length>0&&(n(`❌ Prompt validation errors:`,`error`),e.forEach(e=>n(` - ${e}`,`error`)),v.exit(1)),h(`Resolving prompt default values...`);let t=await Pe(g,d);if(p.length>0){m(`📋 Collecting prompts (available to all tasks):`);let e=await Ne(p,t,d);Object.assign(d,e)}}if(f.length>0){let e=f.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(e.length>0){h(`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&&h(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await i(t.configEnabled,d)){m(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let _=[];for(let e of u)e.$configEnabled!=null&&!await i(e.$configEnabled,d)||await i(e.enabled,d)&&_.push(e);if(n(`${_.length} of ${u.length} task(s) enabled for execution`,`info`),t.dryRun){await H(_,d),m(`🔍 Dry run completed - no changes were made`),m(`Run without --dry-run to apply changes`);return}h(`Calling beforeAll hook...`),await K(`beforeAll`,d);let y=_.length,b=0,x=0,ne=[],S=[];for(let e=0;e<_.length;e++){let n=_[e];n!=null&&(h(`Calling beforeTask hook for task: ${n.name}`),await K(`beforeTask`,n,d),await jt(n,d,e+1,y,t.dryRun)?(b++,ne.push(n.id),h(`Calling afterTask hook for task: ${n.name}`),await K(`afterTask`,n,d)):(await l(n.required,d)&&(x++,S.push(n.name)),h(`Calling onError hook for task: ${n.name}`),await K(`onError`,Error(`Task ${n.name} failed`),n),r(`⚠️ Task "${n.name}" failed, continuing with remaining tasks...`)))}x>0&&(n(`\n❌ Task execution completed with ${x} error(s)`,`error`),n(`Completed: ${b}/${y} tasks`,`info`),n(`Failed tasks: ${S.join(`, `)}`,`error`),v.exit(1)),h(`Calling afterAll hook...`),await K(`afterAll`,d),ee(`✅ All tasks completed successfully!`),ee(` Completed: ${b}/${y} tasks`)}async function Rt(e,t,a={}){h(`Running templates with sequential variable/prompt resolution...`),h(`Total templates to process: ${e.length}`),h(`Registering built-in plugins...`),Z();let o=[];console.log(``),m(`📋 Collecting input...`),console.log(``);for(let t=0;t<e.length;t++){let r=e[t];if(r==null)continue;let s=`=`.repeat(60);if(h(`\n${s}`),h(`Processing template ${t+1}/${e.length}: "${r.name}"`),h(s),h(`Current config keys: ${Object.keys(a).join(`, `)}`),!await i(r.enabled,a)){m(`⊘ Template "${r.name}" is disabled - skipping`),h(` Enabled condition: ${JSON.stringify(r.enabled)}`);continue}let c=r.variables??[];if(c.length>0){h(`Processing ${c.length} variable(s) for template "${r.name}"...`);let e=It(c);e.length>0&&(n(`❌ Variable validation errors:`,`error`),e.forEach(e=>n(` - ${e}`,`error`)),v.exit(1));let t=await Q(c,await $(c,a,{skipConditional:!0}),a);Object.assign(a,t);let i=c.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1),o=0;if(i.length>0){let e=await Q(i,await $(i,a),a);if(o=Object.keys(e).length,Object.assign(a,e),o>0){h(`Resolved ${o} conditional variable(s)`);for(let[t,n]of Object.entries(e))h(` ${t} = ${JSON.stringify(n)}`)}}let s=Object.keys(t).length+o;if(s>0){h(`Total variables resolved for template: ${s}`);for(let[e,n]of Object.entries(t))h(` ${e} = ${JSON.stringify(n)}`)}}let l=r.prompts??[];if(l.length>0){h(`Processing ${l.length} prompt(s) for template "${r.name}"...`);let e=Fe(l);e.length>0&&(n(`❌ Prompt validation errors:`,`error`),e.forEach(e=>n(` - ${e}`,`error`)),v.exit(1));let t=await Ne(l,await Pe(l,a),a);Object.assign(a,t),h(`Collected ${Object.keys(t).length} prompt answer(s)`)}if(!await i(r.enabled,a)){m(`⊘ Template "${r.name}" became disabled after variable/prompt resolution - skipping tasks`);continue}let u=r.tasks??[];u.length>0&&(h(`Found ${u.length} task(s) in template "${r.name}" (will execute later)`),o.push(...u))}if(h(`
|
|
24
|
-
🔧 Validating and filtering all collected tasks...`),o.length===0){n(`No tasks found in any template`,`info`);return}let s=Nt(o);s.length>0&&(Ft(s),v.exit(1)),console.log(``),n(`🛠️ Preparing tasks...`,`info`);let c=[];for(let e of o)await i(e.enabled,a)&&c.push(e);if(console.log(``),n(`Found ${o.length} tasks (${c.length} enabled)`,`info`),n(`All tasks validated successfully`,`success`),c.length===0){n(`No enabled tasks to execute`,`info`);return}let u=Mt(c);if(t.dryRun){n(`
|
|
25
|
-
🔍 Dry run - showing task changes...`,`info`),await H(u,a),n(`
|
|
26
|
-
🔍 Dry run completed - no changes were made`,`info`),n(`Run without --dry-run to apply changes`,`info`);return}console.log(``),m(`⚙️ Executing tasks...`),console.log(``),await K(`beforeAll`,a);let d=0,f=0,p=[];for(let e=0;e<u.length;e++){let n=u[e];n!=null&&(await K(`beforeTask`,n,a),await jt(n,a,e+1,u.length,t.dryRun)?(d++,await K(`afterTask`,n,a)):(await l(n.required,a)&&(f++,p.push(n.name)),await K(`onError`,Error(`Task ${n.name} failed`),n),r(`⚠️ Task "${n.name}" failed, continuing with remaining tasks...`)))}await K(`afterAll`,a),f>0&&(n(`\n❌ Task execution completed with ${f} error(s)`,`error`),n(`Completed: ${d}/${u.length} tasks`,`info`),n(`Failed tasks: ${p.join(`, `)}`,`error`),v.exit(1)),n(`Completed: ${d}/${u.length} tasks`,`success`)}export{L as _,ke as a,he as b,Ee as c,Te as d,we as f,z as g,B as h,Ae as i,De as l,V as m,Rt as n,J as o,H as p,je as r,Oe as s,Lt as t,q as u,R as v,pe as x,me as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require(`./configurations-KSynsxPT.cjs`);const e=require(`./run-tasks-CwrcjBpP.cjs`);require(`./config-CQ-mWBG5.cjs`),exports.runTasks=e.t,exports.runTemplatesSequentially=e.n;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./configurations-KSynsxPT.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.D{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.D{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.D{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.D{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`)}};const m=(0,o.promisify)(r.default.readFile),h=2,g=10,ee=55,_={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function v(e,t){switch(t){case`add`:return`${_.green}+ ${e}${_.reset}`;case`remove`:return`${_.red}- ${e}${_.reset}`;case`context`:return`${_.gray} ${e}${_.reset}`;default:return e}}function y(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(v(t,`context`)):(t!==void 0&&i.push(v(t,`remove`)),a!==void 0&&i.push(v(a,`add`)))}return i}function b(e){return r.default.existsSync(i.default.join(a.default.cwd(),e))}async function x(e){return m(i.default.join(a.default.cwd(),e),`utf-8`)}async function S(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=e.file;if(!b(r))return`${_.red}✗ File not found: ${e.file}${_.reset}`;try{let i=await x(r),a=JSON.parse(i),o={...a};function s(e){if(typeof e==`string`)return t.o(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.p(a,n,e):a[n]=e}let c=JSON.stringify(o,null,2),l=JSON.stringify(a,null,2);if(c===l)return`${_.cyan}→ No changes${_.reset}`;let u=y(c,l);return`${_.blue}File: ${e.file}${_.reset}\n${u.join(`
|
|
4
|
-
`)}`}catch(e){return`${_.red}✗ Error: ${e instanceof Error?e.message:String(e)}${_.reset}`}}async function C(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=e.file;if(!b(r))return`${_.red}✗ File not found: ${e.file}${_.reset}`;try{let i=await x(r),a=new RegExp(e.pattern,e.flags??`g`),o=t.o(e.replacement,n),s=i.replace(a,o);if(i===s)return`${_.cyan}→ No matches found${_.reset}`;let c=y(i,s);return`${_.blue}File: ${e.file}${_.reset}\n${c.join(`
|
|
5
|
-
`)}`}catch(e){return`${_.red}✗ Error: ${e instanceof Error?e.message:String(e)}${_.reset}`}}async function w(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=e.file;if(!b(r))return`${_.red}✗ File not found: ${e.file}${_.reset}`;try{let i=await x(r),a=i;for(let{find:r,replace:a}of e.replacements){let e=t.o(r,n),o=t.o(a,n);i=i.replace(e,o)}if(a===i)return`${_.cyan}→ No changes${_.reset}`;let o=y(a,i);return`${_.blue}File: ${e.file}${_.reset}\n${o.join(`
|
|
6
|
-
`)}`}catch(e){return`${_.red}✗ Error: ${e instanceof Error?e.message:String(e)}${_.reset}`}}function T(e){return e.template!=null&&e.template!==``}function E(e){return e.templateFile!=null&&e.templateFile!==``}function te(e){return e.endsWith(`.hbs`)}function D(e){let t=T(e),n=E(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}}function ne(e){return T(e)?`inline template`:E(e)?`template file: ${e.templateFile}`:`no template source`}async function O(e,n,r,i={}){let{enableHandlebars:a=!0,sourceUrl:o=r?.$sourceUrl}=i,s=T(e),c=E(e);if(s)return t.o(e.template,n);if(c){let r=e.templateFile,i=a&&te(r),s=await t.a(t.d(r,o));return i?(await import(`handlebars`)).default.compile(s)(n):t.o(s,n)}throw Error(`No template content available`)}async function re(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;if(e.template==null||e.template===``)return`${_.red}✗ No template content provided for file: ${e.file}${_.reset}`;let r=e.file,i=t.o(e.template,n);if(!b(r)){let t=i.split(`
|
|
7
|
-
`).slice(0,10).join(`
|
|
8
|
-
`),n=i.split(`
|
|
9
|
-
`).length>10;return`${_.blue}File: ${e.file}${_.reset}\n${_.green}+ New file would be created${_.reset}\n${_.gray}Content preview:${_.reset}\n${t}${n?`
|
|
10
|
-
...`:``}`}try{let t=await x(r);if(t===i)return`${_.cyan}→ No changes${_.reset}`;let n=y(t,i);return`${_.blue}File: ${e.file}${_.reset}\n${n.join(`
|
|
11
|
-
`)}`}catch(e){return`${_.red}✗ Error: ${e instanceof Error?e.message:String(e)}${_.reset}`}}async function ie(e,n,r){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let i=e.file;if(b(i))return`${_.cyan}→ File already exists, would be skipped: ${e.file}${_.reset}`;try{if(T(e)){let t=await O(e,n,r),i=t.split(`
|
|
12
|
-
`).slice(0,10).join(`
|
|
13
|
-
`),a=t.split(`
|
|
14
|
-
`).length>10;return`${_.blue}File: ${e.file}${_.reset}\n${_.green}+ New file would be created${_.reset}\n${_.gray}Content preview:${_.reset}\n${i}${a?`
|
|
15
|
-
...`:``}`}let t=ne(e);return`${_.blue}File: ${e.file}${_.reset}\n${_.green}+ New file would be created from ${t}${_.reset}`}catch(e){return`${_.red}✗ Error: ${e instanceof Error?e.message:String(e)}${_.reset}`}}async function ae(e,n,r){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let i=e.file,a={};e.content==null?e.template!=null&&(a.template=e.template):a.template=e.content,e.templateFile!=null&&(a.templateFile=e.templateFile);try{let t=await O(a,n,r),o=t.split(`
|
|
16
|
-
`).slice(0,10).join(`
|
|
17
|
-
`),s=t.split(`
|
|
18
|
-
`).length>10;return b(i)?`${_.blue}File: ${e.file}${_.reset}\n${_.green}+ Would append content${_.reset}\n${_.gray}Content preview:${_.reset}\n${o}${s?`
|
|
19
|
-
...`:``}`:`${_.blue}File: ${e.file}${_.reset}\n${_.green}+ New file would be created with content${_.reset}\n${_.gray}Content preview:${_.reset}\n${o}${s?`
|
|
20
|
-
...`:``}`}catch(e){return`${_.red}✗ Error: ${e instanceof Error?e.message:String(e)}${_.reset}`}}function k(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=e.paths.map(e=>t.o(e,n)).filter(e=>b(e));return r.length===0?`${_.cyan}→ No files/directories to delete${_.reset}`:`${_.red}Would delete:${_.reset}\n${r.map(e=>`${_.red} - ${e}${_.reset}`).join(`
|
|
21
|
-
`)}`}function oe(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=t.o(e.from,n),i=t.o(e.to,n);return b(r)?b(i)?`${_.yellow}⚠ Destination already exists: ${i}${_.reset}\n${_.cyan}Would rename: ${r} → ${i}${_.reset}`:`${_.cyan}Would rename: ${r} → ${i}${_.reset}`:`${_.red}✗ Source not found: ${r}${_.reset}`}function se(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=t.o(e.from,n),i=t.o(e.to,n);return b(r)?b(i)?`${_.yellow}⚠ Destination already exists: ${i}${_.reset}\n${_.cyan}Would move: ${r} → ${i}${_.reset}`:`${_.cyan}Would move: ${r} → ${i}${_.reset}`:`${_.red}✗ Source not found: ${r}${_.reset}`}function ce(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=t.o(e.from,n),i=t.o(e.to,n);if(!b(r))return`${_.red}✗ Source not found: ${r}${_.reset}`;let a=`file`;return b(i)?`${_.yellow}⚠ Destination already exists: ${i}${_.reset}\n${_.cyan}Would copy ${a}: ${r} → ${i}${_.reset}`:`${_.cyan}Would copy ${a}: ${r} → ${i}${_.reset}`}function le(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=t.o(e.path,n);return b(r)?`${_.cyan}→ Directory already exists: ${r}${_.reset}`:`${_.green}+ Would create directory: ${r}${_.reset}`}function A(e){if(e.condition!=null&&e.condition!==``)return`${_.yellow}⊘ Condition check skipped in dry-run${_.reset}`;let t=b(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${_.red}Would remove existing .git directory${_.reset}`),n.push(`${_.green}Would initialize git repository${_.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${_.green}Would create initial commit: "${t}"${_.reset}`)}return n.join(`
|
|
22
|
-
`)}function j(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n))return`${_.yellow}⊘ Condition not met - task would be skipped${_.reset}`;let r=t.o(e.command,n),i=e.cwd==null?a.default.cwd():t.o(e.cwd,n);return`${_.yellow}Would execute:${_.reset}\n${_.cyan} Command: ${r}${_.reset}\n${_.cyan} Working directory: ${i}${_.reset}`}async function M(e,t){try{switch(e.type){case`update-json`:return await S(e.config,t);case`write`:return await re(e.config,t);case`create`:return await ie(e.config,t,e);case`regex-replace`:return await C(e.config,t);case`replace-in-file`:return await w(e.config,t);case`delete`:return k(e.config,t);case`rename`:return oe(e.config,t);case`move`:return se(e.config,t);case`copy`:return ce(e.config,t);case`append`:return await ae(e.config,t,e);case`mkdir`:return le(e.config,t);case`git-init`:return A(e.config);case`exec`:return j(e.config,t);case`exec-file`:return j(e.config,t);default:{let t=e.type;return`${_.yellow}⚠ Diff not available for task type: ${t}${_.reset}`}}}catch(e){return`${_.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${_.reset}`}}async function N(e,t){console.log(`${_.blue}═══════════════════════════════════════════════════════${_.reset}`),console.log(`${_.blue} DRY RUN - Preview of changes${_.reset}`),console.log(`${_.blue}═══════════════════════════════════════════════════════${_.reset}`);for(let n of e){console.log(`${_.cyan}▶ Task: ${n.name}${_.reset}`),n.description!=null&&n.description!==``&&console.log(`${_.gray} ${n.description}${_.reset}`);let e=await M(n,t);console.log(e),console.log(`${_.gray}${`─`.repeat(55)}${_.reset}`)}console.log(`${_.blue}═══════════════════════════════════════════════════════${_.reset}`),console.log(`${_.yellow} No changes were applied (dry-run mode)${_.reset}`),console.log(`${_.blue}═══════════════════════════════════════════════════════${_.reset}`)}const P=new Map,F={},I=new Map;function ue(e){e.beforeAll!=null&&(F.beforeAll=e.beforeAll),e.afterAll!=null&&(F.afterAll=e.afterAll),e.beforeTask!=null&&(F.beforeTask=e.beforeTask),e.afterTask!=null&&(F.afterTask=e.afterTask),e.onError!=null&&(F.onError=e.onError)}async function L(e,...n){let r=F[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.S(`Error in ${e} hook: ${n instanceof Error?n.message:String(n)}`,`error`)}}function R(e){if(e.name==null||e.name===``)throw TypeError(`Plugin name is required`);if(!Array.isArray(e.taskTypes)||e.taskTypes.length===0)throw TypeError(`Plugin ${e.name} must define at least one task type`);if(typeof e.execute!=`function`)throw TypeError(`Plugin ${e.name} must provide an execute function`);if(P.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(I.has(t)){let e=I.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}P.set(e.name,e);for(let t of e.taskTypes)I.set(t,e.name);t.y(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function de(e){let t=P.get(e);if(t!=null){for(let e of t.taskTypes)I.delete(e);P.delete(e)}}function fe(e){return P.get(e)}function pe(){return Array.from(P.keys())}function me(){P.clear(),I.clear()}function z(e){let t=I.get(e);if(t!=null)return P.get(t)}function B(e){return I.has(e)}async function V(e,t,n){let r=z(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function he(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 ge=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.S(`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 H=new ge;async function U(e,n,r,i){if(e!==void 0)return t.s(e,{id:n,contextType:`Prompt`,...r!=null&&{context:r},...i?.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}})}async function W(e,n=new Map,r={}){let i={};if(e.length===0)return i;for(let a of e){if(a.$configEnabled!=null&&!await t._(a.$configEnabled,{...r,...i}))continue;let e={...r,...i};if(await t._(a.enabled,e))try{let r,o=n.get(a.id);switch(a.default!==void 0&&(o=await U(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.h(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.S(`${a.message} is required`,`error`),d.required(a.id);break}case`password`:if(r=await(0,c.password)({message:a.message,mask:`*`}),await t.h(a.required,e)&&(r==null||typeof r==`string`&&r.trim()===``))throw t.S(`${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.h(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.S(`${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.S(`Unknown prompt type: ${a.type}`,`error`),d.unknownType(a.type)}a.transformers!==void 0&&(r=await H.apply(a.transformers,r,{...e,...i})),i[a.id]=r}catch(e){throw e instanceof Error&&t.S(`Failed to collect prompt "${a.id}": ${e.message}`,`error`),e}}return i}async function G(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await U(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function K(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`){r.choices.length===0&&t.push(`Select prompt "${r.id}" must have at least one choice`);for(let e of r.choices)(!e.name||e.name.trim()===``)&&t.push(`Select prompt "${r.id}" has a choice with empty name`),e.value===void 0&&t.push(`Select prompt "${r.id}" has a choice with undefined value`)}r.type===`number`&&r.min!==void 0&&r.max!==void 0&&r.min>r.max&&t.push(`Number prompt "${r.id}" has min greater than max`)}return t}const q=(0,o.promisify)(r.default.appendFile),_e=(0,o.promisify)(r.default.readFile),ve=(0,o.promisify)(r.default.stat);async function ye(e,n,r){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`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=D(s);if(!c.isValid)throw c.error?.includes(`cannot have both`)?f.templateHasBothTemplateAndFile():f.templateMissingTemplateOrFile();let l=await O(s,n,r),u=!1,d=!1;try{await ve(o),u=!0;let t=await _e(o,`utf-8`);t.length>0&&!t.endsWith(`
|
|
23
|
-
`)&&(d=e.newline!==!1)}catch{}u&&d?await q(o,`\n${l}`):await q(o,l),t.S(`Appended content to ${e.file}`,`success`)}const be={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await ye(e.config,t,e)}},J=(0,o.promisify)(r.default.copyFile),xe=(0,o.promisify)(r.default.stat),Y=(0,o.promisify)(r.default.mkdir),Se=(0,o.promisify)(r.default.readdir);async function X(e,t){await Y(t,{recursive:!0});let n=await Se(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 X(r,a):await J(r,a)}))}async function Ce(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`Condition not met, skipping copy task`,`info`);return}let r=i.default.join(a.default.cwd(),e.from),o=i.default.join(a.default.cwd(),e.to),s;try{s=await xe(r)}catch{t.S(`Source path does not exist: ${r}`,`warn`);return}await Y(i.default.dirname(o),{recursive:!0}),s.isDirectory()?(await X(r,o),t.S(`Copied directory ${e.from} to ${e.to}`,`success`)):(await J(r,o),t.S(`Copied file ${e.from} to ${e.to}`,`success`))}const we={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Ce(e.config,t)}},Te=(0,o.promisify)(r.default.writeFile);async function Ee(e,n,o){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`Condition not met, skipping create task`,`info`);return}let s=i.default.join(a.default.cwd(),e.file);if(r.default.existsSync(s)){t.S(`File already exists, skipping: ${e.file}`,`info`);return}let c=D(e);if(!c.isValid)throw c.error?.includes(`cannot have both`)?f.createHasBothTemplateAndFile():f.createMissingTemplateOrFile();let l=await O(e,n,o),u=i.default.dirname(s);r.default.existsSync(u)||r.default.mkdirSync(u,{recursive:!0}),await Te(s,l),t.S(`Created file: ${e.file}`,`success`)}const De={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Ee(e.config,t,e)}};async function Oe(e,n){let{paths:o,condition:s}=e;if(s!=null&&s!==``){if(!n){t.S(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!t.v(s,n)){t.S(`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 ke={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await Oe(e.config,t)}};async function Ae(e,n,r){e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)||await t.c({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 je={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ae(e.config,t,e)}};async function Me(e,n){if(e.condition!=null&&e.condition!==``){if(!n){t.S(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!t.v(e.condition,n)){t.S(`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 Ne={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Me(e.config,t)}};async function Pe(e,n){if(e.condition!=null&&e.condition!==``){if(!n){t.S(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!t.v(e.condition,n)){t.S(`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 Fe={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Pe(e.config,t)}},Ie=(0,o.promisify)(r.default.mkdir);async function Le(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`Condition not met, skipping mkdir task`,`info`);return}await Ie(i.default.join(a.default.cwd(),e.path),{recursive:!0}),t.S(`Created directory: ${e.path}`,`success`)}const Re={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Le(e.config,t)}},ze=(0,o.promisify)(r.default.rename),Be=(0,o.promisify)(r.default.stat),Ve=(0,o.promisify)(r.default.mkdir);async function He(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`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 Be(r)}catch{t.S(`Source path does not exist: ${r}`,`warn`);return}await Ve(i.default.dirname(o),{recursive:!0}),await ze(r,o),t.S(`Moved ${e.from} to ${e.to}`,`success`)}const Ue={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await He(e.config,t)}},We=(0,o.promisify)(r.default.readFile),Ge=(0,o.promisify)(r.default.writeFile);async function Ke(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`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 We(r,`utf-8`),u=new RegExp(o,s);l=l.replace(u,t.o(c,n)),await Ge(r,l)}const qe={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await Ke(e.config,t)}},Je=(0,o.promisify)(r.default.rename);async function Ye(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`Condition not met, skipping rename task`,`info`);return}let o=i.default.join(a.default.cwd(),t.o(e.from,n)),s=i.default.join(a.default.cwd(),t.o(e.to,n));if(!r.default.existsSync(o)){t.S(`Source path does not exist: ${o}`,`warn`);return}await Je(o,s)}const Xe={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await Ye(e.config,t)}},Ze=(0,o.promisify)(r.default.readFile),Qe=(0,o.promisify)(r.default.writeFile);async function $e(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`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.S(`File not found: ${o}, skipping`,`warn`);return}let c=await Ze(o,`utf-8`);for(let{find:e,replace:r}of s){let i=t.o(r,n);c=c.replace(new RegExp(e,`gu`),i)}await Qe(o,c)}const et={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t)}},tt=(0,o.promisify)(r.default.readFile),nt=(0,o.promisify)(r.default.writeFile),rt=2;async function it(e,n){if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`Condition not met, skipping update-json task`,`info`);return}let r=i.default.join(a.default.cwd(),e.file),{updates:o}=e,s=await tt(r,`utf-8`),c=JSON.parse(s);function l(e){if(typeof e==`string`)return t.o(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.p(c,e,r):c[e]=r}await nt(r,`${JSON.stringify(c,null,2)}\n`)}const at={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await it(e.config,t)}},ot=(0,o.promisify)(r.default.writeFile);async function st(e,n,o){let{allowCreate:s=!0}=e;if(e.condition!=null&&e.condition!==``&&!t.v(e.condition,n)){t.S(`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.S(`File not found, creating new file: ${e.file}`,`info`)}let l=D(e);if(!l.isValid)throw l.error?.includes(`cannot have both`)?f.templateHasBothTemplateAndFile():f.templateMissingTemplateOrFile();let u=await O(e,n,o),d=i.default.dirname(c);r.default.existsSync(d)||r.default.mkdirSync(d,{recursive:!0}),await ot(c,u)}const ct={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await st(e.config,t,e)}};function Z(){B(`update-json`)||(R(at),R(ct),R(De),R(qe),R(et),R(ke),R(Xe),R(Fe),R(Ne),R(je),R(Ue),R(we),R(be),R(Re))}async function lt(e,n,r=!1){if(Z(),r){t.S(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(B(e.type)){await V(e,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${e.type}`)}async function ut(e,n,r,i,o=!1){try{return t.S(`[${r}/${i}] Running: ${e.name}...`,`info`),await lt(e,n,o),t.S(`[${r}/${i}] Completed: ${e.name}...`,`success`),!0}catch(n){return t.S(`Failed: ${e.name}`,`error`),n instanceof Error&&(t.S(` Reason: ${n.message}`,`error`),n.stack!=null&&a.default.env.DEBUG!=null&&console.error(n.stack)),!1}}function dt(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.E.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 ft(e){let t=[];for(let n of e)if(!B(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=pt(n);t.push(...e)}return t}function pt(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=D({...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 mt(e){t.S(`❌ Template validation failed:`,`error`),t.S(``,`error`);for(let n of e)t.S(` • ${n}`,`error`);t.S(``,`error`),t.S(`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 H.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}async function $(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._(a.$configEnabled,e))continue}let e={...n};for(let[t,n]of i.entries())e[t]=n;let o=await t.s(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 ht(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 gt(e,r){let i=n.t();if(!await t._(r.configEnabled,i,{lazy:!0})){t.x(`⊘ Template is disabled - skipping all execution`);return}r.transformers!==void 0&&r.transformers.length>0&&(t.y(`Registering ${r.transformers.length} transformer(s)...`),H.registerAll(r.transformers)),t.y(`Registering built-in plugins...`),Z(),t.y(`Validating task configurations...`);let o=ft(e);o.length>0&&(mt(o),a.default.exit(1)),t.y(`All tasks validated successfully`);let s=e.filter(e=>t.g(e.enabled,n.t(),{lazy:!0}));t.y(`Resolving task dependencies...`);let c=dt(s);t.y(`Sorted ${c.length} task(s) by dependencies`),t.x(`Welcome! Let's execute your tasks.`),r.dryRun&&t.T(`🔍 DRY RUN MODE - No changes will be made`),t.x(`This will execute your project tasks based on the defined configuration.`);let l=i,u=[...r.variables??[]];if(u.length>0){let e=ht(u);e.length>0&&(t.S(`❌ Variable validation errors:`,`error`),e.forEach(e=>t.S(` - ${e}`,`error`)),a.default.exit(1)),t.y(`Resolving variable values...`);let n=await Q(u,await $(u,l,{skipConditional:!0}),l);Object.assign(l,n),Object.keys(n).length>0&&(t.y(`Resolved ${Object.keys(n).length} variable(s)`),t.y(`Variable values: ${JSON.stringify(n)}`))}let d=r.prompts??[],f=[...d];if(f.length>0){let e=K(f);e.length>0&&(t.S(`❌ Prompt validation errors:`,`error`),e.forEach(e=>t.S(` - ${e}`,`error`)),a.default.exit(1)),t.y(`Resolving prompt default values...`);let n=await G(f,l);if(d.length>0){t.x(`📋 Collecting prompts (available to all tasks):`);let e=await W(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.y(`Re-resolving conditional variables with prompt values...`);let n=await Q(e,await $(e,l),l);Object.assign(l,n),Object.keys(n).length>0&&t.y(`Resolved ${Object.keys(n).length} conditional variable(s)`)}}if(!await t._(r.configEnabled,l)){t.x(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let p=[];for(let e of c)e.$configEnabled!=null&&!await t._(e.$configEnabled,l)||await t._(e.enabled,l)&&p.push(e);if(t.S(`${p.length} of ${c.length} task(s) enabled for execution`,`info`),r.dryRun){await N(p,l),t.x(`🔍 Dry run completed - no changes were made`),t.x(`Run without --dry-run to apply changes`);return}t.y(`Calling beforeAll hook...`),await L(`beforeAll`,l);let m=p.length,h=0,g=0,ee=[],_=[];for(let e=0;e<p.length;e++){let n=p[e];n!=null&&(t.y(`Calling beforeTask hook for task: ${n.name}`),await L(`beforeTask`,n,l),await ut(n,l,e+1,m,r.dryRun)?(h++,ee.push(n.id),t.y(`Calling afterTask hook for task: ${n.name}`),await L(`afterTask`,n,l)):(await t.h(n.required,l)&&(g++,_.push(n.name)),t.y(`Calling onError hook for task: ${n.name}`),await L(`onError`,Error(`Task ${n.name} failed`),n),t.T(`⚠️ Task "${n.name}" failed, continuing with remaining tasks...`)))}g>0&&(t.S(`\n❌ Task execution completed with ${g} error(s)`,`error`),t.S(`Completed: ${h}/${m} tasks`,`info`),t.S(`Failed tasks: ${_.join(`, `)}`,`error`),a.default.exit(1)),t.y(`Calling afterAll hook...`),await L(`afterAll`,l),t.w(`✅ All tasks completed successfully!`),t.w(` Completed: ${h}/${m} tasks`)}async function _t(e,n,r={}){t.y(`Running templates with sequential variable/prompt resolution...`),t.y(`Total templates to process: ${e.length}`),t.y(`Registering built-in plugins...`),Z();let i=[];console.log(``),t.x(`📋 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.y(`\n${s}`),t.y(`Processing template ${n+1}/${e.length}: "${o.name}"`),t.y(s),t.y(`Current config keys: ${Object.keys(r).join(`, `)}`),!await t._(o.enabled,r)){t.x(`⊘ Template "${o.name}" is disabled - skipping`),t.y(` Enabled condition: ${JSON.stringify(o.enabled)}`);continue}let c=o.variables??[];if(c.length>0){t.y(`Processing ${c.length} variable(s) for template "${o.name}"...`);let e=ht(c);e.length>0&&(t.S(`❌ Variable validation errors:`,`error`),e.forEach(e=>t.S(` - ${e}`,`error`)),a.default.exit(1));let n=await Q(c,await $(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 Q(i,await $(i,r),r);if(s=Object.keys(e).length,Object.assign(r,e),s>0){t.y(`Resolved ${s} conditional variable(s)`);for(let[n,r]of Object.entries(e))t.y(` ${n} = ${JSON.stringify(r)}`)}}let l=Object.keys(n).length+s;if(l>0){t.y(`Total variables resolved for template: ${l}`);for(let[e,r]of Object.entries(n))t.y(` ${e} = ${JSON.stringify(r)}`)}}let l=o.prompts??[];if(l.length>0){t.y(`Processing ${l.length} prompt(s) for template "${o.name}"...`);let e=K(l);e.length>0&&(t.S(`❌ Prompt validation errors:`,`error`),e.forEach(e=>t.S(` - ${e}`,`error`)),a.default.exit(1));let n=await W(l,await G(l,r),r);Object.assign(r,n),t.y(`Collected ${Object.keys(n).length} prompt answer(s)`)}if(!await t._(o.enabled,r)){t.x(`⊘ Template "${o.name}" became disabled after variable/prompt resolution - skipping tasks`);continue}let u=o.tasks??[];u.length>0&&(t.y(`Found ${u.length} task(s) in template "${o.name}" (will execute later)`),i.push(...u))}if(t.y(`
|
|
24
|
-
🔧 Validating and filtering all collected tasks...`),i.length===0){t.S(`No tasks found in any template`,`info`);return}let o=ft(i);o.length>0&&(mt(o),a.default.exit(1)),console.log(``),t.S(`🛠️ Preparing tasks...`,`info`);let s=[];for(let e of i)await t._(e.enabled,r)&&s.push(e);if(console.log(``),t.S(`Found ${i.length} tasks (${s.length} enabled)`,`info`),t.S(`All tasks validated successfully`,`success`),s.length===0){t.S(`No enabled tasks to execute`,`info`);return}let c=dt(s);if(n.dryRun){t.S(`
|
|
25
|
-
🔍 Dry run - showing task changes...`,`info`),await N(c,r),t.S(`
|
|
26
|
-
🔍 Dry run completed - no changes were made`,`info`),t.S(`Run without --dry-run to apply changes`,`info`);return}console.log(``),t.x(`⚙️ 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 ut(i,r,e+1,c.length,n.dryRun)?(l++,await L(`afterTask`,i,r)):(await t.h(i.required,r)&&(u++,d.push(i.name)),await L(`onError`,Error(`Task ${i.name} failed`),i),t.T(`⚠️ Task "${i.name}" failed, continuing with remaining tasks...`)))}await L(`afterAll`,r),u>0&&(t.S(`\n❌ Task execution completed with ${u} error(s)`,`error`),t.S(`Completed: ${l}/${c.length} tasks`,`info`),t.S(`Failed tasks: ${d.join(`, `)}`,`error`),a.default.exit(1)),t.S(`Completed: ${l}/${c.length} tasks`,`success`)}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return ue}}),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 V}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return _t}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return gt}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return C}});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./configurations-Bjun5iKX.js";import{n as e,t}from"./run-tasks-Bd7MRNHo.js";import"./config-nfiOxhDM.js";export{t as runTasks,e as runTemplatesSequentially};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const e=require(`../chunk-DjWAcSYV.cjs`),t=require(`../validate-scaffoldfy-json-Dkaz9ueq.cjs`);let n=require(`node:fs`);n=e.t(n);let r=require(`node:path`);r=e.t(r);let i=require(`node:process`);i=e.t(i);let a=require(`commander`);a=e.t(a);function o(e){let t=[];function i(e){let a=n.default.readdirSync(e,{withFileTypes:!0});for(let n of a){let a=r.default.join(e,n.name);n.isDirectory()?n.name!==`node_modules`&&n.name!==`.git`&&!n.name.startsWith(`.`)&&i(a):n.isFile()&&n.name.endsWith(`.json`)&&t.push(a)}}return i(e),t}function s(){let e=new a.Command;e.name(`validate-scaffoldfy-json`).description(`Validate scaffoldfy JSON files against their schemas`).version(`1.0.0`).option(`-f, --file <path>`,`Path to a JSON file to validate`).option(`-d, --dir <path>`,`Path to a directory to scan for JSON files`).parse(i.default.argv);let n=e.opts(),r=[];n.file!==void 0&&n.file!==``?r=[n.file]:n.dir!==void 0&&n.dir!==``?(console.log(`Scanning directory: ${n.dir}`),r=o(n.dir),console.log(`Found ${r.length} JSON file(s)\n`)):(console.error(`Error: Please provide either --file or --dir option`),e.help());let s=!1;for(let e of r){console.log(`Validating ${e}...`);let n=t.t(e);if(n.valid)console.log(`✅ ${e} is valid`);else if(s=!0,console.error(`❌ ${e} validation failed:`),n.errors)for(let e of n.errors)console.error(` ${e}`)}s&&i.default.exit(1),console.log(`
|
|
3
|
-
✅ All files validated successfully!`)}require(`url`).pathToFileURL(__filename).href===`file://${i.default.argv[1]}`&&s();
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{t as e}from"../validate-scaffoldfy-json-Cfq-nQjy.js";import t from"node:path";import n from"node:fs";import r from"node:process";import{Command as i}from"commander";function a(e){let r=[];function i(e){let a=n.readdirSync(e,{withFileTypes:!0});for(let n of a){let a=t.join(e,n.name);n.isDirectory()?n.name!==`node_modules`&&n.name!==`.git`&&!n.name.startsWith(`.`)&&i(a):n.isFile()&&n.name.endsWith(`.json`)&&r.push(a)}}return i(e),r}function o(){let t=new i;t.name(`validate-scaffoldfy-json`).description(`Validate scaffoldfy JSON files against their schemas`).version(`1.0.0`).option(`-f, --file <path>`,`Path to a JSON file to validate`).option(`-d, --dir <path>`,`Path to a directory to scan for JSON files`).parse(r.argv);let n=t.opts(),o=[];n.file!==void 0&&n.file!==``?o=[n.file]:n.dir!==void 0&&n.dir!==``?(console.log(`Scanning directory: ${n.dir}`),o=a(n.dir),console.log(`Found ${o.length} JSON file(s)\n`)):(console.error(`Error: Please provide either --file or --dir option`),t.help());let s=!1;for(let t of o){console.log(`Validating ${t}...`);let n=e(t);if(n.valid)console.log(`✅ ${t} is valid`);else if(s=!0,console.error(`❌ ${t} validation failed:`),n.errors)for(let e of n.errors)console.error(` ${e}`)}s&&r.exit(1),console.log(`
|
|
3
|
-
✅ All files validated successfully!`)}import.meta.url===`file://${r.argv[1]}`&&o();export{};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require(`../validate-scaffoldfy-json-Dkaz9ueq.cjs`);require(`../scaffoldfy-config-json-validator-CpEXHRsI.cjs`),exports.validateScaffoldfyJsonFile=e.t;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"../validate-scaffoldfy-json-Cfq-nQjy.js";import"../scaffoldfy-config-json-validator-DP8-e4Yy.js";export{e as validateScaffoldfyJsonFile};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require(`../validate-scaffoldfy-json-Dkaz9ueq.cjs`);exports.validateScaffoldfyJsonFile=e.t;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"../validate-scaffoldfy-json-Cfq-nQjy.js";export{e as validateScaffoldfyJsonFile};
|
package/dist/src-BB92j9Us.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./configurations-KSynsxPT.cjs`),n=require(`./run-tasks-CwrcjBpP.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.S(`❌ Task execution failed`,`error`),e instanceof Error?(t.S(`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}});
|
package/dist/src-D8T_2x3i.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{S as e}from"./configurations-Bjun5iKX.js";import{t}from"./run-tasks-Bd7MRNHo.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};
|
package/dist/utils-C-yGs5_V.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require(`./configurations-KSynsxPT.cjs`);exports.cleanupTempFile=e.l,exports.debug=e.y,exports.error=e.b,exports.logError=e.b,exports.evaluateCondition=e.v,exports.evaluateEnabled=e.g,exports.evaluateEnabledAsync=e._,exports.evaluateRequiredAsync=e.h,exports.getNestedProperty=e.f,exports.info=e.x,exports.logInfo=e.x,exports.interpolateTemplate=e.o,exports.isUrl=e.m,exports.log=e.S,exports.logSuccess=e.w,exports.success=e.w,exports.logWarn=e.T,exports.warn=e.T,exports.resolveAndFetchFile=e.u,exports.resolveFilePath=e.d,exports.resolveValue=e.s,exports.setDebugMode=e.C,exports.setNestedProperty=e.p;
|
package/dist/utils-DXSrTxhI.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,S as t,T as n,_ as r,b as i,d as a,f as o,g as s,h as c,l,m as u,o as d,p as f,s as p,u as m,v as h,w as g,x as _,y as v}from"./configurations-Bjun5iKX.js";export{l as cleanupTempFile,v as debug,i as error,i as logError,h as evaluateCondition,s as evaluateEnabled,r as evaluateEnabledAsync,c as evaluateRequiredAsync,o as getNestedProperty,_ as info,_ as logInfo,d as interpolateTemplate,u as isUrl,t as log,g as logSuccess,g as success,n as logWarn,n as warn,m as resolveAndFetchFile,a as resolveFilePath,p as resolveValue,e as setDebugMode,f as setNestedProperty};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:path";import{fileURLToPath as t}from"node:url";import n from"node:fs";import r from"node:process";import i from"ajv";const a=t(import.meta.url),o=e.dirname(a);function s(){return new i({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function c(e){try{let t=n.readFileSync(e,`utf-8`);return JSON.parse(t)}catch(t){throw Error(`Failed to load schema from ${e}: ${t instanceof Error?t.message:String(t)}`)}}function l(t){let i=e.isAbsolute(t)?t:e.resolve(r.cwd(),t);try{let t=n.readFileSync(i,`utf-8`),r=JSON.parse(t);if(!r||typeof r!=`object`||!(`$schema`in r))return{valid:!0};let a=r.$schema;if(typeof a!=`string`)return{valid:!0};let l;if(a.startsWith(`http`))if(a.includes(`scaffoldfy/schema`))l=e.join(o,`..`,`..`,`schema`,`scaffoldfy.schema.json`);else return{valid:!0};else l=a.startsWith(`../`)||a.startsWith(`./`)?e.resolve(e.dirname(i),a):a;if(!n.existsSync(l))return console.warn(`Schema file not found: ${l}`),{valid:!0};let u=c(l),d=s().compile(u);return d(r)?{valid:!0}:{valid:!1,errors:d.errors?.map(e=>`${e.instancePath||`root`}: ${e.message}`)||[]}}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${i}: ${e instanceof Error?e.message:String(e)}`]}}}export{l as t};
|
|
@@ -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:url`);i=e.t(i);let a=require(`ajv`);a=e.t(a);const o=(0,i.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),s=n.default.dirname(o);function c(){return new a.default({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function l(e){try{let n=t.default.readFileSync(e,`utf-8`);return JSON.parse(n)}catch(t){throw Error(`Failed to load schema from ${e}: ${t instanceof Error?t.message:String(t)}`)}}function u(e){let i=n.default.isAbsolute(e)?e:n.default.resolve(r.default.cwd(),e);try{let e=t.default.readFileSync(i,`utf-8`),r=JSON.parse(e);if(!r||typeof r!=`object`||!(`$schema`in r))return{valid:!0};let a=r.$schema;if(typeof a!=`string`)return{valid:!0};let o;if(a.startsWith(`http`))if(a.includes(`scaffoldfy/schema`))o=n.default.join(s,`..`,`..`,`schema`,`scaffoldfy.schema.json`);else return{valid:!0};else o=a.startsWith(`../`)||a.startsWith(`./`)?n.default.resolve(n.default.dirname(i),a):a;if(!t.default.existsSync(o))return console.warn(`Schema file not found: ${o}`),{valid:!0};let u=l(o),d=c().compile(u);return d(r)?{valid:!0}:{valid:!1,errors:d.errors?.map(e=>`${e.instancePath||`root`}: ${e.message}`)||[]}}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${i}: ${e instanceof Error?e.message:String(e)}`]}}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
//#region src/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Validate a JSON file against its schema
|
|
4
|
-
*/
|
|
5
|
-
declare function validateScaffoldfyJsonFile(filePath: string): {
|
|
6
|
-
valid: boolean;
|
|
7
|
-
errors?: string[];
|
|
8
|
-
};
|
|
9
|
-
//#endregion
|
|
10
|
-
export { validateScaffoldfyJsonFile as t };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
//#region src/scaffoldfy-config-json-validator/validate-scaffoldfy-json.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Validate a JSON file against its schema
|
|
4
|
-
*/
|
|
5
|
-
declare function validateScaffoldfyJsonFile(filePath: string): {
|
|
6
|
-
valid: boolean;
|
|
7
|
-
errors?: string[];
|
|
8
|
-
};
|
|
9
|
-
//#endregion
|
|
10
|
-
export { validateScaffoldfyJsonFile as t };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|