report build variants for packages (#5596)

* report build variants for app

* report build target for firestore

* report runtime env for app

* report build target for auth

* report build target for database and analytics

* report build variants for functions

* report build variants for installations

* report things for fcm

* report build variant for perf

* report build variants for storage

* Create stupid-scissors-compare.md

* fix lint

* prettier

* update typing paths
This commit is contained in:
Feiyang
2021-10-12 10:48:59 -07:00
committed by GitHub
parent 0e18cd1a07
commit b86f23216c
32 changed files with 458 additions and 89 deletions
+15
View File
@@ -0,0 +1,15 @@
---
"@firebase/analytics": patch
"@firebase/app": patch
"@firebase/auth": patch
"@firebase/database": patch
"@firebase/firestore": patch
"@firebase/functions": patch
"@firebase/installations": patch
"@firebase/messaging": patch
"@firebase/performance": patch
"@firebase/remote-config": patch
"@firebase/storage": patch
---
report build variants for packages
+20 -6
View File
@@ -17,7 +17,9 @@
import json from '@rollup/plugin-json';
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
const deps = [
@@ -40,12 +42,21 @@ const es5Builds = [
*/
{
input: 'src/index.ts',
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.esm5, format: 'es', sourcemap: true }
],
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
]
},
{
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
]
}
];
@@ -76,7 +87,10 @@ const es2017Builds = [
sourcemap: true
},
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es2017BuildPlugins
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
]
}
];
+2
View File
@@ -65,6 +65,8 @@ function registerAnalytics(): void {
);
registerVersion(name, version);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
function internalFactory(
container: ComponentContainer
+23 -3
View File
@@ -16,8 +16,10 @@
*/
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import json from '@rollup/plugin-json';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
const deps = Object.keys(
@@ -42,7 +44,13 @@ const es5Builds = [
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace({
...generateBuildTargetReplaceConfig('esm', 5),
'__RUNTIME_ENV__': ''
})
]
},
/**
* Node.js Build
@@ -51,7 +59,13 @@ const es5Builds = [
input: 'src/index.ts',
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace({
...generateBuildTargetReplaceConfig('cjs', 5),
'__RUNTIME_ENV__': 'node'
})
]
}
];
@@ -84,7 +98,13 @@ const es2017Builds = [
sourcemap: true
},
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es2017BuildPlugins
plugins: [
...es2017BuildPlugins,
replace({
...generateBuildTargetReplaceConfig('esm', 2017),
'__RUNTIME_ENV__': ''
})
]
}
];
+1 -1
View File
@@ -28,4 +28,4 @@ export * from './api';
export * from './internal';
export * from './public-types';
registerCoreComponents();
registerCoreComponents('__RUNTIME_ENV__');
@@ -32,6 +32,8 @@ export function registerCoreComponents(variant?: string): void {
// Register `app` package.
registerVersion(name, version, variant);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
// Register platform SDK identifier (no version).
registerVersion('fire-js', '');
}
+29 -13
View File
@@ -18,8 +18,10 @@
import strip from '@rollup/plugin-strip';
import typescriptPlugin from 'rollup-plugin-typescript2';
import json from '@rollup/plugin-json';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import alias from '@rollup/plugin-alias';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies));
@@ -30,14 +32,14 @@ const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencie
* more info. This regex tests explicitly ./src/platform_browser so that the
* only impacted file is the main index.ts
*/
const nodeAliasPlugin = alias({
const nodeAliasPlugin = alias({
entries: [
{
find: /^\.\/src\/platform_browser(\/.*)?$/,
replacement: `./src/platform_node`
}
{
find: /^\.\/src\/platform_browser(\/.*)?$/,
replacement: `./src/platform_node`
}
]
});
});
/**
* ES5 Builds
*/
@@ -60,8 +62,8 @@ const es5Builds = [
index: 'index.ts',
internal: 'internal/index.ts'
},
output: [{ dir: 'dist/esm5', format: 'esm', sourcemap: true }],
plugins: es5BuildPlugins,
output: [{ dir: 'dist/esm5', format: 'es', sourcemap: true }],
plugins: [...es5BuildPlugins, replace(generateBuildTargetReplaceConfig('esm', 5))],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
},
/**
@@ -86,7 +88,8 @@ const es5Builds = [
]
}
})
}),
replace(generateBuildTargetReplaceConfig('esm', 5))
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
},
@@ -99,7 +102,11 @@ const es5Builds = [
internal: 'internal/index.ts'
},
output: [{ dir: 'dist/node', format: 'cjs', sourcemap: true }],
plugins: [nodeAliasPlugin, ...es5BuildPlugins],
plugins: [
nodeAliasPlugin,
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
},
/**
@@ -111,7 +118,10 @@ const es5Builds = [
internal: 'internal/index.ts'
},
output: [{ dir: 'dist/cordova', format: 'es', sourcemap: true }],
plugins: es5BuildPlugins,
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
],
external: id =>
[...deps, 'cordova'].some(dep => id === dep || id.startsWith(`${dep}/`))
},
@@ -124,7 +134,10 @@ const es5Builds = [
internal: 'internal/index.ts'
},
output: [{ dir: 'dist/rn', format: 'cjs', sourcemap: true }],
plugins: es5BuildPlugins,
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
],
external: id =>
[...deps, 'react-native'].some(
dep => id === dep || id.startsWith(`${dep}/`)
@@ -164,7 +177,10 @@ const es2017Builds = [
format: 'es',
sourcemap: true
},
plugins: es2017BuildPlugins,
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
}
];
+2
View File
@@ -123,4 +123,6 @@ export function registerAuth(clientPlatform: ClientPlatform): void {
);
registerVersion(name, version, getVersionForPlatform(clientPlatform));
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
+14 -3
View File
@@ -17,7 +17,9 @@
import json from '@rollup/plugin-json';
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
const deps = [
@@ -50,7 +52,10 @@ const es5Builds = [
{
input: 'src/index.node.ts',
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
plugins: es5BuildPlugins,
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
],
treeshake: {
moduleSideEffects: false
},
@@ -69,7 +74,10 @@ const es5Builds = [
sourcemap: true
}
],
plugins: es5BuildPlugins,
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
],
treeshake: {
moduleSideEffects: false
},
@@ -120,7 +128,10 @@ const es2017Builds = [
sourcemap: true
}
],
plugins: es2017BuildPlugins,
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
],
treeshake: {
moduleSideEffects: false
},
+2
View File
@@ -47,4 +47,6 @@ export function registerDatabase(variant?: string): void {
).setMultipleInstances(true)
);
registerVersion(name, version, variant);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
+3 -1
View File
@@ -53,5 +53,7 @@ export function registerFirestore(): void {
ComponentType.PUBLIC
)
);
registerVersion('firestore-lite', version, 'node');
// RUNTIME_ENV and BUILD_TARGET are replaced by real values during the compilation
registerVersion('firestore-lite', version, '__RUNTIME_ENV__');
registerVersion('firestore-lite', version, '__BUILD_TARGET__');
}
+50 -5
View File
@@ -25,6 +25,7 @@ import copy from 'rollup-plugin-copy';
import { terser } from 'rollup-plugin-terser';
import pkg from './package.json';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
const util = require('./rollup.shared');
@@ -77,7 +78,9 @@ const browserPlugins = function () {
};
const allBuilds = [
// Node ESM build
// Intermidiate Node ESM build without build target reporting
// this is an intermidiate build used to generate the actual esm and cjs builds
// which add build target reporting
{
input: './src/index.node.ts',
output: {
@@ -100,13 +103,32 @@ const allBuilds = [
format: 'cjs',
sourcemap: true
},
plugins: util.es2017ToEs5Plugins(/* mangled= */ false),
plugins: [
...util.es2017ToEs5Plugins(/* mangled= */ false),
replace(generateBuildTargetReplaceConfig('cjs', 2017))
],
external: util.resolveNodeExterns,
treeshake: {
moduleSideEffects: false
}
},
// Browser build
// Node ESM build with build target reporting
{
input: pkg['main-esm'],
output: {
file: pkg['main-esm'],
format: 'es',
sourcemap: true
},
plugins: [replace(generateBuildTargetReplaceConfig('esm', 2017))],
external: util.resolveNodeExterns,
treeshake: {
moduleSideEffects: false
}
},
// Intermidiate browser build without build target reporting
// this is an intermidiate build used to generate the actual esm and cjs builds
// which add build target reporting
{
input: './src/index.ts',
output: {
@@ -130,7 +152,26 @@ const allBuilds = [
sourcemap: true
}
],
plugins: util.es2017ToEs5Plugins(/* mangled= */ true),
plugins: [
...util.es2017ToEs5Plugins(/* mangled= */ true),
replace(generateBuildTargetReplaceConfig('esm', 5))
],
external: util.resolveBrowserExterns,
treeshake: {
moduleSideEffects: false
}
},
// es2017 build with build target reporting
{
input: pkg['browser'],
output: [
{
file: pkg['browser'],
format: 'es',
sourcemap: true
}
],
plugins: [replace(generateBuildTargetReplaceConfig('esm', 2017))],
external: util.resolveBrowserExterns,
treeshake: {
moduleSideEffects: false
@@ -144,7 +185,11 @@ const allBuilds = [
format: 'es',
sourcemap: true
},
plugins: [alias(util.generateAliasConfig('rn')), ...browserPlugins()],
plugins: [
alias(util.generateAliasConfig('rn')),
...browserPlugins(),
replace(generateBuildTargetReplaceConfig('esm', 2017))
],
external: util.resolveBrowserExterns,
treeshake: {
moduleSideEffects: false
+63 -7
View File
@@ -27,6 +27,7 @@ import replace from 'rollup-plugin-replace';
import { terser } from 'rollup-plugin-terser';
import pkg from './lite/package.json';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
const util = require('./rollup.shared');
@@ -77,7 +78,9 @@ const browserPlugins = function () {
};
const allBuilds = [
// Node ESM build
// Intermidiate Node ESM build without build target reporting
// this is an intermidiate build used to generate the actual esm and cjs builds
// which add build target reporting
{
input: './lite/index.ts',
output: {
@@ -85,7 +88,13 @@ const allBuilds = [
format: 'es',
sourcemap: true
},
plugins: [alias(util.generateAliasConfig('node_lite')), ...nodePlugins()],
plugins: [
alias(util.generateAliasConfig('node_lite')),
...nodePlugins(),
replace({
'__RUNTIME_ENV__': 'node'
})
],
external: util.resolveNodeExterns,
treeshake: {
moduleSideEffects: false
@@ -110,14 +119,31 @@ const allBuilds = [
include: ['dist/lite/*.js']
}),
json(),
sourcemaps()
sourcemaps(),
replace(generateBuildTargetReplaceConfig('cjs', 5))
],
external: util.resolveNodeExterns,
treeshake: {
moduleSideEffects: false
}
},
// Browser build
// Node ESM build
{
input: path.resolve('./lite', pkg['main-esm']),
output: {
file: path.resolve('./lite', pkg['main-esm']),
format: 'es',
sourcemap: true
},
plugins: [replace(generateBuildTargetReplaceConfig('esm', 2017))],
external: util.resolveNodeExterns,
treeshake: {
moduleSideEffects: false
}
},
// Intermidiate browser build without build target reporting
// this is an intermidiate build used to generate the actual esm and cjs builds
// which add build target reporting
{
input: './lite/index.ts',
output: {
@@ -127,7 +153,11 @@ const allBuilds = [
},
plugins: [
alias(util.generateAliasConfig('browser_lite')),
...browserPlugins()
...browserPlugins(),
// setting it to empty string because browser is the default env
replace({
'__RUNTIME_ENV__': ''
})
],
external: util.resolveBrowserExterns,
treeshake: {
@@ -144,7 +174,26 @@ const allBuilds = [
sourcemap: true
}
],
plugins: util.es2017ToEs5Plugins(/* mangled= */ true),
plugins: [
...util.es2017ToEs5Plugins(/* mangled= */ true),
replace(generateBuildTargetReplaceConfig('esm', 5))
],
external: util.resolveBrowserExterns,
treeshake: {
moduleSideEffects: false
}
},
// Browser es2017 build
{
input: path.resolve('./lite', pkg.browser),
output: [
{
file: path.resolve('./lite', pkg.browser),
format: 'es',
sourcemap: true
}
],
plugins: [replace(generateBuildTargetReplaceConfig('esm', 2017))],
external: util.resolveBrowserExterns,
treeshake: {
moduleSideEffects: false
@@ -158,7 +207,14 @@ const allBuilds = [
format: 'es',
sourcemap: true
},
plugins: [alias(util.generateAliasConfig('rn_lite')), ...browserPlugins()],
plugins: [
alias(util.generateAliasConfig('rn_lite')),
...browserPlugins(),
replace({
...generateBuildTargetReplaceConfig('esm', 2017),
'__RUNTIME_ENV__': 'rn'
})
],
external: util.resolveBrowserExterns,
treeshake: {
moduleSideEffects: false
+2
View File
@@ -50,4 +50,6 @@ export function registerFirestore(variant?: string): void {
)
);
registerVersion(name, version, variant);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
+14 -3
View File
@@ -17,8 +17,10 @@
import json from '@rollup/plugin-json';
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import pkg from './package.json';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
const deps = Object.keys(
Object.assign({}, pkg.peerDependencies, pkg.dependencies)
@@ -41,7 +43,10 @@ const es5Builds = [
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
]
},
/**
* Node.js Build
@@ -50,7 +55,10 @@ const es5Builds = [
input: 'src/index.node.ts',
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
]
}
];
@@ -81,7 +89,10 @@ const es2017Builds = [
sourcemap: true
},
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es2017BuildPlugins
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
]
}
];
+10 -2
View File
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { _registerComponent } from '@firebase/app';
import { _registerComponent, registerVersion } from '@firebase/app';
import { FunctionsService } from './service';
import {
Component,
@@ -27,6 +27,7 @@ import { FUNCTIONS_TYPE } from './constants';
import { FirebaseAuthInternalName } from '@firebase/auth-interop-types';
import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';
import { MessagingInternalComponentName } from '@firebase/messaging-interop-types';
import { name, version } from '../package.json';
const AUTH_INTERNAL_NAME: FirebaseAuthInternalName = 'auth-internal';
const APP_CHECK_INTERNAL_NAME: AppCheckInternalComponentName =
@@ -34,7 +35,10 @@ const APP_CHECK_INTERNAL_NAME: AppCheckInternalComponentName =
const MESSAGING_INTERNAL_NAME: MessagingInternalComponentName =
'messaging-internal';
export function registerFunctions(fetchImpl: typeof fetch): void {
export function registerFunctions(
fetchImpl: typeof fetch,
variant?: string
): void {
const factory: InstanceFactory<'functions'> = (
container: ComponentContainer,
{ instanceIdentifier: regionOrCustomDomain }
@@ -63,4 +67,8 @@ export function registerFunctions(fetchImpl: typeof fetch): void {
ComponentType.PUBLIC
).setMultipleInstances(true)
);
registerVersion(name, version, variant);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
+1 -5
View File
@@ -14,14 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { registerVersion } from '@firebase/app';
import { registerFunctions } from './config';
import nodeFetch from 'node-fetch';
import { name, version } from '../package.json';
export * from './api';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
registerFunctions(nodeFetch as any);
registerVersion(name, version, 'node');
registerFunctions(nodeFetch as any, 'node');
-4
View File
@@ -20,12 +20,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { registerVersion } from '@firebase/app';
import { registerFunctions } from './config';
import { name, version } from '../package.json';
export * from './api';
registerFunctions(fetch.bind(self));
registerVersion(name, version);
+20 -6
View File
@@ -17,8 +17,10 @@
import json from '@rollup/plugin-json';
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import pkg from './package.json';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
const deps = [...Object.keys({ ...pkg.peerDependencies, ...pkg.dependencies })];
@@ -30,12 +32,21 @@ const es5BuildPlugins = [typescriptPlugin({ typescript }), json()];
const es5Builds = [
{
input: 'src/index.ts',
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.esm5, format: 'es', sourcemap: true }
],
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
]
},
{
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
]
}
];
@@ -63,7 +74,10 @@ const es2017Builds = [
sourcemap: true
},
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es2017BuildPlugins
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
]
}
];
+2
View File
@@ -30,3 +30,5 @@ export * from './interfaces/public-types';
registerInstallations();
registerVersion(name, version);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
+2 -2
View File
@@ -1,10 +1,10 @@
{
"extends": "../../config/api-extractor.json",
// Point it to your entry point d.ts file.
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
"mainEntryPointFilePath": "<projectFolder>/dist/src/index.d.ts",
"additionalEntryPoints": [{
"modulePath": "sw",
"filePath": "<projectFolder>/dist/index.sw.d.ts"
"filePath": "<projectFolder>/dist/src/index.sw.d.ts"
}],
"dtsRollup": {
/**
+3 -3
View File
@@ -6,7 +6,7 @@
"main": "dist/index.cjs.js",
"browser": "dist/index.esm2017.js",
"module": "dist/index.esm2017.js",
"typings": "dist/index.d.ts",
"typings": "dist/src/index.d.ts",
"sw": "dist/index.sw.esm2017.js",
"files": [
"dist",
@@ -25,8 +25,8 @@
"test:karma": "karma start --single-run",
"test:debug": "karma start --browsers=Chrome --auto-watch",
"api-report": "yarn api-report:main && yarn api-report:sw && yarn api-report:api-json",
"api-report:main": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging --packageRoot . --typescriptDts ./dist/index.d.ts --rollupDts ./dist/private.d.ts --untrimmedRollupDts ./dist/internal.d.ts --publicDts ./dist/index-public.d.ts",
"api-report:sw": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging-sw --packageRoot . --typescriptDts ./dist/index.sw.d.ts --rollupDts ./dist/sw/private.d.ts --untrimmedRollupDts ./dist/sw/internal.d.ts --publicDts ./dist/sw/index-public.d.ts",
"api-report:main": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging --packageRoot . --typescriptDts ./dist/src/index.d.ts --rollupDts ./dist/private.d.ts --untrimmedRollupDts ./dist/internal.d.ts --publicDts ./dist/index-public.d.ts",
"api-report:sw": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging-sw --packageRoot . --typescriptDts ./dist/src/index.sw.d.ts --rollupDts ./dist/sw/private.d.ts --untrimmedRollupDts ./dist/sw/internal.d.ts --publicDts ./dist/sw/index-public.d.ts",
"api-report:api-json": "api-extractor run --local --verbose",
"type-check": "tsc --noEmit",
"typings:public": "node ../../scripts/build/use_typings.js ./dist/index-public.d.ts"
+19 -5
View File
@@ -18,7 +18,9 @@
import json from '@rollup/plugin-json';
import pkg from './package.json';
import typescript from 'typescript';
import replace from 'rollup-plugin-replace';
import typescriptPlugin from 'rollup-plugin-typescript2';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
const deps = Object.keys(
Object.assign({}, pkg.peerDependencies, pkg.dependencies)
@@ -37,11 +39,20 @@ const es5BuildPlugins = [
const es5Builds = [
{
input: 'src/index.ts',
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.esm5, format: 'es', sourcemap: true }
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
},
{
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
],
plugins: es5BuildPlugins,
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
}
];
@@ -69,7 +80,10 @@ const es2017Builds = [
format: 'es',
sourcemap: true
},
plugins: es2017BuildPlugins,
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`))
},
// sw builds
+7 -1
View File
@@ -31,10 +31,12 @@ import { GetTokenOptions } from '../interfaces/public-types';
import { MessagingInternal } from '@firebase/messaging-interop-types';
import { MessagingService } from '../messaging-service';
import { ServiceWorkerGlobalScope } from '../util/sw-types';
import { _registerComponent } from '@firebase/app';
import { _registerComponent, registerVersion } from '@firebase/app';
import { getToken } from '../api/getToken';
import { messageEventListener } from '../listeners/window-listener';
import { name, version } from '../../package.json';
const WindowMessagingFactory: InstanceFactory<'messaging'> = (
container: ComponentContainer
) => {
@@ -100,6 +102,10 @@ export function registerMessagingInWindow(): void {
ComponentType.PRIVATE
)
);
registerVersion(name, version);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
/**
+1 -1
View File
@@ -3,5 +3,5 @@
"description": "",
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
"module": "../dist/index.sw.esm2017.js",
"typings": "../dist/index.sw.d.ts"
"typings": "../dist/src/index.sw.d.ts"
}
+20 -6
View File
@@ -17,7 +17,9 @@
import json from '@rollup/plugin-json';
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
const deps = Object.keys(
@@ -31,12 +33,21 @@ const es5BuildPlugins = [typescriptPlugin({ typescript }), json()];
const es5Builds = [
{
input: 'src/index.ts',
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.esm5, format: 'es', sourcemap: true }
],
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
]
},
{
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
]
}
];
@@ -60,7 +71,10 @@ const es2017Builds = [
input: 'src/index.ts',
output: [{ file: pkg.browser, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es2017BuildPlugins
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
]
}
];
+3 -1
View File
@@ -135,9 +135,11 @@ function registerPerformance(): void {
_registerComponent(
new Component('performance', factory, ComponentType.PUBLIC)
);
registerVersion(name, version);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
registerPerformance();
registerVersion(name, version);
export { FirebasePerformance, PerformanceSettings, PerformanceTrace };
+20 -6
View File
@@ -17,7 +17,9 @@
import json from '@rollup/plugin-json'; // Enables package.json import in TypeScript.
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
const deps = Object.keys(
@@ -39,12 +41,21 @@ const es5Builds = [
*/
{
input: 'src/index.ts',
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.esm5, format: 'es', sourcemap: true }
],
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es5BuildPlugins
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('cjs', 5))
]
},
{
input: 'src/index.ts',
output: [{ file: pkg.esm5, format: 'es', sourcemap: true }],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: [
...es5BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 5))
]
}
];
@@ -75,7 +86,10 @@ const es2017Builds = [
sourcemap: true
},
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
plugins: es2017BuildPlugins
plugins: [
...es2017BuildPlugins,
replace(generateBuildTargetReplaceConfig('esm', 2017))
]
}
];
+2
View File
@@ -52,6 +52,8 @@ export function registerRemoteConfig(): void {
);
registerVersion(packageName, version);
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(packageName, version, '__BUILD_TARGET__');
function remoteConfigFactory(
container: ComponentContainer,
+45 -3
View File
@@ -17,8 +17,10 @@
import json from '@rollup/plugin-json';
import typescriptPlugin from 'rollup-plugin-typescript2';
import replace from 'rollup-plugin-replace';
import typescript from 'typescript';
import alias from '@rollup/plugin-alias';
import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
import pkg from './package.json';
function generateAliasConfig(platform) {
@@ -54,7 +56,33 @@ const es5Builds = [
{ file: 'dist/index.browser.cjs.js', format: 'cjs', sourcemap: true },
{ file: pkg.esm5, format: 'es', sourcemap: true }
],
plugins: [alias(generateAliasConfig('browser')), ...es5Plugins],
plugins: [
alias(generateAliasConfig('browser')),
...es5Plugins,
replace({
...generateBuildTargetReplaceConfig('esm', 5),
'__RUNTIME_ENV__': ''
})
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
treeshake: {
moduleSideEffects: false
}
},
{
// needed by Emulator UI
input: './src/index.ts',
output: [
{ file: 'dist/index.browser.cjs.js', format: 'cjs', sourcemap: true }
],
plugins: [
alias(generateAliasConfig('browser')),
...es5Plugins,
replace({
...generateBuildTargetReplaceConfig('cjs', 5),
'__RUNTIME_ENV__': ''
})
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
treeshake: {
moduleSideEffects: false
@@ -84,7 +112,14 @@ const es2017Builds = [
format: 'cjs',
sourcemap: true
},
plugins: [alias(generateAliasConfig('node')), ...es2017Plugins],
plugins: [
alias(generateAliasConfig('node')),
...es2017Plugins,
replace({
...generateBuildTargetReplaceConfig('cjs', 2017),
'__RUNTIME_ENV__': 'node'
})
],
external: id =>
nodeDeps.some(dep => id === dep || id.startsWith(`${dep}/`)),
treeshake: {
@@ -100,7 +135,14 @@ const es2017Builds = [
format: 'es',
sourcemap: true
},
plugins: [alias(generateAliasConfig('browser')), ...es2017Plugins],
plugins: [
alias(generateAliasConfig('browser')),
...es2017Plugins,
replace({
...generateBuildTargetReplaceConfig('esm', 2017),
'__RUNTIME_ENV__': ''
})
],
external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)),
treeshake: {
moduleSideEffects: false
+4 -2
View File
@@ -70,8 +70,10 @@ function registerStorage(): void {
ComponentType.PUBLIC
).setMultipleInstances(true)
);
registerVersion(name, version);
//RUNTIME_ENV will be replaced during the compilation to "node" for nodejs and an empty string for browser
registerVersion(name, version, '__RUNTIME_ENV__');
// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
registerVersion(name, version, '__BUILD_TARGET__');
}
registerStorage();
@@ -0,0 +1,57 @@
/**
* @license
* Copyright 2021 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
*
* @param {'esm'|'cjs'} moduleFormat valid values are esm and cjs
* @param {number} languageTarget valid values are 5, 2015, 2016 ... 2020
*/
export function generateBuildTargetReplaceConfig(moduleFormat, languageTarget) {
let buildTarget = '';
switch (moduleFormat.toLowerCase()) {
case 'esm':
buildTarget += 'esm';
break;
case 'cjs':
buildTarget += 'cjs';
break;
default:
throw Error(
`unsupported module format ${moduleFormat}. Valid values are esm and cjs.`
);
}
if (typeof languageTarget !== 'number') {
throw Error(`languageTarget accepts only number`);
}
// simplified input validation
if (languageTarget != 5 && languageTarget < 2015) {
throw Error(
`invalid languageTarget ${languageTarget}. Valid values are 5, 2015, 2016, etc.`
);
}
buildTarget += languageTarget;
return {
[BUILD_TARGET_MAGIC_STRING]: buildTarget
};
}
export const BUILD_TARGET_MAGIC_STRING = '__BUILD_TARGET__';