init project
This commit is contained in:
+431
@@ -0,0 +1,431 @@
|
||||
import {
|
||||
emnapiAsyncWorkPlugin as __emnapiAsyncWorkPlugin,
|
||||
emnapiTSFNPlugin as __emnapiTSFNPlugin,
|
||||
createOnMessage as __wasmCreateOnMessageForFsProxy,
|
||||
instantiateNapiModule as __emnapiInstantiateNapiModule,
|
||||
WASI as __WASI,
|
||||
} from '@napi-rs/wasm-runtime'
|
||||
import { createContext as __emnapiCreateContext } from '@emnapi/runtime'
|
||||
import { memfs } from '@napi-rs/wasm-runtime/fs'
|
||||
|
||||
|
||||
export const { fs: __fs, vol: __volume } = memfs()
|
||||
|
||||
const __wasi = new __WASI({
|
||||
version: 'preview1',
|
||||
fs: __fs,
|
||||
preopens: {
|
||||
'/': '/',
|
||||
},
|
||||
})
|
||||
|
||||
const __wasmUrl = new URL('./rolldown-binding.wasm32-wasi.wasm', import.meta.url).href
|
||||
const __wasmResponse = await globalThis.fetch(__wasmUrl)
|
||||
if (!__wasmResponse.ok) {
|
||||
throw new Error(
|
||||
'Failed to fetch WASI module ' +
|
||||
__wasmUrl +
|
||||
': ' +
|
||||
__wasmResponse.status +
|
||||
' ' +
|
||||
(__wasmResponse.statusText || 'Unknown Status'),
|
||||
)
|
||||
}
|
||||
const __wasmFile = await __wasmResponse.arrayBuffer()
|
||||
|
||||
const __sharedMemory = new WebAssembly.Memory({
|
||||
initial: 16384,
|
||||
maximum: 65536,
|
||||
shared: true,
|
||||
})
|
||||
|
||||
let __emnapiContext
|
||||
|
||||
const __wasiDisposeSymbol = Symbol.for('napi.rs.wasi.dispose')
|
||||
const __wasiWorkers = new Set()
|
||||
let __napiInstance
|
||||
let __emnapiContextDestroyed = false
|
||||
let __emnapiContextDestroyPromise
|
||||
let __emnapiWasmEnvCleanupPrepared = false
|
||||
let __wasiDisposed = false
|
||||
let __wasiDisposePromise
|
||||
let __completeWasiDisposal = function() {}
|
||||
|
||||
function __isThenable(value) {
|
||||
return (
|
||||
value !== null &&
|
||||
(typeof value === 'object' || typeof value === 'function') &&
|
||||
typeof value.then === 'function'
|
||||
)
|
||||
}
|
||||
|
||||
function __createCleanupError(errors, message) {
|
||||
if (errors.length === 1) {
|
||||
return errors[0]
|
||||
}
|
||||
const __AggregateError = globalThis.AggregateError
|
||||
if (typeof __AggregateError === 'function') {
|
||||
return new __AggregateError(errors, message)
|
||||
}
|
||||
const error = new Error(message)
|
||||
error.errors = errors
|
||||
return error
|
||||
}
|
||||
|
||||
function __attachCleanupErrors(error, cleanupErrors) {
|
||||
if (cleanupErrors.length === 0) {
|
||||
return error
|
||||
}
|
||||
const cleanupError = __createCleanupError(
|
||||
cleanupErrors,
|
||||
'WASI binding cleanup failed',
|
||||
)
|
||||
try {
|
||||
if (
|
||||
error &&
|
||||
(typeof error === 'object' || typeof error === 'function')
|
||||
) {
|
||||
if (error.cause === undefined) {
|
||||
error.cause = cleanupError
|
||||
if (error.cause === cleanupError) {
|
||||
return error
|
||||
}
|
||||
}
|
||||
if (Array.isArray(error.cleanupErrors)) {
|
||||
error.cleanupErrors.push(cleanupError)
|
||||
return error
|
||||
} else {
|
||||
const attachedCleanupErrors = [cleanupError]
|
||||
error.cleanupErrors = attachedCleanupErrors
|
||||
if (error.cleanupErrors === attachedCleanupErrors) {
|
||||
return error
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch {}
|
||||
const aggregate = __createCleanupError(
|
||||
[error, cleanupError],
|
||||
'WASI binding initialization and cleanup failed',
|
||||
)
|
||||
try {
|
||||
aggregate.cause = error
|
||||
} catch {}
|
||||
return aggregate
|
||||
}
|
||||
|
||||
function __prepareWasmEnvCleanup() {
|
||||
if (__emnapiWasmEnvCleanupPrepared) {
|
||||
return
|
||||
}
|
||||
const prepare = __napiInstance?.exports?.napi_prepare_wasm_env_cleanup
|
||||
if (typeof prepare === 'function') {
|
||||
prepare()
|
||||
}
|
||||
__emnapiWasmEnvCleanupPrepared = true
|
||||
}
|
||||
|
||||
function __destroyEmnapiContext() {
|
||||
if (__emnapiContextDestroyed || __emnapiContext === undefined) {
|
||||
__emnapiContextDestroyed = true
|
||||
return
|
||||
}
|
||||
if (__emnapiContextDestroyPromise) {
|
||||
return __emnapiContextDestroyPromise
|
||||
}
|
||||
|
||||
__prepareWasmEnvCleanup()
|
||||
const result = __emnapiContext.destroy()
|
||||
if (!__isThenable(result)) {
|
||||
__emnapiContextDestroyed = true
|
||||
return
|
||||
}
|
||||
|
||||
const destroyPromise = Promise.resolve(result).then(
|
||||
(value) => {
|
||||
__emnapiContextDestroyed = true
|
||||
return value
|
||||
},
|
||||
(error) => {
|
||||
__emnapiContextDestroyPromise = undefined
|
||||
throw error
|
||||
},
|
||||
)
|
||||
__emnapiContextDestroyPromise = destroyPromise
|
||||
return destroyPromise
|
||||
}
|
||||
|
||||
function __terminateWasiWorkers() {
|
||||
const cleanupErrors = []
|
||||
const pending = []
|
||||
|
||||
for (const worker of __wasiWorkers) {
|
||||
let result
|
||||
try {
|
||||
result = worker.terminate()
|
||||
} catch (error) {
|
||||
cleanupErrors.push(error)
|
||||
continue
|
||||
}
|
||||
if (__isThenable(result)) {
|
||||
pending.push(
|
||||
Promise.resolve(result).then(
|
||||
() => {
|
||||
__wasiWorkers.delete(worker)
|
||||
},
|
||||
(error) => {
|
||||
cleanupErrors.push(error)
|
||||
},
|
||||
),
|
||||
)
|
||||
} else {
|
||||
__wasiWorkers.delete(worker)
|
||||
}
|
||||
}
|
||||
|
||||
const finish = () => {
|
||||
if (cleanupErrors.length > 0) {
|
||||
throw __createCleanupError(
|
||||
cleanupErrors,
|
||||
'Failed to terminate WASI workers',
|
||||
)
|
||||
}
|
||||
}
|
||||
return pending.length > 0 ? Promise.all(pending).then(finish) : finish()
|
||||
}
|
||||
|
||||
function __finishWasiDisposal() {
|
||||
const workerResult = __terminateWasiWorkers()
|
||||
if (__isThenable(workerResult)) {
|
||||
return Promise.resolve(workerResult).then(__completeWasiDisposal)
|
||||
}
|
||||
return __completeWasiDisposal()
|
||||
}
|
||||
|
||||
function __startWasiDisposal() {
|
||||
const destroyResult = __destroyEmnapiContext()
|
||||
if (__isThenable(destroyResult)) {
|
||||
return Promise.resolve(destroyResult).then(__finishWasiDisposal)
|
||||
}
|
||||
return __finishWasiDisposal()
|
||||
}
|
||||
|
||||
/**
|
||||
* Disposes this generated WASI binding.
|
||||
*
|
||||
* Access this function with:
|
||||
* binding[Symbol.for('napi.rs.wasi.dispose')]()
|
||||
*/
|
||||
function __disposeWasiBinding() {
|
||||
if (__wasiDisposePromise) {
|
||||
return __wasiDisposePromise
|
||||
}
|
||||
if (__wasiDisposed) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
let resolveDispose
|
||||
let rejectDispose
|
||||
const disposePromise = new Promise((resolve, reject) => {
|
||||
resolveDispose = resolve
|
||||
rejectDispose = reject
|
||||
})
|
||||
__wasiDisposePromise = disposePromise
|
||||
|
||||
let result
|
||||
try {
|
||||
result = __startWasiDisposal()
|
||||
} catch (error) {
|
||||
__wasiDisposePromise = undefined
|
||||
rejectDispose(error)
|
||||
return disposePromise
|
||||
}
|
||||
|
||||
Promise.resolve(result).then(
|
||||
(value) => {
|
||||
__wasiDisposed = true
|
||||
resolveDispose(value)
|
||||
},
|
||||
(error) => {
|
||||
__wasiDisposePromise = undefined
|
||||
rejectDispose(error)
|
||||
},
|
||||
)
|
||||
return disposePromise
|
||||
}
|
||||
|
||||
function __publishWasiDispose(exports) {
|
||||
Object.defineProperty(exports, __wasiDisposeSymbol, {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
value: __disposeWasiBinding,
|
||||
writable: false,
|
||||
})
|
||||
}
|
||||
|
||||
function __finishWasiInitializationRollback(cleanupErrors) {
|
||||
let workerResult
|
||||
try {
|
||||
workerResult = __terminateWasiWorkers()
|
||||
} catch (cleanupError) {
|
||||
cleanupErrors.push(cleanupError)
|
||||
return cleanupErrors
|
||||
}
|
||||
if (__isThenable(workerResult)) {
|
||||
return Promise.resolve(workerResult)
|
||||
.catch((cleanupError) => {
|
||||
cleanupErrors.push(cleanupError)
|
||||
})
|
||||
.then(() => cleanupErrors)
|
||||
}
|
||||
return cleanupErrors
|
||||
}
|
||||
|
||||
function __rollbackWasiInitialization() {
|
||||
const cleanupErrors = []
|
||||
let destroyResult
|
||||
try {
|
||||
destroyResult = __destroyEmnapiContext()
|
||||
} catch (cleanupError) {
|
||||
cleanupErrors.push(cleanupError)
|
||||
return __finishWasiInitializationRollback(cleanupErrors)
|
||||
}
|
||||
if (__isThenable(destroyResult)) {
|
||||
return Promise.resolve(destroyResult)
|
||||
.catch((cleanupError) => {
|
||||
cleanupErrors.push(cleanupError)
|
||||
})
|
||||
.then(() => __finishWasiInitializationRollback(cleanupErrors))
|
||||
}
|
||||
return __finishWasiInitializationRollback(cleanupErrors)
|
||||
}
|
||||
|
||||
let __wasiModule
|
||||
let __napiModule
|
||||
|
||||
try {
|
||||
__emnapiContext = __emnapiCreateContext({ autoDestroy: false })
|
||||
__emnapiContext.suppressDestroy()
|
||||
|
||||
;({
|
||||
instance: __napiInstance,
|
||||
module: __wasiModule,
|
||||
napiModule: __napiModule,
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: 4,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
const worker = new Worker(new URL('@rolldown/binding-wasm32-wasi/wasi-worker-browser.mjs', import.meta.url), {
|
||||
type: 'module',
|
||||
})
|
||||
__wasiWorkers.add(worker)
|
||||
worker.addEventListener('message', __wasmCreateOnMessageForFsProxy(__fs))
|
||||
|
||||
worker.addEventListener('message', (event) => {
|
||||
if (event.data && typeof event.data === 'object' && event.data.type === 'error') {
|
||||
const __CustomEvent = globalThis.CustomEvent
|
||||
if (
|
||||
typeof globalThis.dispatchEvent === 'function' &&
|
||||
typeof __CustomEvent === 'function'
|
||||
) {
|
||||
globalThis.dispatchEvent(
|
||||
new __CustomEvent('napi-rs-worker-error', { detail: event.data }),
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return worker
|
||||
},
|
||||
overwriteImports(importObject) {
|
||||
importObject.env = {
|
||||
...importObject.env,
|
||||
...importObject.napi,
|
||||
...importObject.emnapi,
|
||||
memory: __sharedMemory,
|
||||
}
|
||||
return importObject
|
||||
},
|
||||
beforeInit({ instance }) {
|
||||
__napiInstance = instance
|
||||
for (const name of Object.keys(instance.exports)) {
|
||||
if (name.startsWith('__napi_register__')) {
|
||||
instance.exports[name]()
|
||||
}
|
||||
}
|
||||
},
|
||||
}))
|
||||
__publishWasiDispose(__napiModule.exports)
|
||||
} catch (error) {
|
||||
const cleanupErrors = await __rollbackWasiInitialization()
|
||||
throw __attachCleanupErrors(error, cleanupErrors)
|
||||
}
|
||||
export default __napiModule.exports
|
||||
export const LegalCommentsMode = __napiModule.exports.LegalCommentsMode
|
||||
export const minify = __napiModule.exports.minify
|
||||
export const minifySync = __napiModule.exports.minifySync
|
||||
export const Severity = __napiModule.exports.Severity
|
||||
export const ParseResult = __napiModule.exports.ParseResult
|
||||
export const ExportExportNameKind = __napiModule.exports.ExportExportNameKind
|
||||
export const ExportImportNameKind = __napiModule.exports.ExportImportNameKind
|
||||
export const ExportLocalNameKind = __napiModule.exports.ExportLocalNameKind
|
||||
export const ImportNameKind = __napiModule.exports.ImportNameKind
|
||||
export const parse = __napiModule.exports.parse
|
||||
export const parseSync = __napiModule.exports.parseSync
|
||||
export const rawTransferSupported = __napiModule.exports.rawTransferSupported
|
||||
export const ResolverFactory = __napiModule.exports.ResolverFactory
|
||||
export const EnforceExtension = __napiModule.exports.EnforceExtension
|
||||
export const ModuleType = __napiModule.exports.ModuleType
|
||||
export const sync = __napiModule.exports.sync
|
||||
export const HelperMode = __napiModule.exports.HelperMode
|
||||
export const isolatedDeclaration = __napiModule.exports.isolatedDeclaration
|
||||
export const isolatedDeclarationSync = __napiModule.exports.isolatedDeclarationSync
|
||||
export const moduleRunnerTransform = __napiModule.exports.moduleRunnerTransform
|
||||
export const moduleRunnerTransformSync = __napiModule.exports.moduleRunnerTransformSync
|
||||
export const transform = __napiModule.exports.transform
|
||||
export const transformSync = __napiModule.exports.transformSync
|
||||
export const BindingBundleEndEventData = __napiModule.exports.BindingBundleEndEventData
|
||||
export const BindingBundleErrorEventData = __napiModule.exports.BindingBundleErrorEventData
|
||||
export const BindingBundler = __napiModule.exports.BindingBundler
|
||||
export const BindingCallableBuiltinPlugin = __napiModule.exports.BindingCallableBuiltinPlugin
|
||||
export const BindingChunkingContext = __napiModule.exports.BindingChunkingContext
|
||||
export const BindingDecodedMap = __napiModule.exports.BindingDecodedMap
|
||||
export const BindingDevEngine = __napiModule.exports.BindingDevEngine
|
||||
export const BindingLoadPluginContext = __napiModule.exports.BindingLoadPluginContext
|
||||
export const BindingMagicString = __napiModule.exports.BindingMagicString
|
||||
export const BindingModuleInfo = __napiModule.exports.BindingModuleInfo
|
||||
export const BindingNormalizedOptions = __napiModule.exports.BindingNormalizedOptions
|
||||
export const BindingOutputAsset = __napiModule.exports.BindingOutputAsset
|
||||
export const BindingOutputChunk = __napiModule.exports.BindingOutputChunk
|
||||
export const BindingPluginContext = __napiModule.exports.BindingPluginContext
|
||||
export const BindingRenderedChunk = __napiModule.exports.BindingRenderedChunk
|
||||
export const BindingRenderedChunkMeta = __napiModule.exports.BindingRenderedChunkMeta
|
||||
export const BindingRenderedModule = __napiModule.exports.BindingRenderedModule
|
||||
export const BindingSourceMap = __napiModule.exports.BindingSourceMap
|
||||
export const BindingTransformPluginContext = __napiModule.exports.BindingTransformPluginContext
|
||||
export const BindingWatcher = __napiModule.exports.BindingWatcher
|
||||
export const BindingWatcherBundler = __napiModule.exports.BindingWatcherBundler
|
||||
export const BindingWatcherChangeData = __napiModule.exports.BindingWatcherChangeData
|
||||
export const BindingWatcherEvent = __napiModule.exports.BindingWatcherEvent
|
||||
export const ParallelJsPluginRegistry = __napiModule.exports.ParallelJsPluginRegistry
|
||||
export const TraceSubscriberGuard = __napiModule.exports.TraceSubscriberGuard
|
||||
export const TsconfigCache = __napiModule.exports.TsconfigCache
|
||||
export const BindingAttachDebugInfo = __napiModule.exports.BindingAttachDebugInfo
|
||||
export const BindingBuiltinPluginName = __napiModule.exports.BindingBuiltinPluginName
|
||||
export const BindingChunkModuleOrderBy = __napiModule.exports.BindingChunkModuleOrderBy
|
||||
export const BindingErrorStage = __napiModule.exports.BindingErrorStage
|
||||
export const BindingLogLevel = __napiModule.exports.BindingLogLevel
|
||||
export const BindingPluginOrder = __napiModule.exports.BindingPluginOrder
|
||||
export const BindingPropertyReadSideEffects = __napiModule.exports.BindingPropertyReadSideEffects
|
||||
export const BindingPropertyWriteSideEffects = __napiModule.exports.BindingPropertyWriteSideEffects
|
||||
export const BindingRebuildStrategy = __napiModule.exports.BindingRebuildStrategy
|
||||
export const collapseSourcemaps = __napiModule.exports.collapseSourcemaps
|
||||
export const enhancedTransform = __napiModule.exports.enhancedTransform
|
||||
export const enhancedTransformSync = __napiModule.exports.enhancedTransformSync
|
||||
export const FilterTokenKind = __napiModule.exports.FilterTokenKind
|
||||
export const initTraceSubscriber = __napiModule.exports.initTraceSubscriber
|
||||
export const registerPlugins = __napiModule.exports.registerPlugins
|
||||
export const resolveTsconfig = __napiModule.exports.resolveTsconfig
|
||||
export const shutdownAsyncRuntime = __napiModule.exports.shutdownAsyncRuntime
|
||||
export const startAsyncRuntime = __napiModule.exports.startAsyncRuntime
|
||||
Reference in New Issue
Block a user