vitest-pool-assemblyscript 0.7.0 → 0.9.0
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 +10 -13
- package/assembly/compare.ts +469 -76
- package/assembly/expect.ts +160 -67
- package/assembly/index.ts +0 -10
- package/assembly/utils.ts +168 -0
- package/dist/{addon-interface-_pNXcbib.mjs → addon-interface-CYFXMbK7.mjs} +4 -3
- package/dist/addon-interface-CYFXMbK7.mjs.map +1 -0
- package/dist/{ast-visitor-C5gQqWD2.mjs → ast-visitor-CWEOd3UH.mjs} +15 -2
- package/dist/ast-visitor-CWEOd3UH.mjs.map +1 -0
- package/dist/{compile-runner-DOMhsLQE.mjs → compile-runner-BGQhBkBo.mjs} +8 -7
- package/dist/compile-runner-BGQhBkBo.mjs.map +1 -0
- package/dist/compiler/transforms/deep-equals.d.mts +14 -0
- package/dist/compiler/transforms/deep-equals.d.mts.map +1 -0
- package/dist/compiler/transforms/deep-equals.mjs +245 -0
- package/dist/compiler/transforms/deep-equals.mjs.map +1 -0
- package/dist/compiler/transforms/strip-inline.mjs +2 -2
- package/dist/{compiler-CIXpfKq0.mjs → compiler-hUlDr5vL.mjs} +14 -6
- package/dist/compiler-hUlDr5vL.mjs.map +1 -0
- package/dist/config/index-v3.d.mts +33 -3
- package/dist/config/index-v3.d.mts.map +1 -1
- package/dist/config/index-v3.mjs.map +1 -1
- package/dist/config/index.d.mts +29 -4
- package/dist/config/index.d.mts.map +1 -0
- package/dist/config/index.mjs +6 -6
- package/dist/{constants-DuBLuMjt.mjs → constants-DbxJ3hzg.mjs} +10 -97
- package/dist/constants-DbxJ3hzg.mjs.map +1 -0
- package/dist/coverage-provider/index.mjs +30 -10
- package/dist/coverage-provider/index.mjs.map +1 -1
- package/dist/{debug-Cm1VFmaz.mjs → debug-DtRAL4rM.mjs} +38 -4
- package/dist/debug-DtRAL4rM.mjs.map +1 -0
- package/dist/{feature-check-ELxw_Mji.mjs → feature-check-Bje3ntpV.mjs} +2 -2
- package/dist/{feature-check-ELxw_Mji.mjs.map → feature-check-Bje3ntpV.mjs.map} +1 -1
- package/dist/index-internal.d.mts +1 -1
- package/dist/index-internal.d.mts.map +1 -1
- package/dist/index-internal.mjs +4 -4
- package/dist/index-v3.d.mts.map +1 -1
- package/dist/index-v3.mjs +8 -7
- package/dist/index-v3.mjs.map +1 -1
- package/dist/index.d.mts +1 -2
- package/dist/index.mjs +6 -6
- package/dist/{load-user-imports-B3Iy_K8k.mjs → load-user-imports-Bx5ZlhSm.mjs} +9 -9
- package/dist/load-user-imports-Bx5ZlhSm.mjs.map +1 -0
- package/dist/{pool-runner-init-BDQtAGwQ.mjs → pool-runner-init-BqkwQ2tk.mjs} +7 -7
- package/dist/pool-runner-init-BqkwQ2tk.mjs.map +1 -0
- package/dist/{pool-runner-init-CvnB0-iN.d.mts → pool-runner-init-CNpRdA5u.d.mts} +2 -2
- package/dist/pool-runner-init-CNpRdA5u.d.mts.map +1 -0
- package/dist/pool-thread/compile-worker-thread.d.mts +1 -1
- package/dist/pool-thread/compile-worker-thread.d.mts.map +1 -1
- package/dist/pool-thread/compile-worker-thread.mjs +10 -13
- package/dist/pool-thread/compile-worker-thread.mjs.map +1 -1
- package/dist/pool-thread/test-worker-thread.d.mts +1 -1
- package/dist/pool-thread/test-worker-thread.d.mts.map +1 -1
- package/dist/pool-thread/test-worker-thread.mjs +8 -11
- package/dist/pool-thread/test-worker-thread.mjs.map +1 -1
- package/dist/pool-thread/v3-tinypool-thread.d.mts +1 -1
- package/dist/pool-thread/v3-tinypool-thread.d.mts.map +1 -1
- package/dist/pool-thread/v3-tinypool-thread.mjs +12 -18
- package/dist/pool-thread/v3-tinypool-thread.mjs.map +1 -1
- package/dist/{resolve-config-DhZ4lOSK.mjs → resolve-config-s9gSJSMc.mjs} +14 -5
- package/dist/resolve-config-s9gSJSMc.mjs.map +1 -0
- package/dist/{test-runner-C4I9VknR.mjs → test-runner-BGqc9uCK.mjs} +4 -4
- package/dist/{test-runner-C4I9VknR.mjs.map → test-runner-BGqc9uCK.mjs.map} +1 -1
- package/dist/{types-D0nprJo1.d.mts → types-DHVk5iAx.d.mts} +17 -11
- package/dist/types-DHVk5iAx.d.mts.map +1 -0
- package/dist/vitest-file-tasks-D8sOClGX.mjs +149 -0
- package/dist/vitest-file-tasks-D8sOClGX.mjs.map +1 -0
- package/dist/{vitest-tasks--ow4pacR.mjs → vitest-tasks-BZ24sghI.mjs} +6 -4
- package/dist/vitest-tasks-BZ24sghI.mjs.map +1 -0
- package/package.json +11 -14
- package/prebuilds/darwin-arm64/vitest-pool-assemblyscript.glibc.node +0 -0
- package/prebuilds/darwin-x64/vitest-pool-assemblyscript.glibc.node +0 -0
- package/prebuilds/linux-arm64/vitest-pool-assemblyscript.glibc.node +0 -0
- package/prebuilds/linux-x64/vitest-pool-assemblyscript.glibc.node +0 -0
- package/prebuilds/linux-x64/vitest-pool-assemblyscript.musl.node +0 -0
- package/prebuilds/win32-arm64/vitest-pool-assemblyscript.glibc.node +0 -0
- package/prebuilds/win32-x64/vitest-pool-assemblyscript.glibc.node +0 -0
- package/src/instrumentation/native/addon.cpp +29 -3
- package/dist/addon-interface-_pNXcbib.mjs.map +0 -1
- package/dist/ast-visitor-C5gQqWD2.mjs.map +0 -1
- package/dist/compile-runner-DOMhsLQE.mjs.map +0 -1
- package/dist/compiler-CIXpfKq0.mjs.map +0 -1
- package/dist/constants-DuBLuMjt.mjs.map +0 -1
- package/dist/custom-provider-options-YTk1m7At.d.mts +0 -26
- package/dist/custom-provider-options-YTk1m7At.d.mts.map +0 -1
- package/dist/debug-Cm1VFmaz.mjs.map +0 -1
- package/dist/load-user-imports-B3Iy_K8k.mjs.map +0 -1
- package/dist/pool-runner-init-BDQtAGwQ.mjs.map +0 -1
- package/dist/pool-runner-init-CvnB0-iN.d.mts.map +0 -1
- package/dist/resolve-config-DhZ4lOSK.mjs.map +0 -1
- package/dist/types-D0nprJo1.d.mts.map +0 -1
- package/dist/vitest-file-tasks-Bn9CrWt_.mjs +0 -61
- package/dist/vitest-file-tasks-Bn9CrWt_.mjs.map +0 -1
- package/dist/vitest-tasks--ow4pacR.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-DtRAL4rM.mjs","names":[],"sources":["../src/util/highlight-code.ts","../src/util/test-error-formatting.ts","../src/util/pool-errors.ts","../src/util/debug.ts"],"sourcesContent":["import { highlight, type TokenColors } from 'tinyhighlight';\nimport c from 'tinyrainbow';\n\n/**\n * Adapted from vitest. The internal function was changed between vitest 3.2.x and 4.0.x,\n * and then removed from public exposure in 4.1.x, so now instead we recreate the same\n * highlighting color rules.\n * \n * @see https://github.com/vitest-dev/vitest/blob/v4.1.0/packages/vitest/src/utils/colors.ts#L18\n * \n * Vitest is released under the MIT license, included in this project's root.\n * Copyright (c) 2021-Present Vitest Team\n */\n\nconst colors: TokenColors = {\n Keyword: c.magenta,\n IdentifierCapitalized: c.yellow,\n Punctuator: c.yellow,\n StringLiteral: c.green,\n NoSubstitutionTemplate: c.green,\n MultiLineComment: c.gray,\n SingleLineComment: c.gray,\n RegularExpressionLiteral: c.cyan,\n NumericLiteral: c.blue,\n TemplateHead: text =>\n c.green(text.slice(0, text.length - 2)) + c.cyan(text.slice(-2)),\n TemplateTail: text => c.cyan(text.slice(0, 1)) + c.green(text.slice(1)),\n TemplateMiddle: text =>\n c.cyan(text.slice(0, 1))\n + c.green(text.slice(1, text.length - 2))\n + c.cyan(text.slice(-2)),\n IdentifierCallable: c.blue,\n PrivateIdentifierCallable: text => `#${c.blue(text.slice(1))}`,\n Invalid: (text: string) => c.white(c.bgRed(c.bold(text)))\n};\n\nexport function highlightCode(source: string): string {\n return highlight(source, { colors });\n}\n","import { stripVTControlCharacters } from 'node:util';\nimport type { RawSourceMap } from 'source-map';\nimport c from 'tinyrainbow';\nimport type { ParsedStack } from '@vitest/utils';\n\nimport { highlightCode } from './highlight-code.js';\n\nconst FRAME_POINTER = '❯' as const;\nconst CODE_FRAME_INDENT_SPACES = 4 as const;\n\n// same performance guard used in vitest `printError`\nconst MAX_CODE_HIGHLIGHT_LENGTH = 100_000 as const;\n\nexport function getYellowString(str: string): string {\n return c.yellow(str);\n}\n\nexport function toPlaintextStackFrameString(frame: ParsedStack): string {\n return ` at ${frame.method} ${frame.file}:${frame.line}:${frame.column}`;\n}\n\nexport function toVitestLikeStackFrameString(frame: ParsedStack): string {\n return c.cyan(\n ` ${c.dim(FRAME_POINTER)} ${frame.method} ${frame.file}:${c.dim(`${frame.line}:${frame.column}`)}`\n );\n}\n\nexport function getSourceCodeFrameString(\n sourceMap: RawSourceMap,\n frame: ParsedStack,\n): string | undefined {\n if (!sourceMap.sourcesContent) {\n return undefined;\n }\n\n const fileIndex = sourceMap.sources.indexOf(frame.file);\n if (fileIndex < 0) {\n return undefined;\n }\n\n const source = sourceMap.sourcesContent[fileIndex];\n if (!source) {\n return undefined;\n }\n\n const highlightedSource = source.length < MAX_CODE_HIGHLIGHT_LENGTH\n ? highlightCode(source)\n : source;\n\n return generateCodeFrame(highlightedSource, CODE_FRAME_INDENT_SPACES, frame);\n}\n\n\n// ============================================================================\n// Source code formatting functions borrowed from Vitest\n// ============================================================================\n\n/**\n * Vitest doesn't expose generateCodeFrame as a util, so we have\n * recreated it here with minimal changes.\n * \n * @see https://github.com/vitest-dev/vitest/blob/v3.2.4/packages/vitest/src/node/printError.ts#L424\n * \n * Vitest is released under the MIT license, included in this project's root.\n * Copyright (c) 2021-Present Vitest Team\n */\n\nconst lineSplitRE: RegExp = /\\r?\\n/;\n\nfunction generateCodeFrame(\n source: string,\n indent = 0,\n loc: { line: number; column: number } | number,\n range = 2,\n): string {\n const start\n = typeof loc === 'object'\n ? positionToOffset(source, loc.line, loc.column)\n : loc\n const end = start\n const lines = source.split(lineSplitRE)\n const nl = /\\r\\n/.test(source) ? 2 : 1\n let count = 0\n let res: string[] = []\n\n const columns = process.stdout?.columns || 80\n\n for (let i = 0; i < lines.length; i++) {\n count += lines[i]!.length + nl\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) {\n continue\n }\n\n const lineLength = lines[j]!.length\n\n // too long, maybe it's a minified file, skip for codeframe\n if (stripVTControlCharacters(lines[j]!).length > 200) {\n return ''\n }\n\n res.push(\n lineNo(j + 1)\n + truncateString(lines[j]!.replace(/\\t/g, ' '), columns - 5 - indent),\n )\n\n if (j === i) {\n // push underline\n const pad = start - (count - lineLength) + (nl - 1)\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start,\n )\n res.push(lineNo() + ' '.repeat(pad) + c.red('^'.repeat(length)))\n }\n else if (j > i) {\n if (end > count) {\n const length = Math.max(1, Math.min(end - count, lineLength))\n res.push(lineNo() + c.red('^'.repeat(length)))\n }\n count += lineLength + 1\n }\n }\n break\n }\n }\n\n if (indent) {\n res = res.map(line => ' '.repeat(indent) + line)\n }\n\n return res.join('\\n')\n}\n\n\nfunction positionToOffset(\n source: string,\n lineNumber: number,\n columnNumber: number,\n): number {\n const lines = source.split(lineSplitRE)\n const nl = /\\r\\n/.test(source) ? 2 : 1\n let start = 0\n\n if (lineNumber > lines.length) {\n return source.length\n }\n\n for (let i = 0; i < lineNumber - 1; i++) {\n start += lines[i]!.length + nl\n }\n\n return start + columnNumber\n}\n\nfunction lineNo(no: number | string = '') {\n return c.gray(`${String(no).padStart(3, ' ')}| `)\n}\n\nfunction truncateString(text: string, maxLength: number): string {\n const plainText = stripVTControlCharacters(text)\n\n if (plainText.length <= maxLength) {\n return text\n }\n\n return `${plainText.slice(0, maxLength - 1)}…`\n}\n","import type { Test } from '@vitest/runner/types';\n\nimport type {\n AssemblyScriptPoolError,\n AssemblyScriptTestError,\n PoolErrorName,\n TestErrorName\n} from '../types/types.js';\nimport {\n AS_POOL_ERROR_TYPE_FLAG,\n POOL_ERROR_NAMES,\n TEST_ERROR_NAMES\n} from '../types/constants.js';\nimport { getYellowString } from './test-error-formatting.js';\n\nexport function createPoolError(\n message: string,\n name: PoolErrorName,\n stack?: string,\n cause?: any,\n rawCallStack?: NodeJS.CallSite[],\n): AssemblyScriptPoolError {\n return { name, message, stack, cause, rawCallStack, [AS_POOL_ERROR_TYPE_FLAG]: true };\n}\n\nexport function createTestTimeoutError(\n test: Test\n): AssemblyScriptTestError {\n const message = `Test timed out after ${test.timeout}ms`;\n const err: AssemblyScriptTestError = {\n name: POOL_ERROR_NAMES.WASMExecutionTimeoutError,\n message,\n stack: `${test.id}_${message}`,\n diff: getYellowString(` Test Timeout Exceeded (${test.timeout}ms)`)\n };\n return err;\n}\n\nexport function createTestExpectedToFailError(test: Test): AssemblyScriptTestError {\n const message = `Test is expected to fail, but all assertions passed`;\n const err: AssemblyScriptTestError = {\n name: TEST_ERROR_NAMES.AssertionError,\n message,\n stack: `${test.id}_${message}`,\n diff: getYellowString(` Expected to fail, but all assertions passed`)\n };\n return err;\n}\n\nexport function throwPoolErrorIfAborted(signal?: AbortSignal): void {\n if (!signal || !signal.aborted) {\n return;\n }\n\n throw createPoolError(signal.reason, POOL_ERROR_NAMES.PoolRunAbortedError);\n}\n\nexport function isAbortErrorString(item: any): boolean {\n return item === POOL_ERROR_NAMES.PoolRunAbortedError || item === 'AbortError';\n}\n\nexport function isAbortError(error: any): boolean {\n return isAbortErrorString(error) \n || isAbortErrorString(error?.name)\n || error?.message === 'Terminating worker thread';\n}\n\nexport function createPoolErrorFromAnyError(\n context: string,\n contextErrorName: PoolErrorName,\n error: any\n): AssemblyScriptPoolError {\n const isErrorAbortString = isAbortErrorString(error);\n if (isErrorAbortString) {\n const msg = `${contextErrorName}: ${context} - Aborted, Unknown Cause`;\n return createPoolError(msg, POOL_ERROR_NAMES.PoolRunAbortedError);\n }\n\n if (error[AS_POOL_ERROR_TYPE_FLAG]) {\n return error as AssemblyScriptPoolError;\n }\n\n if (error instanceof Error) {\n const isAbortError = isAbortErrorString(error.name);\n const asErr = createPoolError(\n `${context} - ${error.name}: ${error.message}`,\n isAbortError ? POOL_ERROR_NAMES.PoolRunAbortedError : contextErrorName,\n error.stack,\n error.cause\n );\n return asErr;\n }\n\n const errorMsg = String(error);\n return createPoolError(`${context} - ${errorMsg}`, contextErrorName);\n}\n\nexport function getTestErrorFromPoolError(error: AssemblyScriptPoolError): AssemblyScriptTestError {\n const anyCause: any = error?.cause;\n if (error.causeIsEnhancedError) {\n return error.cause as AssemblyScriptTestError;\n }\n\n const message = error.message ?? anyCause.message ?? 'Unknown error';\n return {\n name: error.name ?? anyCause.name ?? POOL_ERROR_NAMES.PoolError,\n message,\n stack: anyCause?.stack ?? error.stack ?? message,\n stacks: anyCause?.stacks ,\n cause: getTestErrorFromAnyError(anyCause?.cause),\n diff: anyCause?.diff\n };\n}\n\nexport function getTestErrorFromAnyError(\n error: any,\n context: string = '',\n fallbackName: TestErrorName | PoolErrorName = POOL_ERROR_NAMES.PoolError\n): AssemblyScriptTestError | undefined {\n if (!error) {\n return undefined;\n }\n\n const message = `${context ?? ''}${error?.message ?? ''}`;\n return {\n name: error?.name ?? fallbackName,\n message,\n stack: error?.stack ?? message,\n stacks: error?.stacks,\n cause: getTestErrorFromAnyError(error?.cause)\n };\n}\n","/**\n * Debug logging utility\n */\n\ndeclare global {\n var AS_POOL_DEBUG: boolean | undefined;\n}\n\nglobalThis.AS_POOL_DEBUG = false;\n\nconst DEBUG_ENV_ENABLED_VALUE = 'vitest_as_pool' as const;\n\nfunction isEnabled(): boolean {\n return globalThis.AS_POOL_DEBUG === true || process.env.DEBUG === DEBUG_ENV_ENABLED_VALUE;\n}\n\n/**\n * Initialize debug mode for current async context (called by worker at task start)\n * @param {boolean} debugEnabled - Enable verbose debug logging\n */\nexport function setGlobalDebugMode(debugEnabled: boolean): void {\n globalThis.AS_POOL_DEBUG = debugEnabled;\n}\n\nfunction debugLog(...args: any): void {\n // if first arg is a function, execute it and then print the result\n if (args?.length > 0 && typeof args[0] === 'function') {\n const result = args[0]();\n const rest = args.length > 1 ? args.slice(1) : [];\n console.log(Date.now(), String(result), ...rest);\n } else {\n console.log(Date.now(), ...args);\n }\n}\n\n/**\n * Log debug message (only when debug enabled in current global context)\n * or when environment has a given DEBUG variable set.\n */\nexport function debug(...args: any): void {\n if (isEnabled()) {\n debugLog(...args);\n }\n}\n\n/**\n * Log debug message (caller expected to determine if enabled)\n */\nexport function debugOverride(...args: any): void {\n debugLog(...args);\n}\n\n/**\n * Determine if debug mode is enabled for the current global context\n */\nexport function isDebugModeEnabled(): boolean {\n return isEnabled();\n}\n\nexport async function delay(ms: number = 5000): Promise<void> {\n return new Promise<void>((resolve, _reject) => {\n setTimeout(resolve, ms);\n });\n}\n"],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ async function warnIfNativeBuildFailed() {
|
|
|
66
66
|
const buildError = await readNativeBuildError();
|
|
67
67
|
if (!buildError) return;
|
|
68
68
|
try {
|
|
69
|
-
await import("./addon-interface-
|
|
69
|
+
await import("./addon-interface-CYFXMbK7.mjs");
|
|
70
70
|
await clearNativeBuildError();
|
|
71
71
|
return;
|
|
72
72
|
} catch {}
|
|
@@ -79,4 +79,4 @@ async function warnIfNativeBuildFailed() {
|
|
|
79
79
|
|
|
80
80
|
//#endregion
|
|
81
81
|
export { clearNativeBuildError, hasNativeBuildError, isNodeVersionSupportedForCoverage, warnASInstrumentationNotLoaded, warnIfASCoverageNotSupportedByNode, warnIfNativeBuildFailed };
|
|
82
|
-
//# sourceMappingURL=feature-check-
|
|
82
|
+
//# sourceMappingURL=feature-check-Bje3ntpV.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-check-
|
|
1
|
+
{"version":3,"file":"feature-check-Bje3ntpV.mjs","names":[],"sources":["../src/util/feature-check.ts"],"sourcesContent":["import { versions } from 'node:process';\nimport { access, readFile, unlink } from 'node:fs/promises';\nimport { resolve, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport c from 'tinyrainbow';\n\nimport type { NativeBuildError } from '../types/types.js';\n\n// Marker file written by install script when native build fails\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageRoot = resolve(__dirname, '..');\nconst NATIVE_BUILD_ERROR_FILE = resolve(packageRoot, '.native-build-error');\n\n/**\n * Read the native build error marker file if it exists.\n * Returns undefined if file doesn't exist or can't be parsed.\n */\nasync function readNativeBuildError(): Promise<NativeBuildError | undefined> {\n try {\n const content = await readFile(NATIVE_BUILD_ERROR_FILE, 'utf8');\n return JSON.parse(content) as NativeBuildError;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a native build error marker file exists.\n * Used by compiler threads to distinguish known build failures (marker present,\n * user already warned by coverage provider) from unexpected addon load failures.\n */\nexport async function hasNativeBuildError(): Promise<boolean> {\n try {\n await access(NATIVE_BUILD_ERROR_FILE);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Remove the native build error marker file.\n * Called when the addon loads successfully at runtime, clearing any stale marker\n * left from a previous failed install (e.g. after a manual rebuild).\n */\nexport async function clearNativeBuildError(): Promise<void> {\n try {\n await unlink(NATIVE_BUILD_ERROR_FILE);\n } catch {\n // File doesn't exist or can't be removed — non-critical\n }\n}\n\nconst NODE_VERSION = versions.node;\nconst NODE_MAJOR_VERSION = parseInt(NODE_VERSION.split('.')[0]!, 10);\n\nexport function isNodeVersionSupportedForCoverage(): boolean {\n return NODE_MAJOR_VERSION >= 22;\n}\n\nexport function warnIfASCoverageNotSupportedByNode(): void {\n if (!isNodeVersionSupportedForCoverage()) {\n console.warn(`\\n`\n + c.yellow(`Warning:`)\n + c.gray(` Coverage config is enabled, but current Node version (${versions.node})\\n`\n + ` does not support required WASM multi-memory features.\\n`\n + ` Coverage collection will be `) + c.yellow(`disabled`) + c.gray(` for AssemblyScript WASM.\\n`\n + ` Please upgrade to Node 22 or above if you need WASM coverage support.`)\n );\n }\n}\n\n/**\n * Warn that the native instrumentation addon could not be loaded.\n * Used by compiler threads for unexpected failures (no marker file present).\n */\nexport function warnASInstrumentationNotLoaded(errorMessage: string): void {\n console.warn(`\\n`\n + c.yellow(`Warning:`)\n + c.gray(` Coverage config is enabled, but instrumentation native addon module\\n`\n + ` was not loaded. Tests will run with ` + c.yellow(`coverage disabled`) + `. Error:\\n\\n`\n + `${errorMessage}`)\n );\n}\n\nconst ERROR_PREVIEW_MAX_LINES = 10;\n\n/**\n * Check for a native build error marker file and warn if present.\n * Called once from the coverage provider (main process), so the warning\n * is not duplicated across compiler threads.\n */\nexport async function warnIfNativeBuildFailed(): Promise<void> {\n const buildError = await readNativeBuildError();\n if (!buildError) return;\n\n // Before warning, check if the addon actually loads (e.g. after a manual rebuild).\n // If it loads, the marker file is stale — clear it and skip the warning.\n try {\n await import('../instrumentation/addon-interface.js');\n await clearNativeBuildError();\n return;\n } catch {\n // Addon still can't load — proceed with warning\n }\n\n const stageName = buildError.stage === 'binaryen-download'\n ? 'Binaryen dependency download'\n : 'native addon compilation';\n\n // Truncate error for display, point to file for full details\n const errorLines = buildError.error.split('\\n');\n const truncated = errorLines.length > ERROR_PREVIEW_MAX_LINES;\n const preview = errorLines.slice(-ERROR_PREVIEW_MAX_LINES).join('\\n');\n\n console.warn(`\\n`\n + c.yellow(`Warning:`) + c.gray(` Build failed during \"${stageName}\" while installing.\\n`)\n + c.gray(` vitest-pool-assemblyscript. AssemblyScript tests will run,\\n`)\n + c.gray(` but `) + c.yellow(`coverage will be disabled`) + c.gray(`. Platform: `)\n + c.yellowBright(`${buildError.platform}\\n`)\n + c.gray(` Build Error Message:\\n`)\n + `\\n`\n + (truncated ? c.gray(`... (truncated)\\n`) : ``)+ c.redBright(`${preview}`) + `\\n`\n + `\\n`\n + c.gray(` Full error details: `) + c.cyan(`${NATIVE_BUILD_ERROR_FILE}`) + `\\n`\n + `\\n`\n + c.gray(` To resolve, inspect the error above, ensure a C++ compiler toolchain\\n`)\n + c.gray(` is installed (`) + c.cyan(`https://github.com/nodejs/node-gyp#installation`) + c.gray(`)\\n`)\n + c.gray(` and then reinstall: `) + c.cyan(`npm install vitest-pool-assemblyscript`)\n + `\\n`\n );\n}\n"],"mappings":";;;;;;;AAYA,MAAM,0BAA0B,QADZ,QADF,QADC,cAAc,OAAO,KAAK,IAAI,CACZ,EACE,KAAK,EACS,sBAAsB;;;;;AAM3E,eAAe,uBAA8D;AAC3E,KAAI;EACF,MAAM,UAAU,MAAM,SAAS,yBAAyB,OAAO;AAC/D,SAAO,KAAK,MAAM,QAAQ;SACpB;AACN;;;;;;;;AASJ,eAAsB,sBAAwC;AAC5D,KAAI;AACF,QAAM,OAAO,wBAAwB;AACrC,SAAO;SACD;AACN,SAAO;;;;;;;;AASX,eAAsB,wBAAuC;AAC3D,KAAI;AACF,QAAM,OAAO,wBAAwB;SAC/B;;AAKV,MAAM,eAAe,SAAS;AAC9B,MAAM,qBAAqB,SAAS,aAAa,MAAM,IAAI,CAAC,IAAK,GAAG;AAEpE,SAAgB,oCAA6C;AAC3D,QAAO,sBAAsB;;AAG/B,SAAgB,qCAA2C;AACzD,KAAI,CAAC,mCAAmC,CACtC,SAAQ,KAAK,OACT,EAAE,OAAO,WAAW,GACpB,EAAE,KAAK,0DAA0D,SAAS,KAAK,0GAEvC,GAAG,EAAE,OAAO,WAAW,GAAG,EAAE,KAAK,4GACQ,CACpF;;;;;;AAQL,SAAgB,+BAA+B,cAA4B;AACzE,SAAQ,KAAK,OACT,EAAE,OAAO,WAAW,GACpB,EAAE,KAAK,wHAC2C,EAAE,OAAO,oBAAoB,GAAG,eAC/E,eAAe,CACrB;;AAGH,MAAM,0BAA0B;;;;;;AAOhC,eAAsB,0BAAyC;CAC7D,MAAM,aAAa,MAAM,sBAAsB;AAC/C,KAAI,CAAC,WAAY;AAIjB,KAAI;AACF,QAAM,OAAO;AACb,QAAM,uBAAuB;AAC7B;SACM;CAIR,MAAM,YAAY,WAAW,UAAU,sBACnC,iCACA;CAGJ,MAAM,aAAa,WAAW,MAAM,MAAM,KAAK;CAC/C,MAAM,YAAY,WAAW,SAAS;CACtC,MAAM,UAAU,WAAW,MAAM,CAAC,wBAAwB,CAAC,KAAK,KAAK;AAErE,SAAQ,KAAK,OACT,EAAE,OAAO,WAAW,GAAG,EAAE,KAAK,yBAAyB,UAAU,uBAAuB,GACxF,EAAE,KAAK,sEAAsE,GAC7E,EAAE,KAAK,cAAc,GAAG,EAAE,OAAO,4BAA4B,GAAG,EAAE,KAAK,eAAe,GACtF,EAAE,aAAa,GAAG,WAAW,SAAS,IAAI,GAC1C,EAAE,KAAK,gCAAgC,GACvC,QACC,YAAY,EAAE,KAAK,oBAAoB,GAAG,MAAK,EAAE,UAAU,GAAG,UAAU,GAAG,SAE5E,EAAE,KAAK,8BAA8B,GAAG,EAAE,KAAK,GAAG,0BAA0B,GAAG,SAE/E,EAAE,KAAK,gFAAgF,GACvF,EAAE,KAAK,wBAAwB,GAAG,EAAE,KAAK,kDAAkD,GAAG,EAAE,KAAK,MAAM,GAC3G,EAAE,KAAK,8BAA8B,GAAG,EAAE,KAAK,yCAAyC,GACxF,KACH"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AssemblyScriptCompilerOptions, AssemblyScriptCompilerResult, AssemblyScriptPoolOptions } from "./types-
|
|
1
|
+
import { AssemblyScriptCompilerOptions, AssemblyScriptCompilerResult, AssemblyScriptPoolOptions } from "./types-DHVk5iAx.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/compiler/index.d.ts
|
|
4
4
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-internal.d.mts","names":[],"sources":["../src/compiler/index.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index-internal.d.mts","names":[],"sources":["../src/compiler/index.ts"],"mappings":";;;;;AAsEA;iBAAsB,qBAAA,CACpB,QAAA,UACA,OAAA,EAAS,6BAAA,EACT,SAAA,UACA,QAAA,UACA,MAAA,GAAS,WAAA,GACR,OAAA,CAAQ,4BAAA"}
|
package/dist/index-internal.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./constants-
|
|
2
|
-
import "./debug-
|
|
3
|
-
import "./feature-check-
|
|
4
|
-
import { compileAssemblyScript } from "./compiler-
|
|
1
|
+
import "./constants-DbxJ3hzg.mjs";
|
|
2
|
+
import "./debug-DtRAL4rM.mjs";
|
|
3
|
+
import "./feature-check-Bje3ntpV.mjs";
|
|
4
|
+
import { compileAssemblyScript } from "./compiler-hUlDr5vL.mjs";
|
|
5
5
|
|
|
6
6
|
export { compileAssemblyScript };
|
package/dist/index-v3.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-v3.d.mts","names":[],"sources":["../src/pool/v3-process-pool.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index-v3.d.mts","names":[],"sources":["../src/pool/v3-process-pool.ts"],"mappings":";;;iBA4QgB,+BAAA,CAAgC,GAAA,EAAK,MAAA,GAAS,WAAA"}
|
package/dist/index-v3.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { POOL_ERROR_NAMES } from "./constants-
|
|
2
|
-
import { getProjectSerializedOrGlobalConfig } from "./resolve-config-
|
|
3
|
-
import { createPoolErrorFromAnyError, debug, isAbortError, setGlobalDebugMode } from "./debug-
|
|
4
|
-
import { createInitialFileTask } from "./vitest-file-tasks-
|
|
5
|
-
import { failTestWithTimeoutError, flagTestTerminated } from "./vitest-tasks
|
|
1
|
+
import { POOL_ERROR_NAMES } from "./constants-DbxJ3hzg.mjs";
|
|
2
|
+
import { getCompatConfig, getProjectSerializedOrGlobalConfig } from "./resolve-config-s9gSJSMc.mjs";
|
|
3
|
+
import { createPoolErrorFromAnyError, debug, isAbortError, setGlobalDebugMode } from "./debug-DtRAL4rM.mjs";
|
|
4
|
+
import { createInitialFileTask } from "./vitest-file-tasks-D8sOClGX.mjs";
|
|
5
|
+
import { failTestWithTimeoutError, flagTestTerminated } from "./vitest-tasks-BZ24sghI.mjs";
|
|
6
6
|
import { createWorkerRPCChannel } from "./worker-rpc-channel-CZZIxtv5.mjs";
|
|
7
7
|
import { basename, resolve } from "node:path";
|
|
8
8
|
import { access } from "node:fs/promises";
|
|
@@ -111,8 +111,9 @@ async function runTests(specs, isCollectTestsMode, pool, poolAbortController, _i
|
|
|
111
111
|
const testTimeoutCache = /* @__PURE__ */ new Map();
|
|
112
112
|
const fileWorkers = specs.map(async (spec) => {
|
|
113
113
|
const { serializedConfig } = spec.project;
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
const compatConfig = getCompatConfig(serializedConfig);
|
|
115
|
+
let timedOutTest = await dispatchFullWorkerRun(spec, compatConfig, isCollectTestsMode, pool, poolAbortController.signal, fileCache, testTimeoutCache);
|
|
116
|
+
while (timedOutTest) timedOutTest = await dispatchFullWorkerRun(spec, compatConfig, isCollectTestsMode, pool, poolAbortController.signal, fileCache, testTimeoutCache, timedOutTest);
|
|
116
117
|
});
|
|
117
118
|
if (isCollectTestsMode) try {
|
|
118
119
|
await Promise.all(fileWorkers);
|
package/dist/index-v3.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-v3.mjs","names":[],"sources":["../src/pool/v3-process-pool.ts","../src/index-v3.ts"],"sourcesContent":["/**\n * AssemblyScript Pool for Vitest\n */\n\nimport { resolve, basename } from 'node:path';\nimport { access } from 'node:fs/promises';\nimport Tinypool from 'tinypool';\nimport type { SerializedConfig } from 'vitest';\nimport type { Vitest, ProcessPool, TestSpecification } from 'vitest/node';\nimport type { Test } from '@vitest/runner/types';\n\nimport {\n AS_POOL_WORKER_MSG_FLAG,\n ASSEMBLYSCRIPT_POOL_NAME,\n POOL_ERROR_NAMES,\n} from '../types/constants.js';\nimport type {\n ResolvedHybridProviderOptions,\n ProcessPoolRunFileTask,\n WASMCompilation,\n TestRunRecord,\n AssemblyScriptPoolWorkerMessage,\n WorkerThreadInitData,\n} from '../types/types.js';\nimport { setGlobalDebugMode, debug } from '../util/debug.js';\nimport { createWorkerRPCChannel } from './worker-rpc-channel.js';\nimport {\n createPoolErrorFromAnyError,\n isAbortError,\n} from '../util/pool-errors.js';\nimport {\n failTestWithTimeoutError,\n flagTestTerminated,\n} from '../util/vitest-tasks.js';\nimport { createInitialFileTask } from '../util/vitest-file-tasks.js';\nimport { getProjectSerializedOrGlobalConfig } from '../util/resolve-config.js';\n\n// path assumes that we're running from dist/\nconst WORKER_PATH = resolve(import.meta.dirname, 'pool-thread/v3-tinypool-thread.mjs');\n\nconst POOL_THREAD_IDLE_TIMEOUT_MS = 3_600_000;\n\nasync function dispatchFullWorkerRun(\n spec: TestSpecification,\n config: SerializedConfig,\n isCollectTestsMode: boolean,\n pool: Tinypool,\n poolAbortSignal: AbortSignal,\n fileCache: Map<string, WASMCompilation>,\n testTimeoutCache: Map<string, TestRunRecord>,\n previousTimedOutTest?: Test,\n): Promise<Test | undefined> {\n const fileRunStart = Date.now();\n const testFilePath: string = spec.moduleId; // absolute path\n const base = basename(testFilePath);\n\n debug(`[Pool] ${base} - Starting file worker run at ${fileRunStart} for \"${testFilePath}\"`);\n\n let fileCompilation: WASMCompilation | undefined = fileCache.get(spec.moduleId);\n const isTimeoutRedispatch: boolean = !!previousTimedOutTest && !!fileCompilation;\n\n let timedOutTestThisRun: Test | undefined;\n\n try {\n const fileAbortController = new AbortController();\n const file = isTimeoutRedispatch\n ? previousTimedOutTest!.file\n : createInitialFileTask(spec.moduleId, spec.project.name, config.root, config.testTimeout, config.retry);\n\n const { workerPort, poolPort } = createWorkerRPCChannel(spec.project, isCollectTestsMode);\n\n // Enforce test timeout using setTimeout() and worker messages.\n // 1. worker sends a start message to indicate when the test has started\n // 2. pool starts a timer using setTimeout() when worker start message is received\n // 3. worker sends an end message to indicate when the test has completed\n // - if test completes before the timeout expires, the timer is cleared and everything proceeds\n // - if timeout expires, the test worker is actively aborted using the test-specific AbortController\n //\n // Monitoring from the pool main thread and actively aborting the runner allows for accurate enforcement of the test timeout,\n // which is much harder/impossible to control from within the worker thread itself, which is busy/blocked running \n // the long-running WASM test.\n poolPort.on('message', event => {\n if (!event[AS_POOL_WORKER_MSG_FLAG]) return;\n\n const msg = event as AssemblyScriptPoolWorkerMessage;\n if (msg.type === 'file-compiled') {\n const { compilation } = msg;\n fileCache.set(compilation.filePath, compilation);\n debug(`[Pool] ${basename(compilation.filePath)} - Got compiled file cache for \"${compilation.filePath}\"`);\n } else if (msg.type === 'execution-start') {\n const poolReceivedExecutionStart = Date.now();\n const { executionStart, test } = msg;\n\n const transitDuration = poolReceivedExecutionStart - executionStart;\n const adjustedTimeout = Math.max(test.timeout - transitDuration, 0);\n\n debug(`[Pool] ${base} - \"${test.name}\": Received worker execution start (transit ${transitDuration} ms)`\n + ` - Beginning test timeout timer ${test.timeout} ms (adjusted timeout: ${adjustedTimeout} ms)`\n );\n \n // Enforce test timeout\n const testTimeoutId = setTimeout(async () => {\n const poolTimeoutTime = Date.now();\n const record = testTimeoutCache.get(test.id);\n testTimeoutCache.delete(test.id);\n\n if (record) {\n const elapsedFromWorkerExecutionStart = poolTimeoutTime - record.executionStart;\n\n failTestWithTimeoutError(record.test, poolTimeoutTime, elapsedFromWorkerExecutionStart);\n\n flagTestTerminated(record.test);\n\n timedOutTestThisRun = test;\n fileAbortController.abort(POOL_ERROR_NAMES.WASMExecutionTimeoutError);\n\n debug(`[Pool] ${base} - \"${record.test.name}\" timed out (threshold ${record.test.timeout} ms)`\n + ` - Aborted worker job (duration before abort: ${elapsedFromWorkerExecutionStart} ms)`\n );\n }\n }, adjustedTimeout);\n\n testTimeoutCache.set(test.id, {\n test: test,\n executionStart: executionStart,\n timeoutId: testTimeoutId,\n });\n\n } else if (msg.type === 'execution-end') {\n const poolReceivedExecutionEnd = Date.now();\n const { executionEnd, testTaskId } = msg;\n const record = testTimeoutCache.get(testTaskId);\n testTimeoutCache.delete(testTaskId);\n\n if (record) {\n clearTimeout(record.timeoutId);\n\n const elapsedFromWorkerExecutionStart = executionEnd - record.executionStart!;\n const transitDuration = poolReceivedExecutionEnd - executionEnd;\n debug(`[Pool] ${base} - \"${record.test.name}\": Received worker execution end (transit: ${transitDuration} ms)`\n + ` - Clearing test timeout timer - Actual duration from worker exection start: ${elapsedFromWorkerExecutionStart} ms`\n );\n }\n }\n });\n \n const workerTaskData: ProcessPoolRunFileTask = {\n dispatchStart: Date.now(),\n port: workerPort,\n file,\n config,\n isCollectTestsMode,\n timedOutTest: previousTimedOutTest,\n timedOutCompilation: fileCompilation\n };\n\n try {\n await pool.run(workerTaskData, {\n name: 'runTestFile',\n transferList: [workerPort],\n signal: AbortSignal.any([poolAbortSignal, fileAbortController.signal]),\n });\n } finally {\n workerPort.close();\n poolPort.close();\n }\n \n return;\n } catch (error) {\n if (isAbortError(error)) {\n debug(`[Pool] ${base} - file worker aborted during run: ${String(error)}`);\n \n if (!!timedOutTestThisRun) {\n // swallow abort error, return timed out test so worker can be re-launched\n return timedOutTestThisRun;\n } else {\n // swallow abort error, this file worker run is done\n return;\n }\n }\n\n throw createPoolErrorFromAnyError(`${base} - unhandled file worker failure`, POOL_ERROR_NAMES.PoolError, error);\n } finally {\n debug(`[Pool] ${base} - Finished File Worker Execution`);\n }\n}\n\n/**\n * Run / Collect tests\n */\nasync function runTests(\n specs: TestSpecification[],\n isCollectTestsMode: boolean,\n pool: Tinypool,\n poolAbortController: AbortController,\n _invalidatedFiles?: string[]\n): Promise<void> {\n const mode = isCollectTestsMode ? 'collectTests' : 'runTests';\n debug(`[Pool] -------- ${mode} called for ${specs.length} specs --------`);\n\n // TODO - invalidation\n // const invalidCount = invalidatedFiles?.length ?? 0;\n // debug('[Pool] Invalidated files:', invalidCount);\n\n // if (invalidCount > 0) {\n // // probably:\n // // 0. pre-build a cached map of source files to specs that import them (using debuginfo?)\n // // 1. check if invalidated file is in map: if NOT ignore & continue loop to next file\n // // 2. create file worker for each spec the invalidated file maps to\n // }\n\n const fileCache: Map<string, WASMCompilation> = new Map();\n const testTimeoutCache: Map<string, TestRunRecord> = new Map();\n\n // Create worker for each file\n const fileWorkers: Promise<void>[] = specs.map(async (spec: TestSpecification): Promise<void> => {\n const { serializedConfig } = spec.project;\n let timedOutTest = await dispatchFullWorkerRun(spec, serializedConfig, isCollectTestsMode, pool, poolAbortController.signal, fileCache, testTimeoutCache);\n \n while (timedOutTest) {\n timedOutTest = await dispatchFullWorkerRun(spec, serializedConfig, isCollectTestsMode, pool, poolAbortController.signal, fileCache, testTimeoutCache, timedOutTest);\n }\n });\n\n if (isCollectTestsMode) {\n try {\n await Promise.all(fileWorkers);\n debug('[Pool] collectTests - All file workers resolved');\n } catch (err) {\n debug('[Pool] collectTests - File worker REJECTED, Calling Pool Abort to bail this collectTests run');\n poolAbortController.abort();\n }\n } else {\n const results = await Promise.allSettled(fileWorkers);\n const unexpectedErrors: any[] = [];\n results.forEach(r => {\n if (r.status === 'rejected') {\n unexpectedErrors.push(r.reason);\n }\n });\n\n if (unexpectedErrors.length === 0) {\n debug(`[Pool] ${mode} - All file workers resolved`);\n } else {\n debug(`[Pool] ${mode} - Some file workers REJECTED unexpectedly. Throwing error(s) to vitest:`, unexpectedErrors);\n throw {\n name: POOL_ERROR_NAMES.PoolError,\n message: `Unexpected AssemblyScript Pool Error(s) Encountered during ${mode}`,\n cause: unexpectedErrors[0]\n };\n }\n }\n\n debug(`[Pool] Timeout Cache Size: ${testTimeoutCache.size}`);\n testTimeoutCache.forEach((record: TestRunRecord, testId: string) => {\n if (record) {\n debug(`[Pool] Leftover timeout entry for task: ${record.test.name}`);\n clearTimeout(record.timeoutId);\n } else {\n debug(`[Pool] Empty test timeout entry for task: ${testId}`);\n }\n });\n\n debug(`[Pool] -------- ${mode} completed --------`);\n}\n\nexport function createAssemblyScriptProcessPool(ctx: Vitest): ProcessPool {\n const { config, foundProjectSerializedConfig, v3PoolOptions } = getProjectSerializedOrGlobalConfig(ctx);\n \n if (!v3PoolOptions) {\n throw {\n name: POOL_ERROR_NAMES.PoolError,\n message: `Could not parse poot options or generate defaults. This is a bug in vitest-pool-assemblyscript, please report it.`,\n };\n }\n setGlobalDebugMode(v3PoolOptions.debug);\n\n debug('[Pool] Initializing AssemblyScript Pool');\n\n if (foundProjectSerializedConfig) {\n debug(`[Pool] Multi-project mode: Using config from project: \"${config.name}\"`);\n } else {\n debug('[Pool] Single-project mode: No project config found using vitest-pool-assemblyscript pool - Using global config with AssemblyScript pool defaults');\n }\n\n debug(`[Pool] Worker thread path: \"${WORKER_PATH}\"`);\n debug(`[Pool] Worker thread configuration - maxThreads: ${v3PoolOptions.maxThreadsV3}`);\n\n setImmediate(async () => {\n const userImportsFactoryPath = resolve(config.root, v3PoolOptions.wasmImportsFactory ?? '');\n const results = await Promise.allSettled([\n access(WORKER_PATH),\n v3PoolOptions.wasmImportsFactory ? access(userImportsFactoryPath) : Promise.resolve()\n ]);\n\n if (results[0].status === 'rejected') {\n throw new Error(`Cannot access worker thread file at path: \"${WORKER_PATH}\"`);\n }\n if (results[1].status === 'rejected') {\n throw new Error(`Cannot access user WasmImportsFactory at path: \"${userImportsFactoryPath}\".`\n + ` Ensure that your module path is relative to the project root (location of shallowest vitest config),`\n + ` and that it has a default export matching () => WebAssembly.Imports`\n );\n }\n });\n\n // Initialize Tinypool for worker management\n const pool = new Tinypool({\n filename: WORKER_PATH,\n minThreads: 1,\n maxThreads: v3PoolOptions.maxThreadsV3,\n idleTimeout: POOL_THREAD_IDLE_TIMEOUT_MS,\n isolateWorkers: false,\n workerData: {\n asPoolOptions: v3PoolOptions,\n asCoverageOptions: config.coverage as ResolvedHybridProviderOptions,\n projectRoot: config.root,\n } satisfies WorkerThreadInitData,\n });\n\n // For explicitly terminating all worker threads because of\n // ctrl+c in terminal, or bail after test failures exceed bail count\n const poolAbortController = new AbortController();\n ctx.onCancel(reason => {\n const reasonMsg = reason === 'test-failure' ? 'Bail after test failure' : reason;\n console.log(`${ASSEMBLYSCRIPT_POOL_NAME} - Aborting all tests: ${reasonMsg}`);\n poolAbortController.abort();\n });\n\n return {\n name: ASSEMBLYSCRIPT_POOL_NAME,\n\n // runs when executing vitest list\n async collectTests(specs: TestSpecification[]) {\n const isCollectTestsMode = true;\n return runTests(specs, isCollectTestsMode, pool, poolAbortController);\n },\n\n async runTests(specs: TestSpecification[], invalidates?: string[]) {\n const isCollectTestsMode = false;\n return runTests(specs, isCollectTestsMode, pool, poolAbortController, invalidates);\n },\n\n // Cleanup when shutting down\n async close() {\n debug('[Pool] AbortController called');\n poolAbortController.abort();\n \n debug('[Pool] Tinypool destroyed');\n await pool.destroy();\n\n debug('[Pool] Exiting');\n },\n };\n}\n","// default export for v3 pool\nimport { createAssemblyScriptProcessPool } from './pool/v3-process-pool.js';\nexport default createAssemblyScriptProcessPool;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-v3.mjs","names":[],"sources":["../src/pool/v3-process-pool.ts","../src/index-v3.ts"],"sourcesContent":["/**\n * AssemblyScript Pool for Vitest\n */\n\nimport { resolve, basename } from 'node:path';\nimport { access } from 'node:fs/promises';\nimport Tinypool from 'tinypool';\nimport type { Vitest, ProcessPool, TestSpecification } from 'vitest/node';\nimport type { Test } from '@vitest/runner/types';\n\nimport {\n AS_POOL_WORKER_MSG_FLAG,\n ASSEMBLYSCRIPT_POOL_NAME,\n POOL_ERROR_NAMES,\n} from '../types/constants.js';\nimport type {\n ResolvedHybridProviderOptions,\n ProcessPoolRunFileTask,\n WASMCompilation,\n TestRunRecord,\n AssemblyScriptPoolWorkerMessage,\n WorkerThreadInitData,\n SerializedConfigCompat,\n} from '../types/types.js';\nimport { setGlobalDebugMode, debug } from '../util/debug.js';\nimport { createWorkerRPCChannel } from './worker-rpc-channel.js';\nimport {\n createPoolErrorFromAnyError,\n isAbortError,\n} from '../util/pool-errors.js';\nimport {\n failTestWithTimeoutError,\n flagTestTerminated,\n} from '../util/vitest-tasks.js';\nimport { createInitialFileTask } from '../util/vitest-file-tasks.js';\nimport { getCompatConfig, getProjectSerializedOrGlobalConfig } from '../util/resolve-config.js';\n\n// path assumes that we're running from dist/\nconst WORKER_PATH = resolve(import.meta.dirname, 'pool-thread/v3-tinypool-thread.mjs');\n\nconst POOL_THREAD_IDLE_TIMEOUT_MS = 3_600_000;\n\nasync function dispatchFullWorkerRun(\n spec: TestSpecification,\n config: SerializedConfigCompat,\n isCollectTestsMode: boolean,\n pool: Tinypool,\n poolAbortSignal: AbortSignal,\n fileCache: Map<string, WASMCompilation>,\n testTimeoutCache: Map<string, TestRunRecord>,\n previousTimedOutTest?: Test,\n): Promise<Test | undefined> {\n const fileRunStart = Date.now();\n const testFilePath: string = spec.moduleId; // absolute path\n const base = basename(testFilePath);\n\n debug(`[Pool] ${base} - Starting file worker run at ${fileRunStart} for \"${testFilePath}\"`);\n\n let fileCompilation: WASMCompilation | undefined = fileCache.get(spec.moduleId);\n const isTimeoutRedispatch: boolean = !!previousTimedOutTest && !!fileCompilation;\n\n let timedOutTestThisRun: Test | undefined;\n\n try {\n const fileAbortController = new AbortController();\n const file = isTimeoutRedispatch\n ? previousTimedOutTest!.file\n : createInitialFileTask(spec.moduleId, spec.project.name, config.root, config.testTimeout, config.retry);\n\n const { workerPort, poolPort } = createWorkerRPCChannel(spec.project, isCollectTestsMode);\n\n // Enforce test timeout using setTimeout() and worker messages.\n // 1. worker sends a start message to indicate when the test has started\n // 2. pool starts a timer using setTimeout() when worker start message is received\n // 3. worker sends an end message to indicate when the test has completed\n // - if test completes before the timeout expires, the timer is cleared and everything proceeds\n // - if timeout expires, the test worker is actively aborted using the test-specific AbortController\n //\n // Monitoring from the pool main thread and actively aborting the runner allows for accurate enforcement of the test timeout,\n // which is much harder/impossible to control from within the worker thread itself, which is busy/blocked running \n // the long-running WASM test.\n poolPort.on('message', event => {\n if (!event[AS_POOL_WORKER_MSG_FLAG]) return;\n\n const msg = event as AssemblyScriptPoolWorkerMessage;\n if (msg.type === 'file-compiled') {\n const { compilation } = msg;\n fileCache.set(compilation.filePath, compilation);\n debug(`[Pool] ${basename(compilation.filePath)} - Got compiled file cache for \"${compilation.filePath}\"`);\n } else if (msg.type === 'execution-start') {\n const poolReceivedExecutionStart = Date.now();\n const { executionStart, test } = msg;\n\n const transitDuration = poolReceivedExecutionStart - executionStart;\n const adjustedTimeout = Math.max(test.timeout - transitDuration, 0);\n\n debug(`[Pool] ${base} - \"${test.name}\": Received worker execution start (transit ${transitDuration} ms)`\n + ` - Beginning test timeout timer ${test.timeout} ms (adjusted timeout: ${adjustedTimeout} ms)`\n );\n \n // Enforce test timeout\n const testTimeoutId = setTimeout(async () => {\n const poolTimeoutTime = Date.now();\n const record = testTimeoutCache.get(test.id);\n testTimeoutCache.delete(test.id);\n\n if (record) {\n const elapsedFromWorkerExecutionStart = poolTimeoutTime - record.executionStart;\n\n failTestWithTimeoutError(record.test, poolTimeoutTime, elapsedFromWorkerExecutionStart);\n\n flagTestTerminated(record.test);\n\n timedOutTestThisRun = test;\n fileAbortController.abort(POOL_ERROR_NAMES.WASMExecutionTimeoutError);\n\n debug(`[Pool] ${base} - \"${record.test.name}\" timed out (threshold ${record.test.timeout} ms)`\n + ` - Aborted worker job (duration before abort: ${elapsedFromWorkerExecutionStart} ms)`\n );\n }\n }, adjustedTimeout);\n\n testTimeoutCache.set(test.id, {\n test: test,\n executionStart: executionStart,\n timeoutId: testTimeoutId,\n });\n\n } else if (msg.type === 'execution-end') {\n const poolReceivedExecutionEnd = Date.now();\n const { executionEnd, testTaskId } = msg;\n const record = testTimeoutCache.get(testTaskId);\n testTimeoutCache.delete(testTaskId);\n\n if (record) {\n clearTimeout(record.timeoutId);\n\n const elapsedFromWorkerExecutionStart = executionEnd - record.executionStart!;\n const transitDuration = poolReceivedExecutionEnd - executionEnd;\n debug(`[Pool] ${base} - \"${record.test.name}\": Received worker execution end (transit: ${transitDuration} ms)`\n + ` - Clearing test timeout timer - Actual duration from worker exection start: ${elapsedFromWorkerExecutionStart} ms`\n );\n }\n }\n });\n \n const workerTaskData: ProcessPoolRunFileTask = {\n dispatchStart: Date.now(),\n port: workerPort,\n file,\n config,\n isCollectTestsMode,\n timedOutTest: previousTimedOutTest,\n timedOutCompilation: fileCompilation\n };\n\n try {\n await pool.run(workerTaskData, {\n name: 'runTestFile',\n transferList: [workerPort],\n signal: AbortSignal.any([poolAbortSignal, fileAbortController.signal]),\n });\n } finally {\n workerPort.close();\n poolPort.close();\n }\n \n return;\n } catch (error) {\n if (isAbortError(error)) {\n debug(`[Pool] ${base} - file worker aborted during run: ${String(error)}`);\n \n if (!!timedOutTestThisRun) {\n // swallow abort error, return timed out test so worker can be re-launched\n return timedOutTestThisRun;\n } else {\n // swallow abort error, this file worker run is done\n return;\n }\n }\n\n throw createPoolErrorFromAnyError(`${base} - unhandled file worker failure`, POOL_ERROR_NAMES.PoolError, error);\n } finally {\n debug(`[Pool] ${base} - Finished File Worker Execution`);\n }\n}\n\n/**\n * Run / Collect tests\n */\nasync function runTests(\n specs: TestSpecification[],\n isCollectTestsMode: boolean,\n pool: Tinypool,\n poolAbortController: AbortController,\n _invalidatedFiles?: string[]\n): Promise<void> {\n const mode = isCollectTestsMode ? 'collectTests' : 'runTests';\n debug(`[Pool] -------- ${mode} called for ${specs.length} specs --------`);\n\n // TODO - invalidation\n // const invalidCount = invalidatedFiles?.length ?? 0;\n // debug('[Pool] Invalidated files:', invalidCount);\n\n // if (invalidCount > 0) {\n // // probably:\n // // 0. pre-build a cached map of source files to specs that import them (using debuginfo?)\n // // 1. check if invalidated file is in map: if NOT ignore & continue loop to next file\n // // 2. create file worker for each spec the invalidated file maps to\n // }\n\n const fileCache: Map<string, WASMCompilation> = new Map();\n const testTimeoutCache: Map<string, TestRunRecord> = new Map();\n\n // Create worker for each file\n const fileWorkers: Promise<void>[] = specs.map(async (spec: TestSpecification): Promise<void> => {\n const { serializedConfig } = spec.project;\n const compatConfig: SerializedConfigCompat = getCompatConfig(serializedConfig);\n \n let timedOutTest = await dispatchFullWorkerRun(spec, compatConfig, isCollectTestsMode, pool, poolAbortController.signal, fileCache, testTimeoutCache);\n \n while (timedOutTest) {\n timedOutTest = await dispatchFullWorkerRun(spec, compatConfig, isCollectTestsMode, pool, poolAbortController.signal, fileCache, testTimeoutCache, timedOutTest);\n }\n });\n\n if (isCollectTestsMode) {\n try {\n await Promise.all(fileWorkers);\n debug('[Pool] collectTests - All file workers resolved');\n } catch (err) {\n debug('[Pool] collectTests - File worker REJECTED, Calling Pool Abort to bail this collectTests run');\n poolAbortController.abort();\n }\n } else {\n const results = await Promise.allSettled(fileWorkers);\n const unexpectedErrors: any[] = [];\n results.forEach(r => {\n if (r.status === 'rejected') {\n unexpectedErrors.push(r.reason);\n }\n });\n\n if (unexpectedErrors.length === 0) {\n debug(`[Pool] ${mode} - All file workers resolved`);\n } else {\n debug(`[Pool] ${mode} - Some file workers REJECTED unexpectedly. Throwing error(s) to vitest:`, unexpectedErrors);\n throw {\n name: POOL_ERROR_NAMES.PoolError,\n message: `Unexpected AssemblyScript Pool Error(s) Encountered during ${mode}`,\n cause: unexpectedErrors[0]\n };\n }\n }\n\n debug(`[Pool] Timeout Cache Size: ${testTimeoutCache.size}`);\n testTimeoutCache.forEach((record: TestRunRecord, testId: string) => {\n if (record) {\n debug(`[Pool] Leftover timeout entry for task: ${record.test.name}`);\n clearTimeout(record.timeoutId);\n } else {\n debug(`[Pool] Empty test timeout entry for task: ${testId}`);\n }\n });\n\n debug(`[Pool] -------- ${mode} completed --------`);\n}\n\nexport function createAssemblyScriptProcessPool(ctx: Vitest): ProcessPool {\n const { config, foundProjectSerializedConfig, v3PoolOptions } = getProjectSerializedOrGlobalConfig(ctx);\n \n if (!v3PoolOptions) {\n throw {\n name: POOL_ERROR_NAMES.PoolError,\n message: `Could not parse poot options or generate defaults. This is a bug in vitest-pool-assemblyscript, please report it.`,\n };\n }\n setGlobalDebugMode(v3PoolOptions.debug);\n\n debug('[Pool] Initializing AssemblyScript Pool');\n\n if (foundProjectSerializedConfig) {\n debug(`[Pool] Multi-project mode: Using config from project: \"${config.name}\"`);\n } else {\n debug('[Pool] Single-project mode: No project config found using vitest-pool-assemblyscript pool - Using global config with AssemblyScript pool defaults');\n }\n\n debug(`[Pool] Worker thread path: \"${WORKER_PATH}\"`);\n debug(`[Pool] Worker thread configuration - maxThreads: ${v3PoolOptions.maxThreadsV3}`);\n\n setImmediate(async () => {\n const userImportsFactoryPath = resolve(config.root, v3PoolOptions.wasmImportsFactory ?? '');\n const results = await Promise.allSettled([\n access(WORKER_PATH),\n v3PoolOptions.wasmImportsFactory ? access(userImportsFactoryPath) : Promise.resolve()\n ]);\n\n if (results[0].status === 'rejected') {\n throw new Error(`Cannot access worker thread file at path: \"${WORKER_PATH}\"`);\n }\n if (results[1].status === 'rejected') {\n throw new Error(`Cannot access user WasmImportsFactory at path: \"${userImportsFactoryPath}\".`\n + ` Ensure that your module path is relative to the project root (location of shallowest vitest config),`\n + ` and that it has a default export matching () => WebAssembly.Imports`\n );\n }\n });\n\n // Initialize Tinypool for worker management\n const pool = new Tinypool({\n filename: WORKER_PATH,\n minThreads: 1,\n maxThreads: v3PoolOptions.maxThreadsV3,\n idleTimeout: POOL_THREAD_IDLE_TIMEOUT_MS,\n isolateWorkers: false,\n workerData: {\n asPoolOptions: v3PoolOptions,\n asCoverageOptions: config.coverage as ResolvedHybridProviderOptions,\n projectRoot: config.root,\n } satisfies WorkerThreadInitData,\n });\n\n // For explicitly terminating all worker threads because of\n // ctrl+c in terminal, or bail after test failures exceed bail count\n const poolAbortController = new AbortController();\n ctx.onCancel(reason => {\n const reasonMsg = reason === 'test-failure' ? 'Bail after test failure' : reason;\n console.log(`${ASSEMBLYSCRIPT_POOL_NAME} - Aborting all tests: ${reasonMsg}`);\n poolAbortController.abort();\n });\n\n return {\n name: ASSEMBLYSCRIPT_POOL_NAME,\n\n // runs when executing vitest list\n async collectTests(specs: TestSpecification[]) {\n const isCollectTestsMode = true;\n return runTests(specs, isCollectTestsMode, pool, poolAbortController);\n },\n\n async runTests(specs: TestSpecification[], invalidates?: string[]) {\n const isCollectTestsMode = false;\n return runTests(specs, isCollectTestsMode, pool, poolAbortController, invalidates);\n },\n\n // Cleanup when shutting down\n async close() {\n debug('[Pool] AbortController called');\n poolAbortController.abort();\n \n debug('[Pool] Tinypool destroyed');\n await pool.destroy();\n\n debug('[Pool] Exiting');\n },\n };\n}\n","// default export for v3 pool\nimport { createAssemblyScriptProcessPool } from './pool/v3-process-pool.js';\nexport default createAssemblyScriptProcessPool;\n"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import "./constants-
|
|
2
|
-
import "./resolve-config-
|
|
3
|
-
import "./debug-
|
|
4
|
-
import "./vitest-file-tasks-
|
|
5
|
-
import "./vitest-tasks
|
|
1
|
+
import "./constants-DbxJ3hzg.mjs";
|
|
2
|
+
import "./resolve-config-s9gSJSMc.mjs";
|
|
3
|
+
import "./debug-DtRAL4rM.mjs";
|
|
4
|
+
import "./vitest-file-tasks-D8sOClGX.mjs";
|
|
5
|
+
import "./vitest-tasks-BZ24sghI.mjs";
|
|
6
6
|
import "./worker-rpc-channel-CZZIxtv5.mjs";
|
|
7
|
-
import { createAssemblyScriptPool } from "./pool-runner-init-
|
|
7
|
+
import { createAssemblyScriptPool } from "./pool-runner-init-BqkwQ2tk.mjs";
|
|
8
8
|
|
|
9
9
|
export { createAssemblyScriptPool };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { COVERAGE_PAYLOAD_FORMATS, POOL_ERROR_NAMES, POOL_INTERNAL_PATHS, TEST_ERROR_NAMES } from "./constants-
|
|
2
|
-
import { createPoolError, createPoolErrorFromAnyError, debug, debugOverride, getSourceCodeFrameString, toPlaintextStackFrameString, toVitestLikeStackFrameString } from "./debug-
|
|
3
|
-
import { createAfterSuiteRunMeta, createSuiteTask, createTestTask, createWebAssemblyCallSite, extractCallStack, failTest, getTaskLogLabel, isSuiteOwnFile, parseSourceMap } from "./vitest-tasks
|
|
1
|
+
import { COVERAGE_PAYLOAD_FORMATS, POOL_ERROR_NAMES, POOL_INTERNAL_PATHS, TEST_ERROR_NAMES } from "./constants-DbxJ3hzg.mjs";
|
|
2
|
+
import { createPoolError, createPoolErrorFromAnyError, debug, debugOverride, getSourceCodeFrameString, toPlaintextStackFrameString, toVitestLikeStackFrameString } from "./debug-DtRAL4rM.mjs";
|
|
3
|
+
import { createAfterSuiteRunMeta, createSuiteTask, createTestTask, createWebAssemblyCallSite, extractCallStack, failTest, getTaskLogLabel, isSuiteOwnFile, parseSourceMap } from "./vitest-tasks-BZ24sghI.mjs";
|
|
4
4
|
import { getShortFunctionName } from "./wasm-names-BFtzQCH4.mjs";
|
|
5
5
|
import { basename, resolve } from "node:path";
|
|
6
6
|
import { createBirpc } from "birpc";
|
|
@@ -368,7 +368,7 @@ async function processWASMErrorStack(rawCallStack, sourceMap, loggingPrefix) {
|
|
|
368
368
|
* Enhance reportable test error on the provided test result with source mapped stack locations
|
|
369
369
|
* and a formatted diff based on the error type
|
|
370
370
|
*/
|
|
371
|
-
async function enhanceTestError(error, task, sourceMap, valuesProvided, logPrefix,
|
|
371
|
+
async function enhanceTestError(error, task, sourceMap, valuesProvided, logPrefix, rawCallStack, diffOptions) {
|
|
372
372
|
const isAssertionFailure = error.name === TEST_ERROR_NAMES.AssertionError;
|
|
373
373
|
let expectedVsActualDiffString = "";
|
|
374
374
|
if (isAssertionFailure && valuesProvided) expectedVsActualDiffString = diff(error.expected, error.actual, diffOptions) ?? "";
|
|
@@ -384,7 +384,7 @@ async function enhanceTestError(error, task, sourceMap, valuesProvided, logPrefi
|
|
|
384
384
|
const primaryStackFrame = parsedStack[0];
|
|
385
385
|
primaryStackFrameString = toVitestLikeStackFrameString(primaryStackFrame);
|
|
386
386
|
error.stacks = parsedStack.slice(1);
|
|
387
|
-
highlightedSourceCodeFrameString = getSourceCodeFrameString(parsedSourceMap, primaryStackFrame
|
|
387
|
+
highlightedSourceCodeFrameString = getSourceCodeFrameString(parsedSourceMap, primaryStackFrame);
|
|
388
388
|
debug(`${logPrefix} - Enhanced ${error.name} error with parsed source stack`);
|
|
389
389
|
}
|
|
390
390
|
if (isAssertionFailure) error.diff = [
|
|
@@ -422,12 +422,12 @@ async function executeWASMDiscovery(binary, sourceMap, testFileBasename, poolOpt
|
|
|
422
422
|
const testError = await enhanceTestError({
|
|
423
423
|
name: TEST_ERROR_NAMES.WASMRuntimeError,
|
|
424
424
|
message: runtimeError.message
|
|
425
|
-
}, file, sourceMap, false, logPrefix,
|
|
425
|
+
}, file, sourceMap, false, logPrefix, stack, diffOptions);
|
|
426
426
|
throw createPoolError(`${SIG_MISMATCH_ERROR_MSG}\n Caused by: ${runtimeError.name}: ${runtimeError.message}`, POOL_ERROR_NAMES.PoolSyntaxError, void 0, testError);
|
|
427
427
|
}
|
|
428
428
|
if (thrownErrAny?.name === POOL_ERROR_NAMES.WASMExecutionAbortError && thrownErrAny?.cause?.name === TEST_ERROR_NAMES.WASMRuntimeError && error.rawCallStack) {
|
|
429
429
|
const thrownPoolErr = thrownErrAny;
|
|
430
|
-
thrownPoolErr.cause = await enhanceTestError(thrownPoolErr.cause, file, sourceMap, false, logPrefix,
|
|
430
|
+
thrownPoolErr.cause = await enhanceTestError(thrownPoolErr.cause, file, sourceMap, false, logPrefix, thrownPoolErr.rawCallStack, diffOptions);
|
|
431
431
|
thrownPoolErr.causeIsEnhancedError = true;
|
|
432
432
|
delete thrownPoolErr.rawCallStack;
|
|
433
433
|
throw thrownPoolErr;
|
|
@@ -476,7 +476,7 @@ async function executeWASMTest(test, compilation, testFileBasename, poolOptions,
|
|
|
476
476
|
}
|
|
477
477
|
const meta = test.meta;
|
|
478
478
|
if (meta.lastError) {
|
|
479
|
-
const enhancedError = await enhanceTestError(meta.lastError, test, compilation.sourceMap, meta.lastErrorValuesProvided ?? false, logPrefix,
|
|
479
|
+
const enhancedError = await enhanceTestError(meta.lastError, test, compilation.sourceMap, meta.lastErrorValuesProvided ?? false, logPrefix, meta.lastErrorRawCallStack, diffOptions);
|
|
480
480
|
if (test.result) if (test.result.errors) test.result.errors.push(enhancedError);
|
|
481
481
|
else test.result.errors = [enhancedError];
|
|
482
482
|
delete meta.lastError;
|
|
@@ -679,4 +679,4 @@ async function loadUserWasmImportsFactory(relativePath, projectRoot, logModule)
|
|
|
679
679
|
|
|
680
680
|
//#endregion
|
|
681
681
|
export { createRpcClient, executeWASMDiscovery, executeWASMTest, flushRpcUpdates, loadUserWasmImportsFactory, reportFileCollected, reportFileError, reportFileQueued, reportSuiteFinished, reportSuitePrepare, reportTestFinished, reportTestPrepare, reportTestRetried, reportUserConsoleLogs };
|
|
682
|
-
//# sourceMappingURL=load-user-imports-
|
|
682
|
+
//# sourceMappingURL=load-user-imports-Bx5ZlhSm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-user-imports-Bx5ZlhSm.mjs","names":[],"sources":["../src/util/assemblyscript/binding-helpers.ts","../src/wasm-executor/wasm-memory.ts","../src/wasm-executor/wasm-console.ts","../src/wasm-executor/collect-options.ts","../src/wasm-executor/wasm-imports.ts","../src/wasm-executor/wasm-errors.ts","../src/wasm-executor/index.ts","../src/pool-thread/rpc-reporter.ts","../src/pool-thread/load-user-imports.ts"],"sourcesContent":["const STRING_EXTRACT_CHUNK_SIZE = 1024 as const;\n\n/**\n * Decode an AssemblyScript string from WASM memory, using the length stored at\n * the beginning of the string.\n *\n * This approach is borrowed from AssemblyScript with changes for clarity.\n * AssemblyScript is released under the Apache 2.0 license, included here.\n * \n * When a string argument crosses the boundary to JS, we get a pointer to the\n * string data in WASM memory. WASM strings store their length in the 4 bytes\n * before the string data pointer so we know how much to read from memory.\n *\n * @param memory - WebAssembly memory instance\n * @param pointer - Pointer to the start of the string\n * @returns Decoded string\n */\nexport function liftString(\n memory: WebAssembly.Memory,\n pointer: number,\n): string | undefined {\n if (!pointer) return undefined;\n\n const unsigned = pointer >>> 0;\n \n const lengthPtr = unsigned - 4;\n\n // convert byte-based lengthPtr to uint32-based index for Uint32Array\n // with: bytes / 4 (=== bytes >>> 2) and read length\n const uint32LengthPtr = lengthPtr >>> 2;\n const byteOffsetLength = new Uint32Array(memory.buffer)[uint32LengthPtr];\n\n if (byteOffsetLength === 0) return '';\n \n // calculate end pointer, and convert byte-based start and end pointers\n // to uint16-based indexes for Uint16Array with: bytes / 2 (=== bytes >>> 1) \n const uint16EndPtr = (unsigned + byteOffsetLength!) >>> 1;\n let uint16StartPtr = unsigned >>> 1;\n\n const memoryU16 = new Uint16Array(memory.buffer);\n let string = '';\n\n // extract in 1024-character chunks to avoid hitting spread operator limit\n while (uint16EndPtr - uint16StartPtr > STRING_EXTRACT_CHUNK_SIZE) {\n string += String.fromCharCode(\n ...memoryU16.subarray(uint16StartPtr, uint16StartPtr += STRING_EXTRACT_CHUNK_SIZE)\n );\n }\n\n return string + String.fromCharCode(...memoryU16.subarray(uint16StartPtr, uint16EndPtr));\n}\n","import { liftString } from '../util/assemblyscript/binding-helpers.js';\n\n/**\n * Create a WebAssembly memory instance\n * Used for imported memory pattern (matches --importMemory flag)\n */\nexport function createMemory(initialPages: number, maximumPages?: number): WebAssembly.Memory {\n return new WebAssembly.Memory({ initial: initialPages, maximum: maximumPages });\n}\n\n/**\n * Decode AssemblyScript abort information\n *\n * Helper for handling abort() calls from AssemblyScript runtime.\n * Decodes the error message and file path from WASM memory.\n *\n * @param memory - WebAssembly memory instance\n * @param msgPtr - Pointer to error message string (or 0 if none)\n * @param filePtr - Pointer to file path string (or 0 if none)\n * @param line - Line number where abort occurred\n * @param column - Column number where abort occurred\n * @returns Decoded message and location (null if no meaningful location info)\n */\nexport function decodeAbortInfo(\n memory: WebAssembly.Memory,\n msgPtr: number,\n filePtr: number,\n line: number,\n column: number\n): { message: string; location: string | null } {\n const errorMsg = liftString(memory, msgPtr) ?? 'Unknown error'; \n const filePath = liftString(memory, filePtr);\n\n // Only include location if we have meaningful file info (not null/empty and not at 0:0)\n const hasLocation = filePath && filePath !== 'unknown' && (line !== 0 || column !== 0);\n const location = hasLocation ? `${filePath}:${line}:${column}` : null;\n\n return {\n message: errorMsg,\n location: location,\n };\n}\n","import type { AssemblyScriptConsoleLogHandler } from '../types/types.js';\nimport { liftString } from '../util/assemblyscript/binding-helpers.js';\n\nexport function createWasmConsole(\n memory: WebAssembly.Memory,\n handleLog: AssemblyScriptConsoleLogHandler\n) {\n const getMessage = (msgPtr: number, memory: WebAssembly.Memory, prefix: string = ''): string => {\n return `${prefix}${msgPtr ? liftString(memory, msgPtr) : '<no message>'}`;\n };\n\n const timersByLabel: { [label: string]: number } = {};\n\n // provides the AssemblyScript \"brower-like console\" from AS std lib\n // see https://github.com/AssemblyScript/assemblyscript/blob/v0.28.9/std/assembly/index.d.ts#L2609\n return {\n 'console.assert': <T>(assertion: T, msgPtr: number): void => {\n if (!assertion) {\n const msg = getMessage(msgPtr, memory);\n handleLog(`Assertion failed${msg ? `: ${msg}` : ''}`);\n }\n },\n 'console.log': (msgPtr: number): void => {\n handleLog(getMessage(msgPtr, memory));\n },\n 'console.debug': (msgPtr: number): void => {\n handleLog(getMessage(msgPtr, memory, 'Debug: '));\n },\n 'console.info': (msgPtr: number): void => {\n handleLog(getMessage(msgPtr, memory, 'Info: '));\n },\n 'console.warn': (msgPtr: number): void => {\n handleLog(getMessage(msgPtr, memory, 'Warning: '), true);\n },\n 'console.error': (msgPtr: number): void => {\n handleLog(getMessage(msgPtr, memory, 'Error: '), true);\n },\n 'console.time': (labelPtr?: number): void => {\n const label = labelPtr ? liftString(memory, labelPtr) ?? 'default' : 'default';\n timersByLabel[label] = performance.now();\n },\n 'console.timeLog': (labelPtr?: number): void => {\n const label = labelPtr ? liftString(memory, labelPtr) ?? 'default' : 'default';\n const start = timersByLabel[label];\n let msg = '';\n if (start === undefined) {\n msg = `Warning: No such label '${label}' for console.timeLog()`;\n } else {\n msg = `${label}: ${(performance.now() - start).toFixed(3)}ms`;\n }\n handleLog(msg);\n },\n 'console.timeEnd': (labelPtr?: number): void => {\n const label = labelPtr ? liftString(memory, labelPtr) ?? 'default' : 'default';\n const start = timersByLabel[label];\n let msg = '';\n if (start === undefined) {\n msg = `Warning: No such label '${label}' for console.timeLog()`;\n } else {\n msg = `${label}: ${(performance.now() - start).toFixed(3)}ms`;\n }\n handleLog(msg);\n delete timersByLabel[label];\n },\n\n trace(msgPtr: number, n: number, a0: any, a1: any, a2: any, a3: any): void {\n const msg = liftString(memory, msgPtr);\n const args: any[] = [a0, a1, a2, a3];\n const nArgs: any[] = n && n > 0 ? args.slice(0, n) : args;\n\n console.trace(`WASM Trace:${msg ? ` ${msg}` : ''}`, ...nArgs);\n },\n };\n}\n","import { AssemblyScriptTestOptions } from '../types/types.js';\n\nconst TEST_OPTION_UNDEFINED: number = -1;\nconst TEST_OPTION_TRUE: number = 1;\n\nexport function mergeAssemblyScriptTestOptions(\n baseOptions: AssemblyScriptTestOptions,\n timeout: number,\n retry: number,\n skip: number,\n only: number,\n fails: number,\n): AssemblyScriptTestOptions {\n const options: AssemblyScriptTestOptions = { ...baseOptions };\n \n // numerical options\n if (timeout > TEST_OPTION_UNDEFINED) {\n options.timeout = timeout;\n }\n if (retry > TEST_OPTION_UNDEFINED) {\n options.retry = retry;\n }\n\n // boolean options\n if (skip > TEST_OPTION_UNDEFINED) {\n options.skip = skip === TEST_OPTION_TRUE ? true : false;\n }\n if (only > TEST_OPTION_UNDEFINED) {\n options.only = only === TEST_OPTION_TRUE ? true : false;\n }\n if (fails > TEST_OPTION_UNDEFINED) {\n options.fails = fails === TEST_OPTION_TRUE ? true : false;\n }\n\n return options;\n}\n","import type { File, Suite, Test } from '@vitest/runner/types';\n\nimport type {\n AssemblyScriptConsoleLogHandler,\n AssemblyScriptSuiteTaskMeta,\n AssemblyScriptTestError,\n AssemblyScriptTestTaskMeta,\n FailedAssertion,\n WasmImportsFactory,\n} from '../types/types.js';\nimport { AS_POOL_WASM_IMPORTS_ENV, POOL_ERROR_NAMES, TEST_ERROR_NAMES } from '../types/constants.js';\nimport { debug } from '../util/debug.js';\nimport { createPoolError, createPoolErrorFromAnyError } from '../util/pool-errors.js';\nimport { liftString } from '../util/assemblyscript/binding-helpers.js';\nimport { extractCallStack } from './source-maps.js';\nimport { decodeAbortInfo } from './wasm-memory.js';\nimport { createWasmConsole } from './wasm-console.js';\nimport { mergeAssemblyScriptTestOptions } from './collect-options.js';\nimport { createSuiteTask, createTestTask, failTest } from '../util/vitest-tasks.js';\n\nfunction createUserWasmImports(\n createWasmImports: WasmImportsFactory | undefined,\n memory: WebAssembly.Memory,\n module: WebAssembly.Module,\n logPrefix: string\n) {\n let userEnvImports: WebAssembly.ModuleImports | undefined;\n let userCustomEnvImports: WebAssembly.Imports | undefined;\n\n if (createWasmImports) {\n try {\n const start = performance.now();\n const userImports: WebAssembly.Imports = createWasmImports({\n memory,\n module,\n utils: {\n liftString: (stringPtr: number) => liftString(memory, stringPtr)\n }\n });\n debug(`${logPrefix} Created user WASM imports for test execution in ${(performance.now() - start).toFixed(2)} ms`);\n\n userEnvImports = userImports?.env;\n \n if (userEnvImports) {\n userCustomEnvImports = { ...userImports };\n delete userCustomEnvImports.env;\n }\n } catch (error) {\n throw createPoolErrorFromAnyError(\n `Error creating user WASM Imports`,\n POOL_ERROR_NAMES.PoolConfigError,\n error\n );\n }\n }\n\n return { userEnvImports, userCustomEnvImports };\n}\n\n/**\n * Create import object for test discovery\n */\nexport function createDiscoveryImports(\n memory: WebAssembly.Memory,\n module: WebAssembly.Module,\n file: File,\n handleLog: AssemblyScriptConsoleLogHandler,\n logPrefix: string,\n coverageMemory?: WebAssembly.Memory,\n createWasmImports?: WasmImportsFactory,\n): WebAssembly.Imports {\n const suiteStack: Suite[] = [file];\n\n const {\n userEnvImports,\n userCustomEnvImports\n } = createUserWasmImports(createWasmImports, memory, module, logPrefix);\n \n return {\n env: {\n // users can choose to hide these with their own\n ...createWasmConsole(memory, handleLog),\n\n // user imports for \"env\"\n ...(userEnvImports ?? {}),\n\n memory,\n\n // handle runtime aborts, which are always unexpected during discovery\n abort(msgPtr: number, filePtr: number, line: number, column: number) {\n const { message, location } = decodeAbortInfo(memory, msgPtr, filePtr, line, column);\n const msgAtLoc = `${message}${location ? ` at ${location}` : ''}`;\n \n debug(`${logPrefix} - Unexpected abort during test discovery: ${msgAtLoc}`);\n\n // Create error to capture V8 stack trace and extract V8 call stack before throwing.\n // This gives us WAT line:column positions that can be mapped to AS source\n const rawCallStack = extractCallStack(new Error());\n\n // Send the test error that we will report to vitest in the PoolError's `cause` field.\n // The rawCallStack will be enahnced and deleted by the executor, with the parsed result\n // added to the reported test error.\n const testError: AssemblyScriptTestError = {\n message,\n name: TEST_ERROR_NAMES.WASMRuntimeError,\n };\n\n throw createPoolError(\n msgAtLoc,\n POOL_ERROR_NAMES.WASMExecutionAbortError,\n undefined, // stack\n testError, // cause\n rawCallStack\n );\n },\n },\n\n [AS_POOL_WASM_IMPORTS_ENV]: {\n\n ...(coverageMemory ? { __coverage_memory: coverageMemory } : {}),\n\n // stubs during discovery\n __assertion_pass() {},\n __assertion_fail() {},\n __expect_throw() {},\n __end_expect_throw() {},\n\n __begin_register_suite(\n namePtr: number,\n timeout: number,\n retry: number,\n skip: number,\n only: number,\n fails: number,\n ) {\n const parentSuite = suiteStack[suiteStack.length - 1]!;\n const defaultTestOptions = (parentSuite.meta as AssemblyScriptSuiteTaskMeta).defaultTestOptions;\n const suiteName = liftString(memory, namePtr) ?? 'unknown suite';\n const options = mergeAssemblyScriptTestOptions(defaultTestOptions, timeout, retry, skip, only, fails);\n const suite = createSuiteTask(suiteName, file, parentSuite, options);\n suiteStack.push(suite);\n\n debug(\n `${logPrefix} - Registering Suite \"${suite.name}\" | timeout: ${options.timeout} ms | retry: ${options.retry}`\n + ` | skip: ${options.skip} | only: ${options.only} | fails: ${options.fails} `\n + ` | parent: \"${suite.suite?.name}\" (parent idx: ${(suite.meta as AssemblyScriptSuiteTaskMeta).idxInParentTasks})`\n );\n },\n \n __end_register_suite(_namePtr: number) {\n const suite = suiteStack.pop();\n\n debug(\n `${logPrefix} - Registered Suite \"${suite?.name}\" | ${suite?.tasks.length} top-level tasks | mode: \"${suite?.mode}\"`\n + ` | parent: \"${suite?.suite?.name}\" (parent idx: ${(suite?.meta as AssemblyScriptSuiteTaskMeta)?.idxInParentTasks})`\n );\n },\n\n // called by test() to register test names and function indices\n __register_test(\n namePtr: number,\n fnIndex: number,\n timeout: number,\n retry: number,\n skip: number,\n only: number,\n fails: number,\n ) {\n const parentSuite = suiteStack[suiteStack.length - 1]!;\n const defaultTestOptions = (parentSuite.meta as AssemblyScriptSuiteTaskMeta).defaultTestOptions;\n const testName = liftString(memory, namePtr) ?? 'unknown test';\n const options = mergeAssemblyScriptTestOptions(defaultTestOptions, timeout, retry, skip, only, fails);\n const test = createTestTask(testName, fnIndex, file, parentSuite, options);\n \n debug(`${logPrefix} - Registered test \"${test.name}\" | mode (pre-interp): \"${test.mode}\"`\n + ` | fnIndex ${fnIndex} | timeout: ${options.timeout} ms | retry: ${options.retry} | skip: ${options.skip}`\n + ` | only: ${options.only} | fails: ${options.fails} | suite: \"${test.suite?.name}\"`\n + ` (parent idx: ${(test.meta as AssemblyScriptTestTaskMeta).idxInParentTasks})`\n );\n },\n },\n\n // user imports for any other environments they defined\n ...(userCustomEnvImports ?? {}),\n };\n}\n\n/**\n * Create import object for test execution\n *\n * Used during test execution to capture test results / assertions, and to handle\n * runtime aborts as expected cases for test execution by capturing the error on the test meta.\n */\nexport function createTestExecutionImports(\n memory: WebAssembly.Memory,\n module: WebAssembly.Module,\n test: Test,\n handleLog: AssemblyScriptConsoleLogHandler,\n logPrefix: string,\n coverageMemory?: WebAssembly.Memory,\n createWasmImports?: WasmImportsFactory,\n): { imports: WebAssembly.Imports; provideFunctionTable: (table: WebAssembly.Table) => void; } {\n // execution imports are created per-test, so these represent per-test state\n let isExpectingError: boolean = false;\n let expectedErrorMsgStr: string | undefined;\n let wasmFunctionTable: WebAssembly.Table | undefined;\n\n const {\n userEnvImports,\n userCustomEnvImports\n } = createUserWasmImports(createWasmImports, memory, module, logPrefix);\n\n const imports = {\n env: {\n // users can choose to hide these with their own\n ...createWasmConsole(memory, handleLog),\n\n // user imports for \"env\"\n ...(userEnvImports ?? {}),\n\n memory,\n\n abort(msgPtr: number, filePtr: number, line: number, column: number) {\n const { message, location } = decodeAbortInfo(memory, msgPtr, filePtr, line, column);\n const msgAtLoc = `${message}${location ? ` at ${location}` : ''}`;\n \n debug(`${logPrefix} - Handling test execution abort: ${msgAtLoc}`);\n\n let failureMessage = message;\n\n if (isExpectingError) {\n if (!expectedErrorMsgStr || message.includes(expectedErrorMsgStr)) {\n (test.meta as AssemblyScriptTestTaskMeta).assertionsPassedCount++;\n \n debug(`${logPrefix} - Thrown error matches expected - assertion passes`);\n\n throw createPoolError(\n `AssemblyScript abort() import called for expected error throw in test \"${test.name}\"`,\n POOL_ERROR_NAMES.WASMExecutionAbortError\n );\n } else {\n failureMessage = `expected function to throw \"${expectedErrorMsgStr}\" error but received \"${message}\"`;\n\n (test.meta as AssemblyScriptTestTaskMeta).assertionsFailed.push({\n message: failureMessage,\n typeName: 'Error',\n valuesProvided: true,\n actual: message,\n expected: expectedErrorMsgStr\n } satisfies FailedAssertion);\n\n const errStr = `Thrown error does not match expected | Expected: \"${expectedErrorMsgStr}\" | Actual: \"${message}\"`\n debug(`${logPrefix} - Assertion failed: ${errStr}`);\n }\n }\n\n // Create error to capture V8 stack trace and extract V8 call stack before throwing.\n // This gives us WAT line:column positions that can be mapped to AS source\n const capturedError = new Error();\n\n failTest(test, failureMessage, capturedError, logPrefix);\n\n // Must throw here to halt WASM execution on an assertion or runtime failure for this test.\n // This will be caught by the executor and reported as an appropriate test error\n // using test.meta.lastError value set in failTest()\n throw createPoolError(\n `AssemblyScript abort() import called during test execution for ${test.name}`,\n POOL_ERROR_NAMES.WASMExecutionAbortError,\n );\n },\n },\n\n [AS_POOL_WASM_IMPORTS_ENV]: {\n \n ...(coverageMemory ? { __coverage_memory: coverageMemory } : {}),\n\n // stubs during execution\n __register_test() {},\n __begin_register_suite() {},\n __end_register_suite() {},\n\n __assertion_pass() {\n (test.meta as AssemblyScriptTestTaskMeta).assertionsPassedCount++;\n },\n\n __assertion_fail(msgPtr: number, typeNamePtr: number, valuesProvided: boolean, actualPtr?: number, expectedPtr?: number) {\n const errorMsg = liftString(memory, msgPtr);\n const assertionValueType = liftString(memory, typeNamePtr);\n let actual: string | undefined;\n let expected: string | undefined;\n \n const assertionFailure: FailedAssertion = {\n message: errorMsg,\n typeName: assertionValueType,\n valuesProvided: Boolean(valuesProvided)\n };\n \n if (valuesProvided && actualPtr && expectedPtr) {\n assertionFailure.actual = liftString(memory, actualPtr);\n assertionFailure.expected = liftString(memory, expectedPtr);\n }\n \n (test.meta as AssemblyScriptTestTaskMeta).assertionsFailed.push(assertionFailure);\n \n const valuesMsg = valuesProvided ? ` | Value Type: ${assertionValueType}`\n + ` | Expected: \\`${expected !== undefined ? expected : ''}\\` | Actual: \\`${actual !== undefined ? actual : ''}\\``\n : '';\n debug(`${logPrefix} - Assertion failed: ${errorMsg}${valuesMsg}`);\n },\n\n __expect_throw(fnIndex: number, expectedErrorMsgPtr?: number) {\n isExpectingError = true;\n if (expectedErrorMsgPtr) {\n expectedErrorMsgStr = liftString(memory, expectedErrorMsgPtr);\n }\n\n debug(`${logPrefix} - Registered expected error throw: ${expectedErrorMsgStr !== undefined\n ? `\"${expectedErrorMsgStr}\"` : '<any>'}`\n );\n\n if (wasmFunctionTable && typeof wasmFunctionTable.get === 'function') {\n const fn = wasmFunctionTable.get(fnIndex);\n if (!fn) {\n throw createPoolError(\n `Could not access function (fnPtr ${fnIndex}) which is expected to throw in test \"${test.name}\"`,\n POOL_ERROR_NAMES.WASMExecutionHarnessError,\n );\n }\n\n // successful:\n // - throws in WASM, calls abort handler\n // - abort handler confirms error matches expected, does NOT fail test, halts execution with WASMExecutionAbortError\n // - executor catches WASMExecutionAbortError as 'known' and proceeds to process & report passed test\n // failure (wrong error):\n // - throws in WASM, calls abort handler\n // - abort handler confirms error matches mismatch, failTest packages up an appropriate test error\n // - abort handler halts execution with WASMExecutionAbortError containing test error\n // - executor catches WASMExecutionAbortError as 'known' and proceeds to process & report test error\n // failure (no error):\n // - does NOT throw in WASM\n // - WASM continues executing and calls __end_expect_throw\n // - __end_expect_throw sees it is STILL expecting an error, failTest packages up an appropriate test error\n // - __end_expect_throw halts execution with WASMExecutionAbortError containing test error\n // - executor catches WASMExecutionAbortError as 'known' and proceeds to process & report test error\n debug(`${logPrefix} - Calling function (idx ${fnIndex})`);\n fn();\n } else {\n throw createPoolError(\n `Could not access WASM function table to call function expected to throw in test \"${test.name}\"`,\n POOL_ERROR_NAMES.WASMExecutionHarnessError,\n );\n }\n },\n\n __end_expect_throw() {\n if (isExpectingError) {\n const isAnyErr: boolean = !!expectedErrorMsgStr;\n const failureMessage = `expected function to throw ${isAnyErr ?\n `\"${expectedErrorMsgStr}\"` : 'any'\n } error - did not throw`;\n\n (test.meta as AssemblyScriptTestTaskMeta).assertionsFailed.push({\n message: failureMessage,\n typeName: 'Error',\n valuesProvided: !isAnyErr,\n actual: undefined,\n expected: expectedErrorMsgStr\n } satisfies FailedAssertion);\n\n const errStr = `Expected thrown error but got none | Expected: \"${expectedErrorMsgStr}\"`\n debug(`${logPrefix} - Assertion failed: ${errStr}`);\n\n failTest(test, failureMessage, new Error(), logPrefix);\n\n // Must throw here to halt WASM execution on an assertion or runtime failure for this test.\n // This will be caught by the executor and reported as an appropriate test error\n // using test.meta.lastError value set in failTest()\n throw createPoolError(\n `AssemblyScript __end_expect_throw() import called during test execution for ${test.name}`,\n POOL_ERROR_NAMES.WASMExecutionAbortError,\n );\n }\n },\n },\n\n // user imports for any other environments they defined\n ...(userCustomEnvImports ?? {}),\n };\n\n return {\n imports,\n provideFunctionTable: (table: WebAssembly.Table) => {\n debug(`${logPrefix} - Got WASM function table | length: ${table.length}`);\n wasmFunctionTable = table;\n },\n };\n}\n","/**\n * Error Enhancement and Source Mapping\n *\n * This module handles mapping WASM errors to AssemblyScript source locations\n * using source maps. It enhances error messages and stack traces with accurate\n * file:line:column information for better developer experience.\n */\n\nimport { type ParsedStack } from '@vitest/utils';\nimport { diff, type SerializedDiffOptions } from '@vitest/utils/diff';\nimport type { Test, Suite } from '@vitest/runner/types';\nimport { type RawSourceMap, SourceMapConsumer } from 'source-map';\n\nimport type { AssemblyScriptTestError, WebAssemblyCallSite } from '../types/types.js';\nimport { debug } from '../util/debug.js';\nimport { POOL_INTERNAL_PATHS, TEST_ERROR_NAMES } from '../types/constants.js';\nimport { createWebAssemblyCallSite, parseSourceMap } from './source-maps.js';\nimport { getShortFunctionName } from './wasm-names.js';\nimport {\n getSourceCodeFrameString,\n toPlaintextStackFrameString,\n toVitestLikeStackFrameString,\n} from '../util/test-error-formatting.js';\n\nconst POOL_INTERNAL_PATHS_SET = new Set(POOL_INTERNAL_PATHS);\n\nasync function sourceMapRawCallStack(\n rawCallStack: NodeJS.CallSite[],\n sourceMap: RawSourceMap,\n loggingPrefix: string,\n): Promise<WebAssemblyCallSite[]> {\n const mappedStack: WebAssemblyCallSite[] = [];\n\n if (!rawCallStack || rawCallStack.length === 0) {\n return mappedStack;\n }\n\n const sourceMapConsumer = await new SourceMapConsumer(sourceMap);\n \n // map stack call sites from raw WASM locations to source locations \n rawCallStack.forEach(callSite => {\n const mappedCallSite = createWebAssemblyCallSite(callSite, sourceMapConsumer, loggingPrefix);\n if (mappedCallSite) {\n mappedStack.push(mappedCallSite);\n }\n }); \n \n sourceMapConsumer.destroy();\n\n return mappedStack;\n}\n\n// Parse source-mapped stack array to Vitest TestError reporting format\nfunction parseMappedStack(mappedStack: WebAssemblyCallSite[]): ParsedStack[] {\n return mappedStack\n // filter out frames for internal assertion framework calls\n // (e.g. assert(), assertEqual(), etc) by known location, for more concise/meaningful error stack report\n .filter(frame => !(POOL_INTERNAL_PATHS_SET.has(frame.location.filePath)))\n \n // map to format that vitest reporter can display\n .map(frame => ({\n method: getShortFunctionName(frame.functionName),\n file: frame.location.filePath,\n line: frame.location.line,\n column: frame.location.column + 1, // Convert from raw 0-indexed to 1-indexed for display\n }));\n}\n\nexport async function processWASMErrorStack(\n rawCallStack: NodeJS.CallSite[],\n sourceMap: string,\n loggingPrefix: string,\n): Promise<{ parsedStack: ParsedStack[], parsedSourceMap: RawSourceMap }> {\n const sourceMapObj = parseSourceMap(sourceMap);\n\n // map stack call sites from WASM locations to source code locations \n const sourceMappedStack = await sourceMapRawCallStack(rawCallStack, sourceMapObj, loggingPrefix);\n\n debug(`${loggingPrefix} - Mapped ${rawCallStack.length} call sites to ${sourceMappedStack.length} source locations`);\n\n return {\n parsedStack: parseMappedStack(sourceMappedStack),\n parsedSourceMap: sourceMapObj,\n };\n}\n\n/**\n * Enhance reportable test error on the provided test result with source mapped stack locations\n * and a formatted diff based on the error type\n */\nexport async function enhanceTestError(\n error: AssemblyScriptTestError,\n task: Test | Suite,\n sourceMap: string,\n valuesProvided: boolean,\n logPrefix: string,\n rawCallStack?: NodeJS.CallSite[],\n diffOptions?: SerializedDiffOptions\n): Promise<AssemblyScriptTestError> {\n const isAssertionFailure = error.name === TEST_ERROR_NAMES.AssertionError;\n let expectedVsActualDiffString: string = '';\n\n if (isAssertionFailure && valuesProvided) {\n // remain undefined if there were no expected/actual values provided with the assertion failure\n expectedVsActualDiffString = diff(error.expected, error.actual, diffOptions) ?? '';\n }\n\n // if there's no stack to map, set the expected vs actual diff (if any) and return\n if (!rawCallStack || rawCallStack.length === 0) {\n error.diff = expectedVsActualDiffString;\n\n // stack is used by vitest for error deduplication, so make sure it is set\n error.stack = `${task.name} - ${error.message}`;\n\n return error;\n }\n\n // map stack call sites from WASM locations to source locations\n const { parsedStack, parsedSourceMap } = await processWASMErrorStack(rawCallStack, sourceMap, logPrefix);\n \n // build additional strings to add to test error's `diff` field based on parsed stack contents\n let primaryStackFrameString: string | undefined;\n let highlightedSourceCodeFrameString: string | undefined;\n \n if (parsedStack.length > 0) {\n const primaryStackFrame = parsedStack[0]!;\n \n primaryStackFrameString = toVitestLikeStackFrameString(primaryStackFrame);\n \n // Test error is set to rest of the stack without the first frame.\n // Vitest will report the ParsedError[] on TestError.stacks below the diff we set.\n error.stacks = parsedStack.slice(1);\n\n // get source code diff from source map source content\n highlightedSourceCodeFrameString = getSourceCodeFrameString(parsedSourceMap, primaryStackFrame);\n\n debug(`${logPrefix} - Enhanced ${error.name} error with parsed source stack`);\n }\n\n // Use the diff field as our way to show all output (other than result.error.stacks)\n if (isAssertionFailure) {\n error.diff = [\n `${expectedVsActualDiffString}${expectedVsActualDiffString ? '\\n\\n' : ''}`,\n `${primaryStackFrameString}\\n`,\n `${highlightedSourceCodeFrameString}`,\n ].join('');\n } else {\n error.diff = [\n `${primaryStackFrameString}\\n`,\n `${highlightedSourceCodeFrameString}`,\n ].join('');\n }\n\n // stack is used by vitest for error deduplication, so make sure it is set\n error.stack = parsedStack.map(toPlaintextStackFrameString).join('\\n');\n \n debug(`[${logPrefix} - Enhanced ${error.name} error with diffs`);\n\n return error;\n}\n","import { basename } from 'node:path';\nimport type { SerializedDiffOptions } from '@vitest/utils/diff';\nimport type { File, Test } from '@vitest/runner/types';\n\nimport type {\n AssemblyScriptConsoleLogHandler,\n AssemblyScriptPoolError,\n AssemblyScriptTestError,\n AssemblyScriptTestTaskMeta,\n CoverageData,\n ResolvedAssemblyScriptPoolOptions,\n ThreadImports,\n WASMCompilation,\n WASMExecutorPerfTimings,\n} from '../types/types.js';\nimport { POOL_ERROR_NAMES, TEST_ERROR_NAMES } from '../types/constants.js';\nimport { debug, debugOverride } from '../util/debug.js';\nimport { createMemory } from './wasm-memory.js';\nimport { createDiscoveryImports, createTestExecutionImports } from './wasm-imports.js';\nimport { enhanceTestError } from './wasm-errors.js';\nimport { createPoolError, createPoolErrorFromAnyError } from '../util/pool-errors.js';\nimport { getTaskLogLabel } from '../util/vitest-tasks.js';\nimport { extractCallStack } from './source-maps.js';\n\nconst SIG_MISMATCH_ERROR_MSG = `WASM RuntimeError indicates function signature type mismatch during test suite collection.`\n + ` This is likely caused by passing a non-void callback to expect().`\n + ` Use braces to ensure it returns void e.g. \\`expect(() => { failingFunction(); }).toThrowError()\\`.`\n + ` Look for the failing expect() within the describe() block indicated in the stack trace.`;\n\nfunction createExecutorPoolError(\n testFileBasename: string,\n context: string,\n reason: string,\n cause?: any,\n): AssemblyScriptPoolError {\n return createPoolError(\n `${testFileBasename} - ${context} WASM executor: ${reason}`,\n POOL_ERROR_NAMES.WASMExecutionHarnessError,\n undefined,\n cause\n );\n}\n\n/**\n * Discover tests via test() and suites via describe() registration calls\n */\nexport async function executeWASMDiscovery(\n binary: Uint8Array,\n sourceMap: string,\n testFileBasename: string,\n poolOptions: ResolvedAssemblyScriptPoolOptions,\n isBinaryInstrumented: boolean,\n handleLog: AssemblyScriptConsoleLogHandler,\n file: File,\n moduleLabel: string,\n threadImports: ThreadImports,\n diffOptions?: SerializedDiffOptions,\n): Promise<void> {\n const base = basename(file.filepath);\n const logPrefix = `[${moduleLabel} Exec] ${getTaskLogLabel(base, file)}`;\n const wasmModule = await WebAssembly.compile(binary as BufferSource);\n const memory = createMemory(poolOptions.testMemoryPagesInitial, poolOptions.testMemoryPagesMax);\n\n // Create coverage memory matching instrumentation expections (from user config).\n // While this memory will not be used, discovery instantiates the same binary,\n // and WebAssembly.Instance will throw if the expected memory sizes don't match\n const coverageMemory = isBinaryInstrumented ?\n createMemory(poolOptions.coverageMemoryPagesInitial, poolOptions.coverageMemoryPagesMax)\n : undefined;\n\n const importObject = createDiscoveryImports(\n memory,\n wasmModule,\n file,\n handleLog,\n logPrefix,\n coverageMemory,\n threadImports.createUserWasmImports\n );\n\n // Instantiate WASM module\n const instance = new WebAssembly.Instance(wasmModule, importObject);\n const exports = instance.exports as Record<string, unknown>;\n\n // Call _start to run top-level test() and describe()\n if (typeof exports._start === 'function') {\n try {\n exports._start();\n } catch (error) {\n const thrownErrAny: any = error as any;\n\n const isFunctionSignatureMismatch: boolean = error instanceof WebAssembly.RuntimeError\n && thrownErrAny?.message.includes('null function or function signature mismatch');\n if (isFunctionSignatureMismatch) {\n const runtimeError = error as WebAssembly.RuntimeError;\n const stack = extractCallStack(runtimeError);\n const testError = await enhanceTestError(\n {\n name: TEST_ERROR_NAMES.WASMRuntimeError,\n message: runtimeError.message\n } satisfies AssemblyScriptTestError,\n file,\n sourceMap,\n false,\n logPrefix,\n stack,\n diffOptions\n );\n\n throw createPoolError(\n `${SIG_MISMATCH_ERROR_MSG}\\n Caused by: ${runtimeError.name}: ${runtimeError.message}`,\n POOL_ERROR_NAMES.PoolSyntaxError,\n undefined,\n testError\n );\n }\n\n // Check to see if error came from the discovery abort() handler\n // For discovery abort, test error is set on PoolError's `cause`,\n // and the raw call stack is on PoolError's `rawCallStack`\n if (\n thrownErrAny?.name === POOL_ERROR_NAMES.WASMExecutionAbortError\n && thrownErrAny?.cause?.name === TEST_ERROR_NAMES.WASMRuntimeError\n && (error as AssemblyScriptPoolError).rawCallStack\n ) {\n const thrownPoolErr = thrownErrAny as AssemblyScriptPoolError;\n thrownPoolErr.cause = await enhanceTestError(\n thrownPoolErr.cause as AssemblyScriptTestError,\n file,\n sourceMap,\n false,\n logPrefix,\n thrownPoolErr.rawCallStack,\n diffOptions\n );\n thrownPoolErr.causeIsEnhancedError = true;\n\n // delete the raw stack so vitest doesn't complain about unexpected error values\n delete thrownPoolErr.rawCallStack;\n\n // rethrow it with the enhanced test error\n throw thrownPoolErr;\n } else {\n throw createPoolErrorFromAnyError(\n `${testFileBasename} - Unexpected discovery error`,\n POOL_ERROR_NAMES.WASMExecutionHarnessError,\n error\n );\n }\n }\n } else {\n throw createExecutorPoolError(testFileBasename, 'discoverTests', 'no _start() export');\n }\n\n debug(`${logPrefix} - Discovered ${file.tasks.length} top-level tasks`);\n return;\n}\n\n/**\n * Execute a single test with crash isolation\n */\nexport async function executeWASMTest(\n test: Test,\n compilation: WASMCompilation,\n testFileBasename: string,\n poolOptions: ResolvedAssemblyScriptPoolOptions,\n collectCoverage: boolean,\n handleLog: AssemblyScriptConsoleLogHandler,\n moduleLabel: string,\n threadImports: ThreadImports,\n diffOptions?: SerializedDiffOptions,\n): Promise<{ test: Test, testTimings: WASMExecutorPerfTimings }> {\n const testTimings: WASMExecutorPerfTimings = {\n fnInit: performance.now(),\n execStart: 0,\n execEnd: 0,\n fnfinal: 0\n };\n const base = basename(test.file.filepath);\n const fullModuleLabel = `${moduleLabel} Exec`;\n const taskLabel = getTaskLogLabel(base, test);\n const logPrefix = `[${fullModuleLabel}] ${taskLabel}`;\n\n function covDebug(...args: any[]): void {\n if (poolOptions.debugCoverageExtract) {\n debugOverride(...args);\n }\n };\n\n // Compile the binary to usable WASM module\n const wasmModule = await WebAssembly.compile(compilation.binary as BufferSource);\n\n // Create fresh memory for this test instance\n const memory = createMemory(poolOptions.testMemoryPagesInitial, poolOptions.testMemoryPagesMax);\n\n // Create coverage memory if collecting coverage (instrumented binary)\n const coverageMemory = collectCoverage ?\n createMemory(poolOptions.coverageMemoryPagesInitial, poolOptions.coverageMemoryPagesMax)\n : undefined;\n\n // Create import object with pool-side functions for capturing test execution results\n const { imports, provideFunctionTable } = createTestExecutionImports(\n memory,\n wasmModule,\n test,\n handleLog,\n logPrefix,\n coverageMemory,\n threadImports.createUserWasmImports\n );\n\n // Instantiate fresh WASM instance for this test\n const instance = new WebAssembly.Instance(wasmModule, imports);\n const exports = instance.exports as Record<string, unknown>;\n\n // Func table accessable because we're using the AS compiler --exportTable flag\n const table = exports.table as WebAssembly.Table | undefined;\n \n // allow imports to access table\n if (table && typeof table.get === 'function') {\n provideFunctionTable(table);\n }\n\n // Call _start to run top-level code. Test registration is stubbed/noop duing execution,\n // but this call is still needed to initialize any user-defined globals / other top level code.\n if (typeof exports._start === 'function') {\n // Not explicitly handling with try-catch here because failures in _start should be\n // caught during discovery and source-mapped. If this somehow fails, the worker still catches it.\n exports._start();\n } else {\n throw createExecutorPoolError(testFileBasename, 'executeWASMTest', 'no _start() export');\n }\n\n let testFn: (() => void) | null | undefined;\n \n if (table && typeof table.get === 'function') {\n const idx = (test.meta as AssemblyScriptTestTaskMeta).fnIndex;\n testFn = table.get(idx) as (() => void) | null;\n\n if (!testFn) {\n throw createExecutorPoolError(\n testFileBasename,\n 'executeWASMTest',\n `Test function at index ${idx} not found in function table`\n );\n }\n } else {\n throw createExecutorPoolError(\n testFileBasename,\n 'executeWASMTest',\n 'Function table not found in WASM exports (missing --exportTable flag?)'\n );\n }\n\n // try-catch to ensure we capture known test errors to report\n // as AssemblyScriptTestErrors to vitest\n try {\n // Execute this test\n testTimings.execStart = performance.now();\n testFn();\n testTimings.execEnd = performance.now();\n\n // If we reach here, test passed, i.e. No abort occurred.\n // Proceed below to prepare the test result\n } catch (error) {\n testTimings.execEnd = performance.now();\n\n const thrownErrAny = error as any;\n // If this is NOT a WASMExecutionAbort error, it means it did NOT originate from the\n // wasm abort() import and is unexpected, so we throw as a PoolError.\n //\n // Otherwise this IS a WASMExecutionAbort error and the wasm abort() import threw it as a\n // known test error (assertion or wasm runtime), so we continue to prepare the test result \n const isUnexpectedError = thrownErrAny?.name !== POOL_ERROR_NAMES.WASMExecutionAbortError;\n\n if (isUnexpectedError) {\n throw createExecutorPoolError(\n testFileBasename,\n 'executeWASMTest',\n `Unexpected execution error: ${error instanceof Error ? `${error.name}: ${error.message}` : String(error)}`,\n (error as any)?.cause\n );\n }\n }\n\n const meta = test.meta as AssemblyScriptTestTaskMeta;\n \n // If error is present, apply source mapping to make stack locations\n // useful, and add nicely-formatted diffs for reporting through vitest\n if (meta.lastError) {\n const enhancedError = await enhanceTestError(\n meta.lastError,\n test,\n compilation.sourceMap,\n meta.lastErrorValuesProvided ?? false,\n logPrefix,\n meta.lastErrorRawCallStack,\n diffOptions\n );\n\n if (test.result) {\n if (test.result.errors) {\n test.result.errors.push(enhancedError);\n } else {\n test.result.errors = [enhancedError];\n }\n }\n\n delete meta.lastError;\n delete meta.lastErrorValuesProvided;\n delete meta.lastErrorRawCallStack;\n }\n\n // Extract coverage hits from coverage memory\n if (collectCoverage && compilation.debugInfo) {\n if (!coverageMemory) {\n throw createExecutorPoolError(\n testFileBasename,\n 'executeWASMTest',\n 'Coverage memory not created despite collectCoverage=true'\n );\n }\n\n const coverage: CoverageData = {\n hitCountsByFileAndPosition: {},\n };\n\n // Read counters from coverage memory\n const extractedHitCounters = new Uint32Array(coverageMemory.buffer, 0, compilation.debugInfo.instrumentedFunctionCount);\n covDebug(`${logPrefix} - Read coverage memory for ${compilation.debugInfo.instrumentedFunctionCount} instrumented functions`);\n\n // Iterate all instrumented functions and build coverage data with hit counts extracted from coverage memory\n let functionsHit = 0;\n for (const [filePath, debugFunctions] of Object.entries(compilation.debugInfo.functionsByFileAndPosition)) {\n if (!coverage.hitCountsByFileAndPosition[filePath]) {\n coverage.hitCountsByFileAndPosition[filePath] = {};\n covDebug(`${logPrefix} - Extracting hits for source file \"${filePath}\"`);\n }\n\n for (const [positionKey, funcInfos] of Object.entries(debugFunctions)) {\n // Sum hit counts across all functions at this position (multiple for generic monomorphizations)\n let positionHitCount = 0;\n for (const funcInfo of funcInfos) {\n if (funcInfo.coverageMemoryIndex === undefined) {\n debug(`${logPrefix} - WARNING: NO COVERAGE MEMORY INDEX`\n + ` - func \"${funcInfo.name}\" (${positionKey}) Skipping hit extraction`\n );\n continue;\n }\n\n const hitCount = extractedHitCounters[funcInfo.coverageMemoryIndex] ?? 0;\n covDebug(`${logPrefix} - func \"${funcInfo.name}\" (${positionKey}) `\n + `[idx: ${funcInfo.coverageMemoryIndex}]: ${hitCount} hits`\n );\n positionHitCount += hitCount;\n }\n\n coverage.hitCountsByFileAndPosition[filePath][positionKey] = positionHitCount;\n\n if (positionHitCount > 0) {\n functionsHit++;\n }\n }\n }\n\n meta.coverageData = coverage;\n debug(`${logPrefix} - Extracted coverage data | ${functionsHit} functions hit`);\n }\n\n testTimings.fnfinal = performance.now();\n\n return { test, testTimings };\n}\n","/**\n * RPC Reporting Helpers\n *\n * This module provides helper functions for reporting test lifecycle events\n * to Vitest via RPC. All helpers are designed to be composable and reusable.\n */\n\nimport type { MessagePort } from 'node:worker_threads';\nimport { createBirpc } from 'birpc';\nimport type { RunnerRPC, RuntimeRPC, UserConsoleLog } from 'vitest';\nimport type {\n File,\n Suite,\n Test,\n Task,\n TaskEventPack, \n TaskResultPack,\n CancelReason,\n} from '@vitest/runner/types';\n\nimport type {\n AssemblyScriptConsoleLog,\n AssemblyScriptCoveragePayload,\n AssemblyScriptSuiteTaskMeta,\n VitestVersion,\n WorkerRPC\n} from '../types/types.js';\nimport { debug } from '../util/debug.js';\nimport { COVERAGE_PAYLOAD_FORMATS } from '../types/constants.js';\nimport {\n createAfterSuiteRunMeta,\n getTaskLogLabel,\n isSuiteOwnFile\n} from '../util/vitest-tasks.js';\n\n// ============================================================================\n// RPC Client Factory\n// ============================================================================\n\n/** Create RPC client from MessagePort */\nexport function createRpcClient(port: MessagePort): WorkerRPC {\n return createBirpc<RuntimeRPC, RunnerRPC>(\n {\n onCancel: (_reason: CancelReason) => void { }\n },\n {\n post: (v) => port.postMessage(v),\n on: (fn) => port.on('message', fn),\n }\n );\n}\n\n// ============================================================================\n// File Task Reporting\n// ============================================================================\n\n/** Report file as queued (before compilation & discovery starts) */\nexport async function reportFileQueued(\n rpc: WorkerRPC,\n fileTask: File,\n logModule: string,\n logLabel: string,\n): Promise<void> {\n await rpc.onQueued(fileTask);\n debug(`[${logModule} RPC] ${logLabel} - Reported onQueued for file \"${fileTask.filepath}\"`\n + ` | mode: \"${fileTask.mode}\" | state: \"${fileTask.result ? fileTask.result.state : '--'}\"`\n );\n}\n\n/** Report file collection complete with full task tree */\nexport async function reportFileCollected(\n rpc: WorkerRPC,\n fileTask: File,\n logModule: string,\n logLabel: string,\n): Promise<void> {\n await rpc.onCollected([fileTask]);\n debug(`[${logModule} RPC] ${logLabel} - Reported onCollected for file \"${fileTask.filepath}\"`\n + ` | ${fileTask.tasks.length} tasks | mode: \"${fileTask.mode}\" | state: \"${fileTask.result?.state}\"`\n );\n}\n\n/** Report file-level error (compilation/discovery failure) as \"suite-failed-early\" */\nexport async function reportFileError(\n rpc: WorkerRPC,\n fileTask: File, \n logModule: string,\n logLabel: string,\n): Promise<void> {\n const taskPack: TaskResultPack = [fileTask.id, fileTask.result, {}];\n const eventPack: TaskEventPack = [fileTask.id, \"suite-failed-early\", undefined];\n await rpc.onTaskUpdate([taskPack], [eventPack]);\n\n debug(`[${logModule} RPC] ${logLabel} - Reported \"suite-failed-early\" task update for \"${fileTask.filepath}\"`);\n}\n\n// ============================================================================\n// Suite Lifecycle Reporting\n// ============================================================================\n\n/** Report suite-prepare event */\nexport async function reportSuitePrepare(\n rpc: WorkerRPC,\n suite: Suite,\n logModule: string,\n base: string,\n): Promise<void> {\n // Report suite event (without the custom task meta so reporters won't log it)\n const taskPack: TaskResultPack = [suite.id, suite.result, {}];\n const eventPack: TaskEventPack = [suite.id, 'suite-prepare', undefined];\n\n await rpc.onTaskUpdate([taskPack], [eventPack]);\n\n debug(`[${logModule} RPC] ${getTaskLogLabel(base, suite)} - Reported \"suite-prepare\" task update`\n + ` | state: \"${suite.result?.state}\"`\n );\n}\n\n/** Report suite-finished event */\nexport async function reportSuiteFinished(\n rpc: WorkerRPC,\n suite: Suite,\n logModule: string,\n base: string,\n vitestVersion: VitestVersion = 'v4',\n): Promise<void> {\n const suiteLabel = getTaskLogLabel(base, suite);\n const rpcLogPrefix = `[${logModule} RPC] ${suiteLabel}`;\n const meta = suite.meta as AssemblyScriptSuiteTaskMeta;\n const coverageKeys: number = Object.keys(meta.coverageData?.hitCountsByFileAndPosition ?? {}).length;\n let coveragePromise: Promise<void> = Promise.resolve();\n \n // Report coverage if this is a file task, and coverage is available\n if (isSuiteOwnFile(suite) && coverageKeys > 0) {\n const coverage: AssemblyScriptCoveragePayload = {\n __format: COVERAGE_PAYLOAD_FORMATS.AssemblyScript,\n coverageData: meta.coverageData!,\n suiteLogLabel: suiteLabel\n };\n \n const afterSuiteMeta = createAfterSuiteRunMeta(\n coverage,\n [suite.file.filepath],\n suite.file.projectName,\n vitestVersion\n );\n coveragePromise = rpc.onAfterSuiteRun(afterSuiteMeta);\n\n debug(`${rpcLogPrefix} - onAfterSuiteRun: Reported suite coverage (${coverageKeys} unique positions)`);\n } else if (coverageKeys === 0) {\n debug(`${rpcLogPrefix} - onAfterSuiteRun: No suite coverage to report`);\n }\n\n // Report suite event (without the custom task meta so reporters won't log it)\n const taskPack: TaskResultPack = [suite.id, suite.result, {}];\n const eventPack: TaskEventPack = [suite.id, \"suite-finished\", undefined];\n\n await Promise.all([\n coveragePromise,\n rpc.onTaskUpdate([taskPack], [eventPack])\n ]);\n\n debug(`${rpcLogPrefix} - Reported \"suite-finished\" task update | state: \"${suite.result?.state}\"`\n + ` | duration: ${suite.result?.duration?.toFixed(2) ?? '--'} ms`\n );\n}\n\n// ============================================================================\n// Test Lifecycle Reporting\n// ============================================================================\n\nasync function reportTestTaskUpdate(\n rpc: WorkerRPC,\n test: Test,\n logModule: string,\n base: string,\n updateEvent: 'test-prepare' | 'test-finished' | 'test-retried'\n): Promise<void> {\n // Report test event (without the custom task meta so reporters won't log it)\n const taskPack: TaskResultPack = [test.id, test.result, {}];\n const eventPack: TaskEventPack = [test.id, updateEvent, undefined];\n\n debug(`[${logModule} RPC] ${getTaskLogLabel(base, test)} - Reporting \"${updateEvent}\" task update...`\n + ` | state: \"${test.result?.state}\"`\n + `${updateEvent === 'test-prepare' ? '' : ` | duration: ${test.result?.duration?.toFixed(2) ?? '--'} ms`}`\n );\n await rpc.onTaskUpdate([taskPack], [eventPack]);\n debug(`[${logModule} RPC] ${getTaskLogLabel(base, test)} - Reported \"${updateEvent}\" task update`\n + ` | state: \"${test.result?.state}\"`\n + `${updateEvent === 'test-prepare' ? '' : ` | duration: ${test.result?.duration?.toFixed(2) ?? '--'} ms`}`\n );\n}\n\n/** Report test starting execution */\nexport async function reportTestPrepare(\n rpc: WorkerRPC,\n test: Test,\n logModule: string,\n base: string,\n): Promise<void> {\n return reportTestTaskUpdate(rpc, test, logModule, base, 'test-prepare');\n}\n\n/** Report test finished execution */\nexport async function reportTestFinished(\n rpc: WorkerRPC,\n test: Test,\n logModule: string,\n base: string,\n): Promise<void> {\n return reportTestTaskUpdate(rpc, test, logModule, base, 'test-finished');\n}\n\n/** Report test retried (sent when test failed and is going to be retried) */\nexport async function reportTestRetried(\n rpc: WorkerRPC,\n test: Test,\n logModule: string,\n base: string,\n): Promise<void> {\n return reportTestTaskUpdate(rpc, test, logModule, base, 'test-retried');\n}\n\n// ============================================================================\n// Other Reporting\n// ============================================================================\n\n/** Report user console log messages */\nexport async function reportUserConsoleLogs(\n rpc: WorkerRPC,\n logs: AssemblyScriptConsoleLog[],\n logModule: string,\n base: string,\n task: Task,\n): Promise<void> {\n if (logs.length === 0) {\n return;\n }\n\n const stdLogs = logs.filter(l => !l.isError);\n const errorLogs = logs.filter(l => l.isError);\n\n const stdContent: string = stdLogs.map(l => `${l.msg}`).join('\\n');\n const errorContent: string = errorLogs.filter(l => l.isError).map(l => `${l.msg}`).join('\\n');\n\n const stdLog: UserConsoleLog = {\n content: `${stdContent}\\n`,\n size: stdContent.length,\n browser: false,\n type: 'stdout',\n time: stdLogs.length > 0 ? stdLogs[0]!.time : Date.now(),\n taskId: task.id,\n origin: task.id\n };\n \n const errorLog: UserConsoleLog = {\n content: `${errorContent}\\n`,\n size: errorContent.length,\n browser: false,\n type: 'stderr',\n time: errorLogs.length > 0 ? errorLogs[0]!.time : Date.now(),\n taskId: task.id,\n origin: task.id\n };\n\n const reportPromises: Promise<void>[] = [];\n if (stdContent.length > 0) {\n reportPromises.push(rpc.onUserConsoleLog(stdLog));\n }\n if (errorContent.length > 0) {\n reportPromises.push(rpc.onUserConsoleLog(errorLog));\n }\n\n await Promise.all(reportPromises);\n\n debug(`[${logModule} RPC] ${getTaskLogLabel(base, task)} - Reported onUserConsoleLog | ${logs.length} messages`);\n}\n\n// ============================================================================\n// Final Flush\n// ============================================================================\n\n/** Flush any pending RPC updates */\nexport async function flushRpcUpdates(\n rpc: WorkerRPC,\n): Promise<void> {\n await rpc.onTaskUpdate([], []);\n}\n","import { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport type { WasmImportsFactory } from '../types/types.js';\nimport { debug } from '../util/debug.js';\nimport { AS_POOL_ERROR_TYPE_FLAG } from '../types/constants.js';\n\nexport async function loadUserWasmImportsFactory(\n relativePath: string | undefined,\n projectRoot: string,\n logModule: string,\n): Promise<WasmImportsFactory | undefined> {\n if (!relativePath) {\n return undefined;\n }\n\n const path = resolve(projectRoot, relativePath);\n const safeUrl = pathToFileURL(path).href;\n\n try {\n const start = performance.now();\n const createWasmImports = (await import(safeUrl)).default;\n debug(`[${logModule}] TIMING Imported user WasmImportsFactory in ${(performance.now() - start).toFixed(2)} ms`);\n\n if (typeof createWasmImports !== 'function') {\n throw new Error(\n `User config for \\`wasmImportsFactor\\` must be the path to a module with a default export matching () => WebAssembly.Imports `\n + `- Imported: \"${typeof createWasmImports}\": ${String(createWasmImports)}`\n );\n } else {\n return createWasmImports;\n }\n } catch (error) {\n if ((error as any)[AS_POOL_ERROR_TYPE_FLAG]) {\n throw error;\n }\n \n throw new Error(\n `Could not load user WasmImportsFactory from \"${safeUrl}\".`\n + ` Ensure that your module path is relative to the project root (location of shallowest vitest config),`\n + ` and that it has a default export matching () => WebAssembly.Imports`,\n { cause: error }\n );\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { POOL_ERROR_NAMES } from "./constants-
|
|
2
|
-
import { resolvePoolOptions } from "./resolve-config-
|
|
3
|
-
import { createPoolError, createPoolErrorFromAnyError, debug, isAbortError, setGlobalDebugMode } from "./debug-
|
|
1
|
+
import { POOL_ERROR_NAMES } from "./constants-DbxJ3hzg.mjs";
|
|
2
|
+
import { getCompatConfig, resolvePoolOptions } from "./resolve-config-s9gSJSMc.mjs";
|
|
3
|
+
import { createPoolError, createPoolErrorFromAnyError, debug, isAbortError, setGlobalDebugMode } from "./debug-DtRAL4rM.mjs";
|
|
4
4
|
import { toForwardSlash } from "./path-utils-t9OzjXYF.mjs";
|
|
5
|
-
import { createInitialFileTask } from "./vitest-file-tasks-
|
|
6
|
-
import { failTestWithTimeoutError, flagTestTerminated } from "./vitest-tasks
|
|
5
|
+
import { createInitialFileTask } from "./vitest-file-tasks-D8sOClGX.mjs";
|
|
6
|
+
import { failTestWithTimeoutError, flagTestTerminated } from "./vitest-tasks-BZ24sghI.mjs";
|
|
7
7
|
import { createWorkerRPCChannel } from "./worker-rpc-channel-CZZIxtv5.mjs";
|
|
8
8
|
import { availableParallelism } from "node:os";
|
|
9
9
|
import { resolve } from "node:path";
|
|
@@ -72,7 +72,7 @@ var AssemblyScriptPoolWorker = class {
|
|
|
72
72
|
switch (message.type) {
|
|
73
73
|
case "start":
|
|
74
74
|
this.currentWorkerId = message.workerId;
|
|
75
|
-
this.config = message.context.config;
|
|
75
|
+
this.config = getCompatConfig(message.context.config);
|
|
76
76
|
debug(`[${this.logModuleWithId}] send: vitest sent "start" message | Captured workerId and config`);
|
|
77
77
|
setImmediate(async () => {
|
|
78
78
|
const start = performance.now();
|
|
@@ -398,4 +398,4 @@ function createAssemblyScriptPool(userPoolOptions) {
|
|
|
398
398
|
|
|
399
399
|
//#endregion
|
|
400
400
|
export { createAssemblyScriptPool };
|
|
401
|
-
//# sourceMappingURL=pool-runner-init-
|
|
401
|
+
//# sourceMappingURL=pool-runner-init-BqkwQ2tk.mjs.map
|