From 8dcbe9441eb06971a34785857f9cf47451047bb5 Mon Sep 17 00:00:00 2001 From: Harvey Zhao Date: Tue, 15 Sep 2026 12:39:13 +0800 Subject: [PATCH] refactor(auto-thumbnail): [PKG-AUTO-THUMB-04] verify source and installed type migration --- .../ARCHITECTURE.md | 16 +- .../auto-thumbnail-migration-validation.json | 1551 +++++++++++++++++ .../2026-09-15-PKG-AUTO-THUMB-04-migration.md | 78 + refactor/packages.md | 2 + refactor/plan.md | 7 +- refactor/progress.md | 7 + refactor/scripts/plan.mjs | 1 + refactor/tasks.json | 18 +- 8 files changed, 1666 insertions(+), 14 deletions(-) create mode 100644 refactor/baselines/auto-thumbnail-migration-validation.json create mode 100644 refactor/changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md diff --git a/packages/artplayer-plugin-auto-thumbnail/ARCHITECTURE.md b/packages/artplayer-plugin-auto-thumbnail/ARCHITECTURE.md index 99a5cc72b..a17b62460 100644 --- a/packages/artplayer-plugin-auto-thumbnail/ARCHITECTURE.md +++ b/packages/artplayer-plugin-auto-thumbnail/ARCHITECTURE.md @@ -157,11 +157,12 @@ historical missing 1.0.0 main/legacy files without substituting source-only code Historical contract/failure tests remain separate and continue to reproduce old defects; their passing status does not mean those defects should remain. -The public type entry is tracked independently as `PKG-AUTO-THUMB-08`, split from -04 so that declaration work can proceed without weakening the unfinished 03 -pixel gate. Task04 still depends on both 03 and 08. The source/runtime remains an -intermediate `PKG-AUTO-THUMB-03` implementation. Native lifecycle -validation does not prove correct pixels. The attached renderer now has native +The public type entry originated in `PKG-AUTO-THUMB-08`; task09 restored the +historical factory alias. Task04 has verified the complete strict source and +installed public type/module surfaces using those changes and resource fixes +07/10/11/12. Task03 remains unfinished; task05 depends directly on both 03 and 04, +so type completion cannot waive its pixel gate. Native lifecycle validation does +not prove correct pixels. The attached renderer now has native pixel checks for all five cells when native frame callbacks are available, including the unique first frame, real black content, changing colors, spatial detail and presentation timestamps. The callback-less fallback still only has @@ -224,8 +225,9 @@ annotations describe the nominal options; no runtime casts or normalization were added, so historical coercible JS inputs retain the same validation/arithmetic and raw values. Missing options retain the existing behavior. Tasks08/09 supplied the compatible public declarations, implementation assignment -fixtures and historical CommonJS alias. Task04 still requires the completed task03 -implementation and final migration acceptance. Task05 verifies old/final cores and actual +fixtures and historical CommonJS alias. Task04's migration acceptance is recorded +in `refactor/changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md`; unresolved runtime +behavior remains with task03. Task05 requires both and verifies old/final cores and actual devices; task06 covers installed package entries and the real demo/editor. The package version remains unchanged. Use `refactor/baselines/auto-thumbnail-contract.md` and `auto-thumbnail-failures.md` as diff --git a/refactor/baselines/auto-thumbnail-migration-validation.json b/refactor/baselines/auto-thumbnail-migration-validation.json new file mode 100644 index 000000000..3e6d4dfab --- /dev/null +++ b/refactor/baselines/auto-thumbnail-migration-validation.json @@ -0,0 +1,1551 @@ +{ + "schemaVersion": 1, + "task": "PKG-AUTO-THUMB-04", + "baseCommit": "42ddead0cd7dbc254837262ae59a2016b2321413", + "recordedAt": "2026-09-15T04:37:23.294Z", + "node": "v24.21.0", + "yarn": "1.22.22", + "source": { + "packages/artplayer-plugin-auto-thumbnail/src/encoding.ts": "5fc75397162c86f5906c19c94c9aba873c45ec8a370bc4489570ca653ff73300", + "packages/artplayer-plugin-auto-thumbnail/src/extraction.ts": "61b54fb3322cd4eb374797558db57dc20df4b1bc5b5e49dfff5ddf81cabf285c", + "packages/artplayer-plugin-auto-thumbnail/src/frames.ts": "b3e6a286cee6b365bf0a70abd2ce48f766d6e591f82fba24573ee3fcefe68021", + "packages/artplayer-plugin-auto-thumbnail/src/index.ts": "597b249969f9c9cb4908352a1f426fcba37386c889abcef3d0bd9b74bd9f415d", + "packages/artplayer-plugin-auto-thumbnail/src/options.ts": "8481d30b912fca90dee72224fc87e1c6c295b03f1f01fd675643d4364ae0e4ae", + "packages/artplayer-plugin-auto-thumbnail/src/session.ts": "c831c720f99d42374905e443526a336e065b041f3421e17875b42cddf1fd1659", + "packages/artplayer-plugin-auto-thumbnail/src/types.ts": "96cf553974c75dc2c0f506c2666af3a026190682b5c31aa6ebee84c10a20bd4d", + "packages/artplayer-plugin-auto-thumbnail/src/video.ts": "d675a45d3baddfca8d7d469050b373e3b7a66ea3f9746768469d61b408b59426" + }, + "declarations": { + "packages/artplayer-plugin-auto-thumbnail/types/artplayer-plugin-auto-thumbnail.d.ts": "b3fd5197b2d1de81bd80a871103821fc38f5af8faa432265ee1fc04ff3e1e51d", + "packages/artplayer-plugin-auto-thumbnail/types/runtime-api.d.ts": "4398071bd85d2010576fd1293c629c93bd5f986ba16bfcc1c8e7efa03baf4e34", + "packages/artplayer-plugin-auto-thumbnail/types/runtime.d.cts": "6a0213bf1ea69e1ab0a41e55305a4ded2561dc363676ebf9b3c355d5825fa653", + "packages/artplayer-plugin-auto-thumbnail/types/runtime.d.mts": "2c828bf3616a6967d3d4d3c3339ab2707fae24aa9fffedf5f86d777a04bd74d4", + "packages/artplayer-plugin-auto-thumbnail/types/runtime.d.ts": "6a0213bf1ea69e1ab0a41e55305a4ded2561dc363676ebf9b3c355d5825fa653" + }, + "strictConfiguration": { + "path": "packages/artplayer-plugin-auto-thumbnail/tsconfig.json", + "sha256": "ad1b793eded53e351dbd45fd1ce537bf95c0473de717ca0e13adbfcc884eb2c9", + "baseSha256": "b905544063a24254b91e37aada5686585aab363d35b5ec933803e6ba24a520b0", + "flags": { + "strict": true, + "noUncheckedIndexedAccess": true, + "isolatedModules": true, + "allowJs": false, + "skipLibCheck": false + }, + "rootFiles": [ + "packages/artplayer-plugin-auto-thumbnail/src/encoding.ts", + "packages/artplayer-plugin-auto-thumbnail/src/extraction.ts", + "packages/artplayer-plugin-auto-thumbnail/src/frames.ts", + "packages/artplayer-plugin-auto-thumbnail/src/index.ts", + "packages/artplayer-plugin-auto-thumbnail/src/options.ts", + "packages/artplayer-plugin-auto-thumbnail/src/session.ts", + "packages/artplayer-plugin-auto-thumbnail/src/types.ts", + "packages/artplayer-plugin-auto-thumbnail/src/video.ts", + "refactor/fixtures/implementation/auto-thumbnail.ts" + ] + }, + "implementationFixture": { + "path": "refactor/fixtures/implementation/auto-thumbnail.ts", + "sha256": "bbefb3750269714f4a44101174fe1cfde08c44093930675a836d643abdd370ea" + }, + "checks": { + "package": { + "exitCode": 0, + "file": "refactor/.cache/auto-thumbnail04-package.log", + "sha256": "9ab9d7b8d27891cfdf227d1d022be4868a1e2288405ce876c333e8709cd48b4c" + }, + "source-types": { + "exitCode": 0, + "file": "refactor/.cache/auto-thumbnail04-source-types.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "editor-check": { + "exitCode": 0, + "file": "refactor/.cache/auto-thumbnail04-editor-check.log", + "sha256": "9e00edbac75c8a133bae3d20654621870b353ea6b9dd7842fc0018f57b35c308" + }, + "lint": { + "exitCode": 0, + "file": "refactor/.cache/auto-thumbnail04-lint.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "rootLint": { + "exitCode": 0, + "file": "refactor/.cache/auto-thumbnail04-root-lint.log", + "sha256": "c874d0255591c6e72f4d3513f0dfc6ae46036206aceb2640eb216f62be85547b" + }, + "plan": { + "exitCode": 0, + "riskCheckExitCode": 0, + "negative": { + "test": "Remove task03 dependency in memory only", + "rejected": "PKG-AUTO-THUMB-05 must depend on PKG-AUTO-THUMB-03", + "workspaceFilesMutated": false + } + }, + "extraPlanLint": { + "before": 17, + "after": 17, + "noNewDiagnostics": true, + "findings": [ + { + "ruleId": "antfu/if-newline", + "message": "Expect newline after if", + "severity": 2 + }, + { + "ruleId": "antfu/if-newline", + "message": "Expect newline after if", + "severity": 2 + }, + { + "ruleId": "antfu/if-newline", + "message": "Expect newline after if", + "severity": 2 + }, + { + "ruleId": "antfu/if-newline", + "message": "Expect newline after if", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-chaining", + "message": "Should have line breaks between items, in node CallExpression", + "severity": 2 + }, + { + "ruleId": "antfu/if-newline", + "message": "Expect newline after if", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "antfu/consistent-list-newline", + "message": "Should have line breaks between items, in node ArrayExpression", + "severity": 2 + }, + { + "ruleId": "node/prefer-global/process", + "message": "Unexpected use of the global variable 'process'. Use 'require(\"process\")' instead.", + "severity": 2 + }, + { + "ruleId": "antfu/if-newline", + "message": "Expect newline after if", + "severity": 2 + } + ] + } + }, + "installed": { + "report": "refactor/.cache/auto-thumbnail-package-types-W2y4Y5/report.json", + "sha256": "e17c8ffe958a02b5a6c3306723492855df0ce43ce381258e73f6f2593e28d826", + "runnerTask": "PKG-AUTO-THUMB-09", + "packages": [ + { + "name": "artplayer", + "manifest": { + "name": "artplayer", + "version": "5.4.1", + "description": "ArtPlayer.js is a modern and full featured HTML5 video player", + "author": "Harvey Zhao ", + "license": "MIT", + "homepage": "https://artplayer.org", + "repository": { + "type": "git", + "url": "git+https://github.com/zhw2590582/ArtPlayer.git" + }, + "bugs": { + "url": "https://github.com/zhw2590582/ArtPlayer/issues" + }, + "keywords": [ + "html5", + "video", + "player" + ], + "exports": { + ".": { + "import": { + "types": "./types/artplayer.d.mts", + "default": "./dist/artplayer.mjs" + }, + "require": { + "types": "./types/artplayer.d.cts", + "default": "./dist/artplayer.js" + } + }, + "./types": { + "types": "./types/artplayer.d.ts" + }, + "./runtime": { + "import": { + "types": "./types/runtime.d.mts", + "default": "./dist/artplayer.mjs" + }, + "require": { + "types": "./types/runtime.d.cts", + "default": "./dist/artplayer.js" + } + }, + "./runtime/types": { + "types": "./types/runtime.d.ts" + }, + "./runtime/legacy": { + "import": { + "types": "./types/runtime.d.cts", + "default": "./dist/artplayer.legacy.js" + }, + "require": { + "types": "./types/runtime.d.cts", + "default": "./dist/artplayer.legacy.js" + } + }, + "./legacy": { + "import": { + "types": "./types/artplayer.d.cts", + "default": "./dist/artplayer.legacy.js" + }, + "require": { + "types": "./types/artplayer.d.cts", + "default": "./dist/artplayer.legacy.js" + } + }, + "./i18n/*": { + "import": { + "types": "./types/language.d.mts", + "default": "./dist/i18n/*.mjs" + }, + "require": { + "types": "./types/language.d.cts", + "default": "./dist/i18n/*.js" + } + } + }, + "main": "./dist/artplayer.js", + "module": "./dist/artplayer.mjs", + "types": "./types/artplayer.d.ts", + "typesVersions": { + "*": { + "types": [ + "types/artplayer.d.ts" + ], + "runtime": [ + "types/runtime.d.ts" + ], + "runtime/types": [ + "types/runtime.d.ts" + ], + "runtime/legacy": [ + "types/runtime.d.ts" + ], + "i18n/*": [ + "types/legacy/language.d.ts" + ], + "legacy": [ + "types/artplayer.d.ts" + ] + } + }, + "legacy": "./dist/artplayer.legacy.js", + "browserslist": "last 1 Chrome version", + "dependencies": { + "option-validator": "^2.0.6" + } + }, + "archive": "D:\\github\\ArtPlayer\\refactor\\.cache\\auto-thumbnail-package-types-W2y4Y5\\artplayer.tgz", + "sha256": "d4a0cc5dcbe015e254b3bce64d505ee4e010792ab70414bcf8d0139d7c413b75", + "files": { + "package/ARCHITECTURE.md": "dad3ccb55f25c63e0eb3b8d5f25b21db58431c48f84a2d9eb046b2492ac6cedc", + "package/README.md": "1e185e65f67fc2081b4182bbc6c4558ea05b6e3fa3acc5dd0c3ac7df1d542b09", + "package/THIRD_PARTY_NOTICES": "b77b5b46b79fa0cda850b0781f78c3b1112c4ed9672fa291956fe8eff53098e7", + "package/dist/artplayer.js": "9148a369636f814b03e6a1ed2a7db222a31b159f93e8a94d52c5a9dde2dfe6a6", + "package/dist/artplayer.legacy.js": "9bde35a6d64234cae15300e37b03204c075ef26126058f48bb3bf97d6e002449", + "package/dist/artplayer.mjs": "265bca0ad3f8373acc84333c19cdded0cbd6b309ede9e51c0bec35685c77eebd", + "package/dist/i18n/ar.js": "bd0bef65f4f7dc3f8ed562904cc6fa9071ff4537fb64c1e0fc3d554141bcd3cb", + "package/dist/i18n/ar.mjs": "59310b7bbeea83bbb7d73aadc5ca82a6ec269c3530d19aa741c94d5c64fc5da8", + "package/dist/i18n/cs.js": "6e2c93daba24c2e48dfa206bcf4f2f2a8a02713b856e404d2e4e4ecd8309ca2f", + "package/dist/i18n/cs.mjs": "c73fba18797d62d7b2581e67fe7340c35fe84510b2250ff1ecaad253d9cabbac", + "package/dist/i18n/es.js": "f4133ac6ea06b69a474b33c4a1809a4066e2376bb9464a3f3aa8330f01f1944a", + "package/dist/i18n/es.mjs": "1390bca3def2be115e811de337df0a0c3f63998e51359f283023246245c552a7", + "package/dist/i18n/fa.js": "8d3ef2e0f0cc0ea480c2167b6fcb87cdf444e90759c3519e8daa139fec576da4", + "package/dist/i18n/fa.mjs": "ab441e8a2d79043b29ceca87c783bf06874bb9d3a149c1604bc167eb481be2a9", + "package/dist/i18n/fr.js": "89dc4194a6c0a962b9ce756b52c90401c1acf3b159f265f3bc0d7d6d7d987f03", + "package/dist/i18n/fr.mjs": "99491878430fb7b6f2b7bf93da0588a831704b412e01116f23ba1d9d45863816", + "package/dist/i18n/id.js": "4c6dc86db741bcc2857df55a9d037e82e91d375fa6fd22e0562809ff621b92db", + "package/dist/i18n/id.mjs": "383e5803a6b6686c6de4e867770241de75b6f517dcca2bdedc6f2004bf6e1fb3", + "package/dist/i18n/pl.js": "3a38828b1c3d719c0aca9906cf6a46c23555a8411f8d57645f0e0ce8147dc664", + "package/dist/i18n/pl.mjs": "079ed96732979035297af387c64a7b99519b5a43107fb86735a654ea4fe8e9b5", + "package/dist/i18n/ru.js": "62fac9dddb302eb16382e6e9301fc4b2c66f5f69d4a358a26b67026a5fa4e787", + "package/dist/i18n/ru.mjs": "a893aeaee1d79409db72e324fbff200e3864f33ed168f04d91d25f7cf2efa765", + "package/dist/i18n/tr.js": "1492c36b069a7d73db4f3913bd18085faff7afd8b3c158138fe264e31600e38c", + "package/dist/i18n/tr.mjs": "a90478cac078836b76c2a98261907610fee07f3e4b28671b8e7dbf533778f918", + "package/dist/i18n/vi.js": "c7216ef7e608a79b7e2c479a07bf310d4ab79577947ac4a62d676faaced0e9cf", + "package/dist/i18n/vi.mjs": "66270fdfa0b5da396322d1769169b7df37a030ba15ac18eb30bd87b3af8074ec", + "package/dist/i18n/zh-tw.js": "11c49857d6d40a5ffd224ffa59c9026e71621b345f63c5a086326db80a22371a", + "package/dist/i18n/zh-tw.mjs": "a38e630cb96de96c15d824686aec750e25cf6c8ada01285a292442a81566314f", + "package/package.json": "82e92699e7c29847f32ac6767ece0401290e7d7a12854722bdbcfd09b90b7954", + "package/types/COMPATIBILITY.md": "a7da9e102a116104b513df4f7451247b7759bc502d3375f30bd5b14a541826e0", + "package/types/README.md": "1bd9868e773610e6312fd48a1c5aa20772d29df0af40c3db66e75b7ab4a1aee0", + "package/types/artplayer.d.cts": "3685065e4263abcfd9d953176e461d5b3eb990b0363b54689a7f55deba770fef", + "package/types/artplayer.d.mts": "b664fec51ee5c5381f2ceab25d99d52aee56feab04a2ee7b4ea5b2145ea5fa0e", + "package/types/artplayer.d.ts": "5d0162adf7ac6d0f2bb9b5cfe361f28657c4d9c540cadbf36eba3cc954ce50f8", + "package/types/component.d.ts": "ae5bc1ddeaa1ee1ebbc62573e32423993727079205c64751a5a314170e588a32", + "package/types/config.d.ts": "36f9a84cd436f17701a0d11d3417fc1fe0414e0c52c80083b94a85dfc329e37e", + "package/types/cssVar.d.ts": "93217860fff2ebf750f606d95ddd22220a58837119e63bdf2f5f78fd7488458b", + "package/types/emitter.d.ts": "7e1f9a2a8ce65feb95734f1ed52d1334e57aa388bbef2a43d8bc53a9b6f6623c", + "package/types/events.d.ts": "f83624c9268a284477e8bd793fe3562a2363b72f2a44d5c64fe8c6a6cede8830", + "package/types/i18n.d.ts": "f4f2f05bdfda73c74fef34767cb18ee8e11b743120b1c4598e9714d7846018e5", + "package/types/icons.d.ts": "326a67ba7bdcf52862c5b2a269e540140aff98d05c7b96196485a77f84fe5960", + "package/types/language.d.cts": "f7928e108cf7b7814c2d75cb0a525333e95873fca6cd6d89a740450656b9c1cd", + "package/types/language.d.mts": "6619a26d604b7cccbe2f596243d87ae37cfaae33b8b52874ec071d9787446f9e", + "package/types/legacy/language.d.ts": "c7abda4d506fd933c350e9030290bf9e64347a921d683a66115da1995ebe0a81", + "package/types/option.d.ts": "ccf2c8ddc537dc65c9682d39f044726e23bff18f476b622512d7e6a4b949b5f6", + "package/types/playback.d.ts": "58705c273df6e76a77a6575e769a9ec6c013785c25080f2551aa22415788d870", + "package/types/player.d.ts": "92b00211b70ac71336e495899df972a0519dd138111846044fe4e0f967966177", + "package/types/plugin.d.ts": "fc3594a41c51d8248713e33c486fb1f6a518ac5c7ce31be6988a6cd8d052c5f3", + "package/types/quality.d.ts": "1ac1a48b4f74ff9ba1ce60443e1463d50d1c6a2e5d87d63dc7d2a8eb7f4c2c34", + "package/types/runtime.d.cts": "7ee988dfea9a0ac71a34a656f96f7b74e78aa92547cfdfab7ff7e1139a77d4a3", + "package/types/runtime.d.mts": "dcb85f59a8b7714918ced0c1d18c2bb24e8b80b56d8c594e019dcbdb5ad88b08", + "package/types/runtime.d.ts": "9c6ccd39a1be293f17ae46dae8ea077053e12635ee79d73a5e3b3a559230fcff", + "package/types/runtime/component.d.ts": "1b4c0cee44568649e80140fe778febfcae88af0ac85515f1cbeff78ab0c6d14f", + "package/types/runtime/construction.d.ts": "7a87bedf6f7ffff0c46078aa5f1551e0077d35574e286516121f5f935e2d9ce4", + "package/types/runtime/events.d.ts": "a1e2f9d387475453eaf95c2a5ee79e228636c0bb859bda3fcc46da46574a0c31", + "package/types/runtime/media.d.ts": "8fc89401be7fe25542c169d07dd5675f10916ed20be8493e19695966cf3864a8", + "package/types/runtime/option.d.ts": "6e334e1a76fdcc40b4665c02523bd31c3994d96078fadeb40e23422aa54c1a1d", + "package/types/runtime/player.d.ts": "8ac6383502e4872e83659838844856903031a81a0adc8e8535feb78453aa042c", + "package/types/runtime/plugin.d.ts": "8528f2b17843149f42f9cc16d6fd70baa238c9dc2c329b67d2c38096799c69bd", + "package/types/runtime/services.d.ts": "604c9f8e4b6c0da818f96576bf9f4b0e96085a9003927b2f7ba30027b1ba237e", + "package/types/runtime/setting.d.ts": "349c1fcb205ad312916bd3ee55e6bf241ea8a569fb2ab6c80822e69fc518f7d7", + "package/types/runtime/subtitle.d.ts": "269ff84678d327b3a9dc2f5bc6cc0d731d1e081b85422e474621d5d792efb153", + "package/types/runtime/template.d.ts": "7a62f968a38b4bf9109a4439557c02074eb1d62ba1f6e21a8eb194e91f0badfe", + "package/types/runtime/utils.d.ts": "6bf731705d86853e066dbaf3b8d4003b6548423fe615b7412b722bd0d3a6e48b", + "package/types/setting.d.ts": "08305a75dff96f06490430e099338b463df471b550c1d0dac3abc8995b39eb09", + "package/types/subtitle.d.ts": "b18314e2d64efdb6045830b6e12f615ae2ed585416130e562329ad3ea337f6ce", + "package/types/template.d.ts": "4792bc0c2cbcb7966e4375118bd34b326166e0831862e94ace4cf6b1bbe6a8c8", + "package/types/utils.d.ts": "fca0d3d814df94a25f9eb067c86fa0cf272e2791bac793b91229d57680797712" + } + }, + { + "name": "artplayer-plugin-auto-thumbnail", + "manifest": { + "name": "artplayer-plugin-auto-thumbnail", + "version": "1.1.0", + "description": "auto-thumbnail plugin for ArtPlayer", + "author": "Harvey Zhao ", + "license": "MIT", + "homepage": "https://artplayer.org", + "repository": { + "type": "git", + "url": "git+https://github.com/zhw2590582/ArtPlayer.git" + }, + "bugs": { + "url": "https://github.com/zhw2590582/ArtPlayer/issues" + }, + "keywords": [ + "html5", + "video", + "player" + ], + "exports": { + ".": { + "types": "./types/artplayer-plugin-auto-thumbnail.d.ts", + "import": "./dist/artplayer-plugin-auto-thumbnail.mjs", + "require": "./dist/artplayer-plugin-auto-thumbnail.js" + }, + "./legacy": { + "types": "./types/artplayer-plugin-auto-thumbnail.d.ts", + "import": "./dist/artplayer-plugin-auto-thumbnail.legacy.js", + "require": "./dist/artplayer-plugin-auto-thumbnail.legacy.js" + }, + "./runtime": { + "import": { + "types": "./types/runtime.d.mts", + "default": "./dist/artplayer-plugin-auto-thumbnail.mjs" + }, + "require": { + "types": "./types/runtime.d.cts", + "default": "./dist/artplayer-plugin-auto-thumbnail.js" + } + } + }, + "main": "./dist/artplayer-plugin-auto-thumbnail.js", + "module": "./dist/artplayer-plugin-auto-thumbnail.mjs", + "types": "./types/artplayer-plugin-auto-thumbnail.d.ts", + "legacy": "./dist/artplayer-plugin-auto-thumbnail.legacy.js", + "browserslist": "last 1 Chrome version", + "typesVersions": { + "*": { + "legacy": [ + "types/artplayer-plugin-auto-thumbnail.d.ts" + ], + "runtime": [ + "types/runtime.d.ts" + ] + } + } + }, + "archive": "D:\\github\\ArtPlayer\\refactor\\.cache\\auto-thumbnail-package-types-W2y4Y5\\artplayer-plugin-auto-thumbnail.tgz", + "sha256": "644fef35e123db4626b4a7d6c5b4df0d2fe92e02acc3586816b53eed96140625", + "files": { + "package/ARCHITECTURE.md": "c5b766bdceed975145f9f5850cf1f30e772bd38c907d58807a4d6f32b4b5a919", + "package/README.md": "5317758381c6a4b737dd7b59d1065f48274ae0fd9bd62e88666fc3168abd2131", + "package/dist/artplayer-plugin-auto-thumbnail.js": "615c7efd3c7177a5e451ef2fe148b8e8ec91562ef8cc4864b6135b3046105f46", + "package/dist/artplayer-plugin-auto-thumbnail.legacy.js": "c7c893f0e9f21b0f539d19e3606f0326cace67314b35c80fd6e6d1f061494219", + "package/dist/artplayer-plugin-auto-thumbnail.mjs": "27c66d600e9b282063941de762906529e118bc47545d0fdd1b9c249ef9c648b9", + "package/package.json": "dbf644376d50d0ada48e27a1c09c62b036c28cbd5df62db9cc0e47f5e3a074a9", + "package/types/artplayer-plugin-auto-thumbnail.d.ts": "b3fd5197b2d1de81bd80a871103821fc38f5af8faa432265ee1fc04ff3e1e51d", + "package/types/runtime-api.d.ts": "4398071bd85d2010576fd1293c629c93bd5f986ba16bfcc1c8e7efa03baf4e34", + "package/types/runtime.d.cts": "6a0213bf1ea69e1ab0a41e55305a4ded2561dc363676ebf9b3c355d5825fa653", + "package/types/runtime.d.mts": "2c828bf3616a6967d3d4d3c3339ab2707fae24aa9fffedf5f86d777a04bd74d4", + "package/types/runtime.d.ts": "6a0213bf1ea69e1ab0a41e55305a4ded2561dc363676ebf9b3c355d5825fa653" + } + } + ], + "matrix": [ + { + "plugin": "published-1.1.0", + "compiler": "5.9.3", + "mode": "node10-commonjs", + "public": [ + { + "file": "consumer.ts", + "code": 2307, + "line": 3, + "message": "Cannot find module 'artplayer-plugin-auto-thumbnail/legacy' or its corresponding type declarations.\n There are types at 'C:/Users/laozh/AppData/Local/Temp/artplayer-consumer-dm4Fux/node_modules/artplayer-plugin-auto-thumbnail/types/artplayer-plugin-auto-thumbnail.d.ts', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'." + } + ], + "rootOnly": [], + "publicInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2353, + "line": 28, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ] + }, + { + "plugin": "published-1.1.0", + "compiler": "5.9.3", + "mode": "nodenext-cjs", + "public": [], + "publicInvalid": [ + { + "file": "consumer.cts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.cts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2353, + "line": 28, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.cts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.cts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ] + }, + { + "plugin": "published-1.1.0", + "compiler": "5.9.3", + "mode": "nodenext-esm", + "public": [], + "publicInvalid": [ + { + "file": "consumer.mts", + "code": 2554, + "line": 27, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.mts", + "code": 2345, + "line": 28, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2353, + "line": 30, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.mts", + "code": 2739, + "line": 31, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.mts", + "code": 2339, + "line": 32, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ] + }, + { + "plugin": "published-1.1.0", + "compiler": "5.9.3", + "mode": "bundler-esm", + "public": [], + "publicInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2353, + "line": 28, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ] + }, + { + "plugin": "published-1.1.0", + "compiler": "4.3.5", + "mode": "node10-commonjs", + "public": [ + { + "file": "consumer.ts", + "code": 2307, + "line": 3, + "message": "Cannot find module 'artplayer-plugin-auto-thumbnail/legacy' or its corresponding type declarations." + }, + { + "file": "consumer.ts", + "code": 2344, + "line": 13, + "message": "Type 'false' does not satisfy the constraint 'true'." + } + ], + "rootOnly": [], + "publicInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 28, + "message": "Argument of type '{ height: number; }' is not assignable to parameter of type 'Option'.\n Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ] + }, + { + "plugin": "candidate", + "compiler": "5.9.3", + "mode": "node10-commonjs", + "public": [], + "publicInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2353, + "line": 28, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ], + "runtime": [], + "runtimeDeclarations": [ + "consumer.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime-api.d.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime.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/emitter.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/option.d.ts", + "node_modules/artplayer/types/playback.d.ts", + "node_modules/artplayer/types/player.d.ts", + "node_modules/artplayer/types/plugin.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" + ], + "runtimeInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 23, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 24, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 25, + "message": "Type 'number' is not assignable to type 'string'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 26, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 28, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2353, + "line": 30, + "message": "Object literal may only specify known properties, and 'unknown' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2554, + "line": 31, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 32, + "message": "Property 'name' does not exist on type 'Promise'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 33, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2741, + "line": 34, + "message": "Property 'name' is missing in type 'Promise' but required in type 'Result'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 35, + "message": "Type '{ name: string; }' is missing the following properties from type 'Promise': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2741, + "line": 36, + "message": "Property 'default' is missing in type 'Factory' but required in type 'RuntimeFactory'." + } + ], + "noInterop": [] + }, + { + "plugin": "candidate", + "compiler": "5.9.3", + "mode": "nodenext-cjs", + "public": [], + "publicInvalid": [ + { + "file": "consumer.cts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.cts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2353, + "line": 28, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.cts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.cts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ], + "runtime": [], + "runtimeDeclarations": [ + "consumer.cts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime-api.d.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime.d.cts", + "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/emitter.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/option.d.ts", + "node_modules/artplayer/types/playback.d.ts", + "node_modules/artplayer/types/player.d.ts", + "node_modules/artplayer/types/plugin.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" + ], + "runtimeInvalid": [ + { + "file": "consumer.cts", + "code": 2554, + "line": 23, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.cts", + "code": 2345, + "line": 24, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 25, + "message": "Type 'number' is not assignable to type 'string'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 26, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 27, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 28, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2353, + "line": 30, + "message": "Object literal may only specify known properties, and 'unknown' does not exist in type 'Option'." + }, + { + "file": "consumer.cts", + "code": 2554, + "line": 31, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.cts", + "code": 2339, + "line": 32, + "message": "Property 'name' does not exist on type 'Promise'." + }, + { + "file": "consumer.cts", + "code": 2322, + "line": 33, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.cts", + "code": 2741, + "line": 34, + "message": "Property 'name' is missing in type 'Promise' but required in type 'Result'." + }, + { + "file": "consumer.cts", + "code": 2739, + "line": 35, + "message": "Type '{ name: string; }' is missing the following properties from type 'Promise': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.cts", + "code": 2741, + "line": 36, + "message": "Property 'default' is missing in type 'Factory' but required in type 'RuntimeFactory'." + } + ], + "noInterop": [] + }, + { + "plugin": "candidate", + "compiler": "5.9.3", + "mode": "nodenext-esm", + "public": [], + "publicInvalid": [ + { + "file": "consumer.mts", + "code": 2554, + "line": 27, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.mts", + "code": 2345, + "line": 28, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2353, + "line": 30, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.mts", + "code": 2739, + "line": 31, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.mts", + "code": 2339, + "line": 32, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ], + "runtime": [], + "runtimeDeclarations": [ + "consumer.mts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime-api.d.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime.d.mts", + "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/emitter.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/option.d.ts", + "node_modules/artplayer/types/playback.d.ts", + "node_modules/artplayer/types/player.d.ts", + "node_modules/artplayer/types/plugin.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" + ], + "runtimeInvalid": [ + { + "file": "consumer.mts", + "code": 2554, + "line": 23, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.mts", + "code": 2345, + "line": 24, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 25, + "message": "Type 'number' is not assignable to type 'string'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 26, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 27, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 28, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2353, + "line": 30, + "message": "Object literal may only specify known properties, and 'unknown' does not exist in type 'Option'." + }, + { + "file": "consumer.mts", + "code": 2554, + "line": 31, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.mts", + "code": 2339, + "line": 32, + "message": "Property 'name' does not exist on type 'Promise'." + }, + { + "file": "consumer.mts", + "code": 2322, + "line": 33, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.mts", + "code": 2741, + "line": 34, + "message": "Property 'name' is missing in type 'Promise' but required in type 'Result'." + }, + { + "file": "consumer.mts", + "code": 2739, + "line": 35, + "message": "Type '{ name: string; }' is missing the following properties from type 'Promise': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.mts", + "code": 2741, + "line": 36, + "message": "Property 'default' is missing in type 'Factory' but required in type 'RuntimeFactory'." + } + ] + }, + { + "plugin": "candidate", + "compiler": "5.9.3", + "mode": "bundler-esm", + "public": [], + "publicInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2353, + "line": 28, + "message": "Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ], + "runtime": [], + "runtimeDeclarations": [ + "consumer.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime-api.d.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime.d.mts", + "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/emitter.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/option.d.ts", + "node_modules/artplayer/types/playback.d.ts", + "node_modules/artplayer/types/player.d.ts", + "node_modules/artplayer/types/plugin.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" + ], + "runtimeInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 23, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 24, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 25, + "message": "Type 'number' is not assignable to type 'string'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 26, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 28, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2353, + "line": 30, + "message": "Object literal may only specify known properties, and 'unknown' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2554, + "line": 31, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 32, + "message": "Property 'name' does not exist on type 'Promise'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 33, + "message": "Type 'boolean' is not assignable to type 'number'." + }, + { + "file": "consumer.ts", + "code": 2741, + "line": 34, + "message": "Property 'name' is missing in type 'Promise' but required in type 'Result'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 35, + "message": "Type '{ name: string; }' is missing the following properties from type 'Promise': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2741, + "line": 36, + "message": "Property 'default' is missing in type 'Factory' but required in type 'RuntimeFactory'." + } + ] + }, + { + "plugin": "candidate", + "compiler": "4.3.5", + "mode": "node10-commonjs", + "public": [], + "publicInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 25, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 26, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'string' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 28, + "message": "Argument of type '{ height: number; }' is not assignable to parameter of type 'Option'.\n Object literal may only specify known properties, and 'height' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 29, + "message": "Type 'Result' is missing the following properties from type 'Promise<{ name: \"artplayerPluginAutoThumbnail\"; }>': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 30, + "message": "Property 'default' does not exist on type '(option: Option) => (art: Artplayer) => Result'." + } + ], + "runtime": [], + "runtimeDeclarations": [ + "consumer.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime-api.d.ts", + "node_modules/artplayer-plugin-auto-thumbnail/types/runtime.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/emitter.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/option.d.ts", + "node_modules/artplayer/types/playback.d.ts", + "node_modules/artplayer/types/player.d.ts", + "node_modules/artplayer/types/plugin.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" + ], + "runtimeInvalid": [ + { + "file": "consumer.ts", + "code": 2554, + "line": 23, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 24, + "message": "Argument of type 'undefined' is not assignable to parameter of type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 25, + "message": "Type 'number' is not assignable to type 'string | undefined'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 26, + "message": "Type 'string' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 27, + "message": "Type 'false' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 28, + "message": "Type 'string' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 29, + "message": "Type 'string' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2345, + "line": 30, + "message": "Argument of type '{ unknown: boolean; }' is not assignable to parameter of type 'Option'.\n Object literal may only specify known properties, and 'unknown' does not exist in type 'Option'." + }, + { + "file": "consumer.ts", + "code": 2554, + "line": 31, + "message": "Expected 1 arguments, but got 0." + }, + { + "file": "consumer.ts", + "code": 2339, + "line": 32, + "message": "Property 'name' does not exist on type 'Promise'." + }, + { + "file": "consumer.ts", + "code": 2322, + "line": 33, + "message": "Type 'false' is not assignable to type 'number | undefined'." + }, + { + "file": "consumer.ts", + "code": 2741, + "line": 34, + "message": "Property 'name' is missing in type 'Promise' but required in type 'Result'." + }, + { + "file": "consumer.ts", + "code": 2739, + "line": 35, + "message": "Type '{ name: string; }' is missing the following properties from type 'Promise': then, catch, finally, [Symbol.toStringTag]" + }, + { + "file": "consumer.ts", + "code": 2741, + "line": 36, + "message": "Property 'default' is missing in type 'Factory' but required in type 'RuntimeFactory'." + } + ], + "noInterop": [] + } + ], + "olderRuntime": [ + { + "version": "1.0.1", + "archive": "D:\\github\\ArtPlayer\\refactor\\.cache\\releases\\artplayer-plugin-auto-thumbnail-1.0.1.tgz", + "sha256": "e7e0e09865cf4b46350097137ec292a64e6feedece2c90f724f0498993bfa812", + "missingRuntime": false, + "passed": true, + "log": "Historical 1.0.1 actual installed default calls and Promise registration passed.\n" + }, + { + "version": "1.0.0", + "archive": "D:\\github\\ArtPlayer\\refactor\\.cache\\releases\\artplayer-plugin-auto-thumbnail-1.0.0.tgz", + "sha256": "0a907bc8dbf2ef773764645730309b2c95592f84b31f5c4f9cec636d29c0263e", + "missingRuntime": true, + "passed": true, + "log": "Historical 1.0.0 missing main/legacy confirmed; not runnable distribution.\n" + } + ], + "runtimeLogs": { + "candidate": { + "sha256": "b73c2c6cf92036f1c2843adc0dd96a8b7df0b5b878930bae32d590ae2c961467", + "text": "Installed root/legacy/runtime module shapes and Promise registration verified; no native extraction.\n" + }, + "published-1.1.0": { + "sha256": "b73c2c6cf92036f1c2843adc0dd96a8b7df0b5b878930bae32d590ae2c961467", + "text": "Installed root/legacy/runtime module shapes and Promise registration verified; no native extraction.\n" + } + } + }, + "unchangedRuntimeEvidence": { + "file": "refactor/baselines/auto-thumbnail-metadata-validation.json", + "sha256": "188c8950474e7d387b16730f9a787ac9c17cd3bb1add9c252d501921002906e1", + "artifacts": [ + { + "file": "packages/artplayer-plugin-auto-thumbnail/dist/artplayer-plugin-auto-thumbnail.js", + "sha256": "615c7efd3c7177a5e451ef2fe148b8e8ec91562ef8cc4864b6135b3046105f46", + "docsCopy": "docs/compiled/artplayer-plugin-auto-thumbnail.js", + "previousSha256": "4c8bdd75f49ad0514167e1b67c6941236c27837d09dd1d5d69d0345d69fa0357" + }, + { + "file": "packages/artplayer-plugin-auto-thumbnail/dist/artplayer-plugin-auto-thumbnail.legacy.js", + "sha256": "c7c893f0e9f21b0f539d19e3606f0326cace67314b35c80fd6e6d1f061494219", + "docsCopy": "docs/compiled/artplayer-plugin-auto-thumbnail.legacy.js", + "previousSha256": "389239c482d89639c70c796f2220a552ed8b1a87062fc5950cb03dc14c2b525c" + }, + { + "file": "packages/artplayer-plugin-auto-thumbnail/dist/artplayer-plugin-auto-thumbnail.mjs", + "sha256": "27c66d600e9b282063941de762906529e118bc47545d0fdd1b9c249ef9c648b9", + "docsCopy": "docs/compiled/artplayer-plugin-auto-thumbnail.mjs", + "previousSha256": "7c4ea237f03eaae0cbc06b27782ba03ee8e3639ec78f0de03c11841467f22a17" + } + ], + "unit": { + "oldMain": { + "passed": 0, + "failed": 7, + "exitCode": 1 + }, + "source": { + "passed": 189, + "failed": 0, + "exitCode": 0 + }, + "main": { + "passed": 82, + "failed": 0, + "exitCode": 0 + }, + "legacy": { + "passed": 82, + "failed": 0, + "exitCode": 0 + } + }, + "browserCases": { + "main": 36, + "legacy": 36 + }, + "firstFrameRiskWaived": false + }, + "scheduling": { + "previous": "04 depended on unfinished 03", + "current": "04 uses completed source/type/resource prerequisites; 05 must depend on both 03 and 04", + "task03AcceptanceChanged": false + }, + "limitations": [ + "Task03 native first-frame and remaining extraction work is unfinished and remains a mandatory integration dependency.", + "No current runtime/declaration/manifest/lock content changed in this acceptance.", + "Installed type/registration tests do not imply native extraction, device, remote CI or publication readiness." + ] +} diff --git a/refactor/changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md b/refactor/changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md new file mode 100644 index 000000000..7e5f073b1 --- /dev/null +++ b/refactor/changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md @@ -0,0 +1,78 @@ +# PKG-AUTO-THUMB-04: complete source and public type migration acceptance + +Checked source/artifact commit: 42ddead0cd7dbc254837262ae59a2016b2321413. + +## Delivered implementation + +All eight owned production modules are TypeScript. `index` owns registration and +subscriptions; `options` preserves historical option reads and arithmetic; +`session` owns job identity, cleanup and Blob URLs; `video` owns the private media +element; `extraction` orchestrates metadata and sheets; `frames` and `encoding` +own their respective pending operations; `types` defines their minimal internal +contracts. Only the entry receives the ArtPlayer host. There is no remaining +production JS exception or replacement of the public API by an internal type. + +The implementation was delivered incrementally in the task03 TS checkpoint and +tasks07-12; this acceptance commit consolidates their actual scope, rather than +claiming to migrate them a second time. The package's strict configuration covers +all source files and the actual-core host assignment fixture. It inherits strict, +noUncheckedIndexedAccess, isolatedModules and skipLibCheck:false, with allowJs:false. + +Task08 retained the npm1.1.0 root declaration and added the optional accurate +`/runtime` view. Task09 restored the writable recursive `.default` alias without +changing the old root type extraction. Root and legacy declaration bytes remain +equal to npm1.1.0 after newline normalization. The optional runtime API describes +the real registration Promise, required options object, ignored historical height, +and Factory/RuntimeFactory distinction. All entrypoints use the same existing +runtime artifacts. No public type or runtime change is made in this final audit. + +## Current evidence + +- Package strict compilation and source/declaration lint pass on Node24.21.0 and + Yarn1.22.22. Eight source modules are included, with no allowJs or skipLibCheck + escape. The implementation fixture assigns the real export to both runtime + factory contracts and accepts the real core instance. +- `yarn test:auto-thumbnail-types-package` packs current core and plugin, installs + outside the workspace, verifies installed bytes and frozen reinstall locks, and + runs 10 compiler profiles: npm1.1.0 and candidate with TS5.9.3 Node10, NodeNext + CJS/ESM, Bundler, and TS4.3.5 Node10. Positive consumers and exact negative-line + diagnostics pass, including no-interop CommonJS runtime imports. Historical + npm Node10 legacy resolution failures remain explicitly expected, not hidden. +- Actual installed npm1.0.1 default calls and 1.1.0 direct calls retain their + historical identities. The old1.0.0 package's missing main/legacy is confirmed + as a distribution defect, not counted as runnable compatibility. Candidate + root/legacy/runtime module identities, Promise registration and cleanup pass. +- `yarn check:editor-types` verifies24 existing outputs with both compilers without + rewriting declarations or assets. Packed manifests/files and all declaration + hashes are captured in the [machine record](../baselines/auto-thumbnail-migration-validation.json). +- The prescribed whole-repository `yarn lint` scope passes. An additional direct + lint of `refactor/scripts/plan.mjs` reports17 existing style/import diagnostics, + identical on HEAD and the candidate; that file is outside the root lint range. + No new diagnostic is introduced by the dependency assertion. Plan and risk + validators pass. An in-memory negative dependency check confirms that removing + the task03 prerequisite from task05 is rejected without editing workspace files. +- Unchanged-runtime evidence from task12 remains applicable:189 source tests, + main/legacy82 each, and36 native browser cases per artifact. This audit compares + current artifact hashes to that record instead of rerunning unchanged playback. + The recorded Windows WebKit first-cell limitation remains in force. + +## Dependency correction and retained requirements + +The original linear dependency made type acceptance wait for task03's native +pixel investigation, although the type and source work was already implemented +and independently testable. Task04 now depends on the completed contract/type/ +resource prerequisites. Task05 directly depends on BOTH task03 and task04, and +the plan validator enforces the task03 ancestor. Task03's status, acceptance, +pixel risk and device requirements are unchanged. Final integration, task06 and +release still require it; only independent source/type and version preparation +can advance. This is scheduling within the authorized plan, not a browser waiver. + +Task04 is complete. Task03 and AUTO-THUMB-PIXEL-01 stay open; no whole-package, +remote CI, final installed-browser matrix, physical-device or npm readiness claim +is made. Package versions, dependencies, lockfile and distribution bytes are +unchanged. Maintenance commands and module ownership live in the package README +and ARCHITECTURE, rather than requiring future maintainers to reconstruct history. + +Reverting this acceptance commit restores the prior dependency/status and docs. +Implementation remains in its original independently revertible commits; changing +those contents requires fresh relevant acceptance. No push, publish or deployment. diff --git a/refactor/packages.md b/refactor/packages.md index a3304f23c..6d3a665ef 100644 --- a/refactor/packages.md +++ b/refactor/packages.md @@ -15,6 +15,8 @@ 复杂包可以把任一步拆成新子任务并保留依赖。每步不要求一次提交解决全部;默认按一个可回退行为边界切分。 +Auto-thumbnail 的 04 现基于已完成的类型、入口及资源修复子任务独立验收;03 的首帧像素和剩余抽帧问题仍保持原验收要求,由 05 直接依赖 03 和 04。这样类型和版本准备可以继续,整包集成、分发及发布仍不能越过未完成的 03;计划校验器强制保留这条依赖。此调整不修改任何浏览器支持或像素断言。 + 六步同时受 quality-contract.md 约束:步骤 03 交付清楚的职责与依赖,步骤 04 不能仅改扩展名,步骤 05 验证有风险的真实行为,步骤 06 验收包内实现地图与维护命令。包内架构文档从实现开始同步维护,不能只在最后一步补写。 chapter 作为早期试点,03/04 在已有核心上完成,不使用候选核心内部能力;随后 PILOT-01 先完成一次类型、浏览器、tarball 与维护文档闭环。05/06 仍在最终候选核心上重新验收,其他包的旧版本基线仍由各自 01 步负责。 diff --git a/refactor/plan.md b/refactor/plan.md index f231d12b6..9f8ce320d 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -4,7 +4,7 @@ 基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 266 项,范围 22 个包及工作区/示例。 -状态:todo 44 / doing 22 / blocked 0 / done 200 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 +状态:todo 43 / doing 22 / blocked 0 / done 201 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 @@ -178,8 +178,8 @@ | PKG-AUTO-THUMB-01 | artplayer-plugin-auto-thumbnail
核对包契约与历史用法 | BASE-05 | url/width/number/scale、异步工厂和渐进缩略图更新 | 源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结 | H | done | | PKG-AUTO-THUMB-02 | artplayer-plugin-auto-thumbnail
建立特有行为与错误测试 | PKG-AUTO-THUMB-01, ENG-03, ENG-05 | 抽帧边界、短视频、失败、连续来源和销毁中的抽帧 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done | | PKG-AUTO-THUMB-03 | artplayer-plugin-auto-thumbnail
整理内部职责与资源 | PKG-AUTO-THUMB-02, CORE-09, CORE-19, PKG-AUTO-THUMB-07 | 隐藏 video、seek 队列、canvas 编码与 Blob URL 清理 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | doing | -| PKG-AUTO-THUMB-04 | artplayer-plugin-auto-thumbnail
迁移自有源码和公开类型 | PKG-AUTO-THUMB-03, ENG-04, ENG-06, CORE-07, PKG-AUTO-THUMB-08, PKG-AUTO-THUMB-09, PKG-AUTO-THUMB-10, PKG-AUTO-THUMB-11 | 抽帧结果和真实异步插件返回类型兼容 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | todo | -| PKG-AUTO-THUMB-05 | artplayer-plugin-auto-thumbnail
验证新旧核心和组合 | PKG-AUTO-THUMB-04, CORE-22, PKG-AUTO-THUMB-12 | 旧核心/候选核心预览、多次加载无过期缩略图覆盖 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo | +| PKG-AUTO-THUMB-04 | artplayer-plugin-auto-thumbnail
迁移自有源码和公开类型 | PKG-AUTO-THUMB-02, CORE-09, CORE-19, PKG-AUTO-THUMB-07, PKG-AUTO-THUMB-12, ENG-04, ENG-06, CORE-07, PKG-AUTO-THUMB-08, PKG-AUTO-THUMB-09, PKG-AUTO-THUMB-10, PKG-AUTO-THUMB-11 | 抽帧结果和真实异步插件返回类型兼容 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | done | +| PKG-AUTO-THUMB-05 | artplayer-plugin-auto-thumbnail
验证新旧核心和组合 | PKG-AUTO-THUMB-04, CORE-22, PKG-AUTO-THUMB-12, PKG-AUTO-THUMB-03 | 旧核心/候选核心预览、多次加载无过期缩略图覆盖 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo | | PKG-AUTO-THUMB-06 | artplayer-plugin-auto-thumbnail
验证分发并同步文档 | PKG-AUTO-THUMB-05, ENG-07 | auto.thumbnail.js、三种产物和内存/URL 证据 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | H | todo | | PKG-AUTO-THUMB-07 | artplayer-plugin-auto-thumbnail
终止抽帧时清空私有画布像素尺寸 | PKG-AUTO-THUMB-02, CORE-09, CORE-19 | 将私有 canvas 尺寸归入 job 清理;完成、取消、失败及分配重入均有回归,保留已编码 JPEG | 旧红新绿证明保留回调时画布归零,单项清理失败不阻断其他资源;原生取消和完成后 JPEG 仍可解码,原 API/时间公式/类型不变 | M | done | | PKG-AUTO-THUMB-08 | artplayer-plugin-auto-thumbnail
保留旧声明并提供准确异步类型入口 | PKG-AUTO-THUMB-02, ENG-04, ENG-06, CORE-07 | 保留实际 npm 1.1.0 根声明;新增同实现 /runtime 类型、编辑器声明及隔离安装消费者 | 原 Parameters/ReturnType/替代函数不变;准确 Promise 类型正反例、CJS/ESM 条件入口和声明解析通过;不把像素与设备缺口计为通过 | M | done | @@ -558,6 +558,7 @@ - PKG-AUTO-THUMB-01: [记录](baselines/auto-thumbnail-release.json) [记录](baselines/auto-thumbnail-contract.md) [记录](changes/2026-09-13-PKG-AUTO-THUMB-01-contract.md) [记录](baselines/auto-thumbnail-contract-validation.json) - PKG-AUTO-THUMB-02: [记录](baselines/auto-thumbnail-failures.md) [记录](baselines/auto-thumbnail-failures-validation.json) [记录](changes/2026-09-13-PKG-AUTO-THUMB-02-failures.md) - PKG-AUTO-THUMB-03: [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-lifecycle-checkpoint.md) [记录](baselines/auto-thumbnail-lifecycle-checkpoint.json) [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-hidden-renderer.md) [记录](baselines/auto-thumbnail-hidden-renderer.json) [记录](baselines/auto-thumbnail-timeline-media.json) [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-frame-presentation.md) [记录](baselines/auto-thumbnail-frame-presentation.json) [记录](changes/2026-09-14-PKG-AUTO-THUMB-03-rendering-readiness.md) [记录](baselines/auto-thumbnail-rendering-readiness.json) [记录](changes/2026-09-14-PKG-AUTO-THUMB-03-first-seek.md) [记录](baselines/auto-thumbnail-first-seek.json) [记录](changes/2026-09-14-PKG-AUTO-THUMB-03-native-decoder.md) [记录](baselines/auto-thumbnail-native-decoder.json) +- PKG-AUTO-THUMB-04: [记录](changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md) [记录](baselines/auto-thumbnail-migration-validation.json) [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-internal-types.md) [记录](baselines/auto-thumbnail-metadata-validation.json) - PKG-VTT-THUMB-01: [记录](baselines/vtt-thumbnail-release.json) [记录](baselines/vtt-thumbnail-contract.md) [记录](changes/2026-09-13-PKG-VTT-THUMB-01-contract.md) - PKG-VTT-THUMB-02: [记录](baselines/vtt-thumbnail-failures.json) [记录](changes/2026-09-13-PKG-VTT-THUMB-02-failures.md) - PKG-VTT-THUMB-03: [记录](changes/2026-09-13-PKG-VTT-THUMB-03-resources.md) [记录](baselines/vtt-thumbnail-resources.json) [记录](changes/2026-09-13-PKG-VTT-THUMB-03-parser.md) [记录](baselines/vtt-thumbnail-parser.json) diff --git a/refactor/progress.md b/refactor/progress.md index 66a255a7f..a0543adf9 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,12 @@ # 进度与证据 +## PKG-AUTO-THUMB-04 完成源码与公开类型迁移验收 + +八个自有模块均为严格 TS,当前包及真实核心接入 fixture 编译/lint 通过;当前 tarball 与 npm 旧包在仓库外完成 10 组 TS/模块解析、精确负例、导出身份和 Promise 注册检查,编辑器 24 个声明输出只读检查通过。运行字节未改,与任务12的189项源码、两份产物各82项及各36项浏览器证据指纹相同。见[记录](changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md)及[证据](baselines/auto-thumbnail-migration-validation.json)。 + +04 基于已完成子任务独立验收;05 直接依赖03与04,校验器保护03门槛。03原验收、首帧风险与设备要求未降低,完整包仍不能标完成。状态201/266 done、22 doing、43 todo。Thumbnail工具的默认兼容选择仍待用户答复,后续独立工作继续。 + + ## PKG-AUTO-THUMB-12 元数据加载超时与资源回收 修复隐藏视频在未收到 metadata/error 时永久等待:独立 30 秒期限归 extraction/job 所有,成功/取消后旧期限失效,超时保留上一张可用图。旧 main 的 7 项回归全红;源码 189/189、main/legacy 各 82/82,重建后三引擎各 36/36。首版 WebKit 请求拦截等待失败已保留,最终用真实 HTTP 挂起端点及服务端到达证据验证。期限回调由测试显式触发,不声称等待了真实 30 秒。见[变更](changes/2026-09-15-PKG-AUTO-THUMB-12-metadata.md)与[证据](baselines/auto-thumbnail-metadata-validation.json)。 diff --git a/refactor/scripts/plan.mjs b/refactor/scripts/plan.mjs index cb98aa6ca..a1350405e 100644 --- a/refactor/scripts/plan.mjs +++ b/refactor/scripts/plan.mjs @@ -81,6 +81,7 @@ for (const device of ['PKG-CAST-05', 'PKG-VAST-05', 'PKG-DPIP-05', 'PKG-MASK-05' requireAncestor('REVIEW-02', device) } requireAncestor('REL-02', 'REL-09') +requireAncestor('PKG-AUTO-THUMB-05', 'PKG-AUTO-THUMB-03') for (const release of ['REL-05', 'REL-06']) { for (const gate of ['REVIEW-01', 'REVIEW-02', 'REVIEW-03', 'CI-04', 'REL-03', 'REL-04', 'REL-09']) { requireAncestor(release, gate) diff --git a/refactor/tasks.json b/refactor/tasks.json index ebdd27f37..7cb1263fa 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -1848,7 +1848,11 @@ "artplayer-plugin-auto-thumbnail" ], "dependsOn": [ - "PKG-AUTO-THUMB-03", + "PKG-AUTO-THUMB-02", + "CORE-09", + "CORE-19", + "PKG-AUTO-THUMB-07", + "PKG-AUTO-THUMB-12", "ENG-04", "ENG-06", "CORE-07", @@ -1857,11 +1861,16 @@ "PKG-AUTO-THUMB-10", "PKG-AUTO-THUMB-11" ], - "status": "todo", + "status": "done", "risk": "H", "deliverable": "抽帧结果和真实异步插件返回类型兼容", "acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容", - "evidence": [] + "evidence": [ + "changes/2026-09-15-PKG-AUTO-THUMB-04-migration.md", + "baselines/auto-thumbnail-migration-validation.json", + "changes/2026-09-13-PKG-AUTO-THUMB-03-internal-types.md", + "baselines/auto-thumbnail-metadata-validation.json" + ] }, { "id": "PKG-AUTO-THUMB-05", @@ -1873,7 +1882,8 @@ "dependsOn": [ "PKG-AUTO-THUMB-04", "CORE-22", - "PKG-AUTO-THUMB-12" + "PKG-AUTO-THUMB-12", + "PKG-AUTO-THUMB-03" ], "status": "todo", "risk": "H",