pluresdb 1.0.1
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/LICENSE +72 -0
- package/README.md +322 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +253 -0
- package/dist/cli.js.map +1 -0
- package/dist/node-index.d.ts +52 -0
- package/dist/node-index.d.ts.map +1 -0
- package/dist/node-index.js +359 -0
- package/dist/node-index.js.map +1 -0
- package/dist/node-wrapper.d.ts +44 -0
- package/dist/node-wrapper.d.ts.map +1 -0
- package/dist/node-wrapper.js +294 -0
- package/dist/node-wrapper.js.map +1 -0
- package/dist/types/index.d.ts +28 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/node-types.d.ts +59 -0
- package/dist/types/node-types.d.ts.map +1 -0
- package/dist/types/node-types.js +6 -0
- package/dist/types/node-types.js.map +1 -0
- package/dist/vscode/extension.d.ts +81 -0
- package/dist/vscode/extension.d.ts.map +1 -0
- package/dist/vscode/extension.js +309 -0
- package/dist/vscode/extension.js.map +1 -0
- package/examples/basic-usage.d.ts +2 -0
- package/examples/basic-usage.d.ts.map +1 -0
- package/examples/basic-usage.js +26 -0
- package/examples/basic-usage.js.map +1 -0
- package/examples/basic-usage.ts +29 -0
- package/examples/vscode-extension-example/README.md +95 -0
- package/examples/vscode-extension-example/package.json +49 -0
- package/examples/vscode-extension-example/src/extension.ts +163 -0
- package/examples/vscode-extension-example/tsconfig.json +12 -0
- package/examples/vscode-extension-integration.d.ts +24 -0
- package/examples/vscode-extension-integration.d.ts.map +1 -0
- package/examples/vscode-extension-integration.js +285 -0
- package/examples/vscode-extension-integration.js.map +1 -0
- package/examples/vscode-extension-integration.ts +41 -0
- package/package.json +115 -0
- package/scripts/compiled-crud-verify.ts +28 -0
- package/scripts/dogfood.ts +258 -0
- package/scripts/postinstall.js +155 -0
- package/scripts/run-tests.ts +175 -0
- package/scripts/setup-libclang.ps1 +209 -0
- package/src/benchmarks/memory-benchmarks.ts +316 -0
- package/src/benchmarks/run-benchmarks.ts +293 -0
- package/src/cli.ts +231 -0
- package/src/config.ts +49 -0
- package/src/core/crdt.ts +104 -0
- package/src/core/database.ts +494 -0
- package/src/healthcheck.ts +156 -0
- package/src/http/api-server.ts +334 -0
- package/src/index.ts +28 -0
- package/src/logic/rules.ts +44 -0
- package/src/main.rs +3 -0
- package/src/main.ts +190 -0
- package/src/network/websocket-server.ts +115 -0
- package/src/node-index.ts +385 -0
- package/src/node-wrapper.ts +320 -0
- package/src/sqlite-compat.ts +586 -0
- package/src/sqlite3-compat.ts +55 -0
- package/src/storage/kv-storage.ts +71 -0
- package/src/tests/core.test.ts +281 -0
- package/src/tests/fixtures/performance-data.json +71 -0
- package/src/tests/fixtures/test-data.json +124 -0
- package/src/tests/integration/api-server.test.ts +232 -0
- package/src/tests/integration/mesh-network.test.ts +297 -0
- package/src/tests/logic.test.ts +30 -0
- package/src/tests/performance/load.test.ts +288 -0
- package/src/tests/security/input-validation.test.ts +282 -0
- package/src/tests/unit/core.test.ts +216 -0
- package/src/tests/unit/subscriptions.test.ts +135 -0
- package/src/tests/unit/vector-search.test.ts +173 -0
- package/src/tests/vscode_extension_test.ts +253 -0
- package/src/types/index.ts +32 -0
- package/src/types/node-types.ts +66 -0
- package/src/util/debug.ts +14 -0
- package/src/vector/index.ts +59 -0
- package/src/vscode/extension.ts +364 -0
- package/web/README.md +27 -0
- package/web/svelte/package.json +31 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* CLI wrapper for PluresDB in Node.js environment
|
|
5
|
+
* This allows VSCode extensions to use pluresdb as a regular npm package
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
const node_wrapper_1 = require("./node-wrapper");
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
// Parse command line arguments
|
|
45
|
+
const args = process.argv.slice(2);
|
|
46
|
+
const command = args[0];
|
|
47
|
+
if (!command) {
|
|
48
|
+
console.log(`
|
|
49
|
+
PluresDB - P2P Graph Database with SQLite Compatibility
|
|
50
|
+
|
|
51
|
+
Usage: pluresdb <command> [options]
|
|
52
|
+
|
|
53
|
+
Commands:
|
|
54
|
+
serve Start the PluresDB server
|
|
55
|
+
put <key> <value> Store a key-value pair
|
|
56
|
+
get <key> Retrieve a value by key
|
|
57
|
+
delete <key> Delete a key-value pair
|
|
58
|
+
query <sql> Execute SQL query
|
|
59
|
+
vsearch <query> Perform vector search
|
|
60
|
+
list [prefix] List all keys (optionally with prefix)
|
|
61
|
+
config Show configuration
|
|
62
|
+
config set <key> <value> Set configuration value
|
|
63
|
+
--help Show this help message
|
|
64
|
+
--version Show version
|
|
65
|
+
|
|
66
|
+
Examples:
|
|
67
|
+
pluresdb serve --port 8080
|
|
68
|
+
pluresdb put "user:123" '{"name": "John"}'
|
|
69
|
+
pluresdb get "user:123"
|
|
70
|
+
pluresdb query "SELECT * FROM users"
|
|
71
|
+
pluresdb vsearch "machine learning"
|
|
72
|
+
`);
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
if (command === "--version") {
|
|
76
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, "../package.json"), "utf8"));
|
|
77
|
+
console.log(packageJson.version);
|
|
78
|
+
process.exit(0);
|
|
79
|
+
}
|
|
80
|
+
if (command === "--help") {
|
|
81
|
+
console.log(`
|
|
82
|
+
PluresDB - P2P Graph Database with SQLite Compatibility
|
|
83
|
+
|
|
84
|
+
Usage: pluresdb <command> [options]
|
|
85
|
+
|
|
86
|
+
Commands:
|
|
87
|
+
serve Start the PluresDB server
|
|
88
|
+
put <key> <value> Store a key-value pair
|
|
89
|
+
get <key> Retrieve a value by key
|
|
90
|
+
delete <key> Delete a key-value pair
|
|
91
|
+
query <sql> Execute SQL query
|
|
92
|
+
vsearch <query> Perform vector search
|
|
93
|
+
list [prefix] List all keys (optionally with prefix)
|
|
94
|
+
config Show configuration
|
|
95
|
+
config set <key> <value> Set configuration value
|
|
96
|
+
--help Show this help message
|
|
97
|
+
--version Show version
|
|
98
|
+
|
|
99
|
+
Examples:
|
|
100
|
+
pluresdb serve --port 8080
|
|
101
|
+
pluresdb put "user:123" '{"name": "John"}'
|
|
102
|
+
pluresdb get "user:123"
|
|
103
|
+
pluresdb query "SELECT * FROM users"
|
|
104
|
+
pluresdb vsearch "machine learning"
|
|
105
|
+
`);
|
|
106
|
+
process.exit(0);
|
|
107
|
+
}
|
|
108
|
+
// Parse options
|
|
109
|
+
const options = {};
|
|
110
|
+
let i = 1;
|
|
111
|
+
while (i < args.length) {
|
|
112
|
+
const arg = args[i];
|
|
113
|
+
if (arg.startsWith("--")) {
|
|
114
|
+
const key = arg.substring(2);
|
|
115
|
+
const value = args[i + 1];
|
|
116
|
+
if (value && !value.startsWith("--")) {
|
|
117
|
+
options[key] = value;
|
|
118
|
+
i += 2;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
options[key] = true;
|
|
122
|
+
i += 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
i += 1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function main() {
|
|
130
|
+
try {
|
|
131
|
+
if (command === "serve") {
|
|
132
|
+
const config = {
|
|
133
|
+
port: options.port ? parseInt(options.port) : 34567,
|
|
134
|
+
host: options.host || "localhost",
|
|
135
|
+
dataDir: options["data-dir"] || path.join(require("os").homedir(), ".pluresdb"),
|
|
136
|
+
webPort: options["web-port"] ? parseInt(options["web-port"]) : 34568,
|
|
137
|
+
logLevel: options["log-level"] || "info",
|
|
138
|
+
};
|
|
139
|
+
const plures = new node_wrapper_1.PluresNode({ config, autoStart: true });
|
|
140
|
+
console.log(`🚀 PluresDB server starting...`);
|
|
141
|
+
console.log(`📊 API: http://${config.host}:${config.port}`);
|
|
142
|
+
console.log(`🌐 Web UI: http://${config.host}:${config.webPort}`);
|
|
143
|
+
console.log(`📁 Data: ${config.dataDir}`);
|
|
144
|
+
console.log(`\nPress Ctrl+C to stop the server`);
|
|
145
|
+
// Handle graceful shutdown
|
|
146
|
+
process.on("SIGINT", async () => {
|
|
147
|
+
console.log("\n🛑 Shutting down PluresDB...");
|
|
148
|
+
await plures.stop();
|
|
149
|
+
process.exit(0);
|
|
150
|
+
});
|
|
151
|
+
// Keep the process alive
|
|
152
|
+
await new Promise(() => { });
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// For other commands, we need to start the server first
|
|
156
|
+
const plures = new node_wrapper_1.PluresNode({ autoStart: true });
|
|
157
|
+
try {
|
|
158
|
+
switch (command) {
|
|
159
|
+
case "put":
|
|
160
|
+
if (args.length < 3) {
|
|
161
|
+
console.error("Error: put command requires key and value");
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
const key = args[1];
|
|
165
|
+
const value = JSON.parse(args[2]);
|
|
166
|
+
await plures.put(key, value);
|
|
167
|
+
console.log(`✅ Stored: ${key}`);
|
|
168
|
+
break;
|
|
169
|
+
case "get":
|
|
170
|
+
if (args.length < 2) {
|
|
171
|
+
console.error("Error: get command requires key");
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
const getKey = args[1];
|
|
175
|
+
const result = await plures.get(getKey);
|
|
176
|
+
if (result === null) {
|
|
177
|
+
console.log("Key not found");
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.log(JSON.stringify(result, null, 2));
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
case "delete":
|
|
184
|
+
if (args.length < 2) {
|
|
185
|
+
console.error("Error: delete command requires key");
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
const deleteKey = args[1];
|
|
189
|
+
await plures.delete(deleteKey);
|
|
190
|
+
console.log(`✅ Deleted: ${deleteKey}`);
|
|
191
|
+
break;
|
|
192
|
+
case "query":
|
|
193
|
+
if (args.length < 2) {
|
|
194
|
+
console.error("Error: query command requires SQL");
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
const sql = args[1];
|
|
198
|
+
const queryResult = await plures.query(sql);
|
|
199
|
+
console.log(JSON.stringify(queryResult, null, 2));
|
|
200
|
+
break;
|
|
201
|
+
case "vsearch":
|
|
202
|
+
if (args.length < 2) {
|
|
203
|
+
console.error("Error: vsearch command requires query");
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
const searchQuery = args[1];
|
|
207
|
+
const limit = options.limit ? parseInt(options.limit) : 10;
|
|
208
|
+
const searchResult = await plures.vectorSearch(searchQuery, limit);
|
|
209
|
+
console.log(JSON.stringify(searchResult, null, 2));
|
|
210
|
+
break;
|
|
211
|
+
case "list":
|
|
212
|
+
const prefix = args[1];
|
|
213
|
+
const listResult = await plures.list(prefix);
|
|
214
|
+
console.log(JSON.stringify(listResult, null, 2));
|
|
215
|
+
break;
|
|
216
|
+
case "config":
|
|
217
|
+
if (args[1] === "set") {
|
|
218
|
+
if (args.length < 4) {
|
|
219
|
+
console.error("Error: config set requires key and value");
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
const configKey = args[2];
|
|
223
|
+
const configValue = args[3];
|
|
224
|
+
await plures.setConfig({ [configKey]: configValue });
|
|
225
|
+
console.log(`✅ Set config: ${configKey} = ${configValue}`);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
const config = await plures.getConfig();
|
|
229
|
+
console.log(JSON.stringify(config, null, 2));
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
default:
|
|
233
|
+
console.error(`Unknown command: ${command}`);
|
|
234
|
+
console.log('Run "pluresdb --help" for usage information');
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
await plures.stop();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Run the main function
|
|
249
|
+
main().catch((error) => {
|
|
250
|
+
console.error("Fatal error:", error instanceof Error ? error.message : String(error));
|
|
251
|
+
process.exit(1);
|
|
252
|
+
});
|
|
253
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js Entry Point for PluresDB
|
|
3
|
+
* This provides a clean API for VSCode extensions and other Node.js applications
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from "node:events";
|
|
6
|
+
import { PluresDBOptions } from "./types/node-types";
|
|
7
|
+
export declare class PluresNode extends EventEmitter {
|
|
8
|
+
private process;
|
|
9
|
+
private config;
|
|
10
|
+
private denoPath;
|
|
11
|
+
private isRunning;
|
|
12
|
+
private apiUrl;
|
|
13
|
+
constructor(options?: PluresDBOptions);
|
|
14
|
+
private findDenoPath;
|
|
15
|
+
private isCommandAvailable;
|
|
16
|
+
start(): Promise<void>;
|
|
17
|
+
private waitForServer;
|
|
18
|
+
stop(): Promise<void>;
|
|
19
|
+
getApiUrl(): string;
|
|
20
|
+
getWebUrl(): string;
|
|
21
|
+
isServerRunning(): boolean;
|
|
22
|
+
query(sql: string, params?: any[]): Promise<any>;
|
|
23
|
+
put(key: string, value: any): Promise<void>;
|
|
24
|
+
get(key: string): Promise<any>;
|
|
25
|
+
delete(key: string): Promise<void>;
|
|
26
|
+
vectorSearch(query: string, limit?: number): Promise<any[]>;
|
|
27
|
+
list(prefix?: string): Promise<string[]>;
|
|
28
|
+
getConfig(): Promise<any>;
|
|
29
|
+
setConfig(config: any): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare class SQLiteCompatibleAPI {
|
|
32
|
+
private plures;
|
|
33
|
+
constructor(options?: PluresDBOptions);
|
|
34
|
+
start(): Promise<void>;
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
run(sql: string, params?: any[]): Promise<any>;
|
|
37
|
+
get(sql: string, params?: any[]): Promise<any>;
|
|
38
|
+
all(sql: string, params?: any[]): Promise<any>;
|
|
39
|
+
exec(sql: string): Promise<any>;
|
|
40
|
+
put(key: string, value: any): Promise<void>;
|
|
41
|
+
getValue(key: string): Promise<any>;
|
|
42
|
+
delete(key: string): Promise<void>;
|
|
43
|
+
vectorSearch(query: string, limit?: number): Promise<any[]>;
|
|
44
|
+
list(prefix?: string): Promise<string[]>;
|
|
45
|
+
getApiUrl(): string;
|
|
46
|
+
getWebUrl(): string;
|
|
47
|
+
isRunning(): boolean;
|
|
48
|
+
}
|
|
49
|
+
export { PluresNode as default };
|
|
50
|
+
export * from "./types/node-types";
|
|
51
|
+
export { PluresVSCodeExtension, createPluresExtension } from "./vscode/extension";
|
|
52
|
+
//# sourceMappingURL=node-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-index.d.ts","sourceRoot":"","sources":["../src/node-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,EAAkB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKrE,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAc;gBAEhB,OAAO,GAAE,eAAoB;IAmBzC,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,kBAAkB;IASpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiFd,aAAa;IAmBrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,MAAM;IAInB,eAAe,IAAI,OAAO;IAKpB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAcpD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAa9B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAcvD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAaxC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAUzB,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAW5C;AAGD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,CAAC,EAAE,eAAe;IAI/B,KAAK;IAIL,IAAI;IAKJ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO;IAInC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO;IAKnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO;IAKnC,IAAI,CAAC,GAAG,EAAE,MAAM;IAKhB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI3B,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK;IAItC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM;IAI1B,SAAS;IAIT,SAAS;IAIT,SAAS;CAGV;AAGD,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Node.js Entry Point for PluresDB
|
|
4
|
+
* This provides a clean API for VSCode extensions and other Node.js applications
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
40
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
41
|
+
};
|
|
42
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.createPluresExtension = exports.PluresVSCodeExtension = exports.default = exports.SQLiteCompatibleAPI = exports.PluresNode = void 0;
|
|
47
|
+
const node_events_1 = require("node:events");
|
|
48
|
+
const node_child_process_1 = require("node:child_process");
|
|
49
|
+
const path = __importStar(require("node:path"));
|
|
50
|
+
const fs = __importStar(require("node:fs"));
|
|
51
|
+
const os = __importStar(require("node:os"));
|
|
52
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
53
|
+
const packageRoot = typeof __dirname !== "undefined" ? path.resolve(__dirname, "..") : node_process_1.default.cwd();
|
|
54
|
+
class PluresNode extends node_events_1.EventEmitter {
|
|
55
|
+
process = null;
|
|
56
|
+
config;
|
|
57
|
+
denoPath;
|
|
58
|
+
isRunning = false;
|
|
59
|
+
apiUrl = "";
|
|
60
|
+
constructor(options = {}) {
|
|
61
|
+
super();
|
|
62
|
+
this.config = {
|
|
63
|
+
port: 34567,
|
|
64
|
+
host: "localhost",
|
|
65
|
+
dataDir: path.join(os.homedir(), ".pluresdb"),
|
|
66
|
+
webPort: 34568,
|
|
67
|
+
logLevel: "info",
|
|
68
|
+
...options.config,
|
|
69
|
+
};
|
|
70
|
+
this.denoPath = options.denoPath || this.findDenoPath();
|
|
71
|
+
if (options.autoStart !== false) {
|
|
72
|
+
this.start();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
findDenoPath() {
|
|
76
|
+
// Try to find Deno in common locations
|
|
77
|
+
const possiblePaths = [
|
|
78
|
+
"deno", // In PATH
|
|
79
|
+
path.join(os.homedir(), ".deno", "bin", "deno"),
|
|
80
|
+
path.join(os.homedir(), ".local", "bin", "deno"),
|
|
81
|
+
"/usr/local/bin/deno",
|
|
82
|
+
"/opt/homebrew/bin/deno",
|
|
83
|
+
"C:\\Users\\" + os.userInfo().username + "\\.deno\\bin\\deno.exe",
|
|
84
|
+
"C:\\Program Files\\deno\\deno.exe",
|
|
85
|
+
];
|
|
86
|
+
for (const denoPath of possiblePaths) {
|
|
87
|
+
try {
|
|
88
|
+
if (fs.existsSync(denoPath) || this.isCommandAvailable(denoPath)) {
|
|
89
|
+
return denoPath;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Continue to next path
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
throw new Error("Deno not found. Please install Deno from https://deno.land/");
|
|
97
|
+
}
|
|
98
|
+
isCommandAvailable(command) {
|
|
99
|
+
try {
|
|
100
|
+
require("child_process").execSync(`"${command}" --version`, { stdio: "ignore" });
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async start() {
|
|
108
|
+
if (this.isRunning) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
try {
|
|
113
|
+
// Ensure data directory exists
|
|
114
|
+
if (!fs.existsSync(this.config.dataDir)) {
|
|
115
|
+
fs.mkdirSync(this.config.dataDir, { recursive: true });
|
|
116
|
+
}
|
|
117
|
+
const kvPath = path.join(this.config.dataDir, "pluresdb.kv");
|
|
118
|
+
// Find the main.ts file
|
|
119
|
+
const mainTsPath = path.join(packageRoot, "src", "main.ts");
|
|
120
|
+
if (!fs.existsSync(mainTsPath)) {
|
|
121
|
+
throw new Error("PluresDB main.ts not found. Please ensure the package is properly installed.");
|
|
122
|
+
}
|
|
123
|
+
// Start the Deno process
|
|
124
|
+
const args = [
|
|
125
|
+
"run",
|
|
126
|
+
"-A",
|
|
127
|
+
"--unstable-kv",
|
|
128
|
+
"--no-lock",
|
|
129
|
+
mainTsPath,
|
|
130
|
+
"serve",
|
|
131
|
+
"--port",
|
|
132
|
+
this.config.port.toString(),
|
|
133
|
+
"--host",
|
|
134
|
+
this.config.host,
|
|
135
|
+
"--kv",
|
|
136
|
+
kvPath,
|
|
137
|
+
];
|
|
138
|
+
this.process = (0, node_child_process_1.spawn)(this.denoPath, args, {
|
|
139
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
140
|
+
cwd: packageRoot,
|
|
141
|
+
});
|
|
142
|
+
this.apiUrl = `http://${this.config.host}:${this.config.port}`;
|
|
143
|
+
// Handle process events
|
|
144
|
+
this.process.on("error", (error) => {
|
|
145
|
+
this.emit("error", error);
|
|
146
|
+
reject(error);
|
|
147
|
+
});
|
|
148
|
+
this.process.on("exit", (code) => {
|
|
149
|
+
this.isRunning = false;
|
|
150
|
+
this.emit("exit", code);
|
|
151
|
+
});
|
|
152
|
+
// Wait for server to start
|
|
153
|
+
this.waitForServer()
|
|
154
|
+
.then(() => {
|
|
155
|
+
this.isRunning = true;
|
|
156
|
+
this.emit("started");
|
|
157
|
+
resolve();
|
|
158
|
+
})
|
|
159
|
+
.catch(reject);
|
|
160
|
+
// Handle stdout/stderr
|
|
161
|
+
this.process.stdout?.on("data", (data) => {
|
|
162
|
+
const output = data.toString();
|
|
163
|
+
this.emit("stdout", output);
|
|
164
|
+
});
|
|
165
|
+
this.process.stderr?.on("data", (data) => {
|
|
166
|
+
const output = data.toString();
|
|
167
|
+
this.emit("stderr", output);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
reject(error);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
async waitForServer(timeout = 20000) {
|
|
176
|
+
const startTime = Date.now();
|
|
177
|
+
while (Date.now() - startTime < timeout) {
|
|
178
|
+
try {
|
|
179
|
+
const response = await fetch(`${this.apiUrl}/api/config`);
|
|
180
|
+
if (response.ok) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
// Server not ready yet
|
|
186
|
+
}
|
|
187
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
188
|
+
}
|
|
189
|
+
throw new Error("Server failed to start within timeout");
|
|
190
|
+
}
|
|
191
|
+
async stop() {
|
|
192
|
+
if (!this.isRunning || !this.process) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
return new Promise((resolve) => {
|
|
196
|
+
this.process.kill("SIGTERM");
|
|
197
|
+
this.process.on("exit", () => {
|
|
198
|
+
this.isRunning = false;
|
|
199
|
+
this.emit("stopped");
|
|
200
|
+
resolve();
|
|
201
|
+
});
|
|
202
|
+
// Force kill after 5 seconds
|
|
203
|
+
setTimeout(() => {
|
|
204
|
+
if (this.process && this.isRunning) {
|
|
205
|
+
this.process.kill("SIGKILL");
|
|
206
|
+
}
|
|
207
|
+
resolve();
|
|
208
|
+
}, 5000);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
getApiUrl() {
|
|
212
|
+
return this.apiUrl;
|
|
213
|
+
}
|
|
214
|
+
getWebUrl() {
|
|
215
|
+
return `http://${this.config.host}:${this.config.webPort}`;
|
|
216
|
+
}
|
|
217
|
+
isServerRunning() {
|
|
218
|
+
return this.isRunning;
|
|
219
|
+
}
|
|
220
|
+
// SQLite-compatible API methods
|
|
221
|
+
async query(sql, params = []) {
|
|
222
|
+
const response = await fetch(`${this.apiUrl}/api/query`, {
|
|
223
|
+
method: "POST",
|
|
224
|
+
headers: { "Content-Type": "application/json" },
|
|
225
|
+
body: JSON.stringify({ sql, params }),
|
|
226
|
+
});
|
|
227
|
+
if (!response.ok) {
|
|
228
|
+
throw new Error(`Query failed: ${response.statusText}`);
|
|
229
|
+
}
|
|
230
|
+
return response.json();
|
|
231
|
+
}
|
|
232
|
+
async put(key, value) {
|
|
233
|
+
const response = await fetch(`${this.apiUrl}/api/data`, {
|
|
234
|
+
method: "PUT",
|
|
235
|
+
headers: { "Content-Type": "application/json" },
|
|
236
|
+
body: JSON.stringify({ key, value }),
|
|
237
|
+
});
|
|
238
|
+
if (!response.ok) {
|
|
239
|
+
throw new Error(`Put failed: ${response.statusText}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async get(key) {
|
|
243
|
+
const response = await fetch(`${this.apiUrl}/api/data/${encodeURIComponent(key)}`);
|
|
244
|
+
if (!response.ok) {
|
|
245
|
+
if (response.status === 404) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
throw new Error(`Get failed: ${response.statusText}`);
|
|
249
|
+
}
|
|
250
|
+
return response.json();
|
|
251
|
+
}
|
|
252
|
+
async delete(key) {
|
|
253
|
+
const response = await fetch(`${this.apiUrl}/api/data/${encodeURIComponent(key)}`, {
|
|
254
|
+
method: "DELETE",
|
|
255
|
+
});
|
|
256
|
+
if (!response.ok) {
|
|
257
|
+
throw new Error(`Delete failed: ${response.statusText}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async vectorSearch(query, limit = 10) {
|
|
261
|
+
const response = await fetch(`${this.apiUrl}/api/vsearch`, {
|
|
262
|
+
method: "POST",
|
|
263
|
+
headers: { "Content-Type": "application/json" },
|
|
264
|
+
body: JSON.stringify({ query, limit }),
|
|
265
|
+
});
|
|
266
|
+
if (!response.ok) {
|
|
267
|
+
throw new Error(`Vector search failed: ${response.statusText}`);
|
|
268
|
+
}
|
|
269
|
+
return response.json();
|
|
270
|
+
}
|
|
271
|
+
async list(prefix) {
|
|
272
|
+
const url = prefix
|
|
273
|
+
? `${this.apiUrl}/api/list?prefix=${encodeURIComponent(prefix)}`
|
|
274
|
+
: `${this.apiUrl}/api/list`;
|
|
275
|
+
const response = await fetch(url);
|
|
276
|
+
if (!response.ok) {
|
|
277
|
+
throw new Error(`List failed: ${response.statusText}`);
|
|
278
|
+
}
|
|
279
|
+
return response.json();
|
|
280
|
+
}
|
|
281
|
+
async getConfig() {
|
|
282
|
+
const response = await fetch(`${this.apiUrl}/api/config`);
|
|
283
|
+
if (!response.ok) {
|
|
284
|
+
throw new Error(`Get config failed: ${response.statusText}`);
|
|
285
|
+
}
|
|
286
|
+
return response.json();
|
|
287
|
+
}
|
|
288
|
+
async setConfig(config) {
|
|
289
|
+
const response = await fetch(`${this.apiUrl}/api/config`, {
|
|
290
|
+
method: "POST",
|
|
291
|
+
headers: { "Content-Type": "application/json" },
|
|
292
|
+
body: JSON.stringify(config),
|
|
293
|
+
});
|
|
294
|
+
if (!response.ok) {
|
|
295
|
+
throw new Error(`Set config failed: ${response.statusText}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.PluresNode = PluresNode;
|
|
300
|
+
exports.default = PluresNode;
|
|
301
|
+
// SQLite-compatible API for easy migration
|
|
302
|
+
class SQLiteCompatibleAPI {
|
|
303
|
+
plures;
|
|
304
|
+
constructor(options) {
|
|
305
|
+
this.plures = new PluresNode(options);
|
|
306
|
+
}
|
|
307
|
+
async start() {
|
|
308
|
+
await this.plures.start();
|
|
309
|
+
}
|
|
310
|
+
async stop() {
|
|
311
|
+
await this.plures.stop();
|
|
312
|
+
}
|
|
313
|
+
// SQLite-compatible methods
|
|
314
|
+
async run(sql, params = []) {
|
|
315
|
+
return this.plures.query(sql, params);
|
|
316
|
+
}
|
|
317
|
+
async get(sql, params = []) {
|
|
318
|
+
const result = await this.plures.query(sql, params);
|
|
319
|
+
return result.rows?.[0] || null;
|
|
320
|
+
}
|
|
321
|
+
async all(sql, params = []) {
|
|
322
|
+
const result = await this.plures.query(sql, params);
|
|
323
|
+
return result.rows || [];
|
|
324
|
+
}
|
|
325
|
+
async exec(sql) {
|
|
326
|
+
return this.plures.query(sql);
|
|
327
|
+
}
|
|
328
|
+
// Additional PluresDB specific methods
|
|
329
|
+
async put(key, value) {
|
|
330
|
+
return this.plures.put(key, value);
|
|
331
|
+
}
|
|
332
|
+
async getValue(key) {
|
|
333
|
+
return this.plures.get(key);
|
|
334
|
+
}
|
|
335
|
+
async delete(key) {
|
|
336
|
+
return this.plures.delete(key);
|
|
337
|
+
}
|
|
338
|
+
async vectorSearch(query, limit = 10) {
|
|
339
|
+
return this.plures.vectorSearch(query, limit);
|
|
340
|
+
}
|
|
341
|
+
async list(prefix) {
|
|
342
|
+
return this.plures.list(prefix);
|
|
343
|
+
}
|
|
344
|
+
getApiUrl() {
|
|
345
|
+
return this.plures.getApiUrl();
|
|
346
|
+
}
|
|
347
|
+
getWebUrl() {
|
|
348
|
+
return this.plures.getWebUrl();
|
|
349
|
+
}
|
|
350
|
+
isRunning() {
|
|
351
|
+
return this.plures.isServerRunning();
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
exports.SQLiteCompatibleAPI = SQLiteCompatibleAPI;
|
|
355
|
+
__exportStar(require("./types/node-types"), exports);
|
|
356
|
+
var extension_1 = require("./vscode/extension");
|
|
357
|
+
Object.defineProperty(exports, "PluresVSCodeExtension", { enumerable: true, get: function () { return extension_1.PluresVSCodeExtension; } });
|
|
358
|
+
Object.defineProperty(exports, "createPluresExtension", { enumerable: true, get: function () { return extension_1.createPluresExtension; } });
|
|
359
|
+
//# sourceMappingURL=node-index.js.map
|