alchemy 0.79.0 → 0.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +2 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bindings.js.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/miniflare/build-worker-options.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/build-worker-options.js +10 -0
- package/lib/cloudflare/miniflare/build-worker-options.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-controller.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-controller.js +2 -2
- package/lib/cloudflare/miniflare/miniflare-controller.js.map +1 -1
- package/lib/cloudflare/website.d.ts +4 -0
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +36 -2
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-metadata.d.ts +1 -1
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
- package/lib/cloudflare/worker-metadata.js +16 -1
- package/lib/cloudflare/worker-metadata.js.map +1 -1
- package/lib/cloudflare/worker-subdomain.d.ts +1 -0
- package/lib/cloudflare/worker-subdomain.d.ts.map +1 -1
- package/lib/cloudflare/worker-subdomain.js +10 -2
- package/lib/cloudflare/worker-subdomain.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +10 -0
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +8 -0
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +16 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/api.d.ts +14 -0
- package/lib/docker/api.d.ts.map +1 -1
- package/lib/docker/api.js +16 -1
- package/lib/docker/api.js.map +1 -1
- package/lib/docker/container.d.ts +5 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +69 -49
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/volume.d.ts +5 -0
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +43 -19
- package/lib/docker/volume.js.map +1 -1
- package/lib/neon/project.d.ts +30 -16
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +123 -1
- package/lib/neon/project.js.map +1 -1
- package/lib/util/find-open-port.d.ts +1 -0
- package/lib/util/find-open-port.d.ts.map +1 -1
- package/lib/util/find-open-port.js +15 -0
- package/lib/util/find-open-port.js.map +1 -1
- package/package.json +1 -1
- package/src/cloudflare/bindings.ts +3 -1
- package/src/cloudflare/bound.ts +19 -13
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/miniflare/build-worker-options.ts +10 -0
- package/src/cloudflare/miniflare/miniflare-controller.ts +3 -2
- package/src/cloudflare/website.ts +43 -2
- package/src/cloudflare/worker-metadata.ts +19 -1
- package/src/cloudflare/worker-subdomain.ts +14 -2
- package/src/cloudflare/worker.ts +11 -0
- package/src/cloudflare/wrangler.json.ts +14 -1
- package/src/docker/api.ts +22 -1
- package/src/docker/container.ts +83 -52
- package/src/docker/volume.ts +64 -27
- package/src/neon/project.ts +157 -2
- package/src/util/find-open-port.ts +18 -0
- package/workers/tunnel-proxy.js +1 -1
package/lib/docker/container.js
CHANGED
|
@@ -87,62 +87,82 @@ export const Container = Resource("docker::Container", async function (id, props
|
|
|
87
87
|
// Return destroyed state
|
|
88
88
|
return this.destroy();
|
|
89
89
|
}
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
let containerState = "created";
|
|
91
|
+
// Check if container already exists
|
|
92
|
+
const containerExists = await api.containerExists(containerName);
|
|
93
|
+
if (containerExists) {
|
|
92
94
|
if (this.phase === "update") {
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
if (containerExists) {
|
|
96
|
-
// Remove existing container for update
|
|
97
|
-
await api.removeContainer(containerName, true);
|
|
98
|
-
}
|
|
95
|
+
// Remove existing container for update
|
|
96
|
+
await api.removeContainer(containerName, true);
|
|
99
97
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const protocol = port.protocol || "tcp";
|
|
105
|
-
portMappings[`${port.external}`] = `${port.internal}/${protocol}`;
|
|
98
|
+
else {
|
|
99
|
+
// Create phase - check for adoption
|
|
100
|
+
if (!props.adopt) {
|
|
101
|
+
throw new Error(`Container "${containerName}" already exists. Use adopt: true to adopt it.`);
|
|
106
102
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
103
|
+
// Adopt existing container
|
|
104
|
+
const containerInfos = await api.inspectContainer(containerName);
|
|
105
|
+
const containerInfo = containerInfos[0];
|
|
106
|
+
let adoptedState = containerInfo.State.Status;
|
|
107
|
+
// Optionally start the container if requested
|
|
108
|
+
if (props.start && containerInfo.State.Status !== "running") {
|
|
109
|
+
await api.startContainer(containerName);
|
|
110
|
+
adoptedState = "running";
|
|
115
111
|
}
|
|
112
|
+
return {
|
|
113
|
+
...props,
|
|
114
|
+
id: containerInfo.Id,
|
|
115
|
+
name: containerName,
|
|
116
|
+
state: adoptedState,
|
|
117
|
+
createdAt: new Date(containerInfo.Created).getTime(),
|
|
118
|
+
};
|
|
116
119
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
});
|
|
125
|
-
// Connect to networks if specified
|
|
126
|
-
if (props.networks) {
|
|
127
|
-
for (const network of props.networks) {
|
|
128
|
-
const networkId = typeof network === "string" ? network : network.name;
|
|
129
|
-
await api.connectNetwork(containerId, networkId, {
|
|
130
|
-
aliases: network.aliases,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
120
|
+
}
|
|
121
|
+
// Prepare port mappings
|
|
122
|
+
const portMappings = {};
|
|
123
|
+
if (props.ports) {
|
|
124
|
+
for (const port of props.ports) {
|
|
125
|
+
const protocol = port.protocol || "tcp";
|
|
126
|
+
portMappings[`${port.external}`] = `${port.internal}/${protocol}`;
|
|
133
127
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
128
|
+
}
|
|
129
|
+
// Prepare volume mappings
|
|
130
|
+
const volumeMappings = {};
|
|
131
|
+
if (props.volumes) {
|
|
132
|
+
for (const volume of props.volumes) {
|
|
133
|
+
const readOnlyFlag = volume.readOnly ? ":ro" : "";
|
|
134
|
+
volumeMappings[volume.hostPath] =
|
|
135
|
+
`${volume.containerPath}${readOnlyFlag}`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Create new container
|
|
139
|
+
const containerId = await api.createContainer(imageRef, containerName, {
|
|
140
|
+
ports: portMappings,
|
|
141
|
+
env: props.environment,
|
|
142
|
+
volumes: volumeMappings,
|
|
143
|
+
cmd: props.command,
|
|
144
|
+
healthcheck: props.healthcheck,
|
|
145
|
+
});
|
|
146
|
+
// Connect to networks if specified
|
|
147
|
+
if (props.networks) {
|
|
148
|
+
for (const network of props.networks) {
|
|
149
|
+
const networkId = typeof network === "string" ? network : network.name;
|
|
150
|
+
await api.connectNetwork(containerId, networkId, {
|
|
151
|
+
aliases: network.aliases,
|
|
152
|
+
});
|
|
138
153
|
}
|
|
139
|
-
return {
|
|
140
|
-
...props,
|
|
141
|
-
id: containerId,
|
|
142
|
-
name: containerName,
|
|
143
|
-
state: containerState,
|
|
144
|
-
createdAt: Date.now(),
|
|
145
|
-
};
|
|
146
154
|
}
|
|
155
|
+
// Start container if requested
|
|
156
|
+
if (props.start) {
|
|
157
|
+
await api.startContainer(containerId);
|
|
158
|
+
containerState = "running";
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
...props,
|
|
162
|
+
id: containerId,
|
|
163
|
+
name: containerName,
|
|
164
|
+
state: containerState,
|
|
165
|
+
createdAt: Date.now(),
|
|
166
|
+
};
|
|
147
167
|
});
|
|
148
168
|
//# sourceMappingURL=container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/docker/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/docker/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAiNrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAC/B,mBAAmB,EACnB,KAAK,WAEH,EAAU,EACV,KAAqB;IAErB,+BAA+B;IAC/B,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;IAE5B,sBAAsB;IACtB,MAAM,QAAQ,GACZ,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEvE,yDAAyD;IACzD,MAAM,aAAa,GACjB,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAEvE,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;YACpB,4BAA4B;YAC5B,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAExC,mBAAmB;YACnB,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,yBAAyB;QACzB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,cAAc,GAAoC,SAAS,CAAC;IAEhE,oCAAoC;IACpC,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IAEjE,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,uCAAuC;YACvC,MAAM,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,cAAc,aAAa,gDAAgD,CAC5E,CAAC;YACJ,CAAC;YAED,2BAA2B;YAC3B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;YAE9C,8CAA8C;YAC9C,IAAI,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5D,MAAM,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;gBACxC,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;YAED,OAAO;gBACL,GAAG,KAAK;gBACR,EAAE,EAAE,aAAa,CAAC,EAAE;gBACpB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;YACxC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,cAAc,GAA2B,EAAE,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC7B,GAAG,MAAM,CAAC,aAAa,GAAG,YAAY,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE;QACrE,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,KAAK,CAAC,WAAW;QACtB,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,KAAK,CAAC,OAAO;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC;IAEH,mCAAmC;IACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YACvE,MAAM,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE;gBAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACtC,cAAc,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC,CACF,CAAC"}
|
package/lib/docker/volume.d.ts
CHANGED
|
@@ -35,6 +35,11 @@ export interface VolumeProps {
|
|
|
35
35
|
* Custom metadata labels for the volume
|
|
36
36
|
*/
|
|
37
37
|
labels?: VolumeLabel[] | Record<string, string>;
|
|
38
|
+
/**
|
|
39
|
+
* Whether to adopt the volume if it already exists
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
adopt?: boolean;
|
|
38
43
|
}
|
|
39
44
|
/**
|
|
40
45
|
* Docker Volume resource
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volume.d.ts","sourceRoot":"","sources":["../../src/docker/volume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"volume.d.ts","sourceRoot":"","sources":["../../src/docker/volume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,MAAO,SAAQ,WAAW;IACzC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,MAAM,yFAGT,OAAO,CAAC,MAAM,CAAC,MACjB,MAAM,SACH,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CA0FnB,CAAC"}
|
package/lib/docker/volume.js
CHANGED
|
@@ -54,25 +54,49 @@ export const Volume = Resource("docker::Volume", async function (id, props) {
|
|
|
54
54
|
// Return destroyed state
|
|
55
55
|
return this.destroy();
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
57
|
+
// Check if volume already exists
|
|
58
|
+
const volumeExists = await api.volumeExists(volumeName);
|
|
59
|
+
if (volumeExists) {
|
|
60
|
+
if (this.phase === "update") {
|
|
61
|
+
this.replace();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Create phase - check for adoption
|
|
65
|
+
if (!props.adopt) {
|
|
66
|
+
throw new Error(`Volume "${volumeName}" already exists. Use adopt: true to adopt it.`);
|
|
67
|
+
}
|
|
68
|
+
// Adopt existing volume
|
|
69
|
+
const volumeInfos = await api.inspectVolume(volumeName);
|
|
70
|
+
const volumeInfo = volumeInfos[0];
|
|
71
|
+
return {
|
|
72
|
+
...props,
|
|
73
|
+
id: volumeInfo.Name,
|
|
74
|
+
name: volumeInfo.Name,
|
|
75
|
+
driver: volumeInfo.Driver,
|
|
76
|
+
mountpoint: volumeInfo.Mountpoint,
|
|
77
|
+
createdAt: new Date(volumeInfo.CreatedAt).getTime(),
|
|
78
|
+
labels: Array.isArray(props.labels) ? props.labels : undefined,
|
|
79
|
+
driverOpts: volumeInfo.Options,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
76
82
|
}
|
|
83
|
+
// Set default driver if not provided
|
|
84
|
+
const driver = props.driver || "local";
|
|
85
|
+
const driverOpts = props.driverOpts || {};
|
|
86
|
+
// Create the volume
|
|
87
|
+
const volumeId = await api.createVolume(volumeName, driver, driverOpts, processedLabels);
|
|
88
|
+
// Get volume details to retrieve mountpoint
|
|
89
|
+
const volumeInfos = await api.inspectVolume(volumeId);
|
|
90
|
+
const mountpoint = volumeInfos[0].Mountpoint;
|
|
91
|
+
return {
|
|
92
|
+
...props,
|
|
93
|
+
driver: driver,
|
|
94
|
+
id: volumeId,
|
|
95
|
+
name: volumeName,
|
|
96
|
+
mountpoint,
|
|
97
|
+
createdAt: Date.now(),
|
|
98
|
+
labels: Array.isArray(props.labels) ? props.labels : undefined,
|
|
99
|
+
driverOpts: props.driverOpts,
|
|
100
|
+
};
|
|
77
101
|
});
|
|
78
102
|
//# sourceMappingURL=volume.js.map
|
package/lib/docker/volume.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volume.js","sourceRoot":"","sources":["../../src/docker/volume.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"volume.js","sourceRoot":"","sources":["../../src/docker/volume.ts"],"names":[],"mappings":"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"}
|
package/lib/neon/project.d.ts
CHANGED
|
@@ -11,6 +11,16 @@ export type NeonPgVersion = 14 | 15 | 16 | 17 | 18;
|
|
|
11
11
|
* Properties for creating or updating a Neon project
|
|
12
12
|
*/
|
|
13
13
|
export interface NeonProjectProps extends NeonApiOptions {
|
|
14
|
+
/**
|
|
15
|
+
* When `true`, will adopt an existing project by `name`
|
|
16
|
+
*/
|
|
17
|
+
adopt?: true;
|
|
18
|
+
/**
|
|
19
|
+
* Whether to delete the database when the resource is destroyed.
|
|
20
|
+
* When false, the database will only be removed from the state but not deleted via API.
|
|
21
|
+
* @default true, unless the resource was adopted
|
|
22
|
+
*/
|
|
23
|
+
delete?: boolean;
|
|
14
24
|
/**
|
|
15
25
|
* Name of the project
|
|
16
26
|
*
|
|
@@ -122,6 +132,13 @@ export interface NeonProject {
|
|
|
122
132
|
* });
|
|
123
133
|
*
|
|
124
134
|
* @example
|
|
135
|
+
* // Adopt an existing Neon project by name:
|
|
136
|
+
* const project = await NeonProject("my-project", {
|
|
137
|
+
* adopt: true
|
|
138
|
+
* name: "adjective-noun-123",
|
|
139
|
+
* });
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
125
142
|
* // Create a Neon project in a specific region with a specific PostgreSQL version:
|
|
126
143
|
* const euProject = await NeonProject("my-eu-project", {
|
|
127
144
|
* name: "My EU Project",
|
|
@@ -137,21 +154,18 @@ export interface NeonProject {
|
|
|
137
154
|
* default_branch_name: "development"
|
|
138
155
|
* });
|
|
139
156
|
*/
|
|
140
|
-
export declare const NeonProject: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<NeonProject>, id: string, props: NeonProjectProps) => Promise<
|
|
141
|
-
|
|
157
|
+
export declare const NeonProject: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<NeonProject>, id: string, props: NeonProjectProps) => Promise<NeonProject>);
|
|
158
|
+
/**
|
|
159
|
+
* References an existing Neon project by name. You can use this to reference an existing NeonProject without adopting it.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* const project = await NeonProjectRef({
|
|
163
|
+
* name: "my-project"
|
|
164
|
+
* });
|
|
165
|
+
*
|
|
166
|
+
* @warning Project names must be unique when referencing existing projects. If multiple projects are found with the same name, an error will be thrown.
|
|
167
|
+
*/
|
|
168
|
+
export declare function NeonProjectRef(props: NeonProjectProps & {
|
|
142
169
|
name: string;
|
|
143
|
-
|
|
144
|
-
updated_at: string;
|
|
145
|
-
proxy_host: string;
|
|
146
|
-
region_id: NeonRegion;
|
|
147
|
-
pg_version: NeonPgVersion;
|
|
148
|
-
settings: neon.ProjectSettingsData | undefined;
|
|
149
|
-
default_endpoint_settings: neon.DefaultEndpointSettings | undefined;
|
|
150
|
-
history_retention_seconds: number;
|
|
151
|
-
connection_uris: [NeonConnectionUri, ...NeonConnectionUri[]];
|
|
152
|
-
roles: [NeonRole, ...NeonRole[]];
|
|
153
|
-
databases: [neon.Database, ...neon.Database[]];
|
|
154
|
-
branch: neon.Branch;
|
|
155
|
-
endpoints: [neon.Endpoint, ...neon.Endpoint[]];
|
|
156
|
-
}>);
|
|
170
|
+
}): Promise<NeonProject>;
|
|
157
171
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/neon/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/neon/project.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAE9D,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,oBAAoB,GACpB,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,eAAe,GACf,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC;IAEb;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB;;;OAGG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;IAEpC;;OAEG;IACH,yBAAyB,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC;IAEzD;;;OAGG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAE/C;;OAEG;IACH,yBAAyB,EAAE,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAEpE;;OAEG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAE1B;;OAEG;IACH,eAAe,EAAE,CAAC,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC;IAE7D;;OAEG;IACH,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAEjC;;OAEG;IACH,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,WAAW,yFAGd,OAAO,CAAC,WAAW,CAAC,MACtB,MAAM,SACH,gBAAgB,0BA4H1B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,WAAW,CAAC,CAEtB"}
|
package/lib/neon/project.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { alchemy } from "../alchemy.js";
|
|
1
2
|
import { Resource } from "../resource.js";
|
|
2
3
|
import { createNeonApi } from "./api.js";
|
|
3
4
|
import { formatConnectionUri, formatRole, waitForOperations, } from "./utils.js";
|
|
@@ -11,6 +12,13 @@ import { formatConnectionUri, formatRole, waitForOperations, } from "./utils.js"
|
|
|
11
12
|
* });
|
|
12
13
|
*
|
|
13
14
|
* @example
|
|
15
|
+
* // Adopt an existing Neon project by name:
|
|
16
|
+
* const project = await NeonProject("my-project", {
|
|
17
|
+
* adopt: true
|
|
18
|
+
* name: "adjective-noun-123",
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
14
22
|
* // Create a Neon project in a specific region with a specific PostgreSQL version:
|
|
15
23
|
* const euProject = await NeonProject("my-eu-project", {
|
|
16
24
|
* name: "My EU Project",
|
|
@@ -31,6 +39,17 @@ export const NeonProject = Resource("neon::Project", async function (id, props)
|
|
|
31
39
|
const name = props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
32
40
|
switch (this.phase) {
|
|
33
41
|
case "create": {
|
|
42
|
+
if (props.adopt) {
|
|
43
|
+
try {
|
|
44
|
+
return await fetchProject(api, { ...props, name });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (!(error instanceof NeonProjectNotFound)) {
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
// project not found, continue with creation
|
|
51
|
+
}
|
|
52
|
+
}
|
|
34
53
|
const { data } = await api.createProject({
|
|
35
54
|
body: {
|
|
36
55
|
project: {
|
|
@@ -110,7 +129,7 @@ export const NeonProject = Resource("neon::Project", async function (id, props)
|
|
|
110
129
|
};
|
|
111
130
|
}
|
|
112
131
|
case "delete": {
|
|
113
|
-
if (this.output?.id) {
|
|
132
|
+
if (props.delete !== false && this.output?.id) {
|
|
114
133
|
const response = await api.deleteProject({
|
|
115
134
|
path: {
|
|
116
135
|
project_id: this.output.id,
|
|
@@ -127,4 +146,107 @@ export const NeonProject = Resource("neon::Project", async function (id, props)
|
|
|
127
146
|
}
|
|
128
147
|
}
|
|
129
148
|
});
|
|
149
|
+
/**
|
|
150
|
+
* References an existing Neon project by name. You can use this to reference an existing NeonProject without adopting it.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* const project = await NeonProjectRef({
|
|
154
|
+
* name: "my-project"
|
|
155
|
+
* });
|
|
156
|
+
*
|
|
157
|
+
* @warning Project names must be unique when referencing existing projects. If multiple projects are found with the same name, an error will be thrown.
|
|
158
|
+
*/
|
|
159
|
+
export async function NeonProjectRef(props) {
|
|
160
|
+
return await fetchProject(createNeonApi(props), props);
|
|
161
|
+
}
|
|
162
|
+
async function fetchProject(api, props) {
|
|
163
|
+
const project = await api
|
|
164
|
+
.listProjects({
|
|
165
|
+
query: { search: props.name },
|
|
166
|
+
})
|
|
167
|
+
.then(({ data: { projects } }) => {
|
|
168
|
+
if (!projects.length) {
|
|
169
|
+
throw new NeonProjectNotFound(props.name);
|
|
170
|
+
}
|
|
171
|
+
if (projects.length > 1) {
|
|
172
|
+
throw new Error(`Multiple projects found with name "${props.name}". Name must be unique when referencing existing projects.`);
|
|
173
|
+
}
|
|
174
|
+
return projects[0];
|
|
175
|
+
});
|
|
176
|
+
const endpointsPromise = api
|
|
177
|
+
.listProjectEndpoints({
|
|
178
|
+
path: { project_id: project.id },
|
|
179
|
+
})
|
|
180
|
+
.then((res) => res.data.endpoints);
|
|
181
|
+
const branch = await api
|
|
182
|
+
.listProjectBranches({
|
|
183
|
+
path: { project_id: project.id },
|
|
184
|
+
query: { search: props.default_branch_name ?? "main" },
|
|
185
|
+
})
|
|
186
|
+
.then((res) => {
|
|
187
|
+
if (!res.data.branches.length) {
|
|
188
|
+
throw new Error(`Branch ${props.default_branch_name ?? "main"} does not exist in Neon project "${props.name}" (${project.id}).`);
|
|
189
|
+
}
|
|
190
|
+
return res.data.branches[0];
|
|
191
|
+
});
|
|
192
|
+
const rolesPromise = api
|
|
193
|
+
.listProjectBranchRoles({
|
|
194
|
+
path: { project_id: project.id, branch_id: branch.id },
|
|
195
|
+
})
|
|
196
|
+
.then((res) => res.data.roles.map(formatRole));
|
|
197
|
+
const databases = await api
|
|
198
|
+
.listProjectBranchDatabases({
|
|
199
|
+
path: { project_id: project.id, branch_id: branch.id },
|
|
200
|
+
})
|
|
201
|
+
.then((res) => res.data.databases);
|
|
202
|
+
const [connection_uris, endpoints, roles] = await Promise.all([
|
|
203
|
+
Promise.all(databases.map(fetchConnectionUri)),
|
|
204
|
+
endpointsPromise,
|
|
205
|
+
rolesPromise,
|
|
206
|
+
]);
|
|
207
|
+
return {
|
|
208
|
+
id: project.id,
|
|
209
|
+
name: project.name,
|
|
210
|
+
created_at: project.created_at,
|
|
211
|
+
updated_at: project.updated_at,
|
|
212
|
+
proxy_host: project.proxy_host,
|
|
213
|
+
region_id: project.region_id,
|
|
214
|
+
pg_version: project.pg_version,
|
|
215
|
+
settings: project.settings,
|
|
216
|
+
default_endpoint_settings: project.default_endpoint_settings,
|
|
217
|
+
history_retention_seconds: project.history_retention_seconds ?? 86400,
|
|
218
|
+
connection_uris,
|
|
219
|
+
roles,
|
|
220
|
+
databases,
|
|
221
|
+
branch,
|
|
222
|
+
endpoints,
|
|
223
|
+
};
|
|
224
|
+
async function fetchConnectionUri(database) {
|
|
225
|
+
const { data: { uri }, } = await api.getConnectionUri({
|
|
226
|
+
path: { project_id: project.id },
|
|
227
|
+
query: {
|
|
228
|
+
branch_id: database.branch_id,
|
|
229
|
+
database_name: database.name,
|
|
230
|
+
role_name: database.owner_name,
|
|
231
|
+
pooled: false, // match default behavior from create endpoint (should this be true?)
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
const url = new URL(uri);
|
|
235
|
+
return {
|
|
236
|
+
connection_uri: alchemy.secret(uri),
|
|
237
|
+
connection_parameters: {
|
|
238
|
+
database: database.name,
|
|
239
|
+
host: url.host,
|
|
240
|
+
port: 5432,
|
|
241
|
+
user: url.username,
|
|
242
|
+
password: alchemy.secret(url.password),
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
class NeonProjectNotFound extends Error {
|
|
248
|
+
constructor(name) {
|
|
249
|
+
super(`Failed to find existing project "${name}".`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
130
252
|
//# sourceMappingURL=project.js.map
|
package/lib/neon/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/neon/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/neon/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-open-port.d.ts","sourceRoot":"","sources":["../../src/util/find-open-port.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-open-port.d.ts","sourceRoot":"","sources":["../../src/util/find-open-port.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,mBAU5C;AAED,wBAAsB,YAAY,CAAC,GAAG,SAAO,EAAE,GAAG,SAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAO3E"}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import net from "node:net";
|
|
2
|
+
import { AsyncMutex } from "./mutex.js";
|
|
3
|
+
const owners = new Map();
|
|
4
|
+
const ports = new Map();
|
|
5
|
+
const mutex = new AsyncMutex();
|
|
6
|
+
export async function reservePort(key) {
|
|
7
|
+
if (owners.has(key)) {
|
|
8
|
+
return owners.get(key);
|
|
9
|
+
}
|
|
10
|
+
return mutex.lock(async () => {
|
|
11
|
+
const port = await findOpenPort();
|
|
12
|
+
owners.set(key, port);
|
|
13
|
+
ports.set(port, key);
|
|
14
|
+
return port;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
2
17
|
export async function findOpenPort(min = 1337, max = 65535) {
|
|
3
18
|
for (let port = min; port <= max; port++) {
|
|
4
19
|
if (await isPortAvailable("0.0.0.0", port)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-open-port.js","sourceRoot":"","sources":["../../src/util/find-open-port.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"find-open-port.js","sourceRoot":"","sources":["../../src/util/find-open-port.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;AACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,KAAK;IACxD,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,MAAM,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,iBAAiB;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,oBAAoB;YACpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -26,10 +26,10 @@ import type { SecretRef as CloudflareSecretRef } from "./secret-ref.ts";
|
|
|
26
26
|
import type { Secret as CloudflareSecret } from "./secret.ts";
|
|
27
27
|
import type { VectorizeIndex } from "./vectorize-index.ts";
|
|
28
28
|
import type { VersionMetadata } from "./version-metadata.ts";
|
|
29
|
+
import type { WorkerLoader } from "./worker-loader.ts";
|
|
29
30
|
import type { WorkerRef } from "./worker-ref.ts";
|
|
30
31
|
import type { WorkerStub } from "./worker-stub.ts";
|
|
31
32
|
import type { Worker } from "./worker.ts";
|
|
32
|
-
import type { WorkerLoader } from "./worker-loader.ts";
|
|
33
33
|
import type { Workflow } from "./workflow.ts";
|
|
34
34
|
|
|
35
35
|
export type Bindings = {
|
|
@@ -72,6 +72,8 @@ export type Binding =
|
|
|
72
72
|
| string
|
|
73
73
|
| VectorizeIndex
|
|
74
74
|
| Worker
|
|
75
|
+
| Worker.DevDomain
|
|
76
|
+
| Worker.DevUrl
|
|
75
77
|
| WorkerStub
|
|
76
78
|
| WorkerRef
|
|
77
79
|
| WorkerEntrypoint
|
package/src/cloudflare/bound.ts
CHANGED
|
@@ -88,17 +88,23 @@ export type Bound<T extends Binding> =
|
|
|
88
88
|
? ImagesBinding
|
|
89
89
|
: T extends _VersionMetadata
|
|
90
90
|
? WorkerVersionMetadata
|
|
91
|
-
: T extends
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
: T extends
|
|
92
|
+
| _Worker.DevDomain
|
|
93
|
+
| _Worker.DevUrl
|
|
94
|
+
? string
|
|
95
|
+
: T extends Self
|
|
96
|
+
? Service
|
|
97
|
+
: T extends Json<
|
|
98
|
+
infer T
|
|
97
99
|
>
|
|
98
|
-
?
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
100
|
+
? T
|
|
101
|
+
: T extends _Container<
|
|
102
|
+
infer Obj
|
|
103
|
+
>
|
|
104
|
+
? DurableObjectNamespace<
|
|
105
|
+
Obj &
|
|
106
|
+
Rpc.DurableObjectBranded
|
|
107
|
+
>
|
|
108
|
+
: T extends undefined
|
|
109
|
+
? undefined
|
|
110
|
+
: Service;
|