@payload-auth-link/migrate 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +49 -6
- package/dist/cli.js.map +1 -1
- package/dist/codemods.d.ts +17 -8
- package/dist/codemods.d.ts.map +1 -1
- package/dist/codemods.js +439 -20
- package/dist/codemods.js.map +1 -1
- package/dist/doctor/database.d.ts +5 -1
- package/dist/doctor/database.d.ts.map +1 -1
- package/dist/doctor/database.js +98 -34
- package/dist/doctor/database.js.map +1 -1
- package/dist/doctor/plugins.d.ts +15 -0
- package/dist/doctor/plugins.d.ts.map +1 -1
- package/dist/doctor/plugins.js +43 -0
- package/dist/doctor/plugins.js.map +1 -1
- package/dist/doctor/run-doctor.d.ts +11 -0
- package/dist/doctor/run-doctor.d.ts.map +1 -1
- package/dist/doctor/run-doctor.js +66 -20
- package/dist/doctor/run-doctor.js.map +1 -1
- package/dist/doctor/source-scan.d.ts +5 -0
- package/dist/doctor/source-scan.d.ts.map +1 -1
- package/dist/doctor/source-scan.js +9 -0
- package/dist/doctor/source-scan.js.map +1 -1
- package/dist/doctor/types.d.ts +12 -0
- package/dist/doctor/types.d.ts.map +1 -1
- package/dist/exporters.d.ts +7 -0
- package/dist/exporters.d.ts.map +1 -1
- package/dist/exporters.js +36 -1
- package/dist/exporters.js.map +1 -1
- package/dist/importer/apply.d.ts +5 -0
- package/dist/importer/apply.d.ts.map +1 -1
- package/dist/importer/apply.js +61 -33
- package/dist/importer/apply.js.map +1 -1
- package/dist/importer/lifecycle.d.ts +15 -6
- package/dist/importer/lifecycle.d.ts.map +1 -1
- package/dist/importer/lifecycle.js +131 -39
- package/dist/importer/lifecycle.js.map +1 -1
- package/dist/importer/run-import.d.ts +6 -0
- package/dist/importer/run-import.d.ts.map +1 -1
- package/dist/importer/run-import.js +72 -20
- package/dist/importer/run-import.js.map +1 -1
- package/dist/importer/source.d.ts +47 -4
- package/dist/importer/source.d.ts.map +1 -1
- package/dist/importer/source.js +159 -27
- package/dist/importer/source.js.map +1 -1
- package/dist/importer/types.d.ts +33 -0
- package/dist/importer/types.d.ts.map +1 -1
- package/dist/importer/types.js +48 -0
- package/dist/importer/types.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/package.json +8 -11
- package/src/cli.ts +52 -6
- package/src/codemods.ts +537 -35
- package/src/doctor/database.ts +129 -46
- package/src/doctor/plugins.ts +51 -0
- package/src/doctor/run-doctor.ts +90 -25
- package/src/doctor/source-scan.ts +10 -0
- package/src/doctor/types.ts +9 -0
- package/src/exporters.ts +46 -1
- package/src/importer/apply.ts +78 -32
- package/src/importer/lifecycle.ts +163 -43
- package/src/importer/run-import.ts +102 -19
- package/src/importer/source.ts +214 -30
- package/src/importer/types.ts +86 -0
- package/src/index.ts +25 -2
package/dist/doctor/database.js
CHANGED
|
@@ -1,28 +1,21 @@
|
|
|
1
1
|
import { Client } from 'pg';
|
|
2
|
+
import { resolveSourceTables, sourceModelNames, } from '../importer/types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Read-only database introspection (issue #52): row counts for the
|
|
4
5
|
* payload-auth layout's auth tables, unverified users (who will not
|
|
5
6
|
* JIT-link), and orphans. Only an honest SELECT — the doctor never
|
|
6
7
|
* writes.
|
|
8
|
+
*
|
|
9
|
+
* Map-aware (issue #68): the ten source models are counted through the
|
|
10
|
+
* `--source-map` (defaulting to payload-auth's layout), and a mapped
|
|
11
|
+
* table that is absent comes back in `missingTables` for the caller to
|
|
12
|
+
* block on — a missing table is never silently reported as 0 rows.
|
|
13
|
+
* Satellite tables beyond the map (two-factor, passkey, sso, …) stay
|
|
14
|
+
* informational: apps drop plugins, and only the mapped models gate.
|
|
7
15
|
*/
|
|
8
|
-
/**
|
|
9
|
-
* The payload-auth 1.9.x Postgres layout (snake_case columns; Payload's
|
|
10
|
-
* drizzle adapter stores hasMany selects as child tables like
|
|
11
|
-
* `users_role`). Tables that don't exist are simply absent from the
|
|
12
|
-
* report — apps customize slugs and drop plugins.
|
|
13
|
-
*/
|
|
16
|
+
/** Satellite/extra tables reported when present, never gating. */
|
|
14
17
|
const knownTables = [
|
|
15
|
-
'users',
|
|
16
|
-
'accounts',
|
|
17
|
-
'sessions',
|
|
18
|
-
'verifications',
|
|
19
|
-
'api_keys',
|
|
20
|
-
'organizations',
|
|
21
|
-
'members',
|
|
22
|
-
'invitations',
|
|
23
|
-
'jwks',
|
|
24
18
|
'admin_invitations',
|
|
25
|
-
'users_role',
|
|
26
19
|
'two_factors',
|
|
27
20
|
'passkeys',
|
|
28
21
|
'oauth_applications',
|
|
@@ -48,60 +41,131 @@ async function columnsOf(client, table) {
|
|
|
48
41
|
WHERE table_schema = 'public' AND table_name = $1`, [table]);
|
|
49
42
|
return new Set(result.rows.map((row) => String(row.column_name)));
|
|
50
43
|
}
|
|
51
|
-
export async function introspectDatabase(connectionString) {
|
|
44
|
+
export async function introspectDatabase(connectionString, options = {}) {
|
|
45
|
+
const tables = resolveSourceTables(options.sourceTables);
|
|
52
46
|
const client = new Client({ connectionString });
|
|
53
47
|
await client.connect();
|
|
54
48
|
try {
|
|
55
|
-
const
|
|
49
|
+
const counted = [];
|
|
50
|
+
const missing = [];
|
|
51
|
+
// The mapped models count, and a missing mapped table is reported
|
|
52
|
+
// for the caller to block on (issue #68).
|
|
53
|
+
for (const model of sourceModelNames) {
|
|
54
|
+
const table = tables[model];
|
|
55
|
+
if (table === null) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (!(await tableExists(client, table))) {
|
|
59
|
+
missing.push({ model, table });
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const result = await client.query(`SELECT count(*)::int AS n FROM ${table}`);
|
|
63
|
+
const first = result.rows[0];
|
|
64
|
+
counted.push({ name: table, rows: first?.n ?? 0 });
|
|
65
|
+
}
|
|
66
|
+
// Satellite tables: informational when present.
|
|
56
67
|
for (const table of knownTables) {
|
|
57
68
|
if (!(await tableExists(client, table))) {
|
|
58
69
|
continue;
|
|
59
70
|
}
|
|
60
|
-
const
|
|
61
|
-
const first =
|
|
62
|
-
|
|
71
|
+
const result = await client.query(`SELECT count(*)::int AS n FROM ${table}`);
|
|
72
|
+
const first = result.rows[0];
|
|
73
|
+
counted.push({ name: table, rows: first?.n ?? 0 });
|
|
63
74
|
}
|
|
64
75
|
let unverifiedUsers = null;
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
const usersTable = tables['users'];
|
|
77
|
+
if (usersTable !== null && (await tableExists(client, usersTable))) {
|
|
78
|
+
const columns = await columnsOf(client, usersTable);
|
|
67
79
|
if (columns.has('email_verified')) {
|
|
68
|
-
const
|
|
69
|
-
const first =
|
|
80
|
+
const result = await client.query(`SELECT count(*)::int AS n FROM ${usersTable} WHERE email_verified = false`);
|
|
81
|
+
const first = result.rows[0];
|
|
70
82
|
unverifiedUsers = first?.n ?? null;
|
|
71
83
|
}
|
|
72
84
|
}
|
|
73
85
|
const orphans = [];
|
|
86
|
+
const skippedChecks = [];
|
|
74
87
|
const orphanChecks = [
|
|
75
|
-
{
|
|
88
|
+
{
|
|
89
|
+
kind: 'accounts-without-user',
|
|
90
|
+
table: tables['accounts'],
|
|
91
|
+
column: 'user_id',
|
|
92
|
+
target: usersTable,
|
|
93
|
+
},
|
|
76
94
|
{
|
|
77
95
|
kind: 'members-without-org',
|
|
78
|
-
table: 'members',
|
|
96
|
+
table: tables['members'],
|
|
79
97
|
column: 'organization_id',
|
|
80
|
-
target: 'organizations',
|
|
98
|
+
target: tables['organizations'],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
kind: 'members-without-user',
|
|
102
|
+
table: tables['members'],
|
|
103
|
+
column: 'user_id',
|
|
104
|
+
target: usersTable,
|
|
81
105
|
},
|
|
82
|
-
{ kind: 'members-without-user', table: 'members', column: 'user_id', target: 'users' },
|
|
83
106
|
{
|
|
84
107
|
kind: 'invitations-without-org',
|
|
85
|
-
table: 'invitations',
|
|
108
|
+
table: tables['invitations'],
|
|
86
109
|
column: 'organization_id',
|
|
87
|
-
target: 'organizations',
|
|
110
|
+
target: tables['organizations'],
|
|
88
111
|
},
|
|
89
112
|
];
|
|
90
113
|
for (const check of orphanChecks) {
|
|
114
|
+
if (check.table === null || check.target === null) {
|
|
115
|
+
skippedChecks.push(`${check.kind}: skipped — a mapped model is null-mapped (not installed)`);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
91
118
|
if ((await tableExists(client, check.table)) &&
|
|
92
119
|
(await tableExists(client, check.target)) &&
|
|
93
120
|
(await columnsOf(client, check.table)).has(check.column)) {
|
|
94
|
-
const
|
|
121
|
+
const result = await client.query(`SELECT count(*)::int AS n FROM ${check.table}
|
|
95
122
|
WHERE ${check.column} IS NOT NULL
|
|
96
123
|
AND NOT EXISTS (SELECT 1 FROM ${check.target} t WHERE t.id = ${check.table}.${check.column})`);
|
|
97
|
-
const first =
|
|
124
|
+
const first = result.rows[0];
|
|
98
125
|
const count = first?.n ?? 0;
|
|
99
126
|
if (count > 0) {
|
|
100
127
|
orphans.push({ kind: check.kind, count });
|
|
101
128
|
}
|
|
102
129
|
}
|
|
130
|
+
else {
|
|
131
|
+
skippedChecks.push(`${check.kind}: skipped — a table or column involved is absent`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// api keys: the owner column is named per layout — probe it
|
|
135
|
+
// (issue #68: `reference_id` on current layouts, `user_id` on 1.6).
|
|
136
|
+
const apiKeysTable = tables['api_keys'];
|
|
137
|
+
if (apiKeysTable === null) {
|
|
138
|
+
skippedChecks.push('api-keys-without-user: skipped — the model is null-mapped');
|
|
139
|
+
}
|
|
140
|
+
else if (!(await tableExists(client, apiKeysTable))) {
|
|
141
|
+
if (!missing.some((entry) => entry.model === 'api_keys')) {
|
|
142
|
+
skippedChecks.push(`api-keys-without-user: skipped — table '${apiKeysTable}' is absent`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
const columns = await columnsOf(client, apiKeysTable);
|
|
147
|
+
const column = columns.has('reference_id')
|
|
148
|
+
? 'reference_id'
|
|
149
|
+
: columns.has('user_id')
|
|
150
|
+
? 'user_id'
|
|
151
|
+
: null;
|
|
152
|
+
if (column === null || usersTable === null) {
|
|
153
|
+
skippedChecks.push(`api-keys-without-user: skipped — neither 'reference_id' nor 'user_id' exists on '${apiKeysTable}'`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Text casts on both sides: the owner column may be varchar
|
|
157
|
+
// (reference_id) or integer (1.6-era user_id).
|
|
158
|
+
const result = await client.query(`SELECT count(*)::int AS n FROM ${apiKeysTable}
|
|
159
|
+
WHERE ${column} IS NOT NULL
|
|
160
|
+
AND NOT EXISTS (SELECT 1 FROM ${usersTable} t WHERE t.id::text = ${apiKeysTable}.${column}::text)`);
|
|
161
|
+
const first = result.rows[0];
|
|
162
|
+
const count = first?.n ?? 0;
|
|
163
|
+
if (count > 0) {
|
|
164
|
+
orphans.push({ kind: 'api-keys-without-user', count });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
103
167
|
}
|
|
104
|
-
return { tables, unverifiedUsers, orphans };
|
|
168
|
+
return { tables: counted, unverifiedUsers, orphans, missingTables: missing, skippedChecks };
|
|
105
169
|
}
|
|
106
170
|
finally {
|
|
107
171
|
await client.end();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/doctor/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/doctor/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,sBAAsB,CAAA;AAG7B;;;;;;;;;;;;GAYG;AAEH,kEAAkE;AAClE,MAAM,WAAW,GAAsB;IACrC,mBAAmB;IACnB,aAAa;IACb,UAAU;IACV,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,OAAO;IACP,cAAc;IACd,eAAe;IACf,aAAa;IACb,eAAe;CAChB,CAAA;AAED,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,KAAa;IACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;uDACmD,EACnD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa;IACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;uDACmD,EACnD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAE,GAAgC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;AACjG,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,gBAAwB,EACxB,UAA6B,EAAE;IAE/B,MAAM,MAAM,GAAyB,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAC/C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAqC,EAAE,CAAA;QACpD,MAAM,OAAO,GAAuC,EAAE,CAAA;QAEtD,kEAAkE;QAClE,0CAA0C;QAC1C,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC3B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC9B,SAAQ;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAA;YAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAA+B,CAAA;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,gDAAgD;QAChD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxC,SAAQ;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAA;YAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAA+B,CAAA;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,eAAe,GAAkB,IAAI,CAAA;QACzC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACnD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,kCAAkC,UAAU,+BAA+B,CAC5E,CAAA;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAA+B,CAAA;gBAC1D,eAAe,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI,CAAA;YACpC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAsC,EAAE,CAAA;QACrD,MAAM,aAAa,GAAa,EAAE,CAAA;QAClC,MAAM,YAAY,GAKZ;YACJ;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;gBACzB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,UAAU;aACnB;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;gBACxB,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;aAChC;YACD;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;gBACxB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,UAAU;aACnB;YACD;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;gBAC5B,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;aAChC;SACF,CAAA;QACD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClD,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,2DAA2D,CAAC,CAAA;gBAC5F,SAAQ;YACV,CAAC;YACD,IACE,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzC,CAAC,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EACxD,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,kCAAkC,KAAK,CAAC,KAAK;mBACpC,KAAK,CAAC,MAAM;6CACc,KAAK,CAAC,MAAM,mBAAmB,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CACjG,CAAA;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAA+B,CAAA;gBAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;gBAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC3C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,kDAAkD,CAAC,CAAA;YACrF,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,oEAAoE;QACpE,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QACvC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;QACjF,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE,CAAC;gBACzD,aAAa,CAAC,IAAI,CAAC,2CAA2C,YAAY,aAAa,CAAC,CAAA;YAC1F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YACrD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;gBACxC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;oBACtB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,IAAI,CAAA;YACV,IAAI,MAAM,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAChB,oFAAoF,YAAY,GAAG,CACpG,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,4DAA4D;gBAC5D,+CAA+C;gBAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,kCAAkC,YAAY;mBACrC,MAAM;6CACoB,UAAU,yBAAyB,YAAY,IAAI,MAAM,SAAS,CACtG,CAAA;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAA+B,CAAA;gBAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;gBAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAAA;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;IAC7F,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;IACpB,CAAC;AACH,CAAC"}
|
package/dist/doctor/plugins.d.ts
CHANGED
|
@@ -9,4 +9,19 @@ export declare function pluginsFromCollectionSlugs(slugs: readonly string[]): st
|
|
|
9
9
|
* beyond loading its config module.
|
|
10
10
|
*/
|
|
11
11
|
export declare function pluginsFromConfigSource(configSource: string): string[];
|
|
12
|
+
/** One plugin factory call found in a source file. */
|
|
13
|
+
export type PluginSourceHit = {
|
|
14
|
+
/** The Better Auth plugin id (or payload-auth-era name). */
|
|
15
|
+
readonly id: string;
|
|
16
|
+
/** The file it was found in, relative to the scanned root. */
|
|
17
|
+
readonly file: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Plugin factory calls across the WHOLE source tree (issue #71), not
|
|
21
|
+
* just the config file: a mid-upgrade app calls `admin(...)` or
|
|
22
|
+
* `oidcProvider(...)` in helpers too, and a schema-adding plugin that
|
|
23
|
+
* hides in a non-config file changes what the migration must carry.
|
|
24
|
+
* Same walk/skip rules as the source scan.
|
|
25
|
+
*/
|
|
26
|
+
export declare function pluginsFromSourceTree(srcDir: string): readonly PluginSourceHit[];
|
|
12
27
|
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/doctor/plugins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/doctor/plugins.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AA4E/C,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,EAAE,CA8DvE;AA+BD,oEAAoE;AACpE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAS7E;AA8BD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAStE;AAED,sDAAsD;AACtD,MAAM,MAAM,eAAe,GAAG;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CAuBhF"}
|
package/dist/doctor/plugins.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { relative } from 'node:path';
|
|
3
|
+
import { listSourceFiles } from './source-scan.js';
|
|
1
4
|
/**
|
|
2
5
|
* Better Auth plugin classification (issue #52): for each plugin the
|
|
3
6
|
* app's `betterAuthOptions.plugins` declares, the doctor says whether
|
|
@@ -179,9 +182,17 @@ const callNameToPlugin = {
|
|
|
179
182
|
nextCookies: 'next-cookies',
|
|
180
183
|
tanstackStartCookies: 'tanstack-start-cookies',
|
|
181
184
|
oidcProvider: 'oidcProvider',
|
|
185
|
+
mcp: 'mcp',
|
|
182
186
|
passkey: 'passkey',
|
|
183
187
|
apiKey: 'api-key',
|
|
184
188
|
sso: 'sso',
|
|
189
|
+
multiSession: 'multi-session',
|
|
190
|
+
bearer: 'bearer',
|
|
191
|
+
oneTimeToken: 'one-time-token',
|
|
192
|
+
siwe: 'siwe',
|
|
193
|
+
expo: 'expo',
|
|
194
|
+
deviceAuthorization: 'device-authorization',
|
|
195
|
+
subscriptions: 'subscriptions',
|
|
185
196
|
};
|
|
186
197
|
/**
|
|
187
198
|
* Plugin ids found by scanning the config source for plugin factory
|
|
@@ -199,4 +210,36 @@ export function pluginsFromConfigSource(configSource) {
|
|
|
199
210
|
}
|
|
200
211
|
return [...ids].sort();
|
|
201
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Plugin factory calls across the WHOLE source tree (issue #71), not
|
|
215
|
+
* just the config file: a mid-upgrade app calls `admin(...)` or
|
|
216
|
+
* `oidcProvider(...)` in helpers too, and a schema-adding plugin that
|
|
217
|
+
* hides in a non-config file changes what the migration must carry.
|
|
218
|
+
* Same walk/skip rules as the source scan.
|
|
219
|
+
*/
|
|
220
|
+
export function pluginsFromSourceTree(srcDir) {
|
|
221
|
+
const hits = [];
|
|
222
|
+
const seen = new Set();
|
|
223
|
+
for (const file of listSourceFiles(srcDir)) {
|
|
224
|
+
let content;
|
|
225
|
+
try {
|
|
226
|
+
content = readFileSync(file, 'utf8');
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
for (const [call, id] of Object.entries(callNameToPlugin)) {
|
|
232
|
+
const pattern = new RegExp(`\\b${call}\\s*\\(`);
|
|
233
|
+
if (pattern.test(content)) {
|
|
234
|
+
const rel = relative(srcDir, file);
|
|
235
|
+
const key = `${id}\n${rel}`;
|
|
236
|
+
if (!seen.has(key)) {
|
|
237
|
+
seen.add(key);
|
|
238
|
+
hits.push({ id, file: rel });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return hits;
|
|
244
|
+
}
|
|
202
245
|
//# sourceMappingURL=plugins.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/doctor/plugins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/doctor/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ import type { BehaviourChange, DoctorReport } from './types.js';
|
|
|
6
6
|
* Auth plugins, scans the source tree for call sites that must
|
|
7
7
|
* migrate, and (with a database URL) reports row counts, unverified
|
|
8
8
|
* users, and orphans. It never writes.
|
|
9
|
+
*
|
|
10
|
+
* Never crashes (issue #71): a config that cannot even be IMPORTED
|
|
11
|
+
* (the mid-upgrade state — better-auth 1.7 installed while the config
|
|
12
|
+
* still calls `oidcProvider`) is a `config-unloadable` blocker, not a
|
|
13
|
+
* crash. The static scans (config text, source tree, database) still
|
|
14
|
+
* run and still catch what the load cannot.
|
|
9
15
|
*/
|
|
10
16
|
export type DoctorOptions = {
|
|
11
17
|
/** Absolute or cwd-relative path to the app's payload config. */
|
|
@@ -14,6 +20,11 @@ export type DoctorOptions = {
|
|
|
14
20
|
readonly srcDir?: string | undefined;
|
|
15
21
|
/** Postgres connection string. Defaults to `DATABASE_URL`. */
|
|
16
22
|
readonly databaseUrl?: string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* The `--source-map` JSON (issue #68): model → source table name, or
|
|
25
|
+
* `null` for "model not installed". Shapes the database section.
|
|
26
|
+
*/
|
|
27
|
+
readonly sourceMapJson?: string | undefined;
|
|
17
28
|
/** Config loader, injectable for tests. Defaults to dynamic import. */
|
|
18
29
|
readonly loadModule?: ((path: string) => Promise<unknown>) | undefined;
|
|
19
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-doctor.d.ts","sourceRoot":"","sources":["../../src/doctor/run-doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-doctor.d.ts","sourceRoot":"","sources":["../../src/doctor/run-doctor.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAe,YAAY,EAAiB,MAAM,YAAY,CAAA;AAE3F;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3C,uEAAuE;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;CACvE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,eAAe,EAqBtD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG;IACtD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC,GAAG,IAAI,CAmBP;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAYpF;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAK1E;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAQzD;AAcD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAyL7E"}
|
|
@@ -4,9 +4,10 @@ import { dirname, resolve } from 'node:path';
|
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
5
5
|
import { checkVersions } from './bands.js';
|
|
6
6
|
import { introspectDatabase } from './database.js';
|
|
7
|
-
import { classifyPlugins, pluginsFromCollectionSlugs, pluginsFromConfigSource } from './plugins.js';
|
|
7
|
+
import { classifyPlugins, pluginsFromCollectionSlugs, pluginsFromConfigSource, pluginsFromSourceTree, } from './plugins.js';
|
|
8
8
|
import { scanSource } from './source-scan.js';
|
|
9
9
|
import { analyzeUsersCollection, findUsersCollection } from './users.js';
|
|
10
|
+
import { parseSourceMapJson, resolveSourceTables } from '../importer/types.js';
|
|
10
11
|
/**
|
|
11
12
|
* Behaviour changes in payload-auth-link 0.7.0 that a payload-auth app
|
|
12
13
|
* feels on day one. Static by nature; kept next to the doctor so the
|
|
@@ -107,7 +108,6 @@ async function defaultLoadModule(path) {
|
|
|
107
108
|
export async function runDoctor(options) {
|
|
108
109
|
const configPath = resolve(options.configPath);
|
|
109
110
|
const loadModule = options.loadModule ?? defaultLoadModule;
|
|
110
|
-
const config = await loadModule(configPath);
|
|
111
111
|
const configDir = dirname(configPath);
|
|
112
112
|
const srcDir = options.srcDir === undefined ? configDir : resolve(options.srcDir);
|
|
113
113
|
const versions = checkVersions(pathToFileURL(configPath).href);
|
|
@@ -127,8 +127,23 @@ export async function runDoctor(options) {
|
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
// Issue #71: the load can fail on the mid-upgrade state (better-auth
|
|
131
|
+
// 1.7 installed while the config still calls `oidcProvider`). That is
|
|
132
|
+
// a blocker — never a crash — and the static scans below still run.
|
|
133
|
+
let config = null;
|
|
134
|
+
let configLoaded = true;
|
|
135
|
+
try {
|
|
136
|
+
config = await loadModule(configPath);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
configLoaded = false;
|
|
140
|
+
blockers.push({
|
|
141
|
+
code: 'config-unloadable',
|
|
142
|
+
detail: `the config module could not be loaded: ${error instanceof Error ? error.message : String(error)} — fix the load error before migrating; the report below still reflects the static scans`,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const plugin = configLoaded ? findPayloadAuthPlugin(config) : null;
|
|
146
|
+
if (configLoaded && plugin === null) {
|
|
132
147
|
warnings.push({
|
|
133
148
|
code: 'payload-auth-not-detected',
|
|
134
149
|
detail: 'no payload-auth plugin found in the config; if this app runs payload-auth elsewhere, point --config at that config',
|
|
@@ -141,8 +156,10 @@ export async function runDoctor(options) {
|
|
|
141
156
|
});
|
|
142
157
|
}
|
|
143
158
|
// payload-auth keeps the builder's options in its closure, so the
|
|
144
|
-
// plugin set comes from what the
|
|
145
|
-
// payload-auth
|
|
159
|
+
// plugin set comes from what the sources prove: the collections
|
|
160
|
+
// payload-auth built, the plugin calls in the config source, AND the
|
|
161
|
+
// plugin calls anywhere under --src (issue #71 — schema-adding
|
|
162
|
+
// plugins hide in helper files too).
|
|
146
163
|
let configSource;
|
|
147
164
|
try {
|
|
148
165
|
configSource = readFileSync(configPath, 'utf8');
|
|
@@ -150,14 +167,25 @@ export async function runDoctor(options) {
|
|
|
150
167
|
catch {
|
|
151
168
|
configSource = '';
|
|
152
169
|
}
|
|
170
|
+
const sourceTreeHits = pluginsFromSourceTree(srcDir);
|
|
171
|
+
const filesById = new Map();
|
|
172
|
+
for (const hit of sourceTreeHits) {
|
|
173
|
+
const list = filesById.get(hit.id) ?? [];
|
|
174
|
+
list.push(hit.file);
|
|
175
|
+
filesById.set(hit.id, list);
|
|
176
|
+
}
|
|
153
177
|
const pluginIds = [
|
|
154
178
|
...new Set([
|
|
155
|
-
...betterAuthPluginIds(plugin?.pluginOptions ?? {}),
|
|
156
|
-
...pluginsFromCollectionSlugs(collectionSlugs(config)),
|
|
179
|
+
...(configLoaded ? betterAuthPluginIds(plugin?.pluginOptions ?? {}) : []),
|
|
180
|
+
...(configLoaded ? pluginsFromCollectionSlugs(collectionSlugs(config)) : []),
|
|
157
181
|
...pluginsFromConfigSource(configSource),
|
|
182
|
+
...sourceTreeHits.map((hit) => hit.id),
|
|
158
183
|
]),
|
|
159
184
|
];
|
|
160
|
-
const pluginFindings = classifyPlugins(pluginIds)
|
|
185
|
+
const pluginFindings = classifyPlugins(pluginIds).map((finding) => {
|
|
186
|
+
const files = filesById.get(finding.id);
|
|
187
|
+
return files === undefined ? finding : { ...finding, files };
|
|
188
|
+
});
|
|
161
189
|
for (const finding of pluginFindings) {
|
|
162
190
|
if (finding.status === 'removed-upstream') {
|
|
163
191
|
blockers.push({
|
|
@@ -169,16 +197,20 @@ export async function runDoctor(options) {
|
|
|
169
197
|
warnings.push({ code: 'ba-plugin-unvalidated', detail: `${finding.id}: ${finding.detail}` });
|
|
170
198
|
}
|
|
171
199
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
200
|
+
let users = null;
|
|
201
|
+
if (configLoaded) {
|
|
202
|
+
const usersSlug = usersSlugOf(plugin?.pluginOptions ?? {});
|
|
203
|
+
const { finding, issues: userIssues } = analyzeUsersCollection(findUsersCollection(config, usersSlug), 'roles');
|
|
204
|
+
users = finding;
|
|
205
|
+
for (const issue of userIssues) {
|
|
206
|
+
if (issue.code === 'injected-field-collision' ||
|
|
207
|
+
issue.code === 'roles-field-not-select' ||
|
|
208
|
+
issue.code === 'users-collection-missing') {
|
|
209
|
+
blockers.push(issue);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
warnings.push(issue);
|
|
213
|
+
}
|
|
182
214
|
}
|
|
183
215
|
}
|
|
184
216
|
const source = scanSource(srcDir);
|
|
@@ -194,7 +226,10 @@ export async function runDoctor(options) {
|
|
|
194
226
|
let database = null;
|
|
195
227
|
if (databaseUrl !== undefined && databaseUrl !== '') {
|
|
196
228
|
try {
|
|
197
|
-
const
|
|
229
|
+
const sourceTables = options.sourceMapJson === undefined
|
|
230
|
+
? undefined
|
|
231
|
+
: resolveSourceTables(parseSourceMapJson(options.sourceMapJson));
|
|
232
|
+
const found = await introspectDatabase(databaseUrl, { sourceTables });
|
|
198
233
|
database = found;
|
|
199
234
|
if (found.unverifiedUsers !== null && found.unverifiedUsers > 0) {
|
|
200
235
|
warnings.push({
|
|
@@ -202,12 +237,23 @@ export async function runDoctor(options) {
|
|
|
202
237
|
detail: `${found.unverifiedUsers} user(s) have emailVerified = false: they will not JIT-link on a provider sign-in; they need a verified email (or a role manager's manual link) after migration`,
|
|
203
238
|
});
|
|
204
239
|
}
|
|
240
|
+
// Fail closed on the source layout (issue #68): a mapped model
|
|
241
|
+
// whose table is absent blocks until --source-map explains it.
|
|
242
|
+
for (const table of found.missingTables ?? []) {
|
|
243
|
+
blockers.push({
|
|
244
|
+
code: 'source-table-missing',
|
|
245
|
+
detail: `model '${table.model}' expects source table '${table.table}', which does not exist — if your layout renamed it, pass --source-map '{"${table.model}":"<table>"}', or map it null to record it as not installed`,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
205
248
|
for (const orphan of found.orphans) {
|
|
206
249
|
blockers.push({
|
|
207
250
|
code: 'orphan-rows',
|
|
208
251
|
detail: `${orphan.count} orphaned row(s) of kind '${orphan.kind}': the importer refuses unmappable references rather than silently skipping them`,
|
|
209
252
|
});
|
|
210
253
|
}
|
|
254
|
+
for (const skip of found.skippedChecks ?? []) {
|
|
255
|
+
warnings.push({ code: 'orphan-check-skipped', detail: skip });
|
|
256
|
+
}
|
|
211
257
|
}
|
|
212
258
|
catch (error) {
|
|
213
259
|
warnings.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-doctor.js","sourceRoot":"","sources":["../../src/doctor/run-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"run-doctor.js","sourceRoot":"","sources":["../../src/doctor/run-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,5 +6,10 @@ import type { SourceFinding } from './types.js';
|
|
|
6
6
|
* access-control drift — until `reqUser: 'document'` lands (#57).
|
|
7
7
|
*/
|
|
8
8
|
export declare const projectedUserFields: ReadonlySet<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Every scannable file under `dir` — the walk/skip rules the source
|
|
11
|
+
* scan uses, shared with the plugin factory scan (issue #71).
|
|
12
|
+
*/
|
|
13
|
+
export declare function listSourceFiles(dir: string): readonly string[];
|
|
9
14
|
export declare function scanSource(srcDir: string): SourceFinding[];
|
|
10
15
|
//# sourceMappingURL=source-scan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-scan.d.ts","sourceRoot":"","sources":["../../src/doctor/source-scan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AA+B/C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CASlD,CAAA;AA4BF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAuE1D"}
|
|
1
|
+
{"version":3,"file":"source-scan.d.ts","sourceRoot":"","sources":["../../src/doctor/source-scan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AA+B/C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CASlD,CAAA;AA4BF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI9D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAuE1D"}
|
|
@@ -69,6 +69,15 @@ function walk(dir, into) {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Every scannable file under `dir` — the walk/skip rules the source
|
|
74
|
+
* scan uses, shared with the plugin factory scan (issue #71).
|
|
75
|
+
*/
|
|
76
|
+
export function listSourceFiles(dir) {
|
|
77
|
+
const files = [];
|
|
78
|
+
walk(dir, files);
|
|
79
|
+
return files;
|
|
80
|
+
}
|
|
72
81
|
export function scanSource(srcDir) {
|
|
73
82
|
const files = [];
|
|
74
83
|
walk(srcDir, files);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-scan.js","sourceRoot":"","sources":["../../src/doctor/source-scan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"source-scan.js","sourceRoot":"","sources":["../../src/doctor/source-scan.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor/types.d.ts
CHANGED
|
@@ -26,6 +26,8 @@ export type PluginFinding = {
|
|
|
26
26
|
readonly id: string;
|
|
27
27
|
readonly status: 'supported' | 'auto-declarable' | 'unprobed' | 'unsupported' | 'removed-upstream';
|
|
28
28
|
readonly detail: string;
|
|
29
|
+
/** Files under `--src` whose source names this plugin (issue #71). */
|
|
30
|
+
readonly files?: readonly string[];
|
|
29
31
|
};
|
|
30
32
|
/** The users collection, as the migration will meet it. */
|
|
31
33
|
export type UsersFinding = {
|
|
@@ -66,6 +68,16 @@ export type DatabaseFinding = {
|
|
|
66
68
|
readonly kind: string;
|
|
67
69
|
readonly count: number;
|
|
68
70
|
}[];
|
|
71
|
+
/**
|
|
72
|
+
* Mapped source models whose table is absent (issue #68) — blockers
|
|
73
|
+
* unless `--source-map` records the model as not installed.
|
|
74
|
+
*/
|
|
75
|
+
readonly missingTables?: readonly {
|
|
76
|
+
readonly model: string;
|
|
77
|
+
readonly table: string;
|
|
78
|
+
}[];
|
|
79
|
+
/** Orphan checks that could not run, with the reason (issue #68). */
|
|
80
|
+
readonly skippedChecks?: readonly string[];
|
|
69
81
|
};
|
|
70
82
|
/** Default-behaviour changes in payload-auth-link 0.7.0 that bite. */
|
|
71
83
|
export type BehaviourChange = {
|