@weave-kit/engine 0.4.0 → 0.6.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 (642) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +6 -6
  3. package/dist/adapters/auth/index.d.ts +4 -2
  4. package/dist/adapters/auth/index.d.ts.map +1 -1
  5. package/dist/adapters/auth/index.js +1 -0
  6. package/dist/adapters/auth/index.js.map +1 -1
  7. package/dist/adapters/auth/source.d.ts +4 -4
  8. package/dist/adapters/auth/source.d.ts.map +1 -1
  9. package/dist/adapters/auth/subject.d.ts +22 -0
  10. package/dist/adapters/auth/subject.d.ts.map +1 -0
  11. package/dist/adapters/auth/subject.js +42 -0
  12. package/dist/adapters/auth/subject.js.map +1 -0
  13. package/dist/adapters/auth/verify.d.ts +12 -0
  14. package/dist/adapters/auth/verify.d.ts.map +1 -0
  15. package/dist/adapters/auth/verify.js +2 -0
  16. package/dist/adapters/auth/verify.js.map +1 -0
  17. package/dist/adapters/events/index.d.ts +2 -1
  18. package/dist/adapters/events/index.d.ts.map +1 -1
  19. package/dist/adapters/events/index.js +2 -1
  20. package/dist/adapters/events/index.js.map +1 -1
  21. package/dist/adapters/mcp/generate.d.ts +3 -3
  22. package/dist/adapters/mcp/generate.d.ts.map +1 -1
  23. package/dist/adapters/mcp/generate.js +34 -11
  24. package/dist/adapters/mcp/generate.js.map +1 -1
  25. package/dist/adapters/mcp/guardrails.d.ts +1 -1
  26. package/dist/adapters/mcp/http.d.ts +3 -1
  27. package/dist/adapters/mcp/http.d.ts.map +1 -1
  28. package/dist/adapters/mcp/http.js +2 -2
  29. package/dist/adapters/mcp/http.js.map +1 -1
  30. package/dist/adapters/mcp/index.d.ts +13 -4
  31. package/dist/adapters/mcp/index.d.ts.map +1 -1
  32. package/dist/adapters/mcp/index.js +12 -8
  33. package/dist/adapters/mcp/index.js.map +1 -1
  34. package/dist/adapters/mcp/session.d.ts +5 -5
  35. package/dist/adapters/mcp/session.d.ts.map +1 -1
  36. package/dist/adapters/mcp/tools.d.ts +6 -0
  37. package/dist/adapters/mcp/tools.d.ts.map +1 -1
  38. package/dist/adapters/mcp/tools.js +38 -14
  39. package/dist/adapters/mcp/tools.js.map +1 -1
  40. package/dist/adapters/mcp/types.d.ts +3 -1
  41. package/dist/adapters/mcp/types.d.ts.map +1 -1
  42. package/dist/adapters/mcp/types.js +1 -1
  43. package/dist/adapters/mcp/types.js.map +1 -1
  44. package/dist/adapters/openapi/document.d.ts.map +1 -1
  45. package/dist/adapters/openapi/document.js +72 -2
  46. package/dist/adapters/openapi/document.js.map +1 -1
  47. package/dist/adapters/openapi/schema.d.ts.map +1 -1
  48. package/dist/adapters/openapi/schema.js +47 -7
  49. package/dist/adapters/openapi/schema.js.map +1 -1
  50. package/dist/adapters/openapi/types.d.ts +1 -0
  51. package/dist/adapters/openapi/types.d.ts.map +1 -1
  52. package/dist/adapters/openapi/types.js +2 -0
  53. package/dist/adapters/openapi/types.js.map +1 -1
  54. package/dist/adapters/rest/approvals.d.ts +2 -2
  55. package/dist/adapters/rest/approvals.js +2 -2
  56. package/dist/adapters/rest/audit.d.ts +2 -2
  57. package/dist/adapters/rest/audit.js +2 -2
  58. package/dist/adapters/rest/common.d.ts +3 -3
  59. package/dist/adapters/rest/common.d.ts.map +1 -1
  60. package/dist/adapters/rest/common.js +1 -1
  61. package/dist/adapters/rest/guardrails.d.ts +1 -1
  62. package/dist/adapters/rest/guardrails.js +1 -1
  63. package/dist/adapters/rest/identities.d.ts +4 -4
  64. package/dist/adapters/rest/identities.d.ts.map +1 -1
  65. package/dist/adapters/rest/identities.js +3 -3
  66. package/dist/adapters/rest/identities.js.map +1 -1
  67. package/dist/adapters/rest/identityAdmin.d.ts +18 -0
  68. package/dist/adapters/rest/identityAdmin.d.ts.map +1 -0
  69. package/dist/adapters/rest/identityAdmin.js +58 -0
  70. package/dist/adapters/rest/identityAdmin.js.map +1 -0
  71. package/dist/adapters/rest/index.d.ts +4 -0
  72. package/dist/adapters/rest/index.d.ts.map +1 -1
  73. package/dist/adapters/rest/index.js +3 -0
  74. package/dist/adapters/rest/index.js.map +1 -1
  75. package/dist/adapters/rest/metadata.d.ts +1 -1
  76. package/dist/adapters/rest/metadata.js +1 -1
  77. package/dist/adapters/rest/pages.d.ts +1 -1
  78. package/dist/adapters/rest/pages.d.ts.map +1 -1
  79. package/dist/adapters/rest/permissions.d.ts +1 -1
  80. package/dist/adapters/rest/permissions.js +1 -1
  81. package/dist/adapters/rest/plugin.d.ts +2 -2
  82. package/dist/adapters/rest/plugin.d.ts.map +1 -1
  83. package/dist/adapters/rest/schemas.d.ts +1 -1
  84. package/dist/adapters/rest/schemas.d.ts.map +1 -1
  85. package/dist/adapters/rest/workflow.d.ts +15 -0
  86. package/dist/adapters/rest/workflow.d.ts.map +1 -0
  87. package/dist/adapters/rest/workflow.js +89 -0
  88. package/dist/adapters/rest/workflow.js.map +1 -0
  89. package/dist/adapters/rest/workflowSource.d.ts +15 -0
  90. package/dist/adapters/rest/workflowSource.d.ts.map +1 -0
  91. package/dist/adapters/rest/workflowSource.js +63 -0
  92. package/dist/adapters/rest/workflowSource.js.map +1 -0
  93. package/dist/cli/commands/build.js +1 -1
  94. package/dist/cli/commands/build.js.map +1 -1
  95. package/dist/cli/commands/connect.d.ts +1 -1
  96. package/dist/cli/commands/default-view.d.ts +2 -2
  97. package/dist/cli/commands/default-view.js +2 -2
  98. package/dist/cli/commands/dev.d.ts.map +1 -1
  99. package/dist/cli/commands/dev.js +18 -9
  100. package/dist/cli/commands/dev.js.map +1 -1
  101. package/dist/cli/commands/field-add.d.ts.map +1 -1
  102. package/dist/cli/commands/field-add.js +12 -6
  103. package/dist/cli/commands/field-add.js.map +1 -1
  104. package/dist/cli/commands/field-types.d.ts.map +1 -1
  105. package/dist/cli/commands/field-types.js +10 -1
  106. package/dist/cli/commands/field-types.js.map +1 -1
  107. package/dist/cli/commands/identity.d.ts +15 -0
  108. package/dist/cli/commands/identity.d.ts.map +1 -0
  109. package/dist/cli/commands/identity.js +115 -0
  110. package/dist/cli/commands/identity.js.map +1 -0
  111. package/dist/cli/commands/introspect.d.ts.map +1 -1
  112. package/dist/cli/commands/introspect.js +23 -0
  113. package/dist/cli/commands/introspect.js.map +1 -1
  114. package/dist/cli/commands/mcp-config.js +1 -1
  115. package/dist/cli/commands/mcp-config.js.map +1 -1
  116. package/dist/cli/commands/migrate.js +2 -2
  117. package/dist/cli/commands/migrate.js.map +1 -1
  118. package/dist/cli/commands/module.d.ts +2 -2
  119. package/dist/cli/commands/module.d.ts.map +1 -1
  120. package/dist/cli/commands/module.js +2 -2
  121. package/dist/cli/commands/module.js.map +1 -1
  122. package/dist/cli/commands/object-create.d.ts.map +1 -1
  123. package/dist/cli/commands/object-create.js +15 -15
  124. package/dist/cli/commands/object-create.js.map +1 -1
  125. package/dist/cli/commands/schema-map.d.ts.map +1 -1
  126. package/dist/cli/commands/schema-map.js +6 -0
  127. package/dist/cli/commands/schema-map.js.map +1 -1
  128. package/dist/cli/commands/workflow-close.d.ts +9 -0
  129. package/dist/cli/commands/workflow-close.d.ts.map +1 -0
  130. package/dist/cli/commands/workflow-close.js +48 -0
  131. package/dist/cli/commands/workflow-close.js.map +1 -0
  132. package/dist/cli/commands/workflow-migrate.d.ts +11 -0
  133. package/dist/cli/commands/workflow-migrate.d.ts.map +1 -0
  134. package/dist/cli/commands/workflow-migrate.js +120 -0
  135. package/dist/cli/commands/workflow-migrate.js.map +1 -0
  136. package/dist/cli/commands/workflow-open.d.ts +10 -0
  137. package/dist/cli/commands/workflow-open.d.ts.map +1 -0
  138. package/dist/cli/commands/workflow-open.js +112 -0
  139. package/dist/cli/commands/workflow-open.js.map +1 -0
  140. package/dist/cli/commands/workflow-starter.d.ts +10 -0
  141. package/dist/cli/commands/workflow-starter.d.ts.map +1 -0
  142. package/dist/cli/commands/workflow-starter.js +29 -0
  143. package/dist/cli/commands/workflow-starter.js.map +1 -0
  144. package/dist/cli/commands/workflow-switch.d.ts +10 -0
  145. package/dist/cli/commands/workflow-switch.d.ts.map +1 -0
  146. package/dist/cli/commands/workflow-switch.js +60 -0
  147. package/dist/cli/commands/workflow-switch.js.map +1 -0
  148. package/dist/cli/commands/workflow-upgrade.d.ts +12 -0
  149. package/dist/cli/commands/workflow-upgrade.d.ts.map +1 -0
  150. package/dist/cli/commands/workflow-upgrade.js +116 -0
  151. package/dist/cli/commands/workflow-upgrade.js.map +1 -0
  152. package/dist/cli/index.js +74 -3
  153. package/dist/cli/index.js.map +1 -1
  154. package/dist/cli/project-types/manifest.d.ts +25 -0
  155. package/dist/cli/project-types/manifest.d.ts.map +1 -0
  156. package/dist/cli/project-types/manifest.js +40 -0
  157. package/dist/cli/project-types/manifest.js.map +1 -0
  158. package/dist/cli/ready-screen.js +1 -1
  159. package/dist/cli/ready-screen.js.map +1 -1
  160. package/dist/cli/scaffold.d.ts.map +1 -1
  161. package/dist/cli/scaffold.js +21 -34
  162. package/dist/cli/scaffold.js.map +1 -1
  163. package/dist/cli/types/commands.d.ts +48 -0
  164. package/dist/cli/types/commands.d.ts.map +1 -1
  165. package/dist/cli/types/index.d.ts +1 -1
  166. package/dist/cli/types/index.d.ts.map +1 -1
  167. package/dist/cli/types/values.d.ts +9 -0
  168. package/dist/cli/types/values.d.ts.map +1 -1
  169. package/dist/cli/types/values.js +9 -0
  170. package/dist/cli/types/values.js.map +1 -1
  171. package/dist/core/api/error.d.ts.map +1 -1
  172. package/dist/core/api/error.js +7 -4
  173. package/dist/core/api/error.js.map +1 -1
  174. package/dist/core/audit/types.d.ts +4 -2
  175. package/dist/core/audit/types.d.ts.map +1 -1
  176. package/dist/core/audit/types.js +2 -0
  177. package/dist/core/audit/types.js.map +1 -1
  178. package/dist/core/formula/validate.d.ts.map +1 -1
  179. package/dist/core/formula/validate.js +6 -0
  180. package/dist/core/formula/validate.js.map +1 -1
  181. package/dist/core/i18n/ar.d.ts.map +1 -1
  182. package/dist/core/i18n/ar.js +59 -3
  183. package/dist/core/i18n/ar.js.map +1 -1
  184. package/dist/core/i18n/de.d.ts.map +1 -1
  185. package/dist/core/i18n/de.js +59 -3
  186. package/dist/core/i18n/de.js.map +1 -1
  187. package/dist/core/i18n/en.d.ts +60 -4
  188. package/dist/core/i18n/en.d.ts.map +1 -1
  189. package/dist/core/i18n/en.js +60 -4
  190. package/dist/core/i18n/en.js.map +1 -1
  191. package/dist/core/i18n/es.d.ts.map +1 -1
  192. package/dist/core/i18n/es.js +59 -3
  193. package/dist/core/i18n/es.js.map +1 -1
  194. package/dist/core/i18n/fr.d.ts.map +1 -1
  195. package/dist/core/i18n/fr.js +59 -3
  196. package/dist/core/i18n/fr.js.map +1 -1
  197. package/dist/core/i18n/hi.d.ts.map +1 -1
  198. package/dist/core/i18n/hi.js +59 -3
  199. package/dist/core/i18n/hi.js.map +1 -1
  200. package/dist/core/i18n/id.d.ts.map +1 -1
  201. package/dist/core/i18n/id.js +59 -3
  202. package/dist/core/i18n/id.js.map +1 -1
  203. package/dist/core/i18n/ja.d.ts.map +1 -1
  204. package/dist/core/i18n/ja.js +59 -3
  205. package/dist/core/i18n/ja.js.map +1 -1
  206. package/dist/core/i18n/ko.d.ts.map +1 -1
  207. package/dist/core/i18n/ko.js +59 -3
  208. package/dist/core/i18n/ko.js.map +1 -1
  209. package/dist/core/i18n/pt.d.ts.map +1 -1
  210. package/dist/core/i18n/pt.js +59 -3
  211. package/dist/core/i18n/pt.js.map +1 -1
  212. package/dist/core/i18n/ru.d.ts.map +1 -1
  213. package/dist/core/i18n/ru.js +59 -3
  214. package/dist/core/i18n/ru.js.map +1 -1
  215. package/dist/core/i18n/vi.d.ts.map +1 -1
  216. package/dist/core/i18n/vi.js +59 -3
  217. package/dist/core/i18n/vi.js.map +1 -1
  218. package/dist/core/i18n/zh-hant.d.ts.map +1 -1
  219. package/dist/core/i18n/zh-hant.js +59 -3
  220. package/dist/core/i18n/zh-hant.js.map +1 -1
  221. package/dist/core/i18n/zh.d.ts.map +1 -1
  222. package/dist/core/i18n/zh.js +60 -4
  223. package/dist/core/i18n/zh.js.map +1 -1
  224. package/dist/core/object/describe.d.ts +62 -3
  225. package/dist/core/object/describe.d.ts.map +1 -1
  226. package/dist/core/object/describe.js +81 -11
  227. package/dist/core/object/describe.js.map +1 -1
  228. package/dist/core/object/gen-types.d.ts.map +1 -1
  229. package/dist/core/object/gen-types.js +14 -1
  230. package/dist/core/object/gen-types.js.map +1 -1
  231. package/dist/core/object/graph.d.ts +3 -0
  232. package/dist/core/object/graph.d.ts.map +1 -1
  233. package/dist/core/object/graph.js +90 -14
  234. package/dist/core/object/graph.js.map +1 -1
  235. package/dist/core/object/index.d.ts +6 -2
  236. package/dist/core/object/index.d.ts.map +1 -1
  237. package/dist/core/object/index.js +5 -1
  238. package/dist/core/object/index.js.map +1 -1
  239. package/dist/core/object/migrations.d.ts.map +1 -1
  240. package/dist/core/object/migrations.js +45 -0
  241. package/dist/core/object/migrations.js.map +1 -1
  242. package/dist/core/object/parse.d.ts +7 -0
  243. package/dist/core/object/parse.d.ts.map +1 -1
  244. package/dist/core/object/parse.js +32 -1
  245. package/dist/core/object/parse.js.map +1 -1
  246. package/dist/core/object/record-key.d.ts +19 -0
  247. package/dist/core/object/record-key.d.ts.map +1 -0
  248. package/dist/core/object/record-key.js +100 -0
  249. package/dist/core/object/record-key.js.map +1 -0
  250. package/dist/core/object/registry.js +1 -1
  251. package/dist/core/object/registry.js.map +1 -1
  252. package/dist/core/object/schema-version.d.ts +1 -1
  253. package/dist/core/object/schema-version.js +1 -1
  254. package/dist/core/object/system-objects.d.ts +16 -0
  255. package/dist/core/object/system-objects.d.ts.map +1 -0
  256. package/dist/core/object/system-objects.js +72 -0
  257. package/dist/core/object/system-objects.js.map +1 -0
  258. package/dist/core/object/validate/constraints.d.ts +9 -0
  259. package/dist/core/object/validate/constraints.d.ts.map +1 -0
  260. package/dist/core/object/validate/constraints.js +45 -0
  261. package/dist/core/object/validate/constraints.js.map +1 -0
  262. package/dist/core/object/validate/field.d.ts.map +1 -1
  263. package/dist/core/object/validate/field.js +339 -66
  264. package/dist/core/object/validate/field.js.map +1 -1
  265. package/dist/core/object/validate/formulas.d.ts.map +1 -1
  266. package/dist/core/object/validate/formulas.js +6 -0
  267. package/dist/core/object/validate/formulas.js.map +1 -1
  268. package/dist/core/object/validate/object.d.ts +2 -0
  269. package/dist/core/object/validate/object.d.ts.map +1 -1
  270. package/dist/core/object/validate/object.js +54 -19
  271. package/dist/core/object/validate/object.js.map +1 -1
  272. package/dist/core/object/validate/permissions.d.ts.map +1 -1
  273. package/dist/core/object/validate/permissions.js +4 -0
  274. package/dist/core/object/validate/permissions.js.map +1 -1
  275. package/dist/core/object/validate/primitives.d.ts +0 -1
  276. package/dist/core/object/validate/primitives.d.ts.map +1 -1
  277. package/dist/core/object/validate/primitives.js +1 -2
  278. package/dist/core/object/validate/primitives.js.map +1 -1
  279. package/dist/core/object/validate/workflow.d.ts +10 -0
  280. package/dist/core/object/validate/workflow.d.ts.map +1 -0
  281. package/dist/core/object/validate/workflow.js +143 -0
  282. package/dist/core/object/validate/workflow.js.map +1 -0
  283. package/dist/core/object/workflow-hash.d.ts +10 -0
  284. package/dist/core/object/workflow-hash.d.ts.map +1 -0
  285. package/dist/core/object/workflow-hash.js +27 -0
  286. package/dist/core/object/workflow-hash.js.map +1 -0
  287. package/dist/core/object/workflow-migrations.d.ts +27 -0
  288. package/dist/core/object/workflow-migrations.d.ts.map +1 -0
  289. package/dist/core/object/workflow-migrations.js +125 -0
  290. package/dist/core/object/workflow-migrations.js.map +1 -0
  291. package/dist/core/provider/event/index.d.ts +1 -1
  292. package/dist/core/provider/event/index.d.ts.map +1 -1
  293. package/dist/core/provider/event/index.js.map +1 -1
  294. package/dist/core/provider/event/types.d.ts +17 -2
  295. package/dist/core/provider/event/types.d.ts.map +1 -1
  296. package/dist/core/provider/event/types.js +2 -1
  297. package/dist/core/provider/event/types.js.map +1 -1
  298. package/dist/core/provider/identity/directory.d.ts +90 -0
  299. package/dist/core/provider/identity/directory.d.ts.map +1 -0
  300. package/dist/core/provider/identity/directory.js +3 -0
  301. package/dist/core/provider/identity/directory.js.map +1 -0
  302. package/dist/core/provider/identity/index.d.ts +5 -1
  303. package/dist/core/provider/identity/index.d.ts.map +1 -1
  304. package/dist/core/provider/identity/index.js +2 -1
  305. package/dist/core/provider/identity/index.js.map +1 -1
  306. package/dist/core/provider/identity/source.d.ts +22 -0
  307. package/dist/core/provider/identity/source.d.ts.map +1 -0
  308. package/dist/core/provider/identity/source.js +3 -0
  309. package/dist/core/provider/identity/source.js.map +1 -0
  310. package/dist/core/provider/identity/types.d.ts +62 -7
  311. package/dist/core/provider/identity/types.d.ts.map +1 -1
  312. package/dist/core/provider/identity/types.js +13 -0
  313. package/dist/core/provider/identity/types.js.map +1 -1
  314. package/dist/core/proxy/types.d.ts +4 -4
  315. package/dist/core/proxy/types.d.ts.map +1 -1
  316. package/dist/core/rbac/authorize.d.ts +10 -9
  317. package/dist/core/rbac/authorize.d.ts.map +1 -1
  318. package/dist/core/rbac/authorize.js +23 -18
  319. package/dist/core/rbac/authorize.js.map +1 -1
  320. package/dist/core/rbac/details.d.ts +33 -0
  321. package/dist/core/rbac/details.d.ts.map +1 -0
  322. package/dist/core/rbac/details.js +74 -0
  323. package/dist/core/rbac/details.js.map +1 -0
  324. package/dist/core/rbac/fields.d.ts +2 -1
  325. package/dist/core/rbac/fields.d.ts.map +1 -1
  326. package/dist/core/rbac/fields.js +3 -2
  327. package/dist/core/rbac/fields.js.map +1 -1
  328. package/dist/core/rbac/index.d.ts +3 -2
  329. package/dist/core/rbac/index.d.ts.map +1 -1
  330. package/dist/core/rbac/index.js +2 -1
  331. package/dist/core/rbac/index.js.map +1 -1
  332. package/dist/core/rbac/resolve.d.ts +3 -1
  333. package/dist/core/rbac/resolve.d.ts.map +1 -1
  334. package/dist/core/rbac/resolve.js +17 -9
  335. package/dist/core/rbac/resolve.js.map +1 -1
  336. package/dist/core/rbac/rls.d.ts +6 -0
  337. package/dist/core/rbac/rls.d.ts.map +1 -1
  338. package/dist/core/rbac/rls.js +52 -7
  339. package/dist/core/rbac/rls.js.map +1 -1
  340. package/dist/core/rbac/rowScope.d.ts +13 -6
  341. package/dist/core/rbac/rowScope.d.ts.map +1 -1
  342. package/dist/core/rbac/rowScope.js +88 -16
  343. package/dist/core/rbac/rowScope.js.map +1 -1
  344. package/dist/core/rbac/types.d.ts +6 -7
  345. package/dist/core/rbac/types.d.ts.map +1 -1
  346. package/dist/core/script/types.d.ts +1 -1
  347. package/dist/core/script/types.d.ts.map +1 -1
  348. package/dist/core/storage/diff.d.ts +10 -2
  349. package/dist/core/storage/diff.d.ts.map +1 -1
  350. package/dist/core/storage/diff.js +40 -18
  351. package/dist/core/storage/diff.js.map +1 -1
  352. package/dist/core/storage/index.d.ts +7 -1
  353. package/dist/core/storage/index.d.ts.map +1 -1
  354. package/dist/core/storage/index.js +6 -1
  355. package/dist/core/storage/index.js.map +1 -1
  356. package/dist/core/storage/inspect.d.ts +12 -3
  357. package/dist/core/storage/inspect.d.ts.map +1 -1
  358. package/dist/core/storage/inspect.js +39 -22
  359. package/dist/core/storage/inspect.js.map +1 -1
  360. package/dist/core/storage/introspect.d.ts +9 -2
  361. package/dist/core/storage/introspect.d.ts.map +1 -1
  362. package/dist/core/storage/introspect.js +100 -43
  363. package/dist/core/storage/introspect.js.map +1 -1
  364. package/dist/core/storage/link-table.d.ts +47 -0
  365. package/dist/core/storage/link-table.d.ts.map +1 -0
  366. package/dist/core/storage/link-table.js +110 -0
  367. package/dist/core/storage/link-table.js.map +1 -0
  368. package/dist/core/storage/map.d.ts +14 -5
  369. package/dist/core/storage/map.d.ts.map +1 -1
  370. package/dist/core/storage/map.js +207 -39
  371. package/dist/core/storage/map.js.map +1 -1
  372. package/dist/core/storage/meta.d.ts +6 -3
  373. package/dist/core/storage/meta.d.ts.map +1 -1
  374. package/dist/core/storage/meta.js +9 -5
  375. package/dist/core/storage/meta.js.map +1 -1
  376. package/dist/core/storage/migrate.d.ts.map +1 -1
  377. package/dist/core/storage/migrate.js +144 -11
  378. package/dist/core/storage/migrate.js.map +1 -1
  379. package/dist/core/storage/record-key-sql.d.ts +19 -0
  380. package/dist/core/storage/record-key-sql.d.ts.map +1 -0
  381. package/dist/core/storage/record-key-sql.js +43 -0
  382. package/dist/core/storage/record-key-sql.js.map +1 -0
  383. package/dist/core/storage/record-meta.d.ts +68 -0
  384. package/dist/core/storage/record-meta.d.ts.map +1 -0
  385. package/dist/core/storage/record-meta.js +108 -0
  386. package/dist/core/storage/record-meta.js.map +1 -0
  387. package/dist/core/storage/report.d.ts +10 -0
  388. package/dist/core/storage/report.d.ts.map +1 -1
  389. package/dist/core/storage/report.js +31 -9
  390. package/dist/core/storage/report.js.map +1 -1
  391. package/dist/core/storage/sql-literals.d.ts +9 -0
  392. package/dist/core/storage/sql-literals.d.ts.map +1 -0
  393. package/dist/core/storage/sql-literals.js +13 -0
  394. package/dist/core/storage/sql-literals.js.map +1 -0
  395. package/dist/core/storage/system-tables.d.ts +44 -0
  396. package/dist/core/storage/system-tables.d.ts.map +1 -0
  397. package/dist/core/storage/system-tables.js +268 -0
  398. package/dist/core/storage/system-tables.js.map +1 -0
  399. package/dist/core/tools/policies.d.ts +2 -2
  400. package/dist/core/tools/policies.js +2 -2
  401. package/dist/core/tools/types.d.ts +6 -6
  402. package/dist/core/tools/types.d.ts.map +1 -1
  403. package/dist/core/tools/values.d.ts +5 -0
  404. package/dist/core/tools/values.d.ts.map +1 -1
  405. package/dist/core/tools/values.js +9 -1
  406. package/dist/core/tools/values.js.map +1 -1
  407. package/dist/core/types/currency.d.ts +9 -0
  408. package/dist/core/types/currency.d.ts.map +1 -0
  409. package/dist/core/types/currency.js +28 -0
  410. package/dist/core/types/currency.js.map +1 -0
  411. package/dist/core/types/field-type.d.ts +60 -6
  412. package/dist/core/types/field-type.d.ts.map +1 -1
  413. package/dist/core/types/field-type.js +19 -3
  414. package/dist/core/types/field-type.js.map +1 -1
  415. package/dist/core/types/fields.d.ts +118 -20
  416. package/dist/core/types/fields.d.ts.map +1 -1
  417. package/dist/core/types/index.d.ts +11 -9
  418. package/dist/core/types/index.d.ts.map +1 -1
  419. package/dist/core/types/index.js +5 -4
  420. package/dist/core/types/index.js.map +1 -1
  421. package/dist/core/types/object.d.ts +27 -2
  422. package/dist/core/types/object.d.ts.map +1 -1
  423. package/dist/core/types/permission.d.ts +5 -0
  424. package/dist/core/types/permission.d.ts.map +1 -1
  425. package/dist/core/types/primaryField.d.ts +6 -1
  426. package/dist/core/types/primaryField.d.ts.map +1 -1
  427. package/dist/core/types/primaryField.js +8 -1
  428. package/dist/core/types/primaryField.js.map +1 -1
  429. package/dist/core/types/registry.d.ts +6 -4
  430. package/dist/core/types/registry.d.ts.map +1 -1
  431. package/dist/core/types/registry.js +40 -30
  432. package/dist/core/types/registry.js.map +1 -1
  433. package/dist/core/types/values.d.ts +102 -27
  434. package/dist/core/types/values.d.ts.map +1 -1
  435. package/dist/core/types/values.js +68 -29
  436. package/dist/core/types/values.js.map +1 -1
  437. package/dist/core/types/workflow.d.ts +140 -0
  438. package/dist/core/types/workflow.d.ts.map +1 -0
  439. package/dist/core/types/workflow.js +49 -0
  440. package/dist/core/types/workflow.js.map +1 -0
  441. package/dist/index.d.ts +2 -0
  442. package/dist/index.d.ts.map +1 -1
  443. package/dist/index.js +5 -3
  444. package/dist/index.js.map +1 -1
  445. package/dist/infrastructure/event/bus.d.ts.map +1 -1
  446. package/dist/infrastructure/event/bus.js +14 -0
  447. package/dist/infrastructure/event/bus.js.map +1 -1
  448. package/dist/infrastructure/identity.d.ts +2 -2
  449. package/dist/infrastructure/identity.d.ts.map +1 -1
  450. package/dist/infrastructure/identity.js.map +1 -1
  451. package/dist/layout-format.d.ts +6 -6
  452. package/dist/layout-format.js +4 -4
  453. package/dist/runtime/data-access/builder.d.ts +15 -5
  454. package/dist/runtime/data-access/builder.d.ts.map +1 -1
  455. package/dist/runtime/data-access/builder.js +222 -30
  456. package/dist/runtime/data-access/builder.js.map +1 -1
  457. package/dist/runtime/data-access/details.d.ts.map +1 -1
  458. package/dist/runtime/data-access/details.js +7 -2
  459. package/dist/runtime/data-access/details.js.map +1 -1
  460. package/dist/runtime/data-access/formula.d.ts +11 -3
  461. package/dist/runtime/data-access/formula.d.ts.map +1 -1
  462. package/dist/runtime/data-access/formula.js +82 -19
  463. package/dist/runtime/data-access/formula.js.map +1 -1
  464. package/dist/runtime/data-access/index.d.ts +1 -1
  465. package/dist/runtime/data-access/index.d.ts.map +1 -1
  466. package/dist/runtime/data-access/index.js +1 -1
  467. package/dist/runtime/data-access/index.js.map +1 -1
  468. package/dist/runtime/data-access/link.d.ts +7 -0
  469. package/dist/runtime/data-access/link.d.ts.map +1 -0
  470. package/dist/runtime/data-access/link.js +80 -0
  471. package/dist/runtime/data-access/link.js.map +1 -0
  472. package/dist/runtime/data-access/query.d.ts +48 -3
  473. package/dist/runtime/data-access/query.d.ts.map +1 -1
  474. package/dist/runtime/data-access/query.js +399 -45
  475. package/dist/runtime/data-access/query.js.map +1 -1
  476. package/dist/runtime/data-access/rbac.d.ts.map +1 -1
  477. package/dist/runtime/data-access/rbac.js +134 -16
  478. package/dist/runtime/data-access/rbac.js.map +1 -1
  479. package/dist/runtime/data-access/seqno.d.ts +0 -2
  480. package/dist/runtime/data-access/seqno.d.ts.map +1 -1
  481. package/dist/runtime/data-access/seqno.js +0 -9
  482. package/dist/runtime/data-access/seqno.js.map +1 -1
  483. package/dist/runtime/data-access/sql-executor.d.ts +13 -3
  484. package/dist/runtime/data-access/sql-executor.d.ts.map +1 -1
  485. package/dist/runtime/data-access/sql-executor.js +20 -14
  486. package/dist/runtime/data-access/sql-executor.js.map +1 -1
  487. package/dist/runtime/data-access/sql-gate.d.ts +4 -4
  488. package/dist/runtime/data-access/sql-gate.d.ts.map +1 -1
  489. package/dist/runtime/data-access/sql-gate.js +5 -5
  490. package/dist/runtime/data-access/sql-gate.js.map +1 -1
  491. package/dist/runtime/data-access/tx.d.ts +1 -1
  492. package/dist/runtime/data-access/tx.js +1 -1
  493. package/dist/runtime/data-access/types.d.ts +31 -3
  494. package/dist/runtime/data-access/types.d.ts.map +1 -1
  495. package/dist/runtime/data-access/validate.d.ts.map +1 -1
  496. package/dist/runtime/data-access/validate.js +186 -39
  497. package/dist/runtime/data-access/validate.js.map +1 -1
  498. package/dist/runtime/data-access/workflow.d.ts +146 -0
  499. package/dist/runtime/data-access/workflow.d.ts.map +1 -0
  500. package/dist/runtime/data-access/workflow.js +636 -0
  501. package/dist/runtime/data-access/workflow.js.map +1 -0
  502. package/dist/runtime/engine.d.ts +89 -14
  503. package/dist/runtime/engine.d.ts.map +1 -1
  504. package/dist/runtime/engine.js +123 -26
  505. package/dist/runtime/engine.js.map +1 -1
  506. package/dist/runtime/fieldtypes/loader.d.ts.map +1 -1
  507. package/dist/runtime/fieldtypes/loader.js +84 -2
  508. package/dist/runtime/fieldtypes/loader.js.map +1 -1
  509. package/dist/runtime/git/guardrailSource.d.ts +1 -1
  510. package/dist/runtime/git/index.d.ts +4 -2
  511. package/dist/runtime/git/index.d.ts.map +1 -1
  512. package/dist/runtime/git/index.js +2 -1
  513. package/dist/runtime/git/index.js.map +1 -1
  514. package/dist/runtime/git/layoutSource.d.ts +1 -1
  515. package/dist/runtime/git/loader.d.ts.map +1 -1
  516. package/dist/runtime/git/loader.js +18 -6
  517. package/dist/runtime/git/loader.js.map +1 -1
  518. package/dist/runtime/git/pageCatalog.d.ts +1 -1
  519. package/dist/runtime/git/schemaChange.d.ts +22 -0
  520. package/dist/runtime/git/schemaChange.d.ts.map +1 -1
  521. package/dist/runtime/git/schemaChange.js +28 -2
  522. package/dist/runtime/git/schemaChange.js.map +1 -1
  523. package/dist/runtime/git/schemaSource.d.ts +1 -1
  524. package/dist/runtime/git/sourceFile.d.ts +1 -1
  525. package/dist/runtime/git/sourceFile.js +1 -1
  526. package/dist/runtime/git/sourceTransaction.d.ts +1 -1
  527. package/dist/runtime/git/workflowSource.d.ts +40 -0
  528. package/dist/runtime/git/workflowSource.d.ts.map +1 -0
  529. package/dist/runtime/git/workflowSource.js +45 -0
  530. package/dist/runtime/git/workflowSource.js.map +1 -0
  531. package/dist/runtime/identity/admin.d.ts +18 -0
  532. package/dist/runtime/identity/admin.d.ts.map +1 -0
  533. package/dist/runtime/identity/admin.js +27 -0
  534. package/dist/runtime/identity/admin.js.map +1 -0
  535. package/dist/runtime/identity/directory.d.ts +12 -0
  536. package/dist/runtime/identity/directory.d.ts.map +1 -0
  537. package/dist/runtime/identity/directory.js +22 -0
  538. package/dist/runtime/identity/directory.js.map +1 -0
  539. package/dist/runtime/identity/index.d.ts +11 -0
  540. package/dist/runtime/identity/index.d.ts.map +1 -0
  541. package/dist/runtime/identity/index.js +8 -0
  542. package/dist/runtime/identity/index.js.map +1 -0
  543. package/dist/runtime/identity/resolve.d.ts +10 -0
  544. package/dist/runtime/identity/resolve.d.ts.map +1 -0
  545. package/dist/runtime/identity/resolve.js +16 -0
  546. package/dist/runtime/identity/resolve.js.map +1 -0
  547. package/dist/runtime/identity/sources/function.d.ts +10 -0
  548. package/dist/runtime/identity/sources/function.d.ts.map +1 -0
  549. package/dist/runtime/identity/sources/function.js +9 -0
  550. package/dist/runtime/identity/sources/function.js.map +1 -0
  551. package/dist/runtime/identity/sources/pg.d.ts +42 -0
  552. package/dist/runtime/identity/sources/pg.d.ts.map +1 -0
  553. package/dist/runtime/identity/sources/pg.js +121 -0
  554. package/dist/runtime/identity/sources/pg.js.map +1 -0
  555. package/dist/runtime/identity/store.d.ts +27 -0
  556. package/dist/runtime/identity/store.d.ts.map +1 -0
  557. package/dist/runtime/identity/store.js +139 -0
  558. package/dist/runtime/identity/store.js.map +1 -0
  559. package/dist/runtime/identity/sync.d.ts +34 -0
  560. package/dist/runtime/identity/sync.d.ts.map +1 -0
  561. package/dist/runtime/identity/sync.js +149 -0
  562. package/dist/runtime/identity/sync.js.map +1 -0
  563. package/dist/runtime/metadata/cache.d.ts +0 -2
  564. package/dist/runtime/metadata/cache.d.ts.map +1 -1
  565. package/dist/runtime/metadata/cache.js +0 -11
  566. package/dist/runtime/metadata/cache.js.map +1 -1
  567. package/dist/runtime/metadata/index.d.ts +1 -1
  568. package/dist/runtime/metadata/index.d.ts.map +1 -1
  569. package/dist/runtime/metadata/index.js +1 -1
  570. package/dist/runtime/metadata/index.js.map +1 -1
  571. package/dist/runtime/record-meta/index.d.ts +2 -0
  572. package/dist/runtime/record-meta/index.d.ts.map +1 -0
  573. package/dist/runtime/record-meta/index.js +2 -0
  574. package/dist/runtime/record-meta/index.js.map +1 -0
  575. package/dist/runtime/record-meta/store.d.ts +43 -0
  576. package/dist/runtime/record-meta/store.d.ts.map +1 -0
  577. package/dist/runtime/record-meta/store.js +88 -0
  578. package/dist/runtime/record-meta/store.js.map +1 -0
  579. package/dist/runtime/sql-analyzer/index.d.ts.map +1 -1
  580. package/dist/runtime/sql-analyzer/index.js +59 -0
  581. package/dist/runtime/sql-analyzer/index.js.map +1 -1
  582. package/dist/runtime/tools/executor.d.ts +11 -11
  583. package/dist/runtime/tools/executor.d.ts.map +1 -1
  584. package/dist/runtime/tools/executor.js +6 -6
  585. package/dist/runtime/tools/executor.js.map +1 -1
  586. package/dist/runtime/tools/index.d.ts +2 -0
  587. package/dist/runtime/tools/index.d.ts.map +1 -1
  588. package/dist/runtime/tools/index.js +1 -0
  589. package/dist/runtime/tools/index.js.map +1 -1
  590. package/dist/runtime/tools/policies.d.ts +22 -5
  591. package/dist/runtime/tools/policies.d.ts.map +1 -1
  592. package/dist/runtime/tools/policies.js +42 -12
  593. package/dist/runtime/tools/policies.js.map +1 -1
  594. package/dist/runtime/tunnel/connector.d.ts +1 -1
  595. package/dist/runtime/tunnel/forwarder.js +1 -1
  596. package/dist/runtime/tunnel/framing.d.ts +1 -1
  597. package/dist/runtime/tunnel/server.d.ts +1 -1
  598. package/dist/subsystems/approvals/index.d.ts +4 -4
  599. package/dist/subsystems/approvals/index.d.ts.map +1 -1
  600. package/dist/subsystems/approvals/index.js +5 -6
  601. package/dist/subsystems/approvals/index.js.map +1 -1
  602. package/dist/subsystems/approvals/store.d.ts +1 -3
  603. package/dist/subsystems/approvals/store.d.ts.map +1 -1
  604. package/dist/subsystems/approvals/store.js +1 -16
  605. package/dist/subsystems/approvals/store.js.map +1 -1
  606. package/dist/subsystems/audit/index.d.ts +1 -1
  607. package/dist/subsystems/audit/index.d.ts.map +1 -1
  608. package/dist/subsystems/audit/index.js +2 -3
  609. package/dist/subsystems/audit/index.js.map +1 -1
  610. package/dist/subsystems/audit/store.d.ts +0 -2
  611. package/dist/subsystems/audit/store.d.ts.map +1 -1
  612. package/dist/subsystems/audit/store.js +0 -21
  613. package/dist/subsystems/audit/store.js.map +1 -1
  614. package/dist/subsystems/quota/store.d.ts +9 -0
  615. package/dist/subsystems/quota/store.d.ts.map +1 -1
  616. package/dist/subsystems/quota/store.js +0 -8
  617. package/dist/subsystems/quota/store.js.map +1 -1
  618. package/dist/subsystems/script/backend/isolated-vm.js +1 -1
  619. package/dist/subsystems/script/backend/types.d.ts +2 -2
  620. package/dist/subsystems/script/backend/types.d.ts.map +1 -1
  621. package/dist/subsystems/script/bridge.d.ts +1 -1
  622. package/dist/subsystems/script/bridge.d.ts.map +1 -1
  623. package/dist/subsystems/script/bridge.js +6 -4
  624. package/dist/subsystems/script/bridge.js.map +1 -1
  625. package/dist/subsystems/script/dispatcher.d.ts.map +1 -1
  626. package/dist/subsystems/script/dispatcher.js +3 -1
  627. package/dist/subsystems/script/dispatcher.js.map +1 -1
  628. package/dist/subsystems/workflow/index.d.ts +4 -0
  629. package/dist/subsystems/workflow/index.d.ts.map +1 -0
  630. package/dist/subsystems/workflow/index.js +3 -0
  631. package/dist/subsystems/workflow/index.js.map +1 -0
  632. package/dist/subsystems/workflow/scheduler.d.ts +27 -0
  633. package/dist/subsystems/workflow/scheduler.d.ts.map +1 -0
  634. package/dist/subsystems/workflow/scheduler.js +109 -0
  635. package/dist/subsystems/workflow/scheduler.js.map +1 -0
  636. package/dist/subsystems/workflow/store.d.ts +10 -0
  637. package/dist/subsystems/workflow/store.d.ts.map +1 -0
  638. package/dist/subsystems/workflow/store.js +44 -0
  639. package/dist/subsystems/workflow/store.js.map +1 -0
  640. package/dist/version.d.ts +1 -1
  641. package/dist/version.js +1 -1
  642. package/package.json +7 -3
