From fcdb5af1fffbdf87a5d0766c6546de0dc413e326 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 12 Jul 2023 17:14:46 +0200 Subject: [PATCH] feat: simplify --- build.config.ts | 1 - package.json | 6 --- patches/stackframe@1.3.4.patch | 15 ------ pnpm-lock.yaml | 40 +++----------- src/index.ts | 95 +++++++--------------------------- 5 files changed, 24 insertions(+), 133 deletions(-) delete mode 100644 patches/stackframe@1.3.4.patch diff --git a/build.config.ts b/build.config.ts index 0f67978..0bd008c 100644 --- a/build.config.ts +++ b/build.config.ts @@ -8,6 +8,5 @@ export default defineBuildConfig({ clean: true, rollup: { emitCJS: true, - inlineDependencies: true, }, }) diff --git a/package.json b/package.json index e2a2d24..630030a 100644 --- a/package.json +++ b/package.json @@ -64,17 +64,11 @@ "pnpm": "^8.6.7", "rimraf": "^5.0.1", "simple-git-hooks": "^2.8.1", - "stackframe": "^1.3.4", "typescript": "^5.1.6", "unbuild": "^1.2.1", "vite": "^4.4.3", "vitest": "^0.33.0" }, - "pnpm": { - "patchedDependencies": { - "stackframe@1.3.4": "patches/stackframe@1.3.4.patch" - } - }, "simple-git-hooks": { "pre-commit": "pnpm lint-staged" }, diff --git a/patches/stackframe@1.3.4.patch b/patches/stackframe@1.3.4.patch deleted file mode 100644 index 930c22f..0000000 --- a/patches/stackframe@1.3.4.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/package.json b/package.json -index 3076702264a861420fa6655467d280dc143c7e90..c17d4162437651778c2d1272f62886de7d0a8258 100644 ---- a/package.json -+++ b/package.json -@@ -41,7 +41,6 @@ - "url": "https://github.com/stacktracejs/stackframe/issues" - }, - "main": "./stackframe.js", -- "typings": "./stackframe.d.ts", - "files": [ - "LICENSE", - "README.md", -diff --git a/stackframe.d.ts b/stackframe.d.ts -deleted file mode 100644 -index 76356ecec8143b32f39282accb9cfd2d70b88a4b..0000000000000000000000000000000000000000 \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb593e7..ea4279a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - stackframe@1.3.4: - hash: v2yttnkn5rchk7cqhg4f44rdmy - path: patches/stackframe@1.3.4.patch - importers: .: @@ -46,9 +41,6 @@ importers: simple-git-hooks: specifier: ^2.8.1 version: 2.8.1 - stackframe: - specifier: ^1.3.4 - version: 1.3.4(patch_hash=v2yttnkn5rchk7cqhg4f44rdmy) typescript: specifier: ^5.1.6 version: 5.1.6 @@ -1013,7 +1005,7 @@ packages: deepmerge: 4.2.2 is-builtin-module: 3.2.1 is-module: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.2 rollup: 3.20.2 dev: true @@ -1202,7 +1194,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.1 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -1223,7 +1215,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.1 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -1244,7 +1236,7 @@ packages: '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.6) eslint: 8.44.0 eslint-scope: 5.1.1 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -1264,7 +1256,7 @@ packages: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) eslint: 8.44.0 eslint-scope: 5.1.1 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -2928,12 +2920,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - dev: true - /is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: @@ -3857,15 +3843,6 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true @@ -4128,11 +4105,6 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true - /stackframe@1.3.4(patch_hash=v2yttnkn5rchk7cqhg4f44rdmy): - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: true - patched: true - /std-env@3.3.3: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: true @@ -4594,7 +4566,7 @@ packages: espree: 9.5.2 esquery: 1.5.0 lodash: 4.17.21 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true diff --git a/src/index.ts b/src/index.ts index 271b71f..7786d78 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,74 +2,17 @@ * Port from https://github.com/stacktracejs/error-stack-parser-es */ -// @ts-expect-error patched to remove the broken type -import _StackFrameConstructor from 'stackframe' - -const StackFrameConstructor = _StackFrameConstructor as unknown as StackFrame - -export interface StackFrameOptions { - isConstructor?: boolean - isEval?: boolean - isNative?: boolean - isToplevel?: boolean - columnNumber?: number - lineNumber?: number - fileName?: string - functionName?: string - source?: string - args?: any[] - evalOrigin?: StackFrame -} - export interface StackFrame { - // eslint-disable-next-line @typescript-eslint/no-misused-new - new (obj: StackFrameOptions): StackFrame - args?: any[] - getArgs(): any[] | undefined - setArgs(args: any[]): void - - evalOrigin?: StackFrame - getEvalOrigin(): StackFrame | undefined - setEvalOrigin(stackframe: StackFrame): void - isConstructor?: boolean - getIsConstructor(): boolean | undefined - setIsConstructor(isConstructor: boolean): void - isEval?: boolean - getIsEval(): boolean | undefined - setIsEval(isEval: boolean): void - isNative?: boolean - getIsNative(): boolean | undefined - setIsNative(isNative: boolean): void - isToplevel?: boolean - getIsToplevel(): boolean | undefined - setIsToplevel(isToplevel: boolean): void - columnNumber?: number - getColumnNumber(): number | undefined - setColumnNumber(columnNumber: number): void - lineNumber?: number - getLineNumber(): number | undefined - setLineNumber(lineNumber: number): void - fileName?: string - getFileName(): string | undefined - setFileName(fileName: string): void - functionName?: string - getFunctionName(): string | undefined - setFunctionName(functionName: string): void - source?: string - getSource(): string | undefined - setSource(source: string): void - - toString(): string } const FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+:\d+/ @@ -114,7 +57,7 @@ export function parseV8OrIE(error: Error) { return !!line.match(CHROME_IE_STACK_REGEXP) }) - return filtered.map((line) => { + return filtered.map((line): StackFrame => { if (line.includes('(eval ')) { // Throw away eval information until we implement stacktrace.js/stackframe#8 line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^()]*)|(,.*$)/g, '') @@ -134,13 +77,13 @@ export function parseV8OrIE(error: Error) { const functionName = (location && sanitizedLine) || undefined const fileName = ['eval', ''].includes(locationParts[0]) ? undefined : locationParts[0] - return new StackFrameConstructor({ + return { functionName, fileName, lineNumber: locationParts[1] ? +locationParts[1] : undefined, columnNumber: locationParts[2] ? +locationParts[2] : undefined, source: line, - }) + } }) } @@ -150,16 +93,16 @@ export function parseFFOrSafari(error: Error) { return !line.match(SAFARI_NATIVE_CODE_REGEXP) }) - return filtered.map((line) => { + return filtered.map((line): StackFrame => { // Throw away eval information until we implement stacktrace.js/stackframe#8 if (line.includes(' > eval')) line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ':$1') if (!line.includes('@') && !line.includes(':')) { // Safari eval frames only have function names and nothing else - return new StackFrameConstructor({ + return { functionName: line, - }) + } } else { const functionNameRegex = /((.*".+"[^@]*)?[^@]*)(?:@)/ @@ -167,13 +110,13 @@ export function parseFFOrSafari(error: Error) { const functionName = (matches && matches[1]) ? matches[1] : undefined const locationParts = extractLocation(line.replace(functionNameRegex, '')) - return new StackFrameConstructor({ + return { functionName, fileName: locationParts[0], lineNumber: locationParts[1] ? +locationParts[1] : undefined, columnNumber: locationParts[2] ? +locationParts[2] : undefined, source: line, - }) + } } }) } @@ -198,11 +141,11 @@ export function parseOpera9(e: Error) { for (let i = 2, len = lines.length; i < len; i += 2) { const match = lineRE.exec(lines[i]) if (match) { - result.push(new StackFrameConstructor({ + result.push({ fileName: match[2], lineNumber: +match[1], source: lines[i], - })) + }) } } @@ -218,14 +161,12 @@ export function parseOpera10(e: Error) { for (let i = 0, len = lines.length; i < len; i += 2) { const match = lineRE.exec(lines[i]) if (match) { - result.push( - new StackFrameConstructor({ - functionName: match[3] || undefined, - fileName: match[2], - lineNumber: match[1] ? +match[1] : undefined, - source: lines[i], - }), - ) + result.push({ + functionName: match[3] || undefined, + fileName: match[2], + lineNumber: match[1] ? +match[1] : undefined, + source: lines[i], + }) } } @@ -254,13 +195,13 @@ export function parseOpera11(error: Error) { ? undefined : argsRaw.split(',') - return new StackFrameConstructor({ + return { functionName, args, fileName: locationParts[0], lineNumber: locationParts[1] ? +locationParts[1] : undefined, columnNumber: locationParts[2] ? +locationParts[2] : undefined, source: line, - }) + } }) }