@volter/world-runtime 3.0.167 → 3.0.168

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.
@@ -61,3 +61,4 @@ export { withoutVaultSignIn } from './runtime.js';
61
61
  export { errorMessage } from './error-message.js';
62
62
  export { materializeBrowserFiles, browsersDir, worldBrowser, worldBrowsers, putWorldBrowser, deleteWorldBrowser, inheritWorldBrowsers, type WorldBrowser } from './browsers.js';
63
63
  export { CATALOG_INDEX_PACKAGE, defaults as catalogDefaults } from './catalog-index.js';
64
+ export { serviceInvocation } from './service-command.js';
package/dist/src/index.js CHANGED
@@ -44,3 +44,6 @@ export { withoutVaultSignIn } from "./runtime.js";
44
44
  export { errorMessage } from "./error-message.js";
45
45
  export { materializeBrowserFiles, browsersDir, worldBrowser, worldBrowsers, putWorldBrowser, deleteWorldBrowser, inheritWorldBrowsers } from "./browsers.js";
46
46
  export { CATALOG_INDEX_PACKAGE, defaults as catalogDefaults } from "./catalog-index.js";
47
+ // How a World starts a service command without a shell, on every platform (an npm .cmd shim on Windows is run as its
48
+ // Node script): the same resolution for the World's own services and for the commands a composition's services start.
49
+ export { serviceInvocation } from "./service-command.js";
@@ -1527,7 +1527,8 @@ async function startService(config, service, worldEnv, paths, allocatedPorts, bo
1527
1527
  boot.progress(`${service.id}: port ${port} is its own`);
1528
1528
  // Optional readiness probe beyond TCP (httpUrl/command): a process can bind its port
1529
1529
  // before it is actually serving, so this makes `up` wait until the service truly responds.
1530
- if (service.ready && service.ready !== 'tcp') {
1530
+ // `ready: { timeoutMs }` with neither is TCP readiness with its own budget: the bind wait above has used it.
1531
+ if (service.ready && service.ready !== 'tcp' && (service.ready.command !== undefined || service.ready.httpUrl !== undefined)) {
1531
1532
  const readiness = await untilReadyOrEnded((abort) => awaitReadiness(resolveReadyProbe(service.ready, { host, port, url }), cwd, service.id, env, abort), ended, boot, 'the service', log).catch(async (error) => {
1532
1533
  if (undeadPids([child.pid]).length)
1533
1534
  recordWorldStop([log], 'world.service.stop', 'up (startup failed)', 'SIGTERM');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter/world-runtime",
3
- "version": "3.0.167",
3
+ "version": "3.0.168",
4
4
  "description": "World configs for twins: boot named local runtimes, allocate ports, generate world.env/instance.json, and run apps against fake-key twin worlds.",
5
5
  "keywords": [
6
6
  "twin",
package/src/index.ts CHANGED
@@ -190,3 +190,6 @@ export { errorMessage } from './error-message.ts';
190
190
 
191
191
  export { materializeBrowserFiles, browsersDir, worldBrowser, worldBrowsers, putWorldBrowser, deleteWorldBrowser, inheritWorldBrowsers, type WorldBrowser } from './browsers.ts';
192
192
  export { CATALOG_INDEX_PACKAGE, defaults as catalogDefaults } from './catalog-index.ts';
193
+ // How a World starts a service command without a shell, on every platform (an npm .cmd shim on Windows is run as its
194
+ // Node script): the same resolution for the World's own services and for the commands a composition's services start.
195
+ export { serviceInvocation } from './service-command.ts';
package/src/runtime.ts CHANGED
@@ -1523,7 +1523,8 @@ async function startService(
1523
1523
 
1524
1524
  // Optional readiness probe beyond TCP (httpUrl/command): a process can bind its port
1525
1525
  // before it is actually serving, so this makes `up` wait until the service truly responds.
1526
- if (service.ready && service.ready !== 'tcp') {
1526
+ // `ready: { timeoutMs }` with neither is TCP readiness with its own budget: the bind wait above has used it.
1527
+ if (service.ready && service.ready !== 'tcp' && (service.ready.command !== undefined || service.ready.httpUrl !== undefined)) {
1527
1528
  const readiness = await untilReadyOrEnded((abort) => awaitReadiness(resolveReadyProbe(service.ready as Exclude<typeof service.ready, 'tcp' | undefined>, { host, port, url }), cwd, service.id, env, abort), ended, boot, 'the service', log).catch(async (error) => {
1528
1529
  if (undeadPids([child.pid!]).length) recordWorldStop([log], 'world.service.stop', 'up (startup failed)', 'SIGTERM');
1529
1530
  try { await signalHeldChild(child, 'SIGTERM', true, identity); } catch { /* best effort cleanup */ }