@byline/core 0.9.3

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 (283) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +17 -0
  3. package/dist/@types/admin-types.d.ts +275 -0
  4. package/dist/@types/admin-types.d.ts.map +1 -0
  5. package/dist/@types/admin-types.js +18 -0
  6. package/dist/@types/admin-types.js.map +1 -0
  7. package/dist/@types/collection-types.d.ts +816 -0
  8. package/dist/@types/collection-types.d.ts.map +1 -0
  9. package/dist/@types/collection-types.js +217 -0
  10. package/dist/@types/collection-types.js.map +1 -0
  11. package/dist/@types/db-types.d.ts +463 -0
  12. package/dist/@types/db-types.d.ts.map +1 -0
  13. package/dist/@types/db-types.js +2 -0
  14. package/dist/@types/db-types.js.map +1 -0
  15. package/dist/@types/field-data-types.d.ts +147 -0
  16. package/dist/@types/field-data-types.d.ts.map +1 -0
  17. package/dist/@types/field-data-types.js +38 -0
  18. package/dist/@types/field-data-types.js.map +1 -0
  19. package/dist/@types/field-types.d.ts +579 -0
  20. package/dist/@types/field-types.d.ts.map +1 -0
  21. package/dist/@types/field-types.js +32 -0
  22. package/dist/@types/field-types.js.map +1 -0
  23. package/dist/@types/index.d.ts +18 -0
  24. package/dist/@types/index.d.ts.map +1 -0
  25. package/dist/@types/index.js +18 -0
  26. package/dist/@types/index.js.map +1 -0
  27. package/dist/@types/populate-types.d.ts +54 -0
  28. package/dist/@types/populate-types.d.ts.map +1 -0
  29. package/dist/@types/populate-types.js +9 -0
  30. package/dist/@types/populate-types.js.map +1 -0
  31. package/dist/@types/query-predicate.d.ts +74 -0
  32. package/dist/@types/query-predicate.d.ts.map +1 -0
  33. package/dist/@types/query-predicate.js +9 -0
  34. package/dist/@types/query-predicate.js.map +1 -0
  35. package/dist/@types/site-config.d.ts +212 -0
  36. package/dist/@types/site-config.d.ts.map +1 -0
  37. package/dist/@types/site-config.js +9 -0
  38. package/dist/@types/site-config.js.map +1 -0
  39. package/dist/@types/storage-types.d.ts +86 -0
  40. package/dist/@types/storage-types.d.ts.map +1 -0
  41. package/dist/@types/storage-types.js +9 -0
  42. package/dist/@types/storage-types.js.map +1 -0
  43. package/dist/@types/store-types.d.ts +134 -0
  44. package/dist/@types/store-types.d.ts.map +1 -0
  45. package/dist/@types/store-types.js +24 -0
  46. package/dist/@types/store-types.js.map +1 -0
  47. package/dist/@types/type-utils.d.ts +17 -0
  48. package/dist/@types/type-utils.d.ts.map +1 -0
  49. package/dist/@types/type-utils.js +9 -0
  50. package/dist/@types/type-utils.js.map +1 -0
  51. package/dist/auth/apply-before-read.d.ts +36 -0
  52. package/dist/auth/apply-before-read.d.ts.map +1 -0
  53. package/dist/auth/apply-before-read.js +68 -0
  54. package/dist/auth/apply-before-read.js.map +1 -0
  55. package/dist/auth/apply-before-read.test.node.d.ts +9 -0
  56. package/dist/auth/apply-before-read.test.node.d.ts.map +1 -0
  57. package/dist/auth/apply-before-read.test.node.js +144 -0
  58. package/dist/auth/apply-before-read.test.node.js.map +1 -0
  59. package/dist/auth/assert-actor-can-perform.d.ts +39 -0
  60. package/dist/auth/assert-actor-can-perform.d.ts.map +1 -0
  61. package/dist/auth/assert-actor-can-perform.js +64 -0
  62. package/dist/auth/assert-actor-can-perform.js.map +1 -0
  63. package/dist/auth/assert-actor-can-perform.test.node.d.ts +9 -0
  64. package/dist/auth/assert-actor-can-perform.test.node.d.ts.map +1 -0
  65. package/dist/auth/assert-actor-can-perform.test.node.js +119 -0
  66. package/dist/auth/assert-actor-can-perform.test.node.js.map +1 -0
  67. package/dist/auth/index.d.ts +11 -0
  68. package/dist/auth/index.d.ts.map +1 -0
  69. package/dist/auth/index.js +11 -0
  70. package/dist/auth/index.js.map +1 -0
  71. package/dist/auth/register-collection-abilities.d.ts +40 -0
  72. package/dist/auth/register-collection-abilities.d.ts.map +1 -0
  73. package/dist/auth/register-collection-abilities.js +87 -0
  74. package/dist/auth/register-collection-abilities.js.map +1 -0
  75. package/dist/auth/register-collection-abilities.test.node.d.ts +9 -0
  76. package/dist/auth/register-collection-abilities.test.node.d.ts.map +1 -0
  77. package/dist/auth/register-collection-abilities.test.node.js +124 -0
  78. package/dist/auth/register-collection-abilities.test.node.js.map +1 -0
  79. package/dist/config/config.d.ts +10 -0
  80. package/dist/config/config.d.ts.map +1 -0
  81. package/dist/config/config.js +108 -0
  82. package/dist/config/config.js.map +1 -0
  83. package/dist/config/routes.d.ts +16 -0
  84. package/dist/config/routes.d.ts.map +1 -0
  85. package/dist/config/routes.js +26 -0
  86. package/dist/config/routes.js.map +1 -0
  87. package/dist/config/validate-admin-configs.d.ts +33 -0
  88. package/dist/config/validate-admin-configs.d.ts.map +1 -0
  89. package/dist/config/validate-admin-configs.js +250 -0
  90. package/dist/config/validate-admin-configs.js.map +1 -0
  91. package/dist/config/validate-admin-configs.test.node.d.ts +9 -0
  92. package/dist/config/validate-admin-configs.test.node.d.ts.map +1 -0
  93. package/dist/config/validate-admin-configs.test.node.js +224 -0
  94. package/dist/config/validate-admin-configs.test.node.js.map +1 -0
  95. package/dist/config/validate-collections.d.ts +33 -0
  96. package/dist/config/validate-collections.d.ts.map +1 -0
  97. package/dist/config/validate-collections.js +70 -0
  98. package/dist/config/validate-collections.js.map +1 -0
  99. package/dist/config/validate-collections.test.node.d.ts +9 -0
  100. package/dist/config/validate-collections.test.node.d.ts.map +1 -0
  101. package/dist/config/validate-collections.test.node.js +149 -0
  102. package/dist/config/validate-collections.test.node.js.map +1 -0
  103. package/dist/core.d.ts +89 -0
  104. package/dist/core.d.ts.map +1 -0
  105. package/dist/core.js +99 -0
  106. package/dist/core.js.map +1 -0
  107. package/dist/defaults/default-values.d.ts +13 -0
  108. package/dist/defaults/default-values.d.ts.map +1 -0
  109. package/dist/defaults/default-values.js +60 -0
  110. package/dist/defaults/default-values.js.map +1 -0
  111. package/dist/index.d.ts +20 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +36 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/errors.d.ts +98 -0
  116. package/dist/lib/errors.d.ts.map +1 -0
  117. package/dist/lib/errors.js +134 -0
  118. package/dist/lib/errors.js.map +1 -0
  119. package/dist/lib/logger.d.ts +62 -0
  120. package/dist/lib/logger.d.ts.map +1 -0
  121. package/dist/lib/logger.js +120 -0
  122. package/dist/lib/logger.js.map +1 -0
  123. package/dist/lib/registry.d.ts +65 -0
  124. package/dist/lib/registry.d.ts.map +1 -0
  125. package/dist/lib/registry.js +133 -0
  126. package/dist/lib/registry.js.map +1 -0
  127. package/dist/logger/index.d.ts +3 -0
  128. package/dist/logger/index.d.ts.map +1 -0
  129. package/dist/logger/index.js +3 -0
  130. package/dist/logger/index.js.map +1 -0
  131. package/dist/patches/apply-patches.d.ts +21 -0
  132. package/dist/patches/apply-patches.d.ts.map +1 -0
  133. package/dist/patches/apply-patches.js +357 -0
  134. package/dist/patches/apply-patches.js.map +1 -0
  135. package/dist/patches/index.d.ts +3 -0
  136. package/dist/patches/index.d.ts.map +1 -0
  137. package/dist/patches/index.js +4 -0
  138. package/dist/patches/index.js.map +1 -0
  139. package/dist/patches/patch-types.d.ts +82 -0
  140. package/dist/patches/patch-types.d.ts.map +1 -0
  141. package/dist/patches/patch-types.js +3 -0
  142. package/dist/patches/patch-types.js.map +1 -0
  143. package/dist/patches/patch.test.node.d.ts +2 -0
  144. package/dist/patches/patch.test.node.d.ts.map +1 -0
  145. package/dist/patches/patch.test.node.js +193 -0
  146. package/dist/patches/patch.test.node.js.map +1 -0
  147. package/dist/query/parse-where.d.ts +100 -0
  148. package/dist/query/parse-where.d.ts.map +1 -0
  149. package/dist/query/parse-where.js +352 -0
  150. package/dist/query/parse-where.js.map +1 -0
  151. package/dist/query/parse-where.test.node.d.ts +9 -0
  152. package/dist/query/parse-where.test.node.d.ts.map +1 -0
  153. package/dist/query/parse-where.test.node.js +581 -0
  154. package/dist/query/parse-where.test.node.js.map +1 -0
  155. package/dist/schemas/zod/builder.d.ts +466 -0
  156. package/dist/schemas/zod/builder.d.ts.map +1 -0
  157. package/dist/schemas/zod/builder.js +276 -0
  158. package/dist/schemas/zod/builder.js.map +1 -0
  159. package/dist/schemas/zod/cache.d.ts +14 -0
  160. package/dist/schemas/zod/cache.d.ts.map +1 -0
  161. package/dist/schemas/zod/cache.js +40 -0
  162. package/dist/schemas/zod/cache.js.map +1 -0
  163. package/dist/schemas/zod/index.d.ts +4 -0
  164. package/dist/schemas/zod/index.d.ts.map +1 -0
  165. package/dist/schemas/zod/index.js +4 -0
  166. package/dist/schemas/zod/index.js.map +1 -0
  167. package/dist/schemas/zod/types.d.ts +13 -0
  168. package/dist/schemas/zod/types.d.ts.map +1 -0
  169. package/dist/schemas/zod/types.js +2 -0
  170. package/dist/schemas/zod/types.js.map +1 -0
  171. package/dist/services/collection-bootstrap.d.ts +46 -0
  172. package/dist/services/collection-bootstrap.d.ts.map +1 -0
  173. package/dist/services/collection-bootstrap.js +108 -0
  174. package/dist/services/collection-bootstrap.js.map +1 -0
  175. package/dist/services/collection-bootstrap.test.node.d.ts +9 -0
  176. package/dist/services/collection-bootstrap.test.node.d.ts.map +1 -0
  177. package/dist/services/collection-bootstrap.test.node.js +208 -0
  178. package/dist/services/collection-bootstrap.test.node.js.map +1 -0
  179. package/dist/services/document-lifecycle.d.ts +245 -0
  180. package/dist/services/document-lifecycle.d.ts.map +1 -0
  181. package/dist/services/document-lifecycle.js +481 -0
  182. package/dist/services/document-lifecycle.js.map +1 -0
  183. package/dist/services/document-lifecycle.test.node.d.ts +9 -0
  184. package/dist/services/document-lifecycle.test.node.d.ts.map +1 -0
  185. package/dist/services/document-lifecycle.test.node.js +781 -0
  186. package/dist/services/document-lifecycle.test.node.js.map +1 -0
  187. package/dist/services/document-read.d.ts +26 -0
  188. package/dist/services/document-read.d.ts.map +1 -0
  189. package/dist/services/document-read.js +60 -0
  190. package/dist/services/document-read.js.map +1 -0
  191. package/dist/services/field-upload.d.ts +100 -0
  192. package/dist/services/field-upload.d.ts.map +1 -0
  193. package/dist/services/field-upload.js +328 -0
  194. package/dist/services/field-upload.js.map +1 -0
  195. package/dist/services/field-upload.test.node.d.ts +9 -0
  196. package/dist/services/field-upload.test.node.d.ts.map +1 -0
  197. package/dist/services/field-upload.test.node.js +337 -0
  198. package/dist/services/field-upload.test.node.js.map +1 -0
  199. package/dist/services/index.d.ts +10 -0
  200. package/dist/services/index.d.ts.map +1 -0
  201. package/dist/services/index.js +11 -0
  202. package/dist/services/index.js.map +1 -0
  203. package/dist/services/populate.d.ts +299 -0
  204. package/dist/services/populate.d.ts.map +1 -0
  205. package/dist/services/populate.js +484 -0
  206. package/dist/services/populate.js.map +1 -0
  207. package/dist/services/populate.test.node.d.ts +9 -0
  208. package/dist/services/populate.test.node.d.ts.map +1 -0
  209. package/dist/services/populate.test.node.js +910 -0
  210. package/dist/services/populate.test.node.js.map +1 -0
  211. package/dist/services/relation-projection.d.ts +52 -0
  212. package/dist/services/relation-projection.d.ts.map +1 -0
  213. package/dist/services/relation-projection.js +81 -0
  214. package/dist/services/relation-projection.js.map +1 -0
  215. package/dist/services/richtext-populate.d.ts +87 -0
  216. package/dist/services/richtext-populate.d.ts.map +1 -0
  217. package/dist/services/richtext-populate.js +189 -0
  218. package/dist/services/richtext-populate.js.map +1 -0
  219. package/dist/services/richtext-populate.test.node.d.ts +9 -0
  220. package/dist/services/richtext-populate.test.node.d.ts.map +1 -0
  221. package/dist/services/richtext-populate.test.node.js +197 -0
  222. package/dist/services/richtext-populate.test.node.js.map +1 -0
  223. package/dist/storage/collection-fingerprint.d.ts +21 -0
  224. package/dist/storage/collection-fingerprint.d.ts.map +1 -0
  225. package/dist/storage/collection-fingerprint.js +172 -0
  226. package/dist/storage/collection-fingerprint.js.map +1 -0
  227. package/dist/storage/collection-fingerprint.test.node.d.ts +9 -0
  228. package/dist/storage/collection-fingerprint.test.node.d.ts.map +1 -0
  229. package/dist/storage/collection-fingerprint.test.node.js +256 -0
  230. package/dist/storage/collection-fingerprint.test.node.js.map +1 -0
  231. package/dist/storage/field-store-map.d.ts +59 -0
  232. package/dist/storage/field-store-map.d.ts.map +1 -0
  233. package/dist/storage/field-store-map.js +75 -0
  234. package/dist/storage/field-store-map.js.map +1 -0
  235. package/dist/storage/field-store-map.test.node.d.ts +9 -0
  236. package/dist/storage/field-store-map.test.node.d.ts.map +1 -0
  237. package/dist/storage/field-store-map.test.node.js +117 -0
  238. package/dist/storage/field-store-map.test.node.js.map +1 -0
  239. package/dist/storage/index.d.ts +10 -0
  240. package/dist/storage/index.d.ts.map +1 -0
  241. package/dist/storage/index.js +10 -0
  242. package/dist/storage/index.js.map +1 -0
  243. package/dist/utils/normalise-dates.d.ts +15 -0
  244. package/dist/utils/normalise-dates.d.ts.map +1 -0
  245. package/dist/utils/normalise-dates.js +22 -0
  246. package/dist/utils/normalise-dates.js.map +1 -0
  247. package/dist/utils/slugify.d.ts +56 -0
  248. package/dist/utils/slugify.d.ts.map +1 -0
  249. package/dist/utils/slugify.js +91 -0
  250. package/dist/utils/slugify.js.map +1 -0
  251. package/dist/utils/slugify.test.node.d.ts +9 -0
  252. package/dist/utils/slugify.test.node.d.ts.map +1 -0
  253. package/dist/utils/slugify.test.node.js +86 -0
  254. package/dist/utils/slugify.test.node.js.map +1 -0
  255. package/dist/utils/storage-utils.d.ts +36 -0
  256. package/dist/utils/storage-utils.d.ts.map +1 -0
  257. package/dist/utils/storage-utils.js +38 -0
  258. package/dist/utils/storage-utils.js.map +1 -0
  259. package/dist/utils/utils.general.d.ts +64 -0
  260. package/dist/utils/utils.general.d.ts.map +1 -0
  261. package/dist/utils/utils.general.js +219 -0
  262. package/dist/utils/utils.general.js.map +1 -0
  263. package/dist/validation/index.d.ts +9 -0
  264. package/dist/validation/index.d.ts.map +1 -0
  265. package/dist/validation/index.js +9 -0
  266. package/dist/validation/index.js.map +1 -0
  267. package/dist/validation/shared.d.ts +36 -0
  268. package/dist/validation/shared.d.ts.map +1 -0
  269. package/dist/validation/shared.js +42 -0
  270. package/dist/validation/shared.js.map +1 -0
  271. package/dist/workflow/index.d.ts +2 -0
  272. package/dist/workflow/index.d.ts.map +1 -0
  273. package/dist/workflow/index.js +3 -0
  274. package/dist/workflow/index.js.map +1 -0
  275. package/dist/workflow/workflow.d.ts +40 -0
  276. package/dist/workflow/workflow.d.ts.map +1 -0
  277. package/dist/workflow/workflow.js +96 -0
  278. package/dist/workflow/workflow.js.map +1 -0
  279. package/dist/workflow/workflow.test.node.d.ts +2 -0
  280. package/dist/workflow/workflow.test.node.d.ts.map +1 -0
  281. package/dist/workflow/workflow.test.node.js +198 -0
  282. package/dist/workflow/workflow.test.node.js.map +1 -0
  283. package/package.json +88 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export * from './shared.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,aAAa,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export * from './shared.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,aAAa,CAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ /**
9
+ * Generic Zod helpers shared across packages.
10
+ *
11
+ * Kept separate from `@byline/core/zod-schemas` (which hosts the
12
+ * collection-builder Zod machinery) so the purpose of each subpath
13
+ * stays clear. Ported from `@infonomic/shared` — the organisation's
14
+ * standard schema set, re-declared here so Byline has no external
15
+ * dependency on that package.
16
+ *
17
+ * Pure Zod — no runtime side effects, client-safe.
18
+ */
19
+ import { z } from 'zod';
20
+ /**
21
+ * Standard password policy — 8 to 128 characters, must contain at least
22
+ * one uppercase, one lowercase, one digit, and one character from the
23
+ * set `#?!@$%^&*-`. The 128-char cap leaves room for passphrase-style
24
+ * entries while still bounding argon2 input size (hashing a 1 MiB
25
+ * password is a DoS vector). The regex runs after `.min` / `.max` so
26
+ * the user sees length errors first and character-class errors only
27
+ * once length is acceptable.
28
+ */
29
+ export declare const passwordSchema: z.ZodString;
30
+ /**
31
+ * UUID with a descriptive error message. Equivalent to `z.uuid()` but
32
+ * the message is caller-friendly for forms that surface field errors
33
+ * directly.
34
+ */
35
+ export declare const uuidSchema: z.ZodUUID;
36
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/validation/shared.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,aAOxB,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU,WAGrB,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ /**
9
+ * Generic Zod helpers shared across packages.
10
+ *
11
+ * Kept separate from `@byline/core/zod-schemas` (which hosts the
12
+ * collection-builder Zod machinery) so the purpose of each subpath
13
+ * stays clear. Ported from `@infonomic/shared` — the organisation's
14
+ * standard schema set, re-declared here so Byline has no external
15
+ * dependency on that package.
16
+ *
17
+ * Pure Zod — no runtime side effects, client-safe.
18
+ */
19
+ import { z } from 'zod';
20
+ /**
21
+ * Standard password policy — 8 to 128 characters, must contain at least
22
+ * one uppercase, one lowercase, one digit, and one character from the
23
+ * set `#?!@$%^&*-`. The 128-char cap leaves room for passphrase-style
24
+ * entries while still bounding argon2 input size (hashing a 1 MiB
25
+ * password is a DoS vector). The regex runs after `.min` / `.max` so
26
+ * the user sees length errors first and character-class errors only
27
+ * once length is acceptable.
28
+ */
29
+ export const passwordSchema = z
30
+ .string()
31
+ .min(8, 'Password must be at least 8 characters long.')
32
+ .max(128, 'Password must not exceed 128 characters.')
33
+ .regex(/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/, 'Password must contain at least one uppercase letter, one lowercase letter, one number, and one character from the following: #?!@$%^&*-');
34
+ /**
35
+ * UUID with a descriptive error message. Equivalent to `z.uuid()` but
36
+ * the message is caller-friendly for forms that surface field errors
37
+ * directly.
38
+ */
39
+ export const uuidSchema = z.uuid({
40
+ message: 'Invalid UUID format. Must be a 36-character hex string with hyphens (e.g., 123e4567-e89b-12d3-a456-426614174000)',
41
+ });
42
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/validation/shared.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,8CAA8C,CAAC;KACtD,GAAG,CAAC,GAAG,EAAE,0CAA0C,CAAC;KACpD,KAAK,CACJ,gEAAgE,EAChE,yIAAyI,CAC1I,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/B,OAAO,EACL,kHAAkH;CACrH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './workflow.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ // packages/byline/src/workflow/index.ts
2
+ export * from './workflow.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,cAAc,eAAe,CAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import type { CollectionDefinition, WorkflowConfig, WorkflowStatus } from '../@types/collection-types.js';
9
+ /**
10
+ * Resolve the effective workflow for a collection.
11
+ * Falls back to `DEFAULT_WORKFLOW` when the collection omits its own.
12
+ */
13
+ export declare function getWorkflow(collection: CollectionDefinition): WorkflowConfig;
14
+ /**
15
+ * Return the ordered status list for a collection.
16
+ */
17
+ export declare function getWorkflowStatuses(collection: CollectionDefinition): WorkflowStatus[];
18
+ /**
19
+ * Return the default status name for new documents in a collection.
20
+ */
21
+ export declare function getDefaultStatus(collection: CollectionDefinition): string;
22
+ export interface TransitionResult {
23
+ valid: boolean;
24
+ reason?: string;
25
+ }
26
+ /**
27
+ * Validate a status transition within a sequential workflow.
28
+ *
29
+ * Allowed moves:
30
+ * - Forward one step (e.g. draft → needs_review)
31
+ * - Backward one step (e.g. needs_review → draft)
32
+ * - Reset to first status from any position (e.g. published → draft)
33
+ * - Same status (no-op, always valid)
34
+ */
35
+ export declare function validateStatusTransition(workflow: WorkflowConfig, currentStatus: string, nextStatus: string): TransitionResult;
36
+ /**
37
+ * Return the status names that are valid targets from the given current status.
38
+ */
39
+ export declare function getAvailableTransitions(workflow: WorkflowConfig, currentStatus: string): string[];
40
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,cAAc,EACf,MAAM,+BAA+B,CAAA;AAMtC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,oBAAoB,GAAG,cAAc,CAE5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,oBAAoB,GAAG,cAAc,EAAE,CAEtF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAGzE;AAMD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAiClB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BjG"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import { DEFAULT_WORKFLOW } from '../@types/collection-types.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Helpers
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * Resolve the effective workflow for a collection.
14
+ * Falls back to `DEFAULT_WORKFLOW` when the collection omits its own.
15
+ */
16
+ export function getWorkflow(collection) {
17
+ return collection.workflow ?? DEFAULT_WORKFLOW;
18
+ }
19
+ /**
20
+ * Return the ordered status list for a collection.
21
+ */
22
+ export function getWorkflowStatuses(collection) {
23
+ return getWorkflow(collection).statuses;
24
+ }
25
+ /**
26
+ * Return the default status name for new documents in a collection.
27
+ */
28
+ export function getDefaultStatus(collection) {
29
+ const workflow = getWorkflow(collection);
30
+ return workflow.defaultStatus ?? workflow.statuses[0]?.name ?? 'draft';
31
+ }
32
+ /**
33
+ * Validate a status transition within a sequential workflow.
34
+ *
35
+ * Allowed moves:
36
+ * - Forward one step (e.g. draft → needs_review)
37
+ * - Backward one step (e.g. needs_review → draft)
38
+ * - Reset to first status from any position (e.g. published → draft)
39
+ * - Same status (no-op, always valid)
40
+ */
41
+ export function validateStatusTransition(workflow, currentStatus, nextStatus) {
42
+ if (currentStatus === nextStatus) {
43
+ return { valid: true };
44
+ }
45
+ const statuses = workflow.statuses;
46
+ const currentIndex = statuses.findIndex((s) => s.name === currentStatus);
47
+ const nextIndex = statuses.findIndex((s) => s.name === nextStatus);
48
+ if (currentIndex === -1) {
49
+ return {
50
+ valid: false,
51
+ reason: `Current status '${currentStatus}' is not defined in the workflow.`,
52
+ };
53
+ }
54
+ if (nextIndex === -1) {
55
+ return { valid: false, reason: `Target status '${nextStatus}' is not defined in the workflow.` };
56
+ }
57
+ // Reset to first status is always allowed.
58
+ if (nextIndex === 0) {
59
+ return { valid: true };
60
+ }
61
+ const diff = nextIndex - currentIndex;
62
+ if (diff === 1 || diff === -1) {
63
+ return { valid: true };
64
+ }
65
+ return {
66
+ valid: false,
67
+ reason: `Cannot transition from '${currentStatus}' to '${nextStatus}'. Only sequential (±1 step) or reset-to-first transitions are allowed.`,
68
+ };
69
+ }
70
+ /**
71
+ * Return the status names that are valid targets from the given current status.
72
+ */
73
+ export function getAvailableTransitions(workflow, currentStatus) {
74
+ const statuses = workflow.statuses;
75
+ const currentIndex = statuses.findIndex((s) => s.name === currentStatus);
76
+ if (currentIndex === -1)
77
+ return [];
78
+ const targets = [];
79
+ // Reset to first (unless already there).
80
+ const first = statuses[0];
81
+ if (currentIndex !== 0 && first) {
82
+ targets.push(first.name);
83
+ }
84
+ // Backward one step (if not at start and different from first).
85
+ const prev = statuses[currentIndex - 1];
86
+ if (currentIndex > 1 && prev) {
87
+ targets.push(prev.name);
88
+ }
89
+ // Forward one step.
90
+ const next = statuses[currentIndex + 1];
91
+ if (currentIndex < statuses.length - 1 && next) {
92
+ targets.push(next.name);
93
+ }
94
+ return targets;
95
+ }
96
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow.test.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.node.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow.test.node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { DEFAULT_WORKFLOW, defineWorkflow } from '../@types/collection-types.js';
3
+ import { getAvailableTransitions, getDefaultStatus, getWorkflow, getWorkflowStatuses, validateStatusTransition, } from './workflow.js';
4
+ // ---------------------------------------------------------------------------
5
+ // Fixtures
6
+ // ---------------------------------------------------------------------------
7
+ const fourStepWorkflow = {
8
+ statuses: [
9
+ { name: 'draft', label: 'Draft' },
10
+ { name: 'needs_review', label: 'Needs Review' },
11
+ { name: 'published', label: 'Published' },
12
+ { name: 'archived', label: 'Archived' },
13
+ ],
14
+ };
15
+ const minimalCollection = {
16
+ path: 'test',
17
+ labels: { singular: 'Test', plural: 'Tests' },
18
+ fields: [],
19
+ };
20
+ const collectionWithWorkflow = {
21
+ ...minimalCollection,
22
+ workflow: fourStepWorkflow,
23
+ };
24
+ const collectionWithCustomDefault = {
25
+ ...minimalCollection,
26
+ workflow: {
27
+ statuses: fourStepWorkflow.statuses,
28
+ defaultStatus: 'needs_review',
29
+ },
30
+ };
31
+ // ---------------------------------------------------------------------------
32
+ // Tests
33
+ // ---------------------------------------------------------------------------
34
+ describe('Workflow helpers', () => {
35
+ describe('getWorkflow', () => {
36
+ it('returns the collection workflow when defined', () => {
37
+ expect(getWorkflow(collectionWithWorkflow)).toBe(fourStepWorkflow);
38
+ });
39
+ it('falls back to DEFAULT_WORKFLOW when omitted', () => {
40
+ expect(getWorkflow(minimalCollection)).toBe(DEFAULT_WORKFLOW);
41
+ });
42
+ });
43
+ describe('getWorkflowStatuses', () => {
44
+ it('returns statuses array from the workflow', () => {
45
+ const statuses = getWorkflowStatuses(collectionWithWorkflow);
46
+ expect(statuses.map((s) => s.name)).toEqual([
47
+ 'draft',
48
+ 'needs_review',
49
+ 'published',
50
+ 'archived',
51
+ ]);
52
+ });
53
+ });
54
+ describe('getDefaultStatus', () => {
55
+ it('returns the first status by default', () => {
56
+ expect(getDefaultStatus(collectionWithWorkflow)).toBe('draft');
57
+ });
58
+ it('respects an explicit defaultStatus override', () => {
59
+ expect(getDefaultStatus(collectionWithCustomDefault)).toBe('needs_review');
60
+ });
61
+ it('falls back to "draft" for an empty statuses array', () => {
62
+ const col = {
63
+ ...minimalCollection,
64
+ workflow: { statuses: [] },
65
+ };
66
+ expect(getDefaultStatus(col)).toBe('draft');
67
+ });
68
+ });
69
+ });
70
+ describe('validateStatusTransition', () => {
71
+ const w = fourStepWorkflow;
72
+ it('allows same-status (no-op)', () => {
73
+ expect(validateStatusTransition(w, 'draft', 'draft')).toEqual({ valid: true });
74
+ });
75
+ it('allows forward one step', () => {
76
+ expect(validateStatusTransition(w, 'draft', 'needs_review')).toEqual({ valid: true });
77
+ expect(validateStatusTransition(w, 'needs_review', 'published')).toEqual({ valid: true });
78
+ expect(validateStatusTransition(w, 'published', 'archived')).toEqual({ valid: true });
79
+ });
80
+ it('allows backward one step', () => {
81
+ expect(validateStatusTransition(w, 'needs_review', 'draft')).toEqual({ valid: true });
82
+ expect(validateStatusTransition(w, 'published', 'needs_review')).toEqual({ valid: true });
83
+ expect(validateStatusTransition(w, 'archived', 'published')).toEqual({ valid: true });
84
+ });
85
+ it('allows reset to first status from any position', () => {
86
+ expect(validateStatusTransition(w, 'published', 'draft')).toEqual({ valid: true });
87
+ expect(validateStatusTransition(w, 'archived', 'draft')).toEqual({ valid: true });
88
+ });
89
+ it('rejects skipping steps forward', () => {
90
+ const result = validateStatusTransition(w, 'draft', 'published');
91
+ expect(result.valid).toBe(false);
92
+ expect(result.reason).toContain('draft');
93
+ expect(result.reason).toContain('published');
94
+ });
95
+ it('rejects skipping steps backward (not reset-to-first)', () => {
96
+ const result = validateStatusTransition(w, 'archived', 'needs_review');
97
+ expect(result.valid).toBe(false);
98
+ expect(result.reason).toContain('archived');
99
+ expect(result.reason).toContain('needs_review');
100
+ });
101
+ it('rejects unknown current status', () => {
102
+ const result = validateStatusTransition(w, 'unknown', 'draft');
103
+ expect(result.valid).toBe(false);
104
+ expect(result.reason).toContain('unknown');
105
+ });
106
+ it('rejects unknown target status', () => {
107
+ const result = validateStatusTransition(w, 'draft', 'unknown');
108
+ expect(result.valid).toBe(false);
109
+ expect(result.reason).toContain('unknown');
110
+ });
111
+ });
112
+ describe('getAvailableTransitions', () => {
113
+ const w = fourStepWorkflow;
114
+ it('from first status: only forward', () => {
115
+ expect(getAvailableTransitions(w, 'draft')).toEqual(['needs_review']);
116
+ });
117
+ it('from middle status: reset-to-first, back, and forward', () => {
118
+ expect(getAvailableTransitions(w, 'needs_review')).toEqual(['draft', 'published']);
119
+ });
120
+ it('from second-to-last: reset-to-first, back, and forward', () => {
121
+ expect(getAvailableTransitions(w, 'published')).toEqual(['draft', 'needs_review', 'archived']);
122
+ });
123
+ it('from last status: reset-to-first and back', () => {
124
+ expect(getAvailableTransitions(w, 'archived')).toEqual(['draft', 'published']);
125
+ });
126
+ it('returns empty for unknown status', () => {
127
+ expect(getAvailableTransitions(w, 'bogus')).toEqual([]);
128
+ });
129
+ });
130
+ // ---------------------------------------------------------------------------
131
+ // defineWorkflow tests
132
+ // ---------------------------------------------------------------------------
133
+ describe('defineWorkflow', () => {
134
+ it('produces the default three-status workflow when called with no args', () => {
135
+ const wf = defineWorkflow();
136
+ expect(wf.statuses.map((s) => s.name)).toEqual(['draft', 'published', 'archived']);
137
+ });
138
+ it('produces the default three-status workflow when called with empty input', () => {
139
+ const wf = defineWorkflow({});
140
+ expect(wf.statuses.map((s) => s.name)).toEqual(['draft', 'published', 'archived']);
141
+ expect(wf.statuses[0]).toEqual({ name: 'draft', label: 'Draft' });
142
+ expect(wf.statuses[1]).toEqual({ name: 'published', label: 'Published' });
143
+ expect(wf.statuses[2]).toEqual({ name: 'archived', label: 'Archived' });
144
+ });
145
+ it('applies custom labels and verbs to required statuses', () => {
146
+ const wf = defineWorkflow({
147
+ draft: { label: 'Brouillon', verb: 'Revenir au brouillon' },
148
+ published: { label: 'Publié', verb: 'Publier' },
149
+ archived: { label: 'Archivé', verb: 'Archiver' },
150
+ });
151
+ expect(wf.statuses[0]).toEqual({
152
+ name: 'draft',
153
+ label: 'Brouillon',
154
+ verb: 'Revenir au brouillon',
155
+ });
156
+ expect(wf.statuses[1]).toEqual({ name: 'published', label: 'Publié', verb: 'Publier' });
157
+ expect(wf.statuses[2]).toEqual({ name: 'archived', label: 'Archivé', verb: 'Archiver' });
158
+ });
159
+ it('inserts custom statuses between draft and published', () => {
160
+ const wf = defineWorkflow({
161
+ customStatuses: [
162
+ { name: 'needs_review', label: 'Needs Review', verb: 'Request Review' },
163
+ { name: 'approved', label: 'Approved', verb: 'Approve' },
164
+ ],
165
+ });
166
+ expect(wf.statuses.map((s) => s.name)).toEqual([
167
+ 'draft',
168
+ 'needs_review',
169
+ 'approved',
170
+ 'published',
171
+ 'archived',
172
+ ]);
173
+ });
174
+ it('passes through defaultStatus override', () => {
175
+ const wf = defineWorkflow({ defaultStatus: 'needs_review' });
176
+ expect(wf.defaultStatus).toBe('needs_review');
177
+ });
178
+ it('omits defaultStatus key when not specified', () => {
179
+ const wf = defineWorkflow({});
180
+ expect(wf).not.toHaveProperty('defaultStatus');
181
+ });
182
+ it('throws when a custom status uses a reserved name (draft)', () => {
183
+ expect(() => defineWorkflow({
184
+ customStatuses: [{ name: 'draft', label: 'Duplicate Draft' }],
185
+ })).toThrow(/custom status 'draft' conflicts/);
186
+ });
187
+ it('throws when a custom status uses a reserved name (published)', () => {
188
+ expect(() => defineWorkflow({
189
+ customStatuses: [{ name: 'published' }],
190
+ })).toThrow(/custom status 'published' conflicts/);
191
+ });
192
+ it('throws when a custom status uses a reserved name (archived)', () => {
193
+ expect(() => defineWorkflow({
194
+ customStatuses: [{ name: 'archived' }],
195
+ })).toThrow(/custom status 'archived' conflicts/);
196
+ });
197
+ });
198
+ //# sourceMappingURL=workflow.test.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.node.js","sourceRoot":"","sources":["../../src/workflow/workflow.test.node.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@byline/core",
3
+ "private": false,
4
+ "license": "MPL-2.0",
5
+ "version": "0.9.3",
6
+ "engines": {
7
+ "node": ">=20.9.0"
8
+ },
9
+ "description": "Byline CMS core package",
10
+ "keywords": [
11
+ "cms",
12
+ "headless cms",
13
+ "content management"
14
+ ],
15
+ "homepage": "https://github.com/Byline-CMS/bylinecms.dev",
16
+ "bugs": {
17
+ "url": "https://github.com/Byline-CMS/bylinecms.dev/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/Byline-CMS/bylinecms.dev.git",
22
+ "directory": "packages/core"
23
+ },
24
+ "type": "module",
25
+ "main": "dist/index.js",
26
+ "index": "dist/index.js",
27
+ "types": "dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "require": "./dist/index.js"
33
+ },
34
+ "./zod-schemas": {
35
+ "types": "./dist/schemas/zod/index.d.ts",
36
+ "import": "./dist/schemas/zod/index.js",
37
+ "require": "./dist/schemas/zod/index.js"
38
+ },
39
+ "./logger": {
40
+ "types": "./dist/logger/index.d.ts",
41
+ "import": "./dist/logger/index.js",
42
+ "require": "./dist/logger/index.js"
43
+ },
44
+ "./validation": {
45
+ "types": "./dist/validation/index.d.ts",
46
+ "import": "./dist/validation/index.js",
47
+ "require": "./dist/validation/index.js"
48
+ },
49
+ "./package.json": "./package.json"
50
+ },
51
+ "files": [
52
+ "dist"
53
+ ],
54
+ "dependencies": {
55
+ "dotenv": "^17.4.2",
56
+ "jose": "^6.2.3",
57
+ "npm-run-all": "^4.1.5",
58
+ "pino": "^10.3.1",
59
+ "uuid": "^14.0.0",
60
+ "zod": "^4.4.2",
61
+ "@byline/auth": "0.9.3"
62
+ },
63
+ "devDependencies": {
64
+ "@biomejs/biome": "2.4.14",
65
+ "@types/node": "^25.6.0",
66
+ "chokidar": "^5.0.0",
67
+ "chokidar-cli": "^3.0.0",
68
+ "tsc-alias": "^1.8.17",
69
+ "tsx": "^4.21.0",
70
+ "typescript": "6.0.3",
71
+ "vitest": "^4.1.5"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public",
75
+ "index": "dist/index.js",
76
+ "registry": "https://registry.npmjs.org/"
77
+ },
78
+ "scripts": {
79
+ "dev": "chokidar 'src/**/*' -c 'npm-run-all build'",
80
+ "build": "tsc -p tsconfig.json && tsc-alias",
81
+ "clean": "rimraf node_modules dist build .turbo",
82
+ "lint": "biome check --write --unsafe --diagnostic-level=error",
83
+ "skip": "tsx ./scripts/task-watch.js",
84
+ "test": "vitest run --mode=node",
85
+ "test:watch": "vitest --mode=node",
86
+ "typecheck": "tsc --noEmit"
87
+ }
88
+ }