@webiny/pulumi 6.3.0-beta.4 → 6.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,13 @@
1
- export class PulumiAppModuleDefinition {
2
- symbol = Symbol();
3
- constructor(params) {
4
- this.name = params.name;
5
- this.run = params.config;
6
- }
1
+ class PulumiAppModuleDefinition {
2
+ constructor(params){
3
+ this.symbol = Symbol();
4
+ this.name = params.name;
5
+ this.run = params.config;
6
+ }
7
7
  }
8
- export function createAppModule(params) {
9
- return new PulumiAppModuleDefinition(params);
8
+ function createAppModule(params) {
9
+ return new PulumiAppModuleDefinition(params);
10
10
  }
11
+ export { PulumiAppModuleDefinition, createAppModule };
11
12
 
12
13
  //# sourceMappingURL=PulumiAppModule.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PulumiAppModuleDefinition","symbol","Symbol","constructor","params","name","run","config","createAppModule"],"sources":["PulumiAppModule.ts"],"sourcesContent":["import type { PulumiApp } from \"./types.js\";\n\nexport interface PulumiAppModuleCallback<TModule, TConfig> {\n (this: void, app: PulumiApp, config: TConfig): TModule;\n}\n\nexport interface PulumiAppModuleParams<TModule, TConfig> {\n name: string;\n config: PulumiAppModuleCallback<TModule, TConfig>;\n}\n\nexport type PulumiAppModule<T extends PulumiAppModuleDefinition<any, any>> =\n T extends PulumiAppModuleDefinition<infer V, any> ? V : never;\n\nexport class PulumiAppModuleDefinition<TModule, TConfig> {\n public readonly symbol = Symbol();\n public readonly name: string;\n public readonly run: PulumiAppModuleCallback<TModule, TConfig>;\n constructor(params: PulumiAppModuleParams<TModule, TConfig>) {\n this.name = params.name;\n this.run = params.config;\n }\n}\n\nexport function createAppModule<TModule, TConfig = void>(\n params: PulumiAppModuleParams<TModule, TConfig>\n) {\n return new PulumiAppModuleDefinition(params);\n}\n"],"mappings":"AAcA,OAAO,MAAMA,yBAAyB,CAAmB;EACrCC,MAAM,GAAGC,MAAM,CAAC,CAAC;EAGjCC,WAAWA,CAACC,MAA+C,EAAE;IACzD,IAAI,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI;IACvB,IAAI,CAACC,GAAG,GAAGF,MAAM,CAACG,MAAM;EAC5B;AACJ;AAEA,OAAO,SAASC,eAAeA,CAC3BJ,MAA+C,EACjD;EACE,OAAO,IAAIJ,yBAAyB,CAACI,MAAM,CAAC;AAChD","ignoreList":[]}
1
+ {"version":3,"file":"PulumiAppModule.js","sources":["../src/PulumiAppModule.ts"],"sourcesContent":["import type { PulumiApp } from \"./types.js\";\n\nexport interface PulumiAppModuleCallback<TModule, TConfig> {\n (this: void, app: PulumiApp, config: TConfig): TModule;\n}\n\nexport interface PulumiAppModuleParams<TModule, TConfig> {\n name: string;\n config: PulumiAppModuleCallback<TModule, TConfig>;\n}\n\nexport type PulumiAppModule<T extends PulumiAppModuleDefinition<any, any>> =\n T extends PulumiAppModuleDefinition<infer V, any> ? V : never;\n\nexport class PulumiAppModuleDefinition<TModule, TConfig> {\n public readonly symbol = Symbol();\n public readonly name: string;\n public readonly run: PulumiAppModuleCallback<TModule, TConfig>;\n constructor(params: PulumiAppModuleParams<TModule, TConfig>) {\n this.name = params.name;\n this.run = params.config;\n }\n}\n\nexport function createAppModule<TModule, TConfig = void>(\n params: PulumiAppModuleParams<TModule, TConfig>\n) {\n return new PulumiAppModuleDefinition(params);\n}\n"],"names":["PulumiAppModuleDefinition","params","Symbol","createAppModule"],"mappings":"AAcO,MAAMA;IAIT,YAAYC,MAA+C,CAAE;aAH7C,MAAM,GAAGC;QAIrB,IAAI,CAAC,IAAI,GAAGD,OAAO,IAAI;QACvB,IAAI,CAAC,GAAG,GAAGA,OAAO,MAAM;IAC5B;AACJ;AAEO,SAASE,gBACZF,MAA+C;IAE/C,OAAO,IAAID,0BAA0BC;AACzC"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=PulumiAppRemoteResource.js.map
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=PulumiAppResource.js.map
package/constants.js CHANGED
@@ -1,3 +1,7 @@
1
- export const DEFAULT_PROD_ENV_NAMES = ["prod", "production"];
1
+ const DEFAULT_PROD_ENV_NAMES = [
2
+ "prod",
3
+ "production"
4
+ ];
5
+ export { DEFAULT_PROD_ENV_NAMES };
2
6
 
3
7
  //# sourceMappingURL=constants.js.map
package/constants.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_PROD_ENV_NAMES"],"sources":["constants.ts"],"sourcesContent":["export const DEFAULT_PROD_ENV_NAMES = [\"prod\", \"production\"];\n"],"mappings":"AAAA,OAAO,MAAMA,sBAAsB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const DEFAULT_PROD_ENV_NAMES = [\"prod\", \"production\"];\n"],"names":["DEFAULT_PROD_ENV_NAMES"],"mappings":"AAAO,MAAMA,yBAAyB;IAAC;IAAQ;CAAa"}
@@ -1,202 +1,144 @@
1
1
  import { findUpSync } from "find-up";
2
2
  import path from "path";
3
- import * as pulumi from "@pulumi/pulumi";
4
3
  import cloneDeep from "lodash/cloneDeep.js";
5
4
  import { DEFAULT_PROD_ENV_NAMES } from "./constants.js";
6
- export function createPulumiApp(params) {
7
- let projectRootPath = findUpSync("webiny.config.tsx");
8
- if (projectRootPath) {
9
- projectRootPath = path.dirname(projectRootPath).replace(/\\/g, "/");
10
- } else {
11
- throw new Error("Couldn't detect Webiny project.");
12
- }
13
- const appRelativePath = params.path;
14
- const appRootPath = path.join(projectRootPath, appRelativePath);
15
- const projectAppWorkspacePath = path.join(projectRootPath, ".webiny", "workspace", appRelativePath);
16
- const programDecorators = [];
17
- const app = {
18
- resourceHandlers: [],
19
- handlers: [],
20
- outputs: {},
21
- modules: new Map(),
22
- paths: {
23
- absolute: appRootPath,
24
- relative: appRelativePath,
25
- workspace: projectAppWorkspacePath
26
- },
27
- resources: {},
28
- name: params.name,
29
- program: params.program,
30
- params: {
31
- create: params.config || {},
32
- run: {
33
- env: "",
34
- variant: ""
35
- }
36
- },
37
- env: {
38
- name: "",
39
- isProduction: false
40
- },
41
- decorateProgram: cb => {
42
- programDecorators.push(cb);
43
- },
44
- async run(config) {
45
- app.params.run = config;
46
-
47
- // Add environment-related variables.
48
- const productionEnvironments = app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;
49
- const isProduction = productionEnvironments.includes(app.params.run.env);
50
- app.env = {
51
- name: app.params.run.env,
52
- isProduction
53
- };
54
- const programOutput = programDecorators.reduce((program, decorator) => {
55
- return app => decorator(program, app);
56
- }, input => app.program(input));
57
- Object.assign(app.resources, await programOutput(app));
58
- for (const handler of app.handlers) {
59
- await handler();
60
- }
61
- app.params.run = {
62
- env: "",
63
- variant: ""
64
- };
65
- return app.outputs;
66
- },
67
- onResource(handler) {
68
- app.resourceHandlers.push(handler);
69
- },
70
- /**
71
- * Adds a resource to pulumi app.
72
- * It's not running the script immediately, but enqueues the call.
73
- * This way we are still able to modify the config of the resource.
74
- * @param resourceConstructor Resource to be added, ie aws.s3.Bucket
75
- * @param params Parameters to configure the resource
76
- * @returns Object giving access to both resource outputs and its config.
77
- */
78
- addResource(resourceConstructor, params) {
79
- const config = params.config ?? {};
80
- const opts = params.opts ?? {};
81
- const meta = params.meta ?? {};
82
- const promise = new Promise(resolve => {
83
- app.handlers.push(() => {
84
- app.resourceHandlers.forEach(handler => handler(resource));
85
- resolve(new resourceConstructor(resource.name, config, opts));
86
- });
87
- });
88
- const resource = {
5
+ import * as __rspack_external__pulumi_pulumi_d0276039 from "@pulumi/pulumi";
6
+ function createPulumiApp(params) {
7
+ let projectRootPath = findUpSync("webiny.config.tsx");
8
+ if (projectRootPath) projectRootPath = path.dirname(projectRootPath).replace(/\\/g, "/");
9
+ else throw new Error("Couldn't detect Webiny project.");
10
+ const appRelativePath = params.path;
11
+ const appRootPath = path.join(projectRootPath, appRelativePath);
12
+ const projectAppWorkspacePath = path.join(projectRootPath, ".webiny", "workspace", appRelativePath);
13
+ const programDecorators = [];
14
+ const app = {
15
+ resourceHandlers: [],
16
+ handlers: [],
17
+ outputs: {},
18
+ modules: new Map(),
19
+ paths: {
20
+ absolute: appRootPath,
21
+ relative: appRelativePath,
22
+ workspace: projectAppWorkspacePath
23
+ },
24
+ resources: {},
89
25
  name: params.name,
90
- type: resourceConstructor,
91
- config: createPulumiAppResourceConfigProxy(config),
92
- opts,
93
- meta,
94
- output: pulumi.output(promise)
95
- };
96
- return resource;
97
- },
98
- addRemoteResource(name, getter) {
99
- const promise = getter();
100
- const resource = {
101
- name,
102
- output: pulumi.output(promise)
103
- };
104
- return resource;
105
- },
106
- /**
107
- * Registers output value within pulumi app.
108
- * @param name Name of the output value
109
- * @param output Value of the output
110
- */
111
- addOutput(name, output) {
112
- app.outputs[name] = output;
113
- },
114
- /**
115
- * Registers one or more output values.
116
- * @param outputs Dictionary containing output values.
117
- */
118
- addOutputs(outputs) {
119
- Object.assign(app.outputs, outputs);
120
- },
121
- /**
122
- * Registers an app module within app.
123
- * Allows to decompose application into smaller pieces.
124
- * Added module can be then retrieved with `getModule`.
125
- * @param module
126
- * @param config
127
- */
128
- addModule(module, config) {
129
- if (app.modules.has(module.symbol)) {
130
- throw new Error(`Module "${module.name}" is already present in the "${app.name}" application.`);
131
- }
132
- const createdModule = module.run(app, config);
133
- app.modules.set(module.symbol, createdModule);
134
- return createdModule;
135
- },
136
- /**
137
- * Returns a module by its definition
138
- * @param def
139
- * @param opts
140
- */
141
- getModule(def, opts) {
142
- const module = app.modules.get(def.symbol);
143
- if (!module) {
144
- if (opts?.optional) {
145
- return null;
146
- } else {
147
- throw new Error(`Module "${def.name}" not found in "${app.name}" app`);
26
+ program: params.program,
27
+ params: {
28
+ create: params.config || {},
29
+ run: {
30
+ env: "",
31
+ variant: ""
32
+ }
33
+ },
34
+ env: {
35
+ name: "",
36
+ isProduction: false
37
+ },
38
+ decorateProgram: (cb)=>{
39
+ programDecorators.push(cb);
40
+ },
41
+ async run (config) {
42
+ app.params.run = config;
43
+ const productionEnvironments = app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;
44
+ const isProduction = productionEnvironments.includes(app.params.run.env);
45
+ app.env = {
46
+ name: app.params.run.env,
47
+ isProduction
48
+ };
49
+ const programOutput = programDecorators.reduce((program, decorator)=>(app)=>decorator(program, app), (input)=>app.program(input));
50
+ Object.assign(app.resources, await programOutput(app));
51
+ for (const handler of app.handlers)await handler();
52
+ app.params.run = {
53
+ env: "",
54
+ variant: ""
55
+ };
56
+ return app.outputs;
57
+ },
58
+ onResource (handler) {
59
+ app.resourceHandlers.push(handler);
60
+ },
61
+ addResource (resourceConstructor, params) {
62
+ const config = params.config ?? {};
63
+ const opts = params.opts ?? {};
64
+ const meta = params.meta ?? {};
65
+ const promise = new Promise((resolve)=>{
66
+ app.handlers.push(()=>{
67
+ app.resourceHandlers.forEach((handler)=>handler(resource));
68
+ resolve(new resourceConstructor(resource.name, config, opts));
69
+ });
70
+ });
71
+ const resource = {
72
+ name: params.name,
73
+ type: resourceConstructor,
74
+ config: createPulumiAppResourceConfigProxy(config),
75
+ opts,
76
+ meta,
77
+ output: __rspack_external__pulumi_pulumi_d0276039.output(promise)
78
+ };
79
+ return resource;
80
+ },
81
+ addRemoteResource (name, getter) {
82
+ const promise = getter();
83
+ const resource = {
84
+ name,
85
+ output: __rspack_external__pulumi_pulumi_d0276039.output(promise)
86
+ };
87
+ return resource;
88
+ },
89
+ addOutput (name, output) {
90
+ app.outputs[name] = output;
91
+ },
92
+ addOutputs (outputs) {
93
+ Object.assign(app.outputs, outputs);
94
+ },
95
+ addModule (module, config) {
96
+ if (app.modules.has(module.symbol)) throw new Error(`Module "${module.name}" is already present in the "${app.name}" application.`);
97
+ const createdModule = module.run(app, config);
98
+ app.modules.set(module.symbol, createdModule);
99
+ return createdModule;
100
+ },
101
+ getModule (def, opts) {
102
+ const module = app.modules.get(def.symbol);
103
+ if (!module) if (opts?.optional) return null;
104
+ else throw new Error(`Module "${def.name}" not found in "${app.name}" app`);
105
+ return module;
106
+ },
107
+ addHandler (handler) {
108
+ const promise = new Promise((resolve)=>{
109
+ app.handlers.push(async ()=>{
110
+ resolve(await handler());
111
+ });
112
+ });
113
+ return __rspack_external__pulumi_pulumi_d0276039.output(promise);
114
+ },
115
+ getParam (param) {
116
+ if ("function" == typeof param) return param(app);
117
+ return param;
148
118
  }
149
- }
150
- return module;
151
- },
152
- /**
153
- * Schedules a handler to be executed when running pulumi script.
154
- * Anything, that is returned from handler will be wrapped in pulumi.Output
155
- * so it can be used in other places.
156
- * @param handler Handler to be executed.
157
- * @returns Result of the handler wrapped with pulumi.Output
158
- */
159
- addHandler(handler) {
160
- const promise = new Promise(resolve => {
161
- app.handlers.push(async () => {
162
- resolve(await handler());
163
- });
164
- });
165
- return pulumi.output(promise);
166
- },
167
- getParam(param) {
168
- if (typeof param === "function") {
169
- return param(app);
170
- }
171
- return param;
172
- }
173
- };
174
- return app;
119
+ };
120
+ return app;
175
121
  }
176
122
  function createPulumiAppResourceConfigProxy(obj) {
177
- return new Proxy(obj, {
178
- get(target, p) {
179
- if (p === "clone") {
180
- return () => cloneDeep(obj);
181
- }
182
- const key = p;
183
- const setter = value => {
184
- if (typeof value === "function") {
185
- const modifier = value;
186
- const currentValue = target[key];
187
- // Wrap a current config with a function.
188
- const newValue = pulumi.output(currentValue).apply(v => {
189
- const newValue = modifier(v);
190
- return pulumi.output(newValue);
191
- });
192
- target[key] = newValue;
193
- } else {
194
- target[key] = value;
123
+ return new Proxy(obj, {
124
+ get (target, p) {
125
+ if ("clone" === p) return ()=>cloneDeep(obj);
126
+ const key = p;
127
+ const setter = (value)=>{
128
+ if ("function" == typeof value) {
129
+ const modifier = value;
130
+ const currentValue = target[key];
131
+ const newValue = __rspack_external__pulumi_pulumi_d0276039.output(currentValue).apply((v)=>{
132
+ const newValue = modifier(v);
133
+ return __rspack_external__pulumi_pulumi_d0276039.output(newValue);
134
+ });
135
+ target[key] = newValue;
136
+ } else target[key] = value;
137
+ };
138
+ return setter;
195
139
  }
196
- };
197
- return setter;
198
- }
199
- });
140
+ });
200
141
  }
142
+ export { createPulumiApp };
201
143
 
202
144
  //# sourceMappingURL=createPulumiApp.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["findUpSync","path","pulumi","cloneDeep","DEFAULT_PROD_ENV_NAMES","createPulumiApp","params","projectRootPath","dirname","replace","Error","appRelativePath","appRootPath","join","projectAppWorkspacePath","programDecorators","app","resourceHandlers","handlers","outputs","modules","Map","paths","absolute","relative","workspace","resources","name","program","create","config","run","env","variant","isProduction","decorateProgram","cb","push","productionEnvironments","includes","programOutput","reduce","decorator","input","Object","assign","handler","onResource","addResource","resourceConstructor","opts","meta","promise","Promise","resolve","forEach","resource","type","createPulumiAppResourceConfigProxy","output","addRemoteResource","getter","addOutput","addOutputs","addModule","module","has","symbol","createdModule","set","getModule","def","get","optional","addHandler","getParam","param","obj","Proxy","target","p","key","setter","value","modifier","currentValue","newValue","apply","v"],"sources":["createPulumiApp.ts"],"sourcesContent":["import { findUpSync } from \"find-up\";\nimport path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport type { PulumiAppModuleDefinition } from \"./PulumiAppModule.js\";\nimport type {\n CreatePulumiAppResourceParams,\n PulumiAppResource,\n PulumiAppResourceArgs,\n PulumiAppResourceConfigModifier,\n PulumiAppResourceConfigProxy,\n PulumiAppResourceConfigSetter,\n PulumiAppResourceConstructor,\n PulumiAppResourceType\n} from \"./PulumiAppResource.js\";\nimport type {\n CreatePulumiAppParams,\n ProgramDecorator,\n PulumiApp,\n PulumiAppParam,\n PulumiAppParamCallback,\n PulumiProgram,\n ResourceHandler\n} from \"~/types.js\";\nimport type { PulumiAppRemoteResource } from \"~/PulumiAppRemoteResource.js\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\nimport { DEFAULT_PROD_ENV_NAMES } from \"./constants.js\";\n\nexport function createPulumiApp<TResources extends Record<string, unknown>>(\n params: CreatePulumiAppParams<TResources>\n): PulumiApp<TResources> {\n let projectRootPath = findUpSync(\"webiny.config.tsx\");\n if (projectRootPath) {\n projectRootPath = path.dirname(projectRootPath).replace(/\\\\/g, \"/\");\n } else {\n throw new Error(\"Couldn't detect Webiny project.\");\n }\n\n const appRelativePath = params.path;\n const appRootPath = path.join(projectRootPath, appRelativePath);\n\n const projectAppWorkspacePath = path.join(\n projectRootPath,\n \".webiny\",\n \"workspace\",\n appRelativePath\n );\n\n const programDecorators: ProgramDecorator<any, any>[] = [];\n\n const app: PulumiApp<TResources> = {\n resourceHandlers: [],\n handlers: [],\n outputs: {},\n modules: new Map<symbol, unknown>(),\n paths: {\n absolute: appRootPath,\n relative: appRelativePath,\n workspace: projectAppWorkspacePath\n },\n\n resources: {} as TResources,\n name: params.name,\n program: params.program,\n params: {\n create: params.config || {},\n run: {\n env: \"\",\n variant: \"\"\n }\n },\n env: {\n name: \"\",\n isProduction: false\n },\n decorateProgram: cb => {\n programDecorators.push(cb);\n },\n\n async run(config) {\n app.params.run = config;\n\n // Add environment-related variables.\n const productionEnvironments =\n app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;\n const isProduction = productionEnvironments.includes(app.params.run.env);\n\n app.env = {\n name: app.params.run.env,\n isProduction\n };\n\n const programOutput = programDecorators.reduce<PulumiProgram<PulumiApp<TResources>>>(\n (program, decorator) => {\n return app => decorator(program, app);\n },\n (input: PulumiApp<any>) => app.program(input)\n );\n\n Object.assign(app.resources, await programOutput(app));\n\n for (const handler of app.handlers) {\n await handler();\n }\n\n app.params.run = {\n env: \"\",\n variant: \"\"\n };\n\n return app.outputs;\n },\n\n onResource(handler: ResourceHandler) {\n app.resourceHandlers.push(handler);\n },\n\n /**\n * Adds a resource to pulumi app.\n * It's not running the script immediately, but enqueues the call.\n * This way we are still able to modify the config of the resource.\n * @param resourceConstructor Resource to be added, ie aws.s3.Bucket\n * @param params Parameters to configure the resource\n * @returns Object giving access to both resource outputs and its config.\n */\n addResource<T extends PulumiAppResourceConstructor>(\n resourceConstructor: T,\n params: CreatePulumiAppResourceParams<T>\n ) {\n const config = params.config ?? ({} as PulumiAppResourceArgs<T>);\n const opts = params.opts ?? {};\n const meta = params.meta ?? {};\n\n const promise = new Promise<PulumiAppResourceType<T>>(resolve => {\n app.handlers.push(() => {\n app.resourceHandlers.forEach(handler => handler(resource));\n\n resolve(new resourceConstructor(resource.name, config, opts));\n });\n });\n\n const resource: PulumiAppResource<T> = {\n name: params.name,\n type: resourceConstructor,\n config: createPulumiAppResourceConfigProxy(config),\n opts,\n meta,\n output: pulumi.output(promise)\n };\n\n return resource;\n },\n\n addRemoteResource<T>(name: string, getter: () => Promise<T>) {\n const promise = getter();\n\n const resource: PulumiAppRemoteResource<T> = {\n name,\n output: pulumi.output(promise)\n };\n\n return resource;\n },\n\n /**\n * Registers output value within pulumi app.\n * @param name Name of the output value\n * @param output Value of the output\n */\n addOutput<T>(name: string, output: T) {\n app.outputs[name] = output;\n },\n\n /**\n * Registers one or more output values.\n * @param outputs Dictionary containing output values.\n */\n addOutputs(outputs: Record<string, unknown>) {\n Object.assign(app.outputs, outputs);\n },\n\n /**\n * Registers an app module within app.\n * Allows to decompose application into smaller pieces.\n * Added module can be then retrieved with `getModule`.\n * @param module\n * @param config\n */\n addModule<TModule, TConfig>(\n module: PulumiAppModuleDefinition<TModule, TConfig>,\n config?: TConfig\n ) {\n if (app.modules.has(module.symbol)) {\n throw new Error(\n `Module \"${module.name}\" is already present in the \"${app.name}\" application.`\n );\n }\n\n const createdModule = module.run(app, config as TConfig);\n app.modules.set(module.symbol, createdModule);\n\n return createdModule;\n },\n\n /**\n * Returns a module by its definition\n * @param def\n * @param opts\n */\n getModule<TConfig, TModule>(\n def: PulumiAppModuleDefinition<TModule, TConfig>,\n opts?: { optional: boolean }\n ) {\n const module = app.modules.get(def.symbol);\n\n if (!module) {\n if (opts?.optional) {\n return null;\n } else {\n throw new Error(`Module \"${def.name}\" not found in \"${app.name}\" app`);\n }\n }\n\n return module;\n },\n\n /**\n * Schedules a handler to be executed when running pulumi script.\n * Anything, that is returned from handler will be wrapped in pulumi.Output\n * so it can be used in other places.\n * @param handler Handler to be executed.\n * @returns Result of the handler wrapped with pulumi.Output\n */\n addHandler<T>(handler: () => Promise<T> | T) {\n const promise = new Promise<T>(resolve => {\n app.handlers.push(async () => {\n resolve(await handler());\n });\n });\n\n return pulumi.output(promise);\n },\n\n getParam<T>(param: PulumiAppParam<T>) {\n if (typeof param === \"function\") {\n return (param as PulumiAppParamCallback<T>)(app);\n }\n\n return param;\n }\n };\n\n return app;\n}\n\nfunction createPulumiAppResourceConfigProxy<T extends object>(obj: T) {\n return new Proxy(obj, {\n get(target, p: string) {\n if (p === \"clone\") {\n return () => cloneDeep(obj);\n }\n\n type V = T[keyof T];\n const key = p as keyof T;\n const setter: PulumiAppResourceConfigSetter<V> = (\n value: V | PulumiAppResourceConfigModifier<V>\n ) => {\n if (typeof value === \"function\") {\n const modifier = value as PulumiAppResourceConfigModifier<V>;\n const currentValue = target[key];\n // Wrap a current config with a function.\n const newValue = pulumi.output(currentValue).apply(v => {\n const newValue = modifier(v);\n return pulumi.output(newValue);\n });\n\n target[key] = newValue as unknown as V;\n } else {\n target[key] = value;\n }\n };\n\n return setter;\n }\n }) as PulumiAppResourceConfigProxy<T>;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createPulumiApp.js","sources":["../src/createPulumiApp.ts"],"sourcesContent":["import { findUpSync } from \"find-up\";\nimport path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport type { PulumiAppModuleDefinition } from \"./PulumiAppModule.js\";\nimport type {\n CreatePulumiAppResourceParams,\n PulumiAppResource,\n PulumiAppResourceArgs,\n PulumiAppResourceConfigModifier,\n PulumiAppResourceConfigProxy,\n PulumiAppResourceConfigSetter,\n PulumiAppResourceConstructor,\n PulumiAppResourceType\n} from \"./PulumiAppResource.js\";\nimport type {\n CreatePulumiAppParams,\n ProgramDecorator,\n PulumiApp,\n PulumiAppParam,\n PulumiAppParamCallback,\n PulumiProgram,\n ResourceHandler\n} from \"~/types.js\";\nimport type { PulumiAppRemoteResource } from \"~/PulumiAppRemoteResource.js\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\nimport { DEFAULT_PROD_ENV_NAMES } from \"./constants.js\";\n\nexport function createPulumiApp<TResources extends Record<string, unknown>>(\n params: CreatePulumiAppParams<TResources>\n): PulumiApp<TResources> {\n let projectRootPath = findUpSync(\"webiny.config.tsx\");\n if (projectRootPath) {\n projectRootPath = path.dirname(projectRootPath).replace(/\\\\/g, \"/\");\n } else {\n throw new Error(\"Couldn't detect Webiny project.\");\n }\n\n const appRelativePath = params.path;\n const appRootPath = path.join(projectRootPath, appRelativePath);\n\n const projectAppWorkspacePath = path.join(\n projectRootPath,\n \".webiny\",\n \"workspace\",\n appRelativePath\n );\n\n const programDecorators: ProgramDecorator<any, any>[] = [];\n\n const app: PulumiApp<TResources> = {\n resourceHandlers: [],\n handlers: [],\n outputs: {},\n modules: new Map<symbol, unknown>(),\n paths: {\n absolute: appRootPath,\n relative: appRelativePath,\n workspace: projectAppWorkspacePath\n },\n\n resources: {} as TResources,\n name: params.name,\n program: params.program,\n params: {\n create: params.config || {},\n run: {\n env: \"\",\n variant: \"\"\n }\n },\n env: {\n name: \"\",\n isProduction: false\n },\n decorateProgram: cb => {\n programDecorators.push(cb);\n },\n\n async run(config) {\n app.params.run = config;\n\n // Add environment-related variables.\n const productionEnvironments =\n app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;\n const isProduction = productionEnvironments.includes(app.params.run.env);\n\n app.env = {\n name: app.params.run.env,\n isProduction\n };\n\n const programOutput = programDecorators.reduce<PulumiProgram<PulumiApp<TResources>>>(\n (program, decorator) => {\n return app => decorator(program, app);\n },\n (input: PulumiApp<any>) => app.program(input)\n );\n\n Object.assign(app.resources, await programOutput(app));\n\n for (const handler of app.handlers) {\n await handler();\n }\n\n app.params.run = {\n env: \"\",\n variant: \"\"\n };\n\n return app.outputs;\n },\n\n onResource(handler: ResourceHandler) {\n app.resourceHandlers.push(handler);\n },\n\n /**\n * Adds a resource to pulumi app.\n * It's not running the script immediately, but enqueues the call.\n * This way we are still able to modify the config of the resource.\n * @param resourceConstructor Resource to be added, ie aws.s3.Bucket\n * @param params Parameters to configure the resource\n * @returns Object giving access to both resource outputs and its config.\n */\n addResource<T extends PulumiAppResourceConstructor>(\n resourceConstructor: T,\n params: CreatePulumiAppResourceParams<T>\n ) {\n const config = params.config ?? ({} as PulumiAppResourceArgs<T>);\n const opts = params.opts ?? {};\n const meta = params.meta ?? {};\n\n const promise = new Promise<PulumiAppResourceType<T>>(resolve => {\n app.handlers.push(() => {\n app.resourceHandlers.forEach(handler => handler(resource));\n\n resolve(new resourceConstructor(resource.name, config, opts));\n });\n });\n\n const resource: PulumiAppResource<T> = {\n name: params.name,\n type: resourceConstructor,\n config: createPulumiAppResourceConfigProxy(config),\n opts,\n meta,\n output: pulumi.output(promise)\n };\n\n return resource;\n },\n\n addRemoteResource<T>(name: string, getter: () => Promise<T>) {\n const promise = getter();\n\n const resource: PulumiAppRemoteResource<T> = {\n name,\n output: pulumi.output(promise)\n };\n\n return resource;\n },\n\n /**\n * Registers output value within pulumi app.\n * @param name Name of the output value\n * @param output Value of the output\n */\n addOutput<T>(name: string, output: T) {\n app.outputs[name] = output;\n },\n\n /**\n * Registers one or more output values.\n * @param outputs Dictionary containing output values.\n */\n addOutputs(outputs: Record<string, unknown>) {\n Object.assign(app.outputs, outputs);\n },\n\n /**\n * Registers an app module within app.\n * Allows to decompose application into smaller pieces.\n * Added module can be then retrieved with `getModule`.\n * @param module\n * @param config\n */\n addModule<TModule, TConfig>(\n module: PulumiAppModuleDefinition<TModule, TConfig>,\n config?: TConfig\n ) {\n if (app.modules.has(module.symbol)) {\n throw new Error(\n `Module \"${module.name}\" is already present in the \"${app.name}\" application.`\n );\n }\n\n const createdModule = module.run(app, config as TConfig);\n app.modules.set(module.symbol, createdModule);\n\n return createdModule;\n },\n\n /**\n * Returns a module by its definition\n * @param def\n * @param opts\n */\n getModule<TConfig, TModule>(\n def: PulumiAppModuleDefinition<TModule, TConfig>,\n opts?: { optional: boolean }\n ) {\n const module = app.modules.get(def.symbol);\n\n if (!module) {\n if (opts?.optional) {\n return null;\n } else {\n throw new Error(`Module \"${def.name}\" not found in \"${app.name}\" app`);\n }\n }\n\n return module;\n },\n\n /**\n * Schedules a handler to be executed when running pulumi script.\n * Anything, that is returned from handler will be wrapped in pulumi.Output\n * so it can be used in other places.\n * @param handler Handler to be executed.\n * @returns Result of the handler wrapped with pulumi.Output\n */\n addHandler<T>(handler: () => Promise<T> | T) {\n const promise = new Promise<T>(resolve => {\n app.handlers.push(async () => {\n resolve(await handler());\n });\n });\n\n return pulumi.output(promise);\n },\n\n getParam<T>(param: PulumiAppParam<T>) {\n if (typeof param === \"function\") {\n return (param as PulumiAppParamCallback<T>)(app);\n }\n\n return param;\n }\n };\n\n return app;\n}\n\nfunction createPulumiAppResourceConfigProxy<T extends object>(obj: T) {\n return new Proxy(obj, {\n get(target, p: string) {\n if (p === \"clone\") {\n return () => cloneDeep(obj);\n }\n\n type V = T[keyof T];\n const key = p as keyof T;\n const setter: PulumiAppResourceConfigSetter<V> = (\n value: V | PulumiAppResourceConfigModifier<V>\n ) => {\n if (typeof value === \"function\") {\n const modifier = value as PulumiAppResourceConfigModifier<V>;\n const currentValue = target[key];\n // Wrap a current config with a function.\n const newValue = pulumi.output(currentValue).apply(v => {\n const newValue = modifier(v);\n return pulumi.output(newValue);\n });\n\n target[key] = newValue as unknown as V;\n } else {\n target[key] = value;\n }\n };\n\n return setter;\n }\n }) as PulumiAppResourceConfigProxy<T>;\n}\n"],"names":["createPulumiApp","params","projectRootPath","findUpSync","path","Error","appRelativePath","appRootPath","projectAppWorkspacePath","programDecorators","app","Map","cb","config","productionEnvironments","DEFAULT_PROD_ENV_NAMES","isProduction","programOutput","program","decorator","input","Object","handler","resourceConstructor","opts","meta","promise","Promise","resolve","resource","createPulumiAppResourceConfigProxy","pulumi","name","getter","output","outputs","module","createdModule","def","param","obj","Proxy","target","p","cloneDeep","key","setter","value","modifier","currentValue","newValue","v"],"mappings":"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"}
package/index.js CHANGED
@@ -4,5 +4,3 @@ export * from "./PulumiAppModule.js";
4
4
  export * from "./PulumiAppResource.js";
5
5
  export * from "./PulumiAppRemoteResource.js";
6
6
  export * from "./types.js";
7
-
8
- //# sourceMappingURL=index.js.map
@@ -1,5 +1,6 @@
1
- export function isResourceOfType(resource, type) {
2
- return resource.type === type;
1
+ function isResourceOfType(resource, type) {
2
+ return resource.type === type;
3
3
  }
4
+ export { isResourceOfType };
4
5
 
5
6
  //# sourceMappingURL=isResourceOfType.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isResourceOfType","resource","type"],"sources":["isResourceOfType.ts"],"sourcesContent":["import { type PulumiAppResource, type PulumiAppResourceConstructor } from \"~/PulumiAppResource.js\";\n\nexport function isResourceOfType<T extends PulumiAppResourceConstructor>(\n resource: PulumiAppResource<PulumiAppResourceConstructor>,\n type: T\n): resource is PulumiAppResource<T> {\n return resource.type === type;\n}\n"],"mappings":"AAEA,OAAO,SAASA,gBAAgBA,CAC5BC,QAAyD,EACzDC,IAAO,EACyB;EAChC,OAAOD,QAAQ,CAACC,IAAI,KAAKA,IAAI;AACjC","ignoreList":[]}
1
+ {"version":3,"file":"isResourceOfType.js","sources":["../src/isResourceOfType.ts"],"sourcesContent":["import { type PulumiAppResource, type PulumiAppResourceConstructor } from \"~/PulumiAppResource.js\";\n\nexport function isResourceOfType<T extends PulumiAppResourceConstructor>(\n resource: PulumiAppResource<PulumiAppResourceConstructor>,\n type: T\n): resource is PulumiAppResource<T> {\n return resource.type === type;\n}\n"],"names":["isResourceOfType","resource","type"],"mappings":"AAEO,SAASA,iBACZC,QAAyD,EACzDC,IAAO;IAEP,OAAOD,SAAS,IAAI,KAAKC;AAC7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/pulumi",
3
- "version": "6.3.0-beta.4",
3
+ "version": "6.4.0-beta.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -18,16 +18,16 @@
18
18
  "directory": "dist"
19
19
  },
20
20
  "dependencies": {
21
- "@pulumi/pulumi": "^3.234.0",
22
- "@webiny/project": "6.3.0-beta.4",
21
+ "@pulumi/pulumi": "^3.237.0",
22
+ "@webiny/project": "6.4.0-beta.0",
23
23
  "find-up": "8.0.0",
24
24
  "lodash": "4.18.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/lodash": "4.17.24",
28
- "@webiny/build-tools": "6.3.0-beta.4",
28
+ "@webiny/build-tools": "6.4.0-beta.0",
29
29
  "rimraf": "6.1.3",
30
30
  "typescript": "6.0.3"
31
31
  },
32
- "gitHead": "7cefe15431dbd65504e1f58147dc9e55bcbfa693"
32
+ "gitHead": "a545d7529828af07d08d49c3da1bcb967483b9ce"
33
33
  }
package/types.js CHANGED
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["PulumiAppRemoteResource.ts"],"sourcesContent":["import type * as pulumi from \"@pulumi/pulumi\";\n\nexport interface PulumiAppRemoteResource<T> {\n name: string;\n readonly output: pulumi.Output<pulumi.Unwrap<T>>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["PulumiAppResource.ts"],"sourcesContent":["import type * as pulumi from \"@pulumi/pulumi\";\n\nexport interface PulumiAppResourceConstructor<T = any, TArgs = any> {\n new (name: string, args: TArgs, opts?: pulumi.CustomResourceOptions): T;\n}\n\nexport type PulumiAppResourceType<T extends PulumiAppResourceConstructor> =\n T extends PulumiAppResourceConstructor<infer TType> ? TType : never;\n\nexport type PulumiAppResourceArgs<T extends PulumiAppResourceConstructor> =\n T extends PulumiAppResourceConstructor<any, infer TArgs> ? Exclude<TArgs, undefined> : never;\n\nexport interface CreatePulumiAppResourceParams<TConstructor extends PulumiAppResourceConstructor> {\n name: string;\n config: PulumiAppResourceArgs<TConstructor>;\n opts?: pulumi.CustomResourceOptions;\n meta?: Record<string, any>;\n}\n\nexport interface PulumiAppResourceConfigModifier<T> {\n (value: pulumi.Unwrap<T>): T | void;\n}\n\nexport interface PulumiAppResourceConfigSetter<T> {\n (value: T): void;\n (fcn: PulumiAppResourceConfigModifier<T>): void;\n}\n\nexport type PulumiAppResourceConfigProxy<T extends object> = {\n readonly [K in keyof T]-?: PulumiAppResourceConfigSetter<T[K]>;\n} & {\n clone(): T;\n};\n\nexport interface PulumiAppResource<T extends PulumiAppResourceConstructor> {\n name: string;\n type: T;\n readonly config: PulumiAppResourceConfigProxy<PulumiAppResourceArgs<T>>;\n readonly opts: pulumi.CustomResourceOptions;\n readonly meta: Record<string, any>;\n readonly output: pulumi.Output<pulumi.Unwrap<PulumiAppResourceType<T>>>;\n}\n"],"mappings":"","ignoreList":[]}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./createPulumiApp.js\";\nexport * from \"./isResourceOfType.js\";\nexport * from \"./PulumiAppModule.js\";\nexport * from \"./PulumiAppResource.js\";\nexport * from \"./PulumiAppRemoteResource.js\";\nexport * from \"./types.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
package/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type * as pulumi from \"@pulumi/pulumi\";\nimport type { PulumiAppModuleDefinition } from \"./PulumiAppModule.js\";\nimport type {\n CreatePulumiAppResourceParams,\n PulumiAppResource,\n PulumiAppResourceConstructor\n} from \"./PulumiAppResource.js\";\nimport type { PulumiAppRemoteResource } from \"~/PulumiAppRemoteResource.js\";\nimport { AppName } from \"@webiny/project\";\n\nexport interface ResourceHandler {\n (resource: PulumiAppResource<PulumiAppResourceConstructor>): void;\n}\n\nexport type PulumiAppParamCallback<T> = (app: PulumiApp) => T | undefined;\nexport type PulumiAppParam<T> = T | PulumiAppParamCallback<T>;\n\nexport type PulumiProgram<TApp = PulumiApp, TResources = Record<string, any>> = (\n app: TApp\n) => TResources | Promise<TResources>;\n\nexport type CreateConfig = Record<string, any>;\nexport type RunConfig = {\n env: string;\n variant: string | undefined;\n [key: string]:\n | string\n | number\n | undefined\n | boolean\n | Record<string, string | number | boolean | undefined>;\n};\n\nexport interface CreatePulumiAppParams<TResources extends Record<string, unknown>> {\n name: AppName;\n path: string;\n config?: CreateConfig;\n\n program(app: PulumiApp): TResources | Promise<TResources>;\n}\n\nexport interface ProgramDecorator<TApp, TResources> {\n (program: PulumiProgram<TApp, TResources>, app: TApp): ReturnType<PulumiProgram<TResources>>;\n}\n\nexport interface PulumiApp<TResources = Record<string, unknown>> {\n resourceHandlers: ResourceHandler[];\n handlers: (() => void | Promise<void>)[];\n outputs: Record<string, any>;\n modules: Map<symbol, unknown>;\n\n paths: { absolute: string; relative: string; workspace: string };\n name: string;\n decorateProgram: <T>(\n decorator: ProgramDecorator<PulumiApp<TResources> & T, TResources>\n ) => void;\n program: PulumiProgram;\n resources: TResources;\n params: {\n create: CreateConfig;\n run: RunConfig;\n };\n env: {\n name: string;\n\n // Set to `true` if the environment into which the application is being deployed\n // is considered a production environment. The list of environment names\n // that are considered production environments is defined via the\n // `productionEnvironments` parameter. Learn more:\n // https://www.webiny.com/docs/infrastructure/basics/modify-cloud-infrastructure#defining-multiple-production-environments\n isProduction: boolean;\n };\n\n run(params: RunConfig): Record<string, any>;\n\n onResource(handler: ResourceHandler): void;\n\n addResource<T extends PulumiAppResourceConstructor>(\n resourceConstructor: T,\n params: CreatePulumiAppResourceParams<T>\n ): PulumiAppResource<T>;\n\n addRemoteResource<T>(name: string, getter: () => Promise<T>): PulumiAppRemoteResource<T>;\n\n addOutput<T>(name: string, output: T): void;\n\n addOutputs(outputs: Record<string, unknown>): void;\n\n addModule<TModule>(def: PulumiAppModuleDefinition<TModule, void>): TModule;\n\n addModule<TModule, TConfig>(\n def: PulumiAppModuleDefinition<TModule, TConfig>,\n config: TConfig\n ): TModule;\n\n getModule<TConfig, TModule>(def: PulumiAppModuleDefinition<TModule, TConfig>): TModule;\n\n getModule<TConfig, TModule>(\n def: PulumiAppModuleDefinition<TModule, TConfig>,\n opts: { optional: false }\n ): TModule;\n\n getModule<TConfig, TModule>(\n def: PulumiAppModuleDefinition<TModule, TConfig>,\n opts: { optional: true }\n ): TModule | null;\n\n addHandler<T>(handler: () => Promise<T> | T): pulumi.Output<pulumi.Unwrap<T>>;\n\n getParam<T>(param: T | ((app: PulumiApp) => T)): T | undefined;\n}\n"],"mappings":"","ignoreList":[]}