mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
34 lines
1.6 KiB
TypeScript
34 lines
1.6 KiB
TypeScript
import type { Source } from './provenance.ts'
|
|
import assert from 'node:assert/strict'
|
|
|
|
export interface EsmSource extends Source {
|
|
archive: string
|
|
stages: string[][]
|
|
environment: Record<string, string | null>
|
|
prefix: string
|
|
}
|
|
export interface BabelRuntime {
|
|
version: string
|
|
transform: (source: string, options: { plugins: string[] }) => { code: string }
|
|
}
|
|
|
|
export function reconstructModule(source: string, item: EsmSource, babel: BabelRuntime, minify: (source: string) => string) {
|
|
for (const plugins of item.stages) {
|
|
assert(plugins.length && plugins.every(name => ['transform-typeof-symbol', 'transform-modules-commonjs'].includes(name)), 'Unexpected historical transform')
|
|
source = babel.transform(source, { plugins }).code
|
|
}
|
|
for (const [name, value] of Object.entries(item.environment)) {
|
|
assert(['NODE_ENV', 'REACT_APP_SC_ATTR', 'SC_ATTR', 'REACT_APP_SC_DISABLE_SPEEDY', 'SC_DISABLE_SPEEDY'].includes(name), 'Unexpected historical environment key')
|
|
source = source.replaceAll(`process.env.${name}`, value === null ? 'undefined' : JSON.stringify(value))
|
|
}
|
|
assert(['', 'var define;\n', 'var process = require("process");\n'].includes(item.prefix), 'Unexpected Parcel global injection')
|
|
// Parcel generate() adds globals for minification and again for final output.
|
|
return item.prefix + minify(item.prefix + source)
|
|
}
|
|
|
|
export function verifyPrelude(bundle: string, prelude: string, footer: string) {
|
|
const prefix = prelude.trim().replace(/;$/, '')
|
|
assert(bundle.startsWith(`${prefix}({`), 'Parcel prelude differs')
|
|
assert(bundle.endsWith(footer), 'Parcel invocation or map trailer differs')
|
|
}
|