instant-cli 1.0.23-branch-codex-cli-args-combinators.25405575906.1 → 1.0.23-branch-codex-cli-args-combinators.25405773508.1
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/.turbo/turbo-build.log +1 -1
- package/dist/lib/args.d.ts +1 -7
- package/dist/lib/args.d.ts.map +1 -1
- package/dist/lib/args.js +1 -7
- package/dist/lib/args.js.map +1 -1
- package/package.json +4 -4
- package/src/lib/args.ts +1 -7
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> instant-cli@1.0.23-branch-codex-cli-args-combinators.
|
|
2
|
+
> instant-cli@1.0.23-branch-codex-cli-args-combinators.25405773508.1 build /home/runner/work/instant/instant/client/packages/cli
|
|
3
3
|
> rm -rf dist; tsc -p tsconfig.build.json
|
|
4
4
|
|
package/dist/lib/args.d.ts
CHANGED
|
@@ -77,8 +77,6 @@ type UnavailableOptions = {
|
|
|
77
77
|
*/
|
|
78
78
|
declare function raw(opts: Record<string, unknown>, key: string): unknown;
|
|
79
79
|
/**
|
|
80
|
-
* Checks whether a flag key was supplied, even if the supplied value is empty.
|
|
81
|
-
*
|
|
82
80
|
* @example
|
|
83
81
|
* if (Args.has(opts, 'custom-redirect-uri')) {
|
|
84
82
|
* // The user explicitly passed --custom-redirect-uri.
|
|
@@ -86,9 +84,6 @@ declare function raw(opts: Record<string, unknown>, key: string): unknown;
|
|
|
86
84
|
*/
|
|
87
85
|
declare function has(opts: Record<string, unknown>, key: string): boolean;
|
|
88
86
|
/**
|
|
89
|
-
* Checks whether any flag in a group was supplied. Useful when one flag should
|
|
90
|
-
* opt into a mode that unlocks related flags.
|
|
91
|
-
*
|
|
92
87
|
* @example
|
|
93
88
|
* const configureWeb = Args.hasAny(opts, [
|
|
94
89
|
* 'team-id',
|
|
@@ -130,8 +125,7 @@ declare function bool(opts: Record<string, unknown>, key: string, options?: ArgO
|
|
|
130
125
|
* Gates an arg behind a mode or earlier choice.
|
|
131
126
|
*
|
|
132
127
|
* If the condition is false and the user supplied the flag, this returns an
|
|
133
|
-
* error.
|
|
134
|
-
* inactive, so required() resolves to undefined instead of erroring.
|
|
128
|
+
* error.
|
|
135
129
|
*
|
|
136
130
|
* @example
|
|
137
131
|
* const clientSecret = yield* Args.text(opts, 'client-secret').pipe(
|
package/dist/lib/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGpC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B,CAAC;AAEF,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,IAChD,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAClB,CAAC,aAAa,SAAS,IAAI,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,GAAG,CAClB,CAAC,EACD,CAAC,GAAG,KAAK,EACT,CAAC,GAAG,KAAK,EACT,aAAa,SAAS,OAAO,GAAG,KAAK,CACrC,SAAQ,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CACvE;AAED,MAAM,MAAM,UAAU,GAAG;IACvB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAyBF,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,WAEtD;AAED
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/args.js
CHANGED
|
@@ -51,8 +51,6 @@ function raw(opts, key) {
|
|
|
51
51
|
return opts[key];
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Checks whether a flag key was supplied, even if the supplied value is empty.
|
|
55
|
-
*
|
|
56
54
|
* @example
|
|
57
55
|
* if (Args.has(opts, 'custom-redirect-uri')) {
|
|
58
56
|
* // The user explicitly passed --custom-redirect-uri.
|
|
@@ -62,9 +60,6 @@ function has(opts, key) {
|
|
|
62
60
|
return Object.prototype.hasOwnProperty.call(opts, key);
|
|
63
61
|
}
|
|
64
62
|
/**
|
|
65
|
-
* Checks whether any flag in a group was supplied. Useful when one flag should
|
|
66
|
-
* opt into a mode that unlocks related flags.
|
|
67
|
-
*
|
|
68
63
|
* @example
|
|
69
64
|
* const configureWeb = Args.hasAny(opts, [
|
|
70
65
|
* 'team-id',
|
|
@@ -156,8 +151,7 @@ function mapActive(wrapper, mapValue) {
|
|
|
156
151
|
* Gates an arg behind a mode or earlier choice.
|
|
157
152
|
*
|
|
158
153
|
* If the condition is false and the user supplied the flag, this returns an
|
|
159
|
-
* error.
|
|
160
|
-
* inactive, so required() resolves to undefined instead of erroring.
|
|
154
|
+
* error.
|
|
161
155
|
*
|
|
162
156
|
* @example
|
|
163
157
|
* const clientSecret = yield* Args.text(opts, 'client-secret').pipe(
|
package/dist/lib/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Args lets commands read CLI flags as a small pipeline:\n *\n * 1. Parse a value from opts\n * 2. Gate it: when is this flag available?\n * 3. Prompt for a missing value, when interactive\n * 4. Validate and finish as required or optional\n *\n * This keeps the \"can this flag be used here?\" logic next to the value it\n * controls. For example, a Google client secret is only meaningful when using\n * custom web credentials:\n *\n * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(\n * Args.availableWhen(usesCustomWebCredentials),\n * Args.prompt(clientSecretPrompt({ providerUrl })),\n * Args.required(),\n * );\n *\n * The key argument to text/bool/has is the exact opts lookup key. If the\n * user-facing flag name differs, pass simpleName for errors:\n *\n * Args.text(opts, 'customRedirectUri', { simpleName: '--custom-redirect-uri' })\n */\nimport { Effect } from 'effect';\nimport { pipeArguments, type Pipeable } from 'effect/Pipeable';\nimport { BadArgsError } from '../errors.ts';\nimport { GlobalOpts } from '../context/globalOpts.ts';\nimport { UI } from '../ui/index.ts';\nimport { runUIEffect } from './ui.ts';\n\ntype ActiveArg<A, E, R> = {\n readonly _tag: 'Active';\n readonly provided: boolean;\n readonly value: Effect.Effect<A | undefined, E, R>;\n};\n\ntype InactiveArg = {\n readonly _tag: 'Inactive';\n};\n\ntype ArgState<A, E, R, CanBeInactive extends boolean> =\n | ActiveArg<A, E, R>\n | (CanBeInactive extends true ? InactiveArg : never);\n\n/**\n * A parsed CLI arg that can be composed with Args helpers.\n *\n * Commands usually create one with text() or bool(), then finish with\n * required() or optional().\n *\n * @example\n * const name = yield* Args.text(opts, 'name').pipe(\n * Args.prompt({ prompt: 'Client Name:' }),\n * Args.required(),\n * );\n */\nexport interface Arg<\n A,\n E = never,\n R = never,\n CanBeInactive extends boolean = false,\n> extends Pipeable {\n readonly flag: string;\n readonly state: Effect.Effect<ArgState<A, E, R, CanBeInactive>, E, R>;\n}\n\nexport type ArgOptions = {\n /**\n * Use when the opts key is not the user-facing flag name.\n *\n * @example\n * Args.text(opts, 'customRedirectUri', {\n * simpleName: '--custom-redirect-uri',\n * })\n */\n simpleName?: string;\n};\n\nconst makeArg = <A, E, R, CanBeInactive extends boolean>(\n flag: string,\n state: Effect.Effect<ArgState<A, E, R, CanBeInactive>, E, R>,\n): Arg<A, E, R, CanBeInactive> => {\n const arg: Arg<A, E, R, CanBeInactive> = {\n flag,\n state,\n pipe() {\n return pipeArguments(this, arguments);\n },\n };\n return arg;\n};\n\nconst active = <A, E, R>(\n value: Effect.Effect<A | undefined, E, R>,\n provided: boolean,\n): ActiveArg<A, E, R> => ({ _tag: 'Active', provided, value });\n\nconst inactive: InactiveArg = { _tag: 'Inactive' };\n\nconst missingMessage = (flag: string) => `Missing required value for ${flag}`;\n\ntype MissingOptions = {\n message?: string;\n};\n\ntype UnavailableOptions = {\n message?: string;\n};\n\n/**\n * Reads a value directly from opts. Prefer text/bool for values that will be\n * validated or used in an Args pipeline.\n *\n * @example\n * const rawType = Args.raw(opts, 'type');\n */\nfunction raw(opts: Record<string, unknown>, key: string) {\n return opts[key];\n}\n\n/**\n * Checks whether a flag key was supplied, even if the supplied value is empty.\n *\n * @example\n * if (Args.has(opts, 'custom-redirect-uri')) {\n * // The user explicitly passed --custom-redirect-uri.\n * }\n */\nfunction has(opts: Record<string, unknown>, key: string) {\n return Object.prototype.hasOwnProperty.call(opts, key);\n}\n\n/**\n * Checks whether any flag in a group was supplied. Useful when one flag should\n * opt into a mode that unlocks related flags.\n *\n * @example\n * const configureWeb = Args.hasAny(opts, [\n * 'team-id',\n * 'key-id',\n * 'private-key-file',\n * ]);\n */\nfunction hasAny(opts: Record<string, unknown>, keys: string[]) {\n return keys.some((key) => has(opts, key));\n}\n\n/**\n * Returns true only for boolean true or the string \"true\".\n *\n * @example\n * const useDevCredentials = Args.isTrue(opts, 'dev-credentials');\n */\nfunction isTrue(opts: Record<string, unknown>, key: string) {\n const value = raw(opts, key);\n return value === true || value === 'true';\n}\n\n/**\n * Starts a string arg pipeline. Strings are trimmed, numbers are stringified,\n * empty values become missing values, and other types produce BadArgsError.\n *\n * @example\n * const clientId = yield* Args.text(opts, 'client-id').pipe(\n * Args.prompt(clientIdPrompt({ providerUrl })),\n * Args.required(),\n * );\n */\nfunction text(\n opts: Record<string, unknown>,\n key: string,\n options?: ArgOptions,\n): Arg<string, BadArgsError> {\n const flag = options?.simpleName ?? `--${key}`;\n const provided = Object.prototype.hasOwnProperty.call(opts, key);\n\n return makeArg(\n flag,\n Effect.succeed(active(readTextValue(opts[key], flag), provided)),\n );\n}\n\nfunction readTextValue(value: unknown, flag: string) {\n return Effect.gen(function* readTextValue() {\n if (value === undefined || value === null) return undefined;\n\n if (typeof value === 'string' || typeof value === 'number') {\n const trimmed = String(value).trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\n/**\n * Starts a boolean arg pipeline. Accepts booleans and the strings \"true\" or\n * \"false\"; other supplied values produce BadArgsError.\n *\n * @example\n * const configureWeb = yield* Args.bool(opts, 'configure-web').pipe(\n * Args.confirm({ promptText: 'Configure web redirect flow?' }),\n * Args.required(),\n * );\n */\nfunction bool(\n opts: Record<string, unknown>,\n key: string,\n options?: ArgOptions,\n): Arg<boolean, BadArgsError> {\n const flag = options?.simpleName ?? `--${key}`;\n const provided = Object.prototype.hasOwnProperty.call(opts, key);\n\n return makeArg(\n flag,\n Effect.succeed(active(readBooleanValue(opts[key], flag), provided)),\n );\n}\n\nfunction readBooleanValue(value: unknown, flag: string) {\n return Effect.gen(function* readBooleanValue() {\n if (value === undefined || value === null) return undefined;\n if (value === true || value === 'true') return true;\n if (value === false || value === 'false') return false;\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\nfunction uiErrorToBadArgs(e: { message: string }) {\n return BadArgsError.make({ message: `UI error: ${e.message}` });\n}\n\nfunction mapActive<A, B, E, R, E2, R2, CanBeInactive extends boolean>(\n wrapper: Arg<A, E, R, CanBeInactive>,\n mapValue: (\n value: Effect.Effect<A | undefined, E, R>,\n ) => Effect.Effect<B | undefined, E | E2, R | R2>,\n): Arg<B, E | E2, R | R2, CanBeInactive> {\n return makeArg(\n wrapper.flag,\n Effect.gen(function* mapArgState() {\n const state = yield* wrapper.state;\n if (state._tag === 'Inactive') return inactive;\n return active(mapValue(state.value), state.provided);\n }) as Effect.Effect<\n ArgState<B, E | E2, R | R2, CanBeInactive>,\n E | E2,\n R | R2\n >,\n );\n}\n\n/**\n * Gates an arg behind a mode or earlier choice.\n *\n * If the condition is false and the user supplied the flag, this returns an\n * error. If the condition is false and the flag was omitted, the arg becomes\n * inactive, so required() resolves to undefined instead of erroring.\n *\n * @example\n * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(\n * Args.availableWhen(appType === 'web'),\n * Args.prompt(clientSecretPrompt({ providerUrl })),\n * Args.required(),\n * );\n */\nfunction availableWhen(condition: boolean, options?: UnavailableOptions) {\n return function availableWhenArg<A, E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ) {\n return makeArg<A, E | BadArgsError, R, true>(\n arg.flag,\n Effect.gen(function* gateArgAvailability() {\n const state = yield* arg.state;\n if (condition || state._tag === 'Inactive') return state;\n if (state.provided) {\n return yield* BadArgsError.make({\n message:\n options?.message ??\n `${arg.flag} is not compatible with other options`,\n });\n }\n return inactive;\n }),\n );\n };\n}\n\n/**\n * Prompts for a missing text value.\n *\n * With --yes, the prompt is skipped. If inputProps.defaultValue is set, that\n * value is used. Otherwise the value stays missing.\n *\n * @example\n * const clientName = yield* Args.text(opts, 'name').pipe(\n * Args.prompt({\n * prompt: 'Client Name:',\n * defaultValue: suggestedClientName,\n * }),\n * Args.required(),\n * );\n */\nfunction prompt(inputProps: UI.TextInputProps) {\n return function promptArg<E, R, CanBeInactive extends boolean>(\n arg: Arg<string, E, R, CanBeInactive>,\n ): Arg<string, E | BadArgsError, R | GlobalOpts, CanBeInactive> {\n return mapActive(arg, (valueEffect) =>\n Effect.gen(function* promptWhenMissing() {\n const value = yield* valueEffect;\n if (value !== undefined) return value;\n\n const { yes } = yield* GlobalOpts;\n const result = yes\n ? inputProps.defaultValue\n : yield* runUIEffect(new UI.TextInput(inputProps)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n if (result === undefined) return undefined;\n\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }),\n );\n };\n}\n\n/**\n * Prompts for a missing boolean value.\n *\n * With --yes, the prompt is skipped and confirmationProps.defaultValue is used.\n *\n * @example\n * const configureWeb = yield* Args.bool(opts, 'configure-web').pipe(\n * Args.confirm({\n * promptText: 'Configure web redirect flow?',\n * defaultValue: false,\n * }),\n * Args.required(),\n * );\n */\nfunction confirm(confirmationProps: UI.ConfirmationProps) {\n return function confirmArg<E, R, CanBeInactive extends boolean>(\n arg: Arg<boolean, E, R, CanBeInactive>,\n ): Arg<boolean, E | BadArgsError, R | GlobalOpts, CanBeInactive> {\n return mapActive(arg, (valueEffect) =>\n Effect.gen(function* confirmWhenMissing() {\n const value = yield* valueEffect;\n if (value !== undefined) return value;\n\n const { yes } = yield* GlobalOpts;\n if (yes) return confirmationProps.defaultValue;\n\n return yield* runUIEffect(new UI.Confirmation(confirmationProps)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n }),\n );\n };\n}\n\n/**\n * Validates a present value. Return an error message to fail, or undefined to\n * accept the value. Missing and inactive args pass through unchanged.\n *\n * @example\n * const projectId = yield* Args.text(opts, 'project-id').pipe(\n * Args.prompt(firebaseProjectIdPrompt({})),\n * Args.validate(validateFirebaseProjectId),\n * Args.required(),\n * );\n */\nfunction validate<A>(validator: (value: A) => string | undefined) {\n return function validateArg<E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ): Arg<A, E | BadArgsError, R, CanBeInactive> {\n return mapActive(arg, (valueEffect) =>\n Effect.gen(function* validateValue() {\n const value = yield* valueEffect;\n if (value === undefined) return undefined;\n\n const message = validator(value);\n if (!message) return value;\n\n return yield* BadArgsError.make({ message });\n }),\n );\n };\n}\n\n/**\n * Finishes a pipeline with a required value.\n *\n * Missing active args produce BadArgsError. Inactive args return undefined, so\n * callers can skip downstream work for unavailable flags.\n *\n * @example\n * const clientId = yield* Args.text(opts, 'client-id').pipe(\n * Args.prompt(clientIdPrompt({ providerUrl })),\n * Args.required(),\n * );\n */\nfunction required(options?: MissingOptions) {\n return function requiredArg<A, E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ): Effect.Effect<\n CanBeInactive extends true ? A | undefined : A,\n E | BadArgsError,\n R\n > {\n return Effect.gen(function* requireValue() {\n const state = yield* arg.state;\n if (state._tag === 'Inactive') return undefined;\n\n const value = yield* state.value;\n if (value !== undefined) return value;\n\n return yield* BadArgsError.make({\n message: options?.message ?? missingMessage(arg.flag),\n });\n }) as Effect.Effect<\n CanBeInactive extends true ? A | undefined : A,\n E | BadArgsError,\n R\n >;\n };\n}\n\n/**\n * Finishes a pipeline with an optional value.\n *\n * Missing and inactive args return undefined.\n *\n * @example\n * const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(\n * Args.prompt(optionalRedirectPrompt),\n * Args.optional(),\n * );\n */\nfunction optional() {\n return function optionalArg<A, E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ) {\n return Effect.gen(function* optionalValue() {\n const state = yield* arg.state;\n if (state._tag === 'Inactive') return undefined;\n\n return yield* state.value;\n });\n };\n}\n\nexport const Args = {\n text,\n bool,\n has,\n hasAny,\n isTrue,\n raw,\n availableWhen,\n prompt,\n confirm,\n validate,\n required,\n optional,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkDtC,MAAM,OAAO,GAAG,CACd,IAAY,EACZ,KAA4D,EAC/B,EAAE;IAC/B,MAAM,GAAG,GAAgC;QACvC,IAAI;QACJ,KAAK;QACL,IAAI;YACF,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CACb,KAAyC,EACzC,QAAiB,EACG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAE/D,MAAM,QAAQ,GAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAEnD,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,8BAA8B,IAAI,EAAE,CAAC;AAU9E;;;;;;GAMG;AACH,SAAS,GAAG,CAAC,IAA6B,EAAE,GAAW;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,GAAG,CAAC,IAA6B,EAAE,GAAW;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,MAAM,CAAC,IAA6B,EAAE,IAAc;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,MAAM,CAAC,IAA6B,EAAE,GAAW;IACxD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,IAAI,CACX,IAA6B,EAC7B,GAAW,EACX,OAAoB;IAEpB,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,IAAI,KAAK,GAAG,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEjE,OAAO,OAAO,CACZ,IAAI,EACJ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAY;IACjD,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa;QACvC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,qBAAqB,IAAI,EAAE;SACrC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,IAAI,CACX,IAA6B,EAC7B,GAAW,EACX,OAAoB;IAEpB,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,IAAI,KAAK,GAAG,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEjE,OAAO,OAAO,CACZ,IAAI,EACJ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,IAAY;IACpD,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB;QAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACpD,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAEvD,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,qBAAqB,IAAI,EAAE;SACrC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAsB;IAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,SAAS,CAChB,OAAoC,EACpC,QAEiD;IAEjD,OAAO,OAAO,CACZ,OAAO,CAAC,IAAI,EACZ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,QAAQ,CAAC;QAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAIA,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,aAAa,CAAC,SAAkB,EAAE,OAA4B;IACrE,OAAO,SAAS,gBAAgB,CAC9B,GAAgC;QAEhC,OAAO,OAAO,CACZ,GAAG,CAAC,IAAI,EACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,mBAAmB;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACzD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;oBAC9B,OAAO,EACL,OAAO,EAAE,OAAO;wBAChB,GAAG,GAAG,CAAC,IAAI,uCAAuC;iBACrD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,MAAM,CAAC,UAA6B;IAC3C,OAAO,SAAS,SAAS,CACvB,GAAqC;QAErC,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,iBAAiB;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAEtC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;YAClC,MAAM,MAAM,GAAG,GAAG;gBAChB,CAAC,CAAC,UAAU,CAAC,YAAY;gBACzB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAC7C,CAAC;YACN,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAE3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,OAAO,CAAC,iBAAuC;IACtD,OAAO,SAAS,UAAU,CACxB,GAAsC;QAEtC,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,kBAAkB;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAEtC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;YAClC,IAAI,GAAG;gBAAE,OAAO,iBAAiB,CAAC,YAAY,CAAC;YAE/C,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CACpE,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAC7C,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,QAAQ,CAAI,SAA2C;IAC9D,OAAO,SAAS,WAAW,CACzB,GAAgC;QAEhC,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAE1C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,QAAQ,CAAC,OAAwB;IACxC,OAAO,SAAS,WAAW,CACzB,GAAgC;QAMhC,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,YAAY;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,SAAS,CAAC;YAEhD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAEtC,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;aACtD,CAAC,CAAC;QACL,CAAC,CAIA,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,QAAQ;IACf,OAAO,SAAS,WAAW,CACzB,GAAgC;QAEhC,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,SAAS,CAAC;YAEhD,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,MAAM;IACN,MAAM;IACN,GAAG;IACH,aAAa;IACb,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC","sourcesContent":["/**\n * Args lets commands read CLI flags as a small pipeline:\n *\n * 1. Parse a value from opts\n * 2. Gate it: when is this flag available?\n * 3. Prompt for a missing value, when interactive\n * 4. Validate and finish as required or optional\n *\n * This keeps the \"can this flag be used here?\" logic next to the value it\n * controls. For example, a Google client secret is only meaningful when using\n * custom web credentials:\n *\n * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(\n * Args.availableWhen(usesCustomWebCredentials),\n * Args.prompt(clientSecretPrompt({ providerUrl })),\n * Args.required(),\n * );\n *\n * The key argument to text/bool/has is the exact opts lookup key. If the\n * user-facing flag name differs, pass simpleName for errors:\n *\n * Args.text(opts, 'customRedirectUri', { simpleName: '--custom-redirect-uri' })\n */\nimport { Effect } from 'effect';\nimport { pipeArguments, type Pipeable } from 'effect/Pipeable';\nimport { BadArgsError } from '../errors.ts';\nimport { GlobalOpts } from '../context/globalOpts.ts';\nimport { UI } from '../ui/index.ts';\nimport { runUIEffect } from './ui.ts';\n\ntype ActiveArg<A, E, R> = {\n readonly _tag: 'Active';\n readonly provided: boolean;\n readonly value: Effect.Effect<A | undefined, E, R>;\n};\n\ntype InactiveArg = {\n readonly _tag: 'Inactive';\n};\n\ntype ArgState<A, E, R, CanBeInactive extends boolean> =\n | ActiveArg<A, E, R>\n | (CanBeInactive extends true ? InactiveArg : never);\n\n/**\n * A parsed CLI arg that can be composed with Args helpers.\n *\n * Commands usually create one with text() or bool(), then finish with\n * required() or optional().\n *\n * @example\n * const name = yield* Args.text(opts, 'name').pipe(\n * Args.prompt({ prompt: 'Client Name:' }),\n * Args.required(),\n * );\n */\nexport interface Arg<\n A,\n E = never,\n R = never,\n CanBeInactive extends boolean = false,\n> extends Pipeable {\n readonly flag: string;\n readonly state: Effect.Effect<ArgState<A, E, R, CanBeInactive>, E, R>;\n}\n\nexport type ArgOptions = {\n /**\n * Use when the opts key is not the user-facing flag name.\n *\n * @example\n * Args.text(opts, 'customRedirectUri', {\n * simpleName: '--custom-redirect-uri',\n * })\n */\n simpleName?: string;\n};\n\nconst makeArg = <A, E, R, CanBeInactive extends boolean>(\n flag: string,\n state: Effect.Effect<ArgState<A, E, R, CanBeInactive>, E, R>,\n): Arg<A, E, R, CanBeInactive> => {\n const arg: Arg<A, E, R, CanBeInactive> = {\n flag,\n state,\n pipe() {\n return pipeArguments(this, arguments);\n },\n };\n return arg;\n};\n\nconst active = <A, E, R>(\n value: Effect.Effect<A | undefined, E, R>,\n provided: boolean,\n): ActiveArg<A, E, R> => ({ _tag: 'Active', provided, value });\n\nconst inactive: InactiveArg = { _tag: 'Inactive' };\n\nconst missingMessage = (flag: string) => `Missing required value for ${flag}`;\n\ntype MissingOptions = {\n message?: string;\n};\n\ntype UnavailableOptions = {\n message?: string;\n};\n\n/**\n * Reads a value directly from opts. Prefer text/bool for values that will be\n * validated or used in an Args pipeline.\n *\n * @example\n * const rawType = Args.raw(opts, 'type');\n */\nfunction raw(opts: Record<string, unknown>, key: string) {\n return opts[key];\n}\n\n/**\n * @example\n * if (Args.has(opts, 'custom-redirect-uri')) {\n * // The user explicitly passed --custom-redirect-uri.\n * }\n */\nfunction has(opts: Record<string, unknown>, key: string) {\n return Object.prototype.hasOwnProperty.call(opts, key);\n}\n\n/**\n * @example\n * const configureWeb = Args.hasAny(opts, [\n * 'team-id',\n * 'key-id',\n * 'private-key-file',\n * ]);\n */\nfunction hasAny(opts: Record<string, unknown>, keys: string[]) {\n return keys.some((key) => has(opts, key));\n}\n\n/**\n * Returns true only for boolean true or the string \"true\".\n *\n * @example\n * const useDevCredentials = Args.isTrue(opts, 'dev-credentials');\n */\nfunction isTrue(opts: Record<string, unknown>, key: string) {\n const value = raw(opts, key);\n return value === true || value === 'true';\n}\n\n/**\n * Starts a string arg pipeline. Strings are trimmed, numbers are stringified,\n * empty values become missing values, and other types produce BadArgsError.\n *\n * @example\n * const clientId = yield* Args.text(opts, 'client-id').pipe(\n * Args.prompt(clientIdPrompt({ providerUrl })),\n * Args.required(),\n * );\n */\nfunction text(\n opts: Record<string, unknown>,\n key: string,\n options?: ArgOptions,\n): Arg<string, BadArgsError> {\n const flag = options?.simpleName ?? `--${key}`;\n const provided = Object.prototype.hasOwnProperty.call(opts, key);\n\n return makeArg(\n flag,\n Effect.succeed(active(readTextValue(opts[key], flag), provided)),\n );\n}\n\nfunction readTextValue(value: unknown, flag: string) {\n return Effect.gen(function* readTextValue() {\n if (value === undefined || value === null) return undefined;\n\n if (typeof value === 'string' || typeof value === 'number') {\n const trimmed = String(value).trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\n/**\n * Starts a boolean arg pipeline. Accepts booleans and the strings \"true\" or\n * \"false\"; other supplied values produce BadArgsError.\n *\n * @example\n * const configureWeb = yield* Args.bool(opts, 'configure-web').pipe(\n * Args.confirm({ promptText: 'Configure web redirect flow?' }),\n * Args.required(),\n * );\n */\nfunction bool(\n opts: Record<string, unknown>,\n key: string,\n options?: ArgOptions,\n): Arg<boolean, BadArgsError> {\n const flag = options?.simpleName ?? `--${key}`;\n const provided = Object.prototype.hasOwnProperty.call(opts, key);\n\n return makeArg(\n flag,\n Effect.succeed(active(readBooleanValue(opts[key], flag), provided)),\n );\n}\n\nfunction readBooleanValue(value: unknown, flag: string) {\n return Effect.gen(function* readBooleanValue() {\n if (value === undefined || value === null) return undefined;\n if (value === true || value === 'true') return true;\n if (value === false || value === 'false') return false;\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\nfunction uiErrorToBadArgs(e: { message: string }) {\n return BadArgsError.make({ message: `UI error: ${e.message}` });\n}\n\nfunction mapActive<A, B, E, R, E2, R2, CanBeInactive extends boolean>(\n wrapper: Arg<A, E, R, CanBeInactive>,\n mapValue: (\n value: Effect.Effect<A | undefined, E, R>,\n ) => Effect.Effect<B | undefined, E | E2, R | R2>,\n): Arg<B, E | E2, R | R2, CanBeInactive> {\n return makeArg(\n wrapper.flag,\n Effect.gen(function* mapArgState() {\n const state = yield* wrapper.state;\n if (state._tag === 'Inactive') return inactive;\n return active(mapValue(state.value), state.provided);\n }) as Effect.Effect<\n ArgState<B, E | E2, R | R2, CanBeInactive>,\n E | E2,\n R | R2\n >,\n );\n}\n\n/**\n * Gates an arg behind a mode or earlier choice.\n *\n * If the condition is false and the user supplied the flag, this returns an\n * error.\n *\n * @example\n * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(\n * Args.availableWhen(appType === 'web'),\n * Args.prompt(clientSecretPrompt({ providerUrl })),\n * Args.required(),\n * );\n */\nfunction availableWhen(condition: boolean, options?: UnavailableOptions) {\n return function availableWhenArg<A, E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ) {\n return makeArg<A, E | BadArgsError, R, true>(\n arg.flag,\n Effect.gen(function* gateArgAvailability() {\n const state = yield* arg.state;\n if (condition || state._tag === 'Inactive') return state;\n if (state.provided) {\n return yield* BadArgsError.make({\n message:\n options?.message ??\n `${arg.flag} is not compatible with other options`,\n });\n }\n return inactive;\n }),\n );\n };\n}\n\n/**\n * Prompts for a missing text value.\n *\n * With --yes, the prompt is skipped. If inputProps.defaultValue is set, that\n * value is used. Otherwise the value stays missing.\n *\n * @example\n * const clientName = yield* Args.text(opts, 'name').pipe(\n * Args.prompt({\n * prompt: 'Client Name:',\n * defaultValue: suggestedClientName,\n * }),\n * Args.required(),\n * );\n */\nfunction prompt(inputProps: UI.TextInputProps) {\n return function promptArg<E, R, CanBeInactive extends boolean>(\n arg: Arg<string, E, R, CanBeInactive>,\n ): Arg<string, E | BadArgsError, R | GlobalOpts, CanBeInactive> {\n return mapActive(arg, (valueEffect) =>\n Effect.gen(function* promptWhenMissing() {\n const value = yield* valueEffect;\n if (value !== undefined) return value;\n\n const { yes } = yield* GlobalOpts;\n const result = yes\n ? inputProps.defaultValue\n : yield* runUIEffect(new UI.TextInput(inputProps)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n if (result === undefined) return undefined;\n\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }),\n );\n };\n}\n\n/**\n * Prompts for a missing boolean value.\n *\n * With --yes, the prompt is skipped and confirmationProps.defaultValue is used.\n *\n * @example\n * const configureWeb = yield* Args.bool(opts, 'configure-web').pipe(\n * Args.confirm({\n * promptText: 'Configure web redirect flow?',\n * defaultValue: false,\n * }),\n * Args.required(),\n * );\n */\nfunction confirm(confirmationProps: UI.ConfirmationProps) {\n return function confirmArg<E, R, CanBeInactive extends boolean>(\n arg: Arg<boolean, E, R, CanBeInactive>,\n ): Arg<boolean, E | BadArgsError, R | GlobalOpts, CanBeInactive> {\n return mapActive(arg, (valueEffect) =>\n Effect.gen(function* confirmWhenMissing() {\n const value = yield* valueEffect;\n if (value !== undefined) return value;\n\n const { yes } = yield* GlobalOpts;\n if (yes) return confirmationProps.defaultValue;\n\n return yield* runUIEffect(new UI.Confirmation(confirmationProps)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n }),\n );\n };\n}\n\n/**\n * Validates a present value. Return an error message to fail, or undefined to\n * accept the value. Missing and inactive args pass through unchanged.\n *\n * @example\n * const projectId = yield* Args.text(opts, 'project-id').pipe(\n * Args.prompt(firebaseProjectIdPrompt({})),\n * Args.validate(validateFirebaseProjectId),\n * Args.required(),\n * );\n */\nfunction validate<A>(validator: (value: A) => string | undefined) {\n return function validateArg<E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ): Arg<A, E | BadArgsError, R, CanBeInactive> {\n return mapActive(arg, (valueEffect) =>\n Effect.gen(function* validateValue() {\n const value = yield* valueEffect;\n if (value === undefined) return undefined;\n\n const message = validator(value);\n if (!message) return value;\n\n return yield* BadArgsError.make({ message });\n }),\n );\n };\n}\n\n/**\n * Finishes a pipeline with a required value.\n *\n * Missing active args produce BadArgsError. Inactive args return undefined, so\n * callers can skip downstream work for unavailable flags.\n *\n * @example\n * const clientId = yield* Args.text(opts, 'client-id').pipe(\n * Args.prompt(clientIdPrompt({ providerUrl })),\n * Args.required(),\n * );\n */\nfunction required(options?: MissingOptions) {\n return function requiredArg<A, E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ): Effect.Effect<\n CanBeInactive extends true ? A | undefined : A,\n E | BadArgsError,\n R\n > {\n return Effect.gen(function* requireValue() {\n const state = yield* arg.state;\n if (state._tag === 'Inactive') return undefined;\n\n const value = yield* state.value;\n if (value !== undefined) return value;\n\n return yield* BadArgsError.make({\n message: options?.message ?? missingMessage(arg.flag),\n });\n }) as Effect.Effect<\n CanBeInactive extends true ? A | undefined : A,\n E | BadArgsError,\n R\n >;\n };\n}\n\n/**\n * Finishes a pipeline with an optional value.\n *\n * Missing and inactive args return undefined.\n *\n * @example\n * const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(\n * Args.prompt(optionalRedirectPrompt),\n * Args.optional(),\n * );\n */\nfunction optional() {\n return function optionalArg<A, E, R, CanBeInactive extends boolean>(\n arg: Arg<A, E, R, CanBeInactive>,\n ) {\n return Effect.gen(function* optionalValue() {\n const state = yield* arg.state;\n if (state._tag === 'Inactive') return undefined;\n\n return yield* state.value;\n });\n };\n}\n\nexport const Args = {\n text,\n bool,\n has,\n hasAny,\n isTrue,\n raw,\n availableWhen,\n prompt,\n confirm,\n validate,\n required,\n optional,\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "instant-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.23-branch-codex-cli-args-combinators.
|
|
4
|
+
"version": "1.0.23-branch-codex-cli-args-combinators.25405773508.1",
|
|
5
5
|
"description": "Instant's CLI",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"homepage": "https://github.com/instantdb/instant/tree/main/client/packages/cli",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"strip-ansi": "^7.1.2",
|
|
51
51
|
"supports-hyperlinks": "^4.4.0",
|
|
52
52
|
"unconfig": "^7.5.0",
|
|
53
|
-
"@instantdb/core": "1.0.23-branch-codex-cli-args-combinators.
|
|
54
|
-
"@instantdb/platform": "1.0.23-branch-codex-cli-args-combinators.
|
|
55
|
-
"@instantdb/version": "1.0.23-branch-codex-cli-args-combinators.
|
|
53
|
+
"@instantdb/core": "1.0.23-branch-codex-cli-args-combinators.25405773508.1",
|
|
54
|
+
"@instantdb/platform": "1.0.23-branch-codex-cli-args-combinators.25405773508.1",
|
|
55
|
+
"@instantdb/version": "1.0.23-branch-codex-cli-args-combinators.25405773508.1"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@babel/core": "^7.17.9",
|
package/src/lib/args.ts
CHANGED
|
@@ -119,8 +119,6 @@ function raw(opts: Record<string, unknown>, key: string) {
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
/**
|
|
122
|
-
* Checks whether a flag key was supplied, even if the supplied value is empty.
|
|
123
|
-
*
|
|
124
122
|
* @example
|
|
125
123
|
* if (Args.has(opts, 'custom-redirect-uri')) {
|
|
126
124
|
* // The user explicitly passed --custom-redirect-uri.
|
|
@@ -131,9 +129,6 @@ function has(opts: Record<string, unknown>, key: string) {
|
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
/**
|
|
134
|
-
* Checks whether any flag in a group was supplied. Useful when one flag should
|
|
135
|
-
* opt into a mode that unlocks related flags.
|
|
136
|
-
*
|
|
137
132
|
* @example
|
|
138
133
|
* const configureWeb = Args.hasAny(opts, [
|
|
139
134
|
* 'team-id',
|
|
@@ -259,8 +254,7 @@ function mapActive<A, B, E, R, E2, R2, CanBeInactive extends boolean>(
|
|
|
259
254
|
* Gates an arg behind a mode or earlier choice.
|
|
260
255
|
*
|
|
261
256
|
* If the condition is false and the user supplied the flag, this returns an
|
|
262
|
-
* error.
|
|
263
|
-
* inactive, so required() resolves to undefined instead of erroring.
|
|
257
|
+
* error.
|
|
264
258
|
*
|
|
265
259
|
* @example
|
|
266
260
|
* const clientSecret = yield* Args.text(opts, 'client-secret').pipe(
|