From 0abf2b93e78db4c32307965f2d23cf4ff511cc4c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 6 Jul 2026 03:45:31 +0000 Subject: [PATCH 1/2] test: add regression coverage for @paypal/paypal-js sdk-v6 subpath Add unit and integration tests for issue #599 where @paypal/paypal-js@10.0.1 exposes ./sdk-v6 with only types + import conditions. The unit fixture mirrors the package exports map and asserts nft traces dist/v6/esm/paypal-js.js. The integration test traces, packages, and executes a loadCoreSdkScript import from the real package to guard against resolving the main entry instead. Co-authored-by: Steven --- .gitignore | 2 ++ package.json | 1 + pnpm-lock.yaml | 15 +++++++++++++++ test/integration/paypal-js-sdk-v6.mjs | 11 +++++++++++ test/unit.test.js | 3 ++- test/unit/paypal-js-sdk-v6/.gitignore | 1 + test/unit/paypal-js-sdk-v6/input.mjs | 3 +++ .../@paypal/paypal-js/dist/cjs/paypal-js.js | 5 +++++ .../@paypal/paypal-js/dist/esm/paypal-js.js | 3 +++ .../@paypal/paypal-js/dist/v6/esm/paypal-js.js | 2 ++ .../node_modules/@paypal/paypal-js/index.js | 1 + .../@paypal/paypal-js/package.json | 18 ++++++++++++++++++ test/unit/paypal-js-sdk-v6/output.js | 5 +++++ 13 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 test/integration/paypal-js-sdk-v6.mjs create mode 100644 test/unit/paypal-js-sdk-v6/.gitignore create mode 100644 test/unit/paypal-js-sdk-v6/input.mjs create mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js create mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js create mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js create mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js create mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json create mode 100644 test/unit/paypal-js-sdk-v6/output.js diff --git a/.gitignore b/.gitignore index cd3a13b2..893907ab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ dist out coverage test/**/dist +!test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/ +!test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/** test/**/actual.js yarn.lock package-lock.json diff --git a/package.json b/package.json index 4e48860a..622cea7f 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@google-cloud/bigquery": "^8.3.1", "@google-cloud/firestore": "^7.6.0", "@opentelemetry/api": "^1.7.0", + "@paypal/paypal-js": "10.0.1", "@sentry/node": "^9.2.0", "@tpluscode/sparql-builder": "^0.3.12", "@types/bindings": "^1.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04f9a5b4..8628cbe9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: '@opentelemetry/api': specifier: ^1.7.0 version: 1.9.0 + '@paypal/paypal-js': + specifier: 10.0.1 + version: 10.0.1 '@sentry/node': specifier: ^9.2.0 version: 9.47.1 @@ -2093,6 +2096,9 @@ packages: '@paulirish/trace_engine@0.0.61': resolution: {integrity: sha512-/O08DwmUqIlJjUSPSZbNF8lWnlxaMsIOV6sS+uDKCxBd5i1psAmjEoG3JAqR6+nHD8X+YY474NW7SxUH/K+/kQ==} + '@paypal/paypal-js@10.0.1': + resolution: {integrity: sha512-tVv2p5Wf4YyI3BNa2dx5uRIM0iWi5Ci8dn1yUjwAml7Q+axmyTH5maWkCUBktD6Gmw/AjPBv4lRbkHFZyfH8uQ==} + '@phc/format@1.0.0': resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} engines: {node: '>=10'} @@ -7805,6 +7811,9 @@ packages: promise-polyfill@1.1.6: resolution: {integrity: sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==} + promise-polyfill@8.3.0: + resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==} + promise-the-world@1.0.1: resolution: {integrity: sha512-eAXctcYU0ksq9YT5LT0N3e8yvdEAp0aYuzIiaJo9CpZwga45i08MW05GMXZIow7N05d1o4EBoR5hjkb7jhzqKg==} @@ -12247,6 +12256,10 @@ snapshots: legacy-javascript: 0.0.1 third-party-web: 0.29.2 + '@paypal/paypal-js@10.0.1': + dependencies: + promise-polyfill: 8.3.0 + '@phc/format@1.0.0': {} '@pkgjs/parseargs@0.11.0': @@ -19290,6 +19303,8 @@ snapshots: promise-polyfill@1.1.6: {} + promise-polyfill@8.3.0: {} + promise-the-world@1.0.1: {} promise@7.3.1: diff --git a/test/integration/paypal-js-sdk-v6.mjs b/test/integration/paypal-js-sdk-v6.mjs new file mode 100644 index 00000000..9fe48521 --- /dev/null +++ b/test/integration/paypal-js-sdk-v6.mjs @@ -0,0 +1,11 @@ +// Regression test for https://github.com/vercel/nft/issues/599 +// @paypal/paypal-js@10.0.1 exposes ./sdk-v6 with only "types" + "import" +// conditions. Tracing must include dist/v6/esm/paypal-js.js so the named +// export loadCoreSdkScript resolves at runtime after packaging. +import { loadCoreSdkScript } from '@paypal/paypal-js/sdk-v6'; + +if (typeof loadCoreSdkScript !== 'function') { + throw new Error( + `Expected loadCoreSdkScript to be a function, got ${typeof loadCoreSdkScript}`, + ); +} diff --git a/test/unit.test.js b/test/unit.test.js index 662ae82b..3781a1c3 100644 --- a/test/unit.test.js +++ b/test/unit.test.js @@ -153,7 +153,8 @@ for (const { testName, isRoot } of unitTests) { testName === 'module-create-require-named-require' || testName === 'module-create-require-named-import' || testName === 'module-create-require-ignore-other' || - testName === 'module-create-require-destructure' + testName === 'module-create-require-destructure' || + testName === 'paypal-js-sdk-v6' ) { inputFileNames = ['input.mjs']; } diff --git a/test/unit/paypal-js-sdk-v6/.gitignore b/test/unit/paypal-js-sdk-v6/.gitignore new file mode 100644 index 00000000..cf4bab9d --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/.gitignore @@ -0,0 +1 @@ +!node_modules diff --git a/test/unit/paypal-js-sdk-v6/input.mjs b/test/unit/paypal-js-sdk-v6/input.mjs new file mode 100644 index 00000000..5d28d150 --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/input.mjs @@ -0,0 +1,3 @@ +import { loadCoreSdkScript } from '@paypal/paypal-js/sdk-v6'; + +console.log(typeof loadCoreSdkScript); diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js new file mode 100644 index 00000000..b6cd1ae6 --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js @@ -0,0 +1,5 @@ +module.exports = { + loadScript: () => {}, + loadCustomScript: () => {}, + version: '10.0.1', +}; diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js new file mode 100644 index 00000000..ba9cad1e --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js @@ -0,0 +1,3 @@ +export const loadScript = () => {}; +export const loadCustomScript = () => {}; +export const version = '10.0.1'; diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js new file mode 100644 index 00000000..99341338 --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js @@ -0,0 +1,2 @@ +export const loadCoreSdkScript = () => {}; +export const version = '6.0.0'; diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js new file mode 100644 index 00000000..81b31416 --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/cjs/paypal-js.js'); diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json new file mode 100644 index 00000000..d7bb102f --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json @@ -0,0 +1,18 @@ +{ + "name": "@paypal/paypal-js", + "version": "10.0.1", + "main": "index.js", + "module": "dist/esm/paypal-js.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "import": "./dist/esm/paypal-js.js", + "require": "./dist/cjs/paypal-js.js" + }, + "./sdk-v6": { + "types": "./types/v6/index.d.ts", + "import": "./dist/v6/esm/paypal-js.js" + } + } +} diff --git a/test/unit/paypal-js-sdk-v6/output.js b/test/unit/paypal-js-sdk-v6/output.js new file mode 100644 index 00000000..9a17a3fa --- /dev/null +++ b/test/unit/paypal-js-sdk-v6/output.js @@ -0,0 +1,5 @@ +[ + "test/unit/paypal-js-sdk-v6/input.mjs", + "test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js", + "test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json" +] From 55366aaf420b5058693b5d14df7dcad82e1750cb Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 6 Jul 2026 04:23:04 +0000 Subject: [PATCH 2/2] test: use workspace @paypal/paypal-js instead of fixture node_modules Remove the local mock node_modules from the paypal-js-sdk-v6 unit test and trace the real @paypal/paypal-js@10.0.1 package from the workspace install. Co-authored-by: Steven --- .gitignore | 2 -- test/unit/paypal-js-sdk-v6/.gitignore | 1 - .../@paypal/paypal-js/dist/cjs/paypal-js.js | 5 ----- .../@paypal/paypal-js/dist/esm/paypal-js.js | 3 --- .../@paypal/paypal-js/dist/v6/esm/paypal-js.js | 2 -- .../node_modules/@paypal/paypal-js/index.js | 1 - .../@paypal/paypal-js/package.json | 18 ------------------ test/unit/paypal-js-sdk-v6/output.js | 6 +++--- 8 files changed, 3 insertions(+), 35 deletions(-) delete mode 100644 test/unit/paypal-js-sdk-v6/.gitignore delete mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js delete mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js delete mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js delete mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js delete mode 100644 test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json diff --git a/.gitignore b/.gitignore index 893907ab..cd3a13b2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,6 @@ dist out coverage test/**/dist -!test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/ -!test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/** test/**/actual.js yarn.lock package-lock.json diff --git a/test/unit/paypal-js-sdk-v6/.gitignore b/test/unit/paypal-js-sdk-v6/.gitignore deleted file mode 100644 index cf4bab9d..00000000 --- a/test/unit/paypal-js-sdk-v6/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!node_modules diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js deleted file mode 100644 index b6cd1ae6..00000000 --- a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/cjs/paypal-js.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - loadScript: () => {}, - loadCustomScript: () => {}, - version: '10.0.1', -}; diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js deleted file mode 100644 index ba9cad1e..00000000 --- a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/esm/paypal-js.js +++ /dev/null @@ -1,3 +0,0 @@ -export const loadScript = () => {}; -export const loadCustomScript = () => {}; -export const version = '10.0.1'; diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js deleted file mode 100644 index 99341338..00000000 --- a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js +++ /dev/null @@ -1,2 +0,0 @@ -export const loadCoreSdkScript = () => {}; -export const version = '6.0.0'; diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js deleted file mode 100644 index 81b31416..00000000 --- a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/cjs/paypal-js.js'); diff --git a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json b/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json deleted file mode 100644 index d7bb102f..00000000 --- a/test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "@paypal/paypal-js", - "version": "10.0.1", - "main": "index.js", - "module": "dist/esm/paypal-js.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "import": "./dist/esm/paypal-js.js", - "require": "./dist/cjs/paypal-js.js" - }, - "./sdk-v6": { - "types": "./types/v6/index.d.ts", - "import": "./dist/v6/esm/paypal-js.js" - } - } -} diff --git a/test/unit/paypal-js-sdk-v6/output.js b/test/unit/paypal-js-sdk-v6/output.js index 9a17a3fa..64b6d074 100644 --- a/test/unit/paypal-js-sdk-v6/output.js +++ b/test/unit/paypal-js-sdk-v6/output.js @@ -1,5 +1,5 @@ [ - "test/unit/paypal-js-sdk-v6/input.mjs", - "test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js", - "test/unit/paypal-js-sdk-v6/node_modules/@paypal/paypal-js/package.json" + "node_modules/@paypal/paypal-js/dist/v6/esm/paypal-js.js", + "node_modules/@paypal/paypal-js/package.json", + "test/unit/paypal-js-sdk-v6/input.mjs" ]