@antelopejs/dms 0.15.1 → 0.16.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 (295) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +36 -26
  3. package/bin/control/base.mjs +9 -4
  4. package/bin/control/browser-client.mjs +24 -5
  5. package/bin/control/browser-wire.mjs +41 -0
  6. package/bin/control/browser-wire.test.mjs +96 -0
  7. package/bin/control/browser.mjs +78 -27
  8. package/bin/control/commands-stack.mjs +58 -8
  9. package/bin/control/commands-verify.mjs +47 -1
  10. package/bin/control/doctor.mjs +49 -4
  11. package/bin/control/failure.mjs +9 -0
  12. package/bin/control/journey.mjs +158 -30
  13. package/bin/control/journey.test.mjs +61 -0
  14. package/bin/control/json.mjs +229 -0
  15. package/bin/control/json.test.mjs +130 -0
  16. package/bin/control/mail.mjs +57 -7
  17. package/bin/control/mail.test.mjs +55 -0
  18. package/bin/control/mongo.mjs +205 -27
  19. package/bin/control/mongo.test.mjs +298 -0
  20. package/bin/control/options.mjs +33 -0
  21. package/bin/control/processes.mjs +24 -2
  22. package/bin/control/renderer.mjs +39 -0
  23. package/bin/control/renderer.test.mjs +324 -0
  24. package/bin/control/run-state.mjs +119 -6
  25. package/bin/control/run-state.test.mjs +171 -0
  26. package/bin/control/session.mjs +30 -14
  27. package/bin/control/stack.mjs +95 -24
  28. package/bin/control/tab.mjs +117 -18
  29. package/bin/control/verify/behaviour.mjs +44 -6
  30. package/bin/control/verify/behaviour.test.mjs +130 -22
  31. package/bin/control/verify/decode.mjs +220 -0
  32. package/bin/control/verify/decode.test.mjs +245 -0
  33. package/bin/control/verify/doors.mjs +1 -1
  34. package/bin/control/verify/doors.test.mjs +40 -0
  35. package/bin/control/verify/emit.mjs +135 -9
  36. package/bin/control/verify/formal.mjs +61 -10
  37. package/bin/control/verify/formal.test.mjs +19 -3
  38. package/bin/control/verify/judgement.mjs +22 -3
  39. package/bin/control/verify/map.mjs +25 -5
  40. package/bin/control/verify/publish.mjs +20 -14
  41. package/bin/control/verify/seeded.mjs +65 -16
  42. package/bin/control/verify/skill.mjs +27 -6
  43. package/bin/control/verify/types.mjs +29 -0
  44. package/bin/control/verify/verdict.mjs +72 -7
  45. package/bin/dms-control.mjs +8 -28
  46. package/checks/api-error-presentation.d.mts +61 -0
  47. package/dist/attachments/access.js +1 -1
  48. package/dist/attachments/access.js.map +1 -1
  49. package/dist/attachments/fields.d.ts +2 -2
  50. package/dist/attachments/fields.js +26 -13
  51. package/dist/attachments/fields.js.map +1 -1
  52. package/dist/attachments/index.d.ts +1 -0
  53. package/dist/attachments/index.js +1 -0
  54. package/dist/attachments/index.js.map +1 -1
  55. package/dist/attachments/read.js.map +1 -1
  56. package/dist/attachments/save.d.ts +1 -1
  57. package/dist/attachments/save.js +49 -17
  58. package/dist/attachments/save.js.map +1 -1
  59. package/dist/attachments/table-view.d.ts +1 -2
  60. package/dist/attachments/table-view.js +23 -13
  61. package/dist/attachments/table-view.js.map +1 -1
  62. package/dist/automation/events.d.ts +10 -10
  63. package/dist/automation/index.js +3 -4
  64. package/dist/automation/index.js.map +1 -1
  65. package/dist/automation/send-notification.d.ts +2 -2
  66. package/dist/automation/send-notification.js +4 -6
  67. package/dist/automation/send-notification.js.map +1 -1
  68. package/dist/crons/cleanup-user-invites.js.map +1 -1
  69. package/dist/crons/sweep-expired-sessions.js.map +1 -1
  70. package/dist/crons/sweep-stale-exports.js.map +1 -1
  71. package/dist/db/guard-row.d.ts +2 -3
  72. package/dist/db/guard-row.js +1 -2
  73. package/dist/db/guard-row.js.map +1 -1
  74. package/dist/db/models/attachments.model.d.ts +7 -5
  75. package/dist/db/models/setupToken.model.d.ts +7 -5
  76. package/dist/db/models/signInAttempts.model.d.ts +7 -5
  77. package/dist/db/models/systemState.model.d.ts +7 -5
  78. package/dist/db/models/userEmailChanges.model.d.ts +7 -5
  79. package/dist/db/models/userKnownDevices.model.d.ts +7 -5
  80. package/dist/db/models/userNotificationPreferences.model.d.ts +7 -5
  81. package/dist/db/models/userNotifications.model.d.ts +9 -6
  82. package/dist/db/models/userNotifications.model.js.map +1 -1
  83. package/dist/dev/module-update-notifications.js.map +1 -1
  84. package/dist/hooks/internal/sign-in-monitor.js +6 -6
  85. package/dist/hooks/internal/sign-in-monitor.js.map +1 -1
  86. package/dist/implementations/dms/page/controller.d.ts +2 -2
  87. package/dist/implementations/dms/page/controller.js +3 -1
  88. package/dist/implementations/dms/page/controller.js.map +1 -1
  89. package/dist/implementations/dms/page/dynamic-menu.js +3 -2
  90. package/dist/implementations/dms/page/dynamic-menu.js.map +1 -1
  91. package/dist/implementations/dms/page/notifications.d.ts +6 -2
  92. package/dist/implementations/dms/page/notifications.js +1 -0
  93. package/dist/implementations/dms/page/notifications.js.map +1 -1
  94. package/dist/implementations/dms/page/preview-pages.js +6 -3
  95. package/dist/implementations/dms/page/preview-pages.js.map +1 -1
  96. package/dist/implementations/dms/page/registry.js +10 -4
  97. package/dist/implementations/dms/page/registry.js.map +1 -1
  98. package/dist/implementations/dms/permissions.js +12 -12
  99. package/dist/implementations/dms/permissions.js.map +1 -1
  100. package/dist/implementations/dms-base/bulk-selection.d.ts +3 -4
  101. package/dist/implementations/dms-base/bulk-selection.js +18 -6
  102. package/dist/implementations/dms-base/bulk-selection.js.map +1 -1
  103. package/dist/implementations/dms-base/filter-tokens.js.map +1 -1
  104. package/dist/implementations/dms-base/footer-summary.js +44 -27
  105. package/dist/implementations/dms-base/footer-summary.js.map +1 -1
  106. package/dist/implementations/dms-base/row-rule-operand.d.ts +6 -0
  107. package/dist/implementations/dms-base/row-rule-operand.js +41 -0
  108. package/dist/implementations/dms-base/row-rule-operand.js.map +1 -0
  109. package/dist/implementations/dms-base/search-route.d.ts +9 -13
  110. package/dist/implementations/dms-base/search-route.js +7 -6
  111. package/dist/implementations/dms-base/search-route.js.map +1 -1
  112. package/dist/implementations/dms-base/services.d.ts +1 -0
  113. package/dist/implementations/dms-base/services.js +1 -0
  114. package/dist/implementations/dms-base/services.js.map +1 -1
  115. package/dist/implementations/dms-base/table-view.d.ts +5 -6
  116. package/dist/implementations/dms-base/table-view.js +17 -6
  117. package/dist/implementations/dms-base/table-view.js.map +1 -1
  118. package/dist/implementations/dms-html-render/index.js +16 -6
  119. package/dist/implementations/dms-html-render/index.js.map +1 -1
  120. package/dist/implementations/dms-notifications/delivery-guard.d.ts +3 -2
  121. package/dist/implementations/dms-notifications/delivery-guard.js.map +1 -1
  122. package/dist/implementations/dms-notifications/index.js.map +1 -1
  123. package/dist/index.js.map +1 -1
  124. package/dist/pages/public/preview/block-types.d.ts +1 -2
  125. package/dist/pages/public/preview/block-types.js.map +1 -1
  126. package/dist/pages/settings/overview/account-summary.js +4 -1
  127. package/dist/pages/settings/overview/account-summary.js.map +1 -1
  128. package/dist/pages/settings/users/account-activity-feed.js +3 -2
  129. package/dist/pages/settings/users/account-activity-feed.js.map +1 -1
  130. package/dist/pages/settings/users/account-credentials.d.ts +1 -1
  131. package/dist/pages/settings/users/account-credentials.js +1 -2
  132. package/dist/pages/settings/users/account-credentials.js.map +1 -1
  133. package/dist/pages/settings/users/account-data-store.d.ts +1 -1
  134. package/dist/pages/settings/users/account-data-store.js +1 -3
  135. package/dist/pages/settings/users/account-data-store.js.map +1 -1
  136. package/dist/pages/settings/users/email-change.d.ts +2 -2
  137. package/dist/pages/settings/users/email-change.js +2 -3
  138. package/dist/pages/settings/users/email-change.js.map +1 -1
  139. package/dist/pages/settings/users/invite-extension-routes.d.ts +2 -2
  140. package/dist/pages/settings/users/invite-extension-routes.js +11 -4
  141. package/dist/pages/settings/users/invite-extension-routes.js.map +1 -1
  142. package/dist/pages/settings/users/invites.d.ts +2 -2
  143. package/dist/pages/settings/users/member-invite-batch.d.ts +2 -2
  144. package/dist/pages/settings/users/member-invite-batch.js +7 -3
  145. package/dist/pages/settings/users/member-invite-batch.js.map +1 -1
  146. package/dist/pages/settings/users/member-roles-field.js +1 -4
  147. package/dist/pages/settings/users/member-roles-field.js.map +1 -1
  148. package/dist/pages/settings/users/members.d.ts +2 -3
  149. package/dist/pages/settings/users/members.js.map +1 -1
  150. package/dist/pages/settings/users/notifications.d.ts +2 -3
  151. package/dist/pages/settings/users/notifications.js +2 -1
  152. package/dist/pages/settings/users/notifications.js.map +1 -1
  153. package/dist/pages/settings/users/profile-helpers.d.ts +0 -1
  154. package/dist/pages/settings/users/profile-helpers.js +0 -17
  155. package/dist/pages/settings/users/profile-helpers.js.map +1 -1
  156. package/dist/pages/settings/users/profile.d.ts +3 -4
  157. package/dist/pages/settings/users/profile.js +12 -12
  158. package/dist/pages/settings/users/profile.js.map +1 -1
  159. package/dist/pages/settings/users/region.d.ts +3 -4
  160. package/dist/pages/settings/users/region.js.map +1 -1
  161. package/dist/pages/settings/users/regional-preferences.d.ts +8 -1
  162. package/dist/pages/settings/users/regional-preferences.js +10 -6
  163. package/dist/pages/settings/users/regional-preferences.js.map +1 -1
  164. package/dist/pages/settings/users/role-preview.js +3 -2
  165. package/dist/pages/settings/users/role-preview.js.map +1 -1
  166. package/dist/pages/settings/users/roles.d.ts +4 -5
  167. package/dist/pages/settings/users/roles.js.map +1 -1
  168. package/dist/pages/settings/users/security.d.ts +9 -12
  169. package/dist/pages/settings/users/security.js +11 -9
  170. package/dist/pages/settings/users/security.js.map +1 -1
  171. package/dist/pages/settings/users/two-factor-operations.d.ts +7 -7
  172. package/dist/pages/settings/users/two-factor-operations.js +5 -7
  173. package/dist/pages/settings/users/two-factor-operations.js.map +1 -1
  174. package/dist/realtime/broker.js.map +1 -1
  175. package/dist/realtime/heartbeat.js.map +1 -1
  176. package/dist/realtime/redis-broker.js.map +1 -1
  177. package/dist/realtime/sessions.js.map +1 -1
  178. package/dist/realtime/sse.js +1 -2
  179. package/dist/realtime/sse.js.map +1 -1
  180. package/dist/routes/auth/forgot-password.d.ts +1 -1
  181. package/dist/routes/auth/forgot-password.js +1 -3
  182. package/dist/routes/auth/forgot-password.js.map +1 -1
  183. package/dist/routes/auth/login.d.ts +1 -1
  184. package/dist/routes/auth/login.js +1 -2
  185. package/dist/routes/auth/login.js.map +1 -1
  186. package/dist/routes/auth/logout.d.ts +1 -1
  187. package/dist/routes/auth/logout.js +1 -2
  188. package/dist/routes/auth/logout.js.map +1 -1
  189. package/dist/routes/auth/oauth/providers.js +30 -6
  190. package/dist/routes/auth/oauth/providers.js.map +1 -1
  191. package/dist/routes/auth/oauth/state.js +8 -5
  192. package/dist/routes/auth/oauth/state.js.map +1 -1
  193. package/dist/routes/auth/oauth/token-exchange.js +8 -1
  194. package/dist/routes/auth/oauth/token-exchange.js.map +1 -1
  195. package/dist/routes/auth/refresh.d.ts +1 -1
  196. package/dist/routes/auth/refresh.js +1 -2
  197. package/dist/routes/auth/refresh.js.map +1 -1
  198. package/dist/routes/auth/request-2fa-email.d.ts +1 -1
  199. package/dist/routes/auth/request-2fa-email.js +1 -2
  200. package/dist/routes/auth/request-2fa-email.js.map +1 -1
  201. package/dist/routes/auth/reset-password.d.ts +1 -1
  202. package/dist/routes/auth/reset-password.js +1 -3
  203. package/dist/routes/auth/reset-password.js.map +1 -1
  204. package/dist/routes/auth/session-handoff.d.ts +1 -1
  205. package/dist/routes/auth/session-handoff.js +1 -2
  206. package/dist/routes/auth/session-handoff.js.map +1 -1
  207. package/dist/routes/auth/signup.d.ts +1 -1
  208. package/dist/routes/auth/signup.js +1 -2
  209. package/dist/routes/auth/signup.js.map +1 -1
  210. package/dist/routes/auth/switch-tenant.d.ts +2 -3
  211. package/dist/routes/auth/switch-tenant.js +3 -2
  212. package/dist/routes/auth/switch-tenant.js.map +1 -1
  213. package/dist/routes/auth/validate-forgot-password-token.d.ts +1 -1
  214. package/dist/routes/auth/validate-forgot-password-token.js +1 -3
  215. package/dist/routes/auth/validate-forgot-password-token.js.map +1 -1
  216. package/dist/routes/auth/validate-invite-token.d.ts +1 -1
  217. package/dist/routes/auth/validate-invite-token.js +1 -3
  218. package/dist/routes/auth/validate-invite-token.js.map +1 -1
  219. package/dist/routes/auth/verify-2fa.d.ts +1 -1
  220. package/dist/routes/auth/verify-2fa.js +1 -2
  221. package/dist/routes/auth/verify-2fa.js.map +1 -1
  222. package/dist/routes/auth/verify-email.d.ts +1 -1
  223. package/dist/routes/auth/verify-email.js +1 -2
  224. package/dist/routes/auth/verify-email.js.map +1 -1
  225. package/dist/routes/auth.d.ts +14 -15
  226. package/dist/routes/auth.js +15 -13
  227. package/dist/routes/auth.js.map +1 -1
  228. package/dist/routes/files.d.ts +1 -2
  229. package/dist/routes/files.js.map +1 -1
  230. package/dist/routes/onboarding.d.ts +1 -2
  231. package/dist/routes/onboarding.js.map +1 -1
  232. package/dist/routes/realtime.js +5 -6
  233. package/dist/routes/realtime.js.map +1 -1
  234. package/dist/routes/store.d.ts +6 -7
  235. package/dist/routes/store.js +19 -13
  236. package/dist/routes/store.js.map +1 -1
  237. package/dist/store/catalog.d.ts +13 -5
  238. package/dist/store/catalog.js +19 -9
  239. package/dist/store/catalog.js.map +1 -1
  240. package/dist/store/compatibility.d.ts +1 -0
  241. package/dist/store/compatibility.js +24 -8
  242. package/dist/store/compatibility.js.map +1 -1
  243. package/dist/store/frontend-compatibility.js +15 -3
  244. package/dist/store/frontend-compatibility.js.map +1 -1
  245. package/dist/store/interfaces.js +35 -13
  246. package/dist/store/interfaces.js.map +1 -1
  247. package/dist/store/internal/frontend/frontend-modules.js +7 -3
  248. package/dist/store/internal/frontend/frontend-modules.js.map +1 -1
  249. package/dist/store/internal/frontend/frontend-ready.d.ts +2 -1
  250. package/dist/store/internal/frontend/frontend-ready.js +6 -4
  251. package/dist/store/internal/frontend/frontend-ready.js.map +1 -1
  252. package/dist/store/internal/frontend/manifest.js +6 -7
  253. package/dist/store/internal/frontend/manifest.js.map +1 -1
  254. package/dist/store/operations.js.map +1 -1
  255. package/dist/store/registry.js.map +1 -1
  256. package/dist/store/runtime.d.ts +13 -0
  257. package/dist/store/runtime.js +9 -1
  258. package/dist/store/runtime.js.map +1 -1
  259. package/dist/utils/admin-invite-email.js +3 -1
  260. package/dist/utils/admin-invite-email.js.map +1 -1
  261. package/dist/utils/email-subjects.js +3 -1
  262. package/dist/utils/email-subjects.js.map +1 -1
  263. package/dist/utils/export-jobs-run.js.map +1 -1
  264. package/dist/utils/export-jobs.js +3 -9
  265. package/dist/utils/export-jobs.js.map +1 -1
  266. package/dist/utils/index.d.ts +1 -0
  267. package/dist/utils/index.js +1 -0
  268. package/dist/utils/index.js.map +1 -1
  269. package/dist/utils/own-value.d.ts +1 -0
  270. package/dist/utils/own-value.js +7 -0
  271. package/dist/utils/own-value.js.map +1 -0
  272. package/dist/utils/row-action-rule-evaluator.js +31 -35
  273. package/dist/utils/row-action-rule-evaluator.js.map +1 -1
  274. package/dist/utils/sign-in-country.js +4 -2
  275. package/dist/utils/sign-in-country.js.map +1 -1
  276. package/dist/utils/tenant-export-archive.js +9 -14
  277. package/dist/utils/tenant-export-archive.js.map +1 -1
  278. package/dist/utils/user-agent.js +2 -1
  279. package/dist/utils/user-agent.js.map +1 -1
  280. package/dist/validation/auth.schema.d.ts +10 -10
  281. package/dist/validation/regional-preferences.schema.d.ts +2 -2
  282. package/dist/validation/role-editor.schema.d.ts +1 -1
  283. package/frontend-vue/build/backend-boundary.ts +49 -18
  284. package/frontend-vue/dms.frontend.ts +8 -12
  285. package/frontend-vue/layers/dms-auth/server/accounts.ts +44 -3
  286. package/frontend-vue/layers/dms-auth/server/actions.ts +17 -4
  287. package/frontend-vue/layers/dms-auth/server/oauth.ts +42 -4
  288. package/frontend-vue/layers/dms-core/app/types/watch.ts +1 -2
  289. package/frontend-vue/layers/dms-ui/app/build/composables/form/fieldValueRule.ts +57 -6
  290. package/frontend-vue/layers/dms-ui/app/build/composables/form/registerFormFunctions.ts +7 -9
  291. package/frontend-vue/layers/dms-ui/app/entries/composables/form/registerFormFunctions.ts +1 -0
  292. package/frontend-vue/lazy-plugin.ts +18 -0
  293. package/frontend-vue/package.json +2 -2
  294. package/package.json +19 -13
  295. package/skills/dms-project/SKILL.md +4 -3
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The shapes the verification harness passes between its modules: the plan a
3
+ * diff maps to, the verifier's judgement, the recorded result of a formal
4
+ * check and the verdict computed from them. This module holds types only.
5
+ *
6
+ * @typedef {{ kind: "emit" } | { kind: "probe", command: string[] }} BehaviourProbe
7
+ * @typedef {{ name: string, covers: string[], files?: string[], command: string[], baseCommand?: string[], violation: RegExp | null, passing: RegExp | null, behaviour?: BehaviourProbe }} FormalCheck
8
+ * @typedef {{ baseSha: string, headSha: string }} Commits
9
+ * @typedef {{ method: string, changed: boolean, removed: string[], added: string[] }} BehaviourChange
10
+ * @typedef {{ exitCode: number | null, violated: string[], passing: string[] }} Rules
11
+ * @typedef {{ name: string, exitCode: number | null, violated: string[], passing: string[], folder: string, commits?: Commits, behaviour?: BehaviourChange, checkChanged?: boolean, base?: Rules | null, fixed?: string[], missing?: string[] }} FormalResult
12
+ * @typedef {{ feature: string, files: string[] }} TouchedFeature
13
+ * @typedef {{ baseRef: string, baseSha: string, headSha: string, changed: string[], touched: TouchedFeature[], unmapped: string[], docs: string[], containments: string[], run: string[] }} Plan
14
+ * @typedef {{ kind?: string, location?: string, irreversible?: string, containment?: string, containmentJourney?: string }} RawDoorRow
15
+ * @typedef {{ kind?: string, location?: string, reason?: string }} RawFalsePositive
16
+ * @typedef {{ page: string, matches?: boolean, note?: string }} RawDocsJudgement
17
+ * @typedef {{ verifier?: string, notVerified?: string[], attention?: string[], docs?: RawDocsJudgement[], doors?: { none?: string, rows?: RawDoorRow[], falsePositives?: RawFalsePositive[] } }} RawJudgement
18
+ * @typedef {{ kind: string, location: string, irreversible: string, containment: string, containmentJourney: string }} DoorRow
19
+ * @typedef {{ kind: string, location: string, reason: string }} FalsePositive
20
+ * @typedef {{ page: string, matches: boolean, note: string }} DocsJudgement
21
+ * @typedef {{ notVerified: string[], attention: string[], docs: DocsJudgement[], doorsNone: string | null, doors: DoorRow[], falsePositives: FalsePositive[], verifier: string }} Judgement
22
+ * @typedef {{ name: string, pass: boolean, detail: string }} JourneyCheck
23
+ * @typedef {{ feature: string, journey: string, title: string, entryPoint: string, status: "PASS" | "FAIL", database: string, steps: { name: string, checks: JourneyCheck[] }[], error: string | null, folder: string }} FeatureResult
24
+ * @typedef {{ result: string, headSha: string, skillSha: string, pr: number, reasons: string[] }} VerdictCore
25
+ * @typedef {VerdictCore & { markdown: string }} Verdict
26
+ * @typedef {{ feature: string, caught: boolean, run: string, controlRun: string, caughtBy: string[], failingInControl: string[], harnessErrors: string[], output: string }} SeededOutcome
27
+ */
28
+
29
+ export {};
@@ -1,7 +1,8 @@
1
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
1
+ import { existsSync, writeFileSync } from "node:fs";
2
2
  import { join, relative } from "node:path";
