@dasasian/firebase-structured-logger 0.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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/dist/client/breadcrumbs.d.ts +15 -0
  4. package/dist/client/breadcrumbs.d.ts.map +1 -0
  5. package/dist/client/breadcrumbs.js +52 -0
  6. package/dist/client/breadcrumbs.js.map +1 -0
  7. package/dist/client/errorHandler.d.ts +5 -0
  8. package/dist/client/errorHandler.d.ts.map +1 -0
  9. package/dist/client/errorHandler.js +19 -0
  10. package/dist/client/errorHandler.js.map +1 -0
  11. package/dist/client/index.d.ts +6 -0
  12. package/dist/client/index.d.ts.map +1 -0
  13. package/dist/client/index.js +16 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/logger.d.ts +40 -0
  16. package/dist/client/logger.d.ts.map +1 -0
  17. package/dist/client/logger.js +199 -0
  18. package/dist/client/logger.js.map +1 -0
  19. package/dist/client/rateLimiter.d.ts +12 -0
  20. package/dist/client/rateLimiter.d.ts.map +1 -0
  21. package/dist/client/rateLimiter.js +80 -0
  22. package/dist/client/rateLimiter.js.map +1 -0
  23. package/dist/functions/index.d.ts +12 -0
  24. package/dist/functions/index.d.ts.map +1 -0
  25. package/dist/functions/index.js +21 -0
  26. package/dist/functions/index.js.map +1 -0
  27. package/dist/functions/logHandler.d.ts +27 -0
  28. package/dist/functions/logHandler.d.ts.map +1 -0
  29. package/dist/functions/logHandler.js +137 -0
  30. package/dist/functions/logHandler.js.map +1 -0
  31. package/dist/functions/logger.d.ts +32 -0
  32. package/dist/functions/logger.d.ts.map +1 -0
  33. package/dist/functions/logger.js +253 -0
  34. package/dist/functions/logger.js.map +1 -0
  35. package/dist/functions/requestLogger.d.ts +30 -0
  36. package/dist/functions/requestLogger.d.ts.map +1 -0
  37. package/dist/functions/requestLogger.js +45 -0
  38. package/dist/functions/requestLogger.js.map +1 -0
  39. package/dist/functions/sourceMapCache.d.ts +9 -0
  40. package/dist/functions/sourceMapCache.d.ts.map +1 -0
  41. package/dist/functions/sourceMapCache.js +107 -0
  42. package/dist/functions/sourceMapCache.js.map +1 -0
  43. package/dist/functions/symbolicate.d.ts +31 -0
  44. package/dist/functions/symbolicate.d.ts.map +1 -0
  45. package/dist/functions/symbolicate.js +112 -0
  46. package/dist/functions/symbolicate.js.map +1 -0
  47. package/dist/shared/types.d.ts +36 -0
  48. package/dist/shared/types.d.ts.map +1 -0
  49. package/dist/shared/types.js +3 -0
  50. package/dist/shared/types.js.map +1 -0
  51. package/dist/tools/index.d.ts +3 -0
  52. package/dist/tools/index.d.ts.map +1 -0
  53. package/dist/tools/index.js +152 -0
  54. package/dist/tools/index.js.map +1 -0
  55. package/dist/tools/installSkills.d.ts +6 -0
  56. package/dist/tools/installSkills.d.ts.map +1 -0
  57. package/dist/tools/installSkills.js +89 -0
  58. package/dist/tools/installSkills.js.map +1 -0
  59. package/dist/tools/packDeploy.d.ts +15 -0
  60. package/dist/tools/packDeploy.d.ts.map +1 -0
  61. package/dist/tools/packDeploy.js +148 -0
  62. package/dist/tools/packDeploy.js.map +1 -0
  63. package/dist/tools/uploadSourceMaps.d.ts +9 -0
  64. package/dist/tools/uploadSourceMaps.d.ts.map +1 -0
  65. package/dist/tools/uploadSourceMaps.js +120 -0
  66. package/dist/tools/uploadSourceMaps.js.map +1 -0
  67. package/package.json +103 -0
  68. package/skills/logs/SKILL.md +185 -0
  69. package/skills/query-logs/SKILL.md +93 -0
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.installSkills = installSkills;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const readline = __importStar(require("readline"));
41
+ function prompt(question) {
42
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
43
+ return new Promise(resolve => {
44
+ rl.question(question, answer => {
45
+ rl.close();
46
+ resolve(answer.trim().toLowerCase());
47
+ });
48
+ });
49
+ }
50
+ async function installSkills(options = {}) {
51
+ const { force = false } = options;
52
+ // Skills directory in this package
53
+ const packageSkillsDir = path.join(__dirname, '..', '..', 'skills');
54
+ if (!fs.existsSync(packageSkillsDir)) {
55
+ console.error('[fsl] Skills directory not found:', packageSkillsDir);
56
+ process.exit(1);
57
+ }
58
+ // Target: project-level by default, global with --global flag
59
+ const targetDir = options.global
60
+ ? path.join(os.homedir(), '.claude', 'skills')
61
+ : path.join(process.cwd(), '.claude', 'skills');
62
+ const targetLabel = options.global ? '~/.claude/skills' : '.claude/skills';
63
+ fs.mkdirSync(targetDir, { recursive: true });
64
+ let count = 0;
65
+ for (const entry of fs.readdirSync(packageSkillsDir, { withFileTypes: true })) {
66
+ if (!entry.isDirectory())
67
+ continue;
68
+ const skillName = entry.name;
69
+ const srcDir = path.join(packageSkillsDir, skillName);
70
+ const destDir = path.join(targetDir, skillName);
71
+ for (const file of fs.readdirSync(srcDir)) {
72
+ const src = path.join(srcDir, file);
73
+ const dest = path.join(destDir, file);
74
+ if (fs.existsSync(dest) && !force) {
75
+ const answer = await prompt(` Skill already exists: ${targetLabel}/${skillName}/${file}\n Overwrite? [y/N] `);
76
+ if (answer !== 'y' && answer !== 'yes') {
77
+ console.log(` - skipped ${skillName}/${file}`);
78
+ continue;
79
+ }
80
+ }
81
+ fs.mkdirSync(destDir, { recursive: true });
82
+ fs.copyFileSync(src, dest);
83
+ console.log(` ✓ ${targetLabel}/${skillName}/${file}`);
84
+ count++;
85
+ }
86
+ }
87
+ console.log(`[fsl] Installed ${count} skill file(s) to ${targetLabel}/`);
88
+ }
89
+ //# sourceMappingURL=installSkills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installSkills.js","sourceRoot":"","sources":["../../src/tools/installSkills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ interface PackOptions {
2
+ functionsDir: string;
3
+ }
4
+ /**
5
+ * Build + pack firebase-structured-logger, copy tgz to functions/vendor/,
6
+ * and patch functions/package.json to reference it. Call before firebase deploy.
7
+ */
8
+ export declare function pack(options: PackOptions): Promise<void>;
9
+ /**
10
+ * Restore functions/package.json to its original file: reference.
11
+ * Call after firebase deploy (e.g. in postdeploy script).
12
+ */
13
+ export declare function packRestore(options: PackOptions): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=packDeploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packDeploy.d.ts","sourceRoot":"","sources":["../../src/tools/packDeploy.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAyBD;;;GAGG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD9D;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCrE"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.pack = pack;
37
+ exports.packRestore = packRestore;
38
+ const crypto_1 = require("crypto");
39
+ const child_process_1 = require("child_process");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ // __dirname resolves symlinks, so when consumed via file: reference this points
43
+ // to the real firebase-structured-logger directory, not node_modules.
44
+ const packageRoot = path.join(__dirname, '..', '..');
45
+ function readPackageJson(dir) {
46
+ return JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
47
+ }
48
+ function writePackageJson(dir, pkg) {
49
+ fs.writeFileSync(path.join(dir, 'package.json'), JSON.stringify(pkg, null, 2) + '\n');
50
+ }
51
+ function findFslDep(pkg) {
52
+ for (const field of ['dependencies', 'devDependencies']) {
53
+ const deps = pkg[field];
54
+ if (deps?.['firebase-structured-logger']) {
55
+ return { field, ref: deps['firebase-structured-logger'] };
56
+ }
57
+ }
58
+ return null;
59
+ }
60
+ /**
61
+ * Build + pack firebase-structured-logger, copy tgz to functions/vendor/,
62
+ * and patch functions/package.json to reference it. Call before firebase deploy.
63
+ */
64
+ async function pack(options) {
65
+ const functionsDir = path.resolve(process.cwd(), options.functionsDir);
66
+ const vendorDir = path.join(functionsDir, 'vendor');
67
+ const manifestPath = path.join(vendorDir, '.fsl-restore.json');
68
+ // 1. Build
69
+ console.log('[fsl] Building firebase-structured-logger...');
70
+ (0, child_process_1.execSync)('npm run build', { cwd: packageRoot, stdio: 'inherit' });
71
+ // 2. Pack — use --json for reliable filename parsing
72
+ console.log('[fsl] Packing...');
73
+ const packOutput = (0, child_process_1.execSync)('npm pack --json', { cwd: packageRoot, encoding: 'utf-8' });
74
+ const [{ filename: baseTgzFileName }] = JSON.parse(packOutput);
75
+ const tgzSource = path.join(packageRoot, baseTgzFileName);
76
+ // Use a content hash so the filename is stable for identical builds and
77
+ // changes only when FSL itself changes — no calling-project release ID needed.
78
+ const contentHash = (0, crypto_1.createHash)('sha256').update(fs.readFileSync(tgzSource)).digest('hex').slice(0, 8);
79
+ const tgzFileName = baseTgzFileName.replace(/\.tgz$/, `-${contentHash}.tgz`);
80
+ // 3. Copy to functions/vendor/ (remove any previous fsl tarballs first)
81
+ fs.mkdirSync(vendorDir, { recursive: true });
82
+ for (const f of fs.readdirSync(vendorDir)) {
83
+ if (f.startsWith('firebase-structured-logger-') && f.endsWith('.tgz')) {
84
+ fs.unlinkSync(path.join(vendorDir, f));
85
+ }
86
+ }
87
+ const tgzDest = path.join(vendorDir, tgzFileName);
88
+ fs.copyFileSync(tgzSource, tgzDest);
89
+ fs.unlinkSync(tgzSource);
90
+ console.log(`[fsl] Copied ${tgzFileName} → functions/vendor/`);
91
+ // 4. Patch functions/package.json
92
+ const pkg = readPackageJson(functionsDir);
93
+ const existing = findFslDep(pkg);
94
+ if (!existing) {
95
+ console.error('[fsl] firebase-structured-logger not found in functions/package.json');
96
+ process.exit(1);
97
+ }
98
+ const manifest = { originalRef: existing.ref, tgzFileName };
99
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
100
+ pkg[existing.field]['firebase-structured-logger'] =
101
+ `file:./vendor/${tgzFileName}`;
102
+ writePackageJson(functionsDir, pkg);
103
+ // 5. npm install to lock in the tgz
104
+ console.log('[fsl] Installing...');
105
+ (0, child_process_1.execSync)('npm install', { cwd: functionsDir, stdio: 'inherit' });
106
+ console.log('[fsl] Pack complete — ready to deploy.');
107
+ }
108
+ /**
109
+ * Restore functions/package.json to its original file: reference.
110
+ * Call after firebase deploy (e.g. in postdeploy script).
111
+ */
112
+ async function packRestore(options) {
113
+ const functionsDir = path.resolve(process.cwd(), options.functionsDir);
114
+ const vendorDir = path.join(functionsDir, 'vendor');
115
+ const manifestPath = path.join(vendorDir, '.fsl-restore.json');
116
+ if (!fs.existsSync(manifestPath)) {
117
+ console.log('[fsl] No restore manifest found — nothing to restore.');
118
+ return;
119
+ }
120
+ const { originalRef, tgzFileName } = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
121
+ // 1. Restore package.json — skip if originalRef is a file: path that no longer exists
122
+ // (e.g. a previous vendor tarball that was cleaned up during pack).
123
+ const pkg = readPackageJson(functionsDir);
124
+ const existing = findFslDep(pkg);
125
+ const refMatch = originalRef.match(/^file:(.+)$/);
126
+ const refFilePath = refMatch ? path.resolve(functionsDir, refMatch[1]) : null;
127
+ const refFileExists = refFilePath ? fs.existsSync(refFilePath) : true;
128
+ if (existing) {
129
+ if (refFileExists) {
130
+ ;
131
+ pkg[existing.field]['firebase-structured-logger'] = originalRef;
132
+ writePackageJson(functionsDir, pkg);
133
+ }
134
+ else {
135
+ console.log(`[fsl] Original ref (${originalRef}) no longer exists — keeping vendor tgz reference.`);
136
+ }
137
+ }
138
+ // 2. Remove tgz + manifest — only remove tgz if we restored to a different ref
139
+ const tgzPath = path.join(vendorDir, tgzFileName);
140
+ if (refFileExists && fs.existsSync(tgzPath))
141
+ fs.unlinkSync(tgzPath);
142
+ fs.unlinkSync(manifestPath);
143
+ // 3. npm install to restore
144
+ console.log('[fsl] Restoring...');
145
+ (0, child_process_1.execSync)('npm install', { cwd: functionsDir, stdio: 'inherit' });
146
+ console.log('[fsl] Restore complete.');
147
+ }
148
+ //# sourceMappingURL=packDeploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packDeploy.js","sourceRoot":"","sources":["../../src/tools/packDeploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface UploadOptions {
2
+ bucket: string;
3
+ release?: string;
4
+ distDir?: string;
5
+ functionsDir?: string;
6
+ embedSourcemaps?: boolean;
7
+ }
8
+ export declare function uploadSourceMaps(options: UploadOptions): Promise<void>;
9
+ //# sourceMappingURL=uploadSourceMaps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadSourceMaps.d.ts","sourceRoot":"","sources":["../../src/tools/uploadSourceMaps.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAsBD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE5E"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.uploadSourceMaps = uploadSourceMaps;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const storage_1 = require("@google-cloud/storage");
40
+ function findMapFiles(dir) {
41
+ const results = [];
42
+ if (!fs.existsSync(dir))
43
+ return results;
44
+ function walk(current) {
45
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
46
+ const full = path.join(current, entry.name);
47
+ if (entry.isDirectory()) {
48
+ walk(full);
49
+ }
50
+ else if (entry.isFile() && entry.name.endsWith('.map')) {
51
+ results.push(full);
52
+ }
53
+ }
54
+ }
55
+ walk(dir);
56
+ return results;
57
+ }
58
+ async function uploadSourceMaps(options) {
59
+ const releaseId = options.release ?? process.env.VITE_RELEASE_ID ?? process.env.RELEASE_ID;
60
+ if (!releaseId) {
61
+ console.error('[fsl] Release ID required. Set RELEASE_ID (or VITE_RELEASE_ID) in .env.local or pass --release=<id>.');
62
+ process.exit(1);
63
+ }
64
+ const distDir = options.distDir ?? path.join(process.cwd(), 'dist');
65
+ const mapFiles = findMapFiles(distDir);
66
+ if (mapFiles.length === 0) {
67
+ console.log('[fsl] No .map files found in', distDir);
68
+ return;
69
+ }
70
+ console.log(`[fsl] Uploading ${mapFiles.length} source map(s) for release ${releaseId}...`);
71
+ // Embed maps into functions directory before uploading (for fast lookup of current release)
72
+ if (options.embedSourcemaps && options.functionsDir) {
73
+ const embedDir = path.join(process.cwd(), options.functionsDir, 'sourcemaps', 'current');
74
+ fs.mkdirSync(embedDir, { recursive: true });
75
+ for (const f of fs.readdirSync(embedDir)) {
76
+ fs.unlinkSync(path.join(embedDir, f));
77
+ }
78
+ for (const localPath of mapFiles) {
79
+ const dest = path.join(embedDir, path.basename(localPath));
80
+ fs.copyFileSync(localPath, dest);
81
+ console.log(` ✓ embedded ${path.basename(localPath)} → ${options.functionsDir}/sourcemaps/current/`);
82
+ }
83
+ }
84
+ // Authenticate via service account key if available, otherwise fall back to ADC
85
+ const serviceAccountPath = process.env.FIREBASE_SERVICE_ACCOUNT_PATH;
86
+ const storageOptions = serviceAccountPath && fs.existsSync(serviceAccountPath)
87
+ ? { keyFilename: serviceAccountPath }
88
+ : {};
89
+ const storage = new storage_1.Storage(storageOptions);
90
+ const bucket = storage.bucket(options.bucket);
91
+ try {
92
+ for (const localPath of mapFiles) {
93
+ const fileName = path.basename(localPath);
94
+ const destination = `sourcemaps/${releaseId}/${fileName}`;
95
+ await bucket.upload(localPath, { destination });
96
+ console.log(` ✓ ${fileName} → gs://${options.bucket}/${destination}`);
97
+ // Delete local .map file after upload
98
+ fs.unlinkSync(localPath);
99
+ console.log(` ✗ deleted ${path.relative(process.cwd(), localPath)}`);
100
+ }
101
+ console.log('[fsl] Source map upload complete.');
102
+ }
103
+ catch (err) {
104
+ if (options.embedSourcemaps) {
105
+ console.warn('[fsl] Warning: GCS upload failed — symbolication will work for this release only (via embedded maps). Previous releases will not be symbolicated.');
106
+ console.warn('[fsl] GCS error:', err?.message ?? err);
107
+ // Delete local .map files even though GCS upload failed — they are embedded and should not be deployed to hosting
108
+ for (const localPath of mapFiles) {
109
+ if (fs.existsSync(localPath)) {
110
+ fs.unlinkSync(localPath);
111
+ console.log(` ✗ deleted ${path.relative(process.cwd(), localPath)}`);
112
+ }
113
+ }
114
+ }
115
+ else {
116
+ throw err;
117
+ }
118
+ }
119
+ }
120
+ //# sourceMappingURL=uploadSourceMaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadSourceMaps.js","sourceRoot":"","sources":["../../src/tools/uploadSourceMaps.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@dasasian/firebase-structured-logger",
3
+ "version": "0.1.0",
4
+ "description": "Structured logging for Firebase apps — client, functions, and tools",
5
+ "license": "MIT",
6
+ "author": "Dasasian",
7
+ "keywords": [
8
+ "firebase",
9
+ "logging",
10
+ "structured-logging",
11
+ "cloud-logging",
12
+ "firebase-functions",
13
+ "source-maps",
14
+ "symbolication",
15
+ "observability",
16
+ "typescript"
17
+ ],
18
+ "homepage": "https://github.com/dasasian/firebase-structured-logger#readme",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/dasasian/firebase-structured-logger.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/dasasian/firebase-structured-logger/issues"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "exports": {
30
+ "./client": {
31
+ "types": "./dist/client/index.d.ts",
32
+ "default": "./dist/client/index.js"
33
+ },
34
+ "./functions": {
35
+ "types": "./dist/functions/index.d.ts",
36
+ "default": "./dist/functions/index.js"
37
+ },
38
+ "./tools": {
39
+ "types": "./dist/tools/index.d.ts",
40
+ "default": "./dist/tools/index.js"
41
+ }
42
+ },
43
+ "typesVersions": {
44
+ "*": {
45
+ "client": [
46
+ "dist/client/index.d.ts"
47
+ ],
48
+ "functions": [
49
+ "dist/functions/index.d.ts"
50
+ ],
51
+ "tools": [
52
+ "dist/tools/index.d.ts"
53
+ ]
54
+ }
55
+ },
56
+ "bin": {
57
+ "fsl": "./dist/tools/index.js"
58
+ },
59
+ "files": [
60
+ "dist",
61
+ "skills"
62
+ ],
63
+ "scripts": {
64
+ "build": "tsc",
65
+ "build:watch": "tsc --watch",
66
+ "clean": "rm -rf dist",
67
+ "typecheck": "tsc --noEmit",
68
+ "test": "tsx tests/logger.ts && FUNCTIONS_EMULATOR=true tsx tests/handler.ts && FUNCTIONS_EMULATOR=true tsx tests/symbolication.ts",
69
+ "prepublishOnly": "npm run build"
70
+ },
71
+ "dependencies": {
72
+ "@google-cloud/storage": "^7.0.0",
73
+ "@jridgewell/trace-mapping": "^0.3.31",
74
+ "ulid": "^2.3.0"
75
+ },
76
+ "peerDependencies": {
77
+ "firebase": ">=10.0.0",
78
+ "firebase-admin": ">=12.0.0",
79
+ "firebase-functions": ">=6.0.0"
80
+ },
81
+ "peerDependenciesMeta": {
82
+ "firebase": {
83
+ "optional": true
84
+ },
85
+ "firebase-admin": {
86
+ "optional": true
87
+ },
88
+ "firebase-functions": {
89
+ "optional": true
90
+ }
91
+ },
92
+ "devDependencies": {
93
+ "@types/node": "^22.0.0",
94
+ "firebase": "^12.0.0",
95
+ "firebase-admin": "^13.0.0",
96
+ "firebase-functions": "^7.0.0",
97
+ "tsx": "^4.19.0",
98
+ "typescript": "~5.9.3"
99
+ },
100
+ "engines": {
101
+ "node": ">=18"
102
+ }
103
+ }