@plures/pluresdb 1.5.3 → 2.9.6

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 (103) hide show
  1. package/README.md +106 -414
  2. package/crates/README.md +99 -0
  3. package/crates/pluresdb-node/README.md +181 -0
  4. package/crates/pluresdb-node/index.d.ts +0 -0
  5. package/crates/pluresdb-node/index.js +265 -0
  6. package/crates/pluresdb-node/package.json +35 -0
  7. package/dist/napi/index.js +60 -0
  8. package/embedded.d.ts +1 -0
  9. package/embedded.js +46 -0
  10. package/package.json +27 -10
  11. package/dist/.tsbuildinfo +0 -1
  12. package/dist/better-sqlite3-shared.d.ts +0 -12
  13. package/dist/better-sqlite3-shared.d.ts.map +0 -1
  14. package/dist/better-sqlite3-shared.js +0 -143
  15. package/dist/better-sqlite3-shared.js.map +0 -1
  16. package/dist/better-sqlite3.d.ts +0 -4
  17. package/dist/better-sqlite3.d.ts.map +0 -1
  18. package/dist/better-sqlite3.js +0 -8
  19. package/dist/better-sqlite3.js.map +0 -1
  20. package/dist/cli.d.ts +0 -7
  21. package/dist/cli.d.ts.map +0 -1
  22. package/dist/cli.js.map +0 -1
  23. package/dist/node-index.d.ts +0 -148
  24. package/dist/node-index.d.ts.map +0 -1
  25. package/dist/node-index.js +0 -665
  26. package/dist/node-index.js.map +0 -1
  27. package/dist/node-wrapper.d.ts +0 -44
  28. package/dist/node-wrapper.d.ts.map +0 -1
  29. package/dist/node-wrapper.js +0 -296
  30. package/dist/node-wrapper.js.map +0 -1
  31. package/dist/types/index.d.ts +0 -28
  32. package/dist/types/index.d.ts.map +0 -1
  33. package/dist/types/index.js +0 -3
  34. package/dist/types/index.js.map +0 -1
  35. package/dist/types/node-types.d.ts +0 -71
  36. package/dist/types/node-types.d.ts.map +0 -1
  37. package/dist/types/node-types.js +0 -6
  38. package/dist/types/node-types.js.map +0 -1
  39. package/dist/vscode/extension.d.ts +0 -81
  40. package/dist/vscode/extension.d.ts.map +0 -1
  41. package/dist/vscode/extension.js +0 -309
  42. package/dist/vscode/extension.js.map +0 -1
  43. package/examples/basic-usage.d.ts +0 -2
  44. package/examples/basic-usage.d.ts.map +0 -1
  45. package/examples/basic-usage.js +0 -26
  46. package/examples/basic-usage.js.map +0 -1
  47. package/examples/basic-usage.ts +0 -29
  48. package/examples/vscode-extension-example/README.md +0 -95
  49. package/examples/vscode-extension-example/package.json +0 -49
  50. package/examples/vscode-extension-example/src/extension.ts +0 -172
  51. package/examples/vscode-extension-example/tsconfig.json +0 -12
  52. package/examples/vscode-extension-integration.d.ts +0 -31
  53. package/examples/vscode-extension-integration.d.ts.map +0 -1
  54. package/examples/vscode-extension-integration.js +0 -319
  55. package/examples/vscode-extension-integration.js.map +0 -1
  56. package/examples/vscode-extension-integration.ts +0 -41
  57. package/legacy/benchmarks/memory-benchmarks.ts +0 -350
  58. package/legacy/benchmarks/run-benchmarks.ts +0 -315
  59. package/legacy/better-sqlite3-shared.ts +0 -157
  60. package/legacy/better-sqlite3.ts +0 -4
  61. package/legacy/cli.ts +0 -241
  62. package/legacy/config.ts +0 -50
  63. package/legacy/core/crdt.ts +0 -107
  64. package/legacy/core/database.ts +0 -529
  65. package/legacy/healthcheck.ts +0 -162
  66. package/legacy/http/api-server.ts +0 -438
  67. package/legacy/index.ts +0 -28
  68. package/legacy/logic/rules.ts +0 -46
  69. package/legacy/main.rs +0 -3
  70. package/legacy/main.ts +0 -197
  71. package/legacy/network/websocket-server.ts +0 -115
  72. package/legacy/node-index.ts +0 -823
  73. package/legacy/node-wrapper.ts +0 -329
  74. package/legacy/sqlite-compat.ts +0 -633
  75. package/legacy/sqlite3-compat.ts +0 -55
  76. package/legacy/storage/kv-storage.ts +0 -73
  77. package/legacy/tests/core.test.ts +0 -305
  78. package/legacy/tests/fixtures/performance-data.json +0 -71
  79. package/legacy/tests/fixtures/test-data.json +0 -129
  80. package/legacy/tests/integration/api-server.test.ts +0 -334
  81. package/legacy/tests/integration/mesh-network.test.ts +0 -303
  82. package/legacy/tests/logic.test.ts +0 -34
  83. package/legacy/tests/performance/load.test.ts +0 -290
  84. package/legacy/tests/security/input-validation.test.ts +0 -286
  85. package/legacy/tests/unit/core.test.ts +0 -226
  86. package/legacy/tests/unit/subscriptions.test.ts +0 -135
  87. package/legacy/tests/unit/vector-search.test.ts +0 -173
  88. package/legacy/tests/vscode_extension_test.ts +0 -281
  89. package/legacy/types/index.ts +0 -32
  90. package/legacy/types/node-types.ts +0 -80
  91. package/legacy/util/debug.ts +0 -14
  92. package/legacy/vector/index.ts +0 -59
  93. package/legacy/vscode/extension.ts +0 -387
  94. package/scripts/compiled-crud-verify.ts +0 -30
  95. package/scripts/dogfood.ts +0 -297
  96. package/scripts/postinstall.js +0 -156
  97. package/scripts/publish-crates.sh +0 -95
  98. package/scripts/release-check.js +0 -224
  99. package/scripts/run-tests.ts +0 -178
  100. package/scripts/setup-libclang.ps1 +0 -209
  101. package/scripts/update-changelog.js +0 -214
  102. package/web/README.md +0 -27
  103. package/web/svelte/package.json +0 -31
