mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
221 lines
14 KiB
Markdown
221 lines
14 KiB
Markdown
# Desktop console maintenance
|
|
|
|
`yarn build:console` generates `docs/assets/js/console.js`; `yarn check:console`
|
|
compares it without writing. Never edit that output. This is the desktop editor
|
|
console, separate from the mobile vConsole integration.
|
|
|
|
## Modules and ownership
|
|
|
|
| File | Responsibility |
|
|
| -------------------------- | ------------------------------------------------------------------------------------ |
|
|
| `build.ts` | Verify frozen input, compile two owned modules, replace their Parcel function bodies |
|
|
| `runtime/entry.ts` | Install React, ReactDOM and consoleLog globals; return the React render result |
|
|
| `runtime/view.ts` | Component state, Clear, hover, scroll scheduling and unmount |
|
|
| `runtime/subscriptions.ts` | One hook owner, subscriptions, queued delivery and descriptor restoration |
|
|
| `runtime/errors.ts` | Preserve native error message and stack without mutating the input |
|
|
| `runtime/style.ts` | Original stylesheet, decoded exactly from the frozen view |
|
|
| `runtime/types.ts` | Structural interfaces for injected runtimes and parser |
|
|
|
|
The fixed upstream is `refactor/baselines/site-vendor/console-original.js`, checked
|
|
by SHA-256. Only W5CS (view) and Focm (entry) bodies change. The other 100 modules,
|
|
their dependency maps and Parcel runtime remain byte-for-byte intact. The dead
|
|
`/index.js.map` trailer is removed; a complete upstream source map is unavailable.
|
|
A non-executable attribution comment is appended for the matched Stack Overflow
|
|
snippet. The build test compares every other byte outside the two owned bodies.
|
|
The entry injects existing React/ReactDOM 17.0.2, console-feed and
|
|
styled-components 5.3.3. RxPG supplies the historical parser and V2JG the method
|
|
list. Root `@types/react` 19.1.10 is used for type checking only; no React 19 runtime
|
|
is included. These module IDs are a frozen build boundary, not a general Parcel
|
|
patching API. Changing the vendor requires a separate provenance review.
|
|
|
|
## Data and cleanup
|
|
|
|
Each native call forwards once with its receiver, then queues parsing. Wrappers
|
|
retain the old undefined return behavior. Count/timing/assert parsing runs once
|
|
per call, and active viewers receive the same parsed record; raw object references
|
|
remain available to the old inspector. Error-only logs add a missing error header
|
|
before the historical stack conversion, preserving the original Error object.
|
|
|
|
The first subscriber captures method/feed descriptors and installs the hook.
|
|
Additional viewers share it. Delivery snapshots subscribers when the call occurs;
|
|
removed viewers do not receive it and later viewers do not receive old logs.
|
|
The final subscriber cancels pending delivery and restores only wrappers and
|
|
metadata still owned by this instance. Later external wrappers remain intact.
|
|
An external wrapper retaining an old hook can forward native calls without
|
|
retaining viewer callbacks. Failed installation rolls back. A throwing listener
|
|
does not starve other viewers; its error remains observable asynchronously.
|
|
No general interception of third-party console mutations is attempted.
|
|
|
|
The component owns its 200ms scroll timer and cancels it on unmount; the callback
|
|
also verifies the live element. `consoleLog(element)` still returns the React
|
|
component, and repeat mounting into the same container reuses it. The additive
|
|
`consoleLog.unmount(element)` forwards ReactDOM's boolean result. The editor uses
|
|
it on non-persisted pagehide. Persisted pagehide retains state; controlled lifecycle
|
|
tests do not certify physical-device BFCache behavior.
|
|
|
|
```sh
|
|
yarn build:console
|
|
yarn check:console
|
|
yarn typecheck:docs-tools
|
|
yarn test:site-console
|
|
yarn build:site-assets
|
|
yarn test:browser test/browser/site-console.spec.js test/browser/site-editor.spec.js --workers=1
|
|
```
|
|
|
|
Historical browser cases intentionally reproduce frozen defects; candidate cases
|
|
prove their repairs independently. Unit tests check shared ownership, failed
|
|
installation, callback errors, object identity, exact CSS and vendor preservation.
|
|
No new dependency is required. Existing esbuild 0.27.7 and TypeScript 5.9.3 provide
|
|
generation and structural parsing. All vendor module bodies now have exact
|
|
reconstruction evidence; full embedded attribution and notices remain
|
|
SITE-07 / VENDOR-08. See
|
|
`refactor/console-modernization.md` for contracts and evidence.
|
|
|
|
## Historical source reconstruction
|
|
|
|
`refactor/baselines/console-feed-provenance.json` maps all 32 modules reachable
|
|
through relative imports from m6b6 to the official console-feed 3.2.2 archive.
|
|
Their rebuilt bodies exactly match the frozen bundle. The separate
|
|
`console-commonjs-provenance.json` adds 41 exact modules from 13 official archives:
|
|
React/ReactDOM, scheduler, object-assign, react-is, prop-types, shallowequal,
|
|
process, hoist-non-react-statics, is-dom/is-object/is-window and linkifyjs.
|
|
`console-esm-provenance.json` adds the final 27 modules from 18 archives and the
|
|
Parcel 1.12.5 prelude/invocation. All 100 vendor bodies match; this does not
|
|
establish unique original installed versions or recover the missing lockfile.
|
|
|
|
```sh
|
|
node scripts/site-vendor/console/reproduce.ts --fetch
|
|
node scripts/site-vendor/console/reproduce.ts
|
|
yarn test:site-console
|
|
```
|
|
|
|
The first command downloads 35 pinned npm archives into the dedicated ignored
|
|
`refactor/.cache/console-feed-reproduction/` directory. The second uses that cache
|
|
offline. Both verify SHA-512 SRI, archive SHA-256, source member fingerprints,
|
|
compiler bytes, original notice bytes and exact output of all 100 identified
|
|
modules. They load Terser 3.17.0 with the installed source-map 0.6.1, and the
|
|
self-contained Babel 7.16.4 archive. They do not install dependencies, change Yarn
|
|
or execute the archived runtime libraries. Canonical Node is required.
|
|
The minification recipe is recovered from Parcel 1.12.5's archive; this proves a
|
|
reproducing transform, not that the original author used precisely that Parcel
|
|
version. `provenance.ts` separately verifies complete traversal, relative source
|
|
mapping and external dependency boundaries. Missing, unreachable, duplicate or
|
|
changed evidence fails instead of silently shrinking the comparison. Multiple
|
|
package roots are explicit, relative edges must stay in the same archive, and
|
|
all module IDs are covered once. Named/scoped imports must resolve to the
|
|
identified package. Production entrypoints
|
|
use the pinned-source process.env.NODE_ENV substitution. The process shim's
|
|
single process.browser assignment is removed following Parcel's original visitor;
|
|
this is checked against exact source/output bytes, not a general JS rewrite.
|
|
|
|
`reconstruction.ts` owns the ordered Babel stages, explicit historical environment
|
|
and Parcel global injection. Most ESM inputs need only CommonJS conversion.
|
|
Styled-components needs a separate earlier typeof-symbol pass; combining the
|
|
passes also changes newly generated interop helpers and fails exact comparison.
|
|
Parcel adds globals before minification and again before final output. Preserve
|
|
that sequence, including the observed process/define declarations. Compiler
|
|
options are cloned per module because historical Terser mutates them.
|
|
`reproduce.ts` orchestrates archives, hashes and all three source groups; normal
|
|
site builds continue using the frozen verified vendor boundary.
|
|
|
|
The archived LICENSE is preserved verbatim with its Facebook attribution under
|
|
`refactor/baselines/site-vendor/console-feed-3.2.2-LICENSE.txt`. Do not rewrite it
|
|
or infer it covers every embedded/external component. Embedded and external
|
|
components have their own source records and notices described below.
|
|
The other 13 archives' LICENSE texts are also frozen under
|
|
`refactor/baselines/site-vendor/console-commonjs/`, with exact bytes preserved by
|
|
Git attributes. They are source evidence tied to the generated notice inventory.
|
|
The final ESM and Parcel texts live in
|
|
`refactor/baselines/site-vendor/console-esm/`. React-inspector 5.1.1's ESM member
|
|
is an exact match after historical conversion; its CJS member was a failed
|
|
candidate. Styled-components 5.3.3 omits LICENSE in npm; the supplemental original
|
|
comes from fixed upstream commit 9b3457036cfedf1d5336f654f3171657630a9fd8.
|
|
The fetch command verifies that immutable upstream text through GitHub's Contents
|
|
API too (the raw URL had connection resets); both URLs and the blob ID are
|
|
recorded, and decoded content must match the same hash. Offline mode checks
|
|
the frozen bytes. The consolidated review is in `refactor/console-notice-review.md`.
|
|
|
|
## Public notice delivery and embedded sources
|
|
|
|
The site manifest now delivers all 32 runtime package licenses, Parcel's loader
|
|
license, and two embedded headers through `yarn build:site-notices`. The hashes
|
|
are tied to the current generated console asset. `check:console` must run before
|
|
`check:site-notices`; adapter changes require an explicit manifest fingerprint
|
|
update after runtime validation. No runtime code is appended by the notice build.
|
|
|
|
`embedded-notices.ts` extracts exact license comment blocks from verified archive
|
|
members, or from a unique source in the member's source map. It verifies member,
|
|
source and excerpt hashes, without removing comment markers or changing lines.
|
|
`reproduce.ts` compares those excerpts with the preserved files. The record is
|
|
`refactor/baselines/console-embedded-notices.json`; Chromium's complete BSD header
|
|
comes from console-feed string-utils, and Sultan Tarimo's MIT header comes from
|
|
styled-components' rule-sheet source map. Both are independently attributed in
|
|
the public index and protected by the notice CLI's omission checks.
|
|
|
|
`embedded-sources.ts` verifies dependency source-map inventories and exact source
|
|
transforms. Its record is `refactor/baselines/console-embedded-sources.json`.
|
|
All 16 Babel members embedded in react-inspector match runtime 7.13.10; its single
|
|
regenerator member matches runtime 0.13.7. The consumer map and each source member
|
|
are hashed, and the checker rejects omitted or extra external map sources. These
|
|
versions identify matching source content; the original full lock is not recovered.
|
|
|
|
Linkifyjs 2.1.9 pins simple-html-tokenizer to Git commit
|
|
04799f4638ec5ed903a4e5aa6e832269fa59be6b in its published package manifest. All seven
|
|
tokenizer members exactly reproduce with the self-contained Babel 6.26.0 compiler
|
|
and es2015 loose preset. Archive, compiler, source and output bytes are checked.
|
|
The Git archive's SHA-512 is a measured fingerprint, not an npm registry SRI;
|
|
the recorded immutable URL and dependency string retain its actual provenance.
|
|
These three licenses are included in the console notice outputs. The normal
|
|
site build still executes only the owned TS build; historical reproduction now
|
|
fetches 42 archives and fixed Git sources only when explicitly run with `--fetch`.
|
|
|
|
`attribution.ts` verifies immutable Git content against SHA-256 and Git blob SHA-1,
|
|
and compares compiled forks with the archived runtime before its single terminal
|
|
inline source map. `console-derived-attribution.json` pins the console-feed
|
|
replicator TS revision and TypeScript 4.1.2 ES3/CommonJS/LF compiler options. The
|
|
fork's runtime matches exactly; it is not a verbatim npm replicator release.
|
|
Ivan Nikulin's original MIT notice is retained from the 1.0.x source family.
|
|
Historical compiler extraction permits 16 MiB because this fixed compiler member
|
|
is 9,002,076 bytes; it is not an installed workspace dependency.
|
|
|
|
Emotion's Stylis source matches its fixed tag commit and declares Stylis 3.5.4.
|
|
The original build recipe modifies Stylis and uses an unversioned online Closure
|
|
service. We preserve that recipe and the matching generated source without claiming
|
|
to rerun the earlier service. Sultan Tarimo's MIT notice covers the upstream
|
|
attribution, including the separately identified rule-sheet reference in cache.
|
|
Gary Court's original README/MIT text and Austin Appleby's public-domain header
|
|
are preserved for the two explicit MurmurHash source references. Original sources
|
|
and excerpts are hashed; attribution is never inferred from the outer Emotion MIT.
|
|
|
|
`stackoverflow.ts` verifies a fixed answer revision's author, timestamp, license,
|
|
body and code, then locates the unique module declaration for comparison.
|
|
The customStringify function matches answer 48254637 revision 5, dated 2018-09-19,
|
|
under CC BY-SA 4.0. Revision 1 used Map and the current revision changes duplicate
|
|
handling; neither is the matching source. TypeScript 4.1.2 reproduces the function
|
|
exactly before minification. `console-stackoverflow-provenance.json` retains the
|
|
minimal revision response, source and full license; the public attribution credits
|
|
Alexander Mills and Rob W. A generated bundle comment retains the license and
|
|
links even when the script is read separately from the site notice index.
|
|
|
|
The shallowequal 1.1.0 README identifies react-pure-render as its code origin.
|
|
The derived-attribution record freezes the original source and Dan Abramov MIT
|
|
license at commit 729cdbd51df00068816376544738cc1fc4720cf2. These are verified with
|
|
the same Git-content helper, alongside the published README and modified runtime
|
|
member. Callback/context support and other changes prevent an exact-source claim;
|
|
the public attribution explains that boundary and retains both authors' notices.
|
|
|
|
There are now 47 console notice outputs for 44 components. This includes a
|
|
CC BY-SA snippet; never describe the bundle as MIT-only. The identified source
|
|
and notice inventory is reviewed with the scope in `refactor/console-notice-review.md`.
|
|
The original complete lockfile and online Closure service have not been recovered.
|
|
The reproduction command's `licenseClosure: false` means that technical byte
|
|
comparison alone makes no license-clearance claim; the documented review also
|
|
considers component identity, embedded attribution and actual delivery.
|
|
|
|
`notices.ts` binds the 44 delivered components to 46 upstream notice/source files
|
|
from the independent provenance records. The 47th output is the local modification
|
|
explanation for react-pure-render. Both normal notice commands verify this relation
|
|
before writing: retaining all files while redirecting a BSD component to another
|
|
component's MIT notice is rejected. Re-review changed source or integration boundaries,
|
|
then revalidate the release candidate; this scope does not replace release reviews.
|