@ricsam/quickjs-core 0.0.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -43
- package/dist/cjs/blob.cjs +197 -0
- package/dist/cjs/blob.cjs.map +10 -0
- package/dist/cjs/class-builder.cjs +244 -0
- package/dist/cjs/class-builder.cjs.map +10 -0
- package/dist/cjs/dom-exception.cjs +95 -0
- package/dist/cjs/dom-exception.cjs.map +10 -0
- package/dist/cjs/file.cjs +234 -0
- package/dist/cjs/file.cjs.map +10 -0
- package/dist/cjs/function-builder.cjs +70 -0
- package/dist/cjs/function-builder.cjs.map +10 -0
- package/dist/cjs/index.cjs +143 -0
- package/dist/cjs/index.cjs.map +10 -0
- package/dist/cjs/marshal.cjs +191 -0
- package/dist/cjs/marshal.cjs.map +10 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/readable-stream.cjs +588 -0
- package/dist/cjs/readable-stream.cjs.map +10 -0
- package/dist/cjs/scope.cjs +76 -0
- package/dist/cjs/scope.cjs.map +10 -0
- package/dist/cjs/transform-stream.cjs +152 -0
- package/dist/cjs/transform-stream.cjs.map +10 -0
- package/dist/cjs/types.cjs +39 -0
- package/dist/cjs/types.cjs.map +10 -0
- package/dist/cjs/unmarshal.cjs +254 -0
- package/dist/cjs/unmarshal.cjs.map +10 -0
- package/dist/cjs/url-search-params.cjs +165 -0
- package/dist/cjs/url-search-params.cjs.map +10 -0
- package/dist/cjs/url.cjs +183 -0
- package/dist/cjs/url.cjs.map +10 -0
- package/dist/cjs/writable-stream.cjs +513 -0
- package/dist/cjs/writable-stream.cjs.map +10 -0
- package/dist/mjs/blob.mjs +166 -0
- package/dist/mjs/blob.mjs.map +10 -0
- package/dist/mjs/class-builder.mjs +213 -0
- package/dist/mjs/class-builder.mjs.map +10 -0
- package/dist/mjs/dom-exception.mjs +64 -0
- package/dist/mjs/dom-exception.mjs.map +10 -0
- package/dist/mjs/file.mjs +203 -0
- package/dist/mjs/file.mjs.map +10 -0
- package/dist/mjs/function-builder.mjs +39 -0
- package/dist/mjs/function-builder.mjs.map +10 -0
- package/dist/mjs/index.mjs +132 -0
- package/dist/mjs/index.mjs.map +10 -0
- package/dist/mjs/marshal.mjs +160 -0
- package/dist/mjs/marshal.mjs.map +10 -0
- package/dist/mjs/package.json +5 -0
- package/dist/mjs/readable-stream.mjs +557 -0
- package/dist/mjs/readable-stream.mjs.map +10 -0
- package/dist/mjs/scope.mjs +45 -0
- package/dist/mjs/scope.mjs.map +10 -0
- package/dist/mjs/transform-stream.mjs +121 -0
- package/dist/mjs/transform-stream.mjs.map +10 -0
- package/dist/mjs/types.mjs +8 -0
- package/dist/mjs/types.mjs.map +10 -0
- package/dist/mjs/unmarshal.mjs +223 -0
- package/dist/mjs/unmarshal.mjs.map +10 -0
- package/dist/mjs/url-search-params.mjs +134 -0
- package/dist/mjs/url-search-params.mjs.map +10 -0
- package/dist/mjs/url.mjs +152 -0
- package/dist/mjs/url.mjs.map +10 -0
- package/dist/mjs/writable-stream.mjs +482 -0
- package/dist/mjs/writable-stream.mjs.map +10 -0
- package/dist/types/blob.d.ts +19 -0
- package/dist/types/class-builder.d.ts +62 -0
- package/dist/types/dom-exception.d.ts +8 -0
- package/dist/types/file.d.ts +10 -0
- package/dist/types/function-builder.d.ts +23 -0
- package/dist/types/index.d.ts +45 -0
- package/dist/types/marshal.d.ts +30 -0
- package/dist/types/scope.d.ts +18 -0
- package/dist/types/streams/readable-stream.d.ts +18 -0
- package/dist/types/streams/transform-stream.d.ts +6 -0
- package/dist/types/streams/writable-stream.d.ts +14 -0
- package/dist/types/types.d.ts +83 -0
- package/dist/types/unmarshal.d.ts +14 -0
- package/dist/types/url-search-params.d.ts +12 -0
- package/dist/types/url.d.ts +30 -0
- package/package.json +50 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/streams/writable-stream.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"../types.ts\";\nimport { defineClass, getInstanceStateById } from \"../class-builder.ts\";\nimport { marshal } from \"../marshal.ts\";\nimport { unmarshal } from \"../unmarshal.ts\";\n\ninterface WritableStreamController {\n error(e: unknown): void;\n}\n\ninterface WritableStreamInternalState {\n locked: boolean;\n writer: WritableStreamWriterState | null;\n controller: WritableStreamController;\n closed: boolean;\n errored: boolean;\n errorValue: unknown;\n closeRequested: boolean;\n inFlightWriteRequest: {\n resolve: () => void;\n reject: (e: unknown) => void;\n } | null;\n writeRequests: Array<{\n chunk: unknown;\n resolve: () => void;\n reject: (e: unknown) => void;\n }>;\n sink?: {\n start?: (controller: WritableStreamController) => void | Promise<void>;\n write?: (chunk: unknown, controller: WritableStreamController) => void | Promise<void>;\n close?: () => void | Promise<void>;\n abort?: (reason?: unknown) => void | Promise<void>;\n };\n started: boolean;\n}\n\ninterface WritableStreamWriterState {\n stream: WritableStreamInternalState;\n closedPromiseResolvers: {\n resolve: () => void;\n reject: (e: unknown) => void;\n };\n readyPromiseResolvers: {\n resolve: () => void;\n reject: (e: unknown) => void;\n };\n _closedPromise?: Promise<void>; // Lazy-created\n _readyPromise?: Promise<void>; // Lazy-created\n}\n\n/**\n * Create the WritableStreamDefaultWriter class\n */\nexport function createWritableStreamDefaultWriterClass(\n context: QuickJSContext,\n stateMap: StateMap\n): QuickJSHandle {\n return defineClass<WritableStreamWriterState>(context, stateMap, {\n name: \"WritableStreamDefaultWriter\",\n construct: () => {\n // Use lazy promise creation to avoid marshalling issues with handle cleanup\n let resolveClosedPromise: (() => void) | undefined;\n let rejectClosedPromise: ((e: unknown) => void) | undefined;\n let resolveReadyPromise: (() => void) | undefined;\n let rejectReadyPromise: ((e: unknown) => void) | undefined;\n\n const state: WritableStreamWriterState = {\n stream: null as unknown as WritableStreamInternalState,\n closedPromiseResolvers: {\n resolve: () => resolveClosedPromise?.(),\n reject: (e) => rejectClosedPromise?.(e),\n },\n readyPromiseResolvers: {\n resolve: () => resolveReadyPromise?.(),\n reject: (e) => rejectReadyPromise?.(e),\n },\n };\n\n // Define lazy promise properties (non-enumerable to avoid marshalling)\n Object.defineProperty(state, \"_closedPromise\", {\n value: undefined,\n writable: true,\n enumerable: false,\n });\n Object.defineProperty(state, \"_readyPromise\", {\n value: undefined,\n writable: true,\n enumerable: false,\n });\n\n // Create promise accessors (non-enumerable)\n Object.defineProperty(state, \"getClosedPromise\", {\n value: function (this: WritableStreamWriterState): Promise<void> {\n if (!this._closedPromise) {\n this._closedPromise = new Promise<void>((resolve, reject) => {\n resolveClosedPromise = resolve;\n rejectClosedPromise = reject;\n });\n }\n return this._closedPromise;\n },\n enumerable: false,\n });\n\n Object.defineProperty(state, \"getReadyPromise\", {\n value: function (this: WritableStreamWriterState): Promise<void> {\n if (!this._readyPromise) {\n this._readyPromise = new Promise<void>((resolve, reject) => {\n resolveReadyPromise = resolve;\n rejectReadyPromise = reject;\n });\n }\n return this._readyPromise;\n },\n enumerable: false,\n });\n\n return state;\n },\n properties: {\n closed: {\n get(this: WritableStreamWriterState) {\n return (this as unknown as { getClosedPromise: () => Promise<void> }).getClosedPromise();\n },\n },\n ready: {\n get(this: WritableStreamWriterState) {\n return (this as unknown as { getReadyPromise: () => Promise<void> }).getReadyPromise();\n },\n },\n desiredSize: {\n get(this: WritableStreamWriterState) {\n if (!this.stream) return null;\n if (this.stream.errored) return null;\n if (this.stream.closeRequested) return 0;\n return 1 - this.stream.writeRequests.length;\n },\n },\n },\n methods: {\n write(this: WritableStreamWriterState, chunk: unknown): Promise<void> {\n if (!this.stream) {\n return Promise.reject(new TypeError(\"Writer has no stream\"));\n }\n if (this.stream.errored) {\n return Promise.reject(this.stream.errorValue);\n }\n if (this.stream.closeRequested || this.stream.closed) {\n return Promise.reject(new TypeError(\"Cannot write to a closed stream\"));\n }\n\n const self = this;\n return new Promise((resolve, reject) => {\n self.stream.writeRequests.push({ chunk, resolve, reject });\n processWriteRequests.call(self);\n });\n },\n close(this: WritableStreamWriterState): Promise<void> {\n if (!this.stream) {\n return Promise.reject(new TypeError(\"Writer has no stream\"));\n }\n if (this.stream.closeRequested || this.stream.closed) {\n return Promise.reject(new TypeError(\"Stream is already closing or closed\"));\n }\n\n this.stream.closeRequested = true;\n\n return new Promise((resolve, reject) => {\n // Wait for all writes to complete\n const checkWritesComplete = () => {\n if (this.stream.writeRequests.length === 0 && !this.stream.inFlightWriteRequest) {\n // Call close on sink\n if (this.stream.sink?.close) {\n try {\n const result = this.stream.sink.close();\n if (result instanceof Promise) {\n result\n .then(() => {\n this.stream.closed = true;\n this.closedPromiseResolvers.resolve();\n resolve();\n })\n .catch((e) => {\n this.stream.errored = true;\n this.stream.errorValue = e;\n this.closedPromiseResolvers.reject(e);\n reject(e);\n });\n return;\n }\n } catch (e) {\n this.stream.errored = true;\n this.stream.errorValue = e;\n this.closedPromiseResolvers.reject(e);\n reject(e);\n return;\n }\n }\n this.stream.closed = true;\n this.closedPromiseResolvers.resolve();\n resolve();\n } else {\n setTimeout(checkWritesComplete, 0);\n }\n };\n checkWritesComplete();\n });\n },\n abort(this: WritableStreamWriterState, reason?: unknown): Promise<void> {\n if (!this.stream) {\n return Promise.reject(new TypeError(\"Writer has no stream\"));\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Reject all pending writes\n this.stream.writeRequests.forEach((req) => req.reject(reason));\n this.stream.writeRequests = [];\n\n if (this.stream.sink?.abort) {\n const result = this.stream.sink.abort(reason);\n if (result instanceof Promise) {\n result.then(resolve).catch(reject);\n return;\n }\n }\n this.stream.errored = true;\n this.stream.errorValue = reason;\n this.closedPromiseResolvers.reject(reason);\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n },\n releaseLock(this: WritableStreamWriterState): void {\n if (!this.stream) return;\n this.stream.locked = false;\n this.stream.writer = null;\n },\n },\n });\n}\n\n// Add helper method to WritableStreamWriterState\nfunction processWriteRequests(this: WritableStreamWriterState) {\n if (\n this.stream.inFlightWriteRequest ||\n this.stream.writeRequests.length === 0 ||\n !this.stream.started\n ) {\n return;\n }\n\n const request = this.stream.writeRequests.shift()!;\n this.stream.inFlightWriteRequest = request;\n\n if (this.stream.sink?.write) {\n try {\n const result = this.stream.sink.write(request.chunk, this.stream.controller);\n if (result instanceof Promise) {\n result\n .then(() => {\n this.stream.inFlightWriteRequest = null;\n request.resolve();\n processWriteRequests.call(this);\n })\n .catch((e) => {\n this.stream.inFlightWriteRequest = null;\n this.stream.errored = true;\n this.stream.errorValue = e;\n request.reject(e);\n // Reject remaining writes\n this.stream.writeRequests.forEach((req) => req.reject(e));\n this.stream.writeRequests = [];\n });\n return;\n }\n } catch (e) {\n this.stream.inFlightWriteRequest = null;\n this.stream.errored = true;\n this.stream.errorValue = e;\n request.reject(e);\n return;\n }\n }\n\n this.stream.inFlightWriteRequest = null;\n request.resolve();\n processWriteRequests.call(this);\n}\n\n\n/**\n * Create the WritableStream class\n */\nexport function createWritableStreamClass(\n context: QuickJSContext,\n stateMap: StateMap,\n writerClass: QuickJSHandle\n): QuickJSHandle {\n const classHandle = defineClass<WritableStreamInternalState>(context, stateMap, {\n name: \"WritableStream\",\n construct: (args) => {\n const underlyingSink = args[0] as {\n start?: (controller: WritableStreamController) => void | Promise<void>;\n write?: (chunk: unknown, controller: WritableStreamController) => void | Promise<void>;\n close?: () => void | Promise<void>;\n abort?: (reason?: unknown) => void | Promise<void>;\n } | undefined;\n\n const state: WritableStreamInternalState = {\n locked: false,\n writer: null,\n controller: null as unknown as WritableStreamController,\n closed: false,\n errored: false,\n errorValue: undefined,\n closeRequested: false,\n inFlightWriteRequest: null,\n writeRequests: [],\n sink: underlyingSink,\n started: false,\n };\n\n // Create controller\n state.controller = {\n error(e: unknown) {\n if (state.errored || state.closed) return;\n state.errored = true;\n state.errorValue = e;\n\n // Reject all pending writes\n state.writeRequests.forEach((req) => req.reject(e));\n state.writeRequests = [];\n\n if (state.writer) {\n state.writer.closedPromiseResolvers.reject(e);\n state.writer.readyPromiseResolvers.reject(e);\n }\n },\n };\n\n // Call start if provided\n if (underlyingSink?.start) {\n try {\n const startResult = underlyingSink.start(state.controller);\n if (startResult instanceof Promise) {\n startResult\n .then(() => {\n state.started = true;\n if (state.writer) {\n state.writer.readyPromiseResolvers.resolve();\n }\n })\n .catch((e) => {\n state.errored = true;\n state.errorValue = e;\n });\n } else {\n state.started = true;\n }\n } catch (e) {\n state.errored = true;\n state.errorValue = e;\n }\n } else {\n state.started = true;\n }\n\n return state;\n },\n properties: {\n locked: {\n get(this: WritableStreamInternalState) {\n return this.locked;\n },\n },\n },\n methods: {\n // __linkWriter__ is called from JavaScript getWriter() to link stream and writer states\n __linkWriter__(this: WritableStreamInternalState, writerObj: unknown): void {\n if (this.locked) {\n throw new TypeError(\"WritableStream is locked\");\n }\n this.locked = true;\n\n // Get the writer's internal state from instanceStateMap\n const writerId = (writerObj as { __instanceId__: number }).__instanceId__;\n const writerState = getInstanceStateById<WritableStreamWriterState>(writerId);\n if (!writerState) {\n throw new Error(\"Writer instance state not found\");\n }\n\n // Link bidirectionally\n writerState.stream = this;\n this.writer = writerState;\n\n // Resolve ready promise if stream already started\n if (this.started) {\n writerState.readyPromiseResolvers.resolve();\n }\n },\n abort(this: WritableStreamInternalState, reason?: unknown): Promise<void> {\n if (this.locked) {\n return Promise.reject(new TypeError(\"Cannot abort a locked stream\"));\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Reject all pending writes\n this.writeRequests.forEach((req) => req.reject(reason));\n this.writeRequests = [];\n\n if (this.sink?.abort) {\n const result = this.sink.abort(reason);\n if (result instanceof Promise) {\n result.then(resolve).catch(reject);\n return;\n }\n }\n this.errored = true;\n this.errorValue = reason;\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n },\n close(this: WritableStreamInternalState): Promise<void> {\n if (this.locked) {\n return Promise.reject(new TypeError(\"Cannot close a locked stream\"));\n }\n if (this.closeRequested || this.closed) {\n return Promise.reject(new TypeError(\"Stream is already closing or closed\"));\n }\n\n this.closeRequested = true;\n\n return new Promise((resolve, reject) => {\n if (this.sink?.close) {\n try {\n const result = this.sink.close();\n if (result instanceof Promise) {\n result\n .then(() => {\n this.closed = true;\n resolve();\n })\n .catch(reject);\n return;\n }\n } catch (e) {\n reject(e);\n return;\n }\n }\n this.closed = true;\n resolve();\n });\n },\n },\n });\n\n // Add getWriter to prototype as JavaScript code\n // This ensures getWriter() returns a proper WritableStreamDefaultWriter instance\n const prototypeHandle = context.getProp(classHandle, \"prototype\");\n\n const getWriterCode = `(function() {\n const writer = new WritableStreamDefaultWriter();\n this.__linkWriter__(writer);\n return writer;\n })`;\n const getWriterResult = context.evalCode(getWriterCode);\n if (!getWriterResult.error) {\n context.setProp(prototypeHandle, \"getWriter\", getWriterResult.value);\n getWriterResult.value.dispose();\n } else {\n getWriterResult.error.dispose();\n }\n\n prototypeHandle.dispose();\n return classHandle;\n}\n\n/**\n * Create a WritableStream in QuickJS from a host-side sink\n */\nexport function createWritableStream(\n context: QuickJSContext,\n stateMap: StateMap,\n sink: UnderlyingSink\n): QuickJSHandle {\n const sinkObj = context.newObject();\n\n if (sink.start) {\n const startFn = context.newFunction(\"start\", (controllerHandle) => {\n const controller = {\n signal: new AbortController().signal,\n error: (e: unknown) => {\n const errorFn = context.getProp(controllerHandle, \"error\");\n const errorHandle = marshal(context, e);\n context.callFunction(errorFn, controllerHandle, errorHandle);\n errorHandle.dispose();\n errorFn.dispose();\n },\n } as WritableStreamDefaultController;\n\n const result = sink.start!(controller);\n if (result instanceof Promise) {\n const deferred = context.newPromise();\n result\n .then(() => {\n deferred.resolve(context.undefined);\n context.runtime.executePendingJobs();\n })\n .catch((e) => {\n deferred.reject(marshal(context, e));\n context.runtime.executePendingJobs();\n });\n return deferred.handle;\n }\n return context.undefined;\n });\n context.setProp(sinkObj, \"start\", startFn);\n startFn.dispose();\n }\n\n if (sink.write) {\n const writeFn = context.newFunction(\"write\", (chunkHandle, controllerHandle) => {\n const chunk = unmarshal(context, chunkHandle);\n const controller = {\n signal: new AbortController().signal,\n error: (e: unknown) => {\n const errorFn = context.getProp(controllerHandle, \"error\");\n const errorHandle = marshal(context, e);\n context.callFunction(errorFn, controllerHandle, errorHandle);\n errorHandle.dispose();\n errorFn.dispose();\n },\n } as WritableStreamDefaultController;\n\n const result = sink.write!(chunk, controller);\n if (result instanceof Promise) {\n const deferred = context.newPromise();\n result\n .then(() => {\n deferred.resolve(context.undefined);\n context.runtime.executePendingJobs();\n })\n .catch((e) => {\n deferred.reject(marshal(context, e));\n context.runtime.executePendingJobs();\n });\n return deferred.handle;\n }\n return context.undefined;\n });\n context.setProp(sinkObj, \"write\", writeFn);\n writeFn.dispose();\n }\n\n if (sink.close) {\n const closeFn = context.newFunction(\"close\", () => {\n const result = sink.close!();\n if (result instanceof Promise) {\n const deferred = context.newPromise();\n result\n .then(() => {\n deferred.resolve(context.undefined);\n context.runtime.executePendingJobs();\n })\n .catch((e) => {\n deferred.reject(marshal(context, e));\n context.runtime.executePendingJobs();\n });\n return deferred.handle;\n }\n return context.undefined;\n });\n context.setProp(sinkObj, \"close\", closeFn);\n closeFn.dispose();\n }\n\n if (sink.abort) {\n const abortFn = context.newFunction(\"abort\", (reasonHandle) => {\n const reason = unmarshal(context, reasonHandle);\n const result = sink.abort!(reason);\n if (result instanceof Promise) {\n const deferred = context.newPromise();\n result\n .then(() => {\n deferred.resolve(context.undefined);\n context.runtime.executePendingJobs();\n })\n .catch((e) => {\n deferred.reject(marshal(context, e));\n context.runtime.executePendingJobs();\n });\n return deferred.handle;\n }\n return context.undefined;\n });\n context.setProp(sinkObj, \"abort\", abortFn);\n abortFn.dispose();\n }\n\n const WritableStreamConstructor = context.getProp(context.global, \"WritableStream\");\n const result = context.callFunction(WritableStreamConstructor, context.undefined, sinkObj);\n WritableStreamConstructor.dispose();\n sinkObj.dispose();\n\n if (result.error) {\n const error = context.dump(result.error);\n result.error.dispose();\n throw new Error(`Failed to create WritableStream: ${error}`);\n }\n\n return result.value;\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "A0FD01B9FABF048C64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Type for the stream factory function
|
|
5
|
+
*/
|
|
6
|
+
type StreamFactory = (source: UnderlyingSource) => QuickJSHandle;
|
|
7
|
+
/**
|
|
8
|
+
* Create the Blob class for QuickJS
|
|
9
|
+
*
|
|
10
|
+
* @param context - QuickJS context
|
|
11
|
+
* @param stateMap - State map for internal state tracking
|
|
12
|
+
* @param createStream - Factory function to create ReadableStream handles
|
|
13
|
+
*/
|
|
14
|
+
export declare function createBlobClass(context: QuickJSContext, stateMap: StateMap, createStream: StreamFactory): QuickJSHandle;
|
|
15
|
+
/**
|
|
16
|
+
* Create a Blob in QuickJS from host data
|
|
17
|
+
*/
|
|
18
|
+
export declare function createBlob(context: QuickJSContext, stateMap: StateMap, parts: BlobPart[], options?: BlobPropertyBag): QuickJSHandle;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { ClassDefinition, StateMap } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a new StateMap for tracking object internal states
|
|
5
|
+
*/
|
|
6
|
+
export declare function createStateMap(): StateMap;
|
|
7
|
+
/**
|
|
8
|
+
* Get the internal state associated with a QuickJS object handle
|
|
9
|
+
*/
|
|
10
|
+
export declare function getState<T extends object>(stateMap: StateMap, handle: QuickJSHandle): T | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Set the internal state associated with a QuickJS object handle
|
|
13
|
+
*/
|
|
14
|
+
export declare function setState<T extends object>(stateMap: StateMap, handle: QuickJSHandle, state: T): void;
|
|
15
|
+
/**
|
|
16
|
+
* Define a class in the QuickJS context
|
|
17
|
+
*
|
|
18
|
+
* Uses evalCode to create a proper JavaScript class that can be called with 'new'.
|
|
19
|
+
* Host-side callbacks are registered and invoked by the JavaScript class.
|
|
20
|
+
*
|
|
21
|
+
* @returns Handle to the class constructor (caller must manage disposal)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const Point = defineClass(context, stateMap, {
|
|
25
|
+
* name: "Point",
|
|
26
|
+
* construct: ([x, y]) => ({ x: Number(x), y: Number(y) }),
|
|
27
|
+
* methods: {
|
|
28
|
+
* distance(this: { x: number; y: number }) {
|
|
29
|
+
* return Math.sqrt(this.x ** 2 + this.y ** 2);
|
|
30
|
+
* }
|
|
31
|
+
* },
|
|
32
|
+
* properties: {
|
|
33
|
+
* x: {
|
|
34
|
+
* get(this: { x: number }) { return this.x; },
|
|
35
|
+
* set(this: { x: number }, v: unknown) { this.x = Number(v); }
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* });
|
|
39
|
+
* context.setProp(context.global, "Point", Point);
|
|
40
|
+
*/
|
|
41
|
+
export declare function defineClass<TState extends object>(context: QuickJSContext, stateMap: StateMap, definition: ClassDefinition<TState>): QuickJSHandle;
|
|
42
|
+
/**
|
|
43
|
+
* Get internal state for a QuickJS instance by extracting its __instanceId__
|
|
44
|
+
*/
|
|
45
|
+
export declare function getInstanceState<T>(context: QuickJSContext, instanceHandle: QuickJSHandle): T | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Set internal state for a QuickJS instance by extracting its __instanceId__
|
|
48
|
+
*/
|
|
49
|
+
export declare function setInstanceState<T>(context: QuickJSContext, instanceHandle: QuickJSHandle, state: T): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get internal state by instance ID directly
|
|
52
|
+
* Useful when you have the instanceId from an unmarshaled object
|
|
53
|
+
*/
|
|
54
|
+
export declare function getInstanceStateById<T>(instanceId: number): T | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Clean up instance state when an instance is no longer needed
|
|
57
|
+
*/
|
|
58
|
+
export declare function cleanupInstanceState(instanceId: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* Clear all instance state (useful for context disposal or testing cleanup)
|
|
61
|
+
*/
|
|
62
|
+
export declare function clearAllInstanceState(): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "./types.ts";
|
|
3
|
+
export interface DOMExceptionState {
|
|
4
|
+
message: string;
|
|
5
|
+
name: string;
|
|
6
|
+
code: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createDOMExceptionClass(context: QuickJSContext, stateMap: StateMap): QuickJSHandle;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create the File class for QuickJS (extends Blob)
|
|
5
|
+
*/
|
|
6
|
+
export declare function createFileClass(context: QuickJSContext, stateMap: StateMap, _blobClass: QuickJSHandle): QuickJSHandle;
|
|
7
|
+
/**
|
|
8
|
+
* Create a File in QuickJS from host data
|
|
9
|
+
*/
|
|
10
|
+
export declare function createFile(context: QuickJSContext, stateMap: StateMap, parts: BlobPart[], name: string, options?: FilePropertyBag): QuickJSHandle;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
/**
|
|
3
|
+
* Define a global function in the QuickJS context
|
|
4
|
+
*
|
|
5
|
+
* @returns Handle to the function (caller must manage disposal)
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const logFn = defineFunction(context, "log", (...args) => {
|
|
9
|
+
* console.log("[QuickJS]", ...args);
|
|
10
|
+
* });
|
|
11
|
+
* context.setProp(context.global, "log", logFn);
|
|
12
|
+
*/
|
|
13
|
+
export declare function defineFunction(context: QuickJSContext, name: string, fn: (...args: unknown[]) => unknown): QuickJSHandle;
|
|
14
|
+
/**
|
|
15
|
+
* Define an async function that returns a promise to QuickJS
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const fetchFn = defineAsyncFunction(context, "fetch", async (url) => {
|
|
19
|
+
* const response = await fetch(String(url));
|
|
20
|
+
* return response.text();
|
|
21
|
+
* });
|
|
22
|
+
*/
|
|
23
|
+
export declare function defineAsyncFunction(context: QuickJSContext, name: string, fn: (...args: unknown[]) => Promise<unknown>): QuickJSHandle;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { QuickJSContext } from "quickjs-emscripten";
|
|
2
|
+
import type { SetupCoreOptions, CoreHandle } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Setup core APIs in a QuickJS context
|
|
5
|
+
*
|
|
6
|
+
* Injects the following globals:
|
|
7
|
+
* - ReadableStream, WritableStream, TransformStream
|
|
8
|
+
* - ReadableStreamDefaultReader, WritableStreamDefaultWriter
|
|
9
|
+
* - Blob
|
|
10
|
+
* - File
|
|
11
|
+
* - DOMException
|
|
12
|
+
* - URL, URLSearchParams
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const handle = setupCore(context);
|
|
16
|
+
*
|
|
17
|
+
* context.evalCode(`
|
|
18
|
+
* const blob = new Blob(["hello", " ", "world"], { type: "text/plain" });
|
|
19
|
+
* const text = await blob.text(); // "hello world"
|
|
20
|
+
*
|
|
21
|
+
* const stream = new ReadableStream({
|
|
22
|
+
* start(controller) {
|
|
23
|
+
* controller.enqueue("chunk1");
|
|
24
|
+
* controller.enqueue("chunk2");
|
|
25
|
+
* controller.close();
|
|
26
|
+
* }
|
|
27
|
+
* });
|
|
28
|
+
* `);
|
|
29
|
+
*/
|
|
30
|
+
export declare function setupCore(context: QuickJSContext, options?: SetupCoreOptions): CoreHandle;
|
|
31
|
+
export type { Scope, MarshalOptions, UnmarshalOptions, PropertyDescriptor, ClassDefinition, StateMap, SetupCoreOptions, CoreHandle, QuickJSContext, QuickJSHandle, QuickJSRuntime, } from "./types.ts";
|
|
32
|
+
export { INTERNAL_STATE } from "./types.ts";
|
|
33
|
+
export { withScope, withScopeAsync } from "./scope.ts";
|
|
34
|
+
export { marshal, isHandle, getHandleType } from "./marshal.ts";
|
|
35
|
+
export { unmarshal, cleanupUnmarshaledHandles } from "./unmarshal.ts";
|
|
36
|
+
export { defineFunction, defineAsyncFunction } from "./function-builder.ts";
|
|
37
|
+
export { defineClass, createStateMap, getState, setState, getInstanceState, setInstanceState, getInstanceStateById, cleanupInstanceState, clearAllInstanceState, } from "./class-builder.ts";
|
|
38
|
+
export { createReadableStream, consumeReadableStream, } from "./streams/readable-stream.ts";
|
|
39
|
+
export { createWritableStream } from "./streams/writable-stream.ts";
|
|
40
|
+
export { createBlob } from "./blob.ts";
|
|
41
|
+
export { createFile } from "./file.ts";
|
|
42
|
+
export { createURLSearchParamsClass } from "./url-search-params.ts";
|
|
43
|
+
export type { URLSearchParamsState } from "./url-search-params.ts";
|
|
44
|
+
export { createURLClass, addURLSearchParamsGetter } from "./url.ts";
|
|
45
|
+
export type { URLState } from "./url.ts";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { MarshalOptions } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Check if a value is a QuickJS handle
|
|
5
|
+
*/
|
|
6
|
+
export declare function isHandle(value: unknown): value is QuickJSHandle;
|
|
7
|
+
/**
|
|
8
|
+
* Get the type of a QuickJS handle as a string
|
|
9
|
+
*/
|
|
10
|
+
export declare function getHandleType(context: QuickJSContext, handle: QuickJSHandle): "undefined" | "null" | "boolean" | "number" | "string" | "symbol" | "object" | "function";
|
|
11
|
+
/**
|
|
12
|
+
* Marshal a JavaScript value to a QuickJS handle
|
|
13
|
+
*
|
|
14
|
+
* Supports:
|
|
15
|
+
* - Primitives (string, number, boolean, null, undefined, bigint)
|
|
16
|
+
* - Arrays
|
|
17
|
+
* - Plain objects
|
|
18
|
+
* - ArrayBuffer / Uint8Array
|
|
19
|
+
* - Date (converted to Date object in QuickJS)
|
|
20
|
+
* - Functions (wrapped as host functions)
|
|
21
|
+
* - Promises (wrapped with context.newPromise)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const handle = marshal(context, {
|
|
25
|
+
* name: "test",
|
|
26
|
+
* values: [1, 2, 3],
|
|
27
|
+
* callback: (x) => x * 2
|
|
28
|
+
* });
|
|
29
|
+
*/
|
|
30
|
+
export declare function marshal(context: QuickJSContext, value: unknown, options?: MarshalOptions): QuickJSHandle;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { QuickJSContext } from "quickjs-emscripten";
|
|
2
|
+
import type { Scope } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Execute a function with automatic handle cleanup
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const result = withScope(context, (scope) => {
|
|
8
|
+
* const obj = scope.manage(context.newObject());
|
|
9
|
+
* const str = scope.manage(context.newString("hello"));
|
|
10
|
+
* context.setProp(obj, "message", str);
|
|
11
|
+
* return context.dump(obj);
|
|
12
|
+
* });
|
|
13
|
+
*/
|
|
14
|
+
export declare function withScope<T>(_context: QuickJSContext, fn: (scope: Scope) => T): T;
|
|
15
|
+
/**
|
|
16
|
+
* Async version of withScope for promise-based operations
|
|
17
|
+
*/
|
|
18
|
+
export declare function withScopeAsync<T>(_context: QuickJSContext, fn: (scope: Scope) => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "../types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create the ReadableStreamDefaultReader class
|
|
5
|
+
*/
|
|
6
|
+
export declare function createReadableStreamDefaultReaderClass(context: QuickJSContext, stateMap: StateMap): QuickJSHandle;
|
|
7
|
+
/**
|
|
8
|
+
* Create the ReadableStream class
|
|
9
|
+
*/
|
|
10
|
+
export declare function createReadableStreamClass(context: QuickJSContext, stateMap: StateMap, readerClass: QuickJSHandle): QuickJSHandle;
|
|
11
|
+
/**
|
|
12
|
+
* Create a ReadableStream in QuickJS from a host-side source
|
|
13
|
+
*/
|
|
14
|
+
export declare function createReadableStream(context: QuickJSContext, stateMap: StateMap, source: UnderlyingSource): QuickJSHandle;
|
|
15
|
+
/**
|
|
16
|
+
* Consume a ReadableStream from QuickJS in the host
|
|
17
|
+
*/
|
|
18
|
+
export declare function consumeReadableStream(context: QuickJSContext, stateMap: StateMap, streamHandle: QuickJSHandle): AsyncIterable<unknown>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "../types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create the TransformStream class
|
|
5
|
+
*/
|
|
6
|
+
export declare function createTransformStreamClass(context: QuickJSContext, stateMap: StateMap): QuickJSHandle;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "../types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create the WritableStreamDefaultWriter class
|
|
5
|
+
*/
|
|
6
|
+
export declare function createWritableStreamDefaultWriterClass(context: QuickJSContext, stateMap: StateMap): QuickJSHandle;
|
|
7
|
+
/**
|
|
8
|
+
* Create the WritableStream class
|
|
9
|
+
*/
|
|
10
|
+
export declare function createWritableStreamClass(context: QuickJSContext, stateMap: StateMap, writerClass: QuickJSHandle): QuickJSHandle;
|
|
11
|
+
/**
|
|
12
|
+
* Create a WritableStream in QuickJS from a host-side sink
|
|
13
|
+
*/
|
|
14
|
+
export declare function createWritableStream(context: QuickJSContext, stateMap: StateMap, sink: UnderlyingSink): QuickJSHandle;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle, QuickJSRuntime } from "quickjs-emscripten";
|
|
2
|
+
export type { QuickJSContext, QuickJSHandle, QuickJSRuntime };
|
|
3
|
+
/**
|
|
4
|
+
* A scope for automatic handle cleanup
|
|
5
|
+
*/
|
|
6
|
+
export interface Scope {
|
|
7
|
+
/** Track a handle for cleanup when scope ends */
|
|
8
|
+
manage<T extends QuickJSHandle>(handle: T): T;
|
|
9
|
+
/** Get all managed handles */
|
|
10
|
+
readonly handles: readonly QuickJSHandle[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Options for marshalling values
|
|
14
|
+
*/
|
|
15
|
+
export interface MarshalOptions {
|
|
16
|
+
/** Maximum depth for nested objects (default: 10) */
|
|
17
|
+
maxDepth?: number;
|
|
18
|
+
/** Custom marshaller for specific types */
|
|
19
|
+
custom?: (value: unknown, context: QuickJSContext) => QuickJSHandle | undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for unmarshalling values
|
|
23
|
+
*/
|
|
24
|
+
export interface UnmarshalOptions {
|
|
25
|
+
/** Maximum depth for nested objects (default: 10) */
|
|
26
|
+
maxDepth?: number;
|
|
27
|
+
/** Custom unmarshaller for specific handles */
|
|
28
|
+
custom?: (handle: QuickJSHandle, context: QuickJSContext) => unknown | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Property descriptor for class builder
|
|
32
|
+
*/
|
|
33
|
+
export interface PropertyDescriptor<TState = unknown> {
|
|
34
|
+
get?: (this: TState) => any;
|
|
35
|
+
set?: (this: TState, value: any) => void;
|
|
36
|
+
value?: unknown;
|
|
37
|
+
writable?: boolean;
|
|
38
|
+
enumerable?: boolean;
|
|
39
|
+
configurable?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Options for defining a class
|
|
43
|
+
*/
|
|
44
|
+
export interface ClassDefinition<TState extends object = object> {
|
|
45
|
+
/** Class name */
|
|
46
|
+
name: string;
|
|
47
|
+
/** Constructor function - receives unmarshalled args, returns internal state */
|
|
48
|
+
construct?: (args: unknown[]) => TState;
|
|
49
|
+
/** Prototype methods */
|
|
50
|
+
methods?: Record<string, (this: TState, ...args: unknown[]) => unknown>;
|
|
51
|
+
/** Prototype getters/setters */
|
|
52
|
+
properties?: Record<string, PropertyDescriptor<TState>>;
|
|
53
|
+
/** Static methods */
|
|
54
|
+
staticMethods?: Record<string, (...args: unknown[]) => unknown>;
|
|
55
|
+
/** Static properties */
|
|
56
|
+
staticProperties?: Record<string, unknown>;
|
|
57
|
+
/** Parent class handle (for inheritance) */
|
|
58
|
+
extends?: QuickJSHandle;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Symbol used to store internal state on QuickJS class instances
|
|
62
|
+
*/
|
|
63
|
+
export declare const INTERNAL_STATE: unique symbol;
|
|
64
|
+
/**
|
|
65
|
+
* Map to store internal state for QuickJS object handles
|
|
66
|
+
*/
|
|
67
|
+
export type StateMap = WeakMap<QuickJSHandle, object>;
|
|
68
|
+
/**
|
|
69
|
+
* Options for setting up core APIs
|
|
70
|
+
*/
|
|
71
|
+
export interface SetupCoreOptions {
|
|
72
|
+
/** Existing state map to use (creates new one if not provided) */
|
|
73
|
+
stateMap?: StateMap;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handle returned from setupCore
|
|
77
|
+
*/
|
|
78
|
+
export interface CoreHandle {
|
|
79
|
+
/** State map containing internal states */
|
|
80
|
+
readonly stateMap: StateMap;
|
|
81
|
+
/** Dispose all handles */
|
|
82
|
+
dispose(): void;
|
|
83
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { UnmarshalOptions } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Clean up all duped handles for a context
|
|
5
|
+
* Should be called before disposing the context
|
|
6
|
+
*/
|
|
7
|
+
export declare function cleanupUnmarshaledHandles(context: QuickJSContext): void;
|
|
8
|
+
/**
|
|
9
|
+
* Unmarshal a QuickJS handle to a JavaScript value
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const value = unmarshal(context, handle);
|
|
13
|
+
*/
|
|
14
|
+
export declare function unmarshal(context: QuickJSContext, handle: QuickJSHandle, options?: UnmarshalOptions): unknown;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Internal state for URLSearchParams
|
|
5
|
+
*/
|
|
6
|
+
export interface URLSearchParamsState {
|
|
7
|
+
params: [string, string][];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Create the URLSearchParams class for QuickJS
|
|
11
|
+
*/
|
|
12
|
+
export declare function createURLSearchParamsClass(context: QuickJSContext, stateMap: StateMap): QuickJSHandle;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { QuickJSContext, QuickJSHandle } from "quickjs-emscripten";
|
|
2
|
+
import type { StateMap } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Internal state for URL
|
|
5
|
+
*/
|
|
6
|
+
export interface URLState {
|
|
7
|
+
hash: string;
|
|
8
|
+
host: string;
|
|
9
|
+
hostname: string;
|
|
10
|
+
href: string;
|
|
11
|
+
origin: string;
|
|
12
|
+
password: string;
|
|
13
|
+
pathname: string;
|
|
14
|
+
port: string;
|
|
15
|
+
protocol: string;
|
|
16
|
+
search: string;
|
|
17
|
+
username: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create the URL class for QuickJS
|
|
21
|
+
*
|
|
22
|
+
* Note: The searchParams property is added separately via evalCode
|
|
23
|
+
* after this class is registered, as it needs to return a URLSearchParams instance.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createURLClass(context: QuickJSContext, stateMap: StateMap): QuickJSHandle;
|
|
26
|
+
/**
|
|
27
|
+
* Add searchParams getter to URL prototype using evalCode
|
|
28
|
+
* This must be called after both URL and URLSearchParams are registered as globals
|
|
29
|
+
*/
|
|
30
|
+
export declare function addURLSearchParamsGetter(context: QuickJSContext): void;
|
package/package.json
CHANGED
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ricsam/quickjs-core",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"main": "./dist/cjs/index.cjs",
|
|
5
|
+
"types": "./dist/types/index.d.ts",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/types/index.d.ts",
|
|
9
|
+
"require": "./dist/cjs/index.cjs",
|
|
10
|
+
"import": "./dist/mjs/index.mjs"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "bun build ./src/index.ts --outdir ./dist --target bun",
|
|
15
|
+
"test": "bun test",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"quickjs-emscripten": "^0.31.0"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"quickjs-emscripten": "^0.31.0"
|
|
23
|
+
},
|
|
24
|
+
"author": "Richard Samuelsson",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/ricsam/richie-qjs.git"
|
|
29
|
+
},
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/ricsam/richie-qjs/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/ricsam/richie-qjs#readme",
|
|
5
34
|
"keywords": [
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
35
|
+
"quickjs",
|
|
36
|
+
"sandbox",
|
|
37
|
+
"javascript",
|
|
38
|
+
"runtime",
|
|
39
|
+
"fetch",
|
|
40
|
+
"filesystem",
|
|
41
|
+
"streams",
|
|
42
|
+
"wasm",
|
|
43
|
+
"emscripten"
|
|
44
|
+
],
|
|
45
|
+
"description": "Core utilities and class builder for QuickJS runtime bindings",
|
|
46
|
+
"module": "./dist/mjs/index.mjs",
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"dist",
|
|
52
|
+
"README.md"
|
|
9
53
|
]
|
|
10
|
-
}
|
|
54
|
+
}
|