@valencets/cms 0.1.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 (218) hide show
  1. package/README.md +486 -0
  2. package/dist/access/access-resolver.d.ts +6 -0
  3. package/dist/access/access-resolver.d.ts.map +1 -0
  4. package/dist/access/access-resolver.js +12 -0
  5. package/dist/access/access-resolver.js.map +1 -0
  6. package/dist/access/access-types.d.ts +22 -0
  7. package/dist/access/access-types.d.ts.map +1 -0
  8. package/dist/access/access-types.js +2 -0
  9. package/dist/access/access-types.js.map +1 -0
  10. package/dist/access/index.d.ts +3 -0
  11. package/dist/access/index.d.ts.map +1 -0
  12. package/dist/access/index.js +2 -0
  13. package/dist/access/index.js.map +1 -0
  14. package/dist/admin/admin-routes.d.ts +9 -0
  15. package/dist/admin/admin-routes.d.ts.map +1 -0
  16. package/dist/admin/admin-routes.js +139 -0
  17. package/dist/admin/admin-routes.js.map +1 -0
  18. package/dist/admin/dashboard.d.ts +3 -0
  19. package/dist/admin/dashboard.d.ts.map +1 -0
  20. package/dist/admin/dashboard.js +9 -0
  21. package/dist/admin/dashboard.js.map +1 -0
  22. package/dist/admin/edit-view.d.ts +8 -0
  23. package/dist/admin/edit-view.d.ts.map +1 -0
  24. package/dist/admin/edit-view.js +21 -0
  25. package/dist/admin/edit-view.js.map +1 -0
  26. package/dist/admin/escape.d.ts +2 -0
  27. package/dist/admin/escape.d.ts.map +1 -0
  28. package/dist/admin/escape.js +9 -0
  29. package/dist/admin/escape.js.map +1 -0
  30. package/dist/admin/field-renderers.d.ts +3 -0
  31. package/dist/admin/field-renderers.d.ts.map +1 -0
  32. package/dist/admin/field-renderers.js +60 -0
  33. package/dist/admin/field-renderers.js.map +1 -0
  34. package/dist/admin/index.d.ts +8 -0
  35. package/dist/admin/index.d.ts.map +1 -0
  36. package/dist/admin/index.js +8 -0
  37. package/dist/admin/index.js.map +1 -0
  38. package/dist/admin/layout.d.ts +9 -0
  39. package/dist/admin/layout.d.ts.map +1 -0
  40. package/dist/admin/layout.js +38 -0
  41. package/dist/admin/layout.js.map +1 -0
  42. package/dist/admin/list-view.d.ts +8 -0
  43. package/dist/admin/list-view.d.ts.map +1 -0
  44. package/dist/admin/list-view.js +21 -0
  45. package/dist/admin/list-view.js.map +1 -0
  46. package/dist/api/http-utils.d.ts +10 -0
  47. package/dist/api/http-utils.d.ts.map +1 -0
  48. package/dist/api/http-utils.js +29 -0
  49. package/dist/api/http-utils.js.map +1 -0
  50. package/dist/api/index.d.ts +6 -0
  51. package/dist/api/index.d.ts.map +1 -0
  52. package/dist/api/index.js +4 -0
  53. package/dist/api/index.js.map +1 -0
  54. package/dist/api/local-api.d.ts +52 -0
  55. package/dist/api/local-api.d.ts.map +1 -0
  56. package/dist/api/local-api.js +82 -0
  57. package/dist/api/local-api.js.map +1 -0
  58. package/dist/api/read-body.d.ts +6 -0
  59. package/dist/api/read-body.d.ts.map +1 -0
  60. package/dist/api/read-body.js +27 -0
  61. package/dist/api/read-body.js.map +1 -0
  62. package/dist/api/rest-api.d.ts +12 -0
  63. package/dist/api/rest-api.d.ts.map +1 -0
  64. package/dist/api/rest-api.js +100 -0
  65. package/dist/api/rest-api.js.map +1 -0
  66. package/dist/auth/auth-config.d.ts +12 -0
  67. package/dist/auth/auth-config.d.ts.map +1 -0
  68. package/dist/auth/auth-config.js +28 -0
  69. package/dist/auth/auth-config.js.map +1 -0
  70. package/dist/auth/auth-routes.d.ts +5 -0
  71. package/dist/auth/auth-routes.d.ts.map +1 -0
  72. package/dist/auth/auth-routes.js +108 -0
  73. package/dist/auth/auth-routes.js.map +1 -0
  74. package/dist/auth/cookie.d.ts +2 -0
  75. package/dist/auth/cookie.d.ts.map +1 -0
  76. package/dist/auth/cookie.js +9 -0
  77. package/dist/auth/cookie.js.map +1 -0
  78. package/dist/auth/csrf.d.ts +3 -0
  79. package/dist/auth/csrf.d.ts.map +1 -0
  80. package/dist/auth/csrf.js +14 -0
  81. package/dist/auth/csrf.js.map +1 -0
  82. package/dist/auth/index.d.ts +12 -0
  83. package/dist/auth/index.d.ts.map +1 -0
  84. package/dist/auth/index.js +9 -0
  85. package/dist/auth/index.js.map +1 -0
  86. package/dist/auth/middleware.d.ts +9 -0
  87. package/dist/auth/middleware.d.ts.map +1 -0
  88. package/dist/auth/middleware.js +26 -0
  89. package/dist/auth/middleware.js.map +1 -0
  90. package/dist/auth/password.d.ts +5 -0
  91. package/dist/auth/password.d.ts.map +1 -0
  92. package/dist/auth/password.js +16 -0
  93. package/dist/auth/password.js.map +1 -0
  94. package/dist/auth/rate-limit.d.ts +12 -0
  95. package/dist/auth/rate-limit.d.ts.map +1 -0
  96. package/dist/auth/rate-limit.js +30 -0
  97. package/dist/auth/rate-limit.js.map +1 -0
  98. package/dist/auth/session.d.ts +9 -0
  99. package/dist/auth/session.d.ts.map +1 -0
  100. package/dist/auth/session.js +31 -0
  101. package/dist/auth/session.js.map +1 -0
  102. package/dist/config/cms-config.d.ts +26 -0
  103. package/dist/config/cms-config.d.ts.map +1 -0
  104. package/dist/config/cms-config.js +61 -0
  105. package/dist/config/cms-config.js.map +1 -0
  106. package/dist/config/index.d.ts +4 -0
  107. package/dist/config/index.d.ts.map +1 -0
  108. package/dist/config/index.js +2 -0
  109. package/dist/config/index.js.map +1 -0
  110. package/dist/config/plugin.d.ts +3 -0
  111. package/dist/config/plugin.d.ts.map +1 -0
  112. package/dist/config/plugin.js +2 -0
  113. package/dist/config/plugin.js.map +1 -0
  114. package/dist/db/column-map.d.ts +4 -0
  115. package/dist/db/column-map.d.ts.map +1 -0
  116. package/dist/db/column-map.js +34 -0
  117. package/dist/db/column-map.js.map +1 -0
  118. package/dist/db/index.d.ts +10 -0
  119. package/dist/db/index.d.ts.map +1 -0
  120. package/dist/db/index.js +7 -0
  121. package/dist/db/index.js.map +1 -0
  122. package/dist/db/migration-generator.d.ts +18 -0
  123. package/dist/db/migration-generator.d.ts.map +1 -0
  124. package/dist/db/migration-generator.js +126 -0
  125. package/dist/db/migration-generator.js.map +1 -0
  126. package/dist/db/query-builder.d.ts +35 -0
  127. package/dist/db/query-builder.d.ts.map +1 -0
  128. package/dist/db/query-builder.js +222 -0
  129. package/dist/db/query-builder.js.map +1 -0
  130. package/dist/db/query-types.d.ts +36 -0
  131. package/dist/db/query-types.d.ts.map +1 -0
  132. package/dist/db/query-types.js +12 -0
  133. package/dist/db/query-types.js.map +1 -0
  134. package/dist/db/safe-query.d.ts +6 -0
  135. package/dist/db/safe-query.d.ts.map +1 -0
  136. package/dist/db/safe-query.js +9 -0
  137. package/dist/db/safe-query.js.map +1 -0
  138. package/dist/db/sql-sanitize.d.ts +7 -0
  139. package/dist/db/sql-sanitize.d.ts.map +1 -0
  140. package/dist/db/sql-sanitize.js +27 -0
  141. package/dist/db/sql-sanitize.js.map +1 -0
  142. package/dist/hooks/hook-runner.d.ts +5 -0
  143. package/dist/hooks/hook-runner.d.ts.map +1 -0
  144. package/dist/hooks/hook-runner.js +18 -0
  145. package/dist/hooks/hook-runner.js.map +1 -0
  146. package/dist/hooks/hook-types.d.ts +25 -0
  147. package/dist/hooks/hook-types.d.ts.map +1 -0
  148. package/dist/hooks/hook-types.js +2 -0
  149. package/dist/hooks/hook-types.js.map +1 -0
  150. package/dist/hooks/index.d.ts +3 -0
  151. package/dist/hooks/index.d.ts.map +1 -0
  152. package/dist/hooks/index.js +2 -0
  153. package/dist/hooks/index.js.map +1 -0
  154. package/dist/index.d.ts +21 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +13 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/media/index.d.ts +5 -0
  159. package/dist/media/index.d.ts.map +1 -0
  160. package/dist/media/index.js +4 -0
  161. package/dist/media/index.js.map +1 -0
  162. package/dist/media/media-config.d.ts +6 -0
  163. package/dist/media/media-config.d.ts.map +1 -0
  164. package/dist/media/media-config.js +37 -0
  165. package/dist/media/media-config.js.map +1 -0
  166. package/dist/media/serve-handler.d.ts +3 -0
  167. package/dist/media/serve-handler.d.ts.map +1 -0
  168. package/dist/media/serve-handler.js +47 -0
  169. package/dist/media/serve-handler.js.map +1 -0
  170. package/dist/media/upload-handler.d.ts +9 -0
  171. package/dist/media/upload-handler.d.ts.map +1 -0
  172. package/dist/media/upload-handler.js +63 -0
  173. package/dist/media/upload-handler.js.map +1 -0
  174. package/dist/schema/collection.d.ts +19 -0
  175. package/dist/schema/collection.d.ts.map +1 -0
  176. package/dist/schema/collection.js +7 -0
  177. package/dist/schema/collection.js.map +1 -0
  178. package/dist/schema/field-types.d.ts +73 -0
  179. package/dist/schema/field-types.d.ts.map +1 -0
  180. package/dist/schema/field-types.js +13 -0
  181. package/dist/schema/field-types.js.map +1 -0
  182. package/dist/schema/fields.d.ts +14 -0
  183. package/dist/schema/fields.d.ts.map +1 -0
  184. package/dist/schema/fields.js +33 -0
  185. package/dist/schema/fields.js.map +1 -0
  186. package/dist/schema/global.d.ts +8 -0
  187. package/dist/schema/global.d.ts.map +1 -0
  188. package/dist/schema/global.js +4 -0
  189. package/dist/schema/global.js.map +1 -0
  190. package/dist/schema/index.d.ts +13 -0
  191. package/dist/schema/index.d.ts.map +1 -0
  192. package/dist/schema/index.js +7 -0
  193. package/dist/schema/index.js.map +1 -0
  194. package/dist/schema/infer.d.ts +20 -0
  195. package/dist/schema/infer.d.ts.map +1 -0
  196. package/dist/schema/infer.js +2 -0
  197. package/dist/schema/infer.js.map +1 -0
  198. package/dist/schema/registry.d.ts +19 -0
  199. package/dist/schema/registry.d.ts.map +1 -0
  200. package/dist/schema/registry.js +65 -0
  201. package/dist/schema/registry.js.map +1 -0
  202. package/dist/schema/types.d.ts +15 -0
  203. package/dist/schema/types.d.ts.map +1 -0
  204. package/dist/schema/types.js +10 -0
  205. package/dist/schema/types.js.map +1 -0
  206. package/dist/validation/index.d.ts +3 -0
  207. package/dist/validation/index.d.ts.map +1 -0
  208. package/dist/validation/index.js +3 -0
  209. package/dist/validation/index.js.map +1 -0
  210. package/dist/validation/validators.d.ts +3 -0
  211. package/dist/validation/validators.d.ts.map +1 -0
  212. package/dist/validation/validators.js +9 -0
  213. package/dist/validation/validators.js.map +1 -0
  214. package/dist/validation/zod-generator.d.ts +5 -0
  215. package/dist/validation/zod-generator.d.ts.map +1 -0
  216. package/dist/validation/zod-generator.js +83 -0
  217. package/dist/validation/zod-generator.js.map +1 -0
  218. package/package.json +39 -0
