@luzzle/core 0.0.60 → 0.0.63

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 (81) hide show
  1. package/README.md +38 -8
  2. package/dist/src/index.d.ts +2 -2
  3. package/dist/src/index.js +2 -2
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/pieces/Piece.js +2 -2
  6. package/dist/src/pieces/Piece.js.map +1 -1
  7. package/dist/src/pieces/index.d.ts +1 -0
  8. package/dist/src/pieces/index.js +1 -0
  9. package/dist/src/pieces/index.js.map +1 -1
  10. package/dist/src/pieces/utils/piece.d.ts +3 -2
  11. package/dist/src/pieces/utils/piece.js +17 -14
  12. package/dist/src/pieces/utils/piece.js.map +1 -1
  13. package/dist/tsconfig.build.tsbuildinfo +1 -0
  14. package/package.json +12 -11
  15. package/dist/src/database/NodeSqliteDialect.test.d.ts +0 -1
  16. package/dist/src/database/NodeSqliteDialect.test.js +0 -104
  17. package/dist/src/database/NodeSqliteDialect.test.js.map +0 -1
  18. package/dist/src/database/client.test.d.ts +0 -1
  19. package/dist/src/database/client.test.js +0 -36
  20. package/dist/src/database/client.test.js.map +0 -1
  21. package/dist/src/database/migrations.test.d.ts +0 -1
  22. package/dist/src/database/migrations.test.js +0 -19
  23. package/dist/src/database/migrations.test.js.map +0 -1
  24. package/dist/src/database/utils.test.d.ts +0 -1
  25. package/dist/src/database/utils.test.js +0 -9
  26. package/dist/src/database/utils.test.js.map +0 -1
  27. package/dist/src/index.test.d.ts +0 -1
  28. package/dist/src/index.test.js +0 -9
  29. package/dist/src/index.test.js.map +0 -1
  30. package/dist/src/lib/ajv.test.d.ts +0 -1
  31. package/dist/src/lib/ajv.test.js +0 -49
  32. package/dist/src/lib/ajv.test.js.map +0 -1
  33. package/dist/src/lib/frontmatter.test.d.ts +0 -1
  34. package/dist/src/lib/frontmatter.test.js +0 -37
  35. package/dist/src/lib/frontmatter.test.js.map +0 -1
  36. package/dist/src/lib/markdown.test.d.ts +0 -1
  37. package/dist/src/lib/markdown.test.js +0 -34
  38. package/dist/src/lib/markdown.test.js.map +0 -1
  39. package/dist/src/llm/google.test.d.ts +0 -1
  40. package/dist/src/llm/google.test.js +0 -253
  41. package/dist/src/llm/google.test.js.map +0 -1
  42. package/dist/src/pieces/Piece.test.d.ts +0 -1
  43. package/dist/src/pieces/Piece.test.js +0 -628
  44. package/dist/src/pieces/Piece.test.js.map +0 -1
  45. package/dist/src/pieces/Pieces.test.d.ts +0 -1
  46. package/dist/src/pieces/Pieces.test.js +0 -325
  47. package/dist/src/pieces/Pieces.test.js.map +0 -1
  48. package/dist/src/pieces/cache.test.d.ts +0 -1
  49. package/dist/src/pieces/cache.test.js +0 -72
  50. package/dist/src/pieces/cache.test.js.map +0 -1
  51. package/dist/src/pieces/item.test.d.ts +0 -1
  52. package/dist/src/pieces/item.test.js +0 -243
  53. package/dist/src/pieces/item.test.js.map +0 -1
  54. package/dist/src/pieces/items.test.d.ts +0 -1
  55. package/dist/src/pieces/items.test.js +0 -103
  56. package/dist/src/pieces/items.test.js.map +0 -1
  57. package/dist/src/pieces/json.schema.test.d.ts +0 -1
  58. package/dist/src/pieces/json.schema.test.js +0 -27
  59. package/dist/src/pieces/json.schema.test.js.map +0 -1
  60. package/dist/src/pieces/manager.test.d.ts +0 -1
  61. package/dist/src/pieces/manager.test.js +0 -55
  62. package/dist/src/pieces/manager.test.js.map +0 -1
  63. package/dist/src/pieces/utils/frontmatter.path.test.d.ts +0 -1
  64. package/dist/src/pieces/utils/frontmatter.path.test.js +0 -319
  65. package/dist/src/pieces/utils/frontmatter.path.test.js.map +0 -1
  66. package/dist/src/pieces/utils/frontmatter.test.d.ts +0 -1
  67. package/dist/src/pieces/utils/frontmatter.test.js +0 -335
  68. package/dist/src/pieces/utils/frontmatter.test.js.map +0 -1
  69. package/dist/src/pieces/utils/markdown.test.d.ts +0 -1
  70. package/dist/src/pieces/utils/markdown.test.js +0 -38
  71. package/dist/src/pieces/utils/markdown.test.js.map +0 -1
  72. package/dist/src/pieces/utils/piece.test.d.ts +0 -1
  73. package/dist/src/pieces/utils/piece.test.js +0 -348
  74. package/dist/src/pieces/utils/piece.test.js.map +0 -1
  75. package/dist/src/storage/fs.test.d.ts +0 -1
  76. package/dist/src/storage/fs.test.js +0 -212
  77. package/dist/src/storage/fs.test.js.map +0 -1
  78. package/dist/test/db.d.ts +0 -3
  79. package/dist/test/db.js +0 -19
  80. package/dist/test/db.js.map +0 -1
  81. package/dist/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,13 +1,7 @@
