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.
- package/CHANGELOG.md +439 -0
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/dist/api/board-child-finder.d.ts +95 -0
- package/dist/api/board-child-finder.d.ts.map +1 -0
- package/dist/api/board-child-finder.js +89 -0
- package/dist/api/board-child-finder.js.map +1 -0
- package/dist/api/board-metadata.d.ts +162 -0
- package/dist/api/board-metadata.d.ts.map +1 -0
- package/dist/api/board-metadata.js +238 -0
- package/dist/api/board-metadata.js.map +1 -0
- package/dist/api/board-mutation-invalidation.d.ts +153 -0
- package/dist/api/board-mutation-invalidation.d.ts.map +1 -0
- package/dist/api/board-mutation-invalidation.js +136 -0
- package/dist/api/board-mutation-invalidation.js.map +1 -0
- package/dist/api/board-mutation-result.d.ts +97 -0
- package/dist/api/board-mutation-result.d.ts.map +1 -0
- package/dist/api/board-mutation-result.js +99 -0
- package/dist/api/board-mutation-result.js.map +1 -0
- package/dist/api/board-projection.d.ts +68 -0
- package/dist/api/board-projection.d.ts.map +1 -0
- package/dist/api/board-projection.js +79 -0
- package/dist/api/board-projection.js.map +1 -0
- package/dist/api/cache.d.ts +150 -0
- package/dist/api/cache.d.ts.map +1 -0
- package/dist/api/cache.js +418 -0
- package/dist/api/cache.js.map +1 -0
- package/dist/api/client.d.ts +162 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +205 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/column-mapping.d.ts +68 -0
- package/dist/api/column-mapping.d.ts.map +1 -0
- package/dist/api/column-mapping.js +117 -0
- package/dist/api/column-mapping.js.map +1 -0
- package/dist/api/column-mutation-result.d.ts +136 -0
- package/dist/api/column-mutation-result.d.ts.map +1 -0
- package/dist/api/column-mutation-result.js +130 -0
- package/dist/api/column-mutation-result.js.map +1 -0
- package/dist/api/column-types.d.ts +215 -0
- package/dist/api/column-types.d.ts.map +1 -0
- package/dist/api/column-types.js +195 -0
- package/dist/api/column-types.js.map +1 -0
- package/dist/api/column-values.d.ts +446 -0
- package/dist/api/column-values.d.ts.map +1 -0
- package/dist/api/column-values.js +795 -0
- package/dist/api/column-values.js.map +1 -0
- package/dist/api/columns.d.ts +205 -0
- package/dist/api/columns.d.ts.map +1 -0
- package/dist/api/columns.js +343 -0
- package/dist/api/columns.js.map +1 -0
- package/dist/api/complexity.d.ts +90 -0
- package/dist/api/complexity.d.ts.map +1 -0
- package/dist/api/complexity.js +194 -0
- package/dist/api/complexity.js.map +1 -0
- package/dist/api/dates.d.ts +150 -0
- package/dist/api/dates.d.ts.map +1 -0
- package/dist/api/dates.js +490 -0
- package/dist/api/dates.js.map +1 -0
- package/dist/api/destructive-gate.d.ts +107 -0
- package/dist/api/destructive-gate.d.ts.map +1 -0
- package/dist/api/destructive-gate.js +19 -0
- package/dist/api/destructive-gate.js.map +1 -0
- package/dist/api/dry-run.d.ts +338 -0
- package/dist/api/dry-run.d.ts.map +1 -0
- package/dist/api/dry-run.js +607 -0
- package/dist/api/dry-run.js.map +1 -0
- package/dist/api/emails.d.ts +60 -0
- package/dist/api/emails.d.ts.map +1 -0
- package/dist/api/emails.js +113 -0
- package/dist/api/emails.js.map +1 -0
- package/dist/api/errors.d.ts +82 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +434 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/filters.d.ts +198 -0
- package/dist/api/filters.d.ts.map +1 -0
- package/dist/api/filters.js +328 -0
- package/dist/api/filters.js.map +1 -0
- package/dist/api/group-color.d.ts +33 -0
- package/dist/api/group-color.d.ts.map +1 -0
- package/dist/api/group-color.js +80 -0
- package/dist/api/group-color.js.map +1 -0
- package/dist/api/group-mutation-result.d.ts +150 -0
- package/dist/api/group-mutation-result.d.ts.map +1 -0
- package/dist/api/group-mutation-result.js +141 -0
- package/dist/api/group-mutation-result.js.map +1 -0
- package/dist/api/iso-country-codes.d.ts +45 -0
- package/dist/api/iso-country-codes.d.ts.map +1 -0
- package/dist/api/iso-country-codes.js +71 -0
- package/dist/api/iso-country-codes.js.map +1 -0
- package/dist/api/item-board-lookup.d.ts +86 -0
- package/dist/api/item-board-lookup.d.ts.map +1 -0
- package/dist/api/item-board-lookup.js +140 -0
- package/dist/api/item-board-lookup.js.map +1 -0
- package/dist/api/item-helpers.d.ts +133 -0
- package/dist/api/item-helpers.d.ts.map +1 -0
- package/dist/api/item-helpers.js +139 -0
- package/dist/api/item-helpers.js.map +1 -0
- package/dist/api/item-mutation-result.d.ts +60 -0
- package/dist/api/item-mutation-result.d.ts.map +1 -0
- package/dist/api/item-mutation-result.js +63 -0
- package/dist/api/item-mutation-result.js.map +1 -0
- package/dist/api/item-projection.d.ts +165 -0
- package/dist/api/item-projection.d.ts.map +1 -0
- package/dist/api/item-projection.js +235 -0
- package/dist/api/item-projection.js.map +1 -0
- package/dist/api/item-source-read.d.ts +45 -0
- package/dist/api/item-source-read.d.ts.map +1 -0
- package/dist/api/item-source-read.js +57 -0
- package/dist/api/item-source-read.js.map +1 -0
- package/dist/api/items-page-walker.d.ts +126 -0
- package/dist/api/items-page-walker.d.ts.map +1 -0
- package/dist/api/items-page-walker.js +256 -0
- package/dist/api/items-page-walker.js.map +1 -0
- package/dist/api/links.d.ts +70 -0
- package/dist/api/links.d.ts.map +1 -0
- package/dist/api/links.js +128 -0
- package/dist/api/links.js.map +1 -0
- package/dist/api/me-token.d.ts +52 -0
- package/dist/api/me-token.d.ts.map +1 -0
- package/dist/api/me-token.js +55 -0
- package/dist/api/me-token.js.map +1 -0
- package/dist/api/pagination.d.ts +201 -0
- package/dist/api/pagination.d.ts.map +1 -0
- package/dist/api/pagination.js +223 -0
- package/dist/api/pagination.js.map +1 -0
- package/dist/api/partial-success-mutation.d.ts +28 -0
- package/dist/api/partial-success-mutation.d.ts.map +1 -0
- package/dist/api/partial-success-mutation.js +68 -0
- package/dist/api/partial-success-mutation.js.map +1 -0
- package/dist/api/people.d.ts +182 -0
- package/dist/api/people.d.ts.map +1 -0
- package/dist/api/people.js +260 -0
- package/dist/api/people.js.map +1 -0
- package/dist/api/phones.d.ts +74 -0
- package/dist/api/phones.d.ts.map +1 -0
- package/dist/api/phones.js +167 -0
- package/dist/api/phones.js.map +1 -0
- package/dist/api/raw-document.d.ts +53 -0
- package/dist/api/raw-document.d.ts.map +1 -0
- package/dist/api/raw-document.js +177 -0
- package/dist/api/raw-document.js.map +1 -0
- package/dist/api/raw-write.d.ts +127 -0
- package/dist/api/raw-write.d.ts.map +1 -0
- package/dist/api/raw-write.js +233 -0
- package/dist/api/raw-write.js.map +1 -0
- package/dist/api/resolution-context.d.ts +32 -0
- package/dist/api/resolution-context.d.ts.map +1 -0
- package/dist/api/resolution-context.js +42 -0
- package/dist/api/resolution-context.js.map +1 -0
- package/dist/api/resolution-pass.d.ts +163 -0
- package/dist/api/resolution-pass.d.ts.map +1 -0
- package/dist/api/resolution-pass.js +254 -0
- package/dist/api/resolution-pass.js.map +1 -0
- package/dist/api/resolve-client.d.ts +69 -0
- package/dist/api/resolve-client.d.ts.map +1 -0
- package/dist/api/resolve-client.js +70 -0
- package/dist/api/resolve-client.js.map +1 -0
- package/dist/api/resolver-error-fold.d.ts +176 -0
- package/dist/api/resolver-error-fold.d.ts.map +1 -0
- package/dist/api/resolver-error-fold.js +230 -0
- package/dist/api/resolver-error-fold.js.map +1 -0
- package/dist/api/resolvers.d.ts +131 -0
- package/dist/api/resolvers.d.ts.map +1 -0
- package/dist/api/resolvers.js +262 -0
- package/dist/api/resolvers.js.map +1 -0
- package/dist/api/response-root.d.ts +65 -0
- package/dist/api/response-root.d.ts.map +1 -0
- package/dist/api/response-root.js +61 -0
- package/dist/api/response-root.js.map +1 -0
- package/dist/api/retry.d.ts +112 -0
- package/dist/api/retry.d.ts.map +1 -0
- package/dist/api/retry.js +181 -0
- package/dist/api/retry.js.map +1 -0
- package/dist/api/set-expression.d.ts +23 -0
- package/dist/api/set-expression.d.ts.map +1 -0
- package/dist/api/set-expression.js +31 -0
- package/dist/api/set-expression.js.map +1 -0
- package/dist/api/sort.d.ts +59 -0
- package/dist/api/sort.d.ts.map +1 -0
- package/dist/api/sort.js +73 -0
- package/dist/api/sort.js.map +1 -0
- package/dist/api/source-aggregator.d.ts +94 -0
- package/dist/api/source-aggregator.d.ts.map +1 -0
- package/dist/api/source-aggregator.js +111 -0
- package/dist/api/source-aggregator.js.map +1 -0
- package/dist/api/transport.d.ts +58 -0
- package/dist/api/transport.d.ts.map +1 -0
- package/dist/api/transport.js +190 -0
- package/dist/api/transport.js.map +1 -0
- package/dist/api/update-mutation-result.d.ts +133 -0
- package/dist/api/update-mutation-result.d.ts.map +1 -0
- package/dist/api/update-mutation-result.js +145 -0
- package/dist/api/update-mutation-result.js.map +1 -0
- package/dist/api/users-fan-out-mutation.d.ts +124 -0
- package/dist/api/users-fan-out-mutation.d.ts.map +1 -0
- package/dist/api/users-fan-out-mutation.js +331 -0
- package/dist/api/users-fan-out-mutation.js.map +1 -0
- package/dist/api/walk-pages.d.ts +91 -0
- package/dist/api/walk-pages.d.ts.map +1 -0
- package/dist/api/walk-pages.js +84 -0
- package/dist/api/walk-pages.js.map +1 -0
- package/dist/api/workspace-projection.d.ts +64 -0
- package/dist/api/workspace-projection.d.ts.map +1 -0
- package/dist/api/workspace-projection.js +83 -0
- package/dist/api/workspace-projection.js.map +1 -0
- package/dist/cli/envelope-out.d.ts +128 -0
- package/dist/cli/envelope-out.d.ts.map +1 -0
- package/dist/cli/envelope-out.js +146 -0
- package/dist/cli/envelope-out.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/program.d.ts +29 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +109 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/run.d.ts +108 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +105 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/commands/account/client-helper.d.ts +37 -0
- package/dist/commands/account/client-helper.d.ts.map +1 -0
- package/dist/commands/account/client-helper.js +55 -0
- package/dist/commands/account/client-helper.js.map +1 -0
- package/dist/commands/account/complexity.d.ts +29 -0
- package/dist/commands/account/complexity.d.ts.map +1 -0
- package/dist/commands/account/complexity.js +70 -0
- package/dist/commands/account/complexity.js.map +1 -0
- package/dist/commands/account/info.d.ts +36 -0
- package/dist/commands/account/info.d.ts.map +1 -0
- package/dist/commands/account/info.js +74 -0
- package/dist/commands/account/info.js.map +1 -0
- package/dist/commands/account/version.d.ts +44 -0
- package/dist/commands/account/version.d.ts.map +1 -0
- package/dist/commands/account/version.js +98 -0
- package/dist/commands/account/version.js.map +1 -0
- package/dist/commands/account/whoami.d.ts +34 -0
- package/dist/commands/account/whoami.d.ts.map +1 -0
- package/dist/commands/account/whoami.js +77 -0
- package/dist/commands/account/whoami.js.map +1 -0
- package/dist/commands/board/add-users.d.ts +60 -0
- package/dist/commands/board/add-users.d.ts.map +1 -0
- package/dist/commands/board/add-users.js +133 -0
- package/dist/commands/board/add-users.js.map +1 -0
- package/dist/commands/board/archive.d.ts +64 -0
- package/dist/commands/board/archive.d.ts.map +1 -0
- package/dist/commands/board/archive.js +226 -0
- package/dist/commands/board/archive.js.map +1 -0
- package/dist/commands/board/column-create.d.ts +146 -0
- package/dist/commands/board/column-create.d.ts.map +1 -0
- package/dist/commands/board/column-create.js +564 -0
- package/dist/commands/board/column-create.js.map +1 -0
- package/dist/commands/board/column-delete.d.ts +76 -0
- package/dist/commands/board/column-delete.d.ts.map +1 -0
- package/dist/commands/board/column-delete.js +224 -0
- package/dist/commands/board/column-delete.js.map +1 -0
- package/dist/commands/board/column-update.d.ts +92 -0
- package/dist/commands/board/column-update.d.ts.map +1 -0
- package/dist/commands/board/column-update.js +364 -0
- package/dist/commands/board/column-update.js.map +1 -0
- package/dist/commands/board/columns.d.ts +30 -0
- package/dist/commands/board/columns.d.ts.map +1 -0
- package/dist/commands/board/columns.js +102 -0
- package/dist/commands/board/columns.js.map +1 -0
- package/dist/commands/board/create.d.ts +67 -0
- package/dist/commands/board/create.d.ts.map +1 -0
- package/dist/commands/board/create.js +226 -0
- package/dist/commands/board/create.js.map +1 -0
- package/dist/commands/board/delete.d.ts +60 -0
- package/dist/commands/board/delete.d.ts.map +1 -0
- package/dist/commands/board/delete.js +192 -0
- package/dist/commands/board/delete.js.map +1 -0
- package/dist/commands/board/describe.d.ts +68 -0
- package/dist/commands/board/describe.d.ts.map +1 -0
- package/dist/commands/board/describe.js +241 -0
- package/dist/commands/board/describe.js.map +1 -0
- package/dist/commands/board/doctor.d.ts +108 -0
- package/dist/commands/board/doctor.d.ts.map +1 -0
- package/dist/commands/board/doctor.js +417 -0
- package/dist/commands/board/doctor.js.map +1 -0
- package/dist/commands/board/duplicate.d.ts +85 -0
- package/dist/commands/board/duplicate.d.ts.map +1 -0
- package/dist/commands/board/duplicate.js +281 -0
- package/dist/commands/board/duplicate.js.map +1 -0
- package/dist/commands/board/find.d.ts +47 -0
- package/dist/commands/board/find.d.ts.map +1 -0
- package/dist/commands/board/find.js +153 -0
- package/dist/commands/board/find.js.map +1 -0
- package/dist/commands/board/get.d.ts +41 -0
- package/dist/commands/board/get.d.ts.map +1 -0
- package/dist/commands/board/get.js +66 -0
- package/dist/commands/board/get.js.map +1 -0
- package/dist/commands/board/group-archive.d.ts +83 -0
- package/dist/commands/board/group-archive.d.ts.map +1 -0
- package/dist/commands/board/group-archive.js +264 -0
- package/dist/commands/board/group-archive.js.map +1 -0
- package/dist/commands/board/group-create.d.ts +118 -0
- package/dist/commands/board/group-create.d.ts.map +1 -0
- package/dist/commands/board/group-create.js +239 -0
- package/dist/commands/board/group-create.js.map +1 -0
- package/dist/commands/board/group-delete.d.ts +79 -0
- package/dist/commands/board/group-delete.d.ts.map +1 -0
- package/dist/commands/board/group-delete.js +222 -0
- package/dist/commands/board/group-delete.js.map +1 -0
- package/dist/commands/board/group-duplicate.d.ts +70 -0
- package/dist/commands/board/group-duplicate.d.ts.map +1 -0
- package/dist/commands/board/group-duplicate.js +219 -0
- package/dist/commands/board/group-duplicate.js.map +1 -0
- package/dist/commands/board/group-update.d.ts +145 -0
- package/dist/commands/board/group-update.d.ts.map +1 -0
- package/dist/commands/board/group-update.js +341 -0
- package/dist/commands/board/group-update.js.map +1 -0
- package/dist/commands/board/groups.d.ts +28 -0
- package/dist/commands/board/groups.d.ts.map +1 -0
- package/dist/commands/board/groups.js +85 -0
- package/dist/commands/board/groups.js.map +1 -0
- package/dist/commands/board/list.d.ts +39 -0
- package/dist/commands/board/list.d.ts.map +1 -0
- package/dist/commands/board/list.js +135 -0
- package/dist/commands/board/list.js.map +1 -0
- package/dist/commands/board/subscribers.d.ts +24 -0
- package/dist/commands/board/subscribers.d.ts.map +1 -0
- package/dist/commands/board/subscribers.js +89 -0
- package/dist/commands/board/subscribers.js.map +1 -0
- package/dist/commands/board/update.d.ts +82 -0
- package/dist/commands/board/update.d.ts.map +1 -0
- package/dist/commands/board/update.js +328 -0
- package/dist/commands/board/update.js.map +1 -0
- package/dist/commands/cache/clear.d.ts +34 -0
- package/dist/commands/cache/clear.d.ts.map +1 -0
- package/dist/commands/cache/clear.js +113 -0
- package/dist/commands/cache/clear.js.map +1 -0
- package/dist/commands/cache/list.d.ts +50 -0
- package/dist/commands/cache/list.d.ts.map +1 -0
- package/dist/commands/cache/list.js +77 -0
- package/dist/commands/cache/list.js.map +1 -0
- package/dist/commands/cache/stats.d.ts +22 -0
- package/dist/commands/cache/stats.d.ts.map +1 -0
- package/dist/commands/cache/stats.js +56 -0
- package/dist/commands/cache/stats.js.map +1 -0
- package/dist/commands/config/path.d.ts +22 -0
- package/dist/commands/config/path.d.ts.map +1 -0
- package/dist/commands/config/path.js +74 -0
- package/dist/commands/config/path.js.map +1 -0
- package/dist/commands/config/show.d.ts +61 -0
- package/dist/commands/config/show.d.ts.map +1 -0
- package/dist/commands/config/show.js +137 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/emit.d.ts +156 -0
- package/dist/commands/emit.d.ts.map +1 -0
- package/dist/commands/emit.js +212 -0
- package/dist/commands/emit.js.map +1 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +195 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/item/archive.d.ts +81 -0
- package/dist/commands/item/archive.d.ts.map +1 -0
- package/dist/commands/item/archive.js +187 -0
- package/dist/commands/item/archive.js.map +1 -0
- package/dist/commands/item/clear.d.ts +140 -0
- package/dist/commands/item/clear.d.ts.map +1 -0
- package/dist/commands/item/clear.js +748 -0
- package/dist/commands/item/clear.js.map +1 -0
- package/dist/commands/item/create.d.ts +77 -0
- package/dist/commands/item/create.d.ts.map +1 -0
- package/dist/commands/item/create.js +802 -0
- package/dist/commands/item/create.js.map +1 -0
- package/dist/commands/item/delete.d.ts +82 -0
- package/dist/commands/item/delete.d.ts.map +1 -0
- package/dist/commands/item/delete.js +179 -0
- package/dist/commands/item/delete.js.map +1 -0
- package/dist/commands/item/duplicate.d.ts +117 -0
- package/dist/commands/item/duplicate.d.ts.map +1 -0
- package/dist/commands/item/duplicate.js +238 -0
- package/dist/commands/item/duplicate.js.map +1 -0
- package/dist/commands/item/find.d.ts +55 -0
- package/dist/commands/item/find.d.ts.map +1 -0
- package/dist/commands/item/find.js +231 -0
- package/dist/commands/item/find.js.map +1 -0
- package/dist/commands/item/get.d.ts +47 -0
- package/dist/commands/item/get.d.ts.map +1 -0
- package/dist/commands/item/get.js +66 -0
- package/dist/commands/item/get.js.map +1 -0
- package/dist/commands/item/list.d.ts +73 -0
- package/dist/commands/item/list.d.ts.map +1 -0
- package/dist/commands/item/list.js +284 -0
- package/dist/commands/item/list.js.map +1 -0
- package/dist/commands/item/move.d.ts +181 -0
- package/dist/commands/item/move.d.ts.map +1 -0
- package/dist/commands/item/move.js +560 -0
- package/dist/commands/item/move.js.map +1 -0
- package/dist/commands/item/search.d.ts +67 -0
- package/dist/commands/item/search.d.ts.map +1 -0
- package/dist/commands/item/search.js +322 -0
- package/dist/commands/item/search.js.map +1 -0
- package/dist/commands/item/set.d.ts +88 -0
- package/dist/commands/item/set.d.ts.map +1 -0
- package/dist/commands/item/set.js +387 -0
- package/dist/commands/item/set.js.map +1 -0
- package/dist/commands/item/subitems.d.ts +50 -0
- package/dist/commands/item/subitems.d.ts.map +1 -0
- package/dist/commands/item/subitems.js +86 -0
- package/dist/commands/item/subitems.js.map +1 -0
- package/dist/commands/item/update.d.ts +99 -0
- package/dist/commands/item/update.d.ts.map +1 -0
- package/dist/commands/item/update.js +884 -0
- package/dist/commands/item/update.js.map +1 -0
- package/dist/commands/item/upsert.d.ts +105 -0
- package/dist/commands/item/upsert.d.ts.map +1 -0
- package/dist/commands/item/upsert.js +998 -0
- package/dist/commands/item/upsert.js.map +1 -0
- package/dist/commands/parse-argv.d.ts +20 -0
- package/dist/commands/parse-argv.d.ts.map +1 -0
- package/dist/commands/parse-argv.js +40 -0
- package/dist/commands/parse-argv.js.map +1 -0
- package/dist/commands/raw/index.d.ts +23 -0
- package/dist/commands/raw/index.d.ts.map +1 -0
- package/dist/commands/raw/index.js +416 -0
- package/dist/commands/raw/index.js.map +1 -0
- package/dist/commands/run-by-id-lookup.d.ts +72 -0
- package/dist/commands/run-by-id-lookup.d.ts.map +1 -0
- package/dist/commands/run-by-id-lookup.js +58 -0
- package/dist/commands/run-by-id-lookup.js.map +1 -0
- package/dist/commands/schema/index.d.ts +104 -0
- package/dist/commands/schema/index.d.ts.map +1 -0
- package/dist/commands/schema/index.js +183 -0
- package/dist/commands/schema/index.js.map +1 -0
- package/dist/commands/types.d.ts +66 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +15 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/update/body-source.d.ts +38 -0
- package/dist/commands/update/body-source.d.ts.map +1 -0
- package/dist/commands/update/body-source.js +80 -0
- package/dist/commands/update/body-source.js.map +1 -0
- package/dist/commands/update/clear-all.d.ts +67 -0
- package/dist/commands/update/clear-all.d.ts.map +1 -0
- package/dist/commands/update/clear-all.js +281 -0
- package/dist/commands/update/clear-all.js.map +1 -0
- package/dist/commands/update/create.d.ts +51 -0
- package/dist/commands/update/create.d.ts.map +1 -0
- package/dist/commands/update/create.js +167 -0
- package/dist/commands/update/create.js.map +1 -0
- package/dist/commands/update/delete.d.ts +53 -0
- package/dist/commands/update/delete.d.ts.map +1 -0
- package/dist/commands/update/delete.js +148 -0
- package/dist/commands/update/delete.js.map +1 -0
- package/dist/commands/update/edit.d.ts +37 -0
- package/dist/commands/update/edit.d.ts.map +1 -0
- package/dist/commands/update/edit.js +129 -0
- package/dist/commands/update/edit.js.map +1 -0
- package/dist/commands/update/get.d.ts +37 -0
- package/dist/commands/update/get.d.ts.map +1 -0
- package/dist/commands/update/get.js +92 -0
- package/dist/commands/update/get.js.map +1 -0
- package/dist/commands/update/like.d.ts +17 -0
- package/dist/commands/update/like.d.ts.map +1 -0
- package/dist/commands/update/like.js +23 -0
- package/dist/commands/update/like.js.map +1 -0
- package/dist/commands/update/list.d.ts +58 -0
- package/dist/commands/update/list.d.ts.map +1 -0
- package/dist/commands/update/list.js +322 -0
- package/dist/commands/update/list.js.map +1 -0
- package/dist/commands/update/pin.d.ts +17 -0
- package/dist/commands/update/pin.d.ts.map +1 -0
- package/dist/commands/update/pin.js +23 -0
- package/dist/commands/update/pin.js.map +1 -0
- package/dist/commands/update/reply.d.ts +47 -0
- package/dist/commands/update/reply.d.ts.map +1 -0
- package/dist/commands/update/reply.js +149 -0
- package/dist/commands/update/reply.js.map +1 -0
- package/dist/commands/update/toggle.d.ts +70 -0
- package/dist/commands/update/toggle.d.ts.map +1 -0
- package/dist/commands/update/toggle.js +118 -0
- package/dist/commands/update/toggle.js.map +1 -0
- package/dist/commands/update/unlike.d.ts +17 -0
- package/dist/commands/update/unlike.d.ts.map +1 -0
- package/dist/commands/update/unlike.js +22 -0
- package/dist/commands/update/unlike.js.map +1 -0
- package/dist/commands/update/unpin.d.ts +17 -0
- package/dist/commands/update/unpin.d.ts.map +1 -0
- package/dist/commands/update/unpin.js +21 -0
- package/dist/commands/update/unpin.js.map +1 -0
- package/dist/commands/user/get.d.ts +31 -0
- package/dist/commands/user/get.d.ts.map +1 -0
- package/dist/commands/user/get.js +81 -0
- package/dist/commands/user/get.js.map +1 -0
- package/dist/commands/user/list.d.ts +61 -0
- package/dist/commands/user/list.d.ts.map +1 -0
- package/dist/commands/user/list.js +148 -0
- package/dist/commands/user/list.js.map +1 -0
- package/dist/commands/user/me.d.ts +17 -0
- package/dist/commands/user/me.d.ts.map +1 -0
- package/dist/commands/user/me.js +49 -0
- package/dist/commands/user/me.js.map +1 -0
- package/dist/commands/workspace/add-users.d.ts +76 -0
- package/dist/commands/workspace/add-users.d.ts.map +1 -0
- package/dist/commands/workspace/add-users.js +154 -0
- package/dist/commands/workspace/add-users.js.map +1 -0
- package/dist/commands/workspace/create.d.ts +59 -0
- package/dist/commands/workspace/create.d.ts.map +1 -0
- package/dist/commands/workspace/create.js +163 -0
- package/dist/commands/workspace/create.js.map +1 -0
- package/dist/commands/workspace/delete.d.ts +67 -0
- package/dist/commands/workspace/delete.d.ts.map +1 -0
- package/dist/commands/workspace/delete.js +182 -0
- package/dist/commands/workspace/delete.js.map +1 -0
- package/dist/commands/workspace/folders.d.ts +40 -0
- package/dist/commands/workspace/folders.d.ts.map +1 -0
- package/dist/commands/workspace/folders.js +124 -0
- package/dist/commands/workspace/folders.js.map +1 -0
- package/dist/commands/workspace/get.d.ts +35 -0
- package/dist/commands/workspace/get.d.ts.map +1 -0
- package/dist/commands/workspace/get.js +62 -0
- package/dist/commands/workspace/get.js.map +1 -0
- package/dist/commands/workspace/list.d.ts +57 -0
- package/dist/commands/workspace/list.d.ts.map +1 -0
- package/dist/commands/workspace/list.js +125 -0
- package/dist/commands/workspace/list.js.map +1 -0
- package/dist/commands/workspace/remove-users.d.ts +47 -0
- package/dist/commands/workspace/remove-users.d.ts.map +1 -0
- package/dist/commands/workspace/remove-users.js +122 -0
- package/dist/commands/workspace/remove-users.js.map +1 -0
- package/dist/commands/workspace/update.d.ts +68 -0
- package/dist/commands/workspace/update.d.ts.map +1 -0
- package/dist/commands/workspace/update.js +237 -0
- package/dist/commands/workspace/update.js.map +1 -0
- package/dist/config/load.d.ts +33 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +81 -0
- package/dist/config/load.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/types/global-flags.d.ts +69 -0
- package/dist/types/global-flags.d.ts.map +1 -0
- package/dist/types/global-flags.js +170 -0
- package/dist/types/global-flags.js.map +1 -0
- package/dist/types/ids.d.ts +38 -0
- package/dist/types/ids.d.ts.map +1 -0
- package/dist/types/ids.js +51 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/json.d.ts +60 -0
- package/dist/types/json.d.ts.map +1 -0
- package/dist/types/json.js +33 -0
- package/dist/types/json.js.map +1 -0
- package/dist/utils/errors.d.ts +121 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +264 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +49 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output/envelope.d.ts +140 -0
- package/dist/utils/output/envelope.d.ts.map +1 -0
- package/dist/utils/output/envelope.js +120 -0
- package/dist/utils/output/envelope.js.map +1 -0
- package/dist/utils/output/json.d.ts +10 -0
- package/dist/utils/output/json.d.ts.map +1 -0
- package/dist/utils/output/json.js +12 -0
- package/dist/utils/output/json.js.map +1 -0
- package/dist/utils/output/ndjson.d.ts +92 -0
- package/dist/utils/output/ndjson.d.ts.map +1 -0
- package/dist/utils/output/ndjson.js +33 -0
- package/dist/utils/output/ndjson.js.map +1 -0
- package/dist/utils/output/select.d.ts +22 -0
- package/dist/utils/output/select.d.ts.map +1 -0
- package/dist/utils/output/select.js +47 -0
- package/dist/utils/output/select.js.map +1 -0
- package/dist/utils/output/table.d.ts +32 -0
- package/dist/utils/output/table.d.ts.map +1 -0
- package/dist/utils/output/table.js +133 -0
- package/dist/utils/output/table.js.map +1 -0
- package/dist/utils/output/text.d.ts +5 -0
- package/dist/utils/output/text.d.ts.map +1 -0
- package/dist/utils/output/text.js +32 -0
- package/dist/utils/output/text.js.map +1 -0
- package/dist/utils/parse-boundary.d.ts +53 -0
- package/dist/utils/parse-boundary.d.ts.map +1 -0
- package/dist/utils/parse-boundary.js +62 -0
- package/dist/utils/parse-boundary.js.map +1 -0
- package/dist/utils/redact.d.ts +54 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +154 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/request-id.d.ts +17 -0
- package/dist/utils/request-id.d.ts.map +1 -0
- package/dist/utils/request-id.js +26 -0
- package/dist/utils/request-id.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board metadata loader (`v0.1-plan.md` §3 M3, `cli-design.md` §8).
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for "what columns / groups / kind does this
|
|
5
|
+
* board have?" — the shape every M3+ command that resolves a column
|
|
6
|
+
* token, prints `board describe`, or maps a `--where` clause needs.
|
|
7
|
+
* The data is cached on disk via `api/cache.ts` (5-minute default TTL,
|
|
8
|
+
* `--no-cache` bypasses) and the cache miss path issues a single
|
|
9
|
+
* GraphQL call against the raw `client.raw<T>` escape hatch — the
|
|
10
|
+
* SDK's typed `boards` query doesn't expose `hierarchy_type` /
|
|
11
|
+
* `is_leaf`, both of which the design's "describe" output requires
|
|
12
|
+
* (`cli-design.md` §2.8).
|
|
13
|
+
*
|
|
14
|
+
* The cache layer holds Monday-shape JSON; this module is the *only*
|
|
15
|
+
* place that reshapes Monday's response into the projected
|
|
16
|
+
* `BoardMetadata` form. Keeping the shape stable here means a future
|
|
17
|
+
* SDK bump that adds optional fields doesn't ripple into 14 commands —
|
|
18
|
+
* `boardMetadataSchema.parse` is the parse boundary, and the cache
|
|
19
|
+
* envelope's `schema_version` (cache.ts) gates older payloads.
|
|
20
|
+
*
|
|
21
|
+
* **Auto-refresh-on-failure semantics.** Two cache-miss-style paths:
|
|
22
|
+
*
|
|
23
|
+
* 1. Cache absent / expired → fetch live, write cache, return.
|
|
24
|
+
* 2. Cache present but caller's lookup against it failed (e.g.
|
|
25
|
+
* column token didn't match anything) → refresh once, return
|
|
26
|
+
* the new metadata. Callers (`columns.ts`) decide whether the
|
|
27
|
+
* second lookup succeeded; this module just promises that
|
|
28
|
+
* `loadBoardMetadata({ refresh: true })` bypasses the cache.
|
|
29
|
+
*
|
|
30
|
+
* `--no-cache` is a stronger signal — it skips the on-disk read
|
|
31
|
+
* entirely *and* skips the post-fetch write. Useful for `monday board
|
|
32
|
+
* describe --no-cache <bid>` when the agent suspects on-disk drift.
|
|
33
|
+
*/
|
|
34
|
+
import { z } from 'zod';
|
|
35
|
+
import type { MondayClient } from './client.js';
|
|
36
|
+
import { type BoardId } from '../types/ids.js';
|
|
37
|
+
import type { Complexity } from '../utils/output/envelope.js';
|
|
38
|
+
declare const groupSchema: z.ZodObject<{
|
|
39
|
+
id: z.ZodString;
|
|
40
|
+
title: z.ZodString;
|
|
41
|
+
color: z.ZodNullable<z.ZodString>;
|
|
42
|
+
position: z.ZodNullable<z.ZodString>;
|
|
43
|
+
archived: z.ZodNullable<z.ZodBoolean>;
|
|
44
|
+
deleted: z.ZodNullable<z.ZodBoolean>;
|
|
45
|
+
}, z.core.$strict>;
|
|
46
|
+
declare const columnSchema: z.ZodObject<{
|
|
47
|
+
id: z.ZodString;
|
|
48
|
+
title: z.ZodString;
|
|
49
|
+
type: z.ZodString;
|
|
50
|
+
description: z.ZodNullable<z.ZodString>;
|
|
51
|
+
archived: z.ZodNullable<z.ZodBoolean>;
|
|
52
|
+
settings_str: z.ZodNullable<z.ZodString>;
|
|
53
|
+
width: z.ZodNullable<z.ZodNumber>;
|
|
54
|
+
}, z.core.$strict>;
|
|
55
|
+
export declare const boardMetadataSchema: z.ZodObject<{
|
|
56
|
+
id: z.ZodString;
|
|
57
|
+
name: z.ZodString;
|
|
58
|
+
description: z.ZodNullable<z.ZodString>;
|
|
59
|
+
state: z.ZodNullable<z.ZodString>;
|
|
60
|
+
board_kind: z.ZodNullable<z.ZodString>;
|
|
61
|
+
board_folder_id: z.ZodNullable<z.ZodString>;
|
|
62
|
+
workspace_id: z.ZodNullable<z.ZodString>;
|
|
63
|
+
url: z.ZodNullable<z.ZodString>;
|
|
64
|
+
hierarchy_type: z.ZodNullable<z.ZodString>;
|
|
65
|
+
is_leaf: z.ZodNullable<z.ZodBoolean>;
|
|
66
|
+
items_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
67
|
+
permissions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
68
|
+
updated_at: z.ZodNullable<z.ZodString>;
|
|
69
|
+
groups: z.ZodArray<z.ZodObject<{
|
|
70
|
+
id: z.ZodString;
|
|
71
|
+
title: z.ZodString;
|
|
72
|
+
color: z.ZodNullable<z.ZodString>;
|
|
73
|
+
position: z.ZodNullable<z.ZodString>;
|
|
74
|
+
archived: z.ZodNullable<z.ZodBoolean>;
|
|
75
|
+
deleted: z.ZodNullable<z.ZodBoolean>;
|
|
76
|
+
}, z.core.$strict>>;
|
|
77
|
+
columns: z.ZodArray<z.ZodObject<{
|
|
78
|
+
id: z.ZodString;
|
|
79
|
+
title: z.ZodString;
|
|
80
|
+
type: z.ZodString;
|
|
81
|
+
description: z.ZodNullable<z.ZodString>;
|
|
82
|
+
archived: z.ZodNullable<z.ZodBoolean>;
|
|
83
|
+
settings_str: z.ZodNullable<z.ZodString>;
|
|
84
|
+
width: z.ZodNullable<z.ZodNumber>;
|
|
85
|
+
}, z.core.$strict>>;
|
|
86
|
+
}, z.core.$strict>;
|
|
87
|
+
export type BoardMetadata = z.infer<typeof boardMetadataSchema>;
|
|
88
|
+
export type BoardColumn = z.infer<typeof columnSchema>;
|
|
89
|
+
export type BoardGroup = z.infer<typeof groupSchema>;
|
|
90
|
+
export interface LoadBoardMetadataInputs {
|
|
91
|
+
readonly client: MondayClient;
|
|
92
|
+
readonly boardId: BoardId | string;
|
|
93
|
+
/** Source for the cache root — defaults to `process.env`. */
|
|
94
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
95
|
+
/**
|
|
96
|
+
* `--no-cache`: skip the on-disk read + write entirely. Live fetch
|
|
97
|
+
* always happens; the result is returned unchanged. Defaults to
|
|
98
|
+
* false.
|
|
99
|
+
*/
|
|
100
|
+
readonly noCache?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Force a live fetch even when the cache holds a fresh entry; the
|
|
103
|
+
* fresh response is written back to cache. `columns.ts` uses this
|
|
104
|
+
* to retry once on `column_not_found` before surfacing the error.
|
|
105
|
+
*/
|
|
106
|
+
readonly refresh?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Override TTL in seconds. Defaults to the cache module's 5-minute
|
|
109
|
+
* baseline. Passed through to `readEntry` only.
|
|
110
|
+
*/
|
|
111
|
+
readonly ttlSeconds?: number;
|
|
112
|
+
/**
|
|
113
|
+
* Now provider, threaded through to the cache module so age
|
|
114
|
+
* calculations are deterministic in tests.
|
|
115
|
+
*/
|
|
116
|
+
readonly now?: () => Date;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Result of a `loadBoardMetadata` call. `source` agrees with the
|
|
120
|
+
* envelope's `meta.source` rule: `cache` for a hit, `live` for a
|
|
121
|
+
* fetch (whether the cache was bypassed, expired, or refreshed).
|
|
122
|
+
*
|
|
123
|
+
* `cacheAgeSeconds` is the on-disk age of the served payload when
|
|
124
|
+
* source is `cache` — used by command actions to populate
|
|
125
|
+
* `meta.cache_age_seconds`. `null` for live fetches.
|
|
126
|
+
*/
|
|
127
|
+
export interface BoardMetadataLoadResult {
|
|
128
|
+
readonly metadata: BoardMetadata;
|
|
129
|
+
readonly source: 'live' | 'cache';
|
|
130
|
+
readonly cacheAgeSeconds: number | null;
|
|
131
|
+
/**
|
|
132
|
+
* `meta.complexity` payload from the live request when one ran;
|
|
133
|
+
* `null` for cache hits and for non-`--verbose` live calls (Monday
|
|
134
|
+
* doesn't include `complexity` unless the operation selects it).
|
|
135
|
+
* Surfacing this here is what lets cache-backed commands report
|
|
136
|
+
* accurate complexity in `--verbose` mode (Codex M3 pass-1 §3 —
|
|
137
|
+
* the original projection threw the value away).
|
|
138
|
+
*/
|
|
139
|
+
readonly complexity: Complexity | null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Loads board metadata, preferring a fresh on-disk cache entry over
|
|
143
|
+
* a live fetch. Cache writes are best-effort — if writing fails (disk
|
|
144
|
+
* full, permission flip), the live data still returns and a warning
|
|
145
|
+
* is suppressed (callers can opt in via the future `warnings`
|
|
146
|
+
* channel; v0.1 keeps cache-write errors local). Read errors raise.
|
|
147
|
+
*/
|
|
148
|
+
export declare const loadBoardMetadata: (inputs: LoadBoardMetadataInputs) => Promise<BoardMetadataLoadResult>;
|
|
149
|
+
/**
|
|
150
|
+
* Convenience used by `columns.ts`'s "refresh once before surfacing
|
|
151
|
+
* column_not_found" path. Idempotent; the cache write happens via
|
|
152
|
+
* `loadBoardMetadata({refresh:true})`.
|
|
153
|
+
*/
|
|
154
|
+
export declare const refreshBoardMetadata: (inputs: Omit<LoadBoardMetadataInputs, "refresh">) => Promise<BoardMetadataLoadResult>;
|
|
155
|
+
/**
|
|
156
|
+
* Drops the on-disk metadata for a board. Used by tests and by future
|
|
157
|
+
* `cache clear --board <bid>` flows; M3 doesn't change the existing
|
|
158
|
+
* cache CLI surface.
|
|
159
|
+
*/
|
|
160
|
+
export declare const evictBoardMetadata: (boardId: BoardId | string, env?: NodeJS.ProcessEnv) => Promise<void>;
|
|
161
|
+
export {};
|
|
162
|
+
//# sourceMappingURL=board-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-metadata.d.ts","sourceRoot":"","sources":["../../src/api/board-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAuC9D,QAAA,MAAM,WAAW;;;;;;;kBASN,CAAC;AAEZ,QAAA,MAAM,YAAY;;;;;;;;kBAUP,CAAC;AAEZ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuBrB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAUrD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AAkED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,uBAAuB,CAsDjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,KAC/C,OAAO,CAAC,uBAAuB,CACe,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,OAAO,GAAG,MAAM,EAEzB,MAAK,MAAM,CAAC,UAAwB,KACnC,OAAO,CAAC,IAAI,CAId,CAAC"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board metadata loader (`v0.1-plan.md` §3 M3, `cli-design.md` §8).
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for "what columns / groups / kind does this
|
|
5
|
+
* board have?" — the shape every M3+ command that resolves a column
|
|
6
|
+
* token, prints `board describe`, or maps a `--where` clause needs.
|
|
7
|
+
* The data is cached on disk via `api/cache.ts` (5-minute default TTL,
|
|
8
|
+
* `--no-cache` bypasses) and the cache miss path issues a single
|
|
9
|
+
* GraphQL call against the raw `client.raw<T>` escape hatch — the
|
|
10
|
+
* SDK's typed `boards` query doesn't expose `hierarchy_type` /
|
|
11
|
+
* `is_leaf`, both of which the design's "describe" output requires
|
|
12
|
+
* (`cli-design.md` §2.8).
|
|
13
|
+
*
|
|
14
|
+
* The cache layer holds Monday-shape JSON; this module is the *only*
|
|
15
|
+
* place that reshapes Monday's response into the projected
|
|
16
|
+
* `BoardMetadata` form. Keeping the shape stable here means a future
|
|
17
|
+
* SDK bump that adds optional fields doesn't ripple into 14 commands —
|
|
18
|
+
* `boardMetadataSchema.parse` is the parse boundary, and the cache
|
|
19
|
+
* envelope's `schema_version` (cache.ts) gates older payloads.
|
|
20
|
+
*
|
|
21
|
+
* **Auto-refresh-on-failure semantics.** Two cache-miss-style paths:
|
|
22
|
+
*
|
|
23
|
+
* 1. Cache absent / expired → fetch live, write cache, return.
|
|
24
|
+
* 2. Cache present but caller's lookup against it failed (e.g.
|
|
25
|
+
* column token didn't match anything) → refresh once, return
|
|
26
|
+
* the new metadata. Callers (`columns.ts`) decide whether the
|
|
27
|
+
* second lookup succeeded; this module just promises that
|
|
28
|
+
* `loadBoardMetadata({ refresh: true })` bypasses the cache.
|
|
29
|
+
*
|
|
30
|
+
* `--no-cache` is a stronger signal — it skips the on-disk read
|
|
31
|
+
* entirely *and* skips the post-fetch write. Useful for `monday board
|
|
32
|
+
* describe --no-cache <bid>` when the agent suspects on-disk drift.
|
|
33
|
+
*/
|
|
34
|
+
import { z } from 'zod';
|
|
35
|
+
import { clearEntry, readEntry, resolveCacheRoot, writeEntry, DEFAULT_CACHE_TTL_SECONDS, } from './cache.js';
|
|
36
|
+
import { BoardIdSchema } from '../types/ids.js';
|
|
37
|
+
import { ApiError } from '../utils/errors.js';
|
|
38
|
+
import { unwrapOrThrow } from '../utils/parse-boundary.js';
|
|
39
|
+
const BOARD_METADATA_QUERY = `
|
|
40
|
+
query BoardMetadata($ids: [ID!]!) {
|
|
41
|
+
boards(ids: $ids) {
|
|
42
|
+
id
|
|
43
|
+
name
|
|
44
|
+
description
|
|
45
|
+
state
|
|
46
|
+
board_kind
|
|
47
|
+
board_folder_id
|
|
48
|
+
workspace_id
|
|
49
|
+
url
|
|
50
|
+
hierarchy_type
|
|
51
|
+
is_leaf
|
|
52
|
+
items_count
|
|
53
|
+
permissions
|
|
54
|
+
updated_at
|
|
55
|
+
groups {
|
|
56
|
+
id
|
|
57
|
+
title
|
|
58
|
+
color
|
|
59
|
+
position
|
|
60
|
+
archived
|
|
61
|
+
deleted
|
|
62
|
+
}
|
|
63
|
+
columns {
|
|
64
|
+
id
|
|
65
|
+
title
|
|
66
|
+
type
|
|
67
|
+
description
|
|
68
|
+
archived
|
|
69
|
+
settings_str
|
|
70
|
+
width
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
`;
|
|
75
|
+
const groupSchema = z
|
|
76
|
+
.object({
|
|
77
|
+
id: z.string().min(1),
|
|
78
|
+
title: z.string(),
|
|
79
|
+
color: z.string().nullable(),
|
|
80
|
+
position: z.string().nullable(),
|
|
81
|
+
archived: z.boolean().nullable(),
|
|
82
|
+
deleted: z.boolean().nullable(),
|
|
83
|
+
})
|
|
84
|
+
.strict();
|
|
85
|
+
const columnSchema = z
|
|
86
|
+
.object({
|
|
87
|
+
id: z.string().min(1),
|
|
88
|
+
title: z.string(),
|
|
89
|
+
type: z.string().min(1),
|
|
90
|
+
description: z.string().nullable(),
|
|
91
|
+
archived: z.boolean().nullable(),
|
|
92
|
+
settings_str: z.string().nullable(),
|
|
93
|
+
width: z.number().nullable(),
|
|
94
|
+
})
|
|
95
|
+
.strict();
|
|
96
|
+
export const boardMetadataSchema = z
|
|
97
|
+
.object({
|
|
98
|
+
id: z.string().min(1),
|
|
99
|
+
name: z.string(),
|
|
100
|
+
description: z.string().nullable(),
|
|
101
|
+
state: z.string().nullable(),
|
|
102
|
+
board_kind: z.string().nullable(),
|
|
103
|
+
board_folder_id: z.string().nullable(),
|
|
104
|
+
workspace_id: z.string().nullable(),
|
|
105
|
+
url: z.string().nullable(),
|
|
106
|
+
hierarchy_type: z.string().nullable(),
|
|
107
|
+
is_leaf: z.boolean().nullable(),
|
|
108
|
+
// Optional+nullable so existing pre-M15 cache entries (which
|
|
109
|
+
// didn't carry these fields) parse cleanly post-bump. New
|
|
110
|
+
// BOARD_METADATA_QUERY runs include the fields; the M15 board
|
|
111
|
+
// archive + duplicate dry-run snapshots project them through
|
|
112
|
+
// `?? null` to preserve the §6.2 board projection shape.
|
|
113
|
+
items_count: z.number().int().nullable().optional(),
|
|
114
|
+
permissions: z.string().nullable().optional(),
|
|
115
|
+
updated_at: z.string().nullable(),
|
|
116
|
+
groups: z.array(groupSchema),
|
|
117
|
+
columns: z.array(columnSchema),
|
|
118
|
+
})
|
|
119
|
+
.strict();
|
|
120
|
+
const responseSchema = z.looseObject({
|
|
121
|
+
boards: z.array(z.unknown()).nullable(),
|
|
122
|
+
});
|
|
123
|
+
const projectBoard = (raw, boardId) =>
|
|
124
|
+
// R18 parse-boundary wrap. Live-fetch projection: a malformed
|
|
125
|
+
// Monday response (schema drift, future field rename) surfaces as
|
|
126
|
+
// `internal_error` with `details.issues` rather than a bare
|
|
127
|
+
// ZodError that the runner's catch-all maps to `internal_error`
|
|
128
|
+
// but loses the failing field path. Per validation.md "Never
|
|
129
|
+
// bubble raw ZodError out of a parse boundary".
|
|
130
|
+
unwrapOrThrow(boardMetadataSchema.safeParse(raw), {
|
|
131
|
+
context: `Monday returned a malformed board metadata response for id ${boardId}`,
|
|
132
|
+
details: { board_id: boardId },
|
|
133
|
+
hint: 'this is a data-integrity error in Monday\'s response (or a ' +
|
|
134
|
+
'boardMetadataSchema drift); verify the response shape and ' +
|
|
135
|
+
'update the schema if Monday\'s contract has changed.',
|
|
136
|
+
});
|
|
137
|
+
// Cache-read parse callback. ZodError here is intentionally
|
|
138
|
+
// swallowed by the surrounding `loadBoardMetadata` try/catch (cache-
|
|
139
|
+
// miss path) — a corrupt cache file is treated as a miss and a live
|
|
140
|
+
// fetch follows. Wrapping with unwrapOrThrow would be a change in
|
|
141
|
+
// behaviour. Kept as a thin parse so corrupt-cache → cache-miss
|
|
142
|
+
// stays the established contract.
|
|
143
|
+
const parseCacheEntry = (raw) => boardMetadataSchema.parse(raw);
|
|
144
|
+
const fetchLive = async (client, boardId) => {
|
|
145
|
+
const response = await client.raw(BOARD_METADATA_QUERY, { ids: [boardId] }, { operationName: 'BoardMetadata' });
|
|
146
|
+
// Pre-validate the loose response shape so a missing `boards` key
|
|
147
|
+
// surfaces a clear error rather than tripping the projection
|
|
148
|
+
// parser on an undefined entry. R18 parse-boundary wrap: malformed
|
|
149
|
+
// top-level shape (e.g. response without a `boards` key, or
|
|
150
|
+
// `boards` not an array) surfaces with `details.issues` rather
|
|
151
|
+
// than a bare ZodError.
|
|
152
|
+
const validated = unwrapOrThrow(responseSchema.safeParse(response.data), {
|
|
153
|
+
context: `Monday returned a malformed BoardMetadata response for id ${boardId}`,
|
|
154
|
+
details: { board_id: boardId },
|
|
155
|
+
hint: 'this is a data-integrity error in Monday\'s response (or a ' +
|
|
156
|
+
'BoardMetadata response-shape drift); verify the response and ' +
|
|
157
|
+
'update responseSchema if Monday\'s contract has changed.',
|
|
158
|
+
});
|
|
159
|
+
const first = validated.boards?.[0];
|
|
160
|
+
if (first === undefined || first === null) {
|
|
161
|
+
throw new ApiError('not_found', `Monday returned no board for id ${boardId}`, { details: { board_id: boardId } });
|
|
162
|
+
}
|
|
163
|
+
return { metadata: projectBoard(first, boardId), complexity: response.complexity };
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Loads board metadata, preferring a fresh on-disk cache entry over
|
|
167
|
+
* a live fetch. Cache writes are best-effort — if writing fails (disk
|
|
168
|
+
* full, permission flip), the live data still returns and a warning
|
|
169
|
+
* is suppressed (callers can opt in via the future `warnings`
|
|
170
|
+
* channel; v0.1 keeps cache-write errors local). Read errors raise.
|
|
171
|
+
*/
|
|
172
|
+
export const loadBoardMetadata = async (inputs) => {
|
|
173
|
+
/* c8 ignore next — defensive fallback; tests always pass `env`. */
|
|
174
|
+
const env = inputs.env ?? process.env;
|
|
175
|
+
const boardId = BoardIdSchema.parse(inputs.boardId);
|
|
176
|
+
const root = resolveCacheRoot({ env });
|
|
177
|
+
const ttlSeconds = inputs.ttlSeconds ?? DEFAULT_CACHE_TTL_SECONDS;
|
|
178
|
+
const now = inputs.now;
|
|
179
|
+
if (inputs.noCache !== true && inputs.refresh !== true) {
|
|
180
|
+
let hit;
|
|
181
|
+
try {
|
|
182
|
+
hit = await readEntry(root, { kind: 'board', boardId }, parseCacheEntry, {
|
|
183
|
+
ttlSeconds,
|
|
184
|
+
...(now === undefined ? {} : { now }),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// A corrupt or unreadable cache file is non-fatal — fall through
|
|
189
|
+
// to a live fetch. The on-disk error is surfaced separately by
|
|
190
|
+
// `cache list` / `cache stats`; an end-user metadata fetch
|
|
191
|
+
// shouldn't fail because of stale local state.
|
|
192
|
+
hit = undefined;
|
|
193
|
+
}
|
|
194
|
+
if (hit !== undefined) {
|
|
195
|
+
return {
|
|
196
|
+
metadata: hit.data,
|
|
197
|
+
source: 'cache',
|
|
198
|
+
cacheAgeSeconds: hit.ageSeconds,
|
|
199
|
+
complexity: null,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const live = await fetchLive(inputs.client, boardId);
|
|
204
|
+
if (inputs.noCache !== true) {
|
|
205
|
+
try {
|
|
206
|
+
await writeEntry(root, { kind: 'board', boardId }, live.metadata);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Cache-write failures don't block the user — the live data is
|
|
210
|
+
// good and a future call will simply re-fetch.
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
metadata: live.metadata,
|
|
215
|
+
source: 'live',
|
|
216
|
+
cacheAgeSeconds: null,
|
|
217
|
+
complexity: live.complexity,
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Convenience used by `columns.ts`'s "refresh once before surfacing
|
|
222
|
+
* column_not_found" path. Idempotent; the cache write happens via
|
|
223
|
+
* `loadBoardMetadata({refresh:true})`.
|
|
224
|
+
*/
|
|
225
|
+
export const refreshBoardMetadata = async (inputs) => loadBoardMetadata({ ...inputs, refresh: true });
|
|
226
|
+
/**
|
|
227
|
+
* Drops the on-disk metadata for a board. Used by tests and by future
|
|
228
|
+
* `cache clear --board <bid>` flows; M3 doesn't change the existing
|
|
229
|
+
* cache CLI surface.
|
|
230
|
+
*/
|
|
231
|
+
export const evictBoardMetadata = async (boardId,
|
|
232
|
+
/* c8 ignore next — defensive default; callers pass an explicit env. */
|
|
233
|
+
env = process.env) => {
|
|
234
|
+
const id = BoardIdSchema.parse(boardId);
|
|
235
|
+
const root = resolveCacheRoot({ env });
|
|
236
|
+
await clearEntry(root, { kind: 'board', boardId: id });
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=board-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-metadata.js","sourceRoot":"","sources":["../../src/api/board-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eager-invalidation post-success projection wrappers for board-
|
|
3
|
+
* structure mutations (`v0.2-plan.md` §22 R46 lift).
|
|
4
|
+
*
|
|
5
|
+
* Lifts the cli-design §8 eager-invalidation timing rule from six
|
|
6
|
+
* inline call sites into two helpers that pin the timing in the
|
|
7
|
+
* type system. The §8 contract splits by leg-count:
|
|
8
|
+
*
|
|
9
|
+
* - **Single-leg verbs** (`column-create` / `column-delete` +
|
|
10
|
+
* M15-retrofit `board archive` / `board delete`). Invalidate
|
|
11
|
+
* AFTER the success envelope's `data` projection completes,
|
|
12
|
+
* never before the wire mutation, never between mutation and
|
|
13
|
+
* projection. Skip on the error path — a failed single-leg
|
|
14
|
+
* call didn't change board state.
|
|
15
|
+
* - **Fan-out verbs** (`column-update` per-attribute +
|
|
16
|
+
* M15-retrofit `board update` per-attribute). Issue all per-
|
|
17
|
+
* attribute wire calls first; AFTER the loop ends, invalidate
|
|
18
|
+
* IF at least one per-attribute call succeeded (the wire-
|
|
19
|
+
* state high-water mark). On whole-call success this is the
|
|
20
|
+
* same trigger as the single-leg case (every leg succeeded);
|
|
21
|
+
* on whole-call partial-application failure (call N+1 fails
|
|
22
|
+
* after call N succeeded) invalidation still fires because
|
|
23
|
+
* the cache must reflect partially-applied server state.
|
|
24
|
+
* Zero-legs-succeeded skips invalidation — server state didn't
|
|
25
|
+
* change.
|
|
26
|
+
*
|
|
27
|
+
* Both helpers order invalidation BEFORE returning so the consumer's
|
|
28
|
+
* `emitMutation` lands AFTER the cache is invalidated; a cache-unlink
|
|
29
|
+
* failure (permission flip, disk loss) surfaces through the runner's
|
|
30
|
+
* catch-all error envelope rather than double-emitting after a
|
|
31
|
+
* success envelope already hit stdout (Codex M16 round-1 F1 ordering
|
|
32
|
+
* pin).
|
|
33
|
+
*
|
|
34
|
+
* **Why a `recordLegSuccess()` callback rather than a returned
|
|
35
|
+
* `{succeededLegs, ...}` object** (the §22 R46 spec's draft shape).
|
|
36
|
+
* The fan-out's high-water-mark counter MUST survive a thrown
|
|
37
|
+
* `runFanOut` — if the closure throws partway through the loop,
|
|
38
|
+
* the helper still needs to know how many legs landed before the
|
|
39
|
+
* throw to decide on partial-application invalidation. Returning
|
|
40
|
+
* the counter would force every consumer to wrap its own
|
|
41
|
+
* try/catch to push the count out before re-throwing; routing it
|
|
42
|
+
* through a closure-captured callback owned by the helper hides
|
|
43
|
+
* the counter from the consumer's data flow entirely. The
|
|
44
|
+
* consumer just calls `recordLegSuccess()` after each successful
|
|
45
|
+
* leg; the helper owns the counter, the catch boundary, and the
|
|
46
|
+
* §8 invalidation gate.
|
|
47
|
+
*
|
|
48
|
+
* **Why a single `perform` callback for single-leg rather than a
|
|
49
|
+
* split `{runMutation, projectData}` (the §22 R46 spec draft).**
|
|
50
|
+
* Splitting "fire the wire call" from "project the response" was
|
|
51
|
+
* artificial in practice — the missing-root-key check + null-
|
|
52
|
+
* payload guard sit between the two and don't belong cleanly to
|
|
53
|
+
* either side. A single callback that owns wire-call + parse +
|
|
54
|
+
* missing-root + projection lets each consumer keep its existing
|
|
55
|
+
* structure, returning whatever shape it needs (typically
|
|
56
|
+
* `{data, response}` so `emitMutation` can take both `data` and
|
|
57
|
+
* `toEmit(response)` post-helper).
|
|
58
|
+
*
|
|
59
|
+
* **Six consumer sites (4 single-leg + 2 fan-out):**
|
|
60
|
+
* - `commands/board/column-create.ts` — single-leg.
|
|
61
|
+
* - `commands/board/column-delete.ts` — single-leg.
|
|
62
|
+
* - `commands/board/archive.ts` — single-leg (M15 retrofit).
|
|
63
|
+
* - `commands/board/delete.ts` — single-leg (M15 retrofit).
|
|
64
|
+
* - `commands/board/column-update.ts` — fan-out (per-attribute
|
|
65
|
+
* across two wire surfaces; trailing per-attribute response
|
|
66
|
+
* is authoritative).
|
|
67
|
+
* - `commands/board/update.ts` — fan-out (M15 retrofit; per-
|
|
68
|
+
* attribute loop + final force-live read; final-read response
|
|
69
|
+
* is authoritative). The `runFanOut` closure wraps loop +
|
|
70
|
+
* final read + projection so a final-read failure with
|
|
71
|
+
* succeededLegs > 0 still triggers invalidation per §8.
|
|
72
|
+
*
|
|
73
|
+
* **M17 trajectory.** The §8 contract is leg-count-shaped, not
|
|
74
|
+
* noun-shaped — M17's five group verbs (`group-create` /
|
|
75
|
+
* `group-update` / `group-archive` / `group-duplicate` /
|
|
76
|
+
* `group-delete`) adopt the helpers verbatim from day one
|
|
77
|
+
* (mirrors R29's M14-close-then-M15-adopts pattern). Site count
|
|
78
|
+
* projects to 9 by M17 close (4 + 5), well above the typical
|
|
79
|
+
* 3-consumer trigger threshold.
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* Tracker handed to the `runFanOut` closure so consumer loops can
|
|
83
|
+
* record successful per-attribute legs without owning the counter.
|
|
84
|
+
* The helper observes `recordLegSuccess()` calls to gate §8
|
|
85
|
+
* invalidation on the high-water-mark rule.
|
|
86
|
+
*/
|
|
87
|
+
export interface BoardFanOutTracker {
|
|
88
|
+
/**
|
|
89
|
+
* Call once per successfully-committed per-attribute wire call.
|
|
90
|
+
* Drives the §8 fan-out invalidation gate: invalidation fires
|
|
91
|
+
* iff this is called at least once before `runFanOut` returns
|
|
92
|
+
* or throws.
|
|
93
|
+
*/
|
|
94
|
+
readonly recordLegSuccess: () => void;
|
|
95
|
+
}
|
|
96
|
+
export interface WithBoardInvalidationSingleLegInputs<T> {
|
|
97
|
+
readonly boardId: string;
|
|
98
|
+
readonly env: NodeJS.ProcessEnv;
|
|
99
|
+
/**
|
|
100
|
+
* Performs the wire mutation, parses + projects the response,
|
|
101
|
+
* and returns whatever the consumer needs post-helper (typically
|
|
102
|
+
* `{data, response}` so `emitMutation` can take both `data` and
|
|
103
|
+
* `toEmit(response)`). If `perform` throws, invalidation is
|
|
104
|
+
* skipped — a failed single-leg call didn't change board state.
|
|
105
|
+
*/
|
|
106
|
+
readonly perform: () => Promise<T>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Single-leg eager-invalidation wrapper per cli-design §8. Runs
|
|
110
|
+
* `perform()` to completion, then calls `invalidateBoard(boardId,
|
|
111
|
+
* env)` before returning the perform result. On the error path
|
|
112
|
+
* (perform throws) invalidation is skipped — bypass-by-throw is
|
|
113
|
+
* the timing contract: a failed single-leg call didn't change
|
|
114
|
+
* server state, so the cache stays valid.
|
|
115
|
+
*/
|
|
116
|
+
export declare const withBoardInvalidationSingleLeg: <T>({ boardId, env, perform, }: WithBoardInvalidationSingleLegInputs<T>) => Promise<T>;
|
|
117
|
+
export interface WithBoardInvalidationFanOutInputs<T> {
|
|
118
|
+
readonly boardId: string;
|
|
119
|
+
readonly env: NodeJS.ProcessEnv;
|
|
120
|
+
/**
|
|
121
|
+
* Runs the per-attribute wire-call loop (and any trailing read /
|
|
122
|
+
* projection legs). Calls `tracker.recordLegSuccess()` after each
|
|
123
|
+
* successful leg so the helper can apply the §8 high-water-mark
|
|
124
|
+
* invalidation rule. Returns whatever the consumer needs post-
|
|
125
|
+
* helper (typically `{data, response}` for `emitMutation` +
|
|
126
|
+
* `toEmit(response)`). When `runFanOut` throws after recording
|
|
127
|
+
* one or more leg successes, the helper invalidates BEFORE
|
|
128
|
+
* re-throwing so the cache reflects partially-applied state.
|
|
129
|
+
*/
|
|
130
|
+
readonly runFanOut: (tracker: BoardFanOutTracker) => Promise<T>;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Fan-out eager-invalidation wrapper per cli-design §8. Runs
|
|
134
|
+
* `runFanOut(tracker)` and applies the high-water-mark rule:
|
|
135
|
+
*
|
|
136
|
+
* - Whole-call success → invalidate iff any leg succeeded
|
|
137
|
+
* (recordLegSuccess called at least once); return the result.
|
|
138
|
+
* - Whole-call partial-application failure → catch the throw;
|
|
139
|
+
* invalidate iff any leg succeeded; re-throw.
|
|
140
|
+
* - Whole-call zero-legs-succeeded failure (the very first leg
|
|
141
|
+
* threw before recordLegSuccess fired) → skip invalidation;
|
|
142
|
+
* re-throw. Server state didn't change, so the cache stays
|
|
143
|
+
* valid.
|
|
144
|
+
*
|
|
145
|
+
* The counter lives in this helper's closure — `runFanOut` cannot
|
|
146
|
+
* read or write it directly, only signal increments via
|
|
147
|
+
* `tracker.recordLegSuccess()`. This pins the §8 contract in the
|
|
148
|
+
* type system (the consumer can't accidentally invalidate before
|
|
149
|
+
* the wire call or skip invalidation on partial-application
|
|
150
|
+
* failure).
|
|
151
|
+
*/
|
|
152
|
+
export declare const withBoardInvalidationFanOut: <T>({ boardId, env, runFanOut, }: WithBoardInvalidationFanOutInputs<T>) => Promise<T>;
|
|
153
|
+
//# sourceMappingURL=board-mutation-invalidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-mutation-invalidation.d.ts","sourceRoot":"","sources":["../../src/api/board-mutation-invalidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAIH;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,oCAAoC,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GAAU,CAAC,EAAE,4BAIrD,oCAAoC,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAIrD,CAAC;AAEF,MAAM,WAAW,iCAAiC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,2BAA2B,GAAU,CAAC,EAAE,8BAIlD,iCAAiC,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAmBlD,CAAC"}
|