@skillsmith/core 0.4.8 → 0.4.10

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 (240) hide show
  1. package/README.md +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/adapters/java-parsers.d.ts.map +1 -1
  4. package/dist/src/analysis/adapters/java-parsers.js +9 -2
  5. package/dist/src/analysis/adapters/java-parsers.js.map +1 -1
  6. package/dist/src/analytics/AnalyticsRepository.d.ts +1 -1
  7. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
  8. package/dist/src/analytics/ExperimentService.d.ts +1 -1
  9. package/dist/src/analytics/ExperimentService.d.ts.map +1 -1
  10. package/dist/src/analytics/ROIDashboardService.d.ts +1 -1
  11. package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -1
  12. package/dist/src/analytics/UsageAnalyticsService.d.ts +1 -1
  13. package/dist/src/analytics/UsageAnalyticsService.d.ts.map +1 -1
  14. package/dist/src/analytics/metrics-aggregator.d.ts +1 -1
  15. package/dist/src/analytics/metrics-aggregator.d.ts.map +1 -1
  16. package/dist/src/analytics/schema.d.ts +1 -1
  17. package/dist/src/analytics/schema.d.ts.map +1 -1
  18. package/dist/src/analytics/storage.d.ts.map +1 -1
  19. package/dist/src/analytics/storage.js +2 -2
  20. package/dist/src/analytics/storage.js.map +1 -1
  21. package/dist/src/api/client.d.ts +1 -0
  22. package/dist/src/api/client.d.ts.map +1 -1
  23. package/dist/src/api/client.js +14 -7
  24. package/dist/src/api/client.js.map +1 -1
  25. package/dist/src/api/schemas.d.ts +17 -10
  26. package/dist/src/api/schemas.d.ts.map +1 -1
  27. package/dist/src/api/schemas.js +9 -2
  28. package/dist/src/api/schemas.js.map +1 -1
  29. package/dist/src/billing/BillingService.d.ts.map +1 -1
  30. package/dist/src/billing/BillingService.js.map +1 -1
  31. package/dist/src/billing/BillingService.types.d.ts +2 -2
  32. package/dist/src/billing/BillingService.types.d.ts.map +1 -1
  33. package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -1
  34. package/dist/src/billing/GDPRComplianceService.js.map +1 -1
  35. package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -1
  36. package/dist/src/billing/StripeReconciliationJob.js.map +1 -1
  37. package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -1
  38. package/dist/src/billing/StripeWebhookHandler.js.map +1 -1
  39. package/dist/src/billing/gdpr-types.d.ts +2 -2
  40. package/dist/src/billing/gdpr-types.d.ts.map +1 -1
  41. package/dist/src/billing/reconciliation-types.d.ts +2 -2
  42. package/dist/src/billing/reconciliation-types.d.ts.map +1 -1
  43. package/dist/src/billing/webhook-handlers.d.ts +4 -4
  44. package/dist/src/billing/webhook-handlers.d.ts.map +1 -1
  45. package/dist/src/billing/webhook-handlers.js.map +1 -1
  46. package/dist/src/billing/webhook-types.d.ts +2 -2
  47. package/dist/src/billing/webhook-types.d.ts.map +1 -1
  48. package/dist/src/cache/TieredCache.d.ts.map +1 -1
  49. package/dist/src/cache/TieredCache.js +2 -2
  50. package/dist/src/cache/TieredCache.js.map +1 -1
  51. package/dist/src/cache/sqlite.d.ts.map +1 -1
  52. package/dist/src/cache/sqlite.js +5 -4
  53. package/dist/src/cache/sqlite.js.map +1 -1
  54. package/dist/src/db/createDatabase.d.ts +86 -0
  55. package/dist/src/db/createDatabase.d.ts.map +1 -0
  56. package/dist/src/db/createDatabase.js +139 -0
  57. package/dist/src/db/createDatabase.js.map +1 -0
  58. package/dist/src/db/database-interface.d.ts +141 -0
  59. package/dist/src/db/database-interface.d.ts.map +1 -0
  60. package/dist/src/db/database-interface.js +14 -0
  61. package/dist/src/db/database-interface.js.map +1 -0
  62. package/dist/src/db/drivers/betterSqlite3Driver.d.ts +48 -0
  63. package/dist/src/db/drivers/betterSqlite3Driver.d.ts.map +1 -0
  64. package/dist/src/db/drivers/betterSqlite3Driver.js +138 -0
  65. package/dist/src/db/drivers/betterSqlite3Driver.js.map +1 -0
  66. package/dist/src/db/drivers/index.d.ts +8 -0
  67. package/dist/src/db/drivers/index.d.ts.map +1 -0
  68. package/dist/src/db/drivers/index.js +8 -0
  69. package/dist/src/db/drivers/index.js.map +1 -0
  70. package/dist/src/db/drivers/sqljsDriver.d.ts +91 -0
  71. package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -0
  72. package/dist/src/db/drivers/sqljsDriver.js +335 -0
  73. package/dist/src/db/drivers/sqljsDriver.js.map +1 -0
  74. package/dist/src/db/migration.d.ts +1 -1
  75. package/dist/src/db/migration.d.ts.map +1 -1
  76. package/dist/src/db/quarantine-schema.d.ts +1 -1
  77. package/dist/src/db/quarantine-schema.d.ts.map +1 -1
  78. package/dist/src/db/schema.d.ts +22 -2
  79. package/dist/src/db/schema.d.ts.map +1 -1
  80. package/dist/src/db/schema.js +55 -3
  81. package/dist/src/db/schema.js.map +1 -1
  82. package/dist/src/embeddings/hnsw-store.js +2 -2
  83. package/dist/src/embeddings/hnsw-store.js.map +1 -1
  84. package/dist/src/embeddings/index.d.ts.map +1 -1
  85. package/dist/src/embeddings/index.js +2 -2
  86. package/dist/src/embeddings/index.js.map +1 -1
  87. package/dist/src/exports/repositories.d.ts +4 -1
  88. package/dist/src/exports/repositories.d.ts.map +1 -1
  89. package/dist/src/exports/repositories.js +9 -3
  90. package/dist/src/exports/repositories.js.map +1 -1
  91. package/dist/src/exports/services.d.ts +1 -0
  92. package/dist/src/exports/services.d.ts.map +1 -1
  93. package/dist/src/exports/services.js +4 -0
  94. package/dist/src/exports/services.js.map +1 -1
  95. package/dist/src/index.d.ts +4 -0
  96. package/dist/src/index.d.ts.map +1 -1
  97. package/dist/src/index.js +8 -0
  98. package/dist/src/index.js.map +1 -1
  99. package/dist/src/indexer/SkillParser.d.ts +20 -0
  100. package/dist/src/indexer/SkillParser.d.ts.map +1 -1
  101. package/dist/src/indexer/SkillParser.js +58 -0
  102. package/dist/src/indexer/SkillParser.js.map +1 -1
  103. package/dist/src/learning/PatternStore.d.ts.map +1 -1
  104. package/dist/src/learning/PatternStore.js +2 -7
  105. package/dist/src/learning/PatternStore.js.map +1 -1
  106. package/dist/src/learning/PatternStore.queries.d.ts +17 -17
  107. package/dist/src/learning/PatternStore.queries.d.ts.map +1 -1
  108. package/dist/src/learning/PatternStore.queries.js.map +1 -1
  109. package/dist/src/repositories/CacheRepository.d.ts +1 -1
  110. package/dist/src/repositories/CacheRepository.d.ts.map +1 -1
  111. package/dist/src/repositories/IndexerRepository.d.ts +1 -1
  112. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  113. package/dist/src/repositories/SkillRepository.d.ts +1 -1
  114. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  115. package/dist/src/repositories/SyncConfigRepository.d.ts +1 -1
  116. package/dist/src/repositories/SyncConfigRepository.d.ts.map +1 -1
  117. package/dist/src/repositories/SyncHistoryRepository.d.ts +1 -1
  118. package/dist/src/repositories/SyncHistoryRepository.d.ts.map +1 -1
  119. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +1 -1
  120. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
  121. package/dist/src/repositories/quarantine/QuarantineRepository.js +4 -1
  122. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
  123. package/dist/src/scripts/merge-skills.d.ts.map +1 -1
  124. package/dist/src/scripts/merge-skills.js +2 -2
  125. package/dist/src/scripts/merge-skills.js.map +1 -1
  126. package/dist/src/scripts/review-lenny-skills.js +2 -2
  127. package/dist/src/scripts/review-lenny-skills.js.map +1 -1
  128. package/dist/src/scripts/validation/types.d.ts +2 -2
  129. package/dist/src/search/hybrid.d.ts.map +1 -1
  130. package/dist/src/search/hybrid.js +2 -2
  131. package/dist/src/search/hybrid.js.map +1 -1
  132. package/dist/src/security/AuditLogger.d.ts +1 -1
  133. package/dist/src/security/AuditLogger.d.ts.map +1 -1
  134. package/dist/src/security/audit-types.d.ts +2 -2
  135. package/dist/src/security/audit-types.d.ts.map +1 -1
  136. package/dist/src/security/audit-types.js.map +1 -1
  137. package/dist/src/security/sanitization.d.ts.map +1 -1
  138. package/dist/src/security/sanitization.js +25 -17
  139. package/dist/src/security/sanitization.js.map +1 -1
  140. package/dist/src/services/SearchService.d.ts +1 -1
  141. package/dist/src/services/SearchService.d.ts.map +1 -1
  142. package/dist/src/services/TransformationService.d.ts +1 -1
  143. package/dist/src/services/TransformationService.d.ts.map +1 -1
  144. package/dist/src/services/index.d.ts +9 -0
  145. package/dist/src/services/index.d.ts.map +1 -0
  146. package/dist/src/services/index.js +10 -0
  147. package/dist/src/services/index.js.map +1 -0
  148. package/dist/src/services/quarantine/QuarantineService.d.ts +149 -0
  149. package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -0
  150. package/dist/src/services/quarantine/QuarantineService.js +406 -0
  151. package/dist/src/services/quarantine/QuarantineService.js.map +1 -0
  152. package/dist/src/services/quarantine/index.d.ts +10 -0
  153. package/dist/src/services/quarantine/index.d.ts.map +1 -0
  154. package/dist/src/services/quarantine/index.js +14 -0
  155. package/dist/src/services/quarantine/index.js.map +1 -0
  156. package/dist/src/services/quarantine/types.d.ts +127 -0
  157. package/dist/src/services/quarantine/types.d.ts.map +1 -0
  158. package/dist/src/services/quarantine/types.js +59 -0
  159. package/dist/src/services/quarantine/types.js.map +1 -0
  160. package/dist/src/types/skill.d.ts +6 -1
  161. package/dist/src/types/skill.d.ts.map +1 -1
  162. package/dist/src/types/skill.js.map +1 -1
  163. package/dist/src/types.d.ts +1 -1
  164. package/dist/src/types.d.ts.map +1 -1
  165. package/dist/src/utils/github-url.d.ts +57 -0
  166. package/dist/src/utils/github-url.d.ts.map +1 -0
  167. package/dist/src/utils/github-url.js +88 -0
  168. package/dist/src/utils/github-url.js.map +1 -0
  169. package/dist/src/utils/index.d.ts +2 -0
  170. package/dist/src/utils/index.d.ts.map +1 -1
  171. package/dist/src/utils/index.js +4 -0
  172. package/dist/src/utils/index.js.map +1 -1
  173. package/dist/src/utils/safe-fs.d.ts +63 -0
  174. package/dist/src/utils/safe-fs.d.ts.map +1 -0
  175. package/dist/src/utils/safe-fs.js +119 -0
  176. package/dist/src/utils/safe-fs.js.map +1 -0
  177. package/dist/src/validation/input-validators.d.ts.map +1 -1
  178. package/dist/src/validation/input-validators.js +11 -4
  179. package/dist/src/validation/input-validators.js.map +1 -1
  180. package/dist/tests/Analytics.integration.test.js +2 -2
  181. package/dist/tests/Analytics.integration.test.js.map +1 -1
  182. package/dist/tests/AnalyticsRepository.test.js +2 -2
  183. package/dist/tests/AnalyticsRepository.test.js.map +1 -1
  184. package/dist/tests/AuditLogger.test.js.map +1 -1
  185. package/dist/tests/ExperimentService.test.js +2 -2
  186. package/dist/tests/ExperimentService.test.js.map +1 -1
  187. package/dist/tests/QuarantineRepository.test.js +39 -2
  188. package/dist/tests/QuarantineRepository.test.js.map +1 -1
  189. package/dist/tests/ROIDashboardService.test.js +2 -2
  190. package/dist/tests/ROIDashboardService.test.js.map +1 -1
  191. package/dist/tests/UsageAnalyticsService.test.js +2 -2
  192. package/dist/tests/UsageAnalyticsService.test.js.map +1 -1
  193. package/dist/tests/analytics/metrics-aggregator.test.js +2 -2
  194. package/dist/tests/analytics/metrics-aggregator.test.js.map +1 -1
  195. package/dist/tests/analytics/metrics-exporter.test.js +2 -2
  196. package/dist/tests/analytics/metrics-exporter.test.js.map +1 -1
  197. package/dist/tests/api/client.structural-typing.test.d.ts +11 -0
  198. package/dist/tests/api/client.structural-typing.test.d.ts.map +1 -0
  199. package/dist/tests/api/client.structural-typing.test.js +209 -0
  200. package/dist/tests/api/client.structural-typing.test.js.map +1 -0
  201. package/dist/tests/billing/BillingService.test.js +2 -2
  202. package/dist/tests/billing/BillingService.test.js.map +1 -1
  203. package/dist/tests/billing/GDPRCompliance.test.js +2 -2
  204. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -1
  205. package/dist/tests/billing/StripeReconciliation.test.js +2 -2
  206. package/dist/tests/billing/StripeReconciliation.test.js.map +1 -1
  207. package/dist/tests/db/database-abstraction.test.d.ts +8 -0
  208. package/dist/tests/db/database-abstraction.test.d.ts.map +1 -0
  209. package/dist/tests/db/database-abstraction.test.js +208 -0
  210. package/dist/tests/db/database-abstraction.test.js.map +1 -0
  211. package/dist/tests/db/fts5-support.test.d.ts +14 -0
  212. package/dist/tests/db/fts5-support.test.d.ts.map +1 -0
  213. package/dist/tests/db/fts5-support.test.js +128 -0
  214. package/dist/tests/db/fts5-support.test.js.map +1 -0
  215. package/dist/tests/db/schema-async.test.d.ts +9 -0
  216. package/dist/tests/db/schema-async.test.d.ts.map +1 -0
  217. package/dist/tests/db/schema-async.test.js +302 -0
  218. package/dist/tests/db/schema-async.test.js.map +1 -0
  219. package/dist/tests/db/sqljs-driver.test.d.ts +8 -0
  220. package/dist/tests/db/sqljs-driver.test.d.ts.map +1 -0
  221. package/dist/tests/db/sqljs-driver.test.js +323 -0
  222. package/dist/tests/db/sqljs-driver.test.js.map +1 -0
  223. package/dist/tests/edge-cases/EdgeCases.test.js +5 -2
  224. package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -1
  225. package/dist/tests/integration/QuarantineService.test.d.ts +11 -0
  226. package/dist/tests/integration/QuarantineService.test.d.ts.map +1 -0
  227. package/dist/tests/integration/QuarantineService.test.js +378 -0
  228. package/dist/tests/integration/QuarantineService.test.js.map +1 -0
  229. package/dist/tests/schema.test.js.map +1 -1
  230. package/dist/tests/scripts/import-to-database.test.js +7 -7
  231. package/dist/tests/scripts/import-to-database.test.js.map +1 -1
  232. package/dist/tests/unit/check-references.test.d.ts +2 -0
  233. package/dist/tests/unit/check-references.test.d.ts.map +1 -0
  234. package/dist/tests/unit/check-references.test.js +118 -0
  235. package/dist/tests/unit/check-references.test.js.map +1 -0
  236. package/dist/tests/utils/safe-fs.test.d.ts +12 -0
  237. package/dist/tests/utils/safe-fs.test.d.ts.map +1 -0
  238. package/dist/tests/utils/safe-fs.test.js +116 -0
  239. package/dist/tests/utils/safe-fs.test.js.map +1 -0
  240. package/package.json +16 -10
