From 8cfaed409307f05c248baf7af055f1901f731021 Mon Sep 17 00:00:00 2001 From: vsevolod arutyunov Date: Mon, 4 Dec 2023 15:33:27 +0300 Subject: [PATCH] feat(breadcrumb-plugin): extract plugin to the package BREAKING CHANGE: breadcrumb is not available in @micro-sentry/browser anymore --- libs/breadcrumb-plugin/.eslintrc.json | 5 ++ libs/breadcrumb-plugin/jest.config.ts | 24 +++++++ libs/breadcrumb-plugin/ng-package.json | 7 ++ libs/breadcrumb-plugin/package.json | 33 +++++++++ libs/breadcrumb-plugin/project.json | 67 +++++++++++++++++++ libs/breadcrumb-plugin/src/index.ts | 1 + .../src/lib}/breadcrumb-plugin.ts | 16 +++-- .../src/lib/utils/fetch-utils.ts | 0 .../src/lib/utils/fill.ts | 0 .../src/lib/utils/get-element-selector.ts | 0 .../src/lib/utils/html-tree-as-path.ts | 0 .../src/lib/utils/parse-url.ts | 0 .../src/lib/utils/safe-join.ts | 0 libs/breadcrumb-plugin/src/test-setup.ts | 14 ++++ libs/breadcrumb-plugin/tsconfig.json | 19 ++++++ libs/breadcrumb-plugin/tsconfig.lib.json | 25 +++++++ libs/breadcrumb-plugin/tsconfig.lib.prod.json | 12 ++++ libs/breadcrumb-plugin/tsconfig.spec.json | 10 +++ libs/browser/src/index.ts | 2 +- libs/browser/src/lib/models/state.ts | 1 - scripts/prerelease.js | 10 +-- tsconfig.base.json | 3 + 22 files changed, 236 insertions(+), 13 deletions(-) create mode 100644 libs/breadcrumb-plugin/.eslintrc.json create mode 100644 libs/breadcrumb-plugin/jest.config.ts create mode 100644 libs/breadcrumb-plugin/ng-package.json create mode 100644 libs/breadcrumb-plugin/package.json create mode 100644 libs/breadcrumb-plugin/project.json create mode 100644 libs/breadcrumb-plugin/src/index.ts rename libs/{browser/src/lib/plugins => breadcrumb-plugin/src/lib}/breadcrumb-plugin.ts (96%) rename libs/{browser => breadcrumb-plugin}/src/lib/utils/fetch-utils.ts (100%) rename libs/{browser => breadcrumb-plugin}/src/lib/utils/fill.ts (100%) rename libs/{browser => breadcrumb-plugin}/src/lib/utils/get-element-selector.ts (100%) rename libs/{browser => breadcrumb-plugin}/src/lib/utils/html-tree-as-path.ts (100%) rename libs/{browser => breadcrumb-plugin}/src/lib/utils/parse-url.ts (100%) rename libs/{browser => breadcrumb-plugin}/src/lib/utils/safe-join.ts (100%) create mode 100644 libs/breadcrumb-plugin/src/test-setup.ts create mode 100644 libs/breadcrumb-plugin/tsconfig.json create mode 100644 libs/breadcrumb-plugin/tsconfig.lib.json create mode 100644 libs/breadcrumb-plugin/tsconfig.lib.prod.json create mode 100644 libs/breadcrumb-plugin/tsconfig.spec.json diff --git a/libs/breadcrumb-plugin/.eslintrc.json b/libs/breadcrumb-plugin/.eslintrc.json new file mode 100644 index 0000000..6c0f508 --- /dev/null +++ b/libs/breadcrumb-plugin/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "extends": "../../.eslintrc.json", + "ignorePatterns": ["!**/*"], + "rules": {} +} diff --git a/libs/breadcrumb-plugin/jest.config.ts b/libs/breadcrumb-plugin/jest.config.ts new file mode 100644 index 0000000..89e9a7a --- /dev/null +++ b/libs/breadcrumb-plugin/jest.config.ts @@ -0,0 +1,24 @@ +/* eslint-disable */ +export default { + displayName: 'breadcrumb-plugin', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: {}, + coverageDirectory: '../../coverage/libs/breadc', + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], + transform: { + '^.+.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + stringifyContentPathRegex: '\\.(html|svg)$', + + tsconfig: '/tsconfig.spec.json', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'], +}; diff --git a/libs/breadcrumb-plugin/ng-package.json b/libs/breadcrumb-plugin/ng-package.json new file mode 100644 index 0000000..777890c --- /dev/null +++ b/libs/breadcrumb-plugin/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/libs/breadcrumb-plugin", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/libs/breadcrumb-plugin/package.json b/libs/breadcrumb-plugin/package.json new file mode 100644 index 0000000..a0641fc --- /dev/null +++ b/libs/breadcrumb-plugin/package.json @@ -0,0 +1,33 @@ +{ + "name": "@micro-sentry/breadcrumb-plugin", + "version": "0.0.0-development", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@micro-sentry/browser": "0.0.0-development" + }, + "license": "Apache-2.0", + "keywords": [ + "monitoring", + "errors", + "sentry", + "log", + "angular" + ], + "authors": [ + "Igor Katsuba ", + "Roman Sedov <79601794011@ya.ru>", + "Vsevolod Arutyunov " + ], + "contributors": [ + "Igor Katsuba ", + "Roman Sedov <79601794011@ya.ru>", + "Vsevolod Arutyunov " + ], + "repository": "https://github.com/taiga-family/micro-sentry", + "homepage": "https://github.com/taiga-family/micro-sentry", + "publishConfig": { + "access": "public" + } +} diff --git a/libs/breadcrumb-plugin/project.json b/libs/breadcrumb-plugin/project.json new file mode 100644 index 0000000..0b813e1 --- /dev/null +++ b/libs/breadcrumb-plugin/project.json @@ -0,0 +1,67 @@ +{ + "name": "breadcrumb-plugin", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "libs/breadcrumb-plugin/src", + "prefix": "micro-sentry", + "targets": { + "build": { + "executor": "@nx/angular:package", + "options": { + "tsConfig": "libs/breadcrumb-plugin/tsconfig.lib.json", + "project": "libs/breadcrumb-plugin/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/breadcrumb-plugin/tsconfig.lib.prod.json" + } + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "options": { + "lintFilePatterns": ["libs/breadcrumb-plugin/src/**/*.ts"] + } + }, + "test": { + "executor": "@nx/jest:jest", + "options": { + "jestConfig": "libs/breadcrumb-plugin/jest.config.ts" + }, + "outputs": ["{workspaceRoot}/coverage/libs/breadcrumb-plugin"] + }, + "semrel": { + "executor": "@ng-builders/semrel:release", + "options": { + "npm": { + "pkgRoot": "dist/libs/breadcrumb-plugin" + }, + "branches": [ + "+([0-9])?(.{+([0-9]),x}).x", + "main", + "next", + "next-major", + { + "name": "beta", + "prerelease": true + }, + { + "name": "alpha", + "prerelease": true + } + ] + } + }, + "release": { + "executor": "nx:run-commands", + "options": { + "commands": [ + "nx build breadcrumb-plugin --configuration production", + "nx semrel breadcrumb-plugin" + ], + "parallel": false + } + } + }, + "tags": [] +} diff --git a/libs/breadcrumb-plugin/src/index.ts b/libs/breadcrumb-plugin/src/index.ts new file mode 100644 index 0000000..d34841d --- /dev/null +++ b/libs/breadcrumb-plugin/src/index.ts @@ -0,0 +1 @@ +export * from './lib/breadcrumb-plugin'; diff --git a/libs/browser/src/lib/plugins/breadcrumb-plugin.ts b/libs/breadcrumb-plugin/src/lib/breadcrumb-plugin.ts similarity index 96% rename from libs/browser/src/lib/plugins/breadcrumb-plugin.ts rename to libs/breadcrumb-plugin/src/lib/breadcrumb-plugin.ts index a2de3dc..bb3bcbe 100644 --- a/libs/browser/src/lib/plugins/breadcrumb-plugin.ts +++ b/libs/breadcrumb-plugin/src/lib/breadcrumb-plugin.ts @@ -1,15 +1,17 @@ -import { MicroSentryPlugin } from '../models/plugin'; -import { BrowserMicroSentryClient } from '../services/browser-micro-sentry-client'; -import { fill } from '../utils/fill'; +import { + BrowserMicroSentryClient, + MicroSentryPlugin, +} from '@micro-sentry/browser'; import { Severity } from '@micro-sentry/core'; -import { parseUrl } from '../utils/parse-url'; +import { fill } from './utils/fill'; +import { htmlTreeAsString } from './utils/html-tree-as-path'; import { getFetchMethod, getFetchUrl, supportsNativeFetch, -} from '../utils/fetch-utils'; -import { htmlTreeAsString } from '../utils/html-tree-as-path'; -import { safeJoin } from '../utils/safe-join'; +} from './utils/fetch-utils'; +import { safeJoin } from './utils/safe-join'; +import { parseUrl } from './utils/parse-url'; export class BreadcrumbPlugin implements MicroSentryPlugin { private subscriptions: (() => void)[] = []; diff --git a/libs/browser/src/lib/utils/fetch-utils.ts b/libs/breadcrumb-plugin/src/lib/utils/fetch-utils.ts similarity index 100% rename from libs/browser/src/lib/utils/fetch-utils.ts rename to libs/breadcrumb-plugin/src/lib/utils/fetch-utils.ts diff --git a/libs/browser/src/lib/utils/fill.ts b/libs/breadcrumb-plugin/src/lib/utils/fill.ts similarity index 100% rename from libs/browser/src/lib/utils/fill.ts rename to libs/breadcrumb-plugin/src/lib/utils/fill.ts diff --git a/libs/browser/src/lib/utils/get-element-selector.ts b/libs/breadcrumb-plugin/src/lib/utils/get-element-selector.ts similarity index 100% rename from libs/browser/src/lib/utils/get-element-selector.ts rename to libs/breadcrumb-plugin/src/lib/utils/get-element-selector.ts diff --git a/libs/browser/src/lib/utils/html-tree-as-path.ts b/libs/breadcrumb-plugin/src/lib/utils/html-tree-as-path.ts similarity index 100% rename from libs/browser/src/lib/utils/html-tree-as-path.ts rename to libs/breadcrumb-plugin/src/lib/utils/html-tree-as-path.ts diff --git a/libs/browser/src/lib/utils/parse-url.ts b/libs/breadcrumb-plugin/src/lib/utils/parse-url.ts similarity index 100% rename from libs/browser/src/lib/utils/parse-url.ts rename to libs/breadcrumb-plugin/src/lib/utils/parse-url.ts diff --git a/libs/browser/src/lib/utils/safe-join.ts b/libs/breadcrumb-plugin/src/lib/utils/safe-join.ts similarity index 100% rename from libs/browser/src/lib/utils/safe-join.ts rename to libs/breadcrumb-plugin/src/lib/utils/safe-join.ts diff --git a/libs/breadcrumb-plugin/src/test-setup.ts b/libs/breadcrumb-plugin/src/test-setup.ts new file mode 100644 index 0000000..2d05e03 --- /dev/null +++ b/libs/breadcrumb-plugin/src/test-setup.ts @@ -0,0 +1,14 @@ +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), + { teardown: { destroyAfterEach: false } } +); diff --git a/libs/breadcrumb-plugin/tsconfig.json b/libs/breadcrumb-plugin/tsconfig.json new file mode 100644 index 0000000..96a558f --- /dev/null +++ b/libs/breadcrumb-plugin/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.lib.prod.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2020" + } +} diff --git a/libs/breadcrumb-plugin/tsconfig.lib.json b/libs/breadcrumb-plugin/tsconfig.lib.json new file mode 100644 index 0000000..5aa6ecd --- /dev/null +++ b/libs/breadcrumb-plugin/tsconfig.lib.json @@ -0,0 +1,25 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "ES2022", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"], + "useDefineForClassFields": false + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": [ + "src/test-setup.ts", + "**/*.spec.ts", + "**/*.test.ts", + "jest.config.ts" + ], + "include": ["**/*.ts"] +} diff --git a/libs/breadcrumb-plugin/tsconfig.lib.prod.json b/libs/breadcrumb-plugin/tsconfig.lib.prod.json new file mode 100644 index 0000000..1f041c9 --- /dev/null +++ b/libs/breadcrumb-plugin/tsconfig.lib.prod.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false, + "target": "ES2022", + "useDefineForClassFields": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + }, + "exclude": ["jest.config.ts"] +} diff --git a/libs/breadcrumb-plugin/tsconfig.spec.json b/libs/breadcrumb-plugin/tsconfig.spec.json new file mode 100644 index 0000000..b6347c6 --- /dev/null +++ b/libs/breadcrumb-plugin/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.test.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/libs/browser/src/index.ts b/libs/browser/src/index.ts index 7339ec9..ed40e82 100644 --- a/libs/browser/src/index.ts +++ b/libs/browser/src/index.ts @@ -1,3 +1,3 @@ export * from './lib/models/browser-sentry-client-options'; +export * from './lib/models/plugin'; export * from './lib/services/browser-micro-sentry-client'; -export * from './lib/plugins/breadcrumb-plugin'; diff --git a/libs/browser/src/lib/models/state.ts b/libs/browser/src/lib/models/state.ts index d220e49..716b65e 100644 --- a/libs/browser/src/lib/models/state.ts +++ b/libs/browser/src/lib/models/state.ts @@ -1,6 +1,5 @@ import { SentryRequestBody } from '@micro-sentry/core'; -// eslint-disable-next-line @typescript-eslint/no-empty-interface export interface State extends Partial< Pick< diff --git a/scripts/prerelease.js b/scripts/prerelease.js index 6ddfd32..e6dd815 100644 --- a/scripts/prerelease.js +++ b/scripts/prerelease.js @@ -1,7 +1,8 @@ +const { dir } = require('console'); const fs = require('fs'); -const DIST_LIB_PATH = '/common/'; const README_PATH = 'README.md'; +const DIRS = fs.readdirSync('libs'); copyExtraFiles(); @@ -9,9 +10,10 @@ function copyExtraFiles() { if (!fs.existsSync(README_PATH)) { throw new Error('README do not exit'); } else { - copyReadmeIntoLibFolder(README_PATH, 'core'); - copyReadmeIntoLibFolder(README_PATH, 'browser'); - copyReadmeIntoLibFolder(README_PATH, 'angular'); + DIRS.forEach((dir) => { + console.log(dir); + copyReadmeIntoLibFolder(README_PATH, dir); + }); } } diff --git a/tsconfig.base.json b/tsconfig.base.json index cc29f98..572a441 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -18,6 +18,9 @@ "strict": true, "paths": { "@micro-sentry/angular": ["libs/angular/src/index.ts"], + "@micro-sentry/breadcrumb-plugin": [ + "libs/breadcrumb-plugin/src/index.ts" + ], "@micro-sentry/browser": ["libs/browser/src/index.ts"], "@micro-sentry/core": ["libs/core/src/index.ts"] }