@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.
- package/dist/dependency-runtime.cjs +2 -0
- package/dist/dependency-runtime.js +2 -0
- package/dist/parser.cjs +39 -8
- package/dist/parser.js +39 -8
- package/package.json +1 -1
|
@@ -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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
327
|
+
for await (const suggestion of parser.suggest(ctx, prefix)) suggestions.push(suggestion);
|
|
297
328
|
return suggestions;
|
|
298
329
|
}
|
|
299
330
|
/**
|