@webiny/pulumi 5.37.4 → 5.37.5-beta.1

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.
@@ -19,6 +19,4 @@ class PulumiAppModuleDefinition {
19
19
  exports.PulumiAppModuleDefinition = PulumiAppModuleDefinition;
20
20
  function createAppModule(params) {
21
21
  return new PulumiAppModuleDefinition(params);
22
- }
23
-
24
- //# sourceMappingURL=PulumiAppModule.js.map
22
+ }
@@ -2,6 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
6
-
7
- //# sourceMappingURL=PulumiAppRemoteResource.js.map
5
+ });
@@ -19,6 +19,8 @@ export interface PulumiAppResourceConfigSetter<T> {
19
19
  }
20
20
  export declare type PulumiAppResourceConfigProxy<T extends object> = {
21
21
  readonly [K in keyof T]-?: PulumiAppResourceConfigSetter<T[K]>;
22
+ } & {
23
+ clone(): T;
22
24
  };
23
25
  export interface PulumiAppResource<T extends PulumiAppResourceConstructor> {
24
26
  name: string;
@@ -2,6 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
6
-
7
- //# sourceMappingURL=PulumiAppResource.js.map
5
+ });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["PulumiAppResource.ts"],"sourcesContent":["import * 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\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":""}
1
+ {"version":3,"names":[],"sources":["PulumiAppResource.ts"],"sourcesContent":["import * 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":""}
@@ -9,6 +9,7 @@ exports.createPulumiApp = createPulumiApp;
9
9
  var _findUp = _interopRequireDefault(require("find-up"));
10
10
  var _path = _interopRequireDefault(require("path"));
11
11
  var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
12
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
12
13
  function createPulumiApp(params) {
13
14
  let projectRootPath = _findUp.default.sync("webiny.project.ts");
14
15
  if (projectRootPath) {
@@ -157,6 +158,9 @@ function createPulumiApp(params) {
157
158
  function createPulumiAppResourceConfigProxy(obj) {
158
159
  return new Proxy(obj, {
159
160
  get(target, p) {
161
+ if (p === "clone") {
162
+ return () => (0, _cloneDeep.default)(obj);
163
+ }
160
164
  const key = p;
161
165
  const setter = value => {
162
166
  if (typeof value === "function") {
@@ -175,6 +179,4 @@ function createPulumiAppResourceConfigProxy(obj) {
175
179
  return setter;
176
180
  }
177
181
  });
178
- }
179
-
180
- //# sourceMappingURL=createPulumiApp.js.map
182
+ }
@@ -1 +1 @@
1
- {"version":3,"names":["_findUp","_interopRequireDefault","require","_path","pulumi","_interopRequireWildcard","createPulumiApp","params","projectRootPath","findUp","sync","path","dirname","replace","Error","appRelativePath","appRootPath","join","projectAppWorkspacePath","app","resourceHandlers","handlers","outputs","modules","Map","paths","absolute","relative","workspace","resources","name","program","create","config","run","Object","assign","handler","onResource","push","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 findUp from \"find-up\";\nimport path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport { PulumiAppModuleDefinition } from \"./PulumiAppModule\";\nimport {\n PulumiAppResourceArgs,\n PulumiAppResourceConstructor,\n PulumiAppResourceType,\n PulumiAppResource,\n CreatePulumiAppResourceParams,\n PulumiAppResourceConfigSetter,\n PulumiAppResourceConfigModifier,\n PulumiAppResourceConfigProxy\n} from \"./PulumiAppResource\";\nimport {\n CreatePulumiAppParams,\n PulumiApp,\n PulumiAppParam,\n PulumiAppParamCallback,\n ResourceHandler\n} from \"~/types\";\nimport { PulumiAppRemoteResource } from \"~/PulumiAppRemoteResource\";\n\nexport function createPulumiApp<TResources extends Record<string, unknown>>(\n params: CreatePulumiAppParams<TResources>\n): PulumiApp<TResources> {\n let projectRootPath = findUp.sync(\"webiny.project.ts\");\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 \"workspaces\",\n appRelativePath\n );\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 },\n\n async run(config) {\n app.params.run = config;\n\n Object.assign(app.resources, await app.program(app));\n\n for (const handler of app.handlers) {\n await handler();\n }\n\n app.params.run = {};\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 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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"}
1
+ {"version":3,"names":["_findUp","_interopRequireDefault","require","_path","pulumi","_interopRequireWildcard","_cloneDeep","createPulumiApp","params","projectRootPath","findUp","sync","path","dirname","replace","Error","appRelativePath","appRootPath","join","projectAppWorkspacePath","app","resourceHandlers","handlers","outputs","modules","Map","paths","absolute","relative","workspace","resources","name","program","create","config","run","Object","assign","handler","onResource","push","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","cloneDeep","key","setter","value","modifier","currentValue","newValue","apply","v"],"sources":["createPulumiApp.ts"],"sourcesContent":["import findUp from \"find-up\";\nimport path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport { PulumiAppModuleDefinition } from \"./PulumiAppModule\";\nimport {\n PulumiAppResourceArgs,\n PulumiAppResourceConstructor,\n PulumiAppResourceType,\n PulumiAppResource,\n CreatePulumiAppResourceParams,\n PulumiAppResourceConfigSetter,\n PulumiAppResourceConfigModifier,\n PulumiAppResourceConfigProxy\n} from \"./PulumiAppResource\";\nimport {\n CreatePulumiAppParams,\n PulumiApp,\n PulumiAppParam,\n PulumiAppParamCallback,\n ResourceHandler\n} from \"~/types\";\nimport { PulumiAppRemoteResource } from \"~/PulumiAppRemoteResource\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nexport function createPulumiApp<TResources extends Record<string, unknown>>(\n params: CreatePulumiAppParams<TResources>\n): PulumiApp<TResources> {\n let projectRootPath = findUp.sync(\"webiny.project.ts\");\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 \"workspaces\",\n appRelativePath\n );\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 },\n\n async run(config) {\n app.params.run = config;\n\n Object.assign(app.resources, await app.program(app));\n\n for (const handler of app.handlers) {\n await handler();\n }\n\n app.params.run = {};\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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"}
package/index.js CHANGED
@@ -68,6 +68,4 @@ Object.keys(_types).forEach(function (key) {
68
68
  return _types[key];
69
69
  }
70
70
  });
71
- });
72
-
73
- //# sourceMappingURL=index.js.map
71
+ });
@@ -6,6 +6,4 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isResourceOfType = isResourceOfType;
7
7
  function isResourceOfType(resource, type) {
8
8
  return resource.type === type;
9
- }
10
-
11
- //# sourceMappingURL=isResourceOfType.js.map
9
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/pulumi",
3
- "version": "5.37.4",
3
+ "version": "5.37.5-beta.1",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,14 +15,15 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@pulumi/pulumi": "^3.34.0",
18
- "find-up": "5.0.0"
18
+ "find-up": "5.0.0",
19
+ "lodash": "4.17.21"
19
20
  },
20
21
  "devDependencies": {
21
22
  "@babel/cli": "7.22.6",
22
23
  "@babel/core": "7.22.8",
23
24
  "@types/lodash": "4.14.191",
24
- "@webiny/cli": "5.37.4",
25
- "@webiny/project-utils": "5.37.4",
25
+ "@webiny/cli": "5.37.5-beta.1",
26
+ "@webiny/project-utils": "5.37.5-beta.1",
26
27
  "rimraf": "3.0.2",
27
28
  "typescript": "4.7.4"
28
29
  },
@@ -30,5 +31,5 @@
30
31
  "build": "yarn webiny run build",
31
32
  "watch": "yarn webiny run watch"
32
33
  },
33
- "gitHead": "be5b7d29a08583657ab5abfc89bdc9512c975116"
34
+ "gitHead": "88829ab0c5d875491d6b260f184b7b7fe3a6d449"
34
35
  }
package/types.js CHANGED
@@ -2,6 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
6
-
7
- //# sourceMappingURL=types.js.map
5
+ });