mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-25 16:11:20 -08:00
fix(vast): [PKG-VAST-03] preserve npm initialization with explicit workspace mode
This commit is contained in:
1 parent
314a1c3163
commit
c162d2b3b3
27 files changed
+13189
-191
No files matched your search
@@ -1,19 +1,21 @@
|
||||
# VAST implementation and maintenance
|
||||
|
||||
This is the PKG-VAST-03 implementation checkpoint. The published-versus-workspace
|
||||
initialization conflict remains open; this checkpoint is not release acceptance.
|
||||
The runtime follows the accepted published-versus-workspace initialization decision.
|
||||
Public declaration reconciliation and real IMA validation remain separate release gates.
|
||||
|
||||
## Module map
|
||||
|
||||
- `src/index.ts` owns the core destroy subscription before SDK loading begins,
|
||||
awaits SDK loading and the user callback, and preserves original rejection values.
|
||||
Its writable `.default` self-reference retains historical CommonJS default calls
|
||||
It snapshots the optional compatibility mode at factory creation and initializes
|
||||
the default session before the callback. Its writable `.default` self-reference retains historical CommonJS default calls
|
||||
alongside the current direct factory. It does not wrap registration or load IMA.
|
||||
- `src/sdk.ts` is the only runtime Glomex import boundary. It also constructs IMA
|
||||
requests, preserving own/inherited configuration fields and primary-field overrides.
|
||||
- `src/session.ts` owns one current SDK/container pair, the four ad-event subscriptions,
|
||||
active-ad request suppression, initialization rollback and explicit recreation.
|
||||
- `src/view.ts` creates the existing overlay styles and distinct per-module container
|
||||
- `src/session.ts` owns one current SDK/container pair, initialization rollback and
|
||||
explicit recreation. Only workspace mode adds four ad-event subscriptions and
|
||||
active-ad request suppression; default mode delegates those behaviors to the SDK.
|
||||
- `src/view.ts` creates each mode's historical overlay styles and distinct per-module container
|
||||
IDs, including multiple instances initialized in the same millisecond.
|
||||
- `src/types.ts` describes the implementation context and SDK boundary. Public legacy
|
||||
declarations in `types/` remain separate pending PKG-VAST-04 reconciliation.
|
||||
@@ -50,17 +52,34 @@ it finishes. SDK content pause/resume behavior is not duplicated in this wrapper
|
||||
|
||||
## Compatibility and remaining work
|
||||
|
||||
The checkpoint retains the workspace callback order, lazy initialization, mutable
|
||||
settings/options identities, default flags, void request methods, and asynchronous
|
||||
outer attachment. The old `require(...).default(...)` call is restored, while the
|
||||
current callable export remains callable. This does not recreate the old namespace
|
||||
object's reflection shape. The `id`/`$container` aliases, eager
|
||||
published initialization and contradictory public return types are not yet reconciled.
|
||||
See [the explicit decision](../../refactor/vast-compatibility-decision.md).
|
||||
Calling `artplayerPluginVast(callback)` preserves npm1.0.0 behavior: the SDK and
|
||||
container exist before the callback, including when no callback was supplied.
|
||||
`imaPlayer`, `id` and `$container` are writable/enumerable/configurable data fields.
|
||||
SDK settings retain their own defaults. The wrapper forwards each explicit request
|
||||
and leaves ad visibility to the SDK, without adding workspace event listeners.
|
||||
|
||||
The former timestamp-only overlay ID now has a monotonic suffix to avoid same-tick
|
||||
collisions; the existing `art-vast-` prefix and CSS styles remain. IDs are internal
|
||||
in the workspace context; published ID compatibility is tracked with the above decision.
|
||||
Passing `{ compatibility: 'workspace-1.2' }` as the second argument retains unpublished
|
||||
workspace behavior: no player/container until `init`, `playUrl` or `playRes`; callers
|
||||
can mutate the original settings/options before initialization. Preloading and restore
|
||||
custom playback state default to true. Four ad events control the black overlay and
|
||||
active-ad suppression. Resource getters track the current session and become null
|
||||
on release. The mode is captured once; an unknown value throws TypeError before loading.
|
||||
|
||||
Default data fields retain their last allocated values after destroy, as published
|
||||
snapshots; `container` is a live getter and becomes null. Explicit recreation updates
|
||||
the data fields to the new session. Public writes to these snapshots do not transfer
|
||||
resource ownership. Never use a retained disposed SDK as an active session.
|
||||
|
||||
Both modes retain void request methods, async registration and SDK/callback rejection.
|
||||
The old `require(...).default(...)` call and current callable export remain available;
|
||||
this does not recreate the old namespace object's reflection shape. Contradictory
|
||||
public return declarations and the new second-argument declaration remain task04.
|
||||
See [the accepted decision](../../refactor/vast-compatibility-decision.md).
|
||||
|
||||
Overlay IDs use the historical `art-` default prefix or `art-vast-` workspace prefix,
|
||||
with a monotonic suffix to fix same-millisecond collisions. Default styles do not add
|
||||
workspace's black background or pointer-events rule. Container identity/ownership,
|
||||
initial display:none and existing position/inset/size/z-index are preserved.
|
||||
|
||||
`@alugha/ima@2.1.0` is a direct pinned dependency because Glomex declarations import its
|
||||
types while Glomex lists it only as a development dependency. Runtime imports continue
|
||||
@@ -68,11 +87,16 @@ to use Glomex1.21.2. No new direct remote loader or SDK major upgrade was introd
|
||||
|
||||
## Validation
|
||||
|
||||
Run `yarn test:vast`, `yarn typecheck`, `yarn build artplayer-plugin-vast`, and
|
||||
`yarn test:browser vast.spec.js` using the repository pinned toolchain. The node and
|
||||
Run `yarn test:vast`, `node node_modules/typescript/bin/tsc -p
|
||||
packages/artplayer-plugin-vast/tsconfig.json --noEmit`, `yarn build artplayer-plugin-vast`,
|
||||
and `yarn test:browser:source test/browser/vast.spec.js --workers=2` using the pinned
|
||||
toolchain. Do not use the historical `tsc` binary alias for source checking. The node and
|
||||
browser wrapper tests substitute only the Glomex SDK boundary. They cover current and
|
||||
frozen historical sources, real core5.1.7/5.4.1/candidate registration, real DOM and
|
||||
frozen historical sources, real published core5.1.7/5.4.0 and candidate5.4.1 registration, real DOM and
|
||||
main-video decoding; they do not certify Google IMA ads or final npm distribution.
|
||||
Candidate default and explicit workspace cases execute identical compiled code with
|
||||
different options; historical fixtures remain immutable. Compatibility tests compare
|
||||
callback timing, data descriptors, defaults and request forwarding to actual npm source.
|
||||
|
||||
`test/vast-exports.test.js` exercises bundled CommonJS/global/AMD and native ESM
|
||||
import, using an already destroyed host to verify registration without loading ads.
|
||||
|
||||
Reference in new issue
Block a user