vona-core 5.1.50 → 5.1.51
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/dist/index.js +53 -13
- package/dist/index.js.map +1 -1
- package/dist/lib/bean/type.d.ts.map +1 -1
- package/dist/lib/core/testClaim.d.ts.map +1 -1
- package/dist/lib/core/testClaimFilesystemWindows.d.ts.map +1 -1
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/zod-enhance.d.ts +1 -0
- package/dist/lib/utils/zod-enhance.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/lib/bean/type.ts +3 -3
- package/src/lib/core/testClaim.test.ts +294 -1
- package/src/lib/core/testClaim.ts +47 -9
- package/src/lib/core/testClaimFilesystem.test.ts +163 -39
- package/src/lib/core/testClaimFilesystemWindows.cs +16 -6
- package/src/lib/core/testClaimFilesystemWindows.ts +9 -4
- package/src/lib/utils/index.ts +1 -0
- package/src/lib/utils/zod-enhance.ts +8 -1
package/dist/index.js
CHANGED
|
@@ -663,6 +663,10 @@ function _resolverAddonFile(addonName, projectPath, resolver) {
|
|
|
663
663
|
}
|
|
664
664
|
}
|
|
665
665
|
|
|
666
|
+
const queryCoercion = new AsyncLocalStorage();
|
|
667
|
+
function runWithZodQueryCoercion(enabled, fn) {
|
|
668
|
+
return queryCoercion.run(enabled, fn);
|
|
669
|
+
}
|
|
666
670
|
function zodEnhance() {
|
|
667
671
|
setLocaleAdapter((text, iss) => {
|
|
668
672
|
const app = useApp();
|
|
@@ -670,7 +674,7 @@ function zodEnhance() {
|
|
|
670
674
|
return app.meta.text(text, ...args);
|
|
671
675
|
}, text, iss);
|
|
672
676
|
});
|
|
673
|
-
setParseAdapter(ZodMetadata);
|
|
677
|
+
setParseAdapter(ZodMetadata, () => queryCoercion.getStore() !== false);
|
|
674
678
|
}
|
|
675
679
|
function zodSetLocaleErrors(app, localeErrors, localeDefault) {
|
|
676
680
|
setLocaleErrors(() => {
|
|
@@ -3658,9 +3662,12 @@ function decode(source) {
|
|
|
3658
3662
|
throw new Error('Windows test claim filesystem helper returned an invalid response');
|
|
3659
3663
|
}
|
|
3660
3664
|
if (!value || value.ok !== true) {
|
|
3661
|
-
const
|
|
3665
|
+
const code = ['EEXIST', 'ENOENT', 'EBUSY', 'EACCES', 'EUNSAFE'].includes(value?.code) ? value.code : 'EUNSAFE';
|
|
3666
|
+
const nativeCode = Number.isInteger(value?.nativeCode) && value.nativeCode >= 0 && value.nativeCode <= 65535 ? value.nativeCode : 0;
|
|
3667
|
+
const error = new Error(`Unsafe Windows test claim filesystem operation (${code}, nativeCode=${nativeCode})`);
|
|
3662
3668
|
Object.assign(error, {
|
|
3663
|
-
code
|
|
3669
|
+
code,
|
|
3670
|
+
nativeCode
|
|
3664
3671
|
});
|
|
3665
3672
|
throw error;
|
|
3666
3673
|
}
|
|
@@ -4350,9 +4357,19 @@ async function startTestClaimBroker(claimPath) {
|
|
|
4350
4357
|
const update = event => {
|
|
4351
4358
|
if (closing) return Promise.reject(new Error('Test claim broker is closed'));
|
|
4352
4359
|
const result = queue.then(async () => {
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4360
|
+
let phase = 'read';
|
|
4361
|
+
try {
|
|
4362
|
+
const manifest = await loadTestClaim(claimPath);
|
|
4363
|
+
phase = 'validate';
|
|
4364
|
+
applyEvent(manifest, event);
|
|
4365
|
+
phase = 'write';
|
|
4366
|
+
await writeTestClaim(claimPath, manifest);
|
|
4367
|
+
} catch (error) {
|
|
4368
|
+
if (error instanceof Error) Object.assign(error, {
|
|
4369
|
+
testClaimPhase: phase
|
|
4370
|
+
});
|
|
4371
|
+
throw error;
|
|
4372
|
+
}
|
|
4356
4373
|
});
|
|
4357
4374
|
queue = result.catch(() => {});
|
|
4358
4375
|
return result;
|
|
@@ -4373,8 +4390,15 @@ async function startTestClaimBroker(claimPath) {
|
|
|
4373
4390
|
}
|
|
4374
4391
|
if (req.url === '/containment') await containment(parseTestClaimJson(body));else await update(parseTestClaimJson(body));
|
|
4375
4392
|
res.writeHead(204).end();
|
|
4376
|
-
} catch {
|
|
4377
|
-
|
|
4393
|
+
} catch (error) {
|
|
4394
|
+
const failure = error;
|
|
4395
|
+
const headers = {};
|
|
4396
|
+
if (['read', 'validate', 'write'].includes(failure?.testClaimPhase)) headers['x-vona-claim-phase'] = failure.testClaimPhase;
|
|
4397
|
+
if (['EEXIST', 'ENOENT', 'EBUSY', 'EACCES', 'EUNSAFE'].includes(failure?.code)) headers['x-vona-claim-code'] = failure.code;
|
|
4398
|
+
if (Number.isInteger(failure?.nativeCode) && failure.nativeCode >= 0 && failure.nativeCode <= 65535) {
|
|
4399
|
+
headers['x-vona-claim-native-code'] = String(failure.nativeCode);
|
|
4400
|
+
}
|
|
4401
|
+
res.writeHead(409, headers).end('Test claim registration rejected');
|
|
4378
4402
|
}
|
|
4379
4403
|
});
|
|
4380
4404
|
server.requestTimeout = 10000;
|
|
@@ -4424,20 +4448,34 @@ function hasTestClaimTransport(env = process.env) {
|
|
|
4424
4448
|
}
|
|
4425
4449
|
async function sendTestClaimEvent(env, event) {
|
|
4426
4450
|
if (!hasTestClaimTransport(env)) return;
|
|
4451
|
+
let response;
|
|
4427
4452
|
try {
|
|
4428
|
-
|
|
4453
|
+
response = await fetch(env[TEST_CLAIM_URL_ENV], {
|
|
4429
4454
|
method: 'POST',
|
|
4430
4455
|
headers: {
|
|
4431
4456
|
'authorization': `Bearer ${env[TEST_CLAIM_TOKEN_ENV]}`,
|
|
4457
|
+
// Startup can block past the broker's idle timeout; never reuse a stale socket.
|
|
4458
|
+
'connection': 'close',
|
|
4432
4459
|
'content-type': 'application/json'
|
|
4433
4460
|
},
|
|
4434
4461
|
body: JSON.stringify(event),
|
|
4435
|
-
|
|
4462
|
+
// Includes the serialized queue and durable Windows filesystem work (30s per operation).
|
|
4463
|
+
signal: AbortSignal.timeout(120000),
|
|
4436
4464
|
redirect: 'error'
|
|
4437
4465
|
});
|
|
4438
|
-
if (response.status !== 204) throw new Error('Registration rejected');
|
|
4439
4466
|
} catch {
|
|
4440
|
-
throw new Error('Managed test allocation registration failed');
|
|
4467
|
+
throw new Error('Managed test allocation registration failed (transport)');
|
|
4468
|
+
}
|
|
4469
|
+
if (response.status !== 204) {
|
|
4470
|
+
const details = [`HTTP ${response.status}`];
|
|
4471
|
+
const phase = response.headers.get('x-vona-claim-phase');
|
|
4472
|
+
const code = response.headers.get('x-vona-claim-code');
|
|
4473
|
+
const nativeCode = response.headers.get('x-vona-claim-native-code');
|
|
4474
|
+
if (['read', 'validate', 'write'].includes(phase)) details.push(phase);
|
|
4475
|
+
if (['EEXIST', 'ENOENT', 'EBUSY', 'EACCES', 'EUNSAFE'].includes(code)) details.push(code);
|
|
4476
|
+
if (nativeCode && /^\d{1,5}$/.test(nativeCode) && Number(nativeCode) <= 65535) details.push(`native ${nativeCode}`);
|
|
4477
|
+
await response.body?.cancel().catch(() => {});
|
|
4478
|
+
throw new Error(`Managed test allocation registration failed (${details.join(', ')})`);
|
|
4441
4479
|
}
|
|
4442
4480
|
}
|
|
4443
4481
|
|
|
@@ -4459,6 +4497,8 @@ async function assertTestClaimWindowsJob(env, identity) {
|
|
|
4459
4497
|
method: 'POST',
|
|
4460
4498
|
headers: {
|
|
4461
4499
|
'authorization': `Bearer ${env[TEST_CLAIM_TOKEN_ENV]}`,
|
|
4500
|
+
// Startup can block past the broker's idle timeout; never reuse a stale socket.
|
|
4501
|
+
'connection': 'close',
|
|
4462
4502
|
'content-type': 'application/json'
|
|
4463
4503
|
},
|
|
4464
4504
|
body: JSON.stringify(query),
|
|
@@ -5451,5 +5491,5 @@ async function retry(options, fn) {
|
|
|
5451
5491
|
|
|
5452
5492
|
zodExtendOpenApi();
|
|
5453
5493
|
|
|
5454
|
-
export { $Class, $localeScope, $makeLocaleMagic, $protocolKey, AppHmr, AppHmrDeps, AppLocale, AppLogger, AppMeta, AppMetadata, AppResource, AppUtil, BeanAopBase, BeanAopMethodBase, BeanBase, BeanBaseSimple, BeanContainer, BeanInfo, BeanScopeBase, BeanScopeContainer, BeanScopeError, BeanScopeErrorImpl, BeanScopeLocale, BeanScopeScene, BeanScopeUtil, BeanSimple, EnumAppEvent, ErrorClass, Global, LocaleModuleNameSeparator, PickClassInner, ProxyDisable, SymbolBeanContainerInstances, SymbolBeanFullName, SymbolBeanInstanceKey, SymbolBeanInstancePropsLazy, SymbolCacheAopChains, SymbolCacheAopChainsKey, SymbolDecoratorBeanFullName, SymbolDecoratorBeanInfo, SymbolDecoratorGlobal, SymbolDecoratorProxyDisable, SymbolDecoratorUse, SymbolDecoratorVirtual, SymbolHmrStateLoad, SymbolHmrStateSave, SymbolMappedClassMetadataKeys, SymbolModuleBelong, SymbolModuleName, TEST_CLAIM_DIRECTORY, TEST_CLAIM_TOKEN_ENV, TEST_CLAIM_URL_ENV, TEST_CLAIM_WINDOWS_GUARDIAN_ENV, TEST_REQUIRE_FRESH_RESOURCES_ENV, TEST_RUN_ID_ENV, TEST_RUN_OWNER_FILE, Use, Virtual, VonaApplication, __prepareInjectSelectorInfo, appHmrDeps, appMetadata, appResource, assertDisposableDatabaseName, assertFreshTestResources, assertFreshTestResourcesReady, assertIsolatedTestConfig, assertIsolatedTestDatabaseClient, assertIsolatedTestPath, assertTestAppIdentity, assertTestClaimDatabaseClient, assertTestClaimRedisClient, assertTestClaimSafePath, assertTestClaimWindowsJob, assertTestRunOwner, beanFullNameFromOnionName, beginCompletedInstance, bootstrap, buildTestClaimResourceInventory, captureCompletedInstance, captureRequestBoundary, cast, closeApp, closeProcessWorker, combineConfigDefault, combineFilePathSafe, compose, copyAddon, copyMetadataOfClasses, copyProperties, copyPropertiesOfClasses, createApp, createAppMaster, createBeanDecorator, createCompletedReadiness, createDiagnosticLogger, createFreshnessDependencies, createGeneralApp, createHash, createRequestBoundary, createTestClaim, deepExtend, disposeInstance, errorsInternal, filterHeaders, finishCompletedInstance, formatLoggerAxiosError, formatLoggerBoundary, formatLoggerConsole, formatLoggerCtx, formatLoggerDummy, formatLoggerErrors, formatLoggerFilter, functionNoop, getDatabaseTestPrefix, getHomeVonaAppDir, getLoggerPathPhysicalRoot, getMappedClassMetadataKeys, getPlatformArch, getPublicPathPhysicalRoot, getRequestBoundary, getRuntimePathPhysicalRoot, getSqlite3DatabaseNameDefault, getSuppressedDiagnosticLogger, getTestAppName, getTestClaimCreatedAt, getTestClaimPaths, getTestClaimRedisPrefix, getTestRunIdFromEnv, hasFreshnessDatabase, hasFreshnessRedis, hasTestClaimTransport, instanceDesp, invalidateCompletedInstance, isExistingReadyContext, isLocaleMagic, loadJSONFile, loadTestClaim, mergeTestClaimDatabaseOptions, mergeTestClaimRedisOptions, normalizeTestClaimDatabaseEndpoint, normalizeTestClaimRedisEndpoint, onionNameFromBeanFullName, pathToHref, pinExistingReadyContext, polyfillDispose, prepareEnv, registerMappedClassMetadataKey, registerTestClaimDatabaseCreation, registerTestClaimResourceInventory, registerTestClaimWindowsJobVerifier, requireAddon, requireDynamic, requiresFreshTestResources, resolveAddon, resolveExistingReadyCapability, resolveTestRunId, resolveVonaLocalPaths, resolverSharp, resolverSharpLibvips, resolverSqlite3, retry, runWithRequestBoundary, saveJSONFile, sendTestClaimEvent, setMappedClassMetadataKeys, startTestClaimBroker, text$1 as text, useApp, usePrepareArg, usePrepareArgs, uuidv4, validateTestClaim, withIsolatedTestDatabaseDiscovery, writeTestClaim };
|
|
5494
|
+
export { $Class, $localeScope, $makeLocaleMagic, $protocolKey, AppHmr, AppHmrDeps, AppLocale, AppLogger, AppMeta, AppMetadata, AppResource, AppUtil, BeanAopBase, BeanAopMethodBase, BeanBase, BeanBaseSimple, BeanContainer, BeanInfo, BeanScopeBase, BeanScopeContainer, BeanScopeError, BeanScopeErrorImpl, BeanScopeLocale, BeanScopeScene, BeanScopeUtil, BeanSimple, EnumAppEvent, ErrorClass, Global, LocaleModuleNameSeparator, PickClassInner, ProxyDisable, SymbolBeanContainerInstances, SymbolBeanFullName, SymbolBeanInstanceKey, SymbolBeanInstancePropsLazy, SymbolCacheAopChains, SymbolCacheAopChainsKey, SymbolDecoratorBeanFullName, SymbolDecoratorBeanInfo, SymbolDecoratorGlobal, SymbolDecoratorProxyDisable, SymbolDecoratorUse, SymbolDecoratorVirtual, SymbolHmrStateLoad, SymbolHmrStateSave, SymbolMappedClassMetadataKeys, SymbolModuleBelong, SymbolModuleName, TEST_CLAIM_DIRECTORY, TEST_CLAIM_TOKEN_ENV, TEST_CLAIM_URL_ENV, TEST_CLAIM_WINDOWS_GUARDIAN_ENV, TEST_REQUIRE_FRESH_RESOURCES_ENV, TEST_RUN_ID_ENV, TEST_RUN_OWNER_FILE, Use, Virtual, VonaApplication, __prepareInjectSelectorInfo, appHmrDeps, appMetadata, appResource, assertDisposableDatabaseName, assertFreshTestResources, assertFreshTestResourcesReady, assertIsolatedTestConfig, assertIsolatedTestDatabaseClient, assertIsolatedTestPath, assertTestAppIdentity, assertTestClaimDatabaseClient, assertTestClaimRedisClient, assertTestClaimSafePath, assertTestClaimWindowsJob, assertTestRunOwner, beanFullNameFromOnionName, beginCompletedInstance, bootstrap, buildTestClaimResourceInventory, captureCompletedInstance, captureRequestBoundary, cast, closeApp, closeProcessWorker, combineConfigDefault, combineFilePathSafe, compose, copyAddon, copyMetadataOfClasses, copyProperties, copyPropertiesOfClasses, createApp, createAppMaster, createBeanDecorator, createCompletedReadiness, createDiagnosticLogger, createFreshnessDependencies, createGeneralApp, createHash, createRequestBoundary, createTestClaim, deepExtend, disposeInstance, errorsInternal, filterHeaders, finishCompletedInstance, formatLoggerAxiosError, formatLoggerBoundary, formatLoggerConsole, formatLoggerCtx, formatLoggerDummy, formatLoggerErrors, formatLoggerFilter, functionNoop, getDatabaseTestPrefix, getHomeVonaAppDir, getLoggerPathPhysicalRoot, getMappedClassMetadataKeys, getPlatformArch, getPublicPathPhysicalRoot, getRequestBoundary, getRuntimePathPhysicalRoot, getSqlite3DatabaseNameDefault, getSuppressedDiagnosticLogger, getTestAppName, getTestClaimCreatedAt, getTestClaimPaths, getTestClaimRedisPrefix, getTestRunIdFromEnv, hasFreshnessDatabase, hasFreshnessRedis, hasTestClaimTransport, instanceDesp, invalidateCompletedInstance, isExistingReadyContext, isLocaleMagic, loadJSONFile, loadTestClaim, mergeTestClaimDatabaseOptions, mergeTestClaimRedisOptions, normalizeTestClaimDatabaseEndpoint, normalizeTestClaimRedisEndpoint, onionNameFromBeanFullName, pathToHref, pinExistingReadyContext, polyfillDispose, prepareEnv, registerMappedClassMetadataKey, registerTestClaimDatabaseCreation, registerTestClaimResourceInventory, registerTestClaimWindowsJobVerifier, requireAddon, requireDynamic, requiresFreshTestResources, resolveAddon, resolveExistingReadyCapability, resolveTestRunId, resolveVonaLocalPaths, resolverSharp, resolverSharpLibvips, resolverSqlite3, retry, runWithRequestBoundary, runWithZodQueryCoercion, saveJSONFile, sendTestClaimEvent, setMappedClassMetadataKeys, startTestClaimBroker, text$1 as text, useApp, usePrepareArg, usePrepareArgs, uuidv4, validateTestClaim, withIsolatedTestDatabaseDiscovery, writeTestClaim };
|
|
5455
5495
|
//# sourceMappingURL=index.js.map
|