diff --git a/integration/firestore/firebase_export_memory.ts b/integration/firestore/firebase_export_memory.ts index ae08246a745..98e6ce3ae78 100644 --- a/integration/firestore/firebase_export_memory.ts +++ b/integration/firestore/firebase_export_memory.ts @@ -17,7 +17,7 @@ import firebase from '@firebase/app'; import '@firebase/firestore/memory'; -import '@firebase/firestore/bundle'; +import '@firebase/firestore/memory-bundle'; import { FirebaseApp } from '@firebase/app-types'; import { Settings, FirebaseFirestore } from '@firebase/firestore-types'; diff --git a/integration/firestore/package.json b/integration/firestore/package.json index 7c898f0004d..139199fcc93 100644 --- a/integration/firestore/package.json +++ b/integration/firestore/package.json @@ -9,7 +9,7 @@ "test": "yarn build:memory; karma start --single-run; yarn build:persistence; karma start --single-run;", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test", "test:persistence": " yarn build:persistence; karma start --single-run", - "test:persistence:debug:": "yarn build:persistence; karma start --auto-watch --browsers Chrome", + "test:persistence:debug": "yarn build:persistence; karma start --auto-watch --browsers Chrome", "test:memory": "yarn build:memory; karma start --single-run", "test:memory:debug": "yarn build:memory; karma start --auto-watch --browsers Chrome" }, diff --git a/packages/firebase/firestore/memory/index.ts b/packages/firebase/firestore/memory/index.ts index 6199921021e..6f8f730e3d1 100644 --- a/packages/firebase/firestore/memory/index.ts +++ b/packages/firebase/firestore/memory/index.ts @@ -21,4 +21,4 @@ */ import '@firebase/firestore/memory'; -import '@firebase/firestore/bundle'; +import '@firebase/firestore/memory-bundle'; diff --git a/packages/firestore/memory-bundle/package.json b/packages/firestore/memory-bundle/package.json new file mode 100644 index 00000000000..b29c357c34e --- /dev/null +++ b/packages/firestore/memory-bundle/package.json @@ -0,0 +1,10 @@ +{ + "name": "@firebase/firestore/memory-bundle", + "description": "Firestore bundle", + "main": "../dist/memory/node-cjs/bundle.js", + "main-esm2017": "../dist/memory/node-esm2017/bundle.js", + "react-native": "../dist/memory/rn/bundle.js", + "browser": "../dist/memory/esm5/bundle.js", + "module": "../dist/memory/esm5/bundle.js", + "esm2017": "../dist/memory/esm2017/bundle.js" +} diff --git a/packages/firestore/memory/package.json b/packages/firestore/memory/package.json index e6eb6025020..0879ff8fa39 100644 --- a/packages/firestore/memory/package.json +++ b/packages/firestore/memory/package.json @@ -1,11 +1,11 @@ { "name": "@firebase/firestore/memory", "description": "A memory-only build of the Cloud Firestore JS SDK.", - "main": "../dist/node-cjs/memory.js", - "main-esm2017": "../dist/node-esm2017/memory.js", - "react-native": "../dist/rn/memory.js", - "browser": "../dist/esm5/memory.js", - "module": "../dist/esm5/memory.js", - "esm2017": "../dist/esm2017/memory.js", + "main": "../dist/memory/node-cjs/index.js", + "main-esm2017": "../dist/memory/node-esm2017/index.js", + "react-native": "../dist/memory/rn/index.js", + "browser": "../dist/memory/esm5/index.js", + "module": "../dist/memory/esm5/index.js", + "esm2017": "../dist/memory/esm2017/index.js", "typings": "../dist/index.d.ts" } diff --git a/packages/firestore/package.json b/packages/firestore/package.json index ad7d05a471e..c25cb971f5c 100644 --- a/packages/firestore/package.json +++ b/packages/firestore/package.json @@ -82,6 +82,7 @@ "json-stable-stringify": "1.0.1", "protobufjs": "6.10.2", "rollup": "2.33.2", + "rollup-plugin-copy": "3.3.0", "rollup-plugin-copy-assets": "2.0.3", "rollup-plugin-replace": "2.2.0", "rollup-plugin-sourcemaps": "0.6.3", diff --git a/packages/firestore/rollup.config.browser.js b/packages/firestore/rollup.config.browser.js index 748e5410057..7eeaaaa1a2a 100644 --- a/packages/firestore/rollup.config.browser.js +++ b/packages/firestore/rollup.config.browser.js @@ -2,6 +2,7 @@ import pkg from './package.json'; import path from 'path'; import memoryPkg from './memory/package.json'; import bundlePkg from './bundle/package.json'; +import memoryBundlePkg from './memory-bundle/package.json'; /** * @license @@ -20,14 +21,14 @@ import bundlePkg from './bundle/package.json'; * limitations under the License. */ -const alias = require('@rollup/plugin-alias'); const util = require('./rollup.shared'); export default [ + // Create a temporary build that includes the mangled classes for all exports { input: 'export.ts', output: { - file: 'dist/prebuild.js', + file: 'dist/prebuilt.js', format: 'es', sourcemap: true }, @@ -37,10 +38,10 @@ export default [ moduleSideEffects: false } }, + // Create main build { input: { index: 'index.ts', - memory: 'index.memory.ts', bundle: 'index.bundle.ts' }, output: { @@ -49,25 +50,18 @@ export default [ sourcemap: true }, plugins: [ - alias({ - entries: [ - { - find: /^(.*)\/export$/, - replacement: `$1\/dist/prebuild.js` - } - ] - }), - ...util.es2017Plugins('browser', /* mangled= */ true) + util.applyPrebuilt(), + ...util.es2017Plugins('browser', /* mangled= */ false) ], external: util.resolveBrowserExterns, treeshake: { moduleSideEffects: false } }, + // Convert main build to ES5 { input: { index: pkg['esm2017'], - memory: path.resolve('./memory', memoryPkg['esm2017']), bundle: path.resolve('./bundle', bundlePkg['esm2017']) }, output: [ @@ -77,7 +71,46 @@ export default [ sourcemap: true } ], - plugins: util.es2017ToEs5Plugins(), + plugins: util.es2017ToEs5Plugins(/* mangled= */ true), + external: util.resolveBrowserExterns, + treeshake: { + moduleSideEffects: false + } + }, + // Create memory build + { + input: { + index: 'index.memory.ts', + bundle: 'index.bundle.ts' + }, + output: { + dir: 'dist/memory/esm2017', + format: 'es', + sourcemap: true + }, + plugins: [ + util.applyPrebuilt(), + ...util.es2017Plugins('browser', /* mangled= */ false) + ], + external: util.resolveBrowserExterns, + treeshake: { + moduleSideEffects: false + } + }, + // Convert memory build to ES5 + { + input: { + index: path.resolve('./memory', memoryPkg['esm2017']), + bundle: path.resolve('./bundle', memoryBundlePkg['esm2017']) + }, + output: [ + { + dir: 'dist/memory/esm5', + format: 'es', + sourcemap: true + } + ], + plugins: util.es2017ToEs5Plugins(/* mangled= */ true), external: util.resolveBrowserExterns, treeshake: { moduleSideEffects: false diff --git a/packages/firestore/rollup.config.node.js b/packages/firestore/rollup.config.node.js index 5f7f0bca085..8f1f9f7a24e 100644 --- a/packages/firestore/rollup.config.node.js +++ b/packages/firestore/rollup.config.node.js @@ -16,10 +16,11 @@ */ import replace from 'rollup-plugin-replace'; -import copy from 'rollup-plugin-copy-assets'; +import copy from 'rollup-plugin-copy'; import pkg from './package.json'; import bundlePkg from './bundle/package.json'; import memoryPkg from './memory/package.json'; +import memoryBundlePkg from './memory-bundle/package.json'; import path from 'path'; const util = require('./rollup.shared'); @@ -28,7 +29,6 @@ export default [ { input: { index: 'index.node.ts', - memory: 'index.node.memory.ts', bundle: 'index.bundle.ts' }, output: { @@ -39,10 +39,10 @@ export default [ plugins: [ ...util.es2017Plugins('node'), replace({ - 'process.env.FIRESTORE_PROTO_ROOT': JSON.stringify('src/protos') + 'process.env.FIRESTORE_PROTO_ROOT': JSON.stringify('../protos') }), copy({ - assets: ['./src/protos'] + targets: [{ src: 'src/protos', dest: 'dist' }] }) ], external: util.resolveNodeExterns, @@ -53,7 +53,6 @@ export default [ { input: { index: pkg['main-esm2017'], - memory: path.resolve('./memory', memoryPkg['main-esm2017']), bundle: path.resolve('./bundle', bundlePkg['main-esm2017']) }, output: [ @@ -68,5 +67,43 @@ export default [ treeshake: { moduleSideEffects: false } + }, + { + input: { + index: 'index.node.memory.ts', + bundle: 'index.bundle.ts' + }, + output: { + dir: 'dist/memory/node-esm2017', + format: 'es', + sourcemap: true + }, + plugins: [ + ...util.es2017Plugins('node'), + replace({ + 'process.env.FIRESTORE_PROTO_ROOT': JSON.stringify('../protos') + }) + ], + external: util.resolveNodeExterns, + treeshake: { + moduleSideEffects: false + } + }, + { + input: { + index: path.resolve('./memory', memoryPkg['main-esm2017']), + bundle: path.resolve('./bundle', memoryBundlePkg['main-esm2017']) + }, + output: [ + { + dir: 'dist/memory/node-cjs', + format: 'cjs', + sourcemap: true + } + ], + external: util.resolveNodeExterns, + treeshake: { + moduleSideEffects: false + } } ]; diff --git a/packages/firestore/rollup.config.rn.js b/packages/firestore/rollup.config.rn.js index 7bdac6362f0..fcbd6225a8d 100644 --- a/packages/firestore/rollup.config.rn.js +++ b/packages/firestore/rollup.config.rn.js @@ -15,14 +15,14 @@ * limitations under the License. */ -const alias = require('@rollup/plugin-alias'); const util = require('./rollup.shared'); export default [ + // Create a temporary build that includes the mangled classes for all exports { input: 'export.ts', output: { - file: 'dist/prebuild.rn.js', + file: 'dist/prebuilt.rn.js', format: 'es', sourcemap: true }, @@ -32,10 +32,10 @@ export default [ moduleSideEffects: false } }, + // Create main build { input: { index: 'index.ts', - memory: 'index.memory.ts', bundle: 'index.bundle.ts' }, output: { @@ -44,14 +44,27 @@ export default [ sourcemap: true }, plugins: [ - alias({ - entries: [ - { - find: /^(.*)\/export$/, - replacement: `$1\/dist/prebuild.rn.js` - } - ] - }), + util.applyPrebuilt('prebuilt.rn.js'), + ...util.es2017Plugins('rn', /* mangled= */ false) + ], + external: util.resolveBrowserExterns, + treeshake: { + moduleSideEffects: false + } + }, + // Create memory build + { + input: { + index: 'index.memory.ts', + bundle: 'index.bundle.ts' + }, + output: { + dir: 'dist/rn', + format: 'es', + sourcemap: true + }, + plugins: [ + util.applyPrebuilt('prebuilt.rn.js'), ...util.es2017Plugins('rn', /* mangled= */ true) ], external: util.resolveBrowserExterns, diff --git a/packages/firestore/rollup.shared.js b/packages/firestore/rollup.shared.js index 0ac2f92a136..a8f78f6902c 100644 --- a/packages/firestore/rollup.shared.js +++ b/packages/firestore/rollup.shared.js @@ -203,6 +203,17 @@ const manglePrivatePropertiesOptions = { }; exports.manglePrivatePropertiesOptions = manglePrivatePropertiesOptions; +exports.applyPrebuilt = function (name = 'prebuilt.js') { + return alias({ + entries: [ + { + find: /^(.*)\/export$/, + replacement: `$1\/dist/${name}` + } + ] + }); +}; + exports.es2017Plugins = function (platform, mangled = false) { if (mangled) { return [ diff --git a/yarn.lock b/yarn.lock index 75078c24d4c..91f2923fa29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5175,6 +5175,11 @@ color@3.0.x: color-convert "^1.9.1" color-string "^1.5.2" +colorette@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + colors@1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -7681,15 +7686,6 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^7.0.1, fs-extra@~7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -8140,6 +8136,20 @@ globals@^9.18.0: resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" + integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + globby@^10.0.1: version "10.0.2" resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -9478,6 +9488,11 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" + integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -13824,12 +13839,23 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-copy-assets@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/rollup-plugin-copy-assets/-/rollup-plugin-copy-assets-1.1.0.tgz#017e22bef9a9f6ddc632bae60cd660e0270c7706" - integrity sha512-hfBZns2x15XC6N97jhGUiYoNQp1jZ1/mFrM3sbf3GIqGaDEcFPe7+J1H50HIMLG4nVM8YxTJOhMsrXnD4E+2NQ== +rollup-plugin-copy-assets@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/rollup-plugin-copy-assets/-/rollup-plugin-copy-assets-2.0.3.tgz#9a9098894c3ded16d2eee8c4108055e332b5f59f" + integrity sha512-ETShhQGb9SoiwcNrvb3BhUNSGR89Jao0+XxxfzzLW1YsUzx8+rMO4z9oqWWmo6OHUmfNQRvqRj0cAyPkS9lN9w== dependencies: - fs-extra "^5.0.0" + fs-extra "^7.0.1" + +rollup-plugin-copy@3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.3.0.tgz#5ba230047f86b9f703a29288f242948a5580e7b9" + integrity sha512-euDjCUSBXZa06nqnwCNADbkAcYDfzwowfZQkto9K/TFhiH+QG7I4PUsEMwM9tDgomGWJc//z7KLW8t+tZwxADA== + dependencies: + "@types/fs-extra" "^8.0.1" + colorette "^1.1.0" + fs-extra "^8.1.0" + globby "10.0.1" + is-plain-object "^3.0.0" rollup-plugin-license@2.2.0: version "2.2.0"