Skip to content

Commit

Permalink
Fix Vercel build (#5830)
Browse files Browse the repository at this point in the history
  • Loading branch information
schmidt-sebastian committed Jan 10, 2022
1 parent b5084fb commit 044a8d7
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
5 changes: 5 additions & 0 deletions .changeset/eight-cows-push.md
@@ -0,0 +1,5 @@
---
"@firebase/firestore": patch
---

Fix Proto loading for Vercel/Next.js.
33 changes: 26 additions & 7 deletions packages/firestore/rollup.config.js
Expand Up @@ -23,6 +23,7 @@ import replace from 'rollup-plugin-replace';
import { terser } from 'rollup-plugin-terser';
import typescriptPlugin from 'rollup-plugin-typescript2';
import tmp from 'tmp';
import { basename } from 'path';
import typescript from 'typescript';

import { generateBuildTargetReplaceConfig } from '../../scripts/build/rollup_replace_build_target';
Expand All @@ -31,16 +32,34 @@ import pkg from './package.json';

const util = require('./rollup.shared');

// Customize how import.meta.url is polyfilled in cjs nodejs build. We use it to be able to use require() in esm.
// It only generates the nodejs version of the polyfill, as opposed to the default polyfill which
// supports both browser and nodejs. The browser support is unnecessary and doesn't work well with Jest. See https://github.com/firebase/firebase-js-sdk/issues/5687
function importMetaUrlPolyfillPlugin() {
// Customize how import.meta.url is polyfilled in cjs nodejs build. We use it to
// be able to use require() in esm. It only generates the nodejs version of the
// polyfill, as opposed to the default polyfill which supports both browser and
// nodejs. The browser support doesn't work well with Jest.
// See https://github.com/firebase/firebase-js-sdk/issues/5687
// Although this is a cjs Node build and shouldn't require the browser option,
// Vercel apps using this break on deployment, but work in local development.
// See https://github.com/firebase/firebase-js-sdk/issues/5823
function importMetaUrlPolyfillPlugin(filename) {
return {
name: 'import-meta-url-current-module',
resolveImportMeta(property, { moduleId }) {
if (property === 'url') {
// copied from rollup output
return `new (require('url').URL)('file:' + __filename).href`;
// Added a check for Jest (see issue 5687 linked above)
// See https://jestjs.io/docs/environment-variables - apparently
// these are not always both set.
const JEST_CHECK =
`typeof process !== 'undefined' && process.env !== undefined` +
` && (process.env.JEST_WORKER_ID !== undefined || ` +
`process.env.NODE_ENV === 'test')`;
// Copied from rollup output
return (
`((typeof document === 'undefined' || (${JEST_CHECK})) ?` +
` new (require('url').URL)` +
`('file:' + __filename).href : (document.currentScript && ` +
`document.currentScript.src || new URL('${filename}', ` +
`document.baseURI).href))`
);
}
return null;
}
Expand Down Expand Up @@ -124,7 +143,7 @@ const allBuilds = [
plugins: [
...util.es2017ToEs5Plugins(/* mangled= */ false),
replace(generateBuildTargetReplaceConfig('cjs', 2017)),
importMetaUrlPolyfillPlugin()
importMetaUrlPolyfillPlugin(basename(pkg.main))
],
external: util.resolveNodeExterns,
treeshake: {
Expand Down

0 comments on commit 044a8d7

Please sign in to comment.