1
1
  {
2
2
  "name": "@luzzle/core",
3
- "version": "0.0.60",
3
+ "version": "0.0.63",
4
4
  "author": "eleith",
5
- "scripts": {
6
- "lint": "eslint src",
7
- "build": "tsc",
8
- "test": "vitest run --coverage --silent",
9
- "migration:add": "bash ./src/database/migrations.sh"
10
- },
11
5
  "engines": {
12
6
  "node": ">=24"
13
7
  },
@@ -24,10 +18,11 @@
24
18
  "homepage": "https://github.com/eleith/luzzle",
25
19
  "description": "luzzle's core",
26
20
  "devDependencies": {
21
+ "@eslint/js": "9.22.0",
27
22
  "@types/async": "3.2.25",
28
23
  "@types/eslint": "9.6.1",
29
24
  "@types/mdast": "4.0.4",
30
- "@types/node": "22.12.0",
25
+ "@types/node": "24.12.4",
31
26
  "@vitest/coverage-v8": "3.2.4",
32
27
  "@vitest/ui": "3.2.4",
33
28
  "eslint": "9.22.0",
@@ -47,12 +42,18 @@
47
42
  "fdir": "6.5.0",
48
43
  "file-type": "21.3.0",
49
44
  "got": "14.6.5",
50
- "jsonpathly": "^3.0.0",
45
+ "jsonpathly": "3.0.0",
51
46
  "kysely": "0.28.17",
52
47
  "remark": "15.0.1",
53
48
  "remark-frontmatter": "5.0.0",
54
49
  "unist-util-visit": "5.0.0",
55
50
  "yaml": "2.7.0"
56
51
  },
57
- "type": "module"
58
- }
52
+ "type": "module",
53
+ "scripts": {
54
+ "lint": "eslint src",
55
+ "build": "tsc -p tsconfig.build.json",
56
+ "test": "vitest run --coverage --silent",
57
+ "migration:add": "bash ./src/database/migrations.sh"
58
+ }
59
+ }
@@ -1 +0,0 @@
1
- export {};
@@ -1,104 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { NodeSqliteDialect } from './NodeSqliteDialect.js';
3
- import { CompiledQuery, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'kysely';
4
- describe('NodeSqliteDialect', () => {
5
- let mockDb;
6
- let mockStatement;
7
- beforeEach(() => {
8
- mockStatement = {
9
- all: vi.fn(),
10
- run: vi.fn().mockReturnValue({ changes: 0, lastInsertRowid: 0 }),
11
- };
12
- mockDb = {
13
- prepare: vi.fn().mockReturnValue(mockStatement),
14
- close: vi.fn(),
15
- };
16
- });
17
- describe('NodeSqliteDialect', () => {
18
- it('should create adapter, introspector, compiler and driver', () => {
19
- const dialect = new NodeSqliteDialect({ database: mockDb });
20
- expect(dialect.createAdapter()).toBeInstanceOf(SqliteAdapter);
21
- expect(dialect.createQueryCompiler()).toBeInstanceOf(SqliteQueryCompiler);
22
- expect(dialect.createIntrospector({})).toBeInstanceOf(SqliteIntrospector);
23
- const driver = dialect.createDriver();
24
- expect(driver).toBeDefined();
25
- });
26
- });
27
- describe('NodeSqliteDriver', () => {
28
- it('should initialize and manage connections and transactions', async () => {
29
- const dialect = new NodeSqliteDialect({ database: mockDb });
30
- const driver = dialect.createDriver();
31
- await driver.init();
32
- const connection = await driver.acquireConnection();
33
- expect(connection).toBeDefined();
34
- await driver.beginTransaction(connection, {});
35
- expect(mockDb.prepare).toHaveBeenCalledWith('begin');
36
- expect(mockStatement.run).toHaveBeenCalled();
37
- await driver.commitTransaction(connection);
38
- expect(mockDb.prepare).toHaveBeenCalledWith('commit');
39
- await driver.rollbackTransaction(connection);
40
- expect(mockDb.prepare).toHaveBeenCalledWith('rollback');
41
- await driver.releaseConnection(connection);
42
- await driver.destroy();
43
- expect(mockDb.close).toHaveBeenCalled();
44
- });
45
- });
46
- describe('NodeSqliteConnection', () => {
47
- it('should execute read queries using stmt.all()', async () => {
48
- const dialect = new NodeSqliteDialect({ database: mockDb });
49
- const driver = dialect.createDriver();
50
- const connection = await driver.acquireConnection();
51
- mockStatement.all.mockReturnValue([{ id: 1 }]);
52
- const query = CompiledQuery.raw('SELECT * FROM users WHERE id = ?', [1]);
53
- const result = await connection.executeQuery(query);
54
- expect(mockDb.prepare).toHaveBeenCalledWith('SELECT * FROM users WHERE id = ?');
55
- expect(mockStatement.all).toHaveBeenCalledWith(1);
56
- expect(result).toEqual({ rows: [{ id: 1 }] });
57
- });
58
- it('should execute pragma queries using stmt.all()', async () => {
59
- const dialect = new NodeSqliteDialect({ database: mockDb });
60
- const driver = dialect.createDriver();
61
- const connection = await driver.acquireConnection();
62
- mockStatement.all.mockReturnValue([{ table: 'users' }]);
63
- const query = CompiledQuery.raw('PRAGMA table_info(users)');
64
- const result = await connection.executeQuery(query);
65
- expect(mockDb.prepare).toHaveBeenCalledWith('PRAGMA table_info(users)');
66
- expect(mockStatement.all).toHaveBeenCalledWith();
67
- expect(result).toEqual({ rows: [{ table: 'users' }] });
68
- });
69
- it('should execute returning queries using stmt.all()', async () => {
70
- const dialect = new NodeSqliteDialect({ database: mockDb });
71
- const driver = dialect.createDriver();
72
- const connection = await driver.acquireConnection();
73
- mockStatement.all.mockReturnValue([{ id: 2 }]);
74
- const query = CompiledQuery.raw('INSERT INTO users (name) VALUES (?) RETURNING id', ['test']);
75
- const result = await connection.executeQuery(query);
76
- expect(mockDb.prepare).toHaveBeenCalledWith('INSERT INTO users (name) VALUES (?) RETURNING id');
77
- expect(mockStatement.all).toHaveBeenCalledWith('test');
78
- expect(result).toEqual({ rows: [{ id: 2 }] });
79
- });
80
- it('should execute write queries using stmt.run()', async () => {
81
- const dialect = new NodeSqliteDialect({ database: mockDb });
82
- const driver = dialect.createDriver();
83
- const connection = await driver.acquireConnection();
84
- mockStatement.run.mockReturnValue({ changes: 1, lastInsertRowid: 42 });
85
- const query = CompiledQuery.raw('UPDATE users SET name = ? WHERE id = ?', ['test', 1]);
86
- const result = await connection.executeQuery(query);
87
- expect(mockDb.prepare).toHaveBeenCalledWith('UPDATE users SET name = ? WHERE id = ?');
88
- expect(mockStatement.run).toHaveBeenCalledWith('test', 1);
89
- expect(result).toEqual({
90
- numAffectedRows: 1n,
91
- insertId: 42n,
92
- rows: [],
93
- });
94
- });
95
- it('should throw on streamQuery', async () => {
96
- const dialect = new NodeSqliteDialect({ database: mockDb });
97
- const driver = dialect.createDriver();
98
- const connection = await driver.acquireConnection();
99
- const stream = connection.streamQuery(CompiledQuery.raw('SELECT 1'));
100
- await expect(stream.next()).rejects.toThrow('NodeSqliteDialect does not support streaming');
101
- });
102
- });
103
- });
104
- //# sourceMappingURL=NodeSqliteDialect.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeSqliteDialect.test.js","sourceRoot":"","sources":["../../../src/database/NodeSqliteDialect.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect, vi, beforeEach } from 'vitest'\nimport { NodeSqliteDialect } from './NodeSqliteDialect.js'\nimport { CompiledQuery, Kysely, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, TransactionSettings } from 'kysely'\nimport type { DatabaseSync } from 'node:sqlite'\n\ndescribe('NodeSqliteDialect', () => {\n\tlet mockDb: { prepare: ReturnType<typeof vi.fn>; close: ReturnType<typeof vi.fn> }\n\tlet mockStatement: { all: ReturnType<typeof vi.fn>; run: ReturnType<typeof vi.fn> }\n\n\tbeforeEach(() => {\n\t\tmockStatement = {\n\t\t\tall: vi.fn(),\n\t\t\trun: vi.fn().mockReturnValue({ changes: 0, lastInsertRowid: 0 }),\n\t\t}\n\t\tmockDb = {\n\t\t\tprepare: vi.fn().mockReturnValue(mockStatement),\n\t\t\tclose: vi.fn(),\n\t\t}\n\t})\n\n\tdescribe('NodeSqliteDialect', () => {\n\t\tit('should create adapter, introspector, compiler and driver', () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\t\n\t\t\texpect(dialect.createAdapter()).toBeInstanceOf(SqliteAdapter)\n\t\t\texpect(dialect.createQueryCompiler()).toBeInstanceOf(SqliteQueryCompiler)\n\t\t\texpect(dialect.createIntrospector({} as Kysely<unknown>)).toBeInstanceOf(SqliteIntrospector)\n\t\t\t\n\t\t\tconst driver = dialect.createDriver()\n\t\t\texpect(driver).toBeDefined()\n\t\t})\n\t})\n\n\tdescribe('NodeSqliteDriver', () => {\n\t\tit('should initialize and manage connections and transactions', async () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\tconst driver = dialect.createDriver()\n\n\t\t\tawait driver.init()\n\t\t\tconst connection = await driver.acquireConnection()\n\t\t\texpect(connection).toBeDefined()\n\n\t\t\tawait driver.beginTransaction(connection, {} as TransactionSettings)\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('begin')\n\t\t\texpect(mockStatement.run).toHaveBeenCalled()\n\n\t\t\tawait driver.commitTransaction(connection)\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('commit')\n\n\t\t\tawait driver.rollbackTransaction(connection)\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('rollback')\n\n\t\t\tawait driver.releaseConnection(connection)\n\n\t\t\tawait driver.destroy()\n\t\t\texpect(mockDb.close).toHaveBeenCalled()\n\t\t})\n\t})\n\n\tdescribe('NodeSqliteConnection', () => {\n\t\tit('should execute read queries using stmt.all()', async () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\tconst driver = dialect.createDriver()\n\t\t\tconst connection = await driver.acquireConnection()\n\n\t\t\tmockStatement.all.mockReturnValue([{ id: 1 }])\n\n\t\t\tconst query = CompiledQuery.raw('SELECT * FROM users WHERE id = ?', [1])\n\t\t\tconst result = await connection.executeQuery(query)\n\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('SELECT * FROM users WHERE id = ?')\n\t\t\texpect(mockStatement.all).toHaveBeenCalledWith(1)\n\t\t\texpect(result).toEqual({ rows: [{ id: 1 }] })\n\t\t})\n\n\t\tit('should execute pragma queries using stmt.all()', async () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\tconst driver = dialect.createDriver()\n\t\t\tconst connection = await driver.acquireConnection()\n\n\t\t\tmockStatement.all.mockReturnValue([{ table: 'users' }])\n\n\t\t\tconst query = CompiledQuery.raw('PRAGMA table_info(users)')\n\t\t\tconst result = await connection.executeQuery(query)\n\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('PRAGMA table_info(users)')\n\t\t\texpect(mockStatement.all).toHaveBeenCalledWith()\n\t\t\texpect(result).toEqual({ rows: [{ table: 'users' }] })\n\t\t})\n\n\t\tit('should execute returning queries using stmt.all()', async () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\tconst driver = dialect.createDriver()\n\t\t\tconst connection = await driver.acquireConnection()\n\n\t\t\tmockStatement.all.mockReturnValue([{ id: 2 }])\n\n\t\t\tconst query = CompiledQuery.raw('INSERT INTO users (name) VALUES (?) RETURNING id', ['test'])\n\t\t\tconst result = await connection.executeQuery(query)\n\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('INSERT INTO users (name) VALUES (?) RETURNING id')\n\t\t\texpect(mockStatement.all).toHaveBeenCalledWith('test')\n\t\t\texpect(result).toEqual({ rows: [{ id: 2 }] })\n\t\t})\n\n\t\tit('should execute write queries using stmt.run()', async () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\tconst driver = dialect.createDriver()\n\t\t\tconst connection = await driver.acquireConnection()\n\n\t\t\tmockStatement.run.mockReturnValue({ changes: 1, lastInsertRowid: 42 })\n\n\t\t\tconst query = CompiledQuery.raw('UPDATE users SET name = ? WHERE id = ?', ['test', 1])\n\t\t\tconst result = await connection.executeQuery(query)\n\n\t\t\texpect(mockDb.prepare).toHaveBeenCalledWith('UPDATE users SET name = ? WHERE id = ?')\n\t\t\texpect(mockStatement.run).toHaveBeenCalledWith('test', 1)\n\t\t\texpect(result).toEqual({\n\t\t\t\tnumAffectedRows: 1n,\n\t\t\t\tinsertId: 42n,\n\t\t\t\trows: [],\n\t\t\t})\n\t\t})\n\n\t\tit('should throw on streamQuery', async () => {\n\t\t\tconst dialect = new NodeSqliteDialect({ database: mockDb as unknown as DatabaseSync })\n\t\t\tconst driver = dialect.createDriver()\n\t\t\tconst connection = await driver.acquireConnection()\n\n\t\t\tconst stream = connection.streamQuery(CompiledQuery.raw('SELECT 1'))\n\t\t\tawait expect(stream.next()).rejects.toThrow('NodeSqliteDialect does not support streaming')\n\t\t})\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,36 +0,0 @@
1
- import { describe, expect, test, vi, afterEach } from 'vitest';
2
- import { DatabaseSync } from 'node:sqlite';
3
- import { Kysely } from 'kysely';
4
- import { NodeSqliteDialect } from './NodeSqliteDialect.js';
5
- import { getDatabaseClient } from './client.js';
6
- vi.mock('node:sqlite');
7
- vi.mock('kysely');
8
- vi.mock('./NodeSqliteDialect.js');
9
- const mocks = {
10
- DatabaseSync: vi.mocked(DatabaseSync),
11
- Kysely: vi.mocked(Kysely),
12
- NodeSqliteDialect: vi.mocked(NodeSqliteDialect),
13
- };
14
- describe('database', () => {
15
- afterEach(() => {
16
- vi.resetAllMocks();
17
- });
18
- test('getDatabaseClient', async () => {
19
- const path = 'path/to/db.sqlite';
20
- getDatabaseClient(path);
21
- expect(mocks.DatabaseSync).toHaveBeenCalledWith(path);
22
- expect(mocks.NodeSqliteDialect).toHaveBeenCalledOnce();
23
- expect(mocks.Kysely).toHaveBeenCalledOnce();
24
- });
25
- test('getDatabaseClient debug', async () => {
26
- const path = 'path/to/db.sqlite';
27
- getDatabaseClient(path, true);
28
- expect(mocks.DatabaseSync).toHaveBeenCalledWith(path);
29
- expect(mocks.NodeSqliteDialect).toHaveBeenCalledOnce();
30
- expect(mocks.Kysely).toHaveBeenCalledWith({
31
- log: ['query', 'error'],
32
- dialect: expect.anything(),
33
- });
34
- });
35
- });
36
- //# sourceMappingURL=client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/database/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AACtB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACjB,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AAEjC,MAAM,KAAK,GAAG;IACb,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;IACrC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IACzB,iBAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;CAC/C,CAAA;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAI,GAAG,mBAAmB,CAAA;QAEhC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAEvB,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,GAAG,mBAAmB,CAAA;QAEhC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;YACzC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, test, vi, afterEach } from 'vitest'\nimport { DatabaseSync } from 'node:sqlite'\nimport { Kysely } from 'kysely'\nimport { NodeSqliteDialect } from './NodeSqliteDialect.js'\nimport { getDatabaseClient } from './client.js'\n\nvi.mock('node:sqlite')\nvi.mock('kysely')\nvi.mock('./NodeSqliteDialect.js')\n\nconst mocks = {\n\tDatabaseSync: vi.mocked(DatabaseSync),\n\tKysely: vi.mocked(Kysely),\n\tNodeSqliteDialect: vi.mocked(NodeSqliteDialect),\n}\n\ndescribe('database', () => {\n\tafterEach(() => {\n\t\tvi.resetAllMocks()\n\t})\n\n\ttest('getDatabaseClient', async () => {\n\t\tconst path = 'path/to/db.sqlite'\n\n\t\tgetDatabaseClient(path)\n\n\t\texpect(mocks.DatabaseSync).toHaveBeenCalledWith(path)\n\t\texpect(mocks.NodeSqliteDialect).toHaveBeenCalledOnce()\n\t\texpect(mocks.Kysely).toHaveBeenCalledOnce()\n\t})\n\n\ttest('getDatabaseClient debug', async () => {\n\t\tconst path = 'path/to/db.sqlite'\n\n\t\tgetDatabaseClient(path, true)\n\n\t\texpect(mocks.DatabaseSync).toHaveBeenCalledWith(path)\n\t\texpect(mocks.NodeSqliteDialect).toHaveBeenCalledOnce()\n\t\texpect(mocks.Kysely).toHaveBeenCalledWith({\n\t\t\tlog: ['query', 'error'],\n\t\t\tdialect: expect.anything(),\n\t\t})\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,19 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { getDatabaseClient } from './client.js';
3
- import migrate from './migrations.js';
4
- describe('src/database/migrations.ts', () => {
5
- test('migrator runs without error on a fresh database', async () => {
6
- const db = getDatabaseClient(':memory:');
7
- const result = await migrate(db);
8
- expect(result.error).toBeUndefined();
9
- await db.destroy();
10
- });
11
- test('migrator is idempotent', async () => {
12
- const db = getDatabaseClient(':memory:');
13
- await migrate(db);
14
- const result = await migrate(db);
15
- expect(result.error).toBeUndefined();
16
- await db.destroy();
17
- });
18
- });
19
- //# sourceMappingURL=migrations.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrations.test.js","sourceRoot":"","sources":["../../../src/database/migrations.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,OAAO,MAAM,iBAAiB,CAAA;AAErC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAA;QAEhC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAA;QACpC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,EAAE,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAA;QACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAA;QAEhC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAA;QACpC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, test } from 'vitest'\nimport { getDatabaseClient } from './client.js'\nimport migrate from './migrations.js'\n\ndescribe('src/database/migrations.ts', () => {\n\ttest('migrator runs without error on a fresh database', async () => {\n\t\tconst db = getDatabaseClient(':memory:')\n\t\tconst result = await migrate(db)\n\n\t\texpect(result.error).toBeUndefined()\n\t\tawait db.destroy()\n\t})\n\n\ttest('migrator is idempotent', async () => {\n\t\tconst db = getDatabaseClient(':memory:')\n\t\tawait migrate(db)\n\t\tconst result = await migrate(db)\n\n\t\texpect(result.error).toBeUndefined()\n\t\tawait db.destroy()\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,9 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import * as index from './utils.js';
3
- // https://github.com/vitest-dev/vitest/issues/3605
4
- describe('src/database/util.ts', () => {
5
- test('schema', () => {
6
- expect(index).toBeDefined();
7
- });
8
- });
9
- //# sourceMappingURL=utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../src/database/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,mDAAmD;AAEnD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;QACnB,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, test } from 'vitest'\nimport * as index from './utils.js'\n\n// https://github.com/vitest-dev/vitest/issues/3605\n\ndescribe('src/database/util.ts', () => {\n\ttest('schema', () => {\n\t\texpect(index).toBeDefined()\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,9 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import * as index from './index.js';
3
- // https://github.com/vitest-dev/vitest/issues/3605
4
- describe('index.ts', () => {
5
- test('schema', () => {
6
- expect(index).toBeDefined();
7
- });
8
- });
9
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,mDAAmD;AAEnD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;QACnB,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, test } from 'vitest'\nimport * as index from './index.js'\n\n// https://github.com/vitest-dev/vitest/issues/3605\n\ndescribe('index.ts', () => {\n\ttest('schema', () => {\n\t\texpect(index).toBeDefined()\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,49 +0,0 @@
1
- import { describe, expect, test, vi, afterEach } from 'vitest';
2
- import { makeSchema } from '../pieces/Piece.fixtures.js';
3
- import Ajv from 'ajv';
4
- import ajv, { assetFormatValidator, dateFormatValidator, commaSeparatedFormatValidator, paragraphFormatValidator, markdownFormatValidator } from './ajv.js';
5
- vi.mock('ajv');
6
- const mocks = {
7
- Ajv: vi.mocked(Ajv),
8
- compile: vi.mocked(Ajv.prototype.compile),
9
- addFormat: vi.mocked(Ajv.prototype.addFormat),
10
- };
11
- const spies = {};
12
- describe('src/lib/ajv.ts', () => {
13
- afterEach(() => {
14
- Object.values(mocks).forEach((mock) => {
15
- mock.mockReset();
16
- });
17
- Object.keys(spies).forEach((key) => {
18
- spies[key].mockRestore();
19
- delete spies[key];
20
- });
21
- });
22
- test('ajv', () => {
23
- const schema = makeSchema();
24
- ajv(schema);
25
- expect(mocks.Ajv).toHaveBeenCalledTimes(1);
26
- expect(mocks.compile).toHaveBeenCalledWith(schema);
27
- });
28
- test('commaSeparatedFormatValidator', () => {
29
- expect(commaSeparatedFormatValidator('a,b,c')).toBe(true);
30
- });
31
- test('dateFormatValidator', () => {
32
- expect(dateFormatValidator('2020-01-01')).toBe(true);
33
- expect(dateFormatValidator('2020-01-32')).toBe(false);
34
- });
35
- test('assetFormatValidtor', () => {
36
- expect(assetFormatValidator('.assets/1/2/3')).toBe(true);
37
- expect(assetFormatValidator('./home/to/nowhere/5.jpg')).toBe(false);
38
- });
39
- test('paragraphFormatValidtor', () => {
40
- expect(paragraphFormatValidator('hi there')).toBe(true);
41
- });
42
- test('paragraphFormatValidtor', () => {
43
- expect(paragraphFormatValidator('hi there')).toBe(true);
44
- });
45
- test('markdownFormatValidtor', () => {
46
- expect(markdownFormatValidator('hi there')).toBe(true);
47
- });
48
- });
49
- //# sourceMappingURL=ajv.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ajv.test.js","sourceRoot":"","sources":["../../../src/lib/ajv.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, test, vi, afterEach, MockInstance } from 'vitest'\nimport { makeSchema } from '../pieces/Piece.fixtures.js'\nimport Ajv from 'ajv'\nimport ajv, {\n\tassetFormatValidator,\n\tdateFormatValidator,\n\tcommaSeparatedFormatValidator,\n\tparagraphFormatValidator,\n\tmarkdownFormatValidator\n} from './ajv.js'\n\nvi.mock('ajv')\n\nconst mocks = {\n\tAjv: vi.mocked(Ajv),\n\tcompile: vi.mocked(Ajv.prototype.compile),\n\taddFormat: vi.mocked(Ajv.prototype.addFormat),\n}\n\nconst spies: { [key: string]: MockInstance } = {}\n\ndescribe('src/lib/ajv.ts', () => {\n\tafterEach(() => {\n\t\tObject.values(mocks).forEach((mock) => {\n\t\t\tmock.mockReset()\n\t\t})\n\n\t\tObject.keys(spies).forEach((key) => {\n\t\t\tspies[key].mockRestore()\n\t\t\tdelete spies[key]\n\t\t})\n\t})\n\n\ttest('ajv', () => {\n\t\tconst schema = makeSchema()\n\n\t\tajv(schema)\n\n\t\texpect(mocks.Ajv).toHaveBeenCalledTimes(1)\n\t\texpect(mocks.compile).toHaveBeenCalledWith(schema)\n\t})\n\n\ttest('commaSeparatedFormatValidator', () => {\n\t\texpect(commaSeparatedFormatValidator('a,b,c')).toBe(true)\n\t})\n\n\ttest('dateFormatValidator', () => {\n\t\texpect(dateFormatValidator('2020-01-01')).toBe(true)\n\t\texpect(dateFormatValidator('2020-01-32')).toBe(false)\n\t})\n\n\ttest('assetFormatValidtor', () => {\n\t\texpect(assetFormatValidator('.assets/1/2/3')).toBe(true)\n\t\texpect(assetFormatValidator('./home/to/nowhere/5.jpg')).toBe(false)\n\t})\n\n\ttest('paragraphFormatValidtor', () => {\n\t\texpect(paragraphFormatValidator('hi there')).toBe(true)\n\t})\n\n\ttest('paragraphFormatValidtor', () => {\n\t\texpect(paragraphFormatValidator('hi there')).toBe(true)\n\t})\n\n\ttest('markdownFormatValidtor', () => {\n\t\texpect(markdownFormatValidator('hi there')).toBe(true)\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,37 +0,0 @@
1
- import { describe, expect, test, vi, afterEach } from 'vitest';
2
- import * as frontmatter from './frontmatter.js';
3
- import { stringify } from 'yaml';
4
- vi.mock('yaml');
5
- const mocks = {
6
- stringify: vi.mocked(stringify),
7
- };
8
- describe('lib/frontmatter.ts', () => {
9
- afterEach(() => {
10
- Object.values(mocks).forEach((mock) => {
11
- mock.mockReset();
12
- mock.mockClear();
13
- });
14
- });
15
- test('addFrontMatter', () => {
16
- const markdown = 'this is markdown';
17
- const metadata = {
18
- a: 'awesome',
19
- b: 'banana',
20
- };
21
- const yamlstring = 'yaml-front-matter';
22
- mocks.stringify.mockReturnValueOnce(yamlstring);
23
- const combined = frontmatter.addFrontMatter(markdown, metadata);
24
- expect(combined).toBe(`---\n${yamlstring}---\n${markdown}\n`);
25
- });
26
- test('addFrontMatter with no markdown', () => {
27
- const metadata = {
28
- a: 'awesome',
29
- b: 'banana',
30
- };
31
- const yamlstring = 'yaml-front-matter';
32
- mocks.stringify.mockReturnValueOnce(yamlstring);
33
- const combined = frontmatter.addFrontMatter(null, metadata);
34
- expect(combined).toBe(`---\n${yamlstring}---\n\n`);
35
- });
36
- });
37
- //# sourceMappingURL=frontmatter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frontmatter.test.js","sourceRoot":"","sources":["../../../src/lib/frontmatter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEhC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAEf,MAAM,KAAK,GAAG;IACb,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;CAC/B,CAAA;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,EAAE,CAAA;YAChB,IAAI,CAAC,SAAS,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC3B,MAAM,QAAQ,GAAG,kBAAkB,CAAA;QACnC,MAAM,QAAQ,GAAG;YAChB,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,QAAQ;SACX,CAAA;QACD,MAAM,UAAU,GAAG,mBAAmB,CAAA;QAEtC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,UAAU,QAAQ,QAAQ,IAAI,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG;YAChB,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,QAAQ;SACX,CAAA;QACD,MAAM,UAAU,GAAG,mBAAmB,CAAA;QAEtC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,UAAU,SAAS,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, test, vi, afterEach } from 'vitest'\nimport * as frontmatter from './frontmatter.js'\nimport { stringify } from 'yaml'\n\nvi.mock('yaml')\n\nconst mocks = {\n\tstringify: vi.mocked(stringify),\n}\n\ndescribe('lib/frontmatter.ts', () => {\n\tafterEach(() => {\n\t\tObject.values(mocks).forEach((mock) => {\n\t\t\tmock.mockReset()\n\t\t\tmock.mockClear()\n\t\t})\n\t})\n\n\ttest('addFrontMatter', () => {\n\t\tconst markdown = 'this is markdown'\n\t\tconst metadata = {\n\t\t\ta: 'awesome',\n\t\t\tb: 'banana',\n\t\t}\n\t\tconst yamlstring = 'yaml-front-matter'\n\n\t\tmocks.stringify.mockReturnValueOnce(yamlstring)\n\n\t\tconst combined = frontmatter.addFrontMatter(markdown, metadata)\n\t\texpect(combined).toBe(`---\\n${yamlstring}---\\n${markdown}\\n`)\n\t})\n\n\ttest('addFrontMatter with no markdown', () => {\n\t\tconst metadata = {\n\t\t\ta: 'awesome',\n\t\t\tb: 'banana',\n\t\t}\n\t\tconst yamlstring = 'yaml-front-matter'\n\n\t\tmocks.stringify.mockReturnValueOnce(yamlstring)\n\n\t\tconst combined = frontmatter.addFrontMatter(null, metadata)\n\t\texpect(combined).toBe(`---\\n${yamlstring}---\\n\\n`)\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,34 +0,0 @@
1
- import { describe, expect, test, afterEach } from 'vitest';
2
- import * as markdown from './markdown.js';
3
- const mocks = {};
4
- describe('./lib/markdown.ts', () => {
5
- afterEach(() => {
6
- Object.values(mocks).forEach(() => {
7
- //mock.mockReset()
8
- //mock.mockClear()
9
- });
10
- });
11
- test('extract markdown and frontmatter', async () => {
12
- const contents = '---\na: awesome\nb: banana\n---\nthis is markdown';
13
- const extracted = await markdown.extractFullMarkdown(contents);
14
- expect(extracted.frontmatter).toEqual({ a: 'awesome', b: 'banana' });
15
- expect(extracted.markdown).toBe('this is markdown');
16
- });
17
- test('should not escape footnotes', async () => {
18
- const contents = `---
19
- a: awesome
20
- b: banana
21
- ---
22
- Here is a footnote reference,[^1] and another.[^longnote]
23
-
24
- [^1]: Here is the footnote.
25
- [^longnote]: Here's one with multiple blocks.
26
- `;
27
- const extracted = await markdown.extractFullMarkdown(contents);
28
- expect(extracted.markdown).toBe(`Here is a footnote reference,[^1] and another.[^longnote]
29
-
30
- [^1]: Here is the footnote.
31
- [^longnote]: Here's one with multiple blocks.`);
32
- });
33
- });
34
- //# sourceMappingURL=markdown.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.test.js","sourceRoot":"","sources":["../../../src/lib/markdown.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,MAAM,KAAK,GAAG,EAAE,CAAA;AAEhB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACjC,kBAAkB;YAClB,kBAAkB;QACnB,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEH,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,QAAQ,GAAG,mDAAmD,CAAA;QAEpE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAE9D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QACpE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,QAAQ,GAAG;;;;;;;;CAQlB,CAAA;QACC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAC9D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC9B;;;8CAG2C,CAC3C,CAAA;IACF,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, test, afterEach } from 'vitest'\nimport * as markdown from './markdown.js'\n\nconst mocks = {}\n\ndescribe('./lib/markdown.ts', () => {\n\tafterEach(() => {\n\t\tObject.values(mocks).forEach(() => {\n\t\t\t//mock.mockReset()\n\t\t\t//mock.mockClear()\n\t\t})\n\t})\n\ntest('extract markdown and frontmatter', async () => {\n\t\tconst contents = '---\\na: awesome\\nb: banana\\n---\\nthis is markdown'\n\n\t\tconst extracted = await markdown.extractFullMarkdown(contents)\n\n\t\texpect(extracted.frontmatter).toEqual({ a: 'awesome', b: 'banana' })\n\t\texpect(extracted.markdown).toBe('this is markdown')\n\t})\n\n\ttest('should not escape footnotes', async () => {\n\t\tconst contents = `--- \na: awesome\nb: banana\n---\nHere is a footnote reference,[^1] and another.[^longnote]\n\n[^1]: Here is the footnote.\n[^longnote]: Here's one with multiple blocks.\n`\n\t\tconst extracted = await markdown.extractFullMarkdown(contents)\n\t\texpect(extracted.markdown).toBe(\n\t\t\t`Here is a footnote reference,[^1] and another.[^longnote]\n\n[^1]: Here is the footnote.\n[^longnote]: Here's one with multiple blocks.`\n\t\t)\n\t})\n})\n"]}
@@ -1 +0,0 @@
1
- export {};