@@ -1,329 +0,0 @@
1
- /**
2
- * Node.js Wrapper for PluresDB
3
- * This module provides a Node.js-compatible API for VSCode extensions
4
- */
5
-
6
- import { ChildProcess, spawn } from "node:child_process";
7
- import { EventEmitter } from "node:events";
8
- import * as path from "node:path";
9
- import * as fs from "node:fs";
10
- import * as os from "node:os";
11
-
12
- export interface PluresDBConfig {
13
- port?: number;
14
- host?: string;
15
- dataDir?: string;
16
- webPort?: number;
17
- logLevel?: "debug" | "info" | "warn" | "error";
18
- }
19
-
20
- export interface PluresDBOptions {
21
- config?: PluresDBConfig;
22
- autoStart?: boolean;
23
- denoPath?: string;
24
- }
25
-
26
- export class PluresNode extends EventEmitter {
27
- private process: ChildProcess | null = null;
28
- private config: PluresDBConfig;
29
- private denoPath: string;
30
- private isRunning = false;
31
- private apiUrl: string = "";
32
-
33
- constructor(options: PluresDBOptions = {}) {
34
- super();
35
-
36
- this.config = {
37
- port: 34567,
38
- host: "localhost",
39
- dataDir: path.join(os.homedir(), ".pluresdb"),
40
- webPort: 34568,
41
- logLevel: "info",
42
- ...options.config,
43
- };
44
-
45
- this.denoPath = options.denoPath || this.findDenoPath();
46
-
47
- if (options.autoStart !== false) {
48
- this.start();
49
- }
50
- }
51
-
52
- private findDenoPath(): string {
53
- // Try to find Deno in common locations
54
- const possiblePaths = [
55
- "deno", // In PATH
56
- path.join(os.homedir(), ".deno", "bin", "deno"),
57
- path.join(os.homedir(), ".local", "bin", "deno"),
58
- "/usr/local/bin/deno",
59
- "/opt/homebrew/bin/deno",
60
- "C:\\Users\\" + os.userInfo().username + "\\.deno\\bin\\deno.exe",
61
- "C:\\Program Files\\deno\\deno.exe",
62
- ];
63
-
64
- for (const denoPath of possiblePaths) {
65
- try {
66
- if (fs.existsSync(denoPath) || this.isCommandAvailable(denoPath)) {
67
- return denoPath;
68
- }
69
- } catch {
70
- // Continue to next path
71
- }
72
- }
73
-
74
- throw new Error(
75
- "Deno not found. Please install Deno from https://deno.land/",
76
- );
77
- }
78
-
79
- private isCommandAvailable(command: string): boolean {
80
- try {
81
- require("child_process").execSync(`"${command}" --version`, {
82
- stdio: "ignore",
83
- });
84
- return true;
85
- } catch {
86
- return false;
87
- }
88
- }
89
-
90
- async start(): Promise<void> {
91
- if (this.isRunning) {
92
- return;
93
- }
94
-
95
- return new Promise((resolve, reject) => {
96
- try {
97
- // Ensure data directory exists
98
- if (!fs.existsSync(this.config.dataDir!)) {
99
- fs.mkdirSync(this.config.dataDir!, { recursive: true });
100
- }
101
-
102
- // Find the main.ts file
103
- const mainTsPath = path.join(__dirname, "main.ts");
104
- if (!fs.existsSync(mainTsPath)) {
105
- throw new Error(
106
- "PluresDB main.ts not found. Please ensure the package is properly installed.",
107
- );
108
- }
109
-
110
- // Start the Deno process
111
- const args = [
112
- "run",
113
- "-A",
114
- mainTsPath,
115
- "serve",
116
- "--port",
117
- this.config.port!.toString(),
118
- "--host",
119
- this.config.host!,
120
- "--data-dir",
121
- this.config.dataDir!,
122
- ];
123
-
124
- this.process = spawn(this.denoPath, args, {
125
- stdio: ["pipe", "pipe", "pipe"],
126
- cwd: path.dirname(__dirname),
127
- });
128
-
129
- this.apiUrl = `http://${this.config.host}:${this.config.port}`;
130
-
131
- // Handle process events
132
- this.process.on("error", (error) => {
133
- this.emit("error", error);
134
- reject(error);
135
- });
136
-
137
- this.process.on("exit", (code) => {
138
- this.isRunning = false;
139
- this.emit("exit", code);
140
- });
141
-
142
- // Wait for server to start
143
- this.waitForServer()
144
- .then(() => {
145
- this.isRunning = true;
146
- this.emit("started");
147
- resolve();
148
- })
149
- .catch(reject);
150
-
151
- // Handle stdout/stderr
152
- this.process.stdout?.on("data", (data) => {
153
- const output = data.toString();
154
- this.emit("stdout", output);
155
- });
156
-
157
- this.process.stderr?.on("data", (data) => {
158
- const output = data.toString();
159
- this.emit("stderr", output);
160
- });
161
- } catch (error) {
162
- reject(error);
163
- }
164
- });
165
- }
166
-
167
- private async waitForServer(timeout = 10000): Promise<void> {
168
- const startTime = Date.now();
169
-
170
- while (Date.now() - startTime < timeout) {
171
- try {
172
- const response = await fetch(`${this.apiUrl}/api/config`);
173
- if (response.ok) {
174
- return;
175
- }
176
- } catch {
177
- // Server not ready yet
178
- }
179
-
180
- await new Promise((resolve) => setTimeout(resolve, 100));
181
- }
182
-
183
- throw new Error("Server failed to start within timeout");
184
- }
185
-
186
- async stop(): Promise<void> {
187
- if (!this.isRunning || !this.process) {
188
- return;
189
- }
190
-
191
- return new Promise((resolve) => {
192
- this.process!.kill("SIGTERM");
193
-
194
- this.process!.on("exit", () => {
195
- this.isRunning = false;
196
- this.emit("stopped");
197
- resolve();
198
- });
199
-
200
- // Force kill after 5 seconds
201
- setTimeout(() => {
202
- if (this.process && this.isRunning) {
203
- this.process.kill("SIGKILL");
204
- }
205
- resolve();
206
- }, 5000);
207
- });
208
- }
209
-
210
- getApiUrl(): string {
211
- return this.apiUrl;
212
- }
213
-
214
- getWebUrl(): string {
215
- return `http://${this.config.host}:${this.config.webPort}`;
216
- }
217
-
218
- isServerRunning(): boolean {
219
- return this.isRunning;
220
- }
221
-
222
- // SQLite-compatible API methods
223
- async query(sql: string, params: any[] = []): Promise<any> {
224
- const response = await fetch(`${this.apiUrl}/api/query`, {
225
- method: "POST",
226
- headers: { "Content-Type": "application/json" },
227
- body: JSON.stringify({ sql, params }),
228
- });
229
-
230
- if (!response.ok) {
231
- throw new Error(`Query failed: ${response.statusText}`);
232
- }
233
-
234
- return response.json();
235
- }
236
-
237
- async put(key: string, value: any): Promise<void> {
238
- const response = await fetch(`${this.apiUrl}/api/data`, {
239
- method: "PUT",
240
- headers: { "Content-Type": "application/json" },
241
- body: JSON.stringify({ key, value }),
242
- });
243
-
244
- if (!response.ok) {
245
- throw new Error(`Put failed: ${response.statusText}`);
246
- }
247
- }
248
-
249
- async get(key: string): Promise<any> {
250
- const response = await fetch(
251
- `${this.apiUrl}/api/data/${encodeURIComponent(key)}`,
252
- );
253
-
254
- if (!response.ok) {
255
- if (response.status === 404) {
256
- return null;
257
- }
258
- throw new Error(`Get failed: ${response.statusText}`);
259
- }
260
-
261
- return response.json();
262
- }
263
-
264
- async delete(key: string): Promise<void> {
265
- const response = await fetch(
266
- `${this.apiUrl}/api/data/${encodeURIComponent(key)}`,
267
- {
268
- method: "DELETE",
269
- },
270
- );
271
-
272
- if (!response.ok) {
273
- throw new Error(`Delete failed: ${response.statusText}`);
274
- }
275
- }
276
-
277
- async vectorSearch(query: string, limit = 10): Promise<any[]> {
278
- const response = await fetch(`${this.apiUrl}/api/vsearch`, {
279
- method: "POST",
280
- headers: { "Content-Type": "application/json" },
281
- body: JSON.stringify({ query, limit }),
282
- });
283
-
284
- if (!response.ok) {
285
- throw new Error(`Vector search failed: ${response.statusText}`);
286
- }
287
-
288
- return response.json() as Promise<any[]>;
289
- }
290
-
291
- async list(prefix?: string): Promise<string[]> {
292
- const url = prefix
293
- ? `${this.apiUrl}/api/list?prefix=${encodeURIComponent(prefix)}`
294
- : `${this.apiUrl}/api/list`;
295
- const response = await fetch(url);
296
-
297
- if (!response.ok) {
298
- throw new Error(`List failed: ${response.statusText}`);
299
- }
300
-
301
- return response.json() as Promise<string[]>;
302
- }
303
-
304
- async getConfig(): Promise<any> {
305
- const response = await fetch(`${this.apiUrl}/api/config`);
306
-
307
- if (!response.ok) {
308
- throw new Error(`Get config failed: ${response.statusText}`);
309
- }
310
-
311
- return response.json();
312
- }
313
-
314
- async setConfig(config: any): Promise<void> {
315
- const response = await fetch(`${this.apiUrl}/api/config`, {
316
- method: "POST",
317
- headers: { "Content-Type": "application/json" },
318
- body: JSON.stringify(config),
319
- });
320
-
321
- if (!response.ok) {
322
- throw new Error(`Set config failed: ${response.statusText}`);
323
- }
324
- }
325
- }
326
-
327
- // Export the main class and types
328
- export { PluresNode as default };
329
- export * from "./types/index";