@@ -0,0 +1,208 @@
1
+ /**
2
+ * SMI-2180: Database Abstraction Layer Tests
3
+ *
4
+ * Tests the database interface contracts and driver implementations.
5
+ * These tests should pass with any conforming driver (better-sqlite3, sql.js).
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
+ import { createDatabaseSync, createDatabaseAsync, detectAvailableDrivers, getBestDriver, } from '../../src/db/createDatabase.js';
9
+ import { isBetterSqlite3Available, BetterSqlite3Database, } from '../../src/db/drivers/betterSqlite3Driver.js';
10
+ describe('Database Abstraction Layer', () => {
11
+ describe('Driver Detection', () => {
12
+ it('should detect available drivers', () => {
13
+ const drivers = detectAvailableDrivers();
14
+ expect(drivers).toBeInstanceOf(Array);
15
+ expect(drivers.length).toBeGreaterThan(0);
16
+ // Each driver should have required fields
17
+ for (const driver of drivers) {
18
+ expect(driver).toHaveProperty('type');
19
+ expect(driver).toHaveProperty('available');
20
+ expect(typeof driver.available).toBe('boolean');
21
+ }
22
+ });
23
+ it('should get best available driver', () => {
24
+ const best = getBestDriver();
25
+ // In Docker environment, better-sqlite3 should be available
26
+ if (isBetterSqlite3Available()) {
27
+ expect(best).toBe('better-sqlite3');
28
+ }
29
+ });
30
+ it('should detect better-sqlite3 availability', () => {
31
+ const available = isBetterSqlite3Available();
32
+ expect(typeof available).toBe('boolean');
33
+ });
34
+ });
35
+ describe('Database Interface Contract', () => {
36
+ let db;
37
+ beforeEach(() => {
38
+ // Skip if no driver available
39
+ if (!isBetterSqlite3Available()) {
40
+ return;
41
+ }
42
+ db = createDatabaseSync(':memory:');
43
+ });
44
+ afterEach(() => {
45
+ if (db?.open) {
46
+ db.close();
47
+ }
48
+ });
49
+ it('should create in-memory database', () => {
50
+ if (!isBetterSqlite3Available())
51
+ return;
52
+ expect(db).toBeDefined();
53
+ expect(db.open).toBe(true);
54
+ expect(db.memory).toBe(true);
55
+ });
56
+ it('should execute raw SQL', () => {
57
+ if (!isBetterSqlite3Available())
58
+ return;
59
+ expect(() => {
60
+ db.exec(`
61
+ CREATE TABLE test (
62
+ id INTEGER PRIMARY KEY,
63
+ name TEXT NOT NULL
64
+ )
65
+ `);
66
+ }).not.toThrow();
67
+ });
68
+ it('should prepare and execute statements', () => {
69
+ if (!isBetterSqlite3Available())
70
+ return;
71
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
72
+ const insertStmt = db.prepare('INSERT INTO test (name) VALUES (?)');
73
+ const result = insertStmt.run('Alice');
74
+ expect(result.changes).toBe(1);
75
+ expect(result.lastInsertRowid).toBe(1);
76
+ });
77
+ it('should query single row with get()', () => {
78
+ if (!isBetterSqlite3Available())
79
+ return;
80
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
81
+ db.exec("INSERT INTO test (name) VALUES ('Alice'), ('Bob')");
82
+ const stmt = db.prepare('SELECT * FROM test WHERE name = ?');
83
+ const row = stmt.get('Alice');
84
+ expect(row).toEqual({ id: 1, name: 'Alice' });
85
+ });
86
+ it('should return undefined for non-existent row', () => {
87
+ if (!isBetterSqlite3Available())
88
+ return;
89
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
90
+ const stmt = db.prepare('SELECT * FROM test WHERE name = ?');
91
+ const row = stmt.get('NonExistent');
92
+ expect(row).toBeUndefined();
93
+ });
94
+ it('should query multiple rows with all()', () => {
95
+ if (!isBetterSqlite3Available())
96
+ return;
97
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
98
+ db.exec("INSERT INTO test (name) VALUES ('Alice'), ('Bob'), ('Charlie')");
99
+ const stmt = db.prepare('SELECT * FROM test');
100
+ const rows = stmt.all();
101
+ expect(rows).toHaveLength(3);
102
+ expect(rows[0].name).toBe('Alice');
103
+ expect(rows[1].name).toBe('Bob');
104
+ expect(rows[2].name).toBe('Charlie');
105
+ });
106
+ it('should iterate over rows with iterate()', () => {
107
+ if (!isBetterSqlite3Available())
108
+ return;
109
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
110
+ db.exec("INSERT INTO test (name) VALUES ('Alice'), ('Bob')");
111
+ const stmt = db.prepare('SELECT * FROM test');
112
+ const names = [];
113
+ for (const row of stmt.iterate()) {
114
+ names.push(row.name);
115
+ }
116
+ expect(names).toEqual(['Alice', 'Bob']);
117
+ });
118
+ it('should execute transactions', () => {
119
+ if (!isBetterSqlite3Available())
120
+ return;
121
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, balance INTEGER)');
122
+ db.exec('INSERT INTO test (balance) VALUES (100), (50)');
123
+ const transfer = () => {
124
+ const withdraw = db.prepare('UPDATE test SET balance = balance - ? WHERE id = ?');
125
+ const deposit = db.prepare('UPDATE test SET balance = balance + ? WHERE id = ?');
126
+ withdraw.run(30, 1);
127
+ deposit.run(30, 2);
128
+ return 'success';
129
+ };
130
+ // transaction() returns a callable function
131
+ const txn = db.transaction(transfer);
132
+ const result = txn();
133
+ expect(result).toBe('success');
134
+ // Verify balances
135
+ const stmt = db.prepare('SELECT balance FROM test WHERE id = ?');
136
+ expect(stmt.get(1)?.balance).toBe(70);
137
+ expect(stmt.get(2)?.balance).toBe(80);
138
+ });
139
+ it('should execute pragma statements', () => {
140
+ if (!isBetterSqlite3Available())
141
+ return;
142
+ // Set pragma
143
+ db.pragma('foreign_keys = ON');
144
+ // Get pragma value
145
+ const result = db.pragma('foreign_keys');
146
+ expect(result).toBeDefined();
147
+ });
148
+ it('should close database', () => {
149
+ if (!isBetterSqlite3Available())
150
+ return;
151
+ expect(db.open).toBe(true);
152
+ db.close();
153
+ expect(db.open).toBe(false);
154
+ });
155
+ it('should expose database properties', () => {
156
+ if (!isBetterSqlite3Available())
157
+ return;
158
+ expect(db.name).toBe(':memory:');
159
+ expect(db.memory).toBe(true);
160
+ expect(db.readonly).toBe(false);
161
+ });
162
+ });
163
+ describe('Async Database Creation', () => {
164
+ it('should create database asynchronously', async () => {
165
+ if (!isBetterSqlite3Available())
166
+ return;
167
+ const db = await createDatabaseAsync(':memory:');
168
+ expect(db).toBeDefined();
169
+ expect(db.open).toBe(true);
170
+ db.close();
171
+ });
172
+ });
173
+ describe('BetterSqlite3Database Wrapper', () => {
174
+ it('should provide access to native instance', () => {
175
+ if (!isBetterSqlite3Available())
176
+ return;
177
+ const db = createDatabaseSync(':memory:');
178
+ expect(db).toBeInstanceOf(BetterSqlite3Database);
179
+ const native = db.native;
180
+ expect(native).toBeDefined();
181
+ expect(native.open).toBe(true);
182
+ db.close();
183
+ });
184
+ });
185
+ describe('Error Handling', () => {
186
+ it('should throw on invalid SQL', () => {
187
+ if (!isBetterSqlite3Available())
188
+ return;
189
+ const db = createDatabaseSync(':memory:');
190
+ expect(() => {
191
+ db.exec('INVALID SQL STATEMENT');
192
+ }).toThrow();
193
+ db.close();
194
+ });
195
+ it('should throw on constraint violation', () => {
196
+ if (!isBetterSqlite3Available())
197
+ return;
198
+ const db = createDatabaseSync(':memory:');
199
+ db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT UNIQUE)');
200
+ db.exec("INSERT INTO test (name) VALUES ('Alice')");
201
+ expect(() => {
202
+ db.exec("INSERT INTO test (name) VALUES ('Alice')");
203
+ }).toThrow();
204
+ db.close();
205
+ });
206
+ });
207
+ });
208
+ //# sourceMappingURL=database-abstraction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-abstraction.test.js","sourceRoot":"","sources":["../../../tests/db/database-abstraction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * SMI-2182: FTS5 Support Test
3
+ *
4
+ * Tests whether the current sql.js installation has FTS5 support.
5
+ * FTS5 is required for full-text search capabilities.
6
+ *
7
+ * Standard sql.js builds do NOT include FTS5 by default.
8
+ * If this test fails, we need to build a custom sql.js with FTS5 enabled.
9
+ *
10
+ * @see https://github.com/niclaslindstedt/sql.js-fts5
11
+ * @see https://www.sqlite.org/fts5.html
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=fts5-support.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fts5-support.test.d.ts","sourceRoot":"","sources":["../../../tests/db/fts5-support.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * SMI-2182: FTS5 Support Test
3
+ *
4
+ * Tests whether the current sql.js installation has FTS5 support.
5
+ * FTS5 is required for full-text search capabilities.
6
+ *
7
+ * Standard sql.js builds do NOT include FTS5 by default.
8
+ * If this test fails, we need to build a custom sql.js with FTS5 enabled.
9
+ *
10
+ * @see https://github.com/niclaslindstedt/sql.js-fts5
11
+ * @see https://www.sqlite.org/fts5.html
12
+ */
13
+ import { describe, it, expect, afterEach } from 'vitest';
14
+ // Track database for cleanup
15
+ let db = null;
16
+ /**
17
+ * Load fts5-sql-bundle WASM module directly for this test
18
+ * fts5-sql-bundle has a built-in locateFile that correctly resolves the WASM file
19
+ */
20
+ async function loadSqlJs() {
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ const module = (await import('fts5-sql-bundle'));
23
+ const initSqlJs = module.default || module;
24
+ return initSqlJs();
25
+ }
26
+ describe('FTS5 Support Detection', () => {
27
+ afterEach(() => {
28
+ if (db) {
29
+ db.close();
30
+ db = null;
31
+ }
32
+ });
33
+ it('should detect FTS5 availability in sql.js', async () => {
34
+ const SQL = await loadSqlJs();
35
+ db = new SQL.Database();
36
+ let fts5Available = false;
37
+ let errorMessage = '';
38
+ try {
39
+ // Attempt to create an FTS5 virtual table
40
+ db.run(`
41
+ CREATE VIRTUAL TABLE test_fts USING fts5(content);
42
+ `);
43
+ fts5Available = true;
44
+ // If successful, test insertion and MATCH query
45
+ db.run(`INSERT INTO test_fts (content) VALUES ('hello world');`);
46
+ db.run(`INSERT INTO test_fts (content) VALUES ('goodbye world');`);
47
+ db.run(`INSERT INTO test_fts (content) VALUES ('hello there');`);
48
+ // Run a MATCH query
49
+ const stmt = db.prepare(`SELECT content FROM test_fts WHERE test_fts MATCH 'hello';`);
50
+ const results = [];
51
+ while (stmt.step()) {
52
+ const row = stmt.get();
53
+ results.push(row[0]);
54
+ }
55
+ stmt.free();
56
+ // Verify MATCH query works
57
+ expect(results).toHaveLength(2);
58
+ expect(results).toContain('hello world');
59
+ expect(results).toContain('hello there');
60
+ console.log('\n========================================');
61
+ console.log('FTS5 IS AVAILABLE in sql.js');
62
+ console.log('----------------------------------------');
63
+ console.log('FTS5 virtual table creation: SUCCESS');
64
+ console.log('FTS5 INSERT operations: SUCCESS');
65
+ console.log('FTS5 MATCH query: SUCCESS');
66
+ console.log(` - Found ${results.length} results for "hello"`);
67
+ console.log('========================================\n');
68
+ }
69
+ catch (error) {
70
+ fts5Available = false;
71
+ errorMessage = error instanceof Error ? error.message : String(error);
72
+ console.log('\n========================================');
73
+ console.log('FTS5 IS NOT AVAILABLE in sql.js');
74
+ console.log('----------------------------------------');
75
+ console.log(`Error: ${errorMessage}`);
76
+ console.log('');
77
+ console.log('RECOMMENDATION: Build custom sql.js with FTS5');
78
+ console.log('See: https://github.com/niclaslindstedt/sql.js-fts5');
79
+ console.log('Or: Build from source with -DSQLITE_ENABLE_FTS5');
80
+ console.log('========================================\n');
81
+ }
82
+ // Report the result - test passes either way to show the detection result
83
+ console.log(`\nFTS5 Support: ${fts5Available ? 'YES' : 'NO'}`);
84
+ // Make this an informational test that always passes
85
+ // The real assertion is whether we need a custom build
86
+ expect(true).toBe(true);
87
+ });
88
+ it('should report SQLite compile options', async () => {
89
+ const SQL = await loadSqlJs();
90
+ db = new SQL.Database();
91
+ // Query compile options to see what's enabled
92
+ const stmt = db.prepare('PRAGMA compile_options;');
93
+ const options = [];
94
+ while (stmt.step()) {
95
+ const row = stmt.get();
96
+ options.push(row[0]);
97
+ }
98
+ stmt.free();
99
+ console.log('\n========================================');
100
+ console.log('SQLite Compile Options in sql.js');
101
+ console.log('----------------------------------------');
102
+ options.forEach((opt) => {
103
+ console.log(` - ${opt}`);
104
+ });
105
+ console.log('========================================\n');
106
+ // Check for FTS-related options
107
+ const hasFts3 = options.some((opt) => opt.includes('FTS3'));
108
+ const hasFts4 = options.some((opt) => opt.includes('FTS4'));
109
+ const hasFts5 = options.some((opt) => opt.includes('FTS5'));
110
+ console.log(`FTS3: ${hasFts3 ? 'ENABLED' : 'NOT FOUND'}`);
111
+ console.log(`FTS4: ${hasFts4 ? 'ENABLED' : 'NOT FOUND'}`);
112
+ console.log(`FTS5: ${hasFts5 ? 'ENABLED' : 'NOT FOUND'}`);
113
+ // This test always passes - it's for reporting purposes
114
+ expect(options.length).toBeGreaterThan(0);
115
+ });
116
+ it('should report SQLite version', async () => {
117
+ const SQL = await loadSqlJs();
118
+ db = new SQL.Database();
119
+ const stmt = db.prepare('SELECT sqlite_version();');
120
+ stmt.step();
121
+ const version = stmt.get()[0];
122
+ stmt.free();
123
+ console.log(`\nSQLite Version: ${version}`);
124
+ expect(version).toBeDefined();
125
+ expect(version).toMatch(/^\d+\.\d+\.\d+$/);
126
+ });
127
+ });
128
+ //# sourceMappingURL=fts5-support.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fts5-support.test.js","sourceRoot":"","sources":["../../../tests/db/fts5-support.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SMI-2206: Async Schema Functions Tests
3
+ *
4
+ * Tests for async database initialization with WASM fallback support.
5
+ * These tests verify that createDatabaseAsync and openDatabaseAsync work
6
+ * correctly with automatic driver selection.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=schema-async.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-async.test.d.ts","sourceRoot":"","sources":["../../../tests/db/schema-async.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}