monday-cli 0.2.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.
Files changed (596) hide show
  1. package/CHANGELOG.md +439 -0
  2. package/LICENSE +21 -0
  3. package/README.md +431 -0
  4. package/dist/api/board-child-finder.d.ts +95 -0
  5. package/dist/api/board-child-finder.d.ts.map +1 -0
  6. package/dist/api/board-child-finder.js +89 -0
  7. package/dist/api/board-child-finder.js.map +1 -0
  8. package/dist/api/board-metadata.d.ts +162 -0
  9. package/dist/api/board-metadata.d.ts.map +1 -0
  10. package/dist/api/board-metadata.js +238 -0
  11. package/dist/api/board-metadata.js.map +1 -0
  12. package/dist/api/board-mutation-invalidation.d.ts +153 -0
  13. package/dist/api/board-mutation-invalidation.d.ts.map +1 -0
  14. package/dist/api/board-mutation-invalidation.js +136 -0
  15. package/dist/api/board-mutation-invalidation.js.map +1 -0
  16. package/dist/api/board-mutation-result.d.ts +97 -0
  17. package/dist/api/board-mutation-result.d.ts.map +1 -0
  18. package/dist/api/board-mutation-result.js +99 -0
  19. package/dist/api/board-mutation-result.js.map +1 -0
  20. package/dist/api/board-projection.d.ts +68 -0
  21. package/dist/api/board-projection.d.ts.map +1 -0
  22. package/dist/api/board-projection.js +79 -0
  23. package/dist/api/board-projection.js.map +1 -0
  24. package/dist/api/cache.d.ts +150 -0
  25. package/dist/api/cache.d.ts.map +1 -0
  26. package/dist/api/cache.js +418 -0
  27. package/dist/api/cache.js.map +1 -0
  28. package/dist/api/client.d.ts +162 -0
  29. package/dist/api/client.d.ts.map +1 -0
  30. package/dist/api/client.js +205 -0
  31. package/dist/api/client.js.map +1 -0
  32. package/dist/api/column-mapping.d.ts +68 -0
  33. package/dist/api/column-mapping.d.ts.map +1 -0
  34. package/dist/api/column-mapping.js +117 -0
  35. package/dist/api/column-mapping.js.map +1 -0
  36. package/dist/api/column-mutation-result.d.ts +136 -0
  37. package/dist/api/column-mutation-result.d.ts.map +1 -0
  38. package/dist/api/column-mutation-result.js +130 -0
  39. package/dist/api/column-mutation-result.js.map +1 -0
  40. package/dist/api/column-types.d.ts +215 -0
  41. package/dist/api/column-types.d.ts.map +1 -0
  42. package/dist/api/column-types.js +195 -0
  43. package/dist/api/column-types.js.map +1 -0
  44. package/dist/api/column-values.d.ts +446 -0
  45. package/dist/api/column-values.d.ts.map +1 -0
  46. package/dist/api/column-values.js +795 -0
  47. package/dist/api/column-values.js.map +1 -0
  48. package/dist/api/columns.d.ts +205 -0
  49. package/dist/api/columns.d.ts.map +1 -0
  50. package/dist/api/columns.js +343 -0
  51. package/dist/api/columns.js.map +1 -0
  52. package/dist/api/complexity.d.ts +90 -0
  53. package/dist/api/complexity.d.ts.map +1 -0
  54. package/dist/api/complexity.js +194 -0
  55. package/dist/api/complexity.js.map +1 -0
  56. package/dist/api/dates.d.ts +150 -0
  57. package/dist/api/dates.d.ts.map +1 -0
  58. package/dist/api/dates.js +490 -0
  59. package/dist/api/dates.js.map +1 -0
  60. package/dist/api/destructive-gate.d.ts +107 -0
  61. package/dist/api/destructive-gate.d.ts.map +1 -0
  62. package/dist/api/destructive-gate.js +19 -0
  63. package/dist/api/destructive-gate.js.map +1 -0
  64. package/dist/api/dry-run.d.ts +338 -0
  65. package/dist/api/dry-run.d.ts.map +1 -0
  66. package/dist/api/dry-run.js +607 -0
  67. package/dist/api/dry-run.js.map +1 -0
  68. package/dist/api/emails.d.ts +60 -0
  69. package/dist/api/emails.d.ts.map +1 -0
  70. package/dist/api/emails.js +113 -0
  71. package/dist/api/emails.js.map +1 -0
  72. package/dist/api/errors.d.ts +82 -0
  73. package/dist/api/errors.d.ts.map +1 -0
  74. package/dist/api/errors.js +434 -0
  75. package/dist/api/errors.js.map +1 -0
  76. package/dist/api/filters.d.ts +198 -0
  77. package/dist/api/filters.d.ts.map +1 -0
  78. package/dist/api/filters.js +328 -0
  79. package/dist/api/filters.js.map +1 -0
  80. package/dist/api/group-color.d.ts +33 -0
  81. package/dist/api/group-color.d.ts.map +1 -0
  82. package/dist/api/group-color.js +80 -0
  83. package/dist/api/group-color.js.map +1 -0
  84. package/dist/api/group-mutation-result.d.ts +150 -0
  85. package/dist/api/group-mutation-result.d.ts.map +1 -0
  86. package/dist/api/group-mutation-result.js +141 -0
  87. package/dist/api/group-mutation-result.js.map +1 -0
  88. package/dist/api/iso-country-codes.d.ts +45 -0
  89. package/dist/api/iso-country-codes.d.ts.map +1 -0
  90. package/dist/api/iso-country-codes.js +71 -0
  91. package/dist/api/iso-country-codes.js.map +1 -0
  92. package/dist/api/item-board-lookup.d.ts +86 -0
  93. package/dist/api/item-board-lookup.d.ts.map +1 -0
  94. package/dist/api/item-board-lookup.js +140 -0
  95. package/dist/api/item-board-lookup.js.map +1 -0
  96. package/dist/api/item-helpers.d.ts +133 -0
  97. package/dist/api/item-helpers.d.ts.map +1 -0
  98. package/dist/api/item-helpers.js +139 -0
  99. package/dist/api/item-helpers.js.map +1 -0
  100. package/dist/api/item-mutation-result.d.ts +60 -0
  101. package/dist/api/item-mutation-result.d.ts.map +1 -0
  102. package/dist/api/item-mutation-result.js +63 -0
  103. package/dist/api/item-mutation-result.js.map +1 -0
  104. package/dist/api/item-projection.d.ts +165 -0
  105. package/dist/api/item-projection.d.ts.map +1 -0
  106. package/dist/api/item-projection.js +235 -0
  107. package/dist/api/item-projection.js.map +1 -0
  108. package/dist/api/item-source-read.d.ts +45 -0
  109. package/dist/api/item-source-read.d.ts.map +1 -0
  110. package/dist/api/item-source-read.js +57 -0
  111. package/dist/api/item-source-read.js.map +1 -0
  112. package/dist/api/items-page-walker.d.ts +126 -0
  113. package/dist/api/items-page-walker.d.ts.map +1 -0
  114. package/dist/api/items-page-walker.js +256 -0
  115. package/dist/api/items-page-walker.js.map +1 -0
  116. package/dist/api/links.d.ts +70 -0
  117. package/dist/api/links.d.ts.map +1 -0
  118. package/dist/api/links.js +128 -0
  119. package/dist/api/links.js.map +1 -0
  120. package/dist/api/me-token.d.ts +52 -0
  121. package/dist/api/me-token.d.ts.map +1 -0
  122. package/dist/api/me-token.js +55 -0
  123. package/dist/api/me-token.js.map +1 -0
  124. package/dist/api/pagination.d.ts +201 -0
  125. package/dist/api/pagination.d.ts.map +1 -0
  126. package/dist/api/pagination.js +223 -0
  127. package/dist/api/pagination.js.map +1 -0
  128. package/dist/api/partial-success-mutation.d.ts +28 -0
  129. package/dist/api/partial-success-mutation.d.ts.map +1 -0
  130. package/dist/api/partial-success-mutation.js +68 -0
  131. package/dist/api/partial-success-mutation.js.map +1 -0
  132. package/dist/api/people.d.ts +182 -0
  133. package/dist/api/people.d.ts.map +1 -0
  134. package/dist/api/people.js +260 -0
  135. package/dist/api/people.js.map +1 -0
  136. package/dist/api/phones.d.ts +74 -0
  137. package/dist/api/phones.d.ts.map +1 -0
  138. package/dist/api/phones.js +167 -0
  139. package/dist/api/phones.js.map +1 -0
  140. package/dist/api/raw-document.d.ts +53 -0
  141. package/dist/api/raw-document.d.ts.map +1 -0
  142. package/dist/api/raw-document.js +177 -0
  143. package/dist/api/raw-document.js.map +1 -0
  144. package/dist/api/raw-write.d.ts +127 -0
  145. package/dist/api/raw-write.d.ts.map +1 -0
  146. package/dist/api/raw-write.js +233 -0
  147. package/dist/api/raw-write.js.map +1 -0
  148. package/dist/api/resolution-context.d.ts +32 -0
  149. package/dist/api/resolution-context.d.ts.map +1 -0
  150. package/dist/api/resolution-context.js +42 -0
  151. package/dist/api/resolution-context.js.map +1 -0
  152. package/dist/api/resolution-pass.d.ts +163 -0
  153. package/dist/api/resolution-pass.d.ts.map +1 -0
  154. package/dist/api/resolution-pass.js +254 -0
  155. package/dist/api/resolution-pass.js.map +1 -0
  156. package/dist/api/resolve-client.d.ts +69 -0
  157. package/dist/api/resolve-client.d.ts.map +1 -0
  158. package/dist/api/resolve-client.js +70 -0
  159. package/dist/api/resolve-client.js.map +1 -0
  160. package/dist/api/resolver-error-fold.d.ts +176 -0
  161. package/dist/api/resolver-error-fold.d.ts.map +1 -0
  162. package/dist/api/resolver-error-fold.js +230 -0
  163. package/dist/api/resolver-error-fold.js.map +1 -0
  164. package/dist/api/resolvers.d.ts +131 -0
  165. package/dist/api/resolvers.d.ts.map +1 -0
  166. package/dist/api/resolvers.js +262 -0
  167. package/dist/api/resolvers.js.map +1 -0
  168. package/dist/api/response-root.d.ts +65 -0
  169. package/dist/api/response-root.d.ts.map +1 -0
  170. package/dist/api/response-root.js +61 -0
  171. package/dist/api/response-root.js.map +1 -0
  172. package/dist/api/retry.d.ts +112 -0
  173. package/dist/api/retry.d.ts.map +1 -0
  174. package/dist/api/retry.js +181 -0
  175. package/dist/api/retry.js.map +1 -0
  176. package/dist/api/set-expression.d.ts +23 -0
  177. package/dist/api/set-expression.d.ts.map +1 -0
  178. package/dist/api/set-expression.js +31 -0
  179. package/dist/api/set-expression.js.map +1 -0
  180. package/dist/api/sort.d.ts +59 -0
  181. package/dist/api/sort.d.ts.map +1 -0
  182. package/dist/api/sort.js +73 -0
  183. package/dist/api/sort.js.map +1 -0
  184. package/dist/api/source-aggregator.d.ts +94 -0
  185. package/dist/api/source-aggregator.d.ts.map +1 -0
  186. package/dist/api/source-aggregator.js +111 -0
  187. package/dist/api/source-aggregator.js.map +1 -0
  188. package/dist/api/transport.d.ts +58 -0
  189. package/dist/api/transport.d.ts.map +1 -0
  190. package/dist/api/transport.js +190 -0
  191. package/dist/api/transport.js.map +1 -0
  192. package/dist/api/update-mutation-result.d.ts +133 -0
  193. package/dist/api/update-mutation-result.d.ts.map +1 -0
  194. package/dist/api/update-mutation-result.js +145 -0
  195. package/dist/api/update-mutation-result.js.map +1 -0
  196. package/dist/api/users-fan-out-mutation.d.ts +124 -0
  197. package/dist/api/users-fan-out-mutation.d.ts.map +1 -0
  198. package/dist/api/users-fan-out-mutation.js +331 -0
  199. package/dist/api/users-fan-out-mutation.js.map +1 -0
  200. package/dist/api/walk-pages.d.ts +91 -0
  201. package/dist/api/walk-pages.d.ts.map +1 -0
  202. package/dist/api/walk-pages.js +84 -0
  203. package/dist/api/walk-pages.js.map +1 -0
  204. package/dist/api/workspace-projection.d.ts +64 -0
  205. package/dist/api/workspace-projection.d.ts.map +1 -0
  206. package/dist/api/workspace-projection.js +83 -0
  207. package/dist/api/workspace-projection.js.map +1 -0
  208. package/dist/cli/envelope-out.d.ts +128 -0
  209. package/dist/cli/envelope-out.d.ts.map +1 -0
  210. package/dist/cli/envelope-out.js +146 -0
  211. package/dist/cli/envelope-out.js.map +1 -0
  212. package/dist/cli/index.d.ts +3 -0
  213. package/dist/cli/index.d.ts.map +1 -0
  214. package/dist/cli/index.js +27 -0
  215. package/dist/cli/index.js.map +1 -0
  216. package/dist/cli/program.d.ts +29 -0
  217. package/dist/cli/program.d.ts.map +1 -0
  218. package/dist/cli/program.js +109 -0
  219. package/dist/cli/program.js.map +1 -0
  220. package/dist/cli/run.d.ts +108 -0
  221. package/dist/cli/run.d.ts.map +1 -0
  222. package/dist/cli/run.js +105 -0
  223. package/dist/cli/run.js.map +1 -0
  224. package/dist/commands/account/client-helper.d.ts +37 -0
  225. package/dist/commands/account/client-helper.d.ts.map +1 -0
  226. package/dist/commands/account/client-helper.js +55 -0
  227. package/dist/commands/account/client-helper.js.map +1 -0
  228. package/dist/commands/account/complexity.d.ts +29 -0
  229. package/dist/commands/account/complexity.d.ts.map +1 -0
  230. package/dist/commands/account/complexity.js +70 -0
  231. package/dist/commands/account/complexity.js.map +1 -0
  232. package/dist/commands/account/info.d.ts +36 -0
  233. package/dist/commands/account/info.d.ts.map +1 -0
  234. package/dist/commands/account/info.js +74 -0
  235. package/dist/commands/account/info.js.map +1 -0
  236. package/dist/commands/account/version.d.ts +44 -0
  237. package/dist/commands/account/version.d.ts.map +1 -0
  238. package/dist/commands/account/version.js +98 -0
  239. package/dist/commands/account/version.js.map +1 -0
  240. package/dist/commands/account/whoami.d.ts +34 -0
  241. package/dist/commands/account/whoami.d.ts.map +1 -0
  242. package/dist/commands/account/whoami.js +77 -0
  243. package/dist/commands/account/whoami.js.map +1 -0
  244. package/dist/commands/board/add-users.d.ts +60 -0
  245. package/dist/commands/board/add-users.d.ts.map +1 -0
  246. package/dist/commands/board/add-users.js +133 -0
  247. package/dist/commands/board/add-users.js.map +1 -0
  248. package/dist/commands/board/archive.d.ts +64 -0
  249. package/dist/commands/board/archive.d.ts.map +1 -0
  250. package/dist/commands/board/archive.js +226 -0
  251. package/dist/commands/board/archive.js.map +1 -0
  252. package/dist/commands/board/column-create.d.ts +146 -0
  253. package/dist/commands/board/column-create.d.ts.map +1 -0
  254. package/dist/commands/board/column-create.js +564 -0
  255. package/dist/commands/board/column-create.js.map +1 -0
  256. package/dist/commands/board/column-delete.d.ts +76 -0
  257. package/dist/commands/board/column-delete.d.ts.map +1 -0
  258. package/dist/commands/board/column-delete.js +224 -0
  259. package/dist/commands/board/column-delete.js.map +1 -0
  260. package/dist/commands/board/column-update.d.ts +92 -0
  261. package/dist/commands/board/column-update.d.ts.map +1 -0
  262. package/dist/commands/board/column-update.js +364 -0
  263. package/dist/commands/board/column-update.js.map +1 -0
  264. package/dist/commands/board/columns.d.ts +30 -0
  265. package/dist/commands/board/columns.d.ts.map +1 -0
  266. package/dist/commands/board/columns.js +102 -0
  267. package/dist/commands/board/columns.js.map +1 -0
  268. package/dist/commands/board/create.d.ts +67 -0
  269. package/dist/commands/board/create.d.ts.map +1 -0
  270. package/dist/commands/board/create.js +226 -0
  271. package/dist/commands/board/create.js.map +1 -0
  272. package/dist/commands/board/delete.d.ts +60 -0
  273. package/dist/commands/board/delete.d.ts.map +1 -0
  274. package/dist/commands/board/delete.js +192 -0
  275. package/dist/commands/board/delete.js.map +1 -0
  276. package/dist/commands/board/describe.d.ts +68 -0
  277. package/dist/commands/board/describe.d.ts.map +1 -0
  278. package/dist/commands/board/describe.js +241 -0
  279. package/dist/commands/board/describe.js.map +1 -0
  280. package/dist/commands/board/doctor.d.ts +108 -0
  281. package/dist/commands/board/doctor.d.ts.map +1 -0
  282. package/dist/commands/board/doctor.js +417 -0
  283. package/dist/commands/board/doctor.js.map +1 -0
  284. package/dist/commands/board/duplicate.d.ts +85 -0
  285. package/dist/commands/board/duplicate.d.ts.map +1 -0
  286. package/dist/commands/board/duplicate.js +281 -0
  287. package/dist/commands/board/duplicate.js.map +1 -0
  288. package/dist/commands/board/find.d.ts +47 -0
  289. package/dist/commands/board/find.d.ts.map +1 -0
  290. package/dist/commands/board/find.js +153 -0
  291. package/dist/commands/board/find.js.map +1 -0
  292. package/dist/commands/board/get.d.ts +41 -0
  293. package/dist/commands/board/get.d.ts.map +1 -0
  294. package/dist/commands/board/get.js +66 -0
  295. package/dist/commands/board/get.js.map +1 -0
  296. package/dist/commands/board/group-archive.d.ts +83 -0
  297. package/dist/commands/board/group-archive.d.ts.map +1 -0
  298. package/dist/commands/board/group-archive.js +264 -0
  299. package/dist/commands/board/group-archive.js.map +1 -0
  300. package/dist/commands/board/group-create.d.ts +118 -0
  301. package/dist/commands/board/group-create.d.ts.map +1 -0
  302. package/dist/commands/board/group-create.js +239 -0
  303. package/dist/commands/board/group-create.js.map +1 -0
  304. package/dist/commands/board/group-delete.d.ts +79 -0
  305. package/dist/commands/board/group-delete.d.ts.map +1 -0
  306. package/dist/commands/board/group-delete.js +222 -0
  307. package/dist/commands/board/group-delete.js.map +1 -0
  308. package/dist/commands/board/group-duplicate.d.ts +70 -0
  309. package/dist/commands/board/group-duplicate.d.ts.map +1 -0
  310. package/dist/commands/board/group-duplicate.js +219 -0
  311. package/dist/commands/board/group-duplicate.js.map +1 -0
  312. package/dist/commands/board/group-update.d.ts +145 -0
  313. package/dist/commands/board/group-update.d.ts.map +1 -0
  314. package/dist/commands/board/group-update.js +341 -0
  315. package/dist/commands/board/group-update.js.map +1 -0
  316. package/dist/commands/board/groups.d.ts +28 -0
  317. package/dist/commands/board/groups.d.ts.map +1 -0
  318. package/dist/commands/board/groups.js +85 -0
  319. package/dist/commands/board/groups.js.map +1 -0
  320. package/dist/commands/board/list.d.ts +39 -0
  321. package/dist/commands/board/list.d.ts.map +1 -0
  322. package/dist/commands/board/list.js +135 -0
  323. package/dist/commands/board/list.js.map +1 -0
  324. package/dist/commands/board/subscribers.d.ts +24 -0
  325. package/dist/commands/board/subscribers.d.ts.map +1 -0
  326. package/dist/commands/board/subscribers.js +89 -0
  327. package/dist/commands/board/subscribers.js.map +1 -0
  328. package/dist/commands/board/update.d.ts +82 -0
  329. package/dist/commands/board/update.d.ts.map +1 -0
  330. package/dist/commands/board/update.js +328 -0
  331. package/dist/commands/board/update.js.map +1 -0
  332. package/dist/commands/cache/clear.d.ts +34 -0
  333. package/dist/commands/cache/clear.d.ts.map +1 -0
  334. package/dist/commands/cache/clear.js +113 -0
  335. package/dist/commands/cache/clear.js.map +1 -0
  336. package/dist/commands/cache/list.d.ts +50 -0
  337. package/dist/commands/cache/list.d.ts.map +1 -0
  338. package/dist/commands/cache/list.js +77 -0
  339. package/dist/commands/cache/list.js.map +1 -0
  340. package/dist/commands/cache/stats.d.ts +22 -0
  341. package/dist/commands/cache/stats.d.ts.map +1 -0
  342. package/dist/commands/cache/stats.js +56 -0
  343. package/dist/commands/cache/stats.js.map +1 -0
  344. package/dist/commands/config/path.d.ts +22 -0
  345. package/dist/commands/config/path.d.ts.map +1 -0
  346. package/dist/commands/config/path.js +74 -0
  347. package/dist/commands/config/path.js.map +1 -0
  348. package/dist/commands/config/show.d.ts +61 -0
  349. package/dist/commands/config/show.d.ts.map +1 -0
  350. package/dist/commands/config/show.js +137 -0
  351. package/dist/commands/config/show.js.map +1 -0
  352. package/dist/commands/emit.d.ts +156 -0
  353. package/dist/commands/emit.d.ts.map +1 -0
  354. package/dist/commands/emit.js +212 -0
  355. package/dist/commands/emit.js.map +1 -0
  356. package/dist/commands/index.d.ts +5 -0
  357. package/dist/commands/index.d.ts.map +1 -0
  358. package/dist/commands/index.js +195 -0
  359. package/dist/commands/index.js.map +1 -0
  360. package/dist/commands/item/archive.d.ts +81 -0
  361. package/dist/commands/item/archive.d.ts.map +1 -0
  362. package/dist/commands/item/archive.js +187 -0
  363. package/dist/commands/item/archive.js.map +1 -0
  364. package/dist/commands/item/clear.d.ts +140 -0
  365. package/dist/commands/item/clear.d.ts.map +1 -0
  366. package/dist/commands/item/clear.js +748 -0
  367. package/dist/commands/item/clear.js.map +1 -0
  368. package/dist/commands/item/create.d.ts +77 -0
  369. package/dist/commands/item/create.d.ts.map +1 -0
  370. package/dist/commands/item/create.js +802 -0
  371. package/dist/commands/item/create.js.map +1 -0
  372. package/dist/commands/item/delete.d.ts +82 -0
  373. package/dist/commands/item/delete.d.ts.map +1 -0
  374. package/dist/commands/item/delete.js +179 -0
  375. package/dist/commands/item/delete.js.map +1 -0
  376. package/dist/commands/item/duplicate.d.ts +117 -0
  377. package/dist/commands/item/duplicate.d.ts.map +1 -0
  378. package/dist/commands/item/duplicate.js +238 -0
  379. package/dist/commands/item/duplicate.js.map +1 -0
  380. package/dist/commands/item/find.d.ts +55 -0
  381. package/dist/commands/item/find.d.ts.map +1 -0
  382. package/dist/commands/item/find.js +231 -0
  383. package/dist/commands/item/find.js.map +1 -0
  384. package/dist/commands/item/get.d.ts +47 -0
  385. package/dist/commands/item/get.d.ts.map +1 -0
  386. package/dist/commands/item/get.js +66 -0
  387. package/dist/commands/item/get.js.map +1 -0
  388. package/dist/commands/item/list.d.ts +73 -0
  389. package/dist/commands/item/list.d.ts.map +1 -0
  390. package/dist/commands/item/list.js +284 -0
  391. package/dist/commands/item/list.js.map +1 -0
  392. package/dist/commands/item/move.d.ts +181 -0
  393. package/dist/commands/item/move.d.ts.map +1 -0
  394. package/dist/commands/item/move.js +560 -0
  395. package/dist/commands/item/move.js.map +1 -0
  396. package/dist/commands/item/search.d.ts +67 -0
  397. package/dist/commands/item/search.d.ts.map +1 -0
  398. package/dist/commands/item/search.js +322 -0
  399. package/dist/commands/item/search.js.map +1 -0
  400. package/dist/commands/item/set.d.ts +88 -0
  401. package/dist/commands/item/set.d.ts.map +1 -0
  402. package/dist/commands/item/set.js +387 -0
  403. package/dist/commands/item/set.js.map +1 -0
  404. package/dist/commands/item/subitems.d.ts +50 -0
  405. package/dist/commands/item/subitems.d.ts.map +1 -0
  406. package/dist/commands/item/subitems.js +86 -0
  407. package/dist/commands/item/subitems.js.map +1 -0
  408. package/dist/commands/item/update.d.ts +99 -0
  409. package/dist/commands/item/update.d.ts.map +1 -0
  410. package/dist/commands/item/update.js +884 -0
  411. package/dist/commands/item/update.js.map +1 -0
  412. package/dist/commands/item/upsert.d.ts +105 -0
  413. package/dist/commands/item/upsert.d.ts.map +1 -0
  414. package/dist/commands/item/upsert.js +998 -0
  415. package/dist/commands/item/upsert.js.map +1 -0
  416. package/dist/commands/parse-argv.d.ts +20 -0
  417. package/dist/commands/parse-argv.d.ts.map +1 -0
  418. package/dist/commands/parse-argv.js +40 -0
  419. package/dist/commands/parse-argv.js.map +1 -0
  420. package/dist/commands/raw/index.d.ts +23 -0
  421. package/dist/commands/raw/index.d.ts.map +1 -0
  422. package/dist/commands/raw/index.js +416 -0
  423. package/dist/commands/raw/index.js.map +1 -0
  424. package/dist/commands/run-by-id-lookup.d.ts +72 -0
  425. package/dist/commands/run-by-id-lookup.d.ts.map +1 -0
  426. package/dist/commands/run-by-id-lookup.js +58 -0
  427. package/dist/commands/run-by-id-lookup.js.map +1 -0
  428. package/dist/commands/schema/index.d.ts +104 -0
  429. package/dist/commands/schema/index.d.ts.map +1 -0
  430. package/dist/commands/schema/index.js +183 -0
  431. package/dist/commands/schema/index.js.map +1 -0
  432. package/dist/commands/types.d.ts +66 -0
  433. package/dist/commands/types.d.ts.map +1 -0
  434. package/dist/commands/types.js +15 -0
  435. package/dist/commands/types.js.map +1 -0
  436. package/dist/commands/update/body-source.d.ts +38 -0
  437. package/dist/commands/update/body-source.d.ts.map +1 -0
  438. package/dist/commands/update/body-source.js +80 -0
  439. package/dist/commands/update/body-source.js.map +1 -0
  440. package/dist/commands/update/clear-all.d.ts +67 -0
  441. package/dist/commands/update/clear-all.d.ts.map +1 -0
  442. package/dist/commands/update/clear-all.js +281 -0
  443. package/dist/commands/update/clear-all.js.map +1 -0
  444. package/dist/commands/update/create.d.ts +51 -0
  445. package/dist/commands/update/create.d.ts.map +1 -0
  446. package/dist/commands/update/create.js +167 -0
  447. package/dist/commands/update/create.js.map +1 -0
  448. package/dist/commands/update/delete.d.ts +53 -0
  449. package/dist/commands/update/delete.d.ts.map +1 -0
  450. package/dist/commands/update/delete.js +148 -0
  451. package/dist/commands/update/delete.js.map +1 -0
  452. package/dist/commands/update/edit.d.ts +37 -0
  453. package/dist/commands/update/edit.d.ts.map +1 -0
  454. package/dist/commands/update/edit.js +129 -0
  455. package/dist/commands/update/edit.js.map +1 -0
  456. package/dist/commands/update/get.d.ts +37 -0
  457. package/dist/commands/update/get.d.ts.map +1 -0
  458. package/dist/commands/update/get.js +92 -0
  459. package/dist/commands/update/get.js.map +1 -0
  460. package/dist/commands/update/like.d.ts +17 -0
  461. package/dist/commands/update/like.d.ts.map +1 -0
  462. package/dist/commands/update/like.js +23 -0
  463. package/dist/commands/update/like.js.map +1 -0
  464. package/dist/commands/update/list.d.ts +58 -0
  465. package/dist/commands/update/list.d.ts.map +1 -0
  466. package/dist/commands/update/list.js +322 -0
  467. package/dist/commands/update/list.js.map +1 -0
  468. package/dist/commands/update/pin.d.ts +17 -0
  469. package/dist/commands/update/pin.d.ts.map +1 -0
  470. package/dist/commands/update/pin.js +23 -0
  471. package/dist/commands/update/pin.js.map +1 -0
  472. package/dist/commands/update/reply.d.ts +47 -0
  473. package/dist/commands/update/reply.d.ts.map +1 -0
  474. package/dist/commands/update/reply.js +149 -0
  475. package/dist/commands/update/reply.js.map +1 -0
  476. package/dist/commands/update/toggle.d.ts +70 -0
  477. package/dist/commands/update/toggle.d.ts.map +1 -0
  478. package/dist/commands/update/toggle.js +118 -0
  479. package/dist/commands/update/toggle.js.map +1 -0
  480. package/dist/commands/update/unlike.d.ts +17 -0
  481. package/dist/commands/update/unlike.d.ts.map +1 -0
  482. package/dist/commands/update/unlike.js +22 -0
  483. package/dist/commands/update/unlike.js.map +1 -0
  484. package/dist/commands/update/unpin.d.ts +17 -0
  485. package/dist/commands/update/unpin.d.ts.map +1 -0
  486. package/dist/commands/update/unpin.js +21 -0
  487. package/dist/commands/update/unpin.js.map +1 -0
  488. package/dist/commands/user/get.d.ts +31 -0
  489. package/dist/commands/user/get.d.ts.map +1 -0
  490. package/dist/commands/user/get.js +81 -0
  491. package/dist/commands/user/get.js.map +1 -0
  492. package/dist/commands/user/list.d.ts +61 -0
  493. package/dist/commands/user/list.d.ts.map +1 -0
  494. package/dist/commands/user/list.js +148 -0
  495. package/dist/commands/user/list.js.map +1 -0
  496. package/dist/commands/user/me.d.ts +17 -0
  497. package/dist/commands/user/me.d.ts.map +1 -0
  498. package/dist/commands/user/me.js +49 -0
  499. package/dist/commands/user/me.js.map +1 -0
  500. package/dist/commands/workspace/add-users.d.ts +76 -0
  501. package/dist/commands/workspace/add-users.d.ts.map +1 -0
  502. package/dist/commands/workspace/add-users.js +154 -0
  503. package/dist/commands/workspace/add-users.js.map +1 -0
  504. package/dist/commands/workspace/create.d.ts +59 -0
  505. package/dist/commands/workspace/create.d.ts.map +1 -0
  506. package/dist/commands/workspace/create.js +163 -0
  507. package/dist/commands/workspace/create.js.map +1 -0
  508. package/dist/commands/workspace/delete.d.ts +67 -0
  509. package/dist/commands/workspace/delete.d.ts.map +1 -0
  510. package/dist/commands/workspace/delete.js +182 -0
  511. package/dist/commands/workspace/delete.js.map +1 -0
  512. package/dist/commands/workspace/folders.d.ts +40 -0
  513. package/dist/commands/workspace/folders.d.ts.map +1 -0
  514. package/dist/commands/workspace/folders.js +124 -0
  515. package/dist/commands/workspace/folders.js.map +1 -0
  516. package/dist/commands/workspace/get.d.ts +35 -0
  517. package/dist/commands/workspace/get.d.ts.map +1 -0
  518. package/dist/commands/workspace/get.js +62 -0
  519. package/dist/commands/workspace/get.js.map +1 -0
  520. package/dist/commands/workspace/list.d.ts +57 -0
  521. package/dist/commands/workspace/list.d.ts.map +1 -0
  522. package/dist/commands/workspace/list.js +125 -0
  523. package/dist/commands/workspace/list.js.map +1 -0
  524. package/dist/commands/workspace/remove-users.d.ts +47 -0
  525. package/dist/commands/workspace/remove-users.d.ts.map +1 -0
  526. package/dist/commands/workspace/remove-users.js +122 -0
  527. package/dist/commands/workspace/remove-users.js.map +1 -0
  528. package/dist/commands/workspace/update.d.ts +68 -0
  529. package/dist/commands/workspace/update.d.ts.map +1 -0
  530. package/dist/commands/workspace/update.js +237 -0
  531. package/dist/commands/workspace/update.js.map +1 -0
  532. package/dist/config/load.d.ts +33 -0
  533. package/dist/config/load.d.ts.map +1 -0
  534. package/dist/config/load.js +81 -0
  535. package/dist/config/load.js.map +1 -0
  536. package/dist/index.d.ts +3 -0
  537. package/dist/index.d.ts.map +1 -0
  538. package/dist/index.js +4 -0
  539. package/dist/index.js.map +1 -0
  540. package/dist/types/global-flags.d.ts +69 -0
  541. package/dist/types/global-flags.d.ts.map +1 -0
  542. package/dist/types/global-flags.js +170 -0
  543. package/dist/types/global-flags.js.map +1 -0
  544. package/dist/types/ids.d.ts +38 -0
  545. package/dist/types/ids.d.ts.map +1 -0
  546. package/dist/types/ids.js +51 -0
  547. package/dist/types/ids.js.map +1 -0
  548. package/dist/types/json.d.ts +60 -0
  549. package/dist/types/json.d.ts.map +1 -0
  550. package/dist/types/json.js +33 -0
  551. package/dist/types/json.js.map +1 -0
  552. package/dist/utils/errors.d.ts +121 -0
  553. package/dist/utils/errors.d.ts.map +1 -0
  554. package/dist/utils/errors.js +264 -0
  555. package/dist/utils/errors.js.map +1 -0
  556. package/dist/utils/logger.d.ts +39 -0
  557. package/dist/utils/logger.d.ts.map +1 -0
  558. package/dist/utils/logger.js +49 -0
  559. package/dist/utils/logger.js.map +1 -0
  560. package/dist/utils/output/envelope.d.ts +140 -0
  561. package/dist/utils/output/envelope.d.ts.map +1 -0
  562. package/dist/utils/output/envelope.js +120 -0
  563. package/dist/utils/output/envelope.js.map +1 -0
  564. package/dist/utils/output/json.d.ts +10 -0
  565. package/dist/utils/output/json.d.ts.map +1 -0
  566. package/dist/utils/output/json.js +12 -0
  567. package/dist/utils/output/json.js.map +1 -0
  568. package/dist/utils/output/ndjson.d.ts +92 -0
  569. package/dist/utils/output/ndjson.d.ts.map +1 -0
  570. package/dist/utils/output/ndjson.js +33 -0
  571. package/dist/utils/output/ndjson.js.map +1 -0
  572. package/dist/utils/output/select.d.ts +22 -0
  573. package/dist/utils/output/select.d.ts.map +1 -0
  574. package/dist/utils/output/select.js +47 -0
  575. package/dist/utils/output/select.js.map +1 -0
  576. package/dist/utils/output/table.d.ts +32 -0
  577. package/dist/utils/output/table.d.ts.map +1 -0
  578. package/dist/utils/output/table.js +133 -0
  579. package/dist/utils/output/table.js.map +1 -0
  580. package/dist/utils/output/text.d.ts +5 -0
  581. package/dist/utils/output/text.d.ts.map +1 -0
  582. package/dist/utils/output/text.js +32 -0
  583. package/dist/utils/output/text.js.map +1 -0
  584. package/dist/utils/parse-boundary.d.ts +53 -0
  585. package/dist/utils/parse-boundary.d.ts.map +1 -0
  586. package/dist/utils/parse-boundary.js +62 -0
  587. package/dist/utils/parse-boundary.js.map +1 -0
  588. package/dist/utils/redact.d.ts +54 -0
  589. package/dist/utils/redact.d.ts.map +1 -0
  590. package/dist/utils/redact.js +154 -0
  591. package/dist/utils/redact.js.map +1 -0
  592. package/dist/utils/request-id.d.ts +17 -0
  593. package/dist/utils/request-id.d.ts.map +1 -0
  594. package/dist/utils/request-id.js +26 -0
  595. package/dist/utils/request-id.js.map +1 -0
  596. package/package.json +87 -0
