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.
Files changed (84) hide show
  1. package/LICENSE +72 -0
  2. package/README.md +322 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +253 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/node-index.d.ts +52 -0
  9. package/dist/node-index.d.ts.map +1 -0
  10. package/dist/node-index.js +359 -0
  11. package/dist/node-index.js.map +1 -0
  12. package/dist/node-wrapper.d.ts +44 -0
  13. package/dist/node-wrapper.d.ts.map +1 -0
  14. package/dist/node-wrapper.js +294 -0
  15. package/dist/node-wrapper.js.map +1 -0
  16. package/dist/types/index.d.ts +28 -0
  17. package/dist/types/index.d.ts.map +1 -0
  18. package/dist/types/index.js +3 -0
  19. package/dist/types/index.js.map +1 -0
  20. package/dist/types/node-types.d.ts +59 -0
  21. package/dist/types/node-types.d.ts.map +1 -0
  22. package/dist/types/node-types.js +6 -0
  23. package/dist/types/node-types.js.map +1 -0
  24. package/dist/vscode/extension.d.ts +81 -0
  25. package/dist/vscode/extension.d.ts.map +1 -0
  26. package/dist/vscode/extension.js +309 -0
  27. package/dist/vscode/extension.js.map +1 -0
  28. package/examples/basic-usage.d.ts +2 -0
  29. package/examples/basic-usage.d.ts.map +1 -0
  30. package/examples/basic-usage.js +26 -0
  31. package/examples/basic-usage.js.map +1 -0
  32. package/examples/basic-usage.ts +29 -0
  33. package/examples/vscode-extension-example/README.md +95 -0
  34. package/examples/vscode-extension-example/package.json +49 -0
  35. package/examples/vscode-extension-example/src/extension.ts +163 -0
  36. package/examples/vscode-extension-example/tsconfig.json +12 -0
  37. package/examples/vscode-extension-integration.d.ts +24 -0
  38. package/examples/vscode-extension-integration.d.ts.map +1 -0
  39. package/examples/vscode-extension-integration.js +285 -0
  40. package/examples/vscode-extension-integration.js.map +1 -0
  41. package/examples/vscode-extension-integration.ts +41 -0
  42. package/package.json +115 -0
  43. package/scripts/compiled-crud-verify.ts +28 -0
  44. package/scripts/dogfood.ts +258 -0
  45. package/scripts/postinstall.js +155 -0
  46. package/scripts/run-tests.ts +175 -0
  47. package/scripts/setup-libclang.ps1 +209 -0
  48. package/src/benchmarks/memory-benchmarks.ts +316 -0
  49. package/src/benchmarks/run-benchmarks.ts +293 -0
  50. package/src/cli.ts +231 -0
  51. package/src/config.ts +49 -0
  52. package/src/core/crdt.ts +104 -0
  53. package/src/core/database.ts +494 -0
  54. package/src/healthcheck.ts +156 -0
  55. package/src/http/api-server.ts +334 -0
  56. package/src/index.ts +28 -0
  57. package/src/logic/rules.ts +44 -0
  58. package/src/main.rs +3 -0
  59. package/src/main.ts +190 -0
  60. package/src/network/websocket-server.ts +115 -0
  61. package/src/node-index.ts +385 -0
  62. package/src/node-wrapper.ts +320 -0
  63. package/src/sqlite-compat.ts +586 -0
  64. package/src/sqlite3-compat.ts +55 -0
  65. package/src/storage/kv-storage.ts +71 -0
  66. package/src/tests/core.test.ts +281 -0
  67. package/src/tests/fixtures/performance-data.json +71 -0
  68. package/src/tests/fixtures/test-data.json +124 -0
  69. package/src/tests/integration/api-server.test.ts +232 -0
  70. package/src/tests/integration/mesh-network.test.ts +297 -0
  71. package/src/tests/logic.test.ts +30 -0
  72. package/src/tests/performance/load.test.ts +288 -0
  73. package/src/tests/security/input-validation.test.ts +282 -0
  74. package/src/tests/unit/core.test.ts +216 -0
  75. package/src/tests/unit/subscriptions.test.ts +135 -0
  76. package/src/tests/unit/vector-search.test.ts +173 -0
  77. package/src/tests/vscode_extension_test.ts +253 -0
  78. package/src/types/index.ts +32 -0
  79. package/src/types/node-types.ts +66 -0
  80. package/src/util/debug.ts +14 -0
  81. package/src/vector/index.ts +59 -0
  82. package/src/vscode/extension.ts +364 -0
  83. package/web/README.md +27 -0
  84. 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,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "ES2020",
5
+ "outDir": "out",
6
+ "lib": ["ES2020"],
7
+ "sourceMap": true,
8
+ "rootDir": "src",
9
+ "strict": true
10
+ },
11
+ "exclude": ["node_modules", ".vscode-test"]
12
+ }
@@ -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);