@webiny/pulumi 0.0.0-unstable.78f581c1d2 → 0.0.0-unstable.7be00a75a9
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/PulumiAppModule.d.ts +2 -2
- package/PulumiAppModule.js +10 -25
- package/PulumiAppModule.js.map +1 -1
- package/PulumiAppRemoteResource.d.ts +1 -1
- package/PulumiAppRemoteResource.js +0 -5
- package/PulumiAppResource.d.ts +8 -4
- package/PulumiAppResource.js +0 -5
- package/README.md +7 -134
- package/constants.d.ts +1 -0
- package/constants.js +7 -0
- package/constants.js.map +1 -0
- package/createPulumiApp.d.ts +1 -1
- package/createPulumiApp.js +137 -201
- package/createPulumiApp.js.map +1 -1
- package/index.d.ts +6 -6
- package/index.js +6 -83
- package/isResourceOfType.d.ts +1 -1
- package/isResourceOfType.js +5 -9
- package/isResourceOfType.js.map +1 -1
- package/package.json +19 -19
- package/types.d.ts +24 -11
- package/types.js +0 -5
- package/PulumiAppRemoteResource.js.map +0 -1
- package/PulumiAppResource.js.map +0 -1
- package/index.js.map +0 -1
- package/types.js.map +0 -1
package/PulumiAppModule.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PulumiApp } from "./types";
|
|
1
|
+
import type { PulumiApp } from "./types.js";
|
|
2
2
|
export interface PulumiAppModuleCallback<TModule, TConfig> {
|
|
3
3
|
(this: void, app: PulumiApp, config: TConfig): TModule;
|
|
4
4
|
}
|
|
@@ -6,7 +6,7 @@ export interface PulumiAppModuleParams<TModule, TConfig> {
|
|
|
6
6
|
name: string;
|
|
7
7
|
config: PulumiAppModuleCallback<TModule, TConfig>;
|
|
8
8
|
}
|
|
9
|
-
export
|
|
9
|
+
export type PulumiAppModule<T extends PulumiAppModuleDefinition<any, any>> = T extends PulumiAppModuleDefinition<infer V, any> ? V : never;
|
|
10
10
|
export declare class PulumiAppModuleDefinition<TModule, TConfig> {
|
|
11
11
|
readonly symbol: symbol;
|
|
12
12
|
readonly name: string;
|
package/PulumiAppModule.js
CHANGED
|
@@ -1,28 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.PulumiAppModuleDefinition = void 0;
|
|
9
|
-
exports.createAppModule = createAppModule;
|
|
10
|
-
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
|
|
13
1
|
class PulumiAppModuleDefinition {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.run = params.config;
|
|
20
|
-
}
|
|
21
|
-
|
|
2
|
+
constructor(params){
|
|
3
|
+
this.symbol = Symbol();
|
|
4
|
+
this.name = params.name;
|
|
5
|
+
this.run = params.config;
|
|
6
|
+
}
|
|
22
7
|
}
|
|
23
|
-
|
|
24
|
-
exports.PulumiAppModuleDefinition = PulumiAppModuleDefinition;
|
|
25
|
-
|
|
26
8
|
function createAppModule(params) {
|
|
27
|
-
|
|
28
|
-
}
|
|
9
|
+
return new PulumiAppModuleDefinition(params);
|
|
10
|
+
}
|
|
11
|
+
export { PulumiAppModuleDefinition, createAppModule };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=PulumiAppModule.js.map
|
package/PulumiAppModule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
package/PulumiAppResource.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import * as pulumi from "@pulumi/pulumi";
|
|
1
|
+
import type * as pulumi from "@pulumi/pulumi";
|
|
2
2
|
export interface PulumiAppResourceConstructor<T = any, TArgs = any> {
|
|
3
3
|
new (name: string, args: TArgs, opts?: pulumi.CustomResourceOptions): T;
|
|
4
4
|
}
|
|
5
|
-
export
|
|
6
|
-
export
|
|
5
|
+
export type PulumiAppResourceType<T extends PulumiAppResourceConstructor> = T extends PulumiAppResourceConstructor<infer TType> ? TType : never;
|
|
6
|
+
export type PulumiAppResourceArgs<T extends PulumiAppResourceConstructor> = T extends PulumiAppResourceConstructor<any, infer TArgs> ? Exclude<TArgs, undefined> : never;
|
|
7
7
|
export interface CreatePulumiAppResourceParams<TConstructor extends PulumiAppResourceConstructor> {
|
|
8
8
|
name: string;
|
|
9
9
|
config: PulumiAppResourceArgs<TConstructor>;
|
|
10
10
|
opts?: pulumi.CustomResourceOptions;
|
|
11
|
+
meta?: Record<string, any>;
|
|
11
12
|
}
|
|
12
13
|
export interface PulumiAppResourceConfigModifier<T> {
|
|
13
14
|
(value: pulumi.Unwrap<T>): T | void;
|
|
@@ -16,13 +17,16 @@ export interface PulumiAppResourceConfigSetter<T> {
|
|
|
16
17
|
(value: T): void;
|
|
17
18
|
(fcn: PulumiAppResourceConfigModifier<T>): void;
|
|
18
19
|
}
|
|
19
|
-
export
|
|
20
|
+
export type PulumiAppResourceConfigProxy<T extends object> = {
|
|
20
21
|
readonly [K in keyof T]-?: PulumiAppResourceConfigSetter<T[K]>;
|
|
22
|
+
} & {
|
|
23
|
+
clone(): T;
|
|
21
24
|
};
|
|
22
25
|
export interface PulumiAppResource<T extends PulumiAppResourceConstructor> {
|
|
23
26
|
name: string;
|
|
24
27
|
type: T;
|
|
25
28
|
readonly config: PulumiAppResourceConfigProxy<PulumiAppResourceArgs<T>>;
|
|
26
29
|
readonly opts: pulumi.CustomResourceOptions;
|
|
30
|
+
readonly meta: Record<string, any>;
|
|
27
31
|
readonly output: pulumi.Output<pulumi.Unwrap<PulumiAppResourceType<T>>>;
|
|
28
32
|
}
|
package/PulumiAppResource.js
CHANGED
package/README.md
CHANGED
|
@@ -1,138 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @webiny/pulumi
|
|
2
2
|
|
|
3
|
-
[!
|
|
4
|
-
[
|
|
5
|
-
|
|
6
|
-
[](http://makeapullrequest.com)
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
---
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
- [Overview](#overview)
|
|
14
|
-
- [Examples](#examples)
|
|
15
|
-
- [Reference](#reference)
|
|
16
|
-
- [Functions](#functions)
|
|
17
|
-
- [`createPulumiApp`](#createPulumiApp)
|
|
18
|
-
|
|
19
|
-
## Installation
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
npm install --save @webiny/pulumi
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Or if you prefer yarn:
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
yarn add @webiny/pulumi
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Overview
|
|
32
|
-
|
|
33
|
-
The `@webiny/pulumi` package enables creation of flexible Pulumi apps (programs).
|
|
34
|
-
|
|
35
|
-
More specifically, a Pulumi app not only encapsulates the essential Pulumi program code defined by developers, but also, once defined, provides a way to adjust any defined cloud infrastructure resource configuration and even add new resources into the mix.
|
|
36
|
-
|
|
37
|
-
This is useful when you just want to export a simple constructor function to the user, and not bother them with all the internals. And, as mentioned, in those rare cases when the user actually needs to perform further adjustments, a Pulumi app provides a way to do it.
|
|
38
|
-
|
|
39
|
-
> 💡 **TIP**
|
|
40
|
-
>
|
|
41
|
-
> Pulumi apps are heavily used in real Webiny projects. As mentioned, this is because of their ability to abstract the actual cloud infrastructure code from the user, and, at the same time, provide a way for the user to perform adjustments when needed.
|
|
42
|
-
|
|
43
|
-
The following example shows how a Pulumi app looks in the actual code:
|
|
44
|
-
|
|
45
|
-
```ts
|
|
46
|
-
// This is imported in our Pulumi program's entrypoint file (index.ts).
|
|
47
|
-
import createXyzApp from "@webiny/xyz-app";
|
|
48
|
-
|
|
49
|
-
export = async () => {
|
|
50
|
-
const xyzApp = createXyzApp({
|
|
51
|
-
pulumi: app => {
|
|
52
|
-
// Let's imagine the `xyz` Pulumi app deploys an Amazon S3 bucket.
|
|
53
|
-
// Then, we would be able to do something like the following:
|
|
54
|
-
app.resources.bucket.config.acl(aws.s3.CannedAcl.Private);
|
|
55
|
-
app.resources.bucket.config.forceDestroy(true);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
return xyzApp.run();
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Examples
|
|
65
|
-
|
|
66
|
-
| Example | Description |
|
|
67
|
-
| --------------------------------- | --------------------------------------------------------------- |
|
|
68
|
-
| [Quick Example](./docs/examples/quickExample.md) | Shows how to create and use a simple Pulumi app. |
|
|
69
|
-
|
|
70
|
-
## Reference
|
|
71
|
-
|
|
72
|
-
### Functions
|
|
73
|
-
|
|
74
|
-
#### `createPulumiApp`
|
|
75
|
-
|
|
76
|
-
<details>
|
|
77
|
-
<summary>Type Declaration</summary>
|
|
78
|
-
<p>
|
|
79
|
-
|
|
80
|
-
```ts
|
|
81
|
-
export interface CreatePulumiAppParams<TResources extends Record<string, unknown>> {
|
|
82
|
-
name: string;
|
|
83
|
-
path: string;
|
|
84
|
-
config?: Record<string, any>;
|
|
85
|
-
program(app: PulumiApp): TResources | Promise<TResources>;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export declare function createPulumiApp<TResources extends Record<string, unknown>>(params: CreatePulumiAppParams<TResources>): PulumiApp<TResources>;
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
</p>
|
|
92
|
-
</details>
|
|
93
|
-
|
|
94
|
-
Creates a new Pulumi app.
|
|
95
|
-
|
|
96
|
-
```ts
|
|
97
|
-
// Defining the app.
|
|
98
|
-
import * as aws from "@pulumi/aws";
|
|
99
|
-
import { createPulumiApp } from "@webiny/pulumi";
|
|
100
|
-
|
|
101
|
-
export interface CreateMyAppParams {
|
|
102
|
-
pulumi?: (app: ReturnType<typeof createMyApp>) => void;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const createMyApp = (projectAppConfig: CreateMyAppParams) => {
|
|
106
|
-
const app = createPulumiApp({
|
|
107
|
-
name: "my-app",
|
|
108
|
-
path: "relative/path/from/cwd",
|
|
109
|
-
program: async app => {
|
|
110
|
-
const bucket = app.addResource(aws.s3.Bucket, {
|
|
111
|
-
name: "my-app",
|
|
112
|
-
config: {
|
|
113
|
-
acl: aws.s3.CannedAcl.PublicRead,
|
|
114
|
-
forceDestroy: false,
|
|
115
|
-
website: {
|
|
116
|
-
indexDocument: "index.html",
|
|
117
|
-
errorDocument: "index.html"
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
app.addOutputs({
|
|
123
|
-
appStorage: bucket.output.id
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
return {
|
|
127
|
-
bucket
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
if (projectAppConfig.pulumi) {
|
|
133
|
-
projectAppConfig.pulumi(app);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return app;
|
|
137
|
-
};
|
|
138
|
-
```
|
|
11
|
+
_This README file is automatically generated during the publish process._
|
package/constants.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DEFAULT_PROD_ENV_NAMES: string[];
|
package/constants.js
ADDED
package/constants.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/createPulumiApp.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { CreatePulumiAppParams, PulumiApp } from "./types";
|
|
1
|
+
import type { CreatePulumiAppParams, PulumiApp } from "./types.js";
|
|
2
2
|
export declare function createPulumiApp<TResources extends Record<string, unknown>>(params: CreatePulumiAppParams<TResources>): PulumiApp<TResources>;
|
package/createPulumiApp.js
CHANGED
|
@@ -1,208 +1,144 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports.createPulumiApp = createPulumiApp;
|
|
11
|
-
|
|
12
|
-
var _findUp = _interopRequireDefault(require("find-up"));
|
|
13
|
-
|
|
14
|
-
var _path = _interopRequireDefault(require("path"));
|
|
15
|
-
|
|
16
|
-
var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
|
|
17
|
-
|
|
1
|
+
import { findUpSync } from "find-up";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import cloneDeep from "lodash/cloneDeep.js";
|
|
4
|
+
import { DEFAULT_PROD_ENV_NAMES } from "./constants.js";
|
|
5
|
+
import * as __rspack_external__pulumi_pulumi_d0276039 from "@pulumi/pulumi";
|
|
18
6
|
function createPulumiApp(params) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
modules: new Map(),
|
|
38
|
-
paths: {
|
|
39
|
-
absolute: appRootPath,
|
|
40
|
-
relative: appRelativePath,
|
|
41
|
-
workspace: projectAppWorkspacePath
|
|
42
|
-
},
|
|
43
|
-
resources: {},
|
|
44
|
-
name: params.name,
|
|
45
|
-
program: params.program,
|
|
46
|
-
params: {
|
|
47
|
-
create: params.config || {},
|
|
48
|
-
run: {}
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
async run(config) {
|
|
52
|
-
app.params.run = config;
|
|
53
|
-
Object.assign(app.resources, await app.program(app));
|
|
54
|
-
|
|
55
|
-
for (const handler of app.handlers) {
|
|
56
|
-
await handler();
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
app.params.run = {};
|
|
60
|
-
return app.outputs;
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
onResource(handler) {
|
|
64
|
-
app.resourceHandlers.push(handler);
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Adds a resource to pulumi app.
|
|
69
|
-
* It's not running the script immediately, but enqueues the call.
|
|
70
|
-
* This way we are still able to modify the config of the resource.
|
|
71
|
-
* @param resourceConstructor Resource to be added, ie aws.s3.Bucket
|
|
72
|
-
* @param params Parameters to configure the resource
|
|
73
|
-
* @returns Object giving access to both resource outputs and its config.
|
|
74
|
-
*/
|
|
75
|
-
addResource(resourceConstructor, params) {
|
|
76
|
-
const config = params.config ?? {};
|
|
77
|
-
const opts = params.opts ?? {};
|
|
78
|
-
const promise = new Promise(resolve => {
|
|
79
|
-
app.handlers.push(() => {
|
|
80
|
-
app.resourceHandlers.forEach(handler => handler(resource));
|
|
81
|
-
resolve(new resourceConstructor(resource.name, config, opts));
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
const resource = {
|
|
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: {},
|
|
85
25
|
name: params.name,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
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;
|
|
150
118
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return module;
|
|
154
|
-
},
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Schedules a handler to be executed when running pulumi script.
|
|
158
|
-
* Anything, that is returned from handler will be wrapped in pulumi.Output
|
|
159
|
-
* so it can be used in other places.
|
|
160
|
-
* @param handler Handler to be executed.
|
|
161
|
-
* @returns Result of the handler wrapped with pulumi.Output
|
|
162
|
-
*/
|
|
163
|
-
addHandler(handler) {
|
|
164
|
-
const promise = new Promise(resolve => {
|
|
165
|
-
app.handlers.push(async () => {
|
|
166
|
-
resolve(await handler());
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
return pulumi.output(promise);
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
getParam(param) {
|
|
173
|
-
if (typeof param === "function") {
|
|
174
|
-
return param(app);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return param;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
};
|
|
181
|
-
return app;
|
|
119
|
+
};
|
|
120
|
+
return app;
|
|
182
121
|
}
|
|
183
|
-
|
|
184
122
|
function createPulumiAppResourceConfigProxy(obj) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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;
|
|
201
139
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
export { createPulumiApp };
|
|
206
143
|
|
|
207
|
-
|
|
208
|
-
}
|
|
144
|
+
//# sourceMappingURL=createPulumiApp.js.map
|
package/createPulumiApp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["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","promise","Promise","resolve","forEach","resource","type","createPulumiAppResourceConfigProxy","output","pulumi","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\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 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,"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.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from "./createPulumiApp";
|
|
2
|
-
export * from "./isResourceOfType";
|
|
3
|
-
export * from "./PulumiAppModule";
|
|
4
|
-
export * from "./PulumiAppResource";
|
|
5
|
-
export * from "./PulumiAppRemoteResource";
|
|
6
|
-
export * from "./types";
|
|
1
|
+
export * from "./createPulumiApp.js";
|
|
2
|
+
export * from "./isResourceOfType.js";
|
|
3
|
+
export * from "./PulumiAppModule.js";
|
|
4
|
+
export * from "./PulumiAppResource.js";
|
|
5
|
+
export * from "./PulumiAppRemoteResource.js";
|
|
6
|
+
export * from "./types.js";
|
package/index.js
CHANGED
|
@@ -1,83 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _createPulumiApp = require("./createPulumiApp");
|
|
8
|
-
|
|
9
|
-
Object.keys(_createPulumiApp).forEach(function (key) {
|
|
10
|
-
if (key === "default" || key === "__esModule") return;
|
|
11
|
-
if (key in exports && exports[key] === _createPulumiApp[key]) return;
|
|
12
|
-
Object.defineProperty(exports, key, {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _createPulumiApp[key];
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
var _isResourceOfType = require("./isResourceOfType");
|
|
21
|
-
|
|
22
|
-
Object.keys(_isResourceOfType).forEach(function (key) {
|
|
23
|
-
if (key === "default" || key === "__esModule") return;
|
|
24
|
-
if (key in exports && exports[key] === _isResourceOfType[key]) return;
|
|
25
|
-
Object.defineProperty(exports, key, {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function () {
|
|
28
|
-
return _isResourceOfType[key];
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
var _PulumiAppModule = require("./PulumiAppModule");
|
|
34
|
-
|
|
35
|
-
Object.keys(_PulumiAppModule).forEach(function (key) {
|
|
36
|
-
if (key === "default" || key === "__esModule") return;
|
|
37
|
-
if (key in exports && exports[key] === _PulumiAppModule[key]) return;
|
|
38
|
-
Object.defineProperty(exports, key, {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () {
|
|
41
|
-
return _PulumiAppModule[key];
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
var _PulumiAppResource = require("./PulumiAppResource");
|
|
47
|
-
|
|
48
|
-
Object.keys(_PulumiAppResource).forEach(function (key) {
|
|
49
|
-
if (key === "default" || key === "__esModule") return;
|
|
50
|
-
if (key in exports && exports[key] === _PulumiAppResource[key]) return;
|
|
51
|
-
Object.defineProperty(exports, key, {
|
|
52
|
-
enumerable: true,
|
|
53
|
-
get: function () {
|
|
54
|
-
return _PulumiAppResource[key];
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
var _PulumiAppRemoteResource = require("./PulumiAppRemoteResource");
|
|
60
|
-
|
|
61
|
-
Object.keys(_PulumiAppRemoteResource).forEach(function (key) {
|
|
62
|
-
if (key === "default" || key === "__esModule") return;
|
|
63
|
-
if (key in exports && exports[key] === _PulumiAppRemoteResource[key]) return;
|
|
64
|
-
Object.defineProperty(exports, key, {
|
|
65
|
-
enumerable: true,
|
|
66
|
-
get: function () {
|
|
67
|
-
return _PulumiAppRemoteResource[key];
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
var _types = require("./types");
|
|
73
|
-
|
|
74
|
-
Object.keys(_types).forEach(function (key) {
|
|
75
|
-
if (key === "default" || key === "__esModule") return;
|
|
76
|
-
if (key in exports && exports[key] === _types[key]) return;
|
|
77
|
-
Object.defineProperty(exports, key, {
|
|
78
|
-
enumerable: true,
|
|
79
|
-
get: function () {
|
|
80
|
-
return _types[key];
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
});
|
|
1
|
+
export * from "./createPulumiApp.js";
|
|
2
|
+
export * from "./isResourceOfType.js";
|
|
3
|
+
export * from "./PulumiAppModule.js";
|
|
4
|
+
export * from "./PulumiAppResource.js";
|
|
5
|
+
export * from "./PulumiAppRemoteResource.js";
|
|
6
|
+
export * from "./types.js";
|
package/isResourceOfType.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { PulumiAppResource, PulumiAppResourceConstructor } from "./PulumiAppResource";
|
|
1
|
+
import { type PulumiAppResource, type PulumiAppResourceConstructor } from "./PulumiAppResource.js";
|
|
2
2
|
export declare function isResourceOfType<T extends PulumiAppResourceConstructor>(resource: PulumiAppResource<PulumiAppResourceConstructor>, type: T): resource is PulumiAppResource<T>;
|
package/isResourceOfType.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.isResourceOfType = isResourceOfType;
|
|
7
|
-
|
|
8
1
|
function isResourceOfType(resource, type) {
|
|
9
|
-
|
|
10
|
-
}
|
|
2
|
+
return resource.type === type;
|
|
3
|
+
}
|
|
4
|
+
export { isResourceOfType };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=isResourceOfType.js.map
|
package/isResourceOfType.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/pulumi",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.0-unstable.7be00a75a9",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
5
9
|
"repository": {
|
|
6
10
|
"type": "git",
|
|
7
11
|
"url": "https://github.com/webiny/webiny-js.git"
|
|
@@ -10,26 +14,22 @@
|
|
|
10
14
|
"author": "Webiny Ltd",
|
|
11
15
|
"license": "MIT",
|
|
12
16
|
"publishConfig": {
|
|
13
|
-
"access": "public"
|
|
14
|
-
"directory": "dist"
|
|
17
|
+
"access": "public"
|
|
15
18
|
},
|
|
16
19
|
"dependencies": {
|
|
17
|
-
"@pulumi/pulumi": "^3.
|
|
18
|
-
"
|
|
20
|
+
"@pulumi/pulumi": "^3.242.0",
|
|
21
|
+
"@webiny/project": "0.0.0-unstable.7be00a75a9",
|
|
22
|
+
"find-up": "8.0.0",
|
|
23
|
+
"lodash": "4.18.1"
|
|
19
24
|
},
|
|
20
25
|
"devDependencies": {
|
|
21
|
-
"@
|
|
22
|
-
"@
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"@webiny/cli": "^0.0.0-unstable.78f581c1d2",
|
|
26
|
-
"@webiny/project-utils": "^0.0.0-unstable.78f581c1d2",
|
|
27
|
-
"rimraf": "^3.0.2",
|
|
28
|
-
"typescript": "4.7.4"
|
|
29
|
-
},
|
|
30
|
-
"scripts": {
|
|
31
|
-
"build": "yarn webiny run build",
|
|
32
|
-
"watch": "yarn webiny run watch"
|
|
26
|
+
"@types/lodash": "4.17.24",
|
|
27
|
+
"@webiny/build-tools": "0.0.0-unstable.7be00a75a9",
|
|
28
|
+
"rimraf": "6.1.3",
|
|
29
|
+
"typescript": "6.0.3"
|
|
33
30
|
},
|
|
34
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "8476da73b653c89cc1474d968baf55c1b0ae0e5f",
|
|
32
|
+
"webiny": {
|
|
33
|
+
"publishFrom": "dist"
|
|
34
|
+
}
|
|
35
35
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,21 +1,29 @@
|
|
|
1
|
-
import * as pulumi from "@pulumi/pulumi";
|
|
2
|
-
import { PulumiAppModuleDefinition } from "./PulumiAppModule";
|
|
3
|
-
import {
|
|
4
|
-
import { PulumiAppRemoteResource } from "./PulumiAppRemoteResource";
|
|
1
|
+
import type * as pulumi from "@pulumi/pulumi";
|
|
2
|
+
import type { PulumiAppModuleDefinition } from "./PulumiAppModule.js";
|
|
3
|
+
import type { CreatePulumiAppResourceParams, PulumiAppResource, PulumiAppResourceConstructor } from "./PulumiAppResource.js";
|
|
4
|
+
import type { PulumiAppRemoteResource } from "./PulumiAppRemoteResource.js";
|
|
5
|
+
import { AppName } from "@webiny/project";
|
|
5
6
|
export interface ResourceHandler {
|
|
6
7
|
(resource: PulumiAppResource<PulumiAppResourceConstructor>): void;
|
|
7
8
|
}
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
9
|
+
export type PulumiAppParamCallback<T> = (app: PulumiApp) => T | undefined;
|
|
10
|
+
export type PulumiAppParam<T> = T | PulumiAppParamCallback<T>;
|
|
11
|
+
export type PulumiProgram<TApp = PulumiApp, TResources = Record<string, any>> = (app: TApp) => TResources | Promise<TResources>;
|
|
12
|
+
export type CreateConfig = Record<string, any>;
|
|
13
|
+
export type RunConfig = {
|
|
14
|
+
env: string;
|
|
15
|
+
variant: string | undefined;
|
|
16
|
+
[key: string]: string | number | undefined | boolean | Record<string, string | number | boolean | undefined>;
|
|
17
|
+
};
|
|
13
18
|
export interface CreatePulumiAppParams<TResources extends Record<string, unknown>> {
|
|
14
|
-
name:
|
|
19
|
+
name: AppName;
|
|
15
20
|
path: string;
|
|
16
21
|
config?: CreateConfig;
|
|
17
22
|
program(app: PulumiApp): TResources | Promise<TResources>;
|
|
18
23
|
}
|
|
24
|
+
export interface ProgramDecorator<TApp, TResources> {
|
|
25
|
+
(program: PulumiProgram<TApp, TResources>, app: TApp): ReturnType<PulumiProgram<TResources>>;
|
|
26
|
+
}
|
|
19
27
|
export interface PulumiApp<TResources = Record<string, unknown>> {
|
|
20
28
|
resourceHandlers: ResourceHandler[];
|
|
21
29
|
handlers: (() => void | Promise<void>)[];
|
|
@@ -27,12 +35,17 @@ export interface PulumiApp<TResources = Record<string, unknown>> {
|
|
|
27
35
|
workspace: string;
|
|
28
36
|
};
|
|
29
37
|
name: string;
|
|
30
|
-
|
|
38
|
+
decorateProgram: <T>(decorator: ProgramDecorator<PulumiApp<TResources> & T, TResources>) => void;
|
|
39
|
+
program: PulumiProgram;
|
|
31
40
|
resources: TResources;
|
|
32
41
|
params: {
|
|
33
42
|
create: CreateConfig;
|
|
34
43
|
run: RunConfig;
|
|
35
44
|
};
|
|
45
|
+
env: {
|
|
46
|
+
name: string;
|
|
47
|
+
isProduction: boolean;
|
|
48
|
+
};
|
|
36
49
|
run(params: RunConfig): Record<string, any>;
|
|
37
50
|
onResource(handler: ResourceHandler): void;
|
|
38
51
|
addResource<T extends PulumiAppResourceConstructor>(resourceConstructor: T, params: CreatePulumiAppResourceParams<T>): PulumiAppResource<T>;
|
package/types.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["PulumiAppRemoteResource.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\n\nexport interface PulumiAppRemoteResource<T> {\n name: string;\n readonly output: pulumi.Output<pulumi.Unwrap<T>>;\n}\n"],"mappings":""}
|
package/PulumiAppResource.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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}\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 output: pulumi.Output<pulumi.Unwrap<PulumiAppResourceType<T>>>;\n}\n"],"mappings":""}
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./createPulumiApp\";\nexport * from \"./isResourceOfType\";\nexport * from \"./PulumiAppModule\";\nexport * from \"./PulumiAppResource\";\nexport * from \"./PulumiAppRemoteResource\";\nexport * from \"./types\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
package/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport { PulumiAppModuleDefinition } from \"./PulumiAppModule\";\nimport {\n PulumiAppResourceConstructor,\n PulumiAppResource,\n CreatePulumiAppResourceParams\n} from \"./PulumiAppResource\";\nimport { PulumiAppRemoteResource } from \"~/PulumiAppRemoteResource\";\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<TResources = Record<string, any>> = (\n app: PulumiApp\n) => TResources | Promise<TResources>;\n\nexport type CreateConfig = Record<string, any>;\nexport type RunConfig = Record<string, any>;\n\nexport interface CreatePulumiAppParams<TResources extends Record<string, unknown>> {\n name: string;\n path: string;\n config?: CreateConfig;\n program(app: PulumiApp): TResources | Promise<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 program: PulumiProgram<TResources>;\n resources: TResources;\n params: {\n create: CreateConfig;\n run: RunConfig;\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 addOutputs(outputs: Record<string, unknown>): void;\n\n addModule<TModule>(def: PulumiAppModuleDefinition<TModule, void>): TModule;\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 getModule<TConfig, TModule>(\n def: PulumiAppModuleDefinition<TModule, TConfig>,\n opts: { optional: false }\n ): TModule;\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":""}
|