@@ -0,0 +1,795 @@
1
+ /**
2
+ * Column-value writer (`cli-design.md` §5.3, `v0.1-plan.md` §3 M5a).
3
+ *
4
+ * The write half of the column-value abstraction: takes a resolved
5
+ * column + a raw user-supplied string and produces the Monday wire
6
+ * payload Monday's `change_simple_column_value` /
7
+ * `change_column_value` / `change_multiple_column_values` mutations
8
+ * accept.
9
+ *
10
+ * **Two entry points.** Nine of the ten allowlisted types translate
11
+ * purely locally — no network, no clock dependency beyond the date
12
+ * module's injectable clock — and live behind the sync
13
+ * `translateColumnValue`. `people` is the exception: email→ID
14
+ * resolution can hit the network. Rather than forcing a
15
+ * `Promise<TranslatedColumnValue>` on every call site for the nine
16
+ * sync types, `translateColumnValueAsync` is the unified async entry
17
+ * point the command layer always calls. It delegates to the sync
18
+ * version for non-people types and dispatches to `parsePeopleInput`
19
+ * for `people`. M5b's write surface goes through async exclusively
20
+ * (people may appear in any `--set` bundle).
21
+ *
22
+ * **Scope.** All ten allowlisted types translate:
23
+ * `text` / `long_text` / `numbers` (simple-string payloads, M5a
24
+ * skeleton); `status` / `dropdown` (rich-object payloads); `date`
25
+ * (rich, with relative-token resolution against the profile
26
+ * timezone); `people` (rich, with `me`-token + email resolution via
27
+ * the M3 `userByEmail` directory cache); and the M8 firm additions
28
+ * `link` / `email` / `phone` (pipe-form parsers in `links.ts` /
29
+ * `emails.ts` / `phones.ts`; same `change_column_value` wire path
30
+ * as the v0.1 rich types).
31
+ *
32
+ * **Date resolution context** (cli-design §5.3 step 3 + the
33
+ * "Relative dates and timezone" subsection). Relative tokens
34
+ * (`today`, `+3d`, `+2h`) need a clock + a timezone; both come
35
+ * from `TranslateColumnValueInputs.dateResolution`. Defaults to
36
+ * the system clock + system tz when omitted — M5b's command
37
+ * layer plumbs `MONDAY_TIMEZONE` env override through this slot.
38
+ * Tests inject a deterministic clock for DST-boundary coverage.
39
+ * The actual resolution machinery lives in `dates.ts`; this
40
+ * module just delegates and packages the result alongside the
41
+ * other column types.
42
+ *
43
+ * **People resolution context** (cli-design §5.3 step 3 line
44
+ * 728-734 + the `me` token rule line 704-707). Email lookups +
45
+ * `me` resolution come through
46
+ * `TranslateColumnValueAsyncInputs.peopleResolution`, which
47
+ * carries `resolveMe` (mirroring `filters.ts`'s slot, so the
48
+ * same M5b wiring resolves `me` for both filter reads and
49
+ * `--set` writes) and `resolveEmail` (M5b wires this to
50
+ * `resolvers.userByEmail`). Required for people columns; ignored
51
+ * for everything else. The actual parsing machinery lives in
52
+ * `people.ts`.
53
+ *
54
+ * **Mutation selection** (`cli-design.md` §5.3 step 5) lives in
55
+ * `selectMutation` below — single simple → `change_simple_column_value`;
56
+ * single rich → `change_column_value`; N (any combo) →
57
+ * `change_multiple_column_values` (atomic on Monday's side). The
58
+ * multi form re-wraps `long_text`'s simple bare string as
59
+ * `{ text: <value> }` because Monday's per-column blob inside
60
+ * `change_multiple_column_values` requires the object form for
61
+ * `long_text` (a wire-shape divergence from
62
+ * `change_simple_column_value`'s bare-string acceptance — pinned
63
+ * via fixture in the unit suite, logged as a spec gap in
64
+ * `v0.1-plan.md` §3 M5a for cli-design backfill).
65
+ *
66
+ * **No CLI-side label-to-index lookup.** Per `cli-design.md` §5.3
67
+ * step 3: the CLI emits `{ "label": ... }` for label input and
68
+ * `{ "index": N }` for numeric input on `status`; it does *not*
69
+ * traverse `column.settings_str` to resolve labels to their stable
70
+ * indexes. Same shape for `dropdown` — `{ "labels": [...] }` for
71
+ * label input, `{ "ids": [...] }` for all-numeric input. Monday is
72
+ * the validator of last resort; the translator's contract is
73
+ * "produce the documented wire shape, let Monday reject typos as
74
+ * `validation_failed`".
75
+ *
76
+ * **Monday `JSON` scalar discipline** (`cli-design.md` §5.3 step 4).
77
+ * Every payload is a plain JS value (string for the simple form,
78
+ * plain object for the rich form). The SDK / fetch layer is
79
+ * responsible for stringifying at the wire boundary — this module
80
+ * never `JSON.stringify`s. The unit tests in
81
+ * `tests/unit/api/column-values.test.ts` pin the exact wire shape
82
+ * per type as a fixture so M5b and v0.2's bulk surface inherit the
83
+ * rule unchanged.
84
+ *
85
+ * **`--set-raw` escape hatch (M8).** v0.1 had no escape hatch;
86
+ * v0.2's M8 milestone added `--set-raw <col>=<json>` (see
87
+ * `src/api/raw-write.ts`) for column types that don't have a
88
+ * friendly translator yet. Non-allowlisted column types still
89
+ * surface `unsupported_column_type` keyed by roadmap category per
90
+ * `column-types.ts getColumnRoadmapCategory`: tentative writer-
91
+ * expansion types (`tags` / `board_relation` / `dependency`) slipped
92
+ * to v0.3 at M18 close — they get `deferred_to: "v0.3"` plus a
93
+ * `--set-raw` hint, read-only-forever types get
94
+ * `read_only: true`, anything else gets `deferred_to: "future"`
95
+ * with a `--set-raw` hint when the underlying mutation is shaped
96
+ * like `change_column_value`. The M8 contract is "we translate the
97
+ * ten allowlisted types and reject everything else with
98
+ * category-accurate guidance, pointing tentative + future-shaped
99
+ * targets at `--set-raw`."
100
+ */
101
+ import { ApiError, UsageError } from '../utils/errors.js';
102
+ import { getColumnRoadmapCategory, isFilesShapedType, isWritableColumnType, } from './column-types.js';
103
+ import { parseDateInput, } from './dates.js';
104
+ import { parsePeopleInput, } from './people.js';
105
+ import { parseLinkInput } from './links.js';
106
+ import { parseEmailInput } from './emails.js';
107
+ import { parsePhoneInput } from './phones.js';
108
+ /**
109
+ * Translates a single `<column>=<value>` pair into the Monday wire
110
+ * payload. **Sync entry point — handles the nine types whose
111
+ * translation is purely local computation** (`text` / `long_text` /
112
+ * `numbers` / `status` / `dropdown` / `date` / `link` / `email` /
113
+ * `phone`). For `people` columns, use `translateColumnValueAsync`:
114
+ * people resolution can hit the network (email→ID lookup) and is
115
+ * therefore async-only.
116
+ *
117
+ * **Throws** `ApiError`:
118
+ * - `unsupported_column_type` — type not in the friendly
119
+ * allowlist. Carries `column_id` + `type` plus per-category
120
+ * details: `deferred_to: "v0.3"` for the tentative writer-
121
+ * expansion row that slipped from v0.2 (`tags` /
122
+ * `board_relation` / `dependency`), `read_only: true` for
123
+ * read-only-forever types (mirror / formula / auto_number /
124
+ * creation_log / last_updated / item_id), `deferred_to:
125
+ * "future"` for anything else. The `--set-raw` escape hatch
126
+ * (M8) accepts most non-allowlisted types.
127
+ * - `internal_error` — sync entry was called on a `people`
128
+ * column. Programmer error: the write surface always uses
129
+ * `translateColumnValueAsync`. The check exists so a future
130
+ * contributor doesn't accidentally regress to a sync code
131
+ * path that silently mis-translates people input.
132
+ *
133
+ * **Throws** `UsageError`:
134
+ * - `usage_error` — for status / dropdown numeric input that
135
+ * exceeds `Number.MAX_SAFE_INTEGER`, dropdown input that
136
+ * contains no labels and no IDs after trim + filter, `date`
137
+ * input that does not match any supported form (ISO date,
138
+ * ISO date+time, or relative token), invalid URL / email /
139
+ * phone in the link / email / phone translators, or
140
+ * pipe-form input with empty leader/trailer in those types.
141
+ * See `unsafeIntegerError`, the dropdown empty-input branch,
142
+ * `dates.parseDateInput`, `links.parseLinkInput`,
143
+ * `emails.parseEmailInput`, and `phones.parsePhoneInput` for
144
+ * the documented messages.
145
+ */
146
+ export const translateColumnValue = (inputs) => {
147
+ const { column, value, dateResolution } = inputs;
148
+ if (!isWritableColumnType(column.type)) {
149
+ throw unsupportedColumnTypeError(column.id, column.type);
150
+ }
151
+ switch (column.type) {
152
+ case 'text':
153
+ return simple(column.id, 'text', value);
154
+ case 'long_text':
155
+ return simple(column.id, 'long_text', value);
156
+ case 'numbers':
157
+ return simple(column.id, 'numbers', value);
158
+ case 'status':
159
+ return rich(column.id, 'status', value, translateStatus(value, column.id));
160
+ case 'dropdown':
161
+ return rich(column.id, 'dropdown', value, translateDropdown(column.id, value));
162
+ case 'date': {
163
+ const parsed = parseDateInput(value, column.id, dateResolution);
164
+ return {
165
+ columnId: column.id,
166
+ columnType: 'date',
167
+ rawInput: value,
168
+ payload: { format: 'rich', value: parsed.payload },
169
+ resolvedFrom: parsed.resolvedFrom,
170
+ peopleResolution: null,
171
+ };
172
+ }
173
+ case 'link': {
174
+ // LinkPayload's `{url, text}` literal type is structurally a
175
+ // JsonObject (both fields are JsonValues) but TypeScript treats
176
+ // closed object types as not implicitly satisfying the open
177
+ // index signature. Same cast pattern the people translator
178
+ // uses; see src/types/json.ts for the documented trade.
179
+ const parsed = parseLinkInput(value, column.id);
180
+ return {
181
+ columnId: column.id,
182
+ columnType: 'link',
183
+ rawInput: value,
184
+ payload: { format: 'rich', value: parsed },
185
+ resolvedFrom: null,
186
+ peopleResolution: null,
187
+ };
188
+ }
189
+ case 'email': {
190
+ const parsed = parseEmailInput(value, column.id);
191
+ return {
192
+ columnId: column.id,
193
+ columnType: 'email',
194
+ rawInput: value,
195
+ payload: { format: 'rich', value: parsed },
196
+ resolvedFrom: null,
197
+ peopleResolution: null,
198
+ };
199
+ }
200
+ case 'phone': {
201
+ const parsed = parsePhoneInput(value, column.id);
202
+ return {
203
+ columnId: column.id,
204
+ columnType: 'phone',
205
+ rawInput: value,
206
+ payload: { format: 'rich', value: parsed },
207
+ resolvedFrom: null,
208
+ peopleResolution: null,
209
+ };
210
+ }
211
+ case 'people':
212
+ // People translation is async (email→ID lookup hits the
213
+ // directory cache or the `users(emails:)` GraphQL endpoint).
214
+ // Surface as `internal_error` so a future contributor who
215
+ // accidentally routes a people column through the sync entry
216
+ // point sees a loud programmer-error message rather than a
217
+ // silent payload corruption. M5b's command layer always uses
218
+ // `translateColumnValueAsync` for write paths.
219
+ throw new ApiError('internal_error', `translateColumnValue (sync) called on people column "${column.id}". ` +
220
+ `People resolution is async — use translateColumnValueAsync.`, {
221
+ details: {
222
+ column_id: column.id,
223
+ column_type: column.type,
224
+ hint: 'use translateColumnValueAsync from src/api/column-values.ts',
225
+ },
226
+ });
227
+ }
228
+ };
229
+ /**
230
+ * Async entry point — handles every type in `WRITABLE_COLUMN_TYPES`.
231
+ * Delegates to `translateColumnValue` (sync) for non-people columns;
232
+ * dispatches to `parsePeopleInput` for `people`.
233
+ *
234
+ * The `peopleResolution` slot is required when `column.type ===
235
+ * 'people'`. Omitting it for a people column raises `internal_error`
236
+ * (programmer wiring bug) — agents see this as a loud failure
237
+ * rather than a silent fallback to the unsupported-type path.
238
+ *
239
+ * **Throws** every error `translateColumnValue` throws (delegated
240
+ * unchanged for non-people types), plus:
241
+ * - `ApiError(user_not_found)` — bubbled from `peopleResolution.
242
+ * resolveEmail` for unknown emails. cli-design.md §5.3 step 3
243
+ * line 733 pins the contract.
244
+ * - `UsageError(usage_error)` — empty / numeric people input.
245
+ * See `parsePeopleInput` for the per-branch messages.
246
+ * - `ApiError(internal_error)` — `peopleResolution` was omitted
247
+ * for a people column.
248
+ */
249
+ /**
250
+ * Builds the per-type "clear" payload for `monday item clear`. The
251
+ * dedicated verb keeps `--set <col>=<value>` and the clear path
252
+ * non-overlapping (cli-design §5.3 step 3 explicitly notes that
253
+ * empty-string input on `status` is `{label: ""}`, NOT a clear; the
254
+ * translator is value-shaping, not intent-disambiguating).
255
+ *
256
+ * Per-type clear shapes:
257
+ * - `text` / `long_text` / `numbers` → simple bare empty string
258
+ * (`change_simple_column_value(value: "")` clears the cell).
259
+ * - `status` / `dropdown` / `date` / `people` → empty JSON object
260
+ * `{}` via `change_column_value(value: JSON!)`. Monday's
261
+ * official "clear all column values" pattern.
262
+ *
263
+ * **Throws** `unsupported_column_type` for types outside the v0.1
264
+ * writable allowlist — same code path the value translator uses,
265
+ * keyed by roadmap category (`deferred_to: "v0.3"` /
266
+ * `read_only: true` / `deferred_to: "future"`). Agents see the
267
+ * same per-category surface across `item set` / `item update` /
268
+ * `item clear`, so a wrapper that triages on the error details
269
+ * doesn't need a per-verb branch.
270
+ *
271
+ * Sync entry — `people` clear doesn't need email resolution (the
272
+ * payload is `{}` regardless of who's currently assigned). Reused
273
+ * by the `item clear` dry-run + live paths.
274
+ */
275
+ export const translateColumnClear = (column) => {
276
+ if (!isWritableColumnType(column.type)) {
277
+ throw unsupportedColumnTypeError(column.id, column.type);
278
+ }
279
+ switch (column.type) {
280
+ case 'text':
281
+ case 'long_text':
282
+ case 'numbers':
283
+ return {
284
+ columnId: column.id,
285
+ columnType: column.type,
286
+ rawInput: '',
287
+ payload: { format: 'simple', value: '' },
288
+ resolvedFrom: null,
289
+ peopleResolution: null,
290
+ };
291
+ case 'status':
292
+ case 'dropdown':
293
+ case 'date':
294
+ case 'people':
295
+ case 'link':
296
+ case 'email':
297
+ case 'phone':
298
+ // Rich types clear to `{}` via change_column_value per
299
+ // cli-design §5.3 "Clearing column values" table. M8 firm row
300
+ // (link / email / phone) extends the table verbatim — same
301
+ // payload, same mutation, same dispatch.
302
+ return {
303
+ columnId: column.id,
304
+ columnType: column.type,
305
+ rawInput: '',
306
+ payload: { format: 'rich', value: {} },
307
+ resolvedFrom: null,
308
+ peopleResolution: null,
309
+ };
310
+ }
311
+ };
312
+ export const translateColumnValueAsync = async (inputs) => {
313
+ if (inputs.column.type !== 'people') {
314
+ return translateColumnValue(inputs);
315
+ }
316
+ const { peopleResolution } = inputs;
317
+ if (peopleResolution === undefined) {
318
+ throw new ApiError('internal_error', `translateColumnValueAsync requires a peopleResolution context for ` +
319
+ `people column "${inputs.column.id}". M5b's command layer wires ` +
320
+ `resolveMe + resolveEmail through this slot.`, {
321
+ details: {
322
+ column_id: inputs.column.id,
323
+ column_type: 'people',
324
+ hint: 'pass { peopleResolution: { resolveMe, resolveEmail } } when ' +
325
+ 'calling translateColumnValueAsync.',
326
+ },
327
+ });
328
+ }
329
+ const parsed = await parsePeopleInput(inputs.value, inputs.column.id, peopleResolution);
330
+ return {
331
+ columnId: inputs.column.id,
332
+ columnType: 'people',
333
+ rawInput: inputs.value,
334
+ // PeoplePayload is structurally a JsonObject — it has one
335
+ // declared key (`personsAndTeams`) whose value is a readonly
336
+ // array of plain objects with `id: number` and `kind:
337
+ // 'person'` (both JsonValues). TypeScript treats closed
338
+ // object types as not implicitly satisfying open index
339
+ // signatures even when their values all line up, so the cast
340
+ // is structural-typing-only. Runtime shape is unchanged; the
341
+ // wire-shape fixture in the unit suite is the load-bearing
342
+ // pin. See `src/types/json.ts` for the JsonObject definition
343
+ // and the closed-type-literal note that documents this trade.
344
+ payload: {
345
+ format: 'rich',
346
+ value: parsed.payload,
347
+ },
348
+ resolvedFrom: null,
349
+ peopleResolution: parsed.resolution,
350
+ };
351
+ };
352
+ const simple = (columnId, columnType, rawInput) => ({
353
+ columnId,
354
+ columnType,
355
+ payload: { format: 'simple', value: rawInput },
356
+ rawInput,
357
+ // Only the date / people translators populate resolution echoes;
358
+ // every other type emits null so the dry-run engine has one shape
359
+ // to read per slot.
360
+ resolvedFrom: null,
361
+ peopleResolution: null,
362
+ });
363
+ const rich = (columnId, columnType, rawInput, value) => ({
364
+ columnId,
365
+ columnType,
366
+ payload: { format: 'rich', value },
367
+ rawInput,
368
+ resolvedFrom: null,
369
+ peopleResolution: null,
370
+ });
371
+ /**
372
+ * Status payload per `cli-design.md` §5.3 step 3:
373
+ * - Non-negative integer input → `{ index: N }` (number, not
374
+ * string — Monday's status indexes are integers and the
375
+ * `change_*_column_value` JSON scalar serialises a number as
376
+ * a number).
377
+ * - Anything else → `{ label: <verbatim> }`. No NFC / case-fold
378
+ * here: the resolver upstream normalised the *column* token,
379
+ * not the *value* — Monday matches the label against the
380
+ * board's settings server-side, and a label like " Done "
381
+ * with surrounding whitespace would be agent-side noise we
382
+ * should preserve so Monday's `validation_failed` points at
383
+ * the right input.
384
+ *
385
+ * Empty string emits `{ label: "" }` and is *not* treated as a
386
+ * "clear" intent — `monday item clear` is the dedicated verb for
387
+ * that. Pinned in tests so future contributors don't add silent
388
+ * fall-through-to-clear behaviour.
389
+ *
390
+ * **Safe-integer bound.** Numeric input larger than
391
+ * `Number.MAX_SAFE_INTEGER` (2^53 - 1) silently rounds via
392
+ * `Number(raw)`; very long digit strings yield `Infinity`,
393
+ * which `JSON.stringify` serialises as `null`. Either case
394
+ * would corrupt the wire shape. We throw `usage_error` rather
395
+ * than silently routing to the label path because the input
396
+ * was unambiguously the index path (all digits, no signs / no
397
+ * decimals) — sending `{label: "999999999999999999999"}` to
398
+ * Monday would be a worse surprise than a local error.
399
+ */
400
+ const translateStatus = (raw, columnId) => {
401
+ if (NON_NEGATIVE_INTEGER.test(raw)) {
402
+ const parsed = Number(raw);
403
+ if (!Number.isSafeInteger(parsed)) {
404
+ throw unsafeIntegerError(columnId, 'status', raw);
405
+ }
406
+ return { index: parsed };
407
+ }
408
+ return { label: raw };
409
+ };
410
+ /**
411
+ * Dropdown payload per `cli-design.md` §5.3 step 3:
412
+ * - Comma-split, per-segment trimmed, empty segments dropped.
413
+ * - All remaining segments numeric → `{ ids: [N1, N2, ...] }`
414
+ * (numbers, not strings — dropdown IDs from Monday's
415
+ * `settings_str.labels[].id` are integers).
416
+ * - Any non-numeric segment → `{ labels: [s1, s2, ...] }`
417
+ * (strings, verbatim post-trim).
418
+ *
419
+ * **Disambiguation rule, pinned.** A label literally named `"1"`
420
+ * cannot be set via `--set tags=1` — that input parses as the
421
+ * `id` path. The M8 `--set-raw tags='{"labels":["1"]}'` escape
422
+ * hatch is the workaround. Surfaced in the module header as a
423
+ * known limitation; documented via unit test rather than runtime
424
+ * warning because it's a corner case (Monday-generated dropdown
425
+ * labels are strings the user typed; integer-only labels are
426
+ * vanishingly rare).
427
+ *
428
+ * **Empty-after-filter throws `usage_error`.** Inputs like
429
+ * `--set tags=""` or `--set tags=" , "` carry no labels and no
430
+ * IDs — there's nothing to translate. Throwing `usage_error`
431
+ * (rather than emitting `{ labels: [] }`) keeps `--set` and
432
+ * `monday item clear` non-overlapping: the only way to clear
433
+ * a dropdown is the dedicated verb. Pinned via test.
434
+ */
435
+ const translateDropdown = (columnId, raw) => {
436
+ const parts = raw
437
+ .split(',')
438
+ .map((segment) => segment.trim())
439
+ .filter((segment) => segment.length > 0);
440
+ if (parts.length === 0) {
441
+ throw new UsageError(`Dropdown column "${columnId}" needs at least one label or numeric ID. ` +
442
+ `Got "${raw}". To clear a dropdown column, use ` +
443
+ `\`monday item clear <iid> ${columnId} [--board <bid>]\` instead.`, {
444
+ details: {
445
+ column_id: columnId,
446
+ column_type: 'dropdown',
447
+ raw_input: raw,
448
+ hint: 'pass a comma-separated list of labels (e.g. --set ' +
449
+ `${columnId}='Backend,Frontend') or numeric IDs (--set ` +
450
+ `${columnId}=1,2). The --set-raw escape hatch accepts the ` +
451
+ `literal Monday wire shape if neither form fits.`,
452
+ },
453
+ });
454
+ }
455
+ if (parts.every((part) => NON_NEGATIVE_INTEGER.test(part))) {
456
+ const ids = parts.map((part) => {
457
+ const parsed = Number(part);
458
+ if (!Number.isSafeInteger(parsed)) {
459
+ throw unsafeIntegerError(columnId, 'dropdown', part);
460
+ }
461
+ return parsed;
462
+ });
463
+ return { ids };
464
+ }
465
+ return { labels: parts };
466
+ };
467
+ /**
468
+ * Builds the `usage_error` for numeric input that exceeds
469
+ * `Number.MAX_SAFE_INTEGER` (2^53 - 1). Shared by status (index)
470
+ * and dropdown (id) because the failure mode is identical: the
471
+ * input parsed as an integer-shaped number but `Number(raw)`
472
+ * lost precision (or yielded `Infinity` for digit strings ~310+
473
+ * chars long). Either case would land at Monday as the wrong
474
+ * integer or as `null` after `JSON.stringify`. The error carries
475
+ * the raw input so an agent's debug log shows exactly what they
476
+ * sent, and a hint nudging them toward the label path. The M8
477
+ * `--set-raw` escape hatch is the paste-ready alternative when
478
+ * the friendly translator can't accept the input.
479
+ */
480
+ const unsafeIntegerError = (columnId, columnType, raw) => {
481
+ const titled = columnType === 'status' ? 'Status' : 'Dropdown';
482
+ // status uses indexes ("first label is index 0"); dropdown uses
483
+ // numeric IDs from settings_str.labels[].id. Different word in
484
+ // the message so an agent doesn't see "smaller ID" on a status
485
+ // column where the concept is "index", not "ID".
486
+ const noun = columnType === 'status' ? 'indexes' : 'IDs';
487
+ const smaller = columnType === 'status' ? 'a smaller index' : 'a smaller ID';
488
+ // Hints interpolate the actual `columnId` so an agent can
489
+ // paste-and-edit. Status hint uses the literal word "label"
490
+ // because the label-vs-index split lives in cli-design.md §5.3
491
+ // step 3; dropdown hint shows both the labels and IDs forms.
492
+ const hint = columnType === 'status'
493
+ ? `use a status label (e.g. --set ${columnId}=Done) or an index < 2^53`
494
+ : `use dropdown labels (e.g. --set ${columnId}=Backend,Frontend) ` +
495
+ `or IDs < 2^53`;
496
+ return new UsageError(`${titled} column "${columnId}" got numeric input "${raw}" that ` +
497
+ `exceeds JavaScript's safe-integer range (2^53 - 1, i.e. ` +
498
+ `9007199254740991). Number(raw) would lose precision or yield ` +
499
+ `Infinity, corrupting the wire shape. Monday's ${columnType} ` +
500
+ `${noun} are small non-negative integers — pass a label or ` +
501
+ `${smaller}, or use --set-raw <col>=<json> with the literal ` +
502
+ `Monday wire shape.`, {
503
+ details: {
504
+ column_id: columnId,
505
+ column_type: columnType,
506
+ raw_input: raw,
507
+ hint,
508
+ },
509
+ });
510
+ };
511
+ /**
512
+ * Non-negative integer: matches `0`, `42`, `1234567` but not `-1`,
513
+ * `0.5`, `1e3`, or `42 ` (with trailing whitespace). Used to gate
514
+ * `status` index input and `dropdown` ID input. Negatives go to
515
+ * the label / labels path because Monday status indexes are >= 0
516
+ * and dropdown IDs are auto-incremented positive integers.
517
+ */
518
+ const NON_NEGATIVE_INTEGER = /^\d+$/u;
519
+ /**
520
+ * Picks the right Monday mutation for a list of translated column
521
+ * values per `cli-design.md` §5.3 step 5.
522
+ *
523
+ * Dispatch:
524
+ * - 1 translated value, simple → `change_simple_column_value`
525
+ * (bare-string `value`).
526
+ * - 1 translated value, rich → `change_column_value` (object
527
+ * `value`).
528
+ * - N translated values (any combo of simple / rich) →
529
+ * `change_multiple_column_values`. Atomic on Monday's side —
530
+ * either every column update lands or none do.
531
+ *
532
+ * **Duplicate column IDs throw `usage_error`.** Bundling two
533
+ * `--set status=Done --set status=Doing` would have last-write-wins
534
+ * semantics inside `change_multiple_column_values`'s map and the
535
+ * agent has no way to know which one won. Surfacing as a typed
536
+ * error at the bundling boundary keeps mutations deterministic;
537
+ * the command layer (M5b) can catch + reframe with the literal
538
+ * `--set` flags it received.
539
+ *
540
+ * **Empty input throws `usage_error`.** Defensive — the command
541
+ * layer is supposed to validate `--set` was supplied, but the
542
+ * helper shouldn't return a malformed `change_multiple_column_values`
543
+ * with an empty map.
544
+ *
545
+ * **`long_text` re-wrap, spec gap.** Monday's
546
+ * `change_multiple_column_values(column_values: JSON!)` accepts a
547
+ * map where each value is either a string or a per-type object.
548
+ * For `long_text` specifically, the per-type object is `{text:
549
+ * <value>}` — so the bare string that `change_simple_column_value`
550
+ * accepts is *not* the right shape inside the multi mutation.
551
+ * `text` / `numbers` stay as bare strings. This wire-shape
552
+ * divergence isn't called out in cli-design.md §5.3 step 5; logged
553
+ * as a spec gap in v0.1-plan.md §3 M5a for backfill. Pinned via
554
+ * fixture in the unit suite.
555
+ */
556
+ export const selectMutation = (translated) => {
557
+ if (translated.length === 0) {
558
+ throw new UsageError('selectMutation requires at least one translated column value. ' +
559
+ 'The command layer should reject the no-`--set` case before ' +
560
+ 'reaching this helper.', { details: { translated_count: 0 } });
561
+ }
562
+ if (translated.length === 1) {
563
+ const only = translated[0];
564
+ /* c8 ignore next 4 — defensive: length === 1 was just checked,
565
+ so `only` cannot be undefined. The guard exists for
566
+ `noUncheckedIndexedAccess` narrowing. */
567
+ if (only === undefined) {
568
+ throw new UsageError('selectMutation: unreachable indexing guard');
569
+ }
570
+ if (only.payload.format === 'simple') {
571
+ return {
572
+ kind: 'change_simple_column_value',
573
+ columnId: only.columnId,
574
+ value: only.payload.value,
575
+ };
576
+ }
577
+ return {
578
+ kind: 'change_column_value',
579
+ columnId: only.columnId,
580
+ value: only.payload.value,
581
+ };
582
+ }
583
+ // Multi: bundle every translated value into the column_values map.
584
+ // Delegates to `bundleColumnValues` so the long_text re-wrap rule
585
+ // and the duplicate-id gate stay shared with M9's create_item /
586
+ // create_subitem bundling — one source of truth for the
587
+ // `column_values: JSON!` wire shape across every Monday mutation
588
+ // that accepts it.
589
+ const columnValues = bundleColumnValues(translated);
590
+ return { kind: 'change_multiple_column_values', columnValues };
591
+ };
592
+ /**
593
+ * Projects one translated column value into the per-column blob
594
+ * `change_multiple_column_values` accepts. Three cases:
595
+ *
596
+ * - rich payload → pass the object through unchanged.
597
+ * - simple payload, type `long_text` → wrap as `{ text: <value> }`.
598
+ * Monday's multi-mutation blob for `long_text` requires the
599
+ * object form (spec gap; see `selectMutation` JSDoc).
600
+ * - simple payload, any other type → bare string.
601
+ */
602
+ const projectForMulti = (t) => {
603
+ if (t.payload.format === 'rich') {
604
+ return t.payload.value;
605
+ }
606
+ if (t.columnType === 'long_text') {
607
+ return { text: t.payload.value };
608
+ }
609
+ return t.payload.value;
610
+ };
611
+ /**
612
+ * Bundles a list of translated column values into Monday's
613
+ * `column_values: JSON!` map shape — the input parameter
614
+ * `change_multiple_column_values`, `create_item`, and `create_subitem`
615
+ * all accept. Per-column projection routes through `projectForMulti`,
616
+ * so the `long_text` re-wrap (`{ text: <value> }` inside the map)
617
+ * applies uniformly across every wire surface that takes a
618
+ * `column_values` map.
619
+ *
620
+ * **Why a shared helper.** `selectMutation` builds this map for the
621
+ * multi-update case (M5b); M9's `item create` needs the same shape
622
+ * to bundle `--set` values into `create_item.column_values` /
623
+ * `create_subitem.column_values`. The single-round-trip exit gate
624
+ * (cli-design §5.8) requires the create payload bundles every
625
+ * translated value into one map — and the shape rule should not
626
+ * drift between update and create. The fixture pin in
627
+ * `tests/unit/api/column-values.test.ts` covers both consumers.
628
+ *
629
+ * **Duplicate-column-ID throws `usage_error`.** Same rule as
630
+ * `selectMutation`'s multi case — bundling two values for the same
631
+ * column would silently keep one. The cli-design §5.3 step 2
632
+ * mutual-exclusion contract enforces this resolution-time; the
633
+ * helper duplicates the gate so misuse from a non-command caller
634
+ * still surfaces a typed error.
635
+ */
636
+ export const bundleColumnValues = (translated) => {
637
+ const out = {};
638
+ const seen = new Set();
639
+ for (const t of translated) {
640
+ if (seen.has(t.columnId)) {
641
+ // Wording matches the historical `selectMutation` message
642
+ // because existing tests assert on the `Multiple --set values
643
+ // target column` regex; keeping it stable preserves those
644
+ // assertions across both consumers (multi-update + create).
645
+ throw new UsageError(`Multiple --set values target column "${t.columnId}". ` +
646
+ `change_multiple_column_values is a map keyed by column ID; ` +
647
+ `bundling two values for the same column would silently keep ` +
648
+ `only one. Pass at most one --set per column.`, {
649
+ details: {
650
+ column_id: t.columnId,
651
+ duplicate_count: translated.filter((other) => other.columnId === t.columnId).length,
652
+ },
653
+ });
654
+ }
655
+ seen.add(t.columnId);
656
+ out[t.columnId] = projectForMulti(t);
657
+ }
658
+ return out;
659
+ };
660
+ /**
661
+ * Builds the canonical `unsupported_column_type` error (`cli-design.md`
662
+ * §5.3 step 4 + §6.5). Branches on the type's roadmap category so
663
+ * agents get accurate guidance instead of a blanket "wait for the
664
+ * next version" hint.
665
+ *
666
+ * Three categories per `column-types.ts getColumnRoadmapCategory`:
667
+ *
668
+ * - **v0.3 writer-expansion candidates** (`tags` / `board_relation`
669
+ * / `dependency` — slipped from v0.2 tentative at M18 close)
670
+ * get `deferred_to: "v0.3"`. The M8 firm row (`link` / `email`
671
+ * / `phone`) shipped friendly translators in v0.2 and goes
672
+ * through the writable-allowlist branch, not this error path.
673
+ * - **read-only forever** (`mirror` / `formula` / `auto_number` /
674
+ * `creation_log` / `last_updated` / `item_id`) — Monday-computed
675
+ * columns that are not writable via the API regardless of CLI
676
+ * version. `read_only: true`, hint points at the underlying
677
+ * source column. cli-design.md §5.3 writer-expansion roadmap
678
+ * "read-only forever" row says this explicitly.
679
+ * - **future** (anything else) — `deferred_to: "future"`, generic
680
+ * message. Examples include `battery`, `item_assignees`,
681
+ * `time_tracking`, `files`, `rating`. The roadmap doesn't
682
+ * promise these for v0.2 or v0.3, so over-promising would be
683
+ * the same drift Codex M5b cleanup re-review caught.
684
+ *
685
+ * Exported for unit coverage.
686
+ */
687
+ export const unsupportedColumnTypeError = (columnId, type) => {
688
+ const category = getColumnRoadmapCategory(type);
689
+ if (category === 'read_only_forever') {
690
+ return new ApiError('unsupported_column_type', `Column "${columnId}" has type "${type}", which Monday computes ` +
691
+ `server-side and does not make writable via the API. This is ` +
692
+ `not a v0.1 limitation — Monday's API rejects write attempts ` +
693
+ `against this type regardless of CLI version, so no future ` +
694
+ `release will lift the restriction. Set the underlying source ` +
695
+ `column instead (e.g. for a mirror column, write to the column ` +
696
+ `the mirror reflects on the linked board).`, {
697
+ details: {
698
+ column_id: columnId,
699
+ type,
700
+ read_only: true,
701
+ hint: 'this column type is computed by Monday and is permanently ' +
702
+ 'read-only via the API. Do not attempt --set / --set-raw — ' +
703
+ 'identify the underlying source column (the column the ' +
704
+ 'mirror / formula / auto_number / etc. reflects) and write ' +
705
+ 'to that instead. See cli-design.md §5.3 writer-expansion ' +
706
+ 'roadmap (read-only-forever row) for the full type list.',
707
+ },
708
+ });
709
+ }
710
+ if (category === 'v0_2_writer_expansion') {
711
+ return new ApiError('unsupported_column_type', `Column "${columnId}" has type "${type}", which is not yet in the ` +
712
+ `friendly --set translator allowlist. The v0.2 writer-expansion ` +
713
+ `tentative row (tags / board_relation / dependency) slipped to ` +
714
+ `v0.3 at M18 close — friendly translators land then once the ` +
715
+ `per-account directory + linked-board enumeration design clears. ` +
716
+ `Use --set-raw <col>=<json> with the documented Monday wire shape ` +
717
+ `in the meantime.`, {
718
+ details: {
719
+ column_id: columnId,
720
+ type,
721
+ deferred_to: 'v0.3',
722
+ hint: `use --set-raw <col>=<json> with the Monday wire shape (e.g. ` +
723
+ `--set-raw ${columnId}='{"tag_ids":[1,2]}' for tags). ` +
724
+ `See https://developer.monday.com/api-reference/reference/` +
725
+ `column-types-reference for per-type wire shapes.`,
726
+ },
727
+ });
728
+ }
729
+ // category === 'future'
730
+ // Files-shaped types are pinned to `deferred_to: "v0.4"` per
731
+ // cli-design.md §5.3 writer-expansion roadmap (the "files" row).
732
+ // Monday writes these via `add_file_to_column` (multipart upload)
733
+ // rather than `change_column_value`, so the friendly translator
734
+ // can't translate them at all and `--set-raw` also rejects them
735
+ // (different code path; raw-write.ts emits the same v0.4
736
+ // deferral). Without this branch, files-shaped types would fall
737
+ // through to the generic `future` branch and contradict the
738
+ // contract — Codex M18 round-2 P2.
739
+ if (isFilesShapedType(type)) {
740
+ return new ApiError('unsupported_column_type', `Column "${columnId}" has type "${type}", which Monday writes ` +
741
+ `via add_file_to_column (multipart upload) rather than ` +
742
+ `change_column_value. The friendly --set translator can't ` +
743
+ `reach this surface; --set-raw <col>=<json> can't either. ` +
744
+ `Asset upload is pinned to v0.4 per cli-design.md §13.`, {
745
+ details: {
746
+ column_id: columnId,
747
+ type,
748
+ deferred_to: 'v0.4',
749
+ hint: 'asset upload is a v0.4 deferral; the underlying mutation ' +
750
+ '(add_file_to_column) requires multipart wire shape that ' +
751
+ 'the column-value path does not model.',
752
+ },
753
+ });
754
+ }
755
+ // `time_tracking` is pinned to `deferred_to: "v0.3"` per
756
+ // cli-design.md §5.3 writer-expansion roadmap row. It's a v0.3
757
+ // deferral because the semantics are start/stop verbs (not value
758
+ // writes), so the friendly translator can't represent it without
759
+ // a verb-shaped extension. `--set-raw` rejects similarly.
760
+ if (type === 'time_tracking') {
761
+ return new ApiError('unsupported_column_type', `Column "${columnId}" has type "time_tracking", which Monday ` +
762
+ `mutates via start/stop verbs rather than column-value writes. ` +
763
+ `The friendly --set translator and --set-raw both target ` +
764
+ `change_column_value-shaped types; time_tracking needs a ` +
765
+ `verb-shaped extension pinned for v0.3.`, {
766
+ details: {
767
+ column_id: columnId,
768
+ type,
769
+ deferred_to: 'v0.3',
770
+ hint: 'time_tracking uses start/stop verbs, not column-value ' +
771
+ 'writes. v0.3 plans a dedicated surface; until then there ' +
772
+ 'is no friendly or raw write path.',
773
+ },
774
+ });
775
+ }
776
+ return new ApiError('unsupported_column_type', `Column "${columnId}" has type "${type}", which is not in the ` +
777
+ `friendly --set translator allowlist (text, long_text, numbers, ` +
778
+ `status, dropdown, date, people, link, email, phone) and is not ` +
779
+ `pinned to a specific roadmap version. Try --set-raw <col>=<json> ` +
780
+ `with the documented Monday wire shape — that path accepts any ` +
781
+ `type Monday writes via change_column_value. Files-shaped types ` +
782
+ `(file) and read-only-forever types (mirror / formula / etc.) are ` +
783
+ `the exception; --set-raw rejects those at column-resolution time.`, {
784
+ details: {
785
+ column_id: columnId,
786
+ type,
787
+ deferred_to: 'future',
788
+ hint: 'use --set-raw <col>=<json> with the Monday wire shape if the ' +
789
+ 'type accepts change_column_value. Examples in this bucket ' +
790
+ '(battery, rating) are not yet scoped on the writer-expansion ' +
791
+ 'roadmap. See cli-design.md §5.3.',
792
+ },
793
+ });
794
+ };
795
+ //# sourceMappingURL=column-values.js.map