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,309 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PluresVSCodeExtension = void 0;
37
+ exports.createPluresExtension = createPluresExtension;
38
+ const path = __importStar(require("node:path"));
39
+ const node_index_1 = require("../node-index");
40
+ const DEFAULT_CONFIG = {
41
+ port: 34567,
42
+ host: "localhost",
43
+ webPort: 34568,
44
+ logLevel: "info",
45
+ };
46
+ class PluresVSCodeExtension {
47
+ vscode;
48
+ context;
49
+ plures;
50
+ sqlite;
51
+ commandPrefix;
52
+ disposables = [];
53
+ activated = false;
54
+ constructor(vscodeApi, context, options = {}) {
55
+ this.vscode = vscodeApi;
56
+ this.context = context;
57
+ this.commandPrefix = options.commandPrefix ?? "pluresdb";
58
+ const mergedConfig = {
59
+ ...DEFAULT_CONFIG,
60
+ dataDir: path.join(context.globalStorageUri.fsPath, "pluresdb"),
61
+ ...options.config,
62
+ };
63
+ this.plures =
64
+ options.pluresInstance ?? new node_index_1.PluresNode({ config: mergedConfig, autoStart: false });
65
+ this.sqlite =
66
+ options.sqliteInstance ?? new node_index_1.SQLiteCompatibleAPI({ config: mergedConfig, autoStart: false });
67
+ this.setupEventHandlers();
68
+ }
69
+ async activate() {
70
+ if (this.activated) {
71
+ return;
72
+ }
73
+ try {
74
+ await this.plures.start();
75
+ await this.sqlite.start();
76
+ this.registerCommands();
77
+ await this.setupDatabase();
78
+ this.activated = true;
79
+ await this.safeInfo("PluresDB extension activated");
80
+ }
81
+ catch (error) {
82
+ await this.safeError(`Failed to activate PluresDB: ${this.errorMessage(error)}`);
83
+ throw error;
84
+ }
85
+ }
86
+ async deactivate() {
87
+ if (!this.activated) {
88
+ return;
89
+ }
90
+ try {
91
+ await this.sqlite.stop();
92
+ await this.plures.stop();
93
+ }
94
+ finally {
95
+ this.disposeAll();
96
+ this.activated = false;
97
+ }
98
+ }
99
+ getWebUrl() {
100
+ return this.plures.getWebUrl();
101
+ }
102
+ async storeSetting(key, value) {
103
+ return this.sqlite.put(`settings:${key}`, value);
104
+ }
105
+ async getSetting(key) {
106
+ return this.sqlite.getValue(`settings:${key}`);
107
+ }
108
+ async storeDocument(id, content, language, filePath) {
109
+ return this.sqlite.put(`documents:${id}`, {
110
+ content,
111
+ language,
112
+ filePath,
113
+ updatedAt: new Date().toISOString(),
114
+ });
115
+ }
116
+ async searchDocuments(query, limit = 20) {
117
+ return this.sqlite.vectorSearch(query, limit);
118
+ }
119
+ async executeSQL(sql, params = []) {
120
+ return this.sqlite.all(sql, params);
121
+ }
122
+ setupEventHandlers() {
123
+ this.plures.on("started", () => {
124
+ this.safeInfo("PluresDB database started");
125
+ });
126
+ this.plures.on("stopped", () => {
127
+ this.safeInfo("PluresDB database stopped");
128
+ });
129
+ this.plures.on("error", (error) => {
130
+ this.safeError(`PluresDB error: ${this.errorMessage(error)}`);
131
+ });
132
+ this.plures.on("stderr", (output) => {
133
+ const trimmed = output.trim();
134
+ if (trimmed.length > 0) {
135
+ this.safeError(trimmed);
136
+ }
137
+ });
138
+ this.plures.on("stdout", (output) => {
139
+ const trimmed = output.trim();
140
+ if (trimmed.length > 0) {
141
+ this.safeInfo(trimmed);
142
+ }
143
+ });
144
+ }
145
+ registerCommands() {
146
+ const register = (name, factory) => {
147
+ const disposable = this.vscode.commands.registerCommand(`${this.commandPrefix}.${name}`, () => factory());
148
+ this.context.subscriptions.push(disposable);
149
+ this.disposables.push(disposable);
150
+ };
151
+ register("openWebUI", async () => {
152
+ const webUrl = this.getWebUrl();
153
+ await this.vscode.env.openExternal(this.vscode.Uri.parse(webUrl));
154
+ });
155
+ register("executeQuery", async () => {
156
+ const sql = await this.vscode.window.showInputBox({
157
+ prompt: "Enter SQL query",
158
+ placeHolder: "SELECT * FROM users",
159
+ });
160
+ if (!sql)
161
+ return;
162
+ try {
163
+ const result = await this.sqlite.all(sql);
164
+ const doc = await this.vscode.workspace.openTextDocument({
165
+ content: JSON.stringify(result, null, 2),
166
+ language: "json",
167
+ });
168
+ await this.vscode.window.showTextDocument(doc);
169
+ }
170
+ catch (error) {
171
+ await this.safeError(`Query failed: ${this.errorMessage(error)}`);
172
+ }
173
+ });
174
+ register("vectorSearch", async () => {
175
+ const query = await this.vscode.window.showInputBox({
176
+ prompt: "Enter search query",
177
+ placeHolder: "machine learning",
178
+ });
179
+ if (!query)
180
+ return;
181
+ try {
182
+ const results = await this.sqlite.vectorSearch(query, 10);
183
+ const doc = await this.vscode.workspace.openTextDocument({
184
+ content: JSON.stringify(results, null, 2),
185
+ language: "json",
186
+ });
187
+ await this.vscode.window.showTextDocument(doc);
188
+ }
189
+ catch (error) {
190
+ await this.safeError(`Vector search failed: ${this.errorMessage(error)}`);
191
+ }
192
+ });
193
+ register("storeData", async () => {
194
+ const key = await this.vscode.window.showInputBox({
195
+ prompt: "Enter key",
196
+ placeHolder: "user:123",
197
+ });
198
+ if (!key)
199
+ return;
200
+ const json = await this.vscode.window.showInputBox({
201
+ prompt: "Enter value (JSON)",
202
+ placeHolder: '{"name": "Ada", "email": "ada@example.com"}',
203
+ });
204
+ if (!json)
205
+ return;
206
+ try {
207
+ const value = JSON.parse(json);
208
+ await this.sqlite.put(key, value);
209
+ await this.safeInfo(`Stored data for key: ${key}`);
210
+ }
211
+ catch (error) {
212
+ await this.safeError(`Failed to store data: ${this.errorMessage(error)}`);
213
+ }
214
+ });
215
+ register("retrieveData", async () => {
216
+ const key = await this.vscode.window.showInputBox({
217
+ prompt: "Enter key to retrieve",
218
+ placeHolder: "user:123",
219
+ });
220
+ if (!key)
221
+ return;
222
+ try {
223
+ const value = await this.sqlite.getValue(key);
224
+ if (value) {
225
+ const doc = await this.vscode.workspace.openTextDocument({
226
+ content: JSON.stringify(value, null, 2),
227
+ language: "json",
228
+ });
229
+ await this.vscode.window.showTextDocument(doc);
230
+ }
231
+ else {
232
+ await this.safeInfo("Key not found");
233
+ }
234
+ }
235
+ catch (error) {
236
+ await this.safeError(`Failed to retrieve data: ${this.errorMessage(error)}`);
237
+ }
238
+ });
239
+ }
240
+ async setupDatabase() {
241
+ const statements = [
242
+ `CREATE TABLE IF NOT EXISTS settings (
243
+ key TEXT PRIMARY KEY,
244
+ value TEXT,
245
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
246
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
247
+ )`,
248
+ `CREATE TABLE IF NOT EXISTS documents (
249
+ id TEXT PRIMARY KEY,
250
+ content TEXT,
251
+ language TEXT,
252
+ file_path TEXT,
253
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
254
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
255
+ )`,
256
+ `CREATE TABLE IF NOT EXISTS search_history (
257
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
258
+ query TEXT,
259
+ results_count INTEGER,
260
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
261
+ )`,
262
+ ];
263
+ for (const sql of statements) {
264
+ try {
265
+ await this.sqlite.exec(sql);
266
+ }
267
+ catch (error) {
268
+ await this.safeError(`Failed to initialize database: ${this.errorMessage(error)}`);
269
+ }
270
+ }
271
+ }
272
+ disposeAll() {
273
+ for (const disposable of this.disposables.splice(0)) {
274
+ try {
275
+ disposable.dispose();
276
+ }
277
+ catch (_error) {
278
+ // ignore
279
+ }
280
+ }
281
+ }
282
+ async safeInfo(message) {
283
+ try {
284
+ await this.vscode.window.showInformationMessage(message);
285
+ }
286
+ catch (_error) {
287
+ // ignore message failures in headless tests
288
+ }
289
+ }
290
+ async safeError(message) {
291
+ try {
292
+ await this.vscode.window.showErrorMessage(message);
293
+ }
294
+ catch (_error) {
295
+ // ignore message failures in headless tests
296
+ }
297
+ }
298
+ errorMessage(error) {
299
+ if (error instanceof Error) {
300
+ return error.message;
301
+ }
302
+ return String(error);
303
+ }
304
+ }
305
+ exports.PluresVSCodeExtension = PluresVSCodeExtension;
306
+ function createPluresExtension(vscodeApi, context, options = {}) {
307
+ return new PluresVSCodeExtension(vscodeApi, context, options);
308
+ }
309
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/vscode/extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=basic-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-usage.d.ts","sourceRoot":"","sources":["basic-usage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const database_ts_1 = require("../src/core/database.ts");
4
+ const db = new database_ts_1.GunDB();
5
+ await db.ready();
6
+ await db.put("user:alice", {
7
+ name: "Alice",
8
+ age: 30,
9
+ city: "London",
10
+ vector: undefined,
11
+ });
12
+ const user = await db.get("user:alice");
13
+ console.log("User:", user);
14
+ db.on("user:alice", (node) => console.log("Updated user:alice:", node));
15
+ await db.put("note:1", { text: "I love visiting museums in London" });
16
+ await db.put("note:2", { text: "Best pizza in New York" });
17
+ await db.put("note:3", { text: "Parks and galleries around London are great" });
18
+ const results = await db.vectorSearch("Find things about London", 5);
19
+ console.log(
20
+ "Semantic search results:",
21
+ results.map((n) => ({
22
+ id: n.id,
23
+ text: n.data.text,
24
+ })),
25
+ );
26
+ //# sourceMappingURL=basic-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-usage.js","sourceRoot":"","sources":["basic-usage.ts"],"names":[],"mappings":";;AAAA,yDAAgD;AAEhD,MAAM,EAAE,GAAG,IAAI,mBAAK,EAAE,CAAC;AACvB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAEjB,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,SAAS;CAClB,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACxC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAE3B,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;AAExE,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,CAAC,CAAC;AACtE,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAC3D,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,6CAA6C,EAAE,CAAC,CAAC;AAEhF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;AACrE,OAAO,CAAC,GAAG,CACT,0BAA0B,EAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,EAAE,EAAE,CAAC,CAAC,EAAE;IACR,IAAI,EAAG,CAAC,CAAC,IAAgC,CAAC,IAAI;CAC/C,CAAC,CAAC,CACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { GunDB } from "../src/core/database.ts";
2
+
3
+ const db = new GunDB();
4
+ await db.ready();
5
+
6
+ await db.put("user:alice", {
7
+ name: "Alice",
8
+ age: 30,
9
+ city: "London",
10
+ vector: undefined,
11
+ });
12
+
13
+ const user = await db.get("user:alice");
14
+ console.log("User:", user);
15
+
16
+ db.on("user:alice", (node) => console.log("Updated user:alice:", node));
17
+
18
+ await db.put("note:1", { text: "I love visiting museums in London" });
19
+ await db.put("note:2", { text: "Best pizza in New York" });
20
+ await db.put("note:3", { text: "Parks and galleries around London are great" });
21
+
22
+ const results = await db.vectorSearch("Find things about London", 5);
23
+ console.log(
24
+ "Semantic search results:",
25
+ results.map((n) => ({
26
+ id: n.id,
27
+ text: (n.data as Record<string, unknown>).text,
28
+ })),
29
+ );
@@ -0,0 +1,95 @@
1
+ # PluresDB VSCode Extension Example
2
+
3
+ This is an example VSCode extension that demonstrates how to integrate PluresDB into your VSCode extension.
4
+
5
+ ## Features
6
+
7
+ - **Store Data**: Store key-value pairs in PluresDB
8
+ - **Retrieve Data**: Retrieve data by key
9
+ - **Vector Search**: Perform semantic search across your data
10
+ - **SQLite Compatibility**: Use familiar SQLite API
11
+
12
+ ## Installation
13
+
14
+ 1. Install dependencies:
15
+
16
+ ```bash
17
+ npm install
18
+ ```
19
+
20
+ 2. Compile the extension:
21
+
22
+ ```bash
23
+ npm run compile
24
+ ```
25
+
26
+ 3. Press F5 to run the extension in a new Extension Development Host window
27
+
28
+ ## Usage
29
+
30
+ 1. Open the Command Palette (Ctrl+Shift+P)
31
+ 2. Run one of these commands:
32
+ - `PluresDB Example: Hello World` - Shows a hello world message
33
+ - `PluresDB Example: Store Data` - Store data in PluresDB
34
+ - `PluresDB Example: Retrieve Data` - Retrieve data from PluresDB
35
+ - `PluresDB Example: Search Data` - Search data with vector search
36
+
37
+ ## Code Example
38
+
39
+ ```typescript
40
+ import { SQLiteCompatibleAPI } from "pluresdb";
41
+
42
+ // Initialize database
43
+ const db = new SQLiteCompatibleAPI({
44
+ config: {
45
+ dataDir: path.join(context.globalStorageUri.fsPath, "pluresdb"),
46
+ port: 34567,
47
+ host: "localhost",
48
+ },
49
+ });
50
+
51
+ // Start database
52
+ await db.start();
53
+
54
+ // Store data
55
+ await db.put("user:123", { name: "John", email: "john@example.com" });
56
+
57
+ // Retrieve data
58
+ const user = await db.getValue("user:123");
59
+
60
+ // Vector search
61
+ const results = await db.vectorSearch("machine learning", 10);
62
+
63
+ // SQL queries
64
+ await db.exec("CREATE TABLE users (id TEXT, name TEXT)");
65
+ const users = await db.all("SELECT * FROM users");
66
+ ```
67
+
68
+ ## Migration from SQLite
69
+
70
+ If you're migrating from SQLite, the API is nearly identical:
71
+
72
+ ```typescript
73
+ // Before (SQLite)
74
+ import sqlite3 from "sqlite3";
75
+ const db = new sqlite3.Database("./data.db");
76
+
77
+ // After (PluresDB)
78
+ import { SQLiteCompatibleAPI } from "pluresdb";
79
+ const db = new SQLiteCompatibleAPI();
80
+ await db.start();
81
+ ```
82
+
83
+ ## Benefits of PluresDB
84
+
85
+ - **P2P Sync**: Share data across devices
86
+ - **Offline-First**: Work without internet
87
+ - **Vector Search**: Semantic search capabilities
88
+ - **Encrypted Sharing**: Secure data sharing
89
+ - **SQLite Compatibility**: Easy migration
90
+
91
+ ## Learn More
92
+
93
+ - [PluresDB Documentation](../../README.md)
94
+ - [VSCode Extension API](https://code.visualstudio.com/api)
95
+ - [Migration Guide](../../docs/VSCODE_MIGRATION.md)
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "pluresdb-extension-example",
3
+ "displayName": "PluresDB Extension Example",
4
+ "description": "Example VSCode extension using PluresDB",
5
+ "version": "0.0.1",
6
+ "engines": {
7
+ "vscode": "^1.74.0"
8
+ },
9
+ "categories": [
10
+ "Other"
11
+ ],
12
+ "activationEvents": [
13
+ "onCommand:pluresdb-example.helloWorld"
14
+ ],
15
+ "main": "./out/extension.js",
16
+ "contributes": {
17
+ "commands": [
18
+ {
19
+ "command": "pluresdb-example.helloWorld",
20
+ "title": "Hello World from PluresDB"
21
+ },
22
+ {
23
+ "command": "pluresdb-example.storeData",
24
+ "title": "Store Data in PluresDB"
25
+ },
26
+ {
27
+ "command": "pluresdb-example.retrieveData",
28
+ "title": "Retrieve Data from PluresDB"
29
+ },
30
+ {
31
+ "command": "pluresdb-example.searchData",
32
+ "title": "Search Data with Vector Search"
33
+ }
34
+ ]
35
+ },
36
+ "scripts": {
37
+ "vscode:prepublish": "npm run compile",
38
+ "compile": "tsc -p ./",
39
+ "watch": "tsc -watch -p ./"
40
+ },
41
+ "devDependencies": {
42
+ "@types/vscode": "^1.74.0",
43
+ "@types/node": "16.x",
44
+ "typescript": "^4.9.4"
45
+ },
46
+ "dependencies": {
47
+ "pluresdb": "file:../.."
48
+ }
49
+ }