@pixpilot/scaffoldfy 0.48.0 → 0.50.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.
Files changed (36) hide show
  1. package/README.md +16 -10
  2. package/dist/cli.cjs +1 -1
  3. package/dist/cli.js +1 -1
  4. package/dist/configurations-7FTBn2PH.js +1 -0
  5. package/dist/configurations-BC8PHmKl.cjs +1 -0
  6. package/dist/index.cjs +1 -1
  7. package/dist/index.d.cts +11 -3
  8. package/dist/index.d.ts +11 -3
  9. package/dist/index.js +1 -1
  10. package/dist/run-configuration-sequentially-D7OT-3pI.js +4 -0
  11. package/dist/run-configuration-sequentially-Dl6kjAxE.cjs +4 -0
  12. package/dist/scaffoldfy-config-validator/cli.cjs +1 -1
  13. package/dist/scaffoldfy-config-validator/cli.js +1 -1
  14. package/dist/scaffoldfy-config-validator/index.cjs +1 -1
  15. package/dist/scaffoldfy-config-validator/index.js +1 -1
  16. package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.cjs +1 -1
  17. package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.js +1 -1
  18. package/dist/src-C5_fif4y.js +1 -0
  19. package/dist/src-lLYt4rM9.cjs +1 -0
  20. package/dist/tasks-BDrjoNoH.js +23 -0
  21. package/dist/{tasks-BiruGt8T.cjs → tasks-BbtxqKaa.cjs} +11 -11
  22. package/dist/utils-ChapJeVL.cjs +1 -0
  23. package/dist/utils-DZe_QtqW.js +1 -0
  24. package/dist/{validate-scaffoldfy-json-Bq2USY66.cjs → validate-scaffoldfy-json-CmI6S3fB.cjs} +1 -1
  25. package/dist/{validate-scaffoldfy-json-gnb3COkM.js → validate-scaffoldfy-json-D1NiHwO5.js} +1 -1
  26. package/package.json +3 -3
  27. package/schema/scaffoldfy.schema.json +6 -6
  28. package/dist/configurations-BFx3CItg.js +0 -1
  29. package/dist/configurations-DJ1eNatp.cjs +0 -1
  30. package/dist/run-configuration-sequentially-76FNB81E.js +0 -4
  31. package/dist/run-configuration-sequentially-DKTi19-X.cjs +0 -4
  32. package/dist/src-BUTa4CXP.cjs +0 -1
  33. package/dist/src-uWkAarfL.js +0 -1
  34. package/dist/tasks-CMhsXaOx.js +0 -23
  35. package/dist/utils-2sd-K2Xq.js +0 -1
  36. package/dist/utils-DJMfWehf.cjs +0 -1
package/README.md CHANGED
@@ -35,6 +35,9 @@ scaffoldfy
35
35
  # With custom tasks file
36
36
  scaffoldfy --config ./config.json
37
37
 
38
+ # With a config file hosted on a URL
39
+ scaffoldfy --config https://example.com/scaffoldfy.json
40
+
38
41
  # Preview changes (dry run)
39
42
  scaffoldfy --dry-run
40
43
  ```
@@ -43,24 +46,27 @@ Or run without installing using npx:
43
46
 
44
47
  ```sh
45
48
  # Basic usage with default task file
46
- npx @pixpilot/scaffoldfy
49
+ npx @pixpilot/scaffoldfy@latest
47
50
 
48
51
  # With custom tasks file
49
- npx @pixpilot/scaffoldfy --config ./config.json
52
+ npx @pixpilot/scaffoldfy@latest --config ./config.json
53
+
54
+ # With a config file hosted on a URL
55
+ npx @pixpilot/scaffoldfy@latest --config https://example.com/scaffoldfy.json
50
56
 
51
57
  # Preview changes (dry run)
