@powerplatformdevops/cli 1.0.0-beta.1 → 1.0.0-beta.2
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 +33 -3
- package/package.json +3 -3
- package/ppdevops-cli.js +58 -57
package/README.md
CHANGED
|
@@ -39,6 +39,24 @@ ppdevops deploy --project . --environment MyEnvironment --solutions MySolution
|
|
|
39
39
|
`--project` is the repository root holding `deployPackages.json`; `--environment` is a name from
|
|
40
40
|
`Environments.json`, not a URL.
|
|
41
41
|
|
|
42
|
+
### The plan is the contract
|
|
43
|
+
|
|
44
|
+
`deploy` resolves the same plan document `plan` prints and executes exactly that: every
|
|
45
|
+
solution, patch, stage and step in the plan is what the run reports, by the same ids. To
|
|
46
|
+
deploy a plan you reviewed earlier, pass it back:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
ppdevops plan --project . --environment MyEnvironment --json > plan.json
|
|
50
|
+
# review plan.json …
|
|
51
|
+
ppdevops deploy --project . --environment MyEnvironment --plan plan.json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Before doing anything, `deploy` re-resolves and compares. If the environment or the branch
|
|
55
|
+
has moved since the plan — an installed version changed, a solution would now skip instead
|
|
56
|
+
of upgrade, a step was toggled — it refuses with exit code **2** and lists the differences.
|
|
57
|
+
Nothing is deployed; re-run `plan`, review, and deploy again. `PPDEVOPS_PLAN_FILE` is the
|
|
58
|
+
environment-variable form of `--plan` (Studio uses it).
|
|
59
|
+
|
|
42
60
|
### Authentication
|
|
43
61
|
|
|
44
62
|
Service-principal credentials are read from the environment:
|
|
@@ -54,15 +72,27 @@ variables: arguments are visible in process listings and shell history.
|
|
|
54
72
|
|
|
55
73
|
### Structured output
|
|
56
74
|
|
|
57
|
-
|
|
58
|
-
|
|
75
|
+
`ppdevops plan --json` prints the whole plan as one JSON document — every solution, its
|
|
76
|
+
install / upgrade / skip decision and why, the steps in execution order (disabled ones
|
|
77
|
+
included), and the run-level warnings. The console view is rendered from the same
|
|
78
|
+
document, so the two never disagree:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
ppdevops plan --project . --environment MyEnvironment --json > plan.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`ppdevops deploy --json` emits Run Event Schema v1 as NDJSON, one event per line. The opening
|
|
85
|
+
`run` event carries the plan document, so a consumer can rebuild the whole run from the stream
|
|
86
|
+
alone. Prefer writing it to a file rather than parsing stdout:
|
|
59
87
|
|
|
60
88
|
```bash
|
|
61
89
|
PPDEVOPS_EVENTS_FILE=run-events.ndjson ppdevops deploy ... --json
|
|
62
90
|
```
|
|
63
91
|
|
|
64
92
|
The events file exists because Windows ConPTY reflows long lines, which corrupts NDJSON on stdout.
|
|
65
|
-
The human-readable log stays on stdout either way.
|
|
93
|
+
The human-readable log stays on stdout either way. When the events file is set, `plan --json`
|
|
94
|
+
writes the same stream (with the full document on the closing `plan` event) instead of printing
|
|
95
|
+
the document; `--format ndjson` forces the stream onto stdout without a file.
|
|
66
96
|
|
|
67
97
|
## Version
|
|
68
98
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerplatformdevops/cli",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"description": "Power Platform DevOps Studio – cross-platform deployment CLI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"power-platform",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"access": "public"
|
|
24
24
|
},
|
|
25
25
|
"ppdevops": {
|
|
26
|
-
"upstreamCommit": "
|
|
27
|
-
"builtOn": "2026-09-
|
|
26
|
+
"upstreamCommit": "7f1bca7",
|
|
27
|
+
"builtOn": "2026-09-16T08:56:11Z"
|
|
28
28
|
}
|
|
29
29
|
}
|
package/ppdevops-cli.js
CHANGED
|
@@ -1,70 +1,71 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`).replace(/^/gm," ".repeat(o))}let
|
|
4
|
-
`)}padWidth(n,
|
|
2
|
+
"use strict";var po=Object.create;var Wt=Object.defineProperty;var fo=Object.getOwnPropertyDescriptor;var mo=Object.getOwnPropertyNames;var ho=Object.getPrototypeOf,go=Object.prototype.hasOwnProperty;var k=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var vo=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of mo(n))!go.call(e,i)&&i!==t&&Wt(e,i,{get:()=>n[i],enumerable:!(r=fo(n,i))||r.enumerable});return e};var y=(e,n,t)=>(t=e!=null?po(ho(e)):{},vo(n||!e||!e.__esModule?Wt(t,"default",{value:e,enumerable:!0}):t,e));var Be=k(Yn=>{var rn=class extends Error{constructor(n,t,r){super(r),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=n,this.nestedError=void 0}},Wn=class extends rn{constructor(n){super(1,"commander.invalidArgument",n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Yn.CommanderError=rn;Yn.InvalidArgumentError=Wn});var on=k(zn=>{var{InvalidArgumentError:_o}=Be(),Gn=class{constructor(n,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,n[0]){case"<":this.required=!0,this._name=n.slice(1,-1);break;case"[":this.required=!1,this._name=n.slice(1,-1);break;default:this.required=!0,this._name=n;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(n,t){return t===this.defaultValue||!Array.isArray(t)?[n]:t.concat(n)}default(n,t){return this.defaultValue=n,this.defaultValueDescription=t,this}argParser(n){return this.parseArg=n,this}choices(n){return this.argChoices=n.slice(),this.parseArg=(t,r)=>{if(!this.argChoices.includes(t))throw new _o(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,r):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function yo(e){let n=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+n+">":"["+n+"]"}zn.Argument=Gn;zn.humanReadableArgName=yo});var Jn=k(Yt=>{var{humanReadableArgName:Ao}=on(),Kn=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(n){let t=n.commands.filter(i=>!i._hidden),r=n._getHelpCommand();return r&&!r._hidden&&t.push(r),this.sortSubcommands&&t.sort((i,o)=>i.name().localeCompare(o.name())),t}compareOptions(n,t){let r=i=>i.short?i.short.replace(/^-/,""):i.long.replace(/^--/,"");return r(n).localeCompare(r(t))}visibleOptions(n){let t=n.options.filter(i=>!i.hidden),r=n._getHelpOption();if(r&&!r.hidden){let i=r.short&&n._findOption(r.short),o=r.long&&n._findOption(r.long);!i&&!o?t.push(r):r.long&&!o?t.push(n.createOption(r.long,r.description)):r.short&&!i&&t.push(n.createOption(r.short,r.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(n){if(!this.showGlobalOptions)return[];let t=[];for(let r=n.parent;r;r=r.parent){let i=r.options.filter(o=>!o.hidden);t.push(...i)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(n){return n._argsDescription&&n.registeredArguments.forEach(t=>{t.description=t.description||n._argsDescription[t.name()]||""}),n.registeredArguments.find(t=>t.description)?n.registeredArguments:[]}subcommandTerm(n){let t=n.registeredArguments.map(r=>Ao(r)).join(" ");return n._name+(n._aliases[0]?"|"+n._aliases[0]:"")+(n.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(n){return n.flags}argumentTerm(n){return n.name()}longestSubcommandTermLength(n,t){return t.visibleCommands(n).reduce((r,i)=>Math.max(r,t.subcommandTerm(i).length),0)}longestOptionTermLength(n,t){return t.visibleOptions(n).reduce((r,i)=>Math.max(r,t.optionTerm(i).length),0)}longestGlobalOptionTermLength(n,t){return t.visibleGlobalOptions(n).reduce((r,i)=>Math.max(r,t.optionTerm(i).length),0)}longestArgumentTermLength(n,t){return t.visibleArguments(n).reduce((r,i)=>Math.max(r,t.argumentTerm(i).length),0)}commandUsage(n){let t=n._name;n._aliases[0]&&(t=t+"|"+n._aliases[0]);let r="";for(let i=n.parent;i;i=i.parent)r=i.name()+" "+r;return r+t+" "+n.usage()}commandDescription(n){return n.description()}subcommandDescription(n){return n.summary()||n.description()}optionDescription(n){let t=[];return n.argChoices&&t.push(`choices: ${n.argChoices.map(r=>JSON.stringify(r)).join(", ")}`),n.defaultValue!==void 0&&(n.required||n.optional||n.isBoolean()&&typeof n.defaultValue=="boolean")&&t.push(`default: ${n.defaultValueDescription||JSON.stringify(n.defaultValue)}`),n.presetArg!==void 0&&n.optional&&t.push(`preset: ${JSON.stringify(n.presetArg)}`),n.envVar!==void 0&&t.push(`env: ${n.envVar}`),t.length>0?`${n.description} (${t.join(", ")})`:n.description}argumentDescription(n){let t=[];if(n.argChoices&&t.push(`choices: ${n.argChoices.map(r=>JSON.stringify(r)).join(", ")}`),n.defaultValue!==void 0&&t.push(`default: ${n.defaultValueDescription||JSON.stringify(n.defaultValue)}`),t.length>0){let r=`(${t.join(", ")})`;return n.description?`${n.description} ${r}`:r}return n.description}formatHelp(n,t){let r=t.padWidth(n,t),i=t.helpWidth||80,o=2,s=2;function a(f,h){if(h){let _=`${f.padEnd(r+s)}${h}`;return t.wrap(_,i-o,r+s)}return f}function l(f){return f.join(`
|
|
3
|
+
`).replace(/^/gm," ".repeat(o))}let c=[`Usage: ${t.commandUsage(n)}`,""],u=t.commandDescription(n);u.length>0&&(c=c.concat([t.wrap(u,i,0),""]));let p=t.visibleArguments(n).map(f=>a(t.argumentTerm(f),t.argumentDescription(f)));p.length>0&&(c=c.concat(["Arguments:",l(p),""]));let d=t.visibleOptions(n).map(f=>a(t.optionTerm(f),t.optionDescription(f)));if(d.length>0&&(c=c.concat(["Options:",l(d),""])),this.showGlobalOptions){let f=t.visibleGlobalOptions(n).map(h=>a(t.optionTerm(h),t.optionDescription(h)));f.length>0&&(c=c.concat(["Global Options:",l(f),""]))}let m=t.visibleCommands(n).map(f=>a(t.subcommandTerm(f),t.subcommandDescription(f)));return m.length>0&&(c=c.concat(["Commands:",l(m),""])),c.join(`
|
|
4
|
+
`)}padWidth(n,t){return Math.max(t.longestOptionTermLength(n,t),t.longestGlobalOptionTermLength(n,t),t.longestSubcommandTermLength(n,t),t.longestArgumentTermLength(n,t))}wrap(n,t,r,i=40){let o=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",s=new RegExp(`[\\n][${o}]+`);if(n.match(s))return n;let a=t-r;if(a<i)return n;let l=n.slice(0,r),c=n.slice(r).replace(`\r
|
|
5
5
|
`,`
|
|
6
|
-
`),
|
|
7
|
-
|.{1,${a-1}}([${
|
|
8
|
-
`?"":(
|
|
9
|
-
`)}};
|
|
10
|
-
(Did you mean one of ${
|
|
11
|
-
(Did you mean ${
|
|
12
|
-
- specify the name in Command constructor or using .name()`);return
|
|
13
|
-
Expecting one of '${
|
|
14
|
-
- already used by option '${
|
|
6
|
+
`),u=" ".repeat(r),d="\\s\u200B",m=new RegExp(`
|
|
7
|
+
|.{1,${a-1}}([${d}]|$)|[^${d}]+?([${d}]|$)`,"g"),f=c.match(m)||[];return l+f.map((h,_)=>h===`
|
|
8
|
+
`?"":(_>0?u:"")+h.trimEnd()).join(`
|
|
9
|
+
`)}};Yt.Help=Kn});var et=k(Qn=>{var{InvalidArgumentError:xo}=Be(),Xn=class{constructor(n,t){this.flags=n,this.description=t||"",this.required=n.includes("<"),this.optional=n.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(n),this.mandatory=!1;let r=wo(n);this.short=r.shortFlag,this.long=r.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(n,t){return this.defaultValue=n,this.defaultValueDescription=t,this}preset(n){return this.presetArg=n,this}conflicts(n){return this.conflictsWith=this.conflictsWith.concat(n),this}implies(n){let t=n;return typeof n=="string"&&(t={[n]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(n){return this.envVar=n,this}argParser(n){return this.parseArg=n,this}makeOptionMandatory(n=!0){return this.mandatory=!!n,this}hideHelp(n=!0){return this.hidden=!!n,this}_concatValue(n,t){return t===this.defaultValue||!Array.isArray(t)?[n]:t.concat(n)}choices(n){return this.argChoices=n.slice(),this.parseArg=(t,r)=>{if(!this.argChoices.includes(t))throw new xo(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,r):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return So(this.name().replace(/^no-/,""))}is(n){return this.short===n||this.long===n}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Zn=class{constructor(n){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,n.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,r)=>{this.positiveOptions.has(r)&&this.dualOptions.add(r)})}valueFromOption(n,t){let r=t.attributeName();if(!this.dualOptions.has(r))return!0;let i=this.negativeOptions.get(r).presetArg,o=i!==void 0?i:!1;return t.negate===(o===n)}};function So(e){return e.split("-").reduce((n,t)=>n+t[0].toUpperCase()+t.slice(1))}function wo(e){let n,t,r=e.split(/[ |,]+/);return r.length>1&&!/^[[<]/.test(r[1])&&(n=r.shift()),t=r.shift(),!n&&/^-[^-]$/.test(t)&&(n=t,t=void 0),{shortFlag:n,longFlag:t}}Qn.Option=Xn;Qn.DualOptions=Zn});var zt=k(Gt=>{function Eo(e,n){if(Math.abs(e.length-n.length)>3)return Math.max(e.length,n.length);let t=[];for(let r=0;r<=e.length;r++)t[r]=[r];for(let r=0;r<=n.length;r++)t[0][r]=r;for(let r=1;r<=n.length;r++)for(let i=1;i<=e.length;i++){let o=1;e[i-1]===n[r-1]?o=0:o=1,t[i][r]=Math.min(t[i-1][r]+1,t[i][r-1]+1,t[i-1][r-1]+o),i>1&&r>1&&e[i-1]===n[r-2]&&e[i-2]===n[r-1]&&(t[i][r]=Math.min(t[i][r],t[i-2][r-2]+1))}return t[e.length][n.length]}function bo(e,n){if(!n||n.length===0)return"";n=Array.from(new Set(n));let t=e.startsWith("--");t&&(e=e.slice(2),n=n.map(s=>s.slice(2)));let r=[],i=3,o=.4;return n.forEach(s=>{if(s.length<=1)return;let a=Eo(e,s),l=Math.max(e.length,s.length);(l-a)/l>o&&(a<i?(i=a,r=[s]):a===i&&r.push(s))}),r.sort((s,a)=>s.localeCompare(a)),t&&(r=r.map(s=>`--${s}`)),r.length>1?`
|
|
10
|
+
(Did you mean one of ${r.join(", ")}?)`:r.length===1?`
|
|
11
|
+
(Did you mean ${r[0]}?)`:""}Gt.suggestSimilar=bo});var Qt=k(Zt=>{var Co=require("node:events").EventEmitter,nt=require("node:child_process"),re=require("node:path"),tt=require("node:fs"),w=require("node:process"),{Argument:Oo,humanReadableArgName:Po}=on(),{CommanderError:rt}=Be(),{Help:ko}=Jn(),{Option:Kt,DualOptions:Io}=et(),{suggestSimilar:Jt}=zt(),it=class e extends Co{constructor(n){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=n||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>w.stdout.write(t),writeErr:t=>w.stderr.write(t),getOutHelpWidth:()=>w.stdout.isTTY?w.stdout.columns:void 0,getErrHelpWidth:()=>w.stderr.isTTY?w.stderr.columns:void 0,outputError:(t,r)=>r(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(n){return this._outputConfiguration=n._outputConfiguration,this._helpOption=n._helpOption,this._helpCommand=n._helpCommand,this._helpConfiguration=n._helpConfiguration,this._exitCallback=n._exitCallback,this._storeOptionsAsProperties=n._storeOptionsAsProperties,this._combineFlagAndOptionalValue=n._combineFlagAndOptionalValue,this._allowExcessArguments=n._allowExcessArguments,this._enablePositionalOptions=n._enablePositionalOptions,this._showHelpAfterError=n._showHelpAfterError,this._showSuggestionAfterError=n._showSuggestionAfterError,this}_getCommandAndAncestors(){let n=[];for(let t=this;t;t=t.parent)n.push(t);return n}command(n,t,r){let i=t,o=r;typeof i=="object"&&i!==null&&(o=i,i=null),o=o||{};let[,s,a]=n.match(/([^ ]+) *(.*)/),l=this.createCommand(s);return i&&(l.description(i),l._executableHandler=!0),o.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(o.noHelp||o.hidden),l._executableFile=o.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),i?this:l}createCommand(n){return new e(n)}createHelp(){return Object.assign(new ko,this.configureHelp())}configureHelp(n){return n===void 0?this._helpConfiguration:(this._helpConfiguration=n,this)}configureOutput(n){return n===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,n),this)}showHelpAfterError(n=!0){return typeof n!="string"&&(n=!!n),this._showHelpAfterError=n,this}showSuggestionAfterError(n=!0){return this._showSuggestionAfterError=!!n,this}addCommand(n,t){if(!n._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
12
|
+
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=n._name),(t.noHelp||t.hidden)&&(n._hidden=!0),this._registerCommand(n),n.parent=this,n._checkForBrokenPassThrough(),this}createArgument(n,t){return new Oo(n,t)}argument(n,t,r,i){let o=this.createArgument(n,t);return typeof r=="function"?o.default(i).argParser(r):o.default(r),this.addArgument(o),this}arguments(n){return n.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(n){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(n.required&&n.defaultValue!==void 0&&n.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${n.name()}'`);return this.registeredArguments.push(n),this}helpCommand(n,t){if(typeof n=="boolean")return this._addImplicitHelpCommand=n,this;n=n??"help [command]";let[,r,i]=n.match(/([^ ]+) *(.*)/),o=t??"display help for command",s=this.createCommand(r);return s.helpOption(!1),i&&s.arguments(i),o&&s.description(o),this._addImplicitHelpCommand=!0,this._helpCommand=s,this}addHelpCommand(n,t){return typeof n!="object"?(this.helpCommand(n,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=n,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(n,t){let r=["preSubcommand","preAction","postAction"];if(!r.includes(n))throw new Error(`Unexpected value for event passed to hook : '${n}'.
|
|
13
|
+
Expecting one of '${r.join("', '")}'`);return this._lifeCycleHooks[n]?this._lifeCycleHooks[n].push(t):this._lifeCycleHooks[n]=[t],this}exitOverride(n){return n?this._exitCallback=n:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(n,t,r){this._exitCallback&&this._exitCallback(new rt(n,t,r)),w.exit(n)}action(n){let t=r=>{let i=this.registeredArguments.length,o=r.slice(0,i);return this._storeOptionsAsProperties?o[i]=this:o[i]=this.opts(),o.push(this),n.apply(this,o)};return this._actionHandler=t,this}createOption(n,t){return new Kt(n,t)}_callParseArg(n,t,r,i){try{return n.parseArg(t,r)}catch(o){if(o.code==="commander.invalidArgument"){let s=`${i} ${o.message}`;this.error(s,{exitCode:o.exitCode,code:o.code})}throw o}}_registerOption(n){let t=n.short&&this._findOption(n.short)||n.long&&this._findOption(n.long);if(t){let r=n.long&&this._findOption(n.long)?n.long:n.short;throw new Error(`Cannot add option '${n.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${r}'
|
|
14
|
+
- already used by option '${t.flags}'`)}this.options.push(n)}_registerCommand(n){let t=i=>[i.name()].concat(i.aliases()),r=t(n).find(i=>this._findCommand(i));if(r){let i=t(this._findCommand(r)).join("|"),o=t(n).join("|");throw new Error(`cannot add command '${o}' as already have command '${i}'`)}this.commands.push(n)}addOption(n){this._registerOption(n);let t=n.name(),r=n.attributeName();if(n.negate){let o=n.long.replace(/^--no-/,"--");this._findOption(o)||this.setOptionValueWithSource(r,n.defaultValue===void 0?!0:n.defaultValue,"default")}else n.defaultValue!==void 0&&this.setOptionValueWithSource(r,n.defaultValue,"default");let i=(o,s,a)=>{o==null&&n.presetArg!==void 0&&(o=n.presetArg);let l=this.getOptionValue(r);o!==null&&n.parseArg?o=this._callParseArg(n,o,l,s):o!==null&&n.variadic&&(o=n._concatValue(o,l)),o==null&&(n.negate?o=!1:n.isBoolean()||n.optional?o=!0:o=""),this.setOptionValueWithSource(r,o,a)};return this.on("option:"+t,o=>{let s=`error: option '${n.flags}' argument '${o}' is invalid.`;i(o,s,"cli")}),n.envVar&&this.on("optionEnv:"+t,o=>{let s=`error: option '${n.flags}' value '${o}' from env '${n.envVar}' is invalid.`;i(o,s,"env")}),this}_optionEx(n,t,r,i,o){if(typeof t=="object"&&t instanceof Kt)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(t,r);if(s.makeOptionMandatory(!!n.mandatory),typeof i=="function")s.default(o).argParser(i);else if(i instanceof RegExp){let a=i;i=(l,c)=>{let u=a.exec(l);return u?u[0]:c},s.default(o).argParser(i)}else s.default(i);return this.addOption(s)}option(n,t,r,i){return this._optionEx({},n,t,r,i)}requiredOption(n,t,r,i){return this._optionEx({mandatory:!0},n,t,r,i)}combineFlagAndOptionalValue(n=!0){return this._combineFlagAndOptionalValue=!!n,this}allowUnknownOption(n=!0){return this._allowUnknownOption=!!n,this}allowExcessArguments(n=!0){return this._allowExcessArguments=!!n,this}enablePositionalOptions(n=!0){return this._enablePositionalOptions=!!n,this}passThroughOptions(n=!0){return this._passThroughOptions=!!n,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(n=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!n,this}getOptionValue(n){return this._storeOptionsAsProperties?this[n]:this._optionValues[n]}setOptionValue(n,t){return this.setOptionValueWithSource(n,t,void 0)}setOptionValueWithSource(n,t,r){return this._storeOptionsAsProperties?this[n]=t:this._optionValues[n]=t,this._optionValueSources[n]=r,this}getOptionValueSource(n){return this._optionValueSources[n]}getOptionValueSourceWithGlobals(n){let t;return this._getCommandAndAncestors().forEach(r=>{r.getOptionValueSource(n)!==void 0&&(t=r.getOptionValueSource(n))}),t}_prepareUserArgs(n,t){if(n!==void 0&&!Array.isArray(n))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},n===void 0&&t.from===void 0){w.versions?.electron&&(t.from="electron");let i=w.execArgv??[];(i.includes("-e")||i.includes("--eval")||i.includes("-p")||i.includes("--print"))&&(t.from="eval")}n===void 0&&(n=w.argv),this.rawArgs=n.slice();let r;switch(t.from){case void 0:case"node":this._scriptPath=n[1],r=n.slice(2);break;case"electron":w.defaultApp?(this._scriptPath=n[1],r=n.slice(2)):r=n.slice(1);break;case"user":r=n.slice(0);break;case"eval":r=n.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",r}parse(n,t){let r=this._prepareUserArgs(n,t);return this._parseCommand([],r),this}async parseAsync(n,t){let r=this._prepareUserArgs(n,t);return await this._parseCommand([],r),this}_executeSubCommand(n,t){t=t.slice();let r=!1,i=[".js",".ts",".tsx",".mjs",".cjs"];function o(u,p){let d=re.resolve(u,p);if(tt.existsSync(d))return d;if(i.includes(re.extname(p)))return;let m=i.find(f=>tt.existsSync(`${d}${f}`));if(m)return`${d}${m}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=n._executableFile||`${this._name}-${n._name}`,a=this._executableDir||"";if(this._scriptPath){let u;try{u=tt.realpathSync(this._scriptPath)}catch{u=this._scriptPath}a=re.resolve(re.dirname(u),a)}if(a){let u=o(a,s);if(!u&&!n._executableFile&&this._scriptPath){let p=re.basename(this._scriptPath,re.extname(this._scriptPath));p!==this._name&&(u=o(a,`${p}-${n._name}`))}s=u||s}r=i.includes(re.extname(s));let l;w.platform!=="win32"?r?(t.unshift(s),t=Xt(w.execArgv).concat(t),l=nt.spawn(w.argv[0],t,{stdio:"inherit"})):l=nt.spawn(s,t,{stdio:"inherit"}):(t.unshift(s),t=Xt(w.execArgv).concat(t),l=nt.spawn(w.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{w.on(p,()=>{l.killed===!1&&l.exitCode===null&&l.kill(p)})});let c=this._exitCallback;l.on("close",u=>{u=u??1,c?c(new rt(u,"commander.executeSubCommandAsync","(close)")):w.exit(u)}),l.on("error",u=>{if(u.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",d=`'${s}' does not exist
|
|
15
15
|
- if '${n._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
16
16
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
17
|
-
- ${p}`;throw new Error(
|
|
17
|
+
- ${p}`;throw new Error(d)}else if(u.code==="EACCES")throw new Error(`'${s}' not executable`);if(!c)w.exit(1);else{let p=new rt(1,"commander.executeSubCommandAsync","(error)");p.nestedError=u,c(p)}}),this.runningCommand=l}_dispatchSubcommand(n,t,r){let i=this._findCommand(n);i||this.help({error:!0});let o;return o=this._chainOrCallSubCommandHook(o,i,"preSubcommand"),o=this._chainOrCall(o,()=>{if(i._executableHandler)this._executeSubCommand(i,t.concat(r));else return i._parseCommand(t,r)}),o}_dispatchHelpCommand(n){n||this.help();let t=this._findCommand(n);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(n,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((n,t)=>{n.required&&this.args[t]==null&&this.missingArgument(n.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let n=(r,i,o)=>{let s=i;if(i!==null&&r.parseArg){let a=`error: command-argument value '${i}' is invalid for argument '${r.name()}'.`;s=this._callParseArg(r,i,o,a)}return s};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((r,i)=>{let o=r.defaultValue;r.variadic?i<this.args.length?(o=this.args.slice(i),r.parseArg&&(o=o.reduce((s,a)=>n(r,a,s),r.defaultValue))):o===void 0&&(o=[]):i<this.args.length&&(o=this.args[i],r.parseArg&&(o=n(r,o,r.defaultValue))),t[i]=o}),this.processedArgs=t}_chainOrCall(n,t){return n&&n.then&&typeof n.then=="function"?n.then(()=>t()):t()}_chainOrCallHooks(n,t){let r=n,i=[];return this._getCommandAndAncestors().reverse().filter(o=>o._lifeCycleHooks[t]!==void 0).forEach(o=>{o._lifeCycleHooks[t].forEach(s=>{i.push({hookedCommand:o,callback:s})})}),t==="postAction"&&i.reverse(),i.forEach(o=>{r=this._chainOrCall(r,()=>o.callback(o.hookedCommand,this))}),r}_chainOrCallSubCommandHook(n,t,r){let i=n;return this._lifeCycleHooks[r]!==void 0&&this._lifeCycleHooks[r].forEach(o=>{i=this._chainOrCall(i,()=>o(this,t))}),i}_parseCommand(n,t){let r=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),n=n.concat(r.operands),t=r.unknown,this.args=n.concat(t),n&&this._findCommand(n[0]))return this._dispatchSubcommand(n[0],n.slice(1),t);if(this._getHelpCommand()&&n[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(n[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,n,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(r.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=()=>{r.unknown.length>0&&this.unknownOption(r.unknown[0])},o=`command:${this.name()}`;if(this._actionHandler){i(),this._processArguments();let s;return s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent&&(s=this._chainOrCall(s,()=>{this.parent.emit(o,n,t)})),s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent&&this.parent.listenerCount(o))i(),this._processArguments(),this.parent.emit(o,n,t);else if(n.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",n,t);this.listenerCount("command:*")?this.emit("command:*",n,t):this.commands.length?this.unknownCommand():(i(),this._processArguments())}else this.commands.length?(i(),this.help({error:!0})):(i(),this._processArguments())}_findCommand(n){if(n)return this.commands.find(t=>t._name===n||t._aliases.includes(n))}_findOption(n){return this.options.find(t=>t.is(n))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(n=>{n.options.forEach(t=>{t.mandatory&&n.getOptionValue(t.attributeName())===void 0&&n.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let n=this.options.filter(r=>{let i=r.attributeName();return this.getOptionValue(i)===void 0?!1:this.getOptionValueSource(i)!=="default"});n.filter(r=>r.conflictsWith.length>0).forEach(r=>{let i=n.find(o=>r.conflictsWith.includes(o.attributeName()));i&&this._conflictingOption(r,i)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(n=>{n._checkForConflictingLocalOptions()})}parseOptions(n){let t=[],r=[],i=t,o=n.slice();function s(l){return l.length>1&&l[0]==="-"}let a=null;for(;o.length;){let l=o.shift();if(l==="--"){i===r&&i.push(l),i.push(...o);break}if(a&&!s(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,s(l)){let c=this._findOption(l);if(c){if(c.required){let u=o.shift();u===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,u)}else if(c.optional){let u=null;o.length>0&&!s(o[0])&&(u=o.shift()),this.emit(`option:${c.name()}`,u)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),o.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),u=this._findOption(l.slice(0,c));if(u&&(u.required||u.optional)){this.emit(`option:${u.name()}`,l.slice(c+1));continue}}if(s(l)&&(i=r),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&r.length===0){if(this._findCommand(l)){t.push(l),o.length>0&&r.push(...o);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l),o.length>0&&t.push(...o);break}else if(this._defaultCommandName){r.push(l),o.length>0&&r.push(...o);break}}if(this._passThroughOptions){i.push(l),o.length>0&&i.push(...o);break}i.push(l)}return{operands:t,unknown:r}}opts(){if(this._storeOptionsAsProperties){let n={},t=this.options.length;for(let r=0;r<t;r++){let i=this.options[r].attributeName();n[i]=i===this._versionOptionName?this._version:this[i]}return n}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((n,t)=>Object.assign(n,t.opts()),{})}error(n,t){this._outputConfiguration.outputError(`${n}
|
|
18
18
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
19
19
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
20
|
-
`),this.outputHelp({error:!0}));let t
|
|
21
|
-
`),this._exit(0,"commander.version",n)}),this}description(n,
|
|
22
|
-
Expecting one of '${
|
|
23
|
-
`)}),this}_outputHelpIfRequested(n){let i=this._getHelpOption();i&&n.find(r=>i.is(r))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Oi(e){return e.map(n=>{if(!n.startsWith("--inspect"))return n;let i,t="127.0.0.1",r="9229",o;return(o=n.match(/^(--inspect(-brk)?)$/))!==null?i=o[1]:(o=n.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(i=o[1],/^\d+$/.test(o[3])?r=o[3]:t=o[3]):(o=n.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(i=o[1],t=o[3],r=o[4]),i&&r!=="0"?`${i}=${t}:${parseInt(r)+1}`:n})}ki.Command=Tn});var Fi=Q(H=>{var{Argument:Pi}=Ue(),{Command:Fn}=$i(),{CommanderError:Rr,InvalidArgumentError:Ii}=$e(),{Help:Vr}=wn(),{Option:Ti}=kn();H.program=new Fn;H.createCommand=e=>new Fn(e);H.createOption=(e,n)=>new Ti(e,n);H.createArgument=(e,n)=>new Pi(e,n);H.Command=Fn;H.Option=Ti;H.Argument=Pi;H.Help=Vr;H.CommanderError=Rr;H.InvalidArgumentError=Ii;H.InvalidOptionArgumentError=Ii});var K=Q(ee=>{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.WS_EVENTS=ee.RUN_EVENT_SCHEMA_VERSION=ee.RunnerStage=void 0;ee.RunnerStage={Auth:"Auth",EnvPreAction:"EnvPreAction",VersionCheck:"VersionCheck",SolutionPack:"SolutionPack",SolutionCheck:"SolutionCheck",PreAction:"PreAction",Import:"Import",Upgrade:"Upgrade",DataImport:"DataImport",FlowActivation:"FlowActivation",PostAction:"PostAction",Cleanup:"Cleanup",EnvPostAction:"EnvPostAction"};ee.RUN_EVENT_SCHEMA_VERSION=1;ee.WS_EVENTS={TERMINAL_OUTPUT:"terminal:output",TERMINAL_INPUT:"terminal:input",TERMINAL_RESIZE:"terminal:resize",TERMINAL_START:"terminal:start",TERMINAL_DONE:"terminal:done",TERMINAL_ERROR:"terminal:error",TERMINAL_ATTACH:"terminal:attach",TERMINAL_KILL:"terminal:kill",RUNNER_EVENT:"runner:event",IDLE_WARNING:"idle:warning",IDLE_CANCELLED:"idle:cancelled"}});var Ni=S(Fi(),1),{program:Ma,createCommand:ja,createArgument:Ha,createOption:Ua,CommanderError:Ba,InvalidArgumentError:qa,InvalidOptionArgumentError:Wa,Command:le,Argument:Ya,Option:za,Help:Ga}=Ni.default;var M=S(require("path")),I=S(require("fs")),_i=S(require("os"));var Di=S(require("fs")),Li=S(K()),Ln=!1,Nn=process.env.PPDEVOPS_EVENTS_FILE||"";function ce(){return Ln}function Ri(){return!Ln||!!Nn}function j(e){Ri()&&console.log(e)}function Be(e){Ri()&&console.error(e)}var re="~run",Mr="~env",W=null,J=null,ue=null;function Vi(){return W??Mr}function jr(){return W??re}function Rn(e){return`${Vi()}::${e}`}function Mi(e,n){return`${Vi()}::${e}::${n}`}function qe(e){Ln=e}function ji(e){if(Nn)try{Di.appendFileSync(Nn,e+`
|
|
20
|
+
`),this.outputHelp({error:!0}));let r=t||{},i=r.exitCode||1,o=r.code||"commander.error";this._exit(i,o,n)}_parseOptionsEnv(){this.options.forEach(n=>{if(n.envVar&&n.envVar in w.env){let t=n.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(n.required||n.optional?this.emit(`optionEnv:${n.name()}`,w.env[n.envVar]):this.emit(`optionEnv:${n.name()}`))}})}_parseOptionsImplied(){let n=new Io(this.options),t=r=>this.getOptionValue(r)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(r));this.options.filter(r=>r.implied!==void 0&&t(r.attributeName())&&n.valueFromOption(this.getOptionValue(r.attributeName()),r)).forEach(r=>{Object.keys(r.implied).filter(i=>!t(i)).forEach(i=>{this.setOptionValueWithSource(i,r.implied[i],"implied")})})}missingArgument(n){let t=`error: missing required argument '${n}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(n){let t=`error: option '${n.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(n){let t=`error: required option '${n.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(n,t){let r=s=>{let a=s.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),u=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:u||s},i=s=>{let a=r(s),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},o=`error: ${i(n)} cannot be used with ${i(t)}`;this.error(o,{code:"commander.conflictingOption"})}unknownOption(n){if(this._allowUnknownOption)return;let t="";if(n.startsWith("--")&&this._showSuggestionAfterError){let i=[],o=this;do{let s=o.createHelp().visibleOptions(o).filter(a=>a.long).map(a=>a.long);i=i.concat(s),o=o.parent}while(o&&!o._enablePositionalOptions);t=Jt(n,i)}let r=`error: unknown option '${n}'${t}`;this.error(r,{code:"commander.unknownOption"})}_excessArguments(n){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,r=t===1?"":"s",o=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${r} but got ${n.length}.`;this.error(o,{code:"commander.excessArguments"})}unknownCommand(){let n=this.args[0],t="";if(this._showSuggestionAfterError){let i=[];this.createHelp().visibleCommands(this).forEach(o=>{i.push(o.name()),o.alias()&&i.push(o.alias())}),t=Jt(n,i)}let r=`error: unknown command '${n}'${t}`;this.error(r,{code:"commander.unknownCommand"})}version(n,t,r){if(n===void 0)return this._version;this._version=n,t=t||"-V, --version",r=r||"output the version number";let i=this.createOption(t,r);return this._versionOptionName=i.attributeName(),this._registerOption(i),this.on("option:"+i.name(),()=>{this._outputConfiguration.writeOut(`${n}
|
|
21
|
+
`),this._exit(0,"commander.version",n)}),this}description(n,t){return n===void 0&&t===void 0?this._description:(this._description=n,t&&(this._argsDescription=t),this)}summary(n){return n===void 0?this._summary:(this._summary=n,this)}alias(n){if(n===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),n===t._name)throw new Error("Command alias can't be the same as its name");let r=this.parent?._findCommand(n);if(r){let i=[r.name()].concat(r.aliases()).join("|");throw new Error(`cannot add alias '${n}' to command '${this.name()}' as already have command '${i}'`)}return t._aliases.push(n),this}aliases(n){return n===void 0?this._aliases:(n.forEach(t=>this.alias(t)),this)}usage(n){if(n===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(r=>Po(r));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=n,this}name(n){return n===void 0?this._name:(this._name=n,this)}nameFromFilename(n){return this._name=re.basename(n,re.extname(n)),this}executableDir(n){return n===void 0?this._executableDir:(this._executableDir=n,this)}helpInformation(n){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=n&&n.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(n){n=n||{};let t={error:!!n.error},r;return t.error?r=i=>this._outputConfiguration.writeErr(i):r=i=>this._outputConfiguration.writeOut(i),t.write=n.write||r,t.command=this,t}outputHelp(n){let t;typeof n=="function"&&(t=n,n=void 0);let r=this._getHelpContext(n);this._getCommandAndAncestors().reverse().forEach(o=>o.emit("beforeAllHelp",r)),this.emit("beforeHelp",r);let i=this.helpInformation(r);if(t&&(i=t(i),typeof i!="string"&&!Buffer.isBuffer(i)))throw new Error("outputHelp callback must return a string or a Buffer");r.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",r),this._getCommandAndAncestors().forEach(o=>o.emit("afterAllHelp",r))}helpOption(n,t){return typeof n=="boolean"?(n?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(n=n??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(n,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(n){return this._helpOption=n,this}help(n){this.outputHelp(n);let t=w.exitCode||0;t===0&&n&&typeof n!="function"&&n.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(n,t){let r=["beforeAll","before","after","afterAll"];if(!r.includes(n))throw new Error(`Unexpected value for position to addHelpText.
|
|
22
|
+
Expecting one of '${r.join("', '")}'`);let i=`${n}Help`;return this.on(i,o=>{let s;typeof t=="function"?s=t({error:o.error,command:o.command}):s=t,s&&o.write(`${s}
|
|
23
|
+
`)}),this}_outputHelpIfRequested(n){let t=this._getHelpOption();t&&n.find(i=>t.is(i))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Xt(e){return e.map(n=>{if(!n.startsWith("--inspect"))return n;let t,r="127.0.0.1",i="9229",o;return(o=n.match(/^(--inspect(-brk)?)$/))!==null?t=o[1]:(o=n.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=o[1],/^\d+$/.test(o[3])?i=o[3]:r=o[3]):(o=n.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=o[1],r=o[3],i=o[4]),t&&i!=="0"?`${t}=${r}:${parseInt(i)+1}`:n})}Zt.Command=it});var rr=k(U=>{var{Argument:er}=on(),{Command:ot}=Qt(),{CommanderError:$o,InvalidArgumentError:nr}=Be(),{Help:No}=Jn(),{Option:tr}=et();U.program=new ot;U.createCommand=e=>new ot(e);U.createOption=(e,n)=>new tr(e,n);U.createArgument=(e,n)=>new er(e,n);U.Command=ot;U.Option=tr;U.Argument=er;U.Help=No;U.CommanderError=$o;U.InvalidArgumentError=nr;U.InvalidOptionArgumentError=nr});var st=k(sn=>{"use strict";Object.defineProperty(sn,"__esModule",{value:!0});sn.PLAN_SCHEMA_VERSION=void 0;sn.PLAN_SCHEMA_VERSION=2});var lt=k(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.isScriptRef=O.isTrue=void 0;O.compareVersions=at;O.versionGte=Fo;O.decideAction=Vo;O.decideDeployData=Ro;O.decideFlows=Lo;O.resolveImportMode=Mo;var To=e=>e===!0||String(e).toLowerCase()==="true";O.isTrue=To;var Do=e=>!!e&&e.toLowerCase()!=="false"&&e.toLowerCase()!=="true"&&e.trim()!=="";O.isScriptRef=Do;function or(e){return e.split(".").map(n=>parseInt(n,10)||0)}function at(e,n){let t=or(e),r=or(n);for(let i=0;i<Math.max(t.length,r.length);i++){let o=t[i]??0,s=r[i]??0;if(o>s)return 1;if(o<s)return-1}return 0}function Fo(e,n){return at(e,n)>=0}function Vo(e,n){let t=e===null,r=n&&!t?at(e,n):null,i=r!==null&&r>=0,o=r===1;return{action:i?"skip":t?"install":"upgrade",reason:i?o?"env-ahead":"up-to-date":void 0,skip:i,isFirstDeploy:t,installedIsNewer:o}}function Ro(e,n){return(0,O.isTrue)(e.DeployData)?(0,O.isTrue)(e.AlwaysDeployData)?{enabled:!0,reason:"always"}:n?{enabled:!0,reason:"first-deploy"}:{enabled:!1,reason:"not-first-deploy"}:{enabled:!1,reason:"not-configured"}}function Lo(e,n){return!e||!(0,O.isTrue)(e.ActivateFlows)?{enabled:!1,reason:"not-configured"}:n?{enabled:!0,reason:"deploying"}:(0,O.isTrue)(e.AlwaysTryActivate)?{enabled:!0,reason:"always"}:{enabled:!1,reason:"always-not-set"}}function Mo(e){return(0,O.isTrue)(e.StageForUpgrade)?"holding-then-upgrade":(0,O.isTrue)(e.DeployAsHolding)?"stage-and-upgrade":"import"}});var pt=k(Se=>{"use strict";Object.defineProperty(Se,"__esModule",{value:!0});Se.comparable=an;Se.fingerprint=Ho;Se.validatePlan=Uo;Se.renderValidationText=qo;var ut=e=>e.map(n=>({id:n.id,enabled:n.enabled}));function an(e){return{schemaVersion:e.schemaVersion,environmentUrl:e.environment.url,run:ut([...e.run.before,...e.run.after]),solutions:e.solutions.map(n=>({name:n.name,action:n.action,installedVersion:n.installedVersion,localVersion:n.localVersion,deploymentType:n.deploymentType,importMode:n.importMode,data:n.data.enabled,flows:n.flows.enabled,steps:ut(n.steps),patches:n.patches.map(t=>({name:t.name,action:t.action,installedVersion:t.installedVersion,localVersion:t.localVersion,steps:ut(t.steps)}))}))}}function jo(e){let n=BigInt("0xcbf29ce484222325"),t=BigInt("0x100000001b3"),r=BigInt("0xffffffffffffffff");for(let i=0;i<e.length;i++)n^=BigInt(e.charCodeAt(i)),n=n*t&r;return n.toString(16).padStart(16,"0")}function Ho(e){return jo(JSON.stringify(an(e)))}var T=e=>e==null?"\u2014":String(e);function ct(e,n,t,r){let i=new Map(t.map(s=>[s.id,s])),o=new Set(n.map(s=>s.id));for(let s of n){let a=i.get(s.id);a?a.enabled!==s.enabled&&r.push({code:"step-enabled",unit:e,stepId:s.id,submitted:String(s.enabled),fresh:String(a.enabled),message:`${e}: step ${s.id} is now ${a.enabled?"enabled":"disabled"}`}):r.push({code:"step-removed",unit:e,stepId:s.id,submitted:"present",fresh:"absent",message:`${e}: step no longer planned \u2014 ${s.id}`})}for(let s of t)o.has(s.id)||r.push({code:"step-added",unit:e,stepId:s.id,submitted:"absent",fresh:"present",message:`${e}: new step would run \u2014 ${s.id}`})}function Uo(e,n){let t=[],r=an(e),i=an(n),o=()=>({ok:t.length===0,drifts:t,submittedFingerprint:e.fingerprint,freshFingerprint:n.fingerprint,submittedGeneratedAt:e.generatedAt});if(r.schemaVersion!==i.schemaVersion)return t.push({code:"schema-version",submitted:T(r.schemaVersion),fresh:T(i.schemaVersion),message:`Plan schema ${r.schemaVersion} cannot be checked by this CLI (expects ${i.schemaVersion}). Re-run \`ppdevops plan\`.`}),o();if(r.environmentUrl!==i.environmentUrl)return t.push({code:"environment-url",submitted:r.environmentUrl,fresh:i.environmentUrl,message:`Plan targets ${r.environmentUrl} but this deploy targets ${i.environmentUrl}.`}),o();if(JSON.stringify(r)===JSON.stringify(i))return o();ct("~env",r.run,i.run,t);let s=new Map(i.solutions.map(u=>[u.name,u])),a=new Set(r.solutions.map(u=>u.name));for(let u of r.solutions){let p=s.get(u.name);if(!p){t.push({code:"solution-removed",unit:u.name,submitted:"planned",fresh:"absent",message:`${u.name}: no longer targets this environment.`});continue}u.installedVersion!==p.installedVersion&&t.push({code:"installed-version",unit:u.name,submitted:T(u.installedVersion),fresh:T(p.installedVersion),message:`${u.name}: installed version changed ${T(u.installedVersion)} \u2192 ${T(p.installedVersion)} (someone deployed since the plan)`}),u.localVersion!==p.localVersion&&t.push({code:"local-version",unit:u.name,submitted:T(u.localVersion),fresh:T(p.localVersion),message:`${u.name}: local version changed ${T(u.localVersion)} \u2192 ${T(p.localVersion)} (the branch moved since the plan)`}),u.action!==p.action&&t.push({code:"action",unit:u.name,submitted:u.action,fresh:p.action,message:`${u.name}: would now ${p.action} instead of ${u.action}`}),u.deploymentType!==p.deploymentType&&t.push({code:"deployment-type",unit:u.name,submitted:u.deploymentType,fresh:p.deploymentType,message:`${u.name}: deployment type changed ${u.deploymentType} \u2192 ${p.deploymentType}`}),u.importMode!==p.importMode&&t.push({code:"import-mode",unit:u.name,submitted:u.importMode,fresh:p.importMode,message:`${u.name}: import mode changed ${u.importMode} \u2192 ${p.importMode}`}),u.data!==p.data&&t.push({code:"data",unit:u.name,submitted:String(u.data),fresh:String(p.data),message:`${u.name}: reference data would ${p.data?"now":"no longer"} be imported`}),u.flows!==p.flows&&t.push({code:"flows",unit:u.name,submitted:String(u.flows),fresh:String(p.flows),message:`${u.name}: flows would ${p.flows?"now":"no longer"} be activated`}),ct(u.name,u.steps,p.steps,t);let d=new Map(p.patches.map(m=>[m.name,m]));for(let m of u.patches){let f=d.get(m.name);if(!f){t.push({code:"patch-removed",unit:m.name,submitted:"planned",fresh:"absent",message:`${m.name}: patch no longer in ${u.name}'s manifest.`});continue}(m.installedVersion!==f.installedVersion||m.localVersion!==f.localVersion)&&t.push({code:"patch-version",unit:m.name,submitted:`${T(m.installedVersion)} \u2192 ${m.localVersion}`,fresh:`${T(f.installedVersion)} \u2192 ${f.localVersion}`,message:`${m.name}: patch versions changed (${T(m.installedVersion)} \u2192 ${m.localVersion}) to (${T(f.installedVersion)} \u2192 ${f.localVersion})`}),m.action!==f.action&&t.push({code:"patch-action",unit:m.name,submitted:m.action,fresh:f.action,message:`${m.name}: patch would now ${f.action} instead of ${m.action}`}),ct(m.name,m.steps,f.steps,t)}for(let m of p.patches)u.patches.some(f=>f.name===m.name)||t.push({code:"patch-added",unit:m.name,submitted:"absent",fresh:"planned",message:`${m.name}: new patch in ${u.name}'s manifest would deploy.`})}for(let u of i.solutions)a.has(u.name)||t.push({code:"solution-added",unit:u.name,submitted:"absent",fresh:"planned",message:`${u.name}: now targets this environment and was not in the plan.`});let l=r.solutions.map(u=>u.name).filter(u=>s.has(u)).join(","),c=i.solutions.map(u=>u.name).filter(u=>a.has(u)).join(",");return l!==c&&t.push({code:"solution-order",submitted:l,fresh:c,message:"Solution order changed since the plan."}),o()}function qo(e){return e.ok?["Plan is current."]:[`Plan expired: ${e.drifts.length} difference(s) since it was generated (${e.submittedGeneratedAt}).`,...e.drifts.map(n=>` - ${n.message}`),"Nothing was deployed. Re-run `ppdevops plan`, review, and deploy again."]}});var un=k(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.PHASE_STAGE=J.ENV_UNIT=void 0;J.resolvePlan=Qo;J.allSteps=es;var q=lt(),Bo=st(),Wo=pt();J.ENV_UNIT="~env";J.PHASE_STAGE={auth:"Auth","env-pre":"EnvPreAction","env-post":"EnvPostAction",version:"VersionCheck",check:"SolutionCheck",prepack:"PrePackAction",pack:"SolutionPack",pre:"PreAction",import:"Import",upgrade:"Upgrade",data:"DataImport",flows:"FlowActivation",post:"PostAction",cleanup:"Cleanup"};var Yo={import:void 0,"stage-and-upgrade":"stage and upgrade","holding-then-upgrade":"as holding"},Go="legacy $Conn functions require migration";function sr(e){return e.split(/[\\/]/).pop()??e}function ar(e,n){let t=e.find(r=>r.name.toLowerCase()===n.toLowerCase());return t?t.version:null}function B(e,n,t,r={}){let i=J.PHASE_STAGE[n];return{id:`${e}::${i}::${t}`,unit:e,phase:n,stage:i,name:t,type:r.type??"builtin",source:r.source??"builtin",enabled:r.enabled??!0,...r.skipReason!==void 0?{skipReason:r.skipReason}:{},...r.detail!==void 0?{detail:r.detail}:{}}}var zo={prepack:"pre-pack",pre:"pre",post:"post",cleanup:"cleanup"};function ln(e,n,t,r){if(!t)return[];let i=zo[n];switch(t.kind){case"yaml":return t.steps.map(o=>B(e,n,o.name,{type:o.type,source:"yaml",enabled:o.enabled!==!1,...o.enabled===!1?{skipReason:"disabled"}:{}}));case"script":return[B(e,n,sr(t.file),{type:"script",source:"script"})];case"parse-error":return r.push({code:"manifest-parse-error",solution:e,message:`${e}: Failed to parse ${sr(t.file)}: ${t.error} \u2014 ${i} action will be skipped.`}),[];case"missing":return r.push({code:"script-missing",solution:e,message:`${e}: Script not found: ${t.ref} \u2014 ${i} action will be skipped.`}),[]}}function lr(e,n,t){return B(e,"version","version check",{detail:`${n??"not installed"} \u2192 ${t??"\u2014"}`})}function ur(e,n){return B(e,"pack",`pack ${n.toLowerCase()}`)}function cr(e,n,t){let r=[B(e,"import",`${n.toLowerCase()} solution`,{detail:Yo[t]})];return t==="holding-then-upgrade"&&r.push(B(e,"upgrade","upgrade holding solution")),r}function Ko(e,n,t){let r=ar(e.installed,t.name),i=(0,q.decideAction)(r,t.localVersion),o=n.target.DeploymentType??"Managed",s=(0,q.resolveImportMode)(n.target),a=[lr(t.name,r,t.localVersion)];return i.skip||a.push(B(t.name,"check","source check"),ur(t.name,o),...cr(t.name,o,s)),{name:t.name,action:i.action,...i.reason?{reason:i.reason}:{},installedVersion:r,localVersion:t.localVersion,deploymentType:o,importMode:s,steps:a}}function Jo(e,n,t){let r=ar(e.installed,n.name),i=(0,q.decideAction)(r,n.localVersion),o=!i.skip;n.versionFile==="missing"?t.push({code:"no-version-file",solution:n.name,message:`No .version file found for ${n.name} \u2014 version comparison skipped.`}):n.versionFile==="unparseable"&&t.push({code:"version-file-unparseable",solution:n.name,message:`Could not parse ${n.name}.version \u2014 version comparison skipped.`});let s=n.target.DeploymentType??"Managed",a=(0,q.resolveImportMode)(n.target),l=(0,q.decideDeployData)(n.target,o?i.isFirstDeploy:!1),c=(0,q.decideFlows)(n.target.Flows,o),u=[lr(n.name,r,n.localVersion)];return o&&(u.push(B(n.name,"check","source check")),(0,q.isTrue)(n.target.PrePackAction)&&u.push(...ln(n.name,"prepack",n.prePackAction,t)),u.push(ur(n.name,s)),(0,q.isTrue)(n.target.PreAction)&&u.push(...ln(n.name,"pre",n.preAction,t)),u.push(...cr(n.name,s,a))),(0,q.isTrue)(n.target.DeployData)&&(o||l.enabled)&&u.push(B(n.name,"data","reference data",{enabled:l.enabled,...l.enabled?{}:{skipReason:"not first deploy"}})),n.target.Flows&&(0,q.isTrue)(n.target.Flows.ActivateFlows)&&(o||c.enabled)&&u.push(B(n.name,"flows","activate flows",{enabled:c.enabled,...c.enabled?{}:{skipReason:"AlwaysTryActivate not set"}})),o&&((0,q.isTrue)(n.target.PostAction)&&u.push(...ln(n.name,"post",n.postAction,t)),(0,q.isScriptRef)(n.target.CleanupAction)&&u.push(...ln(n.name,"cleanup",n.cleanupAction,t))),{name:n.name,action:i.action,...i.reason?{reason:i.reason}:{},installedIsNewer:i.installedIsNewer,isFirstDeploy:i.isFirstDeploy,installedVersion:r,localVersion:n.localVersion,deploymentType:s,importMode:a,data:l,flows:c,steps:u,patches:n.patches.map(p=>Ko(e,n,p))}}function Xo(e){let n=(t,r)=>(r??[]).map(i=>B(J.ENV_UNIT,t,i,{type:"powershell",source:"script",enabled:!1,skipReason:Go}));return{before:[B(J.ENV_UNIT,"auth","service principal"),...n("env-pre",e.environment.preFunctions)],after:n("env-post",e.environment.postFunctions)}}function Zo(e){let n=i=>e.filter(o=>o.action===i).length,t=n("install"),r=n("upgrade");return{total:e.length,install:t,upgrade:r,skip:n("skip"),willDeploy:t+r,aheadOfSource:e.filter(i=>i.installedIsNewer).length,actionSteps:e.reduce((i,o)=>i+o.steps.filter(s=>s.enabled&&(s.phase==="prepack"||s.phase==="pre"||s.phase==="post"||s.phase==="cleanup")).length,0),dataImports:e.filter(i=>i.data.enabled).length,patches:e.reduce((i,o)=>i+o.patches.filter(s=>s.action!=="skip").length,0)}}function Qo(e){let n=[],t=e.solutions.map(o=>Jo(e,o,n)),r=Zo(t);r.aheadOfSource>0&&n.push({code:"env-ahead",message:`${r.aheadOfSource} solution(s) are newer on ${e.environment.name} than on this branch. Check the branch is current before deploying.`}),t.length===0&&n.push({code:"no-solutions",message:`No solutions are configured to deploy to "${e.environment.name}".`});let i={schemaVersion:Bo.PLAN_SCHEMA_VERSION,generatedAt:e.generatedAt??new Date().toISOString(),source:e.source,environment:{name:e.environment.name,url:e.environment.url,installedSolutionCount:e.installed.length},run:Xo(e),solutions:t,summary:r,warnings:n,fingerprint:""};return i.fingerprint=(0,Wo.fingerprint)(i),i}function es(e){return[...e.run.before,...e.solutions.flatMap(n=>[...n.steps,...n.patches.flatMap(t=>t.steps)]),...e.run.after]}});var fr=k(ft=>{"use strict";Object.defineProperty(ft,"__esModule",{value:!0});ft.toPlanInfo=ns;function pr(e,n){return e.steps.filter(t=>t.phase===n).map(t=>({name:t.name,type:t.type,enabled:t.enabled}))}function ns(e){return{action:e.action,...e.reason?{reason:e.reason}:{},installedIsNewer:e.installedIsNewer,deploymentType:e.deploymentType,importMode:e.importMode,deployData:e.data.enabled,preActions:pr(e,"pre"),postActions:pr(e,"post")}}});var gr=k(dt=>{"use strict";Object.defineProperty(dt,"__esModule",{value:!0});dt.renderPlanText=ss;var ts={install:"+",upgrade:"~",skip:"\u2212"},dr={"up-to-date":"up to date","env-ahead":"env ahead"},mr={auth:"auth","env-pre":"env","env-post":"env",version:"ver",check:"check",prepack:"prepack",pack:"pack",pre:"pre",import:"import",upgrade:"import",data:"import",flows:"flows",post:"post",cleanup:"clean"},hr=new Set(["auth","env-pre","env-post","version","check","pack"]),cn={bold:e=>`\x1B[1m${e}\x1B[0m`,dim:e=>`\x1B[2m${e}\x1B[0m`,yellow:e=>`\x1B[33m${e}\x1B[0m`};function rs(e,n){let t=e.detail?` (${e.detail})`:"",r=e.enabled?"":` (${e.skipReason??"skipped"})`;return` ${mr[e.phase].padEnd(n)} ${e.name}${t}${r}`}function is(e){let n=6;for(let t of e.solutions)for(let r of t.steps)hr.has(r.phase)||(n=Math.max(n,mr[r.phase].length));return n}function os(e,n){let t=e.action==="skip"?` (${dr[e.reason??"up-to-date"]})`:"";return` ${"patch".padEnd(n)} ${e.name} (${e.installedVersion??"\u2014"} \u2192 ${e.localVersion})${t}`}function ss(e,n={}){let t=n.color??!0,r=s=>t?s:a=>a,i=[],o=is(e);i.push(r(cn.bold)(`\u25B6 Plan for ${e.environment.name} \u2192 ${e.environment.url}`)),i.push(`[INFO] Fetched ${e.environment.installedSolutionCount} solution(s) via Dataverse Web API.`);for(let s of e.solutions){let a=`${s.installedVersion??"\u2014"} \u2192 ${s.localVersion??"\u2014"}`,l=s.reason?`${a.padEnd(36)} (${dr[s.reason]})`:a;i.push(` ${ts[s.action]} ${s.action.padEnd(8)} ${s.name.padEnd(28)} ${l}`);for(let c of s.steps)hr.has(c.phase)||i.push(r(cn.dim)(rs(c,o)));for(let c of s.patches)i.push(r(cn.dim)(os(c,o)))}for(let s of e.warnings)i.push(`${r(cn.yellow)("[WARN]")} ${s.message}`);return i}});var vt=k(x=>{"use strict";Object.defineProperty(x,"__esModule",{value:!0});x.RUN_ID=void 0;x.createExecution=yr;x.stageIdOf=ls;x.seedFromDocument=fn;x.startRun=Ar;x.markCanceled=us;x.applyRunEvent=cs;x.rootSolutions=gt;x.patchesOf=ps;x.envUnit=fs;x.stagesOf=dn;x.stepsOf=Sr;x.summary=ds;x.planSummary=ms;x.unitProgress=hs;x.activeStageId=gs;x.activeStepId=vs;x.findStage=_s;x.nodeDuration=ys;var we=un();x.RUN_ID="~run";var vr=250;function yr(e){let n={phase:"idle",status:"pending",units:{},unitOrder:[],stages:{},steps:{},log:[]};return e?{...fn(n,e),phase:"planned"}:n}function We(e,n){let t=[...e,n];return t.length>vr&&t.splice(0,t.length-vr),t}function as(e){return e?.split("::")[0]}function ls(e){return e.split("::").slice(0,2).join("::")}function pn(e,n){if(e.units[n.id]=n,n.kind==="env"){e.unitOrder.includes(n.id)||e.unitOrder.unshift(n.id);return}if(n.kind==="patch"){let t=e.unitOrder.indexOf(n.parentId);if(t<0){e.unitOrder.push(n.id);return}for(;e.unitOrder[t+1]&&e.units[e.unitOrder[t+1]]?.parentId===n.parentId;)t++;e.unitOrder.splice(t+1,0,n.id);return}e.unitOrder.push(n.id)}function mt(e,n,t){let r=e.units[n];for(let i of t){let o=`${n}::${i.stage}`,s=e.stages[o];s||(s={id:o,unitId:n,stage:i.stage,name:i.stage,status:"pending",stepOrder:[],log:[]},e.stages[o]=s,r.stageOrder.push(o)),e.steps[i.id]={id:i.id,stageId:o,name:i.name,type:i.type,status:i.enabled?"pending":"skipped",message:i.enabled?i.detail??i.type:i.skipReason??"skipped",plan:i,log:[]},s.stepOrder.push(i.id)}for(let i of r.stageOrder){let o=e.stages[i];o.stepOrder.length&&o.stepOrder.every(s=>e.steps[s].status==="skipped")&&(o.status="skipped",o.message=e.steps[o.stepOrder[0]].message)}}function fn(e,n){let t={...e,name:n.environment.name,environment:n.environment.url,document:n,units:{},unitOrder:[],stages:{},steps:{}},r=[...n.run.before,...n.run.after];r.length&&(pn(t,{id:we.ENV_UNIT,name:"Environment",kind:"env",parentId:x.RUN_ID,status:"pending",stageOrder:[],log:[]}),mt(t,we.ENV_UNIT,r));for(let i of n.solutions){pn(t,{id:i.name,name:i.name,kind:"solution",parentId:x.RUN_ID,status:i.action==="skip"?"skipped":"pending",fromVersion:i.installedVersion??void 0,toVersion:i.localVersion??void 0,plan:i,stageOrder:[],log:[]}),mt(t,i.name,i.steps);for(let o of i.patches)pn(t,{id:o.name,name:o.name,kind:"patch",parentId:i.name,status:o.action==="skip"?"skipped":"pending",fromVersion:o.installedVersion??void 0,toVersion:o.localVersion,plan:o,stageOrder:[],log:[]}),mt(t,o.name,o.steps)}return we.allSteps,t}function Ar(e){let n=new Date().toISOString(),t={};for(let[o,s]of Object.entries(e.units))t[o]={...s,status:"pending",message:void 0,startedAt:void 0,completedAt:void 0,log:[]};let r={};for(let[o,s]of Object.entries(e.steps)){let a=s.plan?.enabled===!1;r[o]=a?s:{...s,status:"pending",message:s.plan?.detail??s.type,metrics:void 0,startedAt:void 0,completedAt:void 0,log:[]}}let i={};for(let[o,s]of Object.entries(e.stages)){let a=s.stepOrder.length>0&&s.stepOrder.every(l=>r[l].status==="skipped");i[o]=a?s:{...s,status:"pending",message:void 0,metrics:void 0,startedAt:void 0,completedAt:void 0,log:[]}}return{...e,phase:"running",status:"running",error:void 0,validation:void 0,exitCode:void 0,startedAt:n,lastEventAt:n,units:t,stages:i,steps:r,log:[]}}function us(e){let n=new Date().toISOString(),t=r=>Object.fromEntries(Object.entries(r).map(([i,o])=>[i,o.status==="running"?{...o,status:"canceled",completedAt:n}:o]));return{...e,phase:"finished",status:"canceled",lastEventAt:n,units:t(e.units),stages:t(e.stages),steps:t(e.steps)}}function xr(e,n,t){let r=e.units[n];if(r)return r;let i=t?.parentId??x.RUN_ID,o=n===we.ENV_UNIT?"env":t?.kind==="patch"||i!==x.RUN_ID?"patch":"solution",s={id:n,name:t?.name??n,kind:o,parentId:i,status:"pending",stageOrder:[],log:[]};return pn(e,s),s}function _r(e,n,t){let r=`${n}::${t}`,i=e.stages[r];if(i)return i;let o=xr(e,n),s={id:r,unitId:n,stage:t,name:t,status:"pending",stepOrder:[],log:[]};return e.stages[r]=s,e.units[n]={...o,stageOrder:[...o.stageOrder,r]},s}function ht(e,n){let t={...e};return n.name&&(t.name=n.name),n.status&&(t.status=n.status),n.message&&(t.message=n.message),n.metrics&&(t.metrics={...e.metrics,...n.metrics}),n.status==="running"&&!t.startedAt&&(t.startedAt=n.ts),n.status&&n.status!=="running"&&n.status!=="pending"&&(t.completedAt=n.ts),t}function cs(e,n){let t={...e,units:{...e.units},unitOrder:[...e.unitOrder],stages:{...e.stages},steps:{...e.steps}};switch(n.ts&&(t.lastEventAt=n.ts),n.type){case"plan":return n.status==="running"?{...yr(),phase:"planning",name:n.name??e.name,environment:n.message??e.environment,startedAt:n.ts,lastEventAt:n.ts}:n.status==="done"?{...n.document?fn(t,n.document):t,phase:"planned"}:t;case"run":{if(n.status==="running"){let r=n.document&&t.document?.fingerprint!==n.document.fingerprint?fn(t,n.document):t,i=Ar(r);return{...i,name:n.name??i.name,environment:n.message??i.environment,startedAt:n.ts??i.startedAt,lastEventAt:n.ts??i.lastEventAt}}return(n.status==="done"||n.status==="error")&&(t.phase="finished"),n.status&&(t.status=n.status),n.exitCode!==void 0&&(t.exitCode=n.exitCode),t}case"solution":{if(!n.id)return t;let r=xr(t,n.id,n),i=ht(r,n);return n.fromVersion!==void 0&&(i.fromVersion=n.fromVersion),n.toVersion!==void 0&&(i.toVersion=n.toVersion),n.plan&&(i.legacyPlan=n.plan),t.units[n.id]=i,t}case"stage":{if(!n.stage)return t;let r=as(n.id)??we.ENV_UNIT,i=_r(t,r,n.stage),o=ht(i,n);return n.message&&(o.log=We(i.log,n.message)),t.stages[o.id]=o,t}case"step":{let r=n.id?.split("::")??[];if(!n.id||r.length<3)return t;let i=r[0],o=r[1],s=_r(t,i,o),a=t.steps[n.id]??{id:n.id,stageId:s.id,name:n.name??r.slice(2).join("::"),status:"pending",log:[]},l=ht(a,n);return t.steps[n.id]||(t.stages[s.id]={...s,stepOrder:[...s.stepOrder,n.id]}),t.steps[n.id]=l,t}case"log":{if(!n.message)return t;let r=n.id?.split("::")??[];if(r.length>=3&&t.steps[n.id]){let i=t.steps[n.id];return t.steps[n.id]={...i,log:We(i.log,n.message)},t}if(r.length===2&&t.stages[n.id]){let i=t.stages[n.id];return t.stages[n.id]={...i,log:We(i.log,n.message)},t}return t.log=We(e.log,n.message),t}case"done":return t.phase==="planning"?(t.phase="planned",t):(t.phase!=="running"||(t.phase="finished",(t.status==="running"||t.status==="pending")&&(t.status=n.exitCode?"error":"done"),n.exitCode!==void 0&&(t.exitCode=n.exitCode)),t);case"error":return n.message&&(t.error=n.message),n.code==="plan-drift"?(t.validation=n.validation,t.phase="planned",t):t.phase==="planning"?(t.phase="planned",t):(t.status="error",n.message&&(t.log=We(e.log,`[ERROR] ${n.message}`)),t);default:return t}}function gt(e){return e.unitOrder.map(n=>e.units[n]).filter(n=>!!n&&n.kind==="solution")}function ps(e,n){return e.unitOrder.map(t=>e.units[t]).filter(t=>!!t&&t.kind==="patch"&&t.parentId===n)}function fs(e){return e.units[we.ENV_UNIT]}function dn(e,n){return(e.units[n]?.stageOrder??[]).map(t=>e.stages[t]).filter(t=>!!t)}function Sr(e,n){return(e.stages[n]?.stepOrder??[]).map(t=>e.steps[t]).filter(t=>!!t)}function ds(e){let n=gt(e),t=0,r=0,i=0,o=0,s=0,a=0;for(let c of n)switch(c.status){case"done":t++;break;case"skipped":r++;break;case"running":i++;break;case"error":o++;break;case"canceled":s++;break;default:a++}let l=t+r+o+s;return{total:n.length,done:t,skipped:r,running:i,failed:o,canceled:s,pending:a,percent:n.length?Math.round(l/n.length*100):0,status:e.status,exitCode:e.exitCode}}function ms(e){if(e.document)return e.document.summary;let n=0,t=0,r=0,i=0,o=0,s=0,a=gt(e);for(let l of a){let c=l.legacyPlan;c?.action==="install"?n++:c?.action==="upgrade"?t++:c?.action==="skip"&&r++,c?.installedIsNewer&&s++,c&&c.action!=="skip"&&(c.deployData&&i++,o+=[...c.preActions??[],...c.postActions??[]].filter(u=>u.enabled!==!1).length)}return{total:a.length,willDeploy:n+t,install:n,upgrade:t,skip:r,aheadOfSource:s,dataImports:i,actionSteps:o,patches:0}}function hs(e,n){let t=dn(e,n).flatMap(o=>Sr(e,o.id)),r=t.length,i=t.filter(o=>o.status!=="pending"&&o.status!=="running").length;return{resolved:i,total:r,percent:r?Math.round(i/r*100):0}}function gs(e){for(let t of e.unitOrder)for(let r of dn(e,t))if(r.status==="running")return r.id;let n;for(let t of e.unitOrder)for(let r of dn(e,t))r.status!=="pending"&&(n=r.id);return n}function vs(e){return Object.values(e.steps).find(n=>n.status==="running")?.id}function _s(e,n){if(!n)return;let t=e.stages[n],r=t?e.units[t.unitId]:void 0;return t&&r?{unit:r,stage:t}:void 0}function ys(e,n=Date.now()){if(!e.startedAt)return;let t=new Date(e.startedAt).getTime(),i=(e.completedAt?new Date(e.completedAt).getTime():n)-t;return i>=0?i:void 0}});var wr=k(ze=>{"use strict";Object.defineProperty(ze,"__esModule",{value:!0});ze.createCancelToken=As;ze.groupByStage=_t;ze.executePlan=Es;var mn=un(),Ye=vt();function As(){let e=!1,n=[];return{get canceled(){return e},onCancel(t){e?t():n.push(t)},cancel(){if(!e){e=!0;for(let t of n)t()}}}}function _t(e){let n=[];for(let t of e){let r=(0,Ye.stageIdOf)(t.id),i=n.find(o=>o.id===r);i||(i={stage:t.stage,id:r,steps:[]},n.push(i)),i.steps.push(t)}return n}var Ee=class extends Error{constructor(){super("Run cancelled.")}},Ge=class extends Error{},xs={canceled:!1,onCancel(){}},me=e=>({status:"skipped",message:e});function Ss(e){let n=e.patch??e.root,t=n.installedVersion,r=n.localVersion;switch(n.action){case"install":return{status:"done",message:`${e.name} not installed \u2014 fresh deploy (local: ${r??"unknown"})`};case"upgrade":return{status:"done",message:r?`Upgrading ${e.name}: ${t} \u2192 ${r}`:`No local version info \u2014 deploying. Installed: ${t??"not installed"}`};case"skip":return me(n.reason==="env-ahead"?`Installed (${t}) is newer than local (${r}) \u2014 skipping ${e.name}.`:`Installed (${t}) matches local (${r}) \u2014 skipping ${e.name}.`)}}function ws(e){let n=e.patch??e.root;return n.reason==="env-ahead"?`Environment is ahead of source (${n.installedVersion}).`:`Solution is up-to-date (${n.installedVersion}).`}async function Es(e,n,t,r={}){let i=r.dryRun??!1,o=r.cancel??xs,s=()=>{if(o.canceled)throw new Ee},a=!1,l=(f,h)=>({doc:e,dryRun:i,cancel:o,step:f,unit:h,log:_=>t.log(_,f.id)});async function c(f,h,_,A,v){let te=S=>({parentId:h.id,name:S.name,type:S.type}),Ue=h.steps.filter(S=>S.enabled);if(A||Ue.length===0){let S=A??h.steps[0]?.skipReason??"Not required.";for(let E of h.steps)t.step(E.id,"skipped",{...te(E),message:A??E.skipReason??S});return t.stage(h.id,h.stage,"skipped",{parentId:f,message:S}),{status:"skipped"}}let Z=h.steps.length,Q=Z>1;t.stage(h.id,h.stage,"running",{parentId:f,metrics:Q?{current:0,total:Z}:void 0});for(let S of h.steps)t.step(S.id,S.enabled?"pending":"skipped",{...te(S),message:S.enabled?S.type:S.skipReason??"skipped"});let de=0,qe=0,K,Ae,j;for(let[S,E]of h.steps.entries()){if(!E.enabled)continue;if(j){t.step(E.id,"skipped",{...te(E),message:j});continue}s(),t.step(E.id,"running",te(E));let P;try{P=await _(E)}catch(ee){if(ee instanceof Ee)throw ee;P={status:"error",message:ee instanceof Error?ee.message:String(ee)}}t.step(E.id,P.status,{...te(E),message:P.message??(P.status==="done"?E.type:void 0),metrics:P.metrics}),P.status==="error"&&(de++,K??(K=P.message??`${E.name} failed`),Ae??(Ae=E.phase),v&&(j=v(E))),P.status==="done"&&qe++,Q&&t.stage(h.id,h.stage,"running",{parentId:f,metrics:{current:S+1,total:Z}})}let se=de?"error":qe?"done":"skipped";return t.stage(h.id,h.stage,se,{parentId:f,message:de?K:void 0,metrics:Q?{current:Z,total:Z}:void 0}),{status:se,error:K,failedPhase:Ae}}async function u(f,h,_){let A=f.patch??f.root;t.unit(f.name,"running",{name:f.name,kind:f.kind,parentId:_,fromVersion:A.installedVersion,toVersion:A.localVersion}),A.action==="skip"&&A.reason==="env-ahead"&&t.warn(`${f.name}: environment is ahead of source \u2014 installed ${A.installedVersion}, branch has ${A.localVersion}. Skipping, but this build cannot come from this branch.`);let v,te,Ue=!1,Z="Pack failed.",Q=!1,de=!1,qe=!1,K;try{for(let j of _t(h)){s();let se=te;!se&&Ue&&(j.stage==="DataImport"?se=void 0:j.stage==="FlowActivation"?se=f.root.flows.reason==="always"?void 0:`${Z.replace(/\.$/,"")} \u2014 nothing imported.`:se=Z);let S=await c(f.name,j,async E=>{let P=l(E,f);switch(E.phase){case"version":return Ss(f);case"check":return n.checkSource(f,P);case"pack":{let ee=await n.pack(f,P);return v=ee.artifact,{status:ee.status,message:ee.message,metrics:ee.metrics}}case"import":return i?me("Dry run \u2014 not imported."):n.import(f,v,P);case"upgrade":return i?me("Dry run \u2014 upgrade skipped."):n.upgrade(f,P);case"data":return i?me("Dry run \u2014 data import skipped."):n.data(f.root,P);case"flows":return i?me("Dry run \u2014 flow activation skipped."):n.flows(f.root,P);case"prepack":case"pre":case"post":case"cleanup":return n.actionStep(f.root,P);default:return me(`No handler for ${E.phase}.`)}},se,j.stage==="PrePackAction"?()=>"Pre-pack action failed.":void 0);if(S.status==="error")switch(j.stage){case"SolutionCheck":te="Source check failed.",Q=!0,qe=!0,K=S.error;break;case"PrePackAction":Ue=!0,Q=!0,K=S.error,Z="Pre-pack action failed.";break;case"SolutionPack":Ue=!0,Q=!0,K=S.error,Z="Pack failed.";break;case"PreAction":case"PostAction":case"Cleanup":t.warn(`${f.name}: ${j.stage} failed (non-fatal): ${S.error}`);break;default:te="Run aborted.",Q=!0,de=!0,K=S.error;break}}}catch(j){throw j instanceof Ee&&t.unit(f.name,"canceled",{name:f.name,kind:f.kind,parentId:_,message:"Run cancelled."}),j}finally{if(v!==void 0&&n.discardArtifact)try{await n.discardArtifact(f,v)}catch{}}let Ae=Q?"error":A.action==="skip"?"skipped":"done";if(Q&&(a=!0),t.unit(f.name,Ae,{name:f.name,kind:f.kind,parentId:_,message:K??(Ae==="skipped"?ws(f):void 0)}),de)throw new Ge(K??`${f.name} failed.`);return{stopRun:de,skipPatches:qe}}async function p(f){for(let h of _t(f)){s();let _=await c(mn.ENV_UNIT,h,async A=>{let v=l(A,null);return A.phase==="auth"?i?me("Dry run \u2014 auth skipped."):n.auth(v):n.envAction(v)});if(_.status==="error"&&h.stage==="Auth")throw new Ge(_.error??"Authentication failed.")}}t.run("running",{name:e.environment.name,environment:e.environment.url,document:e});let d={status:"done",exitCode:0},m=e.run.before.length+e.run.after.length>0;try{m&&t.unit(mn.ENV_UNIT,"running",{name:"Environment",kind:"env",parentId:Ye.RUN_ID}),await p(e.run.before);for(let f of e.solutions){s();let h={kind:"solution",name:f.name,root:f,deploymentType:f.deploymentType,importMode:f.importMode},{skipPatches:_}=await u(h,f.steps,Ye.RUN_ID);for(let A of f.patches){let v={kind:"patch",name:A.name,root:f,patch:A,deploymentType:A.deploymentType,importMode:A.importMode};if(_){t.unit(A.name,"skipped",{name:A.name,kind:"patch",parentId:f.name,fromVersion:A.installedVersion,toVersion:A.localVersion,message:"Root source check failed."});continue}await u(v,A.steps,f.name)}}await p(e.run.after),m&&t.unit(mn.ENV_UNIT,"done",{name:"Environment",kind:"env",parentId:Ye.RUN_ID}),a&&(d={status:"error",exitCode:1,error:"One or more solutions failed."})}catch(f){f instanceof Ee?d={status:"canceled",exitCode:130,error:f.message}:f instanceof Ge?d={status:"error",exitCode:1,error:f.message}:d={status:"error",exitCode:1,error:f instanceof Error?f.message:String(f)},m&&t.unit(mn.ENV_UNIT,d.status==="canceled"?"canceled":"error",{name:"Environment",kind:"env",parentId:Ye.RUN_ID,message:d.error})}finally{try{await n.teardown()}catch(f){t.warn(`Teardown failed: ${f instanceof Error?f.message:String(f)}`)}}return t.run(d.status,{name:e.environment.name,environment:e.environment.url,exitCode:d.exitCode,message:d.error}),d}});var Er=k(D=>{"use strict";var bs=D&&D.__createBinding||(Object.create?(function(e,n,t,r){r===void 0&&(r=t);var i=Object.getOwnPropertyDescriptor(n,t);(!i||("get"in i?!n.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return n[t]}}),Object.defineProperty(e,r,i)}):(function(e,n,t,r){r===void 0&&(r=t),e[r]=n[t]})),ae=D&&D.__exportStar||function(e,n){for(var t in e)t!=="default"&&!Object.prototype.hasOwnProperty.call(n,t)&&bs(n,e,t)};Object.defineProperty(D,"__esModule",{value:!0});ae(st(),D);ae(lt(),D);ae(un(),D);ae(fr(),D);ae(gr(),D);ae(pt(),D);ae(vt(),D);ae(wr(),D)});var he=k(H=>{"use strict";var Cs=H&&H.__createBinding||(Object.create?(function(e,n,t,r){r===void 0&&(r=t);var i=Object.getOwnPropertyDescriptor(n,t);(!i||("get"in i?!n.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return n[t]}}),Object.defineProperty(e,r,i)}):(function(e,n,t,r){r===void 0&&(r=t),e[r]=n[t]})),Os=H&&H.__exportStar||function(e,n){for(var t in e)t!=="default"&&!Object.prototype.hasOwnProperty.call(n,t)&&Cs(n,e,t)};Object.defineProperty(H,"__esModule",{value:!0});H.WS_EVENTS=H.RUN_EVENT_SCHEMA_VERSION=H.RunnerStage=void 0;Os(Er(),H);H.RunnerStage={Auth:"Auth",EnvPreAction:"EnvPreAction",VersionCheck:"VersionCheck",SolutionPack:"SolutionPack",SolutionCheck:"SolutionCheck",PrePackAction:"PrePackAction",PreAction:"PreAction",Import:"Import",Upgrade:"Upgrade",DataImport:"DataImport",FlowActivation:"FlowActivation",PostAction:"PostAction",Cleanup:"Cleanup",EnvPostAction:"EnvPostAction"};H.RUN_EVENT_SCHEMA_VERSION=1;H.WS_EVENTS={TERMINAL_OUTPUT:"terminal:output",TERMINAL_INPUT:"terminal:input",TERMINAL_RESIZE:"terminal:resize",TERMINAL_START:"terminal:start",TERMINAL_DONE:"terminal:done",TERMINAL_ERROR:"terminal:error",TERMINAL_ATTACH:"terminal:attach",TERMINAL_KILL:"terminal:kill",RUNNER_EVENT:"runner:event",IDLE_WARNING:"idle:warning",IDLE_CANCELLED:"idle:cancelled"}});var ir=y(rr(),1),{program:Ou,createCommand:Pu,createArgument:ku,createOption:Iu,CommanderError:$u,InvalidArgumentError:Nu,InvalidOptionArgumentError:Tu,Command:xe,Argument:Du,Option:Fu,Help:Vu}=ir.default;var qn=y(require("path")),fe=y(require("fs"));var br=y(require("fs")),Oe=y(he()),be="human";function hn(){return process.env.PPDEVOPS_EVENTS_FILE||""}function Cr(){return be==="events"}function Or(){return be==="human"||be==="events"&&!!hn()}function W(e){Or()&&console.log(e)}function le(e){(Or()||be==="document")&&console.error(e)}function gn(e){for(let n of e)W(n)}function Pr(e){be==="document"&&process.stdout.write(JSON.stringify(e,null,2)+`
|
|
24
|
+
`)}var Pe="~run",Ps="~env",At=null,Ce=null,yt=null;function ks(){return At??Ps}function Is(e){return`${ks()}::${e}`}function vn(e){be=e}function $s(e){let n=hn();if(n)try{br.appendFileSync(n,e+`
|
|
24
25
|
`)}catch{}else process.stdout.write(`
|
|
25
26
|
`+e+`
|
|
26
|
-
`)}function
|
|
27
|
-
\x1B[1m\u25B6 Deployment run: ${e}${n?.environment?` \u2192 ${n.environment}`:""}\x1B[0m`)}function
|
|
28
|
-
\x1B[
|
|
29
|
-
\x1B[36m
|
|
30
|
-
\x1B[
|
|
31
|
-
\x1B[32mCompleted successfully.\x1B[0m`):
|
|
32
|
-
\x1B[31mFailed.\x1B[0m`)}function
|
|
33
|
-
${e.stderr??""}`.split(/\r?\n/).map(Hr).filter(Boolean).find(i=>B.isAbsolute(i)&&fe.existsSync(i))??null}catch{return null}}function Br(){if(process.env.PPDEVOPS_PAC_EXE)return process.env.PPDEVOPS_PAC_EXE;if(process.platform==="win32"){let i=process.env.LOCALAPPDATA??B.join(process.env.USERPROFILE??"","AppData","Local");for(let t of[B.join(i,"Microsoft","PowerAppsCLI","pac.launcher.exe"),B.join(i,"Microsoft","PowerAppsCLI","pac.cmd"),"C:\\Program Files (x86)\\Microsoft Power Apps CLI\\tools\\pac.exe"])if(fe.existsSync(t))return t}let e=B.join(process.env.HOME??process.env.USERPROFILE??"",".dotnet","tools",process.platform==="win32"?"pac.exe":"pac");if(fe.existsSync(e))return e;for(let i of["/usr/local/bin/pac","/usr/local/lib/dotnet-tools/pac"])if(fe.existsSync(i))return i;let n=Ur();return n||"pac"}var q=Br();function N(e){return B.isAbsolute(q)?`"${q}" ${e}`:`pac ${e}`}var et="ppdo-cli",Yn=Je.platform()!=="win32",he,zn;function de(e,n,i=18e4){try{let t=n?{...process.env,...n}:process.env;return(0,Te.execSync)(e,{stdio:"pipe",encoding:"utf-8",env:t,timeout:i}).trim()}catch(t){let r=t,o=(Buffer.isBuffer(r.stderr)?r.stderr.toString():r.stderr??"").trim(),s=(Buffer.isBuffer(r.stdout)?r.stdout.toString():r.stdout??"").trim(),a=o||s||r.message;throw new Error(`[exit=${r.status}] ${a}`)}}function qr(){if(w(`[pac-check] PAC_EXE=${q}`),Ze.isAbsolute(q)){let i=ge.existsSync(q);return w(`[pac-check] Absolute path ${q} exists: ${i}`),i}let e=Yn?`command -v ${q}`:`where ${q}`;try{let i=(0,Te.execSync)(e,{stdio:"pipe",encoding:"utf-8"}).trim();return w(`[pac-check] Found on PATH: ${i}`),!0}catch{}let n=N("--version");try{let i=(0,Te.execSync)(n,{stdio:"pipe",encoding:"utf-8"});return w(`[pac-check] Version OK: ${i.trim().split(`
|
|
34
|
-
`)[0]}`),!0}catch(i){let t=i,r=(Buffer.isBuffer(t.stderr)?t.stderr.toString():t.stderr??"").trim(),o=(Buffer.isBuffer(t.stdout)?t.stdout.toString():t.stdout??"").trim();return A(`[pac-check] Not found. exit=${t.status} stderr="${r}" stdout="${o}" msg="${t.message}"`),!1}}function Wr(){try{return(0,Te.execSync)("az --version",{stdio:"pipe",timeout:15e3}),!0}catch{return!1}}async function nt(e){qr()||C("pac CLI not found. Install the Power Platform CLI before running ppdevops deploy.");let n=e.profileName??et;P(Wn.RunnerStage.Auth,`Setting up PAC auth profile '${n}'`);try{de(N(`auth delete --name ${n}`))}catch{}let i=Yn?" --accept-cleartext-caching":"",t=Yn?'"$PPDO_CLIENT_SECRET"':'"%PPDO_CLIENT_SECRET%"';return de(N("auth create")+` --name ${n} --environment "${e.environmentUrl}" --applicationId "${e.clientId}" --clientSecret ${t} --tenant "${e.tenantId}"`+i,{PPDO_CLIENT_SECRET:e.clientSecret}),de(N(`auth select --name ${n}`)),de(N(`org select --environment "${e.environmentUrl}"`)),b(Wn.RunnerStage.Auth,`PAC auth configured for ${e.environmentUrl}`),n}async function it(e){if(!Wr()){A("az CLI not found \u2014 skipping Azure CLI auth. Key Vault lookups will fail.");return}zn=process.env.AZURE_CONFIG_DIR,he=Ze.join(Je.tmpdir(),`ppdevops-az-${Date.now()}`),ge.mkdirSync(he,{recursive:!0}),process.env.AZURE_CONFIG_DIR=he;try{de(`az login --service-principal --username "${e.clientId}" --password "${e.clientSecret}" --tenant "${e.tenantId}" --output none`,void 0,6e4),w("Azure CLI authenticated.")}catch(n){A(`Azure CLI auth failed (non-fatal): ${n instanceof Error?n.message:String(n)}`)}}function tt(e=et){try{de(N(`auth delete --name ${e}`)),w(`PAC auth profile '${e}' removed.`)}catch{}}function rt(){if(zn!==void 0?process.env.AZURE_CONFIG_DIR=zn:delete process.env.AZURE_CONFIG_DIR,he){try{ge.rmSync(he,{recursive:!0,force:!0})}catch{}he=void 0}}var Xe=S(require("path")),Fe=S(require("fs")),st=require("child_process");var me=S(K());function ot(e,n){return new Promise((i,t)=>{let r=(0,st.spawn)(e,{stdio:["inherit","pipe","pipe"],shell:!0});r.stdout?.on("data",o=>process.stdout.write(o)),r.stderr?.on("data",o=>process.stderr.write(o)),r.on("close",o=>{if(o!==0){t(new Error(`Command exited with code ${o??"unknown"}`));return}if(!Fe.existsSync(n)){t(new Error(`pac solution pack completed but output zip was not created: ${n}`));return}i()}),r.on("error",t)})}async function Gn(e,n,i,t="Managed"){let r=Xe.join(e,"Other","Customizations.xml");if(!Fe.existsSync(r))return m(me.RunnerStage.SolutionPack,`${n}: Other/Customizations.xml not found \u2014 run Export & Unpack first.`),null;Fe.mkdirSync(i,{recursive:!0});let o=t!=="Unmanaged",s=t==="Unmanaged",a=o&&s?"Unmanaged + Managed":t;P(me.RunnerStage.SolutionPack,`Packing ${n} (${a})`);let l=Xe.join(i,`${n}.zip`),u=Xe.join(i,`${n}_managed.zip`);if(s)try{await ot(N(`solution pack --folder "${e}" --zipfile "${l}" --packagetype Unmanaged`),l),w(` Unmanaged zip: ${l}`)}catch(c){return Z(me.RunnerStage.SolutionPack,`Failed to pack Unmanaged: ${c.message}`),null}if(o)try{await ot(N(`solution pack --folder "${e}" --zipfile "${u}" --packagetype Managed`),u),w(` Managed zip: ${u}`)}catch(c){return Z(me.RunnerStage.SolutionPack,`Failed to pack Managed: ${c.message}`),null}return b(me.RunnerStage.SolutionPack,`Packed to ${i}`),{unmanagedZip:s?l:null,managedZip:o?u:null}}var Qe=S(require("fs")),ut=S(require("path"));var ve=S(K());function Kn(){let e=process.env.PPDEVOPS_CLIENT_ID,n=process.env.PPDEVOPS_CLIENT_SECRET,i=process.env.PPDEVOPS_TENANT_ID;return!e||!n||!i?null:{clientId:e,clientSecret:n,tenantId:i}}async function Jn(e,n){let i=`${e.replace(/\/+$/,"")}/.default`,t=`https://login.microsoftonline.com/${n.tenantId}/oauth2/v2.0/token`,r=new URLSearchParams({grant_type:"client_credentials",client_id:n.clientId,client_secret:n.clientSecret,scope:i}),o=await fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!o.ok)throw new Error(`Token request failed: ${o.status} ${await o.text()}`);return(await o.json()).access_token}async function Yr(e,n,i,t="GET",r){let o=`${n.replace(/\/+$/,"")}${i}`,s=await fetch(o,{method:t,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json",Accept:"application/json","OData-MaxVersion":"4.0","OData-Version":"4.0"},body:r!==void 0?JSON.stringify(r):void 0});if(!s.ok){let a=await s.text();throw new Error(`Dataverse API error ${s.status}: ${a}`)}if(!(s.status===204||s.headers.get("content-length")==="0"))return s.json()}async function at(e){let n=Kn();if(!n){let i=[process.env.PPDEVOPS_CLIENT_ID?null:"PPDEVOPS_CLIENT_ID",process.env.PPDEVOPS_CLIENT_SECRET?null:"PPDEVOPS_CLIENT_SECRET",process.env.PPDEVOPS_TENANT_ID?null:"PPDEVOPS_TENANT_ID"].filter(Boolean).join(", ");throw new Error(`Cannot query ${e}: service-principal credentials are incomplete (missing ${i}). In Studio this usually means the client secret could not be read from Key Vault.`)}try{let i=await Jn(e,n);return(await Yr(i,e,"/api/data/v9.2/solutions?$select=uniquename,version&$filter=isvisible eq true&$orderby=uniquename")).value}catch(i){let t=i instanceof Error?i.message:String(i);throw new Error(`Dataverse Web API query against ${e} failed: ${t}`)}}function lt(e){return e.split(".").map(n=>parseInt(n,10)||0)}function Zn(e,n){let i=lt(e),t=lt(n);for(let r=0;r<Math.max(i.length,t.length);r++){let o=i[r]??0,s=t[r]??0;if(o>s)return!0;if(o<s)return!1}return!0}async function en(e){let n=await at(e);return w(`Fetched ${n.length} solution(s) via Dataverse Web API.`),n.map(i=>({SolutionUniqueName:i.uniquename,VersionNumber:i.version}))}function Xn(e,n,i){let t=ut.join(e,n,`${n}.version`),r=null;if(Qe.existsSync(t))try{let u=JSON.parse(Qe.readFileSync(t,"utf-8"));r=(u.find(p=>(p.SolutionName??"").toLowerCase()===n.toLowerCase())??u[0])?.Version??null}catch{A(`Could not parse ${n}.version \u2014 version comparison skipped.`)}else A(`No .version file found for ${n} \u2014 version comparison skipped.`);let o=i.find(u=>(u.SolutionUniqueName??u.uniquename??"").toLowerCase()===n.toLowerCase()),s=o?o.VersionNumber??o.Version??o.version??null:null,a=s===null;return{skip:!!r&&!a&&Zn(s,r),localVersion:r,installedVersion:s,isFirstDeploy:a}}function ct(e,n,i,t){P(ve.RunnerStage.VersionCheck,`Checking version of ${n}`);let r=Xn(e,n,t),{localVersion:o,installedVersion:s,isFirstDeploy:a}=r;return o?a?b(ve.RunnerStage.VersionCheck,`${n} not installed \u2014 fresh deploy (local: ${o})`):r.skip?m(ve.RunnerStage.VersionCheck,`Installed (${s}) >= local (${o}) \u2014 skipping ${n}.`):b(ve.RunnerStage.VersionCheck,`Upgrading ${n}: ${s} \u2192 ${o}`):b(ve.RunnerStage.VersionCheck,`No local version info \u2014 deploying. Installed: ${s??"not installed"}`),r}var Qn=S(require("fs")),ft=S(require("path")),dt=require("child_process");var _e=S(K());var pt=e=>e===!0||String(e).toLowerCase()==="true";function ht(e){return new Promise((n,i)=>{let t=(0,dt.spawn)(e,{stdio:["inherit","pipe","pipe"],shell:!0});t.stdout?.on("data",r=>process.stdout.write(r)),t.stderr?.on("data",r=>process.stderr.write(r)),t.on("close",r=>{r!==0?i(new Error(`Command exited with code ${r??"unknown"}`)):n()}),t.on("error",i)})}async function ei(e){let{environmentUrl:n,managedZip:i,solutionName:t,target:r,deploymentSettingsPath:o}=e;Qn.existsSync(i)||C(`Managed zip not found: ${i}`);let s=pt(r.StageForUpgrade),a=pt(r.DeployAsHolding),l=s,u=a&&!s;P(_e.RunnerStage.Import,`Importing ${t} to ${n}`);let c=r.OverwriteUnmanagedCustomisations?.toLowerCase()!=="false",p=N("solution import")+` --path "${i}" --environment "${n}" --activate-plugins --async`+(l?" --import-as-holding":"")+(u?" --stage-and-upgrade":"")+(c?" --force-overwrite":"");return o&&Qn.existsSync(o)?(p+=` --deployment-settings "${o}"`,w(` Using deployment settings: ${ft.basename(o)}`)):r.SettingsFile&&A(` SettingsFile "${r.SettingsFile}" specified but not found \u2014 connection refs may need manual setup.`),await ht(p),b(_e.RunnerStage.Import,`${t} imported.`),u&&b(_e.RunnerStage.Upgrade,`${t} upgraded (applied atomically via --stage-and-upgrade).`),l}async function ni(e,n){P(_e.RunnerStage.Upgrade,`Upgrading ${n} (applying holding solution)`),await ht(N(`solution upgrade --solution-name "${n}" --environment "${e}" --async`)),b(_e.RunnerStage.Upgrade,`${n} upgraded.`)}var nn=S(require("fs")),oe=S(require("path")),tn=S(require("os")),mt=require("child_process");var xe=S(K());function ii(e){(0,mt.execSync)(e,{stdio:"inherit"})}var gt=e=>e===!0||String(e).toLowerCase()==="true";function zr(e,n){return gt(e.DeployData)?gt(e.AlwaysDeployData)?!0:n:!1}function rn(e,n,i,t){if(!zr(i,t)){m(xe.RunnerStage.DataImport,"Data import not required for this deployment.");return}let r=oe.join(n,"data");if(!nn.existsSync(r)){m(xe.RunnerStage.DataImport,`No data/ directory in ${n} \u2014 skipping.`);return}let o=oe.join(r,"data.zip"),s=oe.join(r,"Extracted");if(!nn.existsSync(o)){if(!nn.existsSync(s)){m(xe.RunnerStage.DataImport,"No data.zip or Extracted/ folder found \u2014 skipping.");return}let a=oe.join(tn.tmpdir(),`ppdevops-data-${Date.now()}.zip`);w(` Compressing Extracted/ -> ${a}`),tn.platform()==="win32"?ii(`powershell -NoProfile -Command "Compress-Archive -Path '${s}\\*' -DestinationPath '${a}' -Force"`):ii(`cd "${s}" && zip -r "${a}" .`),o=a}P(xe.RunnerStage.DataImport,`Importing data from ${oe.basename(o)}`),ii(N(`data import --data "${o}" --environment "${e}"`)),b(xe.RunnerStage.DataImport,"Data import complete.")}var on=S(require("fs")),sn=S(require("path")),vt=S(require("https"));var ye=S(K());var Ne=e=>e===!0||String(e).toLowerCase()==="true";async function Gr(e){let n=Kn();if(!n)throw new Error("Service-principal credentials not available (PPDEVOPS_CLIENT_ID / PPDEVOPS_CLIENT_SECRET / PPDEVOPS_TENANT_ID).");return Jn(e,n)}function _t(e,n,i,t){return new Promise((r,o)=>{let s=t?JSON.stringify(t):void 0,a=new URL(n),l={hostname:a.hostname,path:a.pathname+a.search,method:e,headers:{Authorization:`Bearer ${i}`,"OData-MaxVersion":"4.0","OData-Version":"4.0","Content-Type":"application/json",Accept:"application/json",...s?{"Content-Length":Buffer.byteLength(s)}:{}}},u=vt.request(l,c=>{let p="";c.on("data",f=>{p+=f}),c.on("end",()=>{if((c.statusCode??0)>=400)o(new Error(`HTTP ${c.statusCode}: ${p}`));else try{r(p?JSON.parse(p):null)}catch{r(p)}})});u.on("error",o),s&&u.write(s),u.end()})}async function Kr(e,n,i,t){let r=e.replace(/\/$/,""),o=t?1:2;await _t("PATCH",`${r}/api/data/v9.2/workflows(${i})`,n,{statecode:o,statuscode:t?2:1})}async function Jr(e,n,i){let t=e.replace(/\/$/,"");return(await _t("GET",`${t}/api/data/v9.2/workflows?$filter=name eq '${encodeURIComponent(i)}'&$select=workflowid,name,statecode`,n))?.value?.[0]?.workflowid??null}async function an(e,n,i,t=!0){let r=i.Flows;if(!r||!Ne(r.ActivateFlows)){m(ye.RunnerStage.FlowActivation,"Flow activation not configured for this target.");return}if(!t&&!Ne(r.AlwaysTryActivate)){m(ye.RunnerStage.FlowActivation,"Solution is up-to-date \u2014 AlwaysTryActivate not set, skipping.");return}P(ye.RunnerStage.FlowActivation,"Activating flows...");let o=r.OverrideFile?sn.resolve(n,r.OverrideFile):sn.join(n,"Flows_Default.json");if(!on.existsSync(o)){m(ye.RunnerStage.FlowActivation,`Flow override file not found: ${o} \u2014 skipping.`);return}let s;try{s=JSON.parse(on.readFileSync(o,"utf-8"))}catch(u){let c=u instanceof Error?u.message:String(u);Ne(r.FailonError)&&C(`Failed to parse flow override file: ${c}`),A(`Failed to parse flow override file: ${c} \u2014 skipping flow activation.`);return}let a;try{a=await Gr(e)}catch(u){let c=u instanceof Error?u.message:String(u);Ne(r.FailonError)&&C(`Could not get access token: ${c}`),A(`Could not get access token: ${c} \u2014 skipping flow activation.`);return}let l=0;for(let u of s.flows??[])try{let c=await Jr(e,a,u.flowName);if(!c){A(` Flow not found: ${u.flowName}`);continue}await Kr(e,a,c,u.activate),w(` ${u.activate?"Activated":"Deactivated"}: ${u.flowName}`)}catch(c){let p=c instanceof Error?c.message:String(c);A(` Failed for ${u.flowName}: ${p}`),l++}l>0&&Ne(r.FailonError)&&C(`Flow activation completed with ${l} error(s).`),b(ye.RunnerStage.FlowActivation,`Flow activation complete (${l} error(s)).`)}var Ee=S(require("fs")),O=S(require("path")),ur=S(require("os")),cr=require("child_process");function Nt(e){return typeof e>"u"||e===null}function Zr(e){return typeof e=="object"&&e!==null}function Xr(e){return Array.isArray(e)?e:Nt(e)?[]:[e]}function Qr(e,n){var i,t,r,o;if(n)for(o=Object.keys(n),i=0,t=o.length;i<t;i+=1)r=o[i],e[r]=n[r];return e}function eo(e,n){var i="",t;for(t=0;t<n;t+=1)i+=e;return i}function no(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var io=Nt,to=Zr,ro=Xr,oo=eo,so=no,ao=Qr,$={isNothing:io,isObject:to,toArray:ro,repeat:oo,isNegativeZero:so,extend:ao};function Dt(e,n){var i="",t=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(i+='in "'+e.mark.name+'" '),i+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!n&&e.mark.snippet&&(i+=`
|
|
27
|
+
`)}function I(e){if(!Cr())return;let n={v:Oe.RUN_EVENT_SCHEMA_VERSION,ts:new Date().toISOString(),...e};$s(JSON.stringify(n))}function xt(e){Cr()&&I({type:"log",message:e,id:Ce?Is(Ce):void 0})}function ke(e){xt(`[INFO] ${e}`),W(`[INFO] ${e}`)}function _n(e){xt(`[WARN] ${e}`),W(`\x1B[33m[WARN]\x1B[0m ${e}`)}function kr(e){xt(`[ERROR] ${e}`),le(`\x1B[31m[ERROR]\x1B[0m ${e}`)}function Ir(e,n){At=null,Ce=null,I({type:"run",id:Pe,name:e,status:"running",message:n?.environment,document:n?.document}),W(`
|
|
28
|
+
\x1B[1m\u25B6 Deployment run: ${e}${n?.environment?` \u2192 ${n.environment}`:""}\x1B[0m`)}function yn(e=0,n){I({type:"run",id:Pe,status:e===0?"done":"error",exitCode:e,message:n})}function $r(e=130,n){I({type:"run",id:Pe,status:"canceled",exitCode:e,message:n}),le(`
|
|
29
|
+
\x1B[33mRun cancelled.\x1B[0m`)}function Nr(e){let n=(0,Oe.renderValidationText)(e);I({type:"error",code:"plan-drift",message:n[0],validation:e,exitCode:2}),I({type:"done",exitCode:2});for(let t of n)le(t)}function Tr(e,n,t){if(n==="running"&&(At=t.kind==="env"?null:e,Ce=null,yt=null),I({type:"solution",id:e,parentId:t.parentId,name:t.name,kind:t.kind,status:n,fromVersion:t.fromVersion??void 0,toVersion:t.toVersion??void 0,message:t.message}),n==="running"&&t.kind!=="env"){let r=t.fromVersion||t.toVersion?` ${t.fromVersion??"\u2014"} \u2192 ${t.toVersion??"\u2014"}`:"";W(`
|
|
30
|
+
\x1B[36m\u2501\u2501 ${t.kind==="patch"?"patch ":""}${t.name} \u2501\u2501\x1B[0m\x1B[2m${r}\x1B[0m`)}n!=="running"&&(Ce=null)}function Dr(e,n,t,r){if(t==="running"&&(Ce=n),I({type:"stage",id:e,parentId:r.parentId,name:n,stage:n,status:t,message:r.message,metrics:r.metrics}),!(t==="running"&&r.message===void 0&&r.metrics&&r.metrics.current))switch(t){case"running":W(`
|
|
31
|
+
\x1B[36m[${n}]\x1B[0m ${r.message??"Starting..."}`);break;case"done":W(`\x1B[32m[${n}] \u2713\x1B[0m ${r.message??"Done"}`);break;case"skipped":W(`\x1B[90m[${n}] \u2013\x1B[0m ${r.message??"Skipped"}`);break;case"error":le(`\x1B[31m[${n}] \u2717\x1B[0m ${r.message??"Failed"}`);break;case"canceled":le(`\x1B[33m[${n}] \u2298\x1B[0m cancelled`);break;default:break}}function Fr(e,n,t){switch(n==="running"?yt=t.name:n!=="pending"&&(yt=null),I({type:"step",id:e,parentId:t.parentId,name:t.name,status:n,message:t.message??t.type,metrics:t.metrics}),n){case"running":W(` \x1B[34m\u25B6\x1B[0m ${t.name}${t.type?` (${t.type})`:""}`);break;case"done":W(` \x1B[32m\u2713\x1B[0m ${t.name}${t.message&&t.message!==t.type?` \u2014 ${t.message}`:""}`);break;case"skipped":W(` \x1B[90m\u2298\x1B[0m ${t.name}${t.message?` \u2014 ${t.message}`:""}`);break;case"error":le(` \x1B[31m\u2717\x1B[0m ${t.name}${t.message?` \u2014 ${t.message}`:""}`);break;default:break}}function Vr(e,n){I({type:"log",message:e,id:n})}function Rr(e,n){I({type:"plan",id:Pe,name:e,status:"running",message:n})}function Lr(e){I({type:"solution",id:e.name,parentId:Pe,name:e.name,status:e.action==="skip"?"skipped":"pending",fromVersion:e.installedVersion??void 0,toVersion:e.localVersion??void 0,plan:(0,Oe.toPlanInfo)(e)})}function Mr(e){I({type:"plan",id:Pe,status:"done",document:e})}function Ie(e=0){I({type:"done",exitCode:e}),e===0?W(`
|
|
32
|
+
\x1B[32mCompleted successfully.\x1B[0m`):le(`
|
|
33
|
+
\x1B[31mFailed.\x1B[0m`)}function F(e,n=1){I({type:"error",message:e,exitCode:n}),I({type:"done",exitCode:n}),le(`\x1B[31m[FATAL]\x1B[0m ${e}`),process.exit(n)}function jr(){return{run(e,n){e==="running"?Ir(n.name,{environment:n.environment,document:n.document}):e==="canceled"?$r(n.exitCode??130,n.message):yn(n.exitCode??(e==="done"?0:1),n.message)},unit:(e,n,t)=>Tr(e,n,t),stage:(e,n,t,r)=>Dr(e,n,t,r),step:(e,n,t)=>Fr(e,n,t),log:(e,n)=>Vr(e,n),info:e=>ke(e),warn:e=>_n(e)}}var xn=y(require("fs")),St=y(require("path"));function Hr(e,n){if(!xn.existsSync(e))return n&&F(`Required file not found: ${e}`),null;try{let t=xn.readFileSync(e,"utf-8");return JSON.parse(t)}catch(t){F(`Failed to parse ${e}: ${t instanceof Error?t.message:String(t)}`)}}function Sn(e){let n=St.join(e,"deployPackages.json"),t=St.join(e,"Environments.json"),r=Hr(n,!0),i=Hr(t,!0);return Array.isArray(r)||F(`deployPackages.json must be a JSON array: ${n}`),Array.isArray(i)||F(`Environments.json must be a JSON array: ${t}`),{deployPackages:r,environments:i}}function wn(e,n){let t=e.find(r=>r.EnvironmentName.toLowerCase()===n.toLowerCase());return t||F(`Environment "${n}" not found in Environments.json. Available: ${e.map(r=>r.EnvironmentName).join(", ")}`),t}function En(e,n){if(!n||n.length===0)return e;let t=e.filter(r=>n.some(i=>i.toLowerCase()===r.SolutionName.toLowerCase()));return t.length===0&&F(`No matching solutions found. Available: ${e.map(r=>r.SolutionName).join(", ")}`),t}function wt(){let e=process.env.PPDEVOPS_CLIENT_ID,n=process.env.PPDEVOPS_CLIENT_SECRET,t=process.env.PPDEVOPS_TENANT_ID;return!e||!n||!t?null:{clientId:e,clientSecret:n,tenantId:t}}async function Et(e,n){let t=`${e.replace(/\/+$/,"")}/.default`,r=`https://login.microsoftonline.com/${n.tenantId}/oauth2/v2.0/token`,i=new URLSearchParams({grant_type:"client_credentials",client_id:n.clientId,client_secret:n.clientSecret,scope:t}),o=await fetch(r,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()});if(!o.ok)throw new Error(`Token request failed: ${o.status} ${await o.text()}`);return(await o.json()).access_token}async function Ns(e,n,t,r="GET",i){let o=`${n.replace(/\/+$/,"")}${t}`,s=await fetch(o,{method:r,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json",Accept:"application/json","OData-MaxVersion":"4.0","OData-Version":"4.0"},body:i!==void 0?JSON.stringify(i):void 0});if(!s.ok){let a=await s.text();throw new Error(`Dataverse API error ${s.status}: ${a}`)}if(!(s.status===204||s.headers.get("content-length")==="0"))return s.json()}async function Ur(e){let n=wt();if(!n){let t=[process.env.PPDEVOPS_CLIENT_ID?null:"PPDEVOPS_CLIENT_ID",process.env.PPDEVOPS_CLIENT_SECRET?null:"PPDEVOPS_CLIENT_SECRET",process.env.PPDEVOPS_TENANT_ID?null:"PPDEVOPS_TENANT_ID"].filter(Boolean).join(", ");throw new Error(`Cannot query ${e}: service-principal credentials are incomplete (missing ${t}). In Studio this usually means the client secret could not be read from Key Vault.`)}try{let t=await Et(e,n);return(await Ns(t,e,"/api/data/v9.2/solutions?$select=uniquename,version&$filter=isvisible eq true&$orderby=uniquename")).value}catch(t){let r=t instanceof Error?t.message:String(t);throw new Error(`Dataverse Web API query against ${e} failed: ${r}`)}}var qr=y(he());async function bn(e){return(await Ur(e)).map(t=>({SolutionUniqueName:t.uniquename,VersionNumber:t.version}))}var Ui=y(require("path")),qi=require("child_process"),pe=y(he());var Fe=y(require("fs")),Y=y(require("path")),Vi=y(require("os"));function oi(e){return typeof e>"u"||e===null}function Ts(e){return typeof e=="object"&&e!==null}function Ds(e){return Array.isArray(e)?e:oi(e)?[]:[e]}function Fs(e,n){var t,r,i,o;if(n)for(o=Object.keys(n),t=0,r=o.length;t<r;t+=1)i=o[t],e[i]=n[i];return e}function Vs(e,n){var t="",r;for(r=0;r<n;r+=1)t+=e;return t}function Rs(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var Ls=oi,Ms=Ts,js=Ds,Hs=Vs,Us=Rs,qs=Fs,C={isNothing:Ls,isObject:Ms,toArray:js,repeat:Hs,isNegativeZero:Us,extend:qs};function si(e,n){var t="",r=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(t+='in "'+e.mark.name+'" '),t+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!n&&e.mark.snippet&&(t+=`
|
|
35
34
|
|
|
36
|
-
`+e.mark.snippet),
|
|
37
|
-
`+a;for(
|
|
38
|
-
`,a
|
|
39
|
-
`,l=1;l<=n.linesAfter&&!(s+l>=
|
|
40
|
-
`;return a.replace(/\n$/,"")}var
|
|
41
|
-
\r`;function
|
|
42
|
-
`:e===118?"\v":e===102?"\f":e===114?"\r":e===101?"\x1B":e===32?" ":e===34?'"':e===47?"/":e===92?"\\":e===78?"\x85":e===95?"\xA0":e===76?"\u2028":e===80?"\u2029":""}function
|
|
43
|
-
`,n-1))}function
|
|
44
|
-
`,o?1+l:l):
|
|
45
|
-
`);break}for(
|
|
46
|
-
`,o?1+l:l)):
|
|
47
|
-
`,l+1)):l===0?o&&(e.result+=" "):e.result
|
|
48
|
-
`,l):e.result
|
|
49
|
-
`,o?1+l:l),o=!0,s=!0,l=0,
|
|
50
|
-
`),e.charCodeAt(0)===65279&&(e=e.slice(1)));var
|
|
51
|
-
`,
|
|
52
|
-
`&&(o+=
|
|
53
|
-
|
|
54
|
-
`,r
|
|
35
|
+
`+e.mark.snippet),r+" "+t):r}function Je(e,n){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=n,this.message=si(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Je.prototype=Object.create(Error.prototype);Je.prototype.constructor=Je;Je.prototype.toString=function(n){return this.name+": "+si(this,n)};var V=Je;function bt(e,n,t,r,i){var o="",s="",a=Math.floor(i/2)-1;return r-n>a&&(o=" ... ",n=r-a+o.length),t-r>a&&(s=" ...",t=r+a-s.length),{str:o+e.slice(n,t).replace(/\t/g,"\u2192")+s,pos:r-n+o.length}}function Ct(e,n){return C.repeat(" ",n-e.length)+e}function Bs(e,n){if(n=Object.create(n||null),!e.buffer)return null;n.maxLength||(n.maxLength=79),typeof n.indent!="number"&&(n.indent=1),typeof n.linesBefore!="number"&&(n.linesBefore=3),typeof n.linesAfter!="number"&&(n.linesAfter=2);for(var t=/\r?\n|\r|\0/g,r=[0],i=[],o,s=-1;o=t.exec(e.buffer);)i.push(o.index),r.push(o.index+o[0].length),e.position<=o.index&&s<0&&(s=r.length-2);s<0&&(s=r.length-1);var a="",l,c,u=Math.min(e.line+n.linesAfter,i.length).toString().length,p=n.maxLength-(n.indent+u+3);for(l=1;l<=n.linesBefore&&!(s-l<0);l++)c=bt(e.buffer,r[s-l],i[s-l],e.position-(r[s]-r[s-l]),p),a=C.repeat(" ",n.indent)+Ct((e.line-l+1).toString(),u)+" | "+c.str+`
|
|
36
|
+
`+a;for(c=bt(e.buffer,r[s],i[s],e.position,p),a+=C.repeat(" ",n.indent)+Ct((e.line+1).toString(),u)+" | "+c.str+`
|
|
37
|
+
`,a+=C.repeat("-",n.indent+u+3+c.pos)+`^
|
|
38
|
+
`,l=1;l<=n.linesAfter&&!(s+l>=i.length);l++)c=bt(e.buffer,r[s+l],i[s+l],e.position-(r[s]-r[s+l]),p),a+=C.repeat(" ",n.indent)+Ct((e.line+l+1).toString(),u)+" | "+c.str+`
|
|
39
|
+
`;return a.replace(/\n$/,"")}var Ws=Bs,Ys=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Gs=["scalar","sequence","mapping"];function zs(e){var n={};return e!==null&&Object.keys(e).forEach(function(t){e[t].forEach(function(r){n[String(r)]=t})}),n}function Ks(e,n){if(n=n||{},Object.keys(n).forEach(function(t){if(Ys.indexOf(t)===-1)throw new V('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.options=n,this.tag=e,this.kind=n.kind||null,this.resolve=n.resolve||function(){return!0},this.construct=n.construct||function(t){return t},this.instanceOf=n.instanceOf||null,this.predicate=n.predicate||null,this.represent=n.represent||null,this.representName=n.representName||null,this.defaultStyle=n.defaultStyle||null,this.multi=n.multi||!1,this.styleAliases=zs(n.styleAliases||null),Gs.indexOf(this.kind)===-1)throw new V('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var $=Ks;function Br(e,n){var t=[];return e[n].forEach(function(r){var i=t.length;t.forEach(function(o,s){o.tag===r.tag&&o.kind===r.kind&&o.multi===r.multi&&(i=s)}),t[i]=r}),t}function Js(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,t;function r(i){i.multi?(e.multi[i.kind].push(i),e.multi.fallback.push(i)):e[i.kind][i.tag]=e.fallback[i.tag]=i}for(n=0,t=arguments.length;n<t;n+=1)arguments[n].forEach(r);return e}function Pt(e){return this.extend(e)}Pt.prototype.extend=function(n){var t=[],r=[];if(n instanceof $)r.push(n);else if(Array.isArray(n))r=r.concat(n);else if(n&&(Array.isArray(n.implicit)||Array.isArray(n.explicit)))n.implicit&&(t=t.concat(n.implicit)),n.explicit&&(r=r.concat(n.explicit));else throw new V("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.forEach(function(o){if(!(o instanceof $))throw new V("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(o.loadKind&&o.loadKind!=="scalar")throw new V("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(o.multi)throw new V("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),r.forEach(function(o){if(!(o instanceof $))throw new V("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(Pt.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(r),i.compiledImplicit=Br(i,"implicit"),i.compiledExplicit=Br(i,"explicit"),i.compiledTypeMap=Js(i.compiledImplicit,i.compiledExplicit),i};var Xs=Pt,Zs=new $("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return e!==null?e:""}}),Qs=new $("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return e!==null?e:[]}}),ea=new $("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return e!==null?e:{}}}),na=new Xs({explicit:[Zs,Qs,ea]});function ta(e){if(e===null)return!0;var n=e.length;return n===1&&e==="~"||n===4&&(e==="null"||e==="Null"||e==="NULL")}function ra(){return null}function ia(e){return e===null}var oa=new $("tag:yaml.org,2002:null",{kind:"scalar",resolve:ta,construct:ra,predicate:ia,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function sa(e){if(e===null)return!1;var n=e.length;return n===4&&(e==="true"||e==="True"||e==="TRUE")||n===5&&(e==="false"||e==="False"||e==="FALSE")}function aa(e){return e==="true"||e==="True"||e==="TRUE"}function la(e){return Object.prototype.toString.call(e)==="[object Boolean]"}var ua=new $("tag:yaml.org,2002:bool",{kind:"scalar",resolve:sa,construct:aa,predicate:la,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function ca(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function pa(e){return 48<=e&&e<=55}function fa(e){return 48<=e&&e<=57}function da(e){if(e===null)return!1;var n=e.length,t=0,r=!1,i;if(!n)return!1;if(i=e[t],(i==="-"||i==="+")&&(i=e[++t]),i==="0"){if(t+1===n)return!0;if(i=e[++t],i==="b"){for(t++;t<n;t++)if(i=e[t],i!=="_"){if(i!=="0"&&i!=="1")return!1;r=!0}return r&&i!=="_"}if(i==="x"){for(t++;t<n;t++)if(i=e[t],i!=="_"){if(!ca(e.charCodeAt(t)))return!1;r=!0}return r&&i!=="_"}if(i==="o"){for(t++;t<n;t++)if(i=e[t],i!=="_"){if(!pa(e.charCodeAt(t)))return!1;r=!0}return r&&i!=="_"}}if(i==="_")return!1;for(;t<n;t++)if(i=e[t],i!=="_"){if(!fa(e.charCodeAt(t)))return!1;r=!0}return!(!r||i==="_")}function ma(e){var n=e,t=1,r;if(n.indexOf("_")!==-1&&(n=n.replace(/_/g,"")),r=n[0],(r==="-"||r==="+")&&(r==="-"&&(t=-1),n=n.slice(1),r=n[0]),n==="0")return 0;if(r==="0"){if(n[1]==="b")return t*parseInt(n.slice(2),2);if(n[1]==="x")return t*parseInt(n.slice(2),16);if(n[1]==="o")return t*parseInt(n.slice(2),8)}return t*parseInt(n,10)}function ha(e){return Object.prototype.toString.call(e)==="[object Number]"&&e%1===0&&!C.isNegativeZero(e)}var ga=new $("tag:yaml.org,2002:int",{kind:"scalar",resolve:da,construct:ma,predicate:ha,represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),va=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function _a(e){return!(e===null||!va.test(e)||e[e.length-1]==="_")}function ya(e){var n,t;return n=e.replace(/_/g,"").toLowerCase(),t=n[0]==="-"?-1:1,"+-".indexOf(n[0])>=0&&(n=n.slice(1)),n===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:n===".nan"?NaN:t*parseFloat(n,10)}var Aa=/^[-+]?[0-9]+e/;function xa(e,n){var t;if(isNaN(e))switch(n){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(n){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(n){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(C.isNegativeZero(e))return"-0.0";return t=e.toString(10),Aa.test(t)?t.replace("e",".e"):t}function Sa(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||C.isNegativeZero(e))}var wa=new $("tag:yaml.org,2002:float",{kind:"scalar",resolve:_a,construct:ya,predicate:Sa,represent:xa,defaultStyle:"lowercase"}),Ea=na.extend({implicit:[oa,ua,ga,wa]}),ba=Ea,ai=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),li=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function Ca(e){return e===null?!1:ai.exec(e)!==null||li.exec(e)!==null}function Oa(e){var n,t,r,i,o,s,a,l=0,c=null,u,p,d;if(n=ai.exec(e),n===null&&(n=li.exec(e)),n===null)throw new Error("Date resolve error");if(t=+n[1],r=+n[2]-1,i=+n[3],!n[4])return new Date(Date.UTC(t,r,i));if(o=+n[4],s=+n[5],a=+n[6],n[7]){for(l=n[7].slice(0,3);l.length<3;)l+="0";l=+l}return n[9]&&(u=+n[10],p=+(n[11]||0),c=(u*60+p)*6e4,n[9]==="-"&&(c=-c)),d=new Date(Date.UTC(t,r,i,o,s,a,l)),c&&d.setTime(d.getTime()-c),d}function Pa(e){return e.toISOString()}var ka=new $("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:Ca,construct:Oa,instanceOf:Date,represent:Pa});function Ia(e){return e==="<<"||e===null}var $a=new $("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Ia}),Tt=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
40
|
+
\r`;function Na(e){if(e===null)return!1;var n,t,r=0,i=e.length,o=Tt;for(t=0;t<i;t++)if(n=o.indexOf(e.charAt(t)),!(n>64)){if(n<0)return!1;r+=6}return r%8===0}function Ta(e){var n,t,r=e.replace(/[\r\n=]/g,""),i=r.length,o=Tt,s=0,a=[];for(n=0;n<i;n++)n%4===0&&n&&(a.push(s>>16&255),a.push(s>>8&255),a.push(s&255)),s=s<<6|o.indexOf(r.charAt(n));return t=i%4*6,t===0?(a.push(s>>16&255),a.push(s>>8&255),a.push(s&255)):t===18?(a.push(s>>10&255),a.push(s>>2&255)):t===12&&a.push(s>>4&255),new Uint8Array(a)}function Da(e){var n="",t=0,r,i,o=e.length,s=Tt;for(r=0;r<o;r++)r%3===0&&r&&(n+=s[t>>18&63],n+=s[t>>12&63],n+=s[t>>6&63],n+=s[t&63]),t=(t<<8)+e[r];return i=o%3,i===0?(n+=s[t>>18&63],n+=s[t>>12&63],n+=s[t>>6&63],n+=s[t&63]):i===2?(n+=s[t>>10&63],n+=s[t>>4&63],n+=s[t<<2&63],n+=s[64]):i===1&&(n+=s[t>>2&63],n+=s[t<<4&63],n+=s[64],n+=s[64]),n}function Fa(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var Va=new $("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Na,construct:Ta,predicate:Fa,represent:Da}),Ra=Object.prototype.hasOwnProperty,La=Object.prototype.toString;function Ma(e){if(e===null)return!0;var n=[],t,r,i,o,s,a=e;for(t=0,r=a.length;t<r;t+=1){if(i=a[t],s=!1,La.call(i)!=="[object Object]")return!1;for(o in i)if(Ra.call(i,o))if(!s)s=!0;else return!1;if(!s)return!1;if(n.indexOf(o)===-1)n.push(o);else return!1}return!0}function ja(e){return e!==null?e:[]}var Ha=new $("tag:yaml.org,2002:omap",{kind:"sequence",resolve:Ma,construct:ja}),Ua=Object.prototype.toString;function qa(e){if(e===null)return!0;var n,t,r,i,o,s=e;for(o=new Array(s.length),n=0,t=s.length;n<t;n+=1){if(r=s[n],Ua.call(r)!=="[object Object]"||(i=Object.keys(r),i.length!==1))return!1;o[n]=[i[0],r[i[0]]]}return!0}function Ba(e){if(e===null)return[];var n,t,r,i,o,s=e;for(o=new Array(s.length),n=0,t=s.length;n<t;n+=1)r=s[n],i=Object.keys(r),o[n]=[i[0],r[i[0]]];return o}var Wa=new $("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:qa,construct:Ba}),Ya=Object.prototype.hasOwnProperty;function Ga(e){if(e===null)return!0;var n,t=e;for(n in t)if(Ya.call(t,n)&&t[n]!==null)return!1;return!0}function za(e){return e!==null?e:{}}var Ka=new $("tag:yaml.org,2002:set",{kind:"mapping",resolve:Ga,construct:za}),ui=ba.extend({implicit:[ka,$a],explicit:[Va,Ha,Wa,Ka]}),ce=Object.prototype.hasOwnProperty,Cn=1,ci=2,pi=3,On=4,Ot=1,Ja=2,Wr=3,Xa=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Za=/[\x85\u2028\u2029]/,Qa=/[,\[\]\{\}]/,fi=/^(?:!|!!|![a-z\-]+!)$/i,di=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Yr(e){return Object.prototype.toString.call(e)}function ne(e){return e===10||e===13}function ve(e){return e===9||e===32}function R(e){return e===9||e===32||e===10||e===13}function Ne(e){return e===44||e===91||e===93||e===123||e===125}function el(e){var n;return 48<=e&&e<=57?e-48:(n=e|32,97<=n&&n<=102?n-97+10:-1)}function nl(e){return e===120?2:e===117?4:e===85?8:0}function tl(e){return 48<=e&&e<=57?e-48:-1}function Gr(e){return e===48?"\0":e===97?"\x07":e===98?"\b":e===116||e===9?" ":e===110?`
|
|
41
|
+
`:e===118?"\v":e===102?"\f":e===114?"\r":e===101?"\x1B":e===32?" ":e===34?'"':e===47?"/":e===92?"\\":e===78?"\x85":e===95?"\xA0":e===76?"\u2028":e===80?"\u2029":""}function rl(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function mi(e,n,t){n==="__proto__"?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:t}):e[n]=t}var hi=new Array(256),gi=new Array(256);for(ge=0;ge<256;ge++)hi[ge]=Gr(ge)?1:0,gi[ge]=Gr(ge);var ge;function il(e,n){this.input=e,this.filename=n.filename||null,this.schema=n.schema||ui,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function vi(e,n){var t={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return t.snippet=Ws(t),new V(n,t)}function g(e,n){throw vi(e,n)}function Pn(e,n){e.onWarning&&e.onWarning.call(null,vi(e,n))}var zr={YAML:function(n,t,r){var i,o,s;n.version!==null&&g(n,"duplication of %YAML directive"),r.length!==1&&g(n,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),i===null&&g(n,"ill-formed argument of the YAML directive"),o=parseInt(i[1],10),s=parseInt(i[2],10),o!==1&&g(n,"unacceptable YAML version of the document"),n.version=r[0],n.checkLineBreaks=s<2,s!==1&&s!==2&&Pn(n,"unsupported YAML version of the document")},TAG:function(n,t,r){var i,o;r.length!==2&&g(n,"TAG directive accepts exactly two arguments"),i=r[0],o=r[1],fi.test(i)||g(n,"ill-formed tag handle (first argument) of the TAG directive"),ce.call(n.tagMap,i)&&g(n,'there is a previously declared suffix for "'+i+'" tag handle'),di.test(o)||g(n,"ill-formed tag prefix (second argument) of the TAG directive");try{o=decodeURIComponent(o)}catch{g(n,"tag prefix is malformed: "+o)}n.tagMap[i]=o}};function ue(e,n,t,r){var i,o,s,a;if(n<t){if(a=e.input.slice(n,t),r)for(i=0,o=a.length;i<o;i+=1)s=a.charCodeAt(i),s===9||32<=s&&s<=1114111||g(e,"expected valid JSON character");else Xa.test(a)&&g(e,"the stream contains non-printable characters");e.result+=a}}function Kr(e,n,t,r){var i,o,s,a;for(C.isObject(t)||g(e,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(t),s=0,a=i.length;s<a;s+=1)o=i[s],ce.call(n,o)||(mi(n,o,t[o]),r[o]=!0)}function Te(e,n,t,r,i,o,s,a,l){var c,u;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),c=0,u=i.length;c<u;c+=1)Array.isArray(i[c])&&g(e,"nested arrays are not supported inside keys"),typeof i=="object"&&Yr(i[c])==="[object Object]"&&(i[c]="[object Object]");if(typeof i=="object"&&Yr(i)==="[object Object]"&&(i="[object Object]"),i=String(i),n===null&&(n={}),r==="tag:yaml.org,2002:merge")if(Array.isArray(o))for(c=0,u=o.length;c<u;c+=1)Kr(e,n,o[c],t);else Kr(e,n,o,t);else!e.json&&!ce.call(t,i)&&ce.call(n,i)&&(e.line=s||e.line,e.lineStart=a||e.lineStart,e.position=l||e.position,g(e,"duplicated mapping key")),mi(n,i,o),delete t[i];return n}function Dt(e){var n;n=e.input.charCodeAt(e.position),n===10?e.position++:n===13?(e.position++,e.input.charCodeAt(e.position)===10&&e.position++):g(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function b(e,n,t){for(var r=0,i=e.input.charCodeAt(e.position);i!==0;){for(;ve(i);)i===9&&e.firstTabInLine===-1&&(e.firstTabInLine=e.position),i=e.input.charCodeAt(++e.position);if(n&&i===35)do i=e.input.charCodeAt(++e.position);while(i!==10&&i!==13&&i!==0);if(ne(i))for(Dt(e),i=e.input.charCodeAt(e.position),r++,e.lineIndent=0;i===32;)e.lineIndent++,i=e.input.charCodeAt(++e.position);else break}return t!==-1&&r!==0&&e.lineIndent<t&&Pn(e,"deficient indentation"),r}function $n(e){var n=e.position,t;return t=e.input.charCodeAt(n),!!((t===45||t===46)&&t===e.input.charCodeAt(n+1)&&t===e.input.charCodeAt(n+2)&&(n+=3,t=e.input.charCodeAt(n),t===0||R(t)))}function Ft(e,n){n===1?e.result+=" ":n>1&&(e.result+=C.repeat(`
|
|
42
|
+
`,n-1))}function ol(e,n,t){var r,i,o,s,a,l,c,u,p=e.kind,d=e.result,m;if(m=e.input.charCodeAt(e.position),R(m)||Ne(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=e.input.charCodeAt(e.position+1),R(i)||t&&Ne(i)))return!1;for(e.kind="scalar",e.result="",o=s=e.position,a=!1;m!==0;){if(m===58){if(i=e.input.charCodeAt(e.position+1),R(i)||t&&Ne(i))break}else if(m===35){if(r=e.input.charCodeAt(e.position-1),R(r))break}else{if(e.position===e.lineStart&&$n(e)||t&&Ne(m))break;if(ne(m))if(l=e.line,c=e.lineStart,u=e.lineIndent,b(e,!1,-1),e.lineIndent>=n){a=!0,m=e.input.charCodeAt(e.position);continue}else{e.position=s,e.line=l,e.lineStart=c,e.lineIndent=u;break}}a&&(ue(e,o,s,!1),Ft(e,e.line-l),o=s=e.position,a=!1),ve(m)||(s=e.position+1),m=e.input.charCodeAt(++e.position)}return ue(e,o,s,!1),e.result?!0:(e.kind=p,e.result=d,!1)}function sl(e,n){var t,r,i;if(t=e.input.charCodeAt(e.position),t!==39)return!1;for(e.kind="scalar",e.result="",e.position++,r=i=e.position;(t=e.input.charCodeAt(e.position))!==0;)if(t===39)if(ue(e,r,e.position,!0),t=e.input.charCodeAt(++e.position),t===39)r=e.position,e.position++,i=e.position;else return!0;else ne(t)?(ue(e,r,i,!0),Ft(e,b(e,!1,n)),r=i=e.position):e.position===e.lineStart&&$n(e)?g(e,"unexpected end of the document within a single quoted scalar"):(e.position++,i=e.position);g(e,"unexpected end of the stream within a single quoted scalar")}function al(e,n){var t,r,i,o,s,a;if(a=e.input.charCodeAt(e.position),a!==34)return!1;for(e.kind="scalar",e.result="",e.position++,t=r=e.position;(a=e.input.charCodeAt(e.position))!==0;){if(a===34)return ue(e,t,e.position,!0),e.position++,!0;if(a===92){if(ue(e,t,e.position,!0),a=e.input.charCodeAt(++e.position),ne(a))b(e,!1,n);else if(a<256&&hi[a])e.result+=gi[a],e.position++;else if((s=nl(a))>0){for(i=s,o=0;i>0;i--)a=e.input.charCodeAt(++e.position),(s=el(a))>=0?o=(o<<4)+s:g(e,"expected hexadecimal character");e.result+=rl(o),e.position++}else g(e,"unknown escape sequence");t=r=e.position}else ne(a)?(ue(e,t,r,!0),Ft(e,b(e,!1,n)),t=r=e.position):e.position===e.lineStart&&$n(e)?g(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}g(e,"unexpected end of the stream within a double quoted scalar")}function ll(e,n){var t=!0,r,i,o,s=e.tag,a,l=e.anchor,c,u,p,d,m,f=Object.create(null),h,_,A,v;if(v=e.input.charCodeAt(e.position),v===91)u=93,m=!1,a=[];else if(v===123)u=125,m=!0,a={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=a),v=e.input.charCodeAt(++e.position);v!==0;){if(b(e,!0,n),v=e.input.charCodeAt(e.position),v===u)return e.position++,e.tag=s,e.anchor=l,e.kind=m?"mapping":"sequence",e.result=a,!0;t?v===44&&g(e,"expected the node content, but found ','"):g(e,"missed comma between flow collection entries"),_=h=A=null,p=d=!1,v===63&&(c=e.input.charCodeAt(e.position+1),R(c)&&(p=d=!0,e.position++,b(e,!0,n))),r=e.line,i=e.lineStart,o=e.position,De(e,n,Cn,!1,!0),_=e.tag,h=e.result,b(e,!0,n),v=e.input.charCodeAt(e.position),(d||e.line===r)&&v===58&&(p=!0,v=e.input.charCodeAt(++e.position),b(e,!0,n),De(e,n,Cn,!1,!0),A=e.result),m?Te(e,a,f,_,h,A,r,i,o):p?a.push(Te(e,null,f,_,h,A,r,i,o)):a.push(h),b(e,!0,n),v=e.input.charCodeAt(e.position),v===44?(t=!0,v=e.input.charCodeAt(++e.position)):t=!1}g(e,"unexpected end of the stream within a flow collection")}function ul(e,n){var t,r,i=Ot,o=!1,s=!1,a=n,l=0,c=!1,u,p;if(p=e.input.charCodeAt(e.position),p===124)r=!1;else if(p===62)r=!0;else return!1;for(e.kind="scalar",e.result="";p!==0;)if(p=e.input.charCodeAt(++e.position),p===43||p===45)Ot===i?i=p===43?Wr:Ja:g(e,"repeat of a chomping mode identifier");else if((u=tl(p))>=0)u===0?g(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?g(e,"repeat of an indentation width identifier"):(a=n+u-1,s=!0);else break;if(ve(p)){do p=e.input.charCodeAt(++e.position);while(ve(p));if(p===35)do p=e.input.charCodeAt(++e.position);while(!ne(p)&&p!==0)}for(;p!==0;){for(Dt(e),e.lineIndent=0,p=e.input.charCodeAt(e.position);(!s||e.lineIndent<a)&&p===32;)e.lineIndent++,p=e.input.charCodeAt(++e.position);if(!s&&e.lineIndent>a&&(a=e.lineIndent),ne(p)){l++;continue}if(e.lineIndent<a){i===Wr?e.result+=C.repeat(`
|
|
43
|
+
`,o?1+l:l):i===Ot&&o&&(e.result+=`
|
|
44
|
+
`);break}for(r?ve(p)?(c=!0,e.result+=C.repeat(`
|
|
45
|
+
`,o?1+l:l)):c?(c=!1,e.result+=C.repeat(`
|
|
46
|
+
`,l+1)):l===0?o&&(e.result+=" "):e.result+=C.repeat(`
|
|
47
|
+
`,l):e.result+=C.repeat(`
|
|
48
|
+
`,o?1+l:l),o=!0,s=!0,l=0,t=e.position;!ne(p)&&p!==0;)p=e.input.charCodeAt(++e.position);ue(e,t,e.position,!1)}return!0}function Jr(e,n){var t,r=e.tag,i=e.anchor,o=[],s,a=!1,l;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=o),l=e.input.charCodeAt(e.position);l!==0&&(e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,g(e,"tab characters must not be used in indentation")),!(l!==45||(s=e.input.charCodeAt(e.position+1),!R(s))));){if(a=!0,e.position++,b(e,!0,-1)&&e.lineIndent<=n){o.push(null),l=e.input.charCodeAt(e.position);continue}if(t=e.line,De(e,n,pi,!1,!0),o.push(e.result),b(e,!0,-1),l=e.input.charCodeAt(e.position),(e.line===t||e.lineIndent>n)&&l!==0)g(e,"bad indentation of a sequence entry");else if(e.lineIndent<n)break}return a?(e.tag=r,e.anchor=i,e.kind="sequence",e.result=o,!0):!1}function cl(e,n,t){var r,i,o,s,a,l,c=e.tag,u=e.anchor,p={},d=Object.create(null),m=null,f=null,h=null,_=!1,A=!1,v;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=p),v=e.input.charCodeAt(e.position);v!==0;){if(!_&&e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,g(e,"tab characters must not be used in indentation")),r=e.input.charCodeAt(e.position+1),o=e.line,(v===63||v===58)&&R(r))v===63?(_&&(Te(e,p,d,m,f,null,s,a,l),m=f=h=null),A=!0,_=!0,i=!0):_?(_=!1,i=!0):g(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,v=r;else{if(s=e.line,a=e.lineStart,l=e.position,!De(e,t,ci,!1,!0))break;if(e.line===o){for(v=e.input.charCodeAt(e.position);ve(v);)v=e.input.charCodeAt(++e.position);if(v===58)v=e.input.charCodeAt(++e.position),R(v)||g(e,"a whitespace character is expected after the key-value separator within a block mapping"),_&&(Te(e,p,d,m,f,null,s,a,l),m=f=h=null),A=!0,_=!1,i=!1,m=e.tag,f=e.result;else if(A)g(e,"can not read an implicit mapping pair; a colon is missed");else return e.tag=c,e.anchor=u,!0}else if(A)g(e,"can not read a block mapping entry; a multiline key may not be an implicit key");else return e.tag=c,e.anchor=u,!0}if((e.line===o||e.lineIndent>n)&&(_&&(s=e.line,a=e.lineStart,l=e.position),De(e,n,On,!0,i)&&(_?f=e.result:h=e.result),_||(Te(e,p,d,m,f,h,s,a,l),m=f=h=null),b(e,!0,-1),v=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>n)&&v!==0)g(e,"bad indentation of a mapping entry");else if(e.lineIndent<n)break}return _&&Te(e,p,d,m,f,null,s,a,l),A&&(e.tag=c,e.anchor=u,e.kind="mapping",e.result=p),A}function pl(e){var n,t=!1,r=!1,i,o,s;if(s=e.input.charCodeAt(e.position),s!==33)return!1;if(e.tag!==null&&g(e,"duplication of a tag property"),s=e.input.charCodeAt(++e.position),s===60?(t=!0,s=e.input.charCodeAt(++e.position)):s===33?(r=!0,i="!!",s=e.input.charCodeAt(++e.position)):i="!",n=e.position,t){do s=e.input.charCodeAt(++e.position);while(s!==0&&s!==62);e.position<e.length?(o=e.input.slice(n,e.position),s=e.input.charCodeAt(++e.position)):g(e,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!R(s);)s===33&&(r?g(e,"tag suffix cannot contain exclamation marks"):(i=e.input.slice(n-1,e.position+1),fi.test(i)||g(e,"named tag handle cannot contain such characters"),r=!0,n=e.position+1)),s=e.input.charCodeAt(++e.position);o=e.input.slice(n,e.position),Qa.test(o)&&g(e,"tag suffix cannot contain flow indicator characters")}o&&!di.test(o)&&g(e,"tag name cannot contain such characters: "+o);try{o=decodeURIComponent(o)}catch{g(e,"tag name is malformed: "+o)}return t?e.tag=o:ce.call(e.tagMap,i)?e.tag=e.tagMap[i]+o:i==="!"?e.tag="!"+o:i==="!!"?e.tag="tag:yaml.org,2002:"+o:g(e,'undeclared tag handle "'+i+'"'),!0}function fl(e){var n,t;if(t=e.input.charCodeAt(e.position),t!==38)return!1;for(e.anchor!==null&&g(e,"duplication of an anchor property"),t=e.input.charCodeAt(++e.position),n=e.position;t!==0&&!R(t)&&!Ne(t);)t=e.input.charCodeAt(++e.position);return e.position===n&&g(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(n,e.position),!0}function dl(e){var n,t,r;if(r=e.input.charCodeAt(e.position),r!==42)return!1;for(r=e.input.charCodeAt(++e.position),n=e.position;r!==0&&!R(r)&&!Ne(r);)r=e.input.charCodeAt(++e.position);return e.position===n&&g(e,"name of an alias node must contain at least one character"),t=e.input.slice(n,e.position),ce.call(e.anchorMap,t)||g(e,'unidentified alias "'+t+'"'),e.result=e.anchorMap[t],b(e,!0,-1),!0}function De(e,n,t,r,i){var o,s,a,l=1,c=!1,u=!1,p,d,m,f,h,_;if(e.listener!==null&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=s=a=On===t||pi===t,r&&b(e,!0,-1)&&(c=!0,e.lineIndent>n?l=1:e.lineIndent===n?l=0:e.lineIndent<n&&(l=-1)),l===1)for(;pl(e)||fl(e);)b(e,!0,-1)?(c=!0,a=o,e.lineIndent>n?l=1:e.lineIndent===n?l=0:e.lineIndent<n&&(l=-1)):a=!1;if(a&&(a=c||i),(l===1||On===t)&&(Cn===t||ci===t?h=n:h=n+1,_=e.position-e.lineStart,l===1?a&&(Jr(e,_)||cl(e,_,h))||ll(e,h)?u=!0:(s&&ul(e,h)||sl(e,h)||al(e,h)?u=!0:dl(e)?(u=!0,(e.tag!==null||e.anchor!==null)&&g(e,"alias node should not have any properties")):ol(e,h,Cn===t)&&(u=!0,e.tag===null&&(e.tag="?")),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):l===0&&(u=a&&Jr(e,_))),e.tag===null)e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);else if(e.tag==="?"){for(e.result!==null&&e.kind!=="scalar"&&g(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),p=0,d=e.implicitTypes.length;p<d;p+=1)if(f=e.implicitTypes[p],f.resolve(e.result)){e.result=f.construct(e.result),e.tag=f.tag,e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);break}}else if(e.tag!=="!"){if(ce.call(e.typeMap[e.kind||"fallback"],e.tag))f=e.typeMap[e.kind||"fallback"][e.tag];else for(f=null,m=e.typeMap.multi[e.kind||"fallback"],p=0,d=m.length;p<d;p+=1)if(e.tag.slice(0,m[p].tag.length)===m[p].tag){f=m[p];break}f||g(e,"unknown tag !<"+e.tag+">"),e.result!==null&&f.kind!==e.kind&&g(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):g(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||u}function ml(e){var n=e.position,t,r,i,o=!1,s;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(s=e.input.charCodeAt(e.position))!==0&&(b(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||s!==37));){for(o=!0,s=e.input.charCodeAt(++e.position),t=e.position;s!==0&&!R(s);)s=e.input.charCodeAt(++e.position);for(r=e.input.slice(t,e.position),i=[],r.length<1&&g(e,"directive name must not be less than one character in length");s!==0;){for(;ve(s);)s=e.input.charCodeAt(++e.position);if(s===35){do s=e.input.charCodeAt(++e.position);while(s!==0&&!ne(s));break}if(ne(s))break;for(t=e.position;s!==0&&!R(s);)s=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}s!==0&&Dt(e),ce.call(zr,r)?zr[r](e,r,i):Pn(e,'unknown document directive "'+r+'"')}if(b(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,b(e,!0,-1)):o&&g(e,"directives end mark is expected"),De(e,e.lineIndent-1,On,!1,!0),b(e,!0,-1),e.checkLineBreaks&&Za.test(e.input.slice(n,e.position))&&Pn(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&$n(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,b(e,!0,-1));return}if(e.position<e.length-1)g(e,"end of the stream or a document separator is expected");else return}function _i(e,n){e=String(e),n=n||{},e.length!==0&&(e.charCodeAt(e.length-1)!==10&&e.charCodeAt(e.length-1)!==13&&(e+=`
|
|
49
|
+
`),e.charCodeAt(0)===65279&&(e=e.slice(1)));var t=new il(e,n),r=e.indexOf("\0");for(r!==-1&&(t.position=r,g(t,"null byte is not allowed in input")),t.input+="\0";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)ml(t);return t.documents}function hl(e,n,t){n!==null&&typeof n=="object"&&typeof t>"u"&&(t=n,n=null);var r=_i(e,t);if(typeof n!="function")return r;for(var i=0,o=r.length;i<o;i+=1)n(r[i])}function gl(e,n){var t=_i(e,n);if(t.length!==0){if(t.length===1)return t[0];throw new V("expected a single document in the stream, but found more")}}var vl=hl,_l=gl,yi={loadAll:vl,load:_l},Ai=Object.prototype.toString,xi=Object.prototype.hasOwnProperty,Vt=65279,yl=9,Xe=10,Al=13,xl=32,Sl=33,wl=34,kt=35,El=37,bl=38,Cl=39,Ol=42,Si=44,Pl=45,kn=58,kl=61,Il=62,$l=63,Nl=64,wi=91,Ei=93,Tl=96,bi=123,Dl=124,Ci=125,N={};N[0]="\\0";N[7]="\\a";N[8]="\\b";N[9]="\\t";N[10]="\\n";N[11]="\\v";N[12]="\\f";N[13]="\\r";N[27]="\\e";N[34]='\\"';N[92]="\\\\";N[133]="\\N";N[160]="\\_";N[8232]="\\L";N[8233]="\\P";var Fl=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],Vl=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function Rl(e,n){var t,r,i,o,s,a,l;if(n===null)return{};for(t={},r=Object.keys(n),i=0,o=r.length;i<o;i+=1)s=r[i],a=String(n[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),l=e.compiledTypeMap.fallback[s],l&&xi.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[s]=a;return t}function Ll(e){var n,t,r;if(n=e.toString(16).toUpperCase(),e<=255)t="x",r=2;else if(e<=65535)t="u",r=4;else if(e<=4294967295)t="U",r=8;else throw new V("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+t+C.repeat("0",r-n.length)+n}var Ml=1,Ze=2;function jl(e){this.schema=e.schema||ui,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=C.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=Rl(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType=e.quotingType==='"'?Ze:Ml,this.forceQuotes=e.forceQuotes||!1,this.replacer=typeof e.replacer=="function"?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function Xr(e,n){for(var t=C.repeat(" ",n),r=0,i=-1,o="",s,a=e.length;r<a;)i=e.indexOf(`
|
|
50
|
+
`,r),i===-1?(s=e.slice(r),r=a):(s=e.slice(r,i+1),r=i+1),s.length&&s!==`
|
|
51
|
+
`&&(o+=t),o+=s;return o}function It(e,n){return`
|
|
52
|
+
`+C.repeat(" ",e.indent*n)}function Hl(e,n){var t,r,i;for(t=0,r=e.implicitTypes.length;t<r;t+=1)if(i=e.implicitTypes[t],i.resolve(n))return!0;return!1}function In(e){return e===xl||e===yl}function Qe(e){return 32<=e&&e<=126||161<=e&&e<=55295&&e!==8232&&e!==8233||57344<=e&&e<=65533&&e!==Vt||65536<=e&&e<=1114111}function Zr(e){return Qe(e)&&e!==Vt&&e!==Al&&e!==Xe}function Qr(e,n,t){var r=Zr(e),i=r&&!In(e);return(t?r:r&&e!==Si&&e!==wi&&e!==Ei&&e!==bi&&e!==Ci)&&e!==kt&&!(n===kn&&!i)||Zr(n)&&!In(n)&&e===kt||n===kn&&i}function Ul(e){return Qe(e)&&e!==Vt&&!In(e)&&e!==Pl&&e!==$l&&e!==kn&&e!==Si&&e!==wi&&e!==Ei&&e!==bi&&e!==Ci&&e!==kt&&e!==bl&&e!==Ol&&e!==Sl&&e!==Dl&&e!==kl&&e!==Il&&e!==Cl&&e!==wl&&e!==El&&e!==Nl&&e!==Tl}function ql(e){return!In(e)&&e!==kn}function Ke(e,n){var t=e.charCodeAt(n),r;return t>=55296&&t<=56319&&n+1<e.length&&(r=e.charCodeAt(n+1),r>=56320&&r<=57343)?(t-55296)*1024+r-56320+65536:t}function Oi(e){var n=/^\n* /;return n.test(e)}var Pi=1,$t=2,ki=3,Ii=4,$e=5;function Bl(e,n,t,r,i,o,s,a){var l,c=0,u=null,p=!1,d=!1,m=r!==-1,f=-1,h=Ul(Ke(e,0))&&ql(Ke(e,e.length-1));if(n||s)for(l=0;l<e.length;c>=65536?l+=2:l++){if(c=Ke(e,l),!Qe(c))return $e;h=h&&Qr(c,u,a),u=c}else{for(l=0;l<e.length;c>=65536?l+=2:l++){if(c=Ke(e,l),c===Xe)p=!0,m&&(d=d||l-f-1>r&&e[f+1]!==" ",f=l);else if(!Qe(c))return $e;h=h&&Qr(c,u,a),u=c}d=d||m&&l-f-1>r&&e[f+1]!==" "}return!p&&!d?h&&!s&&!i(e)?Pi:o===Ze?$e:$t:t>9&&Oi(e)?$e:s?o===Ze?$e:$t:d?Ii:ki}function Wl(e,n,t,r,i){e.dump=(function(){if(n.length===0)return e.quotingType===Ze?'""':"''";if(!e.noCompatMode&&(Fl.indexOf(n)!==-1||Vl.test(n)))return e.quotingType===Ze?'"'+n+'"':"'"+n+"'";var o=e.indent*Math.max(1,t),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),a=r||e.flowLevel>-1&&t>=e.flowLevel;function l(c){return Hl(e,c)}switch(Bl(n,a,e.indent,s,l,e.quotingType,e.forceQuotes&&!r,i)){case Pi:return n;case $t:return"'"+n.replace(/'/g,"''")+"'";case ki:return"|"+ei(n,e.indent)+ni(Xr(n,o));case Ii:return">"+ei(n,e.indent)+ni(Xr(Yl(n,s),o));case $e:return'"'+Gl(n)+'"';default:throw new V("impossible error: invalid scalar style")}})()}function ei(e,n){var t=Oi(e)?String(n):"",r=e[e.length-1]===`
|
|
53
|
+
`,i=r&&(e[e.length-2]===`
|
|
55
54
|
`||e===`
|
|
56
|
-
`),o=
|
|
57
|
-
`}function
|
|
58
|
-
`?e.slice(0,-1):e}function
|
|
59
|
-
`);return
|
|
60
|
-
`||e[0]===" ",o,s;s=
|
|
61
|
-
`:"")+
|
|
62
|
-
`+e.slice(
|
|
63
|
-
`,e.length-
|
|
64
|
-
`+e.slice(s+1):l+=e.slice(
|
|
65
|
-
`:""}var
|
|
66
|
-
|
|
67
|
-
`);d=h.pop()??"";for(let _ of h){let y=_.replace(/\r$/,"");u(y),t&&y.trim()&&Hn(y)}f==="out"?a=d:l=d};s.stdout.on("data",p=>c(p,"out")),s.stderr.on("data",p=>c(p,"err")),s.on("error",o),s.on("close",p=>{for(let f of[a,l]){let d=f.replace(/\r$/,"");d.trim()&&(u(d),t&&Hn(d))}a="",l="",r(p??0)})})}async function Sa(e,n){if(e.enabled===!1){Ie(e.name,{type:e.type,message:"disabled"});return}Ki(e.name,{type:e.type});let i=mi(e.run??"",n),t=e.script?O.resolve(n.scriptBaseDir??n.solutionDir??n.projectPath??process.cwd(),e.script):void 0,r,o;switch(e.type){case"pac":r=q,o=ar(i.replace(/^pac\s+/,""));break;case"az":r="az",o=ar(i.replace(/^az\s+/,""));break;case"pwsh":case"powershell":{if(r=e.type==="pwsh"?"pwsh":vi?"powershell.exe":"pwsh",t){if(o=["-NoProfile","-NonInteractive","-File",t],e.params)for(let[a,l]of Object.entries(e.params))o.push(`-${a}`,mi(l,n))}else o=["-NoProfile","-NonInteractive","-Command",i];break}case"node":{if(!t){Ie(e.name,{type:e.type,message:'requires a "script" field'});return}if(r="node",o=[t],e.params)for(let[a,l]of Object.entries(e.params))o.push(`--${a}`,mi(l,n));break}case"rest":Ie(e.name,{type:e.type,message:"rest steps are not supported in the CLI runner"});return;default:Ie(e.name,{type:e.type,message:"unknown step type"});return}let s;try{s=await pr(r,o,n.projectPath??process.cwd(),!0)}catch(a){let l=a instanceof Error?a.message:String(a);throw jn(e.name,`Failed to start ${r}: ${l}`,{type:e.type}),new Error(`Failed to start ${r}: ${l}`)}if(s!==0)throw jn(e.name,`exited with code ${s}`,{type:e.type}),new Error(`Step "${e.name}" exited with code ${s}`);Ji(e.name,{type:e.type})}async function lr(e,n,i,t,r,o){let s;try{let l=hn(Ee.readFileSync(n,"utf-8"));s=Array.isArray(l?.steps)?l.steps:[]}catch(l){let u=l instanceof Error?l.message:String(l);r&&(Z(e,u),C(`Failed to parse ${O.basename(n)}: ${u}`)),A(`Failed to parse ${O.basename(n)}: ${u} \u2014 skipping.`);return}if(s.length===0){m(e,`No steps in ${O.basename(n)}.`);return}let a={envUrl:t,...o,scriptBaseDir:i,clientId:process.env.PPDEVOPS_CLIENT_ID,tenantId:process.env.PPDEVOPS_TENANT_ID,clientSecret:process.env.PPDEVOPS_CLIENT_SECRET};P(e,`Running ${O.basename(n)} (${s.length} step${s.length===1?"":"s"})`);for(let l of s)Gi(l.name,{type:l.type});try{for(let l of s)await Sa(l,a);b(e,`${O.basename(n)} completed.`)}catch(l){let u=l instanceof Error?l.message:String(l);r&&(Z(e,u),C(`Action failed: ${u}`)),A(`Action failed (non-fatal): ${u}`)}}function Aa(e,n){let i=[".ps1",".sh",...vi?[".bat"]:[]];for(let t of i){let r=O.join(e,n+t);if(Ee.existsSync(r))return r}return null}async function Ca(e,n,i=[]){let t=O.extname(e).toLowerCase(),r,o;t===".ps1"?(r=vi?"powershell.exe":"pwsh",o=["-NoProfile","-NonInteractive","-File",e,n,...i]):t===".sh"?(r="bash",o=[e,n,...i]):(r="cmd.exe",o=["/c",e,n,...i]);let s;try{s=await pr(r,o,process.cwd(),!1)}catch(a){throw new Error(`Failed to start ${r}: ${a instanceof Error?a.message:String(a)}`)}if(s!==0)throw new Error(`Script exited with code ${s}`)}async function gn(e,n,i,t,r=!0,o=[],s){if(!n||n==="False"||n===""){m(e,"No script configured.");return}let a=/\.(ps1|sh|bat|yaml|yml)$/i.test(n);if(a){if(/\.(yaml|yml)$/i.test(n)){let u=O.isAbsolute(n)?n:O.join(i,n);await lr(e,u,i,t,r,s);return}}else{let u=O.isAbsolute(n)?`${n}.yaml`:O.join(i,`${n}.yaml`);if(Ee.existsSync(u)){await lr(e,u,i,t,r,s);return}}let l=a?O.isAbsolute(n)?n:O.join(i,n):Aa(i,n);if(!l||!Ee.existsSync(l)){r&&C(`Script not found: ${n} (looked in ${i})`),A(`Script not found: ${n} \u2014 skipping.`);return}P(e,`Running ${O.basename(l)}`);try{await Ca(l,t,o),b(e,`${O.basename(l)} completed.`)}catch(u){let c=u instanceof Error?u.message:String(u);r&&(Z(e,c),C(`Script failed: ${c}`)),A(`Script failed (non-fatal): ${c}`)}}var x=S(K()),be=e=>e===!0||String(e).toLowerCase()==="true",wa=e=>!!e&&e.toLowerCase()!=="false"&&e.toLowerCase()!=="true"&&e.trim()!=="";function Ea(e,n){let i=e.clientId??process.env.PPDEVOPS_CLIENT_ID,t=e.clientSecret??process.env.PPDEVOPS_CLIENT_SECRET,r=e.tenantId??process.env.PPDEVOPS_TENANT_ID;if((!i||!t||!r)&&I.existsSync(n))try{let o=JSON.parse(I.readFileSync(n,"utf-8"));i??=o.ClientID??o.clientId,r??=o.TenantID??o.tenantId}catch{}return(!i||!t||!r)&&C("Missing credentials. Provide --client-id, --client-secret, --tenant-id or set PPDEVOPS_CLIENT_ID / PPDEVOPS_CLIENT_SECRET / PPDEVOPS_TENANT_ID."),{clientId:i,clientSecret:t,tenantId:r}}function ba(e){let i=I.readdirSync(e).filter(t=>t.endsWith(".json")&&t!=="package.json").find(t=>!["deployPackages","Environments","tsconfig","package-lock"].some(r=>t.startsWith(r)));return M.join(e,i??"")}function Oa(e,n){let i=M.join(e,n,`${n}.version`);if(!I.existsSync(i))return[];try{return JSON.parse(I.readFileSync(i,"utf-8"))}catch{return[]}}function ka(e,n){let i=e.SolutionName,t=n.find(o=>(o.SolutionUniqueName??o.uniquename??"").toLowerCase()===i.toLowerCase()),r=t?t.VersionNumber??t.Version??t.version??null:null;return r&&Zn(r,e.Version)?(m(x.RunnerStage.VersionCheck,`Patch ${i}: installed (${r}) >= local (${e.Version}) \u2014 skipping.`),{skip:!0,installedVersion:r}):(b(x.RunnerStage.VersionCheck,r?`Patch ${i}: upgrading ${r} \u2192 ${e.Version}`:`Patch ${i}: not installed \u2014 fresh deploy (${e.Version})`),{skip:!1,installedVersion:r})}async function $a(e,n,i,t,r,o){let s=e.SolutionName,a=i.EnvironmentURL,l=M.join(t,s,"src"),u=M.join(_i.tmpdir(),`ppdevops-${s}-${Date.now()}`),c=M.join(t,s),f=Oa(t,s).slice(1).filter(v=>v.SolutionName!==s),d=f.length>0;Bi(s);let h="done",_,y=ct(t,s,a,o),D=y.isFirstDeploy;if(qi({fromVersion:y.installedVersion,toVersion:y.localVersion}),y.skip){let v=`Solution is up-to-date (${y.installedVersion}).`;h="skipped",_=v,m(x.RunnerStage.SolutionCheck,v),m(x.RunnerStage.SolutionPack,v),m(x.RunnerStage.PreAction,v),m(x.RunnerStage.Import,v),m(x.RunnerStage.Upgrade,v),m(x.RunnerStage.PostAction,v),m(x.RunnerStage.Cleanup,v),rn(a,l,n,!1),await an(a,c,n,!1);try{I.rmSync(u,{recursive:!0,force:!0})}catch{}}else{let v=M.join(l,"Other","Customizations.xml");if(!I.existsSync(v)){Z(x.RunnerStage.SolutionCheck,`Unpacked source not found at ${l} \u2014 run Export & Unpack first.`),m(x.RunnerStage.SolutionPack,"Source check failed."),m(x.RunnerStage.PreAction,"Source check failed."),m(x.RunnerStage.Import,"Source check failed."),m(x.RunnerStage.Upgrade,"Source check failed."),m(x.RunnerStage.DataImport,"Source check failed."),m(x.RunnerStage.FlowActivation,"Source check failed."),m(x.RunnerStage.PostAction,"Source check failed."),m(x.RunnerStage.Cleanup,"Source check failed."),zi(`Unpacked source not found for ${s}.`);return}b(x.RunnerStage.SolutionCheck,`Source verified for ${s}.`);let L=await Gn(l,s,u,n.DeploymentType??"Managed");if(!L)A(`[${s}] Skipping root deploy \u2014 solution could not be packed.`),m(x.RunnerStage.PreAction,"Pack failed."),m(x.RunnerStage.Import,"Pack failed."),m(x.RunnerStage.Upgrade,"Pack failed."),rn(a,l,n,D),await an(a,c,n,!1),m(x.RunnerStage.PostAction,"Pack failed."),m(x.RunnerStage.Cleanup,"Pack failed.");else{let je=L.managedZip??L.unmanagedZip;if(be(n.PreAction)?await gn(x.RunnerStage.PreAction,"Scripts/PreAction",c,a,!1,["-EnvironmentName",i.EnvironmentName,"-Path",t],{envName:i.EnvironmentName,projectPath:t,solutionName:s,solutionDir:l}):m(x.RunnerStage.PreAction,"No pre-action configured."),r.dryRun)w(`[DRY RUN] Would import ${s} (${n.DeploymentType}) to ${i.EnvironmentName}`),m(x.RunnerStage.Import,"Dry run \u2014 not imported."),m(x.RunnerStage.Upgrade,"Dry run \u2014 upgrade skipped."),m(x.RunnerStage.DataImport,"Dry run \u2014 data import skipped."),m(x.RunnerStage.FlowActivation,"Dry run \u2014 flow activation skipped.");else{let ke=n.SettingsFile?M.resolve(c,n.SettingsFile):void 0;await ei({environmentUrl:a,managedZip:je,solutionName:s,target:n,deploymentSettingsPath:ke})?await ni(a,s):be(n.DeployAsHolding)||m(x.RunnerStage.Upgrade,"No holding solution upgrade required."),rn(a,l,n,D),await an(a,c,n,!0)}be(n.PostAction)?await gn(x.RunnerStage.PostAction,"Scripts/PostAction",c,a,!1,["-EnvironmentName",i.EnvironmentName,"-Path",t],{envName:i.EnvironmentName,projectPath:t,solutionName:s,solutionDir:l}):m(x.RunnerStage.PostAction,"No post-action configured."),wa(n.CleanupAction)?await gn(x.RunnerStage.Cleanup,n.CleanupAction,c,a,!1):m(x.RunnerStage.Cleanup,"No cleanup action configured.")}try{I.rmSync(u,{recursive:!0,force:!0})}catch{}}d&&w(`[${s}] Processing ${f.length} patch solution(s) from version manifest.`);for(let v of f){let L=v.SolutionName,je=M.join(t,s,`pac_${L}`,"src"),ke=M.join(_i.tmpdir(),`ppdevops-${L}-${Date.now()}`);P(x.RunnerStage.VersionCheck,`Checking version of patch ${L}`);let{skip:yi}=ka(v,o);if(yi)continue;let mr=M.join(je,"Other","Customizations.xml");if(!I.existsSync(mr)){A(`[${L}] pac_${L}/src/Other/Customizations.xml not found \u2014 run Export & Unpack to obtain the patch source. Skipping.`);continue}let _n=await Gn(je,L,ke,n.DeploymentType??"Managed");if(!_n){A(`[${L}] Skipping patch deploy \u2014 solution could not be packed.`);try{I.rmSync(ke,{recursive:!0,force:!0})}catch{}continue}let vr=_n.managedZip??_n.unmanagedZip;r.dryRun?w(`[DRY RUN] Would import patch ${L} (${n.DeploymentType}) to ${i.EnvironmentName}`):await ei({environmentUrl:a,managedZip:vr,solutionName:L,target:n,deploymentSettingsPath:void 0})&&await ni(a,L);try{I.rmSync(ke,{recursive:!0,force:!0})}catch{}}h==="skipped"?Yi(_):Wi(_)}var fr=new le("deploy").description("Deploy one or more Power Platform solutions to a target environment").requiredOption("-p, --project <path>","Path to the project root (contains deployPackages.json)").requiredOption("-e, --environment <name>","Target environment name (from Environments.json)").option("-s, --solutions <names>","Comma-separated solution names to deploy (default: all)").option("--client-id <id>","Service principal client ID").option("--client-secret <secret>","Service principal client secret").option("--tenant-id <id>","Azure tenant ID").option("--profile-name <name>","PAC auth profile name (default: ppdo-cli)").option("--json","Output structured JSON events (for CI/Studio integration)",!1).option("--dry-run","Validate and pack only \u2014 do not import",!1).action(async e=>{qe(e.json);let n=M.resolve(e.project);I.existsSync(n)||C(`Project path not found: ${n}`);let{deployPackages:i,environments:t}=ze(n),r=Ge(t,e.environment),s=Ke(i,e.solutions?e.solutions.split(",").map(p=>p.trim()):null).filter(p=>p.DeployTo?.some(f=>f.EnvironmentName.toLowerCase()===e.environment.toLowerCase()&&be(f.Deploy)));if(s.length===0){A(`No solutions are configured to deploy to "${e.environment}". Nothing to do.`),pe(0);return}w(`Deploying ${s.length} solution(s) to ${e.environment} (${r.EnvironmentURL})`),Ui(r.EnvironmentName,{environment:r.EnvironmentURL});let a=ba(n),l=Ea(e,a),u=e.profileName??"ppdo-cli",c=!1;try{e.dryRun||(await nt({...l,environmentUrl:r.EnvironmentURL,profileName:u}),await it({...l,environmentUrl:r.EnvironmentURL}),c=!0),be(r.PreAction)&&r.PreFunctions?.length?(A(`[EnvPreAction] Skipping env-level functions (${r.PreFunctions.join(", ")}): legacy PS functions require a CRM $Conn object not available in next-gen runner. Migrate to explicit script files to run with ppdevops-cli.`),m(x.RunnerStage.EnvPreAction,`Skipped \u2014 legacy $Conn functions (${r.PreFunctions.join(", ")}) require migration.`)):m(x.RunnerStage.EnvPreAction,"No env pre-action configured."),w(`Fetching installed solutions from ${r.EnvironmentURL} (one-time cache)\u2026`);let p=await en(r.EnvironmentURL);for(let f of s){let d=f.DeployTo.find(h=>h.EnvironmentName.toLowerCase()===e.environment.toLowerCase());await $a(f,d,r,n,e,p)}if(be(r.PostAction)&&r.PostFunctions?.length){let f=M.join(n,"Common","Environments","Scripts","PostAction.ps1");I.existsSync(f)&&A(`[EnvPostAction] Skipping env-level functions (${r.PostFunctions.join(", ")}): legacy PS functions require a CRM $Conn object not available in next-gen runner. Migrate to explicit script files to run with ppdevops-cli.`),m(x.RunnerStage.EnvPostAction,"Skipped \u2014 legacy $Conn functions require migration.")}else m(x.RunnerStage.EnvPostAction,"No env post-action configured.");Vn(0),pe(0),process.exit(0)}catch(p){let f=p instanceof Error?p.message:String(p);Vn(1),C(f)}finally{c&&tt(u),rt()}});var te=S(require("path")),Oe=S(require("fs"));var mn=e=>e===!0||String(e).toLowerCase()==="true";function dr(e,n){let i=te.join(e,`${n}.yaml`);if(Oe.existsSync(i))try{return(hn(Oe.readFileSync(i,"utf-8"))?.steps??[]).map(r=>({name:r.name,type:r.type,enabled:r.enabled!==!1}))}catch{return[]}for(let t of[".ps1",".sh",".bat"])if(Oe.existsSync(te.join(e,`${n}${t}`)))return[{name:`${te.basename(n)}${t}`,type:"script",enabled:!0}];return[]}var hr=new le("plan").description("Dry-run pre-flight: report what a deployment will do without changing anything").requiredOption("-p, --project <path>","Path to the project root (contains deployPackages.json)").requiredOption("-e, --environment <name>","Target environment name (from Environments.json)").option("-s, --solutions <names>","Comma-separated solution names to plan (default: all)").option("--client-id <id>","Service principal client ID").option("--client-secret <secret>","Service principal client secret").option("--tenant-id <id>","Azure tenant ID").option("--json","Output structured JSON events (for CI/Studio integration)",!1).action(async e=>{qe(e.json);let n=te.resolve(e.project);Oe.existsSync(n)||C(`Project path not found: ${n}`);let{deployPackages:i,environments:t}=ze(n),r=Ge(t,e.environment),s=Ke(i,e.solutions?e.solutions.split(",").map(a=>a.trim()):null).filter(a=>a.DeployTo?.some(l=>l.EnvironmentName.toLowerCase()===e.environment.toLowerCase()&&mn(l.Deploy)));if(Zi(r.EnvironmentName,r.EnvironmentURL),s.length===0){A(`No solutions are configured to deploy to "${e.environment}".`),Un(),pe(0);return}try{w(`Querying installed solutions on ${r.EnvironmentURL}\u2026`);let a=await en(r.EnvironmentURL);for(let l of s){let u=l.DeployTo.find(y=>y.EnvironmentName.toLowerCase()===e.environment.toLowerCase()),c=l.SolutionName,p=Xn(n,c,a),f=p.skip?"skip":p.isFirstDeploy?"install":"upgrade",d=te.join(n,c),h=f!=="skip"&&mn(u.PreAction)?dr(d,"Scripts/PreAction"):[],_=f!=="skip"&&mn(u.PostAction)?dr(d,"Scripts/PostAction"):[];Xi({name:c,fromVersion:p.installedVersion,toVersion:p.localVersion,plan:{action:f,deploymentType:u.DeploymentType??"Managed",deployData:mn(u.DeployData),preActions:h,postActions:_}})}Un(),pe(0)}catch(a){let l=a instanceof Error?a.message:String(a);C(l)}});var xi={version:"1.0.0-beta.1",commit:"3c2c2f0",builtOn:"2026-09-15T02:32:15Z"};function gr(){return`${xi.version} (${xi.commit}, built ${xi.builtOn})`}var vn=new le;vn.name("ppdevops").description("Power Platform DevOps Studio CLI \u2014 cross-platform solution deployment runner").version(gr());vn.addCommand(fr);vn.addCommand(hr);vn.parseAsync(process.argv).catch(e=>{console.error("Fatal error:",e instanceof Error?e.message:String(e)),process.exit(1)});
|
|
55
|
+
`),o=i?"+":r?"":"-";return t+o+`
|
|
56
|
+
`}function ni(e){return e[e.length-1]===`
|
|
57
|
+
`?e.slice(0,-1):e}function Yl(e,n){for(var t=/(\n+)([^\n]*)/g,r=(function(){var c=e.indexOf(`
|
|
58
|
+
`);return c=c!==-1?c:e.length,t.lastIndex=c,ti(e.slice(0,c),n)})(),i=e[0]===`
|
|
59
|
+
`||e[0]===" ",o,s;s=t.exec(e);){var a=s[1],l=s[2];o=l[0]===" ",r+=a+(!i&&!o&&l!==""?`
|
|
60
|
+
`:"")+ti(l,n),i=o}return r}function ti(e,n){if(e===""||e[0]===" ")return e;for(var t=/ [^ ]/g,r,i=0,o,s=0,a=0,l="";r=t.exec(e);)a=r.index,a-i>n&&(o=s>i?s:a,l+=`
|
|
61
|
+
`+e.slice(i,o),i=o+1),s=a;return l+=`
|
|
62
|
+
`,e.length-i>n&&s>i?l+=e.slice(i,s)+`
|
|
63
|
+
`+e.slice(s+1):l+=e.slice(i),l.slice(1)}function Gl(e){for(var n="",t=0,r,i=0;i<e.length;t>=65536?i+=2:i++)t=Ke(e,i),r=N[t],!r&&Qe(t)?(n+=e[i],t>=65536&&(n+=e[i+1])):n+=r||Ll(t);return n}function zl(e,n,t){var r="",i=e.tag,o,s,a;for(o=0,s=t.length;o<s;o+=1)a=t[o],e.replacer&&(a=e.replacer.call(t,String(o),a)),(ie(e,n,a,!1,!1)||typeof a>"u"&&ie(e,n,null,!1,!1))&&(r!==""&&(r+=","+(e.condenseFlow?"":" ")),r+=e.dump);e.tag=i,e.dump="["+r+"]"}function ri(e,n,t,r){var i="",o=e.tag,s,a,l;for(s=0,a=t.length;s<a;s+=1)l=t[s],e.replacer&&(l=e.replacer.call(t,String(s),l)),(ie(e,n+1,l,!0,!0,!1,!0)||typeof l>"u"&&ie(e,n+1,null,!0,!0,!1,!0))&&((!r||i!=="")&&(i+=It(e,n)),e.dump&&Xe===e.dump.charCodeAt(0)?i+="-":i+="- ",i+=e.dump);e.tag=o,e.dump=i||"[]"}function Kl(e,n,t){var r="",i=e.tag,o=Object.keys(t),s,a,l,c,u;for(s=0,a=o.length;s<a;s+=1)u="",r!==""&&(u+=", "),e.condenseFlow&&(u+='"'),l=o[s],c=t[l],e.replacer&&(c=e.replacer.call(t,l,c)),ie(e,n,l,!1,!1)&&(e.dump.length>1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),ie(e,n,c,!1,!1)&&(u+=e.dump,r+=u));e.tag=i,e.dump="{"+r+"}"}function Jl(e,n,t,r){var i="",o=e.tag,s=Object.keys(t),a,l,c,u,p,d;if(e.sortKeys===!0)s.sort();else if(typeof e.sortKeys=="function")s.sort(e.sortKeys);else if(e.sortKeys)throw new V("sortKeys must be a boolean or a function");for(a=0,l=s.length;a<l;a+=1)d="",(!r||i!=="")&&(d+=It(e,n)),c=s[a],u=t[c],e.replacer&&(u=e.replacer.call(t,c,u)),ie(e,n+1,c,!0,!0,!0)&&(p=e.tag!==null&&e.tag!=="?"||e.dump&&e.dump.length>1024,p&&(e.dump&&Xe===e.dump.charCodeAt(0)?d+="?":d+="? "),d+=e.dump,p&&(d+=It(e,n)),ie(e,n+1,u,!0,p)&&(e.dump&&Xe===e.dump.charCodeAt(0)?d+=":":d+=": ",d+=e.dump,i+=d));e.tag=o,e.dump=i||"{}"}function ii(e,n,t){var r,i,o,s,a,l;for(i=t?e.explicitTypes:e.implicitTypes,o=0,s=i.length;o<s;o+=1)if(a=i[o],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof n=="object"&&n instanceof a.instanceOf)&&(!a.predicate||a.predicate(n))){if(t?a.multi&&a.representName?e.tag=a.representName(n):e.tag=a.tag:e.tag="?",a.represent){if(l=e.styleMap[a.tag]||a.defaultStyle,Ai.call(a.represent)==="[object Function]")r=a.represent(n,l);else if(xi.call(a.represent,l))r=a.represent[l](n,l);else throw new V("!<"+a.tag+'> tag resolver accepts not "'+l+'" style');e.dump=r}return!0}return!1}function ie(e,n,t,r,i,o,s){e.tag=null,e.dump=t,ii(e,t,!1)||ii(e,t,!0);var a=Ai.call(e.dump),l=r,c;r&&(r=e.flowLevel<0||e.flowLevel>n);var u=a==="[object Object]"||a==="[object Array]",p,d;if(u&&(p=e.duplicates.indexOf(t),d=p!==-1),(e.tag!==null&&e.tag!=="?"||d||e.indent!==2&&n>0)&&(i=!1),d&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(u&&d&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),a==="[object Object]")r&&Object.keys(e.dump).length!==0?(Jl(e,n,e.dump,i),d&&(e.dump="&ref_"+p+e.dump)):(Kl(e,n,e.dump),d&&(e.dump="&ref_"+p+" "+e.dump));else if(a==="[object Array]")r&&e.dump.length!==0?(e.noArrayIndent&&!s&&n>0?ri(e,n-1,e.dump,i):ri(e,n,e.dump,i),d&&(e.dump="&ref_"+p+e.dump)):(zl(e,n,e.dump),d&&(e.dump="&ref_"+p+" "+e.dump));else if(a==="[object String]")e.tag!=="?"&&Wl(e,e.dump,n,o,l);else{if(a==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new V("unacceptable kind of an object to dump "+a)}e.tag!==null&&e.tag!=="?"&&(c=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?c="!"+c:c.slice(0,18)==="tag:yaml.org,2002:"?c="!!"+c.slice(18):c="!<"+c+">",e.dump=c+" "+e.dump)}return!0}function Xl(e,n){var t=[],r=[],i,o;for(Nt(e,t,r),i=0,o=r.length;i<o;i+=1)n.duplicates.push(t[r[i]]);n.usedDuplicates=new Array(o)}function Nt(e,n,t){var r,i,o;if(e!==null&&typeof e=="object")if(i=n.indexOf(e),i!==-1)t.indexOf(i)===-1&&t.push(i);else if(n.push(e),Array.isArray(e))for(i=0,o=e.length;i<o;i+=1)Nt(e[i],n,t);else for(r=Object.keys(e),i=0,o=r.length;i<o;i+=1)Nt(e[r[i]],n,t)}function Zl(e,n){n=n||{};var t=new jl(n);t.noRefs||Xl(e,t);var r=e;return t.replacer&&(r=t.replacer.call({"":r},"",r)),ie(t,0,r,!0,!0)?t.dump+`
|
|
64
|
+
`:""}var Ql=Zl,eu={dump:Ql};function Rt(e,n){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var $i=yi.load,sc=yi.loadAll,ac=eu.dump;var lc=Rt("safeLoad","load"),uc=Rt("safeLoadAll","loadAll"),cc=Rt("safeDump","dump");var oe=y(require("fs")),L=y(require("path")),Lt=require("child_process");function Ni(e){try{let n=oe.readdirSync(e).filter(t=>/^Microsoft\.PowerApps\.CLI\.\d/i.test(t)).map(t=>({n:t,v:t.replace(/^Microsoft\.PowerApps\.CLI\./i,"").split(".").map(r=>parseInt(r,10)||0)})).sort((t,r)=>{for(let i=0;i<Math.max(t.v.length,r.v.length);i++){let o=(r.v[i]??0)-(t.v[i]??0);if(o)return o}return 0});for(let{n:t}of n){let r=L.join(e,t,"tools","pac.exe");if(oe.existsSync(r))return r}}catch{}return null}function Ti(e){let n=e.trim().replace(/^"+|"+$/g,"");if(!n)return"";if(process.platform==="win32"&&/\\pac\.(cmd|launcher\.exe)$/i.test(n)){let t=Ni(L.dirname(n));if(t)return t;let r=L.join(L.dirname(n),"pac.launcher.exe");if(oe.existsSync(r))return r}return n}function tu(){try{let e=process.platform==="win32"?(0,Lt.spawnSync)("where.exe",["pac"],{encoding:"utf8",windowsHide:!0}):(0,Lt.spawnSync)("which",["pac"],{encoding:"utf8"});return e.status!==0?null:`${e.stdout??""}
|
|
65
|
+
${e.stderr??""}`.split(/\r?\n/).map(Ti).filter(Boolean).find(t=>L.isAbsolute(t)&&oe.existsSync(t))??null}catch{return null}}function ru(){if(process.env.PPDEVOPS_PAC_EXE)return Ti(process.env.PPDEVOPS_PAC_EXE);if(process.platform==="win32"){let t=process.env.LOCALAPPDATA??L.join(process.env.USERPROFILE??"","AppData","Local"),r=L.join(t,"Microsoft","PowerAppsCLI"),i=Ni(r);if(i)return i;for(let o of[L.join(r,"pac.launcher.exe"),L.join(r,"pac.cmd"),"C:\\Program Files (x86)\\Microsoft Power Apps CLI\\tools\\pac.exe"])if(oe.existsSync(o))return o}let e=L.join(process.env.HOME??process.env.USERPROFILE??"",".dotnet","tools",process.platform==="win32"?"pac.exe":"pac");if(oe.existsSync(e))return e;for(let t of["/usr/local/bin/pac","/usr/local/lib/dotnet-tools/pac"])if(oe.existsSync(t))return t;let n=tu();return n||"pac"}var X=ru();function M(e){return L.isAbsolute(X)?`"${X}" ${e}`:`pac ${e}`}var Di=require("child_process"),iu=" ";function Nn(e,n,t={}){return new Promise((r,i)=>{let o=(0,Di.spawn)(e,n,{cwd:t.cwd,shell:t.shell??!1,env:t.env,stdio:["ignore","pipe","pipe"]}),s=t.echo??!0,a="",l="",c=p=>{s&&process.stdout.write((p.trim()?iu+p:"")+`
|
|
66
|
+
`),p.trim()&&t.log?.(p)},u=(p,d)=>{let m=(d==="out"?a:l)+p.toString(),f=m.split(`
|
|
67
|
+
`);m=f.pop()??"";for(let h of f)c(h.replace(/\r$/,""));d==="out"?a=m:l=m};o.stdout?.on("data",p=>u(p,"out")),o.stderr?.on("data",p=>u(p,"err")),o.on("error",i),o.on("close",p=>{for(let d of[a,l]){let m=d.replace(/\r$/,"");m.trim()&&c(m)}r(p??0)})})}async function Tn(e,n={}){let t="",r,i=await Nn(e,[],{...n,shell:!0,log:o=>{t=o,n.failOn&&!r&&n.failOn.test(o)&&(r=o.trim()),n.log?.(o)}});if(r)throw new Error(r);if(i!==0)throw new Error(`exited with code ${i}${t?`: ${t}`:""}`)}var ou=/^\s*Error:/i;function _e(e,n={}){return Tn(e,{...n,failOn:ou})}var jt=Vi.platform()==="win32";function en(e,n){let t=s=>Y.isAbsolute(s)?s:Y.join(n,s),r=/\.(ps1|sh|bat|yaml|yml)$/i.test(e),i=r?/\.(yaml|yml)$/i.test(e)?t(e):null:`${t(e)}.yaml`;if(i&&Fe.existsSync(i))try{let s=$i(Fe.readFileSync(i,"utf-8"));return{kind:"yaml",file:i,steps:Array.isArray(s?.steps)?s.steps:[]}}catch(s){return{kind:"parse-error",file:i,error:s instanceof Error?s.message:String(s)}}if(i&&r)return{kind:"missing",ref:e};let o=r?t(e):su(n,e);return o&&Fe.existsSync(o)?{kind:"script",file:o}:{kind:"missing",ref:e}}function su(e,n){let t=[".ps1",".sh",...jt?[".bat"]:[]];for(let r of t){let i=Y.join(e,n+r);if(Fe.existsSync(i))return i}return null}function Mt(e,n){return e.replace(/\{\{\s*env\.url\s*\}\}/g,n.envUrl).replace(/\{\{\s*env\.name\s*\}\}/g,n.envName).replace(/\{\{\s*solution\.name\s*\}\}/g,n.solutionName).replace(/\{\{\s*project\.path\s*\}\}/g,n.projectPath).replace(/\{\{\s*project\.name\s*\}\}/g,n.projectName??"").replace(/\{\{\s*auth\.clientId\s*\}\}/g,process.env.PPDEVOPS_CLIENT_ID??"").replace(/\{\{\s*auth\.tenantId\s*\}\}/g,process.env.PPDEVOPS_TENANT_ID??"").replace(/\{\{\s*auth\.clientSecret\s*\}\}/g,process.env.PPDEVOPS_CLIENT_SECRET??"")}function Fi(e){let n=[],t=/"([^"]*)"|'([^']*)'|(\S+)/g,r;for(;(r=t.exec(e))!==null;)n.push(r[1]??r[2]??r[3]??"");return n}async function au(e,n){let t=Mt(e.run??"",n),r=e.script?Y.resolve(n.scriptsDir,e.script):void 0,i,o;switch(e.type){case"pac":i=X,o=Fi(t.replace(/^pac\s+/,""));break;case"az":i="az",o=Fi(t.replace(/^az\s+/,""));break;case"pwsh":case"powershell":{if(i=e.type==="pwsh"?"pwsh":jt?"powershell.exe":"pwsh",r){if(o=["-NoProfile","-NonInteractive","-File",r],e.params)for(let[a,l]of Object.entries(e.params))o.push(`-${a}`,Mt(l,n))}else o=["-NoProfile","-NonInteractive","-Command",t];break}case"node":{if(!r)return{status:"skipped",message:'requires a "script" field'};if(i="node",o=[r],e.params)for(let[a,l]of Object.entries(e.params))o.push(`--${a}`,Mt(l,n));break}case"rest":return{status:"skipped",message:"rest steps are not supported in the CLI runner"};default:return{status:"skipped",message:`unknown step type ${e.type}`}}let s;try{s=await Nn(i,o,{cwd:n.projectPath,log:n.log})}catch(a){return{status:"error",message:`Failed to start ${i}: ${a instanceof Error?a.message:String(a)}`}}return s===0?{status:"done"}:{status:"error",message:`exited with code ${s}`}}async function lu(e,n){let t=Y.extname(e).toLowerCase(),r=n.legacyArgs??[],i,o;t===".ps1"?(i=jt?"powershell.exe":"pwsh",o=["-NoProfile","-NonInteractive","-File",e,n.envUrl,...r]):t===".sh"?(i="bash",o=[e,n.envUrl,...r]):(i="cmd.exe",o=["/c",e,n.envUrl,...r]);let s;try{s=await Nn(i,o,{cwd:process.cwd(),log:n.log})}catch(a){return{status:"error",message:`Failed to start ${i}: ${a instanceof Error?a.message:String(a)}`}}return s===0?{status:"done"}:{status:"error",message:`Script exited with code ${s}`}}async function Ri(e,n,t){if(!e)return{status:"error",message:"Action not configured."};switch(e.kind){case"yaml":{let r=e.steps.find(i=>i.name===n);return r?au(r,t):{status:"error",message:`Step "${n}" not found in ${Y.basename(e.file)}.`}}case"script":return lu(e.file,t);case"parse-error":return{status:"error",message:`Failed to parse ${Y.basename(e.file)}: ${e.error}`};case"missing":return{status:"error",message:`Script not found: ${e.ref}`}}}var Dn=y(require("fs")),Li=y(require("path"));function uu(e,n){return Li.join(e,n,`${n}.version`)}function Mi(e,n){let t=uu(e,n);if(!Dn.existsSync(t))return{entries:[],status:"missing"};try{let r=JSON.parse(Dn.readFileSync(t,"utf-8"));return{entries:Array.isArray(r)?r:[],status:"ok"}}catch{return{entries:[],status:"unparseable"}}}function ji(e,n){return(e.entries.find(r=>(r.SolutionName??"").toLowerCase()===n.toLowerCase())??e.entries[0])?.Version??null}function Hi(e,n){return e.entries.slice(1).filter(t=>t.SolutionName!==n)}var Ht={version:"1.0.0-beta.2",commit:"7f1bca7",builtOn:"2026-09-16T08:56:11Z"};function Fn(){return`${Ht.version} (${Ht.commit}, built ${Ht.builtOn})`}function cu(e){let n;try{n=(0,qi.execFileSync)("git",["rev-parse","--short","HEAD"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{}return{projectPath:e,cli:Fn(),...n?{commit:n}:{}}}function Vn(e,n,t,r){let i=t.map(o=>{let s=o.DeployTo.find(u=>u.EnvironmentName.toLowerCase()===n.EnvironmentName.toLowerCase()),a=o.SolutionName,l=Ui.join(e,a),c=Mi(e,a);return{name:a,target:s,localVersion:ji(c,a),versionFile:c.status,patches:Hi(c,a).filter(u=>!!u.Version).map(u=>({name:u.SolutionName,localVersion:u.Version})),prePackAction:(0,pe.isTrue)(s.PrePackAction)?en("Scripts/PrePackAction",l):null,preAction:(0,pe.isTrue)(s.PreAction)?en("Scripts/PreAction",l):null,postAction:(0,pe.isTrue)(s.PostAction)?en("Scripts/PostAction",l):null,cleanupAction:(0,pe.isScriptRef)(s.CleanupAction)?en(s.CleanupAction,l):null}});return{environment:{name:n.EnvironmentName,url:n.EnvironmentURL,...(0,pe.isTrue)(n.PreAction)&&n.PreFunctions?.length?{preFunctions:n.PreFunctions}:{},...(0,pe.isTrue)(n.PostAction)&&n.PostFunctions?.length?{postFunctions:n.PostFunctions}:{}},source:cu(e),installed:r.map(o=>({name:o.SolutionUniqueName??o.uniquename??"",version:o.VersionNumber??o.Version??o.version??null})),solutions:i}}var tn=y(require("fs")),oo=y(require("os")),G=y(require("path"));var nn=require("child_process"),Rn=y(require("os")),Le=y(require("fs")),Ln=y(require("path"));var Bi="ppdo-cli",Ut=Rn.platform()!=="win32",Re,qt;function Ve(e,n,t=18e4){try{let r=n?{...process.env,...n}:process.env;return(0,nn.execSync)(e,{stdio:"pipe",encoding:"utf-8",env:r,timeout:t}).trim()}catch(r){let i=r,o=(Buffer.isBuffer(i.stderr)?i.stderr.toString():i.stderr??"").trim(),s=(Buffer.isBuffer(i.stdout)?i.stdout.toString():i.stdout??"").trim();throw new Error(`[exit=${i.status}] ${o||s||i.message}`)}}function pu(e){if(e(`[pac-check] PAC_EXE=${X}`),Ln.isAbsolute(X)){let n=Le.existsSync(X);return e(`[pac-check] Absolute path ${X} exists: ${n}`),n}try{let n=(0,nn.execSync)(Ut?`command -v ${X}`:`where ${X}`,{stdio:"pipe",encoding:"utf-8"}).trim();return e(`[pac-check] Found on PATH: ${n}`),!0}catch{}try{let n=(0,nn.execSync)(M("--version"),{stdio:"pipe",encoding:"utf-8"});return e(`[pac-check] Version OK: ${n.trim().split(`
|
|
68
|
+
`)[0]}`),!0}catch(n){return e(`[pac-check] Not found: ${n instanceof Error?n.message:String(n)}`),!1}}function fu(){try{return(0,nn.execSync)("az --version",{stdio:"pipe",timeout:15e3}),!0}catch{return!1}}async function Wi(e,n){if(!pu(n))throw new Error("pac CLI not found. Install the Power Platform CLI before running ppdevops deploy.");let t=e.profileName??Bi;n(`Setting up PAC auth profile '${t}'`);try{Ve(M(`auth delete --name ${t}`))}catch{}let r=Ut?" --accept-cleartext-caching":"",i=Ut?'"$PPDO_CLIENT_SECRET"':'"%PPDO_CLIENT_SECRET%"';return Ve(M("auth create")+` --name ${t} --environment "${e.environmentUrl}" --applicationId "${e.clientId}" --clientSecret ${i} --tenant "${e.tenantId}"`+r,{PPDO_CLIENT_SECRET:e.clientSecret}),Ve(M(`auth select --name ${t}`)),Ve(M(`org select --environment "${e.environmentUrl}"`)),n(`PAC auth configured for ${e.environmentUrl}`),t}async function Yi(e,n){if(!fu()){n("[WARN] az CLI not found \u2014 skipping Azure CLI auth. Key Vault lookups will fail.");return}qt=process.env.AZURE_CONFIG_DIR,Re=Ln.join(Rn.tmpdir(),`ppdevops-az-${Date.now()}`),Le.mkdirSync(Re,{recursive:!0}),process.env.AZURE_CONFIG_DIR=Re;try{Ve(`az login --service-principal --username "${e.clientId}" --password "${e.clientSecret}" --tenant "${e.tenantId}" --output none`,void 0,6e4),n("Azure CLI authenticated.")}catch(t){n(`[WARN] Azure CLI auth failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}}function Gi(e=Bi,n){try{Ve(M(`auth delete --name ${e}`)),n?.(`PAC auth profile '${e}' removed.`)}catch{}}function zi(){if(qt!==void 0?process.env.AZURE_CONFIG_DIR=qt:delete process.env.AZURE_CONFIG_DIR,Re){try{Le.rmSync(Re,{recursive:!0,force:!0})}catch{}Re=void 0}}var Me=y(require("fs")),ye=y(require("path")),Mn=y(require("os"));async function Ki(e,n,t){let r=ye.join(n,"data");if(!Me.existsSync(r))return{status:"skipped",message:`No data/ directory in ${n} \u2014 skipping.`};let i=ye.join(r,"data.zip"),o=ye.join(r,"Extracted"),s;if(!Me.existsSync(i)){if(!Me.existsSync(o))return{status:"skipped",message:"No data.zip or Extracted/ folder found \u2014 skipping."};s=ye.join(Mn.tmpdir(),`ppdevops-data-${Date.now()}.zip`),t(`Compressing Extracted/ -> ${s}`),Mn.platform()==="win32"?await Tn(`powershell -NoProfile -Command "Compress-Archive -Path '${o}\\*' -DestinationPath '${s}' -Force"`,{log:t}):await Tn(`cd "${o}" && zip -r "${s}" .`,{log:t}),i=s}try{return t(`Importing data from ${ye.basename(i)}`),await _e(M(`data import --data "${i}" --environment "${e}"`),{log:t}),{status:"done",message:"Data import complete."}}finally{if(s)try{Me.rmSync(s,{force:!0})}catch{}}}var jn=y(require("fs")),Hn=y(require("path")),Ji=y(require("https")),Xi=y(he());async function du(e){let n=wt();if(!n)throw new Error("Service-principal credentials not available (PPDEVOPS_CLIENT_ID / PPDEVOPS_CLIENT_SECRET / PPDEVOPS_TENANT_ID).");return Et(e,n)}function Zi(e,n,t,r){return new Promise((i,o)=>{let s=r?JSON.stringify(r):void 0,a=new URL(n),l={hostname:a.hostname,path:a.pathname+a.search,method:e,headers:{Authorization:`Bearer ${t}`,"OData-MaxVersion":"4.0","OData-Version":"4.0","Content-Type":"application/json",Accept:"application/json",...s?{"Content-Length":Buffer.byteLength(s)}:{}}},c=Ji.request(l,u=>{let p="";u.on("data",d=>{p+=d}),u.on("end",()=>{if((u.statusCode??0)>=400)o(new Error(`HTTP ${u.statusCode}: ${p}`));else try{i(p?JSON.parse(p):null)}catch{i(p)}})});c.on("error",o),s&&c.write(s),c.end()})}async function mu(e,n,t,r){let i=e.replace(/\/$/,"");await Zi("PATCH",`${i}/api/data/v9.2/workflows(${t})`,n,{statecode:r?1:2,statuscode:r?2:1})}async function hu(e,n,t){let r=e.replace(/\/$/,"");return(await Zi("GET",`${r}/api/data/v9.2/workflows?$filter=name eq '${encodeURIComponent(t)}'&$select=workflowid,name,statecode`,n))?.value?.[0]?.workflowid??null}async function Qi(e,n,t,r){let i=(0,Xi.isTrue)(t.FailonError),o=t.OverrideFile?Hn.resolve(n,t.OverrideFile):Hn.join(n,"Flows_Default.json");if(!jn.existsSync(o))return{status:"skipped",message:`Flow override file not found: ${o} \u2014 skipping.`};let s;try{s=JSON.parse(jn.readFileSync(o,"utf-8"))}catch(p){let d=`Failed to parse flow override file: ${p instanceof Error?p.message:String(p)}`;return i?{status:"error",message:d}:{status:"skipped",message:`${d} \u2014 skipping flow activation.`}}let a;try{a=await du(e)}catch(p){let d=`Could not get access token: ${p instanceof Error?p.message:String(p)}`;return i?{status:"error",message:d}:{status:"skipped",message:`${d} \u2014 skipping flow activation.`}}let l=0,c=s.flows??[];for(let p of c)try{let d=await hu(e,a,p.flowName);if(!d){r(`[WARN] Flow not found: ${p.flowName}`);continue}await mu(e,a,d,p.activate),r(`${p.activate?"Activated":"Deactivated"}: ${p.flowName}`)}catch(d){r(`[WARN] Failed for ${p.flowName}: ${d instanceof Error?d.message:String(d)}`),l++}let u=`Flow activation complete (${l} error(s)).`;return l>0&&i?{status:"error",message:u}:{status:"done",message:u,metrics:{processed:c.length,errors:l}}}var Bt=y(require("fs")),eo=y(require("path"));async function no(e){if(!Bt.existsSync(e.zip))throw new Error(`Solution zip not found: ${e.zip}`);let n=e.target.OverwriteUnmanagedCustomisations?.toLowerCase()!=="false",t=M("solution import")+` --path "${e.zip}" --environment "${e.environmentUrl}" --activate-plugins --async`+(e.importMode==="holding-then-upgrade"?" --import-as-holding":"")+(e.importMode==="stage-and-upgrade"?" --stage-and-upgrade":"")+(n?" --force-overwrite":"");e.deploymentSettingsPath&&Bt.existsSync(e.deploymentSettingsPath)?(t+=` --settings-file "${e.deploymentSettingsPath}"`,e.log(`Using deployment settings: ${eo.basename(e.deploymentSettingsPath)}`)):e.target.SettingsFile&&e.log(`[WARN] SettingsFile "${e.target.SettingsFile}" specified but not found \u2014 connection refs may need manual setup.`),await _e(t,{log:e.log})}async function to(e,n,t){await _e(M(`solution upgrade --solution-name "${n}" --environment "${e}" --async`),{log:t})}var Un=y(require("fs")),ro=y(require("path"));async function io(e,n,t,r,i){Un.mkdirSync(t,{recursive:!0});let o=ro.join(t,r==="Unmanaged"?`${n}.zip`:`${n}_managed.zip`);if(await _e(M(`solution pack --folder "${e}" --zipfile "${o}" --packagetype ${r}`),{log:i}),!Un.existsSync(o))throw new Error(`pac solution pack completed but the zip was not created: ${o}`);return i(`${r} zip: ${o}`),o}var je=e=>({status:"error",message:e instanceof Error?e.message:String(e)});function so(e){let n=e.env.EnvironmentURL,t,r=s=>{let a=e.input.solutions.find(l=>l.name===s.name);if(!a)throw new Error(`No plan input for ${s.name}`);return a},i=s=>s.kind==="patch"?G.join(e.projectPath,s.root.name,`pac_${s.name}`,"src"):G.join(e.projectPath,s.root.name,"src"),o=s=>G.join(e.projectPath,s.name);return{async auth(s){try{return t=await Wi({...e.creds,environmentUrl:n,profileName:e.profileName},s.log),await Yi({...e.creds,environmentUrl:n},s.log),{status:"done",message:`PAC auth configured for ${n}`}}catch(a){return je(a)}},async teardown(){t&&Gi(t),zi()},async envAction(){return{status:"skipped",message:"legacy $Conn functions require migration"}},async checkSource(s){let a=i(s);return tn.existsSync(G.join(a,"Other","Customizations.xml"))?{status:"done",message:`Source verified at ${a}`}:{status:"error",message:`Unpacked source not found at ${a} \u2014 run Export & Unpack first.`}},async pack(s,a){let l=G.join(oo.tmpdir(),`ppdevops-${s.name}-${Date.now()}`);try{let c=await io(i(s),s.name,l,s.deploymentType,a.log);return{status:"done",message:`Packed to ${l}`,artifact:{zip:c,outputDir:l}}}catch(c){try{tn.rmSync(l,{recursive:!0,force:!0})}catch{}return je(c)}},async import(s,a,l){if(!a)return{status:"error",message:"Nothing was packed."};let c=r(s.root).target;try{return await no({environmentUrl:n,zip:a.zip,solutionName:s.name,importMode:s.importMode,target:c,deploymentSettingsPath:s.kind==="solution"&&c.SettingsFile?G.resolve(o(s.root),c.SettingsFile):void 0,log:l.log}),{status:"done",message:s.importMode==="stage-and-upgrade"?`${s.name} imported and upgraded (applied atomically via --stage-and-upgrade).`:`${s.name} imported.`}}catch(u){return je(u)}},async upgrade(s,a){try{return await to(n,s.name,a.log),{status:"done",message:`${s.name} upgraded.`}}catch(l){return je(l)}},async data(s,a){try{return await Ki(n,G.join(e.projectPath,s.name,"src"),a.log)}catch(l){return je(l)}},async flows(s,a){let l=r(s).target.Flows;if(!l)return{status:"skipped",message:"Flow activation not configured for this target."};try{return await Qi(n,o(s),l,a.log)}catch(c){return je(c)}},async actionStep(s,a){let l=r(s),c=(a.step.phase==="prepack"?l.prePackAction:a.step.phase==="pre"?l.preAction:a.step.phase==="post"?l.postAction:l.cleanupAction)??null;return Ri(c,a.step.name,{envUrl:n,envName:e.env.EnvironmentName,projectPath:e.projectPath,projectName:G.basename(e.projectPath),solutionName:s.name,solutionDir:G.join(e.projectPath,s.name,"src"),scriptsDir:o(s),legacyArgs:a.step.phase==="cleanup"?[]:["-EnvironmentName",e.env.EnvironmentName,"-Path",e.projectPath],log:a.log})},async discardArtifact(s,a){try{tn.rmSync(a.outputDir,{recursive:!0,force:!0})}catch{}}}}var z=y(he());function gu(e,n){let t=e.clientId??process.env.PPDEVOPS_CLIENT_ID,r=e.clientSecret??process.env.PPDEVOPS_CLIENT_SECRET,i=e.tenantId??process.env.PPDEVOPS_TENANT_ID;if((!t||!r||!i)&&fe.existsSync(n))try{let o=JSON.parse(fe.readFileSync(n,"utf-8"));t??=o.ClientID??o.clientId,i??=o.TenantID??o.tenantId}catch{}return(!t||!r||!i)&&F("Missing credentials. Provide --client-id, --client-secret, --tenant-id or set PPDEVOPS_CLIENT_ID / PPDEVOPS_CLIENT_SECRET / PPDEVOPS_TENANT_ID."),{clientId:t,clientSecret:r,tenantId:i}}function vu(e){let t=fe.readdirSync(e).filter(r=>r.endsWith(".json")&&r!=="package.json").find(r=>!["deployPackages","Environments","tsconfig","package-lock"].some(i=>r.startsWith(i)));return qn.join(e,t??"")}function _u(e){try{return JSON.parse(fe.readFileSync(e,"utf-8"))}catch(n){return F(`Could not read plan file ${e}: ${n instanceof Error?n.message:String(n)}`)}}var ao=new xe("deploy").description("Deploy one or more Power Platform solutions to a target environment").requiredOption("-p, --project <path>","Path to the project root (contains deployPackages.json)").requiredOption("-e, --environment <name>","Target environment name (from Environments.json)").option("-s, --solutions <names>","Comma-separated solution names to deploy (default: all)").option("--plan <file>","Reviewed plan document to validate against before deploying (or PPDEVOPS_PLAN_FILE)").option("--client-id <id>","Service principal client ID").option("--client-secret <secret>","Service principal client secret").option("--tenant-id <id>","Azure tenant ID").option("--profile-name <name>","PAC auth profile name (default: ppdo-cli)").option("--json","Output structured JSON events (for CI/Studio integration)",!1).option("--dry-run","Check, pack and run actions only \u2014 do not import",!1).action(async e=>{vn(e.json?"events":"human");let n=qn.resolve(e.project);fe.existsSync(n)||F(`Project path not found: ${n}`);let{deployPackages:t,environments:r}=Sn(n),i=wn(r,e.environment),s=En(t,e.solutions?e.solutions.split(",").map(l=>l.trim()):null).filter(l=>l.DeployTo?.some(c=>c.EnvironmentName.toLowerCase()===i.EnvironmentName.toLowerCase()&&(0,z.isTrue)(c.Deploy)));if(s.length===0){_n(`No solutions are configured to deploy to "${e.environment}". Nothing to do.`),Ie(0);return}let a=gu(e,vu(n));process.env.PPDEVOPS_CLIENT_ID??=a.clientId,process.env.PPDEVOPS_CLIENT_SECRET??=a.clientSecret,process.env.PPDEVOPS_TENANT_ID??=a.tenantId;try{ke(`Deploying ${s.length} solution(s) to ${i.EnvironmentName} (${i.EnvironmentURL})`);let l=await bn(i.EnvironmentURL);ke(`Fetched ${l.length} solution(s) via Dataverse Web API.`);let c=Vn(n,i,s,l),u=(0,z.resolvePlan)(c),p=e.plan??process.env.PPDEVOPS_PLAN_FILE;if(p){let f=(0,z.validatePlan)(_u(p),u);if(!f.ok){Nr(f),process.exitCode=2;return}ke(`Plan ${u.fingerprint} is current (generated ${f.submittedGeneratedAt}).`)}gn(["",...(0,z.renderPlanText)(u)]);let d=(0,z.createCancelToken)();process.once("SIGINT",()=>d.cancel());let m=await(0,z.executePlan)(u,so({projectPath:n,env:i,input:c,creds:a,profileName:e.profileName??"ppdo-cli"}),jr(),{dryRun:e.dryRun,cancel:d});Ie(m.exitCode),process.exitCode=m.exitCode}catch(l){let c=l instanceof Error?l.message:String(l);kr(c),yn(1,c),Ie(1),process.exitCode=1}});var He=y(he()),lo=y(require("path")),uo=y(require("fs")),co=new xe("plan").description("Dry-run pre-flight: report what a deployment will do without changing anything").requiredOption("-p, --project <path>","Path to the project root (contains deployPackages.json)").requiredOption("-e, --environment <name>","Target environment name (from Environments.json)").option("-s, --solutions <names>","Comma-separated solution names to plan (default: all)").option("--client-id <id>","Service principal client ID").option("--client-secret <secret>","Service principal client secret").option("--tenant-id <id>","Azure tenant ID").option("--json","Print the plan as JSON (Run Event NDJSON when PPDEVOPS_EVENTS_FILE is set)",!1).option("--format <fmt>","With --json and no events file: 'document' (default) or 'ndjson' on stdout","document").action(async e=>{vn(e.json?hn()||e.format==="ndjson"?"events":"document":"human");let n=lo.resolve(e.project);uo.existsSync(n)||F(`Project path not found: ${n}`);let{deployPackages:t,environments:r}=Sn(n),i=wn(r,e.environment),s=En(t,e.solutions?e.solutions.split(",").map(a=>a.trim()):null).filter(a=>a.DeployTo?.some(l=>l.EnvironmentName.toLowerCase()===i.EnvironmentName.toLowerCase()&&(0,He.isTrue)(l.Deploy)));Rr(i.EnvironmentName,i.EnvironmentURL);try{let a=await bn(i.EnvironmentURL),l=(0,He.resolvePlan)(Vn(n,i,s,a));for(let c of l.solutions)Lr(c);Mr(l),gn(["",...(0,He.renderPlanText)(l)]),Pr(l),Ie(0)}catch(a){let l=a instanceof Error?a.message:String(a);F(l)}});var Bn=new xe;Bn.name("ppdevops").description("Power Platform DevOps Studio CLI \u2014 cross-platform solution deployment runner").version(Fn());Bn.addCommand(ao);Bn.addCommand(co);Bn.parseAsync(process.argv).catch(e=>{console.error("Fatal error:",e instanceof Error?e.message:String(e)),process.exit(1)});
|
|
68
69
|
/*! Bundled license information:
|
|
69
70
|
|
|
70
71
|
js-yaml/dist/js-yaml.mjs:
|