Skip to content

Commit 4953027

Browse files
authored
sdk-core: use ESM modules (#266)
* sdk-core: change output to esm * sdk-core: update tests to use esm * update package-lock.json * browser: fix TimeHelper imports --------- Co-authored-by: Sebastian Alex <[email protected]>
1 parent 38c0ce5 commit 4953027

17 files changed

+118
-29
lines changed

package-lock.json

+37
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/browser/src/BacktraceBrowserSessionProvider.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { BacktraceSessionProvider, IdGenerator } from '@backtrace/sdk-core';
2-
import { TimeHelper } from '@backtrace/sdk-core/lib/common/TimeHelper';
1+
import { BacktraceSessionProvider, IdGenerator, TimeHelper } from '@backtrace/sdk-core';
32

43
export class BacktraceBrowserSessionProvider implements BacktraceSessionProvider {
54
/**

packages/browser/src/attributes/WebsiteAttributeProvider.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { BacktraceAttributeProvider } from '@backtrace/sdk-core';
2-
import { TimeHelper } from '@backtrace/sdk-core/lib/common/TimeHelper';
1+
import { BacktraceAttributeProvider, TimeHelper } from '@backtrace/sdk-core';
32

43
const PAGE_START_TIME = TimeHelper.now();
54

packages/browser/tests/metrics/persistentSessionProviderTests.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { TimeHelper } from '@backtrace/sdk-core/lib/common/TimeHelper';
1+
import { TimeHelper } from '@backtrace/sdk-core';
22
import { BacktraceBrowserSessionProvider } from '../../src/BacktraceBrowserSessionProvider';
33
describe('Session provider tests', () => {
44
it('Should generate a new uuid on new session', () => {

packages/sdk-core/jest.config.js

-6
This file was deleted.

packages/sdk-core/jest.config.mjs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/** @type {import('ts-jest').JestConfigWithTsJest} */
2+
export default {
3+
preset: 'ts-jest/presets/default-esm',
4+
testEnvironment: 'node',
5+
setupFiles: ['./jest.setup.mjs'],
6+
moduleNameMapper: {
7+
'^(\\.{1,2}/.*)\\.js$': '$1',
8+
},
9+
transform: {
10+
'^.+\\.tsx?$': [
11+
'ts-jest',
12+
{
13+
useESM: true,
14+
},
15+
],
16+
},
17+
};
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
import { jest } from '@jest/globals';
2+
global.jest = jest;
3+
14
global.BACKTRACE_AGENT_NAME = 'test';
25
global.BACKTRACE_AGENT_VERSION = 'test';

packages/sdk-core/package.json

+9-5
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22
"name": "@backtrace/sdk-core",
33
"version": "0.4.0",
44
"description": "Backtrace-JavaScript SDK core library",
5-
"main": "lib/index.js",
5+
"main": "lib/bundle.cjs",
6+
"module": "lib/bundle.mjs",
67
"types": "lib/index.d.ts",
8+
"type": "module",
79
"scripts": {
8-
"build": "tsc",
9-
"clean": "tsc -b --clean && rimraf \"lib\"",
10+
"build": "rollup -c rollup.config.mjs",
11+
"clean": "rimraf lib *.tsbuildinfo",
1012
"format": "prettier --write '**/*.ts'",
1113
"lint": "eslint . --ext .ts",
12-
"watch": "tsc -w",
13-
"test": "cross-env NODE_ENV=test jest"
14+
"watch": "npm run build -- --watch",
15+
"test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" NODE_NO_WARNINGS=1 NODE_ENV=test jest"
1416
},
1517
"repository": {
1618
"type": "git",
@@ -37,6 +39,8 @@
3739
"devDependencies": {
3840
"@types/jest": "^29.5.1",
3941
"jest": "^29.5.0",
42+
"rollup": "^4.21.0",
43+
"rollup-plugin-typescript2": "^0.36.0",
4044
"ts-jest": "^29.1.0",
4145
"typescript": "^5.0.4"
4246
}

packages/sdk-core/rollup.config.mjs

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import typescript from 'rollup-plugin-typescript2';
2+
3+
/** @type {import('rollup').RollupOptions} */
4+
export default {
5+
input: './src/index.ts',
6+
output: [
7+
{
8+
file: 'lib/bundle.mjs',
9+
format: 'esm',
10+
sourcemap: true,
11+
},
12+
{
13+
file: 'lib/bundle.cjs',
14+
format: 'cjs',
15+
sourcemap: true,
16+
},
17+
],
18+
external: [/node_modules/],
19+
plugins: [typescript({ tsconfig: './tsconfig.build.json' })],
20+
};

packages/sdk-core/src/modules/metrics/BacktraceMetrics.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export class BacktraceMetrics implements BacktraceModule {
2525
public readonly DEFAULT_UPDATE_INTERVAL = TimeHelper.convertSecondsToMilliseconds(30 * 60);
2626
public readonly DEFAULT_SERVER_URL = 'https://events.backtrace.io';
2727

28-
public readonly metricsHost: string = this._options.metricsSubmissionUrl ?? this.DEFAULT_SERVER_URL;
29-
private readonly _updateInterval: number = this._options.autoSendInterval ?? this.DEFAULT_UPDATE_INTERVAL;
28+
public readonly metricsHost: string;
29+
private readonly _updateInterval: number;
3030

3131
private _updateIntervalId?: ReturnType<typeof setTimeout>;
3232
private readonly _abortController: AbortController;
@@ -38,6 +38,9 @@ export class BacktraceMetrics implements BacktraceModule {
3838
private readonly _summedEventsSubmissionQueue: MetricsQueue<SummedEvent>,
3939
private readonly _uniqueEventsSubmissionQueue: MetricsQueue<UniqueEvent>,
4040
) {
41+
this.metricsHost = this._options.metricsSubmissionUrl ?? this.DEFAULT_SERVER_URL;
42+
this._updateInterval = this._options.autoSendInterval ?? this.DEFAULT_UPDATE_INTERVAL;
43+
4144
this._abortController = createAbortController();
4245
}
4346

packages/sdk-core/tests/database/databaseContextMemoryStorageTests.spec.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import assert from 'assert';
22
import path from 'path';
3+
import { fileURLToPath } from 'url';
34
import { BacktraceData, BacktraceDatabaseRecord, BacktraceReportSubmissionResult } from '../../src';
45
import { TimeHelper } from '../../src/common/TimeHelper';
56
import { BacktraceDatabase } from '../../src/modules/database/BacktraceDatabase';
@@ -14,7 +15,7 @@ describe('Database context memory storage tests', () => {
1415
// interface. However, if bug happen we want to be sure to not create
1516
// anything. Instead we want to fail loud and hard.
1617
createDatabaseDirectory: false,
17-
path: path.join(__dirname, 'database'),
18+
path: path.join(path.dirname(fileURLToPath(import.meta.url)), 'database'),
1819
};
1920

2021
afterEach(() => {

packages/sdk-core/tests/database/databaseContextValidationTests.spec.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import assert from 'assert';
22
import path from 'path';
3+
import { fileURLToPath } from 'url';
34
import { BacktraceDatabaseConfiguration, BacktraceReportSubmissionResult } from '../../src';
45
import { BacktraceDatabase } from '../../src/modules/database/BacktraceDatabase';
56
import { mockFileSystem } from '../_mocks/fileSystem';
@@ -14,7 +15,7 @@ describe('Database context validation tests', () => {
1415
// interface. However, if bug happen we want to be sure to not create
1516
// anything. Instead we want to fail loud and hard.
1617
createDatabaseDirectory: false,
17-
path: path.join(__dirname, 'database'),
18+
path: path.join(path.dirname(fileURLToPath(import.meta.url)), 'database'),
1819
};
1920

2021
afterEach(() => {

packages/sdk-core/tests/database/databaseRecordBatchTests.spec.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import path from 'path';
2+
import { fileURLToPath } from 'url';
23
import { BacktraceReportSubmissionResult } from '../../src';
34
import { mockFileSystem } from '../_mocks/fileSystem';
45
import { BacktraceTestClient } from '../mocks/BacktraceTestClient';
@@ -25,7 +26,7 @@ describe('Database record batch tests', () => {
2526
database: {
2627
enable: true,
2728
autoSend: true,
28-
path: path.join(__dirname, 'database'),
29+
path: path.join(path.dirname(fileURLToPath(import.meta.url)), 'database'),
2930
maximumRetries,
3031
retryInterval: 1000,
3132
},
@@ -58,7 +59,7 @@ describe('Database record batch tests', () => {
5859
database: {
5960
enable: true,
6061
autoSend: true,
61-
path: path.join(__dirname, 'database'),
62+
path: path.join(path.dirname(fileURLToPath(import.meta.url)), 'database'),
6263
maximumRetries,
6364
retryInterval: 1000,
6465
},

packages/sdk-core/tests/database/databaseSendTests.spec.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import path from 'path';
2+
import { fileURLToPath } from 'url';
23
import { BacktraceDatabaseConfiguration, BacktraceReportSubmissionResult } from '../../src';
34
import { BacktraceDatabase } from '../../src/modules/database/BacktraceDatabase';
45
import { mockFileSystem } from '../_mocks/fileSystem';
@@ -15,7 +16,7 @@ describe('Database send tests', () => {
1516
// interface. However, if bug happen we want to be sure to not create
1617
// anything. Instead we want to fail loud and hard.
1718
createDatabaseDirectory: false,
18-
path: path.join(__dirname, 'database'),
19+
path: path.join(path.dirname(fileURLToPath(import.meta.url)), 'database'),
1920
};
2021

2122
describe('Flush', () => {

packages/sdk-core/tests/database/databaseStorageFlowTests.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import path from 'path';
2+
import { fileURLToPath } from 'url';
23
import { BacktraceReportSubmissionResult } from '../../src';
34
import { BacktraceDatabase } from '../../src/modules/database/BacktraceDatabase';
45
import { mockFileSystem } from '../_mocks/fileSystem';
56
import { BacktraceTestClient } from '../mocks/BacktraceTestClient';
6-
77
describe('Database storage provider flow tests', () => {
88
const testDatabaseSettings = {
99
enable: true,
@@ -12,7 +12,7 @@ describe('Database storage provider flow tests', () => {
1212
// interface. However, if bug happen we want to be sure to not create
1313
// anything. Instead we want to fail loud and hard.
1414
createDatabaseDirectory: false,
15-
path: path.join(__dirname, 'database'),
15+
path: path.join(path.dirname(fileURLToPath(import.meta.url)), 'database'),
1616
};
1717

1818
afterEach(() => {

packages/sdk-core/tsconfig.build.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"exclude": ["node_modules", "tests", "lib"],
4+
"compilerOptions": {
5+
"rootDir": "./src",
6+
"outDir": "./lib"
7+
}
8+
}

packages/sdk-core/tsconfig.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
{
22
"extends": "../../tsconfig.base.json",
3-
"include": ["./src"],
43
"compilerOptions": {
5-
"rootDir": "./src",
64
"composite": true,
7-
"outDir": "./lib"
5+
"target": "ESNext",
6+
"module": "ESNext",
7+
"moduleResolution": "Bundler"
88
},
9-
"exclude": ["node_modules", "tests", "lib"]
9+
"include": ["src", "tests"],
10+
"exclude": ["node_modules", "lib"]
1011
}

0 commit comments

Comments
 (0)