@adminiumjs/meta 0.1.0-rc.1

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 (194) hide show
  1. package/LICENSE +661 -0
  2. package/dist/bootstrap.d.ts +103 -0
  3. package/dist/bootstrap.d.ts.map +1 -0
  4. package/dist/bootstrap.js +225 -0
  5. package/dist/bootstrap.js.map +1 -0
  6. package/dist/columns.d.ts +44 -0
  7. package/dist/columns.d.ts.map +1 -0
  8. package/dist/columns.js +57 -0
  9. package/dist/columns.js.map +1 -0
  10. package/dist/connect.d.ts +38 -0
  11. package/dist/connect.d.ts.map +1 -0
  12. package/dist/connect.js +57 -0
  13. package/dist/connect.js.map +1 -0
  14. package/dist/ids.d.ts +79 -0
  15. package/dist/ids.d.ts.map +1 -0
  16. package/dist/ids.js +165 -0
  17. package/dist/ids.js.map +1 -0
  18. package/dist/index.d.ts +21 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +21 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/migrations/0001_core_auth.d.ts +9 -0
  23. package/dist/migrations/0001_core_auth.d.ts.map +1 -0
  24. package/dist/migrations/0001_core_auth.js +102 -0
  25. package/dist/migrations/0001_core_auth.js.map +1 -0
  26. package/dist/migrations/0002_rbac.d.ts +8 -0
  27. package/dist/migrations/0002_rbac.d.ts.map +1 -0
  28. package/dist/migrations/0002_rbac.js +75 -0
  29. package/dist/migrations/0002_rbac.js.map +1 -0
  30. package/dist/migrations/0003_connections_schema.d.ts +9 -0
  31. package/dist/migrations/0003_connections_schema.d.ts.map +1 -0
  32. package/dist/migrations/0003_connections_schema.js +100 -0
  33. package/dist/migrations/0003_connections_schema.js.map +1 -0
  34. package/dist/migrations/0004_pages_views.d.ts +8 -0
  35. package/dist/migrations/0004_pages_views.d.ts.map +1 -0
  36. package/dist/migrations/0004_pages_views.js +59 -0
  37. package/dist/migrations/0004_pages_views.js.map +1 -0
  38. package/dist/migrations/0005_ops.d.ts +9 -0
  39. package/dist/migrations/0005_ops.d.ts.map +1 -0
  40. package/dist/migrations/0005_ops.js +104 -0
  41. package/dist/migrations/0005_ops.js.map +1 -0
  42. package/dist/migrations/0006_platform.d.ts +11 -0
  43. package/dist/migrations/0006_platform.d.ts.map +1 -0
  44. package/dist/migrations/0006_platform.js +259 -0
  45. package/dist/migrations/0006_platform.js.map +1 -0
  46. package/dist/migrations/0007_llm_runs.d.ts +33 -0
  47. package/dist/migrations/0007_llm_runs.d.ts.map +1 -0
  48. package/dist/migrations/0007_llm_runs.js +62 -0
  49. package/dist/migrations/0007_llm_runs.js.map +1 -0
  50. package/dist/migrations/0008_llm_overrides.d.ts +18 -0
  51. package/dist/migrations/0008_llm_overrides.d.ts.map +1 -0
  52. package/dist/migrations/0008_llm_overrides.js +24 -0
  53. package/dist/migrations/0008_llm_overrides.js.map +1 -0
  54. package/dist/migrations/0009_views_kind.d.ts +20 -0
  55. package/dist/migrations/0009_views_kind.d.ts.map +1 -0
  56. package/dist/migrations/0009_views_kind.js +24 -0
  57. package/dist/migrations/0009_views_kind.js.map +1 -0
  58. package/dist/migrations/0010_llm_prompt_version_width.d.ts +19 -0
  59. package/dist/migrations/0010_llm_prompt_version_width.d.ts.map +1 -0
  60. package/dist/migrations/0010_llm_prompt_version_width.js +28 -0
  61. package/dist/migrations/0010_llm_prompt_version_width.js.map +1 -0
  62. package/dist/migrations/index.d.ts +29 -0
  63. package/dist/migrations/index.d.ts.map +1 -0
  64. package/dist/migrations/index.js +43 -0
  65. package/dist/migrations/index.js.map +1 -0
  66. package/dist/migrator.d.ts +83 -0
  67. package/dist/migrator.d.ts.map +1 -0
  68. package/dist/migrator.js +173 -0
  69. package/dist/migrator.js.map +1 -0
  70. package/dist/prefix.d.ts +19 -0
  71. package/dist/prefix.d.ts.map +1 -0
  72. package/dist/prefix.js +33 -0
  73. package/dist/prefix.js.map +1 -0
  74. package/dist/repos/api-keys.d.ts +31 -0
  75. package/dist/repos/api-keys.d.ts.map +1 -0
  76. package/dist/repos/api-keys.js +62 -0
  77. package/dist/repos/api-keys.js.map +1 -0
  78. package/dist/repos/audit.d.ts +51 -0
  79. package/dist/repos/audit.d.ts.map +1 -0
  80. package/dist/repos/audit.js +78 -0
  81. package/dist/repos/audit.js.map +1 -0
  82. package/dist/repos/connections.d.ts +90 -0
  83. package/dist/repos/connections.d.ts.map +1 -0
  84. package/dist/repos/connections.js +191 -0
  85. package/dist/repos/connections.js.map +1 -0
  86. package/dist/repos/email-templates.d.ts +47 -0
  87. package/dist/repos/email-templates.d.ts.map +1 -0
  88. package/dist/repos/email-templates.js +93 -0
  89. package/dist/repos/email-templates.js.map +1 -0
  90. package/dist/repos/exports.d.ts +67 -0
  91. package/dist/repos/exports.d.ts.map +1 -0
  92. package/dist/repos/exports.js +132 -0
  93. package/dist/repos/exports.js.map +1 -0
  94. package/dist/repos/files.d.ts +52 -0
  95. package/dist/repos/files.d.ts.map +1 -0
  96. package/dist/repos/files.js +86 -0
  97. package/dist/repos/files.js.map +1 -0
  98. package/dist/repos/imports.d.ts +71 -0
  99. package/dist/repos/imports.d.ts.map +1 -0
  100. package/dist/repos/imports.js +111 -0
  101. package/dist/repos/imports.js.map +1 -0
  102. package/dist/repos/index.d.ts +26 -0
  103. package/dist/repos/index.d.ts.map +1 -0
  104. package/dist/repos/index.js +26 -0
  105. package/dist/repos/index.js.map +1 -0
  106. package/dist/repos/jobs.d.ts +71 -0
  107. package/dist/repos/jobs.d.ts.map +1 -0
  108. package/dist/repos/jobs.js +187 -0
  109. package/dist/repos/jobs.js.map +1 -0
  110. package/dist/repos/llm-overrides.d.ts +89 -0
  111. package/dist/repos/llm-overrides.d.ts.map +1 -0
  112. package/dist/repos/llm-overrides.js +205 -0
  113. package/dist/repos/llm-overrides.js.map +1 -0
  114. package/dist/repos/llm-runs.d.ts +114 -0
  115. package/dist/repos/llm-runs.d.ts.map +1 -0
  116. package/dist/repos/llm-runs.js +214 -0
  117. package/dist/repos/llm-runs.js.map +1 -0
  118. package/dist/repos/notification-prefs.d.ts +34 -0
  119. package/dist/repos/notification-prefs.d.ts.map +1 -0
  120. package/dist/repos/notification-prefs.js +80 -0
  121. package/dist/repos/notification-prefs.js.map +1 -0
  122. package/dist/repos/notifications.d.ts +60 -0
  123. package/dist/repos/notifications.d.ts.map +1 -0
  124. package/dist/repos/notifications.js +107 -0
  125. package/dist/repos/notifications.js.map +1 -0
  126. package/dist/repos/overrides.d.ts +59 -0
  127. package/dist/repos/overrides.d.ts.map +1 -0
  128. package/dist/repos/overrides.js +143 -0
  129. package/dist/repos/overrides.js.map +1 -0
  130. package/dist/repos/pages.d.ts +192 -0
  131. package/dist/repos/pages.d.ts.map +1 -0
  132. package/dist/repos/pages.js +374 -0
  133. package/dist/repos/pages.js.map +1 -0
  134. package/dist/repos/password-resets.d.ts +32 -0
  135. package/dist/repos/password-resets.d.ts.map +1 -0
  136. package/dist/repos/password-resets.js +56 -0
  137. package/dist/repos/password-resets.js.map +1 -0
  138. package/dist/repos/permissions.d.ts +28 -0
  139. package/dist/repos/permissions.d.ts.map +1 -0
  140. package/dist/repos/permissions.js +100 -0
  141. package/dist/repos/permissions.js.map +1 -0
  142. package/dist/repos/roles.d.ts +33 -0
  143. package/dist/repos/roles.d.ts.map +1 -0
  144. package/dist/repos/roles.js +89 -0
  145. package/dist/repos/roles.js.map +1 -0
  146. package/dist/repos/scheduled-reports.d.ts +73 -0
  147. package/dist/repos/scheduled-reports.d.ts.map +1 -0
  148. package/dist/repos/scheduled-reports.js +132 -0
  149. package/dist/repos/scheduled-reports.js.map +1 -0
  150. package/dist/repos/sessions.d.ts +33 -0
  151. package/dist/repos/sessions.d.ts.map +1 -0
  152. package/dist/repos/sessions.js +79 -0
  153. package/dist/repos/sessions.js.map +1 -0
  154. package/dist/repos/settings.d.ts +25 -0
  155. package/dist/repos/settings.d.ts.map +1 -0
  156. package/dist/repos/settings.js +73 -0
  157. package/dist/repos/settings.js.map +1 -0
  158. package/dist/repos/snapshots.d.ts +79 -0
  159. package/dist/repos/snapshots.d.ts.map +1 -0
  160. package/dist/repos/snapshots.js +191 -0
  161. package/dist/repos/snapshots.js.map +1 -0
  162. package/dist/repos/user-prefs.d.ts +56 -0
  163. package/dist/repos/user-prefs.d.ts.map +1 -0
  164. package/dist/repos/user-prefs.js +147 -0
  165. package/dist/repos/user-prefs.js.map +1 -0
  166. package/dist/repos/users.d.ts +38 -0
  167. package/dist/repos/users.d.ts.map +1 -0
  168. package/dist/repos/users.js +103 -0
  169. package/dist/repos/users.js.map +1 -0
  170. package/dist/repos/util.d.ts +45 -0
  171. package/dist/repos/util.d.ts.map +1 -0
  172. package/dist/repos/util.js +81 -0
  173. package/dist/repos/util.js.map +1 -0
  174. package/dist/repos/views.d.ts +75 -0
  175. package/dist/repos/views.d.ts.map +1 -0
  176. package/dist/repos/views.js +180 -0
  177. package/dist/repos/views.js.map +1 -0
  178. package/dist/schema/index.d.ts +4 -0
  179. package/dist/schema/index.d.ts.map +1 -0
  180. package/dist/schema/index.js +4 -0
  181. package/dist/schema/index.js.map +1 -0
  182. package/dist/schema/json-payloads.d.ts +479 -0
  183. package/dist/schema/json-payloads.d.ts.map +1 -0
  184. package/dist/schema/json-payloads.js +340 -0
  185. package/dist/schema/json-payloads.js.map +1 -0
  186. package/dist/schema/settings-registry.d.ts +187 -0
  187. package/dist/schema/settings-registry.d.ts.map +1 -0
  188. package/dist/schema/settings-registry.js +183 -0
  189. package/dist/schema/settings-registry.js.map +1 -0
  190. package/dist/schema/tables.d.ts +568 -0
  191. package/dist/schema/tables.d.ts.map +1 -0
  192. package/dist/schema/tables.js +51 -0
  193. package/dist/schema/tables.js.map +1 -0
  194. package/package.json +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/repos/users.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared repo helpers: dialect-portable JSON/bool round-tripping
