@addon-core/inject-css 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +224 -72
- package/dist/index.cjs +556 -77
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +90 -9
- package/dist/index.js +543 -79
- package/dist/index.js.map +1 -1
- package/package.json +35 -18
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/InjectCssV2.ts","../src/AbstractInjectCss.ts","../src/InjectCssV3.ts"],"sourcesContent":["import {isManifestVersion3} from \"@addon-core/browser\";\nimport InjectCssV2 from \"./InjectCssV2\";\nimport InjectCssV3 from \"./InjectCssV3\";\nimport type {InjectCssContract, InjectCssOptions} from \"./types\";\n\nexport type {InjectCssContract, InjectCssOptions};\n\nexport default (options: InjectCssOptions): InjectCssContract => {\n return isManifestVersion3() ? new InjectCssV3(options) : new InjectCssV2(options);\n};\n","import {insertCssTab} from \"@addon-core/browser\";\nimport AbstractInjectCss from \"./AbstractInjectCss\";\n\ntype CSSOrigin = chrome.extensionTypes.CSSOrigin;\ntype InjectDetails = chrome.extensionTypes.InjectDetails;\n\nexport default class extends AbstractInjectCss {\n public async insert(code: string): Promise<void> {\n const {tabId, runAt} = this._options;\n\n const details: InjectDetails = {\n code,\n runAt,\n cssOrigin: this.cssOrigin,\n matchAboutBlank: this.matchAboutBlank,\n };\n\n if (this.allFrames) {\n await insertCssTab(tabId, {...details, allFrames: true});\n } else if (this.frameIds) {\n await Promise.all(this.frameIds.map(frameId => insertCssTab(tabId, {...details, frameId})));\n } else {\n await insertCssTab(tabId, details);\n }\n }\n\n public async file(files: string | string[]): Promise<void> {\n const {tabId, runAt} = this._options;\n\n const fileList = typeof files === \"string\" ? [files] : files;\n\n const injectTasks: Promise<any>[] = [];\n\n for (const file of fileList) {\n const details: InjectDetails = {\n file,\n runAt,\n cssOrigin: this.cssOrigin,\n matchAboutBlank: this.matchAboutBlank,\n };\n\n if (this.allFrames) {\n injectTasks.push(insertCssTab(tabId, {...details, allFrames: true}));\n } else if (this.frameIds) {\n injectTasks.push(...this.frameIds.map(frameId => insertCssTab(tabId, {...details, frameId})));\n } else {\n injectTasks.push(insertCssTab(tabId, details));\n }\n }\n\n await Promise.all(injectTasks);\n }\n\n protected get cssOrigin(): CSSOrigin | undefined {\n const {origin} = this._options;\n\n return origin && (origin.toLowerCase() as CSSOrigin);\n }\n}\n","import type {InjectCssContract, InjectCssOptions} from \"./types\";\n\nexport default abstract class implements InjectCssContract {\n constructor(protected _options: InjectCssOptions) {}\n\n public options(options: Partial<InjectCssOptions>): this {\n this._options = {...this._options, ...options, tabId: options.tabId ?? this._options.tabId};\n\n return this;\n }\n\n public abstract insert(css: string): Promise<void>;\n\n public abstract file(files: string | string[]): Promise<void>;\n\n protected get frameIds(): number[] | undefined {\n const {frameId} = this._options;\n\n return typeof frameId === \"number\" ? [frameId] : typeof frameId !== \"boolean\" ? frameId : undefined;\n }\n\n protected get allFrames(): boolean | undefined {\n const {frameId} = this._options;\n\n return typeof frameId === \"boolean\" ? frameId : undefined;\n }\n\n protected get matchAboutBlank(): boolean {\n const {matchAboutBlank} = this._options;\n\n return typeof matchAboutBlank === \"boolean\" ? matchAboutBlank : true;\n }\n}\n","import {insertCss} from \"@addon-core/browser\";\nimport AbstractInjectCss from \"./AbstractInjectCss\";\n\ntype InjectionTarget = chrome.scripting.InjectionTarget;\n\nexport default class extends AbstractInjectCss {\n public async insert(css: string): Promise<void> {\n await insertCss({\n target: this.target,\n origin: this._options.origin,\n css,\n });\n }\n\n public async file(fileList: string | string[]): Promise<void> {\n await insertCss({\n target: this.target,\n origin: this._options.origin,\n files: typeof fileList === \"string\" ? [fileList] : fileList,\n });\n }\n\n protected get target(): InjectionTarget {\n const target = {tabId: this._options.tabId};\n\n if (this.frameIds && this.frameIds.length > 0) {\n return {...target, frameIds: this.frameIds};\n }\n\n if (this.allFrames === true) {\n return {...target, allFrames: true};\n }\n\n // Firefox does not support `documentIds` in the target\n // getBrowserInfo is only available in firefox\n let isFirefox = false;\n try {\n // @ts-expect-error\n isFirefox = !!browser().runtime.getBrowserInfo;\n } catch (_e) {}\n\n if (!isFirefox) {\n const documentIds = this.documentIds;\n\n if (documentIds && documentIds.length > 0) {\n return {...target, documentIds};\n }\n }\n\n return target;\n }\n\n protected get documentIds(): string[] | undefined {\n const {documentId} = this._options;\n\n return typeof documentId === \"string\" ? [documentId] : documentId;\n }\n}\n"],"mappings":";AAAA,SAAQ,0BAAyB;;;ACAjC,SAAQ,oBAAmB;;;ACE3B,IAAO,4BAAP,MAA2D;AAAA,EACvD,YAAsB,UAA4B;AAA5B;AAAA,EAA6B;AAAA,EAE5C,QAAQ,SAA0C;AACrD,SAAK,WAAW,EAAC,GAAG,KAAK,UAAU,GAAG,SAAS,OAAO,QAAQ,SAAS,KAAK,SAAS,MAAK;AAE1F,WAAO;AAAA,EACX;AAAA,EAMA,IAAc,WAAiC;AAC3C,UAAM,EAAC,QAAO,IAAI,KAAK;AAEvB,WAAO,OAAO,YAAY,WAAW,CAAC,OAAO,IAAI,OAAO,YAAY,YAAY,UAAU;AAAA,EAC9F;AAAA,EAEA,IAAc,YAAiC;AAC3C,UAAM,EAAC,QAAO,IAAI,KAAK;AAEvB,WAAO,OAAO,YAAY,YAAY,UAAU;AAAA,EACpD;AAAA,EAEA,IAAc,kBAA2B;AACrC,UAAM,EAAC,gBAAe,IAAI,KAAK;AAE/B,WAAO,OAAO,oBAAoB,YAAY,kBAAkB;AAAA,EACpE;AACJ;;;AD1BA,IAAO,sBAAP,cAA6B,0BAAkB;AAAA,EAC3C,MAAa,OAAO,MAA6B;AAC7C,UAAM,EAAC,OAAO,MAAK,IAAI,KAAK;AAE5B,UAAM,UAAyB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,IAC1B;AAEA,QAAI,KAAK,WAAW;AAChB,YAAM,aAAa,OAAO,EAAC,GAAG,SAAS,WAAW,KAAI,CAAC;AAAA,IAC3D,WAAW,KAAK,UAAU;AACtB,YAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,aAAW,aAAa,OAAO,EAAC,GAAG,SAAS,QAAO,CAAC,CAAC,CAAC;AAAA,IAC9F,OAAO;AACH,YAAM,aAAa,OAAO,OAAO;AAAA,IACrC;AAAA,EACJ;AAAA,EAEA,MAAa,KAAK,OAAyC;AACvD,UAAM,EAAC,OAAO,MAAK,IAAI,KAAK;AAE5B,UAAM,WAAW,OAAO,UAAU,WAAW,CAAC,KAAK,IAAI;AAEvD,UAAM,cAA8B,CAAC;AAErC,eAAW,QAAQ,UAAU;AACzB,YAAM,UAAyB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,WAAW,KAAK;AAAA,QAChB,iBAAiB,KAAK;AAAA,MAC1B;AAEA,UAAI,KAAK,WAAW;AAChB,oBAAY,KAAK,aAAa,OAAO,EAAC,GAAG,SAAS,WAAW,KAAI,CAAC,CAAC;AAAA,MACvE,WAAW,KAAK,UAAU;AACtB,oBAAY,KAAK,GAAG,KAAK,SAAS,IAAI,aAAW,aAAa,OAAO,EAAC,GAAG,SAAS,QAAO,CAAC,CAAC,CAAC;AAAA,MAChG,OAAO;AACH,oBAAY,KAAK,aAAa,OAAO,OAAO,CAAC;AAAA,MACjD;AAAA,IACJ;AAEA,UAAM,QAAQ,IAAI,WAAW;AAAA,EACjC;AAAA,EAEA,IAAc,YAAmC;AAC7C,UAAM,EAAC,OAAM,IAAI,KAAK;AAEtB,WAAO,UAAW,OAAO,YAAY;AAAA,EACzC;AACJ;;;AE1DA,SAAQ,iBAAgB;AAKxB,IAAO,sBAAP,cAA6B,0BAAkB;AAAA,EAC3C,MAAa,OAAO,KAA4B;AAC5C,UAAM,UAAU;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK,SAAS;AAAA,MACtB;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAa,KAAK,UAA4C;AAC1D,UAAM,UAAU;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK,SAAS;AAAA,MACtB,OAAO,OAAO,aAAa,WAAW,CAAC,QAAQ,IAAI;AAAA,IACvD,CAAC;AAAA,EACL;AAAA,EAEA,IAAc,SAA0B;AACpC,UAAM,SAAS,EAAC,OAAO,KAAK,SAAS,MAAK;AAE1C,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC3C,aAAO,EAAC,GAAG,QAAQ,UAAU,KAAK,SAAQ;AAAA,IAC9C;AAEA,QAAI,KAAK,cAAc,MAAM;AACzB,aAAO,EAAC,GAAG,QAAQ,WAAW,KAAI;AAAA,IACtC;AAIA,QAAI,YAAY;AAChB,QAAI;AAEA,kBAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ;AAAA,IACpC,SAAS,IAAI;AAAA,IAAC;AAEd,QAAI,CAAC,WAAW;AACZ,YAAM,cAAc,KAAK;AAEzB,UAAI,eAAe,YAAY,SAAS,GAAG;AACvC,eAAO,EAAC,GAAG,QAAQ,YAAW;AAAA,MAClC;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,IAAc,cAAoC;AAC9C,UAAM,EAAC,WAAU,IAAI,KAAK;AAE1B,WAAO,OAAO,eAAe,WAAW,CAAC,UAAU,IAAI;AAAA,EAC3D;AACJ;;;AHlDA,IAAO,gBAAQ,CAAC,YAAiD;AAC7D,SAAO,mBAAmB,IAAI,IAAI,oBAAY,OAAO,IAAI,IAAI,oBAAY,OAAO;AACpF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/InjectCssV2.ts","../src/errors.ts","../src/validation.ts","../src/AbstractInjectCss.ts","../src/native-errors.ts","../src/InjectCssV3.ts"],"sourcesContent":["import {isManifestVersion3} from \"@addon-core/browser\";\nimport InjectCssV2 from \"./InjectCssV2\";\nimport InjectCssV3 from \"./InjectCssV3\";\nimport type {InjectCssContract, InjectCssOptions} from \"./types\";\n\nexport {\n InjectCssBaseError,\n InjectCssDeliveryError,\n InjectCssFrameDeliveryError,\n InjectCssTimeoutError,\n InvalidInjectCssCodeError,\n InvalidInjectCssFilesError,\n InvalidInjectCssOptionsError,\n InvalidInjectCssTargetError,\n UnsupportedInjectCssOperationError,\n UnsupportedInjectCssOptionError,\n UnsupportedInjectCssTargetError,\n} from \"./errors\";\nexport type {InjectCssErrorCode} from \"./errors\";\nexport type {\n InjectCssAllFramesTarget,\n InjectCssContract,\n InjectCssDocumentsTarget,\n InjectCssExecutionOptions,\n InjectCssExecutionOptionsPatch,\n InjectCssFramesTarget,\n InjectCssOperation,\n InjectCssOptions,\n InjectCssOrigin,\n InjectCssTarget,\n InjectCssTopFrameTarget,\n NonEmptyReadonlyArray,\n} from \"./types\";\n\nexport const injectCss = (options: InjectCssOptions): InjectCssContract => {\n return isManifestVersion3() ? new InjectCssV3(options) : new InjectCssV2(options);\n};\n\nexport default injectCss;\n","import {browser, insertCssTab, removeCssTab} from \"@addon-core/browser\";\nimport AbstractInjectCss from \"./AbstractInjectCss\";\nimport {\n InjectCssFrameDeliveryError,\n UnsupportedInjectCssOperationError,\n UnsupportedInjectCssOptionError,\n UnsupportedInjectCssTargetError,\n} from \"./errors\";\nimport {isUnsupportedOriginCapabilityError, isUnsupportedRemovalCapabilityError} from \"./native-errors\";\nimport type {\n InjectCssExecutionOptions,\n InjectCssOperation,\n InjectCssOptions,\n InjectCssTarget,\n NonEmptyReadonlyArray,\n} from \"./types\";\n\ntype CSSOrigin = chrome.extensionTypes.CSSOrigin;\ntype InjectDetails = chrome.extensionTypes.InjectDetails;\n\nexport default class extends AbstractInjectCss {\n public constructor(options: InjectCssOptions) {\n super(options);\n this.assertAdapterSupport(this._target, this._execution);\n }\n\n public async insert(css: string): Promise<void> {\n const code = this.validateCode(css);\n\n const target = this.snapshotTarget();\n const execution = this.snapshotExecution();\n const timeoutMs = this.timeoutMs;\n const details = this.createDetails(\"insert\", execution, {code});\n\n try {\n await this.withTimeout(this.execute(\"insert\", target, details), target, timeoutMs);\n } catch (error) {\n this.throwDeliveryError(\"insert\", target, execution, error);\n }\n }\n\n public async file(files: string | NonEmptyReadonlyArray<string>): Promise<void> {\n const fileList = this.normalizeFiles(files);\n\n await this.deliverFiles(\"insert\", fileList);\n }\n\n public async remove(css: string): Promise<void> {\n const code = this.validateCode(css);\n\n await this.removeSource({code});\n }\n\n public async removeFile(files: string | NonEmptyReadonlyArray<string>): Promise<void> {\n const fileList = this.normalizeFiles(files);\n\n await this.deliverFiles(\"remove\", fileList);\n }\n\n protected assertAdapterSupport(target: InjectCssTarget, _execution: InjectCssExecutionOptions): void {\n if (\"documentIds\" in target && target.documentIds !== undefined) {\n throw new UnsupportedInjectCssTargetError('\"documentIds\" are not supported by the MV2 adapter.');\n }\n }\n\n private createDetails(\n operation: InjectCssOperation,\n execution: InjectCssExecutionOptions,\n source: Pick<InjectDetails, \"code\"> | Pick<InjectDetails, \"file\">\n ): InjectDetails {\n return {\n ...source,\n ...(operation === \"insert\" && execution.runAt !== undefined ? {runAt: execution.runAt} : {}),\n ...(execution.origin !== undefined ? {cssOrigin: execution.origin.toLowerCase() as CSSOrigin} : {}),\n ...(execution.matchAboutBlank !== undefined ? {matchAboutBlank: execution.matchAboutBlank} : {}),\n };\n }\n\n private async execute(\n operation: InjectCssOperation,\n target: InjectCssTarget,\n details: InjectDetails\n ): Promise<void> {\n const deliver = operation === \"insert\" ? insertCssTab : removeCssTab;\n\n if (\"allFrames\" in target && target.allFrames === true) {\n await deliver(target.tabId, {...details, allFrames: true});\n return;\n }\n\n if (\"frameIds\" in target && target.frameIds !== undefined) {\n await Promise.all(\n target.frameIds.map(frameId =>\n this.executeFrame(operation, target.tabId, frameId, {...details, frameId})\n )\n );\n return;\n }\n\n await deliver(target.tabId, details);\n }\n\n private async executeFrame(\n operation: InjectCssOperation,\n tabId: number,\n frameId: number,\n details: InjectDetails\n ): Promise<void> {\n try {\n const deliver = operation === \"insert\" ? insertCssTab : removeCssTab;\n\n await deliver(tabId, details);\n } catch (error) {\n throw new InjectCssFrameDeliveryError(tabId, frameId, error, operation);\n }\n }\n\n private async removeSource(source: Pick<InjectDetails, \"code\"> | Pick<InjectDetails, \"file\">): Promise<void> {\n const target = this.snapshotTarget();\n const execution = this.snapshotExecution();\n const timeoutMs = this.timeoutMs;\n\n this.assertRemovalSupport();\n\n try {\n await this.withTimeout(\n this.execute(\"remove\", target, this.createDetails(\"remove\", execution, source)),\n target,\n timeoutMs,\n \"remove\"\n );\n } catch (error) {\n this.throwDeliveryError(\"remove\", target, execution, error);\n }\n }\n\n private async deliverFiles(operation: InjectCssOperation, fileList: readonly string[]): Promise<void> {\n const target = this.snapshotTarget();\n const execution = this.snapshotExecution();\n const timeoutMs = this.timeoutMs;\n let stopped = false;\n\n if (operation === \"remove\") {\n this.assertRemovalSupport();\n }\n\n const task = (async (): Promise<void> => {\n for (const file of fileList) {\n if (stopped) return;\n\n await this.execute(operation, target, this.createDetails(operation, execution, {file}));\n }\n })();\n\n try {\n await this.withTimeout(task, target, timeoutMs, operation);\n } catch (error) {\n stopped = true;\n this.throwDeliveryError(operation, target, execution, error);\n }\n }\n\n private assertRemovalSupport(): void {\n if (typeof browser().tabs?.removeCSS !== \"function\") {\n throw new UnsupportedInjectCssOperationError(\n \"remove\",\n 'the current MV2 browser does not expose \"tabs.removeCSS\".'\n );\n }\n }\n\n private throwDeliveryError(\n operation: InjectCssOperation,\n target: InjectCssTarget,\n execution: InjectCssExecutionOptions,\n error: unknown\n ): never {\n if (operation === \"remove\" && isUnsupportedRemovalCapabilityError(error)) {\n throw new UnsupportedInjectCssOperationError(\n \"remove\",\n 'the current MV2 browser does not support \"tabs.removeCSS\".',\n error\n );\n }\n\n if (execution.origin !== undefined && isUnsupportedOriginCapabilityError(error)) {\n throw new UnsupportedInjectCssOptionError('\"origin\" is not supported by the current browser.', error);\n }\n\n throw this.deliveryError(target, error, operation);\n }\n}\n","import type {InjectCssOperation, InjectCssTarget} from \"./types\";\n\nexport type InjectCssErrorCode =\n | \"ERR_INJECT_CSS_DELIVERY\"\n | \"ERR_INJECT_CSS_FRAME_DELIVERY\"\n | \"ERR_INJECT_CSS_INVALID_CODE\"\n | \"ERR_INJECT_CSS_INVALID_FILES\"\n | \"ERR_INJECT_CSS_INVALID_OPTIONS\"\n | \"ERR_INJECT_CSS_INVALID_TARGET\"\n | \"ERR_INJECT_CSS_TIMEOUT\"\n | \"ERR_INJECT_CSS_UNSUPPORTED_OPTION\"\n | \"ERR_INJECT_CSS_UNSUPPORTED_OPERATION\"\n | \"ERR_INJECT_CSS_UNSUPPORTED_TARGET\";\n\nexport class InjectCssBaseError extends Error {\n public readonly code: InjectCssErrorCode;\n public override readonly cause?: unknown;\n\n protected constructor(name: string, code: InjectCssErrorCode, message: string, cause?: unknown) {\n super(message);\n this.name = name;\n this.code = code;\n\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n\nexport class InvalidInjectCssTargetError extends InjectCssBaseError {\n public constructor(message: string) {\n super(\"InvalidInjectCssTargetError\", \"ERR_INJECT_CSS_INVALID_TARGET\", `Invalid InjectCss target: ${message}`);\n }\n}\n\nexport class UnsupportedInjectCssTargetError extends InjectCssBaseError {\n public constructor(message: string, cause?: unknown) {\n super(\n \"UnsupportedInjectCssTargetError\",\n \"ERR_INJECT_CSS_UNSUPPORTED_TARGET\",\n `Unsupported InjectCss target: ${message}`,\n cause\n );\n }\n}\n\nexport class InvalidInjectCssOptionsError extends InjectCssBaseError {\n public constructor(message: string) {\n super(\n \"InvalidInjectCssOptionsError\",\n \"ERR_INJECT_CSS_INVALID_OPTIONS\",\n `Invalid InjectCss options: ${message}`\n );\n }\n}\n\nexport class UnsupportedInjectCssOptionError extends InjectCssBaseError {\n public constructor(message: string, cause?: unknown) {\n super(\n \"UnsupportedInjectCssOptionError\",\n \"ERR_INJECT_CSS_UNSUPPORTED_OPTION\",\n `Unsupported InjectCss option: ${message}`,\n cause\n );\n }\n}\n\nexport class UnsupportedInjectCssOperationError extends InjectCssBaseError {\n public readonly operation: InjectCssOperation;\n\n public constructor(operation: InjectCssOperation, message: string, cause?: unknown) {\n super(\n \"UnsupportedInjectCssOperationError\",\n \"ERR_INJECT_CSS_UNSUPPORTED_OPERATION\",\n `Unsupported InjectCss operation \"${operation}\": ${message}`,\n cause\n );\n this.operation = operation;\n }\n}\n\nexport class InvalidInjectCssCodeError extends InjectCssBaseError {\n public constructor(message: string) {\n super(\"InvalidInjectCssCodeError\", \"ERR_INJECT_CSS_INVALID_CODE\", `Invalid InjectCss code: ${message}`);\n }\n}\n\nexport class InvalidInjectCssFilesError extends InjectCssBaseError {\n public constructor(message: string) {\n super(\"InvalidInjectCssFilesError\", \"ERR_INJECT_CSS_INVALID_FILES\", `Invalid InjectCss files: ${message}`);\n }\n}\n\nexport class InjectCssTimeoutError extends InjectCssBaseError {\n public readonly target: InjectCssTarget;\n public readonly timeoutMs: number;\n public readonly operation: InjectCssOperation;\n\n public constructor(target: InjectCssTarget, timeoutMs: number, operation: InjectCssOperation = \"insert\") {\n const action = operation === \"insert\" ? \"injection\" : \"removal\";\n\n super(\"InjectCssTimeoutError\", \"ERR_INJECT_CSS_TIMEOUT\", `CSS ${action} timed out after ${timeoutMs} ms.`);\n this.target = target;\n this.timeoutMs = timeoutMs;\n this.operation = operation;\n }\n}\n\nexport class InjectCssFrameDeliveryError extends InjectCssBaseError {\n public readonly tabId: number;\n public readonly frameId: number;\n public readonly operation: InjectCssOperation;\n\n public constructor(tabId: number, frameId: number, cause: unknown, operation: InjectCssOperation = \"insert\") {\n const message = cause instanceof Error ? cause.message : String(cause);\n const action = operation === \"insert\" ? \"injection\" : \"removal\";\n\n super(\n \"InjectCssFrameDeliveryError\",\n \"ERR_INJECT_CSS_FRAME_DELIVERY\",\n `CSS ${action} failed in frame ${frameId} of tab ${tabId}: ${message}`,\n cause\n );\n this.tabId = tabId;\n this.frameId = frameId;\n this.operation = operation;\n }\n}\n\nexport class InjectCssDeliveryError extends InjectCssBaseError {\n public readonly target: InjectCssTarget;\n public readonly operation: InjectCssOperation;\n\n public constructor(target: InjectCssTarget, cause: unknown, operation: InjectCssOperation = \"insert\") {\n const causeMessage = cause instanceof Error ? cause.message : String(cause);\n const action = operation === \"insert\" ? \"injection\" : \"removal\";\n const message =\n cause instanceof InjectCssFrameDeliveryError ? causeMessage : `CSS ${action} failed: ${causeMessage}`;\n\n super(\"InjectCssDeliveryError\", \"ERR_INJECT_CSS_DELIVERY\", message, cause);\n this.target = target;\n this.operation = operation;\n }\n}\n","import {\n InvalidInjectCssCodeError,\n InvalidInjectCssFilesError,\n InvalidInjectCssOptionsError,\n InvalidInjectCssTargetError,\n} from \"./errors\";\nimport type {InjectCssExecutionOptions, InjectCssTarget, NonEmptyReadonlyArray} from \"./types\";\n\nconst TARGET_KEYS = new Set([\"tabId\", \"allFrames\", \"frameIds\", \"documentIds\"]);\nconst EXECUTION_OPTION_KEYS = new Set([\"matchAboutBlank\", \"runAt\", \"origin\", \"timeoutMs\"]);\nconst INJECT_CSS_OPTION_KEYS = new Set([\"target\", ...EXECUTION_OPTION_KEYS]);\nconst RUN_AT_VALUES = new Set([\"document_start\", \"document_end\", \"document_idle\"]);\nconst ORIGIN_VALUES = new Set([\"AUTHOR\", \"USER\"]);\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst assertKnownKeys = (value: Record<string, unknown>, keys: Set<string>, subject: string): void => {\n const unknownKeys = Object.keys(value).filter(key => !keys.has(key));\n\n if (unknownKeys.length > 0) {\n throw new InvalidInjectCssOptionsError(\n `${subject} contains unknown ${unknownKeys.length === 1 ? \"field\" : \"fields\"}: ${unknownKeys\n .map(key => `\"${key}\"`)\n .join(\", \")}.`\n );\n }\n};\n\nconst cloneTarget = (target: InjectCssTarget): InjectCssTarget => {\n if (\"frameIds\" in target && target.frameIds !== undefined) {\n return {tabId: target.tabId, frameIds: [...target.frameIds] as NonEmptyReadonlyArray<number>};\n }\n\n if (\"documentIds\" in target && target.documentIds !== undefined) {\n return {tabId: target.tabId, documentIds: [...target.documentIds] as NonEmptyReadonlyArray<string>};\n }\n\n if (\"allFrames\" in target && target.allFrames === true) {\n return {tabId: target.tabId, allFrames: true};\n }\n\n return {tabId: target.tabId};\n};\n\nexport const validateInjectCssTarget = (value: unknown): InjectCssTarget => {\n if (!isObject(value)) {\n throw new InvalidInjectCssTargetError(\"target must be an object.\");\n }\n\n const unknownKeys = Object.keys(value).filter(key => !TARGET_KEYS.has(key));\n\n if (unknownKeys.length > 0) {\n throw new InvalidInjectCssTargetError(\n `target contains unknown ${unknownKeys.length === 1 ? \"field\" : \"fields\"}: ${unknownKeys\n .map(key => `\"${key}\"`)\n .join(\", \")}.`\n );\n }\n\n if (!Number.isInteger(value.tabId) || (value.tabId as number) < 0) {\n throw new InvalidInjectCssTargetError('\"tabId\" must be a non-negative integer.');\n }\n\n const selectors = [\"allFrames\", \"frameIds\", \"documentIds\"].filter(key => value[key] !== undefined);\n\n if (selectors.length > 1) {\n throw new InvalidInjectCssTargetError('\"allFrames\", \"frameIds\", and \"documentIds\" are mutually exclusive.');\n }\n\n if (value.allFrames !== undefined && value.allFrames !== true) {\n throw new InvalidInjectCssTargetError('\"allFrames\" must be exactly true when provided.');\n }\n\n if (value.frameIds !== undefined) {\n if (!Array.isArray(value.frameIds) || value.frameIds.length === 0) {\n throw new InvalidInjectCssTargetError('\"frameIds\" must contain at least one frame ID.');\n }\n\n if (value.frameIds.some(frameId => !Number.isInteger(frameId) || frameId < 0)) {\n throw new InvalidInjectCssTargetError(\"frame ID must be a non-negative integer.\");\n }\n\n if (new Set(value.frameIds).size !== value.frameIds.length) {\n throw new InvalidInjectCssTargetError('\"frameIds\" must not contain duplicate frame IDs.');\n }\n }\n\n if (value.documentIds !== undefined) {\n if (!Array.isArray(value.documentIds) || value.documentIds.length === 0) {\n throw new InvalidInjectCssTargetError('\"documentIds\" must contain at least one document ID.');\n }\n\n if (value.documentIds.some(documentId => typeof documentId !== \"string\" || documentId.trim().length === 0)) {\n throw new InvalidInjectCssTargetError(\"document ID must be a non-empty string.\");\n }\n\n if (new Set(value.documentIds).size !== value.documentIds.length) {\n throw new InvalidInjectCssTargetError('\"documentIds\" must not contain duplicate document IDs.');\n }\n }\n\n return cloneTarget(value as unknown as InjectCssTarget);\n};\n\nexport const validateInjectCssExecutionOptions = (value: unknown): InjectCssExecutionOptions => {\n if (!isObject(value)) {\n throw new InvalidInjectCssOptionsError(\"execution options must be an object.\");\n }\n\n assertKnownKeys(value, EXECUTION_OPTION_KEYS, \"execution options\");\n\n if (value.matchAboutBlank !== undefined && typeof value.matchAboutBlank !== \"boolean\") {\n throw new InvalidInjectCssOptionsError('\"matchAboutBlank\" must be a boolean.');\n }\n\n if (value.runAt !== undefined && (typeof value.runAt !== \"string\" || !RUN_AT_VALUES.has(value.runAt))) {\n throw new InvalidInjectCssOptionsError('\"runAt\" must be \"document_start\", \"document_end\", or \"document_idle\".');\n }\n\n if (value.origin !== undefined && (typeof value.origin !== \"string\" || !ORIGIN_VALUES.has(value.origin))) {\n throw new InvalidInjectCssOptionsError('\"origin\" must be \"AUTHOR\" or \"USER\".');\n }\n\n if (\n value.timeoutMs !== undefined &&\n (typeof value.timeoutMs !== \"number\" || !Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n throw new InvalidInjectCssOptionsError('\"timeoutMs\" must be a positive integer.');\n }\n\n return {...(value as InjectCssExecutionOptions)};\n};\n\nexport const validateInjectCssOptions = (\n value: unknown\n): {target: InjectCssTarget; execution: InjectCssExecutionOptions} => {\n if (!isObject(value)) {\n throw new InvalidInjectCssOptionsError(\"options must be an object.\");\n }\n\n assertKnownKeys(value, INJECT_CSS_OPTION_KEYS, \"options\");\n\n const {target, ...execution} = value;\n\n return {\n target: validateInjectCssTarget(target),\n execution: validateInjectCssExecutionOptions(execution),\n };\n};\n\nexport const validateInjectCssCode = (value: unknown): string => {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new InvalidInjectCssCodeError(\"code must be a non-empty string.\");\n }\n\n return value;\n};\n\nexport const validateInjectCssFiles = (files: string | NonEmptyReadonlyArray<string>): string[] => {\n const fileList = typeof files === \"string\" ? [files] : files;\n\n if (!Array.isArray(fileList) || fileList.length === 0) {\n throw new InvalidInjectCssFilesError(\"at least one file is required.\");\n }\n\n if (fileList.some(file => typeof file !== \"string\" || file.trim().length === 0)) {\n throw new InvalidInjectCssFilesError(\"each file must be a non-empty string.\");\n }\n\n return [...fileList];\n};\n","import {InjectCssDeliveryError, InjectCssTimeoutError} from \"./errors\";\nimport {\n validateInjectCssCode,\n validateInjectCssExecutionOptions,\n validateInjectCssFiles,\n validateInjectCssOptions,\n validateInjectCssTarget,\n} from \"./validation\";\nimport type {\n InjectCssContract,\n InjectCssExecutionOptions,\n InjectCssExecutionOptionsPatch,\n InjectCssOperation,\n InjectCssOptions,\n InjectCssTarget,\n NonEmptyReadonlyArray,\n} from \"./types\";\n\nconst DEFAULT_TIMEOUT_MS = 4_000;\n\nexport default abstract class implements InjectCssContract {\n protected _target: InjectCssTarget;\n protected _execution: InjectCssExecutionOptions;\n\n public constructor(options: InjectCssOptions) {\n const normalized = validateInjectCssOptions(options);\n\n this._target = normalized.target;\n this._execution = normalized.execution;\n }\n\n public target(target: InjectCssTarget): this {\n const normalizedTarget = validateInjectCssTarget(target);\n\n this.assertAdapterSupport(normalizedTarget, this._execution);\n this._target = normalizedTarget;\n\n return this;\n }\n\n public options(options: InjectCssExecutionOptionsPatch): this {\n const normalizedOptions = validateInjectCssExecutionOptions(options);\n const nextExecution = {...this._execution, ...normalizedOptions};\n\n this.assertAdapterSupport(this._target, nextExecution);\n this._execution = nextExecution;\n\n return this;\n }\n\n public abstract insert(css: string): Promise<void>;\n\n public abstract file(files: string | NonEmptyReadonlyArray<string>): Promise<void>;\n\n public abstract remove(css: string): Promise<void>;\n\n public abstract removeFile(files: string | NonEmptyReadonlyArray<string>): Promise<void>;\n\n protected abstract assertAdapterSupport(target: InjectCssTarget, execution: InjectCssExecutionOptions): void;\n\n protected validateCode(css: string): string {\n return validateInjectCssCode(css);\n }\n\n protected normalizeFiles(files: string | NonEmptyReadonlyArray<string>): string[] {\n return validateInjectCssFiles(files);\n }\n\n protected snapshotTarget(): InjectCssTarget {\n return validateInjectCssTarget(this._target);\n }\n\n protected snapshotExecution(): InjectCssExecutionOptions {\n return {...this._execution};\n }\n\n protected get timeoutMs(): number {\n return this._execution.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n }\n\n protected async withTimeout<T>(\n task: Promise<T>,\n target: InjectCssTarget,\n timeoutMs: number,\n operation: InjectCssOperation = \"insert\"\n ): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n\n const finish = (callback: () => void): void => {\n if (settled) return;\n\n settled = true;\n clearTimeout(timeoutId);\n callback();\n };\n\n const timeoutId = setTimeout(() => {\n finish(() => reject(new InjectCssTimeoutError(target, timeoutMs, operation)));\n }, timeoutMs);\n\n task.then(\n value => finish(() => resolve(value)),\n error => finish(() => reject(error))\n );\n });\n }\n\n protected deliveryError(target: InjectCssTarget, error: unknown, operation: InjectCssOperation = \"insert\"): Error {\n if (error instanceof InjectCssDeliveryError || error instanceof InjectCssTimeoutError) {\n return error;\n }\n\n return new InjectCssDeliveryError(target, error, operation);\n }\n}\n","const UNSUPPORTED_API_PATTERN = /(not supported|unsupported|not (?:available|implemented)|is not a function)\\b/i;\nconst UNSUPPORTED_FIELD_PATTERN =\n /(not supported|unsupported|unexpected|unknown|unrecognized|invalid|not (?:a )?valid)\\b/i;\nconst UNSUPPORTED_TARGET_FIELD_PATTERN = /(not supported|unsupported|unexpected|unknown|unrecognized)\\b/i;\n\nexport const getNativeErrorMessage = (error: unknown): string => {\n return error instanceof Error ? error.message : String(error);\n};\n\nexport const isUnsupportedRemovalCapabilityError = (error: unknown): boolean => {\n const message = getNativeErrorMessage(error);\n\n return /remove\\s*css/i.test(message) && UNSUPPORTED_API_PATTERN.test(message);\n};\n\nexport const isUnsupportedOriginCapabilityError = (error: unknown): boolean => {\n const message = getNativeErrorMessage(error);\n\n // MV2 usually names the field \"cssOrigin\", while MV3 uses \"origin\" and some browsers describe it as a\n // \"style origin\". Treat those spellings as the same package capability.\n return /\\b(?:(?:css|style)[\\s_-]*)?origin\\b/i.test(message) && UNSUPPORTED_FIELD_PATTERN.test(message);\n};\n\nexport const isUnsupportedDocumentTargetCapabilityError = (error: unknown): boolean => {\n const message = getNativeErrorMessage(error);\n\n // Keep this intentionally narrower than option detection: \"Invalid documentId\" can mean a stale target.\n return /documentIds?/i.test(message) && UNSUPPORTED_TARGET_FIELD_PATTERN.test(message);\n};\n","import {browser, insertCss, removeCss} from \"@addon-core/browser\";\nimport AbstractInjectCss from \"./AbstractInjectCss\";\nimport {\n UnsupportedInjectCssOperationError,\n UnsupportedInjectCssOptionError,\n UnsupportedInjectCssTargetError,\n} from \"./errors\";\nimport {\n isUnsupportedDocumentTargetCapabilityError,\n isUnsupportedOriginCapabilityError,\n isUnsupportedRemovalCapabilityError,\n} from \"./native-errors\";\nimport type {\n InjectCssExecutionOptions,\n InjectCssOperation,\n InjectCssOptions,\n InjectCssTarget,\n NonEmptyReadonlyArray,\n} from \"./types\";\n\ntype CSSInjection = chrome.scripting.CSSInjection;\ntype InjectionTarget = chrome.scripting.InjectionTarget;\ntype CSSSource = {css: string; files?: never} | {files: string[]; css?: never};\n\nexport default class extends AbstractInjectCss {\n public constructor(options: InjectCssOptions) {\n super(options);\n this.assertAdapterSupport(this._target, this._execution);\n }\n\n public async insert(css: string): Promise<void> {\n const code = this.validateCode(css);\n\n const target = this.snapshotTarget();\n const execution = this.snapshotExecution();\n const timeoutMs = this.timeoutMs;\n\n await this.execute(\n \"insert\",\n target,\n execution,\n {\n target: this.toNativeTarget(target),\n css: code,\n ...(execution.origin !== undefined ? {origin: execution.origin} : {}),\n },\n timeoutMs\n );\n }\n\n public async file(files: string | NonEmptyReadonlyArray<string>): Promise<void> {\n const fileList = this.normalizeFiles(files);\n const target = this.snapshotTarget();\n const execution = this.snapshotExecution();\n const timeoutMs = this.timeoutMs;\n\n await this.execute(\n \"insert\",\n target,\n execution,\n {\n target: this.toNativeTarget(target),\n files: fileList,\n ...(execution.origin !== undefined ? {origin: execution.origin} : {}),\n },\n timeoutMs\n );\n }\n\n public async remove(css: string): Promise<void> {\n const code = this.validateCode(css);\n\n await this.removeInjection({css: code});\n }\n\n public async removeFile(files: string | NonEmptyReadonlyArray<string>): Promise<void> {\n const fileList = this.normalizeFiles(files);\n\n await this.removeInjection({files: fileList});\n }\n\n protected assertAdapterSupport(_target: InjectCssTarget, execution: InjectCssExecutionOptions): void {\n if (execution.matchAboutBlank !== undefined) {\n throw new UnsupportedInjectCssOptionError('\"matchAboutBlank\" is not supported by the MV3 adapter.');\n }\n\n if (execution.runAt !== undefined) {\n throw new UnsupportedInjectCssOptionError('\"runAt\" is not supported by the MV3 adapter.');\n }\n }\n\n private async execute(\n operation: InjectCssOperation,\n target: InjectCssTarget,\n execution: InjectCssExecutionOptions,\n injection: CSSInjection,\n timeoutMs: number\n ): Promise<void> {\n try {\n const task = operation === \"insert\" ? insertCss(injection) : removeCss(injection);\n\n await this.withTimeout(task, target, timeoutMs, operation);\n } catch (error) {\n if (\n \"documentIds\" in target &&\n target.documentIds !== undefined &&\n isUnsupportedDocumentTargetCapabilityError(error)\n ) {\n throw new UnsupportedInjectCssTargetError(\n '\"documentIds\" are not supported by the current browser.',\n error\n );\n }\n\n if (operation === \"remove\" && isUnsupportedRemovalCapabilityError(error)) {\n throw new UnsupportedInjectCssOperationError(\n \"remove\",\n 'the current MV3 browser does not support \"scripting.removeCSS\".',\n error\n );\n }\n\n if (execution.origin !== undefined && isUnsupportedOriginCapabilityError(error)) {\n throw new UnsupportedInjectCssOptionError('\"origin\" is not supported by the current browser.', error);\n }\n\n throw this.deliveryError(target, error, operation);\n }\n }\n\n private async removeInjection(source: CSSSource): Promise<void> {\n const target = this.snapshotTarget();\n const execution = this.snapshotExecution();\n const timeoutMs = this.timeoutMs;\n\n this.assertRemovalSupport();\n\n await this.execute(\n \"remove\",\n target,\n execution,\n {\n target: this.toNativeTarget(target),\n ...source,\n ...(execution.origin !== undefined ? {origin: execution.origin} : {}),\n },\n timeoutMs\n );\n }\n\n private assertRemovalSupport(): void {\n if (typeof browser().scripting?.removeCSS !== \"function\") {\n throw new UnsupportedInjectCssOperationError(\n \"remove\",\n 'the current MV3 browser does not expose \"scripting.removeCSS\".'\n );\n }\n }\n\n private toNativeTarget(target: InjectCssTarget): InjectionTarget {\n if (\"frameIds\" in target && target.frameIds !== undefined) {\n return {tabId: target.tabId, frameIds: [...target.frameIds]};\n }\n\n if (\"documentIds\" in target && target.documentIds !== undefined) {\n return {tabId: target.tabId, documentIds: [...target.documentIds]};\n }\n\n if (\"allFrames\" in target && target.allFrames === true) {\n return {tabId: target.tabId, allFrames: true};\n }\n\n return {tabId: target.tabId};\n }\n}\n"],"mappings":"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","names":["browser","browser"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@addon-core/inject-css",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "A lightweight TypeScript-friendly library to inject CSS into browser extensions (Manifest V2 & V3)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"browser",
|
|
@@ -18,17 +18,18 @@
|
|
|
18
18
|
],
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
21
|
-
"url": "https://github.com/addon-stack/inject-css"
|
|
21
|
+
"url": "git+https://github.com/addon-stack/inject-css.git"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public",
|
|
25
|
+
"provenance": true
|
|
22
26
|
},
|
|
23
27
|
"homepage": "https://github.com/addon-stack/inject-css",
|
|
24
28
|
"bugs": {
|
|
25
29
|
"url": "https://github.com/addon-stack/inject-css/issues"
|
|
26
30
|
},
|
|
27
31
|
"license": "MIT",
|
|
28
|
-
"author": "
|
|
29
|
-
"contributors": [
|
|
30
|
-
"Anjey Tsibylskij (https://github.com/atldays)"
|
|
31
|
-
],
|
|
32
|
+
"author": "Anjey Tsibylskij (https://github.com/atldays)",
|
|
32
33
|
"type": "module",
|
|
33
34
|
"main": "dist/index.cjs",
|
|
34
35
|
"module": "dist/index.js",
|
|
@@ -48,35 +49,51 @@
|
|
|
48
49
|
"prepare": "husky",
|
|
49
50
|
"build": "tsup",
|
|
50
51
|
"build:watch": "tsup --watch",
|
|
52
|
+
"dev": "tsup --watch",
|
|
51
53
|
"prepublishOnly": "npm run build",
|
|
52
54
|
"format": "biome format --write .",
|
|
53
55
|
"format:check": "biome check --formatter-enabled=true --linter-enabled=false .",
|
|
54
56
|
"lint": "biome check .",
|
|
55
57
|
"lint:fix": "biome check --write .",
|
|
56
58
|
"lint:fix:aggressive": "biome check --write --unsafe .",
|
|
59
|
+
"lint:fix:unsafe": "biome check --write --unsafe .",
|
|
60
|
+
"test": "npm run test:types && npm run build && jest --bail && npm run test:tooling",
|
|
61
|
+
"test:ci": "npm run test:types && npm run build && jest --ci --coverage",
|
|
62
|
+
"test:types": "tsc -p tests/tsconfig.json --noEmit",
|
|
57
63
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
58
|
-
"
|
|
59
|
-
"test:
|
|
60
|
-
|
|
64
|
+
"release": "release-it",
|
|
65
|
+
"test:tooling": "node --test tests/dependency-release.test.mjs"
|
|
66
|
+
},
|
|
67
|
+
"lint-staged": {
|
|
68
|
+
"{src,tests}/**/*.{js,jsx,ts,tsx,cjs,mjs}": [
|
|
69
|
+
"biome check --write --unsafe"
|
|
70
|
+
],
|
|
71
|
+
"*.{json,css,scss,html}": [
|
|
72
|
+
"biome format --write"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"jest": {
|
|
76
|
+
"coverageProvider": "v8",
|
|
77
|
+
"testMatch": [
|
|
78
|
+
"<rootDir>/tests/**/*.test.cjs"
|
|
79
|
+
]
|
|
61
80
|
},
|
|
62
81
|
"dependencies": {
|
|
63
|
-
"@addon-core/browser": "^0.
|
|
82
|
+
"@addon-core/browser": "^0.12.0"
|
|
64
83
|
},
|
|
65
84
|
"devDependencies": {
|
|
66
85
|
"@biomejs/biome": "^2.2.4",
|
|
67
86
|
"@commitlint/cli": "^20.0.0",
|
|
68
87
|
"@commitlint/config-conventional": "^20.0.0",
|
|
69
|
-
"@release-it/conventional-changelog": "^
|
|
70
|
-
"@types/chrome": "^0.
|
|
88
|
+
"@release-it/conventional-changelog": "^12.0.2",
|
|
89
|
+
"@types/chrome": "^0.3.5",
|
|
71
90
|
"@types/jest": "^30.0.0",
|
|
91
|
+
"conventional-commits-parser": "^7.1.3",
|
|
72
92
|
"husky": "^9.1.7",
|
|
73
|
-
"jest": "^30.
|
|
74
|
-
"
|
|
93
|
+
"jest": "^30.5.2",
|
|
94
|
+
"lint-staged": "^16.2.1",
|
|
95
|
+
"release-it": "^21.1.1",
|
|
75
96
|
"tsup": "^8.5.0",
|
|
76
97
|
"typescript": "^5.9.2"
|
|
77
|
-
},
|
|
78
|
-
"overrides": {
|
|
79
|
-
"glob": "^9.3.5",
|
|
80
|
-
"source-map": "npm:source-map-js@^1.2.0"
|
|
81
98
|
}
|
|
82
99
|
}
|