@optique/core 1.0.0-dev.1611 → 1.0.0-dev.1616

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.
@@ -168,6 +168,7 @@ function resolveSingleDeferred(deferred, runtime) {
168
168
  defaultValues: deferred.defaultValues
169
169
  });
170
170
  if (resolution.kind !== "resolved") return deferred.preliminaryResult;
171
+ if (resolution.usedDefaults.every((d) => d)) return deferred.preliminaryResult;
171
172
  const depValue = isMultiDep ? resolution.values : resolution.values[0];
172
173
  const result = deferred.parser[require_dependency.parseWithDependency](deferred.rawInput, depValue);
173
174
  if (result instanceof Promise) return deferred.preliminaryResult;
@@ -266,6 +267,7 @@ async function resolveDeferredInStateAsync(state, runtime, visited = /* @__PURE_
266
267
  defaultValues: deferred.defaultValues
267
268
  });
268
269
  if (resolution.kind !== "resolved") return deferred.preliminaryResult;
270
+ if (resolution.usedDefaults.every((d) => d)) return deferred.preliminaryResult;
269
271
  const depValue = isMultiDep ? resolution.values : resolution.values[0];
270
272
  return Promise.resolve(deferred.parser[require_dependency.parseWithDependency](deferred.rawInput, depValue));
271
273
  }
@@ -168,6 +168,7 @@ function resolveSingleDeferred(deferred, runtime) {
168
168
  defaultValues: deferred.defaultValues
169
169
  });
170
170
  if (resolution.kind !== "resolved") return deferred.preliminaryResult;
171
+ if (resolution.usedDefaults.every((d) => d)) return deferred.preliminaryResult;
171
172
  const depValue = isMultiDep ? resolution.values : resolution.values[0];
172
173
  const result = deferred.parser[parseWithDependency](deferred.rawInput, depValue);
173
174
  if (result instanceof Promise) return deferred.preliminaryResult;
@@ -266,6 +267,7 @@ async function resolveDeferredInStateAsync(state, runtime, visited = /* @__PURE_
266
267
  defaultValues: deferred.defaultValues
267
268
  });
268
269
  if (resolution.kind !== "resolved") return deferred.preliminaryResult;
270
+ if (resolution.usedDefaults.every((d) => d)) return deferred.preliminaryResult;
269
271
  const depValue = isMultiDep ? resolution.values : resolution.values[0];
270
272
  return Promise.resolve(deferred.parser[parseWithDependency](deferred.rawInput, depValue));
271
273
  }
package/dist/parser.cjs CHANGED
@@ -1,5 +1,7 @@
1
1
  const require_annotations = require('./annotations.cjs');
2
2
  const require_message = require('./message.cjs');
3
+ const require_dependency = require('./dependency.cjs');
4
+ const require_dependency_runtime = require('./dependency-runtime.cjs');
3
5
  const require_mode_dispatch = require('./mode-dispatch.cjs');
4
6
  const require_usage = require('./usage.cjs');
5
7
  const require_doc = require('./doc.cjs');
@@ -83,11 +85,15 @@ function parseSync(parser, args, options) {
83
85
  error: require_message.message`Unexpected option or argument: ${context.buffer[0]}.`
84
86
  };
85
87
  } while (context.buffer.length > 0);
88
+ const runtime = require_dependency_runtime.createDependencyRuntimeContext();
89
+ const resolvedState = require_dependency.isDeferredParseState(context.state) ? require_dependency_runtime.resolveStateWithRuntime(context.state, runtime) : context.state;
86
90
  const completeExec = {
87
91
  ...exec,
88
- phase: "complete"
92
+ phase: "complete",
93
+ dependencyRuntime: runtime,
94
+ dependencyRegistry: runtime.registry
89
95
  };
90
- const endResult = parser.complete(context.state, completeExec);
96
+ const endResult = parser.complete(resolvedState, completeExec);
91
97
  return endResult.success ? {
92
98
  success: true,
93
99
  value: shouldUnwrapAnnotatedValue ? require_annotations.unwrapInjectedAnnotationWrapper(endResult.value) : endResult.value,
@@ -150,11 +156,15 @@ async function parseAsync(parser, args, options) {
150
156
  error: require_message.message`Unexpected option or argument: ${context.buffer[0]}.`
151
157
  };
152
158
  } while (context.buffer.length > 0);
159
+ const runtime = require_dependency_runtime.createDependencyRuntimeContext();
160
+ const resolvedState = require_dependency.isDeferredParseState(context.state) ? await require_dependency_runtime.resolveStateWithRuntimeAsync(context.state, runtime) : context.state;
153
161
  const completeExec = {
154
162
  ...exec,
155
- phase: "complete"
163
+ phase: "complete",
164
+ dependencyRuntime: runtime,
165
+ dependencyRegistry: runtime.registry
156
166
  };
157
- const endResult = await parser.complete(context.state, completeExec);
167
+ const endResult = await parser.complete(resolvedState, completeExec);
158
168
  return endResult.success ? {
159
169
  success: true,
160
170
  value: shouldUnwrapAnnotatedValue ? require_annotations.unwrapInjectedAnnotationWrapper(endResult.value) : endResult.value,
@@ -241,12 +251,31 @@ function suggestSync(parser, args, options) {
241
251
  });
242
252
  while (context.buffer.length > 0) {
243
253
  const result = parser.parse(context);
244
- if (!result.success) return Array.from(parser.suggest(context, prefix));
254
+ if (!result.success) return Array.from(parser.suggest(withSuggestRuntime(context), prefix));
245
255
  const previousBuffer = context.buffer;
246
256
  context = result.next;
247
257
  if (isBufferUnchanged(previousBuffer, context.buffer)) return [];
248
258
  }
249
- return Array.from(parser.suggest(context, prefix));
259
+ return Array.from(parser.suggest(withSuggestRuntime(context), prefix));
260
+ }
261
+ /**
262
+ * Creates a dependency runtime from the current parser state and returns
263
+ * a context with the populated registry. Used by top-level suggest
264
+ * functions to mirror the construct-owned model where suggest() receives
265
+ * a context with a dependency registry.
266
+ * @internal
267
+ */
268
+ function withSuggestRuntime(context) {
269
+ const runtime = require_dependency_runtime.createDependencyRuntimeContext();
270
+ require_dependency_runtime.collectSourcesFromState(context.state, runtime);
271
+ return {
272
+ ...context,
273
+ dependencyRegistry: runtime.registry,
274
+ exec: context.exec ? {
275
+ ...context.exec,
276
+ dependencyRegistry: runtime.registry
277
+ } : void 0
278
+ };
250
279
  }
251
280
  /**
252
281
  * Generates command-line suggestions based on current parsing state.
@@ -284,16 +313,18 @@ async function suggestAsync(parser, args, options) {
284
313
  while (context.buffer.length > 0) {
285
314
  const result = await parser.parse(context);
286
315
  if (!result.success) {
316
+ const ctx$1 = withSuggestRuntime(context);
287
317
  const suggestions$1 = [];
288
- for await (const suggestion of parser.suggest(context, prefix)) suggestions$1.push(suggestion);
318
+ for await (const suggestion of parser.suggest(ctx$1, prefix)) suggestions$1.push(suggestion);
289
319
  return suggestions$1;
290
320
  }
291
321
  const previousBuffer = context.buffer;
292
322
  context = result.next;
293
323
  if (isBufferUnchanged(previousBuffer, context.buffer)) return [];
294
324
  }
325
+ const ctx = withSuggestRuntime(context);
295
326
  const suggestions = [];
296
- for await (const suggestion of parser.suggest(context, prefix)) suggestions.push(suggestion);
327
+ for await (const suggestion of parser.suggest(ctx, prefix)) suggestions.push(suggestion);
297
328
  return suggestions;
298
329
  }
299
330
  /**
package/dist/parser.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { injectAnnotations, isInjectedAnnotationWrapper, unwrapInjectedAnnotationWrapper } from "./annotations.js";
2
2
  import { cloneMessage, message } from "./message.js";
3
+ import { isDeferredParseState } from "./dependency.js";
4
+ import { collectSourcesFromState, createDependencyRuntimeContext, resolveStateWithRuntime, resolveStateWithRuntimeAsync } from "./dependency-runtime.js";
3
5
  import { dispatchByMode } from "./mode-dispatch.js";
4
6
  import { cloneUsage, normalizeUsage } from "./usage.js";
5
7
  import { cloneDocEntry, isDocEntryHidden } from "./doc.js";
@@ -83,11 +85,15 @@ function parseSync(parser, args, options) {
83
85
  error: message`Unexpected option or argument: ${context.buffer[0]}.`
84
86
  };
85
87
  } while (context.buffer.length > 0);
88
+ const runtime = createDependencyRuntimeContext();
89
+ const resolvedState = isDeferredParseState(context.state) ? resolveStateWithRuntime(context.state, runtime) : context.state;
86
90
  const completeExec = {
87
91
  ...exec,
88
- phase: "complete"
92
+ phase: "complete",
93
+ dependencyRuntime: runtime,
94
+ dependencyRegistry: runtime.registry
89
95
  };
90
- const endResult = parser.complete(context.state, completeExec);
96
+ const endResult = parser.complete(resolvedState, completeExec);
91
97
  return endResult.success ? {
92
98
  success: true,
93
99
  value: shouldUnwrapAnnotatedValue ? unwrapInjectedAnnotationWrapper(endResult.value) : endResult.value,
@@ -150,11 +156,15 @@ async function parseAsync(parser, args, options) {
150
156
  error: message`Unexpected option or argument: ${context.buffer[0]}.`
151
157
  };
152
158
  } while (context.buffer.length > 0);
159
+ const runtime = createDependencyRuntimeContext();
160
+ const resolvedState = isDeferredParseState(context.state) ? await resolveStateWithRuntimeAsync(context.state, runtime) : context.state;
153
161
  const completeExec = {
154
162
  ...exec,
155
- phase: "complete"
163
+ phase: "complete",
164
+ dependencyRuntime: runtime,
165
+ dependencyRegistry: runtime.registry
156
166
  };
157
- const endResult = await parser.complete(context.state, completeExec);
167
+ const endResult = await parser.complete(resolvedState, completeExec);
158
168
  return endResult.success ? {
159
169
  success: true,
160
170
  value: shouldUnwrapAnnotatedValue ? unwrapInjectedAnnotationWrapper(endResult.value) : endResult.value,
@@ -241,12 +251,31 @@ function suggestSync(parser, args, options) {
241
251
  });
242
252
  while (context.buffer.length > 0) {
243
253
  const result = parser.parse(context);
244
- if (!result.success) return Array.from(parser.suggest(context, prefix));
254
+ if (!result.success) return Array.from(parser.suggest(withSuggestRuntime(context), prefix));
245
255
  const previousBuffer = context.buffer;
246
256
  context = result.next;
247
257
  if (isBufferUnchanged(previousBuffer, context.buffer)) return [];
248
258
  }
249
- return Array.from(parser.suggest(context, prefix));
259
+ return Array.from(parser.suggest(withSuggestRuntime(context), prefix));
260
+ }
261
+ /**
262
+ * Creates a dependency runtime from the current parser state and returns
263
+ * a context with the populated registry. Used by top-level suggest
264
+ * functions to mirror the construct-owned model where suggest() receives
265
+ * a context with a dependency registry.
266
+ * @internal
267
+ */
268
+ function withSuggestRuntime(context) {
269
+ const runtime = createDependencyRuntimeContext();
270
+ collectSourcesFromState(context.state, runtime);
271
+ return {
272
+ ...context,
273
+ dependencyRegistry: runtime.registry,
274
+ exec: context.exec ? {
275
+ ...context.exec,
276
+ dependencyRegistry: runtime.registry
277
+ } : void 0
278
+ };
250
279
  }
251
280
  /**
252
281
  * Generates command-line suggestions based on current parsing state.
@@ -284,16 +313,18 @@ async function suggestAsync(parser, args, options) {
284
313
  while (context.buffer.length > 0) {
285
314
  const result = await parser.parse(context);
286
315
  if (!result.success) {
316
+ const ctx$1 = withSuggestRuntime(context);
287
317
  const suggestions$1 = [];
288
- for await (const suggestion of parser.suggest(context, prefix)) suggestions$1.push(suggestion);
318
+ for await (const suggestion of parser.suggest(ctx$1, prefix)) suggestions$1.push(suggestion);
289
319
  return suggestions$1;
290
320
  }
291
321
  const previousBuffer = context.buffer;
292
322
  context = result.next;
293
323
  if (isBufferUnchanged(previousBuffer, context.buffer)) return [];
294
324
  }
325
+ const ctx = withSuggestRuntime(context);
295
326
  const suggestions = [];
296
- for await (const suggestion of parser.suggest(context, prefix)) suggestions.push(suggestion);
327
+ for await (const suggestion of parser.suggest(ctx, prefix)) suggestions.push(suggestion);
297
328
  return suggestions;
298
329
  }
299
330
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optique/core",
3
- "version": "1.0.0-dev.1611+0344ff75",
3
+ "version": "1.0.0-dev.1616+17abc525",
4
4
  "description": "Type-safe combinatorial command-line interface parser",
5
5
  "keywords": [
6
6
  "CLI",