@we8/cloudflare 0.1.1 → 0.2.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.
Files changed (50) hide show
  1. package/README.md +99 -6
  2. package/dist/access.d.ts +129 -0
  3. package/dist/access.d.ts.map +1 -0
  4. package/dist/access.js +211 -0
  5. package/dist/access.js.map +1 -0
  6. package/dist/admin-auth.d.ts +42 -0
  7. package/dist/admin-auth.d.ts.map +1 -0
  8. package/dist/admin-auth.js +19 -0
  9. package/dist/admin-auth.js.map +1 -0
  10. package/dist/cli-args.d.ts +8 -2
  11. package/dist/cli-args.d.ts.map +1 -1
  12. package/dist/cli-args.js +28 -4
  13. package/dist/cli-args.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +89 -6
  17. package/dist/cli.js.map +1 -1
  18. package/dist/doctor.d.ts +79 -3
  19. package/dist/doctor.d.ts.map +1 -1
  20. package/dist/doctor.js +250 -15
  21. package/dist/doctor.js.map +1 -1
  22. package/dist/index.d.ts +21 -9
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +20 -9
  25. package/dist/index.js.map +1 -1
  26. package/dist/jwt.d.ts +103 -0
  27. package/dist/jwt.d.ts.map +1 -0
  28. package/dist/jwt.js +265 -0
  29. package/dist/jwt.js.map +1 -0
  30. package/dist/perimeter.d.ts +49 -0
  31. package/dist/perimeter.d.ts.map +1 -0
  32. package/dist/perimeter.js +54 -0
  33. package/dist/perimeter.js.map +1 -0
  34. package/dist/project.d.ts +7 -0
  35. package/dist/project.d.ts.map +1 -1
  36. package/dist/project.js +31 -0
  37. package/dist/project.js.map +1 -1
  38. package/dist/skill-command.d.ts +48 -0
  39. package/dist/skill-command.d.ts.map +1 -0
  40. package/dist/skill-command.js +122 -0
  41. package/dist/skill-command.js.map +1 -0
  42. package/dist/skill.d.ts +51 -0
  43. package/dist/skill.d.ts.map +1 -0
  44. package/dist/skill.js +229 -0
  45. package/dist/skill.js.map +1 -0
  46. package/dist/wrangler-config.d.ts +64 -1
  47. package/dist/wrangler-config.d.ts.map +1 -1
  48. package/dist/wrangler-config.js +133 -21
  49. package/dist/wrangler-config.js.map +1 -1
  50. package/package.json +2 -2
package/dist/cli-args.js CHANGED
@@ -12,13 +12,20 @@ Usage:
12
12
  Worker's secrets.
13
13
 
14
14
  we8-cloudflare migrate [--remote] [--dir <path>]
15
- Apply the @we8/cms migrations in order. Local by default; --remote
16
- applies them to the deployed D1 database.
15
+ Apply the @we8/cms migrations in order, then the migrations of every
16
+ installed provider package (today: @we8/auth). Local by default;
17
+ --remote applies them to the deployed D1 database.
17
18
 
18
19
  we8-cloudflare seed [--dir <path>]
19
20
  Load the development seed into the LOCAL database. It contains plaintext
20
21
  API keys, so this command has no remote mode and refuses to be given one.
21
22
 
23
+ we8-cloudflare skill [--check] [--dir <path>]
24
+ Write .claude/skills/we8/SKILL.md, the operating manual an agentic tool
25
+ loads when it opens this project, generated from the project's own auth
26
+ mode and workspace. --check writes nothing and exits 1 when the file is
27
+ missing or out of date, which is what belongs in CI.
28
+
22
29
  we8-cloudflare help | --version
