@luzzle/core 0.0.32

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 (231) hide show
  1. package/README.md +41 -0
  2. package/dist/src/database/client.d.ts +4 -0
  3. package/dist/src/database/client.js +12 -0
  4. package/dist/src/database/client.js.map +1 -0
  5. package/dist/src/database/client.test.d.ts +1 -0
  6. package/dist/src/database/client.test.js +34 -0
  7. package/dist/src/database/client.test.js.map +1 -0
  8. package/dist/src/database/database.mock.d.ts +22 -0
  9. package/dist/src/database/database.mock.js +42 -0
  10. package/dist/src/database/database.mock.js.map +1 -0
  11. package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.d.ts +3 -0
  12. package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.js +49 -0
  13. package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.js.map +1 -0
  14. package/dist/src/database/migrations/2023-10-30T23:24:40Z.d.ts +3 -0
  15. package/dist/src/database/migrations/2023-10-30T23:24:40Z.js +35 -0
  16. package/dist/src/database/migrations/2023-10-30T23:24:40Z.js.map +1 -0
  17. package/dist/src/database/migrations/2023-11-22T14:55:18Z.d.ts +3 -0
  18. package/dist/src/database/migrations/2023-11-22T14:55:18Z.js +16 -0
  19. package/dist/src/database/migrations/2023-11-22T14:55:18Z.js.map +1 -0
  20. package/dist/src/database/migrations/2023-11-27T04:32:07Z.d.ts +3 -0
  21. package/dist/src/database/migrations/2023-11-27T04:32:07Z.js +30 -0
  22. package/dist/src/database/migrations/2023-11-27T04:32:07Z.js.map +1 -0
  23. package/dist/src/database/migrations/2024-01-01T23:30:29Z.d.ts +3 -0
  24. package/dist/src/database/migrations/2024-01-01T23:30:29Z.js +11 -0
  25. package/dist/src/database/migrations/2024-01-01T23:30:29Z.js.map +1 -0
  26. package/dist/src/database/migrations/2024-01-06T15:52:43Z.d.ts +3 -0
  27. package/dist/src/database/migrations/2024-01-06T15:52:43Z.js +16 -0
  28. package/dist/src/database/migrations/2024-01-06T15:52:43Z.js.map +1 -0
  29. package/dist/src/database/migrations/2024-02-09T16:33:10Z.d.ts +3 -0
  30. package/dist/src/database/migrations/2024-02-09T16:33:10Z.js +37 -0
  31. package/dist/src/database/migrations/2024-02-09T16:33:10Z.js.map +1 -0
  32. package/dist/src/database/migrations/2024-02-13T05:56:43Z.d.ts +3 -0
  33. package/dist/src/database/migrations/2024-02-13T05:56:43Z.js +116 -0
  34. package/dist/src/database/migrations/2024-02-13T05:56:43Z.js.map +1 -0
  35. package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.d.ts +3 -0
  36. package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.js +42 -0
  37. package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.js.map +1 -0
  38. package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.d.ts +3 -0
  39. package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.js +20 -0
  40. package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.js.map +1 -0
  41. package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.d.ts +3 -0
  42. package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.js +43 -0
  43. package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.js.map +1 -0
  44. package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.d.ts +3 -0
  45. package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.js +54 -0
  46. package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.js.map +1 -0
  47. package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.d.ts +3 -0
  48. package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.js +23 -0
  49. package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.js.map +1 -0
  50. package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.d.ts +3 -0
  51. package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.js +17 -0
  52. package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.js.map +1 -0
  53. package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.d.ts +3 -0
  54. package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.js +15 -0
  55. package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.js.map +1 -0
  56. package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.d.ts +3 -0
  57. package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.js +26 -0
  58. package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.js.map +1 -0
  59. package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.d.ts +3 -0
  60. package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.js +24 -0
  61. package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.js.map +1 -0
  62. package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.d.ts +3 -0
  63. package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.js +54 -0
  64. package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.js.map +1 -0
  65. package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.d.ts +3 -0
  66. package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.js +10 -0
  67. package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.js.map +1 -0
  68. package/dist/src/database/migrations.d.ts +3 -0
  69. package/dist/src/database/migrations.js +16 -0
  70. package/dist/src/database/migrations.js.map +1 -0
  71. package/dist/src/database/migrations.test.d.ts +1 -0
  72. package/dist/src/database/migrations.test.js +37 -0
  73. package/dist/src/database/migrations.test.js.map +1 -0
  74. package/dist/src/database/tables/index.d.ts +21 -0
  75. package/dist/src/database/tables/index.js +7 -0
  76. package/dist/src/database/tables/index.js.map +1 -0
  77. package/dist/src/database/tables/pieces_cache.schema.d.ts +13 -0
  78. package/dist/src/database/tables/pieces_cache.schema.js +2 -0
  79. package/dist/src/database/tables/pieces_cache.schema.js.map +1 -0
  80. package/dist/src/database/tables/pieces_items.schema.d.ts +16 -0
  81. package/dist/src/database/tables/pieces_items.schema.js +2 -0
  82. package/dist/src/database/tables/pieces_items.schema.js.map +1 -0
  83. package/dist/src/database/tables/pieces_manager.schema.d.ts +13 -0
  84. package/dist/src/database/tables/pieces_manager.schema.js +2 -0
  85. package/dist/src/database/tables/pieces_manager.schema.js.map +1 -0
  86. package/dist/src/database/utils.d.ts +8 -0
  87. package/dist/src/database/utils.js +2 -0
  88. package/dist/src/database/utils.js.map +1 -0
  89. package/dist/src/database/utils.test.d.ts +1 -0
  90. package/dist/src/database/utils.test.js +9 -0
  91. package/dist/src/database/utils.test.js.map +1 -0
  92. package/dist/src/index.d.ts +11 -0
  93. package/dist/src/index.js +12 -0
  94. package/dist/src/index.js.map +1 -0
  95. package/dist/src/index.test.d.ts +1 -0
  96. package/dist/src/index.test.js +9 -0
  97. package/dist/src/index.test.js.map +1 -0
  98. package/dist/src/lib/ajv.d.ts +6 -0
  99. package/dist/src/lib/ajv.js +25 -0
  100. package/dist/src/lib/ajv.js.map +1 -0
  101. package/dist/src/lib/ajv.test.d.ts +1 -0
  102. package/dist/src/lib/ajv.test.js +43 -0
  103. package/dist/src/lib/ajv.test.js.map +1 -0
  104. package/dist/src/lib/frontmatter.d.ts +4 -0
  105. package/dist/src/lib/frontmatter.js +8 -0
  106. package/dist/src/lib/frontmatter.js.map +1 -0
  107. package/dist/src/lib/frontmatter.test.d.ts +1 -0
  108. package/dist/src/lib/frontmatter.test.js +37 -0
  109. package/dist/src/lib/frontmatter.test.js.map +1 -0
  110. package/dist/src/lib/markdown.d.ts +7 -0
  111. package/dist/src/lib/markdown.js +21 -0
  112. package/dist/src/lib/markdown.js.map +1 -0
  113. package/dist/src/lib/markdown.test.d.ts +1 -0
  114. package/dist/src/lib/markdown.test.js +34 -0
  115. package/dist/src/lib/markdown.test.js.map +1 -0
  116. package/dist/src/llm/google.d.ts +6 -0
  117. package/dist/src/llm/google.js +91 -0
  118. package/dist/src/llm/google.js.map +1 -0
  119. package/dist/src/llm/google.test.d.ts +1 -0
  120. package/dist/src/llm/google.test.js +253 -0
  121. package/dist/src/llm/google.test.js.map +1 -0
  122. package/dist/src/pieces/Piece.d.ts +66 -0
  123. package/dist/src/pieces/Piece.fixtures.d.ts +43 -0
  124. package/dist/src/pieces/Piece.fixtures.js +83 -0
  125. package/dist/src/pieces/Piece.fixtures.js.map +1 -0
  126. package/dist/src/pieces/Piece.js +256 -0
  127. package/dist/src/pieces/Piece.js.map +1 -0
  128. package/dist/src/pieces/Piece.test.d.ts +1 -0
  129. package/dist/src/pieces/Piece.test.js +839 -0
  130. package/dist/src/pieces/Piece.test.js.map +1 -0
  131. package/dist/src/pieces/Pieces.d.ts +55 -0
  132. package/dist/src/pieces/Pieces.js +144 -0
  133. package/dist/src/pieces/Pieces.js.map +1 -0
  134. package/dist/src/pieces/Pieces.test.d.ts +1 -0
  135. package/dist/src/pieces/Pieces.test.js +327 -0
  136. package/dist/src/pieces/Pieces.test.js.map +1 -0
  137. package/dist/src/pieces/assets.d.ts +5 -0
  138. package/dist/src/pieces/assets.js +6 -0
  139. package/dist/src/pieces/assets.js.map +1 -0
  140. package/dist/src/pieces/cache.d.ts +20 -0
  141. package/dist/src/pieces/cache.fixtures.d.ts +3 -0
  142. package/dist/src/pieces/cache.fixtures.js +12 -0
  143. package/dist/src/pieces/cache.fixtures.js.map +1 -0
  144. package/dist/src/pieces/cache.js +49 -0
  145. package/dist/src/pieces/cache.js.map +1 -0
  146. package/dist/src/pieces/cache.test.d.ts +1 -0
  147. package/dist/src/pieces/cache.test.js +98 -0
  148. package/dist/src/pieces/cache.test.js.map +1 -0
  149. package/dist/src/pieces/index.d.ts +8 -0
  150. package/dist/src/pieces/index.js +9 -0
  151. package/dist/src/pieces/index.js.map +1 -0
  152. package/dist/src/pieces/item.d.ts +9 -0
  153. package/dist/src/pieces/item.js +79 -0
  154. package/dist/src/pieces/item.js.map +1 -0
  155. package/dist/src/pieces/item.test.d.ts +1 -0
  156. package/dist/src/pieces/item.test.js +215 -0
  157. package/dist/src/pieces/item.test.js.map +1 -0
  158. package/dist/src/pieces/items.d.ts +39 -0
  159. package/dist/src/pieces/items.js +45 -0
  160. package/dist/src/pieces/items.js.map +1 -0
  161. package/dist/src/pieces/items.test.d.ts +1 -0
  162. package/dist/src/pieces/items.test.js +100 -0
  163. package/dist/src/pieces/items.test.js.map +1 -0
  164. package/dist/src/pieces/json.schema.d.ts +6 -0
  165. package/dist/src/pieces/json.schema.js +58 -0
  166. package/dist/src/pieces/json.schema.js.map +1 -0
  167. package/dist/src/pieces/json.schema.test.d.ts +1 -0
  168. package/dist/src/pieces/json.schema.test.js +27 -0
  169. package/dist/src/pieces/json.schema.test.js.map +1 -0
  170. package/dist/src/pieces/manager.d.ts +22 -0
  171. package/dist/src/pieces/manager.js +43 -0
  172. package/dist/src/pieces/manager.js.map +1 -0
  173. package/dist/src/pieces/manager.test.d.ts +1 -0
  174. package/dist/src/pieces/manager.test.js +72 -0
  175. package/dist/src/pieces/manager.test.js.map +1 -0
  176. package/dist/src/pieces/utils/frontmatter.d.ts +33 -0
  177. package/dist/src/pieces/utils/frontmatter.js +69 -0
  178. package/dist/src/pieces/utils/frontmatter.js.map +1 -0
  179. package/dist/src/pieces/utils/frontmatter.test.d.ts +1 -0
  180. package/dist/src/pieces/utils/frontmatter.test.js +185 -0
  181. package/dist/src/pieces/utils/frontmatter.test.js.map +1 -0
  182. package/dist/src/pieces/utils/markdown.d.ts +10 -0
  183. package/dist/src/pieces/utils/markdown.js +9 -0
  184. package/dist/src/pieces/utils/markdown.js.map +1 -0
  185. package/dist/src/pieces/utils/markdown.test.d.ts +1 -0
  186. package/dist/src/pieces/utils/markdown.test.js +38 -0
  187. package/dist/src/pieces/utils/markdown.test.js.map +1 -0
  188. package/dist/src/pieces/utils/piece.d.ts +13 -0
  189. package/dist/src/pieces/utils/piece.fixtures.d.ts +19 -0
  190. package/dist/src/pieces/utils/piece.fixtures.js +39 -0
  191. package/dist/src/pieces/utils/piece.fixtures.js.map +1 -0
  192. package/dist/src/pieces/utils/piece.js +142 -0
  193. package/dist/src/pieces/utils/piece.js.map +1 -0
  194. package/dist/src/pieces/utils/piece.test.d.ts +1 -0
  195. package/dist/src/pieces/utils/piece.test.js +333 -0
  196. package/dist/src/pieces/utils/piece.test.js.map +1 -0
  197. package/dist/src/pieces/utils.d.ts +10 -0
  198. package/dist/src/pieces/utils.js +101 -0
  199. package/dist/src/pieces/utils.js.map +1 -0
  200. package/dist/src/pieces/utils.test.d.ts +1 -0
  201. package/dist/src/pieces/utils.test.js +372 -0
  202. package/dist/src/pieces/utils.test.js.map +1 -0
  203. package/dist/src/storage/abstract.d.ts +19 -0
  204. package/dist/src/storage/abstract.js +4 -0
  205. package/dist/src/storage/abstract.js.map +1 -0
  206. package/dist/src/storage/fs.d.ts +22 -0
  207. package/dist/src/storage/fs.js +84 -0
  208. package/dist/src/storage/fs.js.map +1 -0
  209. package/dist/src/storage/fs.test.d.ts +1 -0
  210. package/dist/src/storage/fs.test.js +222 -0
  211. package/dist/src/storage/fs.test.js.map +1 -0
  212. package/dist/src/storage/index.d.ts +5 -0
  213. package/dist/src/storage/index.js +4 -0
  214. package/dist/src/storage/index.js.map +1 -0
  215. package/dist/src/storage/storage.mock.d.ts +2 -0
  216. package/dist/src/storage/storage.mock.js +18 -0
  217. package/dist/src/storage/storage.mock.js.map +1 -0
  218. package/dist/src/storage/types.d.ts +6 -0
  219. package/dist/src/storage/types.js +2 -0
  220. package/dist/src/storage/types.js.map +1 -0
  221. package/dist/src/storage/webdav.d.ts +25 -0
  222. package/dist/src/storage/webdav.js +65 -0
  223. package/dist/src/storage/webdav.js.map +1 -0
  224. package/dist/src/storage/webdav.test.d.ts +1 -0
  225. package/dist/src/storage/webdav.test.js +194 -0
  226. package/dist/src/storage/webdav.test.js.map +1 -0
  227. package/dist/tsconfig.tsbuildinfo +1 -0
  228. package/dist/vite.config.d.ts +2 -0
  229. package/dist/vite.config.js +36 -0
  230. package/dist/vite.config.js.map +1 -0
  231. package/package.json +60 -0