@@ -0,0 +1,47 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join, resolve, basename } from 'node:path';
3
+ import { ResultAsync } from 'neverthrow';
4
+ import { CmsErrorCode } from '../schema/types.js';
5
+ import { getMimeType } from './media-config.js';
6
+ const SAFE_FILENAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
7
+ export function createServeHandler(uploadDir) {
8
+ const resolvedUploadDir = resolve(uploadDir);
9
+ return async (req, res) => {
10
+ const rawFilename = req.url?.split('/').pop();
11
+ if (!rawFilename) {
12
+ res.writeHead(400, { 'Content-Type': 'application/json' });
13
+ res.end(JSON.stringify({ error: 'Missing filename' }));
14
+ return;
15
+ }
16
+ const filename = basename(rawFilename);
17
+ if (!SAFE_FILENAME_RE.test(filename)) {
18
+ res.writeHead(400, { 'Content-Type': 'application/json' });
19
+ res.end(JSON.stringify({ error: 'Invalid filename' }));
20
+ return;
21
+ }
22
+ const filePath = resolve(join(resolvedUploadDir, filename));
23
+ if (!filePath.startsWith(resolvedUploadDir)) {
24
+ res.writeHead(403, { 'Content-Type': 'application/json' });
25
+ res.end(JSON.stringify({ error: 'Forbidden' }));
26
+ return;
27
+ }
28
+ const result = await ResultAsync.fromPromise(readFile(filePath), (e) => ({
29
+ code: CmsErrorCode.NOT_FOUND,
30
+ message: e instanceof Error ? e.message : 'File read failed'
31
+ }));
32
+ if (result.isErr()) {
33
+ res.writeHead(404, { 'Content-Type': 'application/json' });
34
+ res.end(JSON.stringify({ error: 'File not found' }));
35
+ return;
36
+ }
37
+ const data = result.value;
38
+ const contentType = getMimeType(filename);
39
+ res.writeHead(200, {
40
+ 'Content-Type': contentType,
41
+ 'Content-Length': data.length,
42
+ 'Cache-Control': 'public, max-age=31536000, immutable'
43
+ });
44
+ res.end(data);
45
+ };
46
+ }
47
+ //# sourceMappingURL=serve-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-handler.js","sourceRoot":"","sources":["../../src/media/serve-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ export interface UploadResult {
3
+ readonly filename: string;
4
+ readonly storedPath: string;
5
+ readonly mimeType: string;
6
+ readonly filesize: number;
7
+ }
8
+ export declare function createUploadHandler(uploadDir: string): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
9
+ //# sourceMappingURL=upload-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-handler.d.ts","sourceRoot":"","sources":["../../src/media/upload-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAgBhE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,mBAAmB,CAAE,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAyDpH"}
@@ -0,0 +1,63 @@
1
+ import { ResultAsync } from 'neverthrow';
2
+ import { CmsErrorCode } from '../schema/types.js';
3
+ import { writeFile } from 'node:fs/promises';
4
+ import { join, resolve, basename } from 'node:path';
5
+ import { randomBytes } from 'node:crypto';
6
+ import { getMimeType } from './media-config.js';
7
+ import { readRawBody } from '../api/read-body.js';
8
+ const MAX_UPLOAD_BYTES = 10_485_760;
9
+ const SAFE_FILENAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
10
+ function generateStoredName(originalName) {
11
+ const ext = originalName.split('.').pop() ?? '';
12
+ const prefix = randomBytes(16).toString('hex');
13
+ return ext ? `${prefix}.${ext}` : prefix;
14
+ }
15
+ export function createUploadHandler(uploadDir) {
16
+ const resolvedDir = resolve(uploadDir);
17
+ return async (req, res) => {
18
+ const filenameHeader = req.headers['x-filename'];
19
+ const rawName = Array.isArray(filenameHeader) ? filenameHeader[0] ?? 'upload' : filenameHeader ?? 'upload';
20
+ const originalName = basename(rawName);
21
+ if (!SAFE_FILENAME_RE.test(originalName)) {
22
+ res.writeHead(400, { 'Content-Type': 'application/json' });
23
+ res.end(JSON.stringify({ error: 'Invalid filename' }));
24
+ return;
25
+ }
26
+ const bodyResult = await readRawBody(req, MAX_UPLOAD_BYTES);
27
+ if (bodyResult.isErr()) {
28
+ res.writeHead(400, { 'Content-Type': 'application/json' });
29
+ res.end(JSON.stringify({ error: bodyResult.error.message }));
30
+ return;
31
+ }
32
+ const data = bodyResult.value;
33
+ const storedName = generateStoredName(originalName);
34
+ const storedPath = resolve(join(resolvedDir, storedName));
35
+ if (!storedPath.startsWith(resolvedDir)) {
36
+ res.writeHead(403, { 'Content-Type': 'application/json' });
37
+ res.end(JSON.stringify({ error: 'Forbidden' }));
38
+ return;
39
+ }
40
+ const writeResult = await ResultAsync.fromPromise(writeFile(storedPath, data), (e) => ({
41
+ code: CmsErrorCode.INTERNAL,
42
+ message: e instanceof Error ? e.message : 'File write failed'
43
+ }));
44
+ if (writeResult.isErr()) {
45
+ res.writeHead(500, { 'Content-Type': 'application/json' });
46
+ res.end(JSON.stringify({ error: writeResult.error.message }));
47
+ return;
48
+ }
49
+ const result = {
50
+ filename: originalName,
51
+ storedPath: storedName,
52
+ mimeType: getMimeType(originalName),
53
+ filesize: data.length
54
+ };
55
+ const body = JSON.stringify(result);
56
+ res.writeHead(201, {
57
+ 'Content-Type': 'application/json; charset=utf-8',
58
+ 'Content-Length': Buffer.byteLength(body)
59
+ });
60
+ res.end(body);
61
+ };
62
+ }
63
+ //# sourceMappingURL=upload-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-handler.js","sourceRoot":"","sources":["../../src/media/upload-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { FieldConfig } from './field-types.js';
2
+ export interface CollectionLabels {
3
+ readonly singular: string;
4
+ readonly plural: string;
5
+ }
6
+ export interface CollectionConfig {
7
+ readonly slug: string;
8
+ readonly labels?: CollectionLabels | undefined;
9
+ readonly fields: readonly FieldConfig[];
10
+ readonly timestamps: boolean;
11
+ readonly auth?: boolean | undefined;
12
+ readonly upload?: boolean | undefined;
13
+ }
14
+ type CollectionInput = Omit<CollectionConfig, 'timestamps'> & {
15
+ readonly timestamps?: boolean | undefined;
16
+ };
17
+ export declare function collection(input: CollectionInput): CollectionConfig;
18
+ export {};
19
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/schema/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACtC;AAED,KAAK,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAAG;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1C,CAAA;AAED,wBAAgB,UAAU,CAAE,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAKpE"}
@@ -0,0 +1,7 @@
1
+ export function collection(input) {
2
+ return {
3
+ ...input,
4
+ timestamps: input.timestamps ?? true
5
+ };
6
+ }
7
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/schema/collection.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,UAAU,CAAE,KAAsB;IAChD,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;KACrC,CAAA;AACH,CAAC"}
@@ -0,0 +1,73 @@
1
+ export declare const FieldType: {
2
+ readonly TEXT: "text";
3
+ readonly TEXTAREA: "textarea";
4
+ readonly NUMBER: "number";
5
+ readonly BOOLEAN: "boolean";
6
+ readonly SELECT: "select";
7
+ readonly DATE: "date";
8
+ readonly SLUG: "slug";
9
+ readonly MEDIA: "media";
10
+ readonly RELATION: "relation";
11
+ readonly GROUP: "group";
12
+ };
13
+ export type FieldType = typeof FieldType[keyof typeof FieldType];
14
+ export interface FieldBaseConfig {
15
+ readonly name: string;
16
+ readonly required?: boolean | undefined;
17
+ readonly unique?: boolean | undefined;
18
+ readonly index?: boolean | undefined;
19
+ readonly defaultValue?: string | number | boolean | null | undefined;
20
+ readonly hidden?: boolean | undefined;
21
+ readonly localized?: boolean | undefined;
22
+ readonly label?: string | undefined;
23
+ }
24
+ export interface TextFieldConfig extends FieldBaseConfig {
25
+ readonly type: 'text';
26
+ readonly minLength?: number | undefined;
27
+ readonly maxLength?: number | undefined;
28
+ }
29
+ export interface TextareaFieldConfig extends FieldBaseConfig {
30
+ readonly type: 'textarea';
31
+ readonly minLength?: number | undefined;
32
+ readonly maxLength?: number | undefined;
33
+ }
34
+ export interface NumberFieldConfig extends FieldBaseConfig {
35
+ readonly type: 'number';
36
+ readonly min?: number | undefined;
37
+ readonly max?: number | undefined;
38
+ readonly hasDecimals?: boolean | undefined;
39
+ }
40
+ export interface BooleanFieldConfig extends FieldBaseConfig {
41
+ readonly type: 'boolean';
42
+ }
43
+ export interface SelectOption {
44
+ readonly label: string;
45
+ readonly value: string;
46
+ }
47
+ export interface SelectFieldConfig extends FieldBaseConfig {
48
+ readonly type: 'select';
49
+ readonly options: readonly SelectOption[];
50
+ readonly hasMany?: boolean | undefined;
51
+ }
52
+ export interface DateFieldConfig extends FieldBaseConfig {
53
+ readonly type: 'date';
54
+ }
55
+ export interface SlugFieldConfig extends FieldBaseConfig {
56
+ readonly type: 'slug';
57
+ readonly slugFrom?: string | undefined;
58
+ }
59
+ export interface MediaFieldConfig extends FieldBaseConfig {
60
+ readonly type: 'media';
61
+ readonly relationTo: string;
62
+ }
63
+ export interface RelationFieldConfig extends FieldBaseConfig {
64
+ readonly type: 'relation';
65
+ readonly relationTo: string;
66
+ readonly hasMany?: boolean | undefined;
67
+ }
68
+ export interface GroupFieldConfig extends FieldBaseConfig {
69
+ readonly type: 'group';
70
+ readonly fields: readonly FieldConfig[];
71
+ }
72
+ export type FieldConfig = TextFieldConfig | TextareaFieldConfig | NumberFieldConfig | BooleanFieldConfig | SelectFieldConfig | DateFieldConfig | SlugFieldConfig | MediaFieldConfig | RelationFieldConfig | GroupFieldConfig;
73
+ //# sourceMappingURL=field-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../src/schema/field-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const FieldType = {
2
+ TEXT: 'text',
3
+ TEXTAREA: 'textarea',
4
+ NUMBER: 'number',
5
+ BOOLEAN: 'boolean',
6
+ SELECT: 'select',
7
+ DATE: 'date',
8
+ SLUG: 'slug',
9
+ MEDIA: 'media',
10
+ RELATION: 'relation',
11
+ GROUP: 'group'
12
+ };
13
+ //# sourceMappingURL=field-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-types.js","sourceRoot":"","sources":["../../src/schema/field-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;CACN,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { TextFieldConfig, TextareaFieldConfig, NumberFieldConfig, BooleanFieldConfig, SelectFieldConfig, DateFieldConfig, SlugFieldConfig, MediaFieldConfig, RelationFieldConfig, GroupFieldConfig } from './field-types.js';
2
+ export declare const field: {
3
+ text(opts: Omit<TextFieldConfig, "type">): TextFieldConfig;
4
+ textarea(opts: Omit<TextareaFieldConfig, "type">): TextareaFieldConfig;
5
+ number(opts: Omit<NumberFieldConfig, "type">): NumberFieldConfig;
6
+ boolean(opts: Omit<BooleanFieldConfig, "type">): BooleanFieldConfig;
7
+ select(opts: Omit<SelectFieldConfig, "type">): SelectFieldConfig;
8
+ date(opts: Omit<DateFieldConfig, "type">): DateFieldConfig;
9
+ slug(opts: Omit<SlugFieldConfig, "type">): SlugFieldConfig;
10
+ media(opts: Omit<MediaFieldConfig, "type">): MediaFieldConfig;
11
+ relation(opts: Omit<RelationFieldConfig, "type">): RelationFieldConfig;
12
+ group(opts: Omit<GroupFieldConfig, "type">): GroupFieldConfig;
13
+ };
14
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/schema/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,eAAO,MAAM,KAAK;eACJ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,eAAe;mBAI3C,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,mBAAmB;iBAIzD,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,iBAAiB;kBAIlD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,kBAAkB;iBAItD,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,iBAAiB;eAIrD,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,eAAe;eAI/C,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,eAAe;gBAI9C,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,gBAAgB;mBAI9C,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,mBAAmB;gBAI1D,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,gBAAgB;CAG/D,CAAA"}
@@ -0,0 +1,33 @@
1
+ export const field = {
2
+ text(opts) {
3
+ return { type: 'text', ...opts };
4
+ },
5
+ textarea(opts) {
6
+ return { type: 'textarea', ...opts };
7
+ },
8
+ number(opts) {
9
+ return { type: 'number', ...opts };
10
+ },
11
+ boolean(opts) {
12
+ return { type: 'boolean', ...opts };
13
+ },
14
+ select(opts) {
15
+ return { type: 'select', ...opts };
16
+ },
17
+ date(opts) {
18
+ return { type: 'date', ...opts };
19
+ },
20
+ slug(opts) {
21
+ return { type: 'slug', ...opts };
22
+ },
23
+ media(opts) {
24
+ return { type: 'media', ...opts };
25
+ },
26
+ relation(opts) {
27
+ return { type: 'relation', ...opts };
28
+ },
29
+ group(opts) {
30
+ return { type: 'group', ...opts };
31
+ }
32
+ };
33
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/schema/fields.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,CAAE,IAAmC;QACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAA;IAClC,CAAC;IAED,QAAQ,CAAE,IAAuC;QAC/C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAA;IACtC,CAAC;IAED,MAAM,CAAE,IAAqC;QAC3C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAA;IACpC,CAAC;IAED,OAAO,CAAE,IAAsC;QAC7C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,MAAM,CAAE,IAAqC;QAC3C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAA;IACpC,CAAC;IAED,IAAI,CAAE,IAAmC;QACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAA;IAClC,CAAC;IAED,IAAI,CAAE,IAAmC;QACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAA;IAClC,CAAC;IAED,KAAK,CAAE,IAAoC;QACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAA;IACnC,CAAC;IAED,QAAQ,CAAE,IAAuC;QAC/C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAA;IACtC,CAAC;IAED,KAAK,CAAE,IAAoC;QACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAA;IACnC,CAAC;CACF,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { FieldConfig } from './field-types.js';
2
+ export interface GlobalConfig {
3
+ readonly slug: string;
4
+ readonly label?: string | undefined;
5
+ readonly fields: readonly FieldConfig[];
6
+ }
7
+ export declare function global(input: GlobalConfig): GlobalConfig;
8
+ //# sourceMappingURL=global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../src/schema/global.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;CACxC;AAED,wBAAgB,MAAM,CAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAEzD"}
@@ -0,0 +1,4 @@
1
+ export function global(input) {
2
+ return { ...input };
3
+ }
4
+ //# sourceMappingURL=global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../../src/schema/global.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,MAAM,CAAE,KAAmB;IACzC,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;AACrB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { CmsErrorCode } from './types.js';
2
+ export type { CmsError } from './types.js';
3
+ export { FieldType } from './field-types.js';
4
+ export type { FieldBaseConfig, FieldConfig, TextFieldConfig, TextareaFieldConfig, NumberFieldConfig, BooleanFieldConfig, SelectFieldConfig, SelectOption, DateFieldConfig, SlugFieldConfig, MediaFieldConfig, RelationFieldConfig, GroupFieldConfig } from './field-types.js';
5
+ export { field } from './fields.js';
6
+ export { collection } from './collection.js';
7
+ export type { CollectionConfig, CollectionLabels } from './collection.js';
8
+ export { global } from './global.js';
9
+ export type { GlobalConfig } from './global.js';
10
+ export { createCollectionRegistry, createGlobalRegistry } from './registry.js';
11
+ export type { CollectionRegistry, GlobalRegistry } from './registry.js';
12
+ export type { InferFieldType, InferFieldsType } from './infer.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,YAAY,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAC9E,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,7 @@
1
+ export { CmsErrorCode } from './types.js';
2
+ export { FieldType } from './field-types.js';
3
+ export { field } from './fields.js';
4
+ export { collection } from './collection.js';
5
+ export { global } from './global.js';
6
+ export { createCollectionRegistry, createGlobalRegistry } from './registry.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAiB5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { FieldConfig, GroupFieldConfig } from './field-types.js';
2
+ interface FieldValueMap {
3
+ text: string;
4
+ textarea: string;
5
+ number: number;
6
+ boolean: boolean;
7
+ select: string;
8
+ date: string;
9
+ slug: string;
10
+ media: string;
11
+ relation: string;
12
+ }
13
+ export type InferFieldType<F extends FieldConfig> = F extends GroupFieldConfig ? InferFieldsType<F['fields']> : F extends {
14
+ readonly type: infer T extends keyof FieldValueMap;
15
+ } ? FieldValueMap[T] : never;
16
+ export type InferFieldsType<Fields extends readonly FieldConfig[]> = {
17
+ [K in Fields[number] as K['name']]: InferFieldType<K>;
18
+ };
19
+ export {};
20
+ //# sourceMappingURL=infer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../src/schema/infer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,IAC5C,CAAC,SAAS,gBAAgB,GACtB,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAC5B,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,aAAa,CAAA;CAAE,GAC9D,aAAa,CAAC,CAAC,CAAC,GAChB,KAAK,CAAA;AAEf,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,SAAS,WAAW,EAAE,IAAI;KAClE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;CACtD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=infer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/schema/infer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { Result } from 'neverthrow';
2
+ import type { CollectionConfig } from './collection.js';
3
+ import type { GlobalConfig } from './global.js';
4
+ import type { CmsError } from './types.js';
5
+ export interface CollectionRegistry {
6
+ register(config: CollectionConfig): Result<CollectionConfig, CmsError>;
7
+ get(slug: string): Result<CollectionConfig, CmsError>;
8
+ getAll(): readonly CollectionConfig[];
9
+ has(slug: string): boolean;
10
+ }
11
+ export declare function createCollectionRegistry(): CollectionRegistry;
12
+ export interface GlobalRegistry {
13
+ register(config: GlobalConfig): Result<GlobalConfig, CmsError>;
14
+ get(slug: string): Result<GlobalConfig, CmsError>;
15
+ getAll(): readonly GlobalConfig[];
16
+ has(slug: string): boolean;
17
+ }
18
+ export declare function createGlobalRegistry(): GlobalRegistry;
19
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/schema/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IACvE,GAAG,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IACtD,MAAM,IAAK,SAAS,gBAAgB,EAAE,CAAA;IACtC,GAAG,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAC5B;AAED,wBAAgB,wBAAwB,IAAK,kBAAkB,CAkC9D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAC/D,GAAG,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAClD,MAAM,IAAK,SAAS,YAAY,EAAE,CAAA;IAClC,GAAG,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAC5B;AAED,wBAAgB,oBAAoB,IAAK,cAAc,CAkCtD"}
@@ -0,0 +1,65 @@
1
+ import { ok, err } from 'neverthrow';
2
+ import { CmsErrorCode } from './types.js';
3
+ export function createCollectionRegistry() {
4
+ const store = new Map();
5
+ return {
6
+ register(config) {
7
+ if (store.has(config.slug)) {
8
+ return err({
9
+ code: CmsErrorCode.DUPLICATE_SLUG,
10
+ message: `Collection "${config.slug}" is already registered`
11
+ });
12
+ }
13
+ store.set(config.slug, config);
14
+ return ok(config);
15
+ },
16
+ get(slug) {
17
+ const found = store.get(slug);
18
+ if (found === undefined) {
19
+ return err({
20
+ code: CmsErrorCode.NOT_FOUND,
21
+ message: `Collection "${slug}" not found`
22
+ });
23
+ }
24
+ return ok(found);
25
+ },
26
+ getAll() {
27
+ return [...store.values()];
28
+ },
29
+ has(slug) {
30
+ return store.has(slug);
31
+ }
32
+ };
33
+ }
34
+ export function createGlobalRegistry() {
35
+ const store = new Map();
36
+ return {
37
+ register(config) {
38
+ if (store.has(config.slug)) {
39
+ return err({
40
+ code: CmsErrorCode.DUPLICATE_SLUG,
41
+ message: `Global "${config.slug}" is already registered`
42
+ });
43
+ }
44
+ store.set(config.slug, config);
45
+ return ok(config);
46
+ },
47
+ get(slug) {
48
+ const found = store.get(slug);
49
+ if (found === undefined) {
50
+ return err({
51
+ code: CmsErrorCode.NOT_FOUND,
52
+ message: `Global "${slug}" not found`
53
+ });
54
+ }
55
+ return ok(found);
56
+ },
57
+ getAll() {
58
+ return [...store.values()];
59
+ },
60
+ has(slug) {
61
+ return store.has(slug);
62
+ }
63
+ };
64
+ }
65
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/schema/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAIpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAUzC,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;IAEjD,OAAO;QACL,QAAQ,CAAE,MAAM;YACd,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,CAAC;oBACT,IAAI,EAAE,YAAY,CAAC,cAAc;oBACjC,OAAO,EAAE,eAAe,MAAM,CAAC,IAAI,yBAAyB;iBAC7D,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC9B,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;QACnB,CAAC;QAED,GAAG,CAAE,IAAI;YACP,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,GAAG,CAAC;oBACT,IAAI,EAAE,YAAY,CAAC,SAAS;oBAC5B,OAAO,EAAE,eAAe,IAAI,aAAa;iBAC1C,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;QAED,MAAM;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5B,CAAC;QAED,GAAG,CAAE,IAAI;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;KACF,CAAA;AACH,CAAC;AASD,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAA;IAE7C,OAAO;QACL,QAAQ,CAAE,MAAM;YACd,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,CAAC;oBACT,IAAI,EAAE,YAAY,CAAC,cAAc;oBACjC,OAAO,EAAE,WAAW,MAAM,CAAC,IAAI,yBAAyB;iBACzD,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC9B,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;QACnB,CAAC;QAED,GAAG,CAAE,IAAI;YACP,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,GAAG,CAAC;oBACT,IAAI,EAAE,YAAY,CAAC,SAAS;oBAC5B,OAAO,EAAE,WAAW,IAAI,aAAa;iBACtC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;QAED,MAAM;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5B,CAAC;QAED,GAAG,CAAE,IAAI;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const CmsErrorCode: Readonly<{
2
+ readonly NOT_FOUND: "NOT_FOUND";
3
+ readonly INVALID_INPUT: "INVALID_INPUT";
4
+ readonly VALIDATION_FAILED: "VALIDATION_FAILED";
5
+ readonly DUPLICATE_SLUG: "DUPLICATE_SLUG";
6
+ readonly UNAUTHORIZED: "UNAUTHORIZED";
7
+ readonly FORBIDDEN: "FORBIDDEN";
8
+ readonly INTERNAL: "INTERNAL";
9
+ }>;
10
+ export type CmsErrorCode = typeof CmsErrorCode[keyof typeof CmsErrorCode];
11
+ export interface CmsError {
12
+ readonly code: CmsErrorCode;
13
+ readonly message: string;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;EAQd,CAAA;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,MAAM,OAAO,YAAY,CAAC,CAAA;AAEzE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB"}
@@ -0,0 +1,10 @@
1
+ export const CmsErrorCode = Object.freeze({
2
+ NOT_FOUND: 'NOT_FOUND',
3
+ INVALID_INPUT: 'INVALID_INPUT',
4
+ VALIDATION_FAILED: 'VALIDATION_FAILED',
5
+ DUPLICATE_SLUG: 'DUPLICATE_SLUG',
6
+ UNAUTHORIZED: 'UNAUTHORIZED',
7
+ FORBIDDEN: 'FORBIDDEN',
8
+ INTERNAL: 'INTERNAL'
9
+ });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACZ,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { generateZodSchema, generatePartialSchema } from './zod-generator.js';
2
+ export { isValidSlug, isValidEmail } from './validators.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { generateZodSchema, generatePartialSchema } from './zod-generator.js';
2
+ export { isValidSlug, isValidEmail } from './validators.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare function isValidSlug(value: string): boolean;
2
+ export declare function isValidEmail(value: string): boolean;
3
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/validation/validators.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,YAAY,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,9 @@
1
+ const SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
2
+ const EMAIL_RE = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
3
+ export function isValidSlug(value) {
4
+ return SLUG_RE.test(value);
5
+ }
6
+ export function isValidEmail(value) {
7
+ return EMAIL_RE.test(value);
8
+ }
9
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/validation/validators.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,4BAA4B,CAAA;AAC5C,MAAM,QAAQ,GAAG,mCAAmC,CAAA;AAEpD,MAAM,UAAU,WAAW,CAAE,KAAa;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAE,KAAa;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ZodObject } from 'zod';
2
+ import type { FieldConfig } from '../schema/field-types.js';
3
+ export declare function generateZodSchema(fields: readonly FieldConfig[]): ZodObject;
4
+ export declare function generatePartialSchema(fields: readonly FieldConfig[]): ZodObject;
5
+ //# sourceMappingURL=zod-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-generator.d.ts","sourceRoot":"","sources":["../../src/validation/zod-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,KAAK,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAwF3D,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAE5E;AAED,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAEhF"}