Skip to content

Commit d384aaf

Browse files
committed
refactor: use XML-style tags for stdio discovery output
- Replace magic string prefixes with self-documenting XML tags - Add explicit start/end markers to handle OS buffering edge cases - Make regex parsing more robust and less greedy - Addresses review comment about regex being too greedy
1 parent 088534a commit d384aaf

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

scripts/bin-test/test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ async function runStdioDiscovery(modulePath: string): Promise<DiscoveryResult> {
210210

211211
proc.on("close", () => {
212212
clearTimeout(timeoutId);
213-
const manifestMatch = stderr.match(/__FIREBASE_FUNCTIONS_MANIFEST__:([\s\S]+)/);
213+
const manifestMatch = stderr.match(/<FIREBASE_FUNCTIONS_MANIFEST>\n([\s\S]+?)\n<\/FIREBASE_FUNCTIONS_MANIFEST>/);
214214
if (manifestMatch) {
215215
const base64 = manifestMatch[1];
216216
const manifestJson = Buffer.from(base64, "base64").toString("utf8");
@@ -219,7 +219,7 @@ async function runStdioDiscovery(modulePath: string): Promise<DiscoveryResult> {
219219
return;
220220
}
221221

222-
const errorMatch = stderr.match(/__FIREBASE_FUNCTIONS_MANIFEST_ERROR__:([\s\S]+)/);
222+
const errorMatch = stderr.match(/<FIREBASE_FUNCTIONS_MANIFEST_ERROR>\n([\s\S]+?)\n<\/FIREBASE_FUNCTIONS_MANIFEST_ERROR>/);
223223
if (errorMatch) {
224224
resolve({ success: false, error: errorMatch[1] });
225225
return;

src/bin/firebase-functions.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,23 @@ if (args.length > 1) {
4949
functionsDir = args[0];
5050
}
5151

52-
const MANIFEST_PREFIX = "__FIREBASE_FUNCTIONS_MANIFEST__:";
53-
const MANIFEST_ERROR_PREFIX = "__FIREBASE_FUNCTIONS_MANIFEST_ERROR__:";
52+
const MANIFEST_START_TAG = "<FIREBASE_FUNCTIONS_MANIFEST>";
53+
const MANIFEST_END_TAG = "</FIREBASE_FUNCTIONS_MANIFEST>";
54+
const MANIFEST_ERROR_START_TAG = "<FIREBASE_FUNCTIONS_MANIFEST_ERROR>";
55+
const MANIFEST_ERROR_END_TAG = "</FIREBASE_FUNCTIONS_MANIFEST_ERROR>";
5456

5557
async function runStdioDiscovery() {
5658
try {
5759
const stack = await loadStack(functionsDir);
5860
const wireFormat = stackToWire(stack);
5961
const manifestJson = JSON.stringify(wireFormat);
6062
const base64 = Buffer.from(manifestJson).toString("base64");
61-
process.stderr.write(`${MANIFEST_PREFIX}${base64}\n`);
63+
process.stderr.write(`${MANIFEST_START_TAG}\n${base64}\n${MANIFEST_END_TAG}\n`);
6264
process.exitCode = 0;
6365
} catch (e) {
6466
console.error("Failed to generate manifest from function source:", e);
6567
const message = e instanceof Error ? e.message : String(e);
66-
process.stderr.write(`${MANIFEST_ERROR_PREFIX}${message}\n`);
68+
process.stderr.write(`${MANIFEST_ERROR_START_TAG}\n${message}\n${MANIFEST_ERROR_END_TAG}\n`);
6769
process.exitCode = 1;
6870
}
6971
}

0 commit comments

Comments
 (0)