@dasasian/firebase-structured-logger 0.9.0 → 1.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/README.md +191 -32
- package/dist/client/breadcrumbs.d.ts +11 -1
- package/dist/client/breadcrumbs.d.ts.map +1 -1
- package/dist/client/breadcrumbs.js +18 -0
- package/dist/client/breadcrumbs.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/logger.d.ts +6 -2
- package/dist/client/logger.d.ts.map +1 -1
- package/dist/client/logger.js +26 -8
- package/dist/client/logger.js.map +1 -1
- package/dist/client/navigation.d.ts +34 -0
- package/dist/client/navigation.d.ts.map +1 -0
- package/dist/client/navigation.js +89 -0
- package/dist/client/navigation.js.map +1 -0
- package/dist/client/rateLimiter.d.ts +12 -5
- package/dist/client/rateLimiter.d.ts.map +1 -1
- package/dist/client/rateLimiter.js +61 -12
- package/dist/client/rateLimiter.js.map +1 -1
- package/dist/functions/httpHandler.d.ts +1 -1
- package/dist/functions/httpHandler.js +1 -1
- package/dist/functions/index.d.ts +1 -1
- package/dist/functions/index.d.ts.map +1 -1
- package/dist/functions/logHandler.d.ts +10 -5
- package/dist/functions/logHandler.d.ts.map +1 -1
- package/dist/functions/logHandler.js +16 -5
- package/dist/functions/logHandler.js.map +1 -1
- package/dist/functions/logger.js +1 -1
- package/dist/functions/logger.js.map +1 -1
- package/dist/functions/sourceMapCache.js +1 -1
- package/dist/functions/sourceMapCache.js.map +1 -1
- package/dist/shared/deprecate.d.ts +4 -0
- package/dist/shared/deprecate.d.ts.map +1 -0
- package/dist/shared/deprecate.js +30 -0
- package/dist/shared/deprecate.js.map +1 -0
- package/dist/shared/nodeModules.d.ts +39 -0
- package/dist/shared/nodeModules.d.ts.map +1 -0
- package/dist/shared/nodeModules.js +120 -0
- package/dist/shared/nodeModules.js.map +1 -0
- package/dist/shared/types.d.ts +17 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/versionRange.d.ts +17 -0
- package/dist/shared/versionRange.d.ts.map +1 -0
- package/dist/shared/versionRange.js +48 -0
- package/dist/shared/versionRange.js.map +1 -0
- package/dist/tools/doctor.d.ts +54 -0
- package/dist/tools/doctor.d.ts.map +1 -0
- package/dist/tools/doctor.js +381 -0
- package/dist/tools/doctor.js.map +1 -0
- package/dist/tools/index.js +34 -5
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/uploadSourceMaps.d.ts +7 -0
- package/dist/tools/uploadSourceMaps.d.ts.map +1 -1
- package/dist/tools/uploadSourceMaps.js.map +1 -1
- package/package.json +18 -11
- package/skills/logs/SKILL.md +10 -0
- package/skills/query-logs/SKILL.md +18 -1
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `fsl doctor` — checks a project's setup from disk and reports how it will behave.
|
|
4
|
+
*
|
|
5
|
+
* Every fact comes from a file with a fixed format: `firebase.json`, `package.json`,
|
|
6
|
+
* each installed package's own `package.json`, `dist/`, and the embedded `.release`
|
|
7
|
+
* marker. Nothing
|
|
8
|
+
* here parses source code or guesses at behavior — a check that cannot read what it
|
|
9
|
+
* needs reports `could-not-check`, never a pass (see CLAUDE.md, "fsl doctor — facts,
|
|
10
|
+
* not guesses"). The finding ids, levels, and the `--json` shape are the README's
|
|
11
|
+
* "Check your setup" section, verbatim; this file exists to make that section true.
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.checkUnsupportedPeers = checkUnsupportedPeers;
|
|
48
|
+
exports.runDoctor = runDoctor;
|
|
49
|
+
exports.exitCodeFor = exitCodeFor;
|
|
50
|
+
exports.formatDoctorReport = formatDoctorReport;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const paths_js_1 = require("../shared/paths.js");
|
|
54
|
+
const nodeModules_js_1 = require("../shared/nodeModules.js");
|
|
55
|
+
const versionRange_js_1 = require("../shared/versionRange.js");
|
|
56
|
+
const PEER_PACKAGES = ['firebase', 'firebase-admin', 'firebase-functions'];
|
|
57
|
+
function readFirebaseJson(projectRoot) {
|
|
58
|
+
const file = path.join(projectRoot, 'firebase.json');
|
|
59
|
+
if (!fs.existsSync(file))
|
|
60
|
+
return { ok: 'absent' };
|
|
61
|
+
try {
|
|
62
|
+
return { ok: true, config: JSON.parse(fs.readFileSync(file, 'utf-8')) };
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
finding: couldNotCheck('firebase.json could not be parsed as JSON.', 'Fix the syntax error in firebase.json.'),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function couldNotCheck(message, fix) {
|
|
72
|
+
return { id: 'could-not-check', level: 'error', message, fix };
|
|
73
|
+
}
|
|
74
|
+
function firstOf(value) {
|
|
75
|
+
return Array.isArray(value) ? value[0] : value;
|
|
76
|
+
}
|
|
77
|
+
function hostingPublicDirs(hosting) {
|
|
78
|
+
const configs = Array.isArray(hosting) ? hosting : hosting ? [hosting] : [];
|
|
79
|
+
return configs.map((c) => c.public).filter((p) => typeof p === 'string');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Determine the setup this project has, from `firebase.json` when present, or from
|
|
83
|
+
* `--backend`/`--dist` otherwise. `dist` here is "the folder hosting serves" — under
|
|
84
|
+
* Firebase that is `hosting.public`; outside Firebase it is whatever `--dist` names.
|
|
85
|
+
*/
|
|
86
|
+
function detectSetup(options, findings) {
|
|
87
|
+
const firebaseJson = readFirebaseJson(options.projectRoot);
|
|
88
|
+
if (firebaseJson.ok === false) {
|
|
89
|
+
findings.push(firebaseJson.finding);
|
|
90
|
+
return { kind: 'firebase', backendDir: null, distDirs: [] };
|
|
91
|
+
}
|
|
92
|
+
if (firebaseJson.ok === true) {
|
|
93
|
+
const functionsConfig = firstOf(firebaseJson.config.functions);
|
|
94
|
+
const backend = functionsConfig?.source ?? 'functions';
|
|
95
|
+
const distDirs = hostingPublicDirs(firebaseJson.config.hosting);
|
|
96
|
+
return {
|
|
97
|
+
kind: 'firebase',
|
|
98
|
+
backendDir: path.resolve(options.projectRoot, backend),
|
|
99
|
+
distDirs: distDirs.map((d) => path.resolve(options.projectRoot, d)),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const backendDir = options.backend ? path.resolve(options.projectRoot, options.backend) : null;
|
|
103
|
+
const distDirs = options.dist ? [path.resolve(options.projectRoot, options.dist)] : [];
|
|
104
|
+
const kind = backendDir && distDirs.length ? 'node' : backendDir ? 'backend-only' : distDirs.length ? 'browser-only' : 'backend-only';
|
|
105
|
+
return { kind, backendDir, distDirs };
|
|
106
|
+
}
|
|
107
|
+
function findMapFiles(dir) {
|
|
108
|
+
const results = [];
|
|
109
|
+
if (!fs.existsSync(dir))
|
|
110
|
+
return results;
|
|
111
|
+
const walk = (current) => {
|
|
112
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
113
|
+
const full = path.join(current, entry.name);
|
|
114
|
+
if (entry.isDirectory())
|
|
115
|
+
walk(full);
|
|
116
|
+
else if (entry.isFile() && entry.name.endsWith('.map'))
|
|
117
|
+
results.push(full);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
walk(dir);
|
|
121
|
+
return results;
|
|
122
|
+
}
|
|
123
|
+
function checkMapsPublished(distDirs, findings) {
|
|
124
|
+
for (const dist of distDirs) {
|
|
125
|
+
const maps = findMapFiles(dist);
|
|
126
|
+
if (maps.length === 0)
|
|
127
|
+
continue;
|
|
128
|
+
findings.push({
|
|
129
|
+
id: 'maps-published',
|
|
130
|
+
level: 'error',
|
|
131
|
+
message: `${maps.length} .map file(s) found under ${dist}, which hosting serves — your source code is public.`,
|
|
132
|
+
fix: `Run fsl upload-sourcemaps before deploying, so maps leave ${dist} instead of being published.`,
|
|
133
|
+
});
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function checkNodeVersion(backendDir, firebaseRuntime, findings) {
|
|
138
|
+
if (!backendDir)
|
|
139
|
+
return;
|
|
140
|
+
if (firebaseRuntime) {
|
|
141
|
+
const major = (0, versionRange_js_1.leadingMajorVersion)(firebaseRuntime);
|
|
142
|
+
if (major !== undefined && major < 22) {
|
|
143
|
+
findings.push({
|
|
144
|
+
id: 'node-version',
|
|
145
|
+
level: 'error',
|
|
146
|
+
message: `firebase.json sets the functions runtime to ${firebaseRuntime}, below the supported floor of Node 22.`,
|
|
147
|
+
fix: 'Set functions.runtime to "nodejs22" (or later) in firebase.json.',
|
|
148
|
+
});
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (major !== undefined)
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const read = (0, nodeModules_js_1.readPackageJson)(backendDir);
|
|
155
|
+
if (!read.ok) {
|
|
156
|
+
if (read.reason === 'missing') {
|
|
157
|
+
findings.push(couldNotCheck(`No package.json in ${backendDir}. Run npm install first.`, 'Run npm install in the backend directory.'));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
findings.push(couldNotCheck(`${path.join(backendDir, 'package.json')} could not be parsed as JSON.`, 'Fix the syntax error in the backend package.json.'));
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const engines = read.pkg.engines;
|
|
165
|
+
const engineNode = engines?.node;
|
|
166
|
+
if (!engineNode)
|
|
167
|
+
return;
|
|
168
|
+
const major = (0, versionRange_js_1.leadingMajorVersion)(engineNode);
|
|
169
|
+
if (major !== undefined && major < 22) {
|
|
170
|
+
findings.push({
|
|
171
|
+
id: 'node-version',
|
|
172
|
+
level: 'error',
|
|
173
|
+
message: `${path.join(backendDir, 'package.json')} sets engines.node to "${engineNode}", below the supported floor of Node 22.`,
|
|
174
|
+
fix: 'Set engines.node to ">=22" in the backend package.json.',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function checkCallable(kind, backendDir, findings) {
|
|
179
|
+
if (kind !== 'firebase' || !backendDir)
|
|
180
|
+
return false;
|
|
181
|
+
const version = (0, nodeModules_js_1.findTopLevelVersion)([backendDir], 'firebase-functions');
|
|
182
|
+
if (version)
|
|
183
|
+
return true;
|
|
184
|
+
findings.push({
|
|
185
|
+
id: 'callable-without-firebase-functions',
|
|
186
|
+
level: 'error',
|
|
187
|
+
message: `firebase.json configures functions in ${backendDir}, but firebase-functions is not installed there.`,
|
|
188
|
+
fix: `Run npm install firebase-functions in ${backendDir}.`,
|
|
189
|
+
});
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
function checkDuplicateStorage(backendDir, findings) {
|
|
193
|
+
if (!backendDir || !fs.existsSync(path.join(backendDir, 'node_modules')))
|
|
194
|
+
return;
|
|
195
|
+
const copies = (0, nodeModules_js_1.findPackageCopies)(backendDir, '@google-cloud/storage');
|
|
196
|
+
const versions = [...new Set(copies.map((c) => c.version))];
|
|
197
|
+
if (versions.length <= 1)
|
|
198
|
+
return;
|
|
199
|
+
const placed = copies.map((c) => `${c.version} ${describeOwner(ownerOf(c.dir))}`);
|
|
200
|
+
findings.push({
|
|
201
|
+
id: 'duplicate-storage',
|
|
202
|
+
level: 'warning',
|
|
203
|
+
message: `${copies.length} copies of @google-cloud/storage (${placed.join(', ')})`,
|
|
204
|
+
fix: 'npm dedupe',
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function displayPath(projectRoot, dir) {
|
|
208
|
+
const relative = path.relative(projectRoot, dir);
|
|
209
|
+
if (relative === '')
|
|
210
|
+
return '.';
|
|
211
|
+
return relative.startsWith('..') || path.isAbsolute(relative) ? relative : `./${relative}`;
|
|
212
|
+
}
|
|
213
|
+
function ownerOf(packageDir) {
|
|
214
|
+
const parts = packageDir.split(path.sep);
|
|
215
|
+
const nodeModules = parts.lastIndexOf('node_modules');
|
|
216
|
+
const previous = parts.lastIndexOf('node_modules', nodeModules - 1);
|
|
217
|
+
if (previous === -1)
|
|
218
|
+
return null;
|
|
219
|
+
const owner = parts.slice(previous + 1, nodeModules);
|
|
220
|
+
return owner.join('/');
|
|
221
|
+
}
|
|
222
|
+
function describeOwner(owner) {
|
|
223
|
+
return owner === null ? 'at the top level' : `inside ${owner}`;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* A peer whose supported range cannot be evaluated is `could-not-check`, never a pass:
|
|
227
|
+
* the ranges are read from this package's own `peerDependencies`, and a range shape
|
|
228
|
+
* `meetsMinimum` does not understand must surface rather than skip the check.
|
|
229
|
+
*/
|
|
230
|
+
function checkUnsupportedPeers(searchDirs, ownPeerDependencies, findings) {
|
|
231
|
+
for (const peer of PEER_PACKAGES) {
|
|
232
|
+
const range = ownPeerDependencies[peer];
|
|
233
|
+
if (!range)
|
|
234
|
+
continue;
|
|
235
|
+
const installed = (0, nodeModules_js_1.findTopLevelVersion)(searchDirs, peer);
|
|
236
|
+
if (!installed)
|
|
237
|
+
continue;
|
|
238
|
+
const meets = (0, versionRange_js_1.meetsMinimum)(installed, range);
|
|
239
|
+
if (meets === undefined) {
|
|
240
|
+
findings.push({
|
|
241
|
+
id: 'could-not-check',
|
|
242
|
+
level: 'error',
|
|
243
|
+
message: `Could not compare ${peer} ${installed} with the supported range ${range}.`,
|
|
244
|
+
fix: 'Report this at https://github.com/dasasian/firebase-structured-logger/issues — doctor needs to learn this range shape.',
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
else if (meets === false) {
|
|
248
|
+
findings.push({
|
|
249
|
+
id: 'unsupported-peer',
|
|
250
|
+
level: 'warning',
|
|
251
|
+
message: `${peer} ${installed} is installed, outside this package's supported range (${range}).`,
|
|
252
|
+
fix: `Upgrade ${peer} to satisfy ${range}.`,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function checkEmbeddedMapsWithoutRelease(backendDir, findings) {
|
|
258
|
+
if (!backendDir)
|
|
259
|
+
return;
|
|
260
|
+
const dir = (0, paths_js_1.embeddedDir)(backendDir);
|
|
261
|
+
if (!fs.existsSync(dir))
|
|
262
|
+
return;
|
|
263
|
+
const hasMaps = fs.readdirSync(dir).some((f) => f.endsWith('.map'));
|
|
264
|
+
if (!hasMaps)
|
|
265
|
+
return;
|
|
266
|
+
if (fs.existsSync((0, paths_js_1.embeddedMarkerPath)(backendDir)))
|
|
267
|
+
return;
|
|
268
|
+
findings.push({
|
|
269
|
+
id: 'embedded-maps-without-release',
|
|
270
|
+
level: 'warning',
|
|
271
|
+
message: `${dir} has embedded maps but no ${paths_js_1.RELEASE_MARKER} marker — an older release's stack can resolve against the wrong map.`,
|
|
272
|
+
fix: 'Re-run fsl upload-sourcemaps --embed-sourcemaps, which writes the marker.',
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
/** This package's own `package.json`, read at runtime — never copied into doctor. */
|
|
276
|
+
function readOwnPackageJson() {
|
|
277
|
+
const read = (0, nodeModules_js_1.readPackageJson)(path.join(__dirname, '..', '..'));
|
|
278
|
+
if (!read.ok)
|
|
279
|
+
throw new Error('fsl doctor could not read its own package.json');
|
|
280
|
+
return read.pkg;
|
|
281
|
+
}
|
|
282
|
+
function resolveStorage(searchDirs) {
|
|
283
|
+
if ((0, nodeModules_js_1.findTopLevelVersion)(searchDirs, 'firebase-admin'))
|
|
284
|
+
return 'firebase-admin';
|
|
285
|
+
if ((0, nodeModules_js_1.findTopLevelVersion)(searchDirs, '@google-cloud/storage'))
|
|
286
|
+
return 'google-cloud-storage';
|
|
287
|
+
return 'none';
|
|
288
|
+
}
|
|
289
|
+
function runDoctor(options) {
|
|
290
|
+
const findings = [];
|
|
291
|
+
const { kind, backendDir, distDirs } = detectSetup(options, findings);
|
|
292
|
+
const firebaseJson = readFirebaseJson(options.projectRoot);
|
|
293
|
+
const firebaseRuntime = firebaseJson.ok === true ? firstOf(firebaseJson.config.functions)?.runtime : undefined;
|
|
294
|
+
checkMapsPublished(distDirs, findings);
|
|
295
|
+
checkNodeVersion(backendDir, firebaseRuntime, findings);
|
|
296
|
+
const callable = checkCallable(kind, backendDir, findings);
|
|
297
|
+
checkDuplicateStorage(backendDir, findings);
|
|
298
|
+
const searchDirs = [backendDir, options.projectRoot].filter((d) => d !== null);
|
|
299
|
+
const ownPkg = readOwnPackageJson();
|
|
300
|
+
checkUnsupportedPeers(searchDirs, ownPkg.peerDependencies ?? {}, findings);
|
|
301
|
+
checkEmbeddedMapsWithoutRelease(backendDir, findings);
|
|
302
|
+
const hasFirebaseFunctions = backendDir !== null && (0, nodeModules_js_1.findTopLevelVersion)([backendDir], 'firebase-functions') !== undefined;
|
|
303
|
+
const logging = kind === 'firebase' && hasFirebaseFunctions ? 'firebase-functions' : backendDir ? 'stdout' : 'none';
|
|
304
|
+
const trace = kind === 'firebase' && hasFirebaseFunctions ? 'trigger' : backendDir ? 'header' : 'none';
|
|
305
|
+
const storage = resolveStorage(searchDirs);
|
|
306
|
+
const setup = {
|
|
307
|
+
kind,
|
|
308
|
+
backend: backendDir ? displayPath(options.projectRoot, backendDir) : null,
|
|
309
|
+
dist: distDirs[0] ? displayPath(options.projectRoot, distDirs[0]) : null,
|
|
310
|
+
logging,
|
|
311
|
+
trace,
|
|
312
|
+
storage,
|
|
313
|
+
callable,
|
|
314
|
+
};
|
|
315
|
+
const hasError = findings.some((f) => f.level === 'error');
|
|
316
|
+
const exitCode = hasError ? 1 : 0;
|
|
317
|
+
return { setup, findings, exitCode };
|
|
318
|
+
}
|
|
319
|
+
/** `report.exitCode` ignores `--strict`; the CLI applies it here. */
|
|
320
|
+
function exitCodeFor(report, strict) {
|
|
321
|
+
if (report.findings.some((f) => f.level === 'error'))
|
|
322
|
+
return 1;
|
|
323
|
+
if (strict && report.findings.some((f) => f.level === 'warning'))
|
|
324
|
+
return 1;
|
|
325
|
+
return 0;
|
|
326
|
+
}
|
|
327
|
+
const SETUP_LABEL = {
|
|
328
|
+
firebase: 'Firebase',
|
|
329
|
+
node: 'Node',
|
|
330
|
+
'browser-only': 'browser only',
|
|
331
|
+
'backend-only': 'backend only',
|
|
332
|
+
};
|
|
333
|
+
const LOGGING_LABEL = {
|
|
334
|
+
'firebase-functions': 'firebase-functions write()',
|
|
335
|
+
stdout: 'stdout JSON (createHttpLogHandler)',
|
|
336
|
+
none: 'not applicable — no backend given',
|
|
337
|
+
};
|
|
338
|
+
const TRACE_LABEL = {
|
|
339
|
+
trigger: 'from each Cloud Functions trigger',
|
|
340
|
+
header: 'from the x-cloud-trace-context header',
|
|
341
|
+
none: 'not applicable — no backend given',
|
|
342
|
+
};
|
|
343
|
+
const STORAGE_LABEL = {
|
|
344
|
+
'firebase-admin': 'firebase-admin, default bucket',
|
|
345
|
+
'google-cloud-storage': '@google-cloud/storage — needs a bucket named in code (not checked)',
|
|
346
|
+
none: 'not configured',
|
|
347
|
+
};
|
|
348
|
+
/** Renders the human-readable report `fsl doctor` prints without `--json`. */
|
|
349
|
+
function formatDoctorReport(report) {
|
|
350
|
+
const { setup, findings } = report;
|
|
351
|
+
const backendNoun = setup.kind === 'firebase' ? 'functions' : 'backend';
|
|
352
|
+
const location = setup.backend && setup.dist
|
|
353
|
+
? `${backendNoun} in ${setup.backend}, web build in ${setup.dist}`
|
|
354
|
+
: setup.backend
|
|
355
|
+
? `backend in ${setup.backend}`
|
|
356
|
+
: setup.dist
|
|
357
|
+
? `web build in ${setup.dist}`
|
|
358
|
+
: 'nothing to check — pass --backend and/or --dist';
|
|
359
|
+
const lines = [
|
|
360
|
+
`Setup: ${SETUP_LABEL[setup.kind]} — ${location}`,
|
|
361
|
+
'',
|
|
362
|
+
pad('Logging', LOGGING_LABEL[setup.logging]),
|
|
363
|
+
pad('Trace ids', TRACE_LABEL[setup.trace]),
|
|
364
|
+
pad('Storage', STORAGE_LABEL[setup.storage]),
|
|
365
|
+
pad('Callable', setup.callable ? 'createClientLogFunction available' : 'not available'),
|
|
366
|
+
];
|
|
367
|
+
if (findings.length > 0) {
|
|
368
|
+
lines.push('');
|
|
369
|
+
for (const finding of findings) {
|
|
370
|
+
const icon = finding.level === 'error' ? '✗' : '⚠';
|
|
371
|
+
const indent = ' '.repeat(4);
|
|
372
|
+
lines.push(` ${icon} ${finding.id.padEnd(20)} ${finding.message}`);
|
|
373
|
+
lines.push(`${indent}${' '.repeat(20)}Fix: ${finding.fix}`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return lines.join('\n');
|
|
377
|
+
}
|
|
378
|
+
function pad(label, value) {
|
|
379
|
+
return ` ${label.padEnd(15)}${value}`;
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/tools/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -38,6 +38,8 @@ const fs = __importStar(require("fs"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const uploadSourceMaps_1 = require("./uploadSourceMaps");
|
|
40
40
|
const installSkills_1 = require("./installSkills");
|
|
41
|
+
const doctor_1 = require("./doctor");
|
|
42
|
+
const deprecate_1 = require("../shared/deprecate");
|
|
41
43
|
const [, , command, ...rawArgs] = process.argv;
|
|
42
44
|
function parseArgs(args) {
|
|
43
45
|
const result = {};
|
|
@@ -80,10 +82,14 @@ async function main() {
|
|
|
80
82
|
case 'upload-sourcemaps': {
|
|
81
83
|
const bucket = args.bucket ?? process.env.VITE_FIREBASE_STORAGE_BUCKET ?? process.env.FIREBASE_STORAGE_BUCKET;
|
|
82
84
|
const embed = args['embed-sourcemaps'] === 'true';
|
|
85
|
+
if (args.functions !== undefined) {
|
|
86
|
+
(0, deprecate_1.warnDeprecated)('--functions', '--backend');
|
|
87
|
+
}
|
|
88
|
+
const backend = args.backend ?? args.functions;
|
|
83
89
|
// A bucket is only required when something is going to be uploaded.
|
|
84
90
|
// Embed-only is the whole flow for a backend that has no bucket — see #34.
|
|
85
91
|
if (!bucket && !embed) {
|
|
86
|
-
console.error('Usage: fsl upload-sourcemaps [--bucket=<name>] [--
|
|
92
|
+
console.error('Usage: fsl upload-sourcemaps [--bucket=<name>] [--backend=<path>] [--embed-sourcemaps] [--release=<id>] [--dist=<path>] [--prefix=<path>]');
|
|
87
93
|
console.error('Bucket can also be set via VITE_FIREBASE_STORAGE_BUCKET or FIREBASE_STORAGE_BUCKET env var (loaded from .env.local automatically).');
|
|
88
94
|
console.error('Omit the bucket only with --embed-sourcemaps, to embed the current release without uploading.');
|
|
89
95
|
process.exit(1);
|
|
@@ -92,7 +98,7 @@ async function main() {
|
|
|
92
98
|
bucket,
|
|
93
99
|
release: args.release,
|
|
94
100
|
distDir: args.dist,
|
|
95
|
-
functionsDir:
|
|
101
|
+
functionsDir: backend,
|
|
96
102
|
embedSourcemaps: embed,
|
|
97
103
|
prefix: args.prefix,
|
|
98
104
|
});
|
|
@@ -106,16 +112,31 @@ async function main() {
|
|
|
106
112
|
await (0, installSkills_1.installSkills)({ global: args.global === 'true', force: args.force === 'true' });
|
|
107
113
|
break;
|
|
108
114
|
}
|
|
115
|
+
case 'doctor': {
|
|
116
|
+
const report = (0, doctor_1.runDoctor)({
|
|
117
|
+
projectRoot: process.cwd(),
|
|
118
|
+
backend: args.backend,
|
|
119
|
+
dist: args.dist,
|
|
120
|
+
});
|
|
121
|
+
if (args.json === 'true') {
|
|
122
|
+
console.log(JSON.stringify({ ...report, exitCode: (0, doctor_1.exitCodeFor)(report, args.strict === 'true') }));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log((0, doctor_1.formatDoctorReport)(report));
|
|
126
|
+
}
|
|
127
|
+
process.exit((0, doctor_1.exitCodeFor)(report, args.strict === 'true'));
|
|
128
|
+
}
|
|
109
129
|
default: {
|
|
110
130
|
console.log(`
|
|
111
131
|
firebase-structured-logger (fsl)
|
|
112
132
|
|
|
113
133
|
Commands:
|
|
114
|
-
fsl upload-sourcemaps [--bucket=<name>] [--
|
|
134
|
+
fsl upload-sourcemaps [--bucket=<name>] [--backend=<path>] [--embed-sourcemaps] [--release=<id>] [--dist=<path>] [--prefix=<path>]
|
|
115
135
|
Upload .map files from dist/ to Cloud Storage and delete them locally.
|
|
116
136
|
--bucket defaults to VITE_FIREBASE_STORAGE_BUCKET or FIREBASE_STORAGE_BUCKET (loaded from .env.local automatically).
|
|
117
|
-
--
|
|
118
|
-
|
|
137
|
+
--backend path to the backend directory (e.g. ./functions or ./backend). --functions is
|
|
138
|
+
a deprecated alias, kept for existing scripts.
|
|
139
|
+
--embed-sourcemaps copies maps to {backend}/sourcemaps/current/ for fast lookup of current release.
|
|
119
140
|
Given without --bucket, embeds only and uploads nothing — for a backend with no
|
|
120
141
|
bucket. Only the deployed release can then be symbolicated.
|
|
121
142
|
--prefix Cloud Storage prefix to upload under (default sourcemaps/). Must match
|
|
@@ -123,6 +144,14 @@ Commands:
|
|
|
123
144
|
Authenticates via FIREBASE_SERVICE_ACCOUNT_PATH if set, otherwise uses ADC.
|
|
124
145
|
Release ID defaults to git rev-parse --short HEAD.
|
|
125
146
|
|
|
147
|
+
fsl doctor [--backend=<path>] [--dist=<path>] [--strict] [--json]
|
|
148
|
+
Check the project's setup from disk: how logging, trace ids, Storage and the
|
|
149
|
+
callable will behave, and any findings. Reads firebase.json when present;
|
|
150
|
+
otherwise --backend and --dist say where things are.
|
|
151
|
+
--strict also fail (exit 1) on warnings, not just errors.
|
|
152
|
+
--json print the same result as JSON instead of the human-readable report.
|
|
153
|
+
Exit code: 0 with no errors, 1 with an error (or a warning under --strict).
|
|
154
|
+
|
|
126
155
|
fsl install-skills [--global] [--force]
|
|
127
156
|
Copy skills/ to .claude/skills/ (project) or ~/.claude/skills/ (--global).
|
|
128
157
|
Prompts before overwriting existing skills. Use --force to skip prompts.
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAwB;AACxB,2CAA4B;AAC5B,yDAAsF;AACtF,mDAA+C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,13 @@ export interface UploadOptions {
|
|
|
30
30
|
bucket?: string;
|
|
31
31
|
release?: string;
|
|
32
32
|
distDir?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Path to the backend directory (e.g. './functions' or './backend').
|
|
35
|
+
*
|
|
36
|
+
* Named `functionsDir` internally; the CLI flag is `--backend` (`--functions` is
|
|
37
|
+
* kept as a deprecated alias) — this option also serves a Cloud Run backend that
|
|
38
|
+
* is not a Cloud Functions directory at all.
|
|
39
|
+
*/
|
|
33
40
|
functionsDir?: string;
|
|
34
41
|
embedSourcemaps?: boolean;
|
|
35
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadSourceMaps.d.ts","sourceRoot":"","sources":["../../src/tools/uploadSourceMaps.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAA;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,aAAiB,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CASpF;AA8BD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAkH7F"}
|
|
1
|
+
{"version":3,"file":"uploadSourceMaps.d.ts","sourceRoot":"","sources":["../../src/tools/uploadSourceMaps.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAA;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,aAAiB,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CASpF;AA8BD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAkH7F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadSourceMaps.js","sourceRoot":"","sources":["../../src/tools/uploadSourceMaps.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"uploadSourceMaps.js","sourceRoot":"","sources":["../../src/tools/uploadSourceMaps.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dasasian/firebase-structured-logger",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Structured logging for Firebase and Google Cloud web apps — browser, backend, and tools",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Dasasian",
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
"types": "./dist/client/index.d.ts",
|
|
35
35
|
"default": "./dist/client/index.js"
|
|
36
36
|
},
|
|
37
|
+
"./client/navigation": {
|
|
38
|
+
"types": "./dist/client/navigation.d.ts",
|
|
39
|
+
"default": "./dist/client/navigation.js"
|
|
40
|
+
},
|
|
37
41
|
"./functions": {
|
|
38
42
|
"types": "./dist/functions/index.d.ts",
|
|
39
43
|
"default": "./dist/functions/index.js"
|
|
@@ -48,6 +52,9 @@
|
|
|
48
52
|
"client": [
|
|
49
53
|
"dist/client/index.d.ts"
|
|
50
54
|
],
|
|
55
|
+
"client/navigation": [
|
|
56
|
+
"dist/client/navigation.d.ts"
|
|
57
|
+
],
|
|
51
58
|
"functions": [
|
|
52
59
|
"dist/functions/index.d.ts"
|
|
53
60
|
],
|
|
@@ -68,7 +75,7 @@
|
|
|
68
75
|
"build:watch": "tsc --watch",
|
|
69
76
|
"clean": "rm -rf dist",
|
|
70
77
|
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.check.json",
|
|
71
|
-
"test": "tsx tests/logger.ts && tsx tests/browserBundle.ts && tsx tests/breadcrumbs.ts && tsx tests/rateLimiter.ts && tsx tests/errorHandler.ts && tsx tests/attachments.ts && tsx tests/feedback.ts && tsx tests/paths.ts && tsx tests/loadsWithoutOptionalPeers.ts && tsx tests/sourceMapStripping.ts && FUNCTIONS_EMULATOR=true tsx tests/errorPayload.ts && FUNCTIONS_EMULATOR=true tsx tests/requestLogger.ts && FUNCTIONS_EMULATOR=true tsx tests/handler.ts && FUNCTIONS_EMULATOR=true tsx tests/httpHandler.ts && FUNCTIONS_EMULATOR=true tsx tests/symbolication.ts && FUNCTIONS_EMULATOR=true tsx tests/publicApi.ts && FUNCTIONS_EMULATOR=true tsx tests/configureTwice.ts && tsx tests/productionOutput.ts && tsx tests/storageChain.ts && tsx tests/entrySize.ts && tsx tests/handlerSymbolication.ts && tsx tests/releaseResolution.ts && tsx tests/sourceMapCacheBounds.ts",
|
|
78
|
+
"test": "tsx tests/logger.ts && tsx tests/browserBundle.ts && tsx tests/breadcrumbs.ts && tsx tests/navigation.ts && tsx tests/rateLimiter.ts && tsx tests/errorHandler.ts && tsx tests/attachments.ts && tsx tests/feedback.ts && tsx tests/paths.ts && tsx tests/loadsWithoutOptionalPeers.ts && tsx tests/sourceMapStripping.ts && FUNCTIONS_EMULATOR=true tsx tests/errorPayload.ts && FUNCTIONS_EMULATOR=true tsx tests/requestLogger.ts && FUNCTIONS_EMULATOR=true tsx tests/handler.ts && FUNCTIONS_EMULATOR=true tsx tests/httpHandler.ts && FUNCTIONS_EMULATOR=true tsx tests/symbolication.ts && FUNCTIONS_EMULATOR=true tsx tests/publicApi.ts && FUNCTIONS_EMULATOR=true tsx tests/configureTwice.ts && FUNCTIONS_EMULATOR=true tsx tests/deprecatedNames.ts && tsx tests/productionOutput.ts && tsx tests/storageChain.ts && tsx tests/entrySize.ts && tsx tests/handlerSymbolication.ts && tsx tests/releaseResolution.ts && tsx tests/sourceMapCacheBounds.ts && tsx tests/doctor.ts && tsx tests/doctorProcess.ts && tsx tests/uploadSourcemapsBackend.ts",
|
|
72
79
|
"prepublishOnly": "npm run clean && npm run build",
|
|
73
80
|
"smoke:deploy": "cd smoke/functions && npm install && npm run build && cd .. && firebase deploy --only functions --project $(grep '^FSL_SMOKE_PROJECT=' .env.local | cut -d= -f2)",
|
|
74
81
|
"smoke:deploy:run": "bash smoke/cloudrun/deploy.sh",
|
|
@@ -76,7 +83,7 @@
|
|
|
76
83
|
"smoke:install": "tsx smoke/install.ts"
|
|
77
84
|
},
|
|
78
85
|
"dependencies": {
|
|
79
|
-
"@google-cloud/storage": "^7.0.0",
|
|
86
|
+
"@google-cloud/storage": "^7.19.0 || ^8.1.0",
|
|
80
87
|
"@jridgewell/trace-mapping": "^0.3.31",
|
|
81
88
|
"ulid": "^3.0.2"
|
|
82
89
|
},
|
|
@@ -97,16 +104,16 @@
|
|
|
97
104
|
}
|
|
98
105
|
},
|
|
99
106
|
"devDependencies": {
|
|
100
|
-
"@google-cloud/logging": "^
|
|
107
|
+
"@google-cloud/logging": "^12.1.0",
|
|
101
108
|
"@types/jsdom": "^30.0.0",
|
|
102
|
-
"@types/node": "^26.2
|
|
109
|
+
"@types/node": "^26.6.2",
|
|
103
110
|
"esbuild": "^0.28.2",
|
|
104
|
-
"firebase": "^12.
|
|
105
|
-
"firebase-admin": "^14.
|
|
106
|
-
"firebase-functions": "^7.
|
|
107
|
-
"jsdom": "^
|
|
108
|
-
"tsx": "^4.
|
|
109
|
-
"typescript": "~
|
|
111
|
+
"firebase": "^12.19.0",
|
|
112
|
+
"firebase-admin": "^14.5.0",
|
|
113
|
+
"firebase-functions": "^7.4.0",
|
|
114
|
+
"jsdom": "^30.1.1",
|
|
115
|
+
"tsx": "^4.23.15",
|
|
116
|
+
"typescript": "~6.0.3"
|
|
110
117
|
},
|
|
111
118
|
"engines": {
|
|
112
119
|
"node": ">=22"
|