alchemy 0.16.0 → 0.16.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.
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +6 -5
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +31 -31
- package/lib/apply.js.map +1 -1
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +3 -2
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/r2-rest-state-store.d.ts +1 -1
- package/lib/cloudflare/r2-rest-state-store.d.ts.map +1 -1
- package/lib/cloudflare/r2-rest-state-store.js +5 -4
- package/lib/cloudflare/r2-rest-state-store.js.map +1 -1
- package/lib/cloudflare/worker.js +1 -1
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/context.d.ts +1 -1
- package/lib/context.d.ts.map +1 -1
- package/lib/context.js +6 -5
- package/lib/context.js.map +1 -1
- package/lib/destroy.d.ts.map +1 -1
- package/lib/destroy.js +20 -20
- package/lib/destroy.js.map +1 -1
- package/lib/fs/file-system-state-store.d.ts +1 -1
- package/lib/fs/file-system-state-store.d.ts.map +1 -1
- package/lib/fs/file-system-state-store.js +5 -3
- package/lib/fs/file-system-state-store.js.map +1 -1
- package/lib/resource.d.ts +15 -11
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +12 -7
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +1 -1
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +2 -1
- package/lib/scope.js.map +1 -1
- package/lib/state.d.ts +3 -2
- package/lib/state.d.ts.map +1 -1
- package/lib/state.js +29 -0
- package/lib/state.js.map +1 -1
- package/package.json +1 -1
- package/src/alchemy.ts +13 -6
- package/src/apply.ts +37 -30
- package/src/cloudflare/queue.ts +6 -3
- package/src/cloudflare/r2-rest-state-store.ts +5 -5
- package/src/cloudflare/worker.ts +1 -1
- package/src/context.ts +21 -13
- package/src/destroy.ts +34 -20
- package/src/fs/file-system-state-store.ts +5 -7
- package/src/resource.ts +22 -18
- package/src/scope.ts +2 -2
- package/src/state.ts +42 -2
package/lib/destroy.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { alchemy } from "./alchemy.js";
|
|
2
2
|
import { context } from "./context.js";
|
|
3
|
-
import { PROVIDERS } from "./resource.js";
|
|
3
|
+
import { PROVIDERS, ResourceFQN, ResourceID, ResourceKind, ResourceScope, ResourceSeq, } from "./resource.js";
|
|
4
4
|
import { Scope } from "./scope.js";
|
|
5
5
|
export class DestroyedSignal extends Error {
|
|
6
6
|
}
|
|
@@ -33,38 +33,38 @@ export async function destroy(...args) {
|
|
|
33
33
|
if (!instance) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
if (instance
|
|
36
|
+
if (instance[ResourceKind] === Scope.KIND) {
|
|
37
37
|
const scope = new Scope({
|
|
38
|
-
parent: instance
|
|
39
|
-
scopeName: instance
|
|
38
|
+
parent: instance[ResourceScope],
|
|
39
|
+
scopeName: instance[ResourceID],
|
|
40
40
|
});
|
|
41
41
|
console.log("Destroying scope", scope.chain.join("/"));
|
|
42
42
|
return await destroy(scope, options);
|
|
43
43
|
}
|
|
44
|
-
const Provider = PROVIDERS.get(instance
|
|
44
|
+
const Provider = PROVIDERS.get(instance[ResourceKind]);
|
|
45
45
|
if (!Provider) {
|
|
46
|
-
throw new Error(`Cannot destroy resource "${instance
|
|
46
|
+
throw new Error(`Cannot destroy resource "${instance[ResourceFQN]}" type ${instance[ResourceKind]} - no provider found. You may need to import the provider in your alchemy.config.ts.`);
|
|
47
47
|
}
|
|
48
|
-
const scope = instance
|
|
48
|
+
const scope = instance[ResourceScope];
|
|
49
49
|
if (!scope) {
|
|
50
|
-
console.warn(`Resource "${instance
|
|
50
|
+
console.warn(`Resource "${instance[ResourceFQN]}" has no scope`);
|
|
51
51
|
}
|
|
52
52
|
const quiet = options?.quiet ?? scope.quiet;
|
|
53
53
|
try {
|
|
54
54
|
if (!quiet) {
|
|
55
|
-
console.log(`Delete: "${instance
|
|
55
|
+
console.log(`Delete: "${instance[ResourceFQN]}"`);
|
|
56
56
|
}
|
|
57
|
-
const state = await scope.state.get(instance
|
|
57
|
+
const state = await scope.state.get(instance[ResourceID]);
|
|
58
58
|
if (state === undefined) {
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
const ctx = context({
|
|
62
62
|
scope,
|
|
63
63
|
phase: "delete",
|
|
64
|
-
kind: instance
|
|
65
|
-
id: instance
|
|
66
|
-
fqn: instance
|
|
67
|
-
seq: instance
|
|
64
|
+
kind: instance[ResourceKind],
|
|
65
|
+
id: instance[ResourceID],
|
|
66
|
+
fqn: instance[ResourceFQN],
|
|
67
|
+
seq: instance[ResourceSeq],
|
|
68
68
|
props: state.props,
|
|
69
69
|
state,
|
|
70
70
|
replace: () => {
|
|
@@ -74,13 +74,13 @@ export async function destroy(...args) {
|
|
|
74
74
|
let nestedScope;
|
|
75
75
|
try {
|
|
76
76
|
// BUG: this does not restore persisted scope
|
|
77
|
-
await alchemy.run(instance
|
|
77
|
+
await alchemy.run(instance[ResourceID], {
|
|
78
78
|
// TODO(sam): this is an awful hack to differentiate between naked scopes and resources
|
|
79
|
-
isResource: instance
|
|
79
|
+
isResource: instance[ResourceKind] !== "alchemy::Scope",
|
|
80
80
|
parent: scope,
|
|
81
81
|
}, async (scope) => {
|
|
82
82
|
nestedScope = scope;
|
|
83
|
-
return await Provider.handler.bind(ctx)(instance
|
|
83
|
+
return await Provider.handler.bind(ctx)(instance[ResourceID], state.props);
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
catch (err) {
|
|
@@ -94,9 +94,9 @@ export async function destroy(...args) {
|
|
|
94
94
|
if (nestedScope) {
|
|
95
95
|
await destroy(nestedScope, options);
|
|
96
96
|
}
|
|
97
|
-
await scope.delete(instance
|
|
97
|
+
await scope.delete(instance[ResourceID]);
|
|
98
98
|
if (!quiet) {
|
|
99
|
-
console.log(`Deleted: "${instance
|
|
99
|
+
console.log(`Deleted: "${instance[ResourceFQN]}"`);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
catch (error) {
|
|
@@ -107,7 +107,7 @@ export async function destroy(...args) {
|
|
|
107
107
|
(function (destroy) {
|
|
108
108
|
async function all(resources, options) {
|
|
109
109
|
if (options?.strategy !== "parallel") {
|
|
110
|
-
const sorted = resources.sort((a, b) => b
|
|
110
|
+
const sorted = resources.sort((a, b) => b[ResourceSeq] - a[ResourceSeq]);
|
|
111
111
|
for (const resource of sorted) {
|
|
112
112
|
await destroy(resource, options);
|
|
113
113
|
}
|
package/lib/destroy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Scope } from "../scope.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type State, type StateStore } from "../state.js";
|
|
3
3
|
export declare class FileSystemStateStore implements StateStore {
|
|
4
4
|
readonly scope: Scope;
|
|
5
5
|
readonly dir: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system-state-store.d.ts","sourceRoot":"","sources":["../../src/fs/file-system-state-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-system-state-store.d.ts","sourceRoot":"","sources":["../../src/fs/file-system-state-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAoB,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAK5E,qBAAa,oBAAqB,YAAW,UAAU;aAGzB,KAAK,EAAE,KAAK;IAFxC,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,WAAW,CAAS;gBACA,KAAK,EAAE,KAAK;IAIlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAiB5C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAIrC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAgB7D,OAAO,CAAC,OAAO;CAShB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { ResourceScope } from "../resource.js";
|
|
4
|
+
import { serialize } from "../serde.js";
|
|
5
|
+
import { deserializeState } from "../state.js";
|
|
4
6
|
import { ignore } from "../util/ignore.js";
|
|
5
7
|
const stateRootDir = path.join(process.cwd(), ".alchemy");
|
|
6
8
|
export class FileSystemStateStore {
|
|
@@ -44,11 +46,11 @@ export class FileSystemStateStore {
|
|
|
44
46
|
async get(key) {
|
|
45
47
|
try {
|
|
46
48
|
const content = await fs.promises.readFile(this.getPath(key), "utf8");
|
|
47
|
-
const state =
|
|
49
|
+
const state = await deserializeState(this.scope, content);
|
|
48
50
|
if (state.output === undefined) {
|
|
49
51
|
state.output = {};
|
|
50
52
|
}
|
|
51
|
-
state.output
|
|
53
|
+
state.output[ResourceScope] = this.scope;
|
|
52
54
|
return state;
|
|
53
55
|
}
|
|
54
56
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system-state-store.js","sourceRoot":"","sources":["../../src/fs/file-system-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"file-system-state-store.js","sourceRoot":"","sources":["../../src/fs/file-system-state-store.ts"],"names":[],"mappings":"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"}
|
package/lib/resource.d.ts
CHANGED
|
@@ -2,8 +2,13 @@ import type { Context } from "./context.js";
|
|
|
2
2
|
import { Scope as _Scope } from "./scope.js";
|
|
3
3
|
export declare const PROVIDERS: Map<string, any>;
|
|
4
4
|
export type ResourceID = string;
|
|
5
|
+
export declare const ResourceID: unique symbol;
|
|
5
6
|
export type ResourceFQN = string;
|
|
7
|
+
export declare const ResourceFQN: unique symbol;
|
|
6
8
|
export type ResourceKind = string;
|
|
9
|
+
export declare const ResourceKind: unique symbol;
|
|
10
|
+
export declare const ResourceScope: unique symbol;
|
|
11
|
+
export declare const ResourceSeq: unique symbol;
|
|
7
12
|
export interface ProviderOptions {
|
|
8
13
|
/**
|
|
9
14
|
* If true, the resource will be updated even if the inputs have not changed.
|
|
@@ -19,19 +24,18 @@ export type Provider<Type extends string = string, F extends ResourceLifecycleHa
|
|
|
19
24
|
handler: F;
|
|
20
25
|
};
|
|
21
26
|
export type PendingResource<Out = unknown, Kind extends ResourceKind = ResourceKind, ID extends ResourceID = ResourceID, FQN extends ResourceFQN = ResourceFQN, Scope extends _Scope = _Scope, Seq extends number = number> = Promise<Out> & {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
signal: () => void;
|
|
27
|
+
[ResourceKind]: Kind;
|
|
28
|
+
[ResourceID]: ID;
|
|
29
|
+
[ResourceFQN]: FQN;
|
|
30
|
+
[ResourceScope]: Scope;
|
|
31
|
+
[ResourceSeq]: Seq;
|
|
28
32
|
};
|
|
29
33
|
export interface Resource<Kind extends ResourceKind = ResourceKind, ID extends ResourceID = ResourceID, FQN extends ResourceFQN = ResourceFQN, Scope extends _Scope = _Scope, Seq extends number = number> {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
[ResourceKind]: Kind;
|
|
35
|
+
[ResourceID]: ID;
|
|
36
|
+
[ResourceFQN]: FQN;
|
|
37
|
+
[ResourceScope]: Scope;
|
|
38
|
+
[ResourceSeq]: Seq;
|
|
35
39
|
}
|
|
36
40
|
type IsClass = {
|
|
37
41
|
new (_: never): never;
|
package/lib/resource.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,SAAS,kBAAiD,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
|
package/lib/resource.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { apply } from "./apply.js";
|
|
2
2
|
import { Scope as _Scope } from "./scope.js";
|
|
3
3
|
export const PROVIDERS = new Map();
|
|
4
|
+
export const ResourceID = Symbol.for("alchemy::ResourceID");
|
|
5
|
+
export const ResourceFQN = Symbol.for("alchemy::ResourceFQN");
|
|
6
|
+
export const ResourceKind = Symbol.for("alchemy::ResourceKind");
|
|
7
|
+
export const ResourceScope = Symbol.for("alchemy::ResourceScope");
|
|
8
|
+
export const ResourceSeq = Symbol.for("alchemy::ResourceSeq");
|
|
4
9
|
export function Resource(type, ...args) {
|
|
5
10
|
if (PROVIDERS.has(type)) {
|
|
6
11
|
throw new Error(`Resource ${type} already exists`);
|
|
@@ -16,9 +21,9 @@ export function Resource(type, ...args) {
|
|
|
16
21
|
// TODO(sam): do we want to throw?
|
|
17
22
|
// it's kind of awesome that you can re-create a resource and call apply
|
|
18
23
|
const otherResource = scope.resources.get(resourceID);
|
|
19
|
-
if (otherResource?.
|
|
24
|
+
if (otherResource?.[ResourceKind] !== type) {
|
|
20
25
|
scope.fail();
|
|
21
|
-
throw new Error(`Resource ${resourceID} already exists in the stack and is of a different type: '${otherResource?.
|
|
26
|
+
throw new Error(`Resource ${resourceID} already exists in the stack and is of a different type: '${otherResource?.[ResourceKind]}' !== '${type}'`);
|
|
22
27
|
}
|
|
23
28
|
// console.warn(
|
|
24
29
|
// `Resource ${resourceID} already exists in the stack: ${scope.chain.join("/")}`,
|
|
@@ -27,11 +32,11 @@ export function Resource(type, ...args) {
|
|
|
27
32
|
// get a sequence number (unique within the scope) for the resource
|
|
28
33
|
const seq = scope.seq();
|
|
29
34
|
const meta = {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
[ResourceKind]: type,
|
|
36
|
+
[ResourceID]: resourceID,
|
|
37
|
+
[ResourceFQN]: scope.fqn(resourceID),
|
|
38
|
+
[ResourceSeq]: seq,
|
|
39
|
+
[ResourceScope]: scope,
|
|
35
40
|
};
|
|
36
41
|
const promise = apply(meta, props, options);
|
|
37
42
|
const resource = Object.assign(promise, meta);
|
package/lib/resource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
|
package/lib/scope.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Phase } from "./alchemy.js";
|
|
2
|
-
import
|
|
2
|
+
import { ResourceID, type PendingResource } from "./resource.js";
|
|
3
3
|
import type { StateStore, StateStoreType } from "./state.js";
|
|
4
4
|
export type ScopeOptions = {
|
|
5
5
|
appName?: string;
|
package/lib/scope.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI7D,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAKF,qBAAa,KAAK;IAChB,gBAAuB,IAAI,EAAG,gBAAgB,CAAU;WAE1C,GAAG,IAAI,KAAK,GAAG,SAAS;IAItC,WAAkB,OAAO,IAAI,KAAK,CAMjC;IAED,SAAgB,SAAS,+BAA0C;IACnE,SAAgB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,SAAgB,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1C,SAAgB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,SAAgB,UAAU,EAAE,cAAc,CAAC;IAC3C,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAgB,KAAK,EAAE,KAAK,CAAC;IAE7B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,YAAY;IA4BpB,MAAM,CAAC,UAAU,EAAE,UAAU;IAK1C,OAAO,CAAC,IAAI,CAAK;IAEV,GAAG;IAIV,IAAW,KAAK,IAAI,MAAM,EAAE,CAO3B;IAEM,IAAI;IAKJ,KAAK;IAIC,IAAI;IAIJ,MAAM;IAKZ,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IAI7B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjE,CAAC,MAAM,CAAC,YAAY,CAAC;IAIR,QAAQ;IAuBrB;;OAEG;IACI,QAAQ;CAQhB"}
|
package/lib/scope.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
import { destroy } from "./destroy.js";
|
|
3
3
|
import { FileSystemStateStore } from "./fs/file-system-state-store.js";
|
|
4
|
+
import { ResourceID } from "./resource.js";
|
|
4
5
|
const scopeStorage = new AsyncLocalStorage();
|
|
5
6
|
// TODO: support browser
|
|
6
7
|
const DEFAULT_STAGE = process.env.ALCHEMY_STAGE ?? process.env.USER ?? "dev";
|
|
@@ -116,7 +117,7 @@ export class Scope {
|
|
|
116
117
|
return `Scope(
|
|
117
118
|
chain=${this.chain.join("/")},
|
|
118
119
|
resources=[${Array.from(this.resources.values())
|
|
119
|
-
.map((r) => r
|
|
120
|
+
.map((r) => r[ResourceID])
|
|
120
121
|
.join(",\n ")}]
|
|
121
122
|
)`;
|
|
122
123
|
}
|
package/lib/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAwB,MAAM,eAAe,CAAC;AAGjE,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAS,CAAC;AAapD,wBAAwB;AACxB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;AAE7E,MAAM,OAAO,KAAK;IACT,MAAM,CAAU,IAAI,GAAG,gBAAyB,CAAC;IAEjD,MAAM,CAAC,GAAG;QACf,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAEM,MAAM,KAAK,OAAO;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IACnD,OAAO,CAAqB;IAC5B,KAAK,CAAS;IACd,SAAS,CAAgB;IACzB,MAAM,CAAoB;IAC1B,QAAQ,CAAqB;IAC7B,KAAK,CAAa;IAClB,UAAU,CAAiB;IAC3B,KAAK,CAAU;IACf,KAAK,CAAQ;IAErB,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,OAAqB;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,SAAS,+BAA+B,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;QAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,UAAU;YACb,OAAO,CAAC,UAAU;gBAClB,IAAI,CAAC,MAAM,EAAE,UAAU;gBACvB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,UAAsB;QACxC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAEO,IAAI,GAAG,CAAC,CAAC;IAEV,GAAG;QACR,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,IAAW,KAAK;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAEM,KAAK;QACV,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9B,CAAC;IAEM,GAAG,CAAC,UAAsB;QAC/B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,EAAgC;QAClD,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,CAAC,MAAM,CAAC,YAAY,CAAC;QACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,yCAAyC;YACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAC1B,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAC9C,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAE,CAAC,MAAM,CAAC,CAChE,CAAC;YACF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO;UACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;eACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aACzB,IAAI,CAAC,OAAO,CAAC;EAChB,CAAC;IACD,CAAC"}
|
package/lib/state.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import
|
|
1
|
+
import { type Resource, type ResourceProps } from "./resource.js";
|
|
2
|
+
import { Scope } from "./scope.js";
|
|
3
3
|
export type State<Kind extends string = string, Props extends ResourceProps | undefined = ResourceProps | undefined, Out extends Resource = Resource> = {
|
|
4
4
|
status: `creating` | `created` | `updating` | `updated` | `deleting` | `deleted`;
|
|
5
5
|
kind: Kind;
|
|
@@ -27,4 +27,5 @@ export interface StateStore {
|
|
|
27
27
|
set(key: string, value: State): Promise<void>;
|
|
28
28
|
delete(key: string): Promise<void>;
|
|
29
29
|
}
|
|
30
|
+
export declare function deserializeState(scope: Scope, content: string): Promise<State>;
|
|
30
31
|
//# sourceMappingURL=state.d.ts.map
|
package/lib/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,MAAM,KAAK,CACf,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,KAAK,SAAS,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,EACnE,GAAG,SAAS,QAAQ,GAAG,QAAQ,IAC7B;IACF,MAAM,EACF,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,UAAU,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+CAA+C;IAC/C,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,6CAA6C;IAC7C,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,mDAAmD;IACnD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC,CA0BhB"}
|
package/lib/state.js
CHANGED
|
@@ -1 +1,30 @@
|
|
|
1
|
+
import { ResourceFQN, ResourceID, ResourceKind, ResourceScope, ResourceSeq, } from "./resource.js";
|
|
2
|
+
import { Scope } from "./scope.js";
|
|
3
|
+
import { deserialize } from "./serde.js";
|
|
4
|
+
export async function deserializeState(scope, content) {
|
|
5
|
+
const state = (await deserialize(scope, JSON.parse(content)));
|
|
6
|
+
if (ResourceID in state.output) {
|
|
7
|
+
// this is a new state
|
|
8
|
+
return state;
|
|
9
|
+
}
|
|
10
|
+
const output = state.output;
|
|
11
|
+
delete output.Kind;
|
|
12
|
+
delete output.ID;
|
|
13
|
+
delete output.FQN;
|
|
14
|
+
delete output.Scope;
|
|
15
|
+
delete output.Seq;
|
|
16
|
+
// fix this bug
|
|
17
|
+
if (state.kind === "scope") {
|
|
18
|
+
state.kind = Scope.KIND;
|
|
19
|
+
}
|
|
20
|
+
output[ResourceKind] = state.kind;
|
|
21
|
+
output[ResourceID] = state.id;
|
|
22
|
+
output[ResourceFQN] = state.fqn;
|
|
23
|
+
output[ResourceScope] = scope;
|
|
24
|
+
output[ResourceSeq] = state.seq;
|
|
25
|
+
state.output = output;
|
|
26
|
+
// re-write the state with the migrated format
|
|
27
|
+
await scope.state.set(state.id, state);
|
|
28
|
+
return state;
|
|
29
|
+
}
|
|
1
30
|
//# sourceMappingURL=state.js.map
|
package/lib/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,GAGZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2CzC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAY,EACZ,OAAe;IAEf,MAAM,KAAK,GAAG,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAU,CAAC;IAEvE,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/B,sBAAsB;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAQ,KAAK,CAAC,MAAM,CAAC;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC;IACnB,OAAO,MAAM,CAAC,EAAE,CAAC;IACjB,OAAO,MAAM,CAAC,GAAG,CAAC;IAClB,OAAO,MAAM,CAAC,KAAK,CAAC;IACpB,OAAO,MAAM,CAAC,GAAG,CAAC;IAClB,eAAe;IACf,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IAClC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;IAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IAChC,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;IAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IAChC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,8CAA8C;IAC9C,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
package/src/alchemy.ts
CHANGED
|
@@ -3,7 +3,14 @@ import path from "node:path";
|
|
|
3
3
|
|
|
4
4
|
import { destroy, DestroyedSignal } from "./destroy.js";
|
|
5
5
|
import { env } from "./env.js";
|
|
6
|
-
import
|
|
6
|
+
import {
|
|
7
|
+
ResourceFQN,
|
|
8
|
+
ResourceID,
|
|
9
|
+
ResourceKind,
|
|
10
|
+
ResourceScope,
|
|
11
|
+
ResourceSeq,
|
|
12
|
+
type PendingResource,
|
|
13
|
+
} from "./resource.js";
|
|
7
14
|
import { Scope } from "./scope.js";
|
|
8
15
|
import { secret } from "./secret.js";
|
|
9
16
|
import type { StateStoreType } from "./state.js";
|
|
@@ -325,11 +332,11 @@ async function run<T>(
|
|
|
325
332
|
// TODO(sam): this is an awful hack to differentiate between naked scopes and resources
|
|
326
333
|
const seq = _scope.parent.seq();
|
|
327
334
|
const output = {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
335
|
+
[ResourceID]: id,
|
|
336
|
+
[ResourceFQN]: "",
|
|
337
|
+
[ResourceKind]: Scope.KIND,
|
|
338
|
+
[ResourceScope]: _scope,
|
|
339
|
+
[ResourceSeq]: seq,
|
|
333
340
|
} as const;
|
|
334
341
|
const resource = {
|
|
335
342
|
kind: Scope.KIND,
|
package/src/apply.ts
CHANGED
|
@@ -2,6 +2,11 @@ import { alchemy } from "./alchemy.js";
|
|
|
2
2
|
import { context } from "./context.js";
|
|
3
3
|
import {
|
|
4
4
|
PROVIDERS,
|
|
5
|
+
ResourceFQN,
|
|
6
|
+
ResourceID,
|
|
7
|
+
ResourceKind,
|
|
8
|
+
ResourceScope,
|
|
9
|
+
ResourceSeq,
|
|
5
10
|
type PendingResource,
|
|
6
11
|
type Provider,
|
|
7
12
|
type Resource,
|
|
@@ -20,42 +25,44 @@ export async function apply<Out extends Resource>(
|
|
|
20
25
|
props: ResourceProps | undefined,
|
|
21
26
|
options?: ApplyOptions,
|
|
22
27
|
): Promise<Awaited<Out>> {
|
|
23
|
-
const scope = resource
|
|
28
|
+
const scope = resource[ResourceScope];
|
|
24
29
|
try {
|
|
25
30
|
const quiet = props?.quiet ?? scope.quiet;
|
|
26
31
|
await scope.init();
|
|
27
|
-
let state: State | undefined = (await scope.state.get(
|
|
28
|
-
|
|
32
|
+
let state: State | undefined = (await scope.state.get(
|
|
33
|
+
resource[ResourceID],
|
|
34
|
+
))!;
|
|
35
|
+
const provider: Provider = PROVIDERS.get(resource[ResourceKind]);
|
|
29
36
|
if (provider === undefined) {
|
|
30
|
-
throw new Error(`Provider "${resource
|
|
37
|
+
throw new Error(`Provider "${resource[ResourceKind]}" not found`);
|
|
31
38
|
}
|
|
32
39
|
if (scope.phase === "read") {
|
|
33
40
|
if (state === undefined) {
|
|
34
41
|
throw new Error(
|
|
35
|
-
`Resource "${resource
|
|
42
|
+
`Resource "${resource[ResourceFQN]}" not found and running in 'read' phase.`,
|
|
36
43
|
);
|
|
37
44
|
}
|
|
38
45
|
return state.output as Awaited<Out>;
|
|
39
46
|
}
|
|
40
47
|
if (state === undefined) {
|
|
41
48
|
state = {
|
|
42
|
-
kind: resource
|
|
43
|
-
id: resource
|
|
44
|
-
fqn: resource
|
|
45
|
-
seq: resource
|
|
49
|
+
kind: resource[ResourceKind],
|
|
50
|
+
id: resource[ResourceID],
|
|
51
|
+
fqn: resource[ResourceFQN],
|
|
52
|
+
seq: resource[ResourceSeq],
|
|
46
53
|
status: "creating",
|
|
47
54
|
data: {},
|
|
48
55
|
output: {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
[ResourceID]: resource[ResourceID],
|
|
57
|
+
[ResourceFQN]: resource[ResourceFQN],
|
|
58
|
+
[ResourceKind]: resource[ResourceKind],
|
|
59
|
+
[ResourceScope]: scope,
|
|
60
|
+
[ResourceSeq]: resource[ResourceSeq],
|
|
54
61
|
},
|
|
55
62
|
// deps: [...deps],
|
|
56
63
|
props,
|
|
57
64
|
};
|
|
58
|
-
await scope.state.set(resource
|
|
65
|
+
await scope.state.set(resource[ResourceID], state);
|
|
59
66
|
}
|
|
60
67
|
|
|
61
68
|
const alwaysUpdate =
|
|
@@ -87,27 +94,27 @@ export async function apply<Out extends Resource>(
|
|
|
87
94
|
|
|
88
95
|
if (!quiet) {
|
|
89
96
|
console.log(
|
|
90
|
-
`${phase === "create" ? "Create" : "Update"}: "${resource
|
|
97
|
+
`${phase === "create" ? "Create" : "Update"}: "${resource[ResourceFQN]}"`,
|
|
91
98
|
);
|
|
92
99
|
}
|
|
93
100
|
|
|
94
|
-
await scope.state.set(resource
|
|
101
|
+
await scope.state.set(resource[ResourceID], state);
|
|
95
102
|
|
|
96
103
|
let isReplaced = false;
|
|
97
104
|
|
|
98
105
|
const ctx = context({
|
|
99
106
|
scope,
|
|
100
107
|
phase,
|
|
101
|
-
kind: resource
|
|
102
|
-
id: resource
|
|
103
|
-
fqn: resource
|
|
104
|
-
seq: resource
|
|
108
|
+
kind: resource[ResourceKind],
|
|
109
|
+
id: resource[ResourceID],
|
|
110
|
+
fqn: resource[ResourceFQN],
|
|
111
|
+
seq: resource[ResourceSeq],
|
|
105
112
|
props: state.oldProps,
|
|
106
113
|
state,
|
|
107
114
|
replace: () => {
|
|
108
115
|
if (isReplaced) {
|
|
109
116
|
console.warn(
|
|
110
|
-
`Resource ${resource
|
|
117
|
+
`Resource ${resource[ResourceKind]} ${resource[ResourceFQN]} is already marked as REPLACE`,
|
|
111
118
|
);
|
|
112
119
|
return;
|
|
113
120
|
}
|
|
@@ -116,23 +123,23 @@ export async function apply<Out extends Resource>(
|
|
|
116
123
|
});
|
|
117
124
|
|
|
118
125
|
const output = await alchemy.run(
|
|
119
|
-
resource
|
|
126
|
+
resource[ResourceID],
|
|
120
127
|
{
|
|
121
128
|
isResource: true,
|
|
122
129
|
},
|
|
123
|
-
async () => provider.handler.bind(ctx)(resource
|
|
130
|
+
async () => provider.handler.bind(ctx)(resource[ResourceID], props),
|
|
124
131
|
);
|
|
125
132
|
if (!quiet) {
|
|
126
133
|
console.log(
|
|
127
|
-
`${phase === "create" ? "Created" : "Updated"}: "${resource
|
|
134
|
+
`${phase === "create" ? "Created" : "Updated"}: "${resource[ResourceFQN]}"`,
|
|
128
135
|
);
|
|
129
136
|
}
|
|
130
137
|
|
|
131
|
-
await scope.state.set(resource
|
|
132
|
-
kind: resource
|
|
133
|
-
id: resource
|
|
134
|
-
fqn: resource
|
|
135
|
-
seq: resource
|
|
138
|
+
await scope.state.set(resource[ResourceID], {
|
|
139
|
+
kind: resource[ResourceKind],
|
|
140
|
+
id: resource[ResourceID],
|
|
141
|
+
fqn: resource[ResourceFQN],
|
|
142
|
+
seq: resource[ResourceSeq],
|
|
136
143
|
data: state.data,
|
|
137
144
|
status: phase === "create" ? "created" : "updated",
|
|
138
145
|
output,
|
package/src/cloudflare/queue.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Context } from "../context.js";
|
|
2
|
-
import { Resource } from "../resource.js";
|
|
2
|
+
import { Resource, ResourceKind } from "../resource.js";
|
|
3
3
|
import { CloudflareApiError, handleApiError } from "./api-error.js";
|
|
4
4
|
import {
|
|
5
|
-
type CloudflareApi,
|
|
6
5
|
createCloudflareApi,
|
|
6
|
+
type CloudflareApi,
|
|
7
7
|
type CloudflareApiOptions,
|
|
8
8
|
} from "./api.js";
|
|
9
9
|
|
|
@@ -59,7 +59,10 @@ export interface QueueProps extends CloudflareApiOptions {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
export function isQueue(eventSource: any): eventSource is Queue {
|
|
62
|
-
return
|
|
62
|
+
return (
|
|
63
|
+
ResourceKind in eventSource &&
|
|
64
|
+
eventSource[ResourceKind] === "cloudflare::Queue"
|
|
65
|
+
);
|
|
63
66
|
}
|
|
64
67
|
|
|
65
68
|
/**
|