@celsoft/platform 0.4.0 → 0.6.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/dist/adapters/cloudflare.d.ts +10 -1
- package/dist/adapters/cloudflare.js +46 -2
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/drizzle.d.ts +15 -0
- package/dist/adapters/drizzle.js +114 -0
- package/dist/adapters/drizzle.js.map +1 -0
- package/dist/adapters/github.d.ts +1 -0
- package/dist/adapters/github.js +4 -0
- package/dist/adapters/github.js.map +1 -1
- package/dist/adapters/neon.d.ts +2 -0
- package/dist/adapters/neon.js +8 -0
- package/dist/adapters/neon.js.map +1 -1
- package/dist/adapters/owner.d.ts +1 -0
- package/dist/adapters/owner.js +38 -0
- package/dist/adapters/owner.js.map +1 -0
- package/dist/adapters/process.d.ts +1 -7
- package/dist/adapters/process.js +0 -22
- package/dist/adapters/process.js.map +1 -1
- package/dist/adapters/resend.d.ts +1 -0
- package/dist/adapters/resend.js +3 -0
- package/dist/adapters/resend.js.map +1 -1
- package/dist/cli.js +136 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +11 -4
- package/dist/config.js +26 -9
- package/dist/config.js.map +1 -1
- package/dist/fakes.d.ts +24 -4
- package/dist/fakes.js +58 -6
- package/dist/fakes.js.map +1 -1
- package/dist/init.js +5 -5
- package/dist/init.js.map +1 -1
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.js +134 -18
- package/dist/lifecycle.js.map +1 -1
- package/dist/ownership.d.ts +16 -0
- package/dist/ownership.js +40 -0
- package/dist/ownership.js.map +1 -0
- package/dist/ports.d.ts +18 -3
- package/dist/runtime/auth.d.ts +1181 -6
- package/dist/runtime/auth.js +44 -14
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/files.js +4 -1
- package/dist/runtime/files.js.map +1 -1
- package/dist/runtime/guard.d.ts +11 -0
- package/dist/runtime/guard.js +40 -0
- package/dist/runtime/guard.js.map +1 -0
- package/dist/runtime/index.d.ts +18 -8
- package/dist/runtime/index.js +53 -19
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/screens.d.ts +4 -0
- package/dist/runtime/screens.js +145 -0
- package/dist/runtime/screens.js.map +1 -0
- package/dist/schema.d.ts +2717 -0
- package/dist/schema.js +120 -0
- package/dist/schema.js.map +1 -0
- package/dist/workflow.js +15 -5
- package/dist/workflow.js.map +1 -1
- package/dist/wrangler-config.d.ts +5 -0
- package/dist/wrangler-config.js +11 -2
- package/dist/wrangler-config.js.map +1 -1
- package/package.json +10 -4
- package/schema.json +18 -14
package/dist/cli.js
CHANGED
|
@@ -1,32 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { execFileSync } from "node:child_process";
|
|
3
|
-
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
|
+
import { createInterface } from "node:readline/promises";
|
|
6
|
+
import { Writable } from "node:stream";
|
|
5
7
|
import { parseArgs } from "node:util";
|
|
6
8
|
import { CloudflareApi } from "./adapters/cloudflare.js";
|
|
7
9
|
import { commentPreviewLink, GhCli } from "./adapters/github.js";
|
|
8
10
|
import { NeonApi } from "./adapters/neon.js";
|
|
9
11
|
import { ResendApi } from "./adapters/resend.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
+
import { DrizzleMigrator } from "./adapters/drizzle.js";
|
|
13
|
+
import { resetOwner } from "./adapters/owner.js";
|
|
14
|
+
import { WranglerCli } from "./adapters/process.js";
|
|
15
|
+
import { CONFIG_FILE, ConfigError, configVariables, parseConfig, readConfigText, upgradeConfigText } from "./config.js";
|
|
12
16
|
import { checkWorkflow, init, tokenNames } from "./init.js";
|
|
13
|
-
import { cleanup, deploy, dev, PreflightError } from "./lifecycle.js";
|
|
17
|
+
import { cleanup, deploy, destroy, dev, PreflightError, sweep } from "./lifecycle.js";
|
|
18
|
+
import { UnprovenError } from "./ownership.js";
|
|
14
19
|
import { Run } from "./run.js";
|
|
15
20
|
import { loadSecrets, loadVars } from "./secrets.js";
|
|
16
|
-
const usage = `usage: platform <command> [--dry-run] [--dir <app dir>]
|
|
21
|
+
const usage = `usage: npx @celsoft/platform <command> [--dry-run] [--dir <app dir>]
|
|
17
22
|
|
|
18
23
|
commands:
|
|
19
24
|
init set up GitHub secrets, Environments and the deploy workflow
|
|
20
25
|
dev run the app locally against its own Neon branch
|
|
26
|
+
db generate write migrations for changes to the platform's tables and src/schema.ts
|
|
27
|
+
upgrade rewrite an older platform.jsonc to the current shape
|
|
21
28
|
deploy deploy prod
|
|
22
29
|
preview <pr> create or update the preview for a pull request
|
|
23
30
|
cleanup <pr> delete the preview for a pull request
|
|
31
|
+
sweep delete previews whose pull request is closed
|
|
32
|
+
owner reset <email> [--pr <n>]
|
|
33
|
+
make that account the owner and set its password, for an owner locked out
|
|
34
|
+
destroy [--data] delete everything the platform made for the app; --data also deletes its data
|
|
24
35
|
ci run the command for the current GitHub Actions event`;
|
|
25
36
|
async function main(argv) {
|
|
26
37
|
const { values, positionals } = parseArgs({
|
|
27
38
|
args: argv,
|
|
28
39
|
allowPositionals: true,
|
|
29
|
-
options: { "dry-run": { type: "boolean", default: false }, dir: { type: "string", default: "." }, help: { type: "boolean", short: "h" } },
|
|
40
|
+
options: { "dry-run": { type: "boolean", default: false }, data: { type: "boolean", default: false }, pr: { type: "string" }, dir: { type: "string", default: "." }, help: { type: "boolean", short: "h" } },
|
|
30
41
|
});
|
|
31
42
|
if (values.help || positionals.length === 0) {
|
|
32
43
|
console.log(usage);
|
|
@@ -40,6 +51,14 @@ async function main(argv) {
|
|
|
40
51
|
console.log("nothing to do for this event");
|
|
41
52
|
return;
|
|
42
53
|
}
|
|
54
|
+
if (command.name === "upgrade") {
|
|
55
|
+
const { text, changes } = upgradeConfigText(await readConfigText(appDir));
|
|
56
|
+
if (changes.length === 0)
|
|
57
|
+
return console.log(`✓ ${CONFIG_FILE} already has the current shape`);
|
|
58
|
+
await writeFile(join(appDir, CONFIG_FILE), text);
|
|
59
|
+
console.log(`updated ${CONFIG_FILE}: ${changes.join(", ")}; review and commit it`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
43
62
|
if (command.name === "init") {
|
|
44
63
|
const { config, variables } = await loadApp(appDir);
|
|
45
64
|
await init({
|
|
@@ -58,6 +77,10 @@ async function main(argv) {
|
|
|
58
77
|
return;
|
|
59
78
|
}
|
|
60
79
|
const app = await loadApp(appDir);
|
|
80
|
+
if (command.name === "db generate") {
|
|
81
|
+
await new DrizzleMigrator(appDir, app.config).generate();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
61
84
|
if (inCi)
|
|
62
85
|
await checkWorkflow(repoRoot(appDir), appDir, app.config, Object.keys(app.variables));
|
|
63
86
|
const ctx = await context(appDir, app.config, dryRun);
|
|
@@ -69,6 +92,18 @@ async function main(argv) {
|
|
|
69
92
|
await dev(ctx);
|
|
70
93
|
return;
|
|
71
94
|
}
|
|
95
|
+
if (command.name === "owner reset") {
|
|
96
|
+
await ownerReset(ctx, app.config, command.email, values.pr === undefined ? undefined : prNumber(values.pr));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (command.name === "sweep") {
|
|
100
|
+
await sweep(ctx, await new GhCli(repoRoot(appDir)).openPullRequests());
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (command.name === "destroy") {
|
|
104
|
+
await confirmDestroy(ctx, app.config.name, values.data);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
72
107
|
const { hostname } = await deploy(ctx, command.name === "deploy" ? { kind: "prod" } : { kind: "preview", pr: command.pr });
|
|
73
108
|
if (dryRun)
|
|
74
109
|
return;
|
|
@@ -79,8 +114,17 @@ async function main(argv) {
|
|
|
79
114
|
await deploy({ ...ctx, run: new Run(true, (line) => console.log(line)) }, { kind: "prod" });
|
|
80
115
|
}
|
|
81
116
|
}
|
|
82
|
-
function parseCommand([name, pr]) {
|
|
83
|
-
if (name === "
|
|
117
|
+
function parseCommand([name, pr, extra]) {
|
|
118
|
+
if (name === "owner" && pr === "reset") {
|
|
119
|
+
if (!extra?.includes("@"))
|
|
120
|
+
throw new UsageError(`expected the owner's email\n\n${usage}`);
|
|
121
|
+
return { name: "owner reset", email: extra };
|
|
122
|
+
}
|
|
123
|
+
if (name === "db" && pr === "generate")
|
|
124
|
+
return { name: "db generate" };
|
|
125
|
+
if (name === "upgrade" || name === "sweep")
|
|
126
|
+
return { name };
|
|
127
|
+
if (name === "init" || name === "dev" || name === "deploy" || name === "destroy")
|
|
84
128
|
return { name };
|
|
85
129
|
if (name === "preview" || name === "cleanup")
|
|
86
130
|
return { name, pr: prNumber(pr) };
|
|
@@ -94,8 +138,12 @@ async function commandForGitHubEvent() {
|
|
|
94
138
|
const event = JSON.parse(await readFile(path, "utf8"));
|
|
95
139
|
if (name === "push")
|
|
96
140
|
return { name: "deploy" };
|
|
141
|
+
if (name === "pull_request_target" && event.action === "closed")
|
|
142
|
+
return { name: "cleanup", pr: event.number };
|
|
97
143
|
if (name === "pull_request")
|
|
98
144
|
return event.action === "closed" ? { name: "cleanup", pr: event.number } : { name: "preview", pr: event.number, sha: event.pull_request?.head?.sha };
|
|
145
|
+
if (name === "schedule")
|
|
146
|
+
return { name: "sweep" };
|
|
99
147
|
return undefined;
|
|
100
148
|
}
|
|
101
149
|
async function loadApp(appDir) {
|
|
@@ -120,10 +168,88 @@ async function context(appDir, config, dryRun) {
|
|
|
120
168
|
neon: new NeonApi(neonKey),
|
|
121
169
|
mail: new ResendApi(resendKey),
|
|
122
170
|
wrangler: new WranglerCli(appDir, { CLOUDFLARE_API_TOKEN: cloudflareToken }),
|
|
123
|
-
migrator: new
|
|
171
|
+
migrator: new DrizzleMigrator(appDir, config),
|
|
124
172
|
},
|
|
125
173
|
};
|
|
126
174
|
}
|
|
175
|
+
// Recovery for an owner who lost their password or email: whoever holds the project's tokens can
|
|
176
|
+
// already reach everything, so the new password is typed here, never passed as an argument.
|
|
177
|
+
async function ownerReset(ctx, config, email, pr) {
|
|
178
|
+
if (!config.auth || !config.database)
|
|
179
|
+
throw new UsageError("this app has no auth");
|
|
180
|
+
const project = config.database.neonProject;
|
|
181
|
+
const branch = pr === undefined ? await ctx.ports.neon.defaultBranch(project) : await ctx.ports.neon.findBranch(project, `pr-${pr}`);
|
|
182
|
+
if (!branch)
|
|
183
|
+
throw new PreflightError(`pull request ${pr} has no preview database`);
|
|
184
|
+
const password = await newPassword();
|
|
185
|
+
if (ctx.run.dryRun)
|
|
186
|
+
return console.log(`~ would make ${email} the owner on ${branch.name} and set its password`);
|
|
187
|
+
if (!(await resetOwner(await ctx.ports.neon.connectionUri(project, branch.id), email, password))) {
|
|
188
|
+
throw new PreflightError(`no account uses ${email} on ${branch.name}; sign up with it first`);
|
|
189
|
+
}
|
|
190
|
+
console.log(`+ ${email} is the owner on ${branch.name}, with the new password; its sessions are signed out`);
|
|
191
|
+
}
|
|
192
|
+
// Typed twice in a terminal with nothing echoed; read from standard input otherwise.
|
|
193
|
+
async function newPassword() {
|
|
194
|
+
let password;
|
|
195
|
+
if (process.stdin.isTTY) {
|
|
196
|
+
let muted = false;
|
|
197
|
+
const output = new Writable({ write: (chunk, _encoding, done) => (muted || process.stdout.write(chunk), done()) });
|
|
198
|
+
const rl = createInterface({ input: process.stdin, output, terminal: true });
|
|
199
|
+
const ask = async (prompt) => {
|
|
200
|
+
process.stdout.write(prompt);
|
|
201
|
+
muted = true;
|
|
202
|
+
const answer = await rl.question("");
|
|
203
|
+
muted = false;
|
|
204
|
+
process.stdout.write("\n");
|
|
205
|
+
return answer;
|
|
206
|
+
};
|
|
207
|
+
try {
|
|
208
|
+
password = await ask("New password: ");
|
|
209
|
+
if ((await ask("Same password again: ")) !== password)
|
|
210
|
+
throw new UsageError("the passwords did not match");
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
rl.close();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
let input = "";
|
|
218
|
+
for await (const chunk of process.stdin)
|
|
219
|
+
input += chunk;
|
|
220
|
+
password = input.split(/\r?\n/)[0] ?? "";
|
|
221
|
+
}
|
|
222
|
+
if (password.length < 8)
|
|
223
|
+
throw new UsageError("the password needs at least 8 characters");
|
|
224
|
+
return password;
|
|
225
|
+
}
|
|
226
|
+
// Destroy lists what it will delete, then needs the app's name typed and a final yes, so a
|
|
227
|
+
// slip of the keyboard can never start it.
|
|
228
|
+
async function confirmDestroy(ctx, appName, data) {
|
|
229
|
+
if (!process.stdin.isTTY || process.env.CI)
|
|
230
|
+
throw new UsageError("destroy asks for confirmation, so it runs only in a terminal");
|
|
231
|
+
console.log(`destroy ${appName}${data ? ", including its data" : ""}:\n`);
|
|
232
|
+
await destroy({ ...ctx, run: new Run(true, (line) => console.log(line)) }, { data });
|
|
233
|
+
if (ctx.run.dryRun)
|
|
234
|
+
return;
|
|
235
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
236
|
+
try {
|
|
237
|
+
console.log(`\n${data ? "This deletes the app's database tables, backups and files. They cannot be recovered." : "The app goes offline until its next deploy."}`);
|
|
238
|
+
if ((await rl.question(`Type the app's name (${appName}) to continue: `)).trim() !== appName) {
|
|
239
|
+
console.log("Name did not match; nothing was deleted.");
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (!/^y(es)?$/i.test((await rl.question("Last chance. Delete all of the above? [y/N] ")).trim())) {
|
|
243
|
+
console.log("Nothing was deleted.");
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
finally {
|
|
248
|
+
rl.close();
|
|
249
|
+
}
|
|
250
|
+
await destroy(ctx, { data });
|
|
251
|
+
console.log(`\n${appName} destroyed; the next deploy sets it up from scratch.`);
|
|
252
|
+
}
|
|
127
253
|
function repoRoot(dir) {
|
|
128
254
|
try {
|
|
129
255
|
return execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd: dir, encoding: "utf8" }).trim();
|
|
@@ -159,7 +285,7 @@ function maskInCi(values) {
|
|
|
159
285
|
class UsageError extends Error {
|
|
160
286
|
}
|
|
161
287
|
main(process.argv.slice(2)).catch((error) => {
|
|
162
|
-
const known = error instanceof ConfigError || error instanceof PreflightError || error instanceof UsageError;
|
|
288
|
+
const known = error instanceof ConfigError || error instanceof PreflightError || error instanceof UnprovenError || error instanceof UsageError;
|
|
163
289
|
console.error(`✗ ${known ? error.message : error instanceof Error ? (error.stack ?? error.message) : String(error)}`);
|
|
164
290
|
process.exit(1);
|
|
165
291
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const CONFIG_FILE = "platform.jsonc";
|
|
3
|
-
export declare const CONFIG_VERSION = 1;
|
|
4
3
|
export declare const configSchema: z.ZodObject<{
|
|
5
4
|
$schema: z.ZodOptional<z.ZodString>;
|
|
6
|
-
version: z.ZodLiteral<1>;
|
|
7
5
|
name: z.ZodString;
|
|
8
6
|
hostname: z.ZodString;
|
|
9
7
|
worker: z.ZodString;
|
|
@@ -11,10 +9,15 @@ export declare const configSchema: z.ZodObject<{
|
|
|
11
9
|
frontend: z.ZodOptional<z.ZodString>;
|
|
12
10
|
database: z.ZodOptional<z.ZodObject<{
|
|
13
11
|
neonProject: z.ZodString;
|
|
14
|
-
migrate: z.ZodString;
|
|
15
12
|
}, z.core.$strict>>;
|
|
16
13
|
email: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
-
auth: z.ZodDefault<z.ZodBoolean
|
|
14
|
+
auth: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
15
|
+
organizations: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
}, z.core.$strict>]>>, z.ZodTransform<false | {
|
|
17
|
+
organizations: boolean;
|
|
18
|
+
}, boolean | {
|
|
19
|
+
organizations: boolean;
|
|
20
|
+
}>>;
|
|
18
21
|
files: z.ZodDefault<z.ZodBoolean>;
|
|
19
22
|
secrets: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
20
23
|
}, z.core.$strict>;
|
|
@@ -23,6 +26,10 @@ export declare class ConfigError extends Error {
|
|
|
23
26
|
}
|
|
24
27
|
export declare function configVariables(text: string): string[];
|
|
25
28
|
export declare function parseConfig(text: string, source?: string, vars?: Record<string, string>): Config;
|
|
29
|
+
export declare function upgradeConfigText(text: string): {
|
|
30
|
+
text: string;
|
|
31
|
+
changes: string[];
|
|
32
|
+
};
|
|
26
33
|
export declare function readConfigText(dir: string): Promise<string>;
|
|
27
34
|
export declare function loadConfig(dir: string, vars?: Record<string, string>): Promise<Config>;
|
|
28
35
|
export declare function configJsonSchema(): object;
|
package/dist/config.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { parse, printParseErrorCode } from "jsonc-parser";
|
|
3
|
+
import { applyEdits, modify, parse, printParseErrorCode } from "jsonc-parser";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
export const CONFIG_FILE = "platform.jsonc";
|
|
6
|
-
export const CONFIG_VERSION = 1;
|
|
7
6
|
const hostname = z
|
|
8
7
|
.string()
|
|
9
8
|
.regex(/^(?=.{1,253}$)([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/, "must be a lowercase hostname such as app.example.com");
|
|
10
9
|
export const configSchema = z
|
|
11
10
|
.object({
|
|
12
11
|
$schema: z.string().optional(),
|
|
13
|
-
version: z.literal(CONFIG_VERSION),
|
|
14
12
|
// Leaves room for "-pr-<number>" within Cloudflare's 63-character Worker name limit.
|
|
15
13
|
name: z.string().regex(/^[a-z][a-z0-9-]{0,49}$/, "must start with a letter and use only a-z, 0-9 and -, at most 50 characters"),
|
|
16
14
|
hostname,
|
|
@@ -20,12 +18,16 @@ export const configSchema = z
|
|
|
20
18
|
database: z
|
|
21
19
|
.object({
|
|
22
20
|
neonProject: z.string().regex(/^[a-z]+-[a-z]+-\d+$/, "must be a Neon project id such as quiet-meadow-12345678, not a branch id"),
|
|
23
|
-
migrate: z.string().min(1).describe("Command that runs migrations against $DATABASE_URL"),
|
|
24
21
|
})
|
|
22
|
+
.describe("A Neon Postgres 18 database; the app's tables live in src/schema.ts")
|
|
25
23
|
.strict()
|
|
26
24
|
.optional(),
|
|
27
25
|
email: z.boolean().default(false).describe("Send email through Resend from noreply@ the app's own hostname; the app only sends"),
|
|
28
|
-
auth: z
|
|
26
|
+
auth: z
|
|
27
|
+
.union([z.boolean(), z.object({ organizations: z.boolean().default(false).describe("Organizations with members, roles, invitations and teams") }).strict()])
|
|
28
|
+
.default(false)
|
|
29
|
+
.transform((auth) => (auth === true ? { organizations: false } : auth))
|
|
30
|
+
.describe("Sign-up and login with email and password; needs database and email"),
|
|
29
31
|
files: z.boolean().default(false).describe("Object storage in an R2 bucket, organized in folders"),
|
|
30
32
|
secrets: z.array(z.string().regex(/^[A-Z][A-Z0-9_]*$/, "must be an UPPER_SNAKE_CASE name")).default([]),
|
|
31
33
|
})
|
|
@@ -46,11 +48,12 @@ export function parseConfig(text, source = CONFIG_FILE, vars = {}) {
|
|
|
46
48
|
}
|
|
47
49
|
const missing = configVariables(text).filter((name) => !vars[name]);
|
|
48
50
|
if (missing.length > 0) {
|
|
49
|
-
throw new ConfigError(`${source} uses ${missing.join(", ")}; set them in .env, then run \`platform init\` to copy them to GitHub`);
|
|
51
|
+
throw new ConfigError(`${source} uses ${missing.join(", ")}; set them in .env, then run \`npx @celsoft/platform init\` to copy them to GitHub`);
|
|
50
52
|
}
|
|
51
53
|
const raw = substitute(parsed, vars);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
const old = olderShape(raw);
|
|
55
|
+
if (old.length > 0) {
|
|
56
|
+
throw new ConfigError(`${source} has an older shape (${old.map((path) => path.join(".")).join(", ")}); run \`npx @celsoft/platform upgrade\` and commit the result`);
|
|
54
57
|
}
|
|
55
58
|
const result = configSchema.safeParse(raw);
|
|
56
59
|
if (!result.success) {
|
|
@@ -59,13 +62,27 @@ export function parseConfig(text, source = CONFIG_FILE, vars = {}) {
|
|
|
59
62
|
}
|
|
60
63
|
return result.data;
|
|
61
64
|
}
|
|
65
|
+
// Fields earlier releases used, recognized by their presence so nobody has to write a version.
|
|
66
|
+
const RETIRED = [["version"], ["database", "migrate"]];
|
|
67
|
+
function olderShape(raw) {
|
|
68
|
+
return RETIRED.filter((path) => path.reduce((node, key) => (isObject(node) ? node[key] : undefined), raw) !== undefined);
|
|
69
|
+
}
|
|
70
|
+
// Rewrites an older file to the current shape, keeping its comments and layout.
|
|
71
|
+
export function upgradeConfigText(text) {
|
|
72
|
+
const changes = [];
|
|
73
|
+
for (const path of olderShape(parse(text, [], { allowTrailingComma: true }))) {
|
|
74
|
+
text = applyEdits(text, modify(text, path, undefined, { formattingOptions: { insertSpaces: true, tabSize: 2 } }));
|
|
75
|
+
changes.push(`removed ${path.join(".")}`);
|
|
76
|
+
}
|
|
77
|
+
return { text, changes };
|
|
78
|
+
}
|
|
62
79
|
export async function readConfigText(dir) {
|
|
63
80
|
const path = join(dir, CONFIG_FILE);
|
|
64
81
|
try {
|
|
65
82
|
return await readFile(path, "utf8");
|
|
66
83
|
}
|
|
67
84
|
catch {
|
|
68
|
-
throw new ConfigError(`${path} not found; run \`platform init\``);
|
|
85
|
+
throw new ConfigError(`${path} not found; run \`npx @celsoft/platform init\``);
|
|
69
86
|
}
|
|
70
87
|
}
|
|
71
88
|
export async function loadConfig(dir, vars = {}) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAmB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAmB,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C,MAAM,QAAQ,GAAG,CAAC;KACf,MAAM,EAAE;KACR,KAAK,CAAC,mEAAmE,EAAE,sDAAsD,CAAC,CAAC;AAEtI,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,qFAAqF;IACrF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,wBAAwB,EAAE,6EAA6E,CAAC;IAC/H,QAAQ;IACR,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IACnG,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;IAC/F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC3F,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,0EAA0E,CAAC;KACjI,CAAC;SACD,QAAQ,CAAC,qEAAqE,CAAC;SAC/E,MAAM,EAAE;SACR,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAChI,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC3J,OAAO,CAAC,KAAK,CAAC;SACd,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACtE,QAAQ,CAAC,qEAAqE,CAAC;IAClF,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAClG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,kCAAkC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxG,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,oCAAoC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAIxH,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,GAA2B,EAAE;IAC/F,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAY,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACzB,MAAM,IAAI,WAAW,CAAC,GAAG,MAAM,KAAK,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,WAAW,CAAC,GAAG,MAAM,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IAClJ,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,WAAW,CAAC,GAAG,MAAM,wBAAwB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IACvK,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5G,MAAM,IAAI,WAAW,CAAC,GAAG,MAAM,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,+FAA+F;AAC/F,MAAM,OAAO,GAAe,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAEnE,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;AACpI,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7E,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClH,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,gDAAgD,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,IAAI,GAA2B,EAAE;IAC7E,OAAO,WAAW,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAA4B;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;IAChG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wGAAwG;AACxG,SAAS,cAAc,CAAC,MAAe;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAgB,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;QACjC,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC"}
|
package/dist/fakes.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Branch, Cloudflare, DnsRecord, Hyperdrive, Mail, MailDomain, Migrator, Neon, Wrangler, Zone, ZoneRecord } from "./ports.js";
|
|
2
2
|
export declare class FakeNeon implements Neon {
|
|
3
3
|
branches: Branch[];
|
|
4
|
+
pgVersion: number;
|
|
4
5
|
private next;
|
|
6
|
+
postgresVersion(): Promise<number>;
|
|
7
|
+
endpointHosts(): Promise<string[]>;
|
|
5
8
|
defaultBranch(): Promise<Branch>;
|
|
6
9
|
findBranch(_project: string, name: string): Promise<Branch | undefined>;
|
|
7
10
|
listBranches(_project: string, namePrefix: string): Promise<Branch[]>;
|
|
@@ -22,6 +25,7 @@ export declare class FakeCloudflare implements Cloudflare {
|
|
|
22
25
|
accountId(): Promise<string>;
|
|
23
26
|
findZone(hostname: string): Promise<Zone | undefined>;
|
|
24
27
|
findHyperdrive(name: string): Promise<Hyperdrive | undefined>;
|
|
28
|
+
listHyperdrives(namePrefix: string): Promise<Hyperdrive[]>;
|
|
25
29
|
createHyperdrive(name: string, uri: string): Promise<{
|
|
26
30
|
id: string;
|
|
27
31
|
name: string;
|
|
@@ -31,15 +35,26 @@ export declare class FakeCloudflare implements Cloudflare {
|
|
|
31
35
|
updateHyperdrive(id: string, uri: string): Promise<Hyperdrive>;
|
|
32
36
|
deleteHyperdrive(id: string): Promise<void>;
|
|
33
37
|
findWorker(name: string): Promise<boolean>;
|
|
38
|
+
workerTags: Map<string, string[]>;
|
|
39
|
+
workerHyperdrives: Map<string, string[]>;
|
|
40
|
+
workerOwner(name: string): Promise<{
|
|
41
|
+
app: string | null;
|
|
42
|
+
hyperdriveIds: string[];
|
|
43
|
+
} | undefined>;
|
|
44
|
+
tagWorker(name: string, app: string, pr: number | undefined): Promise<void>;
|
|
45
|
+
listWorkers(namePrefix: string): Promise<string[]>;
|
|
34
46
|
deleteWorker(name: string): Promise<void>;
|
|
35
47
|
workerSecretNames(worker: string): Promise<string[]>;
|
|
36
48
|
dnsRecords(_zoneId: string, name: string): Promise<ZoneRecord[]>;
|
|
37
49
|
buckets: Map<string, {
|
|
38
50
|
expiryDays?: number;
|
|
39
51
|
keys: string[];
|
|
52
|
+
owner?: string;
|
|
40
53
|
}>;
|
|
54
|
+
bucketOwner(name: string): Promise<string | null | undefined>;
|
|
41
55
|
findBucket(name: string): Promise<boolean>;
|
|
42
|
-
createBucket(name: string): Promise<void>;
|
|
56
|
+
createBucket(name: string, app: string): Promise<void>;
|
|
57
|
+
deleteBucket(name: string): Promise<void>;
|
|
43
58
|
bucketExpiryDays(name: string): Promise<number | undefined>;
|
|
44
59
|
setBucketExpiry(name: string, days: number): Promise<void>;
|
|
45
60
|
deleteObjects(bucket: string, prefix: string): Promise<number>;
|
|
@@ -73,6 +88,7 @@ export declare class FakeMail implements Mail {
|
|
|
73
88
|
})[];
|
|
74
89
|
}>;
|
|
75
90
|
verifyDomain(id: string): Promise<void>;
|
|
91
|
+
deleteDomain(id: string): Promise<void>;
|
|
76
92
|
findApiKey(name: string): Promise<string | undefined>;
|
|
77
93
|
createSendKey(name: string, domainId: string): Promise<string>;
|
|
78
94
|
deleteApiKey(id: string): Promise<void>;
|
|
@@ -94,10 +110,14 @@ export declare class FakeWrangler implements Wrangler {
|
|
|
94
110
|
}
|
|
95
111
|
export declare class FakeMigrator implements Migrator {
|
|
96
112
|
runs: string[];
|
|
97
|
-
|
|
113
|
+
generated: number;
|
|
114
|
+
current: boolean;
|
|
98
115
|
failWith: Error | undefined;
|
|
99
|
-
|
|
100
|
-
|
|
116
|
+
generate(): Promise<void>;
|
|
117
|
+
upToDate(): Promise<boolean>;
|
|
118
|
+
migrate(databaseUrl: string): Promise<void>;
|
|
119
|
+
dropped: string[];
|
|
120
|
+
dropAll(databaseUrl: string): Promise<void>;
|
|
101
121
|
}
|
|
102
122
|
export declare function fakePorts(): {
|
|
103
123
|
neon: FakeNeon;
|
package/dist/fakes.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
import { appTag, PLATFORM_TAG, prTag } from "./ownership.js";
|
|
1
2
|
import { originOf } from "./target.js";
|
|
2
3
|
export class FakeNeon {
|
|
3
4
|
branches = [{ id: "br-prod", name: "production" }];
|
|
5
|
+
pgVersion = 18;
|
|
4
6
|
next = 1;
|
|
7
|
+
async postgresVersion() {
|
|
8
|
+
return this.pgVersion;
|
|
9
|
+
}
|
|
10
|
+
async endpointHosts() {
|
|
11
|
+
return this.branches.map((b) => `${b.id}.neon.test`);
|
|
12
|
+
}
|
|
5
13
|
async defaultBranch() {
|
|
6
14
|
return this.branches[0];
|
|
7
15
|
}
|
|
@@ -39,6 +47,9 @@ export class FakeCloudflare {
|
|
|
39
47
|
async findHyperdrive(name) {
|
|
40
48
|
return this.hyperdrives.find((h) => h.name === name);
|
|
41
49
|
}
|
|
50
|
+
async listHyperdrives(namePrefix) {
|
|
51
|
+
return this.hyperdrives.filter((h) => h.name.startsWith(namePrefix));
|
|
52
|
+
}
|
|
42
53
|
async createHyperdrive(name, uri) {
|
|
43
54
|
const hyperdrive = { id: `hd-${this.next++}`, name, origin: originOf(uri), cached: false };
|
|
44
55
|
this.hyperdrives.push(hyperdrive);
|
|
@@ -56,9 +67,26 @@ export class FakeCloudflare {
|
|
|
56
67
|
async findWorker(name) {
|
|
57
68
|
return this.workers.has(name);
|
|
58
69
|
}
|
|
70
|
+
workerTags = new Map();
|
|
71
|
+
workerHyperdrives = new Map();
|
|
72
|
+
async workerOwner(name) {
|
|
73
|
+
if (!this.workers.has(name))
|
|
74
|
+
return undefined;
|
|
75
|
+
const tags = this.workerTags.get(name) ?? [];
|
|
76
|
+
const app = tags.includes(PLATFORM_TAG) ? (tags.find((t) => t.startsWith("app:"))?.slice(4) ?? null) : null;
|
|
77
|
+
return { app, hyperdriveIds: this.workerHyperdrives.get(name) ?? [] };
|
|
78
|
+
}
|
|
79
|
+
async tagWorker(name, app, pr) {
|
|
80
|
+
this.workerTags.set(name, [PLATFORM_TAG, appTag(app), ...(pr ? [prTag(pr)] : [])]);
|
|
81
|
+
}
|
|
82
|
+
async listWorkers(namePrefix) {
|
|
83
|
+
return [...this.workers].filter((w) => w.startsWith(namePrefix));
|
|
84
|
+
}
|
|
59
85
|
async deleteWorker(name) {
|
|
60
86
|
this.workers.delete(name);
|
|
61
87
|
this.workerSecrets.delete(name);
|
|
88
|
+
this.workerTags.delete(name);
|
|
89
|
+
this.workerHyperdrives.delete(name);
|
|
62
90
|
}
|
|
63
91
|
async workerSecretNames(worker) {
|
|
64
92
|
return [...(this.workerSecrets.get(worker) ?? [])];
|
|
@@ -67,11 +95,20 @@ export class FakeCloudflare {
|
|
|
67
95
|
return this.records.filter((r) => r.name === name);
|
|
68
96
|
}
|
|
69
97
|
buckets = new Map();
|
|
98
|
+
async bucketOwner(name) {
|
|
99
|
+
const bucket = this.buckets.get(name);
|
|
100
|
+
return bucket && (bucket.owner ?? null);
|
|
101
|
+
}
|
|
70
102
|
async findBucket(name) {
|
|
71
103
|
return this.buckets.has(name);
|
|
72
104
|
}
|
|
73
|
-
async createBucket(name) {
|
|
74
|
-
this.buckets.set(name, { keys: [] });
|
|
105
|
+
async createBucket(name, app) {
|
|
106
|
+
this.buckets.set(name, { keys: [], owner: app });
|
|
107
|
+
}
|
|
108
|
+
async deleteBucket(name) {
|
|
109
|
+
if (this.buckets.get(name)?.keys.length)
|
|
110
|
+
throw new Error(`bucket ${name} is not empty`);
|
|
111
|
+
this.buckets.delete(name);
|
|
75
112
|
}
|
|
76
113
|
async bucketExpiryDays(name) {
|
|
77
114
|
return this.buckets.get(name)?.expiryDays;
|
|
@@ -118,6 +155,9 @@ export class FakeMail {
|
|
|
118
155
|
async verifyDomain(id) {
|
|
119
156
|
this.domains.find((d) => d.id === id).verified = true;
|
|
120
157
|
}
|
|
158
|
+
async deleteDomain(id) {
|
|
159
|
+
this.domains = this.domains.filter((d) => d.id !== id);
|
|
160
|
+
}
|
|
121
161
|
async findApiKey(name) {
|
|
122
162
|
return this.keys.find((k) => k.name === name)?.id;
|
|
123
163
|
}
|
|
@@ -145,6 +185,9 @@ export class FakeWrangler {
|
|
|
145
185
|
const name = c.name;
|
|
146
186
|
this.deploys.push({ config: c, secrets });
|
|
147
187
|
this.cloudflare.workers.add(name);
|
|
188
|
+
// Like the real upload, a deploy carries no tags; the platform applies them afterwards.
|
|
189
|
+
this.cloudflare.workerTags.delete(name);
|
|
190
|
+
this.cloudflare.workerHyperdrives.set(name, (c.hyperdrive ?? []).map((h) => h.id));
|
|
148
191
|
const stored = this.cloudflare.workerSecrets.get(name) ?? new Set();
|
|
149
192
|
for (const key of Object.keys(secrets))
|
|
150
193
|
stored.add(key);
|
|
@@ -153,15 +196,24 @@ export class FakeWrangler {
|
|
|
153
196
|
}
|
|
154
197
|
export class FakeMigrator {
|
|
155
198
|
runs = [];
|
|
156
|
-
|
|
199
|
+
generated = 0;
|
|
200
|
+
current = true;
|
|
157
201
|
failWith;
|
|
158
|
-
async
|
|
202
|
+
async generate() {
|
|
203
|
+
this.generated++;
|
|
204
|
+
this.current = true;
|
|
205
|
+
}
|
|
206
|
+
async upToDate() {
|
|
207
|
+
return this.current;
|
|
208
|
+
}
|
|
209
|
+
async migrate(databaseUrl) {
|
|
159
210
|
if (this.failWith)
|
|
160
211
|
throw this.failWith;
|
|
161
212
|
this.runs.push(databaseUrl);
|
|
162
213
|
}
|
|
163
|
-
|
|
164
|
-
|
|
214
|
+
dropped = [];
|
|
215
|
+
async dropAll(databaseUrl) {
|
|
216
|
+
this.dropped.push(databaseUrl);
|
|
165
217
|
}
|
|
166
218
|
}
|
|
167
219
|
export function fakePorts() {
|