Skip to content

Commit 7d0b4ef

Browse files
authored
fix: Internal require, Fix integration exports (#1679)
* fix: Do not reexport integration setup functions * fix: Also ship src with npm package * fix: Remove shim for domain * fix: Tests * meta: Changelog * fix: Add bundler safe import * fix: Linter
1 parent 41e12c4 commit 7d0b4ef

File tree

18 files changed

+259
-116
lines changed

18 files changed

+259
-116
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# Changelog
22

33
## Unreleased
4+
5+
## 4.2.3
6+
7+
- [core]: Several internal fixes regarding integration, exports and domain.
8+
49
## 4.2.2
510

611
- [core]: "De-deprecate" name of `Integration` interface.

packages/browser/.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
*
22
!/dist/**/*
3+
!/src/**/*
34
!/build/**/*

packages/browser/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
"rollup-plugin-license": "^0.6.0",
4343
"rollup-plugin-node-resolve": "^3.3.0",
4444
"rollup-plugin-npm": "^2.0.0",
45-
"rollup-plugin-shim": "^1.0.0",
4645
"rollup-plugin-typescript2": "^0.13.0",
4746
"rollup-plugin-uglify": "^3.0.0",
4847
"sinon": "^5.0.3",

packages/browser/rollup.config.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import uglify from 'rollup-plugin-uglify';
33
import resolve from 'rollup-plugin-node-resolve';
44
import typescript from 'rollup-plugin-typescript2';
55
import license from 'rollup-plugin-license';
6-
import shim from 'rollup-plugin-shim';
76

87
const commitHash = require('child_process')
98
.execSync('git rev-parse --short HEAD', { encoding: 'utf-8' })
@@ -18,9 +17,6 @@ const bundleConfig = {
1817
},
1918
context: 'window',
2019
plugins: [
21-
shim({
22-
domain: `export default {}`,
23-
}),
2420
typescript({
2521
tsconfig: 'tsconfig.build.json',
2622
tsconfigOverride: { compilerOptions: { declaration: false } },

packages/core/.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
*
22
!/dist/**/*
3+
!/src/**/*

packages/core/src/baseclient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { consoleSandbox, uuid4 } from '@sentry/utils/misc';
1616
import { truncate } from '@sentry/utils/string';
1717
import { BackendClass } from './basebackend';
1818
import { Dsn } from './dsn';
19-
import { IntegrationIndex, setupIntegrations } from './integrations';
19+
import { IntegrationIndex, setupIntegrations } from './integration';
2020
import { Backend, Client, Options } from './interfaces';
2121

2222
/**

packages/core/src/integration.ts

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import { Integration } from '@sentry/types';
2+
import { logger } from '@sentry/utils/logger';
3+
import { Options } from './interfaces';
4+
5+
export const installedIntegrations: string[] = [];
6+
7+
/** Map of integrations assigned to a client */
8+
export interface IntegrationIndex {
9+
[key: string]: Integration;
10+
}
11+
12+
/** Gets integration to install */
13+
export function getIntegrationsToSetup(options: Options): Integration[] {
14+
const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];
15+
const userIntegrations = options.integrations;
16+
let integrations: Integration[] = [];
17+
if (Array.isArray(userIntegrations)) {
18+
const userIntegrationsNames = userIntegrations.map(i => i.name);
19+
const pickedIntegrationsNames = [];
20+
21+
// Leave only unique default integrations, that were not overridden with provided user integrations
22+
for (const defaultIntegration of defaultIntegrations) {
23+
if (
24+
userIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 &&
25+
pickedIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1
26+
) {
27+
integrations.push(defaultIntegration);
28+
pickedIntegrationsNames.push(getIntegrationName(defaultIntegration));
29+
}
30+
}
31+
32+
// Don't add same user integration twice
33+
for (const userIntegration of userIntegrations) {
34+
if (pickedIntegrationsNames.indexOf(getIntegrationName(userIntegration)) === -1) {
35+
integrations.push(userIntegration);
36+
pickedIntegrationsNames.push(getIntegrationName(userIntegration));
37+
}
38+
}
39+
} else if (typeof userIntegrations === 'function') {
40+
integrations = userIntegrations(defaultIntegrations);
41+
integrations = Array.isArray(integrations) ? integrations : [integrations];
42+
} else {
43+
return [...defaultIntegrations];
44+
}
45+
46+
return integrations;
47+
}
48+
49+
/** Setup given integration */
50+
export function setupIntegration(integration: Integration, options: Options): void {
51+
if (installedIntegrations.indexOf(getIntegrationName(integration)) !== -1) {
52+
return;
53+
}
54+
55+
try {
56+
integration.setupOnce();
57+
} catch (_Oo) {
58+
/** @deprecated */
59+
// TODO: Remove in v5
60+
logger.warn(`Integration ${getIntegrationName(integration)}: The install method is deprecated. Use "setupOnce".`);
61+
62+
// tslint:disable:deprecation
63+
if (integration.install) {
64+
integration.install(options);
65+
}
66+
// tslint:enable:deprecation
67+
}
68+
69+
installedIntegrations.push(getIntegrationName(integration));
70+
logger.log(`Integration installed: ${getIntegrationName(integration)}`);
71+
}
72+
73+
/**
74+
* Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default
75+
* integrations are added unless they were already provided before.
76+
* @param integrations array of integration instances
77+
* @param withDefault should enable default integrations
78+
*/
79+
export function setupIntegrations<O extends Options>(options: O): IntegrationIndex {
80+
const integrations: IntegrationIndex = {};
81+
getIntegrationsToSetup(options).forEach(integration => {
82+
integrations[getIntegrationName(integration)] = integration;
83+
setupIntegration(integration, options);
84+
});
85+
return integrations;
86+
}
87+
88+
/**
89+
* Returns the integration static id.
90+
* @param integration Integration to retrieve id
91+
*/
92+
function getIntegrationName(integration: Integration): string {
93+
/**
94+
* @depracted
95+
*/
96+
// tslint:disable-next-line:no-unsafe-any
97+
return (integration as any).constructor.id || integration.name;
98+
}
Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,7 @@
1-
// tslint:disable:deprecation
2-
import { Integration } from '@sentry/types';
3-
import { logger } from '@sentry/utils/logger';
4-
import { Options } from '../interfaces';
5-
61
export { Dedupe } from './dedupe';
72
export { FunctionToString } from './functiontostring';
83
export { SDKInformation } from './sdkinformation';
94
export { InboundFilters } from './inboundfilters';
105

116
export { Debug } from './pluggable/debug';
127
export { RewriteFrames } from './pluggable/rewriteframes';
13-
14-
export const installedIntegrations: string[] = [];
15-
16-
/** Map of integrations assigned to a client */
17-
export interface IntegrationIndex {
18-
[key: string]: Integration;
19-
}
20-
21-
/** Gets integration to install */
22-
export function getIntegrationsToSetup(options: Options): Integration[] {
23-
const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];
24-
const userIntegrations = options.integrations;
25-
let integrations: Integration[] = [];
26-
if (Array.isArray(userIntegrations)) {
27-
const userIntegrationsNames = userIntegrations.map(i => i.name);
28-
const pickedIntegrationsNames = [];
29-
30-
// Leave only unique default integrations, that were not overridden with provided user integrations
31-
for (const defaultIntegration of defaultIntegrations) {
32-
if (
33-
userIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 &&
34-
pickedIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1
35-
) {
36-
integrations.push(defaultIntegration);
37-
pickedIntegrationsNames.push(getIntegrationName(defaultIntegration));
38-
}
39-
}
40-
41-
// Don't add same user integration twice
42-
for (const userIntegration of userIntegrations) {
43-
if (pickedIntegrationsNames.indexOf(getIntegrationName(userIntegration)) === -1) {
44-
integrations.push(userIntegration);
45-
pickedIntegrationsNames.push(getIntegrationName(userIntegration));
46-
}
47-
}
48-
} else if (typeof userIntegrations === 'function') {
49-
integrations = userIntegrations(defaultIntegrations);
50-
integrations = Array.isArray(integrations) ? integrations : [integrations];
51-
} else {
52-
return [...defaultIntegrations];
53-
}
54-
55-
return integrations;
56-
}
57-
58-
/** Setup given integration */
59-
export function setupIntegration(integration: Integration, options: Options): void {
60-
if (installedIntegrations.indexOf(getIntegrationName(integration)) !== -1) {
61-
return;
62-
}
63-
64-
try {
65-
integration.setupOnce();
66-
} catch (_Oo) {
67-
/** @deprecated */
68-
// TODO: Remove in v5
69-
logger.warn(`Integration ${getIntegrationName(integration)}: The install method is deprecated. Use "setupOnce".`);
70-
71-
if (integration.install) {
72-
integration.install(options);
73-
}
74-
}
75-
76-
installedIntegrations.push(getIntegrationName(integration));
77-
logger.log(`Integration installed: ${getIntegrationName(integration)}`);
78-
}
79-
80-
/**
81-
* Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default
82-
* integrations are added unless they were already provided before.
83-
* @param integrations array of integration instances
84-
* @param withDefault should enable default integrations
85-
*/
86-
export function setupIntegrations<O extends Options>(options: O): IntegrationIndex {
87-
const integrations: IntegrationIndex = {};
88-
getIntegrationsToSetup(options).forEach(integration => {
89-
integrations[getIntegrationName(integration)] = integration;
90-
setupIntegration(integration, options);
91-
});
92-
return integrations;
93-
}
94-
95-
/**
96-
* Returns the integration static id.
97-
* @param integration Integration to retrieve id
98-
*/
99-
function getIntegrationName(integration: Integration): string {
100-
/**
101-
* @depracted
102-
*/
103-
// tslint:disable-next-line:no-unsafe-any
104-
return (integration as any).constructor.id || integration.name;
105-
}

packages/core/test/lib/integrations/index.test.ts renamed to packages/core/test/lib/integration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// tslint:disable:deprecation
22
import { Integration } from '@sentry/types';
3-
import { getIntegrationsToSetup } from '../../../src/integrations';
3+
import { getIntegrationsToSetup } from '../../src/integration';
44

55
/** JSDoc */
66
class MockIntegration implements Integration {

packages/core/test/lib/sdk.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Integration } from '@sentry/types';
2-
import { installedIntegrations } from '../../src/integrations';
2+
import { installedIntegrations } from '../../src/integration';
33
import { initAndBind } from '../../src/sdk';
44
import { TestClient } from '../mocks/client';
55

0 commit comments

Comments
 (0)