@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.
- package/README.md +41 -0
- package/dist/src/database/client.d.ts +4 -0
- package/dist/src/database/client.js +12 -0
- package/dist/src/database/client.js.map +1 -0
- package/dist/src/database/client.test.d.ts +1 -0
- package/dist/src/database/client.test.js +34 -0
- package/dist/src/database/client.test.js.map +1 -0
- package/dist/src/database/database.mock.d.ts +22 -0
- package/dist/src/database/database.mock.js +42 -0
- package/dist/src/database/database.mock.js.map +1 -0
- package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.d.ts +3 -0
- package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.js +49 -0
- package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.js.map +1 -0
- package/dist/src/database/migrations/2023-10-30T23:24:40Z.d.ts +3 -0
- package/dist/src/database/migrations/2023-10-30T23:24:40Z.js +35 -0
- package/dist/src/database/migrations/2023-10-30T23:24:40Z.js.map +1 -0
- package/dist/src/database/migrations/2023-11-22T14:55:18Z.d.ts +3 -0
- package/dist/src/database/migrations/2023-11-22T14:55:18Z.js +16 -0
- package/dist/src/database/migrations/2023-11-22T14:55:18Z.js.map +1 -0
- package/dist/src/database/migrations/2023-11-27T04:32:07Z.d.ts +3 -0
- package/dist/src/database/migrations/2023-11-27T04:32:07Z.js +30 -0
- package/dist/src/database/migrations/2023-11-27T04:32:07Z.js.map +1 -0
- package/dist/src/database/migrations/2024-01-01T23:30:29Z.d.ts +3 -0
- package/dist/src/database/migrations/2024-01-01T23:30:29Z.js +11 -0
- package/dist/src/database/migrations/2024-01-01T23:30:29Z.js.map +1 -0
- package/dist/src/database/migrations/2024-01-06T15:52:43Z.d.ts +3 -0
- package/dist/src/database/migrations/2024-01-06T15:52:43Z.js +16 -0
- package/dist/src/database/migrations/2024-01-06T15:52:43Z.js.map +1 -0
- package/dist/src/database/migrations/2024-02-09T16:33:10Z.d.ts +3 -0
- package/dist/src/database/migrations/2024-02-09T16:33:10Z.js +37 -0
- package/dist/src/database/migrations/2024-02-09T16:33:10Z.js.map +1 -0
- package/dist/src/database/migrations/2024-02-13T05:56:43Z.d.ts +3 -0
- package/dist/src/database/migrations/2024-02-13T05:56:43Z.js +116 -0
- package/dist/src/database/migrations/2024-02-13T05:56:43Z.js.map +1 -0
- package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.d.ts +3 -0
- package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.js +42 -0
- package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.js.map +1 -0
- package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.d.ts +3 -0
- package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.js +20 -0
- package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.js.map +1 -0
- package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.d.ts +3 -0
- package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.js +43 -0
- package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.js.map +1 -0
- package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.d.ts +3 -0
- package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.js +54 -0
- package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.js.map +1 -0
- package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.d.ts +3 -0
- package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.js +23 -0
- package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.js.map +1 -0
- package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.d.ts +3 -0
- package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.js +17 -0
- package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.js.map +1 -0
- package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.d.ts +3 -0
- package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.js +15 -0
- package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.js.map +1 -0
- package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.d.ts +3 -0
- package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.js +26 -0
- package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.js.map +1 -0
- package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.d.ts +3 -0
- package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.js +24 -0
- package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.js.map +1 -0
- package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.d.ts +3 -0
- package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.js +54 -0
- package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.js.map +1 -0
- package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.d.ts +3 -0
- package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.js +10 -0
- package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.js.map +1 -0
- package/dist/src/database/migrations.d.ts +3 -0
- package/dist/src/database/migrations.js +16 -0
- package/dist/src/database/migrations.js.map +1 -0
- package/dist/src/database/migrations.test.d.ts +1 -0
- package/dist/src/database/migrations.test.js +37 -0
- package/dist/src/database/migrations.test.js.map +1 -0
- package/dist/src/database/tables/index.d.ts +21 -0
- package/dist/src/database/tables/index.js +7 -0
- package/dist/src/database/tables/index.js.map +1 -0
- package/dist/src/database/tables/pieces_cache.schema.d.ts +13 -0
- package/dist/src/database/tables/pieces_cache.schema.js +2 -0
- package/dist/src/database/tables/pieces_cache.schema.js.map +1 -0
- package/dist/src/database/tables/pieces_items.schema.d.ts +16 -0
- package/dist/src/database/tables/pieces_items.schema.js +2 -0
- package/dist/src/database/tables/pieces_items.schema.js.map +1 -0
- package/dist/src/database/tables/pieces_manager.schema.d.ts +13 -0
- package/dist/src/database/tables/pieces_manager.schema.js +2 -0
- package/dist/src/database/tables/pieces_manager.schema.js.map +1 -0
- package/dist/src/database/utils.d.ts +8 -0
- package/dist/src/database/utils.js +2 -0
- package/dist/src/database/utils.js.map +1 -0
- package/dist/src/database/utils.test.d.ts +1 -0
- package/dist/src/database/utils.test.js +9 -0
- package/dist/src/database/utils.test.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +1 -0
- package/dist/src/index.test.js +9 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/lib/ajv.d.ts +6 -0
- package/dist/src/lib/ajv.js +25 -0
- package/dist/src/lib/ajv.js.map +1 -0
- package/dist/src/lib/ajv.test.d.ts +1 -0
- package/dist/src/lib/ajv.test.js +43 -0
- package/dist/src/lib/ajv.test.js.map +1 -0
- package/dist/src/lib/frontmatter.d.ts +4 -0
- package/dist/src/lib/frontmatter.js +8 -0
- package/dist/src/lib/frontmatter.js.map +1 -0
- package/dist/src/lib/frontmatter.test.d.ts +1 -0
- package/dist/src/lib/frontmatter.test.js +37 -0
- package/dist/src/lib/frontmatter.test.js.map +1 -0
- package/dist/src/lib/markdown.d.ts +7 -0
- package/dist/src/lib/markdown.js +21 -0
- package/dist/src/lib/markdown.js.map +1 -0
- package/dist/src/lib/markdown.test.d.ts +1 -0
- package/dist/src/lib/markdown.test.js +34 -0
- package/dist/src/lib/markdown.test.js.map +1 -0
- package/dist/src/llm/google.d.ts +6 -0
- package/dist/src/llm/google.js +91 -0
- package/dist/src/llm/google.js.map +1 -0
- package/dist/src/llm/google.test.d.ts +1 -0
- package/dist/src/llm/google.test.js +253 -0
- package/dist/src/llm/google.test.js.map +1 -0
- package/dist/src/pieces/Piece.d.ts +66 -0
- package/dist/src/pieces/Piece.fixtures.d.ts +43 -0
- package/dist/src/pieces/Piece.fixtures.js +83 -0
- package/dist/src/pieces/Piece.fixtures.js.map +1 -0
- package/dist/src/pieces/Piece.js +256 -0
- package/dist/src/pieces/Piece.js.map +1 -0
- package/dist/src/pieces/Piece.test.d.ts +1 -0
- package/dist/src/pieces/Piece.test.js +839 -0
- package/dist/src/pieces/Piece.test.js.map +1 -0
- package/dist/src/pieces/Pieces.d.ts +55 -0
- package/dist/src/pieces/Pieces.js +144 -0
- package/dist/src/pieces/Pieces.js.map +1 -0
- package/dist/src/pieces/Pieces.test.d.ts +1 -0
- package/dist/src/pieces/Pieces.test.js +327 -0
- package/dist/src/pieces/Pieces.test.js.map +1 -0
- package/dist/src/pieces/assets.d.ts +5 -0
- package/dist/src/pieces/assets.js +6 -0
- package/dist/src/pieces/assets.js.map +1 -0
- package/dist/src/pieces/cache.d.ts +20 -0
- package/dist/src/pieces/cache.fixtures.d.ts +3 -0
- package/dist/src/pieces/cache.fixtures.js +12 -0
- package/dist/src/pieces/cache.fixtures.js.map +1 -0
- package/dist/src/pieces/cache.js +49 -0
- package/dist/src/pieces/cache.js.map +1 -0
- package/dist/src/pieces/cache.test.d.ts +1 -0
- package/dist/src/pieces/cache.test.js +98 -0
- package/dist/src/pieces/cache.test.js.map +1 -0
- package/dist/src/pieces/index.d.ts +8 -0
- package/dist/src/pieces/index.js +9 -0
- package/dist/src/pieces/index.js.map +1 -0
- package/dist/src/pieces/item.d.ts +9 -0
- package/dist/src/pieces/item.js +79 -0
- package/dist/src/pieces/item.js.map +1 -0
- package/dist/src/pieces/item.test.d.ts +1 -0
- package/dist/src/pieces/item.test.js +215 -0
- package/dist/src/pieces/item.test.js.map +1 -0
- package/dist/src/pieces/items.d.ts +39 -0
- package/dist/src/pieces/items.js +45 -0
- package/dist/src/pieces/items.js.map +1 -0
- package/dist/src/pieces/items.test.d.ts +1 -0
- package/dist/src/pieces/items.test.js +100 -0
- package/dist/src/pieces/items.test.js.map +1 -0
- package/dist/src/pieces/json.schema.d.ts +6 -0
- package/dist/src/pieces/json.schema.js +58 -0
- package/dist/src/pieces/json.schema.js.map +1 -0
- package/dist/src/pieces/json.schema.test.d.ts +1 -0
- package/dist/src/pieces/json.schema.test.js +27 -0
- package/dist/src/pieces/json.schema.test.js.map +1 -0
- package/dist/src/pieces/manager.d.ts +22 -0
- package/dist/src/pieces/manager.js +43 -0
- package/dist/src/pieces/manager.js.map +1 -0
- package/dist/src/pieces/manager.test.d.ts +1 -0
- package/dist/src/pieces/manager.test.js +72 -0
- package/dist/src/pieces/manager.test.js.map +1 -0
- package/dist/src/pieces/utils/frontmatter.d.ts +33 -0
- package/dist/src/pieces/utils/frontmatter.js +69 -0
- package/dist/src/pieces/utils/frontmatter.js.map +1 -0
- package/dist/src/pieces/utils/frontmatter.test.d.ts +1 -0
- package/dist/src/pieces/utils/frontmatter.test.js +185 -0
- package/dist/src/pieces/utils/frontmatter.test.js.map +1 -0
- package/dist/src/pieces/utils/markdown.d.ts +10 -0
- package/dist/src/pieces/utils/markdown.js +9 -0
- package/dist/src/pieces/utils/markdown.js.map +1 -0
- package/dist/src/pieces/utils/markdown.test.d.ts +1 -0
- package/dist/src/pieces/utils/markdown.test.js +38 -0
- package/dist/src/pieces/utils/markdown.test.js.map +1 -0
- package/dist/src/pieces/utils/piece.d.ts +13 -0
- package/dist/src/pieces/utils/piece.fixtures.d.ts +19 -0
- package/dist/src/pieces/utils/piece.fixtures.js +39 -0
- package/dist/src/pieces/utils/piece.fixtures.js.map +1 -0
- package/dist/src/pieces/utils/piece.js +142 -0
- package/dist/src/pieces/utils/piece.js.map +1 -0
- package/dist/src/pieces/utils/piece.test.d.ts +1 -0
- package/dist/src/pieces/utils/piece.test.js +333 -0
- package/dist/src/pieces/utils/piece.test.js.map +1 -0
- package/dist/src/pieces/utils.d.ts +10 -0
- package/dist/src/pieces/utils.js +101 -0
- package/dist/src/pieces/utils.js.map +1 -0
- package/dist/src/pieces/utils.test.d.ts +1 -0
- package/dist/src/pieces/utils.test.js +372 -0
- package/dist/src/pieces/utils.test.js.map +1 -0
- package/dist/src/storage/abstract.d.ts +19 -0
- package/dist/src/storage/abstract.js +4 -0
- package/dist/src/storage/abstract.js.map +1 -0
- package/dist/src/storage/fs.d.ts +22 -0
- package/dist/src/storage/fs.js +84 -0
- package/dist/src/storage/fs.js.map +1 -0
- package/dist/src/storage/fs.test.d.ts +1 -0
- package/dist/src/storage/fs.test.js +222 -0
- package/dist/src/storage/fs.test.js.map +1 -0
- package/dist/src/storage/index.d.ts +5 -0
- package/dist/src/storage/index.js +4 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/storage.mock.d.ts +2 -0
- package/dist/src/storage/storage.mock.js +18 -0
- package/dist/src/storage/storage.mock.js.map +1 -0
- package/dist/src/storage/types.d.ts +6 -0
- package/dist/src/storage/types.js +2 -0
- package/dist/src/storage/types.js.map +1 -0
- package/dist/src/storage/webdav.d.ts +25 -0
- package/dist/src/storage/webdav.js +65 -0
- package/dist/src/storage/webdav.js.map +1 -0
- package/dist/src/storage/webdav.test.d.ts +1 -0
- package/dist/src/storage/webdav.test.js +194 -0
- package/dist/src/storage/webdav.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vite.config.d.ts +2 -0
- package/dist/vite.config.js +36 -0
- package/dist/vite.config.js.map +1 -0
- 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAgB,MAAM,QAAQ,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAc,GAAG,EAAE,MAAM,QAAQ,CAAA;AAExC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAC3B,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAEjB,MAAM,KAAK,GAAG;IACb,yBAAyB,EAAE,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC;IAC/D,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;CACnB,CAAA;AAED,MAAM,KAAK,GAAoC,EAAE,CAAA;AAEjD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,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,YAAY,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAEvC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAA;QACnB,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAEzC,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG;YACZ,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,KAAK;YACT,gBAAgB,EAAE,EAAE;YACpB,aAAa,EAAE,EAAE;SACjB,CAAA;QAED,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAEvC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAElC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAA;QACpB,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAE5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACpE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAA;QACrB,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAE7C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAChD,mBAAmB,EACnB,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAClB,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAoC,CAAC,CAAA;QACrF,KAAK,CAAC,YAAY,GAAG,EAAE;aACrB,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC;aAChC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAE1C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEtD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAEvC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEhC,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAEzC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -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":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|