@@ -0,0 +1,39 @@
1
+ import { Kysely } from 'kysely';
2
+ import { PiecesItemsInsertable, PiecesItemsUpdateable } from '../database/tables/pieces_items.schema.js';
3
+ import { LuzzleTables } from '../database/tables/index.js';
4
+ declare function updateItem(db: Kysely<LuzzleTables>, file: string, data: PiecesItemsUpdateable): Promise<void>;
5
+ declare function insertItem(db: Kysely<LuzzleTables>, data: PiecesItemsInsertable): Promise<{
6
+ id: string;
7
+ file_path: string;
8
+ type: string;
9
+ date_added: number;
10
+ date_updated: number | null;
11
+ note_markdown: string;
12
+ frontmatter_json: string;
13
+ assets_json_array: string | undefined;
14
+ } | undefined>;
15
+ declare function selectItem(db: Kysely<LuzzleTables>, file?: string): Promise<{
16
+ id: string;
17
+ file_path: string;
18
+ type: string;
19
+ date_added: number;
20
+ date_updated: number | null;
21
+ note_markdown: string;
22
+ frontmatter_json: string;
23
+ assets_json_array: string | undefined;
24
+ } | undefined>;
25
+ declare function selectItems(db: Kysely<LuzzleTables>, where?: {
26
+ type?: string;
27
+ asset?: string;
28
+ }): Promise<{
29
+ id: string;
30
+ file_path: string;
31
+ type: string;
32
+ date_added: number;
33
+ date_updated: number | null;
34
+ assets_json_array: string | undefined;
35
+ }[]>;
36
+ declare function selectItemAssets(db: Kysely<LuzzleTables>): Promise<string[]>;
37
+ declare function deleteItem(db: Kysely<LuzzleTables>, file: string): Promise<void>;
38
+ declare function deleteItems(db: Kysely<LuzzleTables>, files: string[]): Promise<void>;
39
+ export { deleteItem, deleteItems, selectItem, selectItems, updateItem, insertItem, selectItemAssets };
@@ -0,0 +1,45 @@
1
+ import { sql } from 'kysely';
2
+ async function updateItem(db, file, data) {
3
+ await db.updateTable('pieces_items').set(data).where('file_path', '=', file).execute();
4
+ }
5
+ async function insertItem(db, data) {
6
+ const insert = await db
7
+ .insertInto('pieces_items')
8
+ .values(data)
9
+ .returningAll()
10
+ .executeTakeFirst();
11
+ return insert;
12
+ }
13
+ async function selectItem(db, file) {
14
+ let query = db.selectFrom('pieces_items').selectAll();
15
+ if (file) {
16
+ query = query.where('file_path', '=', file);
17
+ }
18
+ return await query.executeTakeFirst();
19
+ }
20
+ async function selectItems(db, where) {
21
+ let query = db
22
+ .selectFrom('pieces_items')
23
+ .select(['type', 'file_path', 'assets_json_array', 'id', 'date_added', 'date_updated']);
24
+ if (where?.type) {
25
+ query = query.where('type', '=', where.type);
26
+ }
27
+ if (where?.asset) {
28
+ query = query.where('assets_json_array', 'like', `%${where.asset}%`);
29
+ }
30
+ return await query.execute();
31
+ }
32
+ async function selectItemAssets(db) {
33
+ const select = sql `select distinct assets.value as asset from pieces_items, json_each(assets_json_array) assets where assets.value is not null`;
34
+ const query = select.compile(db);
35
+ const results = await db.executeQuery(query);
36
+ return results.rows.map((row) => row.asset);
37
+ }
38
+ async function deleteItem(db, file) {
39
+ await db.deleteFrom('pieces_items').where('file_path', '=', file).execute();
40
+ }
41
+ async function deleteItems(db, files) {
42
+ await db.deleteFrom('pieces_items').where('file_path', 'in', files).execute();
43
+ }
44
+ export { deleteItem, deleteItems, selectItem, selectItems, updateItem, insertItem, selectItemAssets };
45
+ //# sourceMappingURL=items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items.js","sourceRoot":"","sources":["../../../src/pieces/items.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,GAAG,EAAE,MAAM,QAAQ,CAAA;AAOpC,KAAK,UAAU,UAAU,CAAC,EAAwB,EAAE,IAAY,EAAE,IAA2B;IAC5F,MAAM,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;AACvF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAwB,EAAE,IAA2B;IAC9E,MAAM,MAAM,GAAG,MAAM,EAAE;SACrB,UAAU,CAAC,cAAc,CAAC;SAC1B,MAAM,CAAC,IAAa,CAAC;SACrB,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;IAEpB,OAAO,MAAM,CAAA;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAwB,EAAE,IAAa;IAChE,IAAI,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAA;IAErD,IAAI,IAAI,EAAE,CAAC;QACV,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAA;AACtC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAwB,EAAE,KAAyC;IAC7F,IAAI,KAAK,GAAG,EAAE;SACZ,UAAU,CAAC,cAAc,CAAC;SAC1B,MAAM,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAA;IAExF,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QACjB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;QAClB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAA;AAC7B,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,EAAwB;IACvD,MAAM,MAAM,GAAG,GAAG,CAEhB,6HAA6H,CAAA;IAC/H,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAE5C,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAwB,EAAE,IAAY;IAC/D,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;AAC5E,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAwB,EAAE,KAAe;IACnE,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;AAC9E,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,100 @@
1
+ import { describe, expect, test, vi, afterEach } from 'vitest';
2
+ import { mockKysely } from '../database/database.mock.js';
3
+ import * as items from './items.js';
4
+ import { addColumnsFromPieceSchema } from './json.schema.js';
5
+ import { sql } from 'kysely';
6
+ vi.mock('./json.schema.ts');
7
+ vi.mock('kysely');
8
+ const mocks = {
9
+ addColumnsFromPieceSchema: vi.mocked(addColumnsFromPieceSchema),
10
+ sql: vi.mocked(sql),
11
+ };
12
+ const spies = {};
13
+ describe('src/pieces/items.ts', () => {
14
+ afterEach(() => {
15
+ Object.values(mocks).forEach((mock) => {
16
+ mock.mockReset();
17
+ });
18
+ Object.keys(spies).forEach((key) => {
19
+ spies[key].mockRestore();
20
+ delete spies[key];
21
+ });
22
+ });
23
+ test('selectItem', async () => {
24
+ const kysely = mockKysely();
25
+ const file = 'file';
26
+ await items.selectItem(kysely.db, file);
27
+ expect(kysely.db.selectFrom).toHaveBeenCalled();
28
+ expect(kysely.queries.where).toHaveBeenCalledWith('file_path', '=', file);
29
+ });
30
+ test('updateItem', async () => {
31
+ const kysely = mockKysely();
32
+ const file = 'file';
33
+ const data = { id: 'id', title: 'title' };
34
+ await items.updateItem(kysely.db, file, data);
35
+ expect(kysely.db.updateTable).toHaveBeenCalled();
36
+ expect(kysely.queries.where).toHaveBeenCalledWith('file_path', '=', file);
37
+ });
38
+ test('insertItem', async () => {
39
+ const kysely = mockKysely();
40
+ const data = {
41
+ file_path: 'path',
42
+ type: 'books',
43
+ id: 'one',
44
+ frontmatter_json: '',
45
+ note_markdown: '',
46
+ };
47
+ await items.insertItem(kysely.db, data);
48
+ expect(kysely.db.insertInto).toHaveBeenCalled();
49
+ expect(kysely.queries.values).toHaveBeenCalledWith(data);
50
+ });
51
+ test('selectItems', async () => {
52
+ const kysely = mockKysely();
53
+ await items.selectItems(kysely.db);
54
+ expect(kysely.db.selectFrom).toHaveBeenCalled();
55
+ expect(kysely.queries.where).not.toHaveBeenCalled();
56
+ expect(kysely.queries.select).toHaveBeenCalledOnce();
57
+ });
58
+ test('selectItems with type', async () => {
59
+ const kysely = mockKysely();
60
+ const type = 'books';
61
+ await items.selectItems(kysely.db, { type });
62
+ expect(kysely.db.selectFrom).toHaveBeenCalled();
63
+ expect(kysely.queries.where).toHaveBeenCalledWith('type', '=', type);
64
+ expect(kysely.queries.select).toHaveBeenCalledOnce();
65
+ });
66
+ test('selectItems with asset', async () => {
67
+ const kysely = mockKysely();
68
+ const asset = 'file1';
69
+ await items.selectItems(kysely.db, { asset });
70
+ expect(kysely.db.selectFrom).toHaveBeenCalled();
71
+ expect(kysely.queries.where).toHaveBeenCalledWith('assets_json_array', 'like', expect.any(String));
72
+ expect(kysely.queries.select).toHaveBeenCalledOnce();
73
+ });
74
+ test('selectItemAssets', async () => {
75
+ const kysely = mockKysely();
76
+ const asset = 'file1';
77
+ mocks.sql.mockReturnValueOnce({ compile: vi.fn() });
78
+ spies.executeQuery = vi
79
+ .spyOn(kysely.db, 'executeQuery')
80
+ .mockResolvedValue({ rows: [{ asset }] });
81
+ const assets = await items.selectItemAssets(kysely.db);
82
+ expect(kysely.db.executeQuery).toHaveBeenCalled();
83
+ expect(assets).toEqual([asset]);
84
+ });
85
+ test('deleteItem', async () => {
86
+ const kysely = mockKysely();
87
+ const file = 'file';
88
+ await items.deleteItem(kysely.db, file);
89
+ expect(kysely.db.deleteFrom).toHaveBeenCalled();
90
+ expect(kysely.queries.where).toHaveBeenCalledWith('file_path', '=', file);
91
+ });
92
+ test('deleteItems', async () => {
93
+ const kysely = mockKysely();
94
+ const files = ['file1', 'file2'];
95
+ await items.deleteItems(kysely.db, files);
96
+ expect(kysely.db.deleteFrom).toHaveBeenCalled();
97
+ expect(kysely.queries.where).toHaveBeenCalledWith('file_path', 'in', files);
98
+ });
99
+ });
100
+ //# sourceMappingURL=items.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items.test.js","sourceRoot":"","sources":["../../../src/pieces/items.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { PieceFrontmatter } from './utils/frontmatter.js';
2
+ import { JSONSchemaType } from 'ajv/dist/types/json-schema.js';
3
+ import { CreateTableBuilder } from 'kysely';
4
+ declare function jsonToPieceSchema(json: string): JSONSchemaType<PieceFrontmatter>;
5
+ declare function addColumnsFromPieceSchema<T>(tableBuilder: CreateTableBuilder<string, never>, schema: JSONSchemaType<T>): CreateTableBuilder<string, never>;
6
+ export { jsonToPieceSchema, addColumnsFromPieceSchema };
@@ -0,0 +1,58 @@
1
+ import { sql } from 'kysely';
2
+ function pieceSchemaFieldTypeToColumnType(type) {
3
+ switch (type) {
4
+ case 'string':
5
+ return 'text';
6
+ case 'integer':
7
+ return 'integer';
8
+ case 'boolean':
9
+ return 'boolean';
10
+ default:
11
+ throw new Error(`json schema type ${type} not supported in sqlite`);
12
+ }
13
+ }
14
+ function jsonToPieceSchema(json) {
15
+ try {
16
+ return JSON.parse(json);
17
+ }
18
+ catch (error) {
19
+ throw new Error(`Error parsing schema: ${error}`);
20
+ }
21
+ }
22
+ function addColumnsFromPieceSchema(tableBuilder, schema) {
23
+ const properties = schema.properties;
24
+ const fields = Object.keys(properties);
25
+ const requiredFields = schema.required || [];
26
+ tableBuilder = tableBuilder.addColumn('id', 'text', (col) => col.primaryKey().notNull());
27
+ tableBuilder = tableBuilder.addColumn('slug', 'text', (col) => col.notNull().unique());
28
+ tableBuilder = tableBuilder.addColumn('date_added', 'datetime', (col) => col.defaultTo(sql `((julianday('now') - 2440587.5)*86400000)`).notNull());
29
+ tableBuilder = tableBuilder.addColumn('date_updated', 'datetime');
30
+ tableBuilder = tableBuilder.addColumn('note', 'text');
31
+ fields.forEach((key) => {
32
+ const field = properties[key];
33
+ const required = requiredFields.includes(key);
34
+ if ('type' in field) {
35
+ const type = field.type === 'array' ? field.items.type : field.type;
36
+ const format = field.type === 'array' ? field.items.format : field.format;
37
+ const columnType = pieceSchemaFieldTypeToColumnType(type);
38
+ const tableColumnType = format === 'date' ? 'datetime' : columnType;
39
+ tableBuilder = tableBuilder.addColumn(key, tableColumnType, (col) => {
40
+ if (required) {
41
+ col = col.notNull();
42
+ }
43
+ if (field.enum) {
44
+ const values = field.enum.map((value) => `'${value}'`).join(', ');
45
+ const constraint = `${key} IN (${values})`;
46
+ col = col.check(sql.raw(constraint));
47
+ }
48
+ if (field.default) {
49
+ col = col.defaultTo(field.default);
50
+ }
51
+ return col;
52
+ });
53
+ }
54
+ });
55
+ return tableBuilder;
56
+ }
57
+ export { jsonToPieceSchema, addColumnsFromPieceSchema };
58
+ //# sourceMappingURL=json.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.schema.js","sourceRoot":"","sources":["../../../src/pieces/json.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ import { describe, afterEach, test, vi, expect } from 'vitest';
2
+ import { jsonToPieceSchema } from './json.schema.js';
3
+ import { existsSync, readFileSync } from 'fs';
4
+ vi.mock('fs');
5
+ const spies = {};
6
+ const mocks = {
7
+ existsSync: vi.mocked(existsSync),
8
+ readFileSync: vi.mocked(readFileSync),
9
+ };
10
+ describe('./pieces/json.schema.ts', () => {
11
+ afterEach(() => {
12
+ Object.values(mocks).forEach((mock) => {
13
+ mock.mockReset();
14
+ });
15
+ Object.keys(spies).forEach((key) => {
16
+ spies[key].mockRestore();
17
+ delete spies[key];
18
+ });
19
+ });
20
+ test('jsonToPieceSchema', () => {
21
+ const jsonObj = { type: 'object' };
22
+ const json = JSON.stringify(jsonObj);
23
+ const schema = jsonToPieceSchema(json);
24
+ expect(schema).toEqual(jsonObj);
25
+ });
26
+ });
27
+ //# sourceMappingURL=json.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.schema.test.js","sourceRoot":"","sources":["../../../src/pieces/json.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAE7C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb,MAAM,KAAK,GAAoC,EAAE,CAAA;AAEjD,MAAM,KAAK,GAAG;IACb,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;IACjC,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;CACrC,CAAA;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC9B,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAEpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { Kysely } from 'kysely';
2
+ import { LuzzleTables } from '../database/tables/index.js';
3
+ import { JSONSchemaType } from 'ajv';
4
+ import { PieceFrontmatter } from './utils/frontmatter.js';
5
+ declare function addPiece(db: Kysely<LuzzleTables>, name: string, schema: JSONSchemaType<PieceFrontmatter>): Promise<void>;
6
+ declare function updatePiece(db: Kysely<LuzzleTables>, name: string, schema: JSONSchemaType<PieceFrontmatter>): Promise<void>;
7
+ declare function getPiece(db: Kysely<LuzzleTables>, name: string): Promise<{
8
+ schema: JSONSchemaType<PieceFrontmatter>;
9
+ name: string;
10
+ id: string;
11
+ date_added: number;
12
+ date_updated: number | null | undefined;
13
+ } | null>;
14
+ declare function getPieces(db: Kysely<LuzzleTables>): Promise<{
15
+ name: string;
16
+ id: string;
17
+ date_added: number;
18
+ date_updated: number | null | undefined;
19
+ schema: string;
20
+ }[]>;
21
+ declare function deletePiece(db: Kysely<LuzzleTables>, name: string): Promise<void>;
22
+ export { addPiece, updatePiece, getPiece, deletePiece, getPieces };
@@ -0,0 +1,43 @@
1
+ import cuid2 from '@paralleldrive/cuid2';
2
+ async function addPiece(db, name, schema) {
3
+ await db
4
+ .insertInto('pieces_manager')
5
+ .values({
6
+ name,
7
+ schema: JSON.stringify(schema),
8
+ id: cuid2.createId(),
9
+ })
10
+ .execute();
11
+ }
12
+ async function updatePiece(db, name, schema) {
13
+ await db
14
+ .updateTable('pieces_manager')
15
+ .set({
16
+ schema: JSON.stringify(schema),
17
+ date_updated: new Date().getTime(),
18
+ })
19
+ .where('name', '=', name)
20
+ .execute();
21
+ }
22
+ async function getPiece(db, name) {
23
+ const managedPiece = await db
24
+ .selectFrom('pieces_manager')
25
+ .selectAll()
26
+ .where('name', '=', name)
27
+ .executeTakeFirst();
28
+ if (managedPiece) {
29
+ return {
30
+ ...managedPiece,
31
+ schema: JSON.parse(managedPiece.schema),
32
+ };
33
+ }
34
+ return null;
35
+ }
36
+ async function getPieces(db) {
37
+ return await db.selectFrom('pieces_manager').selectAll().execute();
38
+ }
39
+ async function deletePiece(db, name) {
40
+ await db.deleteFrom('pieces_manager').where('name', '=', name).execute();
41
+ }
42
+ export { addPiece, updatePiece, getPiece, deletePiece, getPieces };
43
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/pieces/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,sBAAsB,CAAA;AAExC,KAAK,UAAU,QAAQ,CACtB,EAAwB,EACxB,IAAY,EACZ,MAAwC;IAExC,MAAM,EAAE;SACN,UAAU,CAAC,gBAAgB,CAAC;SAC5B,MAAM,CAAC;QACP,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE;KACpB,CAAC;SACD,OAAO,EAAE,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,WAAW,CACzB,EAAwB,EACxB,IAAY,EACZ,MAAwC;IAExC,MAAM,EAAE;SACN,WAAW,CAAC,gBAAgB,CAAC;SAC7B,GAAG,CAAC;QACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;KAClC,CAAC;SACD,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;SACxB,OAAO,EAAE,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,EAAwB,EAAE,IAAY;IAC7D,MAAM,YAAY,GAAG,MAAM,EAAE;SAC3B,UAAU,CAAC,gBAAgB,CAAC;SAC5B,SAAS,EAAE;SACX,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;SACxB,gBAAgB,EAAE,CAAA;IAEpB,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO;YACN,GAAG,YAAY;YACf,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAqC;SAC3E,CAAA;IACF,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,EAAwB;IAChD,OAAO,MAAM,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAA;AACnE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAwB,EAAE,IAAY;IAChE,MAAM,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;AACzE,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ import { describe, expect, test, vi, afterEach } from 'vitest';
2
+ import { mockKysely } from '../database/database.mock.js';
3
+ import * as manager from './manager.js';
4
+ import { makeSchema } from './utils/piece.fixtures.js';
5
+ vi.mock('./items.js');
6
+ const mocks = {
7
+ empty: vi.fn(),
8
+ };
9
+ const spies = {};
10
+ describe('src/pieces/manager.ts', () => {
11
+ afterEach(() => {
12
+ Object.values(mocks).forEach((mock) => {
13
+ mock.mockReset();
14
+ });
15
+ Object.keys(spies).forEach((key) => {
16
+ spies[key].mockRestore();
17
+ delete spies[key];
18
+ });
19
+ });
20
+ test('addPiece', async () => {
21
+ const kysely = mockKysely();
22
+ const schema = makeSchema();
23
+ await manager.addPiece(kysely.db, 'name', schema);
24
+ expect(kysely.db.insertInto).toHaveBeenCalled();
25
+ });
26
+ test('updatePiece', async () => {
27
+ const kysely = mockKysely();
28
+ const schema = makeSchema();
29
+ const name = 'name';
30
+ await manager.updatePiece(kysely.db, name, schema);
31
+ expect(kysely.db.updateTable).toHaveBeenCalled();
32
+ expect(kysely.queries.where).toHaveBeenCalledWith('name', '=', name);
33
+ });
34
+ test('getPiece', async () => {
35
+ const kysely = mockKysely();
36
+ const name = 'name';
37
+ const schema = makeSchema();
38
+ const managedPiece = {
39
+ name,
40
+ schema: JSON.stringify(schema),
41
+ };
42
+ kysely.queries.executeTakeFirst.mockResolvedValueOnce(managedPiece);
43
+ const piece = await manager.getPiece(kysely.db, name);
44
+ expect(piece).toEqual({
45
+ ...managedPiece,
46
+ schema,
47
+ });
48
+ });
49
+ test('getPiece returns null', async () => {
50
+ const kysely = mockKysely();
51
+ const name = 'name';
52
+ kysely.queries.executeTakeFirst.mockResolvedValueOnce(undefined);
53
+ const piece = await manager.getPiece(kysely.db, name);
54
+ expect(piece).toBeNull();
55
+ });
56
+ test('getPieces', async () => {
57
+ const kysely = mockKysely();
58
+ const managedPieces = [{ name: 'name' }];
59
+ kysely.queries.execute.mockResolvedValueOnce(managedPieces);
60
+ const pieces = await manager.getPieces(kysely.db);
61
+ expect(kysely.db.selectFrom).toHaveBeenCalled();
62
+ expect(pieces).toEqual(managedPieces);
63
+ });
64
+ test('deletePiece', async () => {
65
+ const kysely = mockKysely();
66
+ const name = 'name';
67
+ await manager.deletePiece(kysely.db, name);
68
+ expect(kysely.db.deleteFrom).toHaveBeenCalled();
69
+ expect(kysely.queries.where).toHaveBeenCalledWith('name', '=', name);
70
+ });
71
+ });
72
+ //# sourceMappingURL=manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../../src/pieces/manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { JSONSchemaType } from "ajv";
2
+ type PieceFrontMatterValue = string | number | boolean | string[] | number[] | boolean[];
3
+ type PieceFrontmatter = {
4
+ [key: string]: PieceFrontMatterValue;
5
+ };
6
+ type PieceFrontmatterSchema<M extends PieceFrontmatter> = JSONSchemaType<M>;
7
+ type PieceFrontmatterSchemaFieldScalar = {
8
+ name: string;
9
+ type: 'string' | 'boolean' | 'integer';
10
+ format?: 'asset' | 'date' | 'comma-separated' | 'paragraph';
11
+ nullable?: boolean;
12
+ pattern?: string;
13
+ enum?: string[] | number[];
14
+ examples?: Array<string | number | boolean>;
15
+ default?: string | number | boolean;
16
+ };
17
+ type PieceFrontmatterSchemaFieldList = {
18
+ name: string;
19
+ type: 'array';
20
+ format?: undefined;
21
+ pattern?: undefined;
22
+ examples?: undefined;
23
+ default?: undefined;
24
+ nullable?: boolean;
25
+ enum?: string[] | number[];
26
+ items: Omit<PieceFrontmatterSchemaField, 'name'>;
27
+ };
28
+ type PieceFrontmatterSchemaField = PieceFrontmatterSchemaFieldScalar | PieceFrontmatterSchemaFieldList;
29
+ declare function getPieceFrontmatterSchemaFields<M extends PieceFrontmatter>(schema: PieceFrontmatterSchema<M>): Array<PieceFrontmatterSchemaField>;
30
+ declare function pieceFrontmatterValueToDatabaseValue(value: unknown, field: PieceFrontmatterSchemaField): unknown;
31
+ declare function databaseValueToPieceFrontmatterValue(value: unknown, field: PieceFrontmatterSchemaField): unknown;
32
+ declare function initializePieceFrontMatter<M extends PieceFrontmatter>(schema: PieceFrontmatterSchema<M>, minimal?: boolean): M;
33
+ export { type PieceFrontmatter, type PieceFrontmatterSchemaField, type PieceFrontmatterSchema, getPieceFrontmatterSchemaFields, pieceFrontmatterValueToDatabaseValue, databaseValueToPieceFrontmatterValue, initializePieceFrontMatter, };
@@ -0,0 +1,69 @@
1
+ function getPieceFrontmatterSchemaFields(schema) {
2
+ return Object.keys(schema.properties).map((key) => {
3
+ const required = Array.isArray(schema.required) ? schema.required : [];
4
+ const nullable = required.some(f => f === key) || schema.properties[key]?.nullable;
5
+ return { name: key, ...schema.properties[key], nullable };
6
+ });
7
+ }
8
+ function pieceFrontmatterValueToDatabaseValue(value, field) {
9
+ if (value === undefined) {
10
+ return null;
11
+ }
12
+ if (field.format === 'date') {
13
+ return new Date(value).getTime();
14
+ }
15
+ else if (field.format === 'comma-separated') {
16
+ return JSON.stringify(value.split(','));
17
+ }
18
+ else if (field.type === 'boolean') {
19
+ return value ? 1 : 0;
20
+ }
21
+ else if (field.type === 'array') {
22
+ return value.join(',');
23
+ }
24
+ return value;
25
+ }
26
+ function databaseValueToPieceFrontmatterValue(value, field) {
27
+ if (field.format === 'date') {
28
+ return new Date(value).toLocaleDateString();
29
+ }
30
+ else if (field.format === 'comma-separated') {
31
+ return JSON.parse(value).join(',');
32
+ }
33
+ else if (field.type === 'boolean') {
34
+ return value ? true : false;
35
+ }
36
+ else if (field.type === 'array') {
37
+ const values = value.split(',');
38
+ return values.map((v) => databaseValueToPieceFrontmatterValue(v, field.items));
39
+ }
40
+ else if (field.type === 'integer') {
41
+ return Number(value);
42
+ }
43
+ return value;
44
+ }
45
+ function initializePieceFrontMatter(schema, minimal = false) {
46
+ const frontmatter = {};
47
+ const fields = getPieceFrontmatterSchemaFields(schema);
48
+ for (const field of fields) {
49
+ const name = field.name;
50
+ const required = schema.required?.includes(name);
51
+ const isArray = field.type === 'array';
52
+ const examples = isArray ? field.items?.examples : field.examples;
53
+ const def = isArray ? field.items?.default : field.default;
54
+ const example = examples?.[0];
55
+ const hasInitialValue = def !== undefined || example !== undefined;
56
+ if (required || (!minimal && hasInitialValue)) {
57
+ const initialValue = def !== undefined ? def : example;
58
+ if (initialValue !== undefined) {
59
+ frontmatter[name] = isArray ? [initialValue] : initialValue;
60
+ }
61
+ else if (required) {
62
+ throw new Error(`can not initialize ${schema.title} field "${name}" as it is required but there are no examples or a default value`);
63
+ }
64
+ }
65
+ }
66
+ return frontmatter;
67
+ }
68
+ export { getPieceFrontmatterSchemaFields, pieceFrontmatterValueToDatabaseValue, databaseValueToPieceFrontmatterValue, initializePieceFrontMatter, };
69
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../../../src/pieces/utils/frontmatter.ts"],"names":[],"mappings":"AAiCA,SAAS,+BAA+B,CACvC,MAAiC;IAEjC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAA;QAElF,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAiC,CAAA;IACzF,CAAC,CAAC,CAAA;AACH,CAAC;AAED,SAAS,oCAAoC,CAAC,KAAc,EAAE,KAAkC;IAC/F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,KAAe,CAAC,CAAC,OAAO,EAAE,CAAA;IAC3C,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAE,KAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAQ,KAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,KAAgB,CAAA;AACxB,CAAC;AAED,SAAS,oCAAoC,CAC5C,KAAc,EACd,KAAkC;IAElC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,KAAe,CAAC,CAAC,kBAAkB,EAAE,CAAA;IACtD,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7C,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAC5B,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,MAAM,MAAM,GAAI,KAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvB,oCAAoC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAoC,CAAC,CACnF,CAAA;IACF,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,0BAA0B,CAClC,MAAiC,EACjC,UAAmB,KAAK;IAExB,MAAM,WAAW,GAAuE,EAAE,CAAA;IAC1F,MAAM,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAA;IAEtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAA;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;QAC1D,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,eAAe,GAAG,GAAG,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAA;QAElE,IAAI,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;YAEtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAChC,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAC5D,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CACd,sBAAsB,MAAM,CAAC,KAAK,WAAW,IAAI,kEAAkE,CACnH,CAAA;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,WAAgB,CAAA;AACxB,CAAC;AAED,OAAO,EAIN,+BAA+B,EAC/B,oCAAoC,EACpC,oCAAoC,EACpC,0BAA0B,GAC1B,CAAA"}
@@ -0,0 +1 @@
1
+ export {};