@@ -1,6 +1,7 @@
1
1
  import { parseFormula } from '../../formula/index.js';
2
- import { DEFAULT_FIELD_TYPE_REGISTRY, FIELD_TYPE_NAME_PATTERN, fieldBase, } from '../../types/index.js';
3
- import { FIELD_TYPES, ROW_SCOPE_MARKERS } from '../../types/values.js';
2
+ import { ATTR_KINDS, DEFAULT_FIELD_TYPE_REGISTRY, FIELD_TYPE_NAME_PATTERN, fieldBase, } from '../../types/index.js';
3
+ import { FIELD_TYPES, IDENTITY_OBJECT_NAMES, ROW_SCOPE_MARKERS, SCOPE_SOURCES } from '../../types/values.js';
4
+ import { isCurrencyCode, currencyMinorUnits } from '../../types/currency.js';
4
5
  import { validateLabels } from './labels.js';
5
6
  import { fail, isRecord, expectString, expectBoolean, expectNumber, expectPositiveInt, SNAKE_CASE, FIELD_TYPE_VALUES, ON_DELETE_ACTION_VALUES, SEQUENCE_PLACEHOLDER, SEQUENCE_TOKEN_VALUES, SEQUENCE_CYCLE_VALUES, } from './primitives.js';
6
7
  /** keys always allowed on any field */
