diff --git a/packages/firestore/externs.json b/packages/firestore/externs.json index a1746227316..a8e24a4a43d 100644 --- a/packages/firestore/externs.json +++ b/packages/firestore/externs.json @@ -37,6 +37,7 @@ "packages/firestore/src/local/indexeddb_schema.ts", "packages/firestore/src/local/indexeddb_schema_legacy.ts", "packages/firestore/src/local/shared_client_state_schema.ts", + "packages/firestore/src/util/rollup_info.ts", "packages/firestore/src/util/testing_hooks.ts" ] } diff --git a/packages/firestore/lite/index.ts b/packages/firestore/lite/index.ts index bec95b76124..5430df7a7f5 100644 --- a/packages/firestore/lite/index.ts +++ b/packages/firestore/lite/index.ts @@ -153,3 +153,5 @@ export { GeoPoint } from '../src/lite-api/geo_point'; export { Timestamp } from '../src/lite-api/timestamp'; export { FirestoreErrorCode, FirestoreError } from '../src/util/error'; + +export { ROLLUP_BUNDLE_ID as _ROLLUP_BUNDLE_ID } from '../src/util/rollup_info'; diff --git a/packages/firestore/rollup.config.js b/packages/firestore/rollup.config.js index 0f6a42205fd..674a49fd568 100644 --- a/packages/firestore/rollup.config.js +++ b/packages/firestore/rollup.config.js @@ -98,7 +98,10 @@ const allBuilds = [ }, plugins: [ ...util.es2017ToEs5Plugins(/* mangled= */ false), - replace(generateBuildTargetReplaceConfig('cjs', 2017)) + replace(generateBuildTargetReplaceConfig('cjs', 2017)), + replace({ + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'fstrbid_node_cjs' + }) ], external: util.resolveNodeExterns, treeshake: { @@ -115,7 +118,10 @@ const allBuilds = [ }, plugins: [ sourcemaps(), - replace(generateBuildTargetReplaceConfig('esm', 2017)) + replace(generateBuildTargetReplaceConfig('esm', 2017)), + replace({ + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'fstrbid_node_esm' + }) ], external: util.resolveNodeExterns, treeshake: { @@ -150,7 +156,10 @@ const allBuilds = [ ], plugins: [ ...util.es2017ToEs5Plugins(/* mangled= */ true), - replace(generateBuildTargetReplaceConfig('esm', 5)) + replace(generateBuildTargetReplaceConfig('esm', 5)), + replace({ + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'fstrbid_browser_esm5' + }) ], external: util.resolveBrowserExterns, treeshake: { @@ -169,7 +178,10 @@ const allBuilds = [ ], plugins: [ sourcemaps(), - replace(generateBuildTargetReplaceConfig('cjs', 2017)) + replace(generateBuildTargetReplaceConfig('cjs', 2017)), + replace({ + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'fstrbid_browser_cjs' + }) ], external: util.resolveBrowserExterns, treeshake: { @@ -188,7 +200,10 @@ const allBuilds = [ ], plugins: [ sourcemaps(), - replace(generateBuildTargetReplaceConfig('esm', 2017)) + replace(generateBuildTargetReplaceConfig('esm', 2017)), + replace({ + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'fstrbid_browser_esm' + }) ], external: util.resolveBrowserExterns, treeshake: { @@ -206,7 +221,10 @@ const allBuilds = [ plugins: [ alias(util.generateAliasConfig('rn')), ...browserPlugins(), - replace(generateBuildTargetReplaceConfig('esm', 2017)) + replace(generateBuildTargetReplaceConfig('esm', 2017)), + replace({ + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'fstrbid_react_native' + }) ], external: util.resolveBrowserExterns, treeshake: { diff --git a/packages/firestore/rollup.config.lite.js b/packages/firestore/rollup.config.lite.js index 6a4f55ffa56..53a56addca8 100644 --- a/packages/firestore/rollup.config.lite.js +++ b/packages/firestore/rollup.config.lite.js @@ -108,7 +108,8 @@ const allBuilds = [ }), json(), sourcemaps(), - replace(generateBuildTargetReplaceConfig('cjs', 5)) + replace(generateBuildTargetReplaceConfig('cjs', 5)), + replace({ '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'lite.node.cjs' }) ], external: util.resolveNodeExterns, treeshake: { @@ -125,7 +126,8 @@ const allBuilds = [ }, plugins: [ sourcemaps(), - replace(generateBuildTargetReplaceConfig('esm', 2017)) + replace(generateBuildTargetReplaceConfig('esm', 2017)), + replace({ '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'lite.node.mjs' }) ], external: util.resolveNodeExterns, treeshake: { @@ -167,7 +169,8 @@ const allBuilds = [ ], plugins: [ ...util.es2017ToEs5Plugins(/* mangled= */ true), - replace(generateBuildTargetReplaceConfig('esm', 5)) + replace(generateBuildTargetReplaceConfig('esm', 5)), + replace({ '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'lite.browser.esm5' }) ], external: util.resolveBrowserExterns, treeshake: { @@ -186,7 +189,8 @@ const allBuilds = [ ], plugins: [ sourcemaps(), - replace(generateBuildTargetReplaceConfig('cjs', 2017)) + replace(generateBuildTargetReplaceConfig('cjs', 2017)), + replace({ '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'lite.browser.cjs' }) ], external: util.resolveBrowserExterns, treeshake: { @@ -205,7 +209,8 @@ const allBuilds = [ ], plugins: [ sourcemaps(), - replace(generateBuildTargetReplaceConfig('esm', 2017)) + replace(generateBuildTargetReplaceConfig('esm', 2017)), + replace({ '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'lite.browser.mjs' }) ], external: util.resolveBrowserExterns, treeshake: { @@ -225,8 +230,9 @@ const allBuilds = [ ...browserPlugins(), replace({ ...generateBuildTargetReplaceConfig('esm', 2017), - '__RUNTIME_ENV__': 'rn' - }) + '__RUNTIME_ENV__': 'rn', + '__FIRESTORE_ROLLUP_BUNDLE_ID__': 'lite.rn' + }), ], external: util.resolveBrowserExterns, treeshake: { diff --git a/packages/firestore/rollup.shared.js b/packages/firestore/rollup.shared.js index 92ec0e2ec9c..c90ca11b434 100644 --- a/packages/firestore/rollup.shared.js +++ b/packages/firestore/rollup.shared.js @@ -22,6 +22,7 @@ const typescriptPlugin = require('rollup-plugin-typescript2'); const typescript = require('typescript'); const { terser } = require('rollup-plugin-terser'); const path = require('path'); +const replace = require('rollup-plugin-replace'); const sourcemaps = require('rollup-plugin-sourcemaps'); const { renameInternals } = require('./scripts/rename-internals'); diff --git a/packages/firestore/src/api.ts b/packages/firestore/src/api.ts index 510d95c8a89..dc011131370 100644 --- a/packages/firestore/src/api.ts +++ b/packages/firestore/src/api.ts @@ -237,3 +237,4 @@ export { TestingHooks as _TestingHooks } from './util/testing_hooks'; export { ExistenceFilterMismatchInfo as _TestingHooksExistenceFilterMismatchInfo } from './util/testing_hooks_spi'; +export { ROLLUP_BUNDLE_ID as _ROLLUP_BUNDLE_ID } from './util/rollup_info'; diff --git a/packages/firestore/src/util/rollup_info.ts b/packages/firestore/src/util/rollup_info.ts new file mode 100644 index 00000000000..6c6cc21642a --- /dev/null +++ b/packages/firestore/src/util/rollup_info.ts @@ -0,0 +1,32 @@ +/** + * @license + * Copyright 2024 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. + */ + +/** + * The unique ID for this bundled version of the Firestore SDK as assigned by + * rollup.js at bundling time, or some undefined value if the SDK was not + * bundled with rollup. + * + * The ID can be used to determine which rollup.js plugins were used to bundle + * the SDK. See `../../rollup.shared.js` for details about how this value gets + * set by rollup at bundling time. + * + * The initial use case for this value is in tests that verify the bundled + * output of rollup.js. + * + * @internal + */ +export const ROLLUP_BUNDLE_ID = '__FIRESTORE_ROLLUP_BUNDLE_ID__'; diff --git a/packages/firestore/test/rollup/.idea/runConfigurations/mocha.xml b/packages/firestore/test/rollup/.idea/runConfigurations/mocha.xml new file mode 100644 index 00000000000..18a513fca6c --- /dev/null +++ b/packages/firestore/test/rollup/.idea/runConfigurations/mocha.xml @@ -0,0 +1,14 @@ + + + project + + $PROJECT_DIR$/node_modules/mocha + $PROJECT_DIR$ + true + bdd + + PATTERN + test/**/*.test.ts + + + \ No newline at end of file diff --git a/packages/firestore/test/rollup/.mocharc.json b/packages/firestore/test/rollup/.mocharc.json new file mode 100644 index 00000000000..3751de41484 --- /dev/null +++ b/packages/firestore/test/rollup/.mocharc.json @@ -0,0 +1,6 @@ +{ + "extension": "ts", + "require": "ts-node/register", + "spec": "test/**/*.test.ts", + "timeout": 60000 +} diff --git a/packages/firestore/test/rollup/README.md b/packages/firestore/test/rollup/README.md new file mode 100644 index 00000000000..6c6f20bf543 --- /dev/null +++ b/packages/firestore/test/rollup/README.md @@ -0,0 +1,3 @@ +This directory contains tests for the rollup bundling process. +It does not test the Firestore SDK itself, but rather the SDK bundles +that get produced by rollup when commands like `yarn build` are run. diff --git a/packages/firestore/test/rollup/bundle_id/.idea/runConfigurations/rollup.xml b/packages/firestore/test/rollup/bundle_id/.idea/runConfigurations/rollup.xml new file mode 100644 index 00000000000..f18c22f5559 --- /dev/null +++ b/packages/firestore/test/rollup/bundle_id/.idea/runConfigurations/rollup.xml @@ -0,0 +1,12 @@ + + + + + +