diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 155126752160..577de41be06d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -105,6 +105,45 @@ jobs: # `job_build` can't see `job_install_deps` and what it returned) dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + # This isn't a full `yarn build` using sucrase - it's just the cache from the normal build, with `build/cjs` and + # `build/esm` overwritten by sucrase. This way we don't need to worry about all of the other random stuff which + # packages build, because it will already be there. + job_build_with_sucrase: + name: Sucrase Build + needs: [job_install_deps, job_build] + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - name: Check out current commit (${{ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + - name: Check tsc build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }} + - name: Check sucrase build cache + uses: actions/cache@v2 + id: cache_built_sucrase_packages + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Build packages with sucrase + if: steps.cache_built_sucrase_packages.outputs.cache-hit == '' + run: 'yarn build:rollup' + outputs: + # this needs to be passed on, because the `needs` context only looks at direct ancestors (so steps which depend on + # `job_build` can't see `job_install_deps` and what it returned) + dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + job_size_check: name: Size Check needs: job_build @@ -492,3 +531,269 @@ jobs: run: | cd packages/node-integration-tests yarn test + + job_unit_test_sucrase: + name: Sucrase Test (Node ${{ matrix.node }}) + needs: job_build_with_sucrase + continue-on-error: true + timeout-minutes: 30 + runs-on: ubuntu-latest + strategy: + matrix: + node: [8, 10, 12, 14, 16] + steps: + - name: Check out current commit (${{ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run tests + env: + NODE_VERSION: ${{ matrix.node }} + run: | + [[ $NODE_VERSION == 8 ]] && yarn add --dev --ignore-engines --ignore-scripts --ignore-workspace-root-check ts-node@8.x + yarn test-ci + - name: Compute test coverage + uses: codecov/codecov-action@v1 + + job_nextjs_integration_test_sucrase: + name: Sucrase Test @sentry/nextjs on (Node ${{ matrix.node }}) + needs: job_build_with_sucrase + continue-on-error: true + timeout-minutes: 30 + runs-on: ubuntu-latest + strategy: + matrix: + node: [10, 12, 14, 16] + steps: + - name: Check out current commit (${{ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run tests + env: + NODE_VERSION: ${{ matrix.node }} + run: | + cd packages/nextjs + yarn test:integration + + # Ember tests are separate from the rest because they are the slowest part of the test suite, and making them a + # separate job allows them to run in parallel with the other tests. + job_ember_tests_sucrase: + name: Sucrase Test @sentry/ember + needs: job_build_with_sucrase + continue-on-error: true + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - name: Check out current commit (${{ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + # TODO: removing `fetch-depth` below seems to have no effect, and the commit which added it had no description, + # so it's not clear why it's necessary. That said, right now ember tests are xfail, so it's a little hard to + # tell if it's safe to remove. Once ember tests are fixed, let's try again with it turned off, and if all goes + # well, we can pull it out. + fetch-depth: 0 + - name: Set up Node + uses: actions/setup-node@v1 + with: + # The only danger with Ember in terms of Node versions is that the build tool, ember-cli, won't work if Node + # is too old. Since Oct 2019, Node 10 has been the oldest version supported by ember-cli, so test against + # that. If it passes, newer versions of Node should also be fine. This saves us from having to run the Ember + # tests in our Node matrix above. + node-version: '10' + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run Ember tests + run: yarn test --scope=@sentry/ember + - name: Compute test coverage + uses: codecov/codecov-action@v1 + + job_browser_playwright_tests_sucrase: + name: Sucrase Playwright - ${{ (matrix.tracing_only && 'Browser + Tracing') || 'Browser' }} (${{ matrix.bundle }}) + needs: job_build_with_sucrase + runs-on: ubuntu-latest + strategy: + matrix: + bundle: + - esm + - cjs + tracing_only: + - true + - false + exclude: + # `tracing_only` only makes a difference for bundles - tests of the esm and cjs builds always include the + # tracing tests + - bundle: esm + tracing_only: false + - bundle: cjs + tracing_only: false + steps: + - name: Check out current commit (${{ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: '16' + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run Playwright tests + env: + PW_BUNDLE: ${{ matrix.bundle }} + PW_TRACING_ONLY: ${{ matrix.tracing_only }} + run: | + cd packages/integration-tests + yarn run playwright install-deps webkit + yarn test:ci + + job_browser_integration_tests_sucrase: + name: Sucrase Old Browser Integration Tests (${{ matrix.browser }}) + needs: job_build_with_sucrase + runs-on: ubuntu-latest + timeout-minutes: 10 + continue-on-error: true + strategy: + matrix: + browser: + - ChromeHeadless + - FirefoxHeadless + - WebkitHeadless + steps: + - name: Check out current commit (${{ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run integration tests + env: + KARMA_BROWSER: ${{ matrix.browser }} + run: | + cd packages/browser + [[ $KARMA_BROWSER == WebkitHeadless ]] && yarn run playwright install-deps webkit + yarn test:integration + + job_browser_build_tests_sucrase: + name: Sucrase Browser Build Tests + needs: job_build_with_sucrase + runs-on: ubuntu-latest + timeout-minutes: 5 + continue-on-error: true + steps: + - name: Check out current commit (${ env.HEAD_COMMIT }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: '16' + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run browser build tests + run: | + cd packages/browser + yarn test:package + - name: Run utils build tests + run: | + cd packages/utils + yarn test:package + + job_node_integration_tests_sucrase: + name: Sucrase Node SDK Integration Tests (${{ matrix.node }}) + needs: job_build_with_sucrase + runs-on: ubuntu-latest + timeout-minutes: 10 + continue-on-error: true + strategy: + matrix: + node: [10, 12, 14, 16] + steps: + - name: Check out current commit (${{ github.sha }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build_with_sucrase.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }}-sucrase + - name: Run integration tests + env: + NODE_VERSION: ${{ matrix.node }} + run: | + cd packages/node-integration-tests + yarn test diff --git a/package.json b/package.json index a9990a79561b..e3cccf304ea0 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build:dev:filter": "lerna run --stream --concurrency 1 --sort build:dev --include-filtered-dependencies --include-filtered-dependents --scope", "build:es5": "yarn lerna run --stream --concurrency 1 --sort build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "lerna run --stream --concurrency 1 --sort build:esm", + "build:rollup": "lerna run --stream --concurrency 1 --sort build:rollup", "build:types": "lerna run --stream --concurrency 1 --sort build:types", "build:watch": "lerna run --parallel build:watch", "build:dev:watch": "lerna run --parallel build:dev:watch", @@ -57,6 +58,7 @@ "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-node-resolve": "^13.1.3", "@rollup/plugin-replace": "^3.0.1", + "@rollup/plugin-sucrase": "^4.0.3", "@size-limit/preset-small-lib": "^4.5.5", "@strictsoftware/typedoc-plugin-monorepo": "^0.3.1", "@types/chai": "^4.1.3", diff --git a/packages/browser/package.json b/packages/browser/package.json index 8f9eb0013e26..2263eff402cc 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -49,6 +49,7 @@ "build:dev": "run-p build:cjs build:esm build:types", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:bundle:watch build:types:watch", "build:bundle:watch": "rollup --config --watch", @@ -56,6 +57,7 @@ "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:dev:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/browser/rollup.npm.config.js b/packages/browser/rollup.npm.config.js new file mode 100644 index 000000000000..4ffa8b9396d8 --- /dev/null +++ b/packages/browser/rollup.npm.config.js @@ -0,0 +1,8 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + // packages with bundles have a different build directory structure + hasBundles: true, + }), +); diff --git a/packages/core/package.json b/packages/core/package.json index 737007cf648b..a66c34b5035f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -27,12 +27,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/core/rollup.npm.config.js b/packages/core/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/core/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index e65aa2714b27..5fc7e5e08402 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -40,12 +40,14 @@ "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", "build:plugin": "tsc -p tsconfig.plugin.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/gatsby/rollup.npm.config.js b/packages/gatsby/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/gatsby/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/hub/package.json b/packages/hub/package.json index 13351981746c..66cca210583a 100644 --- a/packages/hub/package.json +++ b/packages/hub/package.json @@ -26,12 +26,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/hub/rollup.npm.config.js b/packages/hub/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/hub/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/integrations/package.json b/packages/integrations/package.json index de3eb70ed7bd..e7097f2c486c 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -31,12 +31,14 @@ "build:dev": "run-p build:cjs build:esm build:types", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/integrations/rollup.npm.config.js b/packages/integrations/rollup.npm.config.js new file mode 100644 index 000000000000..4ffa8b9396d8 --- /dev/null +++ b/packages/integrations/rollup.npm.config.js @@ -0,0 +1,8 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + // packages with bundles have a different build directory structure + hasBundles: true, + }), +); diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index dd232c23d374..07529b57ba03 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -48,12 +48,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.client.ts && madge --circular --exclude 'config/types\\.ts' src/index.server.ts # see https://github.com/pahen/madge/issues/306", diff --git a/packages/nextjs/rollup.npm.config.js b/packages/nextjs/rollup.npm.config.js new file mode 100644 index 000000000000..a41fb991432c --- /dev/null +++ b/packages/nextjs/rollup.npm.config.js @@ -0,0 +1,12 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + // We need to include `instrumentServer.ts` separately because it's only conditionally required, and so rollup + // doesn't automatically include it when calculating the module dependency tree. + entrypoints: ['src/index.server.ts', 'src/index.client.ts', 'src/utils/instrumentServer.ts'], + // prevent this nextjs code from ending up in our built package (this doesn't happen automatially because the name + // doesn't match an SDK dependency) + externals: ['next/router'], + }), +); diff --git a/packages/node/package.json b/packages/node/package.json index cbb1e4e2f7b0..f67eace899d3 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -39,12 +39,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/node/rollup.npm.config.js b/packages/node/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/node/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/react/package.json b/packages/react/package.json index 0365a6968bc5..67a29a291385 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -52,12 +52,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/react/rollup.npm.config.js b/packages/react/rollup.npm.config.js new file mode 100644 index 000000000000..ebe81bb263c6 --- /dev/null +++ b/packages/react/rollup.npm.config.js @@ -0,0 +1,7 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + esModuleInterop: true, + }), +); diff --git a/packages/serverless/package.json b/packages/serverless/package.json index c7a83cfdaa20..97c20654f559 100644 --- a/packages/serverless/package.json +++ b/packages/serverless/package.json @@ -44,12 +44,14 @@ "build:dev": "run-p build:cjs build:esm build:types", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/serverless/rollup.npm.config.js b/packages/serverless/rollup.npm.config.js new file mode 100644 index 000000000000..9b3074be8002 --- /dev/null +++ b/packages/serverless/rollup.npm.config.js @@ -0,0 +1,7 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + entrypoints: ['src/index.ts', 'src/awslambda-auto.ts'], + }), +); diff --git a/packages/tracing/package.json b/packages/tracing/package.json index 00a298e3937f..1cfa4aa2dafe 100644 --- a/packages/tracing/package.json +++ b/packages/tracing/package.json @@ -32,6 +32,7 @@ "build:dev": "run-p build:cjs build:esm build:types", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:bundle:watch build:types:watch", "build:bundle:watch": "rollup --config --watch", @@ -39,6 +40,7 @@ "build:dev:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", "clean": "rimraf build coverage", diff --git a/packages/tracing/rollup.npm.config.js b/packages/tracing/rollup.npm.config.js new file mode 100644 index 000000000000..4ffa8b9396d8 --- /dev/null +++ b/packages/tracing/rollup.npm.config.js @@ -0,0 +1,8 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + // packages with bundles have a different build directory structure + hasBundles: true, + }), +); diff --git a/packages/types/package.json b/packages/types/package.json index 5c1c37c1c159..9799b8aa4fcf 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -21,12 +21,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "clean": "rimraf build", diff --git a/packages/types/rollup.npm.config.js b/packages/types/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/types/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/utils/package.json b/packages/utils/package.json index 142ae23e6010..1e84b03ca42d 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -28,12 +28,14 @@ "build:dev": "run-s build", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:cjs:watch": "tsc -p tsconfig.cjs.json --watch", "build:dev:watch": "run-s build:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/utils/rollup.npm.config.js b/packages/utils/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/utils/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/vue/package.json b/packages/vue/package.json index 406f335f05de..66af3d30fc92 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -32,6 +32,7 @@ "build:dev": "run-p build:cjs build:esm build:types", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:bundle:watch": "rollup --config --watch", @@ -39,6 +40,7 @@ "build:dev:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/vue/rollup.npm.config.js b/packages/vue/rollup.npm.config.js new file mode 100644 index 000000000000..5a62b528ef44 --- /dev/null +++ b/packages/vue/rollup.npm.config.js @@ -0,0 +1,3 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants(makeBaseNPMConfig()); diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 671ddad9c5f2..e34b788aceef 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -35,6 +35,7 @@ "build:dev": "run-p build:cjs build:esm build:types", "build:es5": "yarn build:cjs # *** backwards compatibility - remove in v7 ***", "build:esm": "tsc -p tsconfig.esm.json", + "build:rollup": "rollup -c rollup.npm.config.js", "build:types": "tsc -p tsconfig.types.json", "build:watch": "run-p build:cjs:watch build:esm:watch build:bundle:watch build:types:watch", "build:bundle:watch": "rollup --config --watch", @@ -42,6 +43,7 @@ "build:dev:watch": "run-p build:cjs:watch build:esm:watch build:types:watch", "build:es5:watch": "yarn build:cjs:watch # *** backwards compatibility - remove in v7 ***", "build:esm:watch": "tsc -p tsconfig.esm.json --watch", + "build:rollup:watch": "rollup -c rollup.npm.config.js --watch", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:npm": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", "circularDepCheck": "madge --circular src/index.ts", diff --git a/packages/wasm/rollup.npm.config.js b/packages/wasm/rollup.npm.config.js new file mode 100644 index 000000000000..4ffa8b9396d8 --- /dev/null +++ b/packages/wasm/rollup.npm.config.js @@ -0,0 +1,8 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + // packages with bundles have a different build directory structure + hasBundles: true, + }), +); diff --git a/rollup/index.js b/rollup/index.js index 51baa9ba247c..2ae4712165ad 100644 --- a/rollup/index.js +++ b/rollup/index.js @@ -5,4 +5,5 @@ import * as plugins from './plugins/index.js'; export { plugins }; export * from './bundleHelpers.js'; +export * from './npmHelpers.js'; export { insertAt } from './utils.js'; diff --git a/rollup/npmHelpers.js b/rollup/npmHelpers.js new file mode 100644 index 000000000000..b4397a56f466 --- /dev/null +++ b/rollup/npmHelpers.js @@ -0,0 +1,90 @@ +/** + * Rollup config docs: https://rollupjs.org/guide/en/#big-list-of-options + */ + +import { builtinModules } from 'module'; +import * as path from 'path'; + +import deepMerge from 'deepmerge'; + +import { makeNodeResolvePlugin, makeSucrasePlugin } from './plugins/index.js'; + +const packageDotJSON = require(path.resolve(process.cwd(), './package.json')); + +export function makeBaseNPMConfig(options = {}) { + const { + entrypoints = ['src/index.ts'], + esModuleInterop = false, + externals: packageSpecificExternals = [], + hasBundles = false, + } = options; + + const nodeResolvePlugin = makeNodeResolvePlugin(); + const sucrasePlugin = makeSucrasePlugin(); + + return { + input: entrypoints, + + output: { + // an appropriately-named directory will be added to this base value when we specify either a cjs or esm build + dir: hasBundles ? 'build/npm' : 'build', + + sourcemap: true, + + // output individual files rather than one big bundle + preserveModules: true, + + // any wrappers or helper functions generated by rollup can use ES6 features + generatedCode: 'es2015', + + // don't add `"use strict"` to the top of cjs files + strict: false, + + // do TS-3.8-style exports + // exports.dogs = are.great + // rather than TS-3.9-style exports + // Object.defineProperty(exports, 'dogs', { + // enumerable: true, + // get: () => are.great, + // }); + externalLiveBindings: false, + + // Equivalent to `esModuleInterop` in tsconfig. + // Controls whether rollup emits helpers to handle special cases where turning + // `import * as dogs from 'dogs'` + // into + // `const dogs = require('dogs')` + // doesn't work. + // + // `auto` -> emit helpers + // `esModule` -> don't emit helpers + interop: esModuleInterop ? 'auto' : 'esModule', + }, + + plugins: [nodeResolvePlugin, sucrasePlugin], + + // don't include imported modules from outside the package in the final output + external: [ + ...builtinModules, + ...Object.keys(packageDotJSON.dependencies || {}), + ...Object.keys(packageDotJSON.devDependencies || {}), + ...Object.keys(packageDotJSON.peerDependencies || {}), + ...packageSpecificExternals, + ], + + // TODO `'smallest'` will get rid of `isDebugBuild()` by evaluating it and inlining the result and then treeshaking + // from there. The current setting (false) prevents this, in case we want to leave it there for users to use in + // their own bundling. That said, we don't yet know for sure that that works, so come back to this. + // treeshake: 'smallest', + treeshake: false, + }; +} + +export function makeNPMConfigVariants(baseConfig) { + const variantSpecificConfigs = [ + { output: { format: 'cjs', dir: path.join(baseConfig.output.dir, 'cjs') } }, + { output: { format: 'esm', dir: path.join(baseConfig.output.dir, 'esm') } }, + ]; + + return variantSpecificConfigs.map(variant => deepMerge(baseConfig, variant)); +} diff --git a/rollup/plugins/index.js b/rollup/plugins/index.js index bb05969c2caf..014b3b383b4d 100644 --- a/rollup/plugins/index.js +++ b/rollup/plugins/index.js @@ -1 +1,2 @@ export * from './bundlePlugins'; +export * from './npmPlugins'; diff --git a/rollup/plugins/npmPlugins.js b/rollup/plugins/npmPlugins.js new file mode 100644 index 000000000000..5f4c443682ef --- /dev/null +++ b/rollup/plugins/npmPlugins.js @@ -0,0 +1,16 @@ +/** + * Sucrase plugin docs: https://github.com/rollup/plugins/tree/master/packages/sucrase + */ + +import sucrase from '@rollup/plugin-sucrase'; + +/** + * Create a plugin to transpile TS syntax using `sucrase`. + * + * @returns An instance of the `@rollup/plugin-sucrase` plugin + */ +export function makeSucrasePlugin() { + return sucrase({ + transforms: ['typescript', 'jsx'], + }); +} diff --git a/yarn.lock b/yarn.lock index 9304663e7767..6b21e6baa196 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4197,6 +4197,14 @@ "@rollup/pluginutils" "^3.1.0" magic-string "^0.25.7" +"@rollup/plugin-sucrase@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-sucrase/-/plugin-sucrase-4.0.3.tgz#b972ba61db0faaba397e09daaffcdbd38c167e2c" + integrity sha512-gZrjT985isK+EmHt3Dyr9z4JfO9IGuYkxck96yIyIUU9EKnZtDXUZ6ap5kvIdEnY8kLeiypiUEfK+/QtMIlA2A== + dependencies: + "@rollup/pluginutils" "^4.1.1" + sucrase "^3.20.0" + "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" @@ -4206,6 +4214,14 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^4.1.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@rollup/pluginutils@^4.1.2": version "4.1.2" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.2.tgz#ed5821c15e5e05e32816f5fb9ec607cdf5a75751" @@ -5959,6 +5975,11 @@ ansicolors@~0.2.1: resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" integrity sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8= +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -9077,7 +9098,7 @@ commander@^3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^4.1.1: +commander@^4.0.0, commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -18100,6 +18121,15 @@ mysql@^2.18.1: safe-buffer "5.1.2" sqlstring "2.3.1" +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nan@^2.12.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" @@ -23469,6 +23499,18 @@ stylus@0.54.8, stylus@^0.54.7: semver "^6.3.0" source-map "^0.7.3" +sucrase@^3.20.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.21.0.tgz#6a5affdbe716b22e4dc99c57d366ad0d216444b9" + integrity sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ== + dependencies: + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + sum-up@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" @@ -23878,6 +23920,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throat@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" @@ -24176,6 +24232,11 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + ts-jest@^27.1.4: version "27.1.4" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.4.tgz#84d42cf0f4e7157a52e7c64b1492c46330943e00"