fix(types): PKG-CHAPTER-04 preserve CJS ESM and legacy consumer contracts

This commit is contained in:
Harvey Zhao committed 2026-09-10 23:29:06 +08:00
1 parent 48660c4e12
commit bab80ff886
41 files changed
+1087 -119

No files matched your search

+1
View File
@@ -71,6 +71,7 @@
'./assets/ts/artplayer-proxy-mediabunny.d.ts', './assets/ts/artplayer-proxy-mediabunny.d.ts',
'./assets/ts/artplayer-tool-iframe.d.ts', './assets/ts/artplayer-tool-iframe.d.ts',
'./assets/ts/artplayer.d.ts', './assets/ts/artplayer.d.ts',
'./assets/ts/artplayer-i18n.d.ts',
] ]
for (let index = 0; index < libUris.length; index++) { for (let index = 0; index < libUris.length; index++) {
+4
View File
@@ -0,0 +1,4 @@
declare module 'artplayer/i18n/*' {
const language: NonNullable<Artplayer.I18n['en']>
export default language
}
+3 -3
View File
@@ -1,14 +1,14 @@
type Chapters = { export type Chapters = {
start: number start: number
end: number end: number
title: string title: string
}[] }[]
interface Option { export interface Option {
chapters?: Chapters chapters?: Chapters
} }
interface Result { export interface Result {
name: 'artplayerPluginChapter' name: 'artplayerPluginChapter'
update: (option: Option) => void update: (option: Option) => void
} }
-6
View File
@@ -750,12 +750,6 @@ interface I18nValue {
export type I18n = Partial<Record<I18nKeys, Partial<I18nValue>>> export type I18n = Partial<Record<I18nKeys, Partial<I18nValue>>>
declare module 'artplayer/i18n/*' {
const lang: Partial<I18nValue>
// @ts-expect-error TS2666
export default lang
}
export type Bar = 'loaded' | 'played' | 'hover' export type Bar = 'loaded' | 'played' | 'hover'
export interface Events { export interface Events {
@@ -15,6 +15,7 @@ method; the update object is required. All implementation modules are TypeScript
| `src/types.ts` | Internal aliases derived from the existing public declaration; no runtime imports | | `src/types.ts` | Internal aliases derived from the existing public declaration; no runtime imports |
| `src/style.less` | Existing CSS classes and theme variables | | `src/style.less` | Existing CSS classes and theme variables |
| `types/artplayer-plugin-chapter.d.ts` | Consumer declaration and compatibility boundary | | `types/artplayer-plugin-chapter.d.ts` | Consumer declaration and compatibility boundary |
| `types/*.d.cts`, `types/*.d.mts` | CJS/ESM bridges sharing the same public types |
Dependencies flow from the entry to normalization and rendering. Neither of those Dependencies flow from the entry to normalization and rendering. Neither of those
modules receives an ArtPlayer instance. Rendering accepts a progress container and modules receives an ArtPlayer instance. Rendering accepts a progress container and
@@ -82,7 +83,9 @@ For UI, start at progress.ts/style.less and verify real mouse interaction. For e
or cleanup changes, start at index.ts and rerun early destroy/multiple-instance tests. or cleanup changes, start at index.ts and rerun early destroy/multiple-instance tests.
Any public declaration change also needs new/old compiler and tarball consumers. Any public declaration change also needs new/old compiler and tarball consumers.
The public declaration is intentionally retained during the structural migration; The public declaration remains available to old compilers and exports Chapters,
PKG-CHAPTER-04 owns NodeNext ESM and legacy subpath declaration fixes. The frozen Option and Result as types. Modern import/require conditions select format-specific
bridges; typesVersions provides the legacy subpath to old resolvers. All bridges
refer to one contract and runtime import paths stay unchanged. The frozen
published baseline is under refactor/baselines; never overwrite it with candidate published baseline is under refactor/baselines; never overwrite it with candidate
behavior. Physical device, full editor and final release checks remain separate tasks. behavior. Physical device, full editor and final release checks remain separate tasks.
@@ -22,6 +22,10 @@ The registered name is `artplayerPluginChapter`. After metadata loads, use
`update({})` to clear them. Update is synchronous and requires an options object. `update({})` to clear them. Update is synchronous and requires an options object.
Chapter times are seconds; ranges must not overlap. `Infinity` as an end value uses the current duration. Chapter times are seconds; ranges must not overlap. `Infinity` as an end value uses the current duration.
TypeScript users can import `Chapters`, `Option` and `Result` with `import type`.
Modern ESM/CommonJS and `/legacy` share the same API; old TypeScript resolution
keeps the original `.d.ts` entry and a legacy subpath fallback.
The existing implementation sorts and fills the supplied array in place and replaces its Infinity end The existing implementation sorts and fills the supplied array in place and replaces its Infinity end
values. Pass a fresh array when you need to retain the original configuration. After switching media, values. Pass a fresh array when you need to retain the original configuration. After switching media,
call update with chapters appropriate to the new duration; initialization listens to metadata once. call update with chapters appropriate to the new duration; initialization listens to metadata once.
+24 -7
View File
@@ -19,19 +19,36 @@
], ],
"exports": { "exports": {
".": { ".": {
"types": "./types/artplayer-plugin-chapter.d.ts", "import": {
"import": "./dist/artplayer-plugin-chapter.mjs", "types": "./types/artplayer-plugin-chapter.d.mts",
"require": "./dist/artplayer-plugin-chapter.js" "default": "./dist/artplayer-plugin-chapter.mjs"
},
"require": {
"types": "./types/artplayer-plugin-chapter.d.cts",
"default": "./dist/artplayer-plugin-chapter.js"
}
}, },
"./legacy": { "./legacy": {
"types": "./types/artplayer-plugin-chapter.d.ts", "import": {
"import": "./dist/artplayer-plugin-chapter.legacy.js", "types": "./types/artplayer-plugin-chapter.d.cts",
"require": "./dist/artplayer-plugin-chapter.legacy.js" "default": "./dist/artplayer-plugin-chapter.legacy.js"
},
"require": {
"types": "./types/artplayer-plugin-chapter.d.cts",
"default": "./dist/artplayer-plugin-chapter.legacy.js"
}
} }
}, },
"main": "./dist/artplayer-plugin-chapter.js", "main": "./dist/artplayer-plugin-chapter.js",
"module": "./dist/artplayer-plugin-chapter.mjs", "module": "./dist/artplayer-plugin-chapter.mjs",
"types": "./types/artplayer-plugin-chapter.d.ts", "types": "./types/artplayer-plugin-chapter.d.ts",
"legacy": "./dist/artplayer-plugin-chapter.legacy.js", "legacy": "./dist/artplayer-plugin-chapter.legacy.js",
"browserslist": "last 1 Chrome version" "browserslist": "last 1 Chrome version",
"typesVersions": {
"*": {
"legacy": [
"types/artplayer-plugin-chapter.d.ts"
]
}
}
} }
@@ -1,4 +1,4 @@
{ {
"extends": "../../tsconfig.base.json", "extends": "../../tsconfig.base.json",
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.mts", "src/**/*.cts", "types/**/*.d.ts", "../../types/assets.d.ts"] "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.mts", "src/**/*.cts", "types/**/*.d.ts", "types/**/*.d.mts", "types/**/*.d.cts", "../../types/assets.d.ts"]
} }
@@ -0,0 +1,11 @@
import type * as Definition from './artplayer-plugin-chapter.js'
declare const artplayerPluginChapter: typeof Definition.default
declare namespace artplayerPluginChapter {
type Chapters = Definition.Chapters
type Option = Definition.Option
type Result = Definition.Result
}
export = artplayerPluginChapter
@@ -0,0 +1,2 @@
export { default } from './artplayer-plugin-chapter.cjs'
export type { Chapters, Option, Result } from './artplayer-plugin-chapter.js'
@@ -1,16 +1,16 @@
import type Artplayer from 'artplayer' import type Artplayer from 'artplayer'
type Chapters = { export type Chapters = {
start: number start: number
end: number end: number
title: string title: string
}[] }[]
interface Option { export interface Option {
chapters?: Chapters chapters?: Chapters
} }
interface Result { export interface Result {
name: 'artplayerPluginChapter' name: 'artplayerPluginChapter'
update: (option: Option) => void update: (option: Option) => void
} }
+25 -10
View File
@@ -19,19 +19,34 @@
], ],
"exports": { "exports": {
".": { ".": {
"types": "./types/artplayer.d.ts", "import": {
"import": "./dist/artplayer.mjs", "types": "./types/artplayer.d.mts",
"require": "./dist/artplayer.js" "default": "./dist/artplayer.mjs"
},
"require": {
"types": "./types/artplayer.d.cts",
"default": "./dist/artplayer.js"
}
}, },
"./legacy": { "./legacy": {
"types": "./types/artplayer.d.ts", "import": {
"import": "./dist/artplayer.legacy.js", "types": "./types/artplayer.d.cts",
"require": "./dist/artplayer.legacy.js" "default": "./dist/artplayer.legacy.js"
},
"require": {
"types": "./types/artplayer.d.cts",
"default": "./dist/artplayer.legacy.js"
}
}, },
"./i18n/*": { "./i18n/*": {
"types": "./types/i18n.d.ts", "import": {
"import": "./dist/i18n/*.mjs", "types": "./types/language.d.mts",
"require": "./dist/i18n/*.js" "default": "./dist/i18n/*.mjs"
},
"require": {
"types": "./types/language.d.cts",
"default": "./dist/i18n/*.js"
}
} }
}, },
"main": "./dist/artplayer.js", "main": "./dist/artplayer.js",
@@ -40,7 +55,7 @@
"typesVersions": { "typesVersions": {
"*": { "*": {
"i18n/*": [ "i18n/*": [
"types/i18n.d.ts" "types/legacy/language.d.ts"
], ],
"legacy": [ "legacy": [
"types/artplayer.d.ts" "types/artplayer.d.ts"
+1 -1
View File
@@ -1,4 +1,4 @@
{ {
"extends": "../../tsconfig.base.json", "extends": "../../tsconfig.base.json",
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.mts", "src/**/*.cts", "types/**/*.d.ts", "../../types/assets.d.ts"] "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.mts", "src/**/*.cts", "types/**/*.d.ts", "types/**/*.d.mts", "types/**/*.d.cts", "../../types/assets.d.ts"]
} }
+28
View File
@@ -0,0 +1,28 @@
# Declaration entrypoints
`artplayer.d.ts` remains the shared API definition and old TypeScript entry. Its
relative declarations describe the existing player; they are not a claim that the
runtime has already migrated to TypeScript.
Conditional exports select `artplayer.d.mts` for ESM and `artplayer.d.cts` for CJS
and legacy. The CJS bridge uses `export =` for the real module.exports constructor
and carries existing named types in its namespace. The ESM bridge re-exports that
constructor and the same type identities. Do not copy the class into a second
declaration: instance, ready callback and plugin types must remain consistent.
Languages use language.d.mts / language.d.cts for modern resolution and
legacy/language.d.ts for old typesVersions resolution. The value shape comes from
I18n's existing dictionary value type (`I18n['en']`, also compatible with TS 4.3.5).
i18n.d.ts contains dictionary definitions without suppressed module augmentation.
The editor's global language module is generated separately as
docs/assets/ts/artplayer-i18n.d.ts so it cannot contaminate npm consumers.
Top-level types and historical .d.ts filenames remain available; runtime paths and
exports do not change. See TypeScript's declaration module format and conditional
resolution rules: https://www.typescriptlang.org/docs/handbook/modules/reference.html
When changing types, run `yarn typecheck`, `yarn test:baseline` and
`yarn test:package:release`. They cover default/named types, core/legacy constructors,
chapter/legacy factories, language data, invalid inputs, NodeNext/Bundler and old
TS 4.3.5 consumers. Run `yarn build:ts` to refresh editor declarations. Full editor
behavior and other core declaration/runtime mismatches have CORE-07/SITE tasks.
+20
View File
@@ -0,0 +1,20 @@
import type * as Definition from './artplayer.js'
declare const Artplayer: typeof Definition.default
type Artplayer = Definition.default
declare namespace Artplayer {
type Config = Definition.Config
type Events = Definition.Events
type I18n = Definition.I18n
type Icons = Definition.Icons
type Option = Definition.Option
type Player = Definition.Player
type Setting = Definition.Setting
type SettingOption = Definition.SettingOption
type Subtitle = Definition.Subtitle
type Template = Definition.Template
type Utils = Definition.Utils
}
export = Artplayer
+2
View File
@@ -0,0 +1,2 @@
export { default } from './artplayer.cjs'
export type { Config, Events, I18n, Icons, Option, Player, Setting, SettingOption, Subtitle, Template, Utils } from './artplayer.js'
-6
View File
@@ -54,9 +54,3 @@ interface I18nValue {
} }
export type I18n = Partial<Record<I18nKeys, Partial<I18nValue>>> export type I18n = Partial<Record<I18nKeys, Partial<I18nValue>>>
declare module 'artplayer/i18n/*' {
const lang: Partial<I18nValue>
// @ts-expect-error TS2666
export default lang
}
+4
View File
@@ -0,0 +1,4 @@
import type { I18n } from './i18n.js'
declare const language: NonNullable<I18n['en']>
export = language
+1
View File
@@ -0,0 +1 @@
export { default } from './language.cjs'
+4
View File
@@ -0,0 +1,4 @@
import type { I18n } from '../i18n'
declare const language: NonNullable<I18n['en']>
export default language
@@ -0,0 +1,767 @@
{
"task": "PKG-CHAPTER-04",
"capturedAt": "2026-09-10T15:28:48.036Z",
"packages": [
{
"name": "artplayer",
"version": "5.4.1",
"archive": "artplayer.tgz",
"sha256": "a6003dd79beef54ea8ce028455573382a63e89b0323ac564cda1432bbd14848c",
"files": {
"package/README.md": "9b432fbd3145a33757a93e3fd01b7bd1c3369f51243c5147bca04c6f662b55e1",
"package/dist/artplayer.js": "9ad044a601dafc24f449b690403fb1c343b40e99ffb31043272189fc3c1e7bfa",
"package/dist/artplayer.legacy.js": "71eebcca3192000c58e20f2e3cb76e86c05e33b5a1fab0add20436a5933a3e87",
"package/dist/artplayer.mjs": "ac72f41624383ba853474161affb72b5887644449bf7cb18f6d18edeb2f6f997",
"package/dist/i18n/ar.js": "61c43469ee95a00dc624583f418653e3dcbf48b24ae6a4c203ad986234852365",
"package/dist/i18n/ar.mjs": "68922fdc9f80d3321ea0654c8ff8f5875b6715103d2b14ffcf17f93738b39cf9",
"package/dist/i18n/cs.js": "ad7bbf8853204a6955ef84bfbd932cab3f141a7e73a8145f28ba7a5b2b83b7c0",
"package/dist/i18n/cs.mjs": "29a489be767fda9d46b59c9adbaad323f17a5e67daf7f7aa78b7ce8fb5b4d63c",
"package/dist/i18n/es.js": "aaa95cc9645b734c58fba06fdbcdda962c4cb3a0e7eb6206f06d6168208cd86b",
"package/dist/i18n/es.mjs": "331d2ef74da2eec8f3304fec0b5340c795d9c1eec24e08167c9a7b66bf30973b",
"package/dist/i18n/fa.js": "c998467261cbdfd2c3fb16c0ae4b2c48c409f42f41aea35ed94766f1e12819d5",
"package/dist/i18n/fa.mjs": "b4c98894b46975cebf5ea9088bcf0b5bdfd408bc3c82f4e2e9128133c7de2d4d",
"package/dist/i18n/fr.js": "6b06e16b1fb01c8695fb5c10b32a00421399180de5dc5d845ce17010f2fd3e66",
"package/dist/i18n/fr.mjs": "abe8e3548fa7304f302e2c74818a6176edee8c3b65e33cb6f62e96d130749ee5",
"package/dist/i18n/id.js": "a5832c4bfc03c7f16418bf4b324d9773895541dc823ece9114741794737aad74",
"package/dist/i18n/id.mjs": "a40a433be6ca1ac1ee1810fe805ee60784d349e59b9ad82ea80201d660db4e68",
"package/dist/i18n/pl.js": "2491487062bdfc91d60f17c6e9a83ee196c991216d15f525fe3536b98873da2c",
"package/dist/i18n/pl.mjs": "ad8ea2c03785edbfe1f35761bec21b8a04213f9fa88a794d850bb3973564930f",
"package/dist/i18n/ru.js": "2d3a9ee6533cb6fa961f0a24a25ce63cc76992fca17e1769b6fa75104f8a1529",
"package/dist/i18n/ru.mjs": "a89b8c36cfd7c181c2b31aa823deda3d7c37b56b2b81746338c52ea1c1d93352",
"package/dist/i18n/tr.js": "438b06a4c3f479a2901b0085eaa7bdba8eaef87bdb07ff3faa559c85403fe433",
"package/dist/i18n/tr.mjs": "cc96f9cbb9c1587d5cd8f25b0b9800678ad76e93de089ae42c38dee16e6fe8fa",
"package/dist/i18n/vi.js": "1ffbd62843a902ea2967eab46432d3fc548f5633e53eed104314b523cacc46a8",
"package/dist/i18n/vi.mjs": "7872ded84622bcda20e8c1d70c597c2ba071b50701900efa47cc4683ee17f1a2",
"package/dist/i18n/zh-tw.js": "2d43577f98456488196921e1ec721695a95e1b8c827077286b02ce3fb987e8ff",
"package/dist/i18n/zh-tw.mjs": "7ec638b4babe59d3ab1d3e64abdd74a96fefb260a50e2cd7240f8d50a1340925",
"package/package.json": "b343df9955df9ac0ea71ea775bd0743c6b26c06d3bb7699128f7eac484fa769f",
"package/types/README.md": "d38bb63f9e96f995273f9da6833a8b936a74718ef7b710dbd316530d41ccae07",
"package/types/artplayer.d.cts": "be67cbb6c352944741bca88f969ad1bafa9898049595930e2dc6693d5e7262f5",
"package/types/artplayer.d.mts": "87d1f0e2a7bf7b7bdf700875cb2c77dea8be34ba3ac943e5fd35e8daa99bf241",
"package/types/artplayer.d.ts": "98d3e7b65f9f81fba155da08fd47e4fb25f4c69279e3afd993c4a55070f8a850",
"package/types/component.d.ts": "facfa29d9092fe2c63a7d8357ce7d0faa5e32811d2fedeef6dc8b28ad5d04891",
"package/types/config.d.ts": "c4fd8681bf32b10c743e3e561c532520c8f32e43fd765524850b15e55cb91c72",
"package/types/cssVar.d.ts": "e027d82fb4f01c9ce7559cf679b2d5ee1962d3f7e5b4dd64ca21f472b933efb6",
"package/types/events.d.ts": "98c74aebb82455accc0b3523af5a1145bc9119da58c884200adc36e70a164b02",
"package/types/i18n.d.ts": "3e14759caf71f97f01650839248c8737c42d2c2979dabc43ad92b724da648708",
"package/types/icons.d.ts": "0d8e8e52e52130dd4a29bab551dd7a2a954797e42e92a6e068c85d583e23e6a4",
"package/types/language.d.cts": "1c9e0c47fae3c2d68c3e144d95a55071318a03bb31554dd049109efd3d0f95a4",
"package/types/language.d.mts": "c391e863012c77769e661afbf8fa949e9373aa88d17f58cbba7f5696edb8077f",
"package/types/legacy/language.d.ts": "c452ffd764ff9b29b819b3475c42395d2ea7a33560d8c186ef5df3844b9524c3",
"package/types/option.d.ts": "d4de53930c2fa9d59c77c4324d63f24b057bce6c4d0273c34a0ab06094dcea2c",
"package/types/player.d.ts": "986382bb6b4e82746fd2405092e69d0ef413988887a557a0fd4db85d64b78d54",
"package/types/quality.d.ts": "7ed6ed78cea52991b2f6ddd2bd3b7bd8c5146fdfff7486fe8b814c3e632f1567",
"package/types/setting.d.ts": "d12a75b656fff70cbb30be4bffec46d9c4273636e8722bce971a4d2b188712a1",
"package/types/subtitle.d.ts": "d25b470e47d6a9bd696d9c1ad8adb58e56a208f05695186d513bc8c43c2e8acf",
"package/types/template.d.ts": "68aed9e97d006d6be4fabb8504ca84dafab770b0925f4d6e7319e67c82f21b0d",
"package/types/utils.d.ts": "d3fb67b9187e1c81c6b3850694cf2627e927225ace160ae58c11631e9f673a98"
}
},
{
"name": "artplayer-plugin-chapter",
"version": "1.1.0",
"archive": "artplayer-plugin-chapter.tgz",
"sha256": "c44d129195028dcb527499d4bf47835ecde215e4d19565eba7f6eed6d6a74af7",
"files": {
"package/ARCHITECTURE.md": "20743bad87a174b0450e0d876b6aa6b2a9f47df296d479511ce7cc9298fdb57c",
"package/README.md": "b95400ff3d525621a15268bb56a2d353aacaaadefde7e735d7abd91a34edd96f",
"package/dist/artplayer-plugin-chapter.js": "6ac3dfe28f46084ac7caedd571b1a97dcee3cf9d708112f1b8bbd6566e1dc5c5",
"package/dist/artplayer-plugin-chapter.legacy.js": "6d9bff885412169e701670961aa00c2e46c4b42c9b9647ff4e6d198777d2a359",
"package/dist/artplayer-plugin-chapter.mjs": "26415cecab2c0198c566cef0232e20123413782d5bad7534a32939b3298617af",
"package/package.json": "24eec6907b3218439189adab6af3f932c1497c47c2d41209311c01042b07fd4f",
"package/types/artplayer-plugin-chapter.d.cts": "4f07514b37453cd6cea8e5aa28fa018ff31738e0d423c11a3b5eccd50ed30bcc",
"package/types/artplayer-plugin-chapter.d.mts": "610179754db36276e161a07bccf4eaba8b4480f053e716a2bcc5a1574871a171",
"package/types/artplayer-plugin-chapter.d.ts": "581aa2862e709601c87a23585f54a969ebd350be56a7469a31ff53f1311b578d"
}
}
],
"types": [
{
"compiler": "5.9.3",
"mode": "node10-commonjs",
"diagnostics": [],
"declarations": [
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.legacy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.dom.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.collection.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.core.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.generator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.iterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.proxy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.reflect.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.array.include.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.regexp.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.array.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.bigint.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.number.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es5.d.ts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts",
"node_modules/artplayer/types/artplayer.d.ts",
"node_modules/artplayer/types/component.d.ts",
"node_modules/artplayer/types/config.d.ts",
"node_modules/artplayer/types/cssVar.d.ts",
"node_modules/artplayer/types/events.d.ts",
"node_modules/artplayer/types/i18n.d.ts",
"node_modules/artplayer/types/icons.d.ts",
"node_modules/artplayer/types/legacy/language.d.ts",
"node_modules/artplayer/types/option.d.ts",
"node_modules/artplayer/types/player.d.ts",
"node_modules/artplayer/types/quality.d.ts",
"node_modules/artplayer/types/setting.d.ts",
"node_modules/artplayer/types/subtitle.d.ts",
"node_modules/artplayer/types/template.d.ts",
"node_modules/artplayer/types/utils.d.ts"
]
},
{
"compiler": "5.9.3",
"mode": "nodenext-cjs",
"diagnostics": [],
"declarations": [
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.legacy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.dom.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.collection.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.core.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.generator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.iterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.proxy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.reflect.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.array.include.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.regexp.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.array.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.bigint.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.number.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es5.d.ts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.cts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts",
"node_modules/artplayer/types/artplayer.d.cts",
"node_modules/artplayer/types/artplayer.d.ts",
"node_modules/artplayer/types/component.d.ts",
"node_modules/artplayer/types/config.d.ts",
"node_modules/artplayer/types/cssVar.d.ts",
"node_modules/artplayer/types/events.d.ts",
"node_modules/artplayer/types/i18n.d.ts",
"node_modules/artplayer/types/icons.d.ts",
"node_modules/artplayer/types/language.d.cts",
"node_modules/artplayer/types/option.d.ts",
"node_modules/artplayer/types/player.d.ts",
"node_modules/artplayer/types/quality.d.ts",
"node_modules/artplayer/types/setting.d.ts",
"node_modules/artplayer/types/subtitle.d.ts",
"node_modules/artplayer/types/template.d.ts",
"node_modules/artplayer/types/utils.d.ts"
]
},
{
"compiler": "5.9.3",
"mode": "bundler-esm",
"diagnostics": [],
"declarations": [
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.legacy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.dom.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.collection.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.core.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.generator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.iterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.proxy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.reflect.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.array.include.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.regexp.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.array.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.bigint.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.number.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es5.d.ts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.cts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.mts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts",
"node_modules/artplayer/types/artplayer.d.cts",
"node_modules/artplayer/types/artplayer.d.mts",
"node_modules/artplayer/types/artplayer.d.ts",
"node_modules/artplayer/types/component.d.ts",
"node_modules/artplayer/types/config.d.ts",
"node_modules/artplayer/types/cssVar.d.ts",
"node_modules/artplayer/types/events.d.ts",
"node_modules/artplayer/types/i18n.d.ts",
"node_modules/artplayer/types/icons.d.ts",
"node_modules/artplayer/types/language.d.cts",
"node_modules/artplayer/types/language.d.mts",
"node_modules/artplayer/types/option.d.ts",
"node_modules/artplayer/types/player.d.ts",
"node_modules/artplayer/types/quality.d.ts",
"node_modules/artplayer/types/setting.d.ts",
"node_modules/artplayer/types/subtitle.d.ts",
"node_modules/artplayer/types/template.d.ts",
"node_modules/artplayer/types/utils.d.ts"
]
},
{
"compiler": "4.3.5",
"mode": "node10-commonjs",
"diagnostics": [],
"declarations": [
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.dom.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.collection.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.core.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.generator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.iterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.proxy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.reflect.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2015.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2016.array.include.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2016.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2017.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2017.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2017.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2017.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2017.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2017.typedarrays.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2018.asyncgenerator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2018.asynciterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2018.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2018.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2018.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2018.regexp.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2019.array.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2019.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2019.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2019.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2019.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.bigint.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es2020.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript-compat/lib/lib.es5.d.ts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts",
"node_modules/artplayer/types/artplayer.d.ts",
"node_modules/artplayer/types/component.d.ts",
"node_modules/artplayer/types/config.d.ts",
"node_modules/artplayer/types/cssVar.d.ts",
"node_modules/artplayer/types/events.d.ts",
"node_modules/artplayer/types/i18n.d.ts",
"node_modules/artplayer/types/icons.d.ts",
"node_modules/artplayer/types/legacy/language.d.ts",
"node_modules/artplayer/types/option.d.ts",
"node_modules/artplayer/types/player.d.ts",
"node_modules/artplayer/types/quality.d.ts",
"node_modules/artplayer/types/setting.d.ts",
"node_modules/artplayer/types/subtitle.d.ts",
"node_modules/artplayer/types/template.d.ts",
"node_modules/artplayer/types/utils.d.ts"
]
},
{
"compiler": "5.9.3",
"mode": "nodenext-esm",
"diagnostics": [],
"declarations": [
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.decorators.legacy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.dom.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.collection.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.core.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.generator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.iterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.proxy.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.reflect.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.array.include.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2016.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2018.regexp.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.array.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.object.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2019.symbol.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.bigint.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.date.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.intl.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.number.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.promise.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.string.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts",
"D:/github/ArtPlayer/node_modules/typescript/lib/lib.es5.d.ts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.cts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.mts",
"node_modules/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts",
"node_modules/artplayer/types/artplayer.d.cts",
"node_modules/artplayer/types/artplayer.d.mts",
"node_modules/artplayer/types/artplayer.d.ts",
"node_modules/artplayer/types/component.d.ts",
"node_modules/artplayer/types/config.d.ts",
"node_modules/artplayer/types/cssVar.d.ts",
"node_modules/artplayer/types/events.d.ts",
"node_modules/artplayer/types/i18n.d.ts",
"node_modules/artplayer/types/icons.d.ts",
"node_modules/artplayer/types/language.d.cts",
"node_modules/artplayer/types/language.d.mts",
"node_modules/artplayer/types/option.d.ts",
"node_modules/artplayer/types/player.d.ts",
"node_modules/artplayer/types/quality.d.ts",
"node_modules/artplayer/types/setting.d.ts",
"node_modules/artplayer/types/subtitle.d.ts",
"node_modules/artplayer/types/template.d.ts",
"node_modules/artplayer/types/utils.d.ts"
]
}
],
"runtimeChecks": 23,
"knownTypeBlockers": 0,
"strictReleaseExit": 0,
"ciChecks": 62,
"browser": {
"startTime": "2026-09-10T15:21:32.399Z",
"duration": 28003.863999999998,
"expected": 54,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"tests": [
{
"title": "published-only observations: blank title, NaN and once-only metadata are historical defects",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "candidate clears titles on blank chapters, zero hover and replacement",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "candidate rejects NaN and can recover after an invalid update",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "candidate releases only its listeners and DOM across multiple instances and early destruction",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "candidate ignores pending metadata initialization after immediate destroy",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "candidate deduplicates stylesheet injection while the document is loading",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "published-only observations: blank title, NaN and once-only metadata are historical defects",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "candidate clears titles on blank chapters, zero hover and replacement",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "candidate rejects NaN and can recover after an invalid update",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "candidate releases only its listeners and DOM across multiple instances and early destruction",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "candidate ignores pending metadata initialization after immediate destroy",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "candidate deduplicates stylesheet injection while the document is loading",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "published-only observations: blank title, NaN and once-only metadata are historical defects",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "candidate clears titles on blank chapters, zero hover and replacement",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "candidate rejects NaN and can recover after an invalid update",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "candidate releases only its listeners and DOM across multiple instances and early destruction",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "candidate ignores pending metadata initialization after immediate destroy",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "candidate deduplicates stylesheet injection while the document is loading",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "factory, registration, input normalization and safe title text",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "progress bars, real hover, title edges and boundary seek",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "sync update, Infinity, object identity, empty lists and invalid data",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "explicit source update and core-owned destruction",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "factory, registration, input normalization and safe title text",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "progress bars, real hover, title edges and boundary seek",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "sync update, Infinity, object identity, empty lists and invalid data",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "explicit source update and core-owned destruction",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "factory, registration, input normalization and safe title text",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "progress bars, real hover, title edges and boundary seek",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "sync update, Infinity, object identity, empty lists and invalid data",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "explicit source update and core-owned destruction",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "factory, registration, input normalization and safe title text",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "progress bars, real hover, title edges and boundary seek",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "sync update, Infinity, object identity, empty lists and invalid data",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "explicit source update and core-owned destruction",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "factory, registration, input normalization and safe title text",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "progress bars, real hover, title edges and boundary seek",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "sync update, Infinity, object identity, empty lists and invalid data",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "explicit source update and core-owned destruction",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "factory, registration, input normalization and safe title text",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "progress bars, real hover, title edges and boundary seek",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "sync update, Infinity, object identity, empty lists and invalid data",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "explicit source update and core-owned destruction",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "published: real playback, pause, seek, switch and destroy",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "candidate: real playback, pause, seek, switch and destroy",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "controlled HTTP media failure emits a real video error",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "Range, media identity and docs candidate routes",
"project": "chromium",
"browser": "153.0.8010.12",
"status": "passed"
},
{
"title": "published: real playback, pause, seek, switch and destroy",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "candidate: real playback, pause, seek, switch and destroy",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "controlled HTTP media failure emits a real video error",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "Range, media identity and docs candidate routes",
"project": "firefox",
"browser": "155.0",
"status": "passed"
},
{
"title": "published: real playback, pause, seek, switch and destroy",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "candidate: real playback, pause, seek, switch and destroy",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "controlled HTTP media failure emits a real video error",
"project": "webkit",
"browser": "26.6",
"status": "passed"
},
{
"title": "Range, media identity and docs candidate routes",
"project": "webkit",
"browser": "26.6",
"status": "passed"
}
]
}
@@ -0,0 +1,41 @@
# PKG-CHAPTER-04:公开类型与新旧模块消费闭环
## 改动
chapter 公开 Chapters/Option/Result 类型,保留可选工厂、必填同步 update 和旧声明文件。
核心与 chapter 增加 .d.cts/.d.mts 桥接,按 import/require 条件选择声明,所有 runtime
目标仍是原文件;legacy 对应真实 CommonJS 导出,旧 TS 解析使用 typesVersions 回退。
桥接引用同一份 API 声明,不复制 Artplayer 类或要求旧用户升级编译器。
核心类型的最小配套修正是试点消费所需的构造器/语言入口,不是核心运行时重构。
language 值改用格式对应的默认导出,旧编译器回退文件从 I18n['en'] 推导现有字典值类型,
去掉原错误抑制和模块 augmentation。编辑器语言声明由 build:ts 生成独立全局文件并加入
libUris,核心/chapter 编辑器声明也重新生成;没有手写产物。
详见 [chapter 架构](../../packages/artplayer-plugin-chapter/ARCHITECTURE.md) 和
[核心声明说明](../../packages/artplayer/types/README.md)。采用的格式规则参考
[TypeScript 官方模块说明](https://www.typescriptlang.org/docs/handbook/modules/reference.html)。
## 验证
- TS 5.9.3 的 Node10 CommonJS、NodeNext CJS/ESM、Bundler ESM,以及 TS 4.3.5 Node10
全部通过:31 个消费场景,包含普通 API、章节参数/命名类型、语言值、legacy 和直接 CJS require。
- 新增反例验证 Result 字面量 name、必填 update、数字时间、语言值类型和非法字段仍拒绝;
不是使用 any、skipLibCheck 或宽泛索引消除错误。
- 实际 tarball 安装后的 23 项运行时与五组严格类型通过,已知诊断为 0;
`yarn test:package:release` 正常退出。历史 11 条候选已知错误全部移除,原发布基线保留。
- 安装产物三浏览器 54 项通过、无跳过/重试;最终重新打包后的 runtime 文件 SHA 与浏览器
实际加载的文件相同。报告、声明/入口指纹见 [执行记录](../baselines/chapter-types-validation.json)。
- `yarn ci:check` 62 项 Node/基线测试通过;新旧消费者正反例、严格源类型和 lint 通过。
`yarn build:ts` 成功,只有 core/chapter、语言声明和其加载清单发生实际生成内容变化。
补上类型回退后,旧 BASE-05 消费器检测到向上解析到 workspace 的错误:其临时目录原来在仓库
内。现在使用仓库外 OS 临时目录并验证清理边界,隔离断言保持不变;冻结发布结果逐项对照通过。
这证明旧版历史失败没有被新声明覆盖,未重新生成或放宽基线。
## 边界与接续
关闭 BASE-TYPE-01 和 BASE-TYPE-03;BASE-TYPE-04 等其余核心声明/运行时差异仍开放。
未改核心运行时代码、依赖或版本;没有推送/发布。严格打包通过不代表完成全部插件、完整编辑器、
真机/SDK 和远端 CI 验收。下一项按依赖推进试点汇总及 ENG-10,再进入核心源码拆分。
回退本任务独立提交即可恢复声明、manifest、测试与生成编辑器内容;chapter TS 运行时提交独立保留。
+2 -1
View File
@@ -33,7 +33,8 @@ Actions 固定完整 SHA,Node 来自 .node-version,Yarn 固定 1.22.22;安
ENG-07 将浏览器候选改为 `yarn test:package` 实际打包并安装后的文件,使用输出映射禁止 ENG-07 将浏览器候选改为 `yarn test:package` 实际打包并安装后的文件,使用输出映射禁止
回退到源码。安装/构建日志、tarball、成员指纹和浏览器结果一并上传,构建快照的 node_modules 回退到源码。安装/构建日志、tarball、成员指纹和浏览器结果一并上传,构建快照的 node_modules
链接不上传。初始包范围为 core/chapter;精确历史类型诊断仍阻止严格发布检查通过。 链接不上传。初始包范围为 core/chapter;PKG-CHAPTER-04 已将这两个包的已知类型诊断清零,
严格打包检查现已通过,仍不等于整批发布准入或远端 CI 已通过。
见 [消费者说明](../test/package/README.md)。本地已验证,远端执行仍待 CI-04。 见 [消费者说明](../test/package/README.md)。本地已验证,远端执行仍待 CI-04。
.github/workflows/pages.yml 仅支持手动运行,限定 master,且仓库变量 PAGES_DEPLOY_ENABLED 必须为 true。初始启用状态未经远端核实;没有修改该变量或其他 GitHub 设置。保留此门槛用于 CI-02 完成域名、路径和远端配置验收后再启用,不能直接自动部署 PR 产物。 .github/workflows/pages.yml 仅支持手动运行,限定 master,且仓库变量 PAGES_DEPLOY_ENABLED 必须为 true。初始启用状态未经远端核实;没有修改该变量或其他 GitHub 设置。保留此门槛用于 CI-02 完成域名、路径和远端配置验收后再启用,不能直接自动部署 PR 产物。
+3 -2
View File
@@ -4,7 +4,7 @@
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 214 项,范围 22 个包及工作区/示例。 基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 214 项,范围 22 个包及工作区/示例。
状态:todo 181 / doing 0 / blocked 0 / done 33 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 状态:todo 180 / doing 0 / blocked 0 / done 34 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
@@ -135,7 +135,7 @@
| PKG-CHAPTER-01 | artplayer-plugin-chapter<br>核对包契约与历史用法 | BASE-05 | chapters 时间区间、update、name 和进度 DOM 清单 | 源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结 | M | done | | PKG-CHAPTER-01 | artplayer-plugin-chapter<br>核对包契约与历史用法 | BASE-05 | chapters 时间区间、update、name 和进度 DOM 清单 | 源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结 | M | done |
| PKG-CHAPTER-02 | artplayer-plugin-chapter<br>建立特有行为与错误测试 | PKG-CHAPTER-01, ENG-03, ENG-05 | 区间重叠/空列表/边界 seek、hover 标题和 update 用例 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言;修正 BASE-TYPE-02 的可选参数声明并补正反例 | M | done | | PKG-CHAPTER-02 | artplayer-plugin-chapter<br>建立特有行为与错误测试 | PKG-CHAPTER-01, ENG-03, ENG-05 | 区间重叠/空列表/边界 seek、hover 标题和 update 用例 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言;修正 BASE-TYPE-02 的可选参数声明并补正反例 | M | done |
| PKG-CHAPTER-03 | artplayer-plugin-chapter<br>以 TypeScript 拆分内部职责与资源 | PKG-CHAPTER-02, ENG-07 | 以严格 TS 拆分区间计算、进度 DOM、事件生命周期与样式注入;公开声明消费在 04 闭环 | 不依赖新核心方法或大范围设置重构;旧 API/事件和资源通过,必要适配限包内 | M | done | | PKG-CHAPTER-03 | artplayer-plugin-chapter<br>以 TypeScript 拆分内部职责与资源 | PKG-CHAPTER-02, ENG-07 | 以严格 TS 拆分区间计算、进度 DOM、事件生命周期与样式注入;公开声明消费在 04 闭环 | 不依赖新核心方法或大范围设置重构;旧 API/事件和资源通过,必要适配限包内 | M | done |
| PKG-CHAPTER-04 | artplayer-plugin-chapter<br>迁移自有源码和公开类型 | PKG-CHAPTER-03, ENG-04, ENG-06 | 承接 03 的自有源码 TS 化,完善公开 Chapters/Option/Result 与 update 推导,关闭声明模块解析和旧消费差异 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容;处理 BASE-TYPE-01/03,保持运行时和新旧 TS 模块解析消费 | M | todo | | PKG-CHAPTER-04 | artplayer-plugin-chapter<br>迁移自有源码和公开类型 | PKG-CHAPTER-03, ENG-04, ENG-06 | 承接 03 的自有源码 TS 化,完善公开 Chapters/Option/Result 与 update 推导,关闭声明模块解析和旧消费差异 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容;处理 BASE-TYPE-01/03,保持运行时和新旧 TS 模块解析消费 | M | done |
| PKG-CHAPTER-05 | artplayer-plugin-chapter<br>验证新旧核心和组合 | PKG-CHAPTER-04, CORE-22 | chapter + quality/thumbnail、移动和全屏进度场景 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | M | todo | | PKG-CHAPTER-05 | artplayer-plugin-chapter<br>验证新旧核心和组合 | PKG-CHAPTER-04, CORE-22 | chapter + quality/thumbnail、移动和全屏进度场景 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | M | todo |
| PKG-CHAPTER-06 | artplayer-plugin-chapter<br>验证分发并同步文档 | PKG-CHAPTER-05, ENG-07 | chapter.js 示例、产物和变更记录 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | M | todo | | PKG-CHAPTER-06 | artplayer-plugin-chapter<br>验证分发并同步文档 | PKG-CHAPTER-05, ENG-07 | chapter.js 示例、产物和变更记录 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | M | todo |
@@ -436,3 +436,4 @@
- PKG-CHAPTER-01: [记录](changes/2026-09-10-PKG-CHAPTER-01-contract.md) [记录](baselines/chapter-contract.md) - PKG-CHAPTER-01: [记录](changes/2026-09-10-PKG-CHAPTER-01-contract.md) [记录](baselines/chapter-contract.md)
- PKG-CHAPTER-02: [记录](changes/2026-09-10-PKG-CHAPTER-02-tests.md) [记录](baselines/chapter-validation.json) - PKG-CHAPTER-02: [记录](changes/2026-09-10-PKG-CHAPTER-02-tests.md) [记录](baselines/chapter-validation.json)
- PKG-CHAPTER-03: [记录](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md) [记录](baselines/chapter-migration-validation.json) - PKG-CHAPTER-03: [记录](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md) [记录](baselines/chapter-migration-validation.json)
- PKG-CHAPTER-04: [记录](changes/2026-09-10-PKG-CHAPTER-04-public-types.md) [记录](baselines/chapter-types-validation.json)
+4
View File
@@ -1,5 +1,9 @@
# 进度与证据 # 进度与证据
## 当前实施:PKG-CHAPTER-04 类型消费闭环完成
chapter 公开命名类型、核心/插件 CJS/ESM 桥接及旧 legacy/language 回退通过五组编译模式(31 场景),实际 tarball 严格发布检查诊断为零;62 项 Node/基线测试和 54 项安装产物三浏览器检查通过。关闭 BASE-TYPE-01/03,旧发布基线不改。见 [交付](changes/2026-09-10-PKG-CHAPTER-04-public-types.md)。当前 214 项,34 完成、180 待办。生产运行时:chapter 已 TS 化,核心仍未迁移;本任务核心只修正类型入口。03 提交 48660c4e;下一项 ENG-10 接续现有风险/可靠性规则,然后 PILOT-01 汇总现有试点证据,进入 CORE-01。
## 当前实施:PKG-CHAPTER-03 首包 TS 源码拆分完成 ## 当前实施:PKG-CHAPTER-03 首包 TS 源码拆分完成
chapter 已从单体 JS 入口改为五个 TS 文件,区间、DOM、生命周期和样式职责清楚;修复标题、NaN、销毁和重复样式问题。61 项 Node/基线检查、源码及安装产物各 54 项三浏览器测试通过;三格式产物已生成。见 [交付](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md)。当前 214 项,33 完成、181 待办。生产迁移:chapter 自有运行时已 TS 化,核心尚未开始。ENG-07 提交 a0286c4e;下一项 PKG-CHAPTER-04 公开类型与消费者闭环。 chapter 已从单体 JS 入口改为五个 TS 文件,区间、DOM、生命周期和样式职责清楚;修复标题、NaN、销毁和重复样式问题。61 项 Node/基线检查、源码及安装产物各 54 项三浏览器测试通过;三格式产物已生成。见 [交付](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md)。当前 214 项,33 完成、181 待办。生产迁移:chapter 自有运行时已 TS 化,核心尚未开始。ENG-07 提交 a0286c4e;下一项 PKG-CHAPTER-04 公开类型与消费者闭环。
+3
View File
@@ -4,6 +4,9 @@ BASE-07 将先前基线发现和第三方来源缺口纳入同一份责任台账
## 如何读取状态 ## 如何读取状态
PKG-CHAPTER-04 另关闭 BASE-TYPE-01/03:新旧编译器及实际 tarball 消费的默认导出、语言与
legacy 路径通过,严格打包诊断清零。完整证据与其余未关闭问题仍以 risks.json 为准。
BASE-07 初始登记 39 项;后续新增和关闭状态以 risks.json 为准。ENG-06 修复 BUILD-AMD-01,PKG-CHAPTER-02 修复 BASE-TYPE-02,均有独立回归证据。reproduced 表示已保存复现结果;source-observed 表示在源码、声明或产物中看到事实;unverified 表示来源、环境或行为仍需取证。证据等级与处理状态互相独立,不能把全部事项称为缺陷,也不能因建立了测试基线而自动接受旧缺陷。 BASE-07 初始登记 39 项;后续新增和关闭状态以 risks.json 为准。ENG-06 修复 BUILD-AMD-01,PKG-CHAPTER-02 修复 BASE-TYPE-02,均有独立回归证据。reproduced 表示已保存复现结果;source-observed 表示在源码、声明或产物中看到事实;unverified 表示来源、环境或行为仍需取证。证据等级与处理状态互相独立,不能把全部事项称为缺陷,也不能因建立了测试基线而自动接受旧缺陷。
其中 15 项来自生命周期、DOM/示例、消费者类型/分发和性能基线;其余包含发布来源、站点分发、素材来源、8 组内嵌资源和 12 个集成边界。每项都列出负责的任务 ID、证据路径、兼容处理路线与关闭条件。具体复现仍以原基线报告为准。 其中 15 项来自生命周期、DOM/示例、消费者类型/分发和性能基线;其余包含发布来源、站点分发、素材来源、8 组内嵌资源和 12 个集成边界。每项都列出负责的任务 ID、证据路径、兼容处理路线与关闭条件。具体复现仍以原基线报告为准。
+2 -2
View File
@@ -13,9 +13,9 @@
| BASE-DOM-01 | open / 已复现 | 控件 Tab 不可达 | CORE-23, CORE-17 | | BASE-DOM-01 | open / 已复现 | 控件 Tab 不可达 | CORE-23, CORE-17 |
| BASE-DOM-02 | open / 已复现 | 窄容器中控件裁切 | CORE-13, CORE-14 | | BASE-DOM-02 | open / 已复现 | 窄容器中控件裁切 | CORE-13, CORE-14 |
| BASE-DEMO-01 | open / 源码/产物事实 | 旧 thumbnail 插件示例不对应当前 workspace 包 | SITE-01, EX-03 | | BASE-DEMO-01 | open / 源码/产物事实 | 旧 thumbnail 插件示例不对应当前 workspace 包 | SITE-01, EX-03 |
| BASE-TYPE-01 | open / 已复现 | NodeNext ESM 默认导出与声明互操作失配 | ENG-04, CORE-07, PKG-CHAPTER-04 | | BASE-TYPE-01 | resolved / 已复现 | NodeNext ESM 默认导出与声明互操作失配 | ENG-04, CORE-07, PKG-CHAPTER-04 |
| BASE-TYPE-02 | resolved / 已复现 | chapter 可选运行时参数被声明为必填 | PKG-CHAPTER-02 | | BASE-TYPE-02 | resolved / 已复现 | chapter 可选运行时参数被声明为必填 | PKG-CHAPTER-02 |
| BASE-TYPE-03 | open / 已复现 | chapter legacy 缺旧模块解析的声明回退 | ENG-04, PKG-CHAPTER-04 | | BASE-TYPE-03 | resolved / 已复现 | chapter legacy 缺旧模块解析的声明回退 | ENG-04, PKG-CHAPTER-04 |
| BASE-TYPE-04 | open / 源码/产物事实 | plugins.add / toggle 的旧声明返回值与运行时不同 | CORE-07 | | BASE-TYPE-04 | open / 源码/产物事实 | plugins.add / toggle 的旧声明返回值与运行时不同 | CORE-07 |
| BASE-DIST-01 | open / 源码/产物事实 | thumbnail tool 分发入口与类型文件缺失 | PKG-TOOL-THUMB-01, PKG-TOOL-THUMB-04 | | BASE-DIST-01 | open / 源码/产物事实 | thumbnail tool 分发入口与类型文件缺失 | PKG-TOOL-THUMB-01, PKG-TOOL-THUMB-04 |
| BASE-PERF-01 | open / 已复现 | 销毁后的 resize 防抖重新创建 notice timer | CORE-17, CORE-04, CORE-18 | | BASE-PERF-01 | open / 已复现 | 销毁后的 resize 防抖重新创建 notice timer | CORE-17, CORE-04, CORE-18 |
+23 -5
View File
@@ -2,7 +2,7 @@
"schemaVersion": 1, "schemaVersion": 1,
"task": "BASE-07", "task": "BASE-07",
"sourceCommit": "e01f39ff", "sourceCommit": "e01f39ff",
"updatedAt": "2026-09-10T14:41:52.219Z", "updatedAt": "2026-09-10T15:27:41.538Z",
"note": "Open means closure evidence is outstanding; source-observed and unverified are not reproduced runtime bugs. A source issue already mitigated in the workspace still requires candidate regression evidence. No accepted-with-scope item is implied by baseline task completion.", "note": "Open means closure evidence is outstanding; source-observed and unverified are not reproduced runtime bugs. A source issue already mitigated in the workspace still requires candidate regression evidence. No accepted-with-scope item is implied by baseline task completion.",
"items": [ "items": [
{ {
@@ -147,7 +147,7 @@
"id": "BASE-TYPE-01", "id": "BASE-TYPE-01",
"title": "NodeNext ESM 默认导出与声明互操作失配", "title": "NodeNext ESM 默认导出与声明互操作失配",
"confirmation": "reproduced", "confirmation": "reproduced",
"status": "open", "status": "resolved",
"owners": [ "owners": [
"ENG-04", "ENG-04",
"CORE-07", "CORE-07",
@@ -157,7 +157,16 @@
"refactor/baselines/consumers.json" "refactor/baselines/consumers.json"
], ],
"compatibleResolution": "分配 ESM/CJS 声明入口,保留旧解析模式,避免 any/skipLibCheck 掩盖。", "compatibleResolution": "分配 ESM/CJS 声明入口,保留旧解析模式,避免 any/skipLibCheck 掩盖。",
"closureCriteria": "四模式原合法消费通过,NodeNext ESM 对实际默认导出可构造/调用。" "closureCriteria": "四模式原合法消费通过,NodeNext ESM 对实际默认导出可构造/调用。",
"resolutionEvidence": [
"refactor/changes/2026-09-10-PKG-CHAPTER-04-public-types.md",
"refactor/baselines/chapter-types-validation.json",
"test/types/chapter-exports.ts",
"test/types/language-value.ts",
"test/types/commonjs.cts",
"refactor/scripts/types.test.mjs"
],
"resolutionRationale": "格式匹配的 CJS/ESM 声明及旧 TS legacy/language 回退通过五组编译模式;实际安装 tarball 的已知诊断清零,运行时路径/导出不变,旧发布基线隔离重跑保持原失败。"
}, },
{ {
"id": "BASE-TYPE-02", "id": "BASE-TYPE-02",
@@ -186,7 +195,7 @@
"id": "BASE-TYPE-03", "id": "BASE-TYPE-03",
"title": "chapter legacy 缺旧模块解析的声明回退", "title": "chapter legacy 缺旧模块解析的声明回退",
"confirmation": "reproduced", "confirmation": "reproduced",
"status": "open", "status": "resolved",
"owners": [ "owners": [
"ENG-04", "ENG-04",
"PKG-CHAPTER-04" "PKG-CHAPTER-04"
@@ -195,7 +204,16 @@
"refactor/baselines/consumers.json" "refactor/baselines/consumers.json"
], ],
"compatibleResolution": "保留 legacy 文件和导入路径,补旧解析类型回退。", "compatibleResolution": "保留 legacy 文件和导入路径,补旧解析类型回退。",
"closureCriteria": "Node10 解析和 NodeNext/Bundler 消费均有正向证据。" "closureCriteria": "Node10 解析和 NodeNext/Bundler 消费均有正向证据。",
"resolutionEvidence": [
"refactor/changes/2026-09-10-PKG-CHAPTER-04-public-types.md",
"refactor/baselines/chapter-types-validation.json",
"test/types/chapter-exports.ts",
"test/types/language-value.ts",
"test/types/commonjs.cts",
"refactor/scripts/types.test.mjs"
],
"resolutionRationale": "格式匹配的 CJS/ESM 声明及旧 TS legacy/language 回退通过五组编译模式;实际安装 tarball 的已知诊断清零,运行时路径/导出不变,旧发布基线隔离重跑保持原失败。"
}, },
{ {
"id": "BASE-TYPE-04", "id": "BASE-TYPE-04",
+5 -4
View File
@@ -1,6 +1,7 @@
import assert from 'node:assert/strict' import assert from 'node:assert/strict'
import { execFileSync } from 'node:child_process' import { execFileSync } from 'node:child_process'
import fs from 'node:fs' import fs from 'node:fs'
import os from 'node:os'
import path from 'node:path' import path from 'node:path'
import { fileURLToPath } from 'node:url' import { fileURLToPath } from 'node:url'
import ts from 'typescript' import ts from 'typescript'
@@ -8,7 +9,7 @@ import { ensureArchive, hash, readMember, refactorDir } from './releases.mjs'
const root = path.resolve(refactorDir, '..') const root = path.resolve(refactorDir, '..')
const fixtures = path.join(refactorDir, 'fixtures/consumers') const fixtures = path.join(refactorDir, 'fixtures/consumers')
const parent = path.join(refactorDir, '.cache/consumers') const parent = os.tmpdir()
const reportPath = path.join(refactorDir, 'baselines/consumers.json') const reportPath = path.join(refactorDir, 'baselines/consumers.json')
const fixtureNames = ['runtime.cjs', 'public.ts', 'language.ts', 'optional-chapter.ts', 'legacy-plugin.ts'] const fixtureNames = ['runtime.cjs', 'public.ts', 'language.ts', 'optional-chapter.ts', 'legacy-plugin.ts']
export const runtimeChecks = [ export const runtimeChecks = [
@@ -22,7 +23,7 @@ export const runtimeChecks = [
export async function runConsumers() { export async function runConsumers() {
const releases = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/releases.json'), 'utf8')).releases const releases = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/releases.json'), 'utf8')).releases
fs.mkdirSync(parent, { recursive: true }) fs.mkdirSync(parent, { recursive: true })
const dir = fs.mkdtempSync(path.join(parent, 'published-')) const dir = fs.mkdtempSync(path.join(parent, 'artplayer-published-'))
try { try {
const provenance = [] const provenance = []
for (const release of releases) { for (const release of releases) {
@@ -68,8 +69,8 @@ export async function runConsumers() {
fixtureHashAlgorithm: 'sha256-lf', fixtures: Object.fromEntries(fixtureNames.map(name => [name, hash(fs.readFileSync(path.join(fixtures, name), 'utf8').replaceAll('\r\n', '\n'))])), runtime, types } fixtureHashAlgorithm: 'sha256-lf', fixtures: Object.fromEntries(fixtureNames.map(name => [name, hash(fs.readFileSync(path.join(fixtures, name), 'utf8').replaceAll('\r\n', '\n'))])), runtime, types }
} }
finally { finally {
const resolved = path.resolve(dir) const resolved = fs.realpathSync(dir)
assert(resolved.startsWith(path.resolve(parent) + path.sep) && path.basename(resolved).startsWith('published-'), 'Unsafe consumer cleanup') assert(path.dirname(resolved) === fs.realpathSync(parent) && path.basename(resolved).startsWith('artplayer-published-'), 'Unsafe consumer cleanup')
fs.rmSync(resolved, { recursive: true, force: true }) fs.rmSync(resolved, { recursive: true, force: true })
} }
} }
+15
View File
@@ -46,3 +46,18 @@ test('Chapter optional factory parameters preserve strict update and data types
const diagnostics = checkConsumer(ts, 'bundler-esm', unguarded) const diagnostics = checkConsumer(ts, 'bundler-esm', unguarded)
assert.equal(diagnostics.length, 3, 'Invalid update, title and null option must each fail') assert.equal(diagnostics.length, 3, 'Invalid update, title and null option must each fail')
}) })
test('Chapter named types and legacy aliases remain strict in modern and old consumers', () => {
const source = fs.readFileSync(path.join(refactorDir, '../test/types/chapter-exports.ts'), 'utf8')
const language = fs.readFileSync(path.join(refactorDir, '../test/types/language-value.ts'), 'utf8')
for (const [compiler, mode] of [[ts, 'nodenext-esm'], [ts, 'nodenext-cjs'], [compat, 'node10-commonjs']]) {
assert.deepEqual(checkConsumer(compiler, mode, source), [])
const invalid = source.replaceAll(/\/\/ @ts-expect-error[^\n]*\n/g, '')
assert.equal(checkConsumer(compiler, mode, invalid).length, 3)
assert.deepEqual(checkConsumer(compiler, mode, language), [])
assert.equal(checkConsumer(compiler, mode, language.replaceAll(/\/\/ @ts-expect-error[^\n]*\n/g, '')).length, 2)
}
const commonjs = fs.readFileSync(path.join(refactorDir, '../test/types/commonjs.cts'), 'utf8')
assert.deepEqual(checkConsumer(ts, 'nodenext-cjs', commonjs), [])
assert.equal(checkConsumer(ts, 'nodenext-cjs', commonjs.replaceAll(/\/\/ @ts-expect-error[^\n]*\n/g, '')).length, 1)
})
+5 -2
View File
@@ -1205,11 +1205,14 @@
"ENG-04", "ENG-04",
"ENG-06" "ENG-06"
], ],
"status": "todo", "status": "done",
"risk": "M", "risk": "M",
"deliverable": "承接 03 的自有源码 TS 化,完善公开 Chapters/Option/Result 与 update 推导,关闭声明模块解析和旧消费差异", "deliverable": "承接 03 的自有源码 TS 化,完善公开 Chapters/Option/Result 与 update 推导,关闭声明模块解析和旧消费差异",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容;处理 BASE-TYPE-01/03,保持运行时和新旧 TS 模块解析消费", "acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容;处理 BASE-TYPE-01/03,保持运行时和新旧 TS 模块解析消费",
"evidence": [] "evidence": [
"changes/2026-09-10-PKG-CHAPTER-04-public-types.md",
"baselines/chapter-types-validation.json"
]
}, },
{ {
"id": "PKG-CHAPTER-05", "id": "PKG-CHAPTER-05",
+6
View File
@@ -1,5 +1,11 @@
# 已实现的类型检查与迁移入口 # 已实现的类型检查与迁移入口
PKG-CHAPTER-04 已修复核心/chapter 的条件类型入口、language 与 chapter legacy 回退。
当前五组编译模式均要求零诊断,覆盖默认/命名类型、legacy、语言与 CJS require 形式;
七条历史 NodeNext 诊断和打包额外四条诊断的候选豁免已移除,冻结发布基线不变。
旧编译器仍使用 TS 4.3.5 和原 .d.ts 文件。以下 ENG-04 说明保留初始建立时的历史背景,
当前实际入口以 scripts/typecheck.mjs、包内类型文档和任务变更记录为准。
ENG-04 使用开发编译器 TypeScript 5.9.3,并将 TypeScript 4.3.5 作为 npm alias typescript-compat 固定在根开发依赖。后者仅用于旧编译器消费回归,不进入播放器运行依赖或产物。Yarn 锁文件校验现在接受精确版本的 npm alias,仍拒绝范围和浮动版本。 ENG-04 使用开发编译器 TypeScript 5.9.3,并将 TypeScript 4.3.5 作为 npm alias typescript-compat 固定在根开发依赖。后者仅用于旧编译器消费回归,不进入播放器运行依赖或产物。Yarn 锁文件校验现在接受精确版本的 npm alias,仍拒绝范围和浮动版本。
## 命令及真实覆盖 ## 命令及真实覆盖
+3 -1
View File
@@ -57,7 +57,9 @@ console.log(`✨ Built ${artplayerTSoutput}`);
} }
pluginFiles.sort() pluginFiles.sort()
const allFiles = [...pluginFiles, 'artplayer.d.ts'] const languageFile = 'artplayer-i18n.d.ts'
fs.writeFileSync(path.join('docs/assets/ts', languageFile), `declare module 'artplayer/i18n/*' {\n const language: NonNullable<Artplayer.I18n['en']>\n export default language\n}\n`)
const allFiles = [...pluginFiles, 'artplayer.d.ts', languageFile]
const eslint = new ESLint({ fix: true, fixTypes: ['layout'] }) const eslint = new ESLint({ fix: true, fixTypes: ['layout'] })
const results = await eslint.lintFiles(allFiles.map(file => path.join('docs/assets/ts', file))) const results = await eslint.lintFiles(allFiles.map(file => path.join('docs/assets/ts', file)))
await ESLint.outputFixes(results) await ESLint.outputFixes(results)
+4 -2
View File
@@ -38,11 +38,13 @@ export function typeConsumers(dir) {
for (const [compiler, mode] of [[ts, 'node10-commonjs'], [ts, 'nodenext-cjs'], [ts, 'bundler-esm'], [compat, 'node10-commonjs'], [ts, 'nodenext-esm']]) { for (const [compiler, mode] of [[ts, 'node10-commonjs'], [ts, 'nodenext-cjs'], [ts, 'bundler-esm'], [compat, 'node10-commonjs'], [ts, 'nodenext-esm']]) {
const next = mode.startsWith('nodenext') const next = mode.startsWith('nodenext')
const extension = next ? (mode.endsWith('-cjs') ? 'cts' : 'mts') : 'ts' const extension = next ? (mode.endsWith('-cjs') ? 'cts' : 'mts') : 'ts'
const inputs = [...(mode === 'nodenext-esm' ? ['public'] : ['public', 'chapter-options']), 'language', 'legacy-plugin'] const inputs = ['public', 'chapter-options', 'chapter-exports', 'language-value', 'language', 'legacy-plugin']
if (mode === 'nodenext-cjs')
inputs.push('commonjs')
const files = inputs.map((name) => { const files = inputs.map((name) => {
const file = path.join(dir, `${name}.${extension}`) const file = path.join(dir, `${name}.${extension}`)
const folder = ['language', 'legacy-plugin'].includes(name) ? 'refactor/fixtures/consumers' : 'test/types' const folder = ['language', 'legacy-plugin'].includes(name) ? 'refactor/fixtures/consumers' : 'test/types'
fs.copyFileSync(path.join(workspace, folder, `${name}.ts`), file) fs.copyFileSync(path.join(workspace, folder, `${name}.${name === 'commonjs' ? 'cts' : 'ts'}`), file)
return file return file
}) })
const options = { const options = {
+7 -9
View File
@@ -70,16 +70,14 @@ export function runTypechecks() {
sourceCount += result.files.filter(file => relative(file).includes('/src/') && !/\.d\.[cm]?ts$/.test(file)).length sourceCount += result.files.filter(file => relative(file).includes('/src/') && !/\.d\.[cm]?ts$/.test(file)).length
console.log(`Strict project passed: ${relative(config)} (${result.files.length} root files)`) console.log(`Strict project passed: ${relative(config)} (${result.files.length} root files)`)
} }
for (const mode of ['node10-commonjs', 'nodenext-cjs', 'bundler-esm']) { for (const [compiler, mode] of [[ts, 'node10-commonjs'], [ts, 'nodenext-cjs'], [ts, 'bundler-esm'], [ts, 'nodenext-esm'], [compat, 'node10-commonjs']]) {
assert.deepEqual(checkConsumer(ts, mode), [], `Current consumer failed: ${mode}`) for (const fixture of ['test/types/public.ts', 'test/types/chapter-options.ts', 'test/types/chapter-exports.ts', 'test/types/language-value.ts', 'refactor/fixtures/consumers/language.ts', 'refactor/fixtures/consumers/legacy-plugin.ts']) {
console.log(`Consumer passed: TS ${ts.version} ${mode}`) assert.deepEqual(checkConsumer(compiler, mode, fs.readFileSync(path.join(root, fixture), 'utf8')), [], `Consumer failed: TS ${compiler.version} ${mode} ${fixture}`)
}
if (mode === 'nodenext-cjs')
assert.deepEqual(checkConsumer(compiler, mode, fs.readFileSync(path.join(root, 'test/types/commonjs.cts'), 'utf8')), [], 'CommonJS export assignment consumer failed')
console.log(`Consumers passed: TS ${compiler.version} ${mode}`)
} }
assert.deepEqual(checkConsumer(compat, 'node10-commonjs'), [], 'Old compiler consumer failed')
console.log(`Consumer passed: TS ${compat.version} node10-commonjs`)
const expected = read('test/types/known-diagnostics.json')
const diagnostics = checkConsumer(ts, 'nodenext-esm')
assert.deepEqual(diagnostics, expected.diagnostics, 'NodeNext ESM changed: review BASE-TYPE-01; a fix needs updated success assertions')
console.log(`Historical failure retained: ${expected.risk}, ${diagnostics.length} NodeNext ESM diagnostics; this is not candidate approval`)
console.log(`TypeScript production source files checked: ${sourceCount}; unmigrated JS is not counted`) console.log(`TypeScript production source files checked: ${sourceCount}; unmigrated JS is not counted`)
} }
+4 -2
View File
@@ -22,8 +22,10 @@ export restrictions and shared Emitter behavior. Public property descriptors and
default configuration are compared against the fixed published core/chapter. default configuration are compared against the fixed published core/chapter.
This is a targeted compatibility check, not a complete behavioral API comparison. This is a targeted compatibility check, not a complete behavioral API comparison.
Public, chapter-options, language and legacy-plugin TypeScript consumers run with Public, chapter-options, chapter-exports, language and legacy-plugin consumers run with
TS 5.9.3 (Node10, NodeNext CJS/ESM and Bundler) and TS 4.3.5 (Node10). Exact known TS 5.9.3 (Node10, NodeNext CJS/ESM and Bundler) and TS 4.3.5 (Node10). NodeNext CJS also
checks import-equals/require and namespaced types. PKG-CHAPTER-04 resolved the initial
type failures; all five groups now require zero diagnostics. Exact known
diagnostics are referenced by `known-types.json` and `test/types/known-diagnostics.json`. diagnostics are referenced by `known-types.json` and `test/types/known-diagnostics.json`.
Unexpected errors and unexpectedly removed errors both require investigation. Unexpected errors and unexpectedly removed errors both require investigation.
Remove a known case when its owning task fixes it; keep frozen release evidence intact. Remove a known case when its owning task fixes it; keep frozen release evidence intact.
+1 -5
View File
@@ -1,8 +1,4 @@
{ {
"note": "Exact published diagnostic references, not release waivers. Remove a case only with a verified fix; never edit the frozen baseline to accept a candidate regression.", "note": "Exact published diagnostic references, not release waivers. Remove a case only with a verified fix; never edit the frozen baseline to accept a candidate regression.",
"cases": [ "cases": []
{ "mode": "node10-commonjs", "fixture": "legacy-plugin.ts", "risk": "BASE-TYPE-03" },
{ "mode": "nodenext-esm", "fixture": "legacy-plugin.ts", "risk": "BASE-TYPE-01" },
{ "mode": "nodenext-esm", "fixture": "language.ts", "risk": "BASE-TYPE-01" }
]
} }
+24
View File
@@ -0,0 +1,24 @@
import type { Option as PlayerOption } from 'artplayer'
import type { Chapters, Option, Result } from 'artplayer-plugin-chapter'
import Artplayer from 'artplayer'
import ArtplayerLegacy from 'artplayer/legacy'
import chapter from 'artplayer-plugin-chapter'
import chapterLegacy from 'artplayer-plugin-chapter/legacy'
const chapters: Chapters = [{ start: 0, end: Infinity, title: 'First' }]
const option: Option = { chapters }
const playerOption: PlayerOption = { container: '#player', url: 'video.mp4', plugins: [chapter(option)] }
const art: Artplayer = new ArtplayerLegacy(playerOption)
const legacy: ArtplayerLegacy = new Artplayer(playerOption)
const result: Result = chapter(option)(art)
const oldEntry: Result = chapterLegacy()(legacy)
result.update(option)
oldEntry.update({})
// @ts-expect-error Result name is a stable literal, not an arbitrary string.
const invalidName: Result['name'] = 'chapter'
// @ts-expect-error Required update option remains required through the legacy entry.
oldEntry.update()
// @ts-expect-error Chapters do not accept string endpoints.
const invalid: Chapters = [{ start: 0, end: '8', title: 'Bad' }]
void [invalidName, invalid]
+13
View File
@@ -0,0 +1,13 @@
import Artplayer = require('artplayer')
import chapter = require('artplayer-plugin-chapter')
import legacy = require('artplayer-plugin-chapter/legacy')
import french = require('artplayer/i18n/fr')
const option: Artplayer.Option = { container: '#player', url: 'video.mp4', i18n: { fr: french } }
const art: Artplayer = new Artplayer(option)
const result: chapter.Result = chapter()(art)
const old: legacy.Result = legacy()(art)
result.update({})
old.update({})
// @ts-expect-error CommonJS callers retain strict endpoint types.
chapter({ chapters: [{ start: '0', end: 8, title: 'Invalid' }] })
+2 -45
View File
@@ -5,49 +5,6 @@
"CORE-07", "CORE-07",
"PKG-CHAPTER-04" "PKG-CHAPTER-04"
], ],
"scope": "Existing workspace NodeNext ESM failure, not a candidate waiver. Remove expected failures when a documented fix adds passing consumer assertions.", "scope": "Resolved by PKG-CHAPTER-04. Historical failures remain frozen under refactor/baselines/consumers.json; current consumers must have zero diagnostics.",
"diagnostics": [ "diagnostics": []
{
"file": "test/types/consumer.ts",
"code": 2349,
"line": 8,
"message": "This expression is not callable.\n Type 'typeof import(\"<workspace>/packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter\")' has no call signatures."
},
{
"file": "test/types/consumer.ts",
"code": 2351,
"line": 10,
"message": "This expression is not constructable.\n Type 'typeof import(\"<workspace>/packages/artplayer/types/artplayer\")' has no construct signatures."
},
{
"file": "test/types/consumer.ts",
"code": 7006,
"line": 10,
"message": "Parameter 'player' implicitly has an 'any' type."
},
{
"file": "test/types/consumer.ts",
"code": 2709,
"line": 12,
"message": "Cannot use namespace 'Artplayer' as a type."
},
{
"file": "test/types/consumer.ts",
"code": 2683,
"line": 12,
"message": "'this' implicitly has type 'any' because it does not have a type annotation."
},
{
"file": "test/types/consumer.ts",
"code": 2339,
"line": 17,
"message": "Property 'html' does not exist on type 'typeof import(\"<workspace>/packages/artplayer/types/artplayer\")'."
},
{
"file": "test/types/consumer.ts",
"code": 2349,
"line": 18,
"message": "This expression is not callable.\n Type 'typeof import(\"<workspace>/packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter\")' has no call signatures."
}
]
} }
+10
View File
@@ -0,0 +1,10 @@
import type { I18n } from 'artplayer'
import french from 'artplayer/i18n/fr'
const dictionary: NonNullable<I18n['en']> = french
const close: string | undefined = french.Close
// @ts-expect-error Translation values cannot be numbers.
const numeric: number = french.Close
// @ts-expect-error Language values do not have a permissive arbitrary-key index.
const missing = french.notATranslation
void [dictionary, close, numeric, missing]