@pixpilot/scaffoldfy 0.55.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.cjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/configurations-C6TwZWBm.js +1 -0
- package/dist/configurations-C9hGwa2c.cjs +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{run-configuration-sequentially-ChcX4RwO.cjs → run-configuration-sequentially-BK8SqkMc.cjs} +2 -2
- package/dist/run-configuration-sequentially-CCnrvgMw.js +4 -0
- package/dist/scaffoldfy-config-validator/cli.cjs +1 -1
- package/dist/scaffoldfy-config-validator/cli.js +1 -1
- package/dist/scaffoldfy-config-validator/index.cjs +1 -1
- package/dist/scaffoldfy-config-validator/index.js +1 -1
- package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.cjs +1 -1
- package/dist/scaffoldfy-config-validator/validate-scaffoldfy-json.js +1 -1
- package/dist/{src-CbecHt0y.cjs → src-BN2NvYkL.cjs} +1 -1
- package/dist/{src-Dg7KHmtw.js → src-DnGLJZBR.js} +1 -1
- package/dist/tasks-CfkqwNGd.cjs +23 -0
- package/dist/{tasks-DnOWByrf.js → tasks-cEW0YvaN.js} +3 -3
- package/dist/{utils-UcwApCMS.cjs → utils-C0leVEJZ.cjs} +1 -1
- package/dist/{utils-B55nh83C.js → utils-vMswJANY.js} +1 -1
- package/dist/{validate-scaffoldfy-json-sisq-2h1.js → validate-scaffoldfy-json-C0CBAgLY.js} +1 -1
- package/dist/{validate-scaffoldfy-json-CDZ4RApr.cjs → validate-scaffoldfy-json-vxz6VQQa.cjs} +1 -1
- package/package.json +4 -4
- package/dist/configurations-Bx3IQ0vv.js +0 -1
- package/dist/configurations-DtzF7Hpe.cjs +0 -1
- package/dist/run-configuration-sequentially-CVEMRSR6.js +0 -4
- package/dist/tasks-Bl4_CA4o.cjs +0 -23
package/README.md
CHANGED
|
@@ -65,6 +65,7 @@ npx @pixpilot/scaffoldfy@latest --dry-run
|
|
|
65
65
|
| `--config <path>` | Path or URL to config file (JSON, or TypeScript for local files; default: `./scaffoldfy.json`) |
|
|
66
66
|
| `--dry-run` | Preview changes without applying them |
|
|
67
67
|
| `--no-validate` | Skip schema validation of task configuration (validation is enabled by default) |
|
|
68
|
+
| `--set <k=v>` | Answer a prompt up front instead of being asked (repeatable) |
|
|
68
69
|
| `-h, --help` | Show help message |
|
|
69
70
|
| `-v, --version` | Show version |
|
|
70
71
|
|
package/dist/cli.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const e=require(`./configurations-
|
|
2
|
+
const e=require(`./configurations-C9hGwa2c.cjs`);require(`./initial-config-CESipc-c.cjs`);const t=require(`./tasks-CfkqwNGd.cjs`),n=require(`./validate-scaffoldfy-json-vxz6VQQa.cjs`);require(`./scaffoldfy-config-validator-BvNnGMO1.cjs`);const r=require(`./src-BN2NvYkL.cjs`);let i=require(`node:fs`);i=e.z(i);let a=require(`node:path`);a=e.z(a);let o=require(`node:process`);o=e.z(o);let s=require(`commander`);s=e.z(s);const c=1;function l(e,t=[]){return[...t,e]}const u=new s.Command,d=a.default.join(__dirname,`..`,`package.json`);let f=`0.0.0`;try{f=JSON.parse(i.default.readFileSync(d,`utf-8`)).version??`0.0.0`}catch{}u.name(`scaffoldfy`).description(`Automate project setup and configuration with customizable tasks`).version(f),u.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, JSONC, 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`).option(`--set <key=value>`,`Answer a prompt up front instead of being asked (repeatable)`,l).action(async s=>{s.debug===!0&&e.M(!0);try{s.set!=null&&t.f(Object.fromEntries(s.set.map(t.d)));let c=[],l,u,d,f,p;if(s.config!=null&&s.config!==``){let t=e.C(s.config),r=t?s.config:a.default.resolve(o.default.cwd(),s.config);if(t||i.default.existsSync(r))if(p=r,r.endsWith(`.ts`)||r.endsWith(`.mts`)){t&&(e.j(`❌ Remote TypeScript config files are not supported`,`error`),e.j(`Only JSON config files can be loaded from a URL`,`info`),o.default.exit(1)),e.j(`Loading tasks from TypeScript file: ${s.config}`,`info`);try{let t=await import(r);c=t.default??t.tasks??[],(!Array.isArray(c)||c.length===0)&&(e.j(`⚠️ No tasks found in TypeScript file or invalid format`,`warn`),e.j(`Expected default export or named export "tasks" with TaskDefinition[]`,`info`))}catch(t){e.j(`Failed to load TypeScript config file: ${s.config}`,`error`),t instanceof Error&&e.j(` Error: ${t.message}`,`error`),o.default.exit(1)}}else try{s.validate!==!1&&(e.O(`Validating task configuration against schema...`),n.r(e.y(await e.u(r)),{silent:!1}).valid||(e.j(``,`error`),e.j(`💡 You can skip validation with --no-validate flag, but this is not recommended.`,`info`),o.default.exit(1)),e.j(`Configuration validated`,`success`));let t=e.g(`Loading config`),i;try{i=await e.n(r,{sequential:!0})}finally{e._(t)}if(i.configs!=null&&i.configs.length>0){let{runConfigurationSequentially:e}=await Promise.resolve().then(()=>require(`./run-configuration-sequentially-BK8SqkMc.cjs`)),{createInitialConfig:t}=await Promise.resolve().then(()=>require(`./initial-config-CbzFPdT_.cjs`));await e(i.configs,{dryRun:s.dryRun??!1,force:s.force??!1,configFilePath:r},t()),o.default.exit(0)}c=i.tasks,l=i.variables,u=i.prompts,d=i.enabled,f=i.transformers,Array.isArray(c)||(e.j(`❌ Invalid config file format`,`error`),e.j(`Expected JSON with { "tasks": [...] } structure`,`info`),o.default.exit(1))}catch(t){e.j(`Failed to load JSON config file: ${s.config}`,`error`),t instanceof Error&&e.j(` Error: ${t.message}`,`error`),o.default.exit(1)}else e.j(`Config file not found: ${s.config}`,`warn`)}let m=u!=null&&u.length>0||l!=null&&l.length>0;c.length===0&&!m&&(e.j(`❌ No tasks defined`,`error`),e.j(`Please provide tasks using one of these methods:`,`info`),e.j(` 1. Create a template-tasks.json file in the current directory`,`info`),e.j(` 2. Create a template-tasks.ts file in the current directory`,`info`),e.j(` 3. Use --config option to specify a different config file`,`info`),e.j(`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)),o.default.exit(1)),c.length===0?e.j(`Loaded template with 0 tasks (template may only provide prompts/variables for extending)`,`info`):e.j(`Loaded ${c.length} task(s)`,`success`),await r.t(c,{dryRun:s.dryRun,force:s.force,configFilePath:p,variables:l,prompts:u,configEnabled:d,transformers:f})}catch(t){if(e.j(`❌ CLI execution failed`,`error`),t instanceof Error){e.j(`Error: ${t.message}`,`error`);let n=o.default.env.DEBUG;n!=null&&n!==``&&console.error(t.stack)}else console.error(t);o.default.exit(1)}}),u.parse(o.default.argv);
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{C as e,M as t,O as n,_ as r,g as i,j as a,n as o,u as s,y as c}from"./configurations-
|
|
2
|
+
import{C as e,M as t,O as n,_ as r,g as i,j as a,n as o,u as s,y as c}from"./configurations-C6TwZWBm.js";import"./initial-config-Dt0jw4Vs.js";import{d as l,f as u}from"./tasks-cEW0YvaN.js";import{r as d}from"./validate-scaffoldfy-json-C0CBAgLY.js";import"./scaffoldfy-config-validator-D1iJBnRE.js";import{t as f}from"./src-DnGLJZBR.js";import p from"node:path";import{fileURLToPath as m}from"node:url";import h from"node:fs";import g from"node:process";import{Command as _}from"commander";const v=()=>m(import.meta.url),y=(()=>p.dirname(v()))();function b(e,t=[]){return[...t,e]}const x=new _,S=p.join(y,`..`,`package.json`);let C=`0.0.0`;try{C=JSON.parse(h.readFileSync(S,`utf-8`)).version??`0.0.0`}catch{}x.name(`scaffoldfy`).description(`Automate project setup and configuration with customizable tasks`).version(C),x.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, JSONC, 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`).option(`--set <key=value>`,`Answer a prompt up front instead of being asked (repeatable)`,b).action(async m=>{m.debug===!0&&t(!0);try{m.set!=null&&u(Object.fromEntries(m.set.map(l)));let t=[],_,v,y,b,x;if(m.config!=null&&m.config!==``){let l=e(m.config),u=l?m.config:p.resolve(g.cwd(),m.config);if(l||h.existsSync(u))if(x=u,u.endsWith(`.ts`)||u.endsWith(`.mts`)){l&&(a(`❌ Remote TypeScript config files are not supported`,`error`),a(`Only JSON config files can be loaded from a URL`,`info`),g.exit(1)),a(`Loading tasks from TypeScript file: ${m.config}`,`info`);try{let e=await import(u);t=e.default??e.tasks??[],(!Array.isArray(t)||t.length===0)&&(a(`⚠️ No tasks found in TypeScript file or invalid format`,`warn`),a(`Expected default export or named export "tasks" with TaskDefinition[]`,`info`))}catch(e){a(`Failed to load TypeScript config file: ${m.config}`,`error`),e instanceof Error&&a(` Error: ${e.message}`,`error`),g.exit(1)}}else try{m.validate!==!1&&(n(`Validating task configuration against schema...`),d(c(await s(u)),{silent:!1}).valid||(a(``,`error`),a(`💡 You can skip validation with --no-validate flag, but this is not recommended.`,`info`),g.exit(1)),a(`Configuration validated`,`success`));let e=i(`Loading config`),l;try{l=await o(u,{sequential:!0})}finally{r(e)}if(l.configs!=null&&l.configs.length>0){let{runConfigurationSequentially:e}=await import(`./run-configuration-sequentially-CCnrvgMw.js`),{createInitialConfig:t}=await import(`./initial-config-V9mm6hls.js`);await e(l.configs,{dryRun:m.dryRun??!1,force:m.force??!1,configFilePath:u},t()),g.exit(0)}t=l.tasks,_=l.variables,v=l.prompts,y=l.enabled,b=l.transformers,Array.isArray(t)||(a(`❌ Invalid config file format`,`error`),a(`Expected JSON with { "tasks": [...] } structure`,`info`),g.exit(1))}catch(e){a(`Failed to load JSON config file: ${m.config}`,`error`),e instanceof Error&&a(` Error: ${e.message}`,`error`),g.exit(1)}else a(`Config file not found: ${m.config}`,`warn`)}let S=v!=null&&v.length>0||_!=null&&_.length>0;t.length===0&&!S&&(a(`❌ No tasks defined`,`error`),a(`Please provide tasks using one of these methods:`,`info`),a(` 1. Create a template-tasks.json file in the current directory`,`info`),a(` 2. Create a template-tasks.ts file in the current directory`,`info`),a(` 3. Use --config option to specify a different config file`,`info`),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)),g.exit(1)),t.length===0?a(`Loaded template with 0 tasks (template may only provide prompts/variables for extending)`,`info`):a(`Loaded ${t.length} task(s)`,`success`),await f(t,{dryRun:m.dryRun,force:m.force,configFilePath:x,variables:_,prompts:v,configEnabled:y,transformers:b})}catch(e){if(a(`❌ CLI execution failed`,`error`),e instanceof Error){a(`Error: ${e.message}`,`error`);let t=g.env.DEBUG;t!=null&&t!==``&&console.error(e.stack)}else console.error(e);g.exit(1)}}),x.parse(g.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{parse as i,printParseErrorCode as a}from"jsonc-parser";import o from"node:os";import{execSync as s}from"node:child_process";import{adaCase as c,camelCase as l,capitalCase as u,cobolCase as d,constantCase as f,dotNotation as p,kebabCase as m,lowerCase as ee,pascalCase as te,pathCase as ne,snakeCase as h,spaceCase as re,trainCase as ie,upperCamelCase as ae,upperCase as oe}from"case-anything";import{log as g}from"node:console";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`)}static invalidValue(t,n,r){return new e(`Invalid value "${n}" for prompt "${t}": ${r}`,t,`invalid_value`)}},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-vMswJANY.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-vMswJANY.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-vMswJANY.js`);return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await import(`./utils-vMswJANY.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(e){let t=[],n=i(e,t,{allowTrailingComma:!0});if(t.length>0){let e=t.map(e=>`${a(e.error)} at offset ${e.offset}`).join(`, `);throw Error(`Invalid JSON or JSONC: ${e}`)}return n}function B(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)}let V=0;const H={};function U(e=`Loading`){let t=[`|`,`/`,`-`,`\\`,`.`,`..`,`...`],n=0;V++;let r=V;return process.stdout.write(`${e} `),H[r]=setInterval(()=>{process.stdout.write(`\r${e} ${t[n%t.length]} `),n++},120),r}function W(e){H[e]&&(clearInterval(H[e]),delete H[e],process.stdout.write(`\r`),process.stdout.write(`${` `.repeat(30)}\r`))}async function G(e){let t=new URL(e).pathname.split(`/`).pop(),n=U(`Loading ${t==null||t===``?e:t}`);try{return O(`Fetching remote file: ${e}`),await Te(e)}finally{W(n)}}async function K(n){let{file:r,sourceUrl:i,tempFileExtension:a=`.tmp`,tempFilePrefix:s=`scaffoldfy`}=n,c=r,l,u,d=!1;if(I(r)){l=r;let n=await G(l);d=!0;let i=o.tmpdir(),c=`${s}-${Date.now()}${a}`;u=e.join(i,c),t.writeFileSync(u,n,`utf-8`),O(`Remote file saved to temporary location: ${u}`)}else if(l=B(r,i),I(l)){let n=await G(l);d=!0;let r=o.tmpdir(),i=`${s}-${Date.now()}${a}`;u=e.join(r,i),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 ve(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 q(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 ye(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 be(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function xe(t,r){let i=Y(t.file,r),a=t.args?.map(e=>Y(e,r))??[],o={};if(t.parameters)for(let[e,n]of Object.entries(t.parameters))o[e]=Y(n,r);let c=t.cwd!=null&&t.cwd!==``?e.join(n.cwd(),Y(t.cwd,r)):n.cwd(),l=await K({file:i,...t.sourceUrl!=null&&t.sourceUrl!==``&&{sourceUrl:t.sourceUrl},tempFileExtension:be(t.runtime??q(i)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:u}=l,d=t.runtime??q(u)??`node`;!t.runtime&&!q(u)&&N(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let e=ye(d,u),r=a.join(` `),i=r?`${e} ${r}`:e;O(`Executing: ${i}`);let l=s(i,{cwd:c,stdio:t.captureOutput?[`pipe`,`pipe`,`inherit`]:`inherit`,env:{...n.env,...o},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{ve(l)}}async function J(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){N(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof o.condition!=`string`){N(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=P(o.condition,i)?o.ifTrue:o.ifFalse;return typeof e==`object`&&e?await J(e,t):e}catch(e){N(`${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`){N(`${r} "${n}": exec value must have a string command`,`error`);return}try{return Se(s(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(o.type===`exec-file`){let e=o;if(typeof e.file!=`string`){N(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await xe({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:Se(t.trim())}catch(e){N(`${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`){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 Y(e,i)}catch(t){return N(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(o.type!==void 0){N(`${r} "${n}": unknown value type "${o.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function Se(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)=>R(t,n)?.toString()??``)}const Ce=r(t.readFile),X=new Map;function we(){X.clear()}async function Te(e){if(I(e))return Ee(e);if(!t.existsSync(e))throw y.forPath(e);return Ce(e,`utf-8`)}async function Ee(e){let t=X.get(e);if(t!=null)return t;let n=(async()=>{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)}})();X.set(e,n);try{return await n}catch(t){throw X.delete(e),t}}const Z=new Map;function De(){Z.clear(),we()}const Oe=r(t.readFile);async function ke(r,i=new Set){let a=I(r),o;if(o=a||e.isAbsolute(r)?r:e.resolve(n.cwd(),r),Z.has(o))return Z.get(o);if(i.has(o))throw v.forConfigurationInheritance(i,o);i.add(o);let s;if(a)s=await Ee(o);else{if(!t.existsSync(o))throw y.forPath(o);s=await Oe(o,`utf-8`)}let c;try{c=z(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 Z.set(o,c),c}function Ae(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 je(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 ke(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 je(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 Q(e,t,n=new Set){let r=[];return await je(e,t,n,new Set,r),Ae(r)}const Me=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 ee(String(e))}executeUppercase(e){return oe(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 u(String(e))}executeTitlecase(e){return m(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return l(String(e))}executePascalcase(e){return te(String(e))}executeSnakecase(e){return h(String(e))}executeKebabcase(e){return m(String(e))}executeConstantcase(e){return f(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 m(String(e))}executeUnderscore(e){return h(String(e))}executeCapitalCase(e){return u(String(e))}executeAdaCase(e){return c(String(e))}executeCobolCase(e){return d(String(e))}executeDotNotation(e){return p(String(e))}executePathCase(e){return ne(String(e))}executeSpaceCase(e){return re(String(e))}executeTrainCase(e){return ie(String(e))}executeUpperCamelCase(e){return ae(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};async function Ne(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 Me.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function Pe(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 Fe(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 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 Ie(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 Le(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 Re={template:[[`template`,`templateFile`]]};function ze(e,t,n){let r={...e},i=Re[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 Be(e,t){let n=Re[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 Ve(e,t){if((t.override??`merge`)===`replace`){g(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),g(` Base: ${L(e.$sourceUrl)}`,`info`),g(` Override: ${L(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}g(` → Merging task "${t.id}"`,`info`),g(` Base: ${L(e.$sourceUrl)}`,`info`),g(` Override: ${L(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=ze(e.config,t.config,t.type);let r=Be(t.type,n);r!==null&&r.length>0&&(g(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),g(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function He(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 Ue(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return He(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=Le(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=Pe(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=Ve(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;He(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 Ue(await Q(e,t,n))}async function We(e,t){if(O(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await Q(e);return O(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await $(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{k as A,I as C,P as D,F as E,ue as F,le as I,ce as L,fe as M,A as N,O,j as P,v as R,L as S,pe as T,W as _,Fe as a,R as b,ke as c,Y as d,J as f,U as g,K as h,Ie as i,N as j,M as k,De as l,ve as m,We as n,Ne as o,xe as p,Ue as r,Me as s,$ as t,Te as u,B as v,ge as w,_e as x,z 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(`jsonc-parser`);f=s(f);let p=require(`node:os`);p=s(p);let m=require(`node:child_process`);m=s(m);let h=require(`case-anything`);h=s(h);let g=require(`node:console`);g=s(g);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)}},ee=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)}},y=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)}},b=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)}},x=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)}},S=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`)}static invalidValue(t,n,r){return new e(`Invalid value "${n}" for prompt "${t}": ${r}`,t,`invalid_value`)}},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`)}},C=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 w=!1;function ae(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 oe(e){console.log(`${E.info}${T.info} ${e}${D}`)}function k(e){console.log(`${E.success}${T.success} ${e}${D}`)}function A(e){console.log(`${E.warn}${T.warn} ${e}${D}`)}function j(e){console.log(`${E.error}${T.error} ${e}${D}`)}function M(e,t=`info`){switch(t){case`debug`:O(e);break;case`info`:oe(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 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 N(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function ce(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-C0leVEJZ.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-C0leVEJZ.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 N(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function le(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function ue(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function de(e,t){let n=ue(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-C0leVEJZ.cjs`));return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await Promise.resolve().then(()=>require(`./utils-C0leVEJZ.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 le(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 fe(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){let t=[],n=(0,f.parse)(e,t,{allowTrailingComma:!0});if(t.length>0){let e=t.map(e=>`${(0,f.printParseErrorCode)(e.error)} at offset ${e.offset}`).join(`, `);throw Error(`Invalid JSON or JSONC: ${e}`)}return n}function R(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 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 O(`Fetching remote file: ${e}`),await _e(e)}finally{H(n)}}async function W(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 U(o);u=!0;let n=p.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=R(t,n),P(o)){let e=await U(o);u=!0;let t=p.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 G(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 K(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 pe(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 me(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(e,t){let n=X(e.file,t),r=e.args?.map(e=>X(e,t))??[],i={};if(e.parameters)for(let[n,r]of Object.entries(e.parameters))i[n]=X(r,t);let a=e.cwd!=null&&e.cwd!==``?l.default.join(u.default.cwd(),X(e.cwd,t)):u.default.cwd(),o=await W({file:n,...e.sourceUrl!=null&&e.sourceUrl!==``&&{sourceUrl:e.sourceUrl},tempFileExtension:me(e.runtime??K(n)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:s}=o,c=e.runtime??K(s)??`node`;!e.runtime&&!K(s)&&M(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let t=pe(c,s),n=r.join(` `),o=n?`${t} ${n}`:t;O(`Executing: ${o}`);let l=(0,m.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{G(o)}}async function J(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){M(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof o.condition!=`string`){M(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=N(o.condition,i)?o.ifTrue:o.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(o.type===`exec`){let e=o.value;if(typeof e!=`string`){M(`${r} "${n}": exec value must have a string command`,`error`);return}try{return Y((0,m.execSync)(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(o.type===`exec-file`){let e=o;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},...a!=null&&{sourceUrl:a},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(o.type===`static`)return o.value;if(o.type===`interpolate`){let e=o.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(o.type!==void 0){M(`${r} "${n}": unknown value type "${o.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)=>I(t,n)?.toString()??``)}const he=(0,d.promisify)(c.default.readFile),Z=new Map;function ge(){Z.clear()}async function _e(e){if(P(e))return ve(e);if(!c.default.existsSync(e))throw ee.forPath(e);return he(e,`utf-8`)}async function ve(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 ye(){Q.clear(),ge()}const be=(0,d.promisify)(c.default.readFile);async function xe(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 v.forConfigurationInheritance(t,r);t.add(r);let i;if(n)i=await ve(r);else{if(!c.default.existsSync(r))throw ee.forPath(r);i=await be(r,`utf-8`)}let a;try{a=L(i)}catch(e){throw te.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 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 Ce(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 v.forConfigurationInheritance(r,s);r.add(s);let c=await xe(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 Ce(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 we(e,t,n=new Set){let r=[];return await Ce(e,t,n,new Set,r),Se(r)}var Te=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(0,h.lowerCase)(String(e))}executeUppercase(e){return(0,h.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,h.capitalCase)(String(e))}executeTitlecase(e){return(0,h.kebabCase)(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return(0,h.camelCase)(String(e))}executePascalcase(e){return(0,h.pascalCase)(String(e))}executeSnakecase(e){return(0,h.snakeCase)(String(e))}executeKebabcase(e){return(0,h.kebabCase)(String(e))}executeConstantcase(e){return(0,h.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,h.kebabCase)(String(e))}executeUnderscore(e){return(0,h.snakeCase)(String(e))}executeCapitalCase(e){return(0,h.capitalCase)(String(e))}executeAdaCase(e){return(0,h.adaCase)(String(e))}executeCobolCase(e){return(0,h.cobolCase)(String(e))}executeDotNotation(e){return(0,h.dotNotation)(String(e))}executePathCase(e){return(0,h.pathCase)(String(e))}executeSpaceCase(e){return(0,h.spaceCase)(String(e))}executeTrainCase(e){return(0,h.trainCase)(String(e))}executeUpperCamelCase(e){return(0,h.upperCamelCase)(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};const Ee=new Te;async function De(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 Ee.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function Oe(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 ke(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 ce(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 Ae(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 je(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 Me={template:[[`template`,`templateFile`]]};function Ne(e,t,n){let r={...e},i=Me[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 Pe(e,t){let n=Me[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 Fe(e,t){if((t.override??`merge`)===`replace`){(0,g.log)(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),(0,g.log)(` Base: ${F(e.$sourceUrl)}`,`info`),(0,g.log)(` Override: ${F(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}(0,g.log)(` → Merging task "${t.id}"`,`info`),(0,g.log)(` Base: ${F(e.$sourceUrl)}`,`info`),(0,g.log)(` Override: ${F(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=Ne(e.config,t.config,t.type);let r=Pe(t.type,n);r!==null&&r.length>0&&((0,g.log)(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),(0,g.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 $(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 Ie(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return $(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=je(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=Oe(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=Fe(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;$(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 Le(e,t,n=new Set){return Ie(await we(e,t,n))}async function Re(e,t){if(O(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await we(e);return O(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await Le(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}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return s}});
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./configurations-
|
|
1
|
+
const e=require(`./configurations-C9hGwa2c.cjs`);require(`./initial-config-CESipc-c.cjs`);const t=require(`./tasks-CfkqwNGd.cjs`),n=require(`./validate-scaffoldfy-json-vxz6VQQa.cjs`);require(`./scaffoldfy-config-validator-BvNnGMO1.cjs`);const r=require(`./src-BN2NvYkL.cjs`);exports.clearConfigurationCache=e.l,exports.clearPlugins=t._,exports.createTaskPlugin=t.p,exports.displayTasksDiff=t.w,exports.executePluginTask=t.m,exports.getDeleteDiff=t.O,exports.getExecDiff=t.E,exports.getGitInitDiff=t.D,exports.getPlugin=t.v,exports.getPluginForTaskType=t.h,exports.getRegexReplaceDiff=t.A,exports.getRenameDiff=t.k,exports.getReplaceInFileDiff=t.j,exports.getTaskDiff=t.T,exports.getUpdateJsonDiff=t.M,exports.isPluginTaskType=t.g,exports.listPlugins=t.y,exports.loadAndMergeConfiguration=e.t,exports.loadConfiguration=e.c,exports.loadTasksWithInheritance=e.n,exports.mergeConfigurations=e.r,exports.registerHooks=t.C,exports.registerPlugin=t.b,exports.runWithTasks=r.t,exports.unregisterPlugin=t.x,exports.validateScaffoldfyJsonFile=n.n;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,l as t,n,r,t as i}from"./configurations-
|
|
1
|
+
import{c as e,l as t,n,r,t as i}from"./configurations-C6TwZWBm.js";import"./initial-config-Dt0jw4Vs.js";import{A as a,C as o,D as s,E as c,M as l,O as u,T as d,_ as f,b as p,g as m,h,j as g,k as _,m as v,p as y,v as b,w as x,x as S,y as C}from"./tasks-cEW0YvaN.js";import{n as w}from"./validate-scaffoldfy-json-C0CBAgLY.js";import"./scaffoldfy-config-validator-D1iJBnRE.js";import{t as T}from"./src-DnGLJZBR.js";export{t as clearConfigurationCache,f as clearPlugins,y as createTaskPlugin,x as displayTasksDiff,v as executePluginTask,u as getDeleteDiff,c as getExecDiff,s as getGitInitDiff,b as getPlugin,h as getPluginForTaskType,a as getRegexReplaceDiff,_ as getRenameDiff,g as getReplaceInFileDiff,d as getTaskDiff,l as getUpdateJsonDiff,m as isPluginTaskType,C as listPlugins,i as loadAndMergeConfiguration,e as loadConfiguration,n as loadTasksWithInheritance,r as mergeConfigurations,o as registerHooks,p as registerPlugin,T as runWithTasks,S as unregisterPlugin,w as validateScaffoldfyJsonFile};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(`./configurations-
|
|
1
|
+
const e=require(`./configurations-C9hGwa2c.cjs`),t=require(`./tasks-CfkqwNGd.cjs`);let n=require(`node:process`);n=e.z(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.E(t.enabled,n)?(await i(t,n),await r(t,n),await a(t,n),await e.E(t.enabled,n)?!0:(e.A(`⊘ Config "${t.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(e.A(`⊘ Config "${t.name}" is disabled - skipping`),!1)}async function s(n,r,i={}){e.O(`Running configs with sequential variable/prompt resolution...`),e.O(`Total configs to process: ${n.length}`),e.O(`Registering built-in plugins...`),t.o();let a=[];console.log(``),e.A(`📋 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.O(`\n${s}`),e.O(`Processing config ${t+1}/${n.length}: "${r.name}"`),e.O(s),e.O(`Current config keys: ${Object.keys(i).join(`, `)}`),await o(r,i)){let t=r.tasks??[];t.length>0&&(e.O(`Found ${t.length} task(s) in config "${r.name}" (will execute later)`),a.push(...t))}}if(e.O(`
|
|
2
2
|
🔧 Validating and filtering all collected tasks...`),a.length===0){e.j(`No tasks found in any config`,`info`);return}console.log(``),e.j(`🛠️ Preparing tasks...`,`info`);let s=await t.r(a,i);if(console.log(``),e.j(`Found ${a.length} tasks (${s.length} enabled)`,`info`),e.j(`All tasks validated successfully`,`success`),s.length===0){e.j(`No enabled tasks to execute`,`info`);return}let c=t.n(s);if(r.dryRun){e.j(`
|
|
3
|
-
🔍 Dry run - showing task changes...`,`info`),await t.
|
|
3
|
+
🔍 Dry run - showing task changes...`,`info`),await t.w(c,i),e.j(`
|
|
4
4
|
🔍 Dry run completed - no changes were made`,`info`),e.j(`Run without --dry-run to apply changes`,`info`);return}console.log(``),e.A(`⚙️ Executing tasks...`),console.log(``),await t.a(c,i,r)}exports.runConfigurationSequentially=s;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{A as e,E as t,O as n,a as r,i,j as a,o}from"./configurations-C6TwZWBm.js";import{a as s,c,l,n as u,o as d,r as f,u as p,w as m}from"./tasks-cEW0YvaN.js";import h from"node:process";async function g(e,t){let n=e.prompts??[];if(n.length>0){let e=c(n);e.length>0&&(console.error(`❌ Prompt validation errors:`),e.forEach(e=>console.error(` - ${e}`)),h.exit(1));let r=await p(n,await l(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(n,r){return await t(n.enabled,r)?(await _(n,r),await g(n,r),await v(n,r),await t(n.enabled,r)?!0:(e(`⊘ Config "${n.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(e(`⊘ Config "${n.name}" is disabled - skipping`),!1)}async function b(t,r,i={}){n(`Running configs with sequential variable/prompt resolution...`),n(`Total configs to process: ${t.length}`),n(`Registering built-in plugins...`),d();let o=[];console.log(``),e(`📋 Collecting input...`),console.log(``);for(let e=0;e<t.length;e++){let r=t[e];if(r==null)continue;let a=`=`.repeat(60);if(n(`\n${a}`),n(`Processing config ${e+1}/${t.length}: "${r.name}"`),n(a),n(`Current config keys: ${Object.keys(i).join(`, `)}`),await y(r,i)){let e=r.tasks??[];e.length>0&&(n(`Found ${e.length} task(s) in config "${r.name}" (will execute later)`),o.push(...e))}}if(n(`
|
|
2
|
+
🔧 Validating and filtering all collected tasks...`),o.length===0){a(`No tasks found in any config`,`info`);return}console.log(``),a(`🛠️ Preparing tasks...`,`info`);let c=await f(o,i);if(console.log(``),a(`Found ${o.length} tasks (${c.length} enabled)`,`info`),a(`All tasks validated successfully`,`success`),c.length===0){a(`No enabled tasks to execute`,`info`);return}let l=u(c);if(r.dryRun){a(`
|
|
3
|
+
🔍 Dry run - showing task changes...`,`info`),await m(l,i),a(`
|
|
4
|
+
🔍 Dry run completed - no changes were made`,`info`),a(`Run without --dry-run to apply changes`,`info`);return}console.log(``),e(`⚙️ Executing tasks...`),console.log(``),await s(l,i,r)}export{b as runConfigurationSequentially};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const e=require(`../configurations-
|
|
2
|
+
const e=require(`../configurations-C9hGwa2c.cjs`),t=require(`../validate-scaffoldfy-json-vxz6VQQa.cjs`);let n=require(`node:fs`);n=e.z(n);let r=require(`node:path`);r=e.z(r);let i=require(`node:process`);i=e.z(i);let a=require(`commander`);a=e.z(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()&&/\.jsonc?$/u.test(n.name)&&t.push(a)}}return i(e),t}function s(){let e=new a.Command;e.name(`validate-scaffoldfy-json`).description(`Validate scaffoldfy JSON and JSONC files against their schemas`).version(`1.0.0`).option(`-f, --file <path>`,`Path to a JSON or JSONC file to validate`).option(`-d, --dir <path>`,`Path to a directory to scan for JSON and JSONC 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 or JSONC 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-
|
|
2
|
+
import"../configurations-C6TwZWBm.js";import{n as e}from"../validate-scaffoldfy-json-C0CBAgLY.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()&&/\.jsonc?$/u.test(n.name)&&r.push(a)}}return i(e),r}function o(){let t=new i;t.name(`validate-scaffoldfy-json`).description(`Validate scaffoldfy JSON and JSONC files against their schemas`).version(`1.0.0`).option(`-f, --file <path>`,`Path to a JSON or JSONC file to validate`).option(`-d, --dir <path>`,`Path to a directory to scan for JSON and JSONC 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 or JSONC 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-
|
|
1
|
+
require(`../configurations-C9hGwa2c.cjs`);const e=require(`../validate-scaffoldfy-json-vxz6VQQa.cjs`);require(`../scaffoldfy-config-validator-BvNnGMO1.cjs`),exports.displayValidationErrors=e.t,exports.validateScaffoldfyJsonFile=e.n,exports.validateTasksSchema=e.r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../configurations-
|
|
1
|
+
import"../configurations-C6TwZWBm.js";import{n as e,r as t,t as n}from"../validate-scaffoldfy-json-C0CBAgLY.js";import"../scaffoldfy-config-validator-D1iJBnRE.js";export{n as displayValidationErrors,e as validateScaffoldfyJsonFile,t as validateTasksSchema};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../configurations-
|
|
1
|
+
require(`../configurations-C9hGwa2c.cjs`);const e=require(`../validate-scaffoldfy-json-vxz6VQQa.cjs`);exports.displayValidationErrors=e.t,exports.validateScaffoldfyJsonFile=e.n,exports.validateTasksSchema=e.r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../configurations-
|
|
1
|
+
import"../configurations-C6TwZWBm.js";import{n as e,r as t,t as n}from"../validate-scaffoldfy-json-C0CBAgLY.js";export{n as displayValidationErrors,e as validateScaffoldfyJsonFile,t as validateTasksSchema};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./configurations-
|
|
1
|
+
const e=require(`./configurations-C9hGwa2c.cjs`),t=require(`./initial-config-CESipc-c.cjs`),n=require(`./tasks-CfkqwNGd.cjs`),r=require(`./validate-scaffoldfy-json-vxz6VQQa.cjs`);let i=require(`node:process`);i=e.z(i);async function a(a,o){let s=t.t();if(!await e.E(o.configEnabled,s,{lazy:!0})){e.A(`⊘ Template is disabled - skipping all execution`);return}o.transformers!==void 0&&o.transformers.length>0&&(e.O(`Registering ${o.transformers.length} transformer(s)...`),e.s.registerAll(o.transformers)),e.O(`Registering built-in plugins...`),n.o(),e.O(`Validating task configurations...`);let c=n.t(a);c.length>0&&(r.t(c),i.default.exit(1)),e.O(`All tasks validated successfully`);let l=a.filter(n=>e.T(n.enabled,t.t(),{lazy:!0}));e.O(`Resolving task dependencies...`);let u=n.i(l);e.O(`Sorted ${u.length} task(s) by dependencies`),e.A(`Welcome! Let's execute your tasks.`),o.dryRun&&e.P(`🔍 DRY RUN MODE - No changes will be made`),e.A(`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.j(`❌ Variable validation errors:`,`error`),t.forEach(t=>e.j(` - ${t}`,`error`)),i.default.exit(1)),e.O(`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.O(`Resolved ${Object.keys(n).length} variable(s)`),e.O(`Variable values: ${JSON.stringify(n)}`))}let p=o.prompts??[],m=[...p];if(m.length>0){let t=n.c(m);t.length>0&&(e.j(`❌ Prompt validation errors:`,`error`),t.forEach(t=>e.j(` - ${t}`,`error`)),i.default.exit(1)),e.O(`Resolving prompt default values...`);let r=await n.l(m,d);if(p.length>0){e.A(`📋 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.O(`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.O(`Resolved ${Object.keys(n).length} conditional variable(s)`)}}if(!await e.E(o.configEnabled,d)){e.A(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let h=[];for(let t of u)t.$configEnabled!=null&&!await e.E(t.$configEnabled,d)||await e.E(t.enabled,d)&&h.push(t);if(e.j(`${h.length} of ${u.length} task(s) enabled for execution`,`info`),o.dryRun){await n.w(h,d),e.A(`🔍 Dry run completed - no changes were made`),e.A(`Run without --dry-run to apply changes`);return}e.O(`Calling beforeAll hook...`),await n.S(`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.O(`Calling beforeTask hook for task: ${r.name}`),await n.S(`beforeTask`,r,d),await n.s(r,d,t+1,g,o.dryRun)?(_++,y.push(r.id),e.O(`Calling afterTask hook for task: ${r.name}`),await n.S(`afterTask`,r,d)):(await e.w(r.required,d)&&(v++,b.push(r.name)),e.O(`Calling onError hook for task: ${r.name}`),await n.S(`onError`,Error(`Task ${r.name} failed`),r),e.P(`⚠️ Task "${r.name}" failed, continuing with remaining tasks...`)))}v>0&&(e.j(`\n❌ Task execution completed with ${v} error(s)`,`error`),e.j(`Completed: ${_}/${g} tasks`,`info`),e.j(`Failed tasks: ${b.join(`, `)}`,`error`),i.default.exit(1)),e.O(`Calling afterAll hook...`),await n.S(`afterAll`,d),e.N(`✅ All tasks completed successfully!`),e.N(` 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.j(`❌ Task execution failed`,`error`),t instanceof Error?(e.j(`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 +1 @@
|
|
|
1
|
-
import{A as e,E as t,N as n,O as r,P as i,T as a,a as o,i as s,j as c,o as l,s as u,w as d}from"./configurations-
|
|
1
|
+
import{A as e,E as t,N as n,O as r,P as i,T as a,a as o,i as s,j as c,o as l,s as u,w as d}from"./configurations-C6TwZWBm.js";import{t as f}from"./initial-config-Dt0jw4Vs.js";import{S as p,c as m,i as h,l as g,o as _,s as v,t as y,u as b,w as x}from"./tasks-cEW0YvaN.js";import{t as S}from"./validate-scaffoldfy-json-C0CBAgLY.js";import C from"node:process";async function w(w,T){let E=f();if(!await t(T.configEnabled,E,{lazy:!0})){e(`⊘ Template is disabled - skipping all execution`);return}T.transformers!==void 0&&T.transformers.length>0&&(r(`Registering ${T.transformers.length} transformer(s)...`),u.registerAll(T.transformers)),r(`Registering built-in plugins...`),_(),r(`Validating task configurations...`);let D=y(w);D.length>0&&(S(D),C.exit(1)),r(`All tasks validated successfully`);let O=w.filter(e=>a(e.enabled,f(),{lazy:!0}));r(`Resolving task dependencies...`);let k=h(O);r(`Sorted ${k.length} task(s) by dependencies`),e(`Welcome! Let's execute your tasks.`),T.dryRun&&i(`🔍 DRY RUN MODE - No changes will be made`),e(`This will execute your project tasks based on the defined configuration.`);let A=E,j=[...T.variables??[]];if(j.length>0){let e=s(j);e.length>0&&(c(`❌ Variable validation errors:`,`error`),e.forEach(e=>c(` - ${e}`,`error`)),C.exit(1)),r(`Resolving variable values...`);let t=await l(j,await o(j,A,{skipConditional:!0}),A);Object.assign(A,t),Object.keys(t).length>0&&(r(`Resolved ${Object.keys(t).length} variable(s)`),r(`Variable values: ${JSON.stringify(t)}`))}let M=T.prompts??[],N=[...M];if(N.length>0){let t=m(N);t.length>0&&(c(`❌ Prompt validation errors:`,`error`),t.forEach(e=>c(` - ${e}`,`error`)),C.exit(1)),r(`Resolving prompt default values...`);let n=await g(N,A);if(M.length>0){e(`📋 Collecting prompts (available to all tasks):`);let t=await b(M,n,A);Object.assign(A,t)}}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){r(`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&&r(`Resolved ${Object.keys(t).length} conditional variable(s)`)}}if(!await t(T.configEnabled,A)){e(`⊘ Template is disabled after variable resolution - skipping all execution`);return}let P=[];for(let e of k)e.$configEnabled!=null&&!await t(e.$configEnabled,A)||await t(e.enabled,A)&&P.push(e);if(c(`${P.length} of ${k.length} task(s) enabled for execution`,`info`),T.dryRun){await x(P,A),e(`🔍 Dry run completed - no changes were made`),e(`Run without --dry-run to apply changes`);return}r(`Calling beforeAll hook...`),await p(`beforeAll`,A);let F=P.length,I=0,L=0,R=[],z=[];for(let e=0;e<P.length;e++){let t=P[e];t!=null&&(r(`Calling beforeTask hook for task: ${t.name}`),await p(`beforeTask`,t,A),await v(t,A,e+1,F,T.dryRun)?(I++,R.push(t.id),r(`Calling afterTask hook for task: ${t.name}`),await p(`afterTask`,t,A)):(await d(t.required,A)&&(L++,z.push(t.name)),r(`Calling onError hook for task: ${t.name}`),await p(`onError`,Error(`Task ${t.name} failed`),t),i(`⚠️ Task "${t.name}" failed, continuing with remaining tasks...`)))}L>0&&(c(`\n❌ Task execution completed with ${L} error(s)`,`error`),c(`Completed: ${I}/${F} tasks`,`info`),c(`Failed tasks: ${z.join(`, `)}`,`error`),C.exit(1)),r(`Calling afterAll hook...`),await p(`afterAll`,A),n(`✅ All tasks completed successfully!`),n(` Completed: ${I}/${F} tasks`)}const T=C.argv.includes(`--dry-run`),E=C.argv.includes(`--force`);async function D(e,t){try{await w(e,{dryRun:t?.dryRun??T,force:t?.force??E,configFilePath:t?.configFilePath??void 0,...t?.variables!=null&&{variables:t.variables},...t?.prompts!=null&&{prompts:t.prompts},...t?.configEnabled!=null&&{configEnabled:t.configEnabled},...t?.transformers!=null&&{transformers:t.transformers}})}catch(e){c(`❌ Task execution failed`,`error`),e instanceof Error?(c(`Error: ${e.message}`,`error`),C.env.DEBUG!=null&&console.error(e.stack)):console.error(e),C.exit(1)}}export{D as t};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const e=require(`./configurations-C9hGwa2c.cjs`);let t=require(`node:fs`);t=e.z(t);let n=require(`node:path`);n=e.z(n);let r=require(`node:process`);r=e.z(r);let i=require(`node:util`);i=e.z(i);let a=require(`node:child_process`);a=e.z(a);let o=require(`@inquirer/prompts`);o=e.z(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
|
+
`),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.D(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.x(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.D(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.D(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.D(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
|
+
`).slice(0,10).join(`
|
|
8
|
+
`),n=i.split(`
|
|
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
|
+
...`:``}`}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.D(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
|
+
`).slice(0,10).join(`
|
|
13
|
+
`),a=e.split(`
|
|
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 ne(t,n,r){if(t.condition!=null&&t.condition!==``&&!e.D(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
|
+
`).slice(0,10).join(`
|
|
17
|
+
`),s=e.split(`
|
|
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
|
+
...`:``}`:`${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 T(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(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 E(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(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 re(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(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 ie(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(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 ae(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(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}`}const oe=/^[\w+,./:=@-]+$/u;function D(e){return oe.test(e)?e:r.default.platform===`win32`?`"${e.replace(/(?<slashes>\\*)"/gu,`$<slashes>$<slashes>\\"`).replace(/(?<slashes>\\+)$/u,`$<slashes>$<slashes>`)}"`:`'${e.replace(/'/gu,String.raw`'\''`)}'`}function O(e,t){let n=(t??[]).filter(e=>e!==``).map(D);return n.length>0?`${e} ${n.join(` `)}`:e}function k(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 A(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=O(e.d(t.command,n),t.args?.map(t=>e.d(t,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 j(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 T(e.config,t);case`rename`:return E(e.config,t);case`move`:return re(e.config,t);case`copy`:return ie(e.config,t);case`append`:return await ne(e.config,t,e);case`mkdir`:return ae(e.config,t);case`git-init`:return k(e.config);case`exec`:return A(e.config,t);case`exec-file`:return A(e.config,t);default:{let t=e.type;return`${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 se(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 j(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 ce(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.j(`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.O(`Registered plugin: ${t.name}${t.version==null?``:` v${t.version}`}`)}function le(e){let t=M.get(e);if(t!=null){for(let e of t.taskTypes)P.delete(e);M.delete(e)}}function ue(e){return M.get(e)}function de(){return Array.from(M.keys())}function L(){M.clear(),P.clear()}function R(e){let t=P.get(e);if(t!=null)return M.get(t)}function z(e){return P.has(e)}async function B(e,t,n){let r=R(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function V(e,t,n,r){return{name:e,...r?.version!=null&&{version:r.version},taskTypes:[t],execute:n,...r?.getDiff!=null&&{getDiff:r.getDiff},...r?.validate!=null&&{validate:r.validate}}}const H=new Set([`true`,`1`,`yes`,`y`]),fe=new Set([`false`,`0`,`no`,`n`]);let U=new Map;function pe(e){U=new Map(Object.entries(e))}function me(e){return U.get(e)}function he(e){let t=e.indexOf(`=`);if(t<=0)throw Error(`Invalid --set value "${e}". Expected format: key=value`);return[e.slice(0,t).trim(),e.slice(t+1)]}function ge(t,n){switch(t.type){case`confirm`:{let r=n.trim().toLowerCase();if(H.has(r))return!0;if(fe.has(r))return!1;throw e.I.invalidValue(t.id,n,`expected true or false`)}case`number`:{let r=Number(n);if(n.trim()===``||Number.isNaN(r))throw e.I.invalidValue(t.id,n,`expected a number`);return r}case`select`:{let r=t.choices.find(e=>String(e.value)===n);if(r==null)throw e.I.invalidValue(t.id,n,`expected one of ${t.choices.map(e=>String(e.value)).join(`, `)}`);return r.value}case`checkbox`:return n.split(`,`).map(e=>e.trim()).filter(e=>e!==``).map(n=>{let r=t.choices.find(e=>String(e.value)===n);if(r==null)throw e.I.invalidValue(t.id,n,`expected one of ${t.choices.map(e=>String(e.value)).join(`, `)}`);return r.value});case`input`:case`password`:return n;default:throw e.I.unknownType(t.type)}}async function W(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 _e(t,n=new Map,r={}){let i={};if(t.length===0)return i;for(let a of t){if(a.$configEnabled!=null&&!await e.E(a.$configEnabled,{...r,...i}))continue;let t={...r,...i};if(!await e.E(a.enabled,t)){i[a.id]=void 0;continue}let s=me(a.id);if(s!==void 0){let n=ge(a,s);if(typeof n==`string`&&n.trim()===``&&await e.w(a.required,t)===!0)throw e.I.required(a.id);a.transformers!==void 0&&(n=await e.s.apply(a.transformers,n,t)),e.j(`${a.message}: ${String(n)} (preset)`,`info`),i[a.id]=n;continue}try{let r,s=n.get(a.id);switch(a.default!==void 0&&(s=await W(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.w(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.j(`${a.message} is required`,`error`),e.I.required(a.id);break}case`password`:if(r=await(0,o.password)({message:a.message,mask:`*`}),await e.w(a.required,t)&&(r==null||typeof r==`string`&&r.trim()===``))throw e.j(`${a.message} is required`,`error`),e.I.required(a.id);break;case`number`:{let n={message:a.message};s!==void 0&&(n.default=Number(s));let i=await e.w(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.j(`${a.message} is required`,`error`),e.I.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.w(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.j(`Unknown prompt type: ${a.type}`,`error`),e.I.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.j(`Failed to collect prompt "${a.id}": ${t.message}`,`error`),t}}return i}async function ve(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 ye(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),be=(0,i.promisify)(t.default.readFile),xe=(0,i.promisify)(t.default.stat);async function Se(t,i,a){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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.F.templateHasBothTemplateAndFile():e.F.templateMissingTemplateOrFile();let l=await S(s,i,a),u=!1,d=!1;try{await xe(o),u=!0;let e=await be(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.j(`Appended content to ${t.file}`,`success`)}const Ce={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await Se(e.config,t,e)}},K=(0,i.promisify)(t.default.copyFile),we=(0,i.promisify)(t.default.stat),q=(0,i.promisify)(t.default.mkdir),Te=(0,i.promisify)(t.default.readdir);async function J(e,t){await q(t,{recursive:!0});let r=await Te(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 Ee(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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 we(a)}catch{e.j(`Source path does not exist: ${a}`,`warn`);return}await q(n.default.dirname(o),{recursive:!0}),s.isDirectory()?(await J(a,o),e.j(`Copied directory ${t.from} to ${t.to}`,`success`)):(await K(a,o),e.j(`Copied file ${t.from} to ${t.to}`,`success`))}const De={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Ee(e.config,t)}},Oe=(0,i.promisify)(t.default.writeFile);async function ke(i,a,o){if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`File already exists, skipping: ${s}`,`info`);return}let l=x(i);if(!l.isValid)throw l.error?.includes(`cannot have both`)?e.F.createHasBothTemplateAndFile():e.F.createMissingTemplateOrFile();let u=await S(i,a,o),d=n.default.dirname(c);t.default.existsSync(d)||t.default.mkdirSync(d,{recursive:!0}),await Oe(c,u),e.j(`Created file: ${s}`,`success`)}const Ae={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await ke(e.config,t,e)}};async function je(i,a){let{paths:o,condition:s}=i;if(s!=null&&s!==``){if(!a){e.j(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!e.D(s,a)){e.j(`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 Me={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await je(e.config,t)}};async function Ne(t,n,r){t.condition!=null&&t.condition!==``&&!e.D(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 Pe={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ne(e.config,t,e)}};async function Fe(t,i){if(t.condition!=null&&t.condition!==``){if(!i){e.j(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!e.D(t.condition,i)){e.j(`Condition not met, skipping exec task`,`info`);return}}let o=t=>i==null?t:e.d(t,i),s=O(o(t.command),t.args?.map(o)),c=t.cwd==null?r.default.cwd():n.default.join(r.default.cwd(),o(t.cwd));e.O(`Executing: ${s}`),(0,a.execSync)(s,{cwd:c,stdio:`inherit`})}const Ie={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Fe(e.config,t)}};async function Le(i,o){if(i.condition!=null&&i.condition!==``){if(!o){e.j(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!e.D(i.condition,o)){e.j(`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 Re={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Le(e.config,t)}},ze=(0,i.promisify)(t.default.mkdir);async function Be(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`Condition not met, skipping mkdir task`,`info`);return}await ze(n.default.join(r.default.cwd(),e.d(t.path,i)),{recursive:!0}),e.j(`Created directory: ${t.path}`,`success`)}const Ve={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Be(e.config,t)}},He=(0,i.promisify)(t.default.rename),Ue=(0,i.promisify)(t.default.stat),We=(0,i.promisify)(t.default.mkdir);async function Ge(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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 Ue(a)}catch{e.j(`Source path does not exist: ${a}`,`warn`);return}await We(n.default.dirname(o),{recursive:!0}),await He(a,o),e.j(`Moved ${t.from} to ${t.to}`,`success`)}const Ke={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t)}},qe=(0,i.promisify)(t.default.readFile),Je=(0,i.promisify)(t.default.writeFile);async function Ye(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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 qe(a,`utf-8`),u=new RegExp(o,s);l=l.replace(u,e.d(c,i)),await Je(a,l)}const Xe={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await Ye(e.config,t)}},Ze=(0,i.promisify)(t.default.rename);async function Qe(i,a){if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`Source path does not exist: ${o}`,`warn`);return}await Ze(o,s)}const $e={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await Qe(e.config,t)}},et=(0,i.promisify)(t.default.readFile),tt=(0,i.promisify)(t.default.writeFile);async function Y(i,a){if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`File not found: ${o}, skipping`,`warn`);return}let c=await et(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 tt(o,c)}const nt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await Y(e.config,t)}},rt=(0,i.promisify)(t.default.readFile),it=(0,i.promisify)(t.default.writeFile),at=2;async function ot(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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=e.y(await rt(a,`utf-8`));function c(t){if(typeof t==`string`)return e.d(t,i);if(Array.isArray(t))return t.map(e=>c(e));if(typeof t==`object`&&t){let e={};for(let[n,r]of Object.entries(t))e[n]=c(r);return e}return t}for(let[t,n]of Object.entries(o)){let r=c(n);t.includes(`.`)?e.x(s,t,r):s[t]=r}await it(a,`${JSON.stringify(s,null,2)}\n`)}const st={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await ot(e.config,t)}},ct=(0,i.promisify)(t.default.writeFile);async function lt(i,a,o){let{allowCreate:s=!0}=i;if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`File not found, creating new file: ${c}`,`info`)}let u=x(i);if(!u.isValid)throw u.error?.includes(`cannot have both`)?e.F.templateHasBothTemplateAndFile():e.F.templateMissingTemplateOrFile();let d=await S(i,a,o),f=n.default.dirname(l);t.default.existsSync(f)||t.default.mkdirSync(f,{recursive:!0}),await ct(l,d)}const ut={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await lt(e.config,t,e)}};function X(){z(`update-json`)||(I(st),I(ut),I(Ae),I(Xe),I(nt),I(Me),I($e),I(Re),I(Ie),I(Pe),I(Ke),I(De),I(Ce),I(Ve))}async function dt(t,n,r=!1){if(X(),r){e.j(`[DRY RUN] Would execute: ${t.name}`,`info`);return}if(z(t.type)){await B(t,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${t.type}`)}async function Z(t,n,i,a,o=!1){try{return e.j(`[${i}/${a}] Running: ${t.name}...`,`info`),await dt(t,n,o),e.j(`[${i}/${a}] Completed: ${t.name}...`,`success`),!0}catch(n){return e.j(`Failed: ${t.name}`,`error`),n instanceof Error&&(e.j(` Reason: ${n.message}`,`error`),n.stack!=null&&r.default.env.DEBUG!=null&&console.error(n.stack)),!1}}async function ft(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.w(c.required,n)&&(o++,s.push(c.name)),await F(`onError`,Error(`Task ${c.name} failed`),c),e.P(`⚠️ Task "${c.name}" failed, continuing with remaining tasks...`)))}await F(`afterAll`,n),o>0&&(e.j(`\n❌ Task execution completed with ${o} error(s)`,`error`),e.j(`Completed: ${a}/${t.length} tasks`,`info`),e.j(`Failed tasks: ${s.join(`, `)}`,`error`),r.default.exit(1)),e.j(`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.R.forTaskDependency(t);i.add(t);let s=a.get(t);if(!s)throw e.L.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 pt(e){let t=[],n=e.config,r=typeof n.template==`string`?n.template:void 0,i=typeof n.templateFile==`string`?n.templateFile:void 0,a=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 mt(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.E(r.enabled,n)&&a.push(r);return a}function ht(e){return Q(e)}function $(e){let t=[];for(let n of e)if(!z(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=pt(n);t.push(...e)}return t}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return ft}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ht}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return mt}}),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 _e}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return de}});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{D as e,E as t,F as n,I as r,L as i,O as a,P as o,R as s,d as c,f as l,j as u,p as d,s as f,u as ee,v as te,w as p,x as m,y as ne}from"./configurations-
|
|
1
|
+
import{D as e,E as t,F as n,I as r,L as i,O as a,P as o,R as s,d as c,f as l,j as u,p as d,s as f,u as ee,v as te,w as p,x as m,y as ne}from"./configurations-C6TwZWBm.js";import h from"node:path";import g from"node:fs";import _ from"node:process";import{promisify as v}from"node:util";import{execSync as y}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=v(g.readFile),b={reset:`\x1B[0m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`};function x(e,t){switch(t){case`add`:return`${b.green}+ ${e}${b.reset}`;case`remove`:return`${b.red}- ${e}${b.reset}`;case`context`:return`${b.gray} ${e}${b.reset}`;default:return e}}function S(e,t){let n=e.split(`
|
|
2
2
|
`),r=t.split(`
|
|
3
3
|
`),i=[],a=Math.max(n.length,r.length);for(let e=0;e<a;e++){let t=n[e],a=r[e];t===a?t!==void 0&&i.push(x(t,`context`)):(t!==void 0&&i.push(x(t,`remove`)),a!==void 0&&i.push(x(a,`add`)))}return i}function C(e){return g.existsSync(h.join(_.cwd(),e))}async function w(e){return le(h.join(_.cwd(),e),`utf-8`)}async function T(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=t.file;if(!C(r))return`${b.red}✗ File not found: ${t.file}${b.reset}`;try{let e=await w(r),i=JSON.parse(e),a={...i};function o(e){if(typeof e==`string`)return c(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[e,n]of Object.entries(t.updates)){let t=o(n);e.includes(`.`)?m(i,e,t):i[e]=t}let s=JSON.stringify(a,null,2),l=JSON.stringify(i,null,2);if(s===l)return`${b.cyan}→ No changes${b.reset}`;let u=S(s,l);return`${b.blue}File: ${t.file}${b.reset}\n${u.join(`
|
|
4
4
|
`)}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function E(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=t.file;if(!C(r))return`${b.red}✗ File not found: ${t.file}${b.reset}`;try{let e=await w(r),i=new RegExp(t.pattern,t.flags??`g`),a=c(t.replacement,n),o=e.replace(i,a);if(e===o)return`${b.cyan}→ No matches found${b.reset}`;let s=S(e,o);return`${b.blue}File: ${t.file}${b.reset}\n${s.join(`
|
|
@@ -19,5 +19,5 @@ import{D as e,E as t,F as n,I as r,L as i,O as a,P as o,R as s,d as c,f as l,j a
|
|
|
19
19
|
...`:``}`:`${b.blue}File: ${t.file}${b.reset}\n${b.green}+ New file would be created with content${b.reset}\n${b.gray}Content preview:${b.reset}\n${o}${s?`
|
|
20
20
|
...`:``}`}catch(e){return`${b.red}✗ Error: ${e instanceof Error?e.message:String(e)}${b.reset}`}}function M(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=t.paths.map(e=>c(e,n)).filter(e=>C(e));return r.length===0?`${b.cyan}→ No files/directories to delete${b.reset}`:`${b.red}Would delete:${b.reset}\n${r.map(e=>`${b.red} - ${e}${b.reset}`).join(`
|
|
21
21
|
`)}`}function N(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=c(t.from,n),i=c(t.to,n);return C(r)?C(i)?`${b.yellow}⚠ Destination already exists: ${i}${b.reset}\n${b.cyan}Would rename: ${r} → ${i}${b.reset}`:`${b.cyan}Would rename: ${r} → ${i}${b.reset}`:`${b.red}✗ Source not found: ${r}${b.reset}`}function he(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=c(t.from,n),i=c(t.to,n);return C(r)?C(i)?`${b.yellow}⚠ Destination already exists: ${i}${b.reset}\n${b.cyan}Would move: ${r} → ${i}${b.reset}`:`${b.cyan}Would move: ${r} → ${i}${b.reset}`:`${b.red}✗ Source not found: ${r}${b.reset}`}function ge(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=c(t.from,n),i=c(t.to,n);if(!C(r))return`${b.red}✗ Source not found: ${r}${b.reset}`;let a=`file`;return C(i)?`${b.yellow}⚠ Destination already exists: ${i}${b.reset}\n${b.cyan}Would copy ${a}: ${r} → ${i}${b.reset}`:`${b.cyan}Would copy ${a}: ${r} → ${i}${b.reset}`}function _e(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=c(t.path,n);return C(r)?`${b.cyan}→ Directory already exists: ${r}${b.reset}`:`${b.green}+ Would create directory: ${r}${b.reset}`}const ve=/^[\w+,./:=@-]+$/u;function ye(e){return ve.test(e)?e:_.platform===`win32`?`"${e.replace(/(?<slashes>\\*)"/gu,`$<slashes>$<slashes>\\"`).replace(/(?<slashes>\\+)$/u,`$<slashes>$<slashes>`)}"`:`'${e.replace(/'/gu,String.raw`'\''`)}'`}function P(e,t){let n=(t??[]).filter(e=>e!==``).map(ye);return n.length>0?`${e} ${n.join(` `)}`:e}function F(e){if(e.condition!=null&&e.condition!==``)return`${b.yellow}⊘ Condition check skipped in dry-run${b.reset}`;let t=C(`.git`),n=[];if(e.removeExisting&&t&&n.push(`${b.red}Would remove existing .git directory${b.reset}`),n.push(`${b.green}Would initialize git repository${b.reset}`),e.initialCommit){let t=e.message??`Initial commit`;n.push(`${b.green}Would create initial commit: "${t}"${b.reset}`)}return n.join(`
|
|
22
|
-
`)}function I(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=P(c(t.command,n),t.args?.map(e=>c(e,n))),i=t.cwd==null?_.cwd():c(t.cwd,n);return`${b.yellow}Would execute:${b.reset}\n${b.cyan} Command: ${r}${b.reset}\n${b.cyan} Working directory: ${i}${b.reset}`}async function L(e,t){try{switch(e.type){case`update-json`:return await T(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 E(e.config,t);case`replace-in-file`:return await D(e.config,t);case`delete`:return M(e.config,t);case`rename`:return N(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 F(e.config);case`exec`:return I(e.config,t);case`exec-file`:return I(e.config,t);default:{let t=e.type;return`${b.yellow}⚠ Diff not available for task type: ${t}${b.reset}`}}}catch(e){return`${b.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function be(e,t){console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.blue} DRY RUN - Preview of changes${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`);for(let n of e){console.log(`${b.cyan}▶ Task: ${n.name}${b.reset}`),n.description!=null&&n.description!==``&&console.log(`${b.gray} ${n.description}${b.reset}`);let e=await L(n,t);console.log(e),console.log(`${b.gray}${`─`.repeat(55)}${b.reset}`)}console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.yellow} No changes were applied (dry-run mode)${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`)}const R=new Map,z={},B=new Map;function xe(e){e.beforeAll!=null&&(z.beforeAll=e.beforeAll),e.afterAll!=null&&(z.afterAll=e.afterAll),e.beforeTask!=null&&(z.beforeTask=e.beforeTask),e.afterTask!=null&&(z.afterTask=e.afterTask),e.onError!=null&&(z.onError=e.onError)}async function V(e,...t){let n=z[e];if(n!=null)try{e===`beforeAll`||e===`afterAll`?await n(t[0]):(e===`beforeTask`||e===`afterTask`||e===`onError`)&&await n(t[0],t[1])}catch(t){u(`Error in ${e} hook: ${t instanceof Error?t.message:String(t)}`,`error`)}}function H(e){if(e.name==null||e.name===``)throw TypeError(`Plugin name is required`);if(!Array.isArray(e.taskTypes)||e.taskTypes.length===0)throw TypeError(`Plugin ${e.name} must define at least one task type`);if(typeof e.execute!=`function`)throw TypeError(`Plugin ${e.name} must provide an execute function`);if(R.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(B.has(t)){let e=B.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}R.set(e.name,e);for(let t of e.taskTypes)B.set(t,e.name);a(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function Se(e){let t=R.get(e);if(t!=null){for(let e of t.taskTypes)B.delete(e);R.delete(e)}}function Ce(e){return R.get(e)}function we(){return Array.from(R.keys())}function Te(){R.clear(),B.clear()}function U(e){let t=B.get(e);if(t!=null)return R.get(t)}function W(e){return B.has(e)}async function G(e,t,n){let r=U(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function Ee(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}}}
|
|
23
|
-
`)&&(f=t.newline!==!1)}catch{}d&&f?await q(a,`\n${l}`):await q(a,l),u(`Appended content to ${t.file}`,`success`)}const Ne={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await Me(e.config,t,e)}},J=v(g.copyFile),Pe=v(g.stat),Y=v(g.mkdir),Fe=v(g.readdir);async function X(e,t){await Y(t,{recursive:!0});let n=await Fe(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=h.join(e,n.name),i=h.join(t,n.name);n.isDirectory()?await X(r,i):await J(r,i)}))}async function Ie(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping copy task`,`info`);return}let r=h.join(_.cwd(),c(t.from,n)),i=h.join(_.cwd(),c(t.to,n)),a;try{a=await Pe(r)}catch{u(`Source path does not exist: ${r}`,`warn`);return}await Y(h.dirname(i),{recursive:!0}),a.isDirectory()?(await X(r,i),u(`Copied directory ${t.from} to ${t.to}`,`success`)):(await J(r,i),u(`Copied file ${t.from} to ${t.to}`,`success`))}const Le={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await Ie(e.config,t)}},Re=v(g.writeFile);async function ze(t,r,i){if(t.condition!=null&&t.condition!==``&&!e(t.condition,r)){u(`Condition not met, skipping create task`,`info`);return}let a=c(t.file,r),o=h.join(_.cwd(),a);if(g.existsSync(o)){u(`File already exists, skipping: ${a}`,`info`);return}let s=A(t);if(!s.isValid)throw s.error?.includes(`cannot have both`)?n.createHasBothTemplateAndFile():n.createMissingTemplateOrFile();let l=await j(t,r,i),d=h.dirname(o);g.existsSync(d)||g.mkdirSync(d,{recursive:!0}),await Re(o,l),u(`Created file: ${a}`,`success`)}const Be={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await ze(e.config,t,e)}};async function Ve(t,n){let{paths:r,condition:i}=t;if(i!=null&&i!==``){if(!n){u(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!e(i,n)){u(`Condition not met, skipping deletion`,`info`);return}}for(let e of r){let t=n==null?e:c(e,n),r=h.join(_.cwd(),t);g.existsSync(r)&&g.rmSync(r,{recursive:!0,force:!0})}}const He={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await Ve(e.config,t)}};async function Ue(t,n,r){t.condition!=null&&t.condition!==``&&!e(t.condition,n)||await d({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 Ue(e.config,t,e)}};async function Ge(t,n){if(t.condition!=null&&t.condition!==``){if(!n){u(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!e(t.condition,n)){u(`Condition not met, skipping exec task`,`info`);return}}let r=e=>n==null?e:c(e,n),i=P(r(t.command),t.args?.map(r)),o=t.cwd==null?_.cwd():h.join(_.cwd(),r(t.cwd));a(`Executing: ${i}`),y(i,{cwd:o,stdio:`inherit`})}const Ke={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t)}};async function qe(t,n){if(t.condition!=null&&t.condition!==``){if(!n){u(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!e(t.condition,n)){u(`Condition not met, skipping git-init task`,`info`);return}}if(t.removeExisting){let e=h.join(_.cwd(),`.git`);g.existsSync(e)&&g.rmSync(e,{recursive:!0,force:!0})}if(y(`git init`,{stdio:`inherit`}),t.initialCommit){let e=t.message??`Initial commit`;y(`git add .`,{stdio:`inherit`}),y(`git commit -m "${e}"`,{stdio:`inherit`})}}const Je={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await qe(e.config,t)}},Ye=v(g.mkdir);async function Xe(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping mkdir task`,`info`);return}await Ye(h.join(_.cwd(),c(t.path,n)),{recursive:!0}),u(`Created directory: ${t.path}`,`success`)}const Ze={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Xe(e.config,t)}},Qe=v(g.rename),$e=v(g.stat),et=v(g.mkdir);async function tt(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping move task`,`info`);return}let r=h.join(_.cwd(),c(t.from,n)),i=h.join(_.cwd(),c(t.to,n));try{await $e(r)}catch{u(`Source path does not exist: ${r}`,`warn`);return}await et(h.dirname(i),{recursive:!0}),await Qe(r,i),u(`Moved ${t.from} to ${t.to}`,`success`)}const nt={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await tt(e.config,t)}},rt=v(g.readFile),it=v(g.writeFile);async function at(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping regex-replace task`,`info`);return}let r=h.join(_.cwd(),c(t.file,n)),{pattern:i}=t,a=t.flags??``,o=t.replacement||``,s=await rt(r,`utf-8`),l=new RegExp(i,a);s=s.replace(l,c(o,n)),await it(r,s)}const ot={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await at(e.config,t)}},st=v(g.rename);async function ct(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping rename task`,`info`);return}let r=h.join(_.cwd(),c(t.from,n)),i=h.join(_.cwd(),c(t.to,n));if(!g.existsSync(r)){u(`Source path does not exist: ${r}`,`warn`);return}await st(r,i)}const lt={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await ct(e.config,t)}},ut=v(g.readFile),dt=v(g.writeFile);async function ft(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping replace-in-file task`,`info`);return}let r=h.join(_.cwd(),c(t.file,n)),{replacements:i}=t;if(!g.existsSync(r)){u(`File not found: ${r}, skipping`,`warn`);return}let a=await ut(r,`utf-8`);for(let{find:e,replace:t}of i){let r=c(t,n);a=a.replace(new RegExp(e,`gu`),r)}await dt(r,a)}const pt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await ft(e.config,t)}},mt=v(g.readFile),ht=v(g.writeFile);async function gt(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping update-json task`,`info`);return}let r=h.join(_.cwd(),c(t.file,n)),{updates:i}=t,a=ne(await mt(r,`utf-8`));function o(e){if(typeof e==`string`)return c(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[e,t]of Object.entries(i)){let n=o(t);e.includes(`.`)?m(a,e,n):a[e]=n}await ht(r,`${JSON.stringify(a,null,2)}\n`)}const _t={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await gt(e.config,t)}},vt=v(g.writeFile);async function yt(t,r,i){let{allowCreate:a=!0}=t;if(t.condition!=null&&t.condition!==``&&!e(t.condition,r)){u(`Condition not met, skipping write task`,`info`);return}let o=c(t.file,r),s=h.join(_.cwd(),o);if(!g.existsSync(s)){if(a===!1)throw Error(`Write task failed: file does not exist (${o})`);u(`File not found, creating new file: ${o}`,`info`)}let l=A(t);if(!l.isValid)throw l.error?.includes(`cannot have both`)?n.templateHasBothTemplateAndFile():n.templateMissingTemplateOrFile();let d=await j(t,r,i),f=h.dirname(s);g.existsSync(f)||g.mkdirSync(f,{recursive:!0}),await vt(s,d)}const bt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await yt(e.config,t,e)}};function Z(){W(`update-json`)||(H(_t),H(bt),H(Be),H(ot),H(pt),H(He),H(lt),H(Je),H(Ke),H(We),H(nt),H(Le),H(Ne),H(Ze))}async function xt(e,t,n=!1){if(Z(),n){u(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(W(e.type)){await G(e,t,{dryRun:n});return}throw TypeError(`Unknown task type: ${e.type}`)}async function Q(e,t,n,r,i=!1){try{return u(`[${n}/${r}] Running: ${e.name}...`,`info`),await xt(e,t,i),u(`[${n}/${r}] Completed: ${e.name}...`,`success`),!0}catch(t){return u(`Failed: ${e.name}`,`error`),t instanceof Error&&(u(` Reason: ${t.message}`,`error`),t.stack!=null&&_.env.DEBUG!=null&&console.error(t.stack)),!1}}async function St(e,t,n){await V(`beforeAll`,t);let r=0,i=0,a=[];for(let s=0;s<e.length;s++){let c=e[s];c!=null&&(await V(`beforeTask`,c,t),await Q(c,t,s+1,e.length,n.dryRun)?(r++,await V(`afterTask`,c,t)):(await p(c.required,t)&&(i++,a.push(c.name)),await V(`onError`,Error(`Task ${c.name} failed`),c),o(`⚠️ Task "${c.name}" failed, continuing with remaining tasks...`)))}await V(`afterAll`,t),i>0&&(u(`\n❌ Task execution completed with ${i} error(s)`,`error`),u(`Completed: ${r}/${e.length} tasks`,`info`),u(`Failed tasks: ${a.join(`, `)}`,`error`),_.exit(1)),u(`Completed: ${r}/${e.length} tasks`,`success`)}function $(e){let t=[],n=new Set,r=new Set,a=new Map(e.map(e=>[e.id,e]));function o(e){if(n.has(e))return;if(r.has(e))throw s.forTaskDependency(e);r.add(e);let c=a.get(e);if(!c)throw i.forId(e);if(c.dependencies)for(let e of c.dependencies)o(e);r.delete(e),n.add(e),t.push(c)}for(let t of e)n.has(t.id)||o(t.id);return t}function Ct(e){let t=[],n=e.config,r=typeof n.template==`string`?n.template:void 0,i=typeof n.templateFile==`string`?n.templateFile:void 0,a=A({...r!==void 0&&{template:r},...i!==void 0&&{templateFile:i}});return!a.isValid&&a.error!=null&&a.error!==``&&t.push(`Task "${e.id}" (${e.name}): ${a.error}`),(n.file==null||n.file===``)&&t.push(`Task "${e.id}" (${e.name}): Write task requires "file" property to specify the output file path`),t}async function wt(e,n){let r=Et(e);r.length>0&&(console.error(`❌ Task validation errors:`),r.forEach(e=>console.error(` - ${e}`)),_.exit(1));let i=[];for(let r of e)await t(r.enabled,n)&&i.push(r);return i}function Tt(e){return $(e)}function Et(e){let t=[];for(let n of e)if(!W(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=Ct(n);t.push(...e)}return t}export{T as A,L as C,N as D,M as E,E as O,be as S,F as T,we as _,St as a,V as b,ke as c,Ee as d,G as f,Ce as g,Te as h,$ as i,D as k,Oe as l,W as m,Tt as n,Z as o,U as p,wt as r,Q as s,Et as t,De as u,H as v,I as w,xe as x,Se as y};
|
|
22
|
+
`)}function I(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n))return`${b.yellow}⊘ Condition not met - task would be skipped${b.reset}`;let r=P(c(t.command,n),t.args?.map(e=>c(e,n))),i=t.cwd==null?_.cwd():c(t.cwd,n);return`${b.yellow}Would execute:${b.reset}\n${b.cyan} Command: ${r}${b.reset}\n${b.cyan} Working directory: ${i}${b.reset}`}async function L(e,t){try{switch(e.type){case`update-json`:return await T(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 E(e.config,t);case`replace-in-file`:return await D(e.config,t);case`delete`:return M(e.config,t);case`rename`:return N(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 F(e.config);case`exec`:return I(e.config,t);case`exec-file`:return I(e.config,t);default:{let t=e.type;return`${b.yellow}⚠ Diff not available for task type: ${t}${b.reset}`}}}catch(e){return`${b.red}✗ Error generating diff: ${e instanceof Error?e.message:String(e)}${b.reset}`}}async function be(e,t){console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.blue} DRY RUN - Preview of changes${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`);for(let n of e){console.log(`${b.cyan}▶ Task: ${n.name}${b.reset}`),n.description!=null&&n.description!==``&&console.log(`${b.gray} ${n.description}${b.reset}`);let e=await L(n,t);console.log(e),console.log(`${b.gray}${`─`.repeat(55)}${b.reset}`)}console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`),console.log(`${b.yellow} No changes were applied (dry-run mode)${b.reset}`),console.log(`${b.blue}═══════════════════════════════════════════════════════${b.reset}`)}const R=new Map,z={},B=new Map;function xe(e){e.beforeAll!=null&&(z.beforeAll=e.beforeAll),e.afterAll!=null&&(z.afterAll=e.afterAll),e.beforeTask!=null&&(z.beforeTask=e.beforeTask),e.afterTask!=null&&(z.afterTask=e.afterTask),e.onError!=null&&(z.onError=e.onError)}async function V(e,...t){let n=z[e];if(n!=null)try{e===`beforeAll`||e===`afterAll`?await n(t[0]):(e===`beforeTask`||e===`afterTask`||e===`onError`)&&await n(t[0],t[1])}catch(t){u(`Error in ${e} hook: ${t instanceof Error?t.message:String(t)}`,`error`)}}function H(e){if(e.name==null||e.name===``)throw TypeError(`Plugin name is required`);if(!Array.isArray(e.taskTypes)||e.taskTypes.length===0)throw TypeError(`Plugin ${e.name} must define at least one task type`);if(typeof e.execute!=`function`)throw TypeError(`Plugin ${e.name} must provide an execute function`);if(R.has(e.name))throw TypeError(`Plugin ${e.name} is already registered`);for(let t of e.taskTypes)if(B.has(t)){let e=B.get(t);throw TypeError(`Task type "${t}" is already registered by plugin "${e}"`)}R.set(e.name,e);for(let t of e.taskTypes)B.set(t,e.name);a(`Registered plugin: ${e.name}${e.version==null?``:` v${e.version}`}`)}function Se(e){let t=R.get(e);if(t!=null){for(let e of t.taskTypes)B.delete(e);R.delete(e)}}function Ce(e){return R.get(e)}function we(){return Array.from(R.keys())}function Te(){R.clear(),B.clear()}function U(e){let t=B.get(e);if(t!=null)return R.get(t)}function W(e){return B.has(e)}async function G(e,t,n){let r=U(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function Ee(e,t,n,r){return{name:e,...r?.version!=null&&{version:r.version},taskTypes:[t],execute:n,...r?.getDiff!=null&&{getDiff:r.getDiff},...r?.validate!=null&&{validate:r.validate}}}const De=new Set([`true`,`1`,`yes`,`y`]),Oe=new Set([`false`,`0`,`no`,`n`]);let K=new Map;function ke(e){K=new Map(Object.entries(e))}function Ae(e){return K.get(e)}function je(e){let t=e.indexOf(`=`);if(t<=0)throw Error(`Invalid --set value "${e}". Expected format: key=value`);return[e.slice(0,t).trim(),e.slice(t+1)]}function Me(e,t){switch(e.type){case`confirm`:{let n=t.trim().toLowerCase();if(De.has(n))return!0;if(Oe.has(n))return!1;throw r.invalidValue(e.id,t,`expected true or false`)}case`number`:{let n=Number(t);if(t.trim()===``||Number.isNaN(n))throw r.invalidValue(e.id,t,`expected a number`);return n}case`select`:{let n=e.choices.find(e=>String(e.value)===t);if(n==null)throw r.invalidValue(e.id,t,`expected one of ${e.choices.map(e=>String(e.value)).join(`, `)}`);return n.value}case`checkbox`:return t.split(`,`).map(e=>e.trim()).filter(e=>e!==``).map(t=>{let n=e.choices.find(e=>String(e.value)===t);if(n==null)throw r.invalidValue(e.id,t,`expected one of ${e.choices.map(e=>String(e.value)).join(`, `)}`);return n.value});case`input`:case`password`:return t;default:throw r.unknownType(e.type)}}async function q(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 Ne(e,n=new Map,i={}){let a={};if(e.length===0)return a;for(let o of e){if(o.$configEnabled!=null&&!await t(o.$configEnabled,{...i,...a}))continue;let e={...i,...a};if(!await t(o.enabled,e)){a[o.id]=void 0;continue}let s=Ae(o.id);if(s!==void 0){let t=Me(o,s);if(typeof t==`string`&&t.trim()===``&&await p(o.required,e)===!0)throw r.required(o.id);o.transformers!==void 0&&(t=await f.apply(o.transformers,t,e)),u(`${o.message}: ${String(t)} (preset)`,`info`),a[o.id]=t;continue}try{let t,i=n.get(o.id);switch(o.default!==void 0&&(i=await q(o.default,o.id,e,o)),i!==void 0&&o.transformers!==void 0&&(i=await f.apply(o.transformers,i,e)),o.type){case`input`:{let n={message:o.message};i!==void 0&&(n.default=String(i));let a=await p(o.required,e);if(a!==void 0&&(n.required=a),t=await ae(n),a&&(t==null||typeof t==`string`&&t.trim()===``))throw u(`${o.message} is required`,`error`),r.required(o.id);break}case`password`:if(t=await se({message:o.message,mask:`*`}),await p(o.required,e)&&(t==null||typeof t==`string`&&t.trim()===``))throw u(`${o.message} is required`,`error`),r.required(o.id);break;case`number`:{let n={message:o.message};i!==void 0&&(n.default=Number(i));let a=await p(o.required,e);if(a!==void 0&&(n.required=a),o.min!==void 0&&(n.min=o.min),o.max!==void 0&&(n.max=o.max),t=await oe(n),a&&t==null)throw u(`${o.message} is required`,`error`),r.required(o.id);break}case`select`:{let e={message:o.message,choices:o.choices.map(e=>({name:e.name,value:e.value}))};i!==void 0&&(e.default=i),t=await ce(e);break}case`checkbox`:{let n={message:o.message,choices:o.choices.map(e=>({name:e.name,value:e.value}))};i!==void 0&&(n.default=i);let r=await p(o.required,e);r!==void 0&&(n.required=r),t=await re(n);break}case`confirm`:{let e=i===void 0?!1:!!i;t=await ie({message:o.message,default:e});break}default:throw u(`Unknown prompt type: ${o.type}`,`error`),r.unknownType(o.type)}o.transformers!==void 0&&(i!==void 0&&(t===i||String(t)===String(i))||(t=await f.apply(o.transformers,t,{...e,...a}))),a[o.id]=t}catch(e){throw e instanceof Error&&u(`Failed to collect prompt "${o.id}": ${e.message}`,`error`),e}}return a}async function Pe(e,t){let n=new Map,r=e.map(async e=>{if(e.default!==void 0){let r=await q(e.default,e.id,t,e);r!==void 0&&n.set(e.id,r)}});return await Promise.all(r),n}function Fe(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`||r.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 J=v(g.appendFile),Ie=v(g.readFile),Le=v(g.stat);async function Re(t,r,i){if(t.condition!=null&&t.condition!==``&&!e(t.condition,r)){u(`Condition not met, skipping append task`,`info`);return}let a=h.join(_.cwd(),c(t.file,r)),o={};t.content==null?t.template!=null&&(o.template=t.template):o.template=t.content,t.templateFile!=null&&(o.templateFile=t.templateFile);let s=A(o);if(!s.isValid)throw s.error?.includes(`cannot have both`)?n.templateHasBothTemplateAndFile():n.templateMissingTemplateOrFile();let l=await j(o,r,i),d=!1,f=!1;try{await Le(a),d=!0;let e=await Ie(a,`utf-8`);e.length>0&&!e.endsWith(`
|
|
23
|
+
`)&&(f=t.newline!==!1)}catch{}d&&f?await J(a,`\n${l}`):await J(a,l),u(`Appended content to ${t.file}`,`success`)}const ze={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await Re(e.config,t,e)}},Y=v(g.copyFile),Be=v(g.stat),X=v(g.mkdir),Ve=v(g.readdir);async function Z(e,t){await X(t,{recursive:!0});let n=await Ve(e,{withFileTypes:!0});await Promise.all(n.map(async n=>{let r=h.join(e,n.name),i=h.join(t,n.name);n.isDirectory()?await Z(r,i):await Y(r,i)}))}async function He(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping copy task`,`info`);return}let r=h.join(_.cwd(),c(t.from,n)),i=h.join(_.cwd(),c(t.to,n)),a;try{a=await Be(r)}catch{u(`Source path does not exist: ${r}`,`warn`);return}await X(h.dirname(i),{recursive:!0}),a.isDirectory()?(await Z(r,i),u(`Copied directory ${t.from} to ${t.to}`,`success`)):(await Y(r,i),u(`Copied file ${t.from} to ${t.to}`,`success`))}const Ue={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await He(e.config,t)}},We=v(g.writeFile);async function Ge(t,r,i){if(t.condition!=null&&t.condition!==``&&!e(t.condition,r)){u(`Condition not met, skipping create task`,`info`);return}let a=c(t.file,r),o=h.join(_.cwd(),a);if(g.existsSync(o)){u(`File already exists, skipping: ${a}`,`info`);return}let s=A(t);if(!s.isValid)throw s.error?.includes(`cannot have both`)?n.createHasBothTemplateAndFile():n.createMissingTemplateOrFile();let l=await j(t,r,i),d=h.dirname(o);g.existsSync(d)||g.mkdirSync(d,{recursive:!0}),await We(o,l),u(`Created file: ${a}`,`success`)}const Ke={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t,e)}};async function qe(t,n){let{paths:r,condition:i}=t;if(i!=null&&i!==``){if(!n){u(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!e(i,n)){u(`Condition not met, skipping deletion`,`info`);return}}for(let e of r){let t=n==null?e:c(e,n),r=h.join(_.cwd(),t);g.existsSync(r)&&g.rmSync(r,{recursive:!0,force:!0})}}const Je={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await qe(e.config,t)}};async function Ye(t,n,r){t.condition!=null&&t.condition!==``&&!e(t.condition,n)||await d({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 Xe={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ye(e.config,t,e)}};async function Ze(t,n){if(t.condition!=null&&t.condition!==``){if(!n){u(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!e(t.condition,n)){u(`Condition not met, skipping exec task`,`info`);return}}let r=e=>n==null?e:c(e,n),i=P(r(t.command),t.args?.map(r)),o=t.cwd==null?_.cwd():h.join(_.cwd(),r(t.cwd));a(`Executing: ${i}`),y(i,{cwd:o,stdio:`inherit`})}const Qe={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Ze(e.config,t)}};async function $e(t,n){if(t.condition!=null&&t.condition!==``){if(!n){u(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!e(t.condition,n)){u(`Condition not met, skipping git-init task`,`info`);return}}if(t.removeExisting){let e=h.join(_.cwd(),`.git`);g.existsSync(e)&&g.rmSync(e,{recursive:!0,force:!0})}if(y(`git init`,{stdio:`inherit`}),t.initialCommit){let e=t.message??`Initial commit`;y(`git add .`,{stdio:`inherit`}),y(`git commit -m "${e}"`,{stdio:`inherit`})}}const et={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t)}},tt=v(g.mkdir);async function nt(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping mkdir task`,`info`);return}await tt(h.join(_.cwd(),c(t.path,n)),{recursive:!0}),u(`Created directory: ${t.path}`,`success`)}const rt={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await nt(e.config,t)}},it=v(g.rename),at=v(g.stat),ot=v(g.mkdir);async function st(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping move task`,`info`);return}let r=h.join(_.cwd(),c(t.from,n)),i=h.join(_.cwd(),c(t.to,n));try{await at(r)}catch{u(`Source path does not exist: ${r}`,`warn`);return}await ot(h.dirname(i),{recursive:!0}),await it(r,i),u(`Moved ${t.from} to ${t.to}`,`success`)}const ct={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await st(e.config,t)}},lt=v(g.readFile),ut=v(g.writeFile);async function dt(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping regex-replace task`,`info`);return}let r=h.join(_.cwd(),c(t.file,n)),{pattern:i}=t,a=t.flags??``,o=t.replacement||``,s=await lt(r,`utf-8`),l=new RegExp(i,a);s=s.replace(l,c(o,n)),await ut(r,s)}const ft={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await dt(e.config,t)}},pt=v(g.rename);async function mt(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping rename task`,`info`);return}let r=h.join(_.cwd(),c(t.from,n)),i=h.join(_.cwd(),c(t.to,n));if(!g.existsSync(r)){u(`Source path does not exist: ${r}`,`warn`);return}await pt(r,i)}const ht={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await mt(e.config,t)}},gt=v(g.readFile),_t=v(g.writeFile);async function vt(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping replace-in-file task`,`info`);return}let r=h.join(_.cwd(),c(t.file,n)),{replacements:i}=t;if(!g.existsSync(r)){u(`File not found: ${r}, skipping`,`warn`);return}let a=await gt(r,`utf-8`);for(let{find:e,replace:t}of i){let r=c(t,n);a=a.replace(new RegExp(e,`gu`),r)}await _t(r,a)}const yt={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await vt(e.config,t)}},bt=v(g.readFile),xt=v(g.writeFile);async function St(t,n){if(t.condition!=null&&t.condition!==``&&!e(t.condition,n)){u(`Condition not met, skipping update-json task`,`info`);return}let r=h.join(_.cwd(),c(t.file,n)),{updates:i}=t,a=ne(await bt(r,`utf-8`));function o(e){if(typeof e==`string`)return c(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[e,t]of Object.entries(i)){let n=o(t);e.includes(`.`)?m(a,e,n):a[e]=n}await xt(r,`${JSON.stringify(a,null,2)}\n`)}const Ct={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await St(e.config,t)}},wt=v(g.writeFile);async function Tt(t,r,i){let{allowCreate:a=!0}=t;if(t.condition!=null&&t.condition!==``&&!e(t.condition,r)){u(`Condition not met, skipping write task`,`info`);return}let o=c(t.file,r),s=h.join(_.cwd(),o);if(!g.existsSync(s)){if(a===!1)throw Error(`Write task failed: file does not exist (${o})`);u(`File not found, creating new file: ${o}`,`info`)}let l=A(t);if(!l.isValid)throw l.error?.includes(`cannot have both`)?n.templateHasBothTemplateAndFile():n.templateMissingTemplateOrFile();let d=await j(t,r,i),f=h.dirname(s);g.existsSync(f)||g.mkdirSync(f,{recursive:!0}),await wt(s,d)}const Et={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await Tt(e.config,t,e)}};function Q(){W(`update-json`)||(H(Ct),H(Et),H(Ke),H(ft),H(yt),H(Je),H(ht),H(et),H(Qe),H(Xe),H(ct),H(Ue),H(ze),H(rt))}async function Dt(e,t,n=!1){if(Q(),n){u(`[DRY RUN] Would execute: ${e.name}`,`info`);return}if(W(e.type)){await G(e,t,{dryRun:n});return}throw TypeError(`Unknown task type: ${e.type}`)}async function $(e,t,n,r,i=!1){try{return u(`[${n}/${r}] Running: ${e.name}...`,`info`),await Dt(e,t,i),u(`[${n}/${r}] Completed: ${e.name}...`,`success`),!0}catch(t){return u(`Failed: ${e.name}`,`error`),t instanceof Error&&(u(` Reason: ${t.message}`,`error`),t.stack!=null&&_.env.DEBUG!=null&&console.error(t.stack)),!1}}async function Ot(e,t,n){await V(`beforeAll`,t);let r=0,i=0,a=[];for(let s=0;s<e.length;s++){let c=e[s];c!=null&&(await V(`beforeTask`,c,t),await $(c,t,s+1,e.length,n.dryRun)?(r++,await V(`afterTask`,c,t)):(await p(c.required,t)&&(i++,a.push(c.name)),await V(`onError`,Error(`Task ${c.name} failed`),c),o(`⚠️ Task "${c.name}" failed, continuing with remaining tasks...`)))}await V(`afterAll`,t),i>0&&(u(`\n❌ Task execution completed with ${i} error(s)`,`error`),u(`Completed: ${r}/${e.length} tasks`,`info`),u(`Failed tasks: ${a.join(`, `)}`,`error`),_.exit(1)),u(`Completed: ${r}/${e.length} tasks`,`success`)}function kt(e){let t=[],n=new Set,r=new Set,a=new Map(e.map(e=>[e.id,e]));function o(e){if(n.has(e))return;if(r.has(e))throw s.forTaskDependency(e);r.add(e);let c=a.get(e);if(!c)throw i.forId(e);if(c.dependencies)for(let e of c.dependencies)o(e);r.delete(e),n.add(e),t.push(c)}for(let t of e)n.has(t.id)||o(t.id);return t}function At(e){let t=[],n=e.config,r=typeof n.template==`string`?n.template:void 0,i=typeof n.templateFile==`string`?n.templateFile:void 0,a=A({...r!==void 0&&{template:r},...i!==void 0&&{templateFile:i}});return!a.isValid&&a.error!=null&&a.error!==``&&t.push(`Task "${e.id}" (${e.name}): ${a.error}`),(n.file==null||n.file===``)&&t.push(`Task "${e.id}" (${e.name}): Write task requires "file" property to specify the output file path`),t}async function jt(e,n){let r=Nt(e);r.length>0&&(console.error(`❌ Task validation errors:`),r.forEach(e=>console.error(` - ${e}`)),_.exit(1));let i=[];for(let r of e)await t(r.enabled,n)&&i.push(r);return i}function Mt(e){return kt(e)}function Nt(e){let t=[];for(let n of e)if(!W(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=At(n);t.push(...e)}return t}export{E as A,xe as C,F as D,I as E,T as M,M as O,V as S,L as T,Te as _,Ot as a,H as b,Fe as c,je as d,ke as f,W as g,U as h,kt as i,D as j,N as k,Pe as l,G as m,Mt as n,Q as o,Ee as p,jt as r,$ as s,Nt as t,Ne as u,Ce as v,be as w,Se as x,we as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./configurations-
|
|
1
|
+
const e=require(`./configurations-C9hGwa2c.cjs`);exports.cleanupTempFile=e.m,exports.debug=e.O,exports.error=e.k,exports.logError=e.k,exports.evaluateCondition=e.D,exports.evaluateEnabled=e.T,exports.evaluateEnabledAsync=e.E,exports.evaluateRequiredAsync=e.w,exports.getNestedProperty=e.b,exports.getSourceDisplayName=e.S,exports.info=e.A,exports.logInfo=e.A,exports.interpolateTemplate=e.d,exports.isUrl=e.C,exports.log=e.j,exports.logSuccess=e.N,exports.success=e.N,exports.logWarn=e.P,exports.warn=e.P,exports.parseJsonc=e.y,exports.resolveAndFetchFile=e.h,exports.resolveFilePath=e.v,exports.resolveValue=e.f,exports.setDebugMode=e.M,exports.setNestedProperty=e.x;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,b as u,d,f,h as p,j as m,k as h,m as g,v as _,w as v,x as y,y as b}from"./configurations-
|
|
1
|
+
import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,b as u,d,f,h as p,j as m,k as h,m as g,v as _,w as v,x as y,y as b}from"./configurations-C6TwZWBm.js";export{g as cleanupTempFile,o as debug,h as error,h as logError,n as evaluateCondition,l as evaluateEnabled,r as evaluateEnabledAsync,v as evaluateRequiredAsync,u as getNestedProperty,c as getSourceDisplayName,e as info,e as logInfo,d as interpolateTemplate,t as isUrl,m as log,a as logSuccess,a as success,s as logWarn,s as warn,b as parseJsonc,p as resolveAndFetchFile,_ as resolveFilePath,f as resolveValue,i as setDebugMode,y as setNestedProperty};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e,y as t}from"./configurations-
|
|
1
|
+
import{j as e,y as t}from"./configurations-C6TwZWBm.js";import n from"node:path";import{fileURLToPath as r}from"node:url";import i from"node:fs";import a from"node:process";import o from"ajv";const s=r(import.meta.url),c=n.dirname(s);function l(){let e=[n.join(c,`..`,`schema`,`scaffoldfy.schema.json`),n.join(c,`..`,`..`,`schema`,`scaffoldfy.schema.json`)];for(let t of e)if(i.existsSync(t))return t;return n.join(c,`..`,`schema`,`scaffoldfy.schema.json`)}function u(){return new o({allErrors:!0,verbose:!0,strict:!1,discriminator:!0})}function d(e){try{let t=i.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 f(e,t,n={}){let r=u().compile(t);if(!r(e)&&r.errors){let e=n.filterOneOfErrors?h(r.errors):m(r.errors);return e.length===0?{valid:!0,errors:[]}:{valid:!1,errors:e}}return{valid:!0,errors:[]}}function p(e,t){return e.startsWith(`http`)?e.includes(`scaffoldfy/schema`)||e.includes(`@pixpilot/scaffoldfy`)?l():null:e.startsWith(`../`)||e.startsWith(`./`)?n.resolve(n.dirname(t),e):e}function m(e){return e.map(e=>`${e.instancePath||`root`}: ${e.message}`)}function h(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 g(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 _(e){let r=n.isAbsolute(e)?e:n.resolve(a.cwd(),e);try{let e=t(i.readFileSync(r,`utf-8`));if(!e||typeof e!=`object`||!(`$schema`in e))return{valid:!0};let n=e.$schema;if(typeof n!=`string`)return{valid:!0};let a=p(n,r);return a===null||!i.existsSync(a)?(console.warn(`Schema file not found: ${a}`),{valid:!0}):f(e,d(a))}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${r}: ${e instanceof Error?e.message:String(e)}`]}}}function v(t,n={}){try{let e=f(t,d(l()),{filterOneOfErrors:!0});return!e.valid&&!n.silent&&g(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{_ as n,v as r,g as t};
|
package/dist/{validate-scaffoldfy-json-CDZ4RApr.cjs → validate-scaffoldfy-json-vxz6VQQa.cjs}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./configurations-
|
|
1
|
+
const e=require(`./configurations-C9hGwa2c.cjs`);let t=require(`node:fs`);t=e.z(t);let n=require(`node:path`);n=e.z(n);let r=require(`node:process`);r=e.z(r);let i=require(`node:url`);i=e.z(i);let a=require(`ajv`);a=e.z(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.j(`❌ Schema validation failed:`,`error`),e.j(``,`error`),e.j(`The following validation errors were found:`,`error`),e.j(``,`error`);for(let n of t)e.j(` • ${n}`,`error`);e.j(``,`error`),e.j(`Please fix these errors in your template configuration file.`,`error`),e.j(``,`error`),e.j(`For schema documentation, see: https://github.com/pixpilot/scaffoldfy/tree/main/packages/scaffoldfy/schema`,`info`)}function g(i){let a=n.default.isAbsolute(i)?i:n.default.resolve(r.default.cwd(),i);try{let n=e.y(t.default.readFileSync(a,`utf-8`));if(!n||typeof n!=`object`||!(`$schema`in n))return{valid:!0};let r=n.$schema;if(typeof r!=`string`)return{valid:!0};let i=f(r,a);return i===null||!t.default.existsSync(i)?(console.warn(`Schema file not found: ${i}`),{valid:!0}):d(n,u(i))}catch(e){return{valid:!1,errors:[`Failed to parse JSON file ${a}: ${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.j(`❌ Schema validation error:`,`error`),e.j(` ${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}});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixpilot/scaffoldfy",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.56.0",
|
|
5
5
|
"author": "PixPilot <m.doaie@hotmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"eslint": "^9.38.0",
|
|
53
53
|
"tsdown": "^0.15.10",
|
|
54
54
|
"typescript": "^5.9.3",
|
|
55
|
-
"@internal/
|
|
55
|
+
"@internal/prettier-config": "0.0.1",
|
|
56
56
|
"@internal/tsconfig": "0.1.0",
|
|
57
|
+
"@internal/eslint-config": "0.3.0",
|
|
57
58
|
"@internal/tsdown-config": "0.1.0",
|
|
58
|
-
"@internal/vitest-config": "0.1.0"
|
|
59
|
-
"@internal/prettier-config": "0.0.1"
|
|
59
|
+
"@internal/vitest-config": "0.1.0"
|
|
60
60
|
},
|
|
61
61
|
"prettier": "@internal/prettier-config",
|
|
62
62
|
"scripts": {
|
|
@@ -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{parse as i,printParseErrorCode as a}from"jsonc-parser";import o from"node:os";import{execSync as s}from"node:child_process";import{adaCase as c,camelCase as l,capitalCase as u,cobolCase as d,constantCase as f,dotNotation as p,kebabCase as m,lowerCase as ee,pascalCase as te,pathCase as ne,snakeCase as h,spaceCase as re,trainCase as ie,upperCamelCase as ae,upperCase as oe}from"case-anything";import{log as g}from"node:console";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-B55nh83C.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-B55nh83C.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-B55nh83C.js`);return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await import(`./utils-B55nh83C.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(e){let t=[],n=i(e,t,{allowTrailingComma:!0});if(t.length>0){let e=t.map(e=>`${a(e.error)} at offset ${e.offset}`).join(`, `);throw Error(`Invalid JSON or JSONC: ${e}`)}return n}function B(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)}let V=0;const H={};function U(e=`Loading`){let t=[`|`,`/`,`-`,`\\`,`.`,`..`,`...`],n=0;V++;let r=V;return process.stdout.write(`${e} `),H[r]=setInterval(()=>{process.stdout.write(`\r${e} ${t[n%t.length]} `),n++},120),r}function W(e){H[e]&&(clearInterval(H[e]),delete H[e],process.stdout.write(`\r`),process.stdout.write(`${` `.repeat(30)}\r`))}async function G(e){let t=new URL(e).pathname.split(`/`).pop(),n=U(`Loading ${t==null||t===``?e:t}`);try{return O(`Fetching remote file: ${e}`),await Te(e)}finally{W(n)}}async function K(n){let{file:r,sourceUrl:i,tempFileExtension:a=`.tmp`,tempFilePrefix:s=`scaffoldfy`}=n,c=r,l,u,d=!1;if(I(r)){l=r;let n=await G(l);d=!0;let i=o.tmpdir(),c=`${s}-${Date.now()}${a}`;u=e.join(i,c),t.writeFileSync(u,n,`utf-8`),O(`Remote file saved to temporary location: ${u}`)}else if(l=B(r,i),I(l)){let n=await G(l);d=!0;let r=o.tmpdir(),i=`${s}-${Date.now()}${a}`;u=e.join(r,i),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 ve(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 q(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 ye(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 be(e){switch(e){case`node`:return`.js`;case`bash`:case`sh`:return`.sh`;case`pwsh`:case`powershell`:return`.ps1`;default:return`.js`}}async function xe(t,r){let i=Y(t.file,r),a=t.args?.map(e=>Y(e,r))??[],o={};if(t.parameters)for(let[e,n]of Object.entries(t.parameters))o[e]=Y(n,r);let c=t.cwd!=null&&t.cwd!==``?e.join(n.cwd(),Y(t.cwd,r)):n.cwd(),l=await K({file:i,...t.sourceUrl!=null&&t.sourceUrl!==``&&{sourceUrl:t.sourceUrl},tempFileExtension:be(t.runtime??q(i)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:u}=l,d=t.runtime??q(u)??`node`;!t.runtime&&!q(u)&&N(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let e=ye(d,u),r=a.join(` `),i=r?`${e} ${r}`:e;O(`Executing: ${i}`);let l=s(i,{cwd:c,stdio:t.captureOutput?[`pipe`,`pipe`,`inherit`]:`inherit`,env:{...n.env,...o},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{ve(l)}}async function J(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){N(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof o.condition!=`string`){N(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=P(o.condition,i)?o.ifTrue:o.ifFalse;return typeof e==`object`&&e?await J(e,t):e}catch(e){N(`${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`){N(`${r} "${n}": exec value must have a string command`,`error`);return}try{return Se(s(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(o.type===`exec-file`){let e=o;if(typeof e.file!=`string`){N(`${r} "${n}": exec-file value must have a file path`,`error`);return}try{let t=await xe({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:Se(t.trim())}catch(e){N(`${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`){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 Y(e,i)}catch(t){return N(`${r} "${n}": failed to interpolate value: ${t instanceof Error?t.message:`Unknown error`}`,`warn`),e}}if(o.type!==void 0){N(`${r} "${n}": unknown value type "${o.type}". Expected "static", "exec", "exec-file", "conditional", or "interpolate".`,`error`);return}return e}function Se(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)=>R(t,n)?.toString()??``)}const Ce=r(t.readFile),X=new Map;function we(){X.clear()}async function Te(e){if(I(e))return Ee(e);if(!t.existsSync(e))throw y.forPath(e);return Ce(e,`utf-8`)}async function Ee(e){let t=X.get(e);if(t!=null)return t;let n=(async()=>{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)}})();X.set(e,n);try{return await n}catch(t){throw X.delete(e),t}}const Z=new Map;function De(){Z.clear(),we()}const Oe=r(t.readFile);async function ke(r,i=new Set){let a=I(r),o;if(o=a||e.isAbsolute(r)?r:e.resolve(n.cwd(),r),Z.has(o))return Z.get(o);if(i.has(o))throw v.forConfigurationInheritance(i,o);i.add(o);let s;if(a)s=await Ee(o);else{if(!t.existsSync(o))throw y.forPath(o);s=await Oe(o,`utf-8`)}let c;try{c=z(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 Z.set(o,c),c}function Ae(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 je(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 ke(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 je(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 Q(e,t,n=new Set){let r=[];return await je(e,t,n,new Set,r),Ae(r)}const Me=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 ee(String(e))}executeUppercase(e){return oe(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 u(String(e))}executeTitlecase(e){return m(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return l(String(e))}executePascalcase(e){return te(String(e))}executeSnakecase(e){return h(String(e))}executeKebabcase(e){return m(String(e))}executeConstantcase(e){return f(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 m(String(e))}executeUnderscore(e){return h(String(e))}executeCapitalCase(e){return u(String(e))}executeAdaCase(e){return c(String(e))}executeCobolCase(e){return d(String(e))}executeDotNotation(e){return p(String(e))}executePathCase(e){return ne(String(e))}executeSpaceCase(e){return re(String(e))}executeTrainCase(e){return ie(String(e))}executeUpperCamelCase(e){return ae(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};async function Ne(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 Me.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function Pe(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 Fe(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 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 Ie(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 Le(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 Re={template:[[`template`,`templateFile`]]};function ze(e,t,n){let r={...e},i=Re[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 Be(e,t){let n=Re[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 Ve(e,t){if((t.override??`merge`)===`replace`){g(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),g(` Base: ${L(e.$sourceUrl)}`,`info`),g(` Override: ${L(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}g(` → Merging task "${t.id}"`,`info`),g(` Base: ${L(e.$sourceUrl)}`,`info`),g(` Override: ${L(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=ze(e.config,t.config,t.type);let r=Be(t.type,n);r!==null&&r.length>0&&(g(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),g(` Please use override: "replace" or specify only one of these fields`,`warn`))}else n=t.config??e.config;let r=[...e.dependencies??[],...t.dependencies??[]],i=r.length>0?[...new Set(r)]:void 0,a=t.$sourceUrl??e.$sourceUrl,o={...e,...t,config:n,...i!=null&&{dependencies:i},...a!=null&&{$sourceUrl:a}};return delete o.override,o}function He(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 Ue(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return He(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=Le(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=Pe(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=Ve(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;He(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 Ue(await Q(e,t,n))}async function We(e,t){if(O(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await Q(e);return O(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await $(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{k as A,I as C,P as D,F as E,ue as F,le as I,ce as L,fe as M,A as N,O,j as P,v as R,L as S,pe as T,W as _,Fe as a,R as b,ke as c,Y as d,J as f,U as g,K as h,Ie as i,N as j,M as k,De as l,ve as m,We as n,Ne as o,xe as p,Ue as r,Me as s,$ as t,Te as u,B as v,ge as w,_e as x,z 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(`jsonc-parser`);f=s(f);let p=require(`node:os`);p=s(p);let m=require(`node:child_process`);m=s(m);let h=require(`case-anything`);h=s(h);let g=require(`node:console`);g=s(g);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)}},ee=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)}},y=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)}},b=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)}},x=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)}},S=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`)}},C=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 w=!1;function ae(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 oe(e){console.log(`${E.info}${T.info} ${e}${D}`)}function k(e){console.log(`${E.success}${T.success} ${e}${D}`)}function A(e){console.log(`${E.warn}${T.warn} ${e}${D}`)}function j(e){console.log(`${E.error}${T.error} ${e}${D}`)}function M(e,t=`info`){switch(t){case`debug`:O(e);break;case`info`:oe(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 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 N(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}async function ce(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-UcwApCMS.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-UcwApCMS.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 N(e.value,t,n?.lazy===!0?{lazy:!0}:void 0)}return!1}function le(e,t){try{let n={...t};return Function(...Object.keys(n),`'use strict'; return (${e})`)(...Object.values(n))}catch{return!0}}function ue(e){return e===void 0||typeof e==`boolean`?e:typeof e==`string`?{type:`condition`,value:e}:typeof e==`object`&&e&&`condition`in e&&!(`type`in e)?{type:`condition`,value:e.condition}:e}async function de(e,t){let n=ue(e);if(n===void 0)return!0;if(typeof n==`boolean`)return n;if(typeof n==`object`&&n&&`type`in n){if(n.type===`exec`)try{let{execSync:e}=await import(`node:child_process`),{interpolateTemplate:r}=await Promise.resolve().then(()=>require(`./utils-UcwApCMS.cjs`));return e(r(n.value,t),{encoding:`utf-8`,stdio:`ignore`}),!0}catch(e){let{log:t}=await Promise.resolve().then(()=>require(`./utils-UcwApCMS.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 le(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 fe(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){let t=[],n=(0,f.parse)(e,t,{allowTrailingComma:!0});if(t.length>0){let e=t.map(e=>`${(0,f.printParseErrorCode)(e.error)} at offset ${e.offset}`).join(`, `);throw Error(`Invalid JSON or JSONC: ${e}`)}return n}function R(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 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 O(`Fetching remote file: ${e}`),await _e(e)}finally{H(n)}}async function W(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 U(o);u=!0;let n=p.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=R(t,n),P(o)){let e=await U(o);u=!0;let t=p.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 G(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 K(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 pe(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 me(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(e,t){let n=X(e.file,t),r=e.args?.map(e=>X(e,t))??[],i={};if(e.parameters)for(let[n,r]of Object.entries(e.parameters))i[n]=X(r,t);let a=e.cwd!=null&&e.cwd!==``?l.default.join(u.default.cwd(),X(e.cwd,t)):u.default.cwd(),o=await W({file:n,...e.sourceUrl!=null&&e.sourceUrl!==``&&{sourceUrl:e.sourceUrl},tempFileExtension:me(e.runtime??K(n)??`node`),tempFilePrefix:`scaffoldfy-exec`}),{localFilePath:s}=o,c=e.runtime??K(s)??`node`;!e.runtime&&!K(s)&&M(`Could not detect runtime from file extension, defaulting to 'node'`,`warn`);try{let t=pe(c,s),n=r.join(` `),o=n?`${t} ${n}`:t;O(`Executing: ${o}`);let l=(0,m.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{G(o)}}async function J(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){M(`${r} "${n}": conditional value requires context but none provided`,`warn`);return}if(typeof o.condition!=`string`){M(`${r} "${n}": conditional value must have a string condition`,`error`);return}try{let e=N(o.condition,i)?o.ifTrue:o.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(o.type===`exec`){let e=o.value;if(typeof e!=`string`){M(`${r} "${n}": exec value must have a string command`,`error`);return}try{return Y((0,m.execSync)(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(o.type===`exec-file`){let e=o;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},...a!=null&&{sourceUrl:a},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(o.type===`static`)return o.value;if(o.type===`interpolate`){let e=o.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(o.type!==void 0){M(`${r} "${n}": unknown value type "${o.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)=>I(t,n)?.toString()??``)}const he=(0,d.promisify)(c.default.readFile),Z=new Map;function ge(){Z.clear()}async function _e(e){if(P(e))return ve(e);if(!c.default.existsSync(e))throw ee.forPath(e);return he(e,`utf-8`)}async function ve(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 ye(){Q.clear(),ge()}const be=(0,d.promisify)(c.default.readFile);async function xe(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 v.forConfigurationInheritance(t,r);t.add(r);let i;if(n)i=await ve(r);else{if(!c.default.existsSync(r))throw ee.forPath(r);i=await be(r,`utf-8`)}let a;try{a=L(i)}catch(e){throw te.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 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 Ce(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 v.forConfigurationInheritance(r,s);r.add(s);let c=await xe(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 Ce(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 we(e,t,n=new Set){let r=[];return await Ce(e,t,n,new Set,r),Se(r)}var Te=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(0,h.lowerCase)(String(e))}executeUppercase(e){return(0,h.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,h.capitalCase)(String(e))}executeTitlecase(e){return(0,h.kebabCase)(String(e)).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}executeCamelcase(e){return(0,h.camelCase)(String(e))}executePascalcase(e){return(0,h.pascalCase)(String(e))}executeSnakecase(e){return(0,h.snakeCase)(String(e))}executeKebabcase(e){return(0,h.kebabCase)(String(e))}executeConstantcase(e){return(0,h.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,h.kebabCase)(String(e))}executeUnderscore(e){return(0,h.snakeCase)(String(e))}executeCapitalCase(e){return(0,h.capitalCase)(String(e))}executeAdaCase(e){return(0,h.adaCase)(String(e))}executeCobolCase(e){return(0,h.cobolCase)(String(e))}executeDotNotation(e){return(0,h.dotNotation)(String(e))}executePathCase(e){return(0,h.pathCase)(String(e))}executeSpaceCase(e){return(0,h.spaceCase)(String(e))}executeTrainCase(e){return(0,h.trainCase)(String(e))}executeUpperCamelCase(e){return(0,h.upperCamelCase)(String(e))}clear(){this.transformers.clear()}getIds(){return Array.from(this.transformers.keys())}};const Ee=new Te;async function De(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 Ee.apply(i.transformers,e,{...n,...r})),r[i.id]=e)}return r}function Oe(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 ke(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 ce(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 Ae(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 je(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 Me={template:[[`template`,`templateFile`]]};function Ne(e,t,n){let r={...e},i=Me[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 Pe(e,t){let n=Me[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 Fe(e,t){if((t.override??`merge`)===`replace`){(0,g.log)(` → Task "${t.id}" using 'replace' strategy - completely replacing base task`,`info`),(0,g.log)(` Base: ${F(e.$sourceUrl)}`,`info`),(0,g.log)(` Override: ${F(t.$sourceUrl)}`,`info`);let{override:n,...r}=t;return r}(0,g.log)(` → Merging task "${t.id}"`,`info`),(0,g.log)(` Base: ${F(e.$sourceUrl)}`,`info`),(0,g.log)(` Override: ${F(t.$sourceUrl)}`,`info`);let n;if(typeof e.config==`object`&&e.config!==null&&typeof t.config==`object`&&t.config!==null){n=Ne(e.config,t.config,t.type);let r=Pe(t.type,n);r!==null&&r.length>0&&((0,g.log)(` ⚠️ Warning: Conflicting config fields detected: ${r.join(`, `)}`,`warn`),(0,g.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 $(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 Ie(e){if(e.length===0)return{name:`Empty Configuration`,tasks:[]};if(e.length===1){let t=e[0];return $(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=je(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=Oe(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=Fe(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;$(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 Le(e,t,n=new Set){return Ie(await we(e,t,n))}async function Re(e,t){if(O(`Loading tasks from ${e}...`),t?.sequential===!0){let t=await we(e);return O(`Loaded ${t.length} configuration(s) for processing`),{tasks:[],configs:t}}let n=await Le(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}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return s}});
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{A as e,E as t,O as n,a as r,i,j as a,o}from"./configurations-Bx3IQ0vv.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-DnOWByrf.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(n,r){return await t(n.enabled,r)?(await _(n,r),await g(n,r),await v(n,r),await t(n.enabled,r)?!0:(e(`⊘ Config "${n.name}" became disabled after variable/prompt resolution - skipping tasks`),!1)):(e(`⊘ Config "${n.name}" is disabled - skipping`),!1)}async function b(t,r,i={}){n(`Running configs with sequential variable/prompt resolution...`),n(`Total configs to process: ${t.length}`),n(`Registering built-in plugins...`),f();let o=[];console.log(``),e(`📋 Collecting input...`),console.log(``);for(let e=0;e<t.length;e++){let r=t[e];if(r==null)continue;let a=`=`.repeat(60);if(n(`\n${a}`),n(`Processing config ${e+1}/${t.length}: "${r.name}"`),n(a),n(`Current config keys: ${Object.keys(i).join(`, `)}`),await y(r,i)){let e=r.tasks??[];e.length>0&&(n(`Found ${e.length} task(s) in config "${r.name}" (will execute later)`),o.push(...e))}}if(n(`
|
|
2
|
-
🔧 Validating and filtering all collected tasks...`),o.length===0){a(`No tasks found in any config`,`info`);return}console.log(``),a(`🛠️ Preparing tasks...`,`info`);let l=await p(o,i);if(console.log(``),a(`Found ${o.length} tasks (${l.length} enabled)`,`info`),a(`All tasks validated successfully`,`success`),l.length===0){a(`No enabled tasks to execute`,`info`);return}let u=d(l);if(r.dryRun){a(`
|
|
3
|
-
🔍 Dry run - showing task changes...`,`info`),await s(u,i),a(`
|
|
4
|
-
🔍 Dry run completed - no changes were made`,`info`),a(`Run without --dry-run to apply changes`,`info`);return}console.log(``),e(`⚙️ Executing tasks...`),console.log(``),await c(u,i,r)}export{b as runConfigurationSequentially};
|
package/dist/tasks-Bl4_CA4o.cjs
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
const e=require(`./configurations-DtzF7Hpe.cjs`);let t=require(`node:fs`);t=e.z(t);let n=require(`node:path`);n=e.z(n);let r=require(`node:process`);r=e.z(r);let i=require(`node:util`);i=e.z(i);let a=require(`node:child_process`);a=e.z(a);let o=require(`@inquirer/prompts`);o=e.z(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
|
-
`),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.D(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.x(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.D(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.D(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.D(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
|
-
`).slice(0,10).join(`
|
|
8
|
-
`),n=i.split(`
|
|
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
|
-
...`:``}`}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.D(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
|
-
`).slice(0,10).join(`
|
|
13
|
-
`),a=e.split(`
|
|
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.D(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
|
-
`).slice(0,10).join(`
|
|
17
|
-
`),s=e.split(`
|
|
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
|
-
...`:``}`:`${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.D(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.D(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.D(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.D(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.D(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}`}const ae=/^[\w+,./:=@-]+$/u;function O(e){return ae.test(e)?e:r.default.platform===`win32`?`"${e.replace(/(?<slashes>\\*)"/gu,`$<slashes>$<slashes>\\"`).replace(/(?<slashes>\\+)$/u,`$<slashes>$<slashes>`)}"`:`'${e.replace(/'/gu,String.raw`'\''`)}'`}function k(e,t){let n=(t??[]).filter(e=>e!==``).map(O);return n.length>0?`${e} ${n.join(` `)}`:e}function A(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 j(t,n){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,n))return`${d.yellow}⊘ Condition not met - task would be skipped${d.reset}`;let i=k(e.d(t.command,n),t.args?.map(t=>e.d(t,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 M(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 A(e.config);case`exec`:return j(e.config,t);case`exec-file`:return j(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 oe(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 M(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 N=new Map,P={},F=new Map;function se(e){e.beforeAll!=null&&(P.beforeAll=e.beforeAll),e.afterAll!=null&&(P.afterAll=e.afterAll),e.beforeTask!=null&&(P.beforeTask=e.beforeTask),e.afterTask!=null&&(P.afterTask=e.afterTask),e.onError!=null&&(P.onError=e.onError)}async function I(t,...n){let r=P[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.j(`Error in ${t} hook: ${n instanceof Error?n.message:String(n)}`,`error`)}}function L(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(N.has(t.name))throw TypeError(`Plugin ${t.name} is already registered`);for(let e of t.taskTypes)if(F.has(e)){let t=F.get(e);throw TypeError(`Task type "${e}" is already registered by plugin "${t}"`)}N.set(t.name,t);for(let e of t.taskTypes)F.set(e,t.name);e.O(`Registered plugin: ${t.name}${t.version==null?``:` v${t.version}`}`)}function ce(e){let t=N.get(e);if(t!=null){for(let e of t.taskTypes)F.delete(e);N.delete(e)}}function le(e){return N.get(e)}function R(){return Array.from(N.keys())}function z(){N.clear(),F.clear()}function B(e){let t=F.get(e);if(t!=null)return N.get(t)}function V(e){return F.has(e)}async function H(e,t,n){let r=B(e.type);if(r==null)throw TypeError(`No plugin found for task type: ${e.type}`);await r.execute(e,t,n)}function U(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(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 ue(t,n=new Map,r={}){let i={};if(t.length===0)return i;for(let a of t){if(a.$configEnabled!=null&&!await e.E(a.$configEnabled,{...r,...i}))continue;let t={...r,...i};if(!await e.E(a.enabled,t)){i[a.id]=void 0;continue}try{let r,s=n.get(a.id);switch(a.default!==void 0&&(s=await W(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.w(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.j(`${a.message} is required`,`error`),e.I.required(a.id);break}case`password`:if(r=await(0,o.password)({message:a.message,mask:`*`}),await e.w(a.required,t)&&(r==null||typeof r==`string`&&r.trim()===``))throw e.j(`${a.message} is required`,`error`),e.I.required(a.id);break;case`number`:{let n={message:a.message};s!==void 0&&(n.default=Number(s));let i=await e.w(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.j(`${a.message} is required`,`error`),e.I.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.w(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.j(`Unknown prompt type: ${a.type}`,`error`),e.I.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.j(`Failed to collect prompt "${a.id}": ${t.message}`,`error`),t}}return i}async function de(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 fe(e){let t=[],n=new Set;for(let r of e){if(n.has(r.id)&&t.push(`Duplicate prompt ID: ${r.id}`),n.add(r.id),/^[a-zA-Z_$][a-zA-Z0-9_$]*$/u.test(r.id)||t.push(`Invalid prompt ID "${r.id}": must be a valid JavaScript identifier (start with letter, underscore, or $, followed by letters, digits, underscores, or $)`),(!r.message||r.message.trim()===``)&&t.push(`Prompt "${r.id}" must have a non-empty message`),r.type===`select`||r.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),pe=(0,i.promisify)(t.default.readFile),me=(0,i.promisify)(t.default.stat);async function he(t,i,a){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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.F.templateHasBothTemplateAndFile():e.F.templateMissingTemplateOrFile();let l=await S(s,i,a),u=!1,d=!1;try{await me(o),u=!0;let e=await pe(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.j(`Appended content to ${t.file}`,`success`)}const ge={name:`append`,version:`1.0.0`,taskTypes:[`append`],execute:async(e,t,n)=>{n.dryRun||await he(e.config,t,e)}},K=(0,i.promisify)(t.default.copyFile),_e=(0,i.promisify)(t.default.stat),q=(0,i.promisify)(t.default.mkdir),ve=(0,i.promisify)(t.default.readdir);async function J(e,t){await q(t,{recursive:!0});let r=await ve(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 ye(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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 _e(a)}catch{e.j(`Source path does not exist: ${a}`,`warn`);return}await q(n.default.dirname(o),{recursive:!0}),s.isDirectory()?(await J(a,o),e.j(`Copied directory ${t.from} to ${t.to}`,`success`)):(await K(a,o),e.j(`Copied file ${t.from} to ${t.to}`,`success`))}const be={name:`copy`,version:`1.0.0`,taskTypes:[`copy`],execute:async(e,t,n)=>{n.dryRun||await ye(e.config,t)}},xe=(0,i.promisify)(t.default.writeFile);async function Se(i,a,o){if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`File already exists, skipping: ${s}`,`info`);return}let l=x(i);if(!l.isValid)throw l.error?.includes(`cannot have both`)?e.F.createHasBothTemplateAndFile():e.F.createMissingTemplateOrFile();let u=await S(i,a,o),d=n.default.dirname(c);t.default.existsSync(d)||t.default.mkdirSync(d,{recursive:!0}),await xe(c,u),e.j(`Created file: ${s}`,`success`)}const Ce={name:`create`,version:`1.0.0`,taskTypes:[`create`],execute:async(e,t,n)=>{n.dryRun||await Se(e.config,t,e)}};async function we(i,a){let{paths:o,condition:s}=i;if(s!=null&&s!==``){if(!a){e.j(`Condition specified but no config provided, skipping deletion`,`warn`);return}if(!e.D(s,a)){e.j(`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 Te={name:`delete`,version:`1.0.0`,taskTypes:[`delete`],execute:async(e,t,n)=>{n.dryRun||await we(e.config,t)}};async function Ee(t,n,r){t.condition!=null&&t.condition!==``&&!e.D(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 De={name:`exec-file`,version:`1.0.0`,taskTypes:[`exec-file`],execute:async(e,t,n)=>{n.dryRun||await Ee(e.config,t,e)}};async function Oe(t,i){if(t.condition!=null&&t.condition!==``){if(!i){e.j(`Condition specified but no config provided, skipping exec`,`warn`);return}if(!e.D(t.condition,i)){e.j(`Condition not met, skipping exec task`,`info`);return}}let o=t=>i==null?t:e.d(t,i),s=k(o(t.command),t.args?.map(o)),c=t.cwd==null?r.default.cwd():n.default.join(r.default.cwd(),o(t.cwd));e.O(`Executing: ${s}`),(0,a.execSync)(s,{cwd:c,stdio:`inherit`})}const ke={name:`exec`,version:`1.0.0`,taskTypes:[`exec`],execute:async(e,t,n)=>{n.dryRun||await Oe(e.config,t)}};async function Ae(i,o){if(i.condition!=null&&i.condition!==``){if(!o){e.j(`Condition specified but no config provided, skipping git-init`,`warn`);return}if(!e.D(i.condition,o)){e.j(`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 je={name:`git-init`,version:`1.0.0`,taskTypes:[`git-init`],execute:async(e,t,n)=>{n.dryRun||await Ae(e.config,t)}},Me=(0,i.promisify)(t.default.mkdir);async function Ne(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`Condition not met, skipping mkdir task`,`info`);return}await Me(n.default.join(r.default.cwd(),e.d(t.path,i)),{recursive:!0}),e.j(`Created directory: ${t.path}`,`success`)}const Pe={name:`mkdir`,version:`1.0.0`,taskTypes:[`mkdir`],execute:async(e,t,n)=>{n.dryRun||await Ne(e.config,t)}},Fe=(0,i.promisify)(t.default.rename),Ie=(0,i.promisify)(t.default.stat),Le=(0,i.promisify)(t.default.mkdir);async function Re(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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 Ie(a)}catch{e.j(`Source path does not exist: ${a}`,`warn`);return}await Le(n.default.dirname(o),{recursive:!0}),await Fe(a,o),e.j(`Moved ${t.from} to ${t.to}`,`success`)}const ze={name:`move`,version:`1.0.0`,taskTypes:[`move`],execute:async(e,t,n)=>{n.dryRun||await Re(e.config,t)}},Be=(0,i.promisify)(t.default.readFile),Ve=(0,i.promisify)(t.default.writeFile);async function He(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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 Be(a,`utf-8`),u=new RegExp(o,s);l=l.replace(u,e.d(c,i)),await Ve(a,l)}const Ue={name:`regex-replace`,version:`1.0.0`,taskTypes:[`regex-replace`],execute:async(e,t,n)=>{n.dryRun||await He(e.config,t)}},We=(0,i.promisify)(t.default.rename);async function Ge(i,a){if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`Source path does not exist: ${o}`,`warn`);return}await We(o,s)}const Ke={name:`rename`,version:`1.0.0`,taskTypes:[`rename`],execute:async(e,t,n)=>{n.dryRun||await Ge(e.config,t)}},qe=(0,i.promisify)(t.default.readFile),Je=(0,i.promisify)(t.default.writeFile);async function Y(i,a){if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`File not found: ${o}, skipping`,`warn`);return}let c=await qe(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 Je(o,c)}const Ye={name:`replace-in-file`,version:`1.0.0`,taskTypes:[`replace-in-file`],execute:async(e,t,n)=>{n.dryRun||await Y(e.config,t)}},Xe=(0,i.promisify)(t.default.readFile),Ze=(0,i.promisify)(t.default.writeFile),Qe=2;async function $e(t,i){if(t.condition!=null&&t.condition!==``&&!e.D(t.condition,i)){e.j(`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=e.y(await Xe(a,`utf-8`));function c(t){if(typeof t==`string`)return e.d(t,i);if(Array.isArray(t))return t.map(e=>c(e));if(typeof t==`object`&&t){let e={};for(let[n,r]of Object.entries(t))e[n]=c(r);return e}return t}for(let[t,n]of Object.entries(o)){let r=c(n);t.includes(`.`)?e.x(s,t,r):s[t]=r}await Ze(a,`${JSON.stringify(s,null,2)}\n`)}const et={name:`update-json`,version:`1.0.0`,taskTypes:[`update-json`],execute:async(e,t,n)=>{n.dryRun||await $e(e.config,t)}},tt=(0,i.promisify)(t.default.writeFile);async function nt(i,a,o){let{allowCreate:s=!0}=i;if(i.condition!=null&&i.condition!==``&&!e.D(i.condition,a)){e.j(`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.j(`File not found, creating new file: ${c}`,`info`)}let u=x(i);if(!u.isValid)throw u.error?.includes(`cannot have both`)?e.F.templateHasBothTemplateAndFile():e.F.templateMissingTemplateOrFile();let d=await S(i,a,o),f=n.default.dirname(l);t.default.existsSync(f)||t.default.mkdirSync(f,{recursive:!0}),await tt(l,d)}const rt={name:`write`,version:`1.0.0`,taskTypes:[`write`],execute:async(e,t,n)=>{n.dryRun||await nt(e.config,t,e)}};function X(){V(`update-json`)||(L(et),L(rt),L(Ce),L(Ue),L(Ye),L(Te),L(Ke),L(je),L(ke),L(De),L(ze),L(be),L(ge),L(Pe))}async function it(t,n,r=!1){if(X(),r){e.j(`[DRY RUN] Would execute: ${t.name}`,`info`);return}if(V(t.type)){await H(t,n,{dryRun:r});return}throw TypeError(`Unknown task type: ${t.type}`)}async function Z(t,n,i,a,o=!1){try{return e.j(`[${i}/${a}] Running: ${t.name}...`,`info`),await it(t,n,o),e.j(`[${i}/${a}] Completed: ${t.name}...`,`success`),!0}catch(n){return e.j(`Failed: ${t.name}`,`error`),n instanceof Error&&(e.j(` Reason: ${n.message}`,`error`),n.stack!=null&&r.default.env.DEBUG!=null&&console.error(n.stack)),!1}}async function at(t,n,i){await I(`beforeAll`,n);let a=0,o=0,s=[];for(let r=0;r<t.length;r++){let c=t[r];c!=null&&(await I(`beforeTask`,c,n),await Z(c,n,r+1,t.length,i.dryRun)?(a++,await I(`afterTask`,c,n)):(await e.w(c.required,n)&&(o++,s.push(c.name)),await I(`onError`,Error(`Task ${c.name} failed`),c),e.P(`⚠️ Task "${c.name}" failed, continuing with remaining tasks...`)))}await I(`afterAll`,n),o>0&&(e.j(`\n❌ Task execution completed with ${o} error(s)`,`error`),e.j(`Completed: ${a}/${t.length} tasks`,`info`),e.j(`Failed tasks: ${s.join(`, `)}`,`error`),r.default.exit(1)),e.j(`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.R.forTaskDependency(t);i.add(t);let s=a.get(t);if(!s)throw e.L.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 ot(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 st(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.E(r.enabled,n)&&a.push(r);return a}function ct(e){return Q(e)}function $(e){let t=[];for(let n of e)if(!V(n.type))t.push(`Task "${n.id}" (${n.name}): Unknown task type "${n.type}"`);else if(n.type===`write`){let e=ot(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 M}}),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 oe}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return z}}),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 de}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ct}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return st}}),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 ue}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return ce}});
|