Skip to content

Commit 98c2523

Browse files
authored
Make @firebase/app-next have single entry point (firebase#2937)
* change to single entry point * point to the public d.ts file in release build * prefix _ for internal APIs * [AUTOMATED]: Prettier Code Styling * [AUTOMATED]: License Headers
1 parent 7396d48 commit 98c2523

14 files changed

+193
-125
lines changed

common/api-review/app-exp.api.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,30 @@
44
55
```ts
66

7-
import { FirebaseApp } from '@firebase/app-types';
8-
import { FirebaseAppConfig } from '@firebase/app-types';
9-
import { FirebaseOptions } from '@firebase/app-types';
7+
import { Component } from '@firebase/component';
8+
import { FirebaseApp } from '@firebase/app-types-exp';
9+
import { FirebaseAppConfig } from '@firebase/app-types-exp';
10+
import { FirebaseOptions } from '@firebase/app-types-exp';
1011
import { LogCallback } from '@firebase/logger';
1112
import { LogLevel } from '@firebase/logger';
1213
import { LogOptions } from '@firebase/logger';
14+
import { Name } from '@firebase/component';
15+
import { Provider } from '@firebase/component';
16+
17+
// @internal (undocumented)
18+
export function _addComponent(app: FirebaseApp, component: Component): void;
19+
20+
// @internal (undocumented)
21+
export function _addOrOverwriteComponent(app: FirebaseApp, component: Component): void;
22+
23+
// @internal (undocumented)
24+
export const _apps: Map<string, FirebaseApp>;
25+
26+
// @internal
27+
export function _clearComponents(): void;
28+
29+
// @internal
30+
export const _components: Map<string, Component<any>>;
1331

1432
// @public
1533
export function deleteApp(app: FirebaseApp): Promise<void>;
@@ -20,6 +38,9 @@ export function getApp(name?: string): FirebaseApp;
2038
// @public
2139
export function getApps(): FirebaseApp[];
2240

41+
// @internal (undocumented)
42+
export function _getProvider<T extends Name>(app: FirebaseApp, name: T): Provider<T>;
43+
2344
// @public
2445
export function initializeApp(options: FirebaseOptions, name?: string): FirebaseApp;
2546

@@ -31,6 +52,9 @@ export { LogLevel }
3152
// @public
3253
export function onLog(logCallback: LogCallback | null, options?: LogOptions): void;
3354

55+
// @internal (undocumented)
56+
export function _registerComponent(component: Component): boolean;
57+
3458
// @public
3559
export function registerVersion(libraryKeyOrName: string, version: string, variant?: string): void;
3660

config/api-extractor.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@
184184
/**
185185
* (REQUIRED) Whether to generate the .d.ts rollup file.
186186
*/
187-
"enabled": true,
187+
"enabled": false,
188188

189189
/**
190190
* Specifies the output path for a .d.ts rollup file to be generated without any trimming.
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
{
22
"extends": "../../config/api-extractor.json",
33
// Point it to your entry point d.ts file.
4-
"mainEntryPointFilePath": "<projectFolder>/dist/esm5/packages-exp/app-exp/src/index.d.ts"
4+
"mainEntryPointFilePath": "<projectFolder>/dist/packages-exp/app-exp/src/index.d.ts",
5+
"dtsRollup": {
6+
"enabled": true,
7+
"untrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>.d.ts",
8+
"publicTrimmedFilePath": "<projectFolder>/dist/<unscopedPackageName>-public.d.ts"
9+
}
510
}

packages-exp/app-exp/internal/package.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

packages-exp/app-exp/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44
"private": true,
55
"description": "FirebaseApp",
66
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
7-
"main": "dist/cjs/index.js",
8-
"browser": "dist/esm5/index.js",
9-
"module": "dist/esm5/index.js",
10-
"esm2017": "dist/esm2017/index.js",
7+
"main": "dist/index.cjs.js",
8+
"browser": "dist/index.esm5.js",
9+
"module": "dist/index.esm5.js",
10+
"esm2017": "dist/index.esm2017.js",
1111
"files": [
1212
"dist"
1313
],
1414
"scripts": {
1515
"lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'",
1616
"lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'",
17-
"build": "rollup -c",
18-
"build:release": "rollup -c rollup.config.release.js",
17+
"build": "rollup -c && yarn api-report",
18+
"build:release": "rollup -c rollup.config.release.js && yarn api-report && node ./use_public_typings.js",
1919
"build:deps": "lerna run --scope @firebase/app-exp --include-dependencies build",
2020
"dev": "rollup -c -w",
2121
"test": "yarn type-check && run-p lint test:browser test:node",
@@ -26,7 +26,7 @@
2626
"api-report": "api-extractor run --local --verbose",
2727
"predoc": "node ../../scripts/exp/remove-exp.js temp",
2828
"doc": "api-documenter markdown --input temp --output docs",
29-
"build:doc": "yarn build && yarn api-report && yarn doc"
29+
"build:doc": "yarn build && yarn doc"
3030
},
3131
"dependencies": {
3232
"@firebase/app-types-exp": "0.800.0",
@@ -51,7 +51,7 @@
5151
"bugs": {
5252
"url": "https://github.com/firebase/firebase-js-sdk/issues"
5353
},
54-
"typings": "dist/esm5/packages-exp/app-exp/src/index.d.ts",
54+
"typings": "./dist/app-exp.d.ts",
5555
"nyc": {
5656
"extension": [
5757
".ts"

packages-exp/app-exp/rollup.config.js

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,17 @@ const es5Builds = [
3939
* Browser Builds
4040
*/
4141
{
42-
input: {
43-
index: 'src/index.ts',
44-
internal: 'src/internal.ts'
45-
},
46-
output: [{ dir: 'dist/esm5', format: 'es', sourcemap: true }],
42+
input: 'src/index.ts',
43+
output: [{ file: pkg.browser, format: 'es', sourcemap: true }],
4744
plugins: es5BuildPlugins,
4845
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
4946
},
5047
/**
5148
* Node.js Build
5249
*/
5350
{
54-
input: {
55-
index: 'src/index.ts',
56-
internal: 'src/internal.ts'
57-
},
58-
output: [{ dir: 'dist/cjs', format: 'cjs', sourcemap: true }],
51+
input: 'src/index.ts',
52+
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
5953
plugins: es5BuildPlugins,
6054
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
6155
}
@@ -83,12 +77,9 @@ const es2017Builds = [
8377
* Browser Builds
8478
*/
8579
{
86-
input: {
87-
index: 'src/index.ts',
88-
internal: 'src/internal.ts'
89-
},
80+
input: 'src/index.ts',
9081
output: {
91-
dir: 'dist/esm2017',
82+
file: pkg.esm2017,
9283
format: 'es',
9384
sourcemap: true
9485
},

packages-exp/app-exp/rollup.config.release.js

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,8 @@ const es5Builds = [
4242
* Browser Builds
4343
*/
4444
{
45-
input: {
46-
index: 'src/index.ts',
47-
internal: 'src/internal.ts'
48-
},
49-
output: [{ dir: 'dist/esm5', format: 'es', sourcemap: true }],
45+
input: 'src/index.ts',
46+
output: [{ file: pkg.browser, format: 'es', sourcemap: true }],
5047
plugins: es5BuildPlugins,
5148
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
5249
treeshake: {
@@ -57,13 +54,13 @@ const es5Builds = [
5754
* Node.js Build
5855
*/
5956
{
60-
input: {
61-
index: 'src/index.ts',
62-
internal: 'src/internal.ts'
63-
},
64-
output: [{ dir: 'dist/cjs', format: 'cjs', sourcemap: true }],
57+
input: 'src/index.ts',
58+
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
6559
plugins: es5BuildPlugins,
66-
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
60+
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
61+
treeshake: {
62+
moduleSideEffects: false
63+
}
6764
}
6865
];
6966

@@ -91,17 +88,17 @@ const es2017Builds = [
9188
* Browser Builds
9289
*/
9390
{
94-
input: {
95-
index: 'src/index.ts',
96-
internal: 'src/internal.ts'
97-
},
91+
input: 'src/index.ts',
9892
output: {
99-
dir: 'dist/esm2017',
93+
file: pkg.esm2017,
10094
format: 'es',
10195
sourcemap: true
10296
},
10397
plugins: es2017BuildPlugins,
104-
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
98+
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
99+
treeshake: {
100+
moduleSideEffects: false
101+
}
105102
}
106103
];
107104

packages-exp/app-exp/src/api.test.ts

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ import {
3131
import { DEFAULT_ENTRY_NAME } from './constants';
3232
import { _FirebaseAppInternal } from '@firebase/app-types-exp';
3333
import {
34-
clearComponents,
35-
components,
36-
registerComponent,
37-
getProvider
34+
_clearComponents,
35+
_components,
36+
_registerComponent,
37+
_getProvider
3838
} from './internal';
3939
import { createTestComponent } from '../test/util';
4040
import { Component, ComponentType } from '@firebase/component';
@@ -103,15 +103,17 @@ describe('API tests', () => {
103103
});
104104

105105
it('adds registered components to App', () => {
106-
clearComponents();
106+
_clearComponents();
107107
const comp1 = createTestComponent('test1');
108108
const comp2 = createTestComponent('test2');
109-
registerComponent(comp1);
110-
registerComponent(comp2);
109+
_registerComponent(comp1);
110+
_registerComponent(comp2);
111111

112112
const app = initializeApp({}) as _FirebaseAppInternal;
113113
// -1 here to not count the FirebaseApp provider that's added during initializeApp
114-
expect(app.container.getProviders().length - 1).to.equal(components.size);
114+
expect(app.container.getProviders().length - 1).to.equal(
115+
_components.size
116+
);
115117
});
116118
});
117119

@@ -177,57 +179,57 @@ describe('API tests', () => {
177179

178180
describe('registerVersion', () => {
179181
afterEach(() => {
180-
clearComponents();
182+
_clearComponents();
181183
});
182184

183185
it('will register an official version component without warnings', () => {
184186
const warnStub = stub(console, 'warn');
185-
const initialSize = components.size;
187+
const initialSize = _components.size;
186188

187189
registerVersion('@firebase/analytics', '1.2.3');
188-
expect(components.get('fire-analytics-version')).to.exist;
189-
expect(components.size).to.equal(initialSize + 1);
190+
expect(_components.get('fire-analytics-version')).to.exist;
191+
expect(_components.size).to.equal(initialSize + 1);
190192

191193
expect(warnStub.called).to.be.false;
192194
});
193195

194196
it('will register an arbitrary version component without warnings', () => {
195197
const warnStub = stub(console, 'warn');
196-
const initialSize = components.size;
198+
const initialSize = _components.size;
197199

198200
registerVersion('angularfire', '1.2.3');
199-
expect(components.get('angularfire-version')).to.exist;
200-
expect(components.size).to.equal(initialSize + 1);
201+
expect(_components.get('angularfire-version')).to.exist;
202+
expect(_components.size).to.equal(initialSize + 1);
201203

202204
expect(warnStub.called).to.be.false;
203205
});
204206

205207
it('will do nothing if registerVersion() is given illegal characters', () => {
206208
const warnStub = stub(console, 'warn');
207-
const initialSize = components.size;
209+
const initialSize = _components.size;
208210

209211
registerVersion('remote config', '1.2.3');
210212
expect(warnStub.args[0][1]).to.include('library name "remote config"');
211-
expect(components.size).to.equal(initialSize);
213+
expect(_components.size).to.equal(initialSize);
212214

213215
registerVersion('remote-config', '1.2/3');
214216
expect(warnStub.args[1][1]).to.include('version name "1.2/3"');
215-
expect(components.size).to.equal(initialSize);
217+
expect(_components.size).to.equal(initialSize);
216218
});
217219
});
218220

219221
describe('User Log Methods', () => {
220222
describe('Integration Tests', () => {
221223
beforeEach(() => {
222-
clearComponents();
224+
_clearComponents();
223225
});
224226

225227
it(`respects log level set through setLogLevel()`, () => {
226228
const warnSpy = spy(console, 'warn');
227229
const infoSpy = spy(console, 'info');
228230
const logSpy = spy(console, 'log');
229231
const app = initializeApp({});
230-
registerComponent(
232+
_registerComponent(
231233
new Component(
232234
'test-shell',
233235
() => {
@@ -252,15 +254,15 @@ describe('API tests', () => {
252254
)
253255
);
254256

255-
getProvider(app, 'test-shell').getImmediate();
257+
_getProvider(app, 'test-shell').getImmediate();
256258
});
257259

258260
it(`correctly triggers callback given to onLog()`, () => {
259261
const infoSpy = spy(console, 'info');
260262
let result: any = null;
261263
// Note: default log level is INFO.
262264
const app = initializeApp({});
263-
registerComponent(
265+
_registerComponent(
264266
new Component(
265267
'test-shell',
266268
() => {
@@ -279,7 +281,7 @@ describe('API tests', () => {
279281
ComponentType.PUBLIC
280282
)
281283
);
282-
getProvider(app, 'test-shell').getImmediate();
284+
_getProvider(app, 'test-shell').getImmediate();
283285
});
284286
});
285287
});

0 commit comments

Comments
 (0)