52
- npx @pixpilot/scaffoldfy --dry-run
58
+ npx @pixpilot/scaffoldfy@latest --dry-run
53
59
  ```
54
60
 
55
61
  ### CLI Options
56
62
 
57
- | Option | Description |
58
- | ----------------- | ------------------------------------------------------------------------------- |
59
- | `--config <path>` | Path to config file (JSON or TypeScript, default: `./scaffoldfy.json`) |
60
- | `--dry-run` | Preview changes without applying them |
61
- | `--no-validate` | Skip schema validation of task configuration (validation is enabled by default) |
62
- | `-h, --help` | Show help message |
63
- | `-v, --version` | Show version |
63
+ | Option | Description |
64
+ | ----------------- | ---------------------------------------------------------------------------------------------- |
65
+ | `--config <path>` | Path or URL to config file (JSON, or TypeScript for local files; default: `./scaffoldfy.json`) |
66
+ | `--dry-run` | Preview changes without applying them |
67
+ | `--no-validate` | Skip schema validation of task configuration (validation is enabled by default) |
68
+ | `-h, --help` | Show help message |
69
+ | `-v, --version` | Show version |
64
70
 
65
71
  ### Programmatic API
66
72
 
package/dist/cli.cjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const e=require(`./configurations-DJ1eNatp.cjs`);require(`./initial-config-CESipc-c.cjs`),require(`./tasks-BiruGt8T.cjs`);const t=require(`./validate-scaffoldfy-json-Bq2USY66.cjs`);require(`./scaffoldfy-config-validator-BvNnGMO1.cjs`);const n=require(`./src-BUTa4CXP.cjs`);let r=require(`node:fs`);r=e.I(r);let i=require(`node:path`);i=e.I(i);let a=require(`node:process`);a=e.I(a);let o=require(`commander`);o=e.I(o);const s=1;let c=0;const l={};function u(e=`Loading`){let t=[`|`,`/`,`-`,`\\`,`.`,`..`,`...`],n=0;c++;let r=c;return process.stdout.write(`${e} `),l[r]=setInterval(()=>{process.stdout.write(`\r${e} ${t[n%t.length]} `),n++},120),r}function d(e){l[e]&&(clearInterval(l[e]),delete l[e],process.stdout.write(`\r`),process.stdout.write(`${` `.repeat(30)}\r`))}const f=new o.Command,p=i.default.join(__dirname,`..`,`package.json`);let m=`0.0.0`;try{m=JSON.parse(r.default.readFileSync(p,`utf-8`)).version??`0.0.0`}catch{}f.name(`scaffoldfy`).description(`Automate project setup and configuration with customizable tasks`).version(m),f.option(`--dry-run`,`Run in dry mode without making any changes`).option(`--force`,`Force execution even if checks fail`).option(`--config <path>`,`Path to task configuration file (JSON or TypeScript)`,`./scaffoldfy.json`).option(`--no-validate`,`Skip schema validation of task configuration (validation is enabled by default)`).option(`--debug`,`Enable debug logging for verbose output`).action(async o=>{o.debug===!0&&e.O(!0);try{let s=[],c,l,f,p,m;if(o.config!=null&&o.config!==``){let n=i.default.resolve(a.default.cwd(),o.config);if(r.default.existsSync(n))if(m=n,n.endsWith(`.ts`)||n.endsWith(`.mts`)){e.D(`Loading tasks from TypeScript file: ${o.config}`,`info`);try{let t=await import(n);s=t.default??t.tasks??[],(!Array.isArray(s)||s.length===0)&&(e.D(`⚠️ No tasks found in TypeScript file or invalid format`,`warn`),e.D(`Expected default export or named export "tasks" with TaskDefinition[]`,`info`))}catch(t){e.D(`Failed to load TypeScript config file: ${o.config}`,`error`),t instanceof Error&&e.D(` Error: ${t.message}`,`error`),a.default.exit(1)}}else try{if(o.validate!==!1){e.w(`Validating task configuration against schema...`);let i=r.default.readFileSync(n,`utf-8`);t.r(JSON.parse(i),{silent:!1}).valid||(e.D(``,`error`),e.D(`💡 You can skip validation with --no-validate flag, but this is not recommended.`,`info`),a.default.exit(1)),e.D(`Configuration validated`,`success`)}let i=u(`Loading config`),m;try{m=await e.n(n,{sequential:!0})}finally{d(i)}if(m.configs!=null&&m.configs.length>0){let{runConfigurationSequentially:e}=await Promise.resolve().then(()=>require(`./run-configuration-sequentially-DKTi19-X.cjs`)),{createInitialConfig:t}=await Promise.resolve().then(()=>require(`./initial-config-CbzFPdT_.cjs`));await e(m.configs,{dryRun:o.dryRun??!1,force:o.force??!1,configFilePath:n},t()),a.default.exit(0)}s=m.tasks,c=m.variables,l=m.prompts,f=m.enabled,p=m.transformers,Array.isArray(s)||(e.D(`❌ Invalid config file format`,`error`),e.D(`Expected JSON with { "tasks": [...] } structure`,`info`),a.default.exit(1))}catch(t){e.D(`Failed to load JSON config file: ${o.config}`,`error`),t instanceof Error&&e.D(` Error: ${t.message}`,`error`),a.default.exit(1)}else e.D(`Config file not found: ${o.config}`,`warn`)}let h=l!=null&&l.length>0||c!=null&&c.length>0;s.length===0&&!h&&(e.D(`❌ No tasks defined`,`error`),e.D(`Please provide tasks using one of these methods:`,`info`),e.D(` 1. Create a template-tasks.json file in the current directory`,`info`),e.D(` 2. Create a template-tasks.ts file in the current directory`,`info`),e.D(` 3. Use --config option to specify a different config file`,`info`),e.D(`Example JSON structure:`,`info`),console.log(JSON.stringify({tasks:[{id:`update-package`,name:`Update package.json`,description:`Update package.json with repository information`,required:!0,enabled:!0,type:`update-json`,prompts:[{id:`projectName`,type:`input`,message:`What is your project name?`,default:`my-project`,required:!0},{id:`includeTests`,type:`confirm`,message:`Include test files?`,default:!0}],config:{file:`package.json`,updates:{name:`{{projectName}}`,author:`{{author}}`}}}]},null,2)),a.default.exit(1)),s.length===0?e.D(`Loaded template with 0 tasks (template may only provide prompts/variables for extending)`,`info`):e.D(`Loaded ${s.length} task(s)`,`success`),await n.t(s,{dryRun:o.dryRun,force:o.force,configFilePath:m,variables:c,prompts:l,configEnabled:f,transformers:p})}catch(t){if(e.D(`❌ CLI execution failed`,`error`),t instanceof Error){e.D(`Error: ${t.message}`,`error`);let n=a.default.env.DEBUG;n!=null&&n!==``&&console.error(t.stack)}else console.error(t);a.default.exit(1)}}),f.parse(a.default.argv);
2
+ const e=require(`./configurations-BC8PHmKl.cjs`);require(`./initial-config-CESipc-c.cjs`),require(`./tasks-BbtxqKaa.cjs`);const t=require(`./validate-scaffoldfy-json-CmI6S3fB.cjs`);require(`./scaffoldfy-config-validator-BvNnGMO1.cjs`);const n=require(`./src-lLYt4rM9.cjs`);let r=require(`node:fs`);r=e.R(r);let i=require(`node:path`);i=e.R(i);let a=require(`node:process`);a=e.R(a);let o=require(`commander`);o=e.R(o);const s=1,c=new o.Command,l=i.default.join(__dirname,`..`,`package.json`);let u=`0.0.0`;try{u=JSON.parse(r.default.readFileSync(l,`utf-8`)).version??`0.0.0`}catch{}c.name(`scaffoldfy`).description(`Automate project setup and configuration with customizable tasks`).version(u),c.option(`--dry-run`,`Run in dry mode without making any changes`).option(`--force`,`Force execution even if checks fail`).option(`--config <path>`,`Path or URL to task configuration file (JSON or TypeScript)`,`./scaffoldfy.json`).option(`--no-validate`,`Skip schema validation of task configuration (validation is enabled by default)`).option(`--debug`,`Enable debug logging for verbose output`).action(async o=>{o.debug===!0&&e.j(!0);try{let s=[],c,l,u,d,f;if(o.config!=null&&o.config!==``){let n=e.S(o.config),p=n?o.config:i.default.resolve(a.default.cwd(),o.config);if(n||r.default.existsSync(p))if(f=p,p.endsWith(`.ts`)||p.endsWith(`.mts`)){n&&(e.A(`❌ Remote TypeScript config files are not supported`,`error`),e.A(`Only JSON config files can be loaded from a URL`,`info`),a.default.exit(1)),e.A(`Loading tasks from TypeScript file: ${o.config}`,`info`);try{let t=await import(p);s=t.default??t.tasks??[],(!Array.isArray(s)||s.length===0)&&(e.A(`⚠️ No tasks found in TypeScript file or invalid format`,`warn`),e.A(`Expected default export or named export "tasks" with TaskDefinition[]`,`info`))}catch(t){e.A(`Failed to load TypeScript config file: ${o.config}`,`error`),t instanceof Error&&e.A(` Error: ${t.message}`,`error`),a.default.exit(1)}}else try{if(o.validate!==!1){e.D(`Validating task configuration against schema...`);let n=await e.u(p);t.r(JSON.parse(n),{silent:!1}).valid||(e.A(``,`error`),e.A(`💡 You can skip validation with --no-validate flag, but this is not recommended.`,`info`),a.default.exit(1)),e.A(`Configuration validated`,`success`)}let n=e.g(`Loading config`),r;try{r=await e.n(p,{sequential:!0})}finally{e._(n)}if(r.configs!=null&&r.configs.length>0){let{runConfigurationSequentially:e}=await Promise.resolve().then(()=>require(`./run-configuration-sequentially-Dl6kjAxE.cjs`)),{createInitialConfig:t}=await Promise.resolve().then(()=>require(`./initial-config-CbzFPdT_.cjs`));await e(r.configs,{dryRun:o.dryRun??!1,force:o.force??!1,configFilePath:p},t()),a.default.exit(0)}s=r.tasks,c=r.variables,l=r.prompts,u=r.enabled,d=r.transformers,Array.isArray(s)||(e.A(`❌ Invalid config file format`,`error`),e.A(`Expected JSON with { "tasks": [...] } structure`,`info`),a.default.exit(1))}catch(t){e.A(`Failed to load JSON config file: ${o.config}`,`error`),t instanceof Error&&e.A(` Error: ${t.message}`,`error`),a.default.exit(1)}else e.A(`Config file not found: ${o.config}`,`warn`)}let p=l!=null&&l.length>0||c!=null&&c.length>0;s.length===0&&!p&&(e.A(`❌ No tasks defined`,`error`),e.A(`Please provide tasks using one of these methods:`,`info`),e.A(` 1. Create a template-tasks.json file in the current directory`,`info`),e.A(` 2. Create a template-tasks.ts file in the current directory`,`info`),e.A(` 3. Use --config option to specify a different config file`,`info`),e.A(`Example JSON structure:`,`info`),console.log(JSON.stringify({tasks:[{id:`update-package`,name:`Update package.json`,description:`Update package.json with repository information`,required:!0,enabled:!0,type:`update-json`,prompts:[{id:`projectName`,type:`input`,message:`What is your project name?`,default:`my-project`,required:!0},{id:`includeTests`,type:`confirm`,message:`Include test files?`,default:!0}],config:{file:`package.json`,updates:{name:`{{projectName}}`,author:`{{author}}`}}}]},null,2)),a.default.exit(1)),s.length===0?e.A(`Loaded template with 0 tasks (template may only provide prompts/variables for extending)`,`info`):e.A(`Loaded ${s.length} task(s)`,`success`),await n.t(s,{dryRun:o.dryRun,force:o.force,configFilePath:f,variables:c,prompts:l,configEnabled:u,transformers:d})}catch(t){if(e.A(`❌ CLI execution failed`,`error`),t instanceof Error){e.A(`Error: ${t.message}`,`error`);let n=a.default.env.DEBUG;n!=null&&n!==``&&console.error(t.stack)}else console.error(t);a.default.exit(1)}}),c.parse(a.default.argv);
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{D as e,O as t,n,w as r}from"./configurations-BFx3CItg.js";import"./initial-config-Dt0jw4Vs.js";import"./tasks-CMhsXaOx.js";import{r as i}from"./validate-scaffoldfy-json-gnb3COkM.js";import"./scaffoldfy-config-validator-D1iJBnRE.js";import{t as a}from"./src-uWkAarfL.js";import o from"node:path";import{fileURLToPath as s}from"node:url";import c from"node:fs";import l from"node:process";import{Command as u}from"commander";const d=()=>s(import.meta.url),f=(()=>o.dirname(d()))();let p=0;const m={};function h(e=`Loading`){let t=[`|`,`/`,`-`,`\\`,`.`,`..`,`...`],n=0;p++;let r=p;return process.stdout.write(`${e} `),m[r]=setInterval(()=>{process.stdout.write(`\r${e} ${t[n%t.length]} `),n++},120),r}function g(e){m[e]&&(clearInterval(m[e]),delete m[e],process.stdout.write(`\r`),process.stdout.write(`${` `.repeat(30)}\r`))}const _=new u,v=o.join(f,`..`,`package.json`);let y=`0.0.0`;try{y=JSON.parse(c.readFileSync(v,`utf-8`)).version??`0.0.0`}catch{}_.name(`scaffoldfy`).description(`Automate project setup and configuration with customizable tasks`).version(y),_.option(`--dry-run`,`Run in dry mode without making any changes`).option(`--force`,`Force execution even if checks fail`).option(`--config <path>`,`Path to task configuration file (JSON or TypeScript)`,`./scaffoldfy.json`).option(`--no-validate`,`Skip schema validation of task configuration (validation is enabled by default)`).option(`--debug`,`Enable debug logging for verbose output`).action(async s=>{s.debug===!0&&t(!0);try{let t=[],u,d,f,p,m;if(s.config!=null&&s.config!==``){let a=o.resolve(l.cwd(),s.config);if(c.existsSync(a))if(m=a,a.endsWith(`.ts`)||a.endsWith(`.mts`)){e(`Loading tasks from TypeScript file: ${s.config}`,`info`);try{let n=await import(a);t=n.default??n.tasks??[],(!Array.isArray(t)||t.length===0)&&(e(`⚠️ No tasks found in TypeScript file or invalid format`,`warn`),e(`Expected default export or named export "tasks" with TaskDefinition[]`,`info`))}catch(t){e(`Failed to load TypeScript config file: ${s.config}`,`error`),t instanceof Error&&e(` Error: ${t.message}`,`error`),l.exit(1)}}else try{if(s.validate!==!1){r(`Validating task configuration against schema...`);let t=c.readFileSync(a,`utf-8`);i(JSON.parse(t),{silent:!1}).valid||(e(``,`error`),e(`💡 You can skip validation with --no-validate flag, but this is not recommended.`,`info`),l.exit(1)),e(`Configuration validated`,`success`)}let o=h(`Loading config`),m;try{m=await n(a,{sequential:!0})}finally{g(o)}if(m.configs!=null&&m.configs.length>0){let{runConfigurationSequentially:e}=await import(`./run-configuration-sequentially-76FNB81E.js`),{createInitialConfig:t}=await import(`./initial-config-V9mm6hls.js`);await e(m.configs,{dryRun:s.dryRun??!1,force:s.force??!1,configFilePath:a},t()),l.exit(0)}t=m.tasks,u=m.variables,d=m.prompts,f=m.enabled,p=m.transformers,Array.isArray(t)||(e(`❌ Invalid config file format`,`error`),e(`Expected JSON with { "tasks": [...] } structure`,`info`),l.exit(1))}catch(t){e(`Failed to load JSON config file: ${s.config}`,`error`),t instanceof Error&&e(` Error: ${t.message}`,`error`),l.exit(1)}else e(`Config file not found: ${s.config}`,`warn`)}let _=d!=null&&d.length>0||u!=null&&u.length>0;t.length===0&&!_&&(e(`❌ No tasks defined`,`error`),e(`Please provide tasks using one of these methods:`,`info`),e(` 1. Create a template-tasks.json file in the current directory`,`info`),e(` 2. Create a template-tasks.ts file in the current directory`,`info`),e(` 3. Use --config option to specify a different config file`,`info`),e(`Example JSON structure:`,`info`),console.log(JSON.stringify({tasks:[{id:`update-package`,name:`Update package.json`,description:`Update package.json with repository information`,required:!0,enabled:!0,type:`update-json`,prompts:[{id:`projectName`,type:`input`,message:`What is your project name?`,default:`my-project`,required:!0},{id:`includeTests`,type:`confirm`,message:`Include test files?`,default:!0}],config:{file:`package.json`,updates:{name:`{{projectName}}`,author:`{{author}}`}}}]},null,2)),l.exit(1)),t.length===0?e(`Loaded template with 0 tasks (template may only provide prompts/variables for extending)`,`info`):e(`Loaded ${t.length} task(s)`,`success`),await a(t,{dryRun:s.dryRun,force:s.force,configFilePath:m,variables:u,prompts:d,configEnabled:f,transformers:p})}catch(t){if(e(`❌ CLI execution failed`,`error`),t instanceof Error){e(`Error: ${t.message}`,`error`);let n=l.env.DEBUG;n!=null&&n!==``&&console.error(t.stack)}else console.error(t);l.exit(1)}}),_.parse(l.argv);export{};
2
+ import{A as e,D as t,S as n,_ as r,g as i,j as a,n as o,u as s}from"./configurations-7FTBn2PH.js";import"./initial-config-Dt0jw4Vs.js";import"./tasks-BDrjoNoH.js";import{r as c}from"./validate-scaffoldfy-json-D1NiHwO5.js";import"./scaffoldfy-config-validator-D1iJBnRE.js";import{t as l}from"./src-C5_fif4y.js";import u from"node:path";import{fileURLToPath as d}from"node:url";import f from"node:fs";import p from"node:process";import{Command as m}from"commander";const h=()=>d(import.meta.url),g=(()=>u.dirname(h()))(),_=new m,v=u.join(g,`..`,`package.json`);let y=`0.0.0`;try{y=JSON.parse(f.readFileSync(v,`utf-8`)).version??`0.0.0`}catch{}_.name(`scaffoldfy`).description(`Automate project setup and configuration with customizable tasks`).version(y),_.option(`--dry-run`,`Run in dry mode without making any changes`).option(`--force`,`Force execution even if checks fail`).option(`--config <path>`,`Path or URL to task configuration file (JSON or TypeScript)`,`./scaffoldfy.json`).option(`--no-validate`,`Skip schema validation of task configuration (validation is enabled by default)`).option(`--debug`,`Enable debug logging for verbose output`).action(async d=>{d.debug===!0&&a(!0);try{let a=[],m,h,g,_,v;if(d.config!=null&&d.config!==``){let l=n(d.config),y=l?d.config:u.resolve(p.cwd(),d.config);if(l||f.existsSync(y))if(v=y,y.endsWith(`.ts`)||y.endsWith(`.mts`)){l&&(e(`❌ Remote TypeScript config files are not supported`,`error`),e(`Only JSON config files can be loaded from a URL`,`info`),p.exit(1)),e(`Loading tasks from TypeScript file: ${d.config}`,`info`);try{let t=await import(y);a=t.default??t.tasks??[],(!Array.isArray(a)||a.length===0)&&(e(`⚠️ No tasks found in TypeScript file or invalid format`,`warn`),e(`Expected default export or named export "tasks" with TaskDefinition[]`,`info`))}catch(t){e(`Failed to load TypeScript config file: ${d.config}`,`error`),t instanceof Error&&e(` Error: ${t.message}`,`error`),p.exit(1)}}else try{if(d.validate!==!1){t(`Validating task configuration against schema...`);let n=await s(y);c(JSON.parse(n),{silent:!1}).valid||(e(``,`error`),e(`💡 You can skip validation with --no-validate flag, but this is not recommended.`,`info`),p.exit(1)),e(`Configuration validated`,`success`)}let n=i(`Loading config`),l;try{l=await o(y,{sequential:!0})}finally{r(n)}if(l.configs!=null&&l.configs.length>0){let{runConfigurationSequentially:e}=await import(`./run-configuration-sequentially-D7OT-3pI.js`),{createInitialConfig:t}=await import(`./initial-config-V9mm6hls.js`);await e(l.configs,{dryRun:d.dryRun??!1,force:d.force??!1,configFilePath:y},t()),p.exit(0)}a=l.tasks,m=l.variables,h=l.prompts,g=l.enabled,_=l.transformers,Array.isArray(a)||(e(`❌ Invalid config file format`,`error`),e(`Expected JSON with { "tasks": [...] } structure`,`info`),p.exit(1))}catch(t){e(`Failed to load JSON config file: ${d.config}`,`error`),t instanceof Error&&e(` Error: ${t.message}`,`error`),p.exit(1)}else e(`Config file not found: ${d.config}`,`warn`)}let y=h!=null&&h.length>0||m!=null&&m.length>0;a.length===0&&!y&&(e(`❌ No tasks defined`,`error`),e(`Please provide tasks using one of these methods:`,`info`),e(` 1. Create a template-tasks.json file in the current directory`,`info`),e(` 2. Create a template-tasks.ts file in the current directory`,`info`),e(` 3. Use --config option to specify a different config file`,`info`),e(`Example JSON structure:`,`info`),console.log(JSON.stringify({tasks:[{id:`update-package`,name:`Update package.json`,description:`Update package.json with repository information`,required:!0,enabled:!0,type:`update-json`,prompts:[{id:`projectName`,type:`input`,message:`What is your project name?`,default:`my-project`,required:!0},{id:`includeTests`,type:`confirm`,message:`Include test files?`,default:!0}],config:{file:`package.json`,updates:{name:`{{projectName}}`,author:`{{author}}`}}}]},null,2)),p.exit(1)),a.length===0?e(`Loaded template with 0 tasks (template may only provide prompts/variables for extending)`,`info`):e(`Loaded ${a.length} task(s)`,`success`),await l(a,{dryRun:d.dryRun,force:d.force,configFilePath:v,variables:m,prompts:h,configEnabled:g,transformers:_})}catch(t){if(e(`❌ CLI execution failed`,`error`),t instanceof Error){e(`Error: ${t.message}`,`error`);let n=p.env.DEBUG;n!=null&&n!==``&&console.error(t.stack)}else console.error(t);p.exit(1)}}),_.parse(p.argv);export{};
@@ -0,0 +1 @@
1
+ import e from"node:path";import t from"node:fs";import n from"node:process";import{promisify as r}from"node:util";import"handlebars";import i from"node:os";import{execSync as a}from"node:child_process";import{adaCase as o,camelCase as s,capitalCase as c,cobolCase as l,constantCase as u,dotNotation as d,kebabCase as f,lowerCase as p,pascalCase as ee,pathCase as te,snakeCase as m,spaceCase as ne,trainCase as re,upperCamelCase as ie,upperCase as ae}from"case-anything";import{log as h}from"node:console";var g=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},_=class e extends g{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forConfigurationInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forConfigDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},v=class e extends g{constructor(e,t){super(e,`CONFIG_FILE_NOT_FOUND`),this.filePath=t,this.name=`ConfigFileNotFoundError`}static forPath(t){return new e(`Configuration file not found: ${t}`,t)}},y=class e extends g{constructor(e,t,n){super(e,`CONFIG_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`ConfigFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch configuration from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch configuration from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},oe=class e extends g{constructor(e,t,n){super(e,`CONFIG_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`ConfigParseError`}static forFile(t,n){return new e(`Failed to parse configuration file ${t}: ${n.message}`,t,n)}},b=class e extends g{constructor(e,t){super(e,`INVALID_CONFIG`),this.filePath=t,this.name=`InvalidConfigError`}static forFile(t,n){return new e(`Invalid configuration file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid configuration file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid configuration file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid configuration file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}},x=class e extends g{constructor(e,t,n,r){super(e,`DUPLICATE_ID`),this.id=t,this.type=n,this.existingType=r,this.name=`DuplicateIdError`}static forId(t,n,r){return new e(`Duplicate ID "${t}" found in ${n}. This ID is already used in ${r??`unknown`}`,t,n,r)}},S=class e extends g{constructor(e,t,n,r,i){super(e,`ID_CONFLICT`),this.id=t,this.type=n,this.baseSource=r,this.overrideSource=i,this.name=`IdConflictError`}static forTask(t,n,r){return new e(`Task ID conflict: "${t}" is defined in multiple templates.\n Base task from: ${n??`unknown`}\n Override task from: ${r??`unknown`}\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the task.\n Task is being extended/overridden but no override strategy was specified.`,t,`task`,n,r)}static forVariable(t){return new e(`Variable ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the variable.\n Variable is being extended/overridden but no override strategy was specified.`,t,`variable`)}static forPrompt(t){return new e(`Prompt ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the prompt.\n Prompt is being extended/overridden but no override strategy was specified.`,t,`prompt`)}},se=class e extends g{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)}},ce=class e extends g{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`)}},le=class e extends g{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`)}},C=class e extends g{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`)}};let ue=!1;function de(e){ue=e}const w={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},T={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},E=`\x1B[0m`;function D(e){ue&&console.log(`${T.debug}${w.debug} ${e}${E}`)}function O(e){console.log(`${T.info}${w.info} ${e}${E}`)}function k(e){console.log(`${T.success}${w.success} ${e}${E}`)}function A(e){console.log(`${T.warn}${w.warn} ${e}${E}`)}function j(e){console.log(`${T.error}${w.error} ${e}${E}`)}function M(e,t=`info`){switch(t){case`debug`:D(e);break;case`info`:O(e);break;case`success`:k(e);break;case`warn`:A(e);break;case`error`:j(e);break}}function N(e,t,n){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch(t){return n?.lazy===!0&&t instanceof ReferenceError?!0:(n?.silent!==!0&&(M(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&M(` Error: ${t.message}`,`warn`)),!1)}}function fe(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)return n?.lazy===!0;if(e.type===`condition`)return N(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function P(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)try{let{execSync:n}=await import(`node:child_process`),{interpolateTemplate:r}=await import(`./utils-DZe_QtqW.js`),i=n(r(e.value,t),{encoding:`utf-8`}).trim();if(i===``||i===`0`)return!1;let a=i.toLowerCase();return!(a===`false`||a===`no`)}catch(t){let{log:n}=await import(`./utils-DZe_QtqW.js`);return n(`Failed to execute enabled command: ${e.value}`,`warn`),t instanceof Error&&n(` Error: ${t.message}`,`warn`),!1}if(e.type===`condition`)return N(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function pe(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function me(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function he(e,t){let n=me(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await import(`./utils-DZe_QtqW.js`);return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await import(`./utils-DZe_QtqW.js`);if(typeof e==`object`&&e&&`status`in e&&typeof e.status==`number`){let{status:r}=e;if(r>=1&&r<=255)return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}if(n.type===`condition`)return pe(n.value,t)}return!0}function F(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function I(t){if(t==null||t===``)return`current configuration`;if(F(t))return t;let r=n.cwd();return t.startsWith(r)?e.relative(r,t):t}function ge(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];t!=null&&t!==``&&((!(t in i)||typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t])}let a=r[r.length-1];a!=null&&a!==``&&(i[a]=n)}function L(e,t){let n=t.split(`.`),r=e;for(let e of n)if(e!==``&&typeof r==`object`&&r)r=r[e];else return;return r}function R(t,r){if(F(t))return t;if(r==null||r===``)return e.isAbsolute(t)?t:e.resolve(n.cwd(),t);if(F(r))try{let e=new URL(`.`,r);return new URL(t,e).href}catch{throw Error(`Failed to resolve file path '${t}' relative to source URL '${r}'`)}let i=e.dirname(r);return e.isAbsolute(t)?t:e.resolve(i,t)}let z=0;const B={};function V(e=`Loading`){let t=[`|`,`/`,`-`,`\\`,`.`,`..`,`...`],n=0;z++;let r=z;return process.stdout.write(`${e} `),B[r]=setInterval(()=>{process.stdout.write(`\r${e} ${t[n%t.length]} `),n++},120),r}function H(e){B[e]&&(clearInterval(B[e]),delete B[e],process.stdout.write(`\r`),process.stdout.write(`${` `.repeat(30)}\r`))}async function U(e){let t=new URL(e).pathname.split(`/`).pop(),n=V(`Loading ${t==null||t===``?e:t}`);try{return D(`Fetching remote file: ${e}`),await xe(e)}finally{H(n)}}async function W(n){let{file:r,sourceUrl:a,tempFileExtension:o=`.tmp`,tempFilePrefix:s=`scaffoldfy`}=n,c=r,l,u,d=!1;if(F(r)){l=r;let n=await U(l);d=!0;let a=i.tmpdir(),c=`${s}-${Date.now()}${o}`;u=e.join(a,c),t.writeFileSync(u,n,`utf-8`),D(`Remote file saved to temporary location: ${u}`)}else if(l=R(r,a),F(l)){let n=await U(l);d=!0;let r=i.tmpdir(),a=`${s}-${Date.now()}${o}`;u=e.join(r,a),t.writeFileSync(u,n,`utf-8`),D(`Remote file saved to temporary location: ${u}`)}else{if(!t.existsSync(l))throw Error(`File not found: ${l}`);u=l,D(`Using local file: ${u}`)}return{localFilePath:u,isRemote:d,originalPath:c,resolvedPath:l}}function G(e){if(e.isRemote&&t.existsSync(e.localFilePath))try{t.unlinkSync(e.localFilePath),D(`Temporary file cleaned up: ${e.localFilePath}`)}catch(e){D(`Warning: Failed to clean up temporary file: ${e instanceof Error?e.message:String(e)}`)}}function K(t){switch(e.extname(t).toLowerCase()){case`.js`:case`.cjs`:case`.mjs`:return`node`;case`.sh`:return`bash`;case`.bash`:return`bash`;case`.ps1`:return`pwsh`;default:return}}function _e(e,t){switch(e){case`node`:return`node "${t}"`;case`bash`:return`bash "${t}"`;case`sh`:return`sh "${t}"`;case`pwsh`:return`pwsh -File "${t}"`;case`powershell`:return`powershell -File "${t}"`;default:return`node "${t}"`}}function ve(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function q(t,r){let i=X(t.file,r),o=t.args?.map(e=>X(e,r))??[],s={};if(t.parameters)for(let[e,n]of Object.entries(t.parameters))s[e]=X(n,r);let c=t.cwd!=null&&t.cwd!==``?e.join(n.cwd(),X(t.cwd,r)):n.cwd(),l=await W({file:i,...t.sourceUrl!=null&&t.sourceUrl!==``&&{sourceUrl:t.sourceUrl},tempFileExtension:ve(t.runtime??K(i)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:u}=l,d=t.runtime??K(u)??`node`;!t.runtime&&!K(u)&&M(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let e=_e(d,u),r=o.join(` `),i=r?`${e} ${r}`:e;D(`Executing: ${i}`);let l=a(i,{cwd:c,stdio:t.captureOutput?[`pipe`,`pipe`,`inherit`]:`inherit`,env:{...n.env,...s},encoding:t.captureOutput?`utf-8`:void 0});if(t.captureOutput)return D(`Script executed successfully with output`),typeof l==`string`?l:void 0;D(`Script executed successfully`);return}finally{G(l)}}async function J(e,t){let{id:n,contextType:r,context:i,sourceUrl:o}=t;if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let s=e;if(s.type===`conditional`){if(!i){M(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof s.condition!=`string`){M(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=N(s.condition,i)?s.ifTrue:s.ifFalse;return typeof e==`object`&&e?await J(e,t):e}catch(e){M(`${r} "${n}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec`){let e=s.value;if(typeof e!=`string`){M(`${r} "${n}": exec value must have a string command`,`error`);return}try{return Y(a(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim())}catch(e){M(`${r} "${n}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec-file`){let e=s;if(typeof e.file!=`string`){M(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await q({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...o!=null&&{sourceUrl:o},captureOutput:!0},i??{});return t===void 0?void 0:Y(t.trim())}catch(e){M(`${r} "${n}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`static`)return s.value;if(s.type===`interpolate`){let e=s.value;if(typeof e!=`string`){M(`${r} "${n}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!i)return M(`${r} "${n}": interpolate value requires context but none provided`,`warn`),e;try{return X(e,i)}catch(t){return M(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(s.type!==void 0){M(`${r} "${n}": unknown value type "${s.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function Y(e){if(e.startsWith(`{`)||e.startsWith(`[`))try{return JSON.parse(e)}catch{return e}if(/^-?\d+(?:\.\d+)?$/u.test(e)){let t=Number.parseFloat(e);if(!Number.isNaN(t))return t}return e===`true`||e===`false`?e===`true`:e}function X(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>L(t,n)?.toString()??``)}const ye=r(t.readFile),Z=new Map;function be(){Z.clear()}async function xe(e){if(F(e))return Se(e);if(!t.existsSync(e))throw v.forPath(e);return ye(e,`utf-8`)}async function Se(e){let t=Z.get(e);if(t!=null)return t;let n=(async()=>{try{let t=await fetch(e);if(!t.ok)throw y.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:y.forUrl(e,t instanceof Error?t:void 0)}})();Z.set(e,n);try{return await n}catch(t){throw Z.delete(e),t}}const Q=new Map;function Ce(){Q.clear(),be()}const we=r(t.readFile);async function Te(r,i=new Set){let a=F(r),o;if(o=a||e.isAbsolute(r)?r:e.resolve(n.cwd(),r),Q.has(o))return Q.get(o);if(i.has(o))throw _.forConfigurationInheritance(i,o);i.add(o);let s;if(a)s=await Se(o);else{if(!t.existsSync(o))throw v.forPath(o);s=await we(o,`utf-8`)}let c;try{c=JSON.parse(s)}catch(e){throw oe.forFile(o,e instanceof Error?e:Error(String(e)))}if(c.name==null||c.name.trim()===``)throw b.missingName(o);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(c.name))throw b.invalidNameFormat(o,c.name);if(c.tasks!==void 0&&!Array.isArray(c.tasks))throw b.tasksNotArray(o);c.tasks===void 0&&(c.tasks=[]);for(let e of c.tasks)e.$sourceUrl=o;if(c.variables!==void 0)for(let e of c.variables)e.$sourceUrl=o;if(c.prompts!==void 0)for(let e of c.prompts)e.$sourceUrl=o;return Q.set(o,c),c}function Ee(e){let t=new Map;for(let n of e){let e=t.get(n.name)||[];e.push(n),t.set(n.name,e)}if(Array.from(t.values()).some(e=>e.length>1))return e;let n=new Map,r=new Map,i=new Map;for(let t of e)if(n.set(t.name,t),i.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)i.get(t.name).add(e),r.has(e)||r.set(e,new Set),r.get(e).add(t.name);let a=new Set,o=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=i.get(n.name).size>0,c=r.has(n.name)&&r.get(n.name).size>0;!s&&!c&&(a.add(n.name),o.set(n.name,t))}let s=e.filter(e=>!a.has(e.name)),c=[],l=new Set,u=new Set;function d(e){if(l.has(e))return;if(u.has(e))throw _.forConfigDependencies(Array.from(u),e);u.add(e);let t=n.get(e);if(t!=null){let t=i.get(e);if(t!=null&&t.size>0)for(let e of t)d(e)}u.delete(e),l.add(e),t!=null&&!a.has(e)&&c.push(t)}for(let e of s)d(e.name);let f=[],p=0;for(let t=0;t<e.length;t++){let n=e[t];a.has(n.name)?f.push(n):p<c.length&&(f.push(c[p]),p++)}return f}async function De(t,r,i,a,o,s){let c=F(t),l;if(l=c||e.isAbsolute(t)?t:r==null?e.resolve(n.cwd(),t):F(r)?new URL(t,r).href:e.resolve(r,t),i.has(l))return;if(a.has(l))throw _.forConfigurationInheritance(a,l);a.add(l);let u=await Te(l),d=F(l)?new URL(`.`,l).href:e.dirname(l);if(u.extends!=null&&u.extends!==``){let e=Array.isArray(u.extends)?u.extends:[u.extends],t=u.enabled??s;for(let n of e)await De(n,d,i,a,o,t)}a.delete(l),i.add(l);let f=u.enabled==null&&s!=null?{...u,enabled:s}:u;o.push(f)}async function Oe(e,t,n=new Set){let r=[];return await De(e,t,n,new Set,r),Ee(r)}const ke=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:`capitalCase`,type:`capitalCase`},{id:`remove-spaces`,type:`remove-spaces`},{id:`urlencode`,type:`urlencode`},{id:`dasherize`,type:`dasherize`},{id:`underscore`,type:`underscore`},{id:`adaCase`,type:`adaCase`},{id:`cobolCase`,type:`cobolCase`},{id:`dotNotation`,type:`dotNotation`},{id:`pathCase`,type:`pathCase`},{id:`spaceCase`,type:`spaceCase`},{id:`trainCase`,type:`trainCase`},{id:`upperCamelCase`,type:`upperCamelCase`}])this.transformers.set(e.id,e)}register(e){this.transformers.has(e.id)&&M(`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 C.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof C?t:C.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`capitalCase`:return this.executeCapitalCase(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`adaCase`:return this.executeAdaCase(t);case`cobolCase`:return this.executeCobolCase(t);case`dotNotation`:return this.executeDotNotation(t);case`pathCase`:return this.executePathCase(t);case`spaceCase`:return this.executeSpaceCase(t);case`trainCase`:return this.executeTrainCase(t);case`upperCamelCase`:return this.executeUpperCamelCase(t);case`custom`:return this.executeCustom(e,t,n);case`chain`:return this.executeChainTransformer(e,t,n);default:{let t=e;throw C.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 C.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 C.executionFailed(e.id,`Expression evaluation failed: ${t instanceof Error?t.message:String(t)}`)}}executeLowercase(e){return p(String(e))}executeUppercase(e){return ae(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 C.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 C.executionFailed(e.id,`Chain transformer must have at least one transformer`);return this.executeChain(r,t,n)}executeCapitalize(e){return c(String(e))}executeTitlecase(e){return f(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return s(String(e))}executePascalcase(e){return ee(String(e))}executeSnakecase(e){return m(String(e))}executeKebabcase(e){return f(String(e))}executeConstantcase(e){return u(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 f(String(e))}executeUnderscore(e){return m(String(e))}executeCapitalCase(e){return c(String(e))}executeAdaCase(e){return o(String(e))}executeCobolCase(e){return l(String(e))}executeDotNotation(e){return d(String(e))}executePathCase(e){return te(String(e))}executeSpaceCase(e){return ne(String(e))}executeTrainCase(e){return re(String(e))}executeUpperCamelCase(e){return ie(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};async function Ae(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 ke.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function je(e,t){if((t.override??`merge`)===`replace`){M(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}M(` → Variable "${t.id}" merged (value replaced)`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}async function Me(e,t,n){let r=new Map;for(let i of e){if(n?.skipConditional===!0&&typeof i.value==`object`&&i.value!==null&&!Array.isArray(i.value)&&i.value.type===`conditional`)continue;if(i.$configEnabled!=null){let e={...t};for(let[t,n]of r.entries())e[t]=n;if(!await P(i.$configEnabled,e))continue}let e={...t};for(let[t,n]of r.entries())e[t]=n;let a=await J(i.value,{id:i.id,contextType:`Variable`,context:e,...i.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}});a!==void 0&&r.set(i.id,a)}return r}function Ne(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}function Pe(e,t){if((t.override??`merge`)===`replace`){M(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}M(` → Prompt "${t.id}" merged`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}const Fe={template:[[`template`,`templateFile`]]};function Ie(e,t,n){let r={...e},i=Fe[n]??[];for(let[e,n]of Object.entries(t)){for(let t of i)if(t.includes(e)){for(let n of t)n!==e&&delete r[n];break}r[e]=n}return r}function Le(e,t){let n=Fe[e];if(!n)return null;for(let e of n){let n=e.filter(e=>e in t&&t[e]!=null);if(n.length>1)return n}return null}function Re(e,t){if((t.override??`merge`)===`replace`){h(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),h(` Base: ${I(e.$sourceUrl)}`,`info`),h(` Override: ${I(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}h(` → Merging task "${t.id}"`,`info`),h(` Base: ${I(e.$sourceUrl)}`,`info`),h(` Override: ${I(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=Ie(e.config,t.config,t.type);let r=Le(t.type,n);r!==null&&r.length>0&&(h(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),h(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function ze(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw x.forId(t.id,`task`,r.get(t.id));r.set(t.id,`task`)}if(t!=null)for(let e of t){if(r.has(e.id))throw x.forId(e.id,`variable`,r.get(e.id));r.set(e.id,`variable`)}if(n!=null)for(let e of n){if(r.has(e.id))throw x.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function Be(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return ze(t.tasks??[],t.variables,t.prompts),t}let t=new Map,n=new Map,r=new Map,i={};for(let a of e){if(a.enabled!=null&&(i[a.name]=a.enabled),a.enabled===!1){M(`⊘ Skipping disabled configuration "${a.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(a.prompts!=null)for(let e of a.prompts)if(r.has(e.id)){if(e.override==null)throw S.forPrompt(e.id);let t=Pe(r.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}if(a.variables!=null)for(let e of a.variables)if(n.has(e.id)){if(e.override==null)throw S.forVariable(e.id);let t=je(n.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}for(let e of a.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw S.forTask(e.id,I(n.$sourceUrl),I(e.$sourceUrl))}let n=Re(t.get(e.id),e);a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}else{let n={...e};a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}}let a=Array.from(t.values()),o=r.size>0?Array.from(r.values()):void 0,s=n.size>0?Array.from(n.values()):void 0;ze(a,s,o);let c=e[e.length-1],l={name:c.name,tasks:a};return c.description!=null&&(l.description=c.description),c.dependencies!=null&&(l.dependencies=c.dependencies),c.enabled!=null&&(l.enabled=c.enabled),o!=null&&(l.prompts=o),s!=null&&(l.variables=s),l}async function $(e,t,n=new Set){return Be(await Oe(e,t,n))}async function Ve(e,t){if(D(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await Oe(e);return D(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await $(e);M(`Loaded ${n.tasks?.length??0} task(s)`,`info`),n.extends!=null&&n.extends!==``&&M(`Extended from: ${(Array.isArray(n.extends)?n.extends:[n.extends]).join(`, `)}`,`info`),n.prompts!=null&&n.prompts.length>0&&M(`Found ${n.prompts.length} top-level prompt(s)`,`info`),n.variables!=null&&n.variables.length>0&&M(`Found ${n.variables.length} top-level variable(s)`,`info`);let r={tasks:n.tasks??[]};return n.prompts!=null&&(r.prompts=n.prompts),n.variables!=null&&(r.variables=n.variables),n.enabled!=null&&(r.enabled=n.enabled),n.transformers!=null&&(r.transformers=n.transformers),r}export{M as A,he as C,D,N as E,ce as F,se as I,_ as L,k as M,A as N,j as O,le as P,F as S,P as T,H as _,Me as a,ge as b,Te as c,X as d,J as f,V as g,W as h,Ne as i,de as j,O as k,Ce as l,G as m,Ve as n,Ae as o,q as p,Be as r,ke as s,$ as t,xe as u,R as v,fe as w,I as x,L as y};
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`node:fs`);c=s(c);let l=require(`node:path`);l=s(l);let u=require(`node:process`);u=s(u);let d=require(`node:util`);d=s(d),require(`handlebars`);let f=require(`node:os`);f=s(f);let p=require(`node:child_process`);p=s(p);let m=require(`case-anything`);m=s(m);let h=require(`node:console`);h=s(h);var g=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},_=class e extends g{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forConfigurationInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forConfigDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},v=class e extends g{constructor(e,t){super(e,`CONFIG_FILE_NOT_FOUND`),this.filePath=t,this.name=`ConfigFileNotFoundError`}static forPath(t){return new e(`Configuration file not found: ${t}`,t)}},y=class e extends g{constructor(e,t,n){super(e,`CONFIG_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`ConfigFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch configuration from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch configuration from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},ee=class e extends g{constructor(e,t,n){super(e,`CONFIG_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`ConfigParseError`}static forFile(t,n){return new e(`Failed to parse configuration file ${t}: ${n.message}`,t,n)}},b=class e extends g{constructor(e,t){super(e,`INVALID_CONFIG`),this.filePath=t,this.name=`InvalidConfigError`}static forFile(t,n){return new e(`Invalid configuration file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid configuration file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid configuration file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid configuration file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}},x=class e extends g{constructor(e,t,n,r){super(e,`DUPLICATE_ID`),this.id=t,this.type=n,this.existingType=r,this.name=`DuplicateIdError`}static forId(t,n,r){return new e(`Duplicate ID "${t}" found in ${n}. This ID is already used in ${r??`unknown`}`,t,n,r)}},S=class e extends g{constructor(e,t,n,r,i){super(e,`ID_CONFLICT`),this.id=t,this.type=n,this.baseSource=r,this.overrideSource=i,this.name=`IdConflictError`}static forTask(t,n,r){return new e(`Task ID conflict: "${t}" is defined in multiple templates.\n Base task from: ${n??`unknown`}\n Override task from: ${r??`unknown`}\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the task.\n Task is being extended/overridden but no override strategy was specified.`,t,`task`,n,r)}static forVariable(t){return new e(`Variable ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the variable.\n Variable is being extended/overridden but no override strategy was specified.`,t,`variable`)}static forPrompt(t){return new e(`Prompt ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the prompt.\n Prompt is being extended/overridden but no override strategy was specified.`,t,`prompt`)}},te=class e extends g{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)}},ne=class e extends g{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`)}},re=class e extends g{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`)}},C=class e extends g{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`)}};let w=!1;function ie(e){w=e}const T={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},E={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},D=`\x1B[0m`;function O(e){w&&console.log(`${E.debug}${T.debug} ${e}${D}`)}function k(e){console.log(`${E.info}${T.info} ${e}${D}`)}function A(e){console.log(`${E.success}${T.success} ${e}${D}`)}function ae(e){console.log(`${E.warn}${T.warn} ${e}${D}`)}function oe(e){console.log(`${E.error}${T.error} ${e}${D}`)}function j(e,t=`info`){switch(t){case`debug`:O(e);break;case`info`:k(e);break;case`success`:A(e);break;case`warn`:ae(e);break;case`error`:oe(e);break}}function M(e,t,n){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch(t){return n?.lazy===!0&&t instanceof ReferenceError?!0:(n?.silent!==!0&&(j(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&j(` Error: ${t.message}`,`warn`)),!1)}}function se(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)return n?.lazy===!0;if(e.type===`condition`)return M(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function N(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)try{let{execSync:n}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-ChapJeVL.cjs`)),i=n(r(e.value,t),{encoding:`utf-8`}).trim();if(i===``||i===`0`)return!1;let a=i.toLowerCase();return!(a===`false`||a===`no`)}catch(t){let{log:n}=await Promise.resolve().then(()=>require(`./utils-ChapJeVL.cjs`));return n(`Failed to execute enabled command: ${e.value}`,`warn`),t instanceof Error&&n(` Error: ${t.message}`,`warn`),!1}if(e.type===`condition`)return M(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function ce(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function le(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function ue(e,t){let n=le(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-ChapJeVL.cjs`));return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await Promise.resolve().then(()=>require(`./utils-ChapJeVL.cjs`));if(typeof e==`object`&&e&&`status`in e&&typeof e.status==`number`){let{status:r}=e;if(r>=1&&r<=255)return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}if(n.type===`condition`)return ce(n.value,t)}return!0}function P(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function F(e){if(e==null||e===``)return`current configuration`;if(P(e))return e;let t=u.default.cwd();return e.startsWith(t)?l.default.relative(t,e):e}function de(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];t!=null&&t!==``&&((!(t in i)||typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t])}let a=r[r.length-1];a!=null&&a!==``&&(i[a]=n)}function I(e,t){let n=t.split(`.`),r=e;for(let e of n)if(e!==``&&typeof r==`object`&&r)r=r[e];else return;return r}function L(e,t){if(P(e))return e;if(t==null||t===``)return l.default.isAbsolute(e)?e:l.default.resolve(u.default.cwd(),e);if(P(t))try{let n=new URL(`.`,t);return new URL(e,n).href}catch{throw Error(`Failed to resolve file path '${e}' relative to source URL '${t}'`)}let n=l.default.dirname(t);return l.default.isAbsolute(e)?e:l.default.resolve(n,e)}let R=0;const z={};function B(e=`Loading`){let t=[`|`,`/`,`-`,`\\`,`.`,`..`,`...`],n=0;R++;let r=R;return process.stdout.write(`${e} `),z[r]=setInterval(()=>{process.stdout.write(`\r${e} ${t[n%t.length]} `),n++},120),r}function V(e){z[e]&&(clearInterval(z[e]),delete z[e],process.stdout.write(`\r`),process.stdout.write(`${` `.repeat(30)}\r`))}async function H(e){let t=new URL(e).pathname.split(`/`).pop(),n=B(`Loading ${t==null||t===``?e:t}`);try{return O(`Fetching remote file: ${e}`),await Z(e)}finally{V(n)}}async function U(e){let{file:t,sourceUrl:n,tempFileExtension:r=`.tmp`,tempFilePrefix:i=`scaffoldfy`}=e,a=t,o,s,u=!1;if(P(t)){o=t;let e=await H(o);u=!0;let n=f.default.tmpdir(),a=`${i}-${Date.now()}${r}`;s=l.default.join(n,a),c.default.writeFileSync(s,e,`utf-8`),O(`Remote file saved to temporary location: ${s}`)}else if(o=L(t,n),P(o)){let e=await H(o);u=!0;let t=f.default.tmpdir(),n=`${i}-${Date.now()}${r}`;s=l.default.join(t,n),c.default.writeFileSync(s,e,`utf-8`),O(`Remote file saved to temporary location: ${s}`)}else{if(!c.default.existsSync(o))throw Error(`File not found: ${o}`);s=o,O(`Using local file: ${s}`)}return{localFilePath:s,isRemote:u,originalPath:a,resolvedPath:o}}function W(e){if(e.isRemote&&c.default.existsSync(e.localFilePath))try{c.default.unlinkSync(e.localFilePath),O(`Temporary file cleaned up: ${e.localFilePath}`)}catch(e){O(`Warning: Failed to clean up temporary file: ${e instanceof Error?e.message:String(e)}`)}}function G(e){switch(l.default.extname(e).toLowerCase()){case`.js`:case`.cjs`:case`.mjs`:return`node`;case`.sh`:return`bash`;case`.bash`:return`bash`;case`.ps1`:return`pwsh`;default:return}}function fe(e,t){switch(e){case`node`:return`node "${t}"`;case`bash`:return`bash "${t}"`;case`sh`:return`sh "${t}"`;case`pwsh`:return`pwsh -File "${t}"`;case`powershell`:return`powershell -File "${t}"`;default:return`node "${t}"`}}function pe(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function K(e,t){let n=Y(e.file,t),r=e.args?.map(e=>Y(e,t))??[],i={};if(e.parameters)for(let[n,r]of Object.entries(e.parameters))i[n]=Y(r,t);let a=e.cwd!=null&&e.cwd!==``?l.default.join(u.default.cwd(),Y(e.cwd,t)):u.default.cwd(),o=await U({file:n,...e.sourceUrl!=null&&e.sourceUrl!==``&&{sourceUrl:e.sourceUrl},tempFileExtension:pe(e.runtime??G(n)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:s}=o,c=e.runtime??G(s)??`node`;!e.runtime&&!G(s)&&j(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let t=fe(c,s),n=r.join(` `),o=n?`${t} ${n}`:t;O(`Executing: ${o}`);let l=(0,p.execSync)(o,{cwd:a,stdio:e.captureOutput?[`pipe`,`pipe`,`inherit`]:`inherit`,env:{...u.default.env,...i},encoding:e.captureOutput?`utf-8`:void 0});if(e.captureOutput)return O(`Script executed successfully with output`),typeof l==`string`?l:void 0;O(`Script executed successfully`);return}finally{W(o)}}async function q(e,t){let{id:n,contextType:r,context:i,sourceUrl:a}=t;if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let o=e;if(o.type===`conditional`){if(!i){j(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof o.condition!=`string`){j(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=M(o.condition,i)?o.ifTrue:o.ifFalse;return typeof e==`object`&&e?await q(e,t):e}catch(e){j(`${r} "${n}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(o.type===`exec`){let e=o.value;if(typeof e!=`string`){j(`${r} "${n}": exec value must have a string command`,`error`);return}try{return J((0,p.execSync)(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim())}catch(e){j(`${r} "${n}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(o.type===`exec-file`){let e=o;if(typeof e.file!=`string`){j(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await K({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...a!=null&&{sourceUrl:a},captureOutput:!0},i??{});return t===void 0?void 0:J(t.trim())}catch(e){j(`${r} "${n}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(o.type===`static`)return o.value;if(o.type===`interpolate`){let e=o.value;if(typeof e!=`string`){j(`${r} "${n}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!i)return j(`${r} "${n}": interpolate value requires context but none provided`,`warn`),e;try{return Y(e,i)}catch(t){return j(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(o.type!==void 0){j(`${r} "${n}": unknown value type "${o.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function J(e){if(e.startsWith(`{`)||e.startsWith(`[`))try{return JSON.parse(e)}catch{return e}if(/^-?\d+(?:\.\d+)?$/u.test(e)){let t=Number.parseFloat(e);if(!Number.isNaN(t))return t}return e===`true`||e===`false`?e===`true`:e}function Y(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>I(t,n)?.toString()??``)}const me=(0,d.promisify)(c.default.readFile),X=new Map;function he(){X.clear()}async function Z(e){if(P(e))return ge(e);if(!c.default.existsSync(e))throw v.forPath(e);return me(e,`utf-8`)}async function ge(e){let t=X.get(e);if(t!=null)return t;let n=(async()=>{try{let t=await fetch(e);if(!t.ok)throw y.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:y.forUrl(e,t instanceof Error?t:void 0)}})();X.set(e,n);try{return await n}catch(t){throw X.delete(e),t}}const Q=new Map;function _e(){Q.clear(),he()}const ve=(0,d.promisify)(c.default.readFile);async function ye(e,t=new Set){let n=P(e),r;if(r=n||l.default.isAbsolute(e)?e:l.default.resolve(u.default.cwd(),e),Q.has(r))return Q.get(r);if(t.has(r))throw _.forConfigurationInheritance(t,r);t.add(r);let i;if(n)i=await ge(r);else{if(!c.default.existsSync(r))throw v.forPath(r);i=await ve(r,`utf-8`)}let a;try{a=JSON.parse(i)}catch(e){throw ee.forFile(r,e instanceof Error?e:Error(String(e)))}if(a.name==null||a.name.trim()===``)throw b.missingName(r);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(a.name))throw b.invalidNameFormat(r,a.name);if(a.tasks!==void 0&&!Array.isArray(a.tasks))throw b.tasksNotArray(r);a.tasks===void 0&&(a.tasks=[]);for(let e of a.tasks)e.$sourceUrl=r;if(a.variables!==void 0)for(let e of a.variables)e.$sourceUrl=r;if(a.prompts!==void 0)for(let e of a.prompts)e.$sourceUrl=r;return Q.set(r,a),a}function be(e){let t=new Map;for(let n of e){let e=t.get(n.name)||[];e.push(n),t.set(n.name,e)}if(Array.from(t.values()).some(e=>e.length>1))return e;let n=new Map,r=new Map,i=new Map;for(let t of e)if(n.set(t.name,t),i.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)i.get(t.name).add(e),r.has(e)||r.set(e,new Set),r.get(e).add(t.name);let a=new Set,o=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=i.get(n.name).size>0,c=r.has(n.name)&&r.get(n.name).size>0;!s&&!c&&(a.add(n.name),o.set(n.name,t))}let s=e.filter(e=>!a.has(e.name)),c=[],l=new Set,u=new Set;function d(e){if(l.has(e))return;if(u.has(e))throw _.forConfigDependencies(Array.from(u),e);u.add(e);let t=n.get(e);if(t!=null){let t=i.get(e);if(t!=null&&t.size>0)for(let e of t)d(e)}u.delete(e),l.add(e),t!=null&&!a.has(e)&&c.push(t)}for(let e of s)d(e.name);let f=[],p=0;for(let t=0;t<e.length;t++){let n=e[t];a.has(n.name)?f.push(n):p<c.length&&(f.push(c[p]),p++)}return f}async function xe(e,t,n,r,i,a){let o=P(e),s;if(s=o||l.default.isAbsolute(e)?e:t==null?l.default.resolve(u.default.cwd(),e):P(t)?new URL(e,t).href:l.default.resolve(t,e),n.has(s))return;if(r.has(s))throw _.forConfigurationInheritance(r,s);r.add(s);let c=await ye(s),d=P(s)?new URL(`.`,s).href:l.default.dirname(s);if(c.extends!=null&&c.extends!==``){let e=Array.isArray(c.extends)?c.extends:[c.extends],t=c.enabled??a;for(let a of e)await xe(a,d,n,r,i,t)}r.delete(s),n.add(s);let f=c.enabled==null&&a!=null?{...c,enabled:a}:c;i.push(f)}async function Se(e,t,n=new Set){let r=[];return await xe(e,t,n,new Set,r),be(r)}var Ce=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:`capitalCase`,type:`capitalCase`},{id:`remove-spaces`,type:`remove-spaces`},{id:`urlencode`,type:`urlencode`},{id:`dasherize`,type:`dasherize`},{id:`underscore`,type:`underscore`},{id:`adaCase`,type:`adaCase`},{id:`cobolCase`,type:`cobolCase`},{id:`dotNotation`,type:`dotNotation`},{id:`pathCase`,type:`pathCase`},{id:`spaceCase`,type:`spaceCase`},{id:`trainCase`,type:`trainCase`},{id:`upperCamelCase`,type:`upperCamelCase`}])this.transformers.set(e.id,e)}register(e){this.transformers.has(e.id)&&j(`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 C.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof C?t:C.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`capitalCase`:return this.executeCapitalCase(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`adaCase`:return this.executeAdaCase(t);case`cobolCase`:return this.executeCobolCase(t);case`dotNotation`:return this.executeDotNotation(t);case`pathCase`:return this.executePathCase(t);case`spaceCase`:return this.executeSpaceCase(t);case`trainCase`:return this.executeTrainCase(t);case`upperCamelCase`:return this.executeUpperCamelCase(t);case`custom`:return this.executeCustom(e,t,n);case`chain`:return this.executeChainTransformer(e,t,n);default:{let t=e;throw C.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 C.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 C.executionFailed(e.id,`Expression evaluation failed: ${t instanceof Error?t.message:String(t)}`)}}executeLowercase(e){return(0,m.lowerCase)(String(e))}executeUppercase(e){return(0,m.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 C.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 C.executionFailed(e.id,`Chain transformer must have at least one transformer`);return this.executeChain(r,t,n)}executeCapitalize(e){return(0,m.capitalCase)(String(e))}executeTitlecase(e){return(0,m.kebabCase)(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return(0,m.camelCase)(String(e))}executePascalcase(e){return(0,m.pascalCase)(String(e))}executeSnakecase(e){return(0,m.snakeCase)(String(e))}executeKebabcase(e){return(0,m.kebabCase)(String(e))}executeConstantcase(e){return(0,m.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,m.kebabCase)(String(e))}executeUnderscore(e){return(0,m.snakeCase)(String(e))}executeCapitalCase(e){return(0,m.capitalCase)(String(e))}executeAdaCase(e){return(0,m.adaCase)(String(e))}executeCobolCase(e){return(0,m.cobolCase)(String(e))}executeDotNotation(e){return(0,m.dotNotation)(String(e))}executePathCase(e){return(0,m.pathCase)(String(e))}executeSpaceCase(e){return(0,m.spaceCase)(String(e))}executeTrainCase(e){return(0,m.trainCase)(String(e))}executeUpperCamelCase(e){return(0,m.upperCamelCase)(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};const we=new Ce;async function Te(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 we.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function Ee(e,t){if((t.override??`merge`)===`replace`){j(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}j(` → Variable "${t.id}" merged (value replaced)`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}async function De(e,t,n){let r=new Map;for(let i of e){if(n?.skipConditional===!0&&typeof i.value==`object`&&i.value!==null&&!Array.isArray(i.value)&&i.value.type===`conditional`)continue;if(i.$configEnabled!=null){let e={...t};for(let[t,n]of r.entries())e[t]=n;if(!await N(i.$configEnabled,e))continue}let e={...t};for(let[t,n]of r.entries())e[t]=n;let a=await q(i.value,{id:i.id,contextType:`Variable`,context:e,...i.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}});a!==void 0&&r.set(i.id,a)}return r}function Oe(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}function ke(e,t){if((t.override??`merge`)===`replace`){j(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}j(` → Prompt "${t.id}" merged`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}const Ae={template:[[`template`,`templateFile`]]};function je(e,t,n){let r={...e},i=Ae[n]??[];for(let[e,n]of Object.entries(t)){for(let t of i)if(t.includes(e)){for(let n of t)n!==e&&delete r[n];break}r[e]=n}return r}function Me(e,t){let n=Ae[e];if(!n)return null;for(let e of n){let n=e.filter(e=>e in t&&t[e]!=null);if(n.length>1)return n}return null}function Ne(e,t){if((t.override??`merge`)===`replace`){(0,h.log)(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),(0,h.log)(` Base: ${F(e.$sourceUrl)}`,`info`),(0,h.log)(` Override: ${F(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}(0,h.log)(` → Merging task "${t.id}"`,`info`),(0,h.log)(` Base: ${F(e.$sourceUrl)}`,`info`),(0,h.log)(` Override: ${F(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=je(e.config,t.config,t.type);let r=Me(t.type,n);r!==null&&r.length>0&&((0,h.log)(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),(0,h.log)(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function Pe(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw x.forId(t.id,`task`,r.get(t.id));r.set(t.id,`task`)}if(t!=null)for(let e of t){if(r.has(e.id))throw x.forId(e.id,`variable`,r.get(e.id));r.set(e.id,`variable`)}if(n!=null)for(let e of n){if(r.has(e.id))throw x.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function Fe(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return Pe(t.tasks??[],t.variables,t.prompts),t}let t=new Map,n=new Map,r=new Map,i={};for(let a of e){if(a.enabled!=null&&(i[a.name]=a.enabled),a.enabled===!1){j(`⊘ Skipping disabled configuration "${a.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(a.prompts!=null)for(let e of a.prompts)if(r.has(e.id)){if(e.override==null)throw S.forPrompt(e.id);let t=ke(r.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}if(a.variables!=null)for(let e of a.variables)if(n.has(e.id)){if(e.override==null)throw S.forVariable(e.id);let t=Ee(n.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}for(let e of a.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw S.forTask(e.id,F(n.$sourceUrl),F(e.$sourceUrl))}let n=Ne(t.get(e.id),e);a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}else{let n={...e};a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}}let a=Array.from(t.values()),o=r.size>0?Array.from(r.values()):void 0,s=n.size>0?Array.from(n.values()):void 0;Pe(a,s,o);let c=e[e.length-1],l={name:c.name,tasks:a};return c.description!=null&&(l.description=c.description),c.dependencies!=null&&(l.dependencies=c.dependencies),c.enabled!=null&&(l.enabled=c.enabled),o!=null&&(l.prompts=o),s!=null&&(l.variables=s),l}async function $(e,t,n=new Set){return Fe(await Se(e,t,n))}async function Ie(e,t){if(O(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await Se(e);return O(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await $(e);j(`Loaded ${n.tasks?.length??0} task(s)`,`info`),n.extends!=null&&n.extends!==``&&j(`Extended from: ${(Array.isArray(n.extends)?n.extends:[n.extends]).join(`, `)}`,`info`),n.prompts!=null&&n.prompts.length>0&&j(`Found ${n.prompts.length} top-level prompt(s)`,`info`),n.variables!=null&&n.variables.length>0&&j(`Found ${n.variables.length} top-level variable(s)`,`info`);let r={tasks:n.tasks??[]};return n.prompts!=null&&(r.prompts=n.prompts),n.variables!=null&&(r.variables=n.variables),n.enabled!=null&&(r.enabled=n.enabled),n.transformers!=null&&(r.transformers=n.transformers),r}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return I}});
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- const e=require(`./configurations-DJ1eNatp.cjs`);require(`./initial-config-CESipc-c.cjs`);const t=require(`./tasks-BiruGt8T.cjs`),n=require(`./validate-scaffoldfy-json-Bq2USY66.cjs`);require(`./scaffoldfy-config-validator-BvNnGMO1.cjs`);const r=require(`./src-BUTa4CXP.cjs`);exports.clearConfigurationCache=e.F,exports.clearPlugins=t.h,exports.createTaskPlugin=t.d,exports.displayTasksDiff=t.S,exports.executePluginTask=t.f,exports.getDeleteDiff=t.E,exports.getExecDiff=t.w,exports.getGitInitDiff=t.T,exports.getPlugin=t.g,exports.getPluginForTaskType=t.p,exports.getRegexReplaceDiff=t.O,exports.getRenameDiff=t.D,exports.getReplaceInFileDiff=t.k,exports.getTaskDiff=t.C,exports.getUpdateJsonDiff=t.A,exports.isPluginTaskType=t.m,exports.listPlugins=t._,exports.loadAndMergeConfiguration=e.t,exports.loadConfiguration=e.c,exports.loadTasksWithInheritance=e.n,exports.mergeConfigurations=e.r,exports.registerHooks=t.x,exports.registerPlugin=t.v,exports.runWithTasks=r.t,exports.unregisterPlugin=t.y,exports.validateScaffoldfyJsonFile=n.n;
1
+ const e=require(`./configurations-BC8PHmKl.cjs`);require(`./initial-config-CESipc-c.cjs`);const t=require(`./tasks-BbtxqKaa.cjs`),n=require(`./validate-scaffoldfy-json-CmI6S3fB.cjs`);require(`./scaffoldfy-config-validator-BvNnGMO1.cjs`);const r=require(`./src-lLYt4rM9.cjs`);exports.clearConfigurationCache=e.l,exports.clearPlugins=t.h,exports.createTaskPlugin=t.d,exports.displayTasksDiff=t.S,exports.executePluginTask=t.f,exports.getDeleteDiff=t.E,exports.getExecDiff=t.w,exports.getGitInitDiff=t.T,exports.getPlugin=t.g,exports.getPluginForTaskType=t.p,exports.getRegexReplaceDiff=t.O,exports.getRenameDiff=t.D,exports.getReplaceInFileDiff=t.k,exports.getTaskDiff=t.C,exports.getUpdateJsonDiff=t.A,exports.isPluginTaskType=t.m,exports.listPlugins=t._,exports.loadAndMergeConfiguration=e.t,exports.loadConfiguration=e.c,exports.loadTasksWithInheritance=e.n,exports.mergeConfigurations=e.r,exports.registerHooks=t.x,exports.registerPlugin=t.v,exports.runWithTasks=r.t,exports.unregisterPlugin=t.y,exports.validateScaffoldfyJsonFile=n.n;
package/dist/index.d.cts CHANGED
@@ -178,7 +178,7 @@ interface CurrentConfigurationContext {
178
178
  /**
179
179
  * Prompt type definitions for task-embedded prompts
180
180
  */
181
- type PromptType = 'input' | 'select' | 'confirm' | 'password' | 'number';
181
+ type PromptType = 'input' | 'select' | 'checkbox' | 'confirm' | 'password' | 'number';
182
182
  /**
183
183
  * Default value types for prompts
184
184
  * - 'static': Static value provided directly
@@ -289,11 +289,19 @@ interface SelectPrompt extends BasePrompt {
289
289
  }>;
290
290
  default?: DefaultValue<string | number | boolean>;
291
291
  }
292
+ interface CheckboxPrompt extends BasePrompt {
293
+ type: 'checkbox';
294
+ choices: Array<{
295
+ name: string;
296
+ value: string | number | boolean;
297
+ }>;
298
+ default?: DefaultValue<Array<string | number | boolean>>;
299
+ }
292
300
  interface ConfirmPrompt extends BasePrompt {
293
301
  type: 'confirm';
294
302
  default?: DefaultValue<boolean>;
295
303
  }
296
- type PromptDefinition = InputPrompt | NumberPrompt | SelectPrompt | ConfirmPrompt;
304
+ type PromptDefinition = InputPrompt | NumberPrompt | SelectPrompt | CheckboxPrompt | ConfirmPrompt;
297
305
  /**
298
306
  * Variable value configuration for defining optional global or task-scoped variables
299
307
  * Variables are similar to prompts but don't require user input - they can have static
@@ -581,4 +589,4 @@ declare function runWithTasks(customTasks: TaskDefinition[], options?: {
581
589
  transformers?: Transformer[] | undefined;
582
590
  }): Promise<void>;
583
591
  //#endregion
584
- export { type AppendConfig, BasePrompt, ConditionExpression, ConditionalConfig, ConditionalDefaultConfig, ConfirmPrompt, type CopyConfig, type CreateConfig, CurrentConfigurationContext, DefaultValue, DefaultValueConfig, DefaultValueType, type DeleteConfig, DynamicBooleanValue, EnabledValue, type ExecConfig, ExecFileRuntime, ExecFileValueConfig, ExecutableConfig, type GitInitConfig, InputPrompt, MergeStrategy, type MkdirConfig, type MoveConfig, NumberPrompt, PluginHooks, PromptDefinition, PromptType, type RegexReplaceConfig, type RenameConfig, type ReplaceInFileConfig, RollbackConfig, ScaffoldfyConfiguration, SelectPrompt, TaskDefinition, TaskPlugin, TaskType, type UpdateJsonConfig, VariableDefinition, type WriteConfig, clearConfigurationCache, clearPlugins, createTaskPlugin, displayTasksDiff, executePluginTask, getDeleteDiff, getExecDiff, getGitInitDiff, getPlugin, getPluginForTaskType, getRegexReplaceDiff, getRenameDiff, getReplaceInFileDiff, getTaskDiff, getUpdateJsonDiff, isPluginTaskType, listPlugins, loadAndMergeConfiguration, loadConfiguration, loadTasksWithInheritance, mergeConfigurations, registerHooks, registerPlugin, runWithTasks, unregisterPlugin, validateScaffoldfyJsonFile };
592
+ export { type AppendConfig, BasePrompt, CheckboxPrompt, ConditionExpression, ConditionalConfig, ConditionalDefaultConfig, ConfirmPrompt, type CopyConfig, type CreateConfig, CurrentConfigurationContext, DefaultValue, DefaultValueConfig, DefaultValueType, type DeleteConfig, DynamicBooleanValue, EnabledValue, type ExecConfig, ExecFileRuntime, ExecFileValueConfig, ExecutableConfig, type GitInitConfig, InputPrompt, MergeStrategy, type MkdirConfig, type MoveConfig, NumberPrompt, PluginHooks, PromptDefinition, PromptType, type RegexReplaceConfig, type RenameConfig, type ReplaceInFileConfig, RollbackConfig, ScaffoldfyConfiguration, SelectPrompt, TaskDefinition, TaskPlugin, TaskType, type UpdateJsonConfig, VariableDefinition, type WriteConfig, clearConfigurationCache, clearPlugins, createTaskPlugin, displayTasksDiff, executePluginTask, getDeleteDiff, getExecDiff, getGitInitDiff, getPlugin, getPluginForTaskType, getRegexReplaceDiff, getRenameDiff, getReplaceInFileDiff, getTaskDiff, getUpdateJsonDiff, isPluginTaskType, listPlugins, loadAndMergeConfiguration, loadConfiguration, loadTasksWithInheritance, mergeConfigurations, registerHooks, registerPlugin, runWithTasks, unregisterPlugin, validateScaffoldfyJsonFile };
package/dist/index.d.ts CHANGED
@@ -178,7 +178,7 @@ interface CurrentConfigurationContext {
178
178
  /**
179
179
  * Prompt type definitions for task-embedded prompts
180
180
  */
181
- type PromptType = 'input' | 'select' | 'confirm' | 'password' | 'number';
181
+ type PromptType = 'input' | 'select' | 'checkbox' | 'confirm' | 'password' | 'number';
182
182
  /**
183
183
  * Default value types for prompts
184
184
  * - 'static': Static value provided directly
@@ -289,11 +289,19 @@ interface SelectPrompt extends BasePrompt {
289
289
  }>;
290
290
  default?: DefaultValue<string | number | boolean>;
291
291
  }
292
+ interface CheckboxPrompt extends BasePrompt {
293
+ type: 'checkbox';
294
+ choices: Array<{
295
+ name: string;
296
+ value: string | number | boolean;
297
+ }>;
298
+ default?: DefaultValue<Array<string | number | boolean>>;
299
+ }
292
300
  interface ConfirmPrompt extends BasePrompt {
293
301
  type: 'confirm';
294
302
  default?: DefaultValue<boolean>;
295
303
  }
296
- type PromptDefinition = InputPrompt | NumberPrompt | SelectPrompt | ConfirmPrompt;
304
+ type PromptDefinition = InputPrompt | NumberPrompt | SelectPrompt | CheckboxPrompt | ConfirmPrompt;
297
305
  /**
298
306
  * Variable value configuration for defining optional global or task-scoped variables
299
307
  * Variables are similar to prompts but don't require user input - they can have static
@@ -581,4 +589,4 @@ declare function runWithTasks(customTasks: TaskDefinition[], options?: {
581
589
  transformers?: Transformer[] | undefined;
582
590
  }): Promise<void>;
583
591
  //#endregion
584
- export { type AppendConfig, BasePrompt, ConditionExpression, ConditionalConfig, ConditionalDefaultConfig, ConfirmPrompt, type CopyConfig, type CreateConfig, CurrentConfigurationContext, DefaultValue, DefaultValueConfig, DefaultValueType, type DeleteConfig, DynamicBooleanValue, EnabledValue, type ExecConfig, ExecFileRuntime, ExecFileValueConfig, ExecutableConfig, type GitInitConfig, InputPrompt, MergeStrategy, type MkdirConfig, type MoveConfig, NumberPrompt, PluginHooks, PromptDefinition, PromptType, type RegexReplaceConfig, type RenameConfig, type ReplaceInFileConfig, RollbackConfig, ScaffoldfyConfiguration, SelectPrompt, TaskDefinition, TaskPlugin, TaskType, type UpdateJsonConfig, VariableDefinition, type WriteConfig, clearConfigurationCache, clearPlugins, createTaskPlugin, displayTasksDiff, executePluginTask, getDeleteDiff, getExecDiff, getGitInitDiff, getPlugin, getPluginForTaskType, getRegexReplaceDiff, getRenameDiff, getReplaceInFileDiff, getTaskDiff, getUpdateJsonDiff, isPluginTaskType, listPlugins, loadAndMergeConfiguration, loadConfiguration, loadTasksWithInheritance, mergeConfigurations, registerHooks, registerPlugin, runWithTasks, unregisterPlugin, validateScaffoldfyJsonFile };
592
+ export { type AppendConfig, BasePrompt, CheckboxPrompt, ConditionExpression, ConditionalConfig, ConditionalDefaultConfig, ConfirmPrompt, type CopyConfig, type CreateConfig, CurrentConfigurationContext, DefaultValue, DefaultValueConfig, DefaultValueType, type DeleteConfig, DynamicBooleanValue, EnabledValue, type ExecConfig, ExecFileRuntime, ExecFileValueConfig, ExecutableConfig, type GitInitConfig, InputPrompt, MergeStrategy, type MkdirConfig, type MoveConfig, NumberPrompt, PluginHooks, PromptDefinition, PromptType, type RegexReplaceConfig, type RenameConfig, type ReplaceInFileConfig, RollbackConfig, ScaffoldfyConfiguration, SelectPrompt, TaskDefinition, TaskPlugin, TaskType, type UpdateJsonConfig, VariableDefinition, type WriteConfig, clearConfigurationCache, clearPlugins, createTaskPlugin, displayTasksDiff, executePluginTask, getDeleteDiff, getExecDiff, getGitInitDiff, getPlugin, getPluginForTaskType, getRegexReplaceDiff, getRenameDiff, getReplaceInFileDiff, getTaskDiff, getUpdateJsonDiff, isPluginTaskType, listPlugins, loadAndMergeConfiguration, loadConfiguration, loadTasksWithInheritance, mergeConfigurations, registerHooks, registerPlugin, runWithTasks, unregisterPlugin, validateScaffoldfyJsonFile };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{F as e,c as t,n,r,t as i}from"./configurations-BFx3CItg.js";import"./initial-config-Dt0jw4Vs.js";import{A as a,C as o,D as s,E as c,O as l,S as u,T as d,_ as f,d as p,f as m,g as h,h as g,k as _,m as v,p as y,v as b,w as x,x as S,y as C}from"./tasks-CMhsXaOx.js";import{n as w}from"./validate-scaffoldfy-json-gnb3COkM.js";import"./scaffoldfy-config-validator-D1iJBnRE.js";import{t as T}from"./src-uWkAarfL.js";export{e as clearConfigurationCache,g as clearPlugins,p as createTaskPlugin,u as displayTasksDiff,m as executePluginTask,c as getDeleteDiff,x as getExecDiff,d as getGitInitDiff,h as getPlugin,y as getPluginForTaskType,l as getRegexReplaceDiff,s as getRenameDiff,_ as getReplaceInFileDiff,o as getTaskDiff,a as getUpdateJsonDiff,v as isPluginTaskType,f as listPlugins,i as loadAndMergeConfiguration,t as loadConfiguration,n as loadTasksWithInheritance,r as mergeConfigurations,S as registerHooks,b as registerPlugin,T as runWithTasks,C as unregisterPlugin,w as validateScaffoldfyJsonFile};
1
+ import{c as e,l as t,n,r,t as i}from"./configurations-7FTBn2PH.js";import"./initial-config-Dt0jw4Vs.js";import{A as a,C as o,D as s,E as c,O as l,S as u,T as d,_ as f,d as p,f as m,g as h,h as g,k as _,m as v,p as y,v as b,w as x,x as S,y as C}from"./tasks-BDrjoNoH.js";import{n as w}from"./validate-scaffoldfy-json-D1NiHwO5.js";import"./scaffoldfy-config-validator-D1iJBnRE.js";import{t as T}from"./src-C5_fif4y.js";export{t as clearConfigurationCache,g as clearPlugins,p as createTaskPlugin,u as displayTasksDiff,m as executePluginTask,c as getDeleteDiff,x as getExecDiff,d as getGitInitDiff,h as getPlugin,y as getPluginForTaskType,l as getRegexReplaceDiff,s as getRenameDiff,_ as getReplaceInFileDiff,o as getTaskDiff,a as getUpdateJsonDiff,v as isPluginTaskType,f as listPlugins,i as loadAndMergeConfiguration,e as loadConfiguration,n as loadTasksWithInheritance,r as mergeConfigurations,S as registerHooks,b as registerPlugin,T as runWithTasks,C as unregisterPlugin,w as validateScaffoldfyJsonFile};
@@ -0,0 +1,4 @@
1
+ import{A as e,D as t,T as n,a as r,i,k as a,o}from"./configurations-7FTBn2PH.js";import{S as s,a as c,c as l,l as u,n as d,o as f,r as p,u as m}from"./tasks-BDrjoNoH.js";import h from"node:process";async function g(e,t){let n=e.prompts??[];if(n.length>0){let e=l(n);e.length>0&&(console.error(`❌ Prompt validation errors:`),e.forEach(e=>console.error(` - ${e}`)),h.exit(1));let r=await m(n,await u(n,t),t);Object.assign(t,r)}}async function _(e,t){let n=e.variables??[];if(n.length>0){let a=i(n);a.length>0&&(console.error(`❌ Variable validation errors:`),a.forEach(e=>console.error(` - ${e}`)),h.exit(1));let s=await o(n,await r(n,t,{skipConditional:!0}),t);Object.assign(t,s),await v(e,t)}}async function v(e,t){let n=e.variables??[];if(n.length===0)return;let i=n.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(i.length>0){let e=await o(i,await r(i,t),t);Object.assign(t,e)}}async function y(e,t){return await n(e.enabled,t)?(await _(e,t),await g(e,t),await v(e,t),await n(e.enabled,t)?!0:(a(`⊘ Config "${e.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(a(`⊘ Config "${e.name}" is disabled - skipping`),!1)}async function b(n,r,i={}){t(`Running configs with sequential variable/prompt resolution...`),t(`Total configs to process: ${n.length}`),t(`Registering built-in plugins...`),f();let o=[];console.log(``),a(`📋 Collecting input...`),console.log(``);for(let e=0;e<n.length;e++){let r=n[e];if(r==null)continue;let a=`=`.repeat(60);if(t(`\n${a}`),t(`Processing config ${e+1}/${n.length}: "${r.name}"`),t(a),t(`Current config keys: ${Object.keys(i).join(`, `)}`),await y(r,i)){let e=r.tasks??[];e.length>0&&(t(`Found ${e.length} task(s) in config "${r.name}" (will execute later)`),o.push(...e))}}if(t(`
2
+ 🔧 Validating and filtering all collected tasks...`),o.length===0){e(`No tasks found in any config`,`info`);return}console.log(``),e(`🛠️ Preparing tasks...`,`info`);let l=await p(o,i);if(console.log(``),e(`Found ${o.length} tasks (${l.length} enabled)`,`info`),e(`All tasks validated successfully`,`success`),l.length===0){e(`No enabled tasks to execute`,`info`);return}let u=d(l);if(r.dryRun){e(`
3
+ 🔍 Dry run - showing task changes...`,`info`),await s(u,i),e(`
4
+ 🔍 Dry run completed - no changes were made`,`info`),e(`Run without --dry-run to apply changes`,`info`);return}console.log(``),a(`⚙️ Executing tasks...`),console.log(``),await c(u,i,r)}export{b as runConfigurationSequentially};
@@ -0,0 +1,4 @@
1
+ const e=require(`./configurations-BC8PHmKl.cjs`),t=require(`./tasks-BbtxqKaa.cjs`);let n=require(`node:process`);n=e.R(n);async function r(e,r){let i=e.prompts??[];if(i.length>0){let e=t.c(i);e.length>0&&(console.error(`❌ Prompt validation errors:`),e.forEach(e=>console.error(` - ${e}`)),n.default.exit(1));let a=await t.u(i,await t.l(i,r),r);Object.assign(r,a)}}async function i(t,r){let i=t.variables??[];if(i.length>0){let o=e.i(i);o.length>0&&(console.error(`❌ Variable validation errors:`),o.forEach(e=>console.error(` - ${e}`)),n.default.exit(1));let s=await e.o(i,await e.a(i,r,{skipConditional:!0}),r);Object.assign(r,s),await a(t,r)}}async function a(t,n){let r=t.variables??[];if(r.length===0)return;let i=r.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(i.length>0){let t=await e.o(i,await e.a(i,n),n);Object.assign(n,t)}}async function o(t,n){return await e.T(t.enabled,n)?(await i(t,n),await r(t,n),await a(t,n),await e.T(t.enabled,n)?!0:(e.k(`⊘ Config "${t.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(e.k(`⊘ Config "${t.name}" is disabled - skipping`),!1)}async function s(n,r,i={}){e.D(`Running configs with sequential variable/prompt resolution...`),e.D(`Total configs to process: ${n.length}`),e.D(`Registering built-in plugins...`),t.o();let a=[];console.log(``),e.k(`📋 Collecting input...`),console.log(``);for(let t=0;t<n.length;t++){let r=n[t];if(r==null)continue;let s=`=`.repeat(60);if(e.D(`\n${s}`),e.D(`Processing config ${t+1}/${n.length}: "${r.name}"`),e.D(s),e.D(`Current config keys: ${Object.keys(i).join(`, `)}`),await o(r,i)){let t=r.tasks??[];t.length>0&&(e.D(`Found ${t.length} task(s) in config "${r.name}" (will execute later)`),a.push(...t))}}if(e.D(`
2
+ 🔧 Validating and filtering all collected tasks...`),a.length===0){e.A(`No tasks found in any config`,`info`);return}console.log(``),e.A(`🛠️ Preparing tasks...`,`info`);let s=await t.r(a,i);if(console.log(``),e.A(`Found ${a.length} tasks (${s.length} enabled)`,`info`),e.A(`All tasks validated successfully`,`success`),s.length===0){e.A(`No enabled tasks to execute`,`info`);return}let c=t.n(s);if(r.dryRun){e.A(`
3
+ 🔍 Dry run - showing task changes...`,`info`),await t.S(c,i),e.A(`
4
+ 🔍 Dry run completed - no changes were made`,`info`),e.A(`Run without --dry-run to apply changes`,`info`);return}console.log(``),e.k(`⚙️ Executing tasks...`),console.log(``),await t.a(c,i,r)}exports.runConfigurationSequentially=s;
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- const e=require(`../configurations-DJ1eNatp.cjs`),t=require(`../validate-scaffoldfy-json-Bq2USY66.cjs`);let n=require(`node:fs`);n=e.I(n);let r=require(`node:path`);r=e.I(r);let i=require(`node:process`);i=e.I(i);let a=require(`commander`);a=e.I(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.n(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(`
2
+ const e=require(`../configurations-BC8PHmKl.cjs`),t=require(`../validate-scaffoldfy-json-CmI6S3fB.cjs`);let n=require(`node:fs`);n=e.R(n);let r=require(`node:path`);r=e.R(r);let i=require(`node:process`);i=e.R(i);let a=require(`commander`);a=e.R(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.n(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
3
  ✅ All files validated successfully!`)}require(`url`).pathToFileURL(__filename).href===`file://${i.default.argv[1]}`&&s();
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import"../configurations-BFx3CItg.js";import{n as e}from"../validate-scaffoldfy-json-gnb3COkM.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(`
2
+ import"../configurations-7FTBn2PH.js";import{n as e}from"../validate-scaffoldfy-json-D1NiHwO5.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
3
  ✅ All files validated successfully!`)}import.meta.url===`file://${r.argv[1]}`&&o();export{};
@@ -1 +1 @@
1
- require(`../configurations-DJ1eNatp.cjs`);const e=require(`../validate-scaffoldfy-json-Bq2USY66.cjs`);require(`../scaffoldfy-config-validator-BvNnGMO1.cjs`),exports.displayValidationErrors=e.t,exports.validateScaffoldfyJsonFile=e.n,exports.validateTasksSchema=e.r;
1
+ require(`../configurations-BC8PHmKl.cjs`);const e=require(`../validate-scaffoldfy-json-CmI6S3fB.cjs`);require(`../scaffoldfy-config-validator-BvNnGMO1.cjs`),exports.displayValidationErrors=e.t,exports.validateScaffoldfyJsonFile=e.n,exports.validateTasksSchema=e.r;
@@ -1 +1 @@
1
- import"../configurations-BFx3CItg.js";import{n as e,r as t,t as n}from"../validate-scaffoldfy-json-gnb3COkM.js";import"../scaffoldfy-config-validator-D1iJBnRE.js";export{n as displayValidationErrors,e as validateScaffoldfyJsonFile,t as validateTasksSchema};
1
+ import"../configurations-7FTBn2PH.js";import{n as e,r as t,t as n}from"../validate-scaffoldfy-json-D1NiHwO5.js";import"../scaffoldfy-config-validator-D1iJBnRE.js";export{n as displayValidationErrors,e as validateScaffoldfyJsonFile,t as validateTasksSchema};
@@ -1 +1 @@
1
- require(`../configurations-DJ1eNatp.cjs`);const e=require(`../validate-scaffoldfy-json-Bq2USY66.cjs`);exports.displayValidationErrors=e.t,exports.validateScaffoldfyJsonFile=e.n,exports.validateTasksSchema=e.r;
1
+ require(`../configurations-BC8PHmKl.cjs`);const e=require(`../validate-scaffoldfy-json-CmI6S3fB.cjs`);exports.displayValidationErrors=e.t,exports.validateScaffoldfyJsonFile=e.n,exports.validateTasksSchema=e.r;
@@ -1 +1 @@
1
- import"../configurations-BFx3CItg.js";import{n as e,r as t,t as n}from"../validate-scaffoldfy-json-gnb3COkM.js";export{n as displayValidationErrors,e as validateScaffoldfyJsonFile,t as validateTasksSchema};
1
+ import"../configurations-7FTBn2PH.js";import{n as e,r as t,t as n}from"../validate-scaffoldfy-json-D1NiHwO5.js";export{n as displayValidationErrors,e as validateScaffoldfyJsonFile,t as validateTasksSchema};
@@ -0,0 +1 @@
1
+ import{A as e,C as t,D as n,M as r,N as i,T as a,a as o,i as s,k as c,o as l,s as u,w as d}from"./configurations-7FTBn2PH.js";import{t as f}from"./initial-config-Dt0jw4Vs.js";import{S as p,b as m,c as h,i as g,l as _,o as v,s as y,t as b,u as x}from"./tasks-BDrjoNoH.js";import{t as S}from"./validate-scaffoldfy-json-D1NiHwO5.js";import C from"node:process";async function w(w,T){let E=f();if(!await a(T.configEnabled,E,{lazy:!0})){c(`⊘ Template is disabled - skipping all execution`);return}T.transformers!==void 0&&T.transformers.length>0&&(n(`Registering ${T.transformers.length} transformer(s)...`),u.registerAll(T.transformers)),n(`Registering built-in plugins...`),v(),n(`Validating task configurations...`);let D=b(w);D.length>0&&(S(D),C.exit(1)),n(`All tasks validated successfully`);let O=w.filter(e=>d(e.enabled,f(),{lazy:!0}));n(`Resolving task dependencies...`);let k=g(O);n(`Sorted ${k.length} task(s) by dependencies`),c(`Welcome! Let's execute your tasks.`),T.dryRun&&i(`🔍 DRY RUN MODE - No changes will be made`),c(`This will execute your project tasks based on the defined configuration.`);let A=E,j=[...T.variables??[]];if(j.length>0){let t=s(j);t.length>0&&(e(`❌ Variable validation errors:`,`error`),t.forEach(t=>e(` - ${t}`,`error`)),C.exit(1)),n(`Resolving variable values...`);let r=await l(j,await o(j,A,{skipConditional:!0}),A);Object.assign(A,r),Object.keys(r).length>0&&(n(`Resolved ${Object.keys(r).length} variable(s)`),n(`Variable values: ${JSON.stringify(r)}`))}let M=T.prompts??[],N=[...M];if(N.length>0){let t=h(N);t.length>0&&(e(`❌ Prompt validation errors:`,`error`),t.forEach(t=>e(` - ${t}`,`error`)),C.exit(1)),n(`Resolving prompt default values...`);let r=await _(N,A);if(M.length>0){c(`📋 Collecting prompts (available to all tasks):`);let e=await x(M,r,A);Object.assign(A,e)}}if(j.length>0){let e=j.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(e.length>0){n(`Re-resolving conditional variables with prompt values...`);let t=await l(e,await o(e,A),A);Object.assign(A,t),Object.keys(t).length>0&&n(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await a(T.configEnabled,A)){c(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let P=[];for(let e of k)e.$configEnabled!=null&&!await a(e.$configEnabled,A)||await a(e.enabled,A)&&P.push(e);if(e(`${P.length} of ${k.length} task(s) enabled for execution`,`info`),T.dryRun){await p(P,A),c(`🔍 Dry run completed - no changes were made`),c(`Run without --dry-run to apply changes`);return}n(`Calling beforeAll hook...`),await m(`beforeAll`,A);let F=P.length,I=0,L=0,R=[],z=[];for(let e=0;e<P.length;e++){let r=P[e];r!=null&&(n(`Calling beforeTask hook for task: ${r.name}`),await m(`beforeTask`,r,A),await y(r,A,e+1,F,T.dryRun)?(I++,R.push(r.id),n(`Calling afterTask hook for task: ${r.name}`),await m(`afterTask`,r,A)):(await t(r.required,A)&&(L++,z.push(r.name)),n(`Calling onError hook for task: ${r.name}`),await m(`onError`,Error(`Task ${r.name} failed`),r),i(`⚠️ Task "${r.name}" failed, continuing with remaining tasks...`)))}L>0&&(e(`\n❌ Task execution completed with ${L} error(s)`,`error`),e(`Completed: ${I}/${F} tasks`,`info`),e(`Failed tasks: ${z.join(`, `)}`,`error`),C.exit(1)),n(`Calling afterAll hook...`),await m(`afterAll`,A),r(`✅ All tasks completed successfully!`),r(` Completed: ${I}/${F} tasks`)}const T=C.argv.includes(`--dry-run`),E=C.argv.includes(`--force`);async function D(t,n){try{await w(t,{dryRun:n?.dryRun??T,force:n?.force??E,configFilePath:n?.configFilePath??void 0,...n?.variables!=null&&{variables:n.variables},...n?.prompts!=null&&{prompts:n.prompts},...n?.configEnabled!=null&&{configEnabled:n.configEnabled},...n?.transformers!=null&&{transformers:n.transformers}})}catch(t){e(`❌ Task execution failed`,`error`),t instanceof Error?(e(`Error: ${t.message}`,`error`),C.env.DEBUG!=null&&console.error(t.stack)):console.error(t),C.exit(1)}}export{D as t};
@@ -0,0 +1 @@
1
+ const e=require(`./configurations-BC8PHmKl.cjs`),t=require(`./initial-config-CESipc-c.cjs`),n=require(`./tasks-BbtxqKaa.cjs`),r=require(`./validate-scaffoldfy-json-CmI6S3fB.cjs`);let i=require(`node:process`);i=e.R(i);async function a(a,o){let s=t.t();if(!await e.T(o.configEnabled,s,{lazy:!0})){e.k(`⊘ Template is disabled - skipping all execution`);return}o.transformers!==void 0&&o.transformers.length>0&&(e.D(`Registering ${o.transformers.length} transformer(s)...`),e.s.registerAll(o.transformers)),e.D(`Registering built-in plugins...`),n.o(),e.D(`Validating task configurations...`);let c=n.t(a);c.length>0&&(r.t(c),i.default.exit(1)),e.D(`All tasks validated successfully`);let l=a.filter(n=>e.w(n.enabled,t.t(),{lazy:!0}));e.D(`Resolving task dependencies...`);let u=n.i(l);e.D(`Sorted ${u.length} task(s) by dependencies`),e.k(`Welcome! Let's execute your tasks.`),o.dryRun&&e.N(`🔍 DRY RUN MODE - No changes will be made`),e.k(`This will execute your project tasks based on the defined configuration.`);let d=s,f=[...o.variables??[]];if(f.length>0){let t=e.i(f);t.length>0&&(e.A(`❌ Variable validation errors:`,`error`),t.forEach(t=>e.A(` - ${t}`,`error`)),i.default.exit(1)),e.D(`Resolving variable values...`);let n=await e.o(f,await e.a(f,d,{skipConditional:!0}),d);Object.assign(d,n),Object.keys(n).length>0&&(e.D(`Resolved ${Object.keys(n).length} variable(s)`),e.D(`Variable values: ${JSON.stringify(n)}`))}let p=o.prompts??[],m=[...p];if(m.length>0){let t=n.c(m);t.length>0&&(e.A(`❌ Prompt validation errors:`,`error`),t.forEach(t=>e.A(` - ${t}`,`error`)),i.default.exit(1)),e.D(`Resolving prompt default values...`);let r=await n.l(m,d);if(p.length>0){e.k(`📋 Collecting prompts (available to all tasks):`);let t=await n.u(p,r,d);Object.assign(d,t)}}if(f.length>0){let t=f.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(t.length>0){e.D(`Re-resolving conditional variables with prompt values...`);let n=await e.o(t,await e.a(t,d),d);Object.assign(d,n),Object.keys(n).length>0&&e.D(`Resolved ${Object.keys(n).length} conditional variable(s)`)}}if(!await e.T(o.configEnabled,d)){e.k(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let h=[];for(let t of u)t.$configEnabled!=null&&!await e.T(t.$configEnabled,d)||await e.T(t.enabled,d)&&h.push(t);if(e.A(`${h.length} of ${u.length} task(s) enabled for execution`,`info`),o.dryRun){await n.S(h,d),e.k(`🔍 Dry run completed - no changes were made`),e.k(`Run without --dry-run to apply changes`);return}e.D(`Calling beforeAll hook...`),await n.b(`beforeAll`,d);let g=h.length,_=0,v=0,y=[],b=[];for(let t=0;t<h.length;t++){let r=h[t];r!=null&&(e.D(`Calling beforeTask hook for task: ${r.name}`),await n.b(`beforeTask`,r,d),await n.s(r,d,t+1,g,o.dryRun)?(_++,y.push(r.id),e.D(`Calling afterTask hook for task: ${r.name}`),await n.b(`afterTask`,r,d)):(await e.C(r.required,d)&&(v++,b.push(r.name)),e.D(`Calling onError hook for task: ${r.name}`),await n.b(`onError`,Error(`Task ${r.name} failed`),r),e.N(`⚠️ Task "${r.name}" failed, continuing with remaining tasks...`)))}v>0&&(e.A(`\n❌ Task execution completed with ${v} error(s)`,`error`),e.A(`Completed: ${_}/${g} tasks`,`info`),e.A(`Failed tasks: ${b.join(`, `)}`,`error`),i.default.exit(1)),e.D(`Calling afterAll hook...`),await n.b(`afterAll`,d),e.M(`✅ All tasks completed successfully!`),e.M(` Completed: ${_}/${g} tasks`)}const o=i.default.argv.includes(`--dry-run`),s=i.default.argv.includes(`--force`);async function c(t,n){try{await a(t,{dryRun:n?.dryRun??o,force:n?.force??s,configFilePath:n?.configFilePath??void 0,...n?.variables!=null&&{variables:n.variables},...n?.prompts!=null&&{prompts:n.prompts},...n?.configEnabled!=null&&{configEnabled:n.configEnabled},...n?.transformers!=null&&{transformers:n.transformers}})}catch(t){e.A(`❌ Task execution failed`,`error`),t instanceof Error?(e.A(`Error: ${t.message}`,`error`),i.default.env.DEBUG!=null&&console.error(t.stack)):console.error(t),i.default.exit(1)}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
@@ -0,0 +1,23 @@
1
+ import{A as e,C as t,D as n,E as r,F as i,I as a,L as o,N as s,P as c,T as l,b as u,d,f,p as ee,s as p,u as te,v as ne}from"./configurations-7FTBn2PH.js";import m from"node:path";import h from"node:fs";import g from"node:process";import{promisify as _}from"node:util";import{execSync as v}from"node:child_process";import{checkbox as re,confirm as ie,input as ae,number as oe,password as se,select as ce}from"@inquirer/prompts";const le=_(h.readFile),y={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function b(e,t){switch(t){case`add`:return`${y.green}+ ${e}${y.reset}`;case`remove`:return`${y.red}- ${e}${y.reset}`;case`context`:return`${y.gray} ${e}${y.reset}`;default:return e}}function x(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(b(t,`context`)):(t!==void 0&&i.push(b(t,`remove`)),a!==void 0&&i.push(b(a,`add`)))}return i}function S(e){return h.existsSync(m.join(g.cwd(),e))}async function C(e){return le(m.join(g.cwd(),e),`utf-8`)}async function w(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=e.file;if(!S(n))return`${y.red}✗ File not found: ${e.file}${y.reset}`;try{let r=await C(n),i=JSON.parse(r),a={...i};function o(e){if(typeof e==`string`)return d(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(`.`)?u(i,t,e):i[t]=e}let s=JSON.stringify(a,null,2),c=JSON.stringify(i,null,2);if(s===c)return`${y.cyan}→ No changes${y.reset}`;let l=x(s,c);return`${y.blue}File: ${e.file}${y.reset}\n${l.join(`
4
+ `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function T(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=e.file;if(!S(n))return`${y.red}✗ File not found: ${e.file}${y.reset}`;try{let r=await C(n),i=new RegExp(e.pattern,e.flags??`g`),a=d(e.replacement,t),o=r.replace(i,a);if(r===o)return`${y.cyan}→ No matches found${y.reset}`;let s=x(r,o);return`${y.blue}File: ${e.file}${y.reset}\n${s.join(`
5
+ `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function E(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=e.file;if(!S(n))return`${y.red}✗ File not found: ${e.file}${y.reset}`;try{let r=await C(n),i=r;for(let{find:n,replace:i}of e.replacements){let e=d(n,t),a=d(i,t);r=r.replace(e,a)}if(i===r)return`${y.cyan}→ No changes${y.reset}`;let a=x(i,r);return`${y.blue}File: ${e.file}${y.reset}\n${a.join(`
6
+ `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}function D(e){return e.template!=null&&e.template!==``}function O(e){return e.templateFile!=null&&e.templateFile!==``}function ue(e){return e.endsWith(`.hbs`)}function k(e){let t=D(e),n=O(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 de(e){return D(e)?`inline template`:O(e)?`template file: ${e.templateFile}`:`no template source`}async function A(e,t,n,r={}){let{enableHandlebars:i=!0,sourceUrl:a=n?.$sourceUrl}=r,o=D(e),s=O(e);if(o)return d(e.template,t);if(s){let n=e.templateFile,r=i&&ue(n),o=await te(ne(n,a));return r?(await import(`handlebars`)).default.compile(o)(t):d(o,t)}throw Error(`No template content available`)}async function fe(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;if(e.template==null||e.template===``)return`${y.red}✗ No template content provided for file: ${e.file}${y.reset}`;let n=e.file,i=d(e.template,t);if(!S(n)){let t=i.split(`
7
+ `).slice(0,10).join(`
8
+ `),n=i.split(`
9
+ `).length>10;return`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created${y.reset}\n${y.gray}Content preview:${y.reset}\n${t}${n?`
10
+ ...`:``}`}try{let t=await C(n);if(t===i)return`${y.cyan}→ No changes${y.reset}`;let r=x(t,i);return`${y.blue}File: ${e.file}${y.reset}\n${r.join(`
11
+ `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function pe(e,t,n){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let i=e.file;if(S(i))return`${y.cyan}→ File already exists, would be skipped: ${e.file}${y.reset}`;try{if(D(e)){let r=await A(e,t,n),i=r.split(`
12
+ `).slice(0,10).join(`
13
+ `),a=r.split(`
14
+ `).length>10;return`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created${y.reset}\n${y.gray}Content preview:${y.reset}\n${i}${a?`
15
+ ...`:``}`}let r=de(e);return`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created from ${r}${y.reset}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function me(e,t,n){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.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 r=await A(a,t,n),o=r.split(`
16
+ `).slice(0,10).join(`
17
+ `),s=r.split(`
18
+ `).length>10;return S(i)?`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ Would append content${y.reset}\n${y.gray}Content preview:${y.reset}\n${o}${s?`
19
+ ...`:``}`:`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created with content${y.reset}\n${y.gray}Content preview:${y.reset}\n${o}${s?`
20
+ ...`:``}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}function j(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=e.paths.map(e=>d(e,t)).filter(e=>S(e));return n.length===0?`${y.cyan}→ No files/directories to delete${y.reset}`:`${y.red}Would delete:${y.reset}\n${n.map(e=>`${y.red} - ${e}${y.reset}`).join(`
21
+ `)}`}function M(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=d(e.from,t),i=d(e.to,t);return S(n)?S(i)?`${y.yellow}⚠ Destination already exists: ${i}${y.reset}\n${y.cyan}Would rename: ${n} → ${i}${y.reset}`:`${y.cyan}Would rename: ${n} → ${i}${y.reset}`:`${y.red}✗ Source not found: ${n}${y.reset}`}function he(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=d(e.from,t),i=d(e.to,t);return S(n)?S(i)?`${y.yellow}⚠ Destination already exists: ${i}${y.reset}\n${y.cyan}Would move: ${n} → ${i}${y.reset}`:`${y.cyan}Would move: ${n} → ${i}${y.reset}`:`${y.red}✗ Source not found: ${n}${y.reset}`}function ge(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=d(e.from,t),i=d(e.to,t);if(!S(n))return`${y.red}✗ Source not found: ${n}${y.reset}`;let a=`file`;return S(i)?`${y.yellow}⚠ Destination already exists: ${i}${y.reset}\n${y.cyan}Would copy ${a}: ${n} → ${i}${y.reset}`:`${y.cyan}Would copy ${a}: ${n} → ${i}${y.reset}`}function _e(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=d(e.path,t);return S(n)?`${y.cyan}→ Directory already exists: ${n}${y.reset}`:`${y.green}+ Would create directory: ${n}${y.reset}`}function N(e){if(e.condition!=null&&e.condition!==``)return`${y.yellow}⊘ Condition check skipped in dry-run${y.reset}`;let t=S(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${y.red}Would remove existing .git directory${y.reset}`),n.push(`${y.green}Would initialize git repository${y.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${y.green}Would create initial commit: "${t}"${y.reset}`)}return n.join(`
22
+ `)}function P(e,t){if(e.condition!=null&&e.condition!==``&&!r(e.condition,t))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let n=d(e.command,t),i=e.cwd==null?g.cwd():d(e.cwd,t);return`${y.yellow}Would execute:${y.reset}\n${y.cyan} Command: ${n}${y.reset}\n${y.cyan} Working directory: ${i}${y.reset}`}async function F(e,t){try{switch(e.type){case`update-json`:return await w(e.config,t);case`write`:return await fe(e.config,t);case`create`:return await pe(e.config,t,e);case`regex-replace`:return await T(e.config,t);case`replace-in-file`:return await E(e.config,t);case`delete`:return j(e.config,t);case`rename`:return M(e.config,t);case`move`:return he(e.config,t);case`copy`:return ge(e.config,t);case`append`:return await me(e.config,t,e);case`mkdir`:return _e(e.config,t);case`git-init`:return N(e.config);case`exec`:return P(e.config,t);case`exec-file`:return P(e.config,t);default:{let t=e.type;return`${y.yellow}⚠ Diff not available for task type: ${t}${y.reset}`}}}catch(e){return`${y.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function ve(e,t){console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`),console.log(`${y.blue} DRY RUN - Preview of changes${y.reset}`),console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`);for(let n of e){console.log(`${y.cyan}▶ Task: ${n.name}${y.reset}`),n.description!=null&&n.description!==``&&console.log(`${y.gray} ${n.description}${y.reset}`);let e=await F(n,t);console.log(e),console.log(`${y.gray}${`─`.repeat(55)}${y.reset}`)}console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`),console.log(`${y.yellow} No changes were applied (dry-run mode)${y.reset}`),console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`)}const I=new Map,L={},R=new Map;function ye(e){e.beforeAll!=null&&(L.beforeAll=e.beforeAll),e.afterAll!=null&&(L.afterAll=e.afterAll),e.beforeTask!=null&&(L.beforeTask=e.beforeTask),e.afterTask!=null&&(L.afterTask=e.afterTask),e.onError!=null&&(L.onError=e.onError)}async function z(t,...n){let r=L[t];if(r!=null)try{t===`beforeAll`||t===`afterAll`?await r(n[0]):(t===`beforeTask`||t===`afterTask`||t===`onError`)&&await r(n[0],n[1])}catch(n){e(`Error in ${t} hook: ${n instanceof Error?n.message:String(n)}`,`error`)}}function B(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(I.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(R.has(t)){let e=R.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}I.set(e.name,e);for(let t of e.taskTypes)R.set(t,e.name);n(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function be(e){let t=I.get(e);if(t!=null){for(let e of t.taskTypes)R.delete(e);I.delete(e)}}function xe(e){return I.get(e)}function Se(){return Array.from(I.keys())}function Ce(){I.clear(),R.clear()}function V(e){let t=R.get(e);if(t!=null)return I.get(t)}function H(e){return R.has(e)}async function U(e,t,n){let r=V(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function we(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}}}async function W(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 Te(n,r=new Map,a={}){let o={};if(n.length===0)return o;for(let s of n){if(s.$configEnabled!=null&&!await l(s.$configEnabled,{...a,...o}))continue;let n={...a,...o};if(!await l(s.enabled,n)){o[s.id]=void 0;continue}try{let a,c=r.get(s.id);switch(s.default!==void 0&&(c=await W(s.default,s.id,n,s)),c!==void 0&&s.transformers!==void 0&&(c=await p.apply(s.transformers,c,n)),s.type){case`input`:{let r={message:s.message};c!==void 0&&(r.default=String(c));let o=await t(s.required,n);if(o!==void 0&&(r.required=o),a=await ae(r),o&&(a==null||typeof a==`string`&&a.trim()===``))throw e(`${s.message} is required`,`error`),i.required(s.id);break}case`password`:if(a=await se({message:s.message,mask:`*`}),await t(s.required,n)&&(a==null||typeof a==`string`&&a.trim()===``))throw e(`${s.message} is required`,`error`),i.required(s.id);break;case`number`:{let r={message:s.message};c!==void 0&&(r.default=Number(c));let o=await t(s.required,n);if(o!==void 0&&(r.required=o),s.min!==void 0&&(r.min=s.min),s.max!==void 0&&(r.max=s.max),a=await oe(r),o&&a==null)throw e(`${s.message} is required`,`error`),i.required(s.id);break}case`select`:{let e={message:s.message,choices:s.choices.map(e=>({name:e.name,value:e.value}))};c!==void 0&&(e.default=c),a=await ce(e);break}case`checkbox`:{let e={message:s.message,choices:s.choices.map(e=>({name:e.name,value:e.value}))};c!==void 0&&(e.default=c);let r=await t(s.required,n);r!==void 0&&(e.required=r),a=await re(e);break}case`confirm`:{let e=c===void 0?!1:!!c;a=await ie({message:s.message,default:e});break}default:throw e(`Unknown prompt type: ${s.type}`,`error`),i.unknownType(s.type)}s.transformers!==void 0&&(c!==void 0&&(a===c||String(a)===String(c))||(a=await p.apply(s.transformers,a,{...n,...o}))),o[s.id]=a}catch(t){throw t instanceof Error&&e(`Failed to collect prompt "${s.id}": ${t.message}`,`error`),t}}return o}async function Ee(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await W(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function De(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.type===`checkbox`){r.choices.length===0&&t.push(`${r.type===`select`?`Select`:`Checkbox`} prompt "${r.id}" must have at least one choice`);for(let e of r.choices)(!e.name||e.name.trim()===``)&&t.push(`${r.type===`select`?`Select`:`Checkbox`} prompt "${r.id}" has a choice with empty name`),e.value===void 0&&t.push(`${r.type===`select`?`Select`:`Checkbox`} prompt "${r.id}" has a choice with undefined value`)}r.type===`number`&&r.min!==void 0&&r.max!==void 0&&r.min>r.max&&t.push(`Number prompt "${r.id}" has min greater than max`)}return t}const G=_(h.appendFile),Oe=_(h.readFile),ke=_(h.stat);async function Ae(t,n,i){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping append task`,`info`);return}let a=m.join(g.cwd(),d(t.file,n)),o={};t.content==null?t.template!=null&&(o.template=t.template):o.template=t.content,t.templateFile!=null&&(o.templateFile=t.templateFile);let s=k(o);if(!s.isValid)throw s.error?.includes(`cannot have both`)?c.templateHasBothTemplateAndFile():c.templateMissingTemplateOrFile();let l=await A(o,n,i),u=!1,f=!1;try{await ke(a),u=!0;let e=await Oe(a,`utf-8`);e.length>0&&!e.endsWith(`
23
+ `)&&(f=t.newline!==!1)}catch{}u&&f?await G(a,`\n${l}`):await G(a,l),e(`Appended content to ${t.file}`,`success`)}const je={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await Ae(e.config,t,e)}},K=_(h.copyFile),Me=_(h.stat),q=_(h.mkdir),Ne=_(h.readdir);async function J(e,t){await q(t,{recursive:!0});let n=await Ne(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=m.join(e,n.name),i=m.join(t,n.name);n.isDirectory()?await J(r,i):await K(r,i)}))}async function Pe(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping copy task`,`info`);return}let i=m.join(g.cwd(),d(t.from,n)),a=m.join(g.cwd(),d(t.to,n)),o;try{o=await Me(i)}catch{e(`Source path does not exist: ${i}`,`warn`);return}await q(m.dirname(a),{recursive:!0}),o.isDirectory()?(await J(i,a),e(`Copied directory ${t.from} to ${t.to}`,`success`)):(await K(i,a),e(`Copied file ${t.from} to ${t.to}`,`success`))}const Fe={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Pe(e.config,t)}},Ie=_(h.writeFile);async function Le(t,n,i){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping create task`,`info`);return}let a=d(t.file,n),o=m.join(g.cwd(),a);if(h.existsSync(o)){e(`File already exists, skipping: ${a}`,`info`);return}let s=k(t);if(!s.isValid)throw s.error?.includes(`cannot have both`)?c.createHasBothTemplateAndFile():c.createMissingTemplateOrFile();let l=await A(t,n,i),u=m.dirname(o);h.existsSync(u)||h.mkdirSync(u,{recursive:!0}),await Ie(o,l),e(`Created file: ${a}`,`success`)}const Re={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Le(e.config,t,e)}};async function ze(t,n){let{paths:i,condition:a}=t;if(a!=null&&a!==``){if(!n){e(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!r(a,n)){e(`Condition not met, skipping deletion`,`info`);return}}for(let e of i){let t=n==null?e:d(e,n),r=m.join(g.cwd(),t);h.existsSync(r)&&h.rmSync(r,{recursive:!0,force:!0})}}const Be={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await ze(e.config,t)}};async function Ve(e,t,n){e.condition!=null&&e.condition!==``&&!r(e.condition,t)||await ee({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 He={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ve(e.config,t,e)}};async function Ue(t,n){if(t.condition!=null&&t.condition!==``){if(!n){e(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!r(t.condition,n)){e(`Condition not met, skipping exec task`,`info`);return}}let i=t.cwd==null?g.cwd():m.join(g.cwd(),t.cwd);v(t.command,{cwd:i,stdio:`inherit`})}const We={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Ue(e.config,t)}};async function Ge(t,n){if(t.condition!=null&&t.condition!==``){if(!n){e(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!r(t.condition,n)){e(`Condition not met, skipping git-init task`,`info`);return}}if(t.removeExisting){let e=m.join(g.cwd(),`.git`);h.existsSync(e)&&h.rmSync(e,{recursive:!0,force:!0})}if(v(`git init`,{stdio:`inherit`}),t.initialCommit){let e=t.message??`Initial commit`;v(`git add .`,{stdio:`inherit`}),v(`git commit -m "${e}"`,{stdio:`inherit`})}}const Ke={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t)}},qe=_(h.mkdir);async function Je(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping mkdir task`,`info`);return}await qe(m.join(g.cwd(),d(t.path,n)),{recursive:!0}),e(`Created directory: ${t.path}`,`success`)}const Ye={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Je(e.config,t)}},Xe=_(h.rename),Ze=_(h.stat),Qe=_(h.mkdir);async function $e(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping move task`,`info`);return}let i=m.join(g.cwd(),d(t.from,n)),a=m.join(g.cwd(),d(t.to,n));try{await Ze(i)}catch{e(`Source path does not exist: ${i}`,`warn`);return}await Qe(m.dirname(a),{recursive:!0}),await Xe(i,a),e(`Moved ${t.from} to ${t.to}`,`success`)}const et={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t)}},tt=_(h.readFile),nt=_(h.writeFile);async function rt(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping regex-replace task`,`info`);return}let i=m.join(g.cwd(),d(t.file,n)),{pattern:a}=t,o=t.flags??``,s=t.replacement||``,c=await tt(i,`utf-8`),l=new RegExp(a,o);c=c.replace(l,d(s,n)),await nt(i,c)}const it={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await rt(e.config,t)}},at=_(h.rename);async function ot(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping rename task`,`info`);return}let i=m.join(g.cwd(),d(t.from,n)),a=m.join(g.cwd(),d(t.to,n));if(!h.existsSync(i)){e(`Source path does not exist: ${i}`,`warn`);return}await at(i,a)}const st={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await ot(e.config,t)}},ct=_(h.readFile),lt=_(h.writeFile);async function ut(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping replace-in-file task`,`info`);return}let i=m.join(g.cwd(),d(t.file,n)),{replacements:a}=t;if(!h.existsSync(i)){e(`File not found: ${i}, skipping`,`warn`);return}let o=await ct(i,`utf-8`);for(let{find:e,replace:t}of a){let r=d(t,n);o=o.replace(new RegExp(e,`gu`),r)}await lt(i,o)}const dt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await ut(e.config,t)}},ft=_(h.readFile),pt=_(h.writeFile);async function mt(t,n){if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping update-json task`,`info`);return}let i=m.join(g.cwd(),d(t.file,n)),{updates:a}=t,o=await ft(i,`utf-8`),s=JSON.parse(o);function c(e){if(typeof e==`string`)return d(e,n);if(Array.isArray(e))return e.map(e=>c(e));if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=c(r);return t}return e}for(let[e,t]of Object.entries(a)){let n=c(t);e.includes(`.`)?u(s,e,n):s[e]=n}await pt(i,`${JSON.stringify(s,null,2)}\n`)}const ht={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await mt(e.config,t)}},gt=_(h.writeFile);async function Y(t,n,i){let{allowCreate:a=!0}=t;if(t.condition!=null&&t.condition!==``&&!r(t.condition,n)){e(`Condition not met, skipping write task`,`info`);return}let o=d(t.file,n),s=m.join(g.cwd(),o);if(!h.existsSync(s)){if(a===!1)throw Error(`Write task failed: file does not exist (${o})`);e(`File not found, creating new file: ${o}`,`info`)}let l=k(t);if(!l.isValid)throw l.error?.includes(`cannot have both`)?c.templateHasBothTemplateAndFile():c.templateMissingTemplateOrFile();let u=await A(t,n,i),f=m.dirname(s);h.existsSync(f)||h.mkdirSync(f,{recursive:!0}),await gt(s,u)}const _t={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await Y(e.config,t,e)}};function X(){H(`update-json`)||(B(ht),B(_t),B(Re),B(it),B(dt),B(Be),B(st),B(Ke),B(We),B(He),B(et),B(Fe),B(je),B(Ye))}async function vt(t,n,r=!1){if(X(),r){e(`[DRY RUN] Would execute: ${t.name}`,`info`);return}if(H(t.type)){await U(t,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${t.type}`)}async function Z(t,n,r,i,a=!1){try{return e(`[${r}/${i}] Running: ${t.name}...`,`info`),await vt(t,n,a),e(`[${r}/${i}] Completed: ${t.name}...`,`success`),!0}catch(n){return e(`Failed: ${t.name}`,`error`),n instanceof Error&&(e(` Reason: ${n.message}`,`error`),n.stack!=null&&g.env.DEBUG!=null&&console.error(n.stack)),!1}}async function yt(n,r,i){await z(`beforeAll`,r);let a=0,o=0,c=[];for(let e=0;e<n.length;e++){let l=n[e];l!=null&&(await z(`beforeTask`,l,r),await Z(l,r,e+1,n.length,i.dryRun)?(a++,await z(`afterTask`,l,r)):(await t(l.required,r)&&(o++,c.push(l.name)),await z(`onError`,Error(`Task ${l.name} failed`),l),s(`⚠️ Task "${l.name}" failed, continuing with remaining tasks...`)))}await z(`afterAll`,r),o>0&&(e(`\n❌ Task execution completed with ${o} error(s)`,`error`),e(`Completed: ${a}/${n.length} tasks`,`info`),e(`Failed tasks: ${c.join(`, `)}`,`error`),g.exit(1)),e(`Completed: ${a}/${n.length} tasks`,`success`)}function Q(e){let t=[],n=new Set,r=new Set,i=new Map(e.map(e=>[e.id,e]));function s(e){if(n.has(e))return;if(r.has(e))throw o.forTaskDependency(e);r.add(e);let c=i.get(e);if(!c)throw a.forId(e);if(c.dependencies)for(let e of c.dependencies)s(e);r.delete(e),n.add(e),t.push(c)}for(let t of e)n.has(t.id)||s(t.id);return t}function bt(e){let t=[],n=e.config,r=typeof n.template==`string`?n.template:void 0,i=typeof n.templateFile==`string`?n.templateFile:void 0,a=k({...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}async function xt(e,t){let n=$(e);n.length>0&&(console.error(`❌ Task validation errors:`),n.forEach(e=>console.error(` - ${e}`)),g.exit(1));let r=[];for(let n of e)await l(n.enabled,t)&&r.push(n);return r}function St(e){return Q(e)}function $(e){let t=[];for(let n of e)if(!H(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=bt(n);t.push(...e)}return t}export{w as A,F as C,M as D,j as E,T as O,ve as S,N as T,Se as _,yt as a,z as b,De as c,we as d,U as f,xe as g,Ce as h,Q as i,E as k,Ee as l,H as m,St as n,X as o,V as p,xt as r,Z as s,$ as t,Te as u,B as v,P as w,ye as x,be as y};
@@ -1,23 +1,23 @@
1
- const e=require(`./configurations-DJ1eNatp.cjs`);let t=require(`node:fs`);t=e.I(t);let n=require(`node:path`);n=e.I(n);let r=require(`node:process`);r=e.I(r);let i=require(`node:util`);i=e.I(i);let a=require(`node:child_process`);a=e.I(a);let o=require(`@inquirer/prompts`);o=e.I(o);const s=(0,i.promisify)(t.default.readFile),c=2,l=10,u=55,d={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function f(e,t){switch(t){case`add`:return`${d.green}+ ${e}${d.reset}`;case`remove`:return`${d.red}- ${e}${d.reset}`;case`context`:return`${d.gray} ${e}${d.reset}`;default:return e}}function p(e,t){let n=e.split(`
1
+ const e=require(`./configurations-BC8PHmKl.cjs`);let t=require(`node:fs`);t=e.R(t);let n=require(`node:path`);n=e.R(n);let r=require(`node:process`);r=e.R(r);let i=require(`node:util`);i=e.R(i);let a=require(`node:child_process`);a=e.R(a);let o=require(`@inquirer/prompts`);o=e.R(o);const s=(0,i.promisify)(t.default.readFile),c=2,l=10,u=55,d={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function f(e,t){switch(t){case`add`:return`${d.green}+ ${e}${d.reset}`;case`remove`:return`${d.red}- ${e}${d.reset}`;case`context`:return`${d.gray} ${e}${d.reset}`;default:return e}}function p(e,t){let n=e.split(`
2
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(f(t,`context`)):(t!==void 0&&i.push(f(t,`remove`)),a!==void 0&&i.push(f(a,`add`)))}return i}function m(e){return t.default.existsSync(n.default.join(r.default.cwd(),e))}async function h(e){return s(n.default.join(r.default.cwd(),e),`utf-8`)}async function g(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.file;if(!m(r))return`${d.red}✗ File not found: ${t.file}${d.reset}`;try{let i=await h(r),a=JSON.parse(i),o={...a};function s(t){if(typeof t==`string`)return e.u(t,n);if(Array.isArray(t))return t.map(e=>s(e));if(typeof t==`object`&&t){let e={};for(let[n,r]of Object.entries(t))e[n]=s(r);return e}return t}for(let[n,r]of Object.entries(t.updates)){let t=s(r);n.includes(`.`)?e._(a,n,t):a[n]=t}let c=JSON.stringify(o,null,2),l=JSON.stringify(a,null,2);if(c===l)return`${d.cyan}→ No changes${d.reset}`;let u=p(c,l);return`${d.blue}File: ${t.file}${d.reset}\n${u.join(`
4
- `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function _(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.file;if(!m(r))return`${d.red}✗ File not found: ${t.file}${d.reset}`;try{let i=await h(r),a=new RegExp(t.pattern,t.flags??`g`),o=e.u(t.replacement,n),s=i.replace(a,o);if(i===s)return`${d.cyan}→ No matches found${d.reset}`;let c=p(i,s);return`${d.blue}File: ${t.file}${d.reset}\n${c.join(`
5
- `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function v(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.file;if(!m(r))return`${d.red}✗ File not found: ${t.file}${d.reset}`;try{let i=await h(r),a=i;for(let{find:r,replace:a}of t.replacements){let t=e.u(r,n),o=e.u(a,n);i=i.replace(t,o)}if(a===i)return`${d.cyan}→ No changes${d.reset}`;let o=p(a,i);return`${d.blue}File: ${t.file}${d.reset}\n${o.join(`
6
- `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}function y(e){return e.template!=null&&e.template!==``}function b(e){return e.templateFile!=null&&e.templateFile!==``}function ee(e){return e.endsWith(`.hbs`)}function x(e){let t=y(e),n=b(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 te(e){return y(e)?`inline template`:b(e)?`template file: ${e.templateFile}`:`no template source`}async function S(t,n,r,i={}){let{enableHandlebars:a=!0,sourceUrl:o=r?.$sourceUrl}=i,s=y(t),c=b(t);if(s)return e.u(t.template,n);if(c){let r=t.templateFile,i=a&&ee(r),s=await e.l(e.h(r,o));return i?(await import(`handlebars`)).default.compile(s)(n):e.u(s,n)}throw Error(`No template content available`)}async function C(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;if(t.template==null||t.template===``)return`${d.red}✗ No template content provided for file: ${t.file}${d.reset}`;let r=t.file,i=e.u(t.template,n);if(!m(r)){let e=i.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(f(t,`context`)):(t!==void 0&&i.push(f(t,`remove`)),a!==void 0&&i.push(f(a,`add`)))}return i}function m(e){return t.default.existsSync(n.default.join(r.default.cwd(),e))}async function h(e){return s(n.default.join(r.default.cwd(),e),`utf-8`)}async function g(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.file;if(!m(r))return`${d.red}✗ File not found: ${t.file}${d.reset}`;try{let i=await h(r),a=JSON.parse(i),o={...a};function s(t){if(typeof t==`string`)return e.d(t,n);if(Array.isArray(t))return t.map(e=>s(e));if(typeof t==`object`&&t){let e={};for(let[n,r]of Object.entries(t))e[n]=s(r);return e}return t}for(let[n,r]of Object.entries(t.updates)){let t=s(r);n.includes(`.`)?e.b(a,n,t):a[n]=t}let c=JSON.stringify(o,null,2),l=JSON.stringify(a,null,2);if(c===l)return`${d.cyan}→ No changes${d.reset}`;let u=p(c,l);return`${d.blue}File: ${t.file}${d.reset}\n${u.join(`
4
+ `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function _(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.file;if(!m(r))return`${d.red}✗ File not found: ${t.file}${d.reset}`;try{let i=await h(r),a=new RegExp(t.pattern,t.flags??`g`),o=e.d(t.replacement,n),s=i.replace(a,o);if(i===s)return`${d.cyan}→ No matches found${d.reset}`;let c=p(i,s);return`${d.blue}File: ${t.file}${d.reset}\n${c.join(`
5
+ `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function v(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.file;if(!m(r))return`${d.red}✗ File not found: ${t.file}${d.reset}`;try{let i=await h(r),a=i;for(let{find:r,replace:a}of t.replacements){let t=e.d(r,n),o=e.d(a,n);i=i.replace(t,o)}if(a===i)return`${d.cyan}→ No changes${d.reset}`;let o=p(a,i);return`${d.blue}File: ${t.file}${d.reset}\n${o.join(`
6
+ `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}function y(e){return e.template!=null&&e.template!==``}function b(e){return e.templateFile!=null&&e.templateFile!==``}function ee(e){return e.endsWith(`.hbs`)}function x(e){let t=y(e),n=b(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 te(e){return y(e)?`inline template`:b(e)?`template file: ${e.templateFile}`:`no template source`}async function S(t,n,r,i={}){let{enableHandlebars:a=!0,sourceUrl:o=r?.$sourceUrl}=i,s=y(t),c=b(t);if(s)return e.d(t.template,n);if(c){let r=t.templateFile,i=a&&ee(r),s=await e.u(e.v(r,o));return i?(await import(`handlebars`)).default.compile(s)(n):e.d(s,n)}throw Error(`No template content available`)}async function C(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;if(t.template==null||t.template===``)return`${d.red}✗ No template content provided for file: ${t.file}${d.reset}`;let r=t.file,i=e.d(t.template,n);if(!m(r)){let e=i.split(`
7
7
  `).slice(0,10).join(`
8
8
  `),n=i.split(`
9
9
  `).length>10;return`${d.blue}File: ${t.file}${d.reset}\n${d.green}+ New file would be created${d.reset}\n${d.gray}Content preview:${d.reset}\n${e}${n?`
10
10
  ...`:``}`}try{let e=await h(r);if(e===i)return`${d.cyan}→ No changes${d.reset}`;let n=p(e,i);return`${d.blue}File: ${t.file}${d.reset}\n${n.join(`
11
- `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function w(t,n,r){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=t.file;if(m(i))return`${d.cyan}→ File already exists, would be skipped: ${t.file}${d.reset}`;try{if(y(t)){let e=await S(t,n,r),i=e.split(`
11
+ `)}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function w(t,n,r){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=t.file;if(m(i))return`${d.cyan}→ File already exists, would be skipped: ${t.file}${d.reset}`;try{if(y(t)){let e=await S(t,n,r),i=e.split(`
12
12
  `).slice(0,10).join(`
13
13
  `),a=e.split(`
14
14
  `).length>10;return`${d.blue}File: ${t.file}${d.reset}\n${d.green}+ New file would be created${d.reset}\n${d.gray}Content preview:${d.reset}\n${i}${a?`
15
- ...`:``}`}let e=te(t);return`${d.blue}File: ${t.file}${d.reset}\n${d.green}+ New file would be created from ${e}${d.reset}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function T(t,n,r){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=t.file,a={};t.content==null?t.template!=null&&(a.template=t.template):a.template=t.content,t.templateFile!=null&&(a.templateFile=t.templateFile);try{let e=await S(a,n,r),o=e.split(`
15
+ ...`:``}`}let e=te(t);return`${d.blue}File: ${t.file}${d.reset}\n${d.green}+ New file would be created from ${e}${d.reset}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function T(t,n,r){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=t.file,a={};t.content==null?t.template!=null&&(a.template=t.template):a.template=t.content,t.templateFile!=null&&(a.templateFile=t.templateFile);try{let e=await S(a,n,r),o=e.split(`
16
16
  `).slice(0,10).join(`
17
17
  `),s=e.split(`
18
18
  `).length>10;return m(i)?`${d.blue}File: ${t.file}${d.reset}\n${d.green}+ Would append content${d.reset}\n${d.gray}Content preview:${d.reset}\n${o}${s?`
19
19
  ...`:``}`:`${d.blue}File: ${t.file}${d.reset}\n${d.green}+ New file would be created with content${d.reset}\n${d.gray}Content preview:${d.reset}\n${o}${s?`
20
- ...`:``}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}function E(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.paths.map(t=>e.u(t,n)).filter(e=>m(e));return r.length===0?`${d.cyan}→ No files/directories to delete${d.reset}`:`${d.red}Would delete:${d.reset}\n${r.map(e=>`${d.red} - ${e}${d.reset}`).join(`
21
- `)}`}function D(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.u(t.from,n),i=e.u(t.to,n);return m(r)?m(i)?`${d.yellow}⚠ Destination already exists: ${i}${d.reset}\n${d.cyan}Would rename: ${r} → ${i}${d.reset}`:`${d.cyan}Would rename: ${r} → ${i}${d.reset}`:`${d.red}✗ Source not found: ${r}${d.reset}`}function ne(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.u(t.from,n),i=e.u(t.to,n);return m(r)?m(i)?`${d.yellow}⚠ Destination already exists: ${i}${d.reset}\n${d.cyan}Would move: ${r} → ${i}${d.reset}`:`${d.cyan}Would move: ${r} → ${i}${d.reset}`:`${d.red}✗ Source not found: ${r}${d.reset}`}function re(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.u(t.from,n),i=e.u(t.to,n);if(!m(r))return`${d.red}✗ Source not found: ${r}${d.reset}`;let a=`file`;return m(i)?`${d.yellow}⚠ Destination already exists: ${i}${d.reset}\n${d.cyan}Would copy ${a}: ${r} → ${i}${d.reset}`:`${d.cyan}Would copy ${a}: ${r} → ${i}${d.reset}`}function ie(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.u(t.path,n);return m(r)?`${d.cyan}→ Directory already exists: ${r}${d.reset}`:`${d.green}+ Would create directory: ${r}${d.reset}`}function O(e){if(e.condition!=null&&e.condition!==``)return`${d.yellow}⊘ Condition check skipped in dry-run${d.reset}`;let t=m(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${d.red}Would remove existing .git directory${d.reset}`),n.push(`${d.green}Would initialize git repository${d.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${d.green}Would create initial commit: "${t}"${d.reset}`)}return n.join(`
22
- `)}function k(t,n){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=e.u(t.command,n),a=t.cwd==null?r.default.cwd():e.u(t.cwd,n);return`${d.yellow}Would execute:${d.reset}\n${d.cyan} Command: ${i}${d.reset}\n${d.cyan} Working directory: ${a}${d.reset}`}async function A(e,t){try{switch(e.type){case`update-json`:return await g(e.config,t);case`write`:return await C(e.config,t);case`create`:return await w(e.config,t,e);case`regex-replace`:return await _(e.config,t);case`replace-in-file`:return await v(e.config,t);case`delete`:return E(e.config,t);case`rename`:return D(e.config,t);case`move`:return ne(e.config,t);case`copy`:return re(e.config,t);case`append`:return await T(e.config,t,e);case`mkdir`:return ie(e.config,t);case`git-init`:return O(e.config);case`exec`:return k(e.config,t);case`exec-file`:return k(e.config,t);default:{let t=e.type;return`${d.yellow}⚠ Diff not available for task type: ${t}${d.reset}`}}}catch(e){return`${d.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function j(e,t){console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`),console.log(`${d.blue} DRY RUN - Preview of changes${d.reset}`),console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`);for(let n of e){console.log(`${d.cyan}▶ Task: ${n.name}${d.reset}`),n.description!=null&&n.description!==``&&console.log(`${d.gray} ${n.description}${d.reset}`);let e=await A(n,t);console.log(e),console.log(`${d.gray}${`─`.repeat(55)}${d.reset}`)}console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`),console.log(`${d.yellow} No changes were applied (dry-run mode)${d.reset}`),console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`)}const M=new Map,N={},P=new Map;function ae(e){e.beforeAll!=null&&(N.beforeAll=e.beforeAll),e.afterAll!=null&&(N.afterAll=e.afterAll),e.beforeTask!=null&&(N.beforeTask=e.beforeTask),e.afterTask!=null&&(N.afterTask=e.afterTask),e.onError!=null&&(N.onError=e.onError)}async function F(t,...n){let r=N[t];if(r!=null)try{t===`beforeAll`||t===`afterAll`?await r(n[0]):(t===`beforeTask`||t===`afterTask`||t===`onError`)&&await r(n[0],n[1])}catch(n){e.D(`Error in ${t} hook: ${n instanceof Error?n.message:String(n)}`,`error`)}}function I(t){if(t.name==null||t.name===``)throw TypeError(`Plugin name is required`);if(!Array.isArray(t.taskTypes)||t.taskTypes.length===0)throw TypeError(`Plugin ${t.name} must define at least one task type`);if(typeof t.execute!=`function`)throw TypeError(`Plugin ${t.name} must provide an execute function`);if(M.has(t.name))throw TypeError(`Plugin ${t.name} is already registered`);for(let e of t.taskTypes)if(P.has(e)){let t=P.get(e);throw TypeError(`Task type "${e}" is already registered by plugin "${t}"`)}M.set(t.name,t);for(let e of t.taskTypes)P.set(e,t.name);e.w(`Registered plugin: ${t.name}${t.version==null?``:` v${t.version}`}`)}function oe(e){let t=M.get(e);if(t!=null){for(let e of t.taskTypes)P.delete(e);M.delete(e)}}function se(e){return M.get(e)}function ce(){return Array.from(M.keys())}function le(){M.clear(),P.clear()}function L(e){let t=P.get(e);if(t!=null)return M.get(t)}function R(e){return P.has(e)}async function z(e,t,n){let r=L(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function B(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}}}async function V(t,n,r,i){if(t!==void 0)return e.d(t,{id:n,contextType:`Prompt`,...r!=null&&{context:r},...i?.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}})}async function H(t,n=new Map,r={}){let i={};if(t.length===0)return i;for(let a of t){if(a.$configEnabled!=null&&!await e.S(a.$configEnabled,{...r,...i}))continue;let t={...r,...i};if(!await e.S(a.enabled,t)){i[a.id]=void 0;continue}try{let r,s=n.get(a.id);switch(a.default!==void 0&&(s=await V(a.default,a.id,t,a)),s!==void 0&&a.transformers!==void 0&&(s=await e.s.apply(a.transformers,s,t)),a.type){case`input`:{let n={message:a.message};s!==void 0&&(n.default=String(s));let i=await e.b(a.required,t);if(i!==void 0&&(n.required=i),r=await(0,o.input)(n),i&&(r==null||typeof r==`string`&&r.trim()===``))throw e.D(`${a.message} is required`,`error`),e.M.required(a.id);break}case`password`:if(r=await(0,o.password)({message:a.message,mask:`*`}),await e.b(a.required,t)&&(r==null||typeof r==`string`&&r.trim()===``))throw e.D(`${a.message} is required`,`error`),e.M.required(a.id);break;case`number`:{let n={message:a.message};s!==void 0&&(n.default=Number(s));let i=await e.b(a.required,t);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,o.number)(n),i&&r==null)throw e.D(`${a.message} is required`,`error`),e.M.required(a.id);break}case`select`:{let e={message:a.message,choices:a.choices.map(e=>({name:e.name,value:e.value}))};s!==void 0&&(e.default=s),r=await(0,o.select)(e);break}case`confirm`:{let e=s===void 0?!1:!!s;r=await(0,o.confirm)({message:a.message,default:e});break}default:throw e.D(`Unknown prompt type: ${a.type}`,`error`),e.M.unknownType(a.type)}a.transformers!==void 0&&(s!==void 0&&(r===s||String(r)===String(s))||(r=await e.s.apply(a.transformers,r,{...t,...i}))),i[a.id]=r}catch(t){throw t instanceof Error&&e.D(`Failed to collect prompt "${a.id}": ${t.message}`,`error`),t}}return i}async function U(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await V(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function W(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`){r.choices.length===0&&t.push(`Select prompt "${r.id}" must have at least one choice`);for(let e of r.choices)(!e.name||e.name.trim()===``)&&t.push(`Select prompt "${r.id}" has a choice with empty name`),e.value===void 0&&t.push(`Select prompt "${r.id}" has a choice with undefined value`)}r.type===`number`&&r.min!==void 0&&r.max!==void 0&&r.min>r.max&&t.push(`Number prompt "${r.id}" has min greater than max`)}return t}const G=(0,i.promisify)(t.default.appendFile),ue=(0,i.promisify)(t.default.readFile),de=(0,i.promisify)(t.default.stat);async function fe(t,i,a){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,i)){e.D(`Condition not met, skipping append task`,`info`);return}let o=n.default.join(r.default.cwd(),e.u(t.file,i)),s={};t.content==null?t.template!=null&&(s.template=t.template):s.template=t.content,t.templateFile!=null&&(s.templateFile=t.templateFile);let c=x(s);if(!c.isValid)throw c.error?.includes(`cannot have both`)?e.j.templateHasBothTemplateAndFile():e.j.templateMissingTemplateOrFile();let l=await S(s,i,a),u=!1,d=!1;try{await de(o),u=!0;let e=await ue(o,`utf-8`);e.length>0&&!e.endsWith(`
23
- `)&&(d=t.newline!==!1)}catch{}u&&d?await G(o,`\n${l}`):await G(o,l),e.D(`Appended content to ${t.file}`,`success`)}const pe={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await fe(e.config,t,e)}},K=(0,i.promisify)(t.default.copyFile),me=(0,i.promisify)(t.default.stat),q=(0,i.promisify)(t.default.mkdir),he=(0,i.promisify)(t.default.readdir);async function J(e,t){await q(t,{recursive:!0});let r=await he(e,{withFileTypes:!0});await Promise.all(r.map(async r=>{let i=n.default.join(e,r.name),a=n.default.join(t,r.name);r.isDirectory()?await J(i,a):await K(i,a)}))}async function ge(t,i){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,i)){e.D(`Condition not met, skipping copy task`,`info`);return}let a=n.default.join(r.default.cwd(),e.u(t.from,i)),o=n.default.join(r.default.cwd(),e.u(t.to,i)),s;try{s=await me(a)}catch{e.D(`Source path does not exist: ${a}`,`warn`);return}await q(n.default.dirname(o),{recursive:!0}),s.isDirectory()?(await J(a,o),e.D(`Copied directory ${t.from} to ${t.to}`,`success`)):(await K(a,o),e.D(`Copied file ${t.from} to ${t.to}`,`success`))}const _e={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await ge(e.config,t)}},ve=(0,i.promisify)(t.default.writeFile);async function ye(i,a,o){if(i.condition!=null&&i.condition!==``&&!e.C(i.condition,a)){e.D(`Condition not met, skipping create task`,`info`);return}let s=e.u(i.file,a),c=n.default.join(r.default.cwd(),s);if(t.default.existsSync(c)){e.D(`File already exists, skipping: ${s}`,`info`);return}let l=x(i);if(!l.isValid)throw l.error?.includes(`cannot have both`)?e.j.createHasBothTemplateAndFile():e.j.createMissingTemplateOrFile();let u=await S(i,a,o),d=n.default.dirname(c);t.default.existsSync(d)||t.default.mkdirSync(d,{recursive:!0}),await ve(c,u),e.D(`Created file: ${s}`,`success`)}const be={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await ye(e.config,t,e)}};async function xe(i,a){let{paths:o,condition:s}=i;if(s!=null&&s!==``){if(!a){e.D(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!e.C(s,a)){e.D(`Condition not met, skipping deletion`,`info`);return}}for(let i of o){let o=a==null?i:e.u(i,a),s=n.default.join(r.default.cwd(),o);t.default.existsSync(s)&&t.default.rmSync(s,{recursive:!0,force:!0})}}const Se={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await xe(e.config,t)}};async function Ce(t,n,r){t.condition!=null&&t.condition!==``&&!e.C(t.condition,n)||await e.f({file:t.file,...t.runtime&&{runtime:t.runtime},...t.args&&{args:t.args},...t.parameters&&{parameters:t.parameters},...t.cwd!=null&&t.cwd.trim()!==``&&{cwd:t.cwd},...r?.$sourceUrl!=null&&r.$sourceUrl.trim()!==``&&{sourceUrl:r.$sourceUrl},captureOutput:!1},n)}const we={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ce(e.config,t,e)}};async function Te(t,i){if(t.condition!=null&&t.condition!==``){if(!i){e.D(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!e.C(t.condition,i)){e.D(`Condition not met, skipping exec task`,`info`);return}}let o=t.cwd==null?r.default.cwd():n.default.join(r.default.cwd(),t.cwd);(0,a.execSync)(t.command,{cwd:o,stdio:`inherit`})}const Ee={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Te(e.config,t)}};async function De(i,o){if(i.condition!=null&&i.condition!==``){if(!o){e.D(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!e.C(i.condition,o)){e.D(`Condition not met, skipping git-init task`,`info`);return}}if(i.removeExisting){let e=n.default.join(r.default.cwd(),`.git`);t.default.existsSync(e)&&t.default.rmSync(e,{recursive:!0,force:!0})}if((0,a.execSync)(`git init`,{stdio:`inherit`}),i.initialCommit){let e=i.message??`Initial commit`;(0,a.execSync)(`git add .`,{stdio:`inherit`}),(0,a.execSync)(`git commit -m "${e}"`,{stdio:`inherit`})}}const Oe={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await De(e.config,t)}},ke=(0,i.promisify)(t.default.mkdir);async function Ae(t,i){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,i)){e.D(`Condition not met, skipping mkdir task`,`info`);return}await ke(n.default.join(r.default.cwd(),e.u(t.path,i)),{recursive:!0}),e.D(`Created directory: ${t.path}`,`success`)}const je={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Ae(e.config,t)}},Me=(0,i.promisify)(t.default.rename),Ne=(0,i.promisify)(t.default.stat),Pe=(0,i.promisify)(t.default.mkdir);async function Fe(t,i){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,i)){e.D(`Condition not met, skipping move task`,`info`);return}let a=n.default.join(r.default.cwd(),e.u(t.from,i)),o=n.default.join(r.default.cwd(),e.u(t.to,i));try{await Ne(a)}catch{e.D(`Source path does not exist: ${a}`,`warn`);return}await Pe(n.default.dirname(o),{recursive:!0}),await Me(a,o),e.D(`Moved ${t.from} to ${t.to}`,`success`)}const Ie={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Fe(e.config,t)}},Le=(0,i.promisify)(t.default.readFile),Re=(0,i.promisify)(t.default.writeFile);async function ze(t,i){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,i)){e.D(`Condition not met, skipping regex-replace task`,`info`);return}let a=n.default.join(r.default.cwd(),e.u(t.file,i)),{pattern:o}=t,s=t.flags??``,c=t.replacement||``,l=await Le(a,`utf-8`),u=new RegExp(o,s);l=l.replace(u,e.u(c,i)),await Re(a,l)}const Be={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await ze(e.config,t)}},Ve=(0,i.promisify)(t.default.rename);async function He(i,a){if(i.condition!=null&&i.condition!==``&&!e.C(i.condition,a)){e.D(`Condition not met, skipping rename task`,`info`);return}let o=n.default.join(r.default.cwd(),e.u(i.from,a)),s=n.default.join(r.default.cwd(),e.u(i.to,a));if(!t.default.existsSync(o)){e.D(`Source path does not exist: ${o}`,`warn`);return}await Ve(o,s)}const Ue={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await He(e.config,t)}},We=(0,i.promisify)(t.default.readFile),Ge=(0,i.promisify)(t.default.writeFile);async function Ke(i,a){if(i.condition!=null&&i.condition!==``&&!e.C(i.condition,a)){e.D(`Condition not met, skipping replace-in-file task`,`info`);return}let o=n.default.join(r.default.cwd(),e.u(i.file,a)),{replacements:s}=i;if(!t.default.existsSync(o)){e.D(`File not found: ${o}, skipping`,`warn`);return}let c=await We(o,`utf-8`);for(let{find:t,replace:n}of s){let r=e.u(n,a);c=c.replace(new RegExp(t,`gu`),r)}await Ge(o,c)}const qe={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await Ke(e.config,t)}},Je=(0,i.promisify)(t.default.readFile),Ye=(0,i.promisify)(t.default.writeFile),Xe=2;async function Ze(t,i){if(t.condition!=null&&t.condition!==``&&!e.C(t.condition,i)){e.D(`Condition not met, skipping update-json task`,`info`);return}let a=n.default.join(r.default.cwd(),e.u(t.file,i)),{updates:o}=t,s=await Je(a,`utf-8`),c=JSON.parse(s);function l(t){if(typeof t==`string`)return e.u(t,i);if(Array.isArray(t))return t.map(e=>l(e));if(typeof t==`object`&&t){let e={};for(let[n,r]of Object.entries(t))e[n]=l(r);return e}return t}for(let[t,n]of Object.entries(o)){let r=l(n);t.includes(`.`)?e._(c,t,r):c[t]=r}await Ye(a,`${JSON.stringify(c,null,2)}\n`)}const Qe={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await Ze(e.config,t)}},Y=(0,i.promisify)(t.default.writeFile);async function $e(i,a,o){let{allowCreate:s=!0}=i;if(i.condition!=null&&i.condition!==``&&!e.C(i.condition,a)){e.D(`Condition not met, skipping write task`,`info`);return}let c=e.u(i.file,a),l=n.default.join(r.default.cwd(),c);if(!t.default.existsSync(l)){if(s===!1)throw Error(`Write task failed: file does not exist (${c})`);e.D(`File not found, creating new file: ${c}`,`info`)}let u=x(i);if(!u.isValid)throw u.error?.includes(`cannot have both`)?e.j.templateHasBothTemplateAndFile():e.j.templateMissingTemplateOrFile();let d=await S(i,a,o),f=n.default.dirname(l);t.default.existsSync(f)||t.default.mkdirSync(f,{recursive:!0}),await Y(l,d)}const et={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t,e)}};function X(){R(`update-json`)||(I(Qe),I(et),I(be),I(Be),I(qe),I(Se),I(Ue),I(Oe),I(Ee),I(we),I(Ie),I(_e),I(pe),I(je))}async function tt(t,n,r=!1){if(X(),r){e.D(`[DRY RUN] Would execute: ${t.name}`,`info`);return}if(R(t.type)){await z(t,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${t.type}`)}async function Z(t,n,i,a,o=!1){try{return e.D(`[${i}/${a}] Running: ${t.name}...`,`info`),await tt(t,n,o),e.D(`[${i}/${a}] Completed: ${t.name}...`,`success`),!0}catch(n){return e.D(`Failed: ${t.name}`,`error`),n instanceof Error&&(e.D(` Reason: ${n.message}`,`error`),n.stack!=null&&r.default.env.DEBUG!=null&&console.error(n.stack)),!1}}async function nt(t,n,i){await F(`beforeAll`,n);let a=0,o=0,s=[];for(let r=0;r<t.length;r++){let c=t[r];c!=null&&(await F(`beforeTask`,c,n),await Z(c,n,r+1,t.length,i.dryRun)?(a++,await F(`afterTask`,c,n)):(await e.b(c.required,n)&&(o++,s.push(c.name)),await F(`onError`,Error(`Task ${c.name} failed`),c),e.A(`⚠️ Task "${c.name}" failed, continuing with remaining tasks...`)))}await F(`afterAll`,n),o>0&&(e.D(`\n❌ Task execution completed with ${o} error(s)`,`error`),e.D(`Completed: ${a}/${t.length} tasks`,`info`),e.D(`Failed tasks: ${s.join(`, `)}`,`error`),r.default.exit(1)),e.D(`Completed: ${a}/${t.length} tasks`,`success`)}function Q(t){let n=[],r=new Set,i=new Set,a=new Map(t.map(e=>[e.id,e]));function o(t){if(r.has(t))return;if(i.has(t))throw e.P.forTaskDependency(t);i.add(t);let s=a.get(t);if(!s)throw e.N.forId(t);if(s.dependencies)for(let e of s.dependencies)o(e);i.delete(t),r.add(t),n.push(s)}for(let e of t)r.has(e.id)||o(e.id);return n}function rt(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=x({...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}async function it(t,n){let i=$(t);i.length>0&&(console.error(`❌ Task validation errors:`),i.forEach(e=>console.error(` - ${e}`)),r.default.exit(1));let a=[];for(let r of t)await e.S(r.enabled,n)&&a.push(r);return a}function at(e){return Q(e)}function $(e){let t=[];for(let n of e)if(!R(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=rt(n);t.push(...e)}return t}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return oe}});
20
+ ...`:``}`}catch(e){return`${d.red}✗ Error: ${e instanceof Error?e.message:String(e)}${d.reset}`}}function E(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=t.paths.map(t=>e.d(t,n)).filter(e=>m(e));return r.length===0?`${d.cyan}→ No files/directories to delete${d.reset}`:`${d.red}Would delete:${d.reset}\n${r.map(e=>`${d.red} - ${e}${d.reset}`).join(`
21
+ `)}`}function D(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.d(t.from,n),i=e.d(t.to,n);return m(r)?m(i)?`${d.yellow}⚠ Destination already exists: ${i}${d.reset}\n${d.cyan}Would rename: ${r} → ${i}${d.reset}`:`${d.cyan}Would rename: ${r} → ${i}${d.reset}`:`${d.red}✗ Source not found: ${r}${d.reset}`}function ne(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.d(t.from,n),i=e.d(t.to,n);return m(r)?m(i)?`${d.yellow}⚠ Destination already exists: ${i}${d.reset}\n${d.cyan}Would move: ${r} → ${i}${d.reset}`:`${d.cyan}Would move: ${r} → ${i}${d.reset}`:`${d.red}✗ Source not found: ${r}${d.reset}`}function re(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.d(t.from,n),i=e.d(t.to,n);if(!m(r))return`${d.red}✗ Source not found: ${r}${d.reset}`;let a=`file`;return m(i)?`${d.yellow}⚠ Destination already exists: ${i}${d.reset}\n${d.cyan}Would copy ${a}: ${r} → ${i}${d.reset}`:`${d.cyan}Would copy ${a}: ${r} → ${i}${d.reset}`}function ie(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let r=e.d(t.path,n);return m(r)?`${d.cyan}→ Directory already exists: ${r}${d.reset}`:`${d.green}+ Would create directory: ${r}${d.reset}`}function O(e){if(e.condition!=null&&e.condition!==``)return`${d.yellow}⊘ Condition check skipped in dry-run${d.reset}`;let t=m(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${d.red}Would remove existing .git directory${d.reset}`),n.push(`${d.green}Would initialize git repository${d.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${d.green}Would create initial commit: "${t}"${d.reset}`)}return n.join(`
22
+ `)}function k(t,n){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=e.d(t.command,n),a=t.cwd==null?r.default.cwd():e.d(t.cwd,n);return`${d.yellow}Would execute:${d.reset}\n${d.cyan} Command: ${i}${d.reset}\n${d.cyan} Working directory: ${a}${d.reset}`}async function A(e,t){try{switch(e.type){case`update-json`:return await g(e.config,t);case`write`:return await C(e.config,t);case`create`:return await w(e.config,t,e);case`regex-replace`:return await _(e.config,t);case`replace-in-file`:return await v(e.config,t);case`delete`:return E(e.config,t);case`rename`:return D(e.config,t);case`move`:return ne(e.config,t);case`copy`:return re(e.config,t);case`append`:return await T(e.config,t,e);case`mkdir`:return ie(e.config,t);case`git-init`:return O(e.config);case`exec`:return k(e.config,t);case`exec-file`:return k(e.config,t);default:{let t=e.type;return`${d.yellow}⚠ Diff not available for task type: ${t}${d.reset}`}}}catch(e){return`${d.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${d.reset}`}}async function j(e,t){console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`),console.log(`${d.blue} DRY RUN - Preview of changes${d.reset}`),console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`);for(let n of e){console.log(`${d.cyan}▶ Task: ${n.name}${d.reset}`),n.description!=null&&n.description!==``&&console.log(`${d.gray} ${n.description}${d.reset}`);let e=await A(n,t);console.log(e),console.log(`${d.gray}${`─`.repeat(55)}${d.reset}`)}console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`),console.log(`${d.yellow} No changes were applied (dry-run mode)${d.reset}`),console.log(`${d.blue}═══════════════════════════════════════════════════════${d.reset}`)}const M=new Map,N={},P=new Map;function ae(e){e.beforeAll!=null&&(N.beforeAll=e.beforeAll),e.afterAll!=null&&(N.afterAll=e.afterAll),e.beforeTask!=null&&(N.beforeTask=e.beforeTask),e.afterTask!=null&&(N.afterTask=e.afterTask),e.onError!=null&&(N.onError=e.onError)}async function F(t,...n){let r=N[t];if(r!=null)try{t===`beforeAll`||t===`afterAll`?await r(n[0]):(t===`beforeTask`||t===`afterTask`||t===`onError`)&&await r(n[0],n[1])}catch(n){e.A(`Error in ${t} hook: ${n instanceof Error?n.message:String(n)}`,`error`)}}function I(t){if(t.name==null||t.name===``)throw TypeError(`Plugin name is required`);if(!Array.isArray(t.taskTypes)||t.taskTypes.length===0)throw TypeError(`Plugin ${t.name} must define at least one task type`);if(typeof t.execute!=`function`)throw TypeError(`Plugin ${t.name} must provide an execute function`);if(M.has(t.name))throw TypeError(`Plugin ${t.name} is already registered`);for(let e of t.taskTypes)if(P.has(e)){let t=P.get(e);throw TypeError(`Task type "${e}" is already registered by plugin "${t}"`)}M.set(t.name,t);for(let e of t.taskTypes)P.set(e,t.name);e.D(`Registered plugin: ${t.name}${t.version==null?``:` v${t.version}`}`)}function oe(e){let t=M.get(e);if(t!=null){for(let e of t.taskTypes)P.delete(e);M.delete(e)}}function se(e){return M.get(e)}function ce(){return Array.from(M.keys())}function le(){M.clear(),P.clear()}function L(e){let t=P.get(e);if(t!=null)return M.get(t)}function R(e){return P.has(e)}async function z(e,t,n){let r=L(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function B(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}}}async function V(t,n,r,i){if(t!==void 0)return e.f(t,{id:n,contextType:`Prompt`,...r!=null&&{context:r},...i?.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}})}async function H(t,n=new Map,r={}){let i={};if(t.length===0)return i;for(let a of t){if(a.$configEnabled!=null&&!await e.T(a.$configEnabled,{...r,...i}))continue;let t={...r,...i};if(!await e.T(a.enabled,t)){i[a.id]=void 0;continue}try{let r,s=n.get(a.id);switch(a.default!==void 0&&(s=await V(a.default,a.id,t,a)),s!==void 0&&a.transformers!==void 0&&(s=await e.s.apply(a.transformers,s,t)),a.type){case`input`:{let n={message:a.message};s!==void 0&&(n.default=String(s));let i=await e.C(a.required,t);if(i!==void 0&&(n.required=i),r=await(0,o.input)(n),i&&(r==null||typeof r==`string`&&r.trim()===``))throw e.A(`${a.message} is required`,`error`),e.F.required(a.id);break}case`password`:if(r=await(0,o.password)({message:a.message,mask:`*`}),await e.C(a.required,t)&&(r==null||typeof r==`string`&&r.trim()===``))throw e.A(`${a.message} is required`,`error`),e.F.required(a.id);break;case`number`:{let n={message:a.message};s!==void 0&&(n.default=Number(s));let i=await e.C(a.required,t);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,o.number)(n),i&&r==null)throw e.A(`${a.message} is required`,`error`),e.F.required(a.id);break}case`select`:{let e={message:a.message,choices:a.choices.map(e=>({name:e.name,value:e.value}))};s!==void 0&&(e.default=s),r=await(0,o.select)(e);break}case`checkbox`:{let n={message:a.message,choices:a.choices.map(e=>({name:e.name,value:e.value}))};s!==void 0&&(n.default=s);let i=await e.C(a.required,t);i!==void 0&&(n.required=i),r=await(0,o.checkbox)(n);break}case`confirm`:{let e=s===void 0?!1:!!s;r=await(0,o.confirm)({message:a.message,default:e});break}default:throw e.A(`Unknown prompt type: ${a.type}`,`error`),e.F.unknownType(a.type)}a.transformers!==void 0&&(s!==void 0&&(r===s||String(r)===String(s))||(r=await e.s.apply(a.transformers,r,{...t,...i}))),i[a.id]=r}catch(t){throw t instanceof Error&&e.A(`Failed to collect prompt "${a.id}": ${t.message}`,`error`),t}}return i}async function U(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await V(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function W(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`||r.type===`checkbox`){r.choices.length===0&&t.push(`${r.type===`select`?`Select`:`Checkbox`} prompt "${r.id}" must have at least one choice`);for(let e of r.choices)(!e.name||e.name.trim()===``)&&t.push(`${r.type===`select`?`Select`:`Checkbox`} prompt "${r.id}" has a choice with empty name`),e.value===void 0&&t.push(`${r.type===`select`?`Select`:`Checkbox`} prompt "${r.id}" has a choice with undefined value`)}r.type===`number`&&r.min!==void 0&&r.max!==void 0&&r.min>r.max&&t.push(`Number prompt "${r.id}" has min greater than max`)}return t}const G=(0,i.promisify)(t.default.appendFile),ue=(0,i.promisify)(t.default.readFile),de=(0,i.promisify)(t.default.stat);async function fe(t,i,a){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,i)){e.A(`Condition not met, skipping append task`,`info`);return}let o=n.default.join(r.default.cwd(),e.d(t.file,i)),s={};t.content==null?t.template!=null&&(s.template=t.template):s.template=t.content,t.templateFile!=null&&(s.templateFile=t.templateFile);let c=x(s);if(!c.isValid)throw c.error?.includes(`cannot have both`)?e.P.templateHasBothTemplateAndFile():e.P.templateMissingTemplateOrFile();let l=await S(s,i,a),u=!1,d=!1;try{await de(o),u=!0;let e=await ue(o,`utf-8`);e.length>0&&!e.endsWith(`
23
+ `)&&(d=t.newline!==!1)}catch{}u&&d?await G(o,`\n${l}`):await G(o,l),e.A(`Appended content to ${t.file}`,`success`)}const pe={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await fe(e.config,t,e)}},K=(0,i.promisify)(t.default.copyFile),me=(0,i.promisify)(t.default.stat),q=(0,i.promisify)(t.default.mkdir),he=(0,i.promisify)(t.default.readdir);async function J(e,t){await q(t,{recursive:!0});let r=await he(e,{withFileTypes:!0});await Promise.all(r.map(async r=>{let i=n.default.join(e,r.name),a=n.default.join(t,r.name);r.isDirectory()?await J(i,a):await K(i,a)}))}async function ge(t,i){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,i)){e.A(`Condition not met, skipping copy task`,`info`);return}let a=n.default.join(r.default.cwd(),e.d(t.from,i)),o=n.default.join(r.default.cwd(),e.d(t.to,i)),s;try{s=await me(a)}catch{e.A(`Source path does not exist: ${a}`,`warn`);return}await q(n.default.dirname(o),{recursive:!0}),s.isDirectory()?(await J(a,o),e.A(`Copied directory ${t.from} to ${t.to}`,`success`)):(await K(a,o),e.A(`Copied file ${t.from} to ${t.to}`,`success`))}const _e={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await ge(e.config,t)}},ve=(0,i.promisify)(t.default.writeFile);async function ye(i,a,o){if(i.condition!=null&&i.condition!==``&&!e.E(i.condition,a)){e.A(`Condition not met, skipping create task`,`info`);return}let s=e.d(i.file,a),c=n.default.join(r.default.cwd(),s);if(t.default.existsSync(c)){e.A(`File already exists, skipping: ${s}`,`info`);return}let l=x(i);if(!l.isValid)throw l.error?.includes(`cannot have both`)?e.P.createHasBothTemplateAndFile():e.P.createMissingTemplateOrFile();let u=await S(i,a,o),d=n.default.dirname(c);t.default.existsSync(d)||t.default.mkdirSync(d,{recursive:!0}),await ve(c,u),e.A(`Created file: ${s}`,`success`)}const be={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await ye(e.config,t,e)}};async function xe(i,a){let{paths:o,condition:s}=i;if(s!=null&&s!==``){if(!a){e.A(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!e.E(s,a)){e.A(`Condition not met, skipping deletion`,`info`);return}}for(let i of o){let o=a==null?i:e.d(i,a),s=n.default.join(r.default.cwd(),o);t.default.existsSync(s)&&t.default.rmSync(s,{recursive:!0,force:!0})}}const Se={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await xe(e.config,t)}};async function Ce(t,n,r){t.condition!=null&&t.condition!==``&&!e.E(t.condition,n)||await e.p({file:t.file,...t.runtime&&{runtime:t.runtime},...t.args&&{args:t.args},...t.parameters&&{parameters:t.parameters},...t.cwd!=null&&t.cwd.trim()!==``&&{cwd:t.cwd},...r?.$sourceUrl!=null&&r.$sourceUrl.trim()!==``&&{sourceUrl:r.$sourceUrl},captureOutput:!1},n)}const we={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ce(e.config,t,e)}};async function Te(t,i){if(t.condition!=null&&t.condition!==``){if(!i){e.A(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!e.E(t.condition,i)){e.A(`Condition not met, skipping exec task`,`info`);return}}let o=t.cwd==null?r.default.cwd():n.default.join(r.default.cwd(),t.cwd);(0,a.execSync)(t.command,{cwd:o,stdio:`inherit`})}const Ee={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Te(e.config,t)}};async function De(i,o){if(i.condition!=null&&i.condition!==``){if(!o){e.A(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!e.E(i.condition,o)){e.A(`Condition not met, skipping git-init task`,`info`);return}}if(i.removeExisting){let e=n.default.join(r.default.cwd(),`.git`);t.default.existsSync(e)&&t.default.rmSync(e,{recursive:!0,force:!0})}if((0,a.execSync)(`git init`,{stdio:`inherit`}),i.initialCommit){let e=i.message??`Initial commit`;(0,a.execSync)(`git add .`,{stdio:`inherit`}),(0,a.execSync)(`git commit -m "${e}"`,{stdio:`inherit`})}}const Oe={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await De(e.config,t)}},ke=(0,i.promisify)(t.default.mkdir);async function Ae(t,i){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,i)){e.A(`Condition not met, skipping mkdir task`,`info`);return}await ke(n.default.join(r.default.cwd(),e.d(t.path,i)),{recursive:!0}),e.A(`Created directory: ${t.path}`,`success`)}const je={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Ae(e.config,t)}},Me=(0,i.promisify)(t.default.rename),Ne=(0,i.promisify)(t.default.stat),Pe=(0,i.promisify)(t.default.mkdir);async function Fe(t,i){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,i)){e.A(`Condition not met, skipping move task`,`info`);return}let a=n.default.join(r.default.cwd(),e.d(t.from,i)),o=n.default.join(r.default.cwd(),e.d(t.to,i));try{await Ne(a)}catch{e.A(`Source path does not exist: ${a}`,`warn`);return}await Pe(n.default.dirname(o),{recursive:!0}),await Me(a,o),e.A(`Moved ${t.from} to ${t.to}`,`success`)}const Ie={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Fe(e.config,t)}},Le=(0,i.promisify)(t.default.readFile),Re=(0,i.promisify)(t.default.writeFile);async function ze(t,i){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,i)){e.A(`Condition not met, skipping regex-replace task`,`info`);return}let a=n.default.join(r.default.cwd(),e.d(t.file,i)),{pattern:o}=t,s=t.flags??``,c=t.replacement||``,l=await Le(a,`utf-8`),u=new RegExp(o,s);l=l.replace(u,e.d(c,i)),await Re(a,l)}const Be={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await ze(e.config,t)}},Ve=(0,i.promisify)(t.default.rename);async function He(i,a){if(i.condition!=null&&i.condition!==``&&!e.E(i.condition,a)){e.A(`Condition not met, skipping rename task`,`info`);return}let o=n.default.join(r.default.cwd(),e.d(i.from,a)),s=n.default.join(r.default.cwd(),e.d(i.to,a));if(!t.default.existsSync(o)){e.A(`Source path does not exist: ${o}`,`warn`);return}await Ve(o,s)}const Ue={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await He(e.config,t)}},We=(0,i.promisify)(t.default.readFile),Ge=(0,i.promisify)(t.default.writeFile);async function Ke(i,a){if(i.condition!=null&&i.condition!==``&&!e.E(i.condition,a)){e.A(`Condition not met, skipping replace-in-file task`,`info`);return}let o=n.default.join(r.default.cwd(),e.d(i.file,a)),{replacements:s}=i;if(!t.default.existsSync(o)){e.A(`File not found: ${o}, skipping`,`warn`);return}let c=await We(o,`utf-8`);for(let{find:t,replace:n}of s){let r=e.d(n,a);c=c.replace(new RegExp(t,`gu`),r)}await Ge(o,c)}const qe={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await Ke(e.config,t)}},Je=(0,i.promisify)(t.default.readFile),Ye=(0,i.promisify)(t.default.writeFile),Xe=2;async function Ze(t,i){if(t.condition!=null&&t.condition!==``&&!e.E(t.condition,i)){e.A(`Condition not met, skipping update-json task`,`info`);return}let a=n.default.join(r.default.cwd(),e.d(t.file,i)),{updates:o}=t,s=await Je(a,`utf-8`),c=JSON.parse(s);function l(t){if(typeof t==`string`)return e.d(t,i);if(Array.isArray(t))return t.map(e=>l(e));if(typeof t==`object`&&t){let e={};for(let[n,r]of Object.entries(t))e[n]=l(r);return e}return t}for(let[t,n]of Object.entries(o)){let r=l(n);t.includes(`.`)?e.b(c,t,r):c[t]=r}await Ye(a,`${JSON.stringify(c,null,2)}\n`)}const Qe={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await Ze(e.config,t)}},Y=(0,i.promisify)(t.default.writeFile);async function $e(i,a,o){let{allowCreate:s=!0}=i;if(i.condition!=null&&i.condition!==``&&!e.E(i.condition,a)){e.A(`Condition not met, skipping write task`,`info`);return}let c=e.d(i.file,a),l=n.default.join(r.default.cwd(),c);if(!t.default.existsSync(l)){if(s===!1)throw Error(`Write task failed: file does not exist (${c})`);e.A(`File not found, creating new file: ${c}`,`info`)}let u=x(i);if(!u.isValid)throw u.error?.includes(`cannot have both`)?e.P.templateHasBothTemplateAndFile():e.P.templateMissingTemplateOrFile();let d=await S(i,a,o),f=n.default.dirname(l);t.default.existsSync(f)||t.default.mkdirSync(f,{recursive:!0}),await Y(l,d)}const et={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t,e)}};function X(){R(`update-json`)||(I(Qe),I(et),I(be),I(Be),I(qe),I(Se),I(Ue),I(Oe),I(Ee),I(we),I(Ie),I(_e),I(pe),I(je))}async function tt(t,n,r=!1){if(X(),r){e.A(`[DRY RUN] Would execute: ${t.name}`,`info`);return}if(R(t.type)){await z(t,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${t.type}`)}async function Z(t,n,i,a,o=!1){try{return e.A(`[${i}/${a}] Running: ${t.name}...`,`info`),await tt(t,n,o),e.A(`[${i}/${a}] Completed: ${t.name}...`,`success`),!0}catch(n){return e.A(`Failed: ${t.name}`,`error`),n instanceof Error&&(e.A(` Reason: ${n.message}`,`error`),n.stack!=null&&r.default.env.DEBUG!=null&&console.error(n.stack)),!1}}async function nt(t,n,i){await F(`beforeAll`,n);let a=0,o=0,s=[];for(let r=0;r<t.length;r++){let c=t[r];c!=null&&(await F(`beforeTask`,c,n),await Z(c,n,r+1,t.length,i.dryRun)?(a++,await F(`afterTask`,c,n)):(await e.C(c.required,n)&&(o++,s.push(c.name)),await F(`onError`,Error(`Task ${c.name} failed`),c),e.N(`⚠️ Task "${c.name}" failed, continuing with remaining tasks...`)))}await F(`afterAll`,n),o>0&&(e.A(`\n❌ Task execution completed with ${o} error(s)`,`error`),e.A(`Completed: ${a}/${t.length} tasks`,`info`),e.A(`Failed tasks: ${s.join(`, `)}`,`error`),r.default.exit(1)),e.A(`Completed: ${a}/${t.length} tasks`,`success`)}function Q(t){let n=[],r=new Set,i=new Set,a=new Map(t.map(e=>[e.id,e]));function o(t){if(r.has(t))return;if(i.has(t))throw e.L.forTaskDependency(t);i.add(t);let s=a.get(t);if(!s)throw e.I.forId(t);if(s.dependencies)for(let e of s.dependencies)o(e);i.delete(t),r.add(t),n.push(s)}for(let e of t)r.has(e.id)||o(e.id);return n}function rt(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=x({...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}async function it(t,n){let i=$(t);i.length>0&&(console.error(`❌ Task validation errors:`),i.forEach(e=>console.error(` - ${e}`)),r.default.exit(1));let a=[];for(let r of t)await e.T(r.enabled,n)&&a.push(r);return a}function at(e){return Q(e)}function $(e){let t=[];for(let n of e)if(!R(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=rt(n);t.push(...e)}return t}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return oe}});
@@ -0,0 +1 @@
1
+ const e=require(`./configurations-BC8PHmKl.cjs`);exports.cleanupTempFile=e.m,exports.debug=e.D,exports.error=e.O,exports.logError=e.O,exports.evaluateCondition=e.E,exports.evaluateEnabled=e.w,exports.evaluateEnabledAsync=e.T,exports.evaluateRequiredAsync=e.C,exports.getNestedProperty=e.y,exports.getSourceDisplayName=e.x,exports.info=e.k,exports.logInfo=e.k,exports.interpolateTemplate=e.d,exports.isUrl=e.S,exports.log=e.A,exports.logSuccess=e.M,exports.success=e.M,exports.logWarn=e.N,exports.warn=e.N,exports.resolveAndFetchFile=e.h,exports.resolveFilePath=e.v,exports.resolveValue=e.f,exports.setDebugMode=e.j,exports.setNestedProperty=e.b;
@@ -0,0 +1 @@
1
+ import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,S as s,T as c,b as l,d as u,f as d,h as f,j as p,k as m,m as h,v as g,w as _,x as v,y}from"./configurations-7FTBn2PH.js";export{h as cleanupTempFile,n as debug,o as error,o as logError,r as evaluateCondition,_ as evaluateEnabled,c as evaluateEnabledAsync,t as evaluateRequiredAsync,y as getNestedProperty,v as getSourceDisplayName,m as info,m as logInfo,u as interpolateTemplate,s as isUrl,e as log,i as logSuccess,i as success,a as logWarn,a as warn,f as resolveAndFetchFile,g as resolveFilePath,d as resolveValue,p as setDebugMode,l as setNestedProperty};
@@ -1 +1 @@
1
- const e=require(`./configurations-DJ1eNatp.cjs`);let t=require(`node:fs`);t=e.I(t);let n=require(`node:path`);n=e.I(n);let r=require(`node:process`);r=e.I(r);let i=require(`node:url`);i=e.I(i);let a=require(`ajv`);a=e.I(a);const o=(0,i.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),s=n.default.dirname(o);function c(){let e=[n.default.join(s,`..`,`schema`,`scaffoldfy.schema.json`),n.default.join(s,`..`,`..`,`schema`,`scaffoldfy.schema.json`)];for(let n of e)if(t.default.existsSync(n))return n;return n.default.join(s,`..`,`schema`,`scaffoldfy.schema.json`)}function l(){return new a.default({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function u(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 d(e,t,n={}){let r=l().compile(t);if(!r(e)&&r.errors){let e=n.filterOneOfErrors?m(r.errors):p(r.errors);return e.length===0?{valid:!0,errors:[]}:{valid:!1,errors:e}}return{valid:!0,errors:[]}}function f(e,t){return e.startsWith(`http`)?e.includes(`scaffoldfy/schema`)||e.includes(`@pixpilot/scaffoldfy`)?c():null:e.startsWith(`../`)||e.startsWith(`./`)?n.default.resolve(n.default.dirname(t),e):e}function p(e){return e.map(e=>`${e.instancePath||`root`}: ${e.message}`)}function m(e){return e.filter(t=>{if(t.keyword===`oneOf`){let e=t.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}if(t.keyword===`required`){let n=e.find(e=>e.keyword===`oneOf`&&e.instancePath===t.instancePath);if(n){let e=n.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}}return!0}).map(e=>{let t=e.instancePath||`root`,n=e.message??`Unknown error`;switch(e.keyword){case`required`:return`${t}: Missing required property "${String(e.params.missingProperty??`unknown`)}"`;case`type`:return`${t}: Expected type "${String(e.params.type??`unknown`)}", received "${typeof e.data}"`;case`enum`:{let r=e.params.allowedValues;return`${t}: ${n}. Allowed values: ${Array.isArray(r)?r.join(`, `):String(r)}`}case`pattern`:{let{pattern:r}=e.params;return`${t}: ${n}. Value must match pattern: ${String(r)}`}case`oneOf`:return`${t}: ${n}. Configuration must match exactly one of the allowed schemas`;case`additionalProperties`:return`${t}: ${n}. Unknown property: "${String(e.params.additionalProperty??`unknown`)}"`;default:return`${t}: ${n}`}})}function h(t){e.D(`❌ Schema validation failed:`,`error`),e.D(``,`error`),e.D(`The following validation errors were found:`,`error`),e.D(``,`error`);for(let n of t)e.D(` • ${n}`,`error`);e.D(``,`error`),e.D(`Please fix these errors in your template configuration file.`,`error`),e.D(``,`error`),e.D(`For schema documentation, see: https://github.com/pixpilot/scaffoldfy/tree/main/packages/scaffoldfy/schema`,`info`)}function g(e){let i=n.default.isAbsolute(e)?e:n.default.resolve(r.default.cwd(),e);try{let e=t.default.readFileSync(i,`utf-8`),n=JSON.parse(e);if(!n||typeof n!=`object`||!(`$schema`in n))return{valid:!0};let r=n.$schema;if(typeof r!=`string`)return{valid:!0};let a=f(r,i);return a===null||!t.default.existsSync(a)?(console.warn(`Schema file not found: ${a}`),{valid:!0}):d(n,u(a))}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${i}: ${e instanceof Error?e.message:String(e)}`]}}}function _(t,n={}){try{let e=d(t,u(c()),{filterOneOfErrors:!0});return!e.valid&&!n.silent&&h(e.errors),e}catch(t){let r=t instanceof Error?t.message:`Unknown error occurred during schema validation`;return n.silent||(e.D(`❌ Schema validation error:`,`error`),e.D(` ${r}`,`error`)),{valid:!1,errors:[r]}}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}});
1
+ const e=require(`./configurations-BC8PHmKl.cjs`);let t=require(`node:fs`);t=e.R(t);let n=require(`node:path`);n=e.R(n);let r=require(`node:process`);r=e.R(r);let i=require(`node:url`);i=e.R(i);let a=require(`ajv`);a=e.R(a);const o=(0,i.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),s=n.default.dirname(o);function c(){let e=[n.default.join(s,`..`,`schema`,`scaffoldfy.schema.json`),n.default.join(s,`..`,`..`,`schema`,`scaffoldfy.schema.json`)];for(let n of e)if(t.default.existsSync(n))return n;return n.default.join(s,`..`,`schema`,`scaffoldfy.schema.json`)}function l(){return new a.default({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function u(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 d(e,t,n={}){let r=l().compile(t);if(!r(e)&&r.errors){let e=n.filterOneOfErrors?m(r.errors):p(r.errors);return e.length===0?{valid:!0,errors:[]}:{valid:!1,errors:e}}return{valid:!0,errors:[]}}function f(e,t){return e.startsWith(`http`)?e.includes(`scaffoldfy/schema`)||e.includes(`@pixpilot/scaffoldfy`)?c():null:e.startsWith(`../`)||e.startsWith(`./`)?n.default.resolve(n.default.dirname(t),e):e}function p(e){return e.map(e=>`${e.instancePath||`root`}: ${e.message}`)}function m(e){return e.filter(t=>{if(t.keyword===`oneOf`){let e=t.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}if(t.keyword===`required`){let n=e.find(e=>e.keyword===`oneOf`&&e.instancePath===t.instancePath);if(n){let e=n.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}}return!0}).map(e=>{let t=e.instancePath||`root`,n=e.message??`Unknown error`;switch(e.keyword){case`required`:return`${t}: Missing required property "${String(e.params.missingProperty??`unknown`)}"`;case`type`:return`${t}: Expected type "${String(e.params.type??`unknown`)}", received "${typeof e.data}"`;case`enum`:{let r=e.params.allowedValues;return`${t}: ${n}. Allowed values: ${Array.isArray(r)?r.join(`, `):String(r)}`}case`pattern`:{let{pattern:r}=e.params;return`${t}: ${n}. Value must match pattern: ${String(r)}`}case`oneOf`:return`${t}: ${n}. Configuration must match exactly one of the allowed schemas`;case`additionalProperties`:return`${t}: ${n}. Unknown property: "${String(e.params.additionalProperty??`unknown`)}"`;default:return`${t}: ${n}`}})}function h(t){e.A(`❌ Schema validation failed:`,`error`),e.A(``,`error`),e.A(`The following validation errors were found:`,`error`),e.A(``,`error`);for(let n of t)e.A(` • ${n}`,`error`);e.A(``,`error`),e.A(`Please fix these errors in your template configuration file.`,`error`),e.A(``,`error`),e.A(`For schema documentation, see: https://github.com/pixpilot/scaffoldfy/tree/main/packages/scaffoldfy/schema`,`info`)}function g(e){let i=n.default.isAbsolute(e)?e:n.default.resolve(r.default.cwd(),e);try{let e=t.default.readFileSync(i,`utf-8`),n=JSON.parse(e);if(!n||typeof n!=`object`||!(`$schema`in n))return{valid:!0};let r=n.$schema;if(typeof r!=`string`)return{valid:!0};let a=f(r,i);return a===null||!t.default.existsSync(a)?(console.warn(`Schema file not found: ${a}`),{valid:!0}):d(n,u(a))}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${i}: ${e instanceof Error?e.message:String(e)}`]}}}function _(t,n={}){try{let e=d(t,u(c()),{filterOneOfErrors:!0});return!e.valid&&!n.silent&&h(e.errors),e}catch(t){let r=t instanceof Error?t.message:`Unknown error occurred during schema validation`;return n.silent||(e.A(`❌ Schema validation error:`,`error`),e.A(` ${r}`,`error`)),{valid:!1,errors:[r]}}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}});
@@ -1 +1 @@
1
- import{D as e}from"./configurations-BFx3CItg.js";import t from"node:path";import{fileURLToPath as n}from"node:url";import r from"node:fs";import i from"node:process";import a from"ajv";const o=n(import.meta.url),s=t.dirname(o);function c(){let e=[t.join(s,`..`,`schema`,`scaffoldfy.schema.json`),t.join(s,`..`,`..`,`schema`,`scaffoldfy.schema.json`)];for(let t of e)if(r.existsSync(t))return t;return t.join(s,`..`,`schema`,`scaffoldfy.schema.json`)}function l(){return new a({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function u(e){try{let t=r.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 d(e,t,n={}){let r=l().compile(t);if(!r(e)&&r.errors){let e=n.filterOneOfErrors?m(r.errors):p(r.errors);return e.length===0?{valid:!0,errors:[]}:{valid:!1,errors:e}}return{valid:!0,errors:[]}}function f(e,n){return e.startsWith(`http`)?e.includes(`scaffoldfy/schema`)||e.includes(`@pixpilot/scaffoldfy`)?c():null:e.startsWith(`../`)||e.startsWith(`./`)?t.resolve(t.dirname(n),e):e}function p(e){return e.map(e=>`${e.instancePath||`root`}: ${e.message}`)}function m(e){return e.filter(t=>{if(t.keyword===`oneOf`){let e=t.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}if(t.keyword===`required`){let n=e.find(e=>e.keyword===`oneOf`&&e.instancePath===t.instancePath);if(n){let e=n.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}}return!0}).map(e=>{let t=e.instancePath||`root`,n=e.message??`Unknown error`;switch(e.keyword){case`required`:return`${t}: Missing required property "${String(e.params.missingProperty??`unknown`)}"`;case`type`:return`${t}: Expected type "${String(e.params.type??`unknown`)}", received "${typeof e.data}"`;case`enum`:{let r=e.params.allowedValues;return`${t}: ${n}. Allowed values: ${Array.isArray(r)?r.join(`, `):String(r)}`}case`pattern`:{let{pattern:r}=e.params;return`${t}: ${n}. Value must match pattern: ${String(r)}`}case`oneOf`:return`${t}: ${n}. Configuration must match exactly one of the allowed schemas`;case`additionalProperties`:return`${t}: ${n}. Unknown property: "${String(e.params.additionalProperty??`unknown`)}"`;default:return`${t}: ${n}`}})}function h(t){e(`❌ Schema validation failed:`,`error`),e(``,`error`),e(`The following validation errors were found:`,`error`),e(``,`error`);for(let n of t)e(` • ${n}`,`error`);e(``,`error`),e(`Please fix these errors in your template configuration file.`,`error`),e(``,`error`),e(`For schema documentation, see: https://github.com/pixpilot/scaffoldfy/tree/main/packages/scaffoldfy/schema`,`info`)}function g(e){let n=t.isAbsolute(e)?e:t.resolve(i.cwd(),e);try{let e=r.readFileSync(n,`utf-8`),t=JSON.parse(e);if(!t||typeof t!=`object`||!(`$schema`in t))return{valid:!0};let i=t.$schema;if(typeof i!=`string`)return{valid:!0};let a=f(i,n);return a===null||!r.existsSync(a)?(console.warn(`Schema file not found: ${a}`),{valid:!0}):d(t,u(a))}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${n}: ${e instanceof Error?e.message:String(e)}`]}}}function _(t,n={}){try{let e=d(t,u(c()),{filterOneOfErrors:!0});return!e.valid&&!n.silent&&h(e.errors),e}catch(t){let r=t instanceof Error?t.message:`Unknown error occurred during schema validation`;return n.silent||(e(`❌ Schema validation error:`,`error`),e(` ${r}`,`error`)),{valid:!1,errors:[r]}}}export{g as n,_ as r,h as t};
1
+ import{A as e}from"./configurations-7FTBn2PH.js";import t from"node:path";import{fileURLToPath as n}from"node:url";import r from"node:fs";import i from"node:process";import a from"ajv";const o=n(import.meta.url),s=t.dirname(o);function c(){let e=[t.join(s,`..`,`schema`,`scaffoldfy.schema.json`),t.join(s,`..`,`..`,`schema`,`scaffoldfy.schema.json`)];for(let t of e)if(r.existsSync(t))return t;return t.join(s,`..`,`schema`,`scaffoldfy.schema.json`)}function l(){return new a({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function u(e){try{let t=r.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 d(e,t,n={}){let r=l().compile(t);if(!r(e)&&r.errors){let e=n.filterOneOfErrors?m(r.errors):p(r.errors);return e.length===0?{valid:!0,errors:[]}:{valid:!1,errors:e}}return{valid:!0,errors:[]}}function f(e,n){return e.startsWith(`http`)?e.includes(`scaffoldfy/schema`)||e.includes(`@pixpilot/scaffoldfy`)?c():null:e.startsWith(`../`)||e.startsWith(`./`)?t.resolve(t.dirname(n),e):e}function p(e){return e.map(e=>`${e.instancePath||`root`}: ${e.message}`)}function m(e){return e.filter(t=>{if(t.keyword===`oneOf`){let e=t.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}if(t.keyword===`required`){let n=e.find(e=>e.keyword===`oneOf`&&e.instancePath===t.instancePath);if(n){let e=n.params;if(e.passingSchemas&&e.passingSchemas.length>0)return!1}}return!0}).map(e=>{let t=e.instancePath||`root`,n=e.message??`Unknown error`;switch(e.keyword){case`required`:return`${t}: Missing required property "${String(e.params.missingProperty??`unknown`)}"`;case`type`:return`${t}: Expected type "${String(e.params.type??`unknown`)}", received "${typeof e.data}"`;case`enum`:{let r=e.params.allowedValues;return`${t}: ${n}. Allowed values: ${Array.isArray(r)?r.join(`, `):String(r)}`}case`pattern`:{let{pattern:r}=e.params;return`${t}: ${n}. Value must match pattern: ${String(r)}`}case`oneOf`:return`${t}: ${n}. Configuration must match exactly one of the allowed schemas`;case`additionalProperties`:return`${t}: ${n}. Unknown property: "${String(e.params.additionalProperty??`unknown`)}"`;default:return`${t}: ${n}`}})}function h(t){e(`❌ Schema validation failed:`,`error`),e(``,`error`),e(`The following validation errors were found:`,`error`),e(``,`error`);for(let n of t)e(` • ${n}`,`error`);e(``,`error`),e(`Please fix these errors in your template configuration file.`,`error`),e(``,`error`),e(`For schema documentation, see: https://github.com/pixpilot/scaffoldfy/tree/main/packages/scaffoldfy/schema`,`info`)}function g(e){let n=t.isAbsolute(e)?e:t.resolve(i.cwd(),e);try{let e=r.readFileSync(n,`utf-8`),t=JSON.parse(e);if(!t||typeof t!=`object`||!(`$schema`in t))return{valid:!0};let i=t.$schema;if(typeof i!=`string`)return{valid:!0};let a=f(i,n);return a===null||!r.existsSync(a)?(console.warn(`Schema file not found: ${a}`),{valid:!0}):d(t,u(a))}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${n}: ${e instanceof Error?e.message:String(e)}`]}}}function _(t,n={}){try{let e=d(t,u(c()),{filterOneOfErrors:!0});return!e.valid&&!n.silent&&h(e.errors),e}catch(t){let r=t instanceof Error?t.message:`Unknown error occurred during schema validation`;return n.silent||(e(`❌ Schema validation error:`,`error`),e(` ${r}`,`error`)),{valid:!1,errors:[r]}}}export{g as n,_ as r,h as t};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pixpilot/scaffoldfy",
3
3
  "type": "module",
4
- "version": "0.48.0",
4
+ "version": "0.50.0",
5
5
  "author": "PixPilot <m.doaie@hotmail.com>",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -50,9 +50,9 @@
50
50
  "typescript": "^5.9.3",
51
51
  "@internal/eslint-config": "0.3.0",
52
52
  "@internal/prettier-config": "0.0.1",
53
- "@internal/tsconfig": "0.1.0",
54
53
  "@internal/tsdown-config": "0.1.0",
55
- "@internal/vitest-config": "0.1.0"
54
+ "@internal/vitest-config": "0.1.0",
55
+ "@internal/tsconfig": "0.1.0"
56
56
  },
57
57
  "prettier": "@internal/prettier-config",
58
58
  "scripts": {
@@ -233,11 +233,11 @@
233
233
  "description": "Built-in transformer ID"
234
234
  },
235
235
  "valueConfig": {
236
- "description": "Configuration for a value that can be static, dynamic, or conditional. Supports static primitives, command execution, script file execution, interpolation with {{variable}} placeholders, or conditional evaluation.",
236
+ "description": "Configuration for a value that can be static, dynamic, or conditional. Supports static values, command execution, script file execution, interpolation with {{variable}} placeholders, or conditional evaluation.",
237
237
  "oneOf": [
238
238
  {
239
- "type": ["string", "number", "boolean"],
240
- "description": "Static value (string, number, or boolean)"
239
+ "type": ["string", "number", "boolean", "array"],
240
+ "description": "Static value (string, number, boolean, or array)"
241
241
  },
242
242
  {
243
243
  "type": "object",
@@ -434,7 +434,7 @@
434
434
  },
435
435
  "type": {
436
436
  "type": "string",
437
- "enum": ["input", "select", "confirm", "password", "number"],
437
+ "enum": ["input", "select", "checkbox", "confirm", "password", "number"],
438
438
  "description": "Type of prompt to display"
439
439
  },
440
440
  "message": {
@@ -456,7 +456,7 @@
456
456
  },
457
457
  "choices": {
458
458
  "type": "array",
459
- "description": "Available choices (for select prompts)",
459
+ "description": "Available choices (for select and checkbox prompts)",
460
460
  "items": {
461
461
  "type": "object",
462
462
  "required": ["name", "value"],
@@ -489,7 +489,7 @@
489
489
  {
490
490
  "if": {
491
491
  "properties": {
492
- "type": { "const": "select" }
492
+ "type": { "enum": ["select", "checkbox"] }
493
493
  }
494
494
  },
495
495
  "then": {
@@ -1 +0,0 @@
1
- import e from"node:path";import t from"node:fs";import n from"node:process";import{promisify as r}from"node:util";import"handlebars";import i from"node:os";import{execSync as a}from"node:child_process";import{adaCase as o,camelCase as s,capitalCase as c,cobolCase as l,constantCase as u,dotNotation as d,kebabCase as f,lowerCase as p,pascalCase as ee,pathCase as te,snakeCase as m,spaceCase as ne,trainCase as re,upperCamelCase as ie,upperCase as ae}from"case-anything";import{log as h}from"node:console";const g=new Map;function oe(){g.clear()}var _=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},v=class e extends _{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forConfigurationInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forConfigDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},y=class e extends _{constructor(e,t){super(e,`CONFIG_FILE_NOT_FOUND`),this.filePath=t,this.name=`ConfigFileNotFoundError`}static forPath(t){return new e(`Configuration file not found: ${t}`,t)}},b=class e extends _{constructor(e,t,n){super(e,`CONFIG_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`ConfigFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch configuration from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch configuration from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},se=class e extends _{constructor(e,t,n){super(e,`CONFIG_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`ConfigParseError`}static forFile(t,n){return new e(`Failed to parse configuration file ${t}: ${n.message}`,t,n)}},x=class e extends _{constructor(e,t){super(e,`INVALID_CONFIG`),this.filePath=t,this.name=`InvalidConfigError`}static forFile(t,n){return new e(`Invalid configuration file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid configuration file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid configuration file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid configuration file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}},S=class e extends _{constructor(e,t,n,r){super(e,`DUPLICATE_ID`),this.id=t,this.type=n,this.existingType=r,this.name=`DuplicateIdError`}static forId(t,n,r){return new e(`Duplicate ID "${t}" found in ${n}. This ID is already used in ${r??`unknown`}`,t,n,r)}},C=class e extends _{constructor(e,t,n,r,i){super(e,`ID_CONFLICT`),this.id=t,this.type=n,this.baseSource=r,this.overrideSource=i,this.name=`IdConflictError`}static forTask(t,n,r){return new e(`Task ID conflict: "${t}" is defined in multiple templates.\n Base task from: ${n??`unknown`}\n Override task from: ${r??`unknown`}\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the task.\n Task is being extended/overridden but no override strategy was specified.`,t,`task`,n,r)}static forVariable(t){return new e(`Variable ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the variable.\n Variable is being extended/overridden but no override strategy was specified.`,t,`variable`)}static forPrompt(t){return new e(`Prompt ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the prompt.\n Prompt is being extended/overridden but no override strategy was specified.`,t,`prompt`)}},ce=class e extends _{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)}},le=class e extends _{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`)}},ue=class e extends _{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`)}},w=class e extends _{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`)}};let de=!1;function fe(e){de=e}const T={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},E={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},D=`\x1B[0m`;function O(e){de&&console.log(`${E.debug}${T.debug} ${e}${D}`)}function k(e){console.log(`${E.info}${T.info} ${e}${D}`)}function A(e){console.log(`${E.success}${T.success} ${e}${D}`)}function j(e){console.log(`${E.warn}${T.warn} ${e}${D}`)}function M(e){console.log(`${E.error}${T.error} ${e}${D}`)}function N(e,t=`info`){switch(t){case`debug`:O(e);break;case`info`:k(e);break;case`success`:A(e);break;case`warn`:j(e);break;case`error`:M(e);break}}function P(e,t,n){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch(t){return n?.lazy===!0&&t instanceof ReferenceError?!0:(n?.silent!==!0&&(N(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&N(` Error: ${t.message}`,`warn`)),!1)}}function pe(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)return n?.lazy===!0;if(e.type===`condition`)return P(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function F(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)try{let{execSync:n}=await import(`node:child_process`),{interpolateTemplate:r}=await import(`./utils-2sd-K2Xq.js`),i=n(r(e.value,t),{encoding:`utf-8`}).trim();if(i===``||i===`0`)return!1;let a=i.toLowerCase();return!(a===`false`||a===`no`)}catch(t){let{log:n}=await import(`./utils-2sd-K2Xq.js`);return n(`Failed to execute enabled command: ${e.value}`,`warn`),t instanceof Error&&n(` Error: ${t.message}`,`warn`),!1}if(e.type===`condition`)return P(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function me(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function he(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function ge(e,t){let n=he(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await import(`./utils-2sd-K2Xq.js`);return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await import(`./utils-2sd-K2Xq.js`);if(typeof e==`object`&&e&&`status`in e&&typeof e.status==`number`){let{status:r}=e;if(r>=1&&r<=255)return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}if(n.type===`condition`)return me(n.value,t)}return!0}function I(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function L(t){if(t==null||t===``)return`current configuration`;if(I(t))return t;let r=n.cwd();return t.startsWith(r)?e.relative(r,t):t}function _e(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];t!=null&&t!==``&&((!(t in i)||typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t])}let a=r[r.length-1];a!=null&&a!==``&&(i[a]=n)}function R(e,t){let n=t.split(`.`),r=e;for(let e of n)if(e!==``&&typeof r==`object`&&r)r=r[e];else return;return r}function z(t,r){if(I(t))return t;if(r==null||r===``)return e.isAbsolute(t)?t:e.resolve(n.cwd(),t);if(I(r))try{let e=new URL(`.`,r);return new URL(t,e).href}catch{throw Error(`Failed to resolve file path '${t}' relative to source URL '${r}'`)}let i=e.dirname(r);return e.isAbsolute(t)?t:e.resolve(i,t)}async function B(n){let{file:r,sourceUrl:a,tempFileExtension:o=`.tmp`,tempFilePrefix:s=`scaffoldfy`}=n,c=r,l,u,d=!1;if(I(r)){l=r,O(`Fetching remote file: ${l}`);let n=await q(l);d=!0;let a=i.tmpdir(),c=`${s}-${Date.now()}${o}`;u=e.join(a,c),t.writeFileSync(u,n,`utf-8`),O(`Remote file saved to temporary location: ${u}`)}else if(l=z(r,a),I(l)){O(`Fetching remote file: ${l}`);let n=await q(l);d=!0;let r=i.tmpdir(),a=`${s}-${Date.now()}${o}`;u=e.join(r,a),t.writeFileSync(u,n,`utf-8`),O(`Remote file saved to temporary location: ${u}`)}else{if(!t.existsSync(l))throw Error(`File not found: ${l}`);u=l,O(`Using local file: ${u}`)}return{localFilePath:u,isRemote:d,originalPath:c,resolvedPath:l}}function V(e){if(e.isRemote&&t.existsSync(e.localFilePath))try{t.unlinkSync(e.localFilePath),O(`Temporary file cleaned up: ${e.localFilePath}`)}catch(e){O(`Warning: Failed to clean up temporary file: ${e instanceof Error?e.message:String(e)}`)}}function H(t){switch(e.extname(t).toLowerCase()){case`.js`:case`.cjs`:case`.mjs`:return`node`;case`.sh`:return`bash`;case`.bash`:return`bash`;case`.ps1`:return`pwsh`;default:return}}function ve(e,t){switch(e){case`node`:return`node "${t}"`;case`bash`:return`bash "${t}"`;case`sh`:return`sh "${t}"`;case`pwsh`:return`pwsh -File "${t}"`;case`powershell`:return`powershell -File "${t}"`;default:return`node "${t}"`}}function ye(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function U(t,r){let i=K(t.file,r),o=t.args?.map(e=>K(e,r))??[],s={};if(t.parameters)for(let[e,n]of Object.entries(t.parameters))s[e]=K(n,r);let c=t.cwd!=null&&t.cwd!==``?e.join(n.cwd(),K(t.cwd,r)):n.cwd(),l=await B({file:i,...t.sourceUrl!=null&&t.sourceUrl!==``&&{sourceUrl:t.sourceUrl},tempFileExtension:ye(t.runtime??H(i)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:u}=l,d=t.runtime??H(u)??`node`;!t.runtime&&!H(u)&&N(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let e=ve(d,u),r=o.join(` `),i=r?`${e} ${r}`:e;O(`Executing: ${i}`);let l=a(i,{cwd:c,stdio:t.captureOutput?[`pipe`,`pipe`,`inherit`]:`inherit`,env:{...n.env,...s},encoding:t.captureOutput?`utf-8`:void 0});if(t.captureOutput)return O(`Script executed successfully with output`),typeof l==`string`?l:void 0;O(`Script executed successfully`);return}finally{V(l)}}async function W(e,t){let{id:n,contextType:r,context:i,sourceUrl:o}=t;if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let s=e;if(s.type===`conditional`){if(!i){N(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof s.condition!=`string`){N(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=P(s.condition,i)?s.ifTrue:s.ifFalse;return typeof e==`object`&&e?await W(e,t):e}catch(e){N(`${r} "${n}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec`){let e=s.value;if(typeof e!=`string`){N(`${r} "${n}": exec value must have a string command`,`error`);return}try{return G(a(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim())}catch(e){N(`${r} "${n}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`exec-file`){let e=s;if(typeof e.file!=`string`){N(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await U({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...o!=null&&{sourceUrl:o},captureOutput:!0},i??{});return t===void 0?void 0:G(t.trim())}catch(e){N(`${r} "${n}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(s.type===`static`)return s.value;if(s.type===`interpolate`){let e=s.value;if(typeof e!=`string`){N(`${r} "${n}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!i)return N(`${r} "${n}": interpolate value requires context but none provided`,`warn`),e;try{return K(e,i)}catch(t){return N(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(s.type!==void 0){N(`${r} "${n}": unknown value type "${s.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function G(e){if(e.startsWith(`{`)||e.startsWith(`[`))try{return JSON.parse(e)}catch{return e}if(/^-?\d+(?:\.\d+)?$/u.test(e)){let t=Number.parseFloat(e);if(!Number.isNaN(t))return t}return e===`true`||e===`false`?e===`true`:e}function K(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>R(t,n)?.toString()??``)}const be=r(t.readFile);async function q(e){if(I(e))return J(e);if(!t.existsSync(e))throw y.forPath(e);return be(e,`utf-8`)}async function J(e){try{let t=await fetch(e);if(!t.ok)throw b.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:b.forUrl(e,t instanceof Error?t:void 0)}}const xe=r(t.readFile);async function Y(r,i=new Set){let a=I(r),o;if(o=a||e.isAbsolute(r)?r:e.resolve(n.cwd(),r),g.has(o))return g.get(o);if(i.has(o))throw v.forConfigurationInheritance(i,o);i.add(o);let s;if(a)s=await J(o);else{if(!t.existsSync(o))throw y.forPath(o);s=await xe(o,`utf-8`)}let c;try{c=JSON.parse(s)}catch(e){throw se.forFile(o,e instanceof Error?e:Error(String(e)))}if(c.name==null||c.name.trim()===``)throw x.missingName(o);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(c.name))throw x.invalidNameFormat(o,c.name);if(c.tasks!==void 0&&!Array.isArray(c.tasks))throw x.tasksNotArray(o);c.tasks===void 0&&(c.tasks=[]);for(let e of c.tasks)e.$sourceUrl=o;if(c.variables!==void 0)for(let e of c.variables)e.$sourceUrl=o;if(c.prompts!==void 0)for(let e of c.prompts)e.$sourceUrl=o;return g.set(o,c),c}function Se(e){let t=new Map;for(let n of e){let e=t.get(n.name)||[];e.push(n),t.set(n.name,e)}if(Array.from(t.values()).some(e=>e.length>1))return e;let n=new Map,r=new Map,i=new Map;for(let t of e)if(n.set(t.name,t),i.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)i.get(t.name).add(e),r.has(e)||r.set(e,new Set),r.get(e).add(t.name);let a=new Set,o=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=i.get(n.name).size>0,c=r.has(n.name)&&r.get(n.name).size>0;!s&&!c&&(a.add(n.name),o.set(n.name,t))}let s=e.filter(e=>!a.has(e.name)),c=[],l=new Set,u=new Set;function d(e){if(l.has(e))return;if(u.has(e))throw v.forConfigDependencies(Array.from(u),e);u.add(e);let t=n.get(e);if(t!=null){let t=i.get(e);if(t!=null&&t.size>0)for(let e of t)d(e)}u.delete(e),l.add(e),t!=null&&!a.has(e)&&c.push(t)}for(let e of s)d(e.name);let f=[],p=0;for(let t=0;t<e.length;t++){let n=e[t];a.has(n.name)?f.push(n):p<c.length&&(f.push(c[p]),p++)}return f}async function X(t,r,i,a,o,s){let c=I(t),l;if(l=c||e.isAbsolute(t)?t:r==null?e.resolve(n.cwd(),t):I(r)?new URL(t,r).href:e.resolve(r,t),i.has(l))return;if(a.has(l))throw v.forConfigurationInheritance(a,l);a.add(l);let u=await Y(l),d=I(l)?new URL(`.`,l).href:e.dirname(l);if(u.extends!=null&&u.extends!==``){let e=Array.isArray(u.extends)?u.extends:[u.extends],t=u.enabled??s;for(let n of e)await X(n,d,i,a,o,t)}a.delete(l),i.add(l);let f=u.enabled==null&&s!=null?{...u,enabled:s}:u;o.push(f)}async function Z(e,t,n=new Set){let r=[];return await X(e,t,n,new Set,r),Se(r)}const Q=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:`capitalCase`,type:`capitalCase`},{id:`remove-spaces`,type:`remove-spaces`},{id:`urlencode`,type:`urlencode`},{id:`dasherize`,type:`dasherize`},{id:`underscore`,type:`underscore`},{id:`adaCase`,type:`adaCase`},{id:`cobolCase`,type:`cobolCase`},{id:`dotNotation`,type:`dotNotation`},{id:`pathCase`,type:`pathCase`},{id:`spaceCase`,type:`spaceCase`},{id:`trainCase`,type:`trainCase`},{id:`upperCamelCase`,type:`upperCamelCase`}])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 w.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof w?t:w.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`capitalCase`:return this.executeCapitalCase(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`adaCase`:return this.executeAdaCase(t);case`cobolCase`:return this.executeCobolCase(t);case`dotNotation`:return this.executeDotNotation(t);case`pathCase`:return this.executePathCase(t);case`spaceCase`:return this.executeSpaceCase(t);case`trainCase`:return this.executeTrainCase(t);case`upperCamelCase`:return this.executeUpperCamelCase(t);case`custom`:return this.executeCustom(e,t,n);case`chain`:return this.executeChainTransformer(e,t,n);default:{let t=e;throw w.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 w.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 w.executionFailed(e.id,`Expression evaluation failed: ${t instanceof Error?t.message:String(t)}`)}}executeLowercase(e){return p(String(e))}executeUppercase(e){return ae(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 w.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 w.executionFailed(e.id,`Chain transformer must have at least one transformer`);return this.executeChain(r,t,n)}executeCapitalize(e){return c(String(e))}executeTitlecase(e){return f(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return s(String(e))}executePascalcase(e){return ee(String(e))}executeSnakecase(e){return m(String(e))}executeKebabcase(e){return f(String(e))}executeConstantcase(e){return u(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 f(String(e))}executeUnderscore(e){return m(String(e))}executeCapitalCase(e){return c(String(e))}executeAdaCase(e){return o(String(e))}executeCobolCase(e){return l(String(e))}executeDotNotation(e){return d(String(e))}executePathCase(e){return te(String(e))}executeSpaceCase(e){return ne(String(e))}executeTrainCase(e){return re(String(e))}executeUpperCamelCase(e){return ie(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};async function Ce(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 Q.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function we(e,t){if((t.override??`merge`)===`replace`){N(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}N(` → Variable "${t.id}" merged (value replaced)`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}async function Te(e,t,n){let r=new Map;for(let i of e){if(n?.skipConditional===!0&&typeof i.value==`object`&&i.value!==null&&!Array.isArray(i.value)&&i.value.type===`conditional`)continue;if(i.$configEnabled!=null){let e={...t};for(let[t,n]of r.entries())e[t]=n;if(!await F(i.$configEnabled,e))continue}let e={...t};for(let[t,n]of r.entries())e[t]=n;let a=await W(i.value,{id:i.id,contextType:`Variable`,context:e,...i.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}});a!==void 0&&r.set(i.id,a)}return r}function Ee(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}function De(e,t){if((t.override??`merge`)===`replace`){N(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}N(` → Prompt "${t.id}" merged`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}const $={template:[[`template`,`templateFile`]]};function Oe(e,t,n){let r={...e},i=$[n]??[];for(let[e,n]of Object.entries(t)){for(let t of i)if(t.includes(e)){for(let n of t)n!==e&&delete r[n];break}r[e]=n}return r}function ke(e,t){let n=$[e];if(!n)return null;for(let e of n){let n=e.filter(e=>e in t&&t[e]!=null);if(n.length>1)return n}return null}function Ae(e,t){if((t.override??`merge`)===`replace`){h(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),h(` Base: ${L(e.$sourceUrl)}`,`info`),h(` Override: ${L(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}h(` → Merging task "${t.id}"`,`info`),h(` Base: ${L(e.$sourceUrl)}`,`info`),h(` Override: ${L(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=Oe(e.config,t.config,t.type);let r=ke(t.type,n);r!==null&&r.length>0&&(h(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),h(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function je(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw S.forId(t.id,`task`,r.get(t.id));r.set(t.id,`task`)}if(t!=null)for(let e of t){if(r.has(e.id))throw S.forId(e.id,`variable`,r.get(e.id));r.set(e.id,`variable`)}if(n!=null)for(let e of n){if(r.has(e.id))throw S.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function Me(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return je(t.tasks??[],t.variables,t.prompts),t}let t=new Map,n=new Map,r=new Map,i={};for(let a of e){if(a.enabled!=null&&(i[a.name]=a.enabled),a.enabled===!1){N(`⊘ Skipping disabled configuration "${a.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(a.prompts!=null)for(let e of a.prompts)if(r.has(e.id)){if(e.override==null)throw C.forPrompt(e.id);let t=De(r.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}if(a.variables!=null)for(let e of a.variables)if(n.has(e.id)){if(e.override==null)throw C.forVariable(e.id);let t=we(n.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}for(let e of a.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw C.forTask(e.id,L(n.$sourceUrl),L(e.$sourceUrl))}let n=Ae(t.get(e.id),e);a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}else{let n={...e};a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}}let a=Array.from(t.values()),o=r.size>0?Array.from(r.values()):void 0,s=n.size>0?Array.from(n.values()):void 0;je(a,s,o);let c=e[e.length-1],l={name:c.name,tasks:a};return c.description!=null&&(l.description=c.description),c.dependencies!=null&&(l.dependencies=c.dependencies),c.enabled!=null&&(l.enabled=c.enabled),o!=null&&(l.prompts=o),s!=null&&(l.variables=s),l}async function Ne(e,t,n=new Set){return Me(await Z(e,t,n))}async function Pe(e,t){if(O(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await Z(e);return O(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await Ne(e);N(`Loaded ${n.tasks?.length??0} task(s)`,`info`),n.extends!=null&&n.extends!==``&&N(`Extended from: ${(Array.isArray(n.extends)?n.extends:[n.extends]).join(`, `)}`,`info`),n.prompts!=null&&n.prompts.length>0&&N(`Found ${n.prompts.length} top-level prompt(s)`,`info`),n.variables!=null&&n.variables.length>0&&N(`Found ${n.variables.length} top-level variable(s)`,`info`);let r={tasks:n.tasks??[]};return n.prompts!=null&&(r.prompts=n.prompts),n.variables!=null&&(r.variables=n.variables),n.enabled!=null&&(r.enabled=n.enabled),n.transformers!=null&&(r.transformers=n.transformers),r}export{j as A,P as C,N as D,k as E,oe as F,le as M,ce as N,fe as O,v as P,F as S,M as T,_e as _,Te as a,ge as b,Y as c,W as d,U as f,R as g,z as h,Ee as i,ue as j,A as k,q as l,B as m,Pe as n,Ce as o,V as p,Me as r,Q as s,Ne as t,K as u,L as v,O as w,pe as x,I as y};
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`node:fs`);c=s(c);let l=require(`node:path`);l=s(l);let u=require(`node:process`);u=s(u);let d=require(`node:util`);d=s(d),require(`handlebars`);let f=require(`node:os`);f=s(f);let p=require(`node:child_process`);p=s(p);let m=require(`case-anything`);m=s(m);let h=require(`node:console`);h=s(h);const g=new Map;function ee(){g.clear()}var _=class extends Error{constructor(e,t){super(e),this.code=t,this.name=this.constructor.name}},v=class e extends _{constructor(e,t,n){super(e,`CIRCULAR_DEPENDENCY`),this.dependencyChain=t,this.resolvedPath=n,this.name=`CircularDependencyError`}static forConfigurationInheritance(t,n){let r=Array.from(t);return new e(`Circular dependency detected: ${r.join(` -> `)} -> ${n}`,r,n)}static forTaskDependency(t){return new e(`Circular dependency detected involving task: ${t}`,[t])}static forConfigDependencies(t,n){let r=[...t,n];return new e(`Circular dependency detected in template dependencies: ${r.join(` -> `)}`,r)}},y=class e extends _{constructor(e,t){super(e,`CONFIG_FILE_NOT_FOUND`),this.filePath=t,this.name=`ConfigFileNotFoundError`}static forPath(t){return new e(`Configuration file not found: ${t}`,t)}},b=class e extends _{constructor(e,t,n){super(e,`CONFIG_FETCH_ERROR`),this.url=t,this.originalError=n,this.name=`ConfigFetchError`}static forUrl(t,n,r){return typeof n==`number`?new e(`Failed to fetch configuration from ${t}: ${n} ${r??``}`.trim(),t):new e(`Failed to fetch configuration from ${t}: ${n?.message??String(n??`Unknown error`)}`,t,n)}},te=class e extends _{constructor(e,t,n){super(e,`CONFIG_PARSE_ERROR`),this.filePath=t,this.originalError=n,this.name=`ConfigParseError`}static forFile(t,n){return new e(`Failed to parse configuration file ${t}: ${n.message}`,t,n)}},x=class e extends _{constructor(e,t){super(e,`INVALID_CONFIG`),this.filePath=t,this.name=`InvalidConfigError`}static forFile(t,n){return new e(`Invalid configuration file ${t}: ${n}`,t)}static tasksNotArray(t){return new e(`Invalid configuration file ${t}: 'tasks' must be an array if provided`,t)}static missingName(t){return new e(`Invalid configuration file ${t}: 'name' field is required`,t)}static invalidNameFormat(t,n){return new e(`Invalid configuration file ${t}: 'name' field "${n}" must contain only lowercase letters, digits, and hyphens. It cannot start or end with a hyphen, and cannot contain consecutive hyphens.`,t)}},S=class e extends _{constructor(e,t,n,r){super(e,`DUPLICATE_ID`),this.id=t,this.type=n,this.existingType=r,this.name=`DuplicateIdError`}static forId(t,n,r){return new e(`Duplicate ID "${t}" found in ${n}. This ID is already used in ${r??`unknown`}`,t,n,r)}},C=class e extends _{constructor(e,t,n,r,i){super(e,`ID_CONFLICT`),this.id=t,this.type=n,this.baseSource=r,this.overrideSource=i,this.name=`IdConflictError`}static forTask(t,n,r){return new e(`Task ID conflict: "${t}" is defined in multiple templates.\n Base task from: ${n??`unknown`}\n Override task from: ${r??`unknown`}\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the task.\n Task is being extended/overridden but no override strategy was specified.`,t,`task`,n,r)}static forVariable(t){return new e(`Variable ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the variable.\n Variable is being extended/overridden but no override strategy was specified.`,t,`variable`)}static forPrompt(t){return new e(`Prompt ID conflict: "${t}" is defined in multiple templates.\n You must specify an override strategy: add "override": "merge" or "override": "replace" to the prompt.\n Prompt is being extended/overridden but no override strategy was specified.`,t,`prompt`)}},ne=class e extends _{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)}},re=class e extends _{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`)}},ie=class e extends _{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`)}},w=class e extends _{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`)}};let T=!1;function ae(e){T=e}const E={debug:`🐛`,info:`ℹ`,success:`✓`,warn:`⚠`,error:`✗`},D={debug:`\x1B[35m`,info:`\x1B[36m`,success:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`},O=`\x1B[0m`;function k(e){T&&console.log(`${D.debug}${E.debug} ${e}${O}`)}function A(e){console.log(`${D.info}${E.info} ${e}${O}`)}function j(e){console.log(`${D.success}${E.success} ${e}${O}`)}function M(e){console.log(`${D.warn}${E.warn} ${e}${O}`)}function N(e){console.log(`${D.error}${E.error} ${e}${O}`)}function P(e,t=`info`){switch(t){case`debug`:k(e);break;case`info`:A(e);break;case`success`:j(e);break;case`warn`:M(e);break;case`error`:N(e);break}}function F(e,t,n){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch(t){return n?.lazy===!0&&t instanceof ReferenceError?!0:(n?.silent!==!0&&(P(`Failed to evaluate condition: ${e}`,`warn`),t instanceof Error&&P(` Error: ${t.message}`,`warn`)),!1)}}function oe(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)return n?.lazy===!0;if(e.type===`condition`)return F(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function I(e,t,n){if(e===void 0)return!0;if(typeof e==`boolean`)return e;if(typeof e==`object`&&`type`in e){if(e.type===`exec`)try{let{execSync:n}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-DJMfWehf.cjs`)),i=n(r(e.value,t),{encoding:`utf-8`}).trim();if(i===``||i===`0`)return!1;let a=i.toLowerCase();return!(a===`false`||a===`no`)}catch(t){let{log:n}=await Promise.resolve().then(()=>require(`./utils-DJMfWehf.cjs`));return n(`Failed to execute enabled command: ${e.value}`,`warn`),t instanceof Error&&n(` Error: ${t.message}`,`warn`),!1}if(e.type===`condition`)return F(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function se(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function ce(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function le(e,t){let n=ce(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-DJMfWehf.cjs`));return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await Promise.resolve().then(()=>require(`./utils-DJMfWehf.cjs`));if(typeof e==`object`&&e&&`status`in e&&typeof e.status==`number`){let{status:r}=e;if(r>=1&&r<=255)return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}return t(`Failed to execute required command: ${n.value}`,`warn`),e instanceof Error&&t(` Error: ${e.message}`,`warn`),!1}if(n.type===`condition`)return se(n.value,t)}return!0}function L(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function R(e){if(e==null||e===``)return`current configuration`;if(L(e))return e;let t=u.default.cwd();return e.startsWith(t)?l.default.relative(t,e):e}function ue(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];t!=null&&t!==``&&((!(t in i)||typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t])}let a=r[r.length-1];a!=null&&a!==``&&(i[a]=n)}function z(e,t){let n=t.split(`.`),r=e;for(let e of n)if(e!==``&&typeof r==`object`&&r)r=r[e];else return;return r}function B(e,t){if(L(e))return e;if(t==null||t===``)return l.default.isAbsolute(e)?e:l.default.resolve(u.default.cwd(),e);if(L(t))try{let n=new URL(`.`,t);return new URL(e,n).href}catch{throw Error(`Failed to resolve file path '${e}' relative to source URL '${t}'`)}let n=l.default.dirname(t);return l.default.isAbsolute(e)?e:l.default.resolve(n,e)}async function V(e){let{file:t,sourceUrl:n,tempFileExtension:r=`.tmp`,tempFilePrefix:i=`scaffoldfy`}=e,a=t,o,s,u=!1;if(L(t)){o=t,k(`Fetching remote file: ${o}`);let e=await J(o);u=!0;let n=f.default.tmpdir(),a=`${i}-${Date.now()}${r}`;s=l.default.join(n,a),c.default.writeFileSync(s,e,`utf-8`),k(`Remote file saved to temporary location: ${s}`)}else if(o=B(t,n),L(o)){k(`Fetching remote file: ${o}`);let e=await J(o);u=!0;let t=f.default.tmpdir(),n=`${i}-${Date.now()}${r}`;s=l.default.join(t,n),c.default.writeFileSync(s,e,`utf-8`),k(`Remote file saved to temporary location: ${s}`)}else{if(!c.default.existsSync(o))throw Error(`File not found: ${o}`);s=o,k(`Using local file: ${s}`)}return{localFilePath:s,isRemote:u,originalPath:a,resolvedPath:o}}function H(e){if(e.isRemote&&c.default.existsSync(e.localFilePath))try{c.default.unlinkSync(e.localFilePath),k(`Temporary file cleaned up: ${e.localFilePath}`)}catch(e){k(`Warning: Failed to clean up temporary file: ${e instanceof Error?e.message:String(e)}`)}}function U(e){switch(l.default.extname(e).toLowerCase()){case`.js`:case`.cjs`:case`.mjs`:return`node`;case`.sh`:return`bash`;case`.bash`:return`bash`;case`.ps1`:return`pwsh`;default:return}}function de(e,t){switch(e){case`node`:return`node "${t}"`;case`bash`:return`bash "${t}"`;case`sh`:return`sh "${t}"`;case`pwsh`:return`pwsh -File "${t}"`;case`powershell`:return`powershell -File "${t}"`;default:return`node "${t}"`}}function fe(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function W(e,t){let n=q(e.file,t),r=e.args?.map(e=>q(e,t))??[],i={};if(e.parameters)for(let[n,r]of Object.entries(e.parameters))i[n]=q(r,t);let a=e.cwd!=null&&e.cwd!==``?l.default.join(u.default.cwd(),q(e.cwd,t)):u.default.cwd(),o=await V({file:n,...e.sourceUrl!=null&&e.sourceUrl!==``&&{sourceUrl:e.sourceUrl},tempFileExtension:fe(e.runtime??U(n)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:s}=o,c=e.runtime??U(s)??`node`;!e.runtime&&!U(s)&&P(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let t=de(c,s),n=r.join(` `),o=n?`${t} ${n}`:t;k(`Executing: ${o}`);let l=(0,p.execSync)(o,{cwd:a,stdio:e.captureOutput?[`pipe`,`pipe`,`inherit`]:`inherit`,env:{...u.default.env,...i},encoding:e.captureOutput?`utf-8`:void 0});if(e.captureOutput)return k(`Script executed successfully with output`),typeof l==`string`?l:void 0;k(`Script executed successfully`);return}finally{H(o)}}async function G(e,t){let{id:n,contextType:r,context:i,sourceUrl:a}=t;if(e==null)return;if(typeof e!=`object`||!e||Array.isArray(e))return e;let o=e;if(o.type===`conditional`){if(!i){P(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof o.condition!=`string`){P(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=F(o.condition,i)?o.ifTrue:o.ifFalse;return typeof e==`object`&&e?await G(e,t):e}catch(e){P(`${r} "${n}": failed to evaluate conditional value: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(o.type===`exec`){let e=o.value;if(typeof e!=`string`){P(`${r} "${n}": exec value must have a string command`,`error`);return}try{return K((0,p.execSync)(e,{encoding:`utf-8`,stdio:[`pipe`,`pipe`,`pipe`],timeout:1e4}).trim())}catch(e){P(`${r} "${n}": failed to execute command: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(o.type===`exec-file`){let e=o;if(typeof e.file!=`string`){P(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await W({file:e.file,...e.runtime!=null&&e.runtime.trim()!==``&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!==void 0&&e.cwd.trim()!==``&&{cwd:e.cwd},...a!=null&&{sourceUrl:a},captureOutput:!0},i??{});return t===void 0?void 0:K(t.trim())}catch(e){P(`${r} "${n}": failed to execute script file: ${e instanceof Error?e.message:`Unknown error`}`,`warn`);return}}if(o.type===`static`)return o.value;if(o.type===`interpolate`){let e=o.value;if(typeof e!=`string`){P(`${r} "${n}": interpolate value must be a string with {{variable}} placeholders`,`error`);return}if(!i)return P(`${r} "${n}": interpolate value requires context but none provided`,`warn`),e;try{return q(e,i)}catch(t){return P(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(o.type!==void 0){P(`${r} "${n}": unknown value type "${o.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function K(e){if(e.startsWith(`{`)||e.startsWith(`[`))try{return JSON.parse(e)}catch{return e}if(/^-?\d+(?:\.\d+)?$/u.test(e)){let t=Number.parseFloat(e);if(!Number.isNaN(t))return t}return e===`true`||e===`false`?e===`true`:e}function q(e,t){return e.replace(/\{\{(?<key>[\w.]+)\}\}/gu,(e,n)=>z(t,n)?.toString()??``)}const pe=(0,d.promisify)(c.default.readFile);async function J(e){if(L(e))return Y(e);if(!c.default.existsSync(e))throw y.forPath(e);return pe(e,`utf-8`)}async function Y(e){try{let t=await fetch(e);if(!t.ok)throw b.forUrl(e,t.status,t.statusText);return await t.text()}catch(t){throw t instanceof Error&&t.message.includes(`Failed to fetch`)?t:b.forUrl(e,t instanceof Error?t:void 0)}}const me=(0,d.promisify)(c.default.readFile);async function X(e,t=new Set){let n=L(e),r;if(r=n||l.default.isAbsolute(e)?e:l.default.resolve(u.default.cwd(),e),g.has(r))return g.get(r);if(t.has(r))throw v.forConfigurationInheritance(t,r);t.add(r);let i;if(n)i=await Y(r);else{if(!c.default.existsSync(r))throw y.forPath(r);i=await me(r,`utf-8`)}let a;try{a=JSON.parse(i)}catch(e){throw te.forFile(r,e instanceof Error?e:Error(String(e)))}if(a.name==null||a.name.trim()===``)throw x.missingName(r);if(!/^[a-z\d]+(?:-[a-z\d]+)*$/u.test(a.name))throw x.invalidNameFormat(r,a.name);if(a.tasks!==void 0&&!Array.isArray(a.tasks))throw x.tasksNotArray(r);a.tasks===void 0&&(a.tasks=[]);for(let e of a.tasks)e.$sourceUrl=r;if(a.variables!==void 0)for(let e of a.variables)e.$sourceUrl=r;if(a.prompts!==void 0)for(let e of a.prompts)e.$sourceUrl=r;return g.set(r,a),a}function he(e){let t=new Map;for(let n of e){let e=t.get(n.name)||[];e.push(n),t.set(n.name,e)}if(Array.from(t.values()).some(e=>e.length>1))return e;let n=new Map,r=new Map,i=new Map;for(let t of e)if(n.set(t.name,t),i.set(t.name,new Set),t.dependencies!=null&&t.dependencies.length>0)for(let e of t.dependencies)i.get(t.name).add(e),r.has(e)||r.set(e,new Set),r.get(e).add(t.name);let a=new Set,o=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=i.get(n.name).size>0,c=r.has(n.name)&&r.get(n.name).size>0;!s&&!c&&(a.add(n.name),o.set(n.name,t))}let s=e.filter(e=>!a.has(e.name)),c=[],l=new Set,u=new Set;function d(e){if(l.has(e))return;if(u.has(e))throw v.forConfigDependencies(Array.from(u),e);u.add(e);let t=n.get(e);if(t!=null){let t=i.get(e);if(t!=null&&t.size>0)for(let e of t)d(e)}u.delete(e),l.add(e),t!=null&&!a.has(e)&&c.push(t)}for(let e of s)d(e.name);let f=[],p=0;for(let t=0;t<e.length;t++){let n=e[t];a.has(n.name)?f.push(n):p<c.length&&(f.push(c[p]),p++)}return f}async function Z(e,t,n,r,i,a){let o=L(e),s;if(s=o||l.default.isAbsolute(e)?e:t==null?l.default.resolve(u.default.cwd(),e):L(t)?new URL(e,t).href:l.default.resolve(t,e),n.has(s))return;if(r.has(s))throw v.forConfigurationInheritance(r,s);r.add(s);let c=await X(s),d=L(s)?new URL(`.`,s).href:l.default.dirname(s);if(c.extends!=null&&c.extends!==``){let e=Array.isArray(c.extends)?c.extends:[c.extends],t=c.enabled??a;for(let a of e)await Z(a,d,n,r,i,t)}r.delete(s),n.add(s);let f=c.enabled==null&&a!=null?{...c,enabled:a}:c;i.push(f)}async function Q(e,t,n=new Set){let r=[];return await Z(e,t,n,new Set,r),he(r)}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:`capitalCase`,type:`capitalCase`},{id:`remove-spaces`,type:`remove-spaces`},{id:`urlencode`,type:`urlencode`},{id:`dasherize`,type:`dasherize`},{id:`underscore`,type:`underscore`},{id:`adaCase`,type:`adaCase`},{id:`cobolCase`,type:`cobolCase`},{id:`dotNotation`,type:`dotNotation`},{id:`pathCase`,type:`pathCase`},{id:`spaceCase`,type:`spaceCase`},{id:`trainCase`,type:`trainCase`},{id:`upperCamelCase`,type:`upperCamelCase`}])this.transformers.set(e.id,e)}register(e){this.transformers.has(e.id)&&P(`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 w.notFound(e);try{return await this.executeTransformer(r,t,n)}catch(t){throw t instanceof w?t:w.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`capitalCase`:return this.executeCapitalCase(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`adaCase`:return this.executeAdaCase(t);case`cobolCase`:return this.executeCobolCase(t);case`dotNotation`:return this.executeDotNotation(t);case`pathCase`:return this.executePathCase(t);case`spaceCase`:return this.executeSpaceCase(t);case`trainCase`:return this.executeTrainCase(t);case`upperCamelCase`:return this.executeUpperCamelCase(t);case`custom`:return this.executeCustom(e,t,n);case`chain`:return this.executeChainTransformer(e,t,n);default:{let t=e;throw w.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 w.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 w.executionFailed(e.id,`Expression evaluation failed: ${t instanceof Error?t.message:String(t)}`)}}executeLowercase(e){return(0,m.lowerCase)(String(e))}executeUppercase(e){return(0,m.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 w.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 w.executionFailed(e.id,`Chain transformer must have at least one transformer`);return this.executeChain(r,t,n)}executeCapitalize(e){return(0,m.capitalCase)(String(e))}executeTitlecase(e){return(0,m.kebabCase)(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return(0,m.camelCase)(String(e))}executePascalcase(e){return(0,m.pascalCase)(String(e))}executeSnakecase(e){return(0,m.snakeCase)(String(e))}executeKebabcase(e){return(0,m.kebabCase)(String(e))}executeConstantcase(e){return(0,m.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,m.kebabCase)(String(e))}executeUnderscore(e){return(0,m.snakeCase)(String(e))}executeCapitalCase(e){return(0,m.capitalCase)(String(e))}executeAdaCase(e){return(0,m.adaCase)(String(e))}executeCobolCase(e){return(0,m.cobolCase)(String(e))}executeDotNotation(e){return(0,m.dotNotation)(String(e))}executePathCase(e){return(0,m.pathCase)(String(e))}executeSpaceCase(e){return(0,m.spaceCase)(String(e))}executeTrainCase(e){return(0,m.trainCase)(String(e))}executeUpperCamelCase(e){return(0,m.upperCamelCase)(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};const $=new ge;async function _e(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 $.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function ve(e,t){if((t.override??`merge`)===`replace`){P(` → Variable "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}P(` → Variable "${t.id}" merged (value replaced)`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}async function ye(e,t,n){let r=new Map;for(let i of e){if(n?.skipConditional===!0&&typeof i.value==`object`&&i.value!==null&&!Array.isArray(i.value)&&i.value.type===`conditional`)continue;if(i.$configEnabled!=null){let e={...t};for(let[t,n]of r.entries())e[t]=n;if(!await I(i.$configEnabled,e))continue}let e={...t};for(let[t,n]of r.entries())e[t]=n;let a=await G(i.value,{id:i.id,contextType:`Variable`,context:e,...i.$sourceUrl!=null&&{sourceUrl:i.$sourceUrl}});a!==void 0&&r.set(i.id,a)}return r}function be(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}function xe(e,t){if((t.override??`merge`)===`replace`){P(` → Prompt "${t.id}" using 'replace' strategy`,`info`);let{override:e,...n}=t;return n}P(` → Prompt "${t.id}" merged`,`info`);let n=t.$sourceUrl??e.$sourceUrl,r={...e,...t,...n!=null&&{$sourceUrl:n}};return delete r.override,r}const Se={template:[[`template`,`templateFile`]]};function Ce(e,t,n){let r={...e},i=Se[n]??[];for(let[e,n]of Object.entries(t)){for(let t of i)if(t.includes(e)){for(let n of t)n!==e&&delete r[n];break}r[e]=n}return r}function we(e,t){let n=Se[e];if(!n)return null;for(let e of n){let n=e.filter(e=>e in t&&t[e]!=null);if(n.length>1)return n}return null}function Te(e,t){if((t.override??`merge`)===`replace`){(0,h.log)(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),(0,h.log)(` Base: ${R(e.$sourceUrl)}`,`info`),(0,h.log)(` Override: ${R(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}(0,h.log)(` → Merging task "${t.id}"`,`info`),(0,h.log)(` Base: ${R(e.$sourceUrl)}`,`info`),(0,h.log)(` Override: ${R(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=Ce(e.config,t.config,t.type);let r=we(t.type,n);r!==null&&r.length>0&&((0,h.log)(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),(0,h.log)(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function Ee(e,t,n){let r=new Map;for(let t of e){if(r.has(t.id))throw S.forId(t.id,`task`,r.get(t.id));r.set(t.id,`task`)}if(t!=null)for(let e of t){if(r.has(e.id))throw S.forId(e.id,`variable`,r.get(e.id));r.set(e.id,`variable`)}if(n!=null)for(let e of n){if(r.has(e.id))throw S.forId(e.id,`prompt`,r.get(e.id));r.set(e.id,`prompt`)}}function De(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return Ee(t.tasks??[],t.variables,t.prompts),t}let t=new Map,n=new Map,r=new Map,i={};for(let a of e){if(a.enabled!=null&&(i[a.name]=a.enabled),a.enabled===!1){P(`⊘ Skipping disabled configuration "${a.name}" - its tasks, prompts, and variables will not be included`,`info`);continue}if(a.prompts!=null)for(let e of a.prompts)if(r.has(e.id)){if(e.override==null)throw C.forPrompt(e.id);let t=xe(r.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),r.set(e.id,t)}if(a.variables!=null)for(let e of a.variables)if(n.has(e.id)){if(e.override==null)throw C.forVariable(e.id);let t=ve(n.get(e.id),e);a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}else{let t={...e};a.enabled!=null&&(t.$configEnabled=a.enabled),n.set(e.id,t)}for(let e of a.tasks??[])if(t.has(e.id)){if(e.override==null){let n=t.get(e.id);throw C.forTask(e.id,R(n.$sourceUrl),R(e.$sourceUrl))}let n=Te(t.get(e.id),e);a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}else{let n={...e};a.enabled!=null&&(n.$configEnabled=a.enabled),t.set(e.id,n)}}let a=Array.from(t.values()),o=r.size>0?Array.from(r.values()):void 0,s=n.size>0?Array.from(n.values()):void 0;Ee(a,s,o);let c=e[e.length-1],l={name:c.name,tasks:a};return c.description!=null&&(l.description=c.description),c.dependencies!=null&&(l.dependencies=c.dependencies),c.enabled!=null&&(l.enabled=c.enabled),o!=null&&(l.prompts=o),s!=null&&(l.variables=s),l}async function Oe(e,t,n=new Set){return De(await Q(e,t,n))}async function ke(e,t){if(k(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await Q(e);return k(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await Oe(e);P(`Loaded ${n.tasks?.length??0} task(s)`,`info`),n.extends!=null&&n.extends!==``&&P(`Extended from: ${(Array.isArray(n.extends)?n.extends:[n.extends]).join(`, `)}`,`info`),n.prompts!=null&&n.prompts.length>0&&P(`Found ${n.prompts.length} top-level prompt(s)`,`info`),n.variables!=null&&n.variables.length>0&&P(`Found ${n.variables.length} top-level variable(s)`,`info`);let r={tasks:n.tasks??[]};return n.prompts!=null&&(r.prompts=n.prompts),n.variables!=null&&(r.variables=n.variables),n.enabled!=null&&(r.enabled=n.enabled),n.transformers!=null&&(r.transformers=n.transformers),r}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return L}});
@@ -1,4 +0,0 @@
1
- import{D as e,E as t,S as n,a as r,i,o as a,w as o}from"./configurations-BFx3CItg.js";import{S as s,a as c,c as l,l as u,n as d,o as f,r as p,u as m}from"./tasks-CMhsXaOx.js";import h from"node:process";async function g(e,t){let n=e.prompts??[];if(n.length>0){let e=l(n);e.length>0&&(console.error(`❌ Prompt validation errors:`),e.forEach(e=>console.error(` - ${e}`)),h.exit(1));let r=await m(n,await u(n,t),t);Object.assign(t,r)}}async function _(e,t){let n=e.variables??[];if(n.length>0){let o=i(n);o.length>0&&(console.error(`❌ Variable validation errors:`),o.forEach(e=>console.error(` - ${e}`)),h.exit(1));let s=await a(n,await r(n,t,{skipConditional:!0}),t);Object.assign(t,s),await v(e,t)}}async function v(e,t){let n=e.variables??[];if(n.length===0)return;let i=n.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(i.length>0){let e=await a(i,await r(i,t),t);Object.assign(t,e)}}async function y(e,r){return await n(e.enabled,r)?(await _(e,r),await g(e,r),await v(e,r),await n(e.enabled,r)?!0:(t(`⊘ Config "${e.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(t(`⊘ Config "${e.name}" is disabled - skipping`),!1)}async function b(n,r,i={}){o(`Running configs with sequential variable/prompt resolution...`),o(`Total configs to process: ${n.length}`),o(`Registering built-in plugins...`),f();let a=[];console.log(``),t(`📋 Collecting input...`),console.log(``);for(let e=0;e<n.length;e++){let t=n[e];if(t==null)continue;let r=`=`.repeat(60);if(o(`\n${r}`),o(`Processing config ${e+1}/${n.length}: "${t.name}"`),o(r),o(`Current config keys: ${Object.keys(i).join(`, `)}`),await y(t,i)){let e=t.tasks??[];e.length>0&&(o(`Found ${e.length} task(s) in config "${t.name}" (will execute later)`),a.push(...e))}}if(o(`
2
- 🔧 Validating and filtering all collected tasks...`),a.length===0){e(`No tasks found in any config`,`info`);return}console.log(``),e(`🛠️ Preparing tasks...`,`info`);let l=await p(a,i);if(console.log(``),e(`Found ${a.length} tasks (${l.length} enabled)`,`info`),e(`All tasks validated successfully`,`success`),l.length===0){e(`No enabled tasks to execute`,`info`);return}let u=d(l);if(r.dryRun){e(`
3
- 🔍 Dry run - showing task changes...`,`info`),await s(u,i),e(`
4
- 🔍 Dry run completed - no changes were made`,`info`),e(`Run without --dry-run to apply changes`,`info`);return}console.log(``),t(`⚙️ Executing tasks...`),console.log(``),await c(u,i,r)}export{b as runConfigurationSequentially};
@@ -1,4 +0,0 @@
1
- const e=require(`./configurations-DJ1eNatp.cjs`),t=require(`./tasks-BiruGt8T.cjs`);let n=require(`node:process`);n=e.I(n);async function r(e,r){let i=e.prompts??[];if(i.length>0){let e=t.c(i);e.length>0&&(console.error(`❌ Prompt validation errors:`),e.forEach(e=>console.error(` - ${e}`)),n.default.exit(1));let a=await t.u(i,await t.l(i,r),r);Object.assign(r,a)}}async function i(t,r){let i=t.variables??[];if(i.length>0){let o=e.i(i);o.length>0&&(console.error(`❌ Variable validation errors:`),o.forEach(e=>console.error(` - ${e}`)),n.default.exit(1));let s=await e.o(i,await e.a(i,r,{skipConditional:!0}),r);Object.assign(r,s),await a(t,r)}}async function a(t,n){let r=t.variables??[];if(r.length===0)return;let i=r.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(i.length>0){let t=await e.o(i,await e.a(i,n),n);Object.assign(n,t)}}async function o(t,n){return await e.S(t.enabled,n)?(await i(t,n),await r(t,n),await a(t,n),await e.S(t.enabled,n)?!0:(e.E(`⊘ Config "${t.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(e.E(`⊘ Config "${t.name}" is disabled - skipping`),!1)}async function s(n,r,i={}){e.w(`Running configs with sequential variable/prompt resolution...`),e.w(`Total configs to process: ${n.length}`),e.w(`Registering built-in plugins...`),t.o();let a=[];console.log(``),e.E(`📋 Collecting input...`),console.log(``);for(let t=0;t<n.length;t++){let r=n[t];if(r==null)continue;let s=`=`.repeat(60);if(e.w(`\n${s}`),e.w(`Processing config ${t+1}/${n.length}: "${r.name}"`),e.w(s),e.w(`Current config keys: ${Object.keys(i).join(`, `)}`),await o(r,i)){let t=r.tasks??[];t.length>0&&(e.w(`Found ${t.length} task(s) in config "${r.name}" (will execute later)`),a.push(...t))}}if(e.w(`
2
- 🔧 Validating and filtering all collected tasks...`),a.length===0){e.D(`No tasks found in any config`,`info`);return}console.log(``),e.D(`🛠️ Preparing tasks...`,`info`);let s=await t.r(a,i);if(console.log(``),e.D(`Found ${a.length} tasks (${s.length} enabled)`,`info`),e.D(`All tasks validated successfully`,`success`),s.length===0){e.D(`No enabled tasks to execute`,`info`);return}let c=t.n(s);if(r.dryRun){e.D(`
3
- 🔍 Dry run - showing task changes...`,`info`),await t.S(c,i),e.D(`
4
- 🔍 Dry run completed - no changes were made`,`info`),e.D(`Run without --dry-run to apply changes`,`info`);return}console.log(``),e.E(`⚙️ Executing tasks...`),console.log(``),await t.a(c,i,r)}exports.runConfigurationSequentially=s;
@@ -1 +0,0 @@
1
- const e=require(`./configurations-DJ1eNatp.cjs`),t=require(`./initial-config-CESipc-c.cjs`),n=require(`./tasks-BiruGt8T.cjs`),r=require(`./validate-scaffoldfy-json-Bq2USY66.cjs`);let i=require(`node:process`);i=e.I(i);async function a(a,o){let s=t.t();if(!await e.S(o.configEnabled,s,{lazy:!0})){e.E(`⊘ Template is disabled - skipping all execution`);return}o.transformers!==void 0&&o.transformers.length>0&&(e.w(`Registering ${o.transformers.length} transformer(s)...`),e.s.registerAll(o.transformers)),e.w(`Registering built-in plugins...`),n.o(),e.w(`Validating task configurations...`);let c=n.t(a);c.length>0&&(r.t(c),i.default.exit(1)),e.w(`All tasks validated successfully`);let l=a.filter(n=>e.x(n.enabled,t.t(),{lazy:!0}));e.w(`Resolving task dependencies...`);let u=n.i(l);e.w(`Sorted ${u.length} task(s) by dependencies`),e.E(`Welcome! Let's execute your tasks.`),o.dryRun&&e.A(`🔍 DRY RUN MODE - No changes will be made`),e.E(`This will execute your project tasks based on the defined configuration.`);let d=s,f=[...o.variables??[]];if(f.length>0){let t=e.i(f);t.length>0&&(e.D(`❌ Variable validation errors:`,`error`),t.forEach(t=>e.D(` - ${t}`,`error`)),i.default.exit(1)),e.w(`Resolving variable values...`);let n=await e.o(f,await e.a(f,d,{skipConditional:!0}),d);Object.assign(d,n),Object.keys(n).length>0&&(e.w(`Resolved ${Object.keys(n).length} variable(s)`),e.w(`Variable values: ${JSON.stringify(n)}`))}let p=o.prompts??[],m=[...p];if(m.length>0){let t=n.c(m);t.length>0&&(e.D(`❌ Prompt validation errors:`,`error`),t.forEach(t=>e.D(` - ${t}`,`error`)),i.default.exit(1)),e.w(`Resolving prompt default values...`);let r=await n.l(m,d);if(p.length>0){e.E(`📋 Collecting prompts (available to all tasks):`);let t=await n.u(p,r,d);Object.assign(d,t)}}if(f.length>0){let t=f.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(t.length>0){e.w(`Re-resolving conditional variables with prompt values...`);let n=await e.o(t,await e.a(t,d),d);Object.assign(d,n),Object.keys(n).length>0&&e.w(`Resolved ${Object.keys(n).length} conditional variable(s)`)}}if(!await e.S(o.configEnabled,d)){e.E(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let h=[];for(let t of u)t.$configEnabled!=null&&!await e.S(t.$configEnabled,d)||await e.S(t.enabled,d)&&h.push(t);if(e.D(`${h.length} of ${u.length} task(s) enabled for execution`,`info`),o.dryRun){await n.S(h,d),e.E(`🔍 Dry run completed - no changes were made`),e.E(`Run without --dry-run to apply changes`);return}e.w(`Calling beforeAll hook...`),await n.b(`beforeAll`,d);let g=h.length,_=0,v=0,y=[],b=[];for(let t=0;t<h.length;t++){let r=h[t];r!=null&&(e.w(`Calling beforeTask hook for task: ${r.name}`),await n.b(`beforeTask`,r,d),await n.s(r,d,t+1,g,o.dryRun)?(_++,y.push(r.id),e.w(`Calling afterTask hook for task: ${r.name}`),await n.b(`afterTask`,r,d)):(await e.b(r.required,d)&&(v++,b.push(r.name)),e.w(`Calling onError hook for task: ${r.name}`),await n.b(`onError`,Error(`Task ${r.name} failed`),r),e.A(`⚠️ Task "${r.name}" failed, continuing with remaining tasks...`)))}v>0&&(e.D(`\n❌ Task execution completed with ${v} error(s)`,`error`),e.D(`Completed: ${_}/${g} tasks`,`info`),e.D(`Failed tasks: ${b.join(`, `)}`,`error`),i.default.exit(1)),e.w(`Calling afterAll hook...`),await n.b(`afterAll`,d),e.k(`✅ All tasks completed successfully!`),e.k(` Completed: ${_}/${g} tasks`)}const o=i.default.argv.includes(`--dry-run`),s=i.default.argv.includes(`--force`);async function c(t,n){try{await a(t,{dryRun:n?.dryRun??o,force:n?.force??s,configFilePath:n?.configFilePath??void 0,...n?.variables!=null&&{variables:n.variables},...n?.prompts!=null&&{prompts:n.prompts},...n?.configEnabled!=null&&{configEnabled:n.configEnabled},...n?.transformers!=null&&{transformers:n.transformers}})}catch(t){e.D(`❌ Task execution failed`,`error`),t instanceof Error?(e.D(`Error: ${t.message}`,`error`),i.default.env.DEBUG!=null&&console.error(t.stack)):console.error(t),i.default.exit(1)}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
@@ -1 +0,0 @@
1
- import{A as e,D as t,E as n,S as r,a as i,b as a,i as o,k as s,o as c,s as l,w as u,x as d}from"./configurations-BFx3CItg.js";import{t as f}from"./initial-config-Dt0jw4Vs.js";import{S as p,b as m,c as h,i as g,l as _,o as v,s as y,t as b,u as x}from"./tasks-CMhsXaOx.js";import{t as S}from"./validate-scaffoldfy-json-gnb3COkM.js";import C from"node:process";async function w(w,T){let E=f();if(!await r(T.configEnabled,E,{lazy:!0})){n(`⊘ Template is disabled - skipping all execution`);return}T.transformers!==void 0&&T.transformers.length>0&&(u(`Registering ${T.transformers.length} transformer(s)...`),l.registerAll(T.transformers)),u(`Registering built-in plugins...`),v(),u(`Validating task configurations...`);let D=b(w);D.length>0&&(S(D),C.exit(1)),u(`All tasks validated successfully`);let O=w.filter(e=>d(e.enabled,f(),{lazy:!0}));u(`Resolving task dependencies...`);let k=g(O);u(`Sorted ${k.length} task(s) by dependencies`),n(`Welcome! Let's execute your tasks.`),T.dryRun&&e(`🔍 DRY RUN MODE - No changes will be made`),n(`This will execute your project tasks based on the defined configuration.`);let A=E,j=[...T.variables??[]];if(j.length>0){let e=o(j);e.length>0&&(t(`❌ Variable validation errors:`,`error`),e.forEach(e=>t(` - ${e}`,`error`)),C.exit(1)),u(`Resolving variable values...`);let n=await c(j,await i(j,A,{skipConditional:!0}),A);Object.assign(A,n),Object.keys(n).length>0&&(u(`Resolved ${Object.keys(n).length} variable(s)`),u(`Variable values: ${JSON.stringify(n)}`))}let M=T.prompts??[],N=[...M];if(N.length>0){let e=h(N);e.length>0&&(t(`❌ Prompt validation errors:`,`error`),e.forEach(e=>t(` - ${e}`,`error`)),C.exit(1)),u(`Resolving prompt default values...`);let r=await _(N,A);if(M.length>0){n(`📋 Collecting prompts (available to all tasks):`);let e=await x(M,r,A);Object.assign(A,e)}}if(j.length>0){let e=j.filter(e=>typeof e.value==`object`&&e.value!==null&&!Array.isArray(e.value)?e.value.type===`conditional`:!1);if(e.length>0){u(`Re-resolving conditional variables with prompt values...`);let t=await c(e,await i(e,A),A);Object.assign(A,t),Object.keys(t).length>0&&u(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await r(T.configEnabled,A)){n(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let P=[];for(let e of k)e.$configEnabled!=null&&!await r(e.$configEnabled,A)||await r(e.enabled,A)&&P.push(e);if(t(`${P.length} of ${k.length} task(s) enabled for execution`,`info`),T.dryRun){await p(P,A),n(`🔍 Dry run completed - no changes were made`),n(`Run without --dry-run to apply changes`);return}u(`Calling beforeAll hook...`),await m(`beforeAll`,A);let F=P.length,I=0,L=0,R=[],z=[];for(let t=0;t<P.length;t++){let n=P[t];n!=null&&(u(`Calling beforeTask hook for task: ${n.name}`),await m(`beforeTask`,n,A),await y(n,A,t+1,F,T.dryRun)?(I++,R.push(n.id),u(`Calling afterTask hook for task: ${n.name}`),await m(`afterTask`,n,A)):(await a(n.required,A)&&(L++,z.push(n.name)),u(`Calling onError hook for task: ${n.name}`),await m(`onError`,Error(`Task ${n.name} failed`),n),e(`⚠️ Task "${n.name}" failed, continuing with remaining tasks...`)))}L>0&&(t(`\n❌ Task execution completed with ${L} error(s)`,`error`),t(`Completed: ${I}/${F} tasks`,`info`),t(`Failed tasks: ${z.join(`, `)}`,`error`),C.exit(1)),u(`Calling afterAll hook...`),await m(`afterAll`,A),s(`✅ All tasks completed successfully!`),s(` Completed: ${I}/${F} tasks`)}const T=C.argv.includes(`--dry-run`),E=C.argv.includes(`--force`);async function D(e,n){try{await w(e,{dryRun:n?.dryRun??T,force:n?.force??E,configFilePath:n?.configFilePath??void 0,...n?.variables!=null&&{variables:n.variables},...n?.prompts!=null&&{prompts:n.prompts},...n?.configEnabled!=null&&{configEnabled:n.configEnabled},...n?.transformers!=null&&{transformers:n.transformers}})}catch(e){t(`❌ Task execution failed`,`error`),e instanceof Error?(t(`Error: ${e.message}`,`error`),C.env.DEBUG!=null&&console.error(e.stack)):console.error(e),C.exit(1)}}export{D as t};
@@ -1,23 +0,0 @@
1
- import{A as e,C as t,D as n,M as r,N as i,P as a,S as o,_ as s,b as c,d as l,f as u,h as ee,j as d,l as te,s as f,u as p,w as ne}from"./configurations-BFx3CItg.js";import m from"node:path";import h from"node:fs";import g from"node:process";import{promisify as _}from"node:util";import{execSync as v}from"node:child_process";import{confirm as re,input as ie,number as ae,password as oe,select as se}from"@inquirer/prompts";const ce=_(h.readFile),y={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function b(e,t){switch(t){case`add`:return`${y.green}+ ${e}${y.reset}`;case`remove`:return`${y.red}- ${e}${y.reset}`;case`context`:return`${y.gray} ${e}${y.reset}`;default:return e}}function x(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(b(t,`context`)):(t!==void 0&&i.push(b(t,`remove`)),a!==void 0&&i.push(b(a,`add`)))}return i}function S(e){return h.existsSync(m.join(g.cwd(),e))}async function C(e){return ce(m.join(g.cwd(),e),`utf-8`)}async function w(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=e.file;if(!S(r))return`${y.red}✗ File not found: ${e.file}${y.reset}`;try{let t=await C(r),i=JSON.parse(t),a={...i};function o(e){if(typeof e==`string`)return p(e,n);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(`.`)?s(i,t,e):i[t]=e}let c=JSON.stringify(a,null,2),l=JSON.stringify(i,null,2);if(c===l)return`${y.cyan}→ No changes${y.reset}`;let u=x(c,l);return`${y.blue}File: ${e.file}${y.reset}\n${u.join(`
4
- `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function T(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=e.file;if(!S(r))return`${y.red}✗ File not found: ${e.file}${y.reset}`;try{let t=await C(r),i=new RegExp(e.pattern,e.flags??`g`),a=p(e.replacement,n),o=t.replace(i,a);if(t===o)return`${y.cyan}→ No matches found${y.reset}`;let s=x(t,o);return`${y.blue}File: ${e.file}${y.reset}\n${s.join(`
5
- `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function E(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=e.file;if(!S(r))return`${y.red}✗ File not found: ${e.file}${y.reset}`;try{let t=await C(r),i=t;for(let{find:r,replace:i}of e.replacements){let e=p(r,n),a=p(i,n);t=t.replace(e,a)}if(i===t)return`${y.cyan}→ No changes${y.reset}`;let a=x(i,t);return`${y.blue}File: ${e.file}${y.reset}\n${a.join(`
6
- `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}function D(e){return e.template!=null&&e.template!==``}function O(e){return e.templateFile!=null&&e.templateFile!==``}function le(e){return e.endsWith(`.hbs`)}function k(e){let t=D(e),n=O(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 ue(e){return D(e)?`inline template`:O(e)?`template file: ${e.templateFile}`:`no template source`}async function A(e,t,n,r={}){let{enableHandlebars:i=!0,sourceUrl:a=n?.$sourceUrl}=r,o=D(e),s=O(e);if(o)return p(e.template,t);if(s){let n=e.templateFile,r=i&&le(n),o=await te(ee(n,a));return r?(await import(`handlebars`)).default.compile(o)(t):p(o,t)}throw Error(`No template content available`)}async function de(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;if(e.template==null||e.template===``)return`${y.red}✗ No template content provided for file: ${e.file}${y.reset}`;let r=e.file,i=p(e.template,n);if(!S(r)){let t=i.split(`
7
- `).slice(0,10).join(`
8
- `),n=i.split(`
9
- `).length>10;return`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created${y.reset}\n${y.gray}Content preview:${y.reset}\n${t}${n?`
10
- ...`:``}`}try{let t=await C(r);if(t===i)return`${y.cyan}→ No changes${y.reset}`;let n=x(t,i);return`${y.blue}File: ${e.file}${y.reset}\n${n.join(`
11
- `)}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function fe(e,n,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let i=e.file;if(S(i))return`${y.cyan}→ File already exists, would be skipped: ${e.file}${y.reset}`;try{if(D(e)){let t=await A(e,n,r),i=t.split(`
12
- `).slice(0,10).join(`
13
- `),a=t.split(`
14
- `).length>10;return`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created${y.reset}\n${y.gray}Content preview:${y.reset}\n${i}${a?`
15
- ...`:``}`}let t=ue(e);return`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created from ${t}${y.reset}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function pe(e,n,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.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 A(a,n,r),o=t.split(`
16
- `).slice(0,10).join(`
17
- `),s=t.split(`
18
- `).length>10;return S(i)?`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ Would append content${y.reset}\n${y.gray}Content preview:${y.reset}\n${o}${s?`
19
- ...`:``}`:`${y.blue}File: ${e.file}${y.reset}\n${y.green}+ New file would be created with content${y.reset}\n${y.gray}Content preview:${y.reset}\n${o}${s?`
20
- ...`:``}`}catch(e){return`${y.red}✗ Error: ${e instanceof Error?e.message:String(e)}${y.reset}`}}function j(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=e.paths.map(e=>p(e,n)).filter(e=>S(e));return r.length===0?`${y.cyan}→ No files/directories to delete${y.reset}`:`${y.red}Would delete:${y.reset}\n${r.map(e=>`${y.red} - ${e}${y.reset}`).join(`
21
- `)}`}function M(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=p(e.from,n),i=p(e.to,n);return S(r)?S(i)?`${y.yellow}⚠ Destination already exists: ${i}${y.reset}\n${y.cyan}Would rename: ${r} → ${i}${y.reset}`:`${y.cyan}Would rename: ${r} → ${i}${y.reset}`:`${y.red}✗ Source not found: ${r}${y.reset}`}function me(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=p(e.from,n),i=p(e.to,n);return S(r)?S(i)?`${y.yellow}⚠ Destination already exists: ${i}${y.reset}\n${y.cyan}Would move: ${r} → ${i}${y.reset}`:`${y.cyan}Would move: ${r} → ${i}${y.reset}`:`${y.red}✗ Source not found: ${r}${y.reset}`}function he(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=p(e.from,n),i=p(e.to,n);if(!S(r))return`${y.red}✗ Source not found: ${r}${y.reset}`;let a=`file`;return S(i)?`${y.yellow}⚠ Destination already exists: ${i}${y.reset}\n${y.cyan}Would copy ${a}: ${r} → ${i}${y.reset}`:`${y.cyan}Would copy ${a}: ${r} → ${i}${y.reset}`}function ge(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=p(e.path,n);return S(r)?`${y.cyan}→ Directory already exists: ${r}${y.reset}`:`${y.green}+ Would create directory: ${r}${y.reset}`}function N(e){if(e.condition!=null&&e.condition!==``)return`${y.yellow}⊘ Condition check skipped in dry-run${y.reset}`;let t=S(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${y.red}Would remove existing .git directory${y.reset}`),n.push(`${y.green}Would initialize git repository${y.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${y.green}Would create initial commit: "${t}"${y.reset}`)}return n.join(`
22
- `)}function P(e,n){if(e.condition!=null&&e.condition!==``&&!t(e.condition,n))return`${y.yellow}⊘ Condition not met - task would be skipped${y.reset}`;let r=p(e.command,n),i=e.cwd==null?g.cwd():p(e.cwd,n);return`${y.yellow}Would execute:${y.reset}\n${y.cyan} Command: ${r}${y.reset}\n${y.cyan} Working directory: ${i}${y.reset}`}async function F(e,t){try{switch(e.type){case`update-json`:return await w(e.config,t);case`write`:return await de(e.config,t);case`create`:return await fe(e.config,t,e);case`regex-replace`:return await T(e.config,t);case`replace-in-file`:return await E(e.config,t);case`delete`:return j(e.config,t);case`rename`:return M(e.config,t);case`move`:return me(e.config,t);case`copy`:return he(e.config,t);case`append`:return await pe(e.config,t,e);case`mkdir`:return ge(e.config,t);case`git-init`:return N(e.config);case`exec`:return P(e.config,t);case`exec-file`:return P(e.config,t);default:{let t=e.type;return`${y.yellow}⚠ Diff not available for task type: ${t}${y.reset}`}}}catch(e){return`${y.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${y.reset}`}}async function _e(e,t){console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`),console.log(`${y.blue} DRY RUN - Preview of changes${y.reset}`),console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`);for(let n of e){console.log(`${y.cyan}▶ Task: ${n.name}${y.reset}`),n.description!=null&&n.description!==``&&console.log(`${y.gray} ${n.description}${y.reset}`);let e=await F(n,t);console.log(e),console.log(`${y.gray}${`─`.repeat(55)}${y.reset}`)}console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`),console.log(`${y.yellow} No changes were applied (dry-run mode)${y.reset}`),console.log(`${y.blue}═══════════════════════════════════════════════════════${y.reset}`)}const I=new Map,L={},R=new Map;function ve(e){e.beforeAll!=null&&(L.beforeAll=e.beforeAll),e.afterAll!=null&&(L.afterAll=e.afterAll),e.beforeTask!=null&&(L.beforeTask=e.beforeTask),e.afterTask!=null&&(L.afterTask=e.afterTask),e.onError!=null&&(L.onError=e.onError)}async function z(e,...t){let r=L[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 B(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(I.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(R.has(t)){let e=R.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}I.set(e.name,e);for(let t of e.taskTypes)R.set(t,e.name);ne(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function ye(e){let t=I.get(e);if(t!=null){for(let e of t.taskTypes)R.delete(e);I.delete(e)}}function be(e){return I.get(e)}function xe(){return Array.from(I.keys())}function Se(){I.clear(),R.clear()}function V(e){let t=R.get(e);if(t!=null)return I.get(t)}function H(e){return R.has(e)}async function U(e,t,n){let r=V(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function Ce(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}}}async function W(e,t,n,r){if(e!==void 0)return l(e,{id:t,contextType:`Prompt`,...n!=null&&{context:n},...r?.$sourceUrl!=null&&{sourceUrl:r.$sourceUrl}})}async function we(e,t=new Map,i={}){let a={};if(e.length===0)return a;for(let s of e){if(s.$configEnabled!=null&&!await o(s.$configEnabled,{...i,...a}))continue;let e={...i,...a};if(!await o(s.enabled,e)){a[s.id]=void 0;continue}try{let i,o=t.get(s.id);switch(s.default!==void 0&&(o=await W(s.default,s.id,e,s)),o!==void 0&&s.transformers!==void 0&&(o=await f.apply(s.transformers,o,e)),s.type){case`input`:{let t={message:s.message};o!==void 0&&(t.default=String(o));let a=await c(s.required,e);if(a!==void 0&&(t.required=a),i=await ie(t),a&&(i==null||typeof i==`string`&&i.trim()===``))throw n(`${s.message} is required`,`error`),r.required(s.id);break}case`password`:if(i=await oe({message:s.message,mask:`*`}),await c(s.required,e)&&(i==null||typeof i==`string`&&i.trim()===``))throw n(`${s.message} is required`,`error`),r.required(s.id);break;case`number`:{let t={message:s.message};o!==void 0&&(t.default=Number(o));let a=await c(s.required,e);if(a!==void 0&&(t.required=a),s.min!==void 0&&(t.min=s.min),s.max!==void 0&&(t.max=s.max),i=await ae(t),a&&i==null)throw n(`${s.message} is required`,`error`),r.required(s.id);break}case`select`:{let e={message:s.message,choices:s.choices.map(e=>({name:e.name,value:e.value}))};o!==void 0&&(e.default=o),i=await se(e);break}case`confirm`:{let e=o===void 0?!1:!!o;i=await re({message:s.message,default:e});break}default:throw n(`Unknown prompt type: ${s.type}`,`error`),r.unknownType(s.type)}s.transformers!==void 0&&(o!==void 0&&(i===o||String(i)===String(o))||(i=await f.apply(s.transformers,i,{...e,...a}))),a[s.id]=i}catch(e){throw e instanceof Error&&n(`Failed to collect prompt "${s.id}": ${e.message}`,`error`),e}}return a}async function Te(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await W(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function Ee(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`){r.choices.length===0&&t.push(`Select prompt "${r.id}" must have at least one choice`);for(let e of r.choices)(!e.name||e.name.trim()===``)&&t.push(`Select prompt "${r.id}" has a choice with empty name`),e.value===void 0&&t.push(`Select prompt "${r.id}" has a choice with undefined value`)}r.type===`number`&&r.min!==void 0&&r.max!==void 0&&r.min>r.max&&t.push(`Number prompt "${r.id}" has min greater than max`)}return t}const G=_(h.appendFile),De=_(h.readFile),Oe=_(h.stat);async function ke(e,r,i){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping append task`,`info`);return}let a=m.join(g.cwd(),p(e.file,r)),o={};e.content==null?e.template!=null&&(o.template=e.template):o.template=e.content,e.templateFile!=null&&(o.templateFile=e.templateFile);let s=k(o);if(!s.isValid)throw s.error?.includes(`cannot have both`)?d.templateHasBothTemplateAndFile():d.templateMissingTemplateOrFile();let c=await A(o,r,i),l=!1,u=!1;try{await Oe(a),l=!0;let t=await De(a,`utf-8`);t.length>0&&!t.endsWith(`
23
- `)&&(u=e.newline!==!1)}catch{}l&&u?await G(a,`\n${c}`):await G(a,c),n(`Appended content to ${e.file}`,`success`)}const Ae={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await ke(e.config,t,e)}},K=_(h.copyFile),je=_(h.stat),q=_(h.mkdir),Me=_(h.readdir);async function J(e,t){await q(t,{recursive:!0});let n=await Me(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=m.join(e,n.name),i=m.join(t,n.name);n.isDirectory()?await J(r,i):await K(r,i)}))}async function Ne(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping copy task`,`info`);return}let i=m.join(g.cwd(),p(e.from,r)),a=m.join(g.cwd(),p(e.to,r)),o;try{o=await je(i)}catch{n(`Source path does not exist: ${i}`,`warn`);return}await q(m.dirname(a),{recursive:!0}),o.isDirectory()?(await J(i,a),n(`Copied directory ${e.from} to ${e.to}`,`success`)):(await K(i,a),n(`Copied file ${e.from} to ${e.to}`,`success`))}const Pe={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Ne(e.config,t)}},Fe=_(h.writeFile);async function Ie(e,r,i){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping create task`,`info`);return}let a=p(e.file,r),o=m.join(g.cwd(),a);if(h.existsSync(o)){n(`File already exists, skipping: ${a}`,`info`);return}let s=k(e);if(!s.isValid)throw s.error?.includes(`cannot have both`)?d.createHasBothTemplateAndFile():d.createMissingTemplateOrFile();let c=await A(e,r,i),l=m.dirname(o);h.existsSync(l)||h.mkdirSync(l,{recursive:!0}),await Fe(o,c),n(`Created file: ${a}`,`success`)}const Y={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Ie(e.config,t,e)}};async function Le(e,r){let{paths:i,condition:a}=e;if(a!=null&&a!==``){if(!r){n(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!t(a,r)){n(`Condition not met, skipping deletion`,`info`);return}}for(let e of i){let t=r==null?e:p(e,r),n=m.join(g.cwd(),t);h.existsSync(n)&&h.rmSync(n,{recursive:!0,force:!0})}}const Re={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await Le(e.config,t)}};async function ze(e,n,r){e.condition!=null&&e.condition!==``&&!t(e.condition,n)||await u({file:e.file,...e.runtime&&{runtime:e.runtime},...e.args&&{args:e.args},...e.parameters&&{parameters:e.parameters},...e.cwd!=null&&e.cwd.trim()!==``&&{cwd:e.cwd},...r?.$sourceUrl!=null&&r.$sourceUrl.trim()!==``&&{sourceUrl:r.$sourceUrl},captureOutput:!1},n)}const Be={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await ze(e.config,t,e)}};async function Ve(e,r){if(e.condition!=null&&e.condition!==``){if(!r){n(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!t(e.condition,r)){n(`Condition not met, skipping exec task`,`info`);return}}let i=e.cwd==null?g.cwd():m.join(g.cwd(),e.cwd);v(e.command,{cwd:i,stdio:`inherit`})}const He={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Ve(e.config,t)}};async function Ue(e,r){if(e.condition!=null&&e.condition!==``){if(!r){n(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!t(e.condition,r)){n(`Condition not met, skipping git-init task`,`info`);return}}if(e.removeExisting){let e=m.join(g.cwd(),`.git`);h.existsSync(e)&&h.rmSync(e,{recursive:!0,force:!0})}if(v(`git init`,{stdio:`inherit`}),e.initialCommit){let t=e.message??`Initial commit`;v(`git add .`,{stdio:`inherit`}),v(`git commit -m "${t}"`,{stdio:`inherit`})}}const We={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Ue(e.config,t)}},Ge=_(h.mkdir);async function Ke(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping mkdir task`,`info`);return}await Ge(m.join(g.cwd(),p(e.path,r)),{recursive:!0}),n(`Created directory: ${e.path}`,`success`)}const qe={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Ke(e.config,t)}},Je=_(h.rename),Ye=_(h.stat),Xe=_(h.mkdir);async function Ze(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping move task`,`info`);return}let i=m.join(g.cwd(),p(e.from,r)),a=m.join(g.cwd(),p(e.to,r));try{await Ye(i)}catch{n(`Source path does not exist: ${i}`,`warn`);return}await Xe(m.dirname(a),{recursive:!0}),await Je(i,a),n(`Moved ${e.from} to ${e.to}`,`success`)}const Qe={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Ze(e.config,t)}},$e=_(h.readFile),et=_(h.writeFile);async function tt(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping regex-replace task`,`info`);return}let i=m.join(g.cwd(),p(e.file,r)),{pattern:a}=e,o=e.flags??``,s=e.replacement||``,c=await $e(i,`utf-8`),l=new RegExp(a,o);c=c.replace(l,p(s,r)),await et(i,c)}const nt={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await tt(e.config,t)}},rt=_(h.rename);async function it(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping rename task`,`info`);return}let i=m.join(g.cwd(),p(e.from,r)),a=m.join(g.cwd(),p(e.to,r));if(!h.existsSync(i)){n(`Source path does not exist: ${i}`,`warn`);return}await rt(i,a)}const at={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await it(e.config,t)}},ot=_(h.readFile),st=_(h.writeFile);async function ct(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping replace-in-file task`,`info`);return}let i=m.join(g.cwd(),p(e.file,r)),{replacements:a}=e;if(!h.existsSync(i)){n(`File not found: ${i}, skipping`,`warn`);return}let o=await ot(i,`utf-8`);for(let{find:e,replace:t}of a){let n=p(t,r);o=o.replace(new RegExp(e,`gu`),n)}await st(i,o)}const lt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await ct(e.config,t)}},ut=_(h.readFile),dt=_(h.writeFile);async function ft(e,r){if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping update-json task`,`info`);return}let i=m.join(g.cwd(),p(e.file,r)),{updates:a}=e,o=await ut(i,`utf-8`),c=JSON.parse(o);function l(e){if(typeof e==`string`)return p(e,r);if(Array.isArray(e))return e.map(e=>l(e));if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=l(r);return t}return e}for(let[e,t]of Object.entries(a)){let n=l(t);e.includes(`.`)?s(c,e,n):c[e]=n}await dt(i,`${JSON.stringify(c,null,2)}\n`)}const pt={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await ft(e.config,t)}},mt=_(h.writeFile);async function ht(e,r,i){let{allowCreate:a=!0}=e;if(e.condition!=null&&e.condition!==``&&!t(e.condition,r)){n(`Condition not met, skipping write task`,`info`);return}let o=p(e.file,r),s=m.join(g.cwd(),o);if(!h.existsSync(s)){if(a===!1)throw Error(`Write task failed: file does not exist (${o})`);n(`File not found, creating new file: ${o}`,`info`)}let c=k(e);if(!c.isValid)throw c.error?.includes(`cannot have both`)?d.templateHasBothTemplateAndFile():d.templateMissingTemplateOrFile();let l=await A(e,r,i),u=m.dirname(s);h.existsSync(u)||h.mkdirSync(u,{recursive:!0}),await mt(s,l)}const gt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await ht(e.config,t,e)}};function X(){H(`update-json`)||(B(pt),B(gt),B(Y),B(nt),B(lt),B(Re),B(at),B(We),B(He),B(Be),B(Qe),B(Pe),B(Ae),B(qe))}async function _t(e,t,r=!1){if(X(),r){n(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(H(e.type)){await U(e,t,{dryRun:r});return}throw TypeError(`Unknown task type: ${e.type}`)}async function Z(e,t,r,i,a=!1){try{return n(`[${r}/${i}] Running: ${e.name}...`,`info`),await _t(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&&g.env.DEBUG!=null&&console.error(t.stack)),!1}}async function vt(t,r,i){await z(`beforeAll`,r);let a=0,o=0,s=[];for(let n=0;n<t.length;n++){let l=t[n];l!=null&&(await z(`beforeTask`,l,r),await Z(l,r,n+1,t.length,i.dryRun)?(a++,await z(`afterTask`,l,r)):(await c(l.required,r)&&(o++,s.push(l.name)),await z(`onError`,Error(`Task ${l.name} failed`),l),e(`⚠️ Task "${l.name}" failed, continuing with remaining tasks...`)))}await z(`afterAll`,r),o>0&&(n(`\n❌ Task execution completed with ${o} error(s)`,`error`),n(`Completed: ${a}/${t.length} tasks`,`info`),n(`Failed tasks: ${s.join(`, `)}`,`error`),g.exit(1)),n(`Completed: ${a}/${t.length} tasks`,`success`)}function Q(e){let t=[],n=new Set,r=new Set,o=new Map(e.map(e=>[e.id,e]));function s(e){if(n.has(e))return;if(r.has(e))throw a.forTaskDependency(e);r.add(e);let c=o.get(e);if(!c)throw i.forId(e);if(c.dependencies)for(let e of c.dependencies)s(e);r.delete(e),n.add(e),t.push(c)}for(let t of e)n.has(t.id)||s(t.id);return t}function yt(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=k({...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}async function bt(e,t){let n=$(e);n.length>0&&(console.error(`❌ Task validation errors:`),n.forEach(e=>console.error(` - ${e}`)),g.exit(1));let r=[];for(let n of e)await o(n.enabled,t)&&r.push(n);return r}function xt(e){return Q(e)}function $(e){let t=[];for(let n of e)if(!H(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=yt(n);t.push(...e)}return t}export{w as A,F as C,M as D,j as E,T as O,_e as S,N as T,xe as _,vt as a,z as b,Ee as c,Ce as d,U as f,be as g,Se as h,Q as i,E as k,Te as l,H as m,xt as n,X as o,V as p,bt as r,Z as s,$ as t,we as u,B as v,P as w,ve as x,ye as y};
@@ -1 +0,0 @@
1
- import{A as e,C as t,D as n,E as r,O as i,S as a,T as o,_ as s,b as c,d as l,g as u,h as d,k as f,m as p,p as m,u as h,v as g,w as _,x as v,y}from"./configurations-BFx3CItg.js";export{m as cleanupTempFile,_ as debug,o as error,o as logError,t as evaluateCondition,v as evaluateEnabled,a as evaluateEnabledAsync,c as evaluateRequiredAsync,u as getNestedProperty,g as getSourceDisplayName,r as info,r as logInfo,h as interpolateTemplate,y as isUrl,n as log,f as logSuccess,f as success,e as logWarn,e as warn,p as resolveAndFetchFile,d as resolveFilePath,l as resolveValue,i as setDebugMode,s as setNestedProperty};
@@ -1 +0,0 @@
1
- const e=require(`./configurations-DJ1eNatp.cjs`);exports.cleanupTempFile=e.p,exports.debug=e.w,exports.error=e.T,exports.logError=e.T,exports.evaluateCondition=e.C,exports.evaluateEnabled=e.x,exports.evaluateEnabledAsync=e.S,exports.evaluateRequiredAsync=e.b,exports.getNestedProperty=e.g,exports.getSourceDisplayName=e.v,exports.info=e.E,exports.logInfo=e.E,exports.interpolateTemplate=e.u,exports.isUrl=e.y,exports.log=e.D,exports.logSuccess=e.k,exports.success=e.k,exports.logWarn=e.A,exports.warn=e.A,exports.resolveAndFetchFile=e.m,exports.resolveFilePath=e.h,exports.resolveValue=e.d,exports.setDebugMode=e.O,exports.setNestedProperty=e._;