instant-cli 1.0.23-branch-codex-cli-args-combinators.25405731325.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > instant-cli@1.0.23-branch-codex-cli-args-combinators.25405731325.1 build /home/runner/work/instant/instant/client/packages/cli
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
 
@@ -122,11 +122,10 @@ declare function text(opts: Record<string, unknown>, key: string, options?: ArgO
122
122
  */
123
123
  declare function bool(opts: Record<string, unknown>, key: string, options?: ArgOptions): Arg<boolean, BadArgsError>;
124
124
  /**
125
- * Allows an arg only when a mode or earlier choice makes it valid.
125
+ * Gates an arg behind a mode or earlier choice.
126
126
  *
127
- * When condition is false, a supplied flag fails as incompatible. An omitted
128
- * flag is ignored, even if the pipeline later calls required(), because that
129
- * flag does not apply in this mode.
127
+ * If the condition is false and the user supplied the flag, this returns an
128
+ * error.
130
129
  *
131
130
  * @example
132
131
  * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(
@@ -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;;;;;GAKG;AACH,iBAAS,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,WAEtD;AAED;;;;;;;GAOG;AACH,iBAAS,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAE5D;AAED;;;;;GAKG;AACH,iBAAS,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,WAGzD;AAED;;;;;;;;;GASG;AACH,iBAAS,IAAI,CACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,UAAU,GACnB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAQ3B;AAiBD;;;;;;;;;GASG;AACH,iBAAS,IAAI,CACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,UAAU,GACnB,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAQ5B;AAsCD;;;;;;;;;;;;;GAaG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,IACpC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,EACrE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,uCAkBnC;AAED;;;;;;;;;;;;;;GAcG;AACH,iBAAS,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,IACjB,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,EAC3D,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,KACpC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,UAAU,EAAE,aAAa,CAAC,CAmBhE;AAED;;;;;;;;;;;;;GAaG;AACH,iBAAS,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,IAC3B,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,EAC5D,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,KACrC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,UAAU,EAAE,aAAa,CAAC,CAejE;AAED;;;;;;;;;;GAUG;AACH,iBAAS,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,IAClC,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,EAC7D,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,KAC/B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAa9C;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,IACZ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,EAChE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,KAC/B,MAAM,CAAC,MAAM,CACd,aAAa,SAAS,IAAI,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,EAC9C,CAAC,GAAG,YAAY,EAChB,CAAC,CACF,CAiBF;AAED;;;;;;;;;;GAUG;AACH,iBAAS,QAAQ,KACa,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,SAAS,OAAO,EAChE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,wCASnC;AAED,eAAO,MAAM,IAAI;;;;;;;;;;;;;CAahB,CAAC"}
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
@@ -148,11 +148,10 @@ function mapActive(wrapper, mapValue) {
148
148
  }));
149
149
  }
150
150
  /**
151
- * Allows an arg only when a mode or earlier choice makes it valid.
151
+ * Gates an arg behind a mode or earlier choice.
152
152
  *
153
- * When condition is false, a supplied flag fails as incompatible. An omitted
154
- * flag is ignored, even if the pipeline later calls required(), because that
155
- * flag does not apply in this mode.
153
+ * If the condition is false and the user supplied the flag, this returns an
154
+ * error.
156
155
  *
157
156
  * @example
158
157
  * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(
@@ -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 * @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 * Allows an arg only when a mode or earlier choice makes it valid.\n *\n * When condition is false, a supplied flag fails as incompatible. An omitted\n * flag is ignored, even if the pipeline later calls required(), because that\n * flag does not apply in this mode.\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":"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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 * @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.25405731325.1",
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.25405731325.1",
54
- "@instantdb/platform": "1.0.23-branch-codex-cli-args-combinators.25405731325.1",
55
- "@instantdb/version": "1.0.23-branch-codex-cli-args-combinators.25405731325.1"
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
@@ -251,11 +251,10 @@ function mapActive<A, B, E, R, E2, R2, CanBeInactive extends boolean>(
251
251
  }
252
252
 
253
253
  /**
254
- * Allows an arg only when a mode or earlier choice makes it valid.
254
+ * Gates an arg behind a mode or earlier choice.
255
255
  *
256
- * When condition is false, a supplied flag fails as incompatible. An omitted
257
- * flag is ignored, even if the pipeline later calls required(), because that
258
- * flag does not apply in this mode.
256
+ * If the condition is false and the user supplied the flag, this returns an
257
+ * error.
259
258
  *
260
259
  * @example
261
260
  * const clientSecret = yield* Args.text(opts, 'client-secret').pipe(