mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-20 12:11:20 -08:00
test(canvas): [PKG-CANVAS-01] freeze published proxy and media adapter contracts
This commit is contained in:
1 parent
20f062bc90
commit
5e26d2298d
17 files changed
+814
-7
No files matched your search
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "PKG-CANVAS-01",
|
||||
"status": "done",
|
||||
"parentCommit": "20f062bc901d525d0659807dceebd1e41535ca7d",
|
||||
"checks": [
|
||||
{
|
||||
"command": "node --test refactor/scripts/canvas-contract.test.mjs refactor/scripts/contracts.test.mjs",
|
||||
"result": "pass",
|
||||
"tests": 20,
|
||||
"canvas": 13,
|
||||
"indexValidation": 7,
|
||||
"scope": "two actual npm archives and frozen workspace; normal property forwarding, bitmap/fallback/callback/event/resize contracts, public export/declaration shapes and exact Git versus npm core distinction"
|
||||
},
|
||||
{
|
||||
"command": "focused eslint --no-fix",
|
||||
"result": "pass"
|
||||
},
|
||||
{
|
||||
"command": "yarn ci:check",
|
||||
"result": "pass",
|
||||
"tests": {
|
||||
"unit": 881,
|
||||
"engineering": 14,
|
||||
"baseline": 96,
|
||||
"mainTotal": 991,
|
||||
"repeatedContractExecutions": 44
|
||||
},
|
||||
"strictProductionTypeScriptFiles": 278
|
||||
}
|
||||
],
|
||||
"archiveScope": {
|
||||
"plugins": [
|
||||
"npm 1.0.0",
|
||||
"npm 1.1.0",
|
||||
"workspace frozen at parentCommit"
|
||||
],
|
||||
"members": 12,
|
||||
"workspaceFiles": 6,
|
||||
"gitAssociatedCoreVersions": [
|
||||
"5.1.7",
|
||||
"5.3.1"
|
||||
],
|
||||
"supportedCoreRange": "not inferred from Git associations"
|
||||
},
|
||||
"contractIndex": {
|
||||
"packages": 22,
|
||||
"assignedFamilies": 264,
|
||||
"workspaceVersionPoints": 22,
|
||||
"publishedVersionPoints": 11,
|
||||
"exactIndexedCases": 10,
|
||||
"unindexedFamilyRows": 255
|
||||
},
|
||||
"inputs": [
|
||||
{
|
||||
"file": "refactor/baselines/canvas-release.json",
|
||||
"sha256LF": "7f7b229a5c0350a5d02be101d0095548c7ef1e76ce95c3b7152b415b0117398c"
|
||||
},
|
||||
{
|
||||
"file": "refactor/scripts/canvas-contract.mjs",
|
||||
"sha256LF": "eb545d0ccb3438413980d292fd2e511342b680e03c5985e58006a1407c8f53aa"
|
||||
},
|
||||
{
|
||||
"file": "refactor/scripts/canvas-contract.test.mjs",
|
||||
"sha256LF": "65e5ea0c9a12f47bc7939840d6e4c25b2820e7fd5e6f32fe3bd9f35e7f3e6da6"
|
||||
},
|
||||
{
|
||||
"file": "test/helpers/canvas.js",
|
||||
"sha256LF": "cc617b6d1053a9ed9caa5dad03088abaaff4344f078e23d007ee1a935f2a6c3c"
|
||||
},
|
||||
{
|
||||
"file": "refactor/contract-policy.json",
|
||||
"sha256LF": "f450c792465b67ebdc92e6d7339fb6be4f6fb19ffbded6c512244d73a57eafd2"
|
||||
},
|
||||
{
|
||||
"file": "refactor/scripts/contracts.test.mjs",
|
||||
"sha256LF": "7cb6cfa5fe2cdfe3fd6f8dc5377ff21db2aa748bc7788f4660f61abb98bbf647"
|
||||
},
|
||||
{
|
||||
"file": "refactor/baselines/vast-core.json",
|
||||
"sha256LF": "bb703cf37591211f78719665aed0e0cb2524ec5618dad48e6b8e2dbfef132b8e"
|
||||
}
|
||||
],
|
||||
"logs": [
|
||||
{
|
||||
"file": "refactor/.cache/canvas01-capture.log",
|
||||
"sha256": "a8dd65ebf981668b0fb1f44a58cd044879ecce10847797622f6bf56ef5189ed4"
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/canvas01-targeted.log",
|
||||
"sha256": "9ad62bd4c20fd501c197ec77eb19e7c66090fce356e7c26fadb972e5524e0c2c"
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/canvas01-lint-final.log",
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/canvas01-ci.log",
|
||||
"sha256": "ca15ff3aaa561911ed0809b6833c3ad47013d683fab4bfbac258b6cdb3be3243"
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"Controlled DOM/RAF/microtasks prove normal adapter contracts, not native browser pixels, video codecs or all enumerable browser properties.",
|
||||
"Pending bitmap, cleanup, error and delayed subscription concerns remain source-observed; reproduce them in task 02 and fix in task 03.",
|
||||
"Declaration shape checks are not full installed type consumer validation; optional inference/export/result checks remain task 04.",
|
||||
"Git commit labeled core 5.1.7 contains proxy support while actual npm 5.1.7 does not; do not merge these identities into a support range.",
|
||||
"No production source or artifacts modified; no new browser/media claims, push, version bump or publication."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
# Canvas代理发布与工作区契约
|
||||
|
||||
PKG-CANVAS-01;工作区冻结于20f062bc。registry观察为1.0.0/1.1.0,latest为1.1.0;
|
||||
两份实际tarball各6成员,SHA512、SHA256、所有文件及manifest见canvas-release.json。
|
||||
1.0.0包含src/index.js,1.1.0不带src、增加真实mjs;测试直接执行两版实际main产物和
|
||||
Git冻结工作区,不能用现代构建重生成“旧包”。工作区1.1.0未来按REL-09升至2.0.0。
|
||||
|
||||
## 入口、属性和事件
|
||||
|
||||
- factory(callback)返回同步注册函数;注册依次创建canvas/video/2Dcontext,返回该canvas。
|
||||
callback省略时正常;不添加插件name或公开destroy句柄。
|
||||
- 先收集canvas可枚举方法并绑定canvas,然后仅转发video里可枚举且canvas上不存在的
|
||||
属性。转发get/set为enumerable/configurable;函数读取时绑定video,属性值实时读取。
|
||||
既有canvas属性、style和方法优先;同名addEventListener仍是canvas方法。
|
||||
- 通过零延迟setTimeout,按Artplayer.config.events逐项用art.proxy监听内置video;
|
||||
原生event对象原样传给art.emit('video:'+type)。这不等于对canvas dispatchEvent。
|
||||
- loadedmetadata将输出width/height设为视频intrinsic尺寸;resize按容器比例缩放输出,
|
||||
用padding居中。autoSize=true时跳过尺寸变更,但resize依旧会绘制。
|
||||
- play取消旧RAF后立即触发异步draw,await后排下一RAF;pause/destroy只取消已存handle。
|
||||
- 支持createImageBitmap时await其结果,drawImage至canvas完整输出buffer,close bitmap,
|
||||
然后callback(ctx,video),再emit('artplayerProxyCanvas:draw',ctx,video)。无bitmap能力
|
||||
时直接drawImage(video,...),callback/event顺序相同。错误发artplayerProxyCanvas:error。
|
||||
|
||||
上述是实际正常执行与源码事实;错误/竞争/终止行为由02继续复现,不自动作为应永久
|
||||
保留的缺陷。属性枚举器用受控DOM描述符做断言,未宣称穷尽不同浏览器的全部属性。
|
||||
|
||||
## 类型与分发差异
|
||||
|
||||
| 维度 | npm1.0.0 | npm1.1.0/工作区 |
|
||||
| --- | --- | --- |
|
||||
| CJS | namespace.default | 可调用工厂 |
|
||||
| ESM | 无独立mjs | mjs默认导出 |
|
||||
| 类型导出 | export=与全局声明 | export default |
|
||||
| callback参数声明 | 必填 | 可选 |
|
||||
| callback形状 | (ctx:CanvasRenderingContext2D,video:HTMLVideoElement)=>void | 同左 |
|
||||
| Result | HTMLCanvasElement | 同左,未描述转发媒体能力 |
|
||||
|
||||
04必须保留1.1.0的可选参数提取(Parameters包含undefined),不能照搬Ambilight的
|
||||
“必填最后重载”。旧require.default、全局、现代ESM/legacy/声明路径需分别验证。
|
||||
README仅demo链接;canvas.js示例省略callback并开启多项播放器功能,不构成这些功能
|
||||
已在每个代理/核心/设备上验收的证明。03改实现,04补类型,05/06再验证实际消费。
|
||||
|
||||
## 历史核心关联的限制
|
||||
|
||||
1.0.0 registryGitHead对应Git核心5.1.7,1.1.0对应Git5.3.1。冻结的前者index/template
|
||||
已有proxy配置及替换媒体元素逻辑,但实际npm5.1.7的option声明和此前浏览器证据都
|
||||
无proxy。版本字符串相同也不能把未发布Git状态当作npm已发布能力;新增断言并固定
|
||||
两份Git源码哈希防止误认。这里没有声明一个连续支持范围。
|
||||
|
||||
前一步Ambilight代理取色使用工作区Canvas源码+实际npm5.4.0/候选核心,另明确记录
|
||||
npm5.1.7未启用代理;不是这两版npm代理的浏览器矩阵。来源见ambilight-proxy-validation.json。
|
||||
|
||||
## 后续风险
|
||||
|
||||
源码可见await bitmap完成后仍可能在pause/destroy后排帧、draw抛错可能遗漏bitmap.close、
|
||||
延迟订阅与art.on缺少主动终止、空context/早期尺寸需要能力边界。01仅记录,02必须
|
||||
以受控完成顺序和必要真实浏览器复现,再由03修复,不能为通过旧快照保留泄漏。
|
||||
@@ -0,0 +1,142 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "PKG-CANVAS-01",
|
||||
"capturedAt": "2026-09-12T04:06:47.519Z",
|
||||
"sourceCommit": "20f062bc901d525d0659807dceebd1e41535ca7d",
|
||||
"registryObservation": {
|
||||
"versions": [
|
||||
"1.0.0",
|
||||
"1.1.0"
|
||||
],
|
||||
"latest": "1.1.0",
|
||||
"workspaceVersion": "1.1.0"
|
||||
},
|
||||
"release": {
|
||||
"name": "artplayer-proxy-canvas",
|
||||
"version": "1.1.0",
|
||||
"metadataUrl": "https://registry.npmjs.org/artplayer-proxy-canvas/1.1.0",
|
||||
"tarball": "https://registry.npmjs.org/artplayer-proxy-canvas/-/artplayer-proxy-canvas-1.1.0.tgz",
|
||||
"integrity": "sha512-lOq22z+xX2DcpokDSMQrDTk4VGDwUaQm9SovQ0GlhgmvMBdxRBDlvv6QrVxFUFsiGUjXEdx9TmtzdiW38dlxiQ==",
|
||||
"sha256": "348c1d6671f79d0e0dbf2bb15875a1e6d60d00b73cde833c018bec7e4be96c8e",
|
||||
"archiveBytes": 2960,
|
||||
"publishedAt": "2026-03-12T14:20:13.012Z",
|
||||
"registryGitHead": "daf133b22630b4a0eecfa3336bbddab0e9119d96",
|
||||
"files": {
|
||||
"package/README.md": "eb063f1381b4eea2e3f2bf6f7ae76d2979e807119ae53708bb3b2014c38a30d2",
|
||||
"package/dist/artplayer-proxy-canvas.js": "ef489570e13f402f1a60eb256ce3900a0021a3d05699c2ba15adfaaeff184d4c",
|
||||
"package/dist/artplayer-proxy-canvas.legacy.js": "7d25f21170c06d067aeaa1c8e79b15f2c0130a27cff1b410532d6c4ef4d2d45f",
|
||||
"package/dist/artplayer-proxy-canvas.mjs": "4bb4a881787770093652a3262fc214a2529a1c514ef49affaf152b8abf0f4dc6",
|
||||
"package/package.json": "4df3a0098730cfc12232fc57066fd1f7159bbd41dce87904fa51f39b82252eed",
|
||||
"package/types/artplayer-proxy-canvas.d.ts": "2d7f4517ab9954ce8925739c2473c553977268bfa120b6420218470952567b47"
|
||||
},
|
||||
"manifest": {
|
||||
"name": "artplayer-proxy-canvas",
|
||||
"version": "1.1.0",
|
||||
"description": "canvas proxy for ArtPlayer",
|
||||
"author": "Harvey Zhao <laozhaochaguan@gmail.com>",
|
||||
"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-proxy-canvas.d.ts",
|
||||
"import": "./dist/artplayer-proxy-canvas.mjs",
|
||||
"require": "./dist/artplayer-proxy-canvas.js"
|
||||
},
|
||||
"./legacy": {
|
||||
"types": "./types/artplayer-proxy-canvas.d.ts",
|
||||
"import": "./dist/artplayer-proxy-canvas.legacy.js",
|
||||
"require": "./dist/artplayer-proxy-canvas.legacy.js"
|
||||
}
|
||||
},
|
||||
"main": "./dist/artplayer-proxy-canvas.js",
|
||||
"module": "./dist/artplayer-proxy-canvas.mjs",
|
||||
"types": "./types/artplayer-proxy-canvas.d.ts",
|
||||
"legacy": "./dist/artplayer-proxy-canvas.legacy.js",
|
||||
"browserslist": "last 1 Chrome version"
|
||||
},
|
||||
"historicalCore": {
|
||||
"version": "5.3.1",
|
||||
"commit": "daf133b22630b4a0eecfa3336bbddab0e9119d96",
|
||||
"file": "packages/artplayer/package.json",
|
||||
"sha256LF": "862f3697876fe915dd0ada178da766ce823aae7563ed30b3e5b11b811202929c",
|
||||
"scope": "Git association only, not a tested support range"
|
||||
}
|
||||
},
|
||||
"previous": [
|
||||
{
|
||||
"name": "artplayer-proxy-canvas",
|
||||
"version": "1.0.0",
|
||||
"metadataUrl": "https://registry.npmjs.org/artplayer-proxy-canvas/1.0.0",
|
||||
"tarball": "https://registry.npmjs.org/artplayer-proxy-canvas/-/artplayer-proxy-canvas-1.0.0.tgz",
|
||||
"integrity": "sha512-Wp/vbobzVfGXWkFWhhyi07TTsO7mtOhJ0BEEh/DWCBbJU1S4ghWyUhB0T9PFMVopbJfY7X51ytrrDeC2vpT1Jg==",
|
||||
"sha256": "728ba39534b3b8139bdc404ef15fe1ac5f76a95562a14e78c6973db2dcfa6f4f",
|
||||
"archiveBytes": 8534,
|
||||
"publishedAt": "2024-09-19T02:48:29.419Z",
|
||||
"registryGitHead": "1605df29431abfe1fc77683e609a2c3c0fba428a",
|
||||
"files": {
|
||||
"package/README.md": "2d2c6283a028e1f3882e855d0abef28a15f67525b1268b5f21c00eeea6244e80",
|
||||
"package/dist/artplayer-proxy-canvas.js": "b87a0032711457b4c364d628cac3ae41fe071de08ed530ec2bd4cebf24941ec5",
|
||||
"package/dist/artplayer-proxy-canvas.legacy.js": "21a2509bc01be721bda037fb6cf24461c52326865362e21873c4c32bfbb162dd",
|
||||
"package/package.json": "600274235ba6d20cd9fe2c34b18acc72eeb6fd3ff262d19bc72a9a4e24bb5d42",
|
||||
"package/src/index.js": "24add6af4f030e94fe1bdc66ca684e21d8baed7055e1ed44e85437bbff787c39",
|
||||
"package/types/artplayer-proxy-canvas.d.ts": "aaa5f7886ecdfe1f6948d296fa3436811c466ac6e4da7fcd2d43faaab6bebc4d"
|
||||
},
|
||||
"manifest": {
|
||||
"license": "MIT",
|
||||
"version": "1.0.0",
|
||||
"name": "artplayer-proxy-canvas",
|
||||
"types": "types/artplayer-proxy-canvas.d.ts",
|
||||
"description": "canvas proxy for ArtPlayer",
|
||||
"main": "dist/artplayer-proxy-canvas.js",
|
||||
"legacy": "dist/artplayer-proxy-canvas.legacy.js",
|
||||
"author": "Harvey Zack <laozhaochaguan@gmail.com>",
|
||||
"browserslist": "last 1 Chrome version",
|
||||
"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"
|
||||
]
|
||||
},
|
||||
"historicalCore": {
|
||||
"version": "5.1.7",
|
||||
"commit": "1605df29431abfe1fc77683e609a2c3c0fba428a",
|
||||
"file": "packages/artplayer/package.json",
|
||||
"sha256LF": "8bd532103099c367fb2c289e0d410f144fdeb00b1b62cf850762a24b61e63c8a",
|
||||
"scope": "Git association only, not a tested support range",
|
||||
"proxySources": {
|
||||
"packages/artplayer/src/index.js": "8c29c0d1c46461bf8ce0bb16f927637055fcdb9b76f979d4bf691c956b1bc8c0",
|
||||
"packages/artplayer/src/template.js": "9f7e8708e79ce2f3a36c767b93721d40027fa85730eebbdd4dc807efea88f9e8"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"packages/artplayer-proxy-canvas/src/index.js": "4b5922b05b46adf0d54ae92025b5c70456a5b8c87819c797ef91eb50e0c8f4d4",
|
||||
"packages/artplayer-proxy-canvas/types/artplayer-proxy-canvas.d.ts": "2d7f4517ab9954ce8925739c2473c553977268bfa120b6420218470952567b47",
|
||||
"packages/artplayer-proxy-canvas/package.json": "4df3a0098730cfc12232fc57066fd1f7159bbd41dce87904fa51f39b82252eed",
|
||||
"packages/artplayer-proxy-canvas/README.md": "eb063f1381b4eea2e3f2bf6f7ae76d2979e807119ae53708bb3b2014c38a30d2",
|
||||
"packages/artplayer-proxy-canvas/.npmignore": "46063058e98be55dba5cf5f33d379e73eca048f4126e7af75f8011bab7f09145",
|
||||
"docs/assets/example/canvas.js": "95a971773e93cfb340a07eebcd49e333825f49ce0d167514ad98a188cd027799"
|
||||
},
|
||||
"limitation": "Historical core Git association is not compatibility verification; media/proxy/browser and candidate consumer checks remain later tasks."
|
||||
}
|
||||
Reference in new issue
Block a user