3
+ * (07-meta-store.md §2.1 — repos serialize/parse JSON and coerce booleans).
4
+ */
5
+ import type { MetaDb } from '../connect.js';
6
+ export declare class MetaValidationError extends Error {
7
+ readonly issues?: unknown | undefined;
8
+ name: string;
9
+ constructor(message: string, issues?: unknown | undefined);
10
+ }
11
+ export declare const HOUR_MS = 3600000;
12
+ export declare const DAY_MS = 86400000;
13
+ /** JSON writes are always serialized strings — portable across jsonb/json/text. */
14
+ export declare function packJson(value: unknown): string;
15
+ /**
16
+ * Reads may come back as serialized text (SQLite `text` columns) or already
17
+ * decoded by the driver (`pg` parses `jsonb`, `mysql2` parses `json` unless
18
+ * `jsonStrings: true`). The decoded shape includes bare scalars: a stored
19
+ * `"violet"` arrives as the JS string `violet`, which is not parseable JSON —
20
+ * so strings that fail to parse are the driver-decoded value and returned
21
+ * as-is. (Residual ambiguity: a *stored JSON string* whose content is itself
22
+ * valid JSON — e.g. the string `"123"` — is indistinguishable from serialized
23
+ * text once decoded. No meta payload stores such values; SQLite is unaffected
24
+ * because its text column always carries the serialized form.)
25
+ */
26
+ export declare function readJson<T = unknown>(value: unknown): T;
27
+ export declare function readJsonOrNull<T = unknown>(value: unknown): T | null;
28
+ /**
29
+ * Dialect-stable structural equality for JSON payloads. Comparing serialized
30
+ * strings is NOT portable: pg `jsonb` and mysql `json` normalize documents
31
+ * (object key order is not preserved), so a round-tripped value rarely
32
+ * re-serializes to the text that was written. Canonicalize (deep-sorted keys)
33
+ * before comparing.
34
+ */
35
+ export declare function jsonEquals(a: unknown, b: unknown): boolean;
36
+ /** PG boolean / MySQL tinyint / SQLite integer → JS boolean. */
37
+ export declare function readBool(value: unknown): boolean;
38
+ /**
39
+ * JS boolean → dialect-correct bind value. better-sqlite3 refuses to bind
40
+ * booleans; PG refuses numbers for boolean columns; mysql2 accepts both.
41
+ */
42
+ export declare function writeBool(meta: MetaDb, value: boolean): boolean | 0 | 1;
43
+ /** Affected-row count from Kysely's bigint result. */
44
+ export declare function affected(count: bigint | undefined): number;
45
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/repos/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,mBAAoB,SAAQ,KAAK;IAEf,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO;IAD7C,IAAI,SAAyB;gBAC1B,OAAO,EAAE,MAAM,EAAW,MAAM,CAAC,EAAE,OAAO,YAAA;CAGvD;AAED,eAAO,MAAM,OAAO,UAAY,CAAC;AACjC,eAAO,MAAM,MAAM,WAAa,CAAC;AAEjC,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAOvD;AAED,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI,CAGpE;AAeD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAE1D;AAED,gEAAgE;AAChE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAEvE;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Shared repo helpers: dialect-portable JSON/bool round-tripping
3
+ * (07-meta-store.md §2.1 — repos serialize/parse JSON and coerce booleans).
4
+ */
5
+ export class MetaValidationError extends Error {
6
+ issues;
7
+ name = 'MetaValidationError';
8
+ constructor(message, issues) {
9
+ super(message);
10
+ this.issues = issues;
11
+ }
12
+ }
13
+ export const HOUR_MS = 3_600_000;
14
+ export const DAY_MS = 86_400_000;
15
+ /** JSON writes are always serialized strings — portable across jsonb/json/text. */
16
+ export function packJson(value) {
17
+ return JSON.stringify(value);
18
+ }
19
+ /**
20
+ * Reads may come back as serialized text (SQLite `text` columns) or already
21
+ * decoded by the driver (`pg` parses `jsonb`, `mysql2` parses `json` unless
22
+ * `jsonStrings: true`). The decoded shape includes bare scalars: a stored
23
+ * `"violet"` arrives as the JS string `violet`, which is not parseable JSON —
24
+ * so strings that fail to parse are the driver-decoded value and returned
25
+ * as-is. (Residual ambiguity: a *stored JSON string* whose content is itself
26
+ * valid JSON — e.g. the string `"123"` — is indistinguishable from serialized
27
+ * text once decoded. No meta payload stores such values; SQLite is unaffected
28
+ * because its text column always carries the serialized form.)
29
+ */
30
+ export function readJson(value) {
31
+ if (typeof value !== 'string')
32
+ return value;
33
+ try {
34
+ return JSON.parse(value);
35
+ }
36
+ catch {
37
+ return value;
38
+ }
39
+ }
40
+ export function readJsonOrNull(value) {
41
+ if (value === null || value === undefined)
42
+ return null;
43
+ return readJson(value);
44
+ }
45
+ function sortKeysDeep(value) {
46
+ if (Array.isArray(value))
47
+ return value.map(sortKeysDeep);
48
+ if (value !== null && typeof value === 'object') {
49
+ const record = value;
50
+ return Object.fromEntries(Object.keys(record)
51
+ .sort()
52
+ .map((k) => [k, sortKeysDeep(record[k])]));
53
+ }
54
+ return value;
55
+ }
56
+ /**
57
+ * Dialect-stable structural equality for JSON payloads. Comparing serialized
58
+ * strings is NOT portable: pg `jsonb` and mysql `json` normalize documents
59
+ * (object key order is not preserved), so a round-tripped value rarely
60
+ * re-serializes to the text that was written. Canonicalize (deep-sorted keys)
61
+ * before comparing.
62
+ */
63
+ export function jsonEquals(a, b) {
64
+ return JSON.stringify(sortKeysDeep(a)) === JSON.stringify(sortKeysDeep(b));
65
+ }
66
+ /** PG boolean / MySQL tinyint / SQLite integer → JS boolean. */
67
+ export function readBool(value) {
68
+ return value === true || value === 1;
69
+ }
70
+ /**
71
+ * JS boolean → dialect-correct bind value. better-sqlite3 refuses to bind
72
+ * booleans; PG refuses numbers for boolean columns; mysql2 accepts both.
73
+ */
74
+ export function writeBool(meta, value) {
75
+ return meta.dialect === 'postgres' ? value : value ? 1 : 0;
76
+ }
77
+ /** Affected-row count from Kysely's bigint result. */
78
+ export function affected(count) {
79
+ return Number(count ?? 0n);
80
+ }
81
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/repos/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAEN;IAD7B,IAAI,GAAG,qBAAqB,CAAC;IACtC,YAAY,OAAe,EAAW,MAAgB;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,WAAM,GAAN,MAAM,CAAU;IAEtD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AAEjC,mFAAmF;AACnF,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAc,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAU,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAU,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAc,KAAc;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,QAAQ,CAAI,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAChB,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,CAAU,EAAE,CAAU;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAc;IACpD,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * viewsRepo — adminium_views (07-meta-store.md §3.18, 04-widget-registry.md §6.3).
3
+ *
4
+ * Saved filters/layouts over a page. `user_id = NULL` is a shared workspace
5
+ * view; a non-null `user_id` owns the view privately. `config` is an opaque
6
+ * JSON envelope (page-crud grid state for `kind: 'filters'`, a `pageLayout`
7
+ * for `kind: 'layout'`) — like `adminium_pages`, this package never interprets
8
+ * it; the server route is the single write-time validator. Uniqueness is
9
+ * `(page_id, user_id, name)`; at most one default per `(page_id, user_id)`
10
+ * filter scope is app-enforced here in a transaction.
11
+ *
12
+ * The `kind` discriminator keeps the two surfaces from cross-contaminating: the
13
+ * saved-views CRUD (`kind: 'filters'`) never lists a dashboard layout override
14
+ * (`kind: 'layout'`), and the layout resolver never sees a filter view. Layout
15
+ * overrides are one-per-(page, user) upserts under a reserved sentinel name.
16
+ */
17
+ import type { MetaDb } from '../connect.js';
18
+ /** Row discriminator (04-widget-registry.md §6.3). */
19
+ export declare const VIEW_KINDS: readonly ["filters", "layout"];
20
+ export type ViewKind = (typeof VIEW_KINDS)[number];
21
+ /**
22
+ * Reserved name for the single per-user dashboard layout override row. Layout
23
+ * rows are addressed by `(page_id, user_id, kind: 'layout')`, never by name,
24
+ * but `name` is NOT NULL so this fills the column deterministically.
25
+ */
26
+ export declare const LAYOUT_OVERRIDE_NAME = "__layout__";
27
+ export interface SavedView {
28
+ id: string;
29
+ pageId: string;
30
+ /** NULL = shared workspace view; otherwise the owning user. */
31
+ userId: string | null;
32
+ /** `'filters'` (saved grid state) or `'layout'` (per-user dashboard override). */
33
+ kind: ViewKind;
34
+ name: string;
35
+ /** Opaque grid-state / layout envelope (validated at the route layer). */
36
+ config: unknown;
37
+ isDefault: boolean;
38
+ createdAt: number;
39
+ updatedAt: number;
40
+ }
41
+ export interface CreateViewInput {
42
+ pageId: string;
43
+ userId?: string | null;
44
+ kind?: ViewKind;
45
+ name: string;
46
+ config: unknown;
47
+ isDefault?: boolean;
48
+ }
49
+ export interface UpdateViewInput {
50
+ name?: string;
51
+ config?: unknown;
52
+ isDefault?: boolean;
53
+ }
54
+ export declare function viewsRepo(meta: MetaDb): {
55
+ findById(id: string): Promise<SavedView | null>;
56
+ /**
57
+ * Saved *filter* views visible to `userId` on `pageId`: the user's own plus
58
+ * every shared (NULL-owner) view. Defaults first, then alphabetical. Layout
59
+ * overrides (`kind: 'layout'`) are excluded — they are not saved views.
60
+ */
61
+ listForPageUser(pageId: string, userId: string): Promise<SavedView[]>;
62
+ /** Owner-scoped existing filter-view name (uniqueness pre-check for a friendly 409). */
63
+ findByName(pageId: string, userId: string | null, name: string): Promise<SavedView | null>;
64
+ create(input: CreateViewInput, at?: number): Promise<SavedView>;
65
+ update(id: string, patch: UpdateViewInput, at?: number): Promise<SavedView | null>;
66
+ delete(id: string): Promise<boolean>;
67
+ /** The caller's layout override for a page, or null if they follow the default. */
68
+ findLayoutOverride(pageId: string, userId: string): Promise<SavedView | null>;
69
+ /** Insert or replace the caller's layout override for a page. */
70
+ upsertLayoutOverride(pageId: string, userId: string, config: unknown, at?: number): Promise<SavedView>;
71
+ /** Remove the caller's layout override (the "Reset layout" action). */
72
+ deleteLayoutOverride(pageId: string, userId: string): Promise<boolean>;
73
+ };
74
+ export type ViewsRepo = ReturnType<typeof viewsRepo>;
75
+ //# sourceMappingURL=views.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/repos/views.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,sDAAsD;AACtD,eAAO,MAAM,UAAU,gCAAiC,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kFAAkF;IAClF,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAgBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM;iBAIf,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAKrD;;;;OAIG;4BAC2B,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAa3E,wFAAwF;uBAC/D,MAAM,UAAU,MAAM,GAAG,IAAI,QAAQ,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;kBAY5E,eAAe,OAAM,MAAM,GAAgB,OAAO,CAAC,SAAS,CAAC;eA2BhE,MAAM,SAAS,eAAe,OAAM,MAAM,GAAgB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;eAoBnF,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,mFAAmF;+BAClD,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAWnF,iEAAiE;iCAEvD,MAAM,UACN,MAAM,UACN,OAAO,OACX,MAAM,GACT,OAAO,CAAC,SAAS,CAAC;IA0BrB,uEAAuE;iCACpC,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;EAU/E;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * viewsRepo — adminium_views (07-meta-store.md §3.18, 04-widget-registry.md §6.3).
3
+ *
4
+ * Saved filters/layouts over a page. `user_id = NULL` is a shared workspace
5
+ * view; a non-null `user_id` owns the view privately. `config` is an opaque
6
+ * JSON envelope (page-crud grid state for `kind: 'filters'`, a `pageLayout`
7
+ * for `kind: 'layout'`) — like `adminium_pages`, this package never interprets
8
+ * it; the server route is the single write-time validator. Uniqueness is
9
+ * `(page_id, user_id, name)`; at most one default per `(page_id, user_id)`
10
+ * filter scope is app-enforced here in a transaction.
11
+ *
12
+ * The `kind` discriminator keeps the two surfaces from cross-contaminating: the
13
+ * saved-views CRUD (`kind: 'filters'`) never lists a dashboard layout override
14
+ * (`kind: 'layout'`), and the layout resolver never sees a filter view. Layout
15
+ * overrides are one-per-(page, user) upserts under a reserved sentinel name.
16
+ */
17
+ import { newId } from '../ids.js';
18
+ import { packJson, readBool, readJson, writeBool } from './util.js';
19
+ /** Row discriminator (04-widget-registry.md §6.3). */
20
+ export const VIEW_KINDS = ['filters', 'layout'];
21
+ /**
22
+ * Reserved name for the single per-user dashboard layout override row. Layout
23
+ * rows are addressed by `(page_id, user_id, kind: 'layout')`, never by name,
24
+ * but `name` is NOT NULL so this fills the column deterministically.
25
+ */
26
+ export const LAYOUT_OVERRIDE_NAME = '__layout__';
27
+ function decode(row) {
28
+ return {
29
+ id: row.id,
30
+ pageId: row.pageId,
31
+ userId: row.userId,
32
+ kind: (row.kind === 'layout' ? 'layout' : 'filters'),
33
+ name: row.name,
34
+ config: readJson(row.config),
35
+ isDefault: readBool(row.isDefault),
36
+ createdAt: row.createdAt,
37
+ updatedAt: row.updatedAt,
38
+ };
39
+ }
40
+ export function viewsRepo(meta) {
41
+ const { db } = meta;
42
+ return {
43
+ async findById(id) {
44
+ const row = await db.selectFrom('adminium_views').selectAll().where('id', '=', id).executeTakeFirst();
45
+ return row === undefined ? null : decode(row);
46
+ },
47
+ /**
48
+ * Saved *filter* views visible to `userId` on `pageId`: the user's own plus
49
+ * every shared (NULL-owner) view. Defaults first, then alphabetical. Layout
50
+ * overrides (`kind: 'layout'`) are excluded — they are not saved views.
51
+ */
52
+ async listForPageUser(pageId, userId) {
53
+ const rows = await db
54
+ .selectFrom('adminium_views')
55
+ .selectAll()
56
+ .where('pageId', '=', pageId)
57
+ .where('kind', '=', 'filters')
58
+ .where((eb) => eb.or([eb('userId', '=', userId), eb('userId', 'is', null)]))
59
+ .orderBy('isDefault', 'desc')
60
+ .orderBy('name', 'asc')
61
+ .execute();
62
+ return rows.map(decode);
63
+ },
64
+ /** Owner-scoped existing filter-view name (uniqueness pre-check for a friendly 409). */
65
+ async findByName(pageId, userId, name) {
66
+ let q = db
67
+ .selectFrom('adminium_views')
68
+ .selectAll()
69
+ .where('pageId', '=', pageId)
70
+ .where('kind', '=', 'filters')
71
+ .where('name', '=', name);
72
+ q = userId === null ? q.where('userId', 'is', null) : q.where('userId', '=', userId);
73
+ const row = await q.executeTakeFirst();
74
+ return row === undefined ? null : decode(row);
75
+ },
76
+ async create(input, at = Date.now()) {
77
+ const userId = input.userId ?? null;
78
+ const kind = input.kind ?? 'filters';
79
+ const isDefault = input.isDefault ?? false;
80
+ const row = {
81
+ id: newId('view'),
82
+ pageId: input.pageId,
83
+ userId,
84
+ kind,
85
+ name: input.name,
86
+ config: packJson(input.config),
87
+ isDefault: writeBool(meta, isDefault),
88
+ createdAt: at,
89
+ updatedAt: at,
90
+ };
91
+ await db.transaction().execute(async (trx) => {
92
+ if (isDefault) {
93
+ const clear = userId === null
94
+ ? trx.updateTable('adminium_views').set({ isDefault: writeBool(meta, false) }).where('pageId', '=', input.pageId).where('userId', 'is', null)
95
+ : trx.updateTable('adminium_views').set({ isDefault: writeBool(meta, false) }).where('pageId', '=', input.pageId).where('userId', '=', userId);
96
+ await clear.execute();
97
+ }
98
+ await trx.insertInto('adminium_views').values(row).execute();
99
+ });
100
+ return decode(row);
101
+ },
102
+ async update(id, patch, at = Date.now()) {
103
+ const current = await this.findById(id);
104
+ if (current === null)
105
+ return null;
106
+ const set = { updatedAt: at };
107
+ if (patch.name !== undefined)
108
+ set.name = patch.name;
109
+ if (patch.config !== undefined)
110
+ set.config = packJson(patch.config);
111
+ if (patch.isDefault !== undefined)
112
+ set.isDefault = writeBool(meta, patch.isDefault);
113
+ await db.transaction().execute(async (trx) => {
114
+ if (patch.isDefault === true) {
115
+ const clear = current.userId === null
116
+ ? trx.updateTable('adminium_views').set({ isDefault: writeBool(meta, false) }).where('pageId', '=', current.pageId).where('userId', 'is', null)
117
+ : trx.updateTable('adminium_views').set({ isDefault: writeBool(meta, false) }).where('pageId', '=', current.pageId).where('userId', '=', current.userId);
118
+ await clear.where('id', '!=', id).execute();
119
+ }
120
+ await trx.updateTable('adminium_views').set(set).where('id', '=', id).execute();
121
+ });
122
+ return this.findById(id);
123
+ },
124
+ async delete(id) {
125
+ const res = await db.deleteFrom('adminium_views').where('id', '=', id).executeTakeFirst();
126
+ return Number(res.numDeletedRows ?? 0n) === 1;
127
+ },
128
+ // --- per-user dashboard layout overrides (04-widget-registry.md §6.3) -----
129
+ // Exactly one row per (page_id, user_id, kind: 'layout'). Addressed by that
130
+ // key, never by name; `config` holds the opaque `pageLayout` document.
131
+ /** The caller's layout override for a page, or null if they follow the default. */
132
+ async findLayoutOverride(pageId, userId) {
133
+ const row = await db
134
+ .selectFrom('adminium_views')
135
+ .selectAll()
136
+ .where('pageId', '=', pageId)
137
+ .where('userId', '=', userId)
138
+ .where('kind', '=', 'layout')
139
+ .executeTakeFirst();
140
+ return row === undefined ? null : decode(row);
141
+ },
142
+ /** Insert or replace the caller's layout override for a page. */
143
+ async upsertLayoutOverride(pageId, userId, config, at = Date.now()) {
144
+ const packed = packJson(config);
145
+ const existing = await this.findLayoutOverride(pageId, userId);
146
+ if (existing !== null) {
147
+ await db
148
+ .updateTable('adminium_views')
149
+ .set({ config: packed, updatedAt: at })
150
+ .where('id', '=', existing.id)
151
+ .execute();
152
+ return { ...existing, config: readJson(packed), updatedAt: at };
153
+ }
154
+ const row = {
155
+ id: newId('view'),
156
+ pageId,
157
+ userId,
158
+ kind: 'layout',
159
+ name: LAYOUT_OVERRIDE_NAME,
160
+ config: packed,
161
+ isDefault: writeBool(meta, false),
162
+ createdAt: at,
163
+ updatedAt: at,
164
+ };
165
+ await db.insertInto('adminium_views').values(row).execute();
166
+ return decode(row);
167
+ },
168
+ /** Remove the caller's layout override (the "Reset layout" action). */
169
+ async deleteLayoutOverride(pageId, userId) {
170
+ const res = await db
171
+ .deleteFrom('adminium_views')
172
+ .where('pageId', '=', pageId)
173
+ .where('userId', '=', userId)
174
+ .where('kind', '=', 'layout')
175
+ .executeTakeFirst();
176
+ return Number(res.numDeletedRows ?? 0n) >= 1;
177
+ },
178
+ };
179
+ }
180
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/repos/views.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './tables.js';
2
+ export * from './json-payloads.js';
3
+ export * from './settings-registry.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './tables.js';
2
+ export * from './json-payloads.js';
3
+ export * from './settings-registry.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}