@powerlines/plugin-pulumi 0.6.26 → 0.6.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +64 -3
- package/dist/index.d.cts +23 -13
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +23 -13
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +61 -2
- package/dist/index.mjs.map +1 -0
- package/package.json +7 -7
- package/dist/plugin.cjs +0 -63
- package/dist/plugin.d.cts +0 -17
- package/dist/plugin.d.cts.map +0 -1
- package/dist/plugin.d.mts +0 -17
- package/dist/plugin.d.mts.map +0 -1
- package/dist/plugin.mjs +0 -62
- package/dist/plugin.mjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,65 @@
|
|
|
1
|
-
Object.
|
|
2
|
-
const
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
let _pulumi_pulumi_automation_index_js = require("@pulumi/pulumi/automation/index.js");
|
|
4
|
+
let _stryke_string_format_kebab_case = require("@stryke/string-format/kebab-case");
|
|
5
|
+
let defu = require("defu");
|
|
6
|
+
defu = require_runtime.__toESM(defu);
|
|
7
|
+
let powerlines_plugin_utils = require("powerlines/plugin-utils");
|
|
3
8
|
|
|
4
|
-
|
|
9
|
+
//#region src/index.ts
|
|
10
|
+
/**
|
|
11
|
+
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.pulumi.com
|
|
14
|
+
*
|
|
15
|
+
* @param options - The Pulumi plugin user configuration options.
|
|
16
|
+
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
17
|
+
*/
|
|
18
|
+
const plugin = (options = {}) => {
|
|
19
|
+
return [{
|
|
20
|
+
name: "pulumi",
|
|
21
|
+
async config() {
|
|
22
|
+
return { deploy: { pulumi: (0, defu.default)(options, {
|
|
23
|
+
projectName: this.config.name,
|
|
24
|
+
settings: {}
|
|
25
|
+
}) } };
|
|
26
|
+
},
|
|
27
|
+
async configResolved() {
|
|
28
|
+
const organizationName = (0, _stryke_string_format_kebab_case.kebabCase)((0, powerlines_plugin_utils.getOrganizationName)(this));
|
|
29
|
+
const workspaceName = (0, _stryke_string_format_kebab_case.kebabCase)((0, powerlines_plugin_utils.getWorkspaceName)(this));
|
|
30
|
+
const projectName = (0, _stryke_string_format_kebab_case.kebabCase)(this.config.name);
|
|
31
|
+
this.config.pulumi.stackName ??= (0, _pulumi_pulumi_automation_index_js.fullyQualifiedStackName)(organizationName || workspaceName || projectName, `${workspaceName && workspaceName !== organizationName && workspaceName !== projectName ? `${workspaceName}-` : ""}${projectName}`, this.config.mode);
|
|
32
|
+
},
|
|
33
|
+
async deploy() {
|
|
34
|
+
this.info(`Creating resources for Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
35
|
+
this.pulumi ??= await _pulumi_pulumi_automation_index_js.LocalWorkspace.createOrSelectStack({
|
|
36
|
+
...this.config.pulumi,
|
|
37
|
+
program: async () => {
|
|
38
|
+
this.debug("Executing Pulumi program to define infrastructure resources.");
|
|
39
|
+
await this.$$internal.callHook("pulumi:deploy", {
|
|
40
|
+
sequential: true,
|
|
41
|
+
result: "merge"
|
|
42
|
+
}, {});
|
|
43
|
+
this.debug("Pulumi program execution completed. Resources have been defined.");
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
await this.pulumi.workspace.installPlugin("terraform-provider", "v1.0.2");
|
|
47
|
+
if (this.config.pulumi.stackSettings && Object.keys(this.config.pulumi.stackSettings).length > 0) await this.pulumi.workspace.saveStackSettings(this.pulumi.name, this.config.pulumi.stackSettings);
|
|
48
|
+
await this.pulumi.workspace.saveProjectSettings((0, defu.default)(this.config.pulumi.projectSettings ?? {}, {
|
|
49
|
+
name: this.config.name,
|
|
50
|
+
runtime: { name: "nodejs" },
|
|
51
|
+
description: this.config.description,
|
|
52
|
+
author: this.config.organization
|
|
53
|
+
}));
|
|
54
|
+
this.info(`Deploying Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
55
|
+
await this.pulumi.refresh({ onOutput: this.debug.bind(this) });
|
|
56
|
+
if (this.config.pulumi.destroy) await this.pulumi.destroy({ onOutput: this.debug.bind(this) });
|
|
57
|
+
const result = await this.pulumi.up({ onOutput: this.debug.bind(this) });
|
|
58
|
+
this.info(`Successfully deployed ${this.pulumi.name} (v${result.summary.version}): ${result.summary.message}`);
|
|
59
|
+
}
|
|
60
|
+
}];
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
exports.default = plugin;
|
|
65
|
+
exports.plugin = plugin;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
import { PulumiPluginContext, PulumiPluginOptions, PulumiPluginResolvedConfig, PulumiPluginUserConfig, __ΩPulumiPluginContext, __ΩPulumiPluginOptions, __ΩPulumiPluginResolvedConfig, __ΩPulumiPluginUserConfig } from "./types/plugin.cjs";
|
|
2
2
|
import { DeployPulumiResult, PulumiOutputRecord, __ΩDeployPulumiResult, __ΩPulumiOutputRecord } from "./types/pulumi.cjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { PluginContext } from "powerlines";
|
|
3
|
+
import { MaybePromise } from "@stryke/types/base";
|
|
4
|
+
import { Plugin, PluginContext } from "powerlines";
|
|
6
5
|
|
|
7
6
|
//#region src/index.d.ts
|
|
8
7
|
declare module "powerlines" {
|
|
9
8
|
interface Config {
|
|
10
9
|
pulumi?: PulumiPluginOptions;
|
|
11
10
|
}
|
|
12
|
-
interface
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
interface BasePlugin<TContext extends PluginContext> {
|
|
12
|
+
pulumi?: {
|
|
13
|
+
/**
|
|
14
|
+
* A hook that can be implemented to deploy Pulumi resources after the main build process. This allows you to define and manage your infrastructure as code using Pulumi, directly from your Powerlines plugin.
|
|
15
|
+
*
|
|
16
|
+
* @param this - The plugin context.
|
|
17
|
+
* @param resources - An object containing the Pulumi resources' outputs that were added in earlier hook invocations.
|
|
18
|
+
* @returns Optionally, the resources' outputs that were added during the Pulumi deployment that will be passed to the next hook invocation.
|
|
19
|
+
*/
|
|
20
|
+
deploy?: (this: TContext, resources?: PulumiOutputRecord) => MaybePromise<DeployPulumiResult>;
|
|
21
|
+
};
|
|
21
22
|
}
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
26
|
+
*
|
|
27
|
+
* @see https://www.pulumi.com
|
|
28
|
+
*
|
|
29
|
+
* @param options - The Pulumi plugin user configuration options.
|
|
30
|
+
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
31
|
+
*/
|
|
32
|
+
declare const plugin: <TContext extends PulumiPluginContext = PulumiPluginContext>(options?: PulumiPluginOptions) => Plugin<TContext>[];
|
|
23
33
|
//#endregion
|
|
24
|
-
export { DeployPulumiResult, PulumiOutputRecord, PulumiPluginContext, PulumiPluginOptions, PulumiPluginResolvedConfig, PulumiPluginUserConfig, __ΩDeployPulumiResult, __ΩPulumiOutputRecord, __ΩPulumiPluginContext, __ΩPulumiPluginOptions, __ΩPulumiPluginResolvedConfig, __ΩPulumiPluginUserConfig, plugin };
|
|
34
|
+
export { DeployPulumiResult, PulumiOutputRecord, PulumiPluginContext, PulumiPluginOptions, PulumiPluginResolvedConfig, PulumiPluginUserConfig, __ΩDeployPulumiResult, __ΩPulumiOutputRecord, __ΩPulumiPluginContext, __ΩPulumiPluginOptions, __ΩPulumiPluginResolvedConfig, __ΩPulumiPluginUserConfig, plugin as default, plugin };
|
|
25
35
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;YAmCY,MAAA;IACR,MAAA,GAAS,mBAAA;EAAA;EAAA,UAGD,UAAA,kBAA4B,aAAA;IACpC,MAAA;MADoC;;;;;;;MASlC,MAAA,IACE,IAAA,EAAM,QAAA,EACN,SAAA,GAAY,kBAAA,KACT,YAAA,CAAa,kBAAA;IAAA;EAAA;AAAA;;;;;;;;;cAaX,MAAA,oBACM,mBAAA,GAAsB,mBAAA,EAEvC,OAAA,GAAS,mBAAA,KACR,MAAA,CAAO,QAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
import { PulumiPluginContext, PulumiPluginOptions, PulumiPluginResolvedConfig, PulumiPluginUserConfig, __ΩPulumiPluginContext, __ΩPulumiPluginOptions, __ΩPulumiPluginResolvedConfig, __ΩPulumiPluginUserConfig } from "./types/plugin.mjs";
|
|
2
2
|
import { DeployPulumiResult, PulumiOutputRecord, __ΩDeployPulumiResult, __ΩPulumiOutputRecord } from "./types/pulumi.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { PluginContext } from "powerlines";
|
|
3
|
+
import { MaybePromise } from "@stryke/types/base";
|
|
4
|
+
import { Plugin, PluginContext } from "powerlines";
|
|
6
5
|
|
|
7
6
|
//#region src/index.d.ts
|
|
8
7
|
declare module "powerlines" {
|
|
9
8
|
interface Config {
|
|
10
9
|
pulumi?: PulumiPluginOptions;
|
|
11
10
|
}
|
|
12
|
-
interface
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
interface BasePlugin<TContext extends PluginContext> {
|
|
12
|
+
pulumi?: {
|
|
13
|
+
/**
|
|
14
|
+
* A hook that can be implemented to deploy Pulumi resources after the main build process. This allows you to define and manage your infrastructure as code using Pulumi, directly from your Powerlines plugin.
|
|
15
|
+
*
|
|
16
|
+
* @param this - The plugin context.
|
|
17
|
+
* @param resources - An object containing the Pulumi resources' outputs that were added in earlier hook invocations.
|
|
18
|
+
* @returns Optionally, the resources' outputs that were added during the Pulumi deployment that will be passed to the next hook invocation.
|
|
19
|
+
*/
|
|
20
|
+
deploy?: (this: TContext, resources?: PulumiOutputRecord) => MaybePromise<DeployPulumiResult>;
|
|
21
|
+
};
|
|
21
22
|
}
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
26
|
+
*
|
|
27
|
+
* @see https://www.pulumi.com
|
|
28
|
+
*
|
|
29
|
+
* @param options - The Pulumi plugin user configuration options.
|
|
30
|
+
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
31
|
+
*/
|
|
32
|
+
declare const plugin: <TContext extends PulumiPluginContext = PulumiPluginContext>(options?: PulumiPluginOptions) => Plugin<TContext>[];
|
|
23
33
|
//#endregion
|
|
24
|
-
export { DeployPulumiResult, PulumiOutputRecord, PulumiPluginContext, PulumiPluginOptions, PulumiPluginResolvedConfig, PulumiPluginUserConfig, __ΩDeployPulumiResult, __ΩPulumiOutputRecord, __ΩPulumiPluginContext, __ΩPulumiPluginOptions, __ΩPulumiPluginResolvedConfig, __ΩPulumiPluginUserConfig, plugin };
|
|
34
|
+
export { DeployPulumiResult, PulumiOutputRecord, PulumiPluginContext, PulumiPluginOptions, PulumiPluginResolvedConfig, PulumiPluginUserConfig, __ΩDeployPulumiResult, __ΩPulumiOutputRecord, __ΩPulumiPluginContext, __ΩPulumiPluginOptions, __ΩPulumiPluginResolvedConfig, __ΩPulumiPluginUserConfig, plugin as default, plugin };
|
|
25
35
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;YAmCY,MAAA;IACR,MAAA,GAAS,mBAAA;EAAA;EAAA,UAGD,UAAA,kBAA4B,aAAA;IACpC,MAAA;MADoC;;;;;;;MASlC,MAAA,IACE,IAAA,EAAM,QAAA,EACN,SAAA,GAAY,kBAAA,KACT,YAAA,CAAa,kBAAA;IAAA;EAAA;AAAA;;;;;;;;;cAaX,MAAA,oBACM,mBAAA,GAAsB,mBAAA,EAEvC,OAAA,GAAS,mBAAA,KACR,MAAA,CAAO,QAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,62 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { LocalWorkspace, fullyQualifiedStackName } from "@pulumi/pulumi/automation/index.js";
|
|
2
|
+
import { kebabCase } from "@stryke/string-format/kebab-case";
|
|
3
|
+
import defu from "defu";
|
|
4
|
+
import { getOrganizationName, getWorkspaceName } from "powerlines/plugin-utils";
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
//#region src/index.ts
|
|
7
|
+
/**
|
|
8
|
+
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
9
|
+
*
|
|
10
|
+
* @see https://www.pulumi.com
|
|
11
|
+
*
|
|
12
|
+
* @param options - The Pulumi plugin user configuration options.
|
|
13
|
+
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
14
|
+
*/
|
|
15
|
+
const plugin = (options = {}) => {
|
|
16
|
+
return [{
|
|
17
|
+
name: "pulumi",
|
|
18
|
+
async config() {
|
|
19
|
+
return { deploy: { pulumi: defu(options, {
|
|
20
|
+
projectName: this.config.name,
|
|
21
|
+
settings: {}
|
|
22
|
+
}) } };
|
|
23
|
+
},
|
|
24
|
+
async configResolved() {
|
|
25
|
+
const organizationName = kebabCase(getOrganizationName(this));
|
|
26
|
+
const workspaceName = kebabCase(getWorkspaceName(this));
|
|
27
|
+
const projectName = kebabCase(this.config.name);
|
|
28
|
+
this.config.pulumi.stackName ??= fullyQualifiedStackName(organizationName || workspaceName || projectName, `${workspaceName && workspaceName !== organizationName && workspaceName !== projectName ? `${workspaceName}-` : ""}${projectName}`, this.config.mode);
|
|
29
|
+
},
|
|
30
|
+
async deploy() {
|
|
31
|
+
this.info(`Creating resources for Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
32
|
+
this.pulumi ??= await LocalWorkspace.createOrSelectStack({
|
|
33
|
+
...this.config.pulumi,
|
|
34
|
+
program: async () => {
|
|
35
|
+
this.debug("Executing Pulumi program to define infrastructure resources.");
|
|
36
|
+
await this.$$internal.callHook("pulumi:deploy", {
|
|
37
|
+
sequential: true,
|
|
38
|
+
result: "merge"
|
|
39
|
+
}, {});
|
|
40
|
+
this.debug("Pulumi program execution completed. Resources have been defined.");
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
await this.pulumi.workspace.installPlugin("terraform-provider", "v1.0.2");
|
|
44
|
+
if (this.config.pulumi.stackSettings && Object.keys(this.config.pulumi.stackSettings).length > 0) await this.pulumi.workspace.saveStackSettings(this.pulumi.name, this.config.pulumi.stackSettings);
|
|
45
|
+
await this.pulumi.workspace.saveProjectSettings(defu(this.config.pulumi.projectSettings ?? {}, {
|
|
46
|
+
name: this.config.name,
|
|
47
|
+
runtime: { name: "nodejs" },
|
|
48
|
+
description: this.config.description,
|
|
49
|
+
author: this.config.organization
|
|
50
|
+
}));
|
|
51
|
+
this.info(`Deploying Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
52
|
+
await this.pulumi.refresh({ onOutput: this.debug.bind(this) });
|
|
53
|
+
if (this.config.pulumi.destroy) await this.pulumi.destroy({ onOutput: this.debug.bind(this) });
|
|
54
|
+
const result = await this.pulumi.up({ onOutput: this.debug.bind(this) });
|
|
55
|
+
this.info(`Successfully deployed ${this.pulumi.name} (v${result.summary.version}): ${result.summary.message}`);
|
|
56
|
+
}
|
|
57
|
+
}];
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
export { plugin as default, plugin };
|
|
62
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport {\n fullyQualifiedStackName,\n LocalWorkspace,\n ProjectSettings\n} from \"@pulumi/pulumi/automation\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { MaybePromise } from \"@stryke/types/base\";\nimport defu from \"defu\";\nimport { Plugin, PluginContext } from \"powerlines\";\nimport { getOrganizationName, getWorkspaceName } from \"powerlines/plugin-utils\";\nimport { Unstable_PulumiPluginContext } from \"./types/_internal\";\nimport { PulumiPluginContext, PulumiPluginOptions } from \"./types/plugin\";\nimport { DeployPulumiResult, PulumiOutputRecord } from \"./types/pulumi\";\n\nexport type * from \"./types\";\n\ndeclare module \"powerlines\" {\n interface Config {\n pulumi?: PulumiPluginOptions;\n }\n\n interface BasePlugin<TContext extends PluginContext> {\n pulumi?: {\n /**\n * A hook that can be implemented to deploy Pulumi resources after the main build process. This allows you to define and manage your infrastructure as code using Pulumi, directly from your Powerlines plugin.\n *\n * @param this - The plugin context.\n * @param resources - An object containing the Pulumi resources' outputs that were added in earlier hook invocations.\n * @returns Optionally, the resources' outputs that were added during the Pulumi deployment that will be passed to the next hook invocation.\n */\n deploy?: (\n this: TContext,\n resources?: PulumiOutputRecord\n ) => MaybePromise<DeployPulumiResult>;\n };\n }\n}\n\n/**\n * A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.\n *\n * @see https://www.pulumi.com\n *\n * @param options - The Pulumi plugin user configuration options.\n * @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.\n */\nexport const plugin = <\n TContext extends PulumiPluginContext = PulumiPluginContext\n>(\n options: PulumiPluginOptions = {}\n): Plugin<TContext>[] => {\n return [\n {\n name: \"pulumi\",\n async config() {\n return {\n deploy: {\n pulumi: defu(options, {\n projectName: this.config.name,\n settings: {}\n })\n }\n };\n },\n async configResolved() {\n const organizationName = kebabCase(getOrganizationName(this));\n const workspaceName = kebabCase(getWorkspaceName(this));\n const projectName = kebabCase(this.config.name);\n\n this.config.pulumi.stackName ??= fullyQualifiedStackName(\n organizationName || workspaceName || projectName,\n `${\n workspaceName &&\n workspaceName !== organizationName &&\n workspaceName !== projectName\n ? `${workspaceName}-`\n : \"\"\n }${projectName}`,\n this.config.mode\n );\n },\n async deploy() {\n this.info(\n `Creating resources for Pulumi stack: ${this.config.pulumi.stackName}`\n );\n\n this.pulumi ??= await LocalWorkspace.createOrSelectStack({\n ...(this.config.pulumi as Parameters<\n typeof LocalWorkspace.createOrSelectStack\n >[0]),\n program: async () => {\n this.debug(\n \"Executing Pulumi program to define infrastructure resources.\"\n );\n\n const resources = {} as PulumiOutputRecord;\n await (\n this as unknown as Unstable_PulumiPluginContext\n ).$$internal.callHook(\n \"pulumi:deploy\",\n {\n sequential: true,\n result: \"merge\"\n },\n resources\n );\n\n this.debug(\n \"Pulumi program execution completed. Resources have been defined.\"\n );\n }\n });\n await this.pulumi.workspace.installPlugin(\n \"terraform-provider\",\n \"v1.0.2\"\n );\n\n if (\n this.config.pulumi.stackSettings &&\n Object.keys(this.config.pulumi.stackSettings).length > 0\n ) {\n await this.pulumi.workspace.saveStackSettings(\n this.pulumi.name,\n this.config.pulumi.stackSettings\n );\n }\n\n await this.pulumi.workspace.saveProjectSettings(\n defu(this.config.pulumi.projectSettings ?? {}, {\n name: this.config.name,\n runtime: { name: \"nodejs\" },\n description: this.config.description,\n author: this.config.organization\n }) as ProjectSettings\n );\n\n this.info(`Deploying Pulumi stack: ${this.config.pulumi.stackName}`);\n\n await this.pulumi.refresh({ onOutput: this.debug.bind(this) });\n\n if (this.config.pulumi.destroy) {\n await this.pulumi.destroy({\n onOutput: this.debug.bind(this)\n });\n }\n\n const result = await this.pulumi.up({\n onOutput: this.debug.bind(this)\n });\n\n this.info(\n `Successfully deployed ${this.pulumi.name} (v${\n result.summary.version\n }): ${result.summary.message}`\n );\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;AAgEA,MAAa,UAGX,UAA+B,EAAE,KACV;AACvB,QAAO,CACL;EACE,MAAM;EACN,MAAM,SAAS;AACb,UAAO,EACL,QAAQ,EACN,QAAQ,KAAK,SAAS;IACpB,aAAa,KAAK,OAAO;IACzB,UAAU,EAAE;IACb,CAAC,EACH,EACF;;EAEH,MAAM,iBAAiB;GACrB,MAAM,mBAAmB,UAAU,oBAAoB,KAAK,CAAC;GAC7D,MAAM,gBAAgB,UAAU,iBAAiB,KAAK,CAAC;GACvD,MAAM,cAAc,UAAU,KAAK,OAAO,KAAK;AAE/C,QAAK,OAAO,OAAO,cAAc,wBAC/B,oBAAoB,iBAAiB,aACrC,GACE,iBACA,kBAAkB,oBAClB,kBAAkB,cACd,GAAG,cAAc,KACjB,KACH,eACH,KAAK,OAAO,KACb;;EAEH,MAAM,SAAS;AACb,QAAK,KACH,wCAAwC,KAAK,OAAO,OAAO,YAC5D;AAED,QAAK,WAAW,MAAM,eAAe,oBAAoB;IACvD,GAAI,KAAK,OAAO;IAGhB,SAAS,YAAY;AACnB,UAAK,MACH,+DACD;AAGD,WACE,KACA,WAAW,SACX,iBACA;MACE,YAAY;MACZ,QAAQ;MACT,EARe,EAAE,CAUnB;AAED,UAAK,MACH,mEACD;;IAEJ,CAAC;AACF,SAAM,KAAK,OAAO,UAAU,cAC1B,sBACA,SACD;AAED,OACE,KAAK,OAAO,OAAO,iBACnB,OAAO,KAAK,KAAK,OAAO,OAAO,cAAc,CAAC,SAAS,EAEvD,OAAM,KAAK,OAAO,UAAU,kBAC1B,KAAK,OAAO,MACZ,KAAK,OAAO,OAAO,cACpB;AAGH,SAAM,KAAK,OAAO,UAAU,oBAC1B,KAAK,KAAK,OAAO,OAAO,mBAAmB,EAAE,EAAE;IAC7C,MAAM,KAAK,OAAO;IAClB,SAAS,EAAE,MAAM,UAAU;IAC3B,aAAa,KAAK,OAAO;IACzB,QAAQ,KAAK,OAAO;IACrB,CAAC,CACH;AAED,QAAK,KAAK,2BAA2B,KAAK,OAAO,OAAO,YAAY;AAEpE,SAAM,KAAK,OAAO,QAAQ,EAAE,UAAU,KAAK,MAAM,KAAK,KAAK,EAAE,CAAC;AAE9D,OAAI,KAAK,OAAO,OAAO,QACrB,OAAM,KAAK,OAAO,QAAQ,EACxB,UAAU,KAAK,MAAM,KAAK,KAAK,EAChC,CAAC;GAGJ,MAAM,SAAS,MAAM,KAAK,OAAO,GAAG,EAClC,UAAU,KAAK,MAAM,KAAK,KAAK,EAChC,CAAC;AAEF,QAAK,KACH,yBAAyB,KAAK,OAAO,KAAK,KACxC,OAAO,QAAQ,QAChB,KAAK,OAAO,QAAQ,UACtB;;EAEJ,CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerlines/plugin-pulumi",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.28",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A Powerlines plugin to transform source code to be platform agnostic using pulumi.",
|
|
6
6
|
"keywords": ["pulumi", "powerlines", "storm-software", "powerlines-plugin"],
|
|
@@ -118,21 +118,21 @@
|
|
|
118
118
|
"typings": "dist/index.d.mts",
|
|
119
119
|
"files": ["dist/**/*"],
|
|
120
120
|
"dependencies": {
|
|
121
|
-
"@pulumi/pulumi": "^3.
|
|
121
|
+
"@pulumi/pulumi": "^3.229.0",
|
|
122
122
|
"@stryke/fs": "^0.33.64",
|
|
123
123
|
"@stryke/helpers": "^0.10.7",
|
|
124
124
|
"@stryke/path": "^0.27.3",
|
|
125
125
|
"@stryke/string-format": "^0.17.7",
|
|
126
126
|
"@stryke/type-checks": "^0.6.0",
|
|
127
127
|
"@stryke/types": "^0.11.2",
|
|
128
|
-
"defu": "^6.1.
|
|
129
|
-
"powerlines": "^0.42.
|
|
128
|
+
"defu": "^6.1.6",
|
|
129
|
+
"powerlines": "^0.42.28",
|
|
130
130
|
"typescript": "^5.9.3"
|
|
131
131
|
},
|
|
132
132
|
"devDependencies": {
|
|
133
|
-
"@powerlines/plugin-plugin": "^0.12.
|
|
134
|
-
"@types/node": "^25.5.
|
|
133
|
+
"@powerlines/plugin-plugin": "^0.12.338",
|
|
134
|
+
"@types/node": "^25.5.2"
|
|
135
135
|
},
|
|
136
136
|
"publishConfig": { "access": "public" },
|
|
137
|
-
"gitHead": "
|
|
137
|
+
"gitHead": "9e3382219bcbd57edea2a23e1e421a44b5acdd58"
|
|
138
138
|
}
|
package/dist/plugin.cjs
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
2
|
-
let _pulumi_pulumi_automation_index_js = require("@pulumi/pulumi/automation/index.js");
|
|
3
|
-
let _stryke_string_format_kebab_case = require("@stryke/string-format/kebab-case");
|
|
4
|
-
let defu = require("defu");
|
|
5
|
-
defu = require_runtime.__toESM(defu);
|
|
6
|
-
let powerlines_plugin_utils = require("powerlines/plugin-utils");
|
|
7
|
-
|
|
8
|
-
//#region src/plugin.ts
|
|
9
|
-
/**
|
|
10
|
-
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
11
|
-
*
|
|
12
|
-
* @see https://www.pulumi.com
|
|
13
|
-
*
|
|
14
|
-
* @param options - The Pulumi plugin user configuration options.
|
|
15
|
-
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
16
|
-
*/
|
|
17
|
-
const plugin = (options = {}) => {
|
|
18
|
-
return [{
|
|
19
|
-
name: "pulumi",
|
|
20
|
-
async config() {
|
|
21
|
-
return { deploy: { pulumi: (0, defu.default)(options, {
|
|
22
|
-
projectName: this.config.name,
|
|
23
|
-
settings: {}
|
|
24
|
-
}) } };
|
|
25
|
-
},
|
|
26
|
-
async configResolved() {
|
|
27
|
-
const organizationName = (0, _stryke_string_format_kebab_case.kebabCase)((0, powerlines_plugin_utils.getOrganizationName)(this));
|
|
28
|
-
const workspaceName = (0, _stryke_string_format_kebab_case.kebabCase)((0, powerlines_plugin_utils.getWorkspaceName)(this));
|
|
29
|
-
const projectName = (0, _stryke_string_format_kebab_case.kebabCase)(this.config.name);
|
|
30
|
-
this.config.pulumi.stackName ??= (0, _pulumi_pulumi_automation_index_js.fullyQualifiedStackName)(organizationName || workspaceName || projectName, `${workspaceName && workspaceName !== organizationName && workspaceName !== projectName ? `${workspaceName}-` : ""}${projectName}`, this.config.mode);
|
|
31
|
-
},
|
|
32
|
-
async deploy() {
|
|
33
|
-
this.info(`Creating resources for Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
34
|
-
this.pulumi ??= await _pulumi_pulumi_automation_index_js.LocalWorkspace.createOrSelectStack({
|
|
35
|
-
...this.config.pulumi,
|
|
36
|
-
program: async () => {
|
|
37
|
-
this.debug("Executing Pulumi program to define infrastructure resources.");
|
|
38
|
-
await this.$$internal.callHook("deployPulumi", {
|
|
39
|
-
sequential: true,
|
|
40
|
-
result: "merge"
|
|
41
|
-
});
|
|
42
|
-
this.debug("Pulumi program execution completed. Resources have been defined.");
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
await this.pulumi.workspace.installPlugin("terraform-provider", "v1.0.2");
|
|
46
|
-
if (this.config.pulumi.stackSettings && Object.keys(this.config.pulumi.stackSettings).length > 0) await this.pulumi.workspace.saveStackSettings(this.pulumi.name, this.config.pulumi.stackSettings);
|
|
47
|
-
await this.pulumi.workspace.saveProjectSettings((0, defu.default)(this.config.pulumi.projectSettings ?? {}, {
|
|
48
|
-
name: this.config.name,
|
|
49
|
-
runtime: { name: "nodejs" },
|
|
50
|
-
description: this.config.description,
|
|
51
|
-
author: this.config.organization
|
|
52
|
-
}));
|
|
53
|
-
this.info(`Deploying Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
54
|
-
await this.pulumi.refresh({ onOutput: this.debug.bind(this) });
|
|
55
|
-
if (this.config.pulumi.destroy) await this.pulumi.destroy({ onOutput: this.debug.bind(this) });
|
|
56
|
-
const result = await this.pulumi.up({ onOutput: this.debug.bind(this) });
|
|
57
|
-
this.info(`Successfully deployed ${this.pulumi.name} (v${result.summary.version}): ${result.summary.message}`);
|
|
58
|
-
}
|
|
59
|
-
}];
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
//#endregion
|
|
63
|
-
exports.default = plugin;
|
package/dist/plugin.d.cts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { PulumiPluginOptions } from "./types/plugin.cjs";
|
|
2
|
-
import { Unstable_PulumiPluginContext } from "./types/_internal.cjs";
|
|
3
|
-
import { Plugin } from "powerlines";
|
|
4
|
-
|
|
5
|
-
//#region src/plugin.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
8
|
-
*
|
|
9
|
-
* @see https://www.pulumi.com
|
|
10
|
-
*
|
|
11
|
-
* @param options - The Pulumi plugin user configuration options.
|
|
12
|
-
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
13
|
-
*/
|
|
14
|
-
declare const plugin: <TContext extends Unstable_PulumiPluginContext = Unstable_PulumiPluginContext>(options?: PulumiPluginOptions) => Plugin<TContext>[];
|
|
15
|
-
//#endregion
|
|
16
|
-
export { plugin };
|
|
17
|
-
//# sourceMappingURL=plugin.d.cts.map
|
package/dist/plugin.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.cts","names":[],"sources":["../src/plugin.ts"],"mappings":";;;;;;;AAsCA;;;;;;cAAa,MAAA,oBACM,4BAAA,GAA+B,4BAAA,EAEhD,OAAA,GAAS,mBAAA,KACR,MAAA,CAAO,QAAA"}
|
package/dist/plugin.d.mts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { PulumiPluginOptions } from "./types/plugin.mjs";
|
|
2
|
-
import { Unstable_PulumiPluginContext } from "./types/_internal.mjs";
|
|
3
|
-
import { Plugin } from "powerlines";
|
|
4
|
-
|
|
5
|
-
//#region src/plugin.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
8
|
-
*
|
|
9
|
-
* @see https://www.pulumi.com
|
|
10
|
-
*
|
|
11
|
-
* @param options - The Pulumi plugin user configuration options.
|
|
12
|
-
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
13
|
-
*/
|
|
14
|
-
declare const plugin: <TContext extends Unstable_PulumiPluginContext = Unstable_PulumiPluginContext>(options?: PulumiPluginOptions) => Plugin<TContext>[];
|
|
15
|
-
//#endregion
|
|
16
|
-
export { plugin };
|
|
17
|
-
//# sourceMappingURL=plugin.d.mts.map
|
package/dist/plugin.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.mts","names":[],"sources":["../src/plugin.ts"],"mappings":";;;;;;;AAsCA;;;;;;cAAa,MAAA,oBACM,4BAAA,GAA+B,4BAAA,EAEhD,OAAA,GAAS,mBAAA,KACR,MAAA,CAAO,QAAA"}
|
package/dist/plugin.mjs
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { LocalWorkspace, fullyQualifiedStackName } from "@pulumi/pulumi/automation/index.js";
|
|
2
|
-
import { kebabCase } from "@stryke/string-format/kebab-case";
|
|
3
|
-
import defu from "defu";
|
|
4
|
-
import { getOrganizationName, getWorkspaceName } from "powerlines/plugin-utils";
|
|
5
|
-
|
|
6
|
-
//#region src/plugin.ts
|
|
7
|
-
/**
|
|
8
|
-
* A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.
|
|
9
|
-
*
|
|
10
|
-
* @see https://www.pulumi.com
|
|
11
|
-
*
|
|
12
|
-
* @param options - The Pulumi plugin user configuration options.
|
|
13
|
-
* @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.
|
|
14
|
-
*/
|
|
15
|
-
const plugin = (options = {}) => {
|
|
16
|
-
return [{
|
|
17
|
-
name: "pulumi",
|
|
18
|
-
async config() {
|
|
19
|
-
return { deploy: { pulumi: defu(options, {
|
|
20
|
-
projectName: this.config.name,
|
|
21
|
-
settings: {}
|
|
22
|
-
}) } };
|
|
23
|
-
},
|
|
24
|
-
async configResolved() {
|
|
25
|
-
const organizationName = kebabCase(getOrganizationName(this));
|
|
26
|
-
const workspaceName = kebabCase(getWorkspaceName(this));
|
|
27
|
-
const projectName = kebabCase(this.config.name);
|
|
28
|
-
this.config.pulumi.stackName ??= fullyQualifiedStackName(organizationName || workspaceName || projectName, `${workspaceName && workspaceName !== organizationName && workspaceName !== projectName ? `${workspaceName}-` : ""}${projectName}`, this.config.mode);
|
|
29
|
-
},
|
|
30
|
-
async deploy() {
|
|
31
|
-
this.info(`Creating resources for Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
32
|
-
this.pulumi ??= await LocalWorkspace.createOrSelectStack({
|
|
33
|
-
...this.config.pulumi,
|
|
34
|
-
program: async () => {
|
|
35
|
-
this.debug("Executing Pulumi program to define infrastructure resources.");
|
|
36
|
-
await this.$$internal.callHook("deployPulumi", {
|
|
37
|
-
sequential: true,
|
|
38
|
-
result: "merge"
|
|
39
|
-
});
|
|
40
|
-
this.debug("Pulumi program execution completed. Resources have been defined.");
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
await this.pulumi.workspace.installPlugin("terraform-provider", "v1.0.2");
|
|
44
|
-
if (this.config.pulumi.stackSettings && Object.keys(this.config.pulumi.stackSettings).length > 0) await this.pulumi.workspace.saveStackSettings(this.pulumi.name, this.config.pulumi.stackSettings);
|
|
45
|
-
await this.pulumi.workspace.saveProjectSettings(defu(this.config.pulumi.projectSettings ?? {}, {
|
|
46
|
-
name: this.config.name,
|
|
47
|
-
runtime: { name: "nodejs" },
|
|
48
|
-
description: this.config.description,
|
|
49
|
-
author: this.config.organization
|
|
50
|
-
}));
|
|
51
|
-
this.info(`Deploying Pulumi stack: ${this.config.pulumi.stackName}`);
|
|
52
|
-
await this.pulumi.refresh({ onOutput: this.debug.bind(this) });
|
|
53
|
-
if (this.config.pulumi.destroy) await this.pulumi.destroy({ onOutput: this.debug.bind(this) });
|
|
54
|
-
const result = await this.pulumi.up({ onOutput: this.debug.bind(this) });
|
|
55
|
-
this.info(`Successfully deployed ${this.pulumi.name} (v${result.summary.version}): ${result.summary.message}`);
|
|
56
|
-
}
|
|
57
|
-
}];
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
//#endregion
|
|
61
|
-
export { plugin as default };
|
|
62
|
-
//# sourceMappingURL=plugin.mjs.map
|
package/dist/plugin.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.mjs","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport {\n fullyQualifiedStackName,\n LocalWorkspace,\n ProjectSettings\n} from \"@pulumi/pulumi/automation\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport defu from \"defu\";\nimport { Plugin } from \"powerlines\";\nimport { getOrganizationName, getWorkspaceName } from \"powerlines/plugin-utils\";\nimport { Unstable_PulumiPluginContext } from \"./types/_internal\";\nimport { PulumiPluginOptions } from \"./types/plugin\";\n\n/**\n * A package containing a Powerlines plugin to configure infrastructure and deploy a project using Pulumi IaC.\n *\n * @see https://www.pulumi.com\n *\n * @param options - The Pulumi plugin user configuration options.\n * @returns A Powerlines plugin to configure infrastructure and deploy a project using Pulumi.\n */\nexport const plugin = <\n TContext extends Unstable_PulumiPluginContext = Unstable_PulumiPluginContext\n>(\n options: PulumiPluginOptions = {}\n): Plugin<TContext>[] => {\n return [\n {\n name: \"pulumi\",\n async config() {\n return {\n deploy: {\n pulumi: defu(options, {\n projectName: this.config.name,\n settings: {}\n })\n }\n };\n },\n async configResolved() {\n const organizationName = kebabCase(getOrganizationName(this));\n const workspaceName = kebabCase(getWorkspaceName(this));\n const projectName = kebabCase(this.config.name);\n\n this.config.pulumi.stackName ??= fullyQualifiedStackName(\n organizationName || workspaceName || projectName,\n `${\n workspaceName &&\n workspaceName !== organizationName &&\n workspaceName !== projectName\n ? `${workspaceName}-`\n : \"\"\n }${projectName}`,\n this.config.mode\n );\n },\n async deploy() {\n this.info(\n `Creating resources for Pulumi stack: ${this.config.pulumi.stackName}`\n );\n\n this.pulumi ??= await LocalWorkspace.createOrSelectStack({\n ...(this.config.pulumi as Parameters<\n typeof LocalWorkspace.createOrSelectStack\n >[0]),\n program: async () => {\n this.debug(\n \"Executing Pulumi program to define infrastructure resources.\"\n );\n\n await this.$$internal.callHook(\"deployPulumi\", {\n sequential: true,\n result: \"merge\"\n });\n\n this.debug(\n \"Pulumi program execution completed. Resources have been defined.\"\n );\n }\n });\n await this.pulumi.workspace.installPlugin(\n \"terraform-provider\",\n \"v1.0.2\"\n );\n\n if (\n this.config.pulumi.stackSettings &&\n Object.keys(this.config.pulumi.stackSettings).length > 0\n ) {\n await this.pulumi.workspace.saveStackSettings(\n this.pulumi.name,\n this.config.pulumi.stackSettings\n );\n }\n\n await this.pulumi.workspace.saveProjectSettings(\n defu(this.config.pulumi.projectSettings ?? {}, {\n name: this.config.name,\n runtime: { name: \"nodejs\" },\n description: this.config.description,\n author: this.config.organization\n }) as ProjectSettings\n );\n\n this.info(`Deploying Pulumi stack: ${this.config.pulumi.stackName}`);\n\n await this.pulumi.refresh({ onOutput: this.debug.bind(this) });\n\n if (this.config.pulumi.destroy) {\n await this.pulumi.destroy({\n onOutput: this.debug.bind(this)\n });\n }\n\n const result = await this.pulumi.up({\n onOutput: this.debug.bind(this)\n });\n\n this.info(\n `Successfully deployed ${this.pulumi.name} (v${\n result.summary.version\n }): ${result.summary.message}`\n );\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;AAsCA,MAAa,UAGX,UAA+B,EAAE,KACV;AACvB,QAAO,CACL;EACE,MAAM;EACN,MAAM,SAAS;AACb,UAAO,EACL,QAAQ,EACN,QAAQ,KAAK,SAAS;IACpB,aAAa,KAAK,OAAO;IACzB,UAAU,EAAE;IACb,CAAC,EACH,EACF;;EAEH,MAAM,iBAAiB;GACrB,MAAM,mBAAmB,UAAU,oBAAoB,KAAK,CAAC;GAC7D,MAAM,gBAAgB,UAAU,iBAAiB,KAAK,CAAC;GACvD,MAAM,cAAc,UAAU,KAAK,OAAO,KAAK;AAE/C,QAAK,OAAO,OAAO,cAAc,wBAC/B,oBAAoB,iBAAiB,aACrC,GACE,iBACA,kBAAkB,oBAClB,kBAAkB,cACd,GAAG,cAAc,KACjB,KACH,eACH,KAAK,OAAO,KACb;;EAEH,MAAM,SAAS;AACb,QAAK,KACH,wCAAwC,KAAK,OAAO,OAAO,YAC5D;AAED,QAAK,WAAW,MAAM,eAAe,oBAAoB;IACvD,GAAI,KAAK,OAAO;IAGhB,SAAS,YAAY;AACnB,UAAK,MACH,+DACD;AAED,WAAM,KAAK,WAAW,SAAS,gBAAgB;MAC7C,YAAY;MACZ,QAAQ;MACT,CAAC;AAEF,UAAK,MACH,mEACD;;IAEJ,CAAC;AACF,SAAM,KAAK,OAAO,UAAU,cAC1B,sBACA,SACD;AAED,OACE,KAAK,OAAO,OAAO,iBACnB,OAAO,KAAK,KAAK,OAAO,OAAO,cAAc,CAAC,SAAS,EAEvD,OAAM,KAAK,OAAO,UAAU,kBAC1B,KAAK,OAAO,MACZ,KAAK,OAAO,OAAO,cACpB;AAGH,SAAM,KAAK,OAAO,UAAU,oBAC1B,KAAK,KAAK,OAAO,OAAO,mBAAmB,EAAE,EAAE;IAC7C,MAAM,KAAK,OAAO;IAClB,SAAS,EAAE,MAAM,UAAU;IAC3B,aAAa,KAAK,OAAO;IACzB,QAAQ,KAAK,OAAO;IACrB,CAAC,CACH;AAED,QAAK,KAAK,2BAA2B,KAAK,OAAO,OAAO,YAAY;AAEpE,SAAM,KAAK,OAAO,QAAQ,EAAE,UAAU,KAAK,MAAM,KAAK,KAAK,EAAE,CAAC;AAE9D,OAAI,KAAK,OAAO,OAAO,QACrB,OAAM,KAAK,OAAO,QAAQ,EACxB,UAAU,KAAK,MAAM,KAAK,KAAK,EAChC,CAAC;GAGJ,MAAM,SAAS,MAAM,KAAK,OAAO,GAAG,EAClC,UAAU,KAAK,MAAM,KAAK,KAAK,EAChC,CAAC;AAEF,QAAK,KACH,yBAAyB,KAAK,OAAO,KAAK,KACxC,OAAO,QAAQ,QAChB,KAAK,OAAO,QAAQ,UACtB;;EAEJ,CACF"}
|