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
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as vscode from "vscode";
|
|
2
|
+
import { SQLiteCompatibleAPI } from "pluresdb";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
|
|
5
|
+
export function activate(context: vscode.ExtensionContext) {
|
|
6
|
+
console.log("PluresDB extension is now active!");
|
|
7
|
+
|
|
8
|
+
// Initialize PluresDB database
|
|
9
|
+
const db = new SQLiteCompatibleAPI({
|
|
10
|
+
config: {
|
|
11
|
+
dataDir: path.join(context.globalStorageUri.fsPath, "pluresdb"),
|
|
12
|
+
port: 34567,
|
|
13
|
+
host: "localhost",
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Start the database
|
|
18
|
+
db.start()
|
|
19
|
+
.then(() => {
|
|
20
|
+
console.log("PluresDB database started");
|
|
21
|
+
|
|
22
|
+
// Set up database schema
|
|
23
|
+
setupDatabase(db);
|
|
24
|
+
})
|
|
25
|
+
.catch((error) => {
|
|
26
|
+
console.error("Failed to start PluresDB:", error);
|
|
27
|
+
vscode.window.showErrorMessage("Failed to start PluresDB database");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Register commands
|
|
31
|
+
const helloWorldCommand = vscode.commands.registerCommand("pluresdb-example.helloWorld", () => {
|
|
32
|
+
vscode.window.showInformationMessage("Hello World from PluresDB!");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const storeDataCommand = vscode.commands.registerCommand(
|
|
36
|
+
"pluresdb-example.storeData",
|
|
37
|
+
async () => {
|
|
38
|
+
const key = await vscode.window.showInputBox({
|
|
39
|
+
prompt: "Enter key to store",
|
|
40
|
+
placeHolder: "user:123",
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (key) {
|
|
44
|
+
const value = await vscode.window.showInputBox({
|
|
45
|
+
prompt: "Enter value (JSON)",
|
|
46
|
+
placeHolder: '{"name": "John", "email": "john@example.com"}',
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (value) {
|
|
50
|
+
try {
|
|
51
|
+
const parsedValue = JSON.parse(value);
|
|
52
|
+
await db.put(key, parsedValue);
|
|
53
|
+
vscode.window.showInformationMessage(`Stored data for key: ${key}`);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
vscode.window.showErrorMessage(
|
|
56
|
+
`Failed to store data: ${error instanceof Error ? error.message : String(error)}`,
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const retrieveDataCommand = vscode.commands.registerCommand(
|
|
65
|
+
"pluresdb-example.retrieveData",
|
|
66
|
+
async () => {
|
|
67
|
+
const key = await vscode.window.showInputBox({
|
|
68
|
+
prompt: "Enter key to retrieve",
|
|
69
|
+
placeHolder: "user:123",
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (key) {
|
|
73
|
+
try {
|
|
74
|
+
const value = await db.getValue(key);
|
|
75
|
+
if (value) {
|
|
76
|
+
const doc = await vscode.workspace.openTextDocument({
|
|
77
|
+
content: JSON.stringify(value, null, 2),
|
|
78
|
+
language: "json",
|
|
79
|
+
});
|
|
80
|
+
await vscode.window.showTextDocument(doc);
|
|
81
|
+
} else {
|
|
82
|
+
vscode.window.showInformationMessage("Key not found");
|
|
83
|
+
}
|
|
84
|
+
} catch (error) {
|
|
85
|
+
vscode.window.showErrorMessage(
|
|
86
|
+
`Failed to retrieve data: ${error instanceof Error ? error.message : String(error)}`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const searchDataCommand = vscode.commands.registerCommand(
|
|
94
|
+
"pluresdb-example.searchData",
|
|
95
|
+
async () => {
|
|
96
|
+
const query = await vscode.window.showInputBox({
|
|
97
|
+
prompt: "Enter search query",
|
|
98
|
+
placeHolder: "machine learning",
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
if (query) {
|
|
102
|
+
try {
|
|
103
|
+
const results = await db.vectorSearch(query, 10);
|
|
104
|
+
const doc = await vscode.workspace.openTextDocument({
|
|
105
|
+
content: JSON.stringify(results, null, 2),
|
|
106
|
+
language: "json",
|
|
107
|
+
});
|
|
108
|
+
await vscode.window.showTextDocument(doc);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
vscode.window.showErrorMessage(
|
|
111
|
+
`Search failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
// Register all commands
|
|
119
|
+
context.subscriptions.push(
|
|
120
|
+
helloWorldCommand,
|
|
121
|
+
storeDataCommand,
|
|
122
|
+
retrieveDataCommand,
|
|
123
|
+
searchDataCommand,
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
// Clean up on deactivation
|
|
127
|
+
context.subscriptions.push({
|
|
128
|
+
dispose: () => {
|
|
129
|
+
db.stop().catch(console.error);
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function setupDatabase(db: SQLiteCompatibleAPI) {
|
|
135
|
+
try {
|
|
136
|
+
// Create tables for common VSCode extension use cases
|
|
137
|
+
await db.exec(`
|
|
138
|
+
CREATE TABLE IF NOT EXISTS settings (
|
|
139
|
+
key TEXT PRIMARY KEY,
|
|
140
|
+
value TEXT,
|
|
141
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
142
|
+
)
|
|
143
|
+
`);
|
|
144
|
+
|
|
145
|
+
await db.exec(`
|
|
146
|
+
CREATE TABLE IF NOT EXISTS documents (
|
|
147
|
+
id TEXT PRIMARY KEY,
|
|
148
|
+
content TEXT,
|
|
149
|
+
language TEXT,
|
|
150
|
+
file_path TEXT,
|
|
151
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
152
|
+
)
|
|
153
|
+
`);
|
|
154
|
+
|
|
155
|
+
console.log("Database schema created successfully");
|
|
156
|
+
} catch (error) {
|
|
157
|
+
console.error("Failed to create database schema:", error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function deactivate() {
|
|
162
|
+
console.log("PluresDB extension deactivated");
|
|
163
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VSCode Extension Integration Example
|
|
3
|
+
* This shows how to integrate PluresDB into a VSCode extension
|
|
4
|
+
*/
|
|
5
|
+
import * as vscode from 'vscode';
|
|
6
|
+
export declare class PluresExtension {
|
|
7
|
+
private plures;
|
|
8
|
+
private sqliteAPI;
|
|
9
|
+
private context;
|
|
10
|
+
constructor(context: vscode.ExtensionContext);
|
|
11
|
+
private setupEventHandlers;
|
|
12
|
+
activate(): Promise<void>;
|
|
13
|
+
deactivate(): Promise<void>;
|
|
14
|
+
private registerCommands;
|
|
15
|
+
private setupDatabase;
|
|
16
|
+
storeSetting(key: string, value: any): Promise<any>;
|
|
17
|
+
getSetting(key: string): Promise<any>;
|
|
18
|
+
storeDocument(id: string, content: string, language: string, filePath: string): Promise<any>;
|
|
19
|
+
searchDocuments(query: string): Promise<any>;
|
|
20
|
+
executeSQL(sql: string, params?: any[]): Promise<any>;
|
|
21
|
+
}
|
|
22
|
+
export declare function activate(context: vscode.ExtensionContext): PluresExtension;
|
|
23
|
+
export declare function deactivate(extension: PluresExtension): void;
|
|
24
|
+
//# sourceMappingURL=vscode-extension-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-extension-integration.d.ts","sourceRoot":"","sources":["vscode-extension-integration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGjC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAA0B;gBAE7B,OAAO,EAAE,MAAM,CAAC,gBAAgB;IA+B5C,OAAO,CAAC,kBAAkB;IAcpB,QAAQ;IAkBR,UAAU;IAShB,OAAO,CAAC,gBAAgB;YA6GV,aAAa;IAmCrB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAIpC,UAAU,CAAC,GAAG,EAAE,MAAM;IAItB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAS7E,eAAe,CAAC,KAAK,EAAE,MAAM;IAI7B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO;CAGjD;AAGD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,qBAIxD;AAGD,wBAAgB,UAAU,CAAC,SAAS,EAAE,iBAAiB,QAEtD"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VSCode Extension Integration Example
|
|
4
|
+
* This shows how to integrate PluresDB into a VSCode extension
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding =
|
|
7
|
+
(this && this.__createBinding) ||
|
|
8
|
+
(Object.create
|
|
9
|
+
? function (o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return m[k];
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}
|
|
22
|
+
: function (o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
});
|
|
26
|
+
var __setModuleDefault =
|
|
27
|
+
(this && this.__setModuleDefault) ||
|
|
28
|
+
(Object.create
|
|
29
|
+
? function (o, v) {
|
|
30
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
+
}
|
|
32
|
+
: function (o, v) {
|
|
33
|
+
o["default"] = v;
|
|
34
|
+
});
|
|
35
|
+
var __importStar =
|
|
36
|
+
(this && this.__importStar) ||
|
|
37
|
+
(function () {
|
|
38
|
+
var ownKeys = function (o) {
|
|
39
|
+
ownKeys =
|
|
40
|
+
Object.getOwnPropertyNames ||
|
|
41
|
+
function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null)
|
|
52
|
+
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
|
|
53
|
+
if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.PluresExtension = void 0;
|
|
60
|
+
exports.activate = activate;
|
|
61
|
+
exports.deactivate = deactivate;
|
|
62
|
+
const vscode = __importStar(require("vscode"));
|
|
63
|
+
const pluresdb_1 = require("pluresdb");
|
|
64
|
+
class PluresExtension {
|
|
65
|
+
plures;
|
|
66
|
+
sqliteAPI;
|
|
67
|
+
context;
|
|
68
|
+
constructor(context) {
|
|
69
|
+
this.context = context;
|
|
70
|
+
// Initialize PluresDB with VSCode-specific configuration
|
|
71
|
+
this.plures = new pluresdb_1.PluresNode({
|
|
72
|
+
config: {
|
|
73
|
+
port: 34567,
|
|
74
|
+
host: "localhost",
|
|
75
|
+
dataDir: path.join(context.globalStorageUri.fsPath, "pluresdb"),
|
|
76
|
+
webPort: 34568,
|
|
77
|
+
logLevel: "info",
|
|
78
|
+
},
|
|
79
|
+
autoStart: false, // We'll start it manually
|
|
80
|
+
});
|
|
81
|
+
// Create SQLite-compatible API
|
|
82
|
+
this.sqliteAPI = new pluresdb_1.SQLiteCompatibleAPI({
|
|
83
|
+
config: {
|
|
84
|
+
port: 34567,
|
|
85
|
+
host: "localhost",
|
|
86
|
+
dataDir: path.join(context.globalStorageUri.fsPath, "pluresdb"),
|
|
87
|
+
webPort: 34568,
|
|
88
|
+
logLevel: "info",
|
|
89
|
+
},
|
|
90
|
+
autoStart: false,
|
|
91
|
+
});
|
|
92
|
+
// Set up event handlers
|
|
93
|
+
this.setupEventHandlers();
|
|
94
|
+
}
|
|
95
|
+
setupEventHandlers() {
|
|
96
|
+
this.plures.on("started", () => {
|
|
97
|
+
vscode.window.showInformationMessage("PluresDB database started");
|
|
98
|
+
});
|
|
99
|
+
this.plures.on("stopped", () => {
|
|
100
|
+
vscode.window.showInformationMessage("PluresDB database stopped");
|
|
101
|
+
});
|
|
102
|
+
this.plures.on("error", (error) => {
|
|
103
|
+
vscode.window.showErrorMessage(`PluresDB error: ${error.message}`);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async activate() {
|
|
107
|
+
try {
|
|
108
|
+
// Start PluresDB
|
|
109
|
+
await this.plures.start();
|
|
110
|
+
await this.sqliteAPI.start();
|
|
111
|
+
// Register commands
|
|
112
|
+
this.registerCommands();
|
|
113
|
+
// Set up database schema
|
|
114
|
+
await this.setupDatabase();
|
|
115
|
+
vscode.window.showInformationMessage("PluresDB extension activated");
|
|
116
|
+
} catch (error) {
|
|
117
|
+
vscode.window.showErrorMessage(`Failed to activate PluresDB: ${error.message}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async deactivate() {
|
|
121
|
+
try {
|
|
122
|
+
await this.plures.stop();
|
|
123
|
+
await this.sqliteAPI.stop();
|
|
124
|
+
} catch (error) {
|
|
125
|
+
console.error("Error stopping PluresDB:", error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
registerCommands() {
|
|
129
|
+
// Command to open PluresDB web UI
|
|
130
|
+
const openWebUI = vscode.commands.registerCommand("pluresdb.openWebUI", () => {
|
|
131
|
+
const webUrl = this.plures.getWebUrl();
|
|
132
|
+
vscode.env.openExternal(vscode.Uri.parse(webUrl));
|
|
133
|
+
});
|
|
134
|
+
// Command to execute SQL query
|
|
135
|
+
const executeQuery = vscode.commands.registerCommand("pluresdb.executeQuery", async () => {
|
|
136
|
+
const sql = await vscode.window.showInputBox({
|
|
137
|
+
prompt: "Enter SQL query",
|
|
138
|
+
placeHolder: "SELECT * FROM users",
|
|
139
|
+
});
|
|
140
|
+
if (sql) {
|
|
141
|
+
try {
|
|
142
|
+
const result = await this.sqliteAPI.all(sql);
|
|
143
|
+
const doc = await vscode.workspace.openTextDocument({
|
|
144
|
+
content: JSON.stringify(result, null, 2),
|
|
145
|
+
language: "json",
|
|
146
|
+
});
|
|
147
|
+
await vscode.window.showTextDocument(doc);
|
|
148
|
+
} catch (error) {
|
|
149
|
+
vscode.window.showErrorMessage(`Query failed: ${error.message}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
// Command to perform vector search
|
|
154
|
+
const vectorSearch = vscode.commands.registerCommand("pluresdb.vectorSearch", async () => {
|
|
155
|
+
const query = await vscode.window.showInputBox({
|
|
156
|
+
prompt: "Enter search query",
|
|
157
|
+
placeHolder: "machine learning",
|
|
158
|
+
});
|
|
159
|
+
if (query) {
|
|
160
|
+
try {
|
|
161
|
+
const results = await this.sqliteAPI.vectorSearch(query, 10);
|
|
162
|
+
const doc = await vscode.workspace.openTextDocument({
|
|
163
|
+
content: JSON.stringify(results, null, 2),
|
|
164
|
+
language: "json",
|
|
165
|
+
});
|
|
166
|
+
await vscode.window.showTextDocument(doc);
|
|
167
|
+
} catch (error) {
|
|
168
|
+
vscode.window.showErrorMessage(`Vector search failed: ${error.message}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// Command to store data
|
|
173
|
+
const storeData = vscode.commands.registerCommand("pluresdb.storeData", async () => {
|
|
174
|
+
const key = await vscode.window.showInputBox({
|
|
175
|
+
prompt: "Enter key",
|
|
176
|
+
placeHolder: "user:123",
|
|
177
|
+
});
|
|
178
|
+
if (key) {
|
|
179
|
+
const value = await vscode.window.showInputBox({
|
|
180
|
+
prompt: "Enter value (JSON)",
|
|
181
|
+
placeHolder: '{"name": "John", "email": "john@example.com"}',
|
|
182
|
+
});
|
|
183
|
+
if (value) {
|
|
184
|
+
try {
|
|
185
|
+
const parsedValue = JSON.parse(value);
|
|
186
|
+
await this.sqliteAPI.put(key, parsedValue);
|
|
187
|
+
vscode.window.showInformationMessage(`Stored data for key: ${key}`);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
vscode.window.showErrorMessage(`Failed to store data: ${error.message}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
// Command to retrieve data
|
|
195
|
+
const retrieveData = vscode.commands.registerCommand("pluresdb.retrieveData", async () => {
|
|
196
|
+
const key = await vscode.window.showInputBox({
|
|
197
|
+
prompt: "Enter key to retrieve",
|
|
198
|
+
placeHolder: "user:123",
|
|
199
|
+
});
|
|
200
|
+
if (key) {
|
|
201
|
+
try {
|
|
202
|
+
const value = await this.sqliteAPI.getValue(key);
|
|
203
|
+
if (value) {
|
|
204
|
+
const doc = await vscode.workspace.openTextDocument({
|
|
205
|
+
content: JSON.stringify(value, null, 2),
|
|
206
|
+
language: "json",
|
|
207
|
+
});
|
|
208
|
+
await vscode.window.showTextDocument(doc);
|
|
209
|
+
} else {
|
|
210
|
+
vscode.window.showInformationMessage("Key not found");
|
|
211
|
+
}
|
|
212
|
+
} catch (error) {
|
|
213
|
+
vscode.window.showErrorMessage(`Failed to retrieve data: ${error.message}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
// Register all commands
|
|
218
|
+
this.context.subscriptions.push(openWebUI, executeQuery, vectorSearch, storeData, retrieveData);
|
|
219
|
+
}
|
|
220
|
+
async setupDatabase() {
|
|
221
|
+
// Create tables for common VSCode extension use cases
|
|
222
|
+
const tables = [
|
|
223
|
+
`CREATE TABLE IF NOT EXISTS settings (
|
|
224
|
+
key TEXT PRIMARY KEY,
|
|
225
|
+
value TEXT,
|
|
226
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
227
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
228
|
+
)`,
|
|
229
|
+
`CREATE TABLE IF NOT EXISTS documents (
|
|
230
|
+
id TEXT PRIMARY KEY,
|
|
231
|
+
content TEXT,
|
|
232
|
+
language TEXT,
|
|
233
|
+
file_path TEXT,
|
|
234
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
235
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
236
|
+
)`,
|
|
237
|
+
`CREATE TABLE IF NOT EXISTS search_history (
|
|
238
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
239
|
+
query TEXT,
|
|
240
|
+
results_count INTEGER,
|
|
241
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
242
|
+
)`,
|
|
243
|
+
];
|
|
244
|
+
for (const sql of tables) {
|
|
245
|
+
try {
|
|
246
|
+
await this.sqliteAPI.exec(sql);
|
|
247
|
+
} catch (error) {
|
|
248
|
+
console.error("Error creating table:", error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Public API methods for other parts of the extension
|
|
253
|
+
async storeSetting(key, value) {
|
|
254
|
+
return this.sqliteAPI.put(`settings:${key}`, value);
|
|
255
|
+
}
|
|
256
|
+
async getSetting(key) {
|
|
257
|
+
return this.sqliteAPI.getValue(`settings:${key}`);
|
|
258
|
+
}
|
|
259
|
+
async storeDocument(id, content, language, filePath) {
|
|
260
|
+
return this.sqliteAPI.put(`documents:${id}`, {
|
|
261
|
+
content,
|
|
262
|
+
language,
|
|
263
|
+
filePath,
|
|
264
|
+
updatedAt: new Date().toISOString(),
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
async searchDocuments(query) {
|
|
268
|
+
return this.sqliteAPI.vectorSearch(query, 20);
|
|
269
|
+
}
|
|
270
|
+
async executeSQL(sql, params = []) {
|
|
271
|
+
return this.sqliteAPI.all(sql, params);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.PluresExtension = PluresExtension;
|
|
275
|
+
// Extension activation function
|
|
276
|
+
function activate(context) {
|
|
277
|
+
const extension = new PluresExtension(context);
|
|
278
|
+
extension.activate();
|
|
279
|
+
return extension;
|
|
280
|
+
}
|
|
281
|
+
// Extension deactivation function
|
|
282
|
+
function deactivate(extension) {
|
|
283
|
+
extension.deactivate();
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=vscode-extension-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-extension-integration.js","sourceRoot":"","sources":["vscode-extension-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VSCode Extension Integration Example
|
|
3
|
+
* This shows how to integrate PluresDB into a VSCode extension
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as vscode from "vscode";
|
|
7
|
+
import {
|
|
8
|
+
createPluresExtension,
|
|
9
|
+
PluresVSCodeExtension,
|
|
10
|
+
ExtensionContextLike,
|
|
11
|
+
VSCodeAPI,
|
|
12
|
+
} from "../src/vscode/extension.ts";
|
|
13
|
+
|
|
14
|
+
let extensionInstance: PluresVSCodeExtension | undefined;
|
|
15
|
+
|
|
16
|
+
export async function activate(context: vscode.ExtensionContext) {
|
|
17
|
+
const mappedContext: ExtensionContextLike = {
|
|
18
|
+
subscriptions: context.subscriptions,
|
|
19
|
+
globalStorageUri: { fsPath: context.globalStorageUri.fsPath },
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const vscodeApi = vscode as unknown as VSCodeAPI;
|
|
23
|
+
extensionInstance = createPluresExtension(vscodeApi, mappedContext);
|
|
24
|
+
|
|
25
|
+
await extensionInstance.activate();
|
|
26
|
+
|
|
27
|
+
context.subscriptions.push({
|
|
28
|
+
dispose: () => {
|
|
29
|
+
extensionInstance?.deactivate().catch((error) => {
|
|
30
|
+
console.error("Failed to deactivate PluresDB extension", error);
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
return extensionInstance;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export async function deactivate() {
|
|
39
|
+
await extensionInstance?.deactivate();
|
|
40
|
+
extensionInstance = undefined;
|
|
41
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pluresdb",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "P2P Graph Database with SQLite Compatibility - Local-first, offline-first database for modern applications",
|
|
5
|
+
"main": "dist/node-index.js",
|
|
6
|
+
"types": "dist/node-index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/node-index.d.ts",
|
|
10
|
+
"require": "./dist/node-index.js",
|
|
11
|
+
"default": "./dist/node-index.js"
|
|
12
|
+
},
|
|
13
|
+
"./node": {
|
|
14
|
+
"types": "./dist/node-index.d.ts",
|
|
15
|
+
"require": "./dist/node-index.js",
|
|
16
|
+
"default": "./dist/node-index.js"
|
|
17
|
+
},
|
|
18
|
+
"./vscode": {
|
|
19
|
+
"types": "./dist/vscode/extension.d.ts",
|
|
20
|
+
"require": "./dist/vscode/extension.js",
|
|
21
|
+
"default": "./dist/vscode/extension.js"
|
|
22
|
+
},
|
|
23
|
+
"./cli": {
|
|
24
|
+
"types": "./dist/cli.d.ts",
|
|
25
|
+
"require": "./dist/cli.js",
|
|
26
|
+
"default": "./dist/cli.js"
|
|
27
|
+
},
|
|
28
|
+
"./types": {
|
|
29
|
+
"types": "./dist/types/node-types.d.ts",
|
|
30
|
+
"require": "./dist/types/node-types.js",
|
|
31
|
+
"default": "./dist/types/node-types.js"
|
|
32
|
+
},
|
|
33
|
+
"./package.json": "./package.json"
|
|
34
|
+
},
|
|
35
|
+
"bin": {
|
|
36
|
+
"pluresdb": "dist/cli.js"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "npm run build:lib && npm run build:web",
|
|
40
|
+
"build:lib": "tsc -p tsconfig.json",
|
|
41
|
+
"build:web": "cd web/svelte && npm install && npm run build",
|
|
42
|
+
"dev": "deno run -A --unstable-kv --watch src/main.ts serve --port 34567",
|
|
43
|
+
"start": "node dist/cli.js serve",
|
|
44
|
+
"test": "deno test -A --unstable-kv",
|
|
45
|
+
"verify": "npm run build:lib && npm test",
|
|
46
|
+
"prepare": "npm run build:lib",
|
|
47
|
+
"prepublishOnly": "npm run verify && npm run build:web",
|
|
48
|
+
"postinstall": "node scripts/postinstall.js"
|
|
49
|
+
},
|
|
50
|
+
"keywords": [
|
|
51
|
+
"database",
|
|
52
|
+
"graph-database",
|
|
53
|
+
"p2p",
|
|
54
|
+
"sqlite",
|
|
55
|
+
"local-first",
|
|
56
|
+
"offline-first",
|
|
57
|
+
"crdt",
|
|
58
|
+
"vector-search",
|
|
59
|
+
"deno",
|
|
60
|
+
"typescript",
|
|
61
|
+
"vscode",
|
|
62
|
+
"extension",
|
|
63
|
+
"embedded",
|
|
64
|
+
"sync",
|
|
65
|
+
"encryption"
|
|
66
|
+
],
|
|
67
|
+
"author": "Plures Organization",
|
|
68
|
+
"license": "AGPL-3.0",
|
|
69
|
+
"homepage": "https://github.com/plures/pluresdb#readme",
|
|
70
|
+
"repository": {
|
|
71
|
+
"type": "git",
|
|
72
|
+
"url": "git+https://github.com/plures/pluresdb.git"
|
|
73
|
+
},
|
|
74
|
+
"bugs": {
|
|
75
|
+
"url": "https://github.com/plures/pluresdb/issues"
|
|
76
|
+
},
|
|
77
|
+
"engines": {
|
|
78
|
+
"node": ">=18.0.0",
|
|
79
|
+
"npm": ">=8.0.0"
|
|
80
|
+
},
|
|
81
|
+
"files": [
|
|
82
|
+
"dist/",
|
|
83
|
+
"web/svelte/dist/",
|
|
84
|
+
"src/",
|
|
85
|
+
"examples/",
|
|
86
|
+
"scripts/",
|
|
87
|
+
"README.md",
|
|
88
|
+
"LICENSE",
|
|
89
|
+
"package.json"
|
|
90
|
+
],
|
|
91
|
+
"dependencies": {
|
|
92
|
+
"cors": "^2.8.5",
|
|
93
|
+
"express": "^4.21.2",
|
|
94
|
+
"ws": "^8.18.3"
|
|
95
|
+
},
|
|
96
|
+
"devDependencies": {
|
|
97
|
+
"@types/cors": "^2.8.19",
|
|
98
|
+
"@types/express": "^4.17.23",
|
|
99
|
+
"@types/node": "^20.19.19",
|
|
100
|
+
"@types/vscode": "^1.104.0",
|
|
101
|
+
"@types/ws": "^8.18.1",
|
|
102
|
+
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
103
|
+
"@typescript-eslint/parser": "^8.45.0",
|
|
104
|
+
"eslint": "^9.36.0",
|
|
105
|
+
"eslint-config-prettier": "^10.1.8",
|
|
106
|
+
"eslint-plugin-import": "^2.32.0",
|
|
107
|
+
"prettier": "^3.6.2",
|
|
108
|
+
"prettier-plugin-svelte": "^3.4.0",
|
|
109
|
+
"typescript": "^5.9.3"
|
|
110
|
+
},
|
|
111
|
+
"publishConfig": {
|
|
112
|
+
"access": "public",
|
|
113
|
+
"registry": "https://registry.npmjs.org/"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { GunDB } from "../src/core/database.ts";
|
|
2
|
+
|
|
3
|
+
const serverUrl = Deno.env.get("SERVER_URL") ?? "ws://localhost:34567";
|
|
4
|
+
|
|
5
|
+
const clientA = new GunDB();
|
|
6
|
+
const clientB = new GunDB();
|
|
7
|
+
|
|
8
|
+
const kvA = await Deno.makeTempFile({ prefix: "kv_", suffix: ".sqlite" });
|
|
9
|
+
const kvB = await Deno.makeTempFile({ prefix: "kv_", suffix: ".sqlite" });
|
|
10
|
+
|
|
11
|
+
await clientA.ready(kvA);
|
|
12
|
+
await clientB.ready(kvB);
|
|
13
|
+
|
|
14
|
+
clientA.connect(serverUrl);
|
|
15
|
+
clientB.connect(serverUrl);
|
|
16
|
+
|
|
17
|
+
const id = `bin:crud:${crypto.randomUUID()}`;
|
|
18
|
+
|
|
19
|
+
const receivedOnB = new Promise<void>((resolve) => clientB.on(id, (n) => n && resolve()));
|
|
20
|
+
|
|
21
|
+
await clientA.put(id, { text: "compiled works" } as Record<string, unknown>);
|
|
22
|
+
|
|
23
|
+
await receivedOnB;
|
|
24
|
+
|
|
25
|
+
await clientA.close();
|
|
26
|
+
await clientB.close();
|
|
27
|
+
|
|
28
|
+
console.log("COMPILED-CRUD-OK", id);
|