@@ -9,18 +10,30 @@ const BASE_KEYS = ['name', 'type', 'labels', 'description', 'primary', 'system',
9
10
  const FIELD_TYPE_NAME_RE = /^[a-z][a-zA-Z0-9_]*$/;
10
11
  /** registered-type name shape (namespace segment required) */
11
12
  const REGISTERED_FIELD_TYPE_RE = new RegExp(FIELD_TYPE_NAME_PATTERN);
13
+ /** the pre-rename name for `timestamptz`; accepted as a deprecated schema alias (user types win) */
14
+ const DEPRECATED_DATETIME_ALIAS = 'datetime';
12
15
  /** extra keys allowed per field type */
13
16
  const EXTRA_KEYS = {
14
- string: ['minLength', 'maxLength', 'regex', 'required', 'unique', 'default', 'formula', ROW_SCOPE_MARKERS.OWNERSHIP, ROW_SCOPE_MARKERS.TEAM],
15
- text: ['maxLength', 'required', 'unique', 'default', 'formula'],
17
+ string: ['minLength', 'maxLength', 'regex', 'required', 'unique', 'default', 'formula', ROW_SCOPE_MARKERS.OWNERSHIP, ROW_SCOPE_MARKERS.DEPARTMENT, 'ownershipSource', 'departmentSource'], text: ['maxLength', 'required', 'unique', 'default', 'formula'],
18
+ char: ['length', 'required', 'unique', 'default', 'formula'],
19
+ smallint: ['min', 'max', 'required', 'unique', 'default', 'formula'],
16
20
  integer: ['min', 'max', 'required', 'unique', 'default', 'formula'],
17
- number: ['min', 'max', 'precision', 'required', 'unique', 'default', 'formula'],
18
- currency: ['min', 'max', 'required', 'unique', 'default', 'formula'],
21
+ bigint: ['min', 'max', 'required', 'unique', 'default', 'formula'],
22
+ number: ['min', 'max', 'precision', 'scale', 'required', 'unique', 'default', 'formula'],
23
+ real: ['min', 'max', 'required', 'unique', 'default', 'formula'],
24
+ double: ['min', 'max', 'required', 'unique', 'default', 'formula'],
25
+ currency: ['min', 'max', 'currency', 'precision', 'required', 'unique', 'default', 'formula'],
19
26
  boolean: ['required', 'unique', 'default', 'formula'],
20
- datetime: ['required', 'unique', 'default'],
21
27
  date: ['required', 'unique', 'default'],
28
+ time: ['required', 'unique', 'default'],
29
+ timetz: ['required', 'unique', 'default'],
30
+ timestamp: ['required', 'unique', 'default'],
31
+ timestamptz: ['required', 'unique', 'default'],
32
+ interval: ['required'],
33
+ uuid: ['required', 'unique', 'default'],
22
34
  json: ['required', 'default'],
23
- enum: ['options', 'multiple', 'required', 'unique', 'default'],
35
+ jsonb: ['required', 'default'],
36
+ enum: ['options', 'multiple', 'enumType', 'required', 'unique', 'default'],
24
37
  relation: ['target', 'required', 'unique', 'onDelete'],
25
38
  details: ['target'],
26
39
  multiRelation: ['target', 'required'],
@@ -30,8 +43,8 @@ const EXTRA_KEYS = {
30
43
  email: ['minLength', 'maxLength', 'regex', 'required', 'unique', 'default', 'formula'],
31
44
  phone: ['minLength', 'maxLength', 'regex', 'required', 'unique', 'default', 'formula'],
32
45
  image: ['required', 'unique', 'multiple', 'default'],
33
- person: ['target', 'required', 'unique', 'onDelete', 'department'],
34
- department: ['target', 'required', 'unique', 'onDelete'],
46
+ user: ['required', 'unique', 'onDelete'],
47
+ department: ['required', 'unique', 'onDelete'],
35
48
  };
36
49
  /** reject any attribute not allowed for the given field type (typo protection) */
37
50
  function checkAllowedKeys(record, type, vc) {
@@ -48,10 +61,12 @@ function validateDefault(value, type, vc, options) {
48
61
  switch (type) {
49
62
  case FIELD_TYPES.STRING:
50
63
  case FIELD_TYPES.TEXT:
64
+ case FIELD_TYPES.CHAR:
51
65
  case FIELD_TYPES.FIRST_NAME:
52
66
  case FIELD_TYPES.LAST_NAME:
53
67
  case FIELD_TYPES.EMAIL:
54
68
  case FIELD_TYPES.PHONE:
69
+ case FIELD_TYPES.UUID:
55
70
  if (typeof value !== 'string')
56
71
  fail(vc, 'field.default.string');
57
72
  break;
@@ -59,11 +74,29 @@ function validateDefault(value, type, vc, options) {
59
74
  if (typeof value !== 'string' && !Array.isArray(value))
60
75
  fail(vc, 'field.default.string');
61
76
  break;
77
+ case FIELD_TYPES.SMALLINT:
62
78
  case FIELD_TYPES.INTEGER:
63
79
  if (typeof value !== 'number' || !Number.isInteger(value))
64
80
  fail(vc, 'field.default.integer');
65
81
  break;
82
+ case FIELD_TYPES.BIGINT:
83
+ // a string default is allowed for values beyond Number.MAX_SAFE_INTEGER,
84
+ // but must be a plain integer (it is emitted verbatim as a numeric literal)
85
+ if (typeof value === 'number') {
86
+ if (!Number.isInteger(value))
87
+ fail(vc, 'field.default.integer');
88
+ }
89
+ else if (typeof value === 'string') {
90
+ if (!/^[+-]?\d+$/.test(value))
91
+ fail(vc, 'field.default.integer');
92
+ }
93
+ else {
94
+ fail(vc, 'field.default.integer');
95
+ }
96
+ break;
66
97
  case FIELD_TYPES.NUMBER:
98
+ case FIELD_TYPES.REAL:
99
+ case FIELD_TYPES.DOUBLE:
67
100
  case FIELD_TYPES.CURRENCY:
68
101
  if (typeof value !== 'number')
69
102
  fail(vc, 'field.default.number');
@@ -72,7 +105,10 @@ function validateDefault(value, type, vc, options) {
72
105
  if (typeof value !== 'boolean')
73
106
  fail(vc, 'field.default.boolean');
74
107
  break;
75
- case FIELD_TYPES.DATETIME:
108
+ case FIELD_TYPES.TIMESTAMPTZ:
109
+ case FIELD_TYPES.TIMESTAMP:
110
+ case FIELD_TYPES.TIME:
111
+ case FIELD_TYPES.TIMETZ:
76
112
  if (typeof value !== 'string')
77
113
  fail(vc, 'field.default.iso');
78
114
  break;
@@ -81,6 +117,7 @@ function validateDefault(value, type, vc, options) {
81
117
  fail(vc, 'field.default.string');
82
118
  break;
83
119
  case FIELD_TYPES.JSON:
120
+ case FIELD_TYPES.JSONB:
84
121
  break;
85
122
  case FIELD_TYPES.ENUM:
86
123
  if (typeof value !== 'string')
@@ -89,11 +126,12 @@ function validateDefault(value, type, vc, options) {
89
126
  fail(vc, 'field.default.inOptions', { value });
90
127
  break;
91
128
  case FIELD_TYPES.RELATION:
92
- case FIELD_TYPES.PERSON:
129
+ case FIELD_TYPES.USER:
93
130
  case FIELD_TYPES.DEPARTMENT:
94
131
  case FIELD_TYPES.DETAILS:
95
132
  case FIELD_TYPES.MULTI_RELATION:
96
133
  case FIELD_TYPES.SEQ_NO:
134
+ case FIELD_TYPES.INTERVAL:
97
135
  fail(vc, 'field.default.notSupported', { type });
98
136
  }
99
137
  }
@@ -122,9 +160,16 @@ export function validateField(raw, vc, options = {}) {
122
160
  fail(vc, 'field.name.required');
123
161
  if (!SNAKE_CASE.test(name))
124
162
  fail(vc, 'field.name.snake', { name });
125
- const rawType = raw.type;
126
- if (typeof rawType !== 'string' || !FIELD_TYPE_NAME_RE.test(rawType)) {
127
- fail(vc, 'field.type.invalid', { type: String(rawType) });
163
+ const rawTypeInput = raw.type;
164
+ if (typeof rawTypeInput !== 'string' || !FIELD_TYPE_NAME_RE.test(rawTypeInput)) {
165
+ fail(vc, 'field.type.invalid', { type: String(rawTypeInput) });
166
+ }
167
+ let rawType = rawTypeInput;
168
+ // deprecated alias: the field type `datetime` was renamed to `timestamptz`.
169
+ // Resolved here (not in the registry) so the bare name stays available for a
170
+ // user-registered type, which takes precedence.
171
+ if (rawType === DEPRECATED_DATETIME_ALIAS && registry.get(DEPRECATED_DATETIME_ALIAS) === undefined) {
172
+ rawType = FIELD_TYPES.TIMESTAMPTZ;
128
173
  }
129
174
  const isBuiltin = FIELD_TYPE_VALUES.includes(rawType);
130
175
  const descriptor = isBuiltin ? undefined : registry.get(rawType);
@@ -158,7 +203,9 @@ export function validateField(raw, vc, options = {}) {
158
203
  const maxLength = expectPositiveInt(raw, 'maxLength', vc);
159
204
  const regex = expectString(raw, 'regex', vc);
160
205
  const ownership = expectBoolean(raw, ROW_SCOPE_MARKERS.OWNERSHIP, vc);
161
- const team = expectBoolean(raw, ROW_SCOPE_MARKERS.TEAM, vc);
206
+ const department = expectBoolean(raw, ROW_SCOPE_MARKERS.DEPARTMENT, vc);
207
+ const ownershipSource = expectScopeSource(raw, 'ownershipSource', vc);
208
+ const departmentSource = expectScopeSource(raw, 'departmentSource', vc);
162
209
  if (regex !== undefined) {
163
210
  try {
164
211
  new RegExp(regex);
@@ -182,7 +229,9 @@ export function validateField(raw, vc, options = {}) {
182
229
  unique,
183
230
  default: raw.default,
184
231
  ownership,
185
- team,
232
+ department,
233
+ ownershipSource,
234
+ departmentSource,
186
235
  };
187
236
  }
188
237
  case FIELD_TYPES.TEXT: {
@@ -198,6 +247,19 @@ export function validateField(raw, vc, options = {}) {
198
247
  default: raw.default,
199
248
  };
200
249
  }
250
+ case FIELD_TYPES.CHAR: {
251
+ const length = expectPositiveInt(raw, 'length', vc);
252
+ validateDefault(raw.default, type, vc);
253
+ return {
254
+ ...base,
255
+ type: FIELD_TYPES.CHAR,
256
+ formula,
257
+ length,
258
+ required,
259
+ unique,
260
+ default: raw.default,
261
+ };
262
+ }
201
263
  case FIELD_TYPES.INTEGER: {
202
264
  const min = expectNumber(raw, 'min', vc);
203
265
  const max = expectNumber(raw, 'max', vc);
@@ -219,10 +281,53 @@ export function validateField(raw, vc, options = {}) {
219
281
  default: raw.default,
220
282
  };
221
283
  }
284
+ case FIELD_TYPES.SMALLINT: {
285
+ const min = expectNumber(raw, 'min', vc);
286
+ const max = expectNumber(raw, 'max', vc);
287
+ if (min !== undefined && !Number.isInteger(min))
288
+ fail(vc, 'field.min.integer');
289
+ if (max !== undefined && !Number.isInteger(max))
290
+ fail(vc, 'field.max.integer');
291
+ if (min !== undefined && max !== undefined && min > max)
292
+ fail(vc, 'field.minGtMax');
293
+ validateDefault(raw.default, type, vc);
294
+ return {
295
+ ...base,
296
+ type: FIELD_TYPES.SMALLINT,
297
+ formula,
298
+ min,
299
+ max,
300
+ required,
301
+ unique,
302
+ default: raw.default,
303
+ };
304
+ }
305
+ case FIELD_TYPES.BIGINT: {
306
+ const min = expectNumber(raw, 'min', vc);
307
+ const max = expectNumber(raw, 'max', vc);
308
+ if (min !== undefined && !Number.isInteger(min))
309
+ fail(vc, 'field.min.integer');
310
+ if (max !== undefined && !Number.isInteger(max))
311
+ fail(vc, 'field.max.integer');
312
+ if (min !== undefined && max !== undefined && min > max)
313
+ fail(vc, 'field.minGtMax');
314
+ validateDefault(raw.default, type, vc);
315
+ return {
316
+ ...base,
317
+ type: FIELD_TYPES.BIGINT,
318
+ formula,
319
+ min,
320
+ max,
321
+ required,
322
+ unique,
323
+ default: raw.default,
324
+ };
325
+ }
222
326
  case FIELD_TYPES.NUMBER: {
223
327
  const min = expectNumber(raw, 'min', vc);
224
328
  const max = expectNumber(raw, 'max', vc);
225
329
  const precision = expectPositiveInt(raw, 'precision', vc);
330
+ const scale = expectPositiveInt(raw, 'scale', vc);
226
331
  if (min !== undefined && max !== undefined && min > max)
227
332
  fail(vc, 'field.minGtMax');
228
333
  validateDefault(raw.default, type, vc);
@@ -233,6 +338,41 @@ export function validateField(raw, vc, options = {}) {
233
338
  min,
234
339
  max,
235
340
  precision,
341
+ scale,
342
+ required,
343
+ unique,
344
+ default: raw.default,
345
+ };
346
+ }
347
+ case FIELD_TYPES.REAL: {
348
+ const min = expectNumber(raw, 'min', vc);
349
+ const max = expectNumber(raw, 'max', vc);
350
+ if (min !== undefined && max !== undefined && min > max)
351
+ fail(vc, 'field.minGtMax');
352
+ validateDefault(raw.default, type, vc);
353
+ return {
354
+ ...base,
355
+ type: FIELD_TYPES.REAL,
356
+ formula,
357
+ min,
358
+ max,
359
+ required,
360
+ unique,
361
+ default: raw.default,
362
+ };
363
+ }
364
+ case FIELD_TYPES.DOUBLE: {
365
+ const min = expectNumber(raw, 'min', vc);
366
+ const max = expectNumber(raw, 'max', vc);
367
+ if (min !== undefined && max !== undefined && min > max)
368
+ fail(vc, 'field.minGtMax');
369
+ validateDefault(raw.default, type, vc);
370
+ return {
371
+ ...base,
372
+ type: FIELD_TYPES.DOUBLE,
373
+ formula,
374
+ min,
375
+ max,
236
376
  required,
237
377
  unique,
238
378
  default: raw.default,
@@ -243,6 +383,14 @@ export function validateField(raw, vc, options = {}) {
243
383
  const max = expectNumber(raw, 'max', vc);
244
384
  if (min !== undefined && max !== undefined && min > max)
245
385
  fail(vc, 'field.minGtMax');
386
+ const currency = expectString(raw, 'currency', vc);
387
+ if (currency !== undefined && !isCurrencyCode(currency))
388
+ fail(vc, 'field.currency.invalid', { currency });
389
+ const precision = expectPositiveInt(raw, 'precision', vc);
390
+ const scale = currency === undefined ? 2 : currencyMinorUnits(currency);
391
+ if (precision !== undefined && precision <= scale) {
392
+ fail(vc, 'field.currency.precision', { precision, scale });
393
+ }
246
394
  validateDefault(raw.default, type, vc);
247
395
  return {
248
396
  ...base,
@@ -253,6 +401,8 @@ export function validateField(raw, vc, options = {}) {
253
401
  required,
254
402
  unique,
255
403
  default: raw.default,
404
+ currency,
405
+ precision,
256
406
  };
257
407
  }
258
408
  case FIELD_TYPES.BOOLEAN:
@@ -265,20 +415,59 @@ export function validateField(raw, vc, options = {}) {
265
415
  unique,
266
416
  default: raw.default,
267
417
  };
268
- case FIELD_TYPES.DATETIME:
418
+ case FIELD_TYPES.DATE:
269
419
  validateDefault(raw.default, type, vc);
270
420
  return {
271
421
  ...base,
272
- type: FIELD_TYPES.DATETIME,
422
+ type: FIELD_TYPES.DATE,
273
423
  required,
274
424
  unique,
275
425
  default: raw.default,
276
426
  };
277
- case FIELD_TYPES.DATE:
427
+ case FIELD_TYPES.TIME:
278
428
  validateDefault(raw.default, type, vc);
279
429
  return {
280
430
  ...base,
281
- type: FIELD_TYPES.DATE,
431
+ type: FIELD_TYPES.TIME,
432
+ required,
433
+ unique,
434
+ default: raw.default,
435
+ };
436
+ case FIELD_TYPES.TIMETZ:
437
+ validateDefault(raw.default, type, vc);
438
+ return {
439
+ ...base,
440
+ type: FIELD_TYPES.TIMETZ,
441
+ required,
442
+ unique,
443
+ default: raw.default,
444
+ };
445
+ case FIELD_TYPES.TIMESTAMP:
446
+ validateDefault(raw.default, type, vc);
447
+ return {
448
+ ...base,
449
+ type: FIELD_TYPES.TIMESTAMP,
450
+ required,
451
+ unique,
452
+ default: raw.default,
453
+ };
454
+ case FIELD_TYPES.TIMESTAMPTZ:
455
+ validateDefault(raw.default, type, vc);
456
+ return {
457
+ ...base,
458
+ type: FIELD_TYPES.TIMESTAMPTZ,
459
+ required,
460
+ unique,
461
+ default: raw.default,
462
+ };
463
+ case FIELD_TYPES.INTERVAL:
464
+ validateDefault(raw.default, type, vc);
465
+ return { ...base, type: FIELD_TYPES.INTERVAL, required, unique };
466
+ case FIELD_TYPES.UUID:
467
+ validateDefault(raw.default, type, vc);
468
+ return {
469
+ ...base,
470
+ type: FIELD_TYPES.UUID,
282
471
  required,
283
472
  unique,
284
473
  default: raw.default,
@@ -286,45 +475,81 @@ export function validateField(raw, vc, options = {}) {
286
475
  case FIELD_TYPES.JSON:
287
476
  validateDefault(raw.default, type, vc);
288
477
  return { ...base, type: FIELD_TYPES.JSON, required, default: raw.default };
478
+ case FIELD_TYPES.JSONB:
479
+ validateDefault(raw.default, type, vc);
480
+ return { ...base, type: FIELD_TYPES.JSONB, required, default: raw.default };
289
481
  case FIELD_TYPES.ENUM: {
290
- const options = raw.options;
291
- if (!Array.isArray(options) || options.length === 0)
292
- fail(vc, 'field.enum.options.required');
293
- if (!options.every((o) => typeof o === 'string'))
294
- fail(vc, 'field.enum.options.strings');
295
- const seen = new Set();
296
- for (const o of options) {
297
- if (seen.has(o))
298
- fail(vc, 'field.enum.options.duplicate', { value: o });
299
- seen.add(o);
300
- }
482
+ const rawOptions = raw.options;
301
483
  const multiple = expectBoolean(raw, 'multiple', vc);
484
+ const enumType = expectString(raw, 'enumType', vc);
485
+ // a native enum type name is interpolated into DDL — restrict it to the
486
+ // same identifier shape as object/field names (no quotes/spaces/semicolons)
487
+ if (enumType !== undefined && !SNAKE_CASE.test(enumType)) {
488
+ fail(vc, 'field.enum.enumType.invalid', { value: enumType });
489
+ }
302
490
  if (multiple === true && primary === true)
303
491
  fail(vc, 'field.enum.multiple.primary');
304
492
  if (multiple === true && unique === true)
305
493
  fail(vc, 'field.enum.multiple.unique');
306
- if (multiple === true) {
307
- if (raw.default !== undefined) {
308
- if (!Array.isArray(raw.default) || !raw.default.every((v) => typeof v === 'string')) {
309
- fail(vc, 'field.enum.multiple.default.array');
310
- }
311
- for (const v of raw.default) {
312
- if (!options.includes(v))
313
- fail(vc, 'field.enum.multiple.default.inOptions', { value: v });
494
+ // inline options: a non-empty, unique list of strings
495
+ if (Array.isArray(rawOptions)) {
496
+ if (rawOptions.length === 0)
497
+ fail(vc, 'field.enum.options.required');
498
+ if (!rawOptions.every((o) => typeof o === 'string'))
499
+ fail(vc, 'field.enum.options.strings');
500
+ const seen = new Set();
501
+ for (const o of rawOptions) {
502
+ if (seen.has(o))
503
+ fail(vc, 'field.enum.options.duplicate', { value: o });
504
+ seen.add(o);
505
+ }
506
+ const options = rawOptions;
507
+ if (multiple === true) {
508
+ if (raw.default !== undefined) {
509
+ if (!Array.isArray(raw.default) || !raw.default.every((v) => typeof v === 'string')) {
510
+ fail(vc, 'field.enum.multiple.default.array');
511
+ }
512
+ for (const v of raw.default) {
513
+ if (!options.includes(v))
514
+ fail(vc, 'field.enum.multiple.default.inOptions', { value: v });
515
+ }
314
516
  }
315
517
  }
518
+ else {
519
+ validateDefault(raw.default, type, vc, options);
520
+ }
521
+ return {
522
+ ...base,
523
+ type: FIELD_TYPES.ENUM,
524
+ options,
525
+ multiple,
526
+ enumType,
527
+ required,
528
+ unique,
529
+ default: multiple === true ? raw.default : raw.default,
530
+ };
316
531
  }
317
- else {
318
- validateDefault(raw.default, type, vc, options);
532
+ // data-driven options: { from: { object, column? } }
533
+ const fromRaw = isRecord(rawOptions) ? rawOptions.from : undefined;
534
+ if (!isRecord(fromRaw) || typeof fromRaw.object !== 'string' || !SNAKE_CASE.test(fromRaw.object)) {
535
+ fail(vc, 'field.enum.options.shape');
536
+ }
537
+ const fromObject = fromRaw.object;
538
+ const fromColumn = fromRaw.column;
539
+ if (fromColumn !== undefined && (typeof fromColumn !== 'string' || !SNAKE_CASE.test(fromColumn))) {
540
+ fail(vc, 'field.enum.options.shape');
319
541
  }
542
+ if (raw.default !== undefined)
543
+ fail(vc, 'field.default.optionsFrom');
320
544
  return {
321
545
  ...base,
322
546
  type: FIELD_TYPES.ENUM,
323
- options: options,
547
+ options: {
548
+ from: { object: fromObject, ...(fromColumn === undefined ? {} : { column: fromColumn }) },
549
+ },
324
550
  multiple,
325
551
  required,
326
552
  unique,
327
- default: multiple === true ? raw.default : raw.default,
328
553
  };
329
554
  }
330
555
  case FIELD_TYPES.RELATION: {
@@ -402,30 +627,21 @@ export function validateField(raw, vc, options = {}) {
402
627
  default: multiple === true ? raw.default : raw.default,
403
628
  };
404
629
  }
405
- case FIELD_TYPES.PERSON: {
406
- const target = expectString(raw, 'target', vc);
407
- if (target === undefined)
408
- fail(vc, 'field.relation.target.required');
409
- if (!SNAKE_CASE.test(target))
410
- fail(vc, 'field.relation.target.snake', { target });
630
+ case FIELD_TYPES.USER: {
411
631
  const onDelete = expectString(raw, 'onDelete', vc);
412
632
  if (onDelete !== undefined && !ON_DELETE_ACTION_VALUES.includes(onDelete)) {
413
633
  fail(vc, 'field.relation.onDelete.invalid', { actions: ON_DELETE_ACTION_VALUES.join('/') });
414
634
  }
415
- const department = expectString(raw, 'department', vc);
416
- return { ...base, type: FIELD_TYPES.PERSON, target, required, unique, onDelete, department };
635
+ // implicit target: the engine identity object (never declared in schema.json)
636
+ return { ...base, type: FIELD_TYPES.USER, target: IDENTITY_OBJECT_NAMES.USER, required, unique, onDelete };
417
637
  }
418
638
  case FIELD_TYPES.DEPARTMENT: {
419
- const target = expectString(raw, 'target', vc);
420
- if (target === undefined)
421
- fail(vc, 'field.relation.target.required');
422
- if (!SNAKE_CASE.test(target))
423
- fail(vc, 'field.relation.target.snake', { target });
424
639
  const onDelete = expectString(raw, 'onDelete', vc);
425
640
  if (onDelete !== undefined && !ON_DELETE_ACTION_VALUES.includes(onDelete)) {
426
641
  fail(vc, 'field.relation.onDelete.invalid', { actions: ON_DELETE_ACTION_VALUES.join('/') });
427
642
  }
428
- return { ...base, type: FIELD_TYPES.DEPARTMENT, target, required, unique, onDelete };
643
+ // implicit target: the engine identity object (never declared in schema.json)
644
+ return { ...base, type: FIELD_TYPES.DEPARTMENT, target: IDENTITY_OBJECT_NAMES.DEPARTMENT, required, unique, onDelete };
429
645
  }
430
646
  case FIELD_TYPES.SEQ_NO: {
431
647
  const format = expectString(raw, 'format', vc);
@@ -448,10 +664,54 @@ export function validateField(raw, vc, options = {}) {
448
664
  }
449
665
  }
450
666
  }
667
+ /** read an optional scope-source attr (`ownershipSource`/`departmentSource`) */
668
+ function expectScopeSource(raw, key, vc) {
669
+ const value = expectString(raw, key, vc);
670
+ if (value === undefined)
671
+ return undefined;
672
+ if (value !== SCOPE_SOURCES.INTERNAL && value !== SCOPE_SOURCES.EXTERNAL) {
673
+ fail(vc, 'field.scopeSource.invalid', { attr: key });
674
+ }
675
+ return value;
676
+ }
677
+ /** engine-semantic attrs a registered type does NOT inherit from its base (computed/RBAC) */
678
+ const SEMANTIC_ATTRS = new Set(['formula', ROW_SCOPE_MARKERS.OWNERSHIP, ROW_SCOPE_MARKERS.DEPARTMENT]);
679
+ /** type-check one declared extra-attribute value against its AttrSpec */
680
+ function checkAttrValue(value, attr, spec, vc) {
681
+ switch (spec.type) {
682
+ case ATTR_KINDS.STRING:
683
+ if (typeof value !== 'string')
684
+ fail(vc, 'field.attr.type', { attr, type: 'string' });
685
+ return;
686
+ case ATTR_KINDS.NUMBER:
687
+ if (typeof value !== 'number' || Number.isNaN(value))
688
+ fail(vc, 'field.attr.type', { attr, type: 'number' });
689
+ return;
690
+ case ATTR_KINDS.INTEGER:
691
+ if (typeof value !== 'number' || !Number.isInteger(value))
692
+ fail(vc, 'field.attr.type', { attr, type: 'integer' });
693
+ return;
694
+ case ATTR_KINDS.BOOLEAN:
695
+ if (typeof value !== 'boolean')
696
+ fail(vc, 'field.attr.type', { attr, type: 'boolean' });
697
+ return;
698
+ case ATTR_KINDS.JSON:
699
+ return;
700
+ case ATTR_KINDS.ENUM: {
701
+ const values = spec.values ?? [];
702
+ if (typeof value !== 'string' || !values.includes(value)) {
703
+ fail(vc, 'field.attr.enum', { attr, values: values.join('/') });
704
+ }
705
+ return;
706
+ }
707
+ }
708
+ }
451
709
  /**
452
710
  * Validate a field whose type is a user/plugin registered type. Attributes are
453
- * checked against the registration's allow-list (plus the base's conveniences);
454
- * storage/TS/MCP/OpenAPI behaviour is inherited from `base` at consumption time.
711
+ * checked against the base primitive's attributes (minus engine-semantic ones)
712
+ * plus the registration's declared `attrs`; declared attr values are type-checked
713
+ * and preserved. Storage/TS/MCP/OpenAPI/write-validation behaviour is inherited
714
+ * from `base` at consumption time.
455
715
  */
456
716
  function validateRegisteredField(raw, name, type, descriptor, vc) {
457
717
  const base = descriptor.base;
@@ -459,13 +719,13 @@ function validateRegisteredField(raw, name, type, descriptor, vc) {
459
719
  fail(vc, 'field.type.invalid', { type });
460
720
  const resolvedBase = fieldBase(DEFAULT_FIELD_TYPE_REGISTRY, base);
461
721
  const relationLike = descriptor.relationLike === true || resolvedBase === FIELD_TYPES.RELATION;
462
- const allowed = new Set([...BASE_KEYS, ...(descriptor.attrs ?? []), 'required', 'unique', 'default']);
722
+ const specs = descriptor.attrs ?? {};
723
+ const inherited = (EXTRA_KEYS[resolvedBase] ?? []).filter((k) => !SEMANTIC_ATTRS.has(k));
724
+ const allowed = new Set([...BASE_KEYS, ...inherited, ...Object.keys(specs)]);
463
725
  if (relationLike) {
464
726
  allowed.add('target');
465
727
  allowed.add('onDelete');
466
728
  }
467
- if (resolvedBase === FIELD_TYPES.STRING || resolvedBase === FIELD_TYPES.TEXT)
468
- allowed.add('multiple');
469
729
  for (const key of Object.keys(raw)) {
470
730
  if (!allowed.has(key))
471
731
  fail(vc, 'field.attr.notAllowed', { type, attr: key });
@@ -477,10 +737,12 @@ function validateRegisteredField(raw, name, type, descriptor, vc) {
477
737
  const sensitive = expectBoolean(raw, 'sensitive', vc);
478
738
  const required = expectBoolean(raw, 'required', vc);
479
739
  const unique = expectBoolean(raw, 'unique', vc);
480
- const multiple = expectBoolean(raw, 'multiple', vc);
481
740
  const out = { name, type, labels, description, primary, system, sensitive, required, unique };
482
- if (multiple !== undefined)
483
- out.multiple = multiple;
741
+ // carry the base's own value constraints (min/max/minLength/maxLength/regex/precision)
742
+ for (const key of inherited) {
743
+ if (raw[key] !== undefined && out[key] === undefined)
744
+ out[key] = raw[key];
745
+ }
484
746
  if (relationLike) {
485
747
  const target = expectString(raw, 'target', vc);
486
748
  if (target === undefined)
@@ -497,6 +759,17 @@ function validateRegisteredField(raw, name, type, descriptor, vc) {
497
759
  }
498
760
  if (raw.default !== undefined)
499
761
  out.default = raw.default;
762
+ // declared extra attributes: required check + value validation + preserve
763
+ for (const [attr, spec] of Object.entries(specs)) {
764
+ const value = raw[attr];
765
+ if (value === undefined) {
766
+ if (spec.required === true)
767
+ fail(vc, 'field.attr.required', { type, attr });
768
+ continue;
769
+ }
770
+ checkAttrValue(value, attr, spec, vc);
771
+ out[attr] = value;
772
+ }
500
773
  return out;
501
774
  }
502
775
  //# sourceMappingURL=field.js.map