@dereekb/dbx-cli 14.0.0 → 14.1.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/eslint/package.json +3 -3
- package/firebase-api-manifest/main.js +63 -25
- package/firebase-api-manifest/package.json +4 -4
- package/firestore-query-manifest/main.js +45 -13
- package/firestore-query-manifest/package.json +3 -3
- package/generate-firestore-indexes/main.js +13 -5
- package/generate-firestore-indexes/package.json +2 -2
- package/generate-mcp-manifest/package.json +3 -3
- package/generate-route-manifest/package.json +2 -2
- package/index.esm.js +603 -567
- package/lint-cache/main.js +239 -69
- package/lint-cache/package.json +2 -2
- package/manifest-extract/package.json +8 -8
- package/model-test/package.json +2 -2
- package/package.json +7 -7
- package/route/package.json +7 -7
- package/src/lib/scan-helpers/emit-generated-ts.d.ts +16 -4
- package/test/package.json +9 -9
- package/validate/index.js +88 -4
- package/validate/package.json +3 -3
package/eslint/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-cli/eslint",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@dereekb/dbx-cli": "14.
|
|
7
|
-
"@dereekb/util": "14.
|
|
6
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
7
|
+
"@dereekb/util": "14.1.0",
|
|
8
8
|
"@typescript-eslint/utils": "8.69.0",
|
|
9
9
|
"typescript": "6.0.3"
|
|
10
10
|
},
|
|
@@ -11,8 +11,8 @@ var compareStrings = (a, b) => a.localeCompare(b);
|
|
|
11
11
|
|
|
12
12
|
// packages/dbx-cli/src/lib/scan-helpers/emit-generated-ts.ts
|
|
13
13
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
14
|
-
import { dirname } from "node:path";
|
|
15
|
-
import { format
|
|
14
|
+
import { dirname, join, parse } from "node:path";
|
|
15
|
+
import { format } from "oxfmt";
|
|
16
16
|
// @__NO_SIDE_EFFECTS__
|
|
17
17
|
function renderGroupedImportLines(imports) {
|
|
18
18
|
const importsByPackage = /* @__PURE__ */ new Map();
|
|
@@ -27,9 +27,36 @@ function renderGroupedImportLines(imports) {
|
|
|
27
27
|
return `import { ${sortedNames} } from '${pkg}';`;
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
|
+
var OXFMT_CONFIG_FILENAME = ".oxfmtrc.json";
|
|
31
|
+
var OXFMT_NON_FORMAT_CONFIG_KEYS = ["$schema", "ignorePatterns"];
|
|
32
|
+
function resolveOxfmtConfig(fromFile) {
|
|
33
|
+
const { root } = parse(fromFile);
|
|
34
|
+
let directory = dirname(fromFile);
|
|
35
|
+
let config = {};
|
|
36
|
+
for (; ; ) {
|
|
37
|
+
const candidate = join(directory, OXFMT_CONFIG_FILENAME);
|
|
38
|
+
if (existsSync(candidate)) {
|
|
39
|
+
const parsed = JSON.parse(readFileSync(candidate, "utf8"));
|
|
40
|
+
for (const key of OXFMT_NON_FORMAT_CONFIG_KEYS) {
|
|
41
|
+
delete parsed[key];
|
|
42
|
+
}
|
|
43
|
+
config = parsed;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
if (directory === root) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
directory = dirname(directory);
|
|
50
|
+
}
|
|
51
|
+
return config;
|
|
52
|
+
}
|
|
30
53
|
async function formatGeneratedTs(source, outputFile) {
|
|
31
|
-
const config =
|
|
32
|
-
|
|
54
|
+
const config = resolveOxfmtConfig(outputFile);
|
|
55
|
+
const { code, errors } = await format(outputFile, source, config);
|
|
56
|
+
if (errors.length > 0) {
|
|
57
|
+
throw new Error(`formatGeneratedTs(): oxfmt failed to format "${outputFile}": ${errors.map((x) => x.message).join(", ")}`);
|
|
58
|
+
}
|
|
59
|
+
return code;
|
|
33
60
|
}
|
|
34
61
|
function writeGeneratedTsFile(input) {
|
|
35
62
|
const { outputFile, contents } = input;
|
|
@@ -111,14 +138,14 @@ function collectImportSpecifierMap(sourceFile) {
|
|
|
111
138
|
|
|
112
139
|
// packages/dbx-cli/firebase-api-manifest/src/generate-api-manifest/resolve-package.ts
|
|
113
140
|
import { existsSync as existsSync2, readFileSync as readFileSync3 } from "node:fs";
|
|
114
|
-
import { dirname as dirname2, isAbsolute, join, relative, resolve } from "node:path";
|
|
141
|
+
import { dirname as dirname2, isAbsolute, join as join2, relative, resolve } from "node:path";
|
|
115
142
|
var _pathsCache;
|
|
116
143
|
function loadTsconfigPaths(workspaceRoot) {
|
|
117
144
|
let result;
|
|
118
145
|
if (_pathsCache) {
|
|
119
146
|
result = _pathsCache;
|
|
120
147
|
} else {
|
|
121
|
-
const tsconfigPath =
|
|
148
|
+
const tsconfigPath = join2(workspaceRoot, "tsconfig.base.json");
|
|
122
149
|
const raw = readFileSync3(tsconfigPath, "utf8");
|
|
123
150
|
const cleaned = stripJsonComments(raw);
|
|
124
151
|
const tsconfig = JSON.parse(cleaned);
|
|
@@ -157,8 +184,8 @@ function locatePackageInNodeModules(input) {
|
|
|
157
184
|
let current = dirname2(importingFile);
|
|
158
185
|
let result;
|
|
159
186
|
while (!result && current && current !== dirname2(current)) {
|
|
160
|
-
const candidateRoot =
|
|
161
|
-
const pkgJson =
|
|
187
|
+
const candidateRoot = join2(current, "node_modules", moduleSpecifier);
|
|
188
|
+
const pkgJson = join2(candidateRoot, "package.json");
|
|
162
189
|
if (existsSync2(pkgJson)) {
|
|
163
190
|
try {
|
|
164
191
|
const pkg = JSON.parse(readFileSync3(pkgJson, "utf8"));
|
|
@@ -176,9 +203,9 @@ function locatePackageForPath(workspaceRoot, startPath) {
|
|
|
176
203
|
let current = startPath;
|
|
177
204
|
let result;
|
|
178
205
|
while (!result && current && current !== workspaceRoot && current !== dirname2(current)) {
|
|
179
|
-
if (existsSync2(
|
|
206
|
+
if (existsSync2(join2(current, "package.json"))) {
|
|
180
207
|
try {
|
|
181
|
-
const pkg = JSON.parse(readFileSync3(
|
|
208
|
+
const pkg = JSON.parse(readFileSync3(join2(current, "package.json"), "utf8"));
|
|
182
209
|
if (pkg.name) {
|
|
183
210
|
result = { packageName: pkg.name, packageRoot: current };
|
|
184
211
|
}
|
|
@@ -198,7 +225,7 @@ function stripJsonComments(text) {
|
|
|
198
225
|
|
|
199
226
|
// packages/dbx-cli/firebase-api-manifest/src/generate-api-manifest/find-api-files.ts
|
|
200
227
|
import { readdirSync, readFileSync as readFileSync5, statSync as statSync2 } from "node:fs";
|
|
201
|
-
import { join as
|
|
228
|
+
import { join as join4 } from "node:path";
|
|
202
229
|
|
|
203
230
|
// packages/dbx-cli/manifest-extract/src/lib/extract-crud.ts
|
|
204
231
|
import { Node as Node2, Project as Project2 } from "ts-morph";
|
|
@@ -588,14 +615,14 @@ function identifierName(node) {
|
|
|
588
615
|
|
|
589
616
|
// packages/dbx-cli/src/lib/scan-helpers/exported-from-package.ts
|
|
590
617
|
import { existsSync as existsSync3, readFileSync as readFileSync4, statSync } from "node:fs";
|
|
591
|
-
import { dirname as dirname3, isAbsolute as isAbsolute2, join as
|
|
618
|
+
import { dirname as dirname3, isAbsolute as isAbsolute2, join as join3, resolve as resolve2 } from "node:path";
|
|
592
619
|
function isExportedFromPackage(input) {
|
|
593
620
|
const { packageRoot, identifier } = input;
|
|
594
621
|
const indexPath = locateBarrelEntry(packageRoot);
|
|
595
622
|
return indexPath ? findIdentifierInBarrelChain(indexPath, identifier, /* @__PURE__ */ new Set()) : false;
|
|
596
623
|
}
|
|
597
624
|
function locateBarrelEntry(packageRoot) {
|
|
598
|
-
const candidates = [
|
|
625
|
+
const candidates = [join3(packageRoot, "src", "index.ts"), join3(packageRoot, "src", "index.d.ts"), join3(packageRoot, "index.d.ts"), join3(packageRoot, "index.ts")];
|
|
599
626
|
return candidates.find((candidate) => existsSync3(candidate));
|
|
600
627
|
}
|
|
601
628
|
var EXPORT_DECL_PATTERNS = [/export\s+(?:declare\s+)?const\s+IDENT\b/, /export\s+(?:declare\s+)?function\s+IDENT\b/, /export\s*\{[^}]*\bIDENT\b[^}]*\}/];
|
|
@@ -677,11 +704,11 @@ function resolveExistingTsPath(probe) {
|
|
|
677
704
|
if (stat.isFile()) {
|
|
678
705
|
result = probe;
|
|
679
706
|
} else if (stat.isDirectory()) {
|
|
680
|
-
const sourceIndex =
|
|
707
|
+
const sourceIndex = join3(probe, "index.ts");
|
|
681
708
|
if (existsSync3(sourceIndex)) {
|
|
682
709
|
result = sourceIndex;
|
|
683
710
|
} else {
|
|
684
|
-
const declarationIndex =
|
|
711
|
+
const declarationIndex = join3(probe, "index.d.ts");
|
|
685
712
|
if (existsSync3(declarationIndex)) {
|
|
686
713
|
result = declarationIndex;
|
|
687
714
|
}
|
|
@@ -1148,7 +1175,7 @@ function firstParagraph(text) {
|
|
|
1148
1175
|
|
|
1149
1176
|
// packages/dbx-cli/firebase-api-manifest/src/generate-api-manifest/find-api-files.ts
|
|
1150
1177
|
function findApiFiles(packageRoot) {
|
|
1151
|
-
const libRoot =
|
|
1178
|
+
const libRoot = join4(packageRoot, "src", "lib");
|
|
1152
1179
|
const out = [];
|
|
1153
1180
|
if (safeIsDirectory(libRoot)) {
|
|
1154
1181
|
const seenClassNames = /* @__PURE__ */ new Set();
|
|
@@ -1166,7 +1193,7 @@ function findApiFiles(packageRoot) {
|
|
|
1166
1193
|
function* walkApiFiles(dir) {
|
|
1167
1194
|
for (const entry of readdirSync(dir).sort()) {
|
|
1168
1195
|
if (entry === "node_modules" || entry === "dist") continue;
|
|
1169
|
-
const p =
|
|
1196
|
+
const p = join4(dir, entry);
|
|
1170
1197
|
const stat = statSync2(p);
|
|
1171
1198
|
if (stat.isDirectory()) {
|
|
1172
1199
|
yield* walkApiFiles(p);
|
|
@@ -1191,9 +1218,9 @@ function safeIsDirectory(p) {
|
|
|
1191
1218
|
|
|
1192
1219
|
// packages/dbx-cli/firebase-api-manifest/src/generate-api-manifest/find-model-files.ts
|
|
1193
1220
|
import { readdirSync as readdirSync2, readFileSync as readFileSync6, statSync as statSync3 } from "node:fs";
|
|
1194
|
-
import { join as
|
|
1221
|
+
import { join as join5 } from "node:path";
|
|
1195
1222
|
function findModelFiles(packageRoot) {
|
|
1196
|
-
const libRoot =
|
|
1223
|
+
const libRoot = join5(packageRoot, "src", "lib");
|
|
1197
1224
|
const out = [];
|
|
1198
1225
|
if (safeIsDirectory2(libRoot)) {
|
|
1199
1226
|
for (const filePath of walkSourceFiles(libRoot)) {
|
|
@@ -1215,7 +1242,7 @@ function hasExtractedArtifact(extraction) {
|
|
|
1215
1242
|
function* walkSourceFiles(dir) {
|
|
1216
1243
|
for (const entry of readdirSync2(dir).sort()) {
|
|
1217
1244
|
if (entry === "node_modules" || entry === "dist") continue;
|
|
1218
|
-
const p =
|
|
1245
|
+
const p = join5(dir, entry);
|
|
1219
1246
|
const stat = statSync3(p);
|
|
1220
1247
|
if (stat.isDirectory()) {
|
|
1221
1248
|
yield* walkSourceFiles(p);
|
|
@@ -1723,16 +1750,16 @@ function renderModelField(field, emitConverters) {
|
|
|
1723
1750
|
// packages/dbx-cli/firebase-api-manifest/package.json
|
|
1724
1751
|
var package_default = {
|
|
1725
1752
|
name: "@dereekb/dbx-cli-firebase-api-manifest",
|
|
1726
|
-
version: "14.
|
|
1753
|
+
version: "14.1.0",
|
|
1727
1754
|
private: true,
|
|
1728
1755
|
type: "module",
|
|
1729
1756
|
devDependencies: {
|
|
1730
1757
|
"ts-morph": "^28.0.0"
|
|
1731
1758
|
},
|
|
1732
1759
|
peerDependencies: {
|
|
1733
|
-
"@dereekb/dbx-cli": "14.
|
|
1734
|
-
"@dereekb/util": "14.
|
|
1735
|
-
|
|
1760
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
1761
|
+
"@dereekb/util": "14.1.0",
|
|
1762
|
+
oxfmt: "^0.66.0"
|
|
1736
1763
|
}
|
|
1737
1764
|
};
|
|
1738
1765
|
|
|
@@ -1826,7 +1853,18 @@ async function main() {
|
|
|
1826
1853
|
const modelEntries = flags.emitModels ? assembleModels({ extractions: modelSources }) : [];
|
|
1827
1854
|
const filteredModelEntries = flags.only ? modelEntries.filter((m) => flags.only?.has(m.modelType)) : modelEntries;
|
|
1828
1855
|
const enumEntries = flags.emitModels ? collectModelEnums({ extractions: modelSources, models: filteredModelEntries }) : {};
|
|
1829
|
-
const formatted = await renderManifest({
|
|
1856
|
+
const formatted = await renderManifest({
|
|
1857
|
+
outputFile,
|
|
1858
|
+
entries: collected,
|
|
1859
|
+
projectName,
|
|
1860
|
+
namespace,
|
|
1861
|
+
modelEntries: filteredModelEntries,
|
|
1862
|
+
modelNamespace: deriveModelNamespace(flags.project),
|
|
1863
|
+
enumEntries,
|
|
1864
|
+
enumNamespace: deriveEnumNamespace(flags.project),
|
|
1865
|
+
emitConverters: flags.emitModelConverters,
|
|
1866
|
+
generatorVersion: package_default.version
|
|
1867
|
+
});
|
|
1830
1868
|
const outcome = writeGeneratedTsFile({ outputFile, contents: formatted });
|
|
1831
1869
|
console.log(`[${outcome}] ${relative2(WORKSPACE_ROOT, outputFile)}`);
|
|
1832
1870
|
const groupCount = packageCache.size === 0 ? 0 : new Set(collected.map((c) => c.entry.groupName)).size;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-cli-firebase-api-manifest",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.1.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"ts-morph": "^28.0.0"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@dereekb/dbx-cli": "14.
|
|
11
|
-
"@dereekb/util": "14.
|
|
12
|
-
"
|
|
10
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
11
|
+
"@dereekb/util": "14.1.0",
|
|
12
|
+
"oxfmt": "^0.66.0"
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -9,15 +9,15 @@ import { isAbsolute as isAbsolute2, relative as relative2, resolve as resolve3 }
|
|
|
9
9
|
// packages/dbx-cli/firestore-query-manifest/package.json
|
|
10
10
|
var package_default = {
|
|
11
11
|
name: "@dereekb/dbx-cli-firestore-query-manifest",
|
|
12
|
-
version: "14.
|
|
12
|
+
version: "14.1.0",
|
|
13
13
|
private: true,
|
|
14
14
|
type: "module",
|
|
15
15
|
devDependencies: {
|
|
16
16
|
eslint: "10.9.1"
|
|
17
17
|
},
|
|
18
18
|
peerDependencies: {
|
|
19
|
-
"@dereekb/dbx-cli": "14.
|
|
20
|
-
"@dereekb/util": "14.
|
|
19
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
20
|
+
"@dereekb/util": "14.1.0"
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
23
|
|
|
@@ -26,8 +26,8 @@ var compareStrings = (a, b) => a.localeCompare(b);
|
|
|
26
26
|
|
|
27
27
|
// packages/dbx-cli/src/lib/scan-helpers/emit-generated-ts.ts
|
|
28
28
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
29
|
-
import { dirname } from "node:path";
|
|
30
|
-
import { format
|
|
29
|
+
import { dirname, join, parse } from "node:path";
|
|
30
|
+
import { format } from "oxfmt";
|
|
31
31
|
// @__NO_SIDE_EFFECTS__
|
|
32
32
|
function renderGroupedImportLines(imports) {
|
|
33
33
|
const importsByPackage = /* @__PURE__ */ new Map();
|
|
@@ -42,9 +42,36 @@ function renderGroupedImportLines(imports) {
|
|
|
42
42
|
return `import { ${sortedNames} } from '${pkg}';`;
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
+
var OXFMT_CONFIG_FILENAME = ".oxfmtrc.json";
|
|
46
|
+
var OXFMT_NON_FORMAT_CONFIG_KEYS = ["$schema", "ignorePatterns"];
|
|
47
|
+
function resolveOxfmtConfig(fromFile) {
|
|
48
|
+
const { root } = parse(fromFile);
|
|
49
|
+
let directory = dirname(fromFile);
|
|
50
|
+
let config = {};
|
|
51
|
+
for (; ; ) {
|
|
52
|
+
const candidate = join(directory, OXFMT_CONFIG_FILENAME);
|
|
53
|
+
if (existsSync(candidate)) {
|
|
54
|
+
const parsed = JSON.parse(readFileSync(candidate, "utf8"));
|
|
55
|
+
for (const key of OXFMT_NON_FORMAT_CONFIG_KEYS) {
|
|
56
|
+
delete parsed[key];
|
|
57
|
+
}
|
|
58
|
+
config = parsed;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
if (directory === root) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
directory = dirname(directory);
|
|
65
|
+
}
|
|
66
|
+
return config;
|
|
67
|
+
}
|
|
45
68
|
async function formatGeneratedTs(source, outputFile) {
|
|
46
|
-
const config =
|
|
47
|
-
|
|
69
|
+
const config = resolveOxfmtConfig(outputFile);
|
|
70
|
+
const { code, errors } = await format(outputFile, source, config);
|
|
71
|
+
if (errors.length > 0) {
|
|
72
|
+
throw new Error(`formatGeneratedTs(): oxfmt failed to format "${outputFile}": ${errors.map((x) => x.message).join(", ")}`);
|
|
73
|
+
}
|
|
74
|
+
return code;
|
|
48
75
|
}
|
|
49
76
|
function writeGeneratedTsFile(input) {
|
|
50
77
|
const { outputFile, contents } = input;
|
|
@@ -299,14 +326,14 @@ function parentPathsForCollection(scan, collection) {
|
|
|
299
326
|
|
|
300
327
|
// packages/dbx-cli/src/lib/scan-helpers/exported-from-package.ts
|
|
301
328
|
import { existsSync as existsSync2, readFileSync as readFileSync2, statSync } from "node:fs";
|
|
302
|
-
import { dirname as dirname2, isAbsolute, join, resolve } from "node:path";
|
|
329
|
+
import { dirname as dirname2, isAbsolute, join as join2, resolve } from "node:path";
|
|
303
330
|
function isExportedFromPackage(input) {
|
|
304
331
|
const { packageRoot, identifier } = input;
|
|
305
332
|
const indexPath = locateBarrelEntry(packageRoot);
|
|
306
333
|
return indexPath ? findIdentifierInBarrelChain(indexPath, identifier, /* @__PURE__ */ new Set()) : false;
|
|
307
334
|
}
|
|
308
335
|
function locateBarrelEntry(packageRoot) {
|
|
309
|
-
const candidates = [
|
|
336
|
+
const candidates = [join2(packageRoot, "src", "index.ts"), join2(packageRoot, "src", "index.d.ts"), join2(packageRoot, "index.d.ts"), join2(packageRoot, "index.ts")];
|
|
310
337
|
return candidates.find((candidate) => existsSync2(candidate));
|
|
311
338
|
}
|
|
312
339
|
var EXPORT_DECL_PATTERNS = [/export\s+(?:declare\s+)?const\s+IDENT\b/, /export\s+(?:declare\s+)?function\s+IDENT\b/, /export\s*\{[^}]*\bIDENT\b[^}]*\}/];
|
|
@@ -388,11 +415,11 @@ function resolveExistingTsPath(probe) {
|
|
|
388
415
|
if (stat.isFile()) {
|
|
389
416
|
result = probe;
|
|
390
417
|
} else if (stat.isDirectory()) {
|
|
391
|
-
const sourceIndex =
|
|
418
|
+
const sourceIndex = join2(probe, "index.ts");
|
|
392
419
|
if (existsSync2(sourceIndex)) {
|
|
393
420
|
result = sourceIndex;
|
|
394
421
|
} else {
|
|
395
|
-
const declarationIndex =
|
|
422
|
+
const declarationIndex = join2(probe, "index.d.ts");
|
|
396
423
|
if (existsSync2(declarationIndex)) {
|
|
397
424
|
result = declarationIndex;
|
|
398
425
|
}
|
|
@@ -469,7 +496,12 @@ function renderEntry({ entry, bound }) {
|
|
|
469
496
|
return ` { ${fields.filter(Boolean).join(", ")} }`;
|
|
470
497
|
}
|
|
471
498
|
function renderRules(rules) {
|
|
472
|
-
const parts = [
|
|
499
|
+
const parts = [
|
|
500
|
+
`list: ${JSON.stringify(rules.list)}`,
|
|
501
|
+
`collectionGroup: ${rules.collectionGroup ? "true" : "false"}`,
|
|
502
|
+
rules.reason ? `reason: ${JSON.stringify(rules.reason)}` : void 0,
|
|
503
|
+
rules.parentPaths && rules.parentPaths.length > 0 ? `parentPaths: ${JSON.stringify(rules.parentPaths)}` : void 0
|
|
504
|
+
];
|
|
473
505
|
return `{ ${parts.filter(Boolean).join(", ")} }`;
|
|
474
506
|
}
|
|
475
507
|
function renderParams(params) {
|
|
@@ -1532,7 +1564,7 @@ function tryTransitiveResolution(input) {
|
|
|
1532
1564
|
const calleeLine = resolved.decl.getStartLineNumber();
|
|
1533
1565
|
warnings.push({ kind: "unannotated-query-helper", severity: "warning", name: factoryName, callee: calleeName, calleeFilePath, calleeLine, filePath, line: call.getStartLineNumber() });
|
|
1534
1566
|
}
|
|
1535
|
-
const nextVisited =
|
|
1567
|
+
const nextVisited = new Set(visited).add(calleeKey);
|
|
1536
1568
|
walkBodyInto({
|
|
1537
1569
|
decl: resolved.decl,
|
|
1538
1570
|
factoryName,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-cli-firestore-query-manifest",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.1.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"eslint": "10.9.1"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@dereekb/dbx-cli": "14.
|
|
11
|
-
"@dereekb/util": "14.
|
|
10
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
11
|
+
"@dereekb/util": "14.1.0"
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -5,14 +5,14 @@ const require = __createRequire(import.meta.url);
|
|
|
5
5
|
// packages/dbx-cli/generate-firestore-indexes/package.json
|
|
6
6
|
var package_default = {
|
|
7
7
|
name: "@dereekb/dbx-cli-generate-firestore-indexes",
|
|
8
|
-
version: "14.
|
|
8
|
+
version: "14.1.0",
|
|
9
9
|
private: true,
|
|
10
10
|
type: "module",
|
|
11
11
|
devDependencies: {
|
|
12
12
|
eslint: "10.9.1"
|
|
13
13
|
},
|
|
14
14
|
peerDependencies: {
|
|
15
|
-
"@dereekb/dbx-cli": "14.
|
|
15
|
+
"@dereekb/dbx-cli": "14.1.0"
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
18
|
|
|
@@ -1298,7 +1298,7 @@ function tryTransitiveResolution(input) {
|
|
|
1298
1298
|
const calleeLine = resolved.decl.getStartLineNumber();
|
|
1299
1299
|
warnings.push({ kind: "unannotated-query-helper", severity: "warning", name: factoryName, callee: calleeName, calleeFilePath, calleeLine, filePath, line: call.getStartLineNumber() });
|
|
1300
1300
|
}
|
|
1301
|
-
const nextVisited =
|
|
1301
|
+
const nextVisited = new Set(visited).add(calleeKey);
|
|
1302
1302
|
walkBodyInto({
|
|
1303
1303
|
decl: resolved.decl,
|
|
1304
1304
|
factoryName,
|
|
@@ -2278,13 +2278,21 @@ function formatBuildFailure(outcome) {
|
|
|
2278
2278
|
}
|
|
2279
2279
|
function formatWriteSummary(input) {
|
|
2280
2280
|
const { outputPath, diff, generatedComposites, generatedFieldOverrides } = input;
|
|
2281
|
-
const lines = [
|
|
2281
|
+
const lines = [
|
|
2282
|
+
`generate-firestore-indexes: wrote ${outputPath}`,
|
|
2283
|
+
` composites: ${generatedComposites} (added ${diff.added.length}, removed ${diff.removed.length}, unchanged ${diff.unchanged.length})`,
|
|
2284
|
+
` fieldOverrides: ${generatedFieldOverrides} (added ${diff.fieldOverridesAdded.length}, removed ${diff.fieldOverridesRemoved.length}, unchanged ${diff.fieldOverridesUnchanged.length})`
|
|
2285
|
+
];
|
|
2282
2286
|
return appendDiffSection(lines, diff).join("\n");
|
|
2283
2287
|
}
|
|
2284
2288
|
function formatCheckSummary(input) {
|
|
2285
2289
|
const { drift, outputPath, diff, generatedComposites, generatedFieldOverrides } = input;
|
|
2286
2290
|
const headline = drift ? `generate-firestore-indexes: drift detected against ${outputPath}` : `generate-firestore-indexes: in sync (${outputPath})`;
|
|
2287
|
-
const lines = [
|
|
2291
|
+
const lines = [
|
|
2292
|
+
headline,
|
|
2293
|
+
` composites: ${generatedComposites} (added ${diff.added.length}, removed ${diff.removed.length}, unchanged ${diff.unchanged.length})`,
|
|
2294
|
+
` fieldOverrides: ${generatedFieldOverrides} (added ${diff.fieldOverridesAdded.length}, removed ${diff.fieldOverridesRemoved.length}, unchanged ${diff.fieldOverridesUnchanged.length})`
|
|
2295
|
+
];
|
|
2288
2296
|
return appendDiffSection(lines, diff).join("\n");
|
|
2289
2297
|
}
|
|
2290
2298
|
function appendDiffSection(lines, diff) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-cli-generate-firestore-indexes",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.1.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"eslint": "10.9.1"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@dereekb/dbx-cli": "14.
|
|
10
|
+
"@dereekb/dbx-cli": "14.1.0"
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-cli-generate-mcp-manifest",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.1.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"peerDependencies": {
|
|
7
|
-
"@dereekb/dbx-cli": "14.
|
|
8
|
-
"@dereekb/model": "14.
|
|
7
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
8
|
+
"@dereekb/model": "14.1.0",
|
|
9
9
|
"arktype": "^2.2.0",
|
|
10
10
|
"jiti": "2.7.0"
|
|
11
11
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-cli-generate-route-manifest",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.1.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"peerDependencies": {
|
|
7
|
-
"@dereekb/dbx-cli": "14.
|
|
7
|
+
"@dereekb/dbx-cli": "14.1.0",
|
|
8
8
|
"ts-morph": "^28.0.0"
|
|
9
9
|
}
|
|
10
10
|
}
|