@orizm/cli 3.0.0 → 3.1.0
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/{bucket-6d3VNt1D.mjs → bucket-DqW-WEYb.mjs} +2 -2
- package/dist/{bucket-6d3VNt1D.mjs.map → bucket-DqW-WEYb.mjs.map} +1 -1
- package/dist/{bucket-DjbHz9_A.cjs → bucket-mg5QQORh.cjs} +2 -2
- package/dist/{bucket-DjbHz9_A.cjs.map → bucket-mg5QQORh.cjs.map} +1 -1
- package/dist/cli/main.cjs +8 -8
- package/dist/cli/main.d.mts +1 -1
- package/dist/cli/main.mjs +8 -8
- package/dist/config/index.d.mts +0 -1
- package/dist/config/index.d.mts.map +1 -1
- package/dist/{consumer-DqyRfpsl.mjs → consumer-C4WiGHWG.mjs} +2 -2
- package/dist/{consumer-DqyRfpsl.mjs.map → consumer-C4WiGHWG.mjs.map} +1 -1
- package/dist/{consumer-BBsH8b1j.cjs → consumer-l-8wUK8E.cjs} +2 -2
- package/dist/{consumer-BBsH8b1j.cjs.map → consumer-l-8wUK8E.cjs.map} +1 -1
- package/dist/{content-BsoRmjis.mjs → content-BOb6NC8M.mjs} +4 -4
- package/dist/{content-BsoRmjis.mjs.map → content-BOb6NC8M.mjs.map} +1 -1
- package/dist/{content-Y-2Y0cyn.cjs → content-DMjSwor1.cjs} +4 -4
- package/dist/{content-Y-2Y0cyn.cjs.map → content-DMjSwor1.cjs.map} +1 -1
- package/dist/{create-CkFBiEDH.mjs → create-B1ZBOqcV.mjs} +2 -2
- package/dist/{create-CkFBiEDH.mjs.map → create-B1ZBOqcV.mjs.map} +1 -1
- package/dist/{create-RLyp_dl6.mjs → create-Belwettw.mjs} +2 -2
- package/dist/{create-RLyp_dl6.mjs.map → create-Belwettw.mjs.map} +1 -1
- package/dist/{create-CykRHseR.cjs → create-CCsn7yp5.cjs} +4 -4
- package/dist/{create-CykRHseR.cjs.map → create-CCsn7yp5.cjs.map} +1 -1
- package/dist/{create--1NYduI_.cjs → create-CmOriwGo.cjs} +2 -2
- package/dist/{create--1NYduI_.cjs.map → create-CmOriwGo.cjs.map} +1 -1
- package/dist/{create-BqlxdhcR.mjs → create-D5suBd3J.mjs} +4 -4
- package/dist/{create-BqlxdhcR.mjs.map → create-D5suBd3J.mjs.map} +1 -1
- package/dist/{create-B_gsZCL-.cjs → create-DJY71sp9.cjs} +2 -2
- package/dist/{create-B_gsZCL-.cjs.map → create-DJY71sp9.cjs.map} +1 -1
- package/dist/{delete-CrOVRvMo.cjs → delete-D4r1ve4v.cjs} +2 -2
- package/dist/{delete-CrOVRvMo.cjs.map → delete-D4r1ve4v.cjs.map} +1 -1
- package/dist/{delete-Bx2oNROv.cjs → delete-DVrafka1.cjs} +2 -2
- package/dist/{delete-Bx2oNROv.cjs.map → delete-DVrafka1.cjs.map} +1 -1
- package/dist/{delete-CGW0VMK6.cjs → delete-WpMIIvjj.cjs} +2 -2
- package/dist/{delete-CGW0VMK6.cjs.map → delete-WpMIIvjj.cjs.map} +1 -1
- package/dist/{delete-BenBNL2p.mjs → delete-XWJRhBFs.mjs} +2 -2
- package/dist/{delete-BenBNL2p.mjs.map → delete-XWJRhBFs.mjs.map} +1 -1
- package/dist/{delete-DehKYCXh.mjs → delete-YYh_0khQ.mjs} +2 -2
- package/dist/{delete-DehKYCXh.mjs.map → delete-YYh_0khQ.mjs.map} +1 -1
- package/dist/{delete-CSSd0gmt.mjs → delete-ZIifaG0i.mjs} +2 -2
- package/dist/{delete-CSSd0gmt.mjs.map → delete-ZIifaG0i.mjs.map} +1 -1
- package/dist/{get-DPGx1zU4.mjs → get-B6vBaq_D.mjs} +4 -3
- package/dist/get-B6vBaq_D.mjs.map +1 -0
- package/dist/{get-BtmzDaVn.mjs → get-C7dKoSIc.mjs} +2 -2
- package/dist/{get-BtmzDaVn.mjs.map → get-C7dKoSIc.mjs.map} +1 -1
- package/dist/{get-CVV3h6HR.cjs → get-DjRyK0hJ.cjs} +2 -2
- package/dist/{get-CVV3h6HR.cjs.map → get-DjRyK0hJ.cjs.map} +1 -1
- package/dist/{get-BHniACk5.cjs → get-DwtzBjGV.cjs} +4 -3
- package/dist/get-DwtzBjGV.cjs.map +1 -0
- package/dist/{group-roles-BEEzLxPX.mjs → group-roles-BIH7q8tf.mjs} +2 -2
- package/dist/{group-roles-BEEzLxPX.mjs.map → group-roles-BIH7q8tf.mjs.map} +1 -1
- package/dist/{group-roles-Bl_mEodO.cjs → group-roles-B_iAZog-.cjs} +2 -2
- package/dist/{group-roles-Bl_mEodO.cjs.map → group-roles-B_iAZog-.cjs.map} +1 -1
- package/dist/{invite-DsOCKGTJ.mjs → invite-D66DSMvq.mjs} +3 -3
- package/dist/{invite-DsOCKGTJ.mjs.map → invite-D66DSMvq.mjs.map} +1 -1
- package/dist/{invite-Dts9uNQL.cjs → invite-DPygtCoO.cjs} +3 -3
- package/dist/{invite-Dts9uNQL.cjs.map → invite-DPygtCoO.cjs.map} +1 -1
- package/dist/{key-BogfSiz_.mjs → key-C71Ffll9.mjs} +3 -3
- package/dist/{key-BogfSiz_.mjs.map → key-C71Ffll9.mjs.map} +1 -1
- package/dist/{key-Czwiu2pW.cjs → key-DQr7qRL2.cjs} +3 -3
- package/dist/{key-Czwiu2pW.cjs.map → key-DQr7qRL2.cjs.map} +1 -1
- package/dist/{list-CxHDoXjv.mjs → list-B0N4-Q-5.mjs} +2 -2
- package/dist/{list-CxHDoXjv.mjs.map → list-B0N4-Q-5.mjs.map} +1 -1
- package/dist/{list-2BpPj4Z0.cjs → list-BHvURTWd.cjs} +2 -2
- package/dist/{list-2BpPj4Z0.cjs.map → list-BHvURTWd.cjs.map} +1 -1
- package/dist/{list-DRKF2uKW.cjs → list-Br6Cmi9S.cjs} +2 -2
- package/dist/{list-DRKF2uKW.cjs.map → list-Br6Cmi9S.cjs.map} +1 -1
- package/dist/{list-syVDGkVR.mjs → list-BsYYq9wT.mjs} +2 -2
- package/dist/{list-syVDGkVR.mjs.map → list-BsYYq9wT.mjs.map} +1 -1
- package/dist/{list-CJuefq_I.cjs → list-BzLraBnA.cjs} +2 -2
- package/dist/{list-CJuefq_I.cjs.map → list-BzLraBnA.cjs.map} +1 -1
- package/dist/{list-V3W6hvOa.cjs → list-CFwW0G9f.cjs} +2 -2
- package/dist/{list-V3W6hvOa.cjs.map → list-CFwW0G9f.cjs.map} +1 -1
- package/dist/{list-60NcDr0q.cjs → list-CU42ERNY.cjs} +2 -2
- package/dist/{list-60NcDr0q.cjs.map → list-CU42ERNY.cjs.map} +1 -1
- package/dist/{list-CYE9Exi3.cjs → list-DexBclfb.cjs} +3 -3
- package/dist/{list-CYE9Exi3.cjs.map → list-DexBclfb.cjs.map} +1 -1
- package/dist/{list-DdJ05juK.mjs → list-DrZYlidZ.mjs} +3 -3
- package/dist/{list-DdJ05juK.mjs.map → list-DrZYlidZ.mjs.map} +1 -1
- package/dist/{list-D24J_Qbm.mjs → list-ocfd7631.mjs} +2 -2
- package/dist/{list-D24J_Qbm.mjs.map → list-ocfd7631.mjs.map} +1 -1
- package/dist/{list-yQZLzkC7.mjs → list-sQk00GV5.mjs} +2 -2
- package/dist/{list-yQZLzkC7.mjs.map → list-sQk00GV5.mjs.map} +1 -1
- package/dist/{list-CfIeReBx.mjs → list-vbMaOiza.mjs} +2 -2
- package/dist/{list-CfIeReBx.mjs.map → list-vbMaOiza.mjs.map} +1 -1
- package/dist/{management-DHXxdCra.cjs → management-BGYcZB4c.cjs} +5 -5
- package/dist/{management-DHXxdCra.cjs.map → management-BGYcZB4c.cjs.map} +1 -1
- package/dist/{management-BaN1Nynl.mjs → management-DDACMgbU.mjs} +5 -5
- package/dist/{management-BaN1Nynl.mjs.map → management-DDACMgbU.mjs.map} +1 -1
- package/dist/{object-DT7UEW9G.cjs → object-DVqidsEc.cjs} +2 -2
- package/dist/{object-DT7UEW9G.cjs.map → object-DVqidsEc.cjs.map} +1 -1
- package/dist/{object-BfUf8Y6w.mjs → object-qdBdEghr.mjs} +2 -2
- package/dist/{object-BfUf8Y6w.mjs.map → object-qdBdEghr.mjs.map} +1 -1
- package/dist/{parse-BeO2IwfI.cjs → parse-C8oHgQXx.cjs} +2 -2
- package/dist/{parse-BeO2IwfI.cjs.map → parse-C8oHgQXx.cjs.map} +1 -1
- package/dist/{parse-CA5fBB3x.mjs → parse-DA0k5AHa.mjs} +2 -2
- package/dist/{parse-CA5fBB3x.mjs.map → parse-DA0k5AHa.mjs.map} +1 -1
- package/dist/{project-CNr9xMny.cjs → project-BX7zvWB1.cjs} +2 -2
- package/dist/{project-CNr9xMny.cjs.map → project-BX7zvWB1.cjs.map} +1 -1
- package/dist/{project-DFoHcXi5.mjs → project-CaXD3QBs.mjs} +2 -2
- package/dist/{project-DFoHcXi5.mjs.map → project-CaXD3QBs.mjs.map} +1 -1
- package/dist/{project-user-9D7Ey_Fu.mjs → project-user-Cp7i6orv.mjs} +5 -5
- package/dist/{project-user-9D7Ey_Fu.mjs.map → project-user-Cp7i6orv.mjs.map} +1 -1
- package/dist/{project-user-DTPFjyfZ.cjs → project-user-Dm0qR-sh.cjs} +5 -5
- package/dist/{project-user-DTPFjyfZ.cjs.map → project-user-Dm0qR-sh.cjs.map} +1 -1
- package/dist/{schema-DdhyEh81.cjs → schema-B3iRqvYK.cjs} +2 -2
- package/dist/{schema-DdhyEh81.cjs.map → schema-B3iRqvYK.cjs.map} +1 -1
- package/dist/{schema-DDzrgjkT.mjs → schema-exG250MU.mjs} +2 -2
- package/dist/{schema-DDzrgjkT.mjs.map → schema-exG250MU.mjs.map} +1 -1
- package/dist/{table-event-C16cp9nq.mjs → table-event-C7gORNlb.mjs} +2 -2
- package/dist/{table-event-C16cp9nq.mjs.map → table-event-C7gORNlb.mjs.map} +1 -1
- package/dist/{table-event-D7PPuS7E.cjs → table-event-DXkCK29f.cjs} +2 -2
- package/dist/{table-event-D7PPuS7E.cjs.map → table-event-DXkCK29f.cjs.map} +1 -1
- package/dist/{update-8e3u4jKa.mjs → update-B4lv4dAz.mjs} +3 -3
- package/dist/{update-8e3u4jKa.mjs.map → update-B4lv4dAz.mjs.map} +1 -1
- package/dist/{update-Cktd0zXA.cjs → update-CIH6sSVk.cjs} +3 -3
- package/dist/{update-Cktd0zXA.cjs.map → update-CIH6sSVk.cjs.map} +1 -1
- package/dist/{update-ap5Qv1Yl.cjs → update-CJgEmSWJ.cjs} +4 -4
- package/dist/{update-ap5Qv1Yl.cjs.map → update-CJgEmSWJ.cjs.map} +1 -1
- package/dist/{update-CSiOfiPL.mjs → update-CQ4n4Xuf.mjs} +3 -3
- package/dist/{update-CSiOfiPL.mjs.map → update-CQ4n4Xuf.mjs.map} +1 -1
- package/dist/{update-OWC5K8Ne.cjs → update-Cx_2GkQj.cjs} +2 -2
- package/dist/{update-OWC5K8Ne.cjs.map → update-Cx_2GkQj.cjs.map} +1 -1
- package/dist/{update-D-X32BVW.cjs → update-DRnN1kiu.cjs} +3 -3
- package/dist/{update-D-X32BVW.cjs.map → update-DRnN1kiu.cjs.map} +1 -1
- package/dist/{update-CDLviRuu.cjs → update-Do9HHWzs.cjs} +2 -2
- package/dist/{update-CDLviRuu.cjs.map → update-Do9HHWzs.cjs.map} +1 -1
- package/dist/{update-DfYV_TQb.mjs → update-Dyo4vuZs.mjs} +4 -4
- package/dist/{update-DfYV_TQb.mjs.map → update-Dyo4vuZs.mjs.map} +1 -1
- package/dist/{update-yscrx6WQ.mjs → update-mEmULIau.mjs} +2 -2
- package/dist/{update-yscrx6WQ.mjs.map → update-mEmULIau.mjs.map} +1 -1
- package/dist/{update-CjbcI8Qc.mjs → update-rzij1b_o.mjs} +2 -2
- package/dist/{update-CjbcI8Qc.mjs.map → update-rzij1b_o.mjs.map} +1 -1
- package/dist/webhook-CbL4QaR5.cjs +20 -0
- package/dist/{webhook-BsygMMf-.cjs.map → webhook-CbL4QaR5.cjs.map} +1 -1
- package/dist/webhook-CpZ1-Ho5.mjs +20 -0
- package/dist/{webhook-3zs6Ulxd.mjs.map → webhook-CpZ1-Ho5.mjs.map} +1 -1
- package/package.json +15 -15
- package/dist/get-BHniACk5.cjs.map +0 -1
- package/dist/get-DPGx1zU4.mjs.map +0 -1
- package/dist/webhook-3zs6Ulxd.mjs +0 -20
- package/dist/webhook-BsygMMf-.cjs +0 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-CA5fBB3x.mjs","names":[],"sources":["../src/cli/commands/parse.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { Result } from \"@praha/byethrow\";\nimport * as v from \"valibot\";\nimport type { CommandFailure } from \"./define-command.js\";\n\nexport function parseNonNegativeInteger(\n flag: string,\n value: unknown,\n): Result.Result<number, CommandFailure> {\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n return Result.succeed(Number.parseInt(value, 10));\n }\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a non-negative integer.`,\n });\n}\n\n// limit など 1 以上を要求するフラグ向け。0 を渡すとサーバーの 400 まで気づけないため CLI 側で弾く。\nexport function parsePositiveInteger(\n flag: string,\n value: unknown,\n): Result.Result<number, CommandFailure> {\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n const parsed = Number.parseInt(value, 10);\n if (parsed >= 1) return Result.succeed(parsed);\n }\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a positive integer.`,\n });\n}\n\nexport function parseBooleanFlag(\n flag: string,\n value: unknown,\n): Result.Result<boolean | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n if (value === \"true\" || value === \"1\") return Result.succeed(true);\n if (value === \"false\" || value === \"0\") return Result.succeed(false);\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected true, false, 1, or 0.`,\n });\n}\n\n// サーバーが受け付ける値が離散的なフラグ(limit の 50/100/200 など)向け。\n// 任意の整数を通すとサーバーの 400 まで気づけないため、CLI 側で先に弾く。\nexport function parseIntegerChoice(\n flag: string,\n value: unknown,\n allowed: number[],\n): Result.Result<number, CommandFailure> {\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n const parsed = Number.parseInt(value, 10);\n if (allowed.includes(parsed)) return Result.succeed(parsed);\n }\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Valid values: ${allowed.join(\", \")}.`,\n });\n}\n\n// parseInt は \"12abc\" → 12 のように前方一致で読んでしまうため、整数文字列全体を検証する。\nexport function parsePositionalId(\n label: string,\n value: string,\n): Result.Result<number, CommandFailure> {\n if (!/^\\d+$/.test(value)) {\n return Result.fail({\n message: `Invalid ${label}: ${value}. Expected a non-negative integer.`,\n });\n }\n return Result.succeed(Number.parseInt(value, 10));\n}\n\n// new URL() は scheme を問わず通すため http/https 限定のフラグでは ftp: / javascript: などを弾けない。\n// 明示的に scheme を絞り、確実に 400 になるリクエストを送らずに済ませる。\nexport function parseHttpUrl(\n flag: string,\n value: unknown,\n): Result.Result<string, CommandFailure> {\n if (typeof value !== \"string\" || value === \"\") {\n return Result.fail({ message: `Missing --${flag}.` });\n }\n let protocol: string;\n try {\n protocol = new URL(value).protocol;\n } catch {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected an http or https URL.`,\n });\n }\n if (protocol !== \"http:\" && protocol !== \"https:\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected an http or https URL.`,\n });\n }\n return Result.succeed(value);\n}\n\nfunction toCamelCase(value: string): string {\n return value.replace(/-([a-z])/g, (_, char: string) => char.toUpperCase());\n}\n\n// citty 0.2.x は node:util.parseArgs ベースになり、同じフラグの複数指定を配列化せず最後の値だけ\n// 残す。repeatable フラグは citty が捨てた指定値も含め rawArgs から自前で集める。\nexport function collectRepeatableFlag(\n rawArgs: string[],\n flag: string,\n): string[] | undefined {\n // citty は kebab/camel を相互エイリアスするため両表記を受ける\n const names = new Set([`--${flag}`, `--${toCamelCase(flag)}`]);\n const values: string[] = [];\n let seen = false;\n for (let i = 0; i < rawArgs.length; i++) {\n const arg = rawArgs[i];\n if (arg === \"--\") break;\n const eq = arg.indexOf(\"=\");\n if (eq !== -1 && names.has(arg.slice(0, eq))) {\n seen = true;\n values.push(arg.slice(eq + 1));\n continue;\n }\n if (names.has(arg)) {\n seen = true;\n const next = rawArgs[i + 1];\n // 受理する値(header/group-role/status 等)はいずれも \"-\" 始まりにならないため、\n // 次トークンが別フラグなら値なし(空文字)として検証側に弾かせる\n if (next !== undefined && !next.startsWith(\"-\")) {\n values.push(next);\n i++;\n } else {\n values.push(\"\");\n }\n }\n }\n // 「フラグ未指定」と「空配列」を区別する既存の undefined セマンティクスを維持する\n return seen ? values : undefined;\n}\n\n// collectRepeatableFlag が集めた配列、もしくは単一値を受け、文字列の配列に統一して検証する。\nexport function parseRepeatableFlag(\n flag: string,\n value: unknown,\n): Result.Result<string[], CommandFailure> {\n if (value === undefined) return Result.succeed([]);\n const raw = Array.isArray(value) ? value : [value];\n const items: string[] = [];\n for (const item of raw) {\n if (typeof item !== \"string\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${String(item)}. Expected a string.`,\n });\n }\n items.push(item);\n }\n return Result.succeed(items);\n}\n\n// value 側に \":\" を含められるよう(URL ヘッダ値など)、最初の \":\" でのみ分割する。\n// HTTP ヘッダ値は空でも有効なため、header 経路だけ allowEmptyValue で空 value を許す。\nexport function splitColonPair(\n flag: string,\n item: string,\n hint: string,\n options?: { allowEmptyValue?: boolean },\n): Result.Result<[string, string], CommandFailure> {\n const index = item.indexOf(\":\");\n const hasEmptyValue = index === item.length - 1;\n if (index <= 0 || (hasEmptyValue && options?.allowEmptyValue !== true)) {\n return Result.fail({\n message: `Invalid --${flag} value: ${item}. Expected ${hint}.`,\n });\n }\n return Result.succeed([item.slice(0, index), item.slice(index + 1)]);\n}\n\nexport function parseHeaders(\n flag: string,\n value: unknown,\n): Result.Result<{ key: string; value: string }[] | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n\n const items = parseRepeatableFlag(flag, value);\n if (Result.isFailure(items)) return items;\n\n const headers: { key: string; value: string }[] = [];\n for (const item of items.value) {\n const pair = splitColonPair(flag, item, \"<key>:<value>\", {\n allowEmptyValue: true,\n });\n if (Result.isFailure(pair)) return pair;\n headers.push({ key: pair.value[0], value: pair.value[1] });\n }\n return Result.succeed(headers);\n}\n\nconst DataObjectSchema = v.record(v.string(), v.unknown());\n\nexport async function parseDataOption(\n value: unknown,\n): Promise<Result.Result<Record<string, unknown>, CommandFailure>> {\n if (typeof value !== \"string\") {\n return Result.fail({\n message:\n \"Missing --data. Pass a JSON object string or @path/to/file.json.\",\n });\n }\n\n let text = value;\n if (value.startsWith(\"@\")) {\n const path = value.slice(1);\n try {\n text = await readFile(path, \"utf8\");\n } catch {\n return Result.fail({ message: `Could not read --data file: ${path}` });\n }\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n return Result.fail({\n message: `Invalid --data: ${error instanceof Error ? error.message : \"not valid JSON\"}`,\n });\n }\n // valibot の record はオブジェクト以外を弾くが、配列は通すため明示的に弾く\n if (Array.isArray(parsed)) {\n return Result.fail({\n message: \"Invalid --data: expected a JSON object, got an array.\",\n });\n }\n const object = v.safeParse(DataObjectSchema, parsed);\n if (!object.success) {\n return Result.fail({ message: \"Invalid --data: expected a JSON object.\" });\n }\n return Result.succeed(object.output);\n}\n\n// サーバーは filter / order を「JSON.parse できる文字列クエリ」として受けるため、\n// ここでは構文検証だけ行い、再 serialize せず生文字列をそのまま送る。\nexport function parseJsonObjectFlag(\n flag: string,\n value: unknown,\n): Result.Result<string | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n if (typeof value !== \"string\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a JSON object string.`,\n });\n }\n const parsed = tryParseJson(value);\n if (\n Result.isFailure(parsed) ||\n typeof parsed.value !== \"object\" ||\n parsed.value === null ||\n Array.isArray(parsed.value)\n ) {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected a JSON object string.`,\n });\n }\n return Result.succeed(value);\n}\n\nexport function parseJsonObjectOrArrayFlag(\n flag: string,\n value: unknown,\n): Result.Result<string | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n if (typeof value !== \"string\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a JSON object or array string.`,\n });\n }\n const parsed = tryParseJson(value);\n if (\n Result.isFailure(parsed) ||\n typeof parsed.value !== \"object\" ||\n parsed.value === null\n ) {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected a JSON object or array string.`,\n });\n }\n return Result.succeed(value);\n}\n\nfunction tryParseJson(text: string): Result.Result<unknown, undefined> {\n try {\n return Result.succeed(JSON.parse(text));\n } catch {\n return Result.fail(undefined);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-DA0k5AHa.mjs","names":[],"sources":["../src/cli/commands/parse.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { Result } from \"@praha/byethrow\";\nimport * as v from \"valibot\";\nimport type { CommandFailure } from \"./define-command.js\";\n\nexport function parseNonNegativeInteger(\n flag: string,\n value: unknown,\n): Result.Result<number, CommandFailure> {\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n return Result.succeed(Number.parseInt(value, 10));\n }\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a non-negative integer.`,\n });\n}\n\n// limit など 1 以上を要求するフラグ向け。0 を渡すとサーバーの 400 まで気づけないため CLI 側で弾く。\nexport function parsePositiveInteger(\n flag: string,\n value: unknown,\n): Result.Result<number, CommandFailure> {\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n const parsed = Number.parseInt(value, 10);\n if (parsed >= 1) return Result.succeed(parsed);\n }\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a positive integer.`,\n });\n}\n\nexport function parseBooleanFlag(\n flag: string,\n value: unknown,\n): Result.Result<boolean | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n if (value === \"true\" || value === \"1\") return Result.succeed(true);\n if (value === \"false\" || value === \"0\") return Result.succeed(false);\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected true, false, 1, or 0.`,\n });\n}\n\n// サーバーが受け付ける値が離散的なフラグ(limit の 50/100/200 など)向け。\n// 任意の整数を通すとサーバーの 400 まで気づけないため、CLI 側で先に弾く。\nexport function parseIntegerChoice(\n flag: string,\n value: unknown,\n allowed: number[],\n): Result.Result<number, CommandFailure> {\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n const parsed = Number.parseInt(value, 10);\n if (allowed.includes(parsed)) return Result.succeed(parsed);\n }\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Valid values: ${allowed.join(\", \")}.`,\n });\n}\n\n// parseInt は \"12abc\" → 12 のように前方一致で読んでしまうため、整数文字列全体を検証する。\nexport function parsePositionalId(\n label: string,\n value: string,\n): Result.Result<number, CommandFailure> {\n if (!/^\\d+$/.test(value)) {\n return Result.fail({\n message: `Invalid ${label}: ${value}. Expected a non-negative integer.`,\n });\n }\n return Result.succeed(Number.parseInt(value, 10));\n}\n\n// new URL() は scheme を問わず通すため http/https 限定のフラグでは ftp: / javascript: などを弾けない。\n// 明示的に scheme を絞り、確実に 400 になるリクエストを送らずに済ませる。\nexport function parseHttpUrl(\n flag: string,\n value: unknown,\n): Result.Result<string, CommandFailure> {\n if (typeof value !== \"string\" || value === \"\") {\n return Result.fail({ message: `Missing --${flag}.` });\n }\n let protocol: string;\n try {\n protocol = new URL(value).protocol;\n } catch {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected an http or https URL.`,\n });\n }\n if (protocol !== \"http:\" && protocol !== \"https:\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected an http or https URL.`,\n });\n }\n return Result.succeed(value);\n}\n\nfunction toCamelCase(value: string): string {\n return value.replace(/-([a-z])/g, (_, char: string) => char.toUpperCase());\n}\n\n// citty 0.2.x は node:util.parseArgs ベースになり、同じフラグの複数指定を配列化せず最後の値だけ\n// 残す。repeatable フラグは citty が捨てた指定値も含め rawArgs から自前で集める。\nexport function collectRepeatableFlag(\n rawArgs: string[],\n flag: string,\n): string[] | undefined {\n // citty は kebab/camel を相互エイリアスするため両表記を受ける\n const names = new Set([`--${flag}`, `--${toCamelCase(flag)}`]);\n const values: string[] = [];\n let seen = false;\n for (let i = 0; i < rawArgs.length; i++) {\n const arg = rawArgs[i];\n if (arg === \"--\") break;\n const eq = arg.indexOf(\"=\");\n if (eq !== -1 && names.has(arg.slice(0, eq))) {\n seen = true;\n values.push(arg.slice(eq + 1));\n continue;\n }\n if (names.has(arg)) {\n seen = true;\n const next = rawArgs[i + 1];\n // 受理する値(header/group-role/status 等)はいずれも \"-\" 始まりにならないため、\n // 次トークンが別フラグなら値なし(空文字)として検証側に弾かせる\n if (next !== undefined && !next.startsWith(\"-\")) {\n values.push(next);\n i++;\n } else {\n values.push(\"\");\n }\n }\n }\n // 「フラグ未指定」と「空配列」を区別する既存の undefined セマンティクスを維持する\n return seen ? values : undefined;\n}\n\n// collectRepeatableFlag が集めた配列、もしくは単一値を受け、文字列の配列に統一して検証する。\nexport function parseRepeatableFlag(\n flag: string,\n value: unknown,\n): Result.Result<string[], CommandFailure> {\n if (value === undefined) return Result.succeed([]);\n const raw = Array.isArray(value) ? value : [value];\n const items: string[] = [];\n for (const item of raw) {\n if (typeof item !== \"string\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${String(item)}. Expected a string.`,\n });\n }\n items.push(item);\n }\n return Result.succeed(items);\n}\n\n// value 側に \":\" を含められるよう(URL ヘッダ値など)、最初の \":\" でのみ分割する。\n// HTTP ヘッダ値は空でも有効なため、header 経路だけ allowEmptyValue で空 value を許す。\nexport function splitColonPair(\n flag: string,\n item: string,\n hint: string,\n options?: { allowEmptyValue?: boolean },\n): Result.Result<[string, string], CommandFailure> {\n const index = item.indexOf(\":\");\n const hasEmptyValue = index === item.length - 1;\n if (index <= 0 || (hasEmptyValue && options?.allowEmptyValue !== true)) {\n return Result.fail({\n message: `Invalid --${flag} value: ${item}. Expected ${hint}.`,\n });\n }\n return Result.succeed([item.slice(0, index), item.slice(index + 1)]);\n}\n\nexport function parseHeaders(\n flag: string,\n value: unknown,\n): Result.Result<{ key: string; value: string }[] | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n\n const items = parseRepeatableFlag(flag, value);\n if (Result.isFailure(items)) return items;\n\n const headers: { key: string; value: string }[] = [];\n for (const item of items.value) {\n const pair = splitColonPair(flag, item, \"<key>:<value>\", {\n allowEmptyValue: true,\n });\n if (Result.isFailure(pair)) return pair;\n headers.push({ key: pair.value[0], value: pair.value[1] });\n }\n return Result.succeed(headers);\n}\n\nconst DataObjectSchema = v.record(v.string(), v.unknown());\n\nexport async function parseDataOption(\n value: unknown,\n): Promise<Result.Result<Record<string, unknown>, CommandFailure>> {\n if (typeof value !== \"string\") {\n return Result.fail({\n message:\n \"Missing --data. Pass a JSON object string or @path/to/file.json.\",\n });\n }\n\n let text = value;\n if (value.startsWith(\"@\")) {\n const path = value.slice(1);\n try {\n text = await readFile(path, \"utf8\");\n } catch {\n return Result.fail({ message: `Could not read --data file: ${path}` });\n }\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n return Result.fail({\n message: `Invalid --data: ${error instanceof Error ? error.message : \"not valid JSON\"}`,\n });\n }\n // valibot の record はオブジェクト以外を弾くが、配列は通すため明示的に弾く\n if (Array.isArray(parsed)) {\n return Result.fail({\n message: \"Invalid --data: expected a JSON object, got an array.\",\n });\n }\n const object = v.safeParse(DataObjectSchema, parsed);\n if (!object.success) {\n return Result.fail({ message: \"Invalid --data: expected a JSON object.\" });\n }\n return Result.succeed(object.output);\n}\n\n// サーバーは filter / order を「JSON.parse できる文字列クエリ」として受けるため、\n// ここでは構文検証だけ行い、再 serialize せず生文字列をそのまま送る。\nexport function parseJsonObjectFlag(\n flag: string,\n value: unknown,\n): Result.Result<string | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n if (typeof value !== \"string\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a JSON object string.`,\n });\n }\n const parsed = tryParseJson(value);\n if (\n Result.isFailure(parsed) ||\n typeof parsed.value !== \"object\" ||\n parsed.value === null ||\n Array.isArray(parsed.value)\n ) {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected a JSON object string.`,\n });\n }\n return Result.succeed(value);\n}\n\nexport function parseJsonObjectOrArrayFlag(\n flag: string,\n value: unknown,\n): Result.Result<string | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n if (typeof value !== \"string\") {\n return Result.fail({\n message: `Invalid --${flag} value: ${String(value)}. Expected a JSON object or array string.`,\n });\n }\n const parsed = tryParseJson(value);\n if (\n Result.isFailure(parsed) ||\n typeof parsed.value !== \"object\" ||\n parsed.value === null\n ) {\n return Result.fail({\n message: `Invalid --${flag} value: ${value}. Expected a JSON object or array string.`,\n });\n }\n return Result.succeed(value);\n}\n\nfunction tryParseJson(text: string): Result.Result<unknown, undefined> {\n try {\n return Result.succeed(JSON.parse(text));\n } catch {\n return Result.fail(undefined);\n }\n}\n"],"mappings":"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"}
|
|
@@ -10,11 +10,11 @@ var project_default = require_cli_main.defineCommand({
|
|
|
10
10
|
list: () => Promise.resolve().then(() => require("./list-D0-QrWmn.cjs")).then((m) => m.default),
|
|
11
11
|
get: () => Promise.resolve().then(() => require("./get-BBOKSXkh.cjs")).then((m) => m.default),
|
|
12
12
|
create: () => Promise.resolve().then(() => require("./create-Z-z3LXNW.cjs")).then((m) => m.default),
|
|
13
|
-
update: () => Promise.resolve().then(() => require("./update-
|
|
13
|
+
update: () => Promise.resolve().then(() => require("./update-Do9HHWzs.cjs")).then((m) => m.default),
|
|
14
14
|
delete: () => Promise.resolve().then(() => require("./delete-CIYY59v_.cjs")).then((m) => m.default)
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
//#endregion
|
|
19
19
|
exports.default = project_default;
|
|
20
|
-
//# sourceMappingURL=project-
|
|
20
|
+
//# sourceMappingURL=project-BX7zvWB1.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-
|
|
1
|
+
{"version":3,"file":"project-BX7zvWB1.cjs","names":["defineCommand"],"sources":["../src/cli/commands/project/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"project\",\n description: \"Manage projects\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,sBAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,gDAAW,uBAAmB,MAAM,MAAM,EAAE,OAAO;EACnD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
|
|
@@ -10,11 +10,11 @@ var project_default = defineCommand({
|
|
|
10
10
|
list: () => import("./list-D5PSDMWw.mjs").then((m) => m.default),
|
|
11
11
|
get: () => import("./get-DDB89cOs.mjs").then((m) => m.default),
|
|
12
12
|
create: () => import("./create-B-PAOor6.mjs").then((m) => m.default),
|
|
13
|
-
update: () => import("./update-
|
|
13
|
+
update: () => import("./update-mEmULIau.mjs").then((m) => m.default),
|
|
14
14
|
delete: () => import("./delete-BOUObrDw.mjs").then((m) => m.default)
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
//#endregion
|
|
19
19
|
export { project_default as default };
|
|
20
|
-
//# sourceMappingURL=project-
|
|
20
|
+
//# sourceMappingURL=project-CaXD3QBs.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-
|
|
1
|
+
{"version":3,"file":"project-CaXD3QBs.mjs","names":[],"sources":["../src/cli/commands/project/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"project\",\n description: \"Manage projects\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,sBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,YAAY,OAAO,sBAAY,CAAC,MAAM,MAAM,EAAE,OAAO;EACrD,WAAW,OAAO,qBAAW,CAAC,MAAM,MAAM,EAAE,OAAO;EACnD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
|
|
@@ -7,14 +7,14 @@ var project_user_default = defineCommand({
|
|
|
7
7
|
description: "Manage project users (RBAC)"
|
|
8
8
|
},
|
|
9
9
|
subCommands: {
|
|
10
|
-
list: () => import("./list-
|
|
11
|
-
get: () => import("./get-
|
|
12
|
-
invite: () => import("./invite-
|
|
13
|
-
update: () => import("./update-
|
|
10
|
+
list: () => import("./list-DrZYlidZ.mjs").then((m) => m.default),
|
|
11
|
+
get: () => import("./get-C7dKoSIc.mjs").then((m) => m.default),
|
|
12
|
+
invite: () => import("./invite-D66DSMvq.mjs").then((m) => m.default),
|
|
13
|
+
update: () => import("./update-B4lv4dAz.mjs").then((m) => m.default),
|
|
14
14
|
delete: () => import("./delete-DhSU-Lx2.mjs").then((m) => m.default)
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
//#endregion
|
|
19
19
|
export { project_user_default as default };
|
|
20
|
-
//# sourceMappingURL=project-user-
|
|
20
|
+
//# sourceMappingURL=project-user-Cp7i6orv.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-user-
|
|
1
|
+
{"version":3,"file":"project-user-Cp7i6orv.mjs","names":[],"sources":["../src/cli/commands/project-user/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"project-user\",\n description: \"Manage project users (RBAC)\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n invite: () => import(\"./invite.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,2BAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,YAAY,OAAO,sBAAY,CAAC,MAAM,MAAM,EAAE,OAAO;EACrD,WAAW,OAAO,qBAAW,CAAC,MAAM,MAAM,EAAE,OAAO;EACnD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
|
|
@@ -7,14 +7,14 @@ var project_user_default = require_cli_main.defineCommand({
|
|
|
7
7
|
description: "Manage project users (RBAC)"
|
|
8
8
|
},
|
|
9
9
|
subCommands: {
|
|
10
|
-
list: () => Promise.resolve().then(() => require("./list-
|
|
11
|
-
get: () => Promise.resolve().then(() => require("./get-
|
|
12
|
-
invite: () => Promise.resolve().then(() => require("./invite-
|
|
13
|
-
update: () => Promise.resolve().then(() => require("./update-
|
|
10
|
+
list: () => Promise.resolve().then(() => require("./list-DexBclfb.cjs")).then((m) => m.default),
|
|
11
|
+
get: () => Promise.resolve().then(() => require("./get-DjRyK0hJ.cjs")).then((m) => m.default),
|
|
12
|
+
invite: () => Promise.resolve().then(() => require("./invite-DPygtCoO.cjs")).then((m) => m.default),
|
|
13
|
+
update: () => Promise.resolve().then(() => require("./update-CIH6sSVk.cjs")).then((m) => m.default),
|
|
14
14
|
delete: () => Promise.resolve().then(() => require("./delete-CCTiCYIL.cjs")).then((m) => m.default)
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
//#endregion
|
|
19
19
|
exports.default = project_user_default;
|
|
20
|
-
//# sourceMappingURL=project-user-
|
|
20
|
+
//# sourceMappingURL=project-user-Dm0qR-sh.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-user-
|
|
1
|
+
{"version":3,"file":"project-user-Dm0qR-sh.cjs","names":["defineCommand"],"sources":["../src/cli/commands/project-user/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"project-user\",\n description: \"Manage project users (RBAC)\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n invite: () => import(\"./invite.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,2BAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,gDAAW,uBAAmB,MAAM,MAAM,EAAE,OAAO;EACnD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
|
|
@@ -8,7 +8,7 @@ var schema_default = require_cli_main.defineCommand({
|
|
|
8
8
|
},
|
|
9
9
|
subCommands: {
|
|
10
10
|
push: () => Promise.resolve().then(() => require("./push-0u6PDz4E.cjs")).then((m) => m.default),
|
|
11
|
-
list: () => Promise.resolve().then(() => require("./list-
|
|
11
|
+
list: () => Promise.resolve().then(() => require("./list-Br6Cmi9S.cjs")).then((m) => m.default),
|
|
12
12
|
get: () => Promise.resolve().then(() => require("./get-IOU__2RP.cjs")).then((m) => m.default),
|
|
13
13
|
validate: () => Promise.resolve().then(() => require("./validate-BpxZ8LTl.cjs")).then((m) => m.default),
|
|
14
14
|
erd: () => Promise.resolve().then(() => require("./erd-lKC5NB2l.cjs")).then((m) => m.default)
|
|
@@ -17,4 +17,4 @@ var schema_default = require_cli_main.defineCommand({
|
|
|
17
17
|
|
|
18
18
|
//#endregion
|
|
19
19
|
exports.default = schema_default;
|
|
20
|
-
//# sourceMappingURL=schema-
|
|
20
|
+
//# sourceMappingURL=schema-B3iRqvYK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-
|
|
1
|
+
{"version":3,"file":"schema-B3iRqvYK.cjs","names":["defineCommand"],"sources":["../src/cli/commands/schema/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"schema\",\n description: \"Work with orizm.config.ts schema definitions\",\n },\n subCommands: {\n push: () => import(\"./push.js\").then((m) => m.default),\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n validate: () => import(\"./validate.js\").then((m) => m.default),\n erd: () => import(\"./erd.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,qBAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,gDAAW,uBAAmB,MAAM,MAAM,EAAE,OAAO;EACnD,qDAAgB,4BAAwB,MAAM,MAAM,EAAE,OAAO;EAC7D,gDAAW,uBAAmB,MAAM,MAAM,EAAE,OAAO;CACrD;AACF,CAAC"}
|
|
@@ -8,7 +8,7 @@ var schema_default = defineCommand({
|
|
|
8
8
|
},
|
|
9
9
|
subCommands: {
|
|
10
10
|
push: () => import("./push-D7co0keA.mjs").then((m) => m.default),
|
|
11
|
-
list: () => import("./list-
|
|
11
|
+
list: () => import("./list-sQk00GV5.mjs").then((m) => m.default),
|
|
12
12
|
get: () => import("./get-CgEgETQa.mjs").then((m) => m.default),
|
|
13
13
|
validate: () => import("./validate-Ca0CRo16.mjs").then((m) => m.default),
|
|
14
14
|
erd: () => import("./erd-zDoF6I_y.mjs").then((m) => m.default)
|
|
@@ -17,4 +17,4 @@ var schema_default = defineCommand({
|
|
|
17
17
|
|
|
18
18
|
//#endregion
|
|
19
19
|
export { schema_default as default };
|
|
20
|
-
//# sourceMappingURL=schema-
|
|
20
|
+
//# sourceMappingURL=schema-exG250MU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-
|
|
1
|
+
{"version":3,"file":"schema-exG250MU.mjs","names":[],"sources":["../src/cli/commands/schema/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"schema\",\n description: \"Work with orizm.config.ts schema definitions\",\n },\n subCommands: {\n push: () => import(\"./push.js\").then((m) => m.default),\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n validate: () => import(\"./validate.js\").then((m) => m.default),\n erd: () => import(\"./erd.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,YAAY,OAAO,sBAAY,CAAC,MAAM,MAAM,EAAE,OAAO;EACrD,YAAY,OAAO,sBAAY,CAAC,MAAM,MAAM,EAAE,OAAO;EACrD,WAAW,OAAO,qBAAW,CAAC,MAAM,MAAM,EAAE,OAAO;EACnD,gBAAgB,OAAO,0BAAgB,CAAC,MAAM,MAAM,EAAE,OAAO;EAC7D,WAAW,OAAO,qBAAW,CAAC,MAAM,MAAM,EAAE,OAAO;CACrD;AACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as parseRepeatableFlag, p as splitColonPair } from "./parse-
|
|
1
|
+
import { f as parseRepeatableFlag, p as splitColonPair } from "./parse-DA0k5AHa.mjs";
|
|
2
2
|
import { Result } from "@praha/byethrow";
|
|
3
3
|
|
|
4
4
|
//#region src/cli/commands/webhook/table-event.ts
|
|
@@ -69,4 +69,4 @@ function formatTableEvents(tableEvents) {
|
|
|
69
69
|
|
|
70
70
|
//#endregion
|
|
71
71
|
export { removeTableEvents as a, parseTableEvents as i, formatTableEvents as n, missingTableEventRemovals as r, addTableEvents as t };
|
|
72
|
-
//# sourceMappingURL=table-event-
|
|
72
|
+
//# sourceMappingURL=table-event-C7gORNlb.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-event-
|
|
1
|
+
{"version":3,"file":"table-event-C7gORNlb.mjs","names":[],"sources":["../src/cli/commands/webhook/table-event.ts"],"sourcesContent":["import { Result } from \"@praha/byethrow\";\nimport type { CommandFailure } from \"../define-command.js\";\nimport { parseRepeatableFlag, splitColonPair } from \"../parse.js\";\n\nexport type WebhookEventType =\n | \"content.create\"\n | \"content.update\"\n | \"content.delete\";\n\nexport type TableEvent = { tableName: string; events: WebhookEventType[] };\n\nconst VALID_EVENTS: WebhookEventType[] = [\n \"content.create\",\n \"content.update\",\n \"content.delete\",\n];\n\n// CLI は <table>:<event> を 1 件ずつ受けるが、API の tableEvents は\n// { tableName, events[] } の形なので、同一テーブルを 1 エントリに集約する。\nexport function parseTableEvents(\n flag: string,\n value: unknown,\n): Result.Result<TableEvent[] | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n\n const items = parseRepeatableFlag(flag, value);\n if (Result.isFailure(items)) return items;\n\n const tableEvents: TableEvent[] = [];\n for (const item of items.value) {\n const pair = splitColonPair(flag, item, \"<table>:<event>\");\n if (Result.isFailure(pair)) return pair;\n\n const [tableName, event] = pair.value;\n const matched = VALID_EVENTS.find((candidate) => candidate === event);\n if (matched === undefined) {\n return Result.fail({\n message: `Invalid --${flag} value: ${item}. Valid events: ${VALID_EVENTS.join(\", \")}.`,\n });\n }\n\n const existing = tableEvents.find((entry) => entry.tableName === tableName);\n if (existing === undefined) {\n tableEvents.push({ tableName, events: [matched] });\n } else if (!existing.events.includes(matched)) {\n existing.events.push(matched);\n }\n }\n return Result.succeed(tableEvents);\n}\n\nexport function addTableEvents(\n current: TableEvent[],\n additions: TableEvent[],\n): TableEvent[] {\n const merged = current.map((entry) => ({\n tableName: entry.tableName,\n events: [...entry.events],\n }));\n for (const addition of additions) {\n const existing = merged.find(\n (entry) => entry.tableName === addition.tableName,\n );\n if (existing === undefined) {\n merged.push({\n tableName: addition.tableName,\n events: [...addition.events],\n });\n continue;\n }\n for (const event of addition.events) {\n if (!existing.events.includes(event)) existing.events.push(event);\n }\n }\n return merged;\n}\n\nexport function removeTableEvents(\n current: TableEvent[],\n removals: TableEvent[],\n): TableEvent[] {\n return current\n .map((entry) => {\n const removal = removals.find(\n (candidate) => candidate.tableName === entry.tableName,\n );\n if (removal === undefined) return entry;\n return {\n tableName: entry.tableName,\n events: entry.events.filter((event) => !removal.events.includes(event)),\n };\n })\n .filter((entry) => entry.events.length > 0);\n}\n\n// remove 指定のうち現在の購読に存在しないものを \"table:event\" 形式で列挙する。\nexport function missingTableEventRemovals(\n current: TableEvent[],\n removals: TableEvent[],\n): string[] {\n const missing: string[] = [];\n for (const removal of removals) {\n const entry = current.find(\n (candidate) => candidate.tableName === removal.tableName,\n );\n for (const event of removal.events) {\n if (entry === undefined || !entry.events.includes(event)) {\n missing.push(`${removal.tableName}:${event}`);\n }\n }\n }\n return missing;\n}\n\nexport function formatTableEvents(tableEvents: TableEvent[]): string {\n return tableEvents\n .map((entry) => `${entry.tableName}:${entry.events.join(\"|\")}`)\n .join(\", \");\n}\n"],"mappings":";;;;AAWA,MAAM,eAAmC;CACvC;CACA;CACA;AACF;AAIA,SAAgB,iBACd,MACA,OACyD;CACzD,IAAI,UAAU,QAAW,OAAO,OAAO,QAAQ,MAAS;CAExD,MAAM,QAAQ,oBAAoB,MAAM,KAAK;CAC7C,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO;CAEpC,MAAM,cAA4B,CAAC;CACnC,KAAK,MAAM,QAAQ,MAAM,OAAO;EAC9B,MAAM,OAAO,eAAe,MAAM,MAAM,iBAAiB;EACzD,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;EAEnC,MAAM,CAAC,WAAW,SAAS,KAAK;EAChC,MAAM,UAAU,aAAa,MAAM,cAAc,cAAc,KAAK;EACpE,IAAI,YAAY,QACd,OAAO,OAAO,KAAK,EACjB,SAAS,aAAa,KAAK,UAAU,KAAK,kBAAkB,aAAa,KAAK,IAAI,EAAE,GACtF,CAAC;EAGH,MAAM,WAAW,YAAY,MAAM,UAAU,MAAM,cAAc,SAAS;EAC1E,IAAI,aAAa,QACf,YAAY,KAAK;GAAE;GAAW,QAAQ,CAAC,OAAO;EAAE,CAAC;OAC5C,IAAI,CAAC,SAAS,OAAO,SAAS,OAAO,GAC1C,SAAS,OAAO,KAAK,OAAO;CAEhC;CACA,OAAO,OAAO,QAAQ,WAAW;AACnC;AAEA,SAAgB,eACd,SACA,WACc;CACd,MAAM,SAAS,QAAQ,KAAK,WAAW;EACrC,WAAW,MAAM;EACjB,QAAQ,CAAC,GAAG,MAAM,MAAM;CAC1B,EAAE;CACF,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,WAAW,OAAO,MACrB,UAAU,MAAM,cAAc,SAAS,SAC1C;EACA,IAAI,aAAa,QAAW;GAC1B,OAAO,KAAK;IACV,WAAW,SAAS;IACpB,QAAQ,CAAC,GAAG,SAAS,MAAM;GAC7B,CAAC;GACD;EACF;EACA,KAAK,MAAM,SAAS,SAAS,QAC3B,IAAI,CAAC,SAAS,OAAO,SAAS,KAAK,GAAG,SAAS,OAAO,KAAK,KAAK;CAEpE;CACA,OAAO;AACT;AAEA,SAAgB,kBACd,SACA,UACc;CACd,OAAO,QACJ,KAAK,UAAU;EACd,MAAM,UAAU,SAAS,MACtB,cAAc,UAAU,cAAc,MAAM,SAC/C;EACA,IAAI,YAAY,QAAW,OAAO;EAClC,OAAO;GACL,WAAW,MAAM;GACjB,QAAQ,MAAM,OAAO,QAAQ,UAAU,CAAC,QAAQ,OAAO,SAAS,KAAK,CAAC;EACxE;CACF,CAAC,CAAC,CACD,QAAQ,UAAU,MAAM,OAAO,SAAS,CAAC;AAC9C;AAGA,SAAgB,0BACd,SACA,UACU;CACV,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,QAAQ,QAAQ,MACnB,cAAc,UAAU,cAAc,QAAQ,SACjD;EACA,KAAK,MAAM,SAAS,QAAQ,QAC1B,IAAI,UAAU,UAAa,CAAC,MAAM,OAAO,SAAS,KAAK,GACrD,QAAQ,KAAK,GAAG,QAAQ,UAAU,GAAG,OAAO;CAGlD;CACA,OAAO;AACT;AAEA,SAAgB,kBAAkB,aAAmC;CACnE,OAAO,YACJ,KAAK,UAAU,GAAG,MAAM,UAAU,GAAG,MAAM,OAAO,KAAK,GAAG,GAAG,CAAC,CAC9D,KAAK,IAAI;AACd"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_parse = require('./parse-
|
|
1
|
+
const require_parse = require('./parse-C8oHgQXx.cjs');
|
|
2
2
|
let _praha_byethrow = require("@praha/byethrow");
|
|
3
3
|
|
|
4
4
|
//#region src/cli/commands/webhook/table-event.ts
|
|
@@ -98,4 +98,4 @@ Object.defineProperty(exports, 'removeTableEvents', {
|
|
|
98
98
|
return removeTableEvents;
|
|
99
99
|
}
|
|
100
100
|
});
|
|
101
|
-
//# sourceMappingURL=table-event-
|
|
101
|
+
//# sourceMappingURL=table-event-DXkCK29f.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-event-
|
|
1
|
+
{"version":3,"file":"table-event-DXkCK29f.cjs","names":["Result","parseRepeatableFlag","splitColonPair"],"sources":["../src/cli/commands/webhook/table-event.ts"],"sourcesContent":["import { Result } from \"@praha/byethrow\";\nimport type { CommandFailure } from \"../define-command.js\";\nimport { parseRepeatableFlag, splitColonPair } from \"../parse.js\";\n\nexport type WebhookEventType =\n | \"content.create\"\n | \"content.update\"\n | \"content.delete\";\n\nexport type TableEvent = { tableName: string; events: WebhookEventType[] };\n\nconst VALID_EVENTS: WebhookEventType[] = [\n \"content.create\",\n \"content.update\",\n \"content.delete\",\n];\n\n// CLI は <table>:<event> を 1 件ずつ受けるが、API の tableEvents は\n// { tableName, events[] } の形なので、同一テーブルを 1 エントリに集約する。\nexport function parseTableEvents(\n flag: string,\n value: unknown,\n): Result.Result<TableEvent[] | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n\n const items = parseRepeatableFlag(flag, value);\n if (Result.isFailure(items)) return items;\n\n const tableEvents: TableEvent[] = [];\n for (const item of items.value) {\n const pair = splitColonPair(flag, item, \"<table>:<event>\");\n if (Result.isFailure(pair)) return pair;\n\n const [tableName, event] = pair.value;\n const matched = VALID_EVENTS.find((candidate) => candidate === event);\n if (matched === undefined) {\n return Result.fail({\n message: `Invalid --${flag} value: ${item}. Valid events: ${VALID_EVENTS.join(\", \")}.`,\n });\n }\n\n const existing = tableEvents.find((entry) => entry.tableName === tableName);\n if (existing === undefined) {\n tableEvents.push({ tableName, events: [matched] });\n } else if (!existing.events.includes(matched)) {\n existing.events.push(matched);\n }\n }\n return Result.succeed(tableEvents);\n}\n\nexport function addTableEvents(\n current: TableEvent[],\n additions: TableEvent[],\n): TableEvent[] {\n const merged = current.map((entry) => ({\n tableName: entry.tableName,\n events: [...entry.events],\n }));\n for (const addition of additions) {\n const existing = merged.find(\n (entry) => entry.tableName === addition.tableName,\n );\n if (existing === undefined) {\n merged.push({\n tableName: addition.tableName,\n events: [...addition.events],\n });\n continue;\n }\n for (const event of addition.events) {\n if (!existing.events.includes(event)) existing.events.push(event);\n }\n }\n return merged;\n}\n\nexport function removeTableEvents(\n current: TableEvent[],\n removals: TableEvent[],\n): TableEvent[] {\n return current\n .map((entry) => {\n const removal = removals.find(\n (candidate) => candidate.tableName === entry.tableName,\n );\n if (removal === undefined) return entry;\n return {\n tableName: entry.tableName,\n events: entry.events.filter((event) => !removal.events.includes(event)),\n };\n })\n .filter((entry) => entry.events.length > 0);\n}\n\n// remove 指定のうち現在の購読に存在しないものを \"table:event\" 形式で列挙する。\nexport function missingTableEventRemovals(\n current: TableEvent[],\n removals: TableEvent[],\n): string[] {\n const missing: string[] = [];\n for (const removal of removals) {\n const entry = current.find(\n (candidate) => candidate.tableName === removal.tableName,\n );\n for (const event of removal.events) {\n if (entry === undefined || !entry.events.includes(event)) {\n missing.push(`${removal.tableName}:${event}`);\n }\n }\n }\n return missing;\n}\n\nexport function formatTableEvents(tableEvents: TableEvent[]): string {\n return tableEvents\n .map((entry) => `${entry.tableName}:${entry.events.join(\"|\")}`)\n .join(\", \");\n}\n"],"mappings":";;;;AAWA,MAAM,eAAmC;CACvC;CACA;CACA;AACF;AAIA,SAAgB,iBACd,MACA,OACyD;CACzD,IAAI,UAAU,QAAW,OAAOA,uBAAO,QAAQ,MAAS;CAExD,MAAM,QAAQC,kCAAoB,MAAM,KAAK;CAC7C,IAAID,uBAAO,UAAU,KAAK,GAAG,OAAO;CAEpC,MAAM,cAA4B,CAAC;CACnC,KAAK,MAAM,QAAQ,MAAM,OAAO;EAC9B,MAAM,OAAOE,6BAAe,MAAM,MAAM,iBAAiB;EACzD,IAAIF,uBAAO,UAAU,IAAI,GAAG,OAAO;EAEnC,MAAM,CAAC,WAAW,SAAS,KAAK;EAChC,MAAM,UAAU,aAAa,MAAM,cAAc,cAAc,KAAK;EACpE,IAAI,YAAY,QACd,OAAOA,uBAAO,KAAK,EACjB,SAAS,aAAa,KAAK,UAAU,KAAK,kBAAkB,aAAa,KAAK,IAAI,EAAE,GACtF,CAAC;EAGH,MAAM,WAAW,YAAY,MAAM,UAAU,MAAM,cAAc,SAAS;EAC1E,IAAI,aAAa,QACf,YAAY,KAAK;GAAE;GAAW,QAAQ,CAAC,OAAO;EAAE,CAAC;OAC5C,IAAI,CAAC,SAAS,OAAO,SAAS,OAAO,GAC1C,SAAS,OAAO,KAAK,OAAO;CAEhC;CACA,OAAOA,uBAAO,QAAQ,WAAW;AACnC;AAEA,SAAgB,eACd,SACA,WACc;CACd,MAAM,SAAS,QAAQ,KAAK,WAAW;EACrC,WAAW,MAAM;EACjB,QAAQ,CAAC,GAAG,MAAM,MAAM;CAC1B,EAAE;CACF,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,WAAW,OAAO,MACrB,UAAU,MAAM,cAAc,SAAS,SAC1C;EACA,IAAI,aAAa,QAAW;GAC1B,OAAO,KAAK;IACV,WAAW,SAAS;IACpB,QAAQ,CAAC,GAAG,SAAS,MAAM;GAC7B,CAAC;GACD;EACF;EACA,KAAK,MAAM,SAAS,SAAS,QAC3B,IAAI,CAAC,SAAS,OAAO,SAAS,KAAK,GAAG,SAAS,OAAO,KAAK,KAAK;CAEpE;CACA,OAAO;AACT;AAEA,SAAgB,kBACd,SACA,UACc;CACd,OAAO,QACJ,KAAK,UAAU;EACd,MAAM,UAAU,SAAS,MACtB,cAAc,UAAU,cAAc,MAAM,SAC/C;EACA,IAAI,YAAY,QAAW,OAAO;EAClC,OAAO;GACL,WAAW,MAAM;GACjB,QAAQ,MAAM,OAAO,QAAQ,UAAU,CAAC,QAAQ,OAAO,SAAS,KAAK,CAAC;EACxE;CACF,CAAC,CAAC,CACD,QAAQ,UAAU,MAAM,OAAO,SAAS,CAAC;AAC9C;AAGA,SAAgB,0BACd,SACA,UACU;CACV,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,QAAQ,QAAQ,MACnB,cAAc,UAAU,cAAc,QAAQ,SACjD;EACA,KAAK,MAAM,SAAS,QAAQ,QAC1B,IAAI,UAAU,UAAa,CAAC,MAAM,OAAO,SAAS,KAAK,GACrD,QAAQ,KAAK,GAAG,QAAQ,UAAU,GAAG,OAAO;CAGlD;CACA,OAAO;AACT;AAEA,SAAgB,kBAAkB,aAAmC;CACnE,OAAO,YACJ,KAAK,UAAU,GAAG,MAAM,UAAU,GAAG,MAAM,OAAO,KAAK,GAAG,GAAG,CAAC,CAC9D,KAAK,IAAI;AACd"}
|
|
@@ -2,9 +2,9 @@ import { t as defineCommand } from "./cli/main.mjs";
|
|
|
2
2
|
import { r as contextArgs } from "./shared-CZZimGxc.mjs";
|
|
3
3
|
import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
|
|
4
4
|
import { t as renderDetail } from "./detail-DN5jCQ4N.mjs";
|
|
5
|
-
import { f as parseRepeatableFlag, t as collectRepeatableFlag } from "./parse-
|
|
5
|
+
import { f as parseRepeatableFlag, t as collectRepeatableFlag } from "./parse-DA0k5AHa.mjs";
|
|
6
6
|
import { r as resolveArrayUpdate } from "./array-update-CMFUoQEe.mjs";
|
|
7
|
-
import { i as warnMissingGroupRemovals, n as formatGroupRoles, r as parseGroupRoles, t as applyGroupRoleEdits } from "./group-roles-
|
|
7
|
+
import { i as warnMissingGroupRemovals, n as formatGroupRoles, r as parseGroupRoles, t as applyGroupRoleEdits } from "./group-roles-BIH7q8tf.mjs";
|
|
8
8
|
import { Result } from "@praha/byethrow";
|
|
9
9
|
|
|
10
10
|
//#region src/cli/commands/project-user/update.ts
|
|
@@ -106,4 +106,4 @@ var update_default = defineCommand({
|
|
|
106
106
|
|
|
107
107
|
//#endregion
|
|
108
108
|
export { update_default as default };
|
|
109
|
-
//# sourceMappingURL=update-
|
|
109
|
+
//# sourceMappingURL=update-B4lv4dAz.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-B4lv4dAz.mjs","names":[],"sources":["../src/cli/commands/project-user/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport { collectRepeatableFlag, parseRepeatableFlag } from \"../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../group-roles.js\";\n\nexport async function projectUserUpdateHandler(\n ctx: CommandContext,\n options: {\n userId: string;\n name?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.name === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message: \"Nothing to update. Pass --name or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n warnMissingGroupRemovals(\n current.value.groupRoles,\n options.groupRoles.remove,\n );\n groupRoles = applyGroupRoleEdits(\n current.value.groupRoles,\n options.groupRoles,\n );\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Updated\", value.id],\n [\"Name\", value.name],\n [\"Email\", value.email],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n \"user-id\": {\n type: \"positional\",\n required: true,\n description: \"Project user ID\",\n },\n name: {\n type: \"string\",\n description: \"New display name\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a project user's name or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n projectUserUpdateHandler(ctx, {\n userId: args[\"user-id\"],\n name: typeof args.name === \"string\" ? args.name : undefined,\n groupRoles: groupRoles.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;AAsBA,eAAsB,yBACpB,KACA,SAKmE;CACnE,IAAI,QAAQ,SAAS,UAAa,QAAQ,eAAe,QACvD,OAAO,OAAO,KAAK,EACjB,SAAS,2DACX,CAAC;CAIH,IAAI;CACJ,IAAI,QAAQ,YAAY,SAAS,QAAQ;EACvC,MAAM,UAAU,SACd,MAAM,IAAI,OAAO,IAAI,0CAA0C,EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D,EACF,CAAC,CACH;EACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO,gBAAgB,QAAQ,KAAK;EACnE,yBACE,QAAQ,MAAM,YACd,QAAQ,WAAW,MACrB;EACA,aAAa,oBACX,QAAQ,MAAM,YACd,QAAQ,UACV;CACF,OAAO,IAAI,QAAQ,eAAe,QAChC,aAAa,QAAQ,WAAW;CAGlC,MAAM,OAAO;EACX,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;EAC3D,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CAEA,MAAM,UAAU,SACd,MAAM,IAAI,OAAO,IAAI,0CAA0C;EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D;EACA;CACF,CAAC,CACH;CACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO,gBAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,aAAa;GACX,CAAC,WAAW,MAAM,EAAE;GACpB,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,SAAS,MAAM,KAAK;GACrB,CAAC,eAAe,iBAAiB,MAAM,UAAU,CAAC;EACpD,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,WAAW;EACT,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,UAAU,gBACd,cACA,sBAAsB,SAAS,YAAY,CAC7C;EACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,QAAQ,gBACZ,kBACA,sBAAsB,SAAS,gBAAgB,CACjD;EACA,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,eAAe,sBAAsB,SAAS,mBAAmB;EACvE,MAAM,UACJ,iBAAiB,SACb,OAAO,QAAQ,MAAS,IACxB,oBAAoB,qBAAqB,YAAY;EAC3D,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,aAAa,mBAAmB;GACpC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,QAAQ;GACjB,KAAK,MAAM;GACX,QAAQ,QAAQ;GAChB,OAAO,KAAK,yBAAyB;EACvC,CAAC;EACD,IAAI,OAAO,UAAU,UAAU,GAAG,OAAO;EAEzC,OAAO,eAAe,OAAO,QAC3B,yBAAyB,KAAK;GAC5B,QAAQ,KAAK;GACb,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GAClD,YAAY,WAAW;EACzB,CAAC,CACH;CACF;AACF,CAAC"}
|
|
@@ -2,9 +2,9 @@ const require_cli_main = require('./cli/main.cjs');
|
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
3
|
const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
|
|
4
4
|
const require_detail = require('./detail-8CXNIhKw.cjs');
|
|
5
|
-
const require_parse = require('./parse-
|
|
5
|
+
const require_parse = require('./parse-C8oHgQXx.cjs');
|
|
6
6
|
const require_array_update = require('./array-update-Dch4e9tI.cjs');
|
|
7
|
-
const require_group_roles = require('./group-roles-
|
|
7
|
+
const require_group_roles = require('./group-roles-B_iAZog-.cjs');
|
|
8
8
|
let _praha_byethrow = require("@praha/byethrow");
|
|
9
9
|
|
|
10
10
|
//#region src/cli/commands/project-user/update.ts
|
|
@@ -106,4 +106,4 @@ var update_default = require_cli_main.defineCommand({
|
|
|
106
106
|
|
|
107
107
|
//#endregion
|
|
108
108
|
exports.default = update_default;
|
|
109
|
-
//# sourceMappingURL=update-
|
|
109
|
+
//# sourceMappingURL=update-CIH6sSVk.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-CIH6sSVk.cjs","names":["Result","toResult","apiErrorFailure","applyGroupRoleEdits","renderDetail","formatGroupRoles","contextArgs","defineCommand","parseGroupRoles","collectRepeatableFlag","parseRepeatableFlag","resolveArrayUpdate","runWithContext"],"sources":["../src/cli/commands/project-user/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport { collectRepeatableFlag, parseRepeatableFlag } from \"../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../group-roles.js\";\n\nexport async function projectUserUpdateHandler(\n ctx: CommandContext,\n options: {\n userId: string;\n name?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.name === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message: \"Nothing to update. Pass --name or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n warnMissingGroupRemovals(\n current.value.groupRoles,\n options.groupRoles.remove,\n );\n groupRoles = applyGroupRoleEdits(\n current.value.groupRoles,\n options.groupRoles,\n );\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Updated\", value.id],\n [\"Name\", value.name],\n [\"Email\", value.email],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n \"user-id\": {\n type: \"positional\",\n required: true,\n description: \"Project user ID\",\n },\n name: {\n type: \"string\",\n description: \"New display name\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a project user's name or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n projectUserUpdateHandler(ctx, {\n userId: args[\"user-id\"],\n name: typeof args.name === \"string\" ? args.name : undefined,\n groupRoles: groupRoles.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;AAsBA,eAAsB,yBACpB,KACA,SAKmE;CACnE,IAAI,QAAQ,SAAS,UAAa,QAAQ,eAAe,QACvD,OAAOA,uBAAO,KAAK,EACjB,SAAS,2DACX,CAAC;CAIH,IAAI;CACJ,IAAI,QAAQ,YAAY,SAAS,QAAQ;EACvC,MAAM,UAAUC,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C,EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D,EACF,CAAC,CACH;EACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;EACnE,6CACE,QAAQ,MAAM,YACd,QAAQ,WAAW,MACrB;EACA,aAAaC,wCACX,QAAQ,MAAM,YACd,QAAQ,UACV;CACF,OAAO,IAAI,QAAQ,eAAe,QAChC,aAAa,QAAQ,WAAW;CAGlC,MAAM,OAAO;EACX,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;EAC3D,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CAEA,MAAM,UAAUF,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C;EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D;EACA;CACF,CAAC,CACH;CACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEI,4BAAa;GACX,CAAC,WAAW,MAAM,EAAE;GACpB,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,SAAS,MAAM,KAAK;GACrB,CAAC,eAAeC,qCAAiB,MAAM,UAAU,CAAC;EACpD,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,WAAW;EACT,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,UAAUC,oCACd,cACAC,oCAAsB,SAAS,YAAY,CAC7C;EACA,IAAIT,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,QAAQQ,oCACZ,kBACAC,oCAAsB,SAAS,gBAAgB,CACjD;EACA,IAAIT,uBAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,eAAeS,oCAAsB,SAAS,mBAAmB;EACvE,MAAM,UACJ,iBAAiB,SACbT,uBAAO,QAAQ,MAAS,IACxBU,kCAAoB,qBAAqB,YAAY;EAC3D,IAAIV,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,aAAaW,wCAAmB;GACpC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,QAAQ;GACjB,KAAK,MAAM;GACX,QAAQ,QAAQ;GAChB,OAAO,KAAK,yBAAyB;EACvC,CAAC;EACD,IAAIX,uBAAO,UAAU,UAAU,GAAG,OAAO;EAEzC,OAAOY,wCAAe,OAAO,QAC3B,yBAAyB,KAAK;GAC5B,QAAQ,KAAK;GACb,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GAClD,YAAY,WAAW;EACzB,CAAC,CACH;CACF;AACF,CAAC"}
|
|
@@ -2,10 +2,10 @@ const require_cli_main = require('./cli/main.cjs');
|
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
3
|
const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
|
|
4
4
|
const require_detail = require('./detail-8CXNIhKw.cjs');
|
|
5
|
-
const require_parse = require('./parse-
|
|
5
|
+
const require_parse = require('./parse-C8oHgQXx.cjs');
|
|
6
6
|
const require_array_update = require('./array-update-Dch4e9tI.cjs');
|
|
7
|
-
const require_table_event = require('./table-event-
|
|
8
|
-
const require_get = require('./get-
|
|
7
|
+
const require_table_event = require('./table-event-DXkCK29f.cjs');
|
|
8
|
+
const require_get = require('./get-DwtzBjGV.cjs');
|
|
9
9
|
let _praha_byethrow = require("@praha/byethrow");
|
|
10
10
|
|
|
11
11
|
//#region src/cli/commands/webhook/update.ts
|
|
@@ -168,4 +168,4 @@ var update_default = require_cli_main.defineCommand({
|
|
|
168
168
|
|
|
169
169
|
//#endregion
|
|
170
170
|
exports.default = update_default;
|
|
171
|
-
//# sourceMappingURL=update-
|
|
171
|
+
//# sourceMappingURL=update-CJgEmSWJ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-ap5Qv1Yl.cjs","names":["applyKeyedEdits","Result","toResult","apiErrorFailure","missingTableEventRemovals","addTableEvents","removeTableEvents","renderDetail","formatTableEvents","formatCustomHeaders","contextArgs","defineCommand","parsePositionalId","parseTableEvents","collectRepeatableFlag","resolveArrayUpdate","parseHeaders","findDuplicateKey","parseRepeatableFlag","parseHttpUrl","runWithContext"],"sources":["../src/cli/commands/webhook/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parseHeaders,\n parseHttpUrl,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../parse.js\";\nimport {\n applyKeyedEdits,\n findDuplicateKey,\n resolveArrayUpdate,\n type ArrayUpdate,\n} from \"../array-update.js\";\nimport { warn } from \"../../ui/output.js\";\nimport { formatCustomHeaders } from \"./get.js\";\nimport {\n addTableEvents,\n formatTableEvents,\n missingTableEventRemovals,\n parseTableEvents,\n removeTableEvents,\n type TableEvent,\n} from \"./table-event.js\";\n\ntype CustomHeader = { key: string; value: string };\n\nexport function applyHeaderEdits(\n current: CustomHeader[],\n edits: { add: CustomHeader[]; remove: string[] },\n): CustomHeader[] {\n return applyKeyedEdits(current, edits, (header) => header.key);\n}\n\nexport async function webhookUpdateHandler(\n ctx: CommandContext,\n options: {\n webhookId: number;\n name?: string;\n url?: string;\n tableEvents: ArrayUpdate<TableEvent, TableEvent>;\n customHeaders: ArrayUpdate<CustomHeader, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (\n options.name === undefined &&\n options.url === undefined &&\n options.tableEvents === undefined &&\n options.customHeaders === undefined\n ) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --name, --url, a --table-event option, or a --header option.\",\n });\n }\n\n // API は配列の全置換しか受けないため、要素単位の編集は現状を取得してインメモリで編集してから送る\n let currentTableEvents: TableEvent[] = [];\n let currentHeaders: CustomHeader[] = [];\n if (\n options.tableEvents?.mode === \"edit\" ||\n options.customHeaders?.mode === \"edit\"\n ) {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n currentTableEvents = current.value.tableEvents;\n currentHeaders = current.value.customHeaders;\n\n // 存在しない対象の remove は冪等に無視する (エラーにしない) が、タイポに気づけるよう通知は出す\n if (options.tableEvents?.mode === \"edit\") {\n for (const missing of missingTableEventRemovals(\n currentTableEvents,\n options.tableEvents.remove,\n )) {\n warn(`Subscription \"${missing}\" is not set; skipped removing it.`);\n }\n }\n if (options.customHeaders?.mode === \"edit\") {\n for (const key of options.customHeaders.remove) {\n if (!currentHeaders.some((header) => header.key === key)) {\n warn(`Header \"${key}\" is not set; skipped removing it.`);\n }\n }\n }\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.url !== undefined ? { url: options.url } : {}),\n ...(options.tableEvents !== undefined\n ? {\n tableEvents:\n options.tableEvents.mode === \"replace\"\n ? options.tableEvents.items\n : addTableEvents(\n removeTableEvents(\n currentTableEvents,\n options.tableEvents.remove,\n ),\n options.tableEvents.add,\n ),\n }\n : {}),\n ...(options.customHeaders !== undefined\n ? {\n customHeaders:\n options.customHeaders.mode === \"replace\"\n ? options.customHeaders.items\n : applyHeaderEdits(currentHeaders, options.customHeaders),\n }\n : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Name\", value.name],\n [\"URL\", value.url],\n [\"Table events\", formatTableEvents(value.tableEvents)],\n [\"Custom headers\", formatCustomHeaders(value.customHeaders)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric webhook ID\",\n },\n name: {\n type: \"string\",\n description: \"New webhook name\",\n },\n url: {\n type: \"string\",\n description: \"New URL to notify\",\n },\n \"table-event\": {\n type: \"string\",\n description: \"Replace all subscriptions with <table>:<event>; repeatable\",\n },\n \"add-table-event\": {\n type: \"string\",\n description: \"Add a subscription as <table>:<event>; repeatable\",\n },\n \"remove-table-event\": {\n type: \"string\",\n description: \"Remove a subscription as <table>:<event>; repeatable\",\n },\n \"clear-table-events\": {\n type: \"boolean\",\n description: \"Remove all subscriptions\",\n default: false,\n },\n header: {\n type: \"string\",\n description: \"Replace all custom headers with <key>:<value>; repeatable\",\n },\n \"add-header\": {\n type: \"string\",\n description:\n \"Add or overwrite a custom header as <key>:<value>; repeatable\",\n },\n \"remove-header\": {\n type: \"string\",\n description: \"Remove a custom header by key; repeatable\",\n },\n \"clear-headers\": {\n type: \"boolean\",\n description: \"Remove all custom headers\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a webhook\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const webhookId = parsePositionalId(\"webhook ID\", args.id);\n if (Result.isFailure(webhookId)) return webhookId;\n\n const replaceTableEvents = parseTableEvents(\n \"table-event\",\n collectRepeatableFlag(rawArgs, \"table-event\"),\n );\n if (Result.isFailure(replaceTableEvents)) return replaceTableEvents;\n const addedTableEvents = parseTableEvents(\n \"add-table-event\",\n collectRepeatableFlag(rawArgs, \"add-table-event\"),\n );\n if (Result.isFailure(addedTableEvents)) return addedTableEvents;\n const removedTableEvents = parseTableEvents(\n \"remove-table-event\",\n collectRepeatableFlag(rawArgs, \"remove-table-event\"),\n );\n if (Result.isFailure(removedTableEvents)) return removedTableEvents;\n const tableEvents = resolveArrayUpdate({\n replaceFlag: \"table-event\",\n clearFlag: \"clear-table-events\",\n editFlags: \"--add-table-event / --remove-table-event\",\n replace: replaceTableEvents.value,\n add: addedTableEvents.value,\n remove: removedTableEvents.value,\n clear: args[\"clear-table-events\"] === true,\n });\n if (Result.isFailure(tableEvents)) return tableEvents;\n\n const replaceHeaders = parseHeaders(\n \"header\",\n collectRepeatableFlag(rawArgs, \"header\"),\n );\n if (Result.isFailure(replaceHeaders)) return replaceHeaders;\n const addedHeaders = parseHeaders(\n \"add-header\",\n collectRepeatableFlag(rawArgs, \"add-header\"),\n );\n if (Result.isFailure(addedHeaders)) return addedHeaders;\n // add は同一 key を上書きする規則のため、1 回の実行内で同じ key を複数指定されると意図が曖昧になり弾く\n const duplicateAddedKey = findDuplicateKey(\n addedHeaders.value ?? [],\n (header) => header.key,\n );\n if (duplicateAddedKey !== undefined) {\n return Result.fail({\n message: `Invalid --add-header: key \"${duplicateAddedKey}\" is specified multiple times.`,\n });\n }\n const removeHeaderValues = collectRepeatableFlag(rawArgs, \"remove-header\");\n const removedHeaderKeys =\n removeHeaderValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-header\", removeHeaderValues);\n if (Result.isFailure(removedHeaderKeys)) return removedHeaderKeys;\n const customHeaders = resolveArrayUpdate({\n replaceFlag: \"header\",\n clearFlag: \"clear-headers\",\n editFlags: \"--add-header / --remove-header\",\n replace: replaceHeaders.value,\n add: addedHeaders.value,\n remove: removedHeaderKeys.value,\n clear: args[\"clear-headers\"] === true,\n });\n if (Result.isFailure(customHeaders)) return customHeaders;\n\n let url: string | undefined;\n if (typeof args.url === \"string\") {\n const parsedUrl = parseHttpUrl(\"url\", args.url);\n if (Result.isFailure(parsedUrl)) return parsedUrl;\n url = parsedUrl.value;\n }\n\n return runWithContext(args, (ctx) =>\n webhookUpdateHandler(ctx, {\n webhookId: webhookId.value,\n name: typeof args.name === \"string\" ? args.name : undefined,\n url,\n tableEvents: tableEvents.value,\n customHeaders: customHeaders.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;;AAsCA,SAAgB,iBACd,SACA,OACgB;CAChB,OAAOA,qCAAgB,SAAS,QAAQ,WAAW,OAAO,GAAG;AAC/D;AAEA,eAAsB,qBACpB,KACA,SAOmE;CACnE,IACE,QAAQ,SAAS,UACjB,QAAQ,QAAQ,UAChB,QAAQ,gBAAgB,UACxB,QAAQ,kBAAkB,QAE1B,OAAOC,uBAAO,KAAK,EACjB,SACE,uFACJ,CAAC;CAIH,IAAI,qBAAmC,CAAC;CACxC,IAAI,iBAAiC,CAAC;CACtC,IACE,QAAQ,aAAa,SAAS,UAC9B,QAAQ,eAAe,SAAS,QAChC;EACA,MAAM,UAAUC,kCACd,MAAM,IAAI,OAAO,IAAI,gDAAgD,EACnE,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,WAAW,QAAQ;EAAU,EACrE,EACF,CAAC,CACH;EACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;EACnE,qBAAqB,QAAQ,MAAM;EACnC,iBAAiB,QAAQ,MAAM;EAG/B,IAAI,QAAQ,aAAa,SAAS,QAChC,KAAK,MAAM,WAAWC,8CACpB,oBACA,QAAQ,YAAY,MACtB,GACE,sBAAK,iBAAiB,QAAQ,mCAAmC;EAGrE,IAAI,QAAQ,eAAe,SAAS,QAClC;QAAK,MAAM,OAAO,QAAQ,cAAc,QACtC,IAAI,CAAC,eAAe,MAAM,WAAW,OAAO,QAAQ,GAAG,GACrD,sBAAK,WAAW,IAAI,mCAAmC;EAE3D;CAEJ;CAEA,MAAM,OAAO;EACX,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;EAC3D,GAAI,QAAQ,QAAQ,SAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;EACxD,GAAI,QAAQ,gBAAgB,SACxB,EACE,aACE,QAAQ,YAAY,SAAS,YACzB,QAAQ,YAAY,QACpBC,mCACEC,sCACE,oBACA,QAAQ,YAAY,MACtB,GACA,QAAQ,YAAY,GACtB,EACR,IACA,CAAC;EACL,GAAI,QAAQ,kBAAkB,SAC1B,EACE,eACE,QAAQ,cAAc,SAAS,YAC3B,QAAQ,cAAc,QACtB,iBAAiB,gBAAgB,QAAQ,aAAa,EAC9D,IACA,CAAC;CACP;CAEA,MAAM,UAAUJ,kCACd,MAAM,IAAI,OAAO,IAAI,gDAAgD;EACnE,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,WAAW,QAAQ;EAAU,EACrE;EACA;CACF,CAAC,CACH;CACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEM,4BAAa;GACX,CAAC,MAAM,OAAO,MAAM,EAAE,CAAC;GACvB,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,OAAO,MAAM,GAAG;GACjB,CAAC,gBAAgBC,sCAAkB,MAAM,WAAW,CAAC;GACrD,CAAC,kBAAkBC,gCAAoB,MAAM,aAAa,CAAC;GAC3D,CAAC,cAAc,MAAM,SAAS;EAChC,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,IAAI;EACF,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,KAAK;EACH,MAAM;EACN,aAAa;CACf;CACA,eAAe;EACb,MAAM;EACN,aAAa;CACf;CACA,mBAAmB;EACjB,MAAM;EACN,aAAa;CACf;CACA,sBAAsB;EACpB,MAAM;EACN,aAAa;CACf;CACA,sBAAsB;EACpB,MAAM;EACN,aAAa;EACb,SAAS;CACX;CACA,QAAQ;EACN,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aACE;CACJ;CACA,iBAAiB;EACf,MAAM;EACN,aAAa;CACf;CACA,iBAAiB;EACf,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,YAAYC,gCAAkB,cAAc,KAAK,EAAE;EACzD,IAAIX,uBAAO,UAAU,SAAS,GAAG,OAAO;EAExC,MAAM,qBAAqBY,qCACzB,eACAC,oCAAsB,SAAS,aAAa,CAC9C;EACA,IAAIb,uBAAO,UAAU,kBAAkB,GAAG,OAAO;EACjD,MAAM,mBAAmBY,qCACvB,mBACAC,oCAAsB,SAAS,iBAAiB,CAClD;EACA,IAAIb,uBAAO,UAAU,gBAAgB,GAAG,OAAO;EAC/C,MAAM,qBAAqBY,qCACzB,sBACAC,oCAAsB,SAAS,oBAAoB,CACrD;EACA,IAAIb,uBAAO,UAAU,kBAAkB,GAAG,OAAO;EACjD,MAAM,cAAcc,wCAAmB;GACrC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,mBAAmB;GAC5B,KAAK,iBAAiB;GACtB,QAAQ,mBAAmB;GAC3B,OAAO,KAAK,0BAA0B;EACxC,CAAC;EACD,IAAId,uBAAO,UAAU,WAAW,GAAG,OAAO;EAE1C,MAAM,iBAAiBe,2BACrB,UACAF,oCAAsB,SAAS,QAAQ,CACzC;EACA,IAAIb,uBAAO,UAAU,cAAc,GAAG,OAAO;EAC7C,MAAM,eAAee,2BACnB,cACAF,oCAAsB,SAAS,YAAY,CAC7C;EACA,IAAIb,uBAAO,UAAU,YAAY,GAAG,OAAO;EAE3C,MAAM,oBAAoBgB,sCACxB,aAAa,SAAS,CAAC,IACtB,WAAW,OAAO,GACrB;EACA,IAAI,sBAAsB,QACxB,OAAOhB,uBAAO,KAAK,EACjB,SAAS,8BAA8B,kBAAkB,gCAC3D,CAAC;EAEH,MAAM,qBAAqBa,oCAAsB,SAAS,eAAe;EACzE,MAAM,oBACJ,uBAAuB,SACnBb,uBAAO,QAAQ,MAAS,IACxBiB,kCAAoB,iBAAiB,kBAAkB;EAC7D,IAAIjB,uBAAO,UAAU,iBAAiB,GAAG,OAAO;EAChD,MAAM,gBAAgBc,wCAAmB;GACvC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,eAAe;GACxB,KAAK,aAAa;GAClB,QAAQ,kBAAkB;GAC1B,OAAO,KAAK,qBAAqB;EACnC,CAAC;EACD,IAAId,uBAAO,UAAU,aAAa,GAAG,OAAO;EAE5C,IAAI;EACJ,IAAI,OAAO,KAAK,QAAQ,UAAU;GAChC,MAAM,YAAYkB,2BAAa,OAAO,KAAK,GAAG;GAC9C,IAAIlB,uBAAO,UAAU,SAAS,GAAG,OAAO;GACxC,MAAM,UAAU;EAClB;EAEA,OAAOmB,wCAAe,OAAO,QAC3B,qBAAqB,KAAK;GACxB,WAAW,UAAU;GACrB,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GAClD;GACA,aAAa,YAAY;GACzB,eAAe,cAAc;EAC/B,CAAC,CACH;CACF;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"update-CJgEmSWJ.cjs","names":["applyKeyedEdits","Result","toResult","apiErrorFailure","missingTableEventRemovals","addTableEvents","removeTableEvents","renderDetail","formatTableEvents","formatCustomHeaders","contextArgs","defineCommand","parsePositionalId","parseTableEvents","collectRepeatableFlag","resolveArrayUpdate","parseHeaders","findDuplicateKey","parseRepeatableFlag","parseHttpUrl","runWithContext"],"sources":["../src/cli/commands/webhook/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parseHeaders,\n parseHttpUrl,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../parse.js\";\nimport {\n applyKeyedEdits,\n findDuplicateKey,\n resolveArrayUpdate,\n type ArrayUpdate,\n} from \"../array-update.js\";\nimport { warn } from \"../../ui/output.js\";\nimport { formatCustomHeaders } from \"./get.js\";\nimport {\n addTableEvents,\n formatTableEvents,\n missingTableEventRemovals,\n parseTableEvents,\n removeTableEvents,\n type TableEvent,\n} from \"./table-event.js\";\n\ntype CustomHeader = { key: string; value: string };\n\nexport function applyHeaderEdits(\n current: CustomHeader[],\n edits: { add: CustomHeader[]; remove: string[] },\n): CustomHeader[] {\n return applyKeyedEdits(current, edits, (header) => header.key);\n}\n\nexport async function webhookUpdateHandler(\n ctx: CommandContext,\n options: {\n webhookId: number;\n name?: string;\n url?: string;\n tableEvents: ArrayUpdate<TableEvent, TableEvent>;\n customHeaders: ArrayUpdate<CustomHeader, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (\n options.name === undefined &&\n options.url === undefined &&\n options.tableEvents === undefined &&\n options.customHeaders === undefined\n ) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --name, --url, a --table-event option, or a --header option.\",\n });\n }\n\n // API は配列の全置換しか受けないため、要素単位の編集は現状を取得してインメモリで編集してから送る\n let currentTableEvents: TableEvent[] = [];\n let currentHeaders: CustomHeader[] = [];\n if (\n options.tableEvents?.mode === \"edit\" ||\n options.customHeaders?.mode === \"edit\"\n ) {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n currentTableEvents = current.value.tableEvents;\n currentHeaders = current.value.customHeaders;\n\n // 存在しない対象の remove は冪等に無視する (エラーにしない) が、タイポに気づけるよう通知は出す\n if (options.tableEvents?.mode === \"edit\") {\n for (const missing of missingTableEventRemovals(\n currentTableEvents,\n options.tableEvents.remove,\n )) {\n warn(`Subscription \"${missing}\" is not set; skipped removing it.`);\n }\n }\n if (options.customHeaders?.mode === \"edit\") {\n for (const key of options.customHeaders.remove) {\n if (!currentHeaders.some((header) => header.key === key)) {\n warn(`Header \"${key}\" is not set; skipped removing it.`);\n }\n }\n }\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.url !== undefined ? { url: options.url } : {}),\n ...(options.tableEvents !== undefined\n ? {\n tableEvents:\n options.tableEvents.mode === \"replace\"\n ? options.tableEvents.items\n : addTableEvents(\n removeTableEvents(\n currentTableEvents,\n options.tableEvents.remove,\n ),\n options.tableEvents.add,\n ),\n }\n : {}),\n ...(options.customHeaders !== undefined\n ? {\n customHeaders:\n options.customHeaders.mode === \"replace\"\n ? options.customHeaders.items\n : applyHeaderEdits(currentHeaders, options.customHeaders),\n }\n : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Name\", value.name],\n [\"URL\", value.url],\n [\"Table events\", formatTableEvents(value.tableEvents)],\n [\"Custom headers\", formatCustomHeaders(value.customHeaders)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric webhook ID\",\n },\n name: {\n type: \"string\",\n description: \"New webhook name\",\n },\n url: {\n type: \"string\",\n description: \"New URL to notify\",\n },\n \"table-event\": {\n type: \"string\",\n description: \"Replace all subscriptions with <table>:<event>; repeatable\",\n },\n \"add-table-event\": {\n type: \"string\",\n description: \"Add a subscription as <table>:<event>; repeatable\",\n },\n \"remove-table-event\": {\n type: \"string\",\n description: \"Remove a subscription as <table>:<event>; repeatable\",\n },\n \"clear-table-events\": {\n type: \"boolean\",\n description: \"Remove all subscriptions\",\n default: false,\n },\n header: {\n type: \"string\",\n description: \"Replace all custom headers with <key>:<value>; repeatable\",\n },\n \"add-header\": {\n type: \"string\",\n description:\n \"Add or overwrite a custom header as <key>:<value>; repeatable\",\n },\n \"remove-header\": {\n type: \"string\",\n description: \"Remove a custom header by key; repeatable\",\n },\n \"clear-headers\": {\n type: \"boolean\",\n description: \"Remove all custom headers\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a webhook\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const webhookId = parsePositionalId(\"webhook ID\", args.id);\n if (Result.isFailure(webhookId)) return webhookId;\n\n const replaceTableEvents = parseTableEvents(\n \"table-event\",\n collectRepeatableFlag(rawArgs, \"table-event\"),\n );\n if (Result.isFailure(replaceTableEvents)) return replaceTableEvents;\n const addedTableEvents = parseTableEvents(\n \"add-table-event\",\n collectRepeatableFlag(rawArgs, \"add-table-event\"),\n );\n if (Result.isFailure(addedTableEvents)) return addedTableEvents;\n const removedTableEvents = parseTableEvents(\n \"remove-table-event\",\n collectRepeatableFlag(rawArgs, \"remove-table-event\"),\n );\n if (Result.isFailure(removedTableEvents)) return removedTableEvents;\n const tableEvents = resolveArrayUpdate({\n replaceFlag: \"table-event\",\n clearFlag: \"clear-table-events\",\n editFlags: \"--add-table-event / --remove-table-event\",\n replace: replaceTableEvents.value,\n add: addedTableEvents.value,\n remove: removedTableEvents.value,\n clear: args[\"clear-table-events\"] === true,\n });\n if (Result.isFailure(tableEvents)) return tableEvents;\n\n const replaceHeaders = parseHeaders(\n \"header\",\n collectRepeatableFlag(rawArgs, \"header\"),\n );\n if (Result.isFailure(replaceHeaders)) return replaceHeaders;\n const addedHeaders = parseHeaders(\n \"add-header\",\n collectRepeatableFlag(rawArgs, \"add-header\"),\n );\n if (Result.isFailure(addedHeaders)) return addedHeaders;\n // add は同一 key を上書きする規則のため、1 回の実行内で同じ key を複数指定されると意図が曖昧になり弾く\n const duplicateAddedKey = findDuplicateKey(\n addedHeaders.value ?? [],\n (header) => header.key,\n );\n if (duplicateAddedKey !== undefined) {\n return Result.fail({\n message: `Invalid --add-header: key \"${duplicateAddedKey}\" is specified multiple times.`,\n });\n }\n const removeHeaderValues = collectRepeatableFlag(rawArgs, \"remove-header\");\n const removedHeaderKeys =\n removeHeaderValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-header\", removeHeaderValues);\n if (Result.isFailure(removedHeaderKeys)) return removedHeaderKeys;\n const customHeaders = resolveArrayUpdate({\n replaceFlag: \"header\",\n clearFlag: \"clear-headers\",\n editFlags: \"--add-header / --remove-header\",\n replace: replaceHeaders.value,\n add: addedHeaders.value,\n remove: removedHeaderKeys.value,\n clear: args[\"clear-headers\"] === true,\n });\n if (Result.isFailure(customHeaders)) return customHeaders;\n\n let url: string | undefined;\n if (typeof args.url === \"string\") {\n const parsedUrl = parseHttpUrl(\"url\", args.url);\n if (Result.isFailure(parsedUrl)) return parsedUrl;\n url = parsedUrl.value;\n }\n\n return runWithContext(args, (ctx) =>\n webhookUpdateHandler(ctx, {\n webhookId: webhookId.value,\n name: typeof args.name === \"string\" ? args.name : undefined,\n url,\n tableEvents: tableEvents.value,\n customHeaders: customHeaders.value,\n }),\n );\n },\n});\n"],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@ import { t as defineCommand } from "./cli/main.mjs";
|
|
|
2
2
|
import { r as contextArgs } from "./shared-CZZimGxc.mjs";
|
|
3
3
|
import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
|
|
4
4
|
import { t as renderDetail } from "./detail-DN5jCQ4N.mjs";
|
|
5
|
-
import { f as parseRepeatableFlag, t as collectRepeatableFlag, u as parsePositionalId } from "./parse-
|
|
5
|
+
import { f as parseRepeatableFlag, t as collectRepeatableFlag, u as parsePositionalId } from "./parse-DA0k5AHa.mjs";
|
|
6
6
|
import { n as maskManagementKey, r as showKeyArg } from "./mask-B1qD73jb.mjs";
|
|
7
7
|
import { r as resolveArrayUpdate } from "./array-update-CMFUoQEe.mjs";
|
|
8
|
-
import { i as warnMissingGroupRemovals, n as formatGroupRoles, r as parseGroupRoles, t as applyGroupRoleEdits } from "./group-roles-
|
|
8
|
+
import { i as warnMissingGroupRemovals, n as formatGroupRoles, r as parseGroupRoles, t as applyGroupRoleEdits } from "./group-roles-BIH7q8tf.mjs";
|
|
9
9
|
import { Result } from "@praha/byethrow";
|
|
10
10
|
|
|
11
11
|
//#region src/cli/commands/key/management/update.ts
|
|
@@ -114,4 +114,4 @@ var update_default = defineCommand({
|
|
|
114
114
|
|
|
115
115
|
//#endregion
|
|
116
116
|
export { update_default as default };
|
|
117
|
-
//# sourceMappingURL=update-
|
|
117
|
+
//# sourceMappingURL=update-CQ4n4Xuf.mjs.map
|