diff --git a/packages/tracing/.eslintrc.js b/packages/tracing/.eslintrc.js index 3cabb2be4d99..7a937173064e 100644 --- a/packages/tracing/.eslintrc.js +++ b/packages/tracing/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { extends: ['../../.eslintrc.js'], overrides: [ { - files: ['src/integrations/node/**'], + files: ['src/node/**'], rules: { '@sentry-internal/sdk/no-optional-chaining': 'off', }, diff --git a/packages/tracing/package.json b/packages/tracing/package.json index 8188cb842f5e..6187925a799e 100644 --- a/packages/tracing/package.json +++ b/packages/tracing/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/tracing", "version": "7.41.0", - "description": "Extensions for Sentry AM", + "description": "Sentry Performance Monitoring Package", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/tracing", "author": "Sentry", @@ -12,6 +12,36 @@ "main": "build/npm/cjs/index.js", "module": "build/npm/esm/index.js", "types": "build/npm/types/index.d.ts", + "exports": { + ".": { + "import": "./build/npm/esm/index.js", + "require": "./build/npm/cjs/index.js", + "types": "./build/npm/types/index.d.ts" + }, + "./node": { + "import": "./build/npm/esm/node/index.js", + "require": "./build/npm/cjs/node/index.js", + "types": "./build/npm/types/node/index.d.ts" + }, + "./browser": { + "import": "./build/npm/esm/browser/index.js", + "require": "./build/npm/cjs/browser/index.js", + "types": "./build/npm/types/browser/index.d.ts" + } + }, + "typesVersions": { + "*": { + "*": [ + "./build/npm/types/index.d.ts" + ], + "node": [ + "./build/npm/types/node/index.d.ts" + ], + "browser": [ + "./build/npm/types/browser/index.d.ts" + ] + } + }, "publishConfig": { "access": "public" }, diff --git a/packages/tracing/rollup.npm.config.js b/packages/tracing/rollup.npm.config.js index 4ffa8b9396d8..a7588e2a9538 100644 --- a/packages/tracing/rollup.npm.config.js +++ b/packages/tracing/rollup.npm.config.js @@ -2,6 +2,7 @@ import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js' export default makeNPMConfigVariants( makeBaseNPMConfig({ + entrypoints: ['src/browser/index.ts', 'src/node/index.ts', 'src/index.ts'], // packages with bundles have a different build directory structure hasBundles: true, }), diff --git a/packages/tracing/src/browser/index.ts b/packages/tracing/src/browser/index.ts index dcf4a08270fd..3ed465eea6ca 100644 --- a/packages/tracing/src/browser/index.ts +++ b/packages/tracing/src/browser/index.ts @@ -1,3 +1,5 @@ +export * from '../exports'; + export type { RequestInstrumentationOptions } from './request'; export { BrowserTracing, BROWSER_TRACING_INTEGRATION_ID } from './browsertracing'; diff --git a/packages/tracing/src/exports/index.ts b/packages/tracing/src/exports/index.ts new file mode 100644 index 000000000000..12c6e451e5a5 --- /dev/null +++ b/packages/tracing/src/exports/index.ts @@ -0,0 +1,15 @@ +export { + extractTraceparentData, + getActiveTransaction, + hasTracingEnabled, + IdleTransaction, + Span, + // eslint-disable-next-line deprecation/deprecation + SpanStatus, + spanStatusfromHttpCode, + startIdleTransaction, + stripUrlQueryAndFragment, + TRACEPARENT_REGEXP, + Transaction, +} from '@sentry/core'; +export type { SpanStatusType } from '@sentry/core'; diff --git a/packages/tracing/src/extensions.ts b/packages/tracing/src/extensions.ts index d6c0298dbbd7..e3c2ab511804 100644 --- a/packages/tracing/src/extensions.ts +++ b/packages/tracing/src/extensions.ts @@ -15,25 +15,25 @@ function _autoloadDatabaseIntegrations(): void { const packageToIntegrationMapping: Record Integration> = { mongodb() { - const integration = dynamicRequire(module, './integrations/node/mongo') as { + const integration = dynamicRequire(module, './node/integrations/mongo') as { Mongo: IntegrationClass; }; return new integration.Mongo(); }, mongoose() { - const integration = dynamicRequire(module, './integrations/node/mongo') as { + const integration = dynamicRequire(module, './node/integrations/mongo') as { Mongo: IntegrationClass; }; return new integration.Mongo({ mongoose: true }); }, mysql() { - const integration = dynamicRequire(module, './integrations/node/mysql') as { + const integration = dynamicRequire(module, './node/integrations/mysql') as { Mysql: IntegrationClass; }; return new integration.Mysql(); }, pg() { - const integration = dynamicRequire(module, './integrations/node/postgres') as { + const integration = dynamicRequire(module, './node/integrations/postgres') as { Postgres: IntegrationClass; }; return new integration.Postgres(); diff --git a/packages/tracing/src/index.ts b/packages/tracing/src/index.ts index b8cb377ffdfe..b8456bc6b017 100644 --- a/packages/tracing/src/index.ts +++ b/packages/tracing/src/index.ts @@ -1,23 +1,7 @@ -export { - extractTraceparentData, - getActiveTransaction, - hasTracingEnabled, - IdleTransaction, - Span, - // eslint-disable-next-line deprecation/deprecation - SpanStatus, - spanStatusfromHttpCode, - startIdleTransaction, - stripUrlQueryAndFragment, - TRACEPARENT_REGEXP, - Transaction, -} from '@sentry/core'; -export type { SpanStatusType } from '@sentry/core'; +export * from './exports'; import { addExtensionMethods } from './extensions'; -import * as Integrations from './integrations'; - -export type { RequestInstrumentationOptions } from './browser'; +import * as Integrations from './node/integrations'; export { Integrations }; @@ -37,9 +21,14 @@ export { Integrations }; // const instance = new BrowserTracing(); // // For an example of of the new usage of BrowserTracing, see @sentry/nextjs index.client.ts -export { BrowserTracing, BROWSER_TRACING_INTEGRATION_ID } from './browser'; +export { + BrowserTracing, + BROWSER_TRACING_INTEGRATION_ID, + instrumentOutgoingRequests, + defaultRequestInstrumentationOptions, +} from './browser'; -export { instrumentOutgoingRequests, defaultRequestInstrumentationOptions } from './browser'; +export type { RequestInstrumentationOptions } from './browser'; // Treeshakable guard to remove all code related to tracing declare const __SENTRY_TRACING__: boolean; diff --git a/packages/tracing/src/integrations/index.ts b/packages/tracing/src/integrations/index.ts deleted file mode 100644 index 7522599aa4cf..000000000000 --- a/packages/tracing/src/integrations/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { Express } from './node/express'; -export { Postgres } from './node/postgres'; -export { Mysql } from './node/mysql'; -export { Mongo } from './node/mongo'; -export { Prisma } from './node/prisma'; -export { GraphQL } from './node/graphql'; -export { Apollo } from './node/apollo'; - -// TODO(v7): Remove this export -// Please see `src/index.ts` for more details. -export { BrowserTracing } from '../browser'; diff --git a/packages/tracing/src/node/index.ts b/packages/tracing/src/node/index.ts new file mode 100644 index 000000000000..eac5910c32c7 --- /dev/null +++ b/packages/tracing/src/node/index.ts @@ -0,0 +1,3 @@ +export * from '../exports'; + +export * from './integrations'; diff --git a/packages/tracing/src/integrations/node/apollo.ts b/packages/tracing/src/node/integrations/apollo.ts similarity index 100% rename from packages/tracing/src/integrations/node/apollo.ts rename to packages/tracing/src/node/integrations/apollo.ts diff --git a/packages/tracing/src/integrations/node/express.ts b/packages/tracing/src/node/integrations/express.ts similarity index 100% rename from packages/tracing/src/integrations/node/express.ts rename to packages/tracing/src/node/integrations/express.ts diff --git a/packages/tracing/src/integrations/node/graphql.ts b/packages/tracing/src/node/integrations/graphql.ts similarity index 100% rename from packages/tracing/src/integrations/node/graphql.ts rename to packages/tracing/src/node/integrations/graphql.ts diff --git a/packages/tracing/src/node/integrations/index.ts b/packages/tracing/src/node/integrations/index.ts new file mode 100644 index 000000000000..91554d84fccd --- /dev/null +++ b/packages/tracing/src/node/integrations/index.ts @@ -0,0 +1,11 @@ +export { Express } from './express'; +export { Postgres } from './postgres'; +export { Mysql } from './mysql'; +export { Mongo } from './mongo'; +export { Prisma } from './prisma'; +export { GraphQL } from './graphql'; +export { Apollo } from './apollo'; + +// TODO(v8): Remove this export +// Please see `src/index.ts` for more details. +export { BrowserTracing } from '../../browser'; diff --git a/packages/tracing/src/integrations/node/mongo.ts b/packages/tracing/src/node/integrations/mongo.ts similarity index 100% rename from packages/tracing/src/integrations/node/mongo.ts rename to packages/tracing/src/node/integrations/mongo.ts diff --git a/packages/tracing/src/integrations/node/mysql.ts b/packages/tracing/src/node/integrations/mysql.ts similarity index 100% rename from packages/tracing/src/integrations/node/mysql.ts rename to packages/tracing/src/node/integrations/mysql.ts diff --git a/packages/tracing/src/integrations/node/postgres.ts b/packages/tracing/src/node/integrations/postgres.ts similarity index 100% rename from packages/tracing/src/integrations/node/postgres.ts rename to packages/tracing/src/node/integrations/postgres.ts diff --git a/packages/tracing/src/integrations/node/prisma.ts b/packages/tracing/src/node/integrations/prisma.ts similarity index 100% rename from packages/tracing/src/integrations/node/prisma.ts rename to packages/tracing/src/node/integrations/prisma.ts diff --git a/packages/tracing/src/integrations/node/utils/node-utils.ts b/packages/tracing/src/node/integrations/utils/node-utils.ts similarity index 100% rename from packages/tracing/src/integrations/node/utils/node-utils.ts rename to packages/tracing/src/node/integrations/utils/node-utils.ts diff --git a/packages/tracing/test/integrations/apollo-nestjs.test.ts b/packages/tracing/test/integrations/apollo-nestjs.test.ts index 4eb173b9958a..981693875d7a 100644 --- a/packages/tracing/test/integrations/apollo-nestjs.test.ts +++ b/packages/tracing/test/integrations/apollo-nestjs.test.ts @@ -3,7 +3,7 @@ import { Hub, Scope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { Span } from '../../src'; -import { Apollo } from '../../src/integrations/node/apollo'; +import { Apollo } from '../../src/node/integrations/apollo'; import { getTestClient } from '../testutils'; type ApolloResolverGroup = { diff --git a/packages/tracing/test/integrations/apollo.test.ts b/packages/tracing/test/integrations/apollo.test.ts index 4a79fe227c9d..910c866505e8 100644 --- a/packages/tracing/test/integrations/apollo.test.ts +++ b/packages/tracing/test/integrations/apollo.test.ts @@ -3,7 +3,7 @@ import { Hub, Scope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { Span } from '../../src'; -import { Apollo } from '../../src/integrations/node/apollo'; +import { Apollo } from '../../src/node/integrations/apollo'; import { getTestClient } from '../testutils'; type ApolloResolverGroup = { diff --git a/packages/tracing/test/integrations/graphql.test.ts b/packages/tracing/test/integrations/graphql.test.ts index db59187a6c7b..5d61a4acd5cb 100644 --- a/packages/tracing/test/integrations/graphql.test.ts +++ b/packages/tracing/test/integrations/graphql.test.ts @@ -3,7 +3,7 @@ import { Hub, Scope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { Span } from '../../src'; -import { GraphQL } from '../../src/integrations/node/graphql'; +import { GraphQL } from '../../src/node/integrations/graphql'; import { getTestClient } from '../testutils'; const GQLExecute = { diff --git a/packages/tracing/test/integrations/node/mongo.test.ts b/packages/tracing/test/integrations/node/mongo.test.ts index 84b1071c2f3c..5c3dd11255c4 100644 --- a/packages/tracing/test/integrations/node/mongo.test.ts +++ b/packages/tracing/test/integrations/node/mongo.test.ts @@ -3,7 +3,7 @@ import { Hub, Scope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { Span } from '../../../src'; -import { Mongo } from '../../../src/integrations/node/mongo'; +import { Mongo } from '../../../src/node/integrations/mongo'; import { getTestClient } from '../../testutils'; class Collection { diff --git a/packages/tracing/test/integrations/node/postgres.test.ts b/packages/tracing/test/integrations/node/postgres.test.ts index 57e655bd1a99..08aa64cf368d 100644 --- a/packages/tracing/test/integrations/node/postgres.test.ts +++ b/packages/tracing/test/integrations/node/postgres.test.ts @@ -3,7 +3,7 @@ import { Hub, Scope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { Span } from '../../../src'; -import { Postgres } from '../../../src/integrations/node/postgres'; +import { Postgres } from '../../../src/node/integrations/postgres'; import { getTestClient } from '../../testutils'; class PgClient { diff --git a/packages/tracing/test/integrations/node/prisma.test.ts b/packages/tracing/test/integrations/node/prisma.test.ts index b4866c31f15f..95892f9c1686 100644 --- a/packages/tracing/test/integrations/node/prisma.test.ts +++ b/packages/tracing/test/integrations/node/prisma.test.ts @@ -3,7 +3,7 @@ import { Hub, Scope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { Span } from '../../../src'; -import { Prisma } from '../../../src/integrations/node/prisma'; +import { Prisma } from '../../../src/node/integrations/prisma'; import { getTestClient } from '../../testutils'; type PrismaMiddleware = (params: unknown, next: (params?: unknown) => Promise) => Promise; diff --git a/scripts/prepack.ts b/scripts/prepack.ts index ace6846db457..bcad9dee0ef8 100644 --- a/scripts/prepack.ts +++ b/scripts/prepack.ts @@ -13,14 +13,33 @@ const NPM_BUILD_DIR = 'build/npm'; const BUILD_DIR = 'build'; const NPM_IGNORE = fs.existsSync('.npmignore') ? '.npmignore' : '../../.npmignore'; -const ASSETS = ['README.md', 'LICENSE', 'package.json', NPM_IGNORE]; -const ENTRY_POINTS = ['main', 'module', 'types', 'browser']; +const ASSETS = ['README.md', 'LICENSE', 'package.json', NPM_IGNORE] as const; +const ENTRY_POINTS = ['main', 'module', 'types', 'browser'] as const; +const EXPORT_MAP_ENTRY_POINT = 'exports'; +const TYPES_VERSIONS_ENTRY_POINT = 'typesVersions'; const packageWithBundles = process.argv.includes('--bundles'); const buildDir = packageWithBundles ? NPM_BUILD_DIR : BUILD_DIR; +type PackageJsonEntryPoints = Record; + +interface PackageJson extends Record, PackageJsonEntryPoints { + [EXPORT_MAP_ENTRY_POINT]: { + [key: string]: { + import: string; + require: string; + types: string; + }; + }; + [TYPES_VERSIONS_ENTRY_POINT]: { + [key: string]: { + [key: string]: string[]; + }; + }; +} + // eslint-disable-next-line @typescript-eslint/no-var-requires -const pkgJson: { [key: string]: unknown } = require(path.resolve('package.json')); +const pkgJson: PackageJson = require(path.resolve('package.json')); // check if build dir exists if (!fs.existsSync(path.resolve(buildDir))) { @@ -44,13 +63,29 @@ ASSETS.forEach(asset => { // package.json modifications const newPackageJsonPath = path.resolve(buildDir, 'package.json'); // eslint-disable-next-line @typescript-eslint/no-var-requires -const newPkgJson: { [key: string]: unknown } = require(newPackageJsonPath); +const newPkgJson: PackageJson = require(newPackageJsonPath); // modify entry points to point to correct paths (i.e. strip out the build directory) ENTRY_POINTS.filter(entryPoint => newPkgJson[entryPoint]).forEach(entryPoint => { - newPkgJson[entryPoint] = (newPkgJson[entryPoint] as string).replace(`${buildDir}/`, ''); + newPkgJson[entryPoint] = newPkgJson[entryPoint].replace(`${buildDir}/`, ''); }); +if (newPkgJson[EXPORT_MAP_ENTRY_POINT]) { + Object.entries(newPkgJson[EXPORT_MAP_ENTRY_POINT]).forEach(([key, val]) => { + newPkgJson[EXPORT_MAP_ENTRY_POINT][key] = Object.entries(val).reduce((acc, [key, val]) => { + return { ...acc, [key]: val.replace(`${buildDir}/`, '') }; + }, {} as typeof val); + }); +} + +if (newPkgJson[TYPES_VERSIONS_ENTRY_POINT]) { + Object.entries(newPkgJson[TYPES_VERSIONS_ENTRY_POINT]).forEach(([key, val]) => { + newPkgJson[TYPES_VERSIONS_ENTRY_POINT][key] = Object.entries(val).reduce((acc, [key, val]) => { + return { ...acc, [key]: val.map(v => v.replace(`${buildDir}/`, '')) }; + }, {}); + }); +} + delete newPkgJson.scripts; delete newPkgJson.volta; delete newPkgJson.jest;