23
30
  `;
24
31
  /**
@@ -27,7 +34,7 @@ Usage:
27
34
  * would otherwise quietly do the wrong half of the job.
28
35
  */
29
36
  export function parseCliArgs(argv, cwd) {
30
- const base = { command: 'help', dir: cwd, remote: false };
37
+ const base = { command: 'help', dir: cwd, remote: false, check: false };
31
38
  const [first, ...rest] = argv;
32
39
  if (first === undefined || first === 'help' || first === '--help' || first === '-h') {
33
40
  return base;
@@ -35,7 +42,7 @@ export function parseCliArgs(argv, cwd) {
35
42
  if (first === '--version' || first === '-v' || first === 'version') {
36
43
  return { ...base, command: 'version' };
37
44
  }
38
- if (first !== 'doctor' && first !== 'migrate' && first !== 'seed') {
45
+ if (first !== 'doctor' && first !== 'migrate' && first !== 'seed' && first !== 'skill') {
39
46
  return { ...base, error: `unknown command "${first}"` };
40
47
  }
41
48
  const parsed = { ...base, command: first };
@@ -49,6 +56,10 @@ export function parseCliArgs(argv, cwd) {
49
56
  parsed.remote = false;
50
57
  continue;
51
58
  }
59
+ if (arg === '--check') {
60
+ parsed.check = true;
61
+ continue;
62
+ }
52
63
  if (arg === '--dir') {
53
64
  const value = rest[i + 1];
54
65
  if (value === undefined)
@@ -63,6 +74,19 @@ export function parseCliArgs(argv, cwd) {
63
74
  }
64
75
  return { ...parsed, error: `unknown option "${arg}"` };
65
76
  }
77
+ // `--check` belongs to the skill command, and `--remote` does not: the skill
78
+ // is a file in the repository, and there is no deployed one to compare it
79
+ // to. Both are errors rather than silent no-ops, for the same reason an
80
+ // unknown flag is.
81
+ if (parsed.check && parsed.command !== 'skill') {
82
+ return { ...parsed, error: `--check is only for "skill", not "${parsed.command}"` };
83
+ }
84
+ if (parsed.command === 'skill' && parsed.remote) {
85
+ return {
86
+ ...parsed,
87
+ error: 'skill has no remote mode: the skill is a file in this project, not something deployed',
88
+ };
89
+ }
66
90
  // The guardrail, stated once and enforced here: the development seed carries
67
91
  // plaintext API keys, so it never goes anywhere but the local database.
68
92
  if (parsed.command === 'seed' && (parsed.remote || seedTargetsRemote(rest))) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAchD,MAAM,CAAC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAuB,EAAE,GAAW;IAC/D,MAAM,IAAI,GAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEzE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAE9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACnE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAClE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,oBAAoB,KAAK,GAAG,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC9B,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YAC3E,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QACD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,GAAG,EAAE,CAAC;IACzD,CAAC;IAED,6EAA6E;IAC7E,wEAAwE;IACxE,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO;YACL,GAAG,MAAM;YACT,KAAK,EACH,sLAAsL;SACzL,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * `we8-cloudflare`: the three commands a scaffolded project needs that are not
3
+ * `we8-cloudflare`: the four commands a scaffolded project needs that are not
4
4
  * just wrangler. Each one gathers facts, checks them, and only then shells out
5
5
  * to wrangler, so the failure a stranger sees is a sentence about their
6
6
  * project rather than a stack trace from a tool they have not met yet.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAwCH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAe/D;AA0CD,wBAAgB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CA0BzG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AA+CH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAe/D;AAmID,wBAAgB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CA4BzG"}
package/dist/cli.js CHANGED
@@ -1,16 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * `we8-cloudflare`: the three commands a scaffolded project needs that are not
3
+ * `we8-cloudflare`: the four commands a scaffolded project needs that are not
4
4
  * just wrangler. Each one gathers facts, checks them, and only then shells out
5
5
  * to wrangler, so the failure a stranger sees is a sentence about their
6
6
  * project rather than a stack trace from a tool they have not met yet.
7
7
  */
8
8
  import { spawnSync } from 'node:child_process';
9
- import { resolve } from 'node:path';
9
+ import { rmSync, writeFileSync } from 'node:fs';
10
+ import { createRequire } from 'node:module';
11
+ import { join, resolve } from 'node:path';
10
12
  import { parseCliArgs, USAGE } from './cli-args.js';
11
- import { formatDoctorReport, runDoctorChecks } from './doctor.js';
13
+ import { findD1Binding, formatDoctorReport, runDoctorChecks } from './doctor.js';
12
14
  import { findSeedFile, gatherFacts, SEED_RELATIVE_PATH } from './project.js';
13
- const VERSION = '0.1.0';
15
+ import { runSkillCommand, skillExitCode } from './skill-command.js';
16
+ import { AUTH_MIGRATIONS_DIR, generateMigrationsConfig } from './wrangler-config.js';
17
+ // Read from the manifest so a release cannot leave this behind (0.1.1 and
18
+ // 0.1.2 printed 0.1.0 for exactly that reason).
19
+ const require = createRequire(import.meta.url);
20
+ const VERSION = require('../package.json').version;
14
21
  /** Runs wrangler in the project directory, inheriting stdio so its output is the user's. */
15
22
  function runWrangler(dir, args) {
16
23
  console.log(`> wrangler ${args.join(' ')}`);
@@ -65,13 +72,56 @@ function doctor(dir, remote) {
65
72
  process.stdout.write(formatDoctorReport(report));
66
73
  return report.ok ? 0 : 1;
67
74
  }
75
+ /**
76
+ * The generated config `migrate` uses for a second migrations directory, and
77
+ * the reason it exists.
78
+ *
79
+ * `wrangler d1 migrations apply` reads one `migrations_dir` out of one config
80
+ * file. A we8 site's schema comes from every package it composes: the CMS owns
81
+ * its tables, `@we8/auth` owns the four auth ones. So the command runs twice,
82
+ * and the second run needs a config that names the same database and the other
83
+ * directory. It is written next to the project's own config so wrangler
84
+ * resolves relative paths and local state exactly as it does for the first
85
+ * run, and removed straight afterwards.
86
+ */
87
+ const PROVIDER_MIGRATIONS_CONFIG = '.we8-provider-migrations.json';
88
+ function applyProviderMigrations(dir, facts, migrationsDir, remote) {
89
+ const d1 = findD1Binding(facts.config);
90
+ const config = facts.config;
91
+ const path = join(dir, PROVIDER_MIGRATIONS_CONFIG);
92
+ writeFileSync(path, generateMigrationsConfig({
93
+ name: config?.name,
94
+ compatibilityDate: config?.compatibility_date,
95
+ databaseName: d1?.database_name,
96
+ databaseId: d1?.database_id,
97
+ }, migrationsDir), 'utf8');
98
+ try {
99
+ console.log(`Applying the migrations that ship with @we8/auth (${migrationsDir}).`);
100
+ return runWrangler(dir, [
101
+ 'd1',
102
+ 'migrations',
103
+ 'apply',
104
+ 'DB',
105
+ remote ? '--remote' : '--local',
106
+ '--config',
107
+ PROVIDER_MIGRATIONS_CONFIG,
108
+ ]);
109
+ }
110
+ finally {
111
+ rmSync(path, { force: true });
112
+ }
113
+ }
68
114
  function migrate(dir, remote) {
69
115
  // The same checks the doctor runs, narrowed to the ones a migration needs.
70
116
  // Applying migrations against a placeholder database id fails inside
71
117
  // wrangler with a message about an id, not about what to do next.
72
118
  const facts = gatherFacts(dir, remote ? 'remote' : 'local');
73
119
  const report = runDoctorChecks(facts);
74
- const blockers = report.checks.filter((c) => c.status === 'fail' && (c.id === 'config' || c.id === 'migrations' || (remote && c.id === 'd1')));
120
+ const blockers = report.checks.filter((c) => c.status === 'fail' &&
121
+ (c.id === 'config' ||
122
+ c.id === 'migrations' ||
123
+ c.id === 'auth_migrations' ||
124
+ (remote && c.id === 'd1')));
75
125
  if (blockers.length > 0) {
76
126
  console.error('Cannot apply migrations yet:');
77
127
  for (const blocker of blockers) {
@@ -81,7 +131,20 @@ function migrate(dir, remote) {
81
131
  }
82
132
  return 1;
83
133
  }
84
- return runWrangler(dir, ['d1', 'migrations', 'apply', 'DB', remote ? '--remote' : '--local']);
134
+ const core = runWrangler(dir, ['d1', 'migrations', 'apply', 'DB', remote ? '--remote' : '--local']);
135
+ if (core !== 0)
136
+ return core;
137
+ // Providers own their own tables. An installed @we8/auth brings the four
138
+ // auth ones, every statement in them guarded, so a database that already
139
+ // carries them from 0.1 accepts the migration and changes nothing.
140
+ if (!facts.authPackageInstalled)
141
+ return 0;
142
+ if (facts.authMigrations === null) {
143
+ console.error(`@we8/auth is installed but ${AUTH_MIGRATIONS_DIR} does not exist.`);
144
+ console.error('fix: npm install (the migrations ship inside the @we8/auth package)');
145
+ return 1;
146
+ }
147
+ return applyProviderMigrations(dir, facts, AUTH_MIGRATIONS_DIR, remote);
85
148
  }
86
149
  function seed(dir) {
87
150
  const file = findSeedFile(dir);
@@ -94,6 +157,24 @@ function seed(dir) {
94
157
  console.log('It contains plaintext API keys; never load it into a deployed database.');
95
158
  return runWrangler(dir, ['d1', 'execute', 'DB', '--local', '--file', file]);
96
159
  }
160
+ /**
161
+ * Writes or checks the project skill. Nothing is spawned and nothing is
162
+ * fetched: the whole answer is in the project's own files, which is what lets
163
+ * `--check` run in CI with no account and no network.
164
+ */
165
+ function skill(dir, check) {
166
+ const result = runSkillCommand(dir, { check });
167
+ const code = skillExitCode(result.status);
168
+ if (code === 0) {
169
+ console.log(result.message);
170
+ }
171
+ else {
172
+ console.error(result.message);
173
+ if (result.fix)
174
+ console.error(`fix: ${result.fix}`);
175
+ }
176
+ return code;
177
+ }
97
178
  export function main(argv = process.argv.slice(2), cwd = process.cwd()) {
98
179
  const parsed = parseCliArgs(argv, cwd);
99
180
  if (parsed.error) {
@@ -116,6 +197,8 @@ export function main(argv = process.argv.slice(2), cwd = process.cwd()) {
116
197
  return migrate(dir, parsed.remote);
117
198
  case 'seed':
118
199
  return seed(dir);
200
+ case 'skill':
201
+ return skill(dir, parsed.check);
119
202
  }
120
203
  }
121
204
  process.exitCode = main();
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/doctor.d.ts CHANGED
@@ -44,7 +44,76 @@ export interface DoctorFacts {
44
44
  migrations: string[] | null;
45
45
  /** Scripts declared by the project's package.json. */
46
46
  packageScripts: Record<string, string>;
47
+ /**
48
+ * The source of the worker entry point named by `main`, or null when it
49
+ * cannot be read. The doctor reads which admin auth provider the project
50
+ * composes out of it: a registration is a line of code, not configuration,
51
+ * so this is the only place the answer exists.
52
+ */
53
+ workerEntry: string | null;
54
+ /** True when `@we8/auth` is installed in the project. */
55
+ authPackageInstalled: boolean;
56
+ /**
57
+ * Migration filenames the installed `@we8/auth` ships, or null when the
58
+ * package is absent or carries no migrations directory.
59
+ */
60
+ authMigrations: string[] | null;
61
+ /** True when the project carries the generated skill an agentic tool loads. */
62
+ skillPresent: boolean;
47
63
  }
64
+ /**
65
+ * How a project's worker entry answers "who is signing in".
66
+ *
67
+ * `access` and `perimeter` are the two providers this pack ships, named
68
+ * separately from `external` because each one has obligations of its own that
69
+ * the doctor checks: Access needs its team domain and audience, and perimeter
70
+ * mode needs an acknowledgement before it is allowed anywhere near a
71
+ * deployment. `external` remains what a provider somebody wrote themselves
72
+ * reads as.
73
+ */
74
+ export type AdminAuthMode = 'embedded' | 'access' | 'perimeter' | 'external' | 'none' | 'unknown';
75
+ /**
76
+ * A worker entry with its comments removed.
77
+ *
78
+ * Everything below reads code out of a file the scaffolder also fills with
79
+ * prose, and that prose names providers: the generated perimeter entry
80
+ * explains how to swap in `registerAdminAuth(embeddedAdminAuth)`, and the
81
+ * generated Access entry shows the settings being passed inline. Matching
82
+ * against the raw text reads those sentences as code and reports the wrong
83
+ * mode, which is exactly the kind of confident wrong answer a doctor must not
84
+ * give.
85
+ *
86
+ * String-aware, so a `//` inside a URL literal is not mistaken for a comment.
87
+ * A regular-expression literal containing an unmatched quote would confuse it;
88
+ * a worker entry is three imports and two calls, and does not have one.
89
+ */
90
+ export declare function stripSourceComments(source: string): string;
91
+ /**
92
+ * Reads the composed admin auth mode out of a worker entry.
93
+ *
94
+ * A static read of one file, deliberately: running the worker to ask it would
95
+ * need a deployment, and the doctor is what a stranger runs BEFORE they have
96
+ * one. It looks for the registration call and for the shipped providers by
97
+ * name, so a project that registers something of its own reads as `external`
98
+ * rather than as unconfigured.
99
+ */
100
+ export declare function readAdminAuthMode(entry: string | null): AdminAuthMode;
101
+ /**
102
+ * Whether a perimeter-mode entry says out loud that it means it.
103
+ *
104
+ * The acknowledgement is an argument in the registration call rather than a
105
+ * var or a flag, because the dangerous choice is a line of code and the
106
+ * admission belongs in the same line: a reviewer reading `registerAdminAuth`
107
+ * sees both at once, and nobody acknowledges a mode they never read.
108
+ */
109
+ export declare function readPerimeterAcknowledged(entry: string | null): boolean;
110
+ /**
111
+ * Whether an access-mode entry passes its settings inline instead of leaving
112
+ * them to the vars. The doctor can check a var; it cannot check a value that
113
+ * only exists as an expression, so it says where the answer lives and stops
114
+ * there rather than reporting a var as missing when it is not needed.
115
+ */
116
+ export declare function readsAccessConfigInline(entry: string | null): boolean;
48
117
  interface D1Binding {
49
118
  binding?: unknown;
50
119
  database_name?: unknown;
@@ -62,9 +131,16 @@ export declare function findR2Binding(config: unknown): R2Binding | null;
62
131
  /** The migrations_dir the project configured, or the empty string when it has none. */
63
132
  export declare function readMigrationsDir(config: unknown): string;
64
133
  /**
65
- * Migrations apply in filename order, so the order has to be a real sequence.
66
- * A gap or a duplicate number is a merge that went wrong, and wrangler will
67
- * happily apply it anyway.
134
+ * Migrations apply in filename order, so the order has to be a real sequence:
135
+ * numbered, ascending, and each number used once. A duplicate is a merge that
136
+ * went wrong, and wrangler will happily apply it anyway.
137
+ *
138
+ * A gap is allowed, and there is one in the core sequence on purpose. 0007
139
+ * created the auth tables in 0.1 and those tables now belong to `@we8/auth`;
140
+ * the number is retired rather than reused, because the name of an applied
141
+ * migration is recorded in the database forever and must never come to mean
142
+ * something else. Renumbering the migrations after it would re-run them
143
+ * against every 0.1 database in existence.
68
144
  */
69
145
  export declare function checkMigrationSequence(files: string[]): {
70
146
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,kFAAkF;IAClF,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,8FAA8F;IAC9F,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsBD,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAQ/D;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAQ/D;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGzD;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqBvF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAElE;AAYD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAqQhE;AAID,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAuB/D"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}