Skip to content

Commit 6470299

Browse files
committed
First.
1 parent 15c36cc commit 6470299

File tree

6 files changed

+66
-2
lines changed

6 files changed

+66
-2
lines changed

packages/util/defaults.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { FirebaseOptions } from "@firebase/app-types";
2+
3+
declare const FirebaseDefaults: {
4+
config?: FirebaseOptions;
5+
emulatorHosts?: Record<string, string|undefined>;
6+
} | undefined;
7+
8+
export default FirebaseDefaults;

packages/util/defaults.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = undefined

packages/util/defaults.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default undefined

packages/util/package.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,19 @@
2121
},
2222
"default": "./dist/index.esm2017.js"
2323
},
24+
"./postinstall": {
25+
"types": "./defaults.d.ts",
26+
"require": "./defaults.js",
27+
"import": "./defaults.mjs",
28+
"default": "./defaults.mjs"
29+
},
2430
"./package.json": "./package.json"
2531
},
2632
"files": [
27-
"dist"
33+
"dist",
34+
"defaults.*js",
35+
"defaults.d.ts",
36+
"postinstall.mjs"
2837
],
2938
"scripts": {
3039
"lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'",
@@ -40,7 +49,8 @@
4049
"test:node": "TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha test/**/*.test.* --config ../../config/mocharc.node.js",
4150
"trusted-type-check": "tsec -p tsconfig.json --noEmit",
4251
"api-report": "api-extractor run --local --verbose",
43-
"typings:public": "node ../../scripts/build/use_typings.js ./dist/util-public.d.ts"
52+
"typings:public": "node ../../scripts/build/use_typings.js ./dist/util-public.d.ts",
53+
"postinstall": "node ./postinstall.mjs"
4454
},
4555
"license": "Apache-2.0",
4656
"dependencies": {

packages/util/postinstall.mjs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { writeFile } from "fs/promises";
2+
3+
let firebaseConfig = {};
4+
if (process.env.FIREBASE_CONFIG?.startsWith("{")) {
5+
// TODO probably want a more robust yaml parse
6+
firebaseConfig = Object.fromEntries(process.env.FIREBASE_CONFIG.match(/[^(\:\{\},)]+\:[^(,})]+/g).map(it => {
7+
const parts = it.split(":");
8+
return [parts[0], parts.slice(1).join(":")]
9+
}));
10+
}
11+
12+
const projectId = firebaseConfig.projectId;
13+
const appId = firebaseConfig.appId;
14+
const apiKey = firebaseConfig.apiKey;
15+
16+
const config = projectId && appId && apiKey && await (await fetch(
17+
`https://firebase.googleapis.com/v1alpha/projects/${projectId}/apps/${appId}/webConfig`,
18+
{ headers: { "x-goog-api-key": apiKey } }
19+
)).json();
20+
21+
if (config) {
22+
config.apiKey = apiKey;
23+
}
24+
25+
let emulatorHosts = {
26+
firestore: process.env.FIRESTORE_EMULATOR_HOST,
27+
database: process.env.FIREBASE_DATABASE_EMULATOR_HOST,
28+
storage: process.env.FIREBASE_STORAGE_EMULATOR_HOST,
29+
auth: process.env.FIREBASE_AUTH_EMULATOR_HOST,
30+
};
31+
32+
if (!Object.values(emulatorHosts).filter(it => it).length) {
33+
emulatorHosts = undefined;
34+
}
35+
36+
const defaults = (config || emulatorHosts) && { config, emulatorHosts };
37+
38+
await Promise.all([
39+
writeFile("./defaults.js", `module.exports = ${JSON.stringify(defaults)}`),
40+
writeFile("./defaults.mjs", `export default ${JSON.stringify(defaults)}`),
41+
]);

packages/util/src/defaults.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import { base64Decode } from './crypt';
1919
import { getGlobal } from './global';
20+
// @ts-ignore
21+
import postinstallDefaults from "@firebase/util/postinstall";
2022

2123
/**
2224
* Keys for experimental properties on the `FirebaseDefaults` object.
@@ -100,6 +102,7 @@ const getDefaultsFromCookie = (): FirebaseDefaults | undefined => {
100102
export const getDefaults = (): FirebaseDefaults | undefined => {
101103
try {
102104
return (
105+
postinstallDefaults ||
103106
getDefaultsFromGlobal() ||
104107
getDefaultsFromEnvVariable() ||
105108
getDefaultsFromCookie()

0 commit comments

Comments
 (0)