3
3
  import { git } from "../git.mjs";
4
4
  import { loadJourneys } from "../journey.mjs";
5
+ import { readFeatureResults } from "./decode.mjs";
5
6
  import { flaggedDoors } from "./doors.mjs";
6
7
  import {
7
8
  formalGate,
@@ -26,22 +27,45 @@ export function originRepository(repo) {
26
27
  return match[1];
27
28
  }
28
29
 
30
+ /**
31
+ * @param {string} sha A commit
32
+ * @returns {string} Its first seven characters
33
+ */
29
34
  function short(sha) {
30
35
  return sha.slice(0, 7);
31
36
  }
32
37
 
38
+ /**
39
+ * @param {string[]} entries The list items
40
+ * @param {string} empty The item that stands for an empty list
41
+ * @returns {string[]} The Markdown bullets
42
+ */
33
43
  function bullets(entries, empty) {
34
44
  return (entries.length > 0 ? entries : [empty]).map((entry) => `- ${entry}`);
35
45
  }
36
46
 
47
+ /**
48
+ * @param {import("../run-state.mjs").RunState} state The run
49
+ * @param {string} feature The feature
50
+ * @returns {import("./types.mjs").FeatureResult[]} The journey results the run recorded
51
+ */
37
52
  function readResults(state, feature) {
38
- const file = join(state.evidence, feature, "feature.json");
39
- return existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : [];
53
+ return readFeatureResults(join(state.evidence, feature, "feature.json"));
40
54
  }
41
55
 
56
+ /**
57
+ * @param {import("./skill.mjs").Skill} skill The skill
58
+ * @param {import("../run-state.mjs").RunState} state The run
59
+ * @param {import("./types.mjs").Plan} plan The plan
60
+ * @param {(path: string) => string} link The evidence link of a path
61
+ * @returns {Promise<{ rows: string[], reasons: string[], byJourney: Map<string, import("./types.mjs").FeatureResult> }>} The table rows and why the verdict fails
62
+ */
42
63
  async function journeyRows(skill, state, plan, link) {
64
+ /** @type {string[]} */
43
65
  const rows = [];
66
+ /** @type {string[]} */
44
67
  const reasons = [];
68
+ /** @type {Map<string, import("./types.mjs").FeatureResult>} */
45
69
  const byJourney = new Map();
46
70
  for (const feature of plan.run) {
47
71
  const results = readResults(state, feature);
@@ -71,6 +95,12 @@ async function journeyRows(skill, state, plan, link) {
71
95
  return { rows, reasons, byJourney };
72
96
  }
73
97
 
98
+ /**
99
+ * @param {import("../run-state.mjs").RunState} state The run
100
+ * @param {Map<string, import("./types.mjs").FeatureResult>} byJourney The results of this verdict's journeys
101
+ * @param {string} id The containment journey, as `feature/journey`
102
+ * @returns {import("./types.mjs").FeatureResult | undefined} Its result
103
+ */
74
104
  function containmentResult(state, byJourney, id) {
75
105
  const [feature, journey] = id.split("/");
76
106
  return (
@@ -79,7 +109,16 @@ function containmentResult(state, byJourney, id) {
79
109
  );
80
110
  }
81
111
 
112
+ /**
113
+ * @param {import("./skill.mjs").Skill} skill The skill
114
+ * @param {import("../run-state.mjs").RunState} state The run
115
+ * @param {import("./types.mjs").Judgement} judgement The verifier's judgement
116
+ * @param {Map<string, import("./types.mjs").FeatureResult>} byJourney The results of this verdict's journeys
117
+ * @param {import("./types.mjs").Plan} plan The plan
118
+ * @returns {string[]} Why the doors fail the verdict
119
+ */
82
120
  function doorReasons(skill, state, judgement, byJourney, plan) {
121
+ /** @type {string[]} */
83
122
  const reasons = [];
84
123
  for (const row of judgement.doors.filter((door) =>
85
124
  CONTAINED_KINDS.has(door.kind),
@@ -114,6 +153,10 @@ function doorReasons(skill, state, judgement, byJourney, plan) {
114
153
  return reasons;
115
154
  }
116
155
 
156
+ /**
157
+ * @param {import("./types.mjs").Judgement} judgement The verifier's judgement
158
+ * @returns {string[]} The section's lines
159
+ */
117
160
  function doorsSection(judgement) {
118
161
  const dismissed = judgement.falsePositives.map(
119
162
  (entry) =>
@@ -134,6 +177,13 @@ function doorsSection(judgement) {
134
177
  ];
135
178
  }
136
179
 
180
+ /**
181
+ * @param {import("./skill.mjs").Skill} skill The skill
182
+ * @param {import("../run-state.mjs").RunState} state The run
183
+ * @param {import("./types.mjs").Plan} plan The plan
184
+ * @param {(path: string) => string} link The evidence link of a path
185
+ * @returns {{ reasons: string[], lines: string[] }} Why the formal checks fail the verdict, and their lines
186
+ */
137
187
  function formalSection(skill, state, plan, link) {
138
188
  const reasons = [];
139
189
  const lines = [];
@@ -173,6 +223,11 @@ function formalSection(skill, state, plan, link) {
173
223
  return { reasons, lines };
174
224
  }
175
225
 
226
+ /**
227
+ * @param {import("./types.mjs").Judgement} judgement The verifier's judgement
228
+ * @param {import("./types.mjs").Plan} plan The plan
229
+ * @returns {string[]} The docs pages that no longer match
230
+ */
176
231
  function docsReasons(judgement, plan) {
177
232
  return plan.docs.flatMap((page) => {
178
233
  const docs = judgement.docs.find((entry) => entry.page === page);
@@ -184,6 +239,12 @@ function docsReasons(judgement, plan) {
184
239
  });
185
240
  }
186
241
 
242
+ /**
243
+ * @param {import("./skill.mjs").Skill} skill The skill
244
+ * @param {import("./types.mjs").VerdictCore} verdict The verdict
245
+ * @param {{ plan: import("./types.mjs").Plan, judgement: import("./types.mjs").Judgement, journeys: Awaited<ReturnType<typeof journeyRows>>, formal: ReturnType<typeof formalSection>, reasons: string[], attention: string[], link: (path: string) => string }} parts What the verdict is rendered from
246
+ * @returns {string} The verdict as Markdown
247
+ */
187
248
  function markdown(skill, verdict, parts) {
188
249
  const { plan, judgement, journeys, formal, reasons, attention, link } = parts;
189
250
  const touched = plan.touched.map(
@@ -251,11 +312,11 @@ function markdown(skill, verdict, parts) {
251
312
  * the formal check results and the verifier's judgement, and writes
252
313
  * verdict.md, verdict.json and plan.json into the evidence folder.
253
314
  *
254
- * @param {Record<string, any>} skill The skill
255
- * @param {Record<string, any>} state The run
315
+ * @param {import("./skill.mjs").Skill} skill The skill
316
+ * @param {import("../run-state.mjs").RunState} state The run
256
317
  * @param {number} pr The pull request
257
- * @param {Record<string, any>} judgement The verifier's judgement
258
- * @returns {Promise<{ result: string, headSha: string, skillSha: string, pr: number, markdown: string, reasons: string[] }>} The verdict
318
+ * @param {import("./types.mjs").Judgement} judgement The verifier's judgement
319
+ * @returns {Promise<import("./types.mjs").Verdict>} The verdict
259
320
  */
260
321
  export async function renderVerdict(skill, state, pr, judgement) {
261
322
  const plan = planFor(skill, state.baseRef);
@@ -265,6 +326,10 @@ export async function renderVerdict(skill, state, pr, judgement) {
265
326
  skill.repo,
266
327
  ) || plan.headSha;
267
328
  const repository = originRepository(skill.repo);
329
+ /**
330
+ * @param {string} path A path under the run's evidence
331
+ * @returns {string} Its link on the evidence branch
332
+ */
268
333
  const link = (path) =>
269
334
  `https://github.com/${repository}/tree/verify-evidence/pr-${pr}/${plan.headSha}/${path}`;
270
335
  const reasons = [];
@@ -1,14 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { parseArgs } from "node:util";
3
+ import { OPTIONS } from "./control/options.mjs";
3
4
  import { print, runStackCommand } from "./control/commands-stack.mjs";
4
5
  import { runVerifyCommand } from "./control/commands-verify.mjs";
5
6
 
6
7
  const USAGE = `Usage: dms-control <command>
7
8
 
8
9
  Drive an isolated DMS (run from the repository, or pass --playground):
9
- up [--prepare] [--playground <dir>] [--runs <dir>] [--mongo-url <url>] [--env KEY=VALUE]... [--base <ref>] [--skill <dir>]
10
+ up [--prepare] [--playground <dir>] [--renderer <dir>] [--runs <dir>] [--mongo-url <url>] [--env KEY=VALUE]... [--base <ref>] [--skill <dir>]
10
11
  build and start a playground copy on free ports; print the run folder
11
- (--prepare first runs the skill's install and build commands)
12
+ (--prepare first runs the skill's install and build commands;
13
+ --renderer serves that built @antelopejs/dms-frontend checkout)
12
14
  doctor <run> [--verbose] check the run is worth driving; print the failing checks
13
15
  onboard <run> [--platform-name <name>]
14
16
  create the run's administrator through POST /api/onboarding/register
@@ -33,32 +35,10 @@ Verify a change (the .agents/skills/verify-* folder of the checkout, or --skill
33
35
  publish <run> --pr <n> push the evidence, comment the verdict, set the verify status
34
36
  `;
35
37
 
36
- const OPTIONS = {
37
- prepare: { type: "boolean" },
38
- playground: { type: "string" },
39
- runs: { type: "string" },
40
- "mongo-url": { type: "string" },
41
- env: { type: "string", multiple: true },
42
- base: { type: "string", default: "origin/main" },
43
- skill: { type: "string" },
44
- verbose: { type: "boolean" },
45
- "platform-name": { type: "string" },
46
- as: { type: "string" },
47
- tab: { type: "string" },
48
- role: { type: "string" },
49
- name: { type: "string" },
50
- exact: { type: "boolean" },
51
- nth: { type: "string" },
52
- "within-role": { type: "string" },
53
- "within-name": { type: "string" },
54
- value: { type: "string" },
55
- key: { type: "string" },
56
- path: { type: "string" },
57
- body: { type: "string" },
58
- pr: { type: "string" },
59
- all: { type: "boolean" },
60
- };
61
-
38
+ /**
39
+ * @param {string[]} argv The command line without the node and script paths
40
+ * @returns {Promise<number>} The exit code
41
+ */
62
42
  async function main(argv) {
63
43
  const { positionals, values } = parseArgs({
64
44
  args: argv,
@@ -0,0 +1,61 @@
1
+ import type * as ts from "typescript";
2
+
3
+ /** One script block of a source file, with its offset in that file. */
4
+ export interface ApiErrorScript {
5
+ source: string;
6
+ offset: number;
7
+ isSetup?: boolean;
8
+ }
9
+
10
+ /** A script block of a parsed Vue single-file component. */
11
+ export interface SfcScriptBlock {
12
+ content: string;
13
+ loc: { start: { offset: number } };
14
+ }
15
+
16
+ /** The part of `vue/compiler-sfc`'s `parse` the checker calls; that `parse` satisfies it. */
17
+ export interface SfcParser {
18
+ parse(
19
+ source: string,
20
+ options: { filename: string },
21
+ ): {
22
+ descriptor: {
23
+ script: SfcScriptBlock | null;
24
+ scriptSetup: SfcScriptBlock | null;
25
+ };
26
+ errors: readonly Error[];
27
+ };
28
+ }
29
+
30
+ /** A toast call that reports a failure outside the canonical presenter. */
31
+ export interface ApiErrorToastCall {
32
+ node: ts.CallExpression;
33
+ payload: ts.Expression | undefined;
34
+ method: "add" | "update";
35
+ failure: string | null;
36
+ color: string;
37
+ tree: ts.SourceFile;
38
+ }
39
+
40
+ /** Runtime sources only. Test fixtures and generated directories are excluded. */
41
+ export declare function apiErrorSources(root: string): string[];
42
+
43
+ /** Parses both Vue script blocks without treating template text as JavaScript. */
44
+ export declare function apiErrorScripts(
45
+ file: string,
46
+ source: string,
47
+ tools: SfcParser,
48
+ ): ApiErrorScript[];
49
+
50
+ /** Analyzes local toast bindings and failure regions. Cross-file effects are not inferred. */
51
+ export declare function analyzeApiErrorScript(
52
+ source: string,
53
+ file: string,
54
+ compiler: typeof ts,
55
+ ): ApiErrorToastCall[];
56
+
57
+ /** Returns diagnostics for local failure toasts outside the canonical presenter. */
58
+ export declare function checkApiErrorPresentation(roots: string[]): string[];
59
+
60
+ /** Runs the checker with development dependencies resolved from each frontend root. */
61
+ export declare function assertApiErrorPresentation(roots: string[]): void;
@@ -15,7 +15,7 @@ exports.RegisterNativeUploadField = {
15
15
  const key = JSON.stringify(registration);
16
16
  const current = registrations.get(key);
17
17
  registrations.set(key, {
18
- declaration: JSON.parse(key),
18
+ declaration: structuredClone(registration),
19
19
  count: (current?.count || 0) + 1,
20
20
  });
21
21
  },
@@ -1 +1 @@
1
- {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/attachments/access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/attachments/access.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { AttachmentField, AttachmentSaveRequest } from "@antelopejs/interface-dms/attachments";
1
+ import type { AttachmentField } from "@antelopejs/interface-dms/attachments";
2
2
  export interface AttachmentReference {
3
3
  key: string;
4
4
  field: AttachmentField;
5
5
  }
6
- export declare function collectAttachments(fields: AttachmentField[], document: AttachmentSaveRequest["submitted"]): AttachmentReference[];
6
+ export declare function collectAttachments(fields: AttachmentField[], document: Record<string, unknown>): AttachmentReference[];
7
7
  export declare function containsAttachment(references: AttachmentReference[], reference: AttachmentReference): boolean;
@@ -2,21 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectAttachments = collectAttachments;
4
4
  exports.containsAttachment = containsAttachment;
5
- function extractKeys(value, kind) {
6
- if (kind === "file" && typeof value === "string")
7
- return value ? [value] : [];
8
- if (!value || typeof value !== "object")
9
- return [];
10
- if (!Array.isArray(value) && kind === "image" && "key" in value) {
11
- return typeof value.key === "string" && value.key ? [value.key] : [];
12
- }
13
- return Object.values(value).flatMap((item) => extractKeys(item, kind));
5
+ const own_value_1 = require("../utils/own-value");
6
+ function isRecord(value) {
7
+ return typeof value === "object" && value !== null;
14
8
  }
15
9
  function collectAttachments(fields, document) {
16
- return fields.flatMap((field) => [...new Set(extractKeys(document[field.key], field.kind))].map((key) => ({
17
- key,
18
- field,
19
- })));
10
+ return fields.flatMap((field) => {
11
+ const keys = new Set();
12
+ const pending = [(0, own_value_1.ownValue)(document, field.key)];
13
+ while (pending.length > 0) {
14
+ const item = pending.pop();
15
+ if (field.kind === "file" && typeof item === "string") {
16
+ if (item)
17
+ keys.add(item);
18
+ }
19
+ else if (isRecord(item)) {
20
+ if (!Array.isArray(item) && field.kind === "image" && "key" in item) {
21
+ if (typeof item.key === "string" && item.key)
22
+ keys.add(item.key);
23
+ }
24
+ else {
25
+ const children = Object.values(item);
26
+ for (let index = children.length - 1; index >= 0; index -= 1)
27
+ pending.push(children[index]);
28
+ }
29
+ }
30
+ }
31
+ return [...keys].map((key) => ({ key, field }));
32
+ });
20
33
  }
21
34
  function containsAttachment(references, reference) {
22
35
  return references.some((candidate) => candidate.key === reference.key &&
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/attachments/fields.ts"],"names":[],"mappings":";;AAyBA,gDAUC;AAED,gDASC;AApCD,SAAS,WAAW,CAClB,KAAiD,EACjD,IAA6B;IAG7B,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAEhE,OAAO,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAgB,kBAAkB,CAChC,MAAyB,EACzB,QAA4C;IAE5C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvE,GAAG;QACH,KAAK;KACN,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,UAAiC,EACjC,SAA8B;IAE9B,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG;QAC/B,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/attachments/fields.ts"],"names":[],"mappings":";;AAYA,gDA0BC;AAED,gDASC;AAhDD,kDAA8C;AAO9C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAgB,kBAAkB,CAChC,MAAyB,EAEzB,QAAiC;IAEjC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,OAAO,GAAc,CAAC,IAAA,oBAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAE3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtD,IAAI,IAAI;oBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAEpE,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG;wBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACrC,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;wBAC1D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,kBAAkB,CAChC,UAAiC,EACjC,SAA8B;IAE9B,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG;QAC/B,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAC5C,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./access";
2
+ export * from "./fields";
2
3
  export * from "./read";
3
4
  export * from "./registry";
4
5
  export * from "./save";
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./access"), exports);
18
+ __exportStar(require("./fields"), exports);
18
19
  __exportStar(require("./read"), exports);
19
20
  __exportStar(require("./registry"), exports);
20
21
  __exportStar(require("./save"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attachments/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,6CAA2B;AAC3B,yCAAuB;AACvB,+CAA6B;AAC7B,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attachments/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB;AACvB,6CAA2B;AAC3B,yCAAuB;AACvB,+CAA6B;AAC7B,4CAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/attachments/read.ts"],"names":[],"mappings":";;AAkCA,wCAqBC;AAvDD,6DAA4E;AAC5E,+EAI4C;AAE5C,qCAAkD;AAClD,yCAIoB;AAEpB,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAgB;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,IAAA,sCAAa,EAC9B,GAAG,EACH,mCAAwB,GAAG,sBAAsB,EACjD,OAAO,CACR,CAAC;QACF,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,0CAAiB;YACpC,MAAM,IAAI,0BAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAGM,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,GAAW,EACX,OAAgB;IAEhB,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAc,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAsB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,IAAA,+BAAsB,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QAAE,IAAA,yBAAc,GAAE,CAAC;IACjE,MAAM,QAAQ,GACZ,IAAI,CAAC,GAAG,EAAE,GAAG,mCAAwB,GAAG,uBAAuB,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,IACE,MAAM,CAAC,UAAU,KAAK,QAAQ;QAC9B,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS;YAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,EAC5B,CAAC;QACD,IAAA,yBAAc,GAAE,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/attachments/read.ts"],"names":[],"mappings":";;AAkCA,wCAsBC;AAxDD,6DAA4E;AAC5E,+EAI4C;AAE5C,qCAAkD;AAClD,yCAIoB;AAEpB,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAgB;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,IAAA,sCAAa,EAC9B,GAAG,EACH,mCAAwB,GAAG,sBAAsB,EACjD,OAAO,CACR,CAAC;QACF,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,0CAAiB;YACpC,MAAM,IAAI,0BAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAGM,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,GAAW,EACX,OAAgB;IAEhB,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAc,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAsB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,IAAA,+BAAsB,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QAAE,IAAA,yBAAc,GAAE,CAAC;IACjE,MAAM,QAAQ,GACZ,IAAI,CAAC,GAAG,EAAE,GAAG,mCAAwB,GAAG,uBAAuB,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,IACE,MAAM,CAAC,UAAU,KAAK,QAAQ;QAC9B,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS;YAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,EAC5B,CAAC;QACD,IAAA,yBAAc,GAAE,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,2 +1,2 @@
1
1
  import type { AttachmentSaveRequest, AttachmentSaveResult } from "@antelopejs/interface-dms/attachments";
2
- export declare function SaveComponentFiles<T>(request: AttachmentSaveRequest, save: (document: AttachmentSaveRequest["submitted"]) => Promise<AttachmentSaveResult<T>>): Promise<T>;
2
+ export declare function SaveComponentFiles<T>(request: AttachmentSaveRequest, save: (document: Record<string, unknown>) => Promise<AttachmentSaveResult<T>>): Promise<T>;
@@ -10,9 +10,6 @@ const fields_1 = require("./fields");
10
10
  const registry_1 = require("./registry");
11
11
  const BAD_REQUEST = 400;
12
12
  const FILE_NOT_FOUND_ERROR_NAME = "FileNotFoundError";
13
- function isFileNotFoundError(error) {
14
- return error instanceof Error && error.name === FILE_NOT_FOUND_ERROR_NAME;
15
- }
16
13
  async function storedReference(ref) {
17
14
  try {
18
15
  const key = (0, interface_file_storage_1.isStagedKey)(ref.key)
@@ -21,7 +18,7 @@ async function storedReference(ref) {
21
18
  return { key, metadata: await (0, interface_file_storage_1.GetFileMetadata)(key, ref.field.storage) };
22
19
  }
23
20
  catch (error) {
24
- if (isFileNotFoundError(error))
21
+ if (error instanceof Error && error.name === FILE_NOT_FOUND_ERROR_NAME)
25
22
  throw new interface_api_1.HTTPResult(BAD_REQUEST, "A submitted file was never stored. Upload it again.");
26
23
  throw error;
27
24
  }
@@ -48,17 +45,36 @@ async function prepareReferences(request) {
48
45
  await validateReference(request, ref);
49
46
  return submitted;
50
47
  }
51
- async function remapValue(value, map) {
52
- if (typeof value === "string")
53
- return map.get(value) ?? value;
54
- if (!value || typeof value !== "object")
55
- return value;
56
- if (Array.isArray(value))
57
- return Promise.all(value.map((item) => remapValue(item, map)));
58
- return Object.fromEntries(await Promise.all(Object.entries(value).map(async ([key, item]) => [
59
- key,
60
- await remapValue(item, map),
61
- ])));
48
+ function remapValue(value, map) {
49
+ const result = [value];
50
+ const pending = [
51
+ { keys: ["0"], values: [value], copy: result },
52
+ ];
53
+ for (let node = pending.pop(); node; node = pending.pop()) {
54
+ for (const [index, key] of node.keys.entries()) {
55
+ const item = node.values[index];
56
+ let remapped = item;
57
+ if (typeof item === "string")
58
+ remapped = map.get(item) ?? item;
59
+ else if (item && typeof item === "object") {
60
+ const copy = Array.isArray(item) ? Array.from(item) : {};
61
+ const source = Array.isArray(copy) ? copy : item;
62
+ pending.push({
63
+ keys: Object.keys(source),
64
+ values: Object.values(source),
65
+ copy,
66
+ });
67
+ remapped = copy;
68
+ }
69
+ Object.defineProperty(node.copy, key, {
70
+ value: remapped,
71
+ enumerable: true,
72
+ writable: true,
73
+ configurable: true,
74
+ });
75
+ }
76
+ }
77
+ return result[0];
62
78
  }
63
79
  async function promoteReferences(request, refs) {
64
80
  const document = { ...request.submitted };
@@ -69,8 +85,8 @@ async function promoteReferences(request, refs) {
69
85
  assertConstraints(metadata, ref);
70
86
  mapping.set(ref.key, key);
71
87
  }
72
- if (field.key in document)
73
- document[field.key] = await remapValue(document[field.key], mapping);
88
+ if (Object.hasOwn(document, field.key))
89
+ document[field.key] = remapValue(document[field.key], mapping);
74
90
  }
75
91
  return document;
76
92
  }
@@ -88,7 +104,23 @@ async function cleanRemoved(request, document) {
88
104
  }
89
105
  }
90
106
  }
107
+ const MAX_BODY_DEPTH = 64;
108
+ function assertBodyDepth(request) {
109
+ const pending = request.fields.map((field) => ({
110
+ value: request.submitted[field.key],
111
+ depth: 2,
112
+ }));
113
+ for (let node = pending.pop(); node; node = pending.pop()) {
114
+ if (!(node.value instanceof Object))
115
+ continue;
116
+ if (node.depth > MAX_BODY_DEPTH)
117
+ throw new interface_api_1.HTTPResult(BAD_REQUEST, `The JSON body nests more than ${MAX_BODY_DEPTH} levels deep.`);
118
+ for (const item of Object.values(node.value))
119
+ pending.push({ value: item, depth: node.depth + 1 });
120
+ }
121
+ }
91
122
  async function SaveComponentFiles(request, save) {
123
+ assertBodyDepth(request);
92
124
  const refs = await prepareReferences(request);
93
125
  const saved = await save(await promoteReferences(request, refs));
94
126
  await cleanRemoved(request, saved.document);
@@ -1 +1 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/attachments/save.ts"],"names":[],"mappings":";;AAiJA,gDAUC;AA3JD,6DAAuD;AACvD,gEAA6D;AAC7D,+EAM4C;AAM5C,qCAAkD;AAClD,+CAAwD;AACxD,qCAIkB;AAClB,yCAA4E;AAE5E,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAEtD,SAAS,mBAAmB,CAAC,KAAsC;IACjE,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,CAAC;AAC5E,CAAC;AAQD,KAAK,UAAU,eAAe,CAAC,GAAwB;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,oCAAW,EAAC,GAAG,CAAC,GAAG,CAAC;YAC9B,CAAC,CAAC,CAAC,MAAM,IAAA,oCAAW,EAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YAC7D,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,IAAA,wCAAe,EAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,CAAC,KAAK,CAAC;YAC5B,MAAM,IAAI,0BAAU,CAClB,WAAW,EACX,qDAAqD,CACtD,CAAC;QACJ,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAsB,EACtB,SAA8B;IAE9B,IAAI,IAAA,qCAAuB,EAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;QAChE,IAAA,yBAAc,GAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA8B,EAC9B,GAAwB;IAExB,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAc,EAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,KAAK,GAAsB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,IAAA,+BAAsB,EAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9E,IACE,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QAC1C,CAAC,KAAK,CAAC,WAAW;QAClB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;QACjD,KAAK,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAExD,IAAA,yBAAc,GAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA8B;IAE9B,MAAM,SAAS,GAAG,IAAA,2BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxE,KAAK,MAAM,GAAG,IAAI,IAAA,2BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;QAClE,MAAM,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,SAAS;QAAE,MAAM,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,KAAiD,EACjD,GAAwB;IAGxB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAE9D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC/C,GAAG;QACH,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;KAC5B,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA8B,EAC9B,IAA2B;IAE3B,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YACrD,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,IAAI,QAAQ;YACvB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,OAA8B,EAC9B,QAA4C;IAE5C,MAAM,KAAK,GAAG,IAAA,2BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,IAAA,2BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC;YACH,IACE,IAAA,2BAAkB,EAAC,KAAK,EAAE,GAAG,CAAC;gBAC9B,CAAC,CAAC,MAAM,IAAA,yBAAc,EAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEnD,SAAS;YACX,MAAM,IAAA,mCAAU,EAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAGM,KAAK,UAAU,kBAAkB,CACtC,OAA8B,EAC9B,IAEqC;IAErC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/attachments/save.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- import type { internal } from "@antelopejs/interface-dms/attachments";
2
1
  import type { TableViewAttachmentSaveRequest } from "@antelopejs/interface-dms/internal/attachments";
3
- export declare function SaveTableViewAttachments(request: TableViewAttachmentSaveRequest): Promise<Awaited<ReturnType<typeof internal.SaveTableViewAttachments>>>;
2
+ export declare function SaveTableViewAttachments(request: TableViewAttachmentSaveRequest): Promise<void>;