@tocca-systems/twp-cli 0.23.0 → 0.24.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/README.md +143 -3
- package/command-model/department.json +1 -1
- package/dist/{ai-dispatch-VSCKUY6J.js → ai-dispatch-36HRDRLF.js} +1 -1
- package/dist/{api-command-CLARDKAL.js → api-command-NMYYJKZH.js} +3 -3
- package/dist/{app-X3IKIAKB.js → app-2KMY3QPM.js} +5 -5
- package/dist/{auto-update-FBZGOQFI.js → auto-update-CV2MM32C.js} +1 -1
- package/dist/{auto-update-worker-SI7TVSCN.js → auto-update-worker-AXBJIMFP.js} +2 -2
- package/dist/{backlog-X2MQTA6F.js → backlog-7MJIOT22.js} +2 -2
- package/dist/{charter-command-UPKTVL7H.js → charter-command-UBUE3KUO.js} +2 -2
- package/dist/{chunk-7PRQ7JW2.js → chunk-4V4T5ZUS.js} +2 -2
- package/dist/{chunk-APYYF7H6.js → chunk-5Q2CH4E7.js} +1 -1
- package/dist/chunk-6NCY4NPV.js +62 -0
- package/dist/{chunk-M3GWY6NT.js → chunk-7WSNIXTQ.js} +2 -1
- package/dist/chunk-DDKZ5IPT.js +11 -0
- package/dist/{chunk-2VISRLWS.js → chunk-DMDVLOAY.js} +8 -8
- package/dist/chunk-EJ474UDB.js +3 -0
- package/dist/chunk-FTYJZFEK.js +10 -0
- package/dist/{chunk-E4H22AO5.js → chunk-GDM2QUBL.js} +1 -1
- package/dist/{chunk-X4RS5VBH.js → chunk-GMBJTG6A.js} +1 -1
- package/dist/{chunk-QVXZEUKN.js → chunk-HGTG5XQ7.js} +1 -1
- package/dist/{chunk-LD3AKGH6.js → chunk-HW3QGKYR.js} +1 -1
- package/dist/chunk-I3YPO7CY.js +57 -0
- package/dist/chunk-IJLJGDMZ.js +7 -0
- package/dist/{chunk-DSDVIU6A.js → chunk-ILKQDXI5.js} +1 -1
- package/dist/{chunk-O52CUEDO.js → chunk-IOGVQVGD.js} +1 -1
- package/dist/{chunk-JB27KNCX.js → chunk-QOUFHYK5.js} +29 -25
- package/dist/{chunk-XLE4HW6B.js → chunk-UIWGEBWI.js} +1 -1
- package/dist/{chunk-SJRK4AVE.js → chunk-VCMVTC6B.js} +1 -1
- package/dist/chunk-WGVHYTZV.js +38 -0
- package/dist/{chunk-EQWW2F5V.js → chunk-YVAN3H5W.js} +4 -4
- package/dist/chunk-ZN5EFDH7.js +5 -0
- package/dist/chunk-ZWVYVS2A.js +4 -0
- package/dist/cli.js +75 -8
- package/dist/{commands-JNG5TZ77.js → commands-6YTOVZ5P.js} +7 -7
- package/dist/{commands-BE67IDNQ.js → commands-U36UTCKR.js} +8 -8
- package/dist/department-JOXXJKQB.js +33 -0
- package/dist/job-title-L47J6TZY.js +8 -0
- package/dist/{logout-guard-CMZZBRUL.js → logout-guard-FO7KZL3X.js} +1 -1
- package/dist/media-ZMDYHHNN.js +64 -0
- package/dist/{oneshot-NA756EBO.js → oneshot-KYATQPL7.js} +2 -2
- package/dist/position-FHWCMMBQ.js +8 -0
- package/dist/{project-2LJZW747.js → project-ZODASYER.js} +1 -1
- package/dist/query-EEALMOSO.js +3 -0
- package/dist/{render-ICZOK3HV.js → render-K45EOLHX.js} +1 -1
- package/dist/{run-XCAJDHFU.js → run-QCDT35NT.js} +2 -2
- package/dist/server-settings-CG3EM7R7.js +1 -1
- package/dist/{setup-UI6V2Q3V.js → setup-6CXUVCF5.js} +1 -1
- package/dist/storage-ANKKJJJO.js +3 -0
- package/dist/{task-GKNM3G4K.js → task-G5YWQ6L5.js} +7 -63
- package/dist/{update-TVVBJNN7.js → update-PZBUIYOL.js} +1 -1
- package/dist/user-DO4VNIBR.js +204 -0
- package/package.json +1 -1
- package/dist/chunk-7LTTKKQA.js +0 -56
- package/dist/chunk-GFC2ASHE.js +0 -6
- package/dist/chunk-JKSXUBND.js +0 -9
- package/dist/chunk-PEGUHUTD.js +0 -3
- package/dist/query-NJMVSQR6.js +0 -3
- package/dist/user-EU7Z3DAO.js +0 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{PromptAbortedError,promptText}from"./chunk-L37NS5L2.js";import{detectAiClis,formatDetection,isDetectableAi,isSelectable}from"./chunk-24ZZFFA3.js";import
|
|
3
|
+
import{localConfigPath,parseClaudeLauncher}from"./chunk-UIWGEBWI.js";import{PromptAbortedError,promptText}from"./chunk-L37NS5L2.js";import{detectAiClis,formatDetection,isDetectableAi,isSelectable}from"./chunk-24ZZFFA3.js";import"./chunk-N2UVRM3Z.js";import{AiConfig}from"./chunk-TYNCXQSN.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
4
4
|
import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var RECOMMENDED_ROTATION={complex:["claude"],verify:["claude"],security:["claude"],support:["claude"],triage:["claude"],search:["claude"],simple:["claude"]};var RECOMMENDED_CHAINS={complex:["claude","codex"],verify:["claude","codex","copilot"],security:["claude","codex","copilot"],support:["claude","codex","copilot"],triage:["codex","gemini","copilot","claude"],search:["codex","gemini","copilot","claude"],simple:["codex","gemini","copilot","claude"]};var PREFERENCE=["claude","codex","gemini","co\
|
|
5
5
|
pilot"];function buildAiAssignment(selected){if(selected.length===0)throw new Error("\u9078\u629E\u3055\u308C\u305FAI\u304C\u7A7A\u3067\u3059");const fallbackOrder=PREFERENCE.filter(ai=>selected.includes(ai));for(const ai of selected)if(!fallbackOrder.includes(ai))fallbackOrder.push(ai);const chains={};const rotation={};for(const category of Object.keys(RECOMMENDED_CHAINS)){const filtered=(RECOMMENDED_CHAINS[category]??[]).filter(ai=>selected.includes(ai));const chain=filtered.length>0?filtered:
|
|
6
6
|
[...fallbackOrder];chains[category]=chain;const rot=(RECOMMENDED_ROTATION[category]??[]).filter(ai=>selected.includes(ai));const head=chain[0];rotation[category]=rot.length>0?rot:head===void 0?[...fallbackOrder]:[head]}return{primary_rotation:rotation,fallback_chains:chains}}var SETUP_EXIT_NO_CLI=3;var SETUP_EXIT_ABORTED=130;async function runSetup(opts){const env=opts.env??process.env;const rawOut=opts.out??(t=>void process.stdout.write(t));const rawErr=opts.err??(t=>void process.stderr.write(t));
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{checkUploadPlan,checkUploadQuota,storageDomain}from"./chunk-DDKZ5IPT.js";import"./chunk-ZWVYVS2A.js";import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";export{checkUploadPlan,checkUploadQuota,storageDomain};
|
|
@@ -1,61 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
4
|
-
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
`\u3069\u3061\u3089\u3092\u6307\u3059\u304B --project \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002
|
|
8
|
-
\u500B\u4EBA\u30BF\u30B9\u30AF : --project ${PRIVATE_PROJECT_REF}
|
|
9
|
-
\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: --project ${PRIVATE_TASK_KEY_PREFIX}`)}return"project"}function rejectPrivateSurface(input,what){if(!wantsPrivateSurface(input))return;throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u3067\u306F${what}\u3092\u6271\u3048\u307E\u305B\u3093`,`\u30B5\u30FC\u30D0\u5074\u306B\u500B\u4EBA\u30BF\u30B9\u30AF\u7528\u306E API \u304C\u3042\u308A\u307E\u305B\u3093\u3002TWP \u306E\u753B\u9762\u304B\u3089\u64CD\u4F5C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
10
|
-
async function resolveTaskLocation(input,ctx,ref){rejectPrivateSurface(input,"\u3053\u306E\u64CD\u4F5C");const{kind,value}=classifyTaskRef(ref);if(kind==="key"){if(isPrivateTaskKey(value)&&input.flags.get("--project")===void 0){throw new UsageError(`${value} \u306F\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306B\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u306B\u3082\u8AAD\u3081\u307E\u3059`,`\u3053\u306E\u64CD\u4F5C\u306F\u500B\
|
|
11
|
-
\u4EBA\u30BF\u30B9\u30AF\u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u5074\u306B API \u304C\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
|
|
12
|
-
\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089 --project ${PRIVATE_TASK_KEY_PREFIX} \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}rejectRedundantProject(input,value);const resolved=await ctx.resolver.taskByKey(value);const id=resolved.task["id"];if(!isSafePathSegment(id)){throw new ApiResponseError(`\u30BF\u30B9\u30AF\u30AD\u30FC\u89E3\u6C7A\u306E\u5FDC\u7B54\u306E task.id \u3092\u305D\u306E\u307E\u307E\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(
|
|
13
|
-
id).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return{projectId:resolved.projectId,taskId:id}}if(kind==="unknown"){throw new UsageError(`\u30BF\u30B9\u30AF\u306E\u6307\u5B9A\u304C\u300C\u30AD\u30FC\uFF08\u4F8B ABC-123\uFF09\u300D\u306B\u3082\u300CID\uFF08UUID / ULID\uFF09\u300D\u306B\u3082\u898B\u3048\u307E\u305B\u3093: ${ref}`,"\u30AD\u30FC\u306F\u300C\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9-\u756A\u53F7\u300D\u306E\u5F62\u3067\u3059\u3002ID \u3092\u6307\u5B9A\u3059\u308B\u5834\u5408\u306F --project \u3082\u5FC5\u8981\u3067\u3059\u3002")}
|
|
14
|
-
if(kind!=="id"){const exhaustive=kind;throw new Error(`\u672A\u77E5\u306E\u30BF\u30B9\u30AF\u53C2\u7167\u306E\u7A2E\u5225\u3067\u3059: ${String(exhaustive)}`)}return{projectId:await ctx.projectId(input.flags.get("--project")),taskId:value}}function rejectRedundantProject(input,ref){const project=input.flags.get("--project");if(project===void 0)return;if(isPrivateTaskKey(ref)){if(isPrivateProjectRef(project))return;if(project.trim().toLowerCase()===PRIVATE_TASK_KEY_PREFIX.toLowerCase())return;throw new UsageError(
|
|
15
|
-
`\u30AD\u30FC ${ref} \u3068 --project ${project} \u304C\u98DF\u3044\u9055\u3063\u3066\u3044\u307E\u3059`,`${ref} \u304C\u6307\u305B\u308B\u306E\u306F\u6B21\u306E2\u3064\u3060\u3051\u3067\u3059\u3002
|
|
16
|
-
\u500B\u4EBA\u30BF\u30B9\u30AF : --project ${PRIVATE_PROJECT_REF}
|
|
17
|
-
\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: --project ${PRIVATE_TASK_KEY_PREFIX}\uFF08\u30AD\u30FC\u306E\u63A5\u982D\u8F9E\u3068\u540C\u3058\u30B3\u30FC\u30C9\uFF09
|
|
18
|
-
\u5225\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089\u3001\u30AD\u30FC\u3067\u306F\u306A\u304F\u305D\u306E\u30BF\u30B9\u30AF\u306E ID\uFF08UUID / ULID\uFF09\u3092\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}throw new UsageError(`\u30AD\u30FC\u5F62\u5F0F\uFF08${ref}\uFF09\u3067\u6307\u5B9A\u3057\u305F\u3068\u304D\u306B --project \u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08--project ${project} \u306F\u7121\u8996\u3055\u308C\u307E\u3059\uFF09`,"\
|
|
19
|
-
\u30AD\u30FC\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u542B\u3093\u3067\u3044\u308B\u306E\u3067 --project \u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002--project \u304C\u8981\u308B\u306E\u306F\u3001\u30BF\u30B9\u30AF\u3092 ID\uFF08UUID / ULID\uFF09\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u3060\u3051\u3067\u3059\u3002")}var TASK_REF_FLAG={name:"--task",summary:"\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\uFF08\u4F8B ABC-123\uFF09\u307E\u305F\u306F ID\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",
|
|
20
|
-
takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};var PROJECT_FLAG={name:"--project",summary:`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09\u3002\u30BF\u30B9\u30AF\u3092\u30AD\u30FC\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306F\u4F7F\u3048\u307E\u305B\u3093\u3002${PRIVATE_PROJECT_REF} \u3067\u500B\u4EBA\u30BF\u30B9\u30AF\u3092\u6307\u3057\u307E\u3059`,takesValue:true,placeholder:`\
|
|
21
|
-
<\u30B3\u30FC\u30C9|ID|${PRIVATE_PROJECT_REF}>`};var TASK_REF_HELP=`\u30AD\u30FC\u5F62\u5F0F\uFF08\u4F8B ABC-123\uFF09\u306A\u3089 --project \u306F\u8981\u308A\u307E\u305B\u3093\uFF081\u5F80\u5FA9\u3067\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u89E3\u6C7A\u3055\u308C\u307E\u3059\uFF09\u3002
|
|
22
|
-
\u30AD\u30FC\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u542B\u3093\u3067\u3044\u308B\u306E\u3067\u3001\u30AD\u30FC\u3068 --project \u3092\u4E00\u7DD2\u306B\u6307\u5B9A\u3059\u308B\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
23
|
-
ID\uFF08UUID / ULID\uFF09\u3067\u6307\u5B9A\u3059\u308B\u5834\u5408\u3060\u3051 --project\uFF08\u307E\u305F\u306F\u65E2\u5B9A\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u304C\u8981\u308A\u307E\u3059\u3002
|
|
24
|
-
UUID / ULID \u306E\u5F62\u3092\u3057\u305F\u5024\u306F\u3001\u30AD\u30FC\u306E\u5F62\u306B\u3082\u8AAD\u3081\u308B\u3068\u304D\u3067\u3082 ID \u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF08\u4F8B: \u672B\u5C3E12\u6841\u304C\u5168\u6570\u5B57\u306E UUID\uFF09\u3002\u3053\u306E\u5834\u5408\u306F --project \u304C\u8981\u308A\u307E\u3059\u3002
|
|
25
|
-
--task <\u30AD\u30FC|ID> \u3067\u3082\u540C\u3058\u610F\u5473\u3067\u3059\u3002\u4F4D\u7F6E\u5F15\u6570\u3068 --task \u306E\u4E21\u65B9\u3092\u6307\u5B9A\u3059\u308B\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
26
|
-
${PRIVATE_TASK_KEY_PREFIX}-<\u756A\u53F7> \u306E\u5F62\u306E\u30AD\u30FC\u3060\u3051\u306F\u4F8B\u5916\u3067\u3001--project \u304C\u5FC5\u9808\u3067\u3059\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u3068\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u3068\u3082\u8AAD\u3081\u308B\u305F\u3081\uFF09\u3002`;var TASK_SOURCE="task";var IDS_PER_REQUEST=100;var LIST_COLUMNS=["id","file_name","content_type","file_size","is_committed","created_at"];var UPLOAD_COLUMNS=["attachment_id","task_id","file_name","content_type","file_size","attachment_count"];var CONTENT_TYPES={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".pdf":"application/pdf",".txt":"text/plain",".log":"text/plain",".md":"text/markdown",".csv":"text/csv",".json":"application/json",".zip":"\
|
|
27
|
-
application/zip",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation"};function contentTypeFor(fileName){return CONTENT_TYPES[path.extname(fileName).toLowerCase()]??"application/octet-stream"}var FILE_FLAG={name:"--file",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",
|
|
28
|
-
takesValue:true,placeholder:"<\u30D1\u30B9>"};var NAME_FLAG={name:"--name",summary:"\u30B5\u30FC\u30D0\u306B\u4FDD\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u540D\uFF08\u7701\u7565\u6642\u306F\u30ED\u30FC\u30AB\u30EB\u306E\u30D5\u30A1\u30A4\u30EB\u540D\uFF09",takesValue:true,placeholder:"<\u30D5\u30A1\u30A4\u30EB\u540D>"};var CONTENT_TYPE_FLAG={name:"--content-type",summary:"Content-Type\uFF08\u7701\u7565\u6642\u306F\u62E1\u5F35\u5B50\u304B\u3089\u63A8\u5B9A\u3002\u4E0D\u660E\u306A\u3089 application/octet-stream\uFF09",
|
|
29
|
-
takesValue:true,placeholder:"<\u578B>"};var OUT_FLAG={name:"--out",summary:"\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF08\u5FC5\u9808\u3002\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};var ATTACHMENT_REF_FLAG={name:"--attachment",summary:"\u6DFB\u4ED8ID\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"\
|
|
30
|
-
<\u6DFB\u4ED8ID>"};var FORCE_FLAG={name:"--force",summary:"\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308C\u3070\u4E0A\u66F8\u304D\u3059\u308B\uFF08\u65E2\u5B9A\u3067\u306F\u4E0A\u66F8\u304D\u3057\u306A\u3044\uFF09",takesValue:false};function taskPath(input){const projectId=encodeURIComponent(requireResolved(input,"projectId"));return`/api/v2/projects/${projectId}/tasks/${encodeURIComponent(requireResolved(input,"taskId"))}`}function taskAttachmentIds(body){const task=isRecord(body)?
|
|
31
|
-
body["task"]:void 0;if(!isRecord(task)){throw new ApiResponseError("\u30BF\u30B9\u30AF\u8A73\u7D30\u306E\u5FDC\u7B54\u306B task \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const ids=task["attachment_ids"];if(ids===null||ids===void 0)return[];if(!Array.isArray(ids)||!ids.every(id=>typeof id==="string")){throw new ApiResponseError("\u30BF\u30B9\u30AF\u8A73\u7D30\u306E attachment_ids \u304C\u6587\u5B57\u5217\u306E\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
32
|
-
return ids}function attachmentRows(body){const data=isRecord(body)?body["data"]:void 0;if(!Array.isArray(data)){throw new ApiResponseError("\u6DFB\u4ED8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B data \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return data}async function resolveTask(input,ctx,usage){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage});return withResolved(input,await resolveTaskLocation(
|
|
33
|
-
input,ctx,ref))}function localFile(input){const raw=input.flags.get("--file");if(raw===void 0||raw.trim()===""){throw new UsageError("--file \u306F\u5FC5\u9808\u3067\u3059","twp task attachment upload <\u30AD\u30FC|ID> --file <\u30D1\u30B9>")}const file=path.resolve(raw.trim());let stat;try{stat=fs.statSync(file)}catch{throw new UsageError(`\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093: ${file}`)}if(!stat.isFile())throw new UsageError(`\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${file}`);
|
|
34
|
-
if(stat.size===0)throw new UsageError(`\u7A7A\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093: ${file}`);const nameFlag=input.flags.get("--name");const name=nameFlag!==void 0&&nameFlag.trim()!==""?nameFlag.trim():path.basename(file);const typeFlag=input.flags.get("--content-type");const contentType=typeFlag!==void 0&&typeFlag.trim()!==""?typeFlag.trim():contentTypeFor(name);return{file,name,size:stat.size,contentType}}function uploadUrlPlan(input){
|
|
35
|
-
return{method:"POST",path:"/api/v2/attachments/upload-url",body:{file_name:requireResolved(input,"fileName"),content_type:requireResolved(input,"contentType"),file_size:Number(requireResolved(input,"fileSize")),source:TASK_SOURCE}}}function issued(body){const data=isRecord(body)?body["data"]:void 0;const id=isRecord(data)?data["id"]:void 0;const uploadUrl=isRecord(data)?data["upload_url"]:void 0;if(!isSafePathSegment(id)||typeof uploadUrl!=="string"||!/^https:\/\//.test(uploadUrl)){throw new ApiResponseError(
|
|
36
|
-
"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9URL\u767A\u884C\u306E\u5FDC\u7B54\u306B data.id / data.upload_url \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{id,uploadUrl}}async function upload(input,ctx){const file=requireResolved(input,"file");const size=Number(requireResolved(input,"fileSize"));const contentType=requireResolved(input,"contentType");const{id,uploadUrl}=issued(await ctx.send(uploadUrlPlan(input)));const bytes=new Uint8Array(
|
|
37
|
-
fs.readFileSync(file));if(bytes.byteLength!==size){throw new UsageError(`\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u306E\u5927\u304D\u3055\u304C\u5909\u308F\u308A\u307E\u3057\u305F\uFF08${size} \u2192 ${bytes.byteLength} \u30D0\u30A4\u30C8\uFF09: ${file}`)}await ctx.putSigned(uploadUrl,bytes,contentType);try{const current=taskAttachmentIds(await ctx.send({method:"GET",path:taskPath(input)}));const next=current.includes(id)?current:[...current,id];const updated=await ctx.
|
|
38
|
-
send({method:"PUT",path:taskPath(input),body:{attachment_ids:next}});const linked=taskAttachmentIds(updated);if(!linked.includes(id)){throw new ApiResponseError("\u30BF\u30B9\u30AF\u66F4\u65B0\u306E\u5FDC\u7B54\u306E attachment_ids \u306B\u4ECA\u56DE\u306E\u6DFB\u4ED8\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{attachment_id:id,task_id:requireResolved(input,"taskId"),project_id:requireResolved(input,"projectId"),
|
|
39
|
-
file_name:requireResolved(input,"fileName"),content_type:contentType,file_size:size,attachment_count:linked.length}}catch(err){ctx.warn(`\u6DFB\u4ED8 ${id} \u306F\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u307E\u3067\u5B8C\u4E86\u3057\u307E\u3057\u305F\u304C\u3001\u30BF\u30B9\u30AF\u3078\u306E\u7D10\u3065\u3051\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002
|
|
40
|
-
\u672A\u7D10\u3065\u3051\u306E\u6DFB\u4ED8\u306F\u30B5\u30FC\u30D0\u304C\u4E00\u5B9A\u6642\u9593\uFF08\u7F72\u540DURL\u306E\u6709\u52B9\u671F\u9650\uFF0B1\u6642\u9593\uFF09\u5F8C\u306B\u81EA\u52D5\u3067\u524A\u9664\u3057\u307E\u3059\u3002\u3082\u3046\u4E00\u5EA6 twp task attachment upload \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);throw err}}async function list(input,ctx){const ids=taskAttachmentIds(await ctx.send({method:"GET",path:taskPath(input)}));const rows2=[];for(let offset=0;offset<
|
|
41
|
-
ids.length;offset+=IDS_PER_REQUEST){const chunk=ids.slice(offset,offset+IDS_PER_REQUEST);rows2.push(...attachmentRows(await ctx.send({method:"GET",path:"/api/v2/attachments",query:{ids:chunk.join(",")}})))}if(rows2.length<ids.length){ctx.warn(`\u30BF\u30B9\u30AF\u306B\u7D10\u3065\u304F\u6DFB\u4ED8 ${ids.length} \u4EF6\u306E\u3046\u3061 ${ids.length-rows2.length} \u4EF6\u306F\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u524A\u9664\u6E08\u307F\u304B\u3001\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF09\u3002`)}
|
|
42
|
-
return{data:rows2}}var taskAttachmentResource={name:"attachment",summary:"\u30BF\u30B9\u30AF\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\uFF08\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u30FB\u4E00\u89A7\u30FB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\uFF09",operations:[{name:"list",summary:"\u30BF\u30B9\u30AF\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u4E00\u89A7\u3059\u308B",usage:"twp task attachment list <\u30AD\u30FC|ID> [--project <\u30B3\u30FC\u30C9|ID>]",description:`${TASK_REF_HELP}
|
|
43
|
-
|
|
44
|
-
\u30BF\u30B9\u30AF\u672C\u4F53\u306B\u7D10\u3065\u304F\u6DFB\u4ED8\u3060\u3051\u3092\u8FD4\u3057\u307E\u3059\uFF08\u30B3\u30E1\u30F3\u30C8\u306B\u4ED8\u3044\u305F\u6DFB\u4ED8\u306F\u542B\u307F\u307E\u305B\u3093\uFF09\u3002
|
|
45
|
-
\u30BF\u30B9\u30AF\u3092\u53D6\u5F97\u3057\u3066\u6DFB\u4ED8 ID \u3092\u5F97\u305F\u3042\u3068\u3001ID \u3067\u30E1\u30BF\u60C5\u5831\u3092\u53D6\u5F97\u3057\u307E\u3059\uFF082\u5F80\u5FA9\u4EE5\u4E0A\uFF09\u3002`,flags:[TASK_REF_FLAG,PROJECT_FLAG],prepare:(input,ctx)=>resolveTask(input,ctx,"twp task attachment list help"),plan:input=>({method:"GET",path:taskPath(input)}),plannedNotes:()=>["\u3053\u306E\u3042\u3068\u3001\u30BF\u30B9\u30AF\u306E attachment_ids \u3067 GET /api/v2/attachments?ids=\u2026 \u3092\u9001\u308A\u307E\u3059\u3002"],
|
|
46
|
-
execute:list,summarize:body=>attachmentRows(body).map(row=>pick(row,LIST_COLUMNS)),raw:body=>attachmentRows(body)},{name:"upload",summary:"\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u3092\u30BF\u30B9\u30AF\u306B\u6DFB\u4ED8\u3059\u308B\uFF08\u767A\u884C\u30FB\u8EE2\u9001\u30FB\u7D10\u3065\u3051\u30921\u30B3\u30DE\u30F3\u30C9\u3067\uFF09",usage:"twp task attachment upload <\u30AD\u30FC|ID> --file <\u30D1\u30B9> [--name <\u30D5\u30A1\u30A4\u30EB\u540D>] [--content-type <\u578B>]",description:`${TASK_REF_HELP}\
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
\u6B21\u306E3\u5F80\u5FA9\u30921\u30B3\u30DE\u30F3\u30C9\u3067\u884C\u3044\u307E\u3059\u3002
|
|
50
|
-
1. POST /api/v2/attachments/upload-url\uFF08\u7F72\u540DURL\u306E\u767A\u884C\uFF09
|
|
51
|
-
2. \u7F72\u540DURL\u3078 PUT\uFF08\u30D5\u30A1\u30A4\u30EB\u672C\u4F53\u3002TWP \u306E\u8A8D\u8A3C\u60C5\u5831\u306F\u9001\u308A\u307E\u305B\u3093\uFF09
|
|
52
|
-
3. \u30BF\u30B9\u30AF\u306E attachment_ids \u306B\u8FFD\u52A0\u3057\u3066 PUT\uFF08\u3053\u3053\u3067\u6DFB\u4ED8\u304C\u78BA\u5B9A\u3057\u307E\u3059\uFF09
|
|
53
|
-
3 \u304C\u5931\u6557\u3057\u305F\u5834\u5408\u306F\u6DFB\u4ED8 ID \u3092 stderr \u306B\u51FA\u3057\u3066\u5931\u6557\u3057\u307E\u3059\u3002\u672A\u78BA\u5B9A\u306E\u6DFB\u4ED8\u306F\u30B5\u30FC\u30D0\u304C\u81EA\u52D5\u3067\u524A\u9664\u3057\u307E\u3059\u3002
|
|
54
|
-
--dry-run \u306F 1 \u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u3060\u3051\u3092\u8868\u793A\u3057\u307E\u3059\uFF082 \u4EE5\u964D\u306F 1 \u306E\u5FDC\u7B54\u306B\u4F9D\u5B58\u3059\u308B\u305F\u3081\uFF09\u3002`,flags:[FILE_FLAG,NAME_FLAG,CONTENT_TYPE_FLAG,TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const local=localFile(input);const resolved=await resolveTask(input,ctx,"twp task attachment upload help");return withResolved(resolved,{file:local.file,fileName:local.name,fileSize:String(local.size),
|
|
55
|
-
contentType:local.contentType})},plan:uploadUrlPlan,plannedNotes:input=>[`\u3053\u306E\u3042\u3068\u3001\u7F72\u540DURL\u3078 ${requireResolved(input,"fileSize")} \u30D0\u30A4\u30C8\u3092 PUT \u3057\u3001\u30BF\u30B9\u30AF\u306E attachment_ids \u306B\u8FFD\u52A0\u3057\u3066 PUT \u3057\u307E\u3059\u3002`],execute:upload,summarize:body=>pick(body,UPLOAD_COLUMNS),raw:body=>body},{name:"download",summary:"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3066\u30D5\u30A1\u30A4\u30EB\u3078\u66F8\u304D\u51FA\u3059",
|
|
56
|
-
usage:"twp task attachment download <\u6DFB\u4ED8ID> --out <\u30D1\u30B9> [--force]",description:"\u6DFB\u4ED8 ID \u306F twp task attachment list \u306E id \u3067\u3059\u3002\n\u66F8\u304D\u51FA\u3057\u5148\u306F --out \u3067\u5FC5\u305A\u6307\u5B9A\u3057\u307E\u3059\uFF08\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u306F --force \u304C\u7121\u3051\u308C\u3070\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\u3002",flags:[ATTACHMENT_REF_FLAG,
|
|
57
|
-
OUT_FLAG,FORCE_FLAG],download:{outFlag:"--out",forceFlag:"--force"},plan(input){const id=singleRef(input,{flag:"--attachment",label:"\u6DFB\u4ED8ID",usage:"twp task attachment download help"});if(!isSafePathSegment(id))throw new UsageError(`\u6DFB\u4ED8ID \u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${id}`);return{method:"GET",path:`/api/v2/attachments/${encodeURIComponent(id)}/download`}},summarize:body=>body,raw:body=>body}]};var LIST_COLUMNS2=["id","created_at","created_by_name","comment_type","content"];var QUESTION_COLUMN="question";var ANSWER_COLUMN="answer";function summarizeComments(items){const answersByQuestion=new Map;for(const row of items){const answer=isRecord(row)?row["answer_to"]:void 0;if(!isRecord(answer))continue;const target=answer["comment_id"];if(typeof target!=="string"||target==="")continue;answersByQuestion.set(target,selectedKeyText(answer["selected_key"]))}return items.map(row=>{const source=isRecord(
|
|
58
|
-
row)?row:{};const id=typeof source["id"]==="string"?source["id"]:"";const answer=isRecord(source["answer_to"])?selectedKeyText(source["answer_to"]["selected_key"]):answersByQuestion.get(id)??null;const base=pick(row,LIST_COLUMNS2);return{id:base["id"],created_at:base["created_at"],created_by_name:base["created_by_name"],comment_type:base["comment_type"],[QUESTION_COLUMN]:questionText(source["question"]),[ANSWER_COLUMN]:answer,content:base["content"]}})}function questionText(question){if(!isRecord(
|
|
3
|
+
import{repeatedValues}from"./chunk-IOGVQVGD.js";import{charCount,readBody}from"./chunk-HGTG5XQ7.js";import{PROJECT_FLAG,TASK_REF_FLAG,TASK_REF_HELP,classifyTaskRef,rejectRedundantProject,resolveTaskLocation,taskAttachmentResource,taskSurface,wantsPrivateSurface}from"./chunk-I3YPO7CY.js";import{PRIVATE_PROJECT_REF}from"./chunk-GY7KI5E5.js";import"./chunk-DDKZ5IPT.js";import{boundedText,decimal,isoDate,priority}from"./chunk-IJLJGDMZ.js";import{PRIVATE_TASKS_PATH,
|
|
4
|
+
TASK_MASTERS}from"./chunk-QOUFHYK5.js";import"./chunk-II5RVJQN.js";import"./chunk-FTYJZFEK.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-DMDVLOAY.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-QQRJLH6B.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";
|
|
5
|
+
import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var LIST_COLUMNS=["id","created_at","created_by_name","comment_type","content"];var QUESTION_COLUMN="question";var ANSWER_COLUMN="answer";function summarizeComments(items){const answersByQuestion=new Map;for(const row of items){const answer=isRecord(row)?row["answer_to"]:void 0;if(!isRecord(answer))continue;const target=answer["comment_id"];if(typeof target!=="string"||target==="")continue;answersByQuestion.set(target,selectedKeyText(answer["selected_key"]))}return items.map(row=>{const source=isRecord(
|
|
6
|
+
row)?row:{};const id=typeof source["id"]==="string"?source["id"]:"";const answer=isRecord(source["answer_to"])?selectedKeyText(source["answer_to"]["selected_key"]):answersByQuestion.get(id)??null;const base=pick(row,LIST_COLUMNS);return{id:base["id"],created_at:base["created_at"],created_by_name:base["created_by_name"],comment_type:base["comment_type"],[QUESTION_COLUMN]:questionText(source["question"]),[ANSWER_COLUMN]:answer,content:base["content"]}})}function questionText(question){if(!isRecord(
|
|
59
7
|
question))return null;const options=question["options"];if(!Array.isArray(options))return null;const parts=options.map(option=>{if(!isRecord(option))return null;const key=typeof option["key"]==="string"?option["key"]:null;if(key===null)return null;const label=typeof option["label"]==="string"?option["label"]:"";return label===""?key:`${key}=${label}`}).filter(part=>part!==null);return parts.length===0?null:parts.join(" / ")}function selectedKeyText(selected){if(typeof selected==="string"&&selected!==
|
|
60
8
|
"")return selected;if(Array.isArray(selected)){const keys=selected.filter(key=>typeof key==="string"&&key!=="");if(keys.length>0)return keys.join(",")}return"(\u81EA\u7531\u8A18\u8FF0)"}var WRITE_COLUMNS=["id","task_id","created_at","updated_at","created_by_name","content"];var CONTENT_MAX_CHARS=1e4;var QUESTION_MAX_CHARS=2e3;var CONTENT_HTML_MAX_CHARS=1e5;var OPTION_KEY_MAX_CHARS=10;var OPTION_LABEL_MAX_CHARS=200;var OPTION_MIN=1;var OPTION_MAX=5;var SELECTED_KEY_MAX_CHARS=10;var listPaging=envelopePaging(
|
|
61
9
|
{label:"\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7"});function commentObject(body){const comment=isRecord(body)?body["comment"]:void 0;if(!isRecord(comment)){throw new ApiResponseError("\u30B3\u30E1\u30F3\u30C8\u306E\u5FDC\u7B54\u306B comment \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return comment}var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown \u3092\u58CA\u3055\u306A\u3044\u4E3B\u7D4C\u8DEF",
|
|
@@ -134,11 +82,7 @@ void 0?`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08--project ${PRIVATE_PROJECT_REF}\uFF
|
|
|
134
82
|
${privateHelp}`,flags:[PROJECT_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F --project <\u30B3\u30FC\u30C9|ID> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}if(wantsPrivateSurface(input)){if(spec.privateEnvelope===void 0){throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u306B${master.
|
|
135
83
|
label}\u306F\u3042\u308A\u307E\u305B\u3093`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30DE\u30B9\u30BF\u306F\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u7A2E\u5225\u30FB\u30AB\u30C6\u30B4\u30EA\u30FB\u30E9\u30D9\u30EB\u3060\u3051\u3067\u3059\u3002`)}return withResolved(input,{surface:PRIVATE_SURFACE})}return withResolved(input,{projectId:await ctx.projectId(input.flags.get("--project"))})},plan(input){if(isPrivatePlan(input))return{method:"GET",path:`${PRIVATE_TASKS_PATH}/masters`};return{method:"GET",path:`\
|
|
136
84
|
/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${master.path}`}},async fetchCached(input,ctx){if(isPrivatePlan(input)){return ctx.resolver.privateMasterRows(spec.privateEnvelope,master.label)}return ctx.resolver.taskMasterRows(spec.kind,requireResolved(input,"projectId"))},summarize:body=>rows(body).map(row=>pick(row,spec.columns)),raw:body=>rows(body),notes:body=>rows(body).length===0?[`${master.label}\u306F1\u4EF6\u3082\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08--refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\uFF09\u3002`]:
|
|
137
|
-
[]}]}}var taskMasterResources=SPECS.map(masterResource);var
|
|
138
|
-
`${flag} \u306B\u5B58\u5728\u3057\u306A\u3044\u65E5\u4ED8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059: ${raw}`,"\u4F8B: 2026-09-30")}return value}function priority(input,flag="--priority"){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isInteger(value)||value<1||value>3){throw new UsageError(`${flag} \u306F 1 / 2 / 3 \u306E\u3044\u305A\u308C\u304B\u3067\u3059: ${raw}`,"1: \u9AD8 \uFF0F\
|
|
139
|
-
2: \u4E2D \uFF0F 3: \u4F4E")}return value}function decimal(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const trimmed=raw.trim();const value=/^\d+(\.\d+)?$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isFinite(value)||value<options.min||value>options.max){throw new UsageError(`${flag} \u306F ${options.min} \u4EE5\u4E0A ${options.max} \u4EE5\u4E0B\u306E\u6570\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 3 / 3.5")}return value}
|
|
140
|
-
function boundedText(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(raw.trim()===""){throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const count=[...raw].length;if(count>options.maxChars){throw new UsageError(`${options.label}\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${options.maxChars}\
|
|
141
|
-
\u6587\u5B57\uFF09`,`${flag} \u3092 ${options.maxChars} \u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return raw}var LIST_COLUMNS3=["key","subject","status_id","assignee_id","priority","due_date","updated_at"];var GET_COLUMNS=["id","key","project_id","subject","description","status_id","type_id","category_id","milestone_id","assignee_id","priority","start_date","due_date","estimated_hours","actual_hours","progress","parent_id","subtask_count","created_by","created_at","updated_by","updated_at"];var listPaging2=envelopePaging({label:"\u30BF\u30B9\u30AF\u4E00\u89A7"});var PRIVATE_HELP=`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3055\u306A\u3044\u81EA\u5206\u3060\u3051\u306E\
|
|
85
|
+
[]}]}}var taskMasterResources=SPECS.map(masterResource);var LIST_COLUMNS2=["key","subject","status_id","assignee_id","priority","due_date","updated_at"];var GET_COLUMNS=["id","key","project_id","subject","description","status_id","type_id","category_id","milestone_id","assignee_id","priority","start_date","due_date","estimated_hours","actual_hours","progress","parent_id","subtask_count","created_by","created_at","updated_by","updated_at"];var listPaging2=envelopePaging({label:"\u30BF\u30B9\u30AF\u4E00\u89A7"});var PRIVATE_HELP=`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3055\u306A\u3044\u81EA\u5206\u3060\u3051\u306E\
|
|
142
86
|
\u30BF\u30B9\u30AF\uFF09\u306F --project ${PRIVATE_PROJECT_REF} \u3067\u64CD\u4F5C\u3057\u307E\u3059\u3002
|
|
143
87
|
twp task list --project ${PRIVATE_PROJECT_REF}
|
|
144
88
|
\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306F PRIVATE-<\u756A\u53F7> \u3067\u3059\u3002\u62C5\u5F53\u8005\u306E\u6307\u5B9A\u30FB\u7D5E\u308A\u8FBC\u307F\uFF08--assignee\uFF09\u306F\u3067\u304D\u307E\u305B\u3093
|
|
@@ -186,7 +130,7 @@ ${PRIVATE_HELP}
|
|
|
186
130
|
takesValue:true,placeholder:"<me|\u540D\u524D|ID>"},{name:"--keyword",summary:"\u4EF6\u540D\u30FB\u672C\u6587\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u691C\u7D22\u7D4C\u8DEF\u306B\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\uFF09",takesValue:true,placeholder:"<\u8A9E>"}],paging:listPaging2,async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp task list h\
|
|
187
131
|
elp")}if(wantsPrivateSurface(input)){rejectPrivateUnsupportedFlags(input);return withResolved(input,{surface:PRIVATE_SURFACE2,...await resolvePrivateStatusAndType(input,ctx,{useDefaults:false})})}const projectId=await ctx.projectId(input.flags.get("--project"));const resolved={projectId};const status=nonEmpty(input.flags,"--status");if(status!==void 0)resolved["status_id"]=(await ctx.resolver.status(projectId,status)).id;const type=nonEmpty(input.flags,"--type");if(type!==void 0)resolved["type_i\
|
|
188
132
|
d"]=(await ctx.resolver.taskType(projectId,type)).id;const assignee=nonEmpty(input.flags,"--assignee");if(assignee!==void 0)resolved["assignee_id"]=(await ctx.resolver.assignee(projectId,assignee)).id;return withResolved(input,resolved)},plan(input){const query={limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),status_id:input.resolved?.["status_id"],type_id:input.resolved?.["type_id"],assignee_id:input.resolved?.["assi\
|
|
189
|
-
gnee_id"]};if(isPrivatePlan2(input))return{method:"GET",path:PRIVATE_TASKS_PATH,query};const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/tasks`,query}},summarize:body=>listPaging2.items(body).map(row=>pick(row,
|
|
133
|
+
gnee_id"]};if(isPrivatePlan2(input))return{method:"GET",path:PRIVATE_TASKS_PATH,query};const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/tasks`,query}},summarize:body=>listPaging2.items(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>listPaging2.items(body)},{name:"get",summary:"\u30BF\u30B9\u30AF1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B",usage:"twp task get <\u30AD\u30FC|ID> [--project <\u30B3\u30FC\u30C9|ID|__private__>]",
|
|
190
134
|
description:`${TASK_REF_HELP}
|
|
191
135
|
|
|
192
136
|
${PRIVATE_HELP}`,flags:[TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task get help"});if(taskSurface(input,ref)===PRIVATE_SURFACE2){return withResolved(input,{surface:PRIVATE_SURFACE2,privateRef:privateTaskRef(ref).value})}const classified=classifyTaskRef(ref);if(classified.kind==="key"){rejectRedundantProject(input,classified.value);return withResolved(input,{mode:"key",key:classified.value})}const{projectId,
|
|
@@ -196,7 +140,7 @@ GET",path:`/api/v2/projects/${projectId}/tasks/${encodeURIComponent(requireResol
|
|
|
196
140
|
${PRIVATE_HELP}
|
|
197
141
|
|
|
198
142
|
\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\uFF08--all / --limit \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`,flags:[TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task subtasks help"});if(taskSurface(input,ref)===PRIVATE_SURFACE2){return withResolved(input,{surface:PRIVATE_SURFACE2,taskId:await resolvePrivateTaskId(
|
|
199
|
-
ctx,ref)})}return withResolved(input,await resolveTaskLocation(input,ctx,ref))},plan(input){const taskId=encodeURIComponent(requireResolved(input,"taskId"));if(isPrivatePlan2(input)){return{method:"GET",path:`${PRIVATE_TASKS_PATH}/${taskId}/subtasks`}}const projectId=encodeURIComponent(requireResolved(input,"projectId"));return{method:"GET",path:`/api/v2/projects/${projectId}/tasks/${taskId}/subtasks`}},summarize:body=>subtaskItems(body).map(row=>pick(row,
|
|
143
|
+
ctx,ref)})}return withResolved(input,await resolveTaskLocation(input,ctx,ref))},plan(input){const taskId=encodeURIComponent(requireResolved(input,"taskId"));if(isPrivatePlan2(input)){return{method:"GET",path:`${PRIVATE_TASKS_PATH}/${taskId}/subtasks`}}const projectId=encodeURIComponent(requireResolved(input,"projectId"));return{method:"GET",path:`/api/v2/projects/${projectId}/tasks/${taskId}/subtasks`}},summarize:body=>subtaskItems(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>subtaskItems(body)},
|
|
200
144
|
{name:"create",summary:"\u30BF\u30B9\u30AF\u3092\u4F5C\u6210\u3059\u308B",usage:'twp task create --subject "<\u4EF6\u540D>" [--project <\u30B3\u30FC\u30C9|ID|__private__>] [--type <\u540D\u524D>] [--status <\u540D\u524D>] [--assignee <me|\u540D\u524D>] [--category <\u540D\u524D>] [--label <\u540D\u524D>] [--parent <\u30AD\u30FC|ID>]',description:`--subject \u3060\u3051\u304C\u5FC5\u9808\u3067\u3059\u3002--status / --type \u3092\u7701\u304F\u3068\u3001\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u65E2\u5B9A\u306B\u6307\u5B9A\u3057\u3066\u3044\u308B
|
|
201
145
|
\u3082\u306E\u3092\u4F7F\u3044\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u5074\u3067\u306F\u3069\u3061\u3089\u3082\u5FC5\u9808\u9805\u76EE\u3067\u3059\uFF09\u3002\u65E2\u5B9A\u3092\u4F7F\u3063\u305F\u5834\u5408\u306F stderr \u306B\u6CE8\u8A18\u304C\u51FA\u307E\u3059\u3002
|
|
202
146
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-
|
|
3
|
+
import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-VCMVTC6B.js";import"./chunk-WOUKWOAR.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-ILKQDXI5.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{fetchLatestVersion,isBehindLatest,runUpdate};
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{repeatedValues}from"./chunk-IOGVQVGD.js";import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-WGVHYTZV.js";import{booleanText,boundedText,isoDate}from"./chunk-IJLJGDMZ.js";import{DEPARTMENTS_PATH,ORG_MASTER_LIMIT,POSITIONS_PATH}from"./chunk-QOUFHYK5.js";import"./chunk-II5RVJQN.js";import{ApiError}from"./chunk-FTYJZFEK.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger,shellQuote}from"./chunk-DMDVLOAY.js";
|
|
4
|
+
import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{ResolveError,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-QQRJLH6B.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";import fs2 from"fs";var USER_REF_HELP="<\u30E6\u30FC\u30B6\u30FC> \u306F ID\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u793E\u54E1\u756A\u53F7\u30FB\u6C0F\u540D\u30FBme\uFF08\u81EA\u5206\uFF09\u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n\u6C0F\u540D\u306F\u5B8C\u5168\u4E00\u81F4\u30671\u4EBA\u306B\u7D5E\u308C\u305F\u3068\u304D\u3060\u3051\u53D7\u3051\u4ED8\u3051\u307E\u3059\uFF08\u540C\u59D3\u540C\u540D\u306A\u3089\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308B\u306E\u3067\u3001\n\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304B\u793E\u54E1\u756A\u53F7\u3067\u6307\u5B9A\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002ID \u4EE5\u5916\u306F\u3001\u30C6\u30CA\u30F3\u30C8\u306E\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\n\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002\n\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306F\u793E\u54E1\u756A\u53F7\u3067\u306F\u5F15\u3051\u307E\u305B\u3093\u3002\u7D44\u7E54\u7BA1\u7406\u8005\u3067\u306A\u3044\u5834\u5408\u306F ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
5
|
+
function userPath(input,suffix=""){const userId=requireResolved(input,"userId");if(!isSafePathSegment(userId)){throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30E6\u30FC\u30B6\u30FC ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${userId}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return`${encodeURIComponent(userId)}${suffix}`}var USER_REF_FLAG={name:"--user",summary:"\u5BFE\u8C61\u306E\u30E6\u30FC\u30B6\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",
|
|
6
|
+
takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"};async function prepareUser(input,ctx,usage){const ref=singleRef(input,{flag:"--user",label:"\u30E6\u30FC\u30B6\u30FC",usage});const user=await ctx.resolver.user(ref);return withResolved(input,{userId:user.id})}var ASSIGNMENT_COLUMNS=["id","department_name","position_name","start_date","end_date","is_primary","is_current","is_approval_route","effective_status"];function assignmentRows(body){const response=isRecord(body)&&"response"in body?body["response"]:body;const list=isRecord(response)?response["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u6240\u5C5E\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
7
|
+
return list}async function nameMap(ctx,path,label2){try{const body=await ctx.send({method:"GET",path,query:{limit:ORG_MASTER_LIMIT}});const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list))throw new Error(`${label2}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093`);const count=isRecord(body)?body["count"]:void 0;if(typeof count==="number"&&count>list.length){ctx.warn(`${label2}\u4E00\u89A7\u304C ${count} \u4EF6\u4E2D ${list.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\
|
|
8
|
+
\u308C\u305F\u305F\u3081\u3001\u4E00\u90E8\u306E${label2}\u540D\u306F\u7A7A\u6B04\u3067\u3059\u3002ID \u306F --output json \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}const map={};for(const row of list){if(isRecord(row)&&typeof row["id"]==="string"&&typeof row["name"]==="string"){map[row["id"]]=row["name"]}}return map}catch(err){ctx.warn(`${label2}\u540D\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001${label2}\u540D\u306E\u5217\u306F\u7A7A\u6B04\u3067\u3059\uFF08${err.
|
|
9
|
+
message}\uFF09\u3002ID \u306F --output json \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`);return{}}}function assignmentPlan(input){const suffix=input.flags.has("--current")?"/assignments/current":"/assignments";return{method:"GET",path:`/api/v2/organization/users/${userPath(input,suffix)}`}}var listOperation={name:"list",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\u306E\u5C65\u6B74\u3092\u4E00\u89A7\u3059\u308B",usage:"twp user assignment list <\u30E6\u30FC\u30B6\u30FC> [--current]",
|
|
10
|
+
description:"\u904E\u53BB\u30FB\u73FE\u5728\u30FB\u4E88\u5B9A\u306E\u6240\u5C5E\u3092\u3059\u3079\u3066\u51FA\u3057\u307E\u3059\u3002--current \u3067\u73FE\u5728\u6709\u52B9\u306A\u6240\u5C5E\u3060\u3051\u306B\u7D5E\u308A\u307E\u3059\u3002\nis_primary \u306F\u4E3B\u52D9\u3001is_approval_route \u306F\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u306E\u4E0A\u9577\u627F\u8A8D\u306B\u4F7F\u308F\u308C\u308B\u6240\u5C5E\u3067\u3059\u3002\n\u53C2\u7167\u3067\u304D\u308B\u306E\u306F\u672C\u4EBA\u30FB\u4E0A\u9577\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u3067\u3059\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002\n\n"+
|
|
11
|
+
USER_REF_HELP,forbidden:"\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\u3092\u53C2\u7167\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u672C\u4EBA\u30FB\u4E0A\u9577\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u53C2\u7167\u3067\u304D\u307E\u3059",flags:[USER_REF_FLAG,{name:"--current",summary:"\u73FE\u5728\u6709\u52B9\u306A\u6240\u5C5E\u3060\u3051\u3092\u51FA\u3059",takesValue:false}],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user assignment list help"),
|
|
12
|
+
plan:assignmentPlan,plannedNotes:()=>["\u3053\u306E\u3042\u3068\u3001\u90E8\u7F72\u540D\u30FB\u5F79\u8077\u540D\u3092\u8868\u793A\u3059\u308B\u305F\u3081\u90E8\u7F72\u4E00\u89A7\u3068\u5F79\u8077\u4E00\u89A7\u3092 GET \u3057\u307E\u3059\u3002"],async execute(input,ctx){const response=await ctx.send(assignmentPlan(input));assignmentRows(response);const[departmentNames,positionNames]=await Promise.all([nameMap(ctx,DEPARTMENTS_PATH,"\u90E8\u7F72"),nameMap(ctx,POSITIONS_PATH,"\u5F79\u8077")]);return{
|
|
13
|
+
response,departmentNames,positionNames}},summarize(body){const names=body;return assignmentRows(body).map(row=>{const record=isRecord(row)?row:{};const department=record["department_id"];const position=record["position_id"];return pick({...record,department_name:typeof department==="string"?names.departmentNames?.[department]??null:null,position_name:typeof position==="string"?names.positionNames?.[position]??null:null},ASSIGNMENT_COLUMNS)})},raw:body=>assignmentRows(body)};var FORBIDDEN="\u7D44\u7E54\u7BA1\u7406\u8005\u306E\
|
|
14
|
+
\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u6240\u5C5E\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059";function userRefField(flag,key,label2){return{kind:"ref",flag,key,summary:`${label2}\uFF08\u30E6\u30FC\u30B6\u30FC\u3002ID\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u793E\u54E1\u756A\u53F7\u30FB\u6C0F\u540D\uFF09`,placeholder:"<\u30E6\u30FC\u30B6\u30FC>",clearFlag:`--no-${flag.
|
|
15
|
+
slice(2)}`,clearSummary:`${label2}\u3092\u5916\u3059`,resolve:(ctx,ref,flagName)=>ctx.resolver.user(ref,flagName)}}var DEPARTMENT_FIELD={kind:"ref",flag:"--department",key:"department_id",summary:"\u90E8\u7F72\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",placeholder:"<\u90E8\u7F72>",clearFlag:"--no-department",clearSummary:"",resolve:(ctx,ref,flag)=>ctx.resolver.department(ref,flag)};var POSITION_FIELD={kind:"ref",flag:"--position",key:"position_id",summary:"\u5F79\u8077\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",
|
|
16
|
+
placeholder:"<\u5F79\u8077>",clearFlag:"--no-position",clearSummary:"",resolve:(ctx,ref,flag)=>ctx.resolver.position(ref,flag)};var JOB_TITLE_FIELD={kind:"ref",flag:"--job-title",key:"job_title_id",summary:"\u8077\u4F4D\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",placeholder:"<\u8077\u4F4D>",clearFlag:"--no-job-title",clearSummary:"\u8077\u4F4D\u3092\u5916\u3059",resolve:(ctx,ref,flag)=>ctx.resolver.jobTitle(ref,flag)};var MANAGER_FIELD=userRefField("--manager","manager_id","\u4E0A\u9577");
|
|
17
|
+
var INTERVIEWER_FIELD=userRefField("--interviewer","interview_user_id","\u9762\u8AC7\u8005");var MENTOR_FIELD=userRefField("--mentor","mentor_user_id","\u30E1\u30F3\u30BF\u30FC");var END_DATE_FIELD={kind:"date",flag:"--end-date",key:"end_date",summary:"\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\u3002none \u3067\u7D42\u4E86\u65E5\u3092\u6D88\u3059\uFF09"};var PRIMARY_FIELD={kind:"boolean",flag:"--primary",key:"is_primary",summary:"\u4E3B\u6240\u5C5E\u304B\uFF08true / false\uFF09"};var TYPE_FIELD={kind:"e\
|
|
18
|
+
num",flag:"--type",key:"assignment_type",values:["regular","concurrent","acting"],summary:"\u6240\u5C5E\u306E\u7A2E\u985E\uFF08regular: \u901A\u5E38 / concurrent: \u517C\u52D9 / acting: \u4EE3\u7406\uFF09"};var NOTES_FIELD={kind:"text",flag:"--notes",key:"notes",label:"\u5099\u8003",maxChars:1e3,summary:"\u5099\u8003\uFF081000\u6587\u5B57\u307E\u3067\uFF09"};var FIELDS=[DEPARTMENT_FIELD,POSITION_FIELD,JOB_TITLE_FIELD,MANAGER_FIELD,INTERVIEWER_FIELD,MENTOR_FIELD,END_DATE_FIELD,PRIMARY_FIELD,TYPE_FIELD,
|
|
19
|
+
NOTES_FIELD];var MOVE_FIELDS=[DEPARTMENT_FIELD,POSITION_FIELD,JOB_TITLE_FIELD,MANAGER_FIELD,INTERVIEWER_FIELD,MENTOR_FIELD,NOTES_FIELD];var NOT_CLEARABLE=new Set(["--no-department","--no-position"]);var START_DATE_FLAG={name:"--start-date",summary:"\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var OBSERVER_FLAG={name:"--observer",summary:"\u89B3\u5BDF\u8005\uFF08\u30E6\u30FC\u30B6\u30FC\u3002\u8907\u6570\u56DE\u6307\u5B9A\u3067\u304D\u308B\uFF09",takesValue:true,
|
|
20
|
+
placeholder:"<\u30E6\u30FC\u30B6\u30FC>",repeatable:true};var NO_OBSERVERS_FLAG={name:"--no-observers",summary:"\u89B3\u5BDF\u8005\u3092\u3059\u3079\u3066\u5916\u3059",takesValue:false};var OWNER_FLAG={name:"--user",summary:"\u6240\u5C5E\u3092\u6301\u3064\u30E6\u30FC\u30B6\u30FC\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"};var USER_FIELD_HELP="--manager / --interviewer / --mentor / --observer \u306F\u30E6\u30FC\u30B6\u30FC\u3092 ID\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u793E\u54E1\u756A\u53F7\u30FB\u6C0F\u540D\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\n--department / --position / --job\
|
|
21
|
+
-title \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002";var OBSERVERS_KEY="observer_ids";async function resolveObservers(input,ctx){const refs=repeatedValues(input,OBSERVER_FLAG.name);if(refs.length===0)return input;const ids=[];for(const ref of refs)ids.push((await ctx.resolver.user(ref,OBSERVER_FLAG.name)).id);return withResolved(input,{[OBSERVERS_KEY]:JSON.stringify(ids)})}function checkArguments(input,fields){fieldBody(
|
|
22
|
+
input,fields);isoDate(input,START_DATE_FLAG.name);for(const ref of repeatedValues(input,OBSERVER_FLAG.name)){if(ref.trim()==="")throw new UsageError(`${OBSERVER_FLAG.name} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`)}if(input.flags.has(NO_OBSERVERS_FLAG.name)&&repeatedValues(input,OBSERVER_FLAG.name).length>0){throw new UsageError(`${OBSERVER_FLAG.name} \u3068 ${NO_OBSERVERS_FLAG.name} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u3092\u6307\u5B9A\u3057\
|
|
23
|
+
\u3066\u304F\u3060\u3055\u3044\u3002")}}function assignmentBody(input,fields){const body=fieldBody(input,fields);const startDate=isoDate(input,START_DATE_FLAG.name);if(startDate!==void 0)body["start_date"]=startDate;const observers=input.resolved?.[OBSERVERS_KEY];if(observers!==void 0)body["observer_ids"]=JSON.parse(observers);if(input.flags.has(NO_OBSERVERS_FLAG.name))body["observer_ids"]=[];return body}async function resolveAll(input,ctx,fields){return resolveObservers(await resolveRefFields(input,
|
|
24
|
+
ctx,fields),ctx)}async function prepareTarget(input,ctx,usage){if(input.args.length===0)throw new UsageError("\u6240\u5C5E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`${usage}\uFF08\u6240\u5C5E ID \u306F twp user assignment list <\u30E6\u30FC\u30B6\u30FC> \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09`);if(input.args.length>1)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u6240\u5C5E ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${input.args.slice(1).join(" ")}`,usage);const id=input.
|
|
25
|
+
args[0].trim();if(!isSafePathSegment(id))throw new UsageError(`\u6240\u5C5E ID \u306B\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${id}`,usage);const owner=nonEmpty(input.flags,OWNER_FLAG.name);if(owner===void 0){throw new UsageError("--user \u3067\u6240\u5C5E\u3092\u6301\u3064\u30E6\u30FC\u30B6\u30FC\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`${usage}\uFF08\u6240\u5C5E\u306E URL \u306B\u306F\u30E6\u30FC\u30B6\u30FC\u304C\u8981\u308A\u307E\u3059\uFF09`)}const user=await ctx.resolver.
|
|
26
|
+
user(owner,OWNER_FLAG.name);return withResolved(input,{userId:user.id,assignmentId:id})}function itemPath(input,suffix=""){return`/api/v2/organization/users/${userPath(input,"/assignments/")}${encodeURIComponent(requireResolved(input,"assignmentId"))}${suffix}`}var WRITE_COLUMNS=["id","department_id","position_id","start_date","end_date","is_primary","is_current","effective_status"];function writeResult(body,label2){if(!isRecord(body)||body["result"]!==true||!isRecord(body["assignment"])){throw new ApiResponseError(
|
|
27
|
+
`${label2}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const rest={...body};delete rest["result"];return rest}function writeSummary(body,label2){const result=writeResult(body,label2);return{message:result["message"]??null,...pick(result["assignment"],WRITE_COLUMNS)}}function previousPrimaryNotes(body){const previous=isRecord(body)?body["previousPrimaryUpdated"]:void 0;
|
|
28
|
+
if(!isRecord(previous))return[];return[`\u65E2\u5B58\u306E\u4E3B\u6240\u5C5E\uFF08${String(previous["department_name"]??previous["department_id"]??"\u4E0D\u660E")}\uFF09\u306E\u7D42\u4E86\u65E5\u3092 ${String(previous["new_end_date"]??"?")} \u306B\u8A2D\u5B9A\u3057\u307E\u3057\u305F\u3002`]}var createOperation={name:"create",summary:"\u6240\u5C5E\u3092\u4F5C\u6210\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user assignment create <\u30E6\u30FC\u30B6\u30FC> --department <\u90E8\u7F72> --posit\
|
|
29
|
+
ion <\u5F79\u8077> --start-date <YYYY-MM-DD> [--primary true|false] [--job-title <\u8077\u4F4D>] [--manager <\u30E6\u30FC\u30B6\u30FC>] [--observer <\u30E6\u30FC\u30B6\u30FC>]\u2026 [\u9805\u76EE\u2026]",description:`--department / --position / --start-date \u304C\u5FC5\u9808\u3067\u3059\u3002
|
|
30
|
+
--primary \u3092\u7701\u304F\u3068\u4E3B\u6240\u5C5E\uFF08true\uFF09\u3068\u3057\u3066\u4F5C\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u3068\u540C\u3058\u5024\u3092\u660E\u793A\u3057\u3066\u9001\u308A\u307E\u3059\uFF09\u3002
|
|
31
|
+
\u4E3B\u6240\u5C5E\u3068\u3057\u3066\u4F5C\u308B\u3068\u3001\u30B5\u30FC\u30D0\u304C\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u7D42\u4E86\u65E5\u3092\u958B\u59CB\u65E5\u306E\u524D\u65E5\u306B\u8A2D\u5B9A\u3057\u307E\u3059\u3002\u517C\u52D9\u306A\u3089 --primary false \u3067\u3059\u3002
|
|
32
|
+
\u4E3B\u6240\u5C5E\u3068\u3057\u3066\u4F5C\u308B\u3068\u304D\u306F\u3001\u958B\u59CB\u65E5\u304C\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u958B\u59CB\u65E5\u4EE5\u524D\u306E\u5834\u5408\u3068\u3001\u4E88\u7D04\u6E08\u307F\u306E\u4E3B\u6240\u5C5E\u304C\u5225\u306B\u3042\u308B\u5834\u5408\u306B\u9001\u3089\u305A\u306B\u6B62\u3081\u307E\u3059
|
|
33
|
+
\uFF08\u958B\u59CB\u65E5\u3088\u308A\u524D\u306B\u7D42\u308F\u308B\u6240\u5C5E\u3084\u3001\u91CD\u306A\u3063\u305F\u4E3B\u6240\u5C5E\u304C\u3067\u304D\u308B\u305F\u3081\uFF09\u3002
|
|
34
|
+
\u7570\u52D5\uFF08\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u3092\u7D42\u3048\u3066\u65B0\u3057\u3044\u6240\u5C5E\u3078\u79FB\u3059\uFF09\u306B\u306F twp user assignment move \u3092\u4F7F\u3046\u3068\u3001\u9001\u308B\u524D\u306B\u5185\u5BB9\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002
|
|
35
|
+
|
|
36
|
+
${USER_FIELD_HELP}
|
|
37
|
+
|
|
38
|
+
${USER_REF_HELP}`,forbidden:FORBIDDEN,flags:[...createFlags(FIELDS),START_DATE_FLAG,OBSERVER_FLAG,USER_REF_FLAG],async prepare(input,ctx){checkArguments(input,FIELDS);for(const flag of[DEPARTMENT_FIELD.flag,POSITION_FIELD.flag,START_DATE_FLAG.name]){if(!input.flags.has(flag))throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"twp user assignment create help")}const user=await resolveAll(await prepareUser(input,ctx,"twp user assignment create help"),ctx,FIELDS);
|
|
39
|
+
if(input.flags.get(PRIMARY_FIELD.flag)?.trim().toLowerCase()==="false")return user;const startDate=isoDate(input,START_DATE_FLAG.name);return withResolved(user,await primaryPreflight(ctx,requireResolved(user,"userId"),startDate,"twp user assignment create help"))},plan(input){const body=assignmentBody(input,FIELDS);if(body["is_primary"]===void 0)body["is_primary"]=true;return{method:"POST",path:`/api/v2/organization/users/${userPath(input,"/assignments")}`,body}},plannedNotes:input=>input.flags.
|
|
40
|
+
get(PRIMARY_FIELD.flag)?.trim().toLowerCase()==="false"?[]:[(input.flags.has(PRIMARY_FIELD.flag)?"":"--primary \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u4E3B\u6240\u5C5E\uFF08true\uFF09\u3068\u3057\u3066\u4F5C\u6210\u3057\u307E\u3059\u3002")+"\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u304C\u3042\u308C\u3070\u3001\u30B5\u30FC\u30D0\u304C\u305D\u306E\u7D42\u4E86\u65E5\u3092\u958B\u59CB\u65E5\u306E\u524D\u65E5\u306B\u8A2D\u5B9A\u3057\u307E\u3059\uFF08\u517C\u52D9\u306A\u3089 --primary false\uFF09\u3002"],
|
|
41
|
+
summarize:body=>writeSummary(body,"\u6240\u5C5E\u4F5C\u6210"),raw:body=>writeResult(body,"\u6240\u5C5E\u4F5C\u6210"),notes:body=>previousPrimaryNotes(body)};var updateOperation={name:"update",summary:"\u6240\u5C5E\u3092\u66F4\u65B0\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user assignment update <\u6240\u5C5EID> --user <\u30E6\u30FC\u30B6\u30FC> [--department <\u90E8\u7F72>] [--position <\u5F79\u8077>] [--manager <\u30E6\u30FC\u30B6\u30FC> | --no-manager] [--end-date <YYYY-MM-DD|none>] [\u9805\u76EE\u2026]",
|
|
42
|
+
description:"\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002\n\u6240\u5C5E ID \u306F twp user assignment list <\u30E6\u30FC\u30B6\u30FC> \u306E id \u5217\u3067\u3059\u3002--user \u306F\u6240\u5C5E\u3092\u6301\u3064\u30E6\u30FC\u30B6\u30FC\u3067\u3059\uFF08\u5FC5\u9808\uFF09\u3002\n--no-job-title / --no-manager / --no-interviewer / --no-mentor / --no-observers \u3067\u5024\u3092\u5916\u3057\u307E\u3059\u3002\n--end-date none \u3067\u7D42\u4E86\u65E5\u3092\u6D88\u3059\u3068\u3001\u958B\u59CB\u65E5\u304C\u4ECA\u65E5\u4EE5\u524D\u306A\u3089\u305D\u306E\u6240\u5C5E\u306F\u6709\u52B9\u306B\u623B\u308A\u307E\u3059\u3002\n\n"+
|
|
43
|
+
USER_FIELD_HELP,forbidden:FORBIDDEN,flags:[...updateFlags(FIELDS).filter(flag=>!NOT_CLEARABLE.has(flag.name)),START_DATE_FLAG,OBSERVER_FLAG,NO_OBSERVERS_FLAG,OWNER_FLAG],async prepare(input,ctx){const changed=hasAnyField(input,FIELDS)||[START_DATE_FLAG,NO_OBSERVERS_FLAG].some(flag=>input.flags.has(flag.name))||repeatedValues(input,OBSERVER_FLAG.name).length>0;if(!changed)throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
44
|
+
"twp user assignment update help");checkArguments(input,FIELDS);const target=await prepareTarget(input,ctx,"twp user assignment update help");return resolveAll(target,ctx,FIELDS)},plan:input=>({method:"PUT",path:itemPath(input),body:assignmentBody(input,FIELDS)}),summarize:body=>writeSummary(body,"\u6240\u5C5E\u66F4\u65B0"),raw:body=>writeResult(body,"\u6240\u5C5E\u66F4\u65B0")};var END_DATE_FLAG={name:"--end-date",summary:"\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\u30FB\u5FC5\u9808\uFF09",takesValue:true,
|
|
45
|
+
placeholder:"<YYYY-MM-DD>"};var endOperation={name:"end",summary:"\u6240\u5C5E\u3092\u7D42\u4E86\u3059\u308B\uFF08\u7D42\u4E86\u65E5\u3092\u8A2D\u5B9A\u3059\u308B\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user assignment end <\u6240\u5C5EID> --user <\u30E6\u30FC\u30B6\u30FC> --end-date <YYYY-MM-DD>",description:"\u7D42\u4E86\u65E5\u304C\u4ECA\u65E5\u3088\u308A\u524D\u306A\u3089\u3001\u305D\u306E\u6240\u5C5E\u306F\u3059\u3050\u306B\u7D42\u4E86\u72B6\u614B\u306B\u306A\u308A\u307E\u3059\u3002\u4ECA\u65E5\u4EE5\u964D\u306A\u3089\u7D42\u4E86\u65E5\u307E\u3067\u6709\u52B9\u306A\u307E\u307E\u3067\u3059\n\uFF08\u7D42\u4E86\u65E5\u5F53\u65E5\u306F\u6709\u52B9\u671F\u9593\u5185\u3067\u3059\uFF09\u3002\u7D42\u4E86\u65E5\u306F\u958B\u59CB\u65E5\u4EE5\u964D\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002\n\u53D6\u308A\u6D88\u3059\u3068\u304D\u306F twp user assignment update <\u6240\u5C5EID> --user <\u30E6\u30FC\u30B6\u30FC> --end-date\
|
|
46
|
+
none \u3067\u3059\u3002\n\u6240\u5C5E ID \u306F twp user assignment list <\u30E6\u30FC\u30B6\u30FC> \u306E id \u5217\u3067\u3059\u3002",forbidden:FORBIDDEN,flags:[END_DATE_FLAG,OWNER_FLAG],async prepare(input,ctx){if(isoDate(input,END_DATE_FLAG.name)===void 0){throw new UsageError("--end-date \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp user assignment end help")}return prepareTarget(input,ctx,"twp user assignment end help")},plan:input=>({method:"POST",path:itemPath(input,"/end"),
|
|
47
|
+
body:{end_date:isoDate(input,END_DATE_FLAG.name)}}),summarize:body=>writeSummary(body,"\u6240\u5C5E\u7D42\u4E86"),raw:body=>writeResult(body,"\u6240\u5C5E\u7D42\u4E86")};function deleteAck(body){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError("\u6240\u5C5E\u524A\u9664\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{result:true,message:body["\
|
|
48
|
+
message"]??null}}var deleteOperation={name:"delete",summary:"\u6240\u5C5E\u3092\u524A\u9664\u3059\u308B\uFF08\u5C65\u6B74\u3054\u3068\u6D88\u3059\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp user assignment delete <\u6240\u5C5EID> --user <\u30E6\u30FC\u30B6\u30FC> --yes",description:"\u6240\u5C5E\u3092\u5C65\u6B74\u304B\u3089\u6D88\u3057\u307E\u3059\uFF08\u5143\u306B\u623B\u3059\u64CD\u4F5C\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\u7570\u52D5\u3084\u9000\u8077\u3067\u6240\u5C5E\u3092\u7D42\u3048\u308B\u306A\u3089\u3001\u5C65\u6B74\u304C\u6B8B\u308B\ntwp user assignment end \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u524A\u9664\u306F\u3001\u8AA4\u3063\u3066\u4F5C\u3063\u305F\u6240\u5C5E\u3092\u6D88\u3059\u305F\u3081\u306E\u3082\u306E\u3067\u3059\u3002\n\u6240\u5C5E ID \u306F twp user assignment list <\u30E6\u30FC\u30B6\u30FC> \u306E id \u5217\u3067\u3059\u3002",
|
|
49
|
+
destructive:true,forbidden:FORBIDDEN,flags:[OWNER_FLAG],prepare:(input,ctx)=>prepareTarget(input,ctx,"twp user assignment delete help"),plan:input=>({method:"DELETE",path:itemPath(input)}),summarize:deleteAck,raw:deleteAck};function previousDay(iso){const[y,m,d]=iso.split("-").map(Number);const date=new Date(Date.UTC(y,m-1,d-1));return date.toISOString().slice(0,10)}function tokyoToday(now=new Date){return new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Tokyo",year:"numeric",month:"2-digit",day:"\
|
|
50
|
+
2-digit"}).format(now)}function strOrNull(value){return typeof value==="string"&&value!==""?value:null}function currentPrimaryOf(input){const raw=input.resolved?.["currentPrimary"];return raw===void 0||raw===""?null:JSON.parse(raw)}function existingIdsOf(input){const raw=input.resolved?.["existingIds"];return new Set(raw===void 0?[]:JSON.parse(raw))}async function nameOf(list,id){if(id===null)return null;try{return(await list()).find(row=>row.id===id)?.name??null}catch{return null}}function label(name,id){
|
|
51
|
+
return name??id??"\uFF08\u4E0D\u660E\uFF09"}async function primaryPreflight(ctx,userId,startDate,usage){let primary;let rows;try{[primary,rows]=await Promise.all([ctx.resolver.primaryAssignment(userId),ctx.resolver.assignments(userId)])}catch(err){if(err instanceof ResolveError&&err.status===403)throw new ResolveError(`${FORBIDDEN}\uFF08${err.message}\uFF09`,403);throw err}let current=null;if(primary!==null){const departmentId=strOrNull(primary["department_id"]);const positionId=strOrNull(primary["\
|
|
52
|
+
position_id"]);const observers=primary["observer_ids"];current={id:String(primary["id"]),department_id:departmentId,department_name:await nameOf(()=>ctx.resolver.departments(),departmentId),position_id:positionId,position_name:await nameOf(()=>ctx.resolver.positions(),positionId),job_title_id:strOrNull(primary["job_title_id"]),start_date:strOrNull(primary["start_date"]),end_date:strOrNull(primary["end_date"]),has_manager:strOrNull(primary["manager_id"])!==null,observer_ids:Array.isArray(observers)?
|
|
53
|
+
observers.filter(id=>typeof id==="string"):[],has_interviewer:strOrNull(primary["interview_user_id"])!==null,has_mentor:strOrNull(primary["mentor_user_id"])!==null};if(current.start_date!==null&&startDate<=current.start_date){throw new UsageError(`\u958B\u59CB\u65E5 ${startDate} \u304C\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u958B\u59CB\u65E5 ${current.start_date} \u4EE5\u524D\u3067\u3059\uFF08\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u304C\u958B\u59CB\u65E5\u3088\u308A\u524D\u306B\u7D42\u308F\u308B\u3053\u3068\u306B\u306A\u308A\u307E\u3059\uFF09`,
|
|
54
|
+
`\u958B\u59CB\u65E5\u3092\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u958B\u59CB\u65E5\u3088\u308A\u5F8C\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u958B\u59CB\u65E5\u3092\u76F4\u3059\u306A\u3089 twp user assignment update\u3001\u517C\u52D9\u3068\u3057\u3066\u8DB3\u3059\u306A\u3089 twp user assignment create --primary false \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\uFF08${usage}\uFF09\u3002`)}}const scheduled=rows.filter(row=>row["is_primary"]===
|
|
55
|
+
true&&row["id"]!==current?.id&&(row["is_scheduled"]===true||row["effective_status"]==="scheduled"));if(scheduled.length>0){const first=scheduled[0];throw new UsageError(`\u4E88\u7D04\u6E08\u307F\u306E\u4E3B\u6240\u5C5E\u304C\u3042\u308A\u307E\u3059\uFF08\u6240\u5C5E ID ${String(first["id"])}\u30FB${String(first["start_date"]??"?")}\u301C\uFF09\u3002\u3053\u306E\u307E\u307E\u4E3B\u6240\u5C5E\u3092\u4F5C\u308B\u3068\u3001\u540C\u3058\u671F\u9593\u306B\u4E3B\u6240\u5C5E\u304C2\u3064\u91CD\u306A\u308A\u307E\u3059`,
|
|
56
|
+
"\u4E88\u7D04\u3092\u53D6\u308A\u6D88\u3059\u306A\u3089 twp user assignment delete <\u6240\u5C5EID> --user <\u30E6\u30FC\u30B6\u30FC> --yes\u3001\u65E5\u4ED8\u3092\u5909\u3048\u308B\u306A\u3089 twp user assignment update \u3092\u5148\u306B\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002")}return{currentPrimary:current===null?"":JSON.stringify(current),existingIds:JSON.stringify(rows.map(row=>String(row["id"]))),today:tokyoToday()}}function revertCommands(userId,current,newId,immediate){const commands=[];
|
|
57
|
+
if(newId!==null)commands.push(`twp user assignment delete ${shellQuote(newId)} --user ${shellQuote(userId)} --yes`);let restore=`twp user assignment update ${shellQuote(current.id)} --user ${shellQuote(userId)} --end-date ${shellQuote(current.end_date??"none")}`;if(immediate){restore+=" --primary true";for(const observer of current.observer_ids)restore+=` --observer ${shellQuote(observer)}`}commands.push(restore);return commands}var MOVE_USAGE="twp user assignment move <\u30E6\u30FC\u30B6\u30FC> --department <\u90E8\u7F72> -\
|
|
58
|
+
-start-date <\u7570\u52D5\u65E5> [--position <\u5F79\u8077>] [--job-title <\u8077\u4F4D> | --no-job-title] [--manager <\u30E6\u30FC\u30B6\u30FC>] [--observer <\u30E6\u30FC\u30B6\u30FC>]\u2026 [\u9805\u76EE\u2026]";async function reportPartialMove(input,ctx,current,uncertain){const userId=requireResolved(input,"userId");const departmentId=requireResolved(input,"department_id");const startDate=isoDate(input,START_DATE_FLAG.name);const before=existingIdsOf(input);let rows;try{rows=assignmentRows(await ctx.
|
|
59
|
+
send({method:"GET",path:`/api/v2/organization/users/${userPath(input,"/assignments")}`}))}catch(err){ctx.warn(`\u4ED8\u3051\u66FF\u3048\u306E\u9001\u4FE1\u306B\u5931\u6557\u3057\u3001\u53CD\u6620\u72B6\u6CC1\u3082\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${err.message}\uFF09\u3002twp user assignment list ${shellQuote(userId)} \u3067\u3001\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u7D42\u4E86\u65E5\u3068\u65B0\u3057\u3044\u6240\u5C5E\u306E\u6709\u7121\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);
|
|
60
|
+
return}const records=rows.filter(isRecord);const created=records.find(row=>row["department_id"]===departmentId&&row["start_date"]===startDate&&!before.has(String(row["id"])));const old=current===null?void 0:records.find(row=>row["id"]===current.id);const oldChanged=current!==null&&old!==void 0&&(strOrNull(old["end_date"])!==current.end_date||old["is_primary"]!==true);const oldState=current===null?"\u5BFE\u8C61\u306A\u3057":old===void 0?`\u4E00\u89A7\u306B\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF08\u6240\u5C5E ID ${current.
|
|
61
|
+
id} \u304C\u524A\u9664\u30FB\u5DEE\u3057\u66FF\u3048\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09`:oldChanged?`\u53CD\u6620\u6E08\u307F\uFF08\u7D42\u4E86\u65E5 ${String(old["end_date"]??"\u306A\u3057")}\u30FB\u4E3B\u6240\u5C5E ${String(old["is_primary"])}\uFF09`:"\u672A\u53CD\u6620";const lines=["\u4ED8\u3051\u66FF\u3048\u306E\u9001\u4FE1\u306F\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u6240\u5C5E\u3092\u8AAD\u307F\u76F4\u3057\u305F\u7D50\u679C:",` \u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u7D42\u4E86: ${oldState}`,
|
|
62
|
+
` \u65B0\u3057\u3044\u6240\u5C5E\u306E\u4F5C\u6210: ${created===void 0?"\u672A\u53CD\u6620":`\u53CD\u6620\u6E08\u307F\uFF08\u6240\u5C5E ID ${String(created["id"])}\uFF09`}`];if(current!==null&&oldChanged){const immediate=old?.["is_primary"]!==true;const createdId=created===void 0?null:String(created["id"]);lines.push(createdId===null?"\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u3060\u3051\u304C\u7D42\u4E86\u3057\u305F\u72B6\u614B\u3067\u3059\u3002\u4ED8\u3051\u66FF\u3048\u3092\u3084\u308A\u76F4\u3059\u304B\u3001\u6B21\u306E\u30B3\u30DE\u30F3\u30C9\u3067\u5143\u306B\u623B\u3057\u3066\u304F\u3060\u3055\u3044:":
|
|
63
|
+
"\u4E21\u65B9\u3068\u3082\u53CD\u6620\u3055\u308C\u3066\u3044\u307E\u3059\uFF08\u5FDC\u7B54\u3060\u3051\u304C\u5931\u308F\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09\u3002\u53D6\u308A\u6D88\u3059\u306A\u3089\u6B21\u306E\u30B3\u30DE\u30F3\u30C9\u3067\u3059:");lines.push(...revertCommands(userId,current,createdId,immediate).map(command=>` ${command}`))}else if(created!==void 0){lines.push(`\u65B0\u3057\u3044\u6240\u5C5E\u3060\u3051\u304C\u4F5C\u3089\u308C\u3066\u3044\u307E\u3059\u3002\u53D6\u308A\u6D88\u3059\u306A\u3089: twp user assignment delete ${shellQuote(
|
|
64
|
+
String(created["id"]))} --user ${shellQuote(userId)} --yes`)}else if(uncertain){lines.push(`\u8AAD\u307F\u76F4\u3057\u305F\u6642\u70B9\u3067\u306F\u5909\u308F\u3063\u3066\u3044\u307E\u305B\u3093\u304C\u3001\u5FDC\u7B54\u304C\u5C4A\u304B\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u30B5\u30FC\u30D0\u304C\u307E\u3060\u51E6\u7406\u4E2D\u3067\u5F8C\u304B\u3089\u53CD\u6620\u3055\u308C\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089 twp user assignment list ${shellQuote(
|
|
65
|
+
userId)} \u3067\u78BA\u8A8D\u3057\u3001\u53CD\u6620\u3055\u308C\u3066\u3044\u306A\u3051\u308C\u3070\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}else{lines.push("\u4F55\u3082\u5909\u308F\u3063\u3066\u3044\u307E\u305B\u3093\u3002\u539F\u56E0\u3092\u53D6\u308A\u9664\u3044\u3066\u304B\u3089\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3067\u304D\u307E\u3059\u3002")}ctx.warn(lines.join("\n"))}var moveOperation={name:"move",summary:"\
|
|
66
|
+
\u6240\u5C5E\u3092\u4ED8\u3051\u66FF\u3048\u308B\uFF08\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u3092\u7570\u52D5\u65E5\u306E\u524D\u65E5\u3067\u7D42\u3048\u3001\u65B0\u3057\u3044\u4E3B\u6240\u5C5E\u3092\u4F5C\u308B\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:MOVE_USAGE,description:`\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u3092\u7570\u52D5\u65E5\u306E\u524D\u65E5\u3067\u7D42\u4E86\u3057\u3001\u7570\u52D5\u65E5\u304B\u3089\u65B0\u3057\u3044\u4E3B\u6240\u5C5E\u3092\u4F5C\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u3078\u306F\u6240\u5C5E\u306E\u4F5C\u62101\u672C\u3092\u9001\u308A\u3001
|
|
67
|
+
\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u7D42\u4E86\u306F\u30B5\u30FC\u30D0\u304C\u540C\u3058\u8981\u6C42\u306E\u4E2D\u3067\u884C\u3044\u307E\u3059\uFF09\u3002--department \u3068 --start-date\uFF08\u7570\u52D5\u65E5\uFF09\u304C\u5FC5\u9808\u3067\u3059\u3002
|
|
68
|
+
\u9001\u308B\u524D\u306B\u6240\u5C5E\u3092\u8AAD\u307F\u3001\u7D42\u4E86\u3059\u308B\u6240\u5C5E\u3068\u4F5C\u308B\u6240\u5C5E\u3092 stderr \u306B\u4E26\u3079\u307E\u3059\u3002--dry-run \u3067\u9001\u3089\u305A\u306B\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002
|
|
69
|
+
|
|
70
|
+
\u5F15\u304D\u7D99\u3050\u3082\u306E: \u5F79\u8077\u30FB\u8077\u4F4D\uFF08--position / --job-title \u3092\u6307\u5B9A\u3059\u308C\u3070\u305D\u3061\u3089\u3092\u4F7F\u3046\u3002--no-job-title \u3067\u8077\u4F4D\u3092\u5916\u3059\uFF09\u3002
|
|
71
|
+
\u5F15\u304D\u7D99\u304C\u306A\u3044\u3082\u306E: \u4E0A\u9577\u30FB\u89B3\u5BDF\u8005\u30FB\u9762\u8AC7\u8005\u30FB\u30E1\u30F3\u30BF\u30FC\uFF08\u65E7\u4E0A\u9577\u306E\u307E\u307E\u627F\u8A8D\u7D4C\u8DEF\u304C\u6B8B\u3089\u306A\u3044\u3088\u3046\u306B\u3001\u6307\u5B9A\u3057\u305F\u3082\u306E\u3060\u3051\u3092\u8A2D\u5B9A\u3057\u307E\u3059\uFF09\u3002
|
|
72
|
+
\u517C\u52D9\u30FB\u4EE3\u7406\u306E\u6240\u5C5E\u3092\u8DB3\u3059\u306A\u3089 move \u3067\u306F\u306A\u304F twp user assignment create --primary false \u3092\u4F7F\u3044\u307E\u3059\u3002
|
|
73
|
+
|
|
74
|
+
\u7570\u52D5\u65E5\u304C\u672A\u6765\u306A\u3089\u65B0\u3057\u3044\u6240\u5C5E\u306F\u4E88\u7D04\u306B\u306A\u308A\u3001\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306F\u524D\u65E5\u307E\u3067\u6709\u52B9\u306A\u307E\u307E\u3067\u3059\uFF08\u958B\u59CB\u65E5\u306E\u65E5\u6B21\u30D0\u30C3\u30C1\u3067\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\uFF09\u3002
|
|
75
|
+
\u7570\u52D5\u65E5\u304C\u4ECA\u65E5\u4EE5\u524D\u306A\u3089\u3059\u3050\u306B\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\u3002\u6B21\u306E\u5834\u5408\u306F\u9001\u3089\u305A\u306B\u6B62\u3081\u307E\u3059: \u7570\u52D5\u65E5\u304C\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E\u958B\u59CB\u65E5\u4EE5\u524D
|
|
76
|
+
\uFF08\u958B\u59CB\u65E5\u3088\u308A\u524D\u306B\u7D42\u308F\u308B\u6240\u5C5E\u306B\u306A\u308B\uFF09\uFF0F\u4E88\u7D04\u6E08\u307F\u306E\u4E3B\u6240\u5C5E\u304C\u5225\u306B\u3042\u308B\uFF08\u4E3B\u6240\u5C5E\u304C2\u3064\u91CD\u306A\u308B\uFF09\u3002
|
|
77
|
+
\u9001\u4FE1\u304C\u9014\u4E2D\u3067\u5931\u6557\u3057\u305F\u3068\u304D\u306F\u3001\u6240\u5C5E\u3092\u8AAD\u307F\u76F4\u3057\u3066\u3069\u3053\u307E\u3067\u53CD\u6620\u3055\u308C\u305F\u304B\u3068\u5143\u306B\u623B\u3059\u30B3\u30DE\u30F3\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
78
|
+
|
|
79
|
+
${USER_FIELD_HELP}
|
|
80
|
+
|
|
81
|
+
${USER_REF_HELP}`,forbidden:FORBIDDEN,flags:[...createFlags(MOVE_FIELDS),{name:"--no-job-title",summary:"\u8077\u4F4D\u3092\u5F15\u304D\u7D99\u304C\u306A\u3044\uFF08\u65B0\u3057\u3044\u6240\u5C5E\u3092\u8077\u4F4D\u306A\u3057\u3067\u4F5C\u308B\uFF09",takesValue:false},START_DATE_FLAG,OBSERVER_FLAG,USER_REF_FLAG],async prepare(input,ctx){checkArguments(input,MOVE_FIELDS);for(const flag of[DEPARTMENT_FIELD.flag,START_DATE_FLAG.name]){if(!input.flags.has(flag))throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\
|
|
82
|
+
\u3044`,"twp user assignment move help")}const startDate=isoDate(input,START_DATE_FLAG.name);const resolved=await resolveAll(await prepareUser(input,ctx,"twp user assignment move help"),ctx,MOVE_FIELDS);const userId=requireResolved(resolved,"userId");const inherited=await primaryPreflight(ctx,userId,startDate,"twp user assignment move help");const current=currentPrimaryOf(withResolved(resolved,inherited));if(!input.flags.has(POSITION_FIELD.flag)){if(current?.position_id==null){throw new UsageError(
|
|
83
|
+
"\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u304C\u7121\u3044\uFF08\u307E\u305F\u306F\u5F79\u8077\u304C\u7121\u3044\uFF09\u305F\u3081\u3001\u5F79\u8077\u3092\u5F15\u304D\u7D99\u3052\u307E\u305B\u3093\u3002--position \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp user assignment move help")}inherited[POSITION_FIELD.key]=current.position_id;inherited["inheritedPosition"]="1"}if(!input.flags.has(JOB_TITLE_FIELD.flag)&&!input.flags.has("--no-job-title")&¤t?.job_title_id!=null){inherited[JOB_TITLE_FIELD.
|
|
84
|
+
key]=current.job_title_id;inherited["inheritedJobTitle"]="1"}const newDepartment=requireResolved(resolved,DEPARTMENT_FIELD.key);inherited["newDepartmentName"]=await nameOf(()=>ctx.resolver.departments(),newDepartment)??newDepartment;const newPosition=inherited[POSITION_FIELD.key]??requireResolved(resolved,POSITION_FIELD.key);inherited["newPositionName"]=await nameOf(()=>ctx.resolver.positions(),newPosition)??newPosition;return withResolved(resolved,inherited)},plan(input){const body=assignmentBody(
|
|
85
|
+
input,MOVE_FIELDS);if(input.resolved?.["inheritedPosition"]==="1")body["position_id"]=requireResolved(input,POSITION_FIELD.key);if(input.resolved?.["inheritedJobTitle"]==="1")body["job_title_id"]=requireResolved(input,JOB_TITLE_FIELD.key);if(input.flags.has("--no-job-title"))delete body["job_title_id"];body["is_primary"]=true;return{method:"POST",path:`/api/v2/organization/users/${userPath(input,"/assignments")}`,body}},plannedNotes(input){const current=currentPrimaryOf(input);const startDate=isoDate(
|
|
86
|
+
input,START_DATE_FLAG.name);const endDate=previousDay(startDate);const today=input.resolved?.["today"]??"";const scheduled=today!==""&&startDate>today;const lines=["\u4ED8\u3051\u66FF\u3048\u306E\u5185\u5BB9:"];if(current===null){lines.push(" \u7D42\u4E86\u3059\u308B\u6240\u5C5E: \u306A\u3057\uFF08\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u304C\u3042\u308A\u307E\u305B\u3093\uFF09")}else{const period=`${current.start_date??"?"}\u301C${current.end_date??""}`;let change;if(current.end_date!==null&¤t.
|
|
87
|
+
end_date<=endDate){change=scheduled?`\u7D42\u4E86\u65E5 ${current.end_date} \u306F\u7570\u52D5\u65E5\u306E\u524D\u65E5\u4EE5\u524D\u306A\u306E\u3067\u5909\u3048\u307E\u305B\u3093`:`\u7D42\u4E86\u65E5 ${current.end_date} \u306F\u7570\u52D5\u65E5\u306E\u524D\u65E5\u4EE5\u524D\u306A\u306E\u3067\u5909\u3048\u305A\u3001\u4E3B\u6240\u5C5E\u304B\u3089\u5916\u3057\u307E\u3059`}else{change=`\u7D42\u4E86\u65E5\u3092 ${endDate} \u306B\u3057\u307E\u3059`}lines.push(` \u7D42\u4E86\u3059\u308B\u6240\u5C5E: ${label(
|
|
88
|
+
current.department_name,current.department_id)} / ${label(current.position_name,current.position_id)}\uFF08${period}\uFF09\u2192 ${change} [\u6240\u5C5E ID ${current.id}]`)}const inheritedFrom=[input.resolved?.["inheritedPosition"]==="1"?"\u5F79\u8077":null,input.resolved?.["inheritedJobTitle"]==="1"?"\u8077\u4F4D":null].filter(item=>item!==null);lines.push(` \u4F5C\u308B\u6240\u5C5E: ${input.resolved?.["newDepartmentName"]??"?"} / ${input.resolved?.["newPositionName"]??"?"}\uFF08${startDate}\
|
|
89
|
+
\u301C\u30FB\u4E3B\u6240\u5C5E\uFF09`+(inheritedFrom.length>0?` \u203B${inheritedFrom.join("\u30FB")}\u306F\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u304B\u3089\u5F15\u304D\u7D99\u304E`:""));if(current!==null){const dropped=[current.has_manager&&!input.flags.has(MANAGER_FIELD.flag)?"\u4E0A\u9577":null,current.observer_ids.length>0&&repeatedValues(input,OBSERVER_FLAG.name).length===0?"\u89B3\u5BDF\u8005":null,current.has_interviewer&&!input.flags.has(INTERVIEWER_FIELD.flag)?"\u9762\u8AC7\u8005":null,
|
|
90
|
+
current.has_mentor&&!input.flags.has(MENTOR_FIELD.flag)?"\u30E1\u30F3\u30BF\u30FC":null].filter(item=>item!==null);if(dropped.length>0){lines.push(` \u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306E${dropped.join("\u30FB")}\u306F\u5F15\u304D\u7D99\u304E\u307E\u305B\u3093\uFF08\u65B0\u3057\u3044\u6240\u5C5E\u3067\u306F\u672A\u8A2D\u5B9A\u3067\u3059\u3002\u8981\u308B\u306A\u3089 --manager \u7B49\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002`)}}if(scheduled){lines.push(` \u7570\u52D5\u65E5\u304C\u672A\u6765\u306E\u305F\u3081\u3001\u65B0\u3057\
|
|
91
|
+
\u3044\u6240\u5C5E\u306F\u4E88\u7D04\u306B\u306A\u308A\u307E\u3059\u3002\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u306F ${endDate} \u307E\u3067\u6709\u52B9\u306A\u307E\u307E\u3067\u3059\u3002`)}else if(today!==""){lines.push(" \u7570\u52D5\u65E5\u304C\u4ECA\u65E5\u4EE5\u524D\u306E\u305F\u3081\u3001\u9001\u4FE1\u3057\u305F\u6642\u70B9\u3067\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\u3002")}return lines},async execute(input,ctx){const current=currentPrimaryOf(input);try{return await ctx.send(moveOperation.
|
|
92
|
+
plan(input))}catch(err){const beforeWrite=err instanceof ApiError&&[401,403,422].includes(err.status);if(!beforeWrite)await reportPartialMove(input,ctx,current,!(err instanceof ApiError));throw err}},summarize:body=>writeSummary(body,"\u6240\u5C5E\u306E\u4ED8\u3051\u66FF\u3048"),raw:body=>writeResult(body,"\u6240\u5C5E\u306E\u4ED8\u3051\u66FF\u3048"),notes(body,input){const notes=[...previousPrimaryNotes(body)];const current=currentPrimaryOf(input);const created=isRecord(body)&&isRecord(body["as\
|
|
93
|
+
signment"])?strOrNull(body["assignment"]["id"]):null;if(current!==null&&created!==null){const startDate=isoDate(input,START_DATE_FLAG.name);const immediate=startDate<=(input.resolved?.["today"]??"");const commands=revertCommands(requireResolved(input,"userId"),current,created,immediate);const later=immediate?"":`
|
|
94
|
+
\uFF08${startDate} \u4EE5\u964D\u306B\u623B\u3059\u3068\u304D\u306F\u30012\u672C\u76EE\u306B --primary true \u3068\u5143\u306E\u89B3\u5BDF\u8005\u306E --observer \u3082\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF09`;notes.push(`\u53D6\u308A\u6D88\u3059\u306B\u306F:
|
|
95
|
+
${commands.map(c=>` ${c}`).join("\n")}${later}`)}return notes}};var userAssignmentResource={name:"assignment",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\uFF08\u90E8\u7F72\u30FB\u5F79\u8077\uFF09\u306E\u53C2\u7167\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\u30FB\u4ED8\u3051\u66FF\u3048",operations:[listOperation,createOperation,updateOperation,endOperation,deleteOperation,moveOperation]};import fs from"fs";var INVITATIONS_PATH="/api/v2/admin/invitations";var INVITE_ROLES=["user","admin","super_admin"];var BULK_MAX=50;var CSV_MAX_BYTES=256*1024;var EMAIL_RE=/^[^\s@,;]+@[^\s@,;]+$/;var LIST_COLUMNS=["email","user_name","role","status","created_at","expires_at"];var ROLE_HELP="\u6A29\u9650\u306F user\uFF08\u4E00\u822C\uFF09/ admin\uFF08\u7BA1\u7406\u8005\uFF09/ super_admin\uFF08\u5168\u4F53\u7BA1\u7406\u8005\uFF09\u3067\u3059\u3002";var FORBIDDEN2="\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306E\u62DB\u5F85\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u6271\u3048\u307E\u3059";
|
|
96
|
+
var INVITE_REF_HELP="<\u62DB\u5F85> \u306F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u6307\u5B9A\u3057\u307E\u3059\uFF08\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u304C1\u4EF6\u306B\u7D5E\u308C\u305F\u3068\u304D\u3060\u3051\u53D7\u3051\u4ED8\u3051\u307E\u3059\uFF09\u3002\n\u5BFE\u8C61\u306F twp user invite list \u306B\u51FA\u308B\u62DB\u5F85\uFF08\u671F\u9650\u5185\u306E\u672A\u53D7\u8AFE\uFF09\u3060\u3051\u3067\u3059\u3002\n\u540C\u3058\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306B\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u304C\u8907\u6570\u3042\u308B\u3068\u304D\u306F\u3001twp user invite list --no-redact \u3067\n\u30C8\u30FC\u30AF\u30F3\u3092\u78BA\u8A8D\u3057\u3066\u3001\u30C8\u30FC\u30AF\u30F3\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
97
|
+
function roleValue(raw,where){const value=raw.trim().toLowerCase();if(!INVITE_ROLES.includes(value)){throw new UsageError(`${where}\u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,ROLE_HELP)}return value}function successAck(body,label2){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label2}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
98
|
+
return{result:true,message:body["message"]??null}}function invitationRows(body){const rows=isRecord(body)?body["invitations"]:void 0;if(!Array.isArray(rows)){throw new ApiResponseError("\u62DB\u5F85\u4E00\u89A7\u306E\u5FDC\u7B54\u306B invitations \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return rows.filter(isRecord)}function cell(raw){const trimmed=raw.trim();return trimmed.length>=2&&trimmed.startsWith(
|
|
99
|
+
'"')&&trimmed.endsWith('"')?trimmed.slice(1,-1).trim():trimmed}function parseInviteCsv(text){const rows=[];const errors=[];const seen=new Map;const lines=text.replace(/^\uFEFF/,"").split(/\r?\n/);let headerChecked=false;lines.forEach((raw,index)=>{const line=index+1;if(raw.trim()===""||raw.trim().startsWith("#"))return;const cells=raw.split(",").map(cell);if(!headerChecked){headerChecked=true;const head=(cells[0]??"").toLowerCase();if(head==="email"||head==="\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9"||
|
|
100
|
+
head==="mail")return}if(cells.length!==2){errors.push(`${line} \u884C\u76EE: \u5217\u304C ${cells.length} \u500B\u3042\u308A\u307E\u3059\uFF08\u300C\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9, \u6A29\u9650\u300D\u306E2\u5217\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u6C0F\u540D\u306F\u53D7\u8AFE\u6642\u306B\u672C\u4EBA\u304C\u5165\u529B\u3057\u307E\u3059\uFF09`);return}const[email,role]=cells;if(!EMAIL_RE.test(email)){errors.push(`${line} \u884C\u76EE: \u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u5F62\u304C\u9055\u3044\u307E\u3059: ${email===
|
|
101
|
+
""?"\uFF08\u7A7A\uFF09":email}`);return}const normalizedRole=role.toLowerCase();if(!INVITE_ROLES.includes(normalizedRole)){errors.push(`${line} \u884C\u76EE: \u6A29\u9650\u306B\u300C${role===""?"\uFF08\u7A7A\uFF09":role}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08${INVITE_ROLES.join(" / ")}\uFF09`);return}const key=email.toLowerCase();const first=seen.get(key);if(first!==void 0){errors.push(`${line} \u884C\u76EE: ${email} \u306F ${first} \u884C\u76EE\u3068\u91CD\u8907\u3057\u3066\u3044\u307E\u3059`);
|
|
102
|
+
return}seen.set(key,line);rows.push({line,email,role:normalizedRole})});return{rows,errors}}function readCsvFile(file,usage){try{const stat=fs.statSync(file);if(!stat.isFile())throw new UsageError(`--file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,usage);if(stat.size>CSV_MAX_BYTES){throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${stat.size} \u30D0\u30A4\u30C8\uFF09: ${file}`,
|
|
103
|
+
`\u4E00\u5EA6\u306B\u62DB\u5F85\u3067\u304D\u308B\u306E\u306F ${BULK_MAX} \u4EF6\u307E\u3067\u3067\u3059\u3002`)}return fs.readFileSync(file,"utf8")}catch(err){if(err instanceof UsageError)throw err;const reason=err.code??err.message;throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${reason}\uFF09`,usage)}}function bulkRows(input){return JSON.parse(requireResolved(input,"rows"))}function matchResults(response,sent){const results=isRecord(
|
|
104
|
+
response)?response["results"]:void 0;if(!isRecord(response)||response["result"]!==true||!Array.isArray(results)){throw new ApiResponseError("\u4E00\u62EC\u62DB\u5F85\u306E\u5FDC\u7B54\u306B results \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const byEmail=new Map(sent.map(row=>[row.email.toLowerCase(),row]));const answered=new Set;const rows=results.filter(isRecord).map(result=>{const email=String(result["\
|
|
105
|
+
email"]??"");const row=byEmail.get(email.toLowerCase());answered.add(email.toLowerCase());return{line:row?.line??null,email,role:row?.role??null,success:result["success"]===true,queued:result["queued"]===true,error:typeof result["error"]==="string"?result["error"]:null}});for(const row of sent){if(answered.has(row.email.toLowerCase()))continue;rows.push({line:row.line,email:row.email,role:row.role,success:false,queued:false,error:"\u30B5\u30FC\u30D0\u306E\u7D50\u679C\u306B\u542B\u307E\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u9001\u3089\u308C\u305F\u304B\u3069\u3046\u304B\u4E0D\u660E\u3067\u3059\u3002twp user invite list \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09"})}
|
|
106
|
+
return rows}function lineErrors(err,sent){const list=err.body?.error_list;if(!Array.isArray(list))return[];const lines=[];for(const item of list){if(!isRecord(item))continue;const name=typeof item["name"]==="string"?item["name"]:"";const text=typeof item["message"]==="string"?item["message"]:"";const match=/^invitations\.(\d+)\./.exec(name);const row=match!==null?sent[Number(match[1])]:void 0;lines.push(row!==void 0?` ${row.line} \u884C\u76EE\uFF08${row.email}\uFF09: ${text}`:` ${name}: ${text}`)}
|
|
107
|
+
return lines}async function runBulk(input,ctx){const sent=bulkRows(input);let response;try{response=await ctx.send(bulkPlan(input))}catch(err){if(err instanceof ApiError&&err.status===422){const lines=lineErrors(err,sent);if(lines.length>0)ctx.warn(["\u30B5\u30FC\u30D0\u304C CSV \u3092\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF081\u901A\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093\uFF09:",...lines].join("\n"))}throw err}const rows=matchResults(response,sent);const failed=rows.
|
|
108
|
+
filter(row=>!row.success);if(failed.length>0){const lines=[`\u4E00\u62EC\u62DB\u5F85: ${rows.length} \u4EF6\u4E2D ${failed.length} \u4EF6\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002`];for(const row of failed)lines.push(` \u5931\u6557: ${row.line??"?"} \u884C\u76EE ${row.email}\uFF08${row.error??"\u7406\u7531\u4E0D\u660E"}\uFF09`);const ok=rows.filter(row=>row.success);lines.push(ok.length===0?" \u62DB\u5F85\u3092\u9001\u3063\u305F\u884C\u306F\u3042\u308A\u307E\u305B\u3093\u3002":` \u9001\u4FE1\u6E08\u307F\uFF08\u6253\u3061\
|
|
109
|
+
\u76F4\u3059\u30682\u901A\u76EE\u304C\u5C4A\u304D\u307E\u3059\uFF09: ${ok.map(row=>`${row.line??"?"} \u884C\u76EE ${row.email}`).join(" / ")}`);lines.push("\u5931\u6557\u306E\u7406\u7531\u3092\u78BA\u304B\u3081\u3001\u76F4\u305B\u308B\u884C\u3060\u3051\u3092\u6B8B\u3057\u305F CSV \u3067\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u9001\u4FE1\u6E08\u307F\u306E\u884C\u306F\u542B\u3081\u306A\u3044\uFF09\u3002");ctx.warn(lines.join("\n"));throw new ApiRejectedError(`\u4E00\u62EC\u62DB\u5F85\u306F\u5B8C\u4E86\u3057\u3066\u3044\u307E\u305B\u3093\uFF08${failed.
|
|
110
|
+
length} \u4EF6\u5931\u6557\u30FB${ok.length} \u4EF6\u9001\u4FE1\uFF09\u3002`)}return{response,rows}}function bulkPlan(input){return{method:"POST",path:`${INVITATIONS_PATH}/bulk`,body:{invitations:bulkRows(input).map(row=>({email:row.email,role:row.role}))}}}function bulkBody(body){return isRecord(body)&&"rows"in body?body:{}}var INVITE_REF_FLAG={name:"--invite",summary:"\u5BFE\u8C61\u306E\u62DB\u5F85\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",takesValue:true,
|
|
111
|
+
placeholder:"<\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8\u30FC\u30AF\u30F3>"};async function prepareInvite(input,usage){const ref=singleRef(input,{flag:INVITE_REF_FLAG.name,label:"\u62DB\u5F85",usage});if(!ref.includes("@")){if(!/^[A-Za-z0-9_-]+$/.test(ref))throw new UsageError(`\u62DB\u5F85\u306E\u30C8\u30FC\u30AF\u30F3\u306E\u5F62\u304C\u9055\u3044\u307E\u3059\uFF08${[...ref].length} \u6587\u5B57\uFF09`,INVITE_REF_HELP);return withResolved(input,{token:ref})}return withResolved(input,{email:ref})}
|
|
112
|
+
async function tokenFor(input,ctx){const token=input.resolved?.["token"];if(token!==void 0)return token;const email=requireResolved(input,"email");const rows=invitationRows(await ctx.send({method:"GET",path:INVITATIONS_PATH}));const hits=rows.filter(row=>String(row["email"]??"").toLowerCase()===email.toLowerCase()&&row["status"]!=="accepted");if(hits.length===0){throw new UsageError(`${email} \u5B9B\u3066\u306E\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093`,
|
|
113
|
+
"twp user invite list \u3067\u62DB\u5F85\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}if(hits.length>1){const found=hits.map(row=>`${String(row["status"])}\uFF08\u4F5C\u6210 ${String(row["created_at"])}\uFF09`).join(" / ");throw new UsageError(`${email} \u5B9B\u3066\u306E\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u304C ${hits.length} \u4EF6\u3042\u308A\u307E\u3059: ${found}`,INVITE_REF_HELP)}const hit=hits[0]?.["token"];if(typeof hit!=="string"||!/^[A-Za-z0-9_-]+$/.test(hit)){throw new ApiResponseError(
|
|
114
|
+
"\u62DB\u5F85\u4E00\u89A7\u306E\u5FDC\u7B54\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return hit}function invitePath(token,suffix=""){return`${INVITATIONS_PATH}/${encodeURIComponent(token)}${suffix}`}function refPlan(input,method,suffix=""){const token=input.resolved?.["token"];return{method,path:token===void 0?`${INVITATIONS_PATH}/{token}${suffix}`:invitePath(token,suffix)}}
|
|
115
|
+
function refNotes(input){const email=input.resolved?.["email"];return email===void 0?[]:[`\u3053\u306E\u524D\u306B\u3001${email} \u5B9B\u3066\u306E\u62DB\u5F85\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8ABF\u3079\u308B\u305F\u3081\u62DB\u5F85\u4E00\u89A7\u3092 GET \u3057\u307E\u3059\uFF08{token} \u306F\u305D\u306E\u7D50\u679C\u3067\u57CB\u307E\u308A\u307E\u3059\uFF09\u3002`]}var userInviteResource={name:"invite",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u62DB\u5F85\uFF081\u4EF6\u30FBCSV \u4E00\u62EC\u30FB\u4E00\u89A7\u30FB\u518D\u9001\u30FB\u53D6\u6D88\uFF09",
|
|
116
|
+
operations:[{name:"create",summary:"1\u4EBA\u3092\u62DB\u5F85\u3059\u308B\uFF08\u62DB\u5F85\u30E1\u30FC\u30EB\u3092\u9001\u308B\uFF09",usage:"twp user invite create --email <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9> [--role user|admin|super_admin] [--name <\u6C0F\u540D>]",description:"--email \u304C\u5FC5\u9808\u3067\u3059\u3002--role \u3092\u7701\u304F\u3068\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u62DB\u5F85\u3057\u307E\u3059\u3002\n--name \u306F\u62DB\u5F85\u30E1\u30FC\u30EB\u3068\u53D7\u8AFE\u753B\u9762\u306B\u51FA\u3059\u6C0F\u540D\u3067\u3059\uFF08\u53D7\u8AFE\u6642\u306B\u672C\u4EBA\u304C\u5909\u66F4\u3067\u304D\u307E\u3059\uFF09\u3002\n\u6A5F\u80FD\u6A29\u9650\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u65E2\u5B9A\u3092\u4F7F\u3044\u307E\u3059\u3002\n\n"+
|
|
117
|
+
ROLE_HELP,forbidden:FORBIDDEN2,flags:[{name:"--email",summary:"\u62DB\u5F85\u3059\u308B\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",takesValue:true,placeholder:"<\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>"},{name:"--role",summary:"\u6A29\u9650\uFF08user / admin / super_admin\uFF09",takesValue:true,placeholder:"<\u6A29\u9650>"},{name:"--name",summary:"\u6C0F\u540D\uFF08\u62DB\u5F85\u30E1\u30FC\u30EB\u3068\u53D7\u8AFE\u753B\u9762\u306B\u51FA\u308B\uFF09",takesValue:true,placeholder:"<\u6C0F\u540D>"}],
|
|
118
|
+
async prepare(input){if(input.args.length>0){throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp user invite create help")}const email=input.flags.get("--email")?.trim()??"";if(email==="")throw new UsageError("--email \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp user invite create help");if(!EMAIL_RE.test(email))throw new UsageError(`--email \u306E\u5F62\u304C\u9055\u3044\u307E\u3059: ${email}`,"\u4F8B: --email\
|
|
119
|
+
new.member@example.com");const role=input.flags.get("--role");if(role!==void 0)roleValue(role,"--role ");const name=input.flags.get("--name");if(name!==void 0&&[...name].length>255){throw new UsageError(`\u6C0F\u540D\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${[...name].length} \u6587\u5B57\u30FB\u4E0A\u9650 255 \u6587\u5B57\uFF09`,"twp user invite create help")}return input},plan(input){const role=input.flags.get("--role");const name=input.flags.get("--name")?.trim();return{method:"POST",path:INVITATIONS_PATH,
|
|
120
|
+
body:{email:input.flags.get("--email").trim(),role:role===void 0?"user":roleValue(role,"--role "),...name!==void 0&&name!==""?{user_name:name}:{}}}},plannedNotes:input=>input.flags.has("--role")?[]:["--role \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u62DB\u5F85\u3057\u307E\u3059\u3002"],summarize:body=>successAck(body,"\u62DB\u5F85"),raw:body=>successAck(body,"\u62DB\u5F85")},{name:"bulk",summary:"CSV \u306E\u5168\u54E1\u3092\u62DB\u5F85\u3059\u308B\uFF081\u56DE 50 \u4EF6\u307E\u3067\uFF09",
|
|
121
|
+
usage:"twp user invite bulk --file <CSV>",description:`CSV \u306F\u300C\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9, \u6A29\u9650\u300D\u306E2\u5217\u3067\u3059\uFF081\u884C\u76EE\u306E\u30D8\u30C3\u30C0 email,role \u306F\u7701\u7565\u3067\u304D\u307E\u3059\uFF09\u3002
|
|
122
|
+
\u6C0F\u540D\u306E\u5217\u306F\u7F6E\u3051\u307E\u305B\u3093\uFF08\u4E00\u62EC\u62DB\u5F85\u3067\u306F\u6C0F\u540D\u306F\u9001\u3089\u308C\u305A\u3001\u53D7\u8AFE\u6642\u306B\u672C\u4EBA\u304C\u5165\u529B\u3057\u307E\u3059\uFF09\u3002
|
|
123
|
+
\u7A7A\u884C\u3068 # \u3067\u59CB\u307E\u308B\u884C\u306F\u8AAD\u307F\u98DB\u3070\u3057\u307E\u3059\u3002
|
|
124
|
+
|
|
125
|
+
email,role
|
|
126
|
+
new.member@example.com,user
|
|
127
|
+
leader@example.com,admin
|
|
128
|
+
|
|
129
|
+
\u9001\u308B\u524D\u306B\u5168\u884C\u3092\u691C\u67FB\u3057\u3001\u5F62\u306E\u8AA4\u308A\u30FB\u91CD\u8907\u304C\u3042\u308B\u884C\u304C1\u3064\u3067\u3082\u3042\u308C\u3070**1\u901A\u3082\u9001\u3089\u305A**\u306B\u3001
|
|
130
|
+
\u305D\u306E\u884C\u756A\u53F7\u3068\u7406\u7531\u3092\u3059\u3079\u3066\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u7D42\u308F\u308A\u307E\u3059\u3002--dry-run \u3067\u9001\u308B\u5185\u5BB9\u306E\u4E00\u89A7\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002
|
|
131
|
+
\u9001\u3063\u305F\u5F8C\u306B\u30B5\u30FC\u30D0\u304C\u884C\u3054\u3068\u306B\u65AD\u3063\u305F\u5834\u5408\uFF08\u65E2\u306B\u4F7F\u308F\u308C\u3066\u3044\u308B\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u7B49\uFF09\u306F\u3001
|
|
132
|
+
\u5931\u6557\u3057\u305F\u884C\u3068\u9001\u4FE1\u6E08\u307F\u306E\u884C\u3092 stderr \u306B\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 3 \u3067\u7D42\u308F\u308A\u307E\u3059\uFF08\u9001\u4FE1\u6E08\u307F\u306E\u884C\u306F\u53D6\u308A\u6D88\u3055\u308C\u307E\u305B\u3093\uFF09\u3002
|
|
133
|
+
|
|
134
|
+
\u6A5F\u80FD\u6A29\u9650\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u65E2\u5B9A\u3092\u4F7F\u3044\u307E\u3059\u3002${ROLE_HELP}`,forbidden:FORBIDDEN2,flags:[{name:"--file",summary:"\u62DB\u5F85\u3059\u308B\u4EBA\u306E CSV\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9, \u6A29\u9650\uFF09",takesValue:true,placeholder:"<CSV>"}],async prepare(input){const usage="twp user invite bulk help";if(input.args.length>0)throw new UsageError(`bulk \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.
|
|
135
|
+
args.join(" ")}`,usage);const file=input.flags.get("--file");if(file===void 0||file.trim()==="")throw new UsageError("--file <CSV> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);const{rows,errors}=parseInviteCsv(readCsvFile(file,usage));if(errors.length>0){throw new UsageError(`CSV \u306B\u4E0D\u6B63\u306A\u884C\u304C ${errors.length} \u884C\u3042\u308B\u305F\u3081\u30011\u901A\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093:
|
|
136
|
+
${errors.join("\n ")}`,`\u6B63\u3057\u3044\u884C\u306F ${rows.length} \u884C\u3067\u3059\u3002\u4E0D\u6B63\u306A\u884C\u3092\u76F4\u3059\u304B\u524A\u9664\u3057\u3066\u304B\u3089\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}if(rows.length===0)throw new UsageError(`CSV \u306B\u62DB\u5F85\u3059\u308B\u884C\u304C\u3042\u308A\u307E\u305B\u3093: ${file}`,usage);if(rows.length>BULK_MAX){throw new UsageError(`\u4E00\u5EA6\u306B\u62DB\u5F85\u3067\u304D\u308B\u306E\u306F ${BULK_MAX} \u4EF6\
|
|
137
|
+
\u307E\u3067\u3067\u3059\uFF08${rows.length} \u4EF6\uFF09`,`CSV \u3092 ${BULK_MAX} \u884C\u305A\u3064\u306B\u5206\u3051\u3066\u6253\u3063\u3066\u304F\u3060\u3055\u3044\u3002`)}return withResolved(input,{rows:JSON.stringify(rows)})},plan:bulkPlan,plannedNotes:input=>{const rows=bulkRows(input);return[`${rows.length} \u4EF6\u3092\u62DB\u5F85\u3057\u307E\u3059:`,...rows.map(row=>` ${row.line} \u884C\u76EE: ${row.email}\uFF08${row.role}\uFF09`)]},execute:runBulk,summarize:body=>(bulkBody(body).rows??
|
|
138
|
+
[]).map(row=>pick(row,["line","email","role","success","queued","error"])),raw:body=>{const response=bulkBody(body).response??body;if(!isRecord(response))return response;const rest={...response};delete rest["result"];return rest},notes:body=>{const response=bulkBody(body).response;const queued=isRecord(response)?response["queued_count"]:void 0;const warnings=isRecord(response)?response["license_warnings"]:void 0;const notes=[];if(typeof queued==="number"&&queued>0){notes.push(`${queued} \u4EF6\u306F\u9001\u4FE1\u5F85\u3061\u306E\u5217\
|
|
139
|
+
\u306B\u5165\u308A\u307E\u3057\u305F\uFF08\u6570\u5206\u4EE5\u5185\u306B\u9001\u3089\u308C\u307E\u3059\u3002\u5C4A\u304B\u306A\u3051\u308C\u3070 twp user invite resend \u3067\u518D\u9001\u3067\u304D\u307E\u3059\uFF09\u3002`)}if(Array.isArray(warnings)&&warnings.length>0)notes.push(`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u6CE8\u610F: ${warnings.map(String).join(" / ")}`);return notes}},{name:"list",summary:"\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u3092\u4E00\u89A7\u3059\u308B",usage:"twp user invite l\
|
|
140
|
+
ist",description:"\u51FA\u308B\u306E\u306F\u672A\u53D7\u8AFE\u3067\u671F\u9650\u5185\u306E\u62DB\u5F85\u3060\u3051\u3067\u3059\uFF08\u671F\u9650\u5207\u308C\u30FB\u53D7\u8AFE\u6E08\u307F\u306F\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u307E\u305B\u3093\uFF09\u3002\n\u671F\u9650\u304C\u5207\u308C\u305F\u62DB\u5F85\u306F\u518D\u9001\u3082\u53D6\u6D88\u3082\u3067\u304D\u306A\u3044\u306E\u3067\u3001twp user invite create \u3067\u62DB\u5F85\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u30C8\u30FC\u30AF\u30F3\u306F\u62DB\u5F85\u3092\u53D7\u8AFE\u3067\u304D\u308B\u79D8\u5BC6\u306A\u306E\u3067\u4F0F\u5B57\u3067\u51FA\u3057\u307E\u3059\uFF08--no-redact \u3067\u8868\u793A\uFF09\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002",
|
|
141
|
+
forbidden:FORBIDDEN2,flags:[],async prepare(input){if(input.args.length>0)throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp user invite list help");return input},plan:()=>({method:"GET",path:INVITATIONS_PATH}),summarize:body=>invitationRows(body).map(row=>pick(row,LIST_COLUMNS)),raw:body=>invitationRows(body)},{name:"resend",summary:"\u62DB\u5F85\u30E1\u30FC\u30EB\u3092\u518D\u9001\u3059\u308B\uFF08\u671F\u9650\u5185\u306E\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u3060\u3051\uFF09",
|
|
142
|
+
usage:"twp user invite resend <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8\u30FC\u30AF\u30F3>",description:INVITE_REF_HELP,forbidden:FORBIDDEN2,flags:[INVITE_REF_FLAG],prepare:input=>prepareInvite(input,"twp user invite resend help"),plan:input=>refPlan(input,"POST","/resend"),plannedNotes:refNotes,async execute(input,ctx){return ctx.send({method:"POST",path:invitePath(await tokenFor(input,ctx),"/resend")})},summarize:body=>successAck(body,"\u62DB\u5F85\u306E\u518D\u9001"),raw:body=>successAck(
|
|
143
|
+
body,"\u62DB\u5F85\u306E\u518D\u9001")},{name:"delete",summary:"\u62DB\u5F85\u3092\u53D6\u308A\u6D88\u3059\uFF08\u53D7\u8AFE\u7528\u306E\u30EA\u30F3\u30AF\u304C\u4F7F\u3048\u306A\u304F\u306A\u308B\uFF09",usage:"twp user invite delete <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8\u30FC\u30AF\u30F3> --yes",description:`${INVITE_REF_HELP}
|
|
144
|
+
|
|
145
|
+
\u53D6\u308A\u6D88\u3057\u305F\u62DB\u5F85\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u62DB\u5F85\u3059\u308B\u3068\u304D\u306F twp user invite create \u3092\u4F7F\u3044\u307E\u3059\u3002`,destructive:true,forbidden:FORBIDDEN2,flags:[INVITE_REF_FLAG],prepare:input=>prepareInvite(input,"twp user invite delete help"),plan:input=>refPlan(input,"DELETE"),plannedNotes:refNotes,async execute(input,ctx){return ctx.send({method:"DELETE",path:invitePath(await tokenFor(input,
|
|
146
|
+
ctx))})},summarize:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88"),raw:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88")}]};var LIST_COLUMNS2=["user_id","user_name","email","employee_code","department_name","position_name","role","display_flg"];var GET_COLUMNS=["user_id","user_name","user_name_kana","email","employee_code","role","auth_type","hire_date","is_locked","display_flg","memberlist_flg","org_chart_flg","dashboard_flg"];var EMPLOYMENT_TYPES=["employee","partner"];var listPaging=envelopePaging({label:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7"});function userObject(body){if(!isRecord(body)||typeof body["user_id"]!==
|
|
147
|
+
"string"){throw new ApiResponseError("\u30E6\u30FC\u30B6\u30FC\u8A73\u7D30\u306E\u5FDC\u7B54\u306B user_id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const rest={...body};delete rest["result"];return rest}var TEXT_FIELDS=[{flag:"--name",key:"user_name",label:"\u6C0F\u540D",maxChars:255,summary:"\u6C0F\u540D",placeholder:"<\u6C0F\u540D>"},{flag:"--kana",key:"user_name_kana",label:"\u30D5\u30EA\u30AC\u30CA",maxChars:255,
|
|
148
|
+
summary:"\u6C0F\u540D\u306E\u30D5\u30EA\u30AC\u30CA",placeholder:"<\u30D5\u30EA\u30AC\u30CA>"},{flag:"--email",key:"login_id",label:"\u30ED\u30B0\u30A4\u30F3ID",maxChars:255,summary:"\u30ED\u30B0\u30A4\u30F3ID\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\uFF09",placeholder:"<\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>"},{flag:"--employee-code",key:"employee_code",label:"\u793E\u54E1\u756A\u53F7",maxChars:50,summary:"\u793E\u54E1\u756A\u53F7",placeholder:"<\u793E\u54E1\u756A\u53F7>"}];var DISPLAY_FIELDS=[
|
|
149
|
+
{flag:"--display",key:"display_flg",summary:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u30FB\u9078\u629E\u80A2\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--memberlist",key:"memberlist_flg",summary:"\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--org-chart",key:"org_chart_flg",summary:"\u7D44\u7E54\u56F3\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--dashboard",key:"dashboard_flg",summary:"\u30C0\u30C3\u30B7\
|
|
150
|
+
\u30E5\u30DC\u30FC\u30C9\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"}];var ROLE_TO_TYPE={user:"0",admin:"1"};var AUTH_TYPES=["all","password","oauth","disabled"];var PASSWORD_MIN_CHARS=8;var PASSWORD_FILE_MAX_BYTES=4096;var PASSWORD_FILE_FLAG={name:"--password-file",summary:"\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u66F8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9|->"};var ROLE_FLAG={name:"--role",summary:"\
|
|
151
|
+
\u7A2E\u5225\uFF08admin: \u7BA1\u7406\u8005 / user: \u4E00\u822C\uFF09",takesValue:true,placeholder:"<admin|user>"};var HIRE_DATE_FLAG={name:"--hire-date",summary:"\u5165\u793E\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var AUTH_TYPE_FLAG={name:"--auth-type",summary:"\u8A8D\u8A3C\u30BF\u30A4\u30D7\uFF08all / password / oauth / disabled\uFF1D\u5931\u52B9\u30FB\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09",takesValue:true,placeholder:"<\u7A2E\u985E>"};var FIELD_FLAGS=[...TEXT_FIELDS.
|
|
152
|
+
map(f=>({name:f.flag,summary:f.summary,takesValue:true,placeholder:f.placeholder})),ROLE_FLAG,HIRE_DATE_FLAG,...DISPLAY_FIELDS.map(f=>({name:f.flag,summary:f.summary,takesValue:true,placeholder:"<true|false>"})),PASSWORD_FILE_FLAG];var PASSWORD_HELP="\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u30B3\u30DE\u30F3\u30C9\u884C\u306B\u7F6E\u3051\u307E\u305B\u3093\uFF08\u30B7\u30A7\u30EB\u306E\u5C65\u6B74\u3068\u30D7\u30ED\u30BB\u30B9\u4E00\u89A7\u306B\u6B8B\u308B\u305F\u3081\uFF09\u3002\n--password-file <\u30D1\u30B9> \u3067\u6E21\u3059\u304B\u3001--password-file - \u3067\u6A19\u6E96\u5165\u529B\u304B\u3089\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u672B\u5C3E\u306E\u6539\u884C1\u3064\u306F\u53D6\u308A\u9664\u304D\u307E\u3059\uFF08echo \u3067\u66F8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u3067\u3082\u305D\u306E\u307E\u307E\u4F7F\u3048\u307E\u3059\uFF09\u30028\u6587\u5B57\u4EE5\u4E0A\u3067\u3059\u3002";
|
|
153
|
+
var PASSWORD_HINT="\u30D1\u30B9\u30EF\u30FC\u30C9\u306F --password-file \u306B\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\u3092\u6E21\u3059\u304B\u3001\u5024\u306B\u300C-\u300D\u3092\u6E21\u3057\u3066\u6A19\u6E96\u5165\u529B\u304B\u3089\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF088\u6587\u5B57\u4EE5\u4E0A\uFF09\u3002";var DISPLAY_HELP="--display / --memberlist / --org-chart / --dashboard \u306F true \u304B false \u3067\u3059\uFF08\u753B\u9762\u306E\u300C\u8868\u793A\u8A2D\u5B9A\u300D\uFF09\u3002";
|
|
154
|
+
function booleanFlag(input,flag){const raw=input.flags.get(flag);return raw===void 0?void 0:booleanText(flag,raw)}function roleType(input){const raw=input.flags.get("--role");if(raw===void 0)return void 0;const type=ROLE_TO_TYPE[raw.trim().toLowerCase()];if(type===void 0){throw new UsageError(`--role \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F admin\uFF08\u7BA1\u7406\u8005\uFF09/ user\uFF08\u4E00\u822C\uFF09\u3067\u3059\u3002")}
|
|
155
|
+
return type}function authType(input){const raw=input.flags.get("--auth-type");if(raw===void 0)return void 0;const value=raw.trim().toLowerCase();if(!AUTH_TYPES.includes(value)){throw new UsageError(`--auth-type \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${AUTH_TYPES.join(" / ")} \u3067\u3059\uFF08disabled \u3067\u5931\u52B9\uFF09\u3002`)}return value}async function readPassword(input,usage){const file=input.flags.get(PASSWORD_FILE_FLAG.
|
|
156
|
+
name);if(file===void 0)return void 0;let text;if(file==="-"){if(process.stdin.isTTY===true){throw new UsageError("--password-file - \u306F\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u307F\u307E\u3059\u304C\u3001\u7AEF\u672B\u304C\u7E4B\u304C\u3063\u3066\u3044\u307E\u3059","\u30D1\u30A4\u30D7\u304B\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u6A19\u6E96\u5165\u529B\u306B\u6E21\u3059\u304B\u3001--password-file \u306B\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\u3092\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
157
|
+
const chunks=[];let size=0;for await(const chunk of process.stdin){const buffer=Buffer.from(chunk);size+=buffer.length;if(size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`\u6A19\u6E96\u5165\u529B\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${PASSWORD_FILE_MAX_BYTES} \u30D0\u30A4\u30C8\u8D85\uFF09`,usage)}chunks.push(buffer)}text=Buffer.concat(chunks).toString("utf8")}else{try{const stat=fs2.statSync(file);if(!stat.isFile())throw new UsageError(`--passwor\
|
|
158
|
+
d-file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,usage);if(stat.size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`--password-file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${stat.size} \u30D0\u30A4\u30C8\uFF09: ${file}`,usage)}text=fs2.readFileSync(file,"utf8")}catch(err){if(err instanceof UsageError)throw err;const reason=err.code??err.message;throw new UsageError(`--password-file \
|
|
159
|
+
\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${reason}\uFF09`,usage)}}const password=text.replace(/^\uFEFF/,"").replace(/\r?\n$/,"");if([...password].length<PASSWORD_MIN_CHARS){throw new UsageError(`\u30D1\u30B9\u30EF\u30FC\u30C9\u306F ${PASSWORD_MIN_CHARS} \u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${[...password].length} \u6587\u5B57\uFF09`,usage)}return password}function userFields(input){const body={};for(const field of TEXT_FIELDS){
|
|
160
|
+
const value=boundedText(input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.key]=value}const type=roleType(input);if(type!==void 0)body["type"]=type;const hireDate=isoDate(input,HIRE_DATE_FLAG.name);if(hireDate!==void 0)body["hire_date"]=hireDate;for(const field of DISPLAY_FIELDS){const value=booleanFlag(input,field.flag);if(value!==void 0)body[field.key]=value}return body}function writeAck(body,label2){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(
|
|
161
|
+
`${label2}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const rest={...body};delete rest["result"];return rest}function licenseNotes(body){const warnings=isRecord(body)?body["license_warnings"]:void 0;if(!Array.isArray(warnings)||warnings.length===0)return[];const texts=warnings.map(warning=>isRecord(warning)?String(warning["message"]??warning["feature_label"]??warning["\
|
|
162
|
+
feature"]??""):String(warning));return[`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u305F\u3081\u3001\u4E00\u90E8\u306E\u6A5F\u80FD\u6A29\u9650\u306F\u4ED8\u4E0E\u3055\u308C\u3066\u3044\u307E\u305B\u3093: ${texts.join(" / ")}`]}var createOperation2={name:"create",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u4F5C\u6210\u3059\u308B\uFF08\u5165\u793E\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user create --name <\u6C0F\u540D> --email <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9> --password-\
|
|
163
|
+
file <\u30D1\u30B9|-> [--role admin|user] [--kana <\u30D5\u30EA\u30AC\u30CA>] [--hire-date <YYYY-MM-DD>] [--employee-code <\u793E\u54E1\u756A\u53F7>] [--display true|false] \u2026",description:`--name / --email / --password-file \u304C\u5FC5\u9808\u3067\u3059\u3002--role \u3092\u7701\u304F\u3068\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
164
|
+
\u8868\u793A\u30D5\u30E9\u30B0\u3092\u7701\u304F\u3068\u3001\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\uFF08\u3059\u3079\u3066 true\uFF1D\u8868\u793A\u3059\u308B\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
165
|
+
\u6A5F\u80FD\u6A29\u9650\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u65E2\u5B9A\u3067\u4ED8\u4E0E\u3055\u308C\u307E\u3059\uFF08\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u6A5F\u80FD\u306F\u4ED8\u4E0E\u3055\u308C\u305A\u3001stderr \u306B\u51FA\u307E\u3059\uFF09\u3002
|
|
166
|
+
|
|
167
|
+
${PASSWORD_HELP}
|
|
168
|
+
|
|
169
|
+
${DISPLAY_HELP}
|
|
170
|
+
|
|
171
|
+
\u4F5C\u6210\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002\u7D9A\u3051\u3066 twp user get <ID> \u3067\u5185\u5BB9\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user create \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:FIELD_FLAGS,async prepare(input){if(input.args.length>0){throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.
|
|
172
|
+
args.join(" ")}`,"twp user create help")}const body=userFields(input);for(const[flag,key]of[["--name","user_name"],["--email","login_id"]]){if(body[key]===void 0)throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"twp user create help")}if(!input.flags.has(PASSWORD_FILE_FLAG.name)){throw new UsageError("--password-file \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",PASSWORD_HINT)}const password=await readPassword(input,"twp user create help");return withResolved(
|
|
173
|
+
input,{password})},plan(input){const body=userFields(input);if(body["type"]===void 0)body["type"]=ROLE_TO_TYPE["user"];return{method:"POST",path:"/api/v2/admin/users",body:{...body,password:requireResolved(input,"password")}}},plannedNotes:input=>input.flags.has("--role")?[]:["--role \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002"],summarize:body=>pick(writeAck(body,"\u30E6\u30FC\u30B6\u30FC\u4F5C\u6210"),[
|
|
174
|
+
"user_id","message"]),raw:body=>writeAck(body,"\u30E6\u30FC\u30B6\u30FC\u4F5C\u6210"),notes:body=>licenseNotes(body)};var UPDATE_FLAGS=[...FIELD_FLAGS,AUTH_TYPE_FLAG,USER_REF_FLAG];var updateOperation2={name:"update",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u66F4\u65B0\u3059\u308B\uFF08\u5931\u52B9\u3092\u542B\u3080\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user update <\u30E6\u30FC\u30B6\u30FC> [--auth-type all|password|oauth|disabled] [--display true|false] [--memberlist true|false] [--org-\
|
|
175
|
+
chart true|false] [--dashboard true|false] [--name <\u6C0F\u540D>] \u2026",description:`\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002
|
|
176
|
+
\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
177
|
+
|
|
178
|
+
\u9000\u793E\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306F\u3001\u8A8D\u8A3C\u30BF\u30A4\u30D7\u3092 disabled\uFF08\u753B\u9762\u306E\u300C\u7121\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u300D\uFF09\u306B\u3057\u3066\u5931\u52B9\u3055\u305B\u307E\u3059\u3002
|
|
179
|
+
\u5931\u52B9\u3055\u305B\u308B\u3068\u3001\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u306F\u65B0\u3057\u304F\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u305A\u3001\u767A\u884C\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u3068 API \u30AD\u30FC\u3082\u30B5\u30FC\u30D0\u304C\u5931\u52B9\u3055\u305B\u307E\u3059\u3002
|
|
180
|
+
\u4E00\u89A7\u3084\u7D44\u7E54\u56F3\u304B\u3089\u5916\u3059\u306A\u3089\u3001\u8868\u793A\u30D5\u30E9\u30B0\u3082 false \u306B\u3057\u307E\u3059:
|
|
181
|
+
twp user update <\u30E6\u30FC\u30B6\u30FC> --auth-type disabled --display false --memberlist false --org-chart false --dashboard false
|
|
182
|
+
\u53D6\u308A\u6D88\u3059\uFF08\u518D\u5165\u793E\u30FB\u8AA4\u64CD\u4F5C\uFF09\u3068\u304D\u306F\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3067\u623B\u3057\u307E\u3059\uFF08\u8868\u793A\u30D5\u30E9\u30B0\u3092 true\u3001--auth-type \u306F\u5931\u52B9\u524D\u306E\u5024\uFF09\u3002
|
|
183
|
+
\u5931\u52B9\u524D\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7\u306F\u8A18\u9332\u3055\u308C\u306A\u3044\u306E\u3067\u3001\u5931\u52B9\u3055\u305B\u308B\u524D\u306B twp user get <\u30E6\u30FC\u30B6\u30FC> \u306E auth_type \u3092\u63A7\u3048\u3066\u304F\u3060\u3055\u3044
|
|
184
|
+
\uFF08all \u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u3068 OAuth \u306E\u4E21\u65B9\u3092\u8A31\u3057\u307E\u3059\u3002SSO \u3060\u3051\u306E\u30E6\u30FC\u30B6\u30FC\u3092 all \u306B\u623B\u3059\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u3082\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u307E\u3059\uFF09\u3002
|
|
185
|
+
|
|
186
|
+
${USER_REF_HELP}
|
|
187
|
+
\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3059\u3068\u3001\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u306F\u793E\u54E1\u756A\u53F7\u3067\u306F\u6307\u5B9A\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304B ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002
|
|
188
|
+
\u4F5C\u6210\u30FB\u66F4\u65B0\u306E\u76F4\u5F8C\u306B\u793E\u54E1\u756A\u53F7\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306F --refresh \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u306F10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u3057\u307E\u3059\uFF09\u3002
|
|
189
|
+
|
|
190
|
+
${PASSWORD_HELP}
|
|
191
|
+
|
|
192
|
+
${DISPLAY_HELP}`,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user update \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:UPDATE_FLAGS,async prepare(input,ctx){const changed=[...FIELD_FLAGS,AUTH_TYPE_FLAG].some(flag=>input.flags.has(flag.name));if(!changed){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`\u6307\u5B9A\u3067\u304D\u308B\u9805\u76EE: ${[
|
|
193
|
+
...FIELD_FLAGS,AUTH_TYPE_FLAG].map(flag=>flag.name).join("\u3001")}`)}userFields(input);authType(input);const password=await readPassword(input,"twp user update help");const resolved=await prepareUser(input,ctx,"twp user update help");return password===void 0?resolved:withResolved(resolved,{password})},plan(input){const userId=requireResolved(input,"userId");const body=userFields(input);const auth=authType(input);if(auth!==void 0)body["auth_type"]=auth;const password=input.resolved?.["password"];
|
|
194
|
+
if(password!==void 0)body["password"]=password;return{method:"PUT",path:`/api/v2/admin/users/${userPath(input)}`,body:{user_id:userId,update_fields:Object.keys(body),...body}}},plannedNotes:input=>{if(authType(input)!=="disabled")return[];const ref=(input.args[0]??input.flags.get("--user")??"").trim().toLowerCase();const notes=["\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u5931\u52B9\u3055\u305B\u307E\u3059\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\u3002\u767A\u884C\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u30FBAPI \u30AD\u30FC\u3082\u30B5\u30FC\u30D0\u304C\u5931\u52B9\u3055\u305B\u307E\u3059\uFF09\u3002"];
|
|
195
|
+
if(ref==="me")notes.push("\u5BFE\u8C61\u306F\u81EA\u5206\u81EA\u8EAB\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u3068\u3001\u3053\u306E\u3042\u3068 twp \u306E\u64CD\u4F5C\u3082\u30ED\u30B0\u30A4\u30F3\u3082\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002");return notes},summarize:body=>pick(writeAck(body,"\u30E6\u30FC\u30B6\u30FC\u66F4\u65B0"),["message"]),raw:body=>writeAck(body,"\u30E6\u30FC\u30B6\u30FC\u66F4\u65B0"),notes:body=>licenseNotes(body)};var userDomain={name:"user",summary:"\u30C6\u30CA\u30F3\
|
|
196
|
+
\u30C8\u306E\u30E6\u30FC\u30B6\u30FC\uFF08\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u5931\u52B9\u30FB\u62DB\u5F85\uFF09\u3068\u6240\u5C5E\uFF08\u53C2\u7167\u30FB\u4ED8\u3051\u66FF\u3048\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\uFF09",operations:[{name:"list",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u4E00\u89A7\u3059\u308B\uFF08\u90E8\u7F72\u30FB\u5F79\u8077\u30FB\u96C7\u7528\u533A\u5206\u30FB\u30AD\u30FC\u30EF\u30FC\u30C9\u3067\u7D5E\u308A\u8FBC\u3081\u308B\uFF09",usage:"\
|
|
197
|
+
twp user list [--department <\u90E8\u7F72>] [--position <\u5F79\u8077>] [--employment employee|partner] [--keyword <\u8A9E>] [--include-hidden] [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:"--department / --position \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u4E3B\u6240\u5C5E\u3067\u7D5E\u308A\u8FBC\u307F\u307E\u3059\uFF09\u3002\n--employment \u306F employee\uFF08\u793E\u54E1\uFF09\u304B partner\uFF08\u30D1\u30FC\u30C8\u30CA\u30FC\uFF09\u3067\u3059\u3002\n--include-hidden \u306F\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u307E\u3059\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u3068\u304D\u3060\u3051\u52B9\u304D\u307E\u3059\uFF09\u3002\n\u5931\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u4E00\u89A7\u306B\u542B\u307E\u308C\u307E\u3059\u3002\u5931\u52B9\u304B\u3069\u3046\u304B\u306F twp user get \u306E auth_type \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\n\n--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--o\
|
|
198
|
+
utput table / text / tsv \u306F\u8981\u7D04\u5217\uFF08user_id / user_name / email / employee_code / department_name / position_name / role / display_flg\uFF09\u3067\u3059\u3002\n\n"+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--department",summary:"\u4E3B\u6240\u5C5E\u306E\u90E8\u7F72\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"},{name:"--position",summary:"\u4E3B\u6240\u5C5E\u306E\u5F79\u8077\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",
|
|
199
|
+
takesValue:true,placeholder:"<\u5F79\u8077>"},{name:"--employment",summary:"\u96C7\u7528\u533A\u5206\u3067\u7D5E\u308A\u8FBC\u3080\uFF08employee / partner\uFF09",takesValue:true,placeholder:"<\u533A\u5206>"},{name:"--keyword",summary:"\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--include-hidden",summary:"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u308B",
|
|
200
|
+
takesValue:false}],paging:listPaging,async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp user list help")}const employment=nonEmpty(input.flags,"--employment");if(employment!==void 0&&!EMPLOYMENT_TYPES.includes(employment)){throw new UsageError(`--employment \u306B\u300C${employment}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${EMPLOYMENT_TYPES.
|
|
201
|
+
join(" / ")} \u3067\u3059`)}const resolved={};const department=nonEmpty(input.flags,"--department");if(department!==void 0)resolved["departmentId"]=(await ctx.resolver.department(department)).id;const position=nonEmpty(input.flags,"--position");if(position!==void 0)resolved["positionId"]=(await ctx.resolver.position(position)).id;return withResolved(input,resolved)},plan(input){return{method:"GET",path:"/api/v2/admin/users/list",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(
|
|
202
|
+
input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),department_id:input.resolved?.["departmentId"],position_id:input.resolved?.["positionId"],employment_type:nonEmpty(input.flags,"--employment"),include_hidden:input.flags.has("--include-hidden")?"true":void 0}}},summarize:body=>listPaging.items(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>listPaging.items(body)},{name:"get",summary:"\u30E6\u30FC\u30B6\u30FC1\u4EBA\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
203
|
+
usage:"twp user get <\u30E6\u30FC\u30B6\u30FC>",description:USER_REF_HELP+"\n\nauth_type \u304C disabled \u306E\u30E6\u30FC\u30B6\u30FC\u306F\u5931\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u3057\u3066\u3044\u307E\u3059\u3002\n\u8981\u7D04\uFF08table / text / tsv\uFF09\u306B\u306F\u500B\u4EBA\u9023\u7D61\u5148\u3092\u51FA\u3057\u307E\u305B\u3093\u3002--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002",forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\
|
|
204
|
+
\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user get \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:[USER_REF_FLAG],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user get help"),plan:input=>({method:"GET",path:`/api/v2/admin/users/${userPath(input)}`}),summarize:body=>pick(userObject(body),GET_COLUMNS),raw:body=>userObject(body)},createOperation2,updateOperation2],subresources:[userAssignmentResource,userInviteResource]};export{userDomain};
|