@plures/pluresdb 1.4.0
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 +450 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/better-sqlite3-shared.d.ts +12 -0
- package/dist/better-sqlite3-shared.d.ts.map +1 -0
- package/dist/better-sqlite3-shared.js +143 -0
- package/dist/better-sqlite3-shared.js.map +1 -0
- package/dist/better-sqlite3.d.ts +4 -0
- package/dist/better-sqlite3.d.ts.map +1 -0
- package/dist/better-sqlite3.js +8 -0
- package/dist/better-sqlite3.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +258 -0
- package/dist/cli.js.map +1 -0
- package/dist/node-index.d.ts +148 -0
- package/dist/node-index.d.ts.map +1 -0
- package/dist/node-index.js +665 -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 +296 -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 +71 -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 +172 -0
- package/examples/vscode-extension-example/tsconfig.json +12 -0
- package/examples/vscode-extension-integration.d.ts +31 -0
- package/examples/vscode-extension-integration.d.ts.map +1 -0
- package/examples/vscode-extension-integration.js +319 -0
- package/examples/vscode-extension-integration.js.map +1 -0
- package/examples/vscode-extension-integration.ts +41 -0
- package/legacy/benchmarks/memory-benchmarks.ts +350 -0
- package/legacy/benchmarks/run-benchmarks.ts +315 -0
- package/legacy/better-sqlite3-shared.ts +157 -0
- package/legacy/better-sqlite3.ts +4 -0
- package/legacy/cli.ts +241 -0
- package/legacy/config.ts +50 -0
- package/legacy/core/crdt.ts +107 -0
- package/legacy/core/database.ts +529 -0
- package/legacy/healthcheck.ts +162 -0
- package/legacy/http/api-server.ts +438 -0
- package/legacy/index.ts +28 -0
- package/legacy/logic/rules.ts +46 -0
- package/legacy/main.rs +3 -0
- package/legacy/main.ts +197 -0
- package/legacy/network/websocket-server.ts +115 -0
- package/legacy/node-index.ts +823 -0
- package/legacy/node-wrapper.ts +329 -0
- package/legacy/sqlite-compat.ts +633 -0
- package/legacy/sqlite3-compat.ts +55 -0
- package/legacy/storage/kv-storage.ts +73 -0
- package/legacy/tests/core.test.ts +305 -0
- package/legacy/tests/fixtures/performance-data.json +71 -0
- package/legacy/tests/fixtures/test-data.json +129 -0
- package/legacy/tests/integration/api-server.test.ts +334 -0
- package/legacy/tests/integration/mesh-network.test.ts +303 -0
- package/legacy/tests/logic.test.ts +34 -0
- package/legacy/tests/performance/load.test.ts +290 -0
- package/legacy/tests/security/input-validation.test.ts +286 -0
- package/legacy/tests/unit/core.test.ts +226 -0
- package/legacy/tests/unit/subscriptions.test.ts +135 -0
- package/legacy/tests/unit/vector-search.test.ts +173 -0
- package/legacy/tests/vscode_extension_test.ts +281 -0
- package/legacy/types/index.ts +32 -0
- package/legacy/types/node-types.ts +80 -0
- package/legacy/util/debug.ts +14 -0
- package/legacy/vector/index.ts +59 -0
- package/legacy/vscode/extension.ts +387 -0
- package/package.json +127 -0
- package/scripts/compiled-crud-verify.ts +30 -0
- package/scripts/dogfood.ts +297 -0
- package/scripts/postinstall.js +156 -0
- package/scripts/release-check.js +190 -0
- package/scripts/run-tests.ts +178 -0
- package/scripts/setup-libclang.ps1 +209 -0
- package/scripts/update-changelog.js +214 -0
- package/web/README.md +27 -0
- package/web/svelte/package.json +31 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
PluresDB - Open Source License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Plures Organization
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Affero General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
===============================================================================
|
|
19
|
+
LICENSE COMPLIANCE
|
|
20
|
+
===============================================================================
|
|
21
|
+
|
|
22
|
+
AGPL v3 requires that:
|
|
23
|
+
- All modifications to PluresDB must be open source
|
|
24
|
+
- If you provide PluresDB as a service, you must offer source code to users
|
|
25
|
+
- Derivative works must be licensed under AGPL v3
|
|
26
|
+
- You cannot add additional restrictions
|
|
27
|
+
|
|
28
|
+
===============================================================================
|
|
29
|
+
THIRD-PARTY LICENSES
|
|
30
|
+
===============================================================================
|
|
31
|
+
|
|
32
|
+
This software includes third-party components with the following licenses:
|
|
33
|
+
|
|
34
|
+
Dependencies (MIT License):
|
|
35
|
+
- tokio: https://github.com/tokio-rs/tokio
|
|
36
|
+
- serde: https://github.com/serde-rs/serde
|
|
37
|
+
- axum: https://github.com/tokio-rs/axum
|
|
38
|
+
- sqlx: https://github.com/launchbadge/sqlx
|
|
39
|
+
- hnsw_rs: https://github.com/plures/hnsw_rs
|
|
40
|
+
|
|
41
|
+
JavaScript Dependencies (MIT License):
|
|
42
|
+
- axios: https://github.com/axios/axios
|
|
43
|
+
- cytoscape: https://github.com/cytoscape/cytoscape.js
|
|
44
|
+
- monaco-editor: https://github.com/microsoft/monaco-editor
|
|
45
|
+
|
|
46
|
+
All third-party components maintain their original licenses and copyrights.
|
|
47
|
+
|
|
48
|
+
===============================================================================
|
|
49
|
+
CONTACT INFORMATION
|
|
50
|
+
===============================================================================
|
|
51
|
+
|
|
52
|
+
GitHub: https://github.com/plures/pluresdb
|
|
53
|
+
Issues: https://github.com/plures/pluresdb/issues
|
|
54
|
+
Discussions: https://github.com/plures/pluresdb/discussions
|
|
55
|
+
|
|
56
|
+
For security issues, please see SECURITY.md
|
|
57
|
+
|
|
58
|
+
===============================================================================
|
|
59
|
+
LEGAL NOTICE
|
|
60
|
+
===============================================================================
|
|
61
|
+
|
|
62
|
+
This license ensures that:
|
|
63
|
+
- PluresDB remains free and open source
|
|
64
|
+
- All modifications must be shared with the community
|
|
65
|
+
- Network use triggers the requirement to share source code
|
|
66
|
+
- The software and community benefit from all improvements
|
|
67
|
+
- Commercial users can still build businesses on top of PluresDB
|
|
68
|
+
- We can generate revenue through services and support
|
|
69
|
+
- The ecosystem benefits from shared improvements
|
|
70
|
+
|
|
71
|
+
By using this software, you agree to the terms of the GNU Affero General
|
|
72
|
+
Public License v3.0.
|
package/README.md
ADDED
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
# PluresDB
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/pluresdb)
|
|
4
|
+
[](https://crates.io/crates/pluresdb-core)
|
|
5
|
+
[](https://deno.land)
|
|
6
|
+
[](https://opensource.org/licenses/AGPL-3.0)
|
|
7
|
+
|
|
8
|
+
**P2P Graph Database with SQLite Compatibility** - A local-first, offline-first database for modern applications.
|
|
9
|
+
|
|
10
|
+
> 💡 **Perfect for Personal Use on Windows!** PluresDB is ideal for note-taking, knowledge management, personal wikis, task tracking, and more. [Get Started on Windows →](docs/WINDOWS_GETTING_STARTED.md)
|
|
11
|
+
|
|
12
|
+
## 🚀 Quick Start
|
|
13
|
+
|
|
14
|
+
### Release channels (current)
|
|
15
|
+
|
|
16
|
+
- **Winget:** Published as `pluresdb.pluresdb` ([manifest](https://github.com/plures/pluresdb/blob/main/packaging/winget/pluresdb.yaml)) for Windows installs
|
|
17
|
+
- **npm:** [`pluresdb`](https://www.npmjs.com/package/pluresdb) (Node.js + better-sqlite3 compatibility)
|
|
18
|
+
- **crates.io:** [`pluresdb-core`](https://crates.io/crates/pluresdb-core), [`pluresdb-storage`](https://crates.io/crates/pluresdb-storage), [`pluresdb-sync`](https://crates.io/crates/pluresdb-sync), [`pluresdb-cli`](https://crates.io/crates/pluresdb-cli) (Rust crates)
|
|
19
|
+
- **JSR:** [`@plures/pluresdb`](https://jsr.io/@plures/pluresdb) (Deno module)
|
|
20
|
+
- **Docker Hub:** [`pluresdb/pluresdb`](https://hub.docker.com/r/pluresdb/pluresdb) (containerized deployment)
|
|
21
|
+
- **GitHub Releases:** Pre-built binaries for Windows, macOS, and Linux
|
|
22
|
+
|
|
23
|
+
For version-specific information and release notes, see the [CHANGELOG](CHANGELOG.md).
|
|
24
|
+
|
|
25
|
+
### Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# npm
|
|
29
|
+
npm install pluresdb
|
|
30
|
+
|
|
31
|
+
# yarn
|
|
32
|
+
yarn add pluresdb
|
|
33
|
+
|
|
34
|
+
# pnpm
|
|
35
|
+
pnpm add pluresdb
|
|
36
|
+
|
|
37
|
+
# Deno (JSR)
|
|
38
|
+
deno add @plures/pluresdb
|
|
39
|
+
|
|
40
|
+
# Rust (Cargo)
|
|
41
|
+
cargo add pluresdb-core pluresdb-storage pluresdb-sync
|
|
42
|
+
|
|
43
|
+
# Docker
|
|
44
|
+
docker pull pluresdb/pluresdb:latest
|
|
45
|
+
|
|
46
|
+
# Windows (Winget)
|
|
47
|
+
winget install pluresdb.pluresdb
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Development Prerequisites (Rust Components)
|
|
51
|
+
|
|
52
|
+
If you plan to build or test the Rust crates in this repository, make sure `libclang` is available so
|
|
53
|
+
bindgen-based dependencies (like `zstd-sys`) can compile. On Windows you can automate this setup with:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
pwsh ./scripts/setup-libclang.ps1 -ConfigureCurrentProcess
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The script will detect or install LLVM (via `winget`/`choco`), set the `LIBCLANG_PATH` environment variable,
|
|
60
|
+
and update the current session so that `cargo build` / `cargo test` can run without manual configuration.
|
|
61
|
+
Restart your terminal if you omit the `-ConfigureCurrentProcess` flag.
|
|
62
|
+
|
|
63
|
+
## 📦 Packaging Artifacts
|
|
64
|
+
|
|
65
|
+
Generate Windows, MSI, Deno, and Nix release bundles with the helper script:
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
pwsh ./packaging/scripts/build-packages.ps1
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The script automatically reads the release version from `Cargo.toml`. Override it for pre-release cuts if needed:
|
|
72
|
+
|
|
73
|
+
```powershell
|
|
74
|
+
pwsh ./packaging/scripts/build-packages.ps1 -Version 1.1.0-rc1
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Basic Usage
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { PluresNode, SQLiteCompatibleAPI } from "pluresdb";
|
|
81
|
+
|
|
82
|
+
// Start the database
|
|
83
|
+
const db = new PluresNode({
|
|
84
|
+
config: {
|
|
85
|
+
port: 34567,
|
|
86
|
+
host: "localhost",
|
|
87
|
+
dataDir: "./data",
|
|
88
|
+
},
|
|
89
|
+
autoStart: true,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Use SQLite-compatible API
|
|
93
|
+
const sqlite = new SQLiteCompatibleAPI();
|
|
94
|
+
|
|
95
|
+
// Create tables
|
|
96
|
+
await sqlite.exec(`
|
|
97
|
+
CREATE TABLE users (
|
|
98
|
+
id INTEGER PRIMARY KEY,
|
|
99
|
+
name TEXT,
|
|
100
|
+
email TEXT
|
|
101
|
+
)
|
|
102
|
+
`);
|
|
103
|
+
|
|
104
|
+
// Insert data
|
|
105
|
+
await sqlite.run("INSERT INTO users (name, email) VALUES (?, ?)", [
|
|
106
|
+
"John",
|
|
107
|
+
"john@example.com",
|
|
108
|
+
]);
|
|
109
|
+
|
|
110
|
+
// Query data
|
|
111
|
+
const users = await sqlite.all("SELECT * FROM users");
|
|
112
|
+
|
|
113
|
+
// Vector search
|
|
114
|
+
const results = await sqlite.vectorSearch("machine learning", 10);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### In Deno
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
import { GunDB, startApiServer } from "jsr:@plures/pluresdb";
|
|
121
|
+
|
|
122
|
+
const db = new GunDB();
|
|
123
|
+
await db.ready();
|
|
124
|
+
|
|
125
|
+
// start the mesh listener and optional HTTP API
|
|
126
|
+
db.serve({ port: 34567 });
|
|
127
|
+
const api = startApiServer({ port: 8080, db });
|
|
128
|
+
|
|
129
|
+
await db.put("user:alice", { name: "Alice", email: "alice@example.com" });
|
|
130
|
+
const record = await db.get("user:alice");
|
|
131
|
+
console.log(record);
|
|
132
|
+
|
|
133
|
+
// remember to close when the process exits
|
|
134
|
+
await db.close();
|
|
135
|
+
api.close();
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 🎯 Features
|
|
139
|
+
|
|
140
|
+
### Core Database
|
|
141
|
+
|
|
142
|
+
- **P2P Graph Database**: Distributed, peer-to-peer data storage
|
|
143
|
+
- **SQLite Compatibility**: 95% SQLite API compatibility for easy migration
|
|
144
|
+
- **CRDT Conflict Resolution**: Automatic conflict resolution for distributed data
|
|
145
|
+
- **Vector Search**: Built-in vector embeddings and similarity search
|
|
146
|
+
- **Local-First**: Offline-first data storage with sync when online
|
|
147
|
+
|
|
148
|
+
### P2P Ecosystem
|
|
149
|
+
|
|
150
|
+
- **Identity Management**: Public key infrastructure for peer identification
|
|
151
|
+
- **Encrypted Sharing**: End-to-end encrypted data sharing between peers
|
|
152
|
+
- **Cross-Device Sync**: Automatic synchronization across all your devices
|
|
153
|
+
- **Acceptance Policies**: Granular control over what data to accept from peers
|
|
154
|
+
|
|
155
|
+
### Developer Experience
|
|
156
|
+
|
|
157
|
+
- **TypeScript Support**: Full TypeScript definitions included
|
|
158
|
+
- **VSCode Integration**: Easy integration with VSCode extensions
|
|
159
|
+
- **Web UI**: Comprehensive 24-tab management interface
|
|
160
|
+
- **REST API**: Full REST API for web applications
|
|
161
|
+
- **WebSocket API**: Real-time updates and synchronization
|
|
162
|
+
|
|
163
|
+
## 📦 Installation Methods
|
|
164
|
+
|
|
165
|
+
### Windows (Personal Database Use)
|
|
166
|
+
|
|
167
|
+
**Recommended for Windows users who want a personal database (`pluresdb.pluresdb`):**
|
|
168
|
+
|
|
169
|
+
```powershell
|
|
170
|
+
# Option 1: Using winget
|
|
171
|
+
winget install pluresdb.pluresdb
|
|
172
|
+
|
|
173
|
+
# Option 2: Using PowerShell installer
|
|
174
|
+
irm https://raw.githubusercontent.com/plures/pluresdb/main/install.ps1 | iex
|
|
175
|
+
|
|
176
|
+
# Option 3: Download ZIP from releases
|
|
177
|
+
# Extract and run start.bat
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
📖 **[Complete Windows Getting Started Guide →](docs/WINDOWS_GETTING_STARTED.md)**
|
|
181
|
+
|
|
182
|
+
### Package Managers
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# macOS
|
|
186
|
+
brew install plures/pluresdb/pluresdb
|
|
187
|
+
|
|
188
|
+
# Linux (NixOS)
|
|
189
|
+
nix-env -iA nixpkgs.pluresdb
|
|
190
|
+
|
|
191
|
+
# Universal install script
|
|
192
|
+
curl -fsSL https://raw.githubusercontent.com/plures/pluresdb/main/install.sh | bash
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Docker
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
docker pull plures/pluresdb:latest
|
|
199
|
+
docker run -p 34567:34567 -p 34568:34568 plures/pluresdb:latest
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 🔧 VSCode Extension Integration
|
|
203
|
+
|
|
204
|
+
Perfect for VSCode extensions that currently use SQLite:
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
import { SQLiteCompatibleAPI } from "pluresdb";
|
|
208
|
+
|
|
209
|
+
export function activate(context: vscode.ExtensionContext) {
|
|
210
|
+
// Replace your SQLite database with PluresDB
|
|
211
|
+
const db = new SQLiteCompatibleAPI({
|
|
212
|
+
config: {
|
|
213
|
+
dataDir: path.join(context.globalStorageUri.fsPath, "pluresdb"),
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Use the same SQLite API you're familiar with
|
|
218
|
+
await db.exec("CREATE TABLE settings (key TEXT, value TEXT)");
|
|
219
|
+
await db.run("INSERT INTO settings VALUES (?, ?)", ["theme", "dark"]);
|
|
220
|
+
const settings = await db.all("SELECT * FROM settings");
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## 🌐 Web UI
|
|
225
|
+
|
|
226
|
+
Access the comprehensive web interface at `http://localhost:34568`:
|
|
227
|
+
|
|
228
|
+
- **Data Explorer**: Browse and edit your data
|
|
229
|
+
- **Graph Visualization**: Interactive graph view of relationships
|
|
230
|
+
- **Vector Search**: Semantic search across your data
|
|
231
|
+
- **P2P Management**: Manage peers and encrypted sharing
|
|
232
|
+
- **Performance Monitoring**: Real-time performance metrics
|
|
233
|
+
- **Settings**: Configure database and P2P settings
|
|
234
|
+
|
|
235
|
+
## 🔌 API Reference
|
|
236
|
+
|
|
237
|
+
### SQLite-Compatible API
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
// Database operations
|
|
241
|
+
await sqlite.exec(sql); // Execute SQL
|
|
242
|
+
await sqlite.run(sql, params); // Run SQL with parameters
|
|
243
|
+
await sqlite.get(sql, params); // Get single row
|
|
244
|
+
await sqlite.all(sql, params); // Get all rows
|
|
245
|
+
|
|
246
|
+
// Key-value operations
|
|
247
|
+
await sqlite.put(key, value); // Store key-value pair
|
|
248
|
+
await sqlite.getValue(key); // Get value by key
|
|
249
|
+
await sqlite.delete(key); // Delete key
|
|
250
|
+
|
|
251
|
+
// Vector search
|
|
252
|
+
await sqlite.vectorSearch(query, limit); // Semantic search
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### better-sqlite3-Compatible API
|
|
256
|
+
|
|
257
|
+
Need the synchronous ergonomics of [`better-sqlite3`](https://github.com/WiseLibs/better-sqlite3)?
|
|
258
|
+
The Node package now ships a compatibility layer that mirrors its familiar
|
|
259
|
+
`Database`/`Statement` workflow while proxying calls to PluresDB.
|
|
260
|
+
|
|
261
|
+
> **Note:** PluresDB operations run through HTTP and therefore return Promises.
|
|
262
|
+
> You can still keep the same control flow by awaiting each call.
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
import Database from "pluresdb/better-sqlite3";
|
|
266
|
+
|
|
267
|
+
const db = await new Database("./data.db", { autoStart: true }).open();
|
|
268
|
+
await db.exec(
|
|
269
|
+
"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)",
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
const insert = db.prepare("INSERT INTO users (name) VALUES (?)");
|
|
273
|
+
await insert.run("Ada Lovelace");
|
|
274
|
+
|
|
275
|
+
const select = db.prepare("SELECT id, name FROM users ORDER BY id");
|
|
276
|
+
const people = await select.all();
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Statements support `run`, `get`, `all`, `iterate`, and common mode toggles like
|
|
280
|
+
`.raw()`, `.pluck()`, and `.expand(true)` for dotted column names.
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
const singleColumnValues = await select.pluck().all();
|
|
284
|
+
const nestedRows = await select.expand().all();
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Transaction helpers mirror `better-sqlite3` as well:
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
const write = db.transaction(async (users) => {
|
|
291
|
+
for (const user of users) {
|
|
292
|
+
await insert.run(user.name);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
await write([{ name: "Grace Hopper" }, { name: "Margaret Hamilton" }]);
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### P2P API
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// Identity management
|
|
303
|
+
await db.createIdentity({ name: "John", email: "john@example.com" });
|
|
304
|
+
await db.searchPeers("developer");
|
|
305
|
+
|
|
306
|
+
// Encrypted sharing
|
|
307
|
+
await db.shareNode(nodeId, targetPeerId, { accessLevel: "read-only" });
|
|
308
|
+
await db.acceptSharedNode(sharedNodeId);
|
|
309
|
+
|
|
310
|
+
// Cross-device sync
|
|
311
|
+
await db.addDevice({ name: "My Phone", type: "phone" });
|
|
312
|
+
await db.syncWithDevice(deviceId);
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## 🗂️ Monorepo layout & Rust implementation
|
|
316
|
+
|
|
317
|
+
PluresDB ships as a Rust-first monorepo with language bindings for Deno and Node; the top-level layout is:
|
|
318
|
+
|
|
319
|
+
- **Rust workspace:** `crates/` hosts the production Rust core (`pluresdb-core`, `pluresdb-storage`, `pluresdb-sync`) plus bindings and tools (`pluresdb-cli`, `pluresdb-node`, `pluresdb-deno`).
|
|
320
|
+
- **JavaScript/TypeScript:** `legacy/` retains the original Deno/Node code paths for compatibility and references the same APIs exported via `package.json`/`mod.ts`.
|
|
321
|
+
- **Packaging:** `packaging/` and `packaging/winget/` contain the MSI/winget artifacts that back the published Windows package.
|
|
322
|
+
|
|
323
|
+
## 🚀 Migration from SQLite
|
|
324
|
+
|
|
325
|
+
Migrating from SQLite is straightforward:
|
|
326
|
+
|
|
327
|
+
1. **Install PluresDB**: `npm install pluresdb`
|
|
328
|
+
2. **Replace imports**: Change `sqlite3` to `pluresdb`
|
|
329
|
+
3. **Update initialization**: Use `SQLiteCompatibleAPI` instead of `sqlite3.Database`
|
|
330
|
+
4. **Keep your queries**: All SQL queries work the same way
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
// Before (SQLite)
|
|
334
|
+
import sqlite3 from "sqlite3";
|
|
335
|
+
const db = new sqlite3.Database("./data.db");
|
|
336
|
+
|
|
337
|
+
// After (PluresDB)
|
|
338
|
+
import { SQLiteCompatibleAPI } from "pluresdb";
|
|
339
|
+
const db = new SQLiteCompatibleAPI();
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## 🔒 Security
|
|
343
|
+
|
|
344
|
+
- **End-to-End Encryption**: All shared data is encrypted
|
|
345
|
+
- **Public Key Infrastructure**: Secure peer identification
|
|
346
|
+
- **Access Control**: Granular permissions and policies
|
|
347
|
+
- **Audit Trail**: Complete logging of all activities
|
|
348
|
+
- **Local-First**: Your data stays on your devices
|
|
349
|
+
- **Payload Sanitization**: Incoming records are scrubbed to neutralize prototype pollution and function injection attempts
|
|
350
|
+
|
|
351
|
+
## 🧪 Testing & Verification
|
|
352
|
+
|
|
353
|
+
PluresDB ships with a unified verification workflow that compiles the TypeScript entry points and runs every Deno test suite (integration, performance, security, and unit).
|
|
354
|
+
|
|
355
|
+
```powershell
|
|
356
|
+
npm run verify
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
The command executes `tsc -p tsconfig.json` followed by `deno test -A --unstable-kv`, ensuring shipping builds stay green.
|
|
360
|
+
|
|
361
|
+
### Azure Relay Testing
|
|
362
|
+
|
|
363
|
+
For testing P2P relay functionality in a cloud environment, PluresDB includes Azure infrastructure automation:
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
# Deploy test environment with 3 nodes
|
|
367
|
+
cd azure/scripts
|
|
368
|
+
./deploy.sh --environment test --node-count 3
|
|
369
|
+
|
|
370
|
+
# Run relay tests
|
|
371
|
+
npm run test:azure:relay
|
|
372
|
+
|
|
373
|
+
# Clean up
|
|
374
|
+
./destroy.sh --environment test
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
See [Azure Testing Guide](azure/README.md) and [Quick Start](azure/QUICKSTART.md) for detailed instructions.
|
|
378
|
+
|
|
379
|
+
## 📊 Performance
|
|
380
|
+
|
|
381
|
+
- **Vector Search**: Sub-millisecond similarity search
|
|
382
|
+
- **CRDT Sync**: Efficient conflict resolution
|
|
383
|
+
- **Local Storage**: Fast local operations
|
|
384
|
+
- **P2P Sync**: Optimized for bandwidth and latency
|
|
385
|
+
- **Memory Efficient**: Minimal memory footprint
|
|
386
|
+
|
|
387
|
+
## 🌍 Use Cases
|
|
388
|
+
|
|
389
|
+
### Personal Database & Knowledge Management 📝
|
|
390
|
+
|
|
391
|
+
PluresDB is **perfect for personal use on Windows** as a local-first database:
|
|
392
|
+
|
|
393
|
+
- **Digital Journal**: Daily logs, mood tracking, personal reflections
|
|
394
|
+
- **Note-taking System**: Organize notes with tags, relationships, and smart search
|
|
395
|
+
- **Personal Wiki**: Build your own knowledge base with linked concepts
|
|
396
|
+
- **Task Manager**: Track personal and work tasks with custom fields
|
|
397
|
+
- **Research Database**: Collect papers, articles, bookmarks with metadata
|
|
398
|
+
- **Contact Manager**: Store contacts with rich relationships
|
|
399
|
+
- **Recipe Collection**: Searchable recipes with ingredients and ratings
|
|
400
|
+
- **Password Vault**: Encrypted storage for sensitive information
|
|
401
|
+
- **Bookmark Manager**: Save and organize web links with AI-powered search
|
|
402
|
+
|
|
403
|
+
👉 **[Windows Getting Started Guide](docs/WINDOWS_GETTING_STARTED.md)** for personal database setup
|
|
404
|
+
|
|
405
|
+
### Application Development 🚀
|
|
406
|
+
|
|
407
|
+
- **VSCode Extensions**: Replace SQLite with P2P capabilities
|
|
408
|
+
- **Local-First Apps**: Offline-first applications
|
|
409
|
+
- **Collaborative Tools**: Real-time collaboration
|
|
410
|
+
- **IoT Applications**: Edge computing and sync
|
|
411
|
+
- **Research Projects**: Academic and research data
|
|
412
|
+
- **Personal Knowledge Management**: Personal wikis and notes
|
|
413
|
+
|
|
414
|
+
## 📚 Documentation
|
|
415
|
+
|
|
416
|
+
- [Installation Guide](packaging/INSTALLATION.md)
|
|
417
|
+
- [API Reference](docs/API.md)
|
|
418
|
+
- [VSCode Integration](examples/vscode-extension-integration.ts)
|
|
419
|
+
- [Migration Guide](docs/MIGRATION.md)
|
|
420
|
+
- [P2P Guide](docs/P2P.md)
|
|
421
|
+
|
|
422
|
+
## 🤝 Contributing
|
|
423
|
+
|
|
424
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
425
|
+
|
|
426
|
+
**Note**: By contributing to PluresDB, you agree that your contributions will be licensed under the AGPL v3 license.
|
|
427
|
+
|
|
428
|
+
## 📄 License
|
|
429
|
+
|
|
430
|
+
This project is licensed under the GNU Affero General Public License v3.0 (AGPL v3). This ensures that all modifications to PluresDB remain open source. See [LICENSE](LICENSE) for details.
|
|
431
|
+
|
|
432
|
+
## 🆘 Support
|
|
433
|
+
|
|
434
|
+
- **Issues**: [GitHub Issues](https://github.com/plures/pluresdb/issues)
|
|
435
|
+
- **Discussions**: [GitHub Discussions](https://github.com/plures/pluresdb/discussions)
|
|
436
|
+
|
|
437
|
+
For security issues, please see our [Security Policy](SECURITY.md).
|
|
438
|
+
|
|
439
|
+
## 🙏 Acknowledgments
|
|
440
|
+
|
|
441
|
+
- Built with [Deno](https://deno.land/)
|
|
442
|
+
- Inspired by [Gun.js](https://gun.eco/)
|
|
443
|
+
- Web UI built with [Svelte](https://svelte.dev/)
|
|
444
|
+
- Vector search powered by [HNSW](https://github.com/nmslib/hnswlib)
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
**Ready to build the future of local-first applications?** 🚀
|
|
449
|
+
|
|
450
|
+
[Get Started](packaging/INSTALLATION.md) | [View Examples](examples/) | [GitHub Discussions](https://github.com/plures/pluresdb/discussions)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../legacy/types/node-types.ts","../legacy/better-sqlite3-shared.ts","../legacy/vscode/extension.ts","../legacy/node-index.ts","../legacy/better-sqlite3.ts","../legacy/types/index.ts","../legacy/node-wrapper.ts","../legacy/cli.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts"],"fileIdsList":[[58,71,119,136,137],[61,71,119,136,137],[64,71,119,131,136,137,141,143],[58,59,60,71,119,120,130,131,136,137,140,141,143,167],[63,71,119,120,130,131,136,137,140,141],[71,119,136,137],[58,61,71,119,136,137,141],[71,116,117,119,136,137],[71,118,119,136,137],[119,136,137],[71,119,124,136,137,154],[71,119,120,125,130,136,137,139,151,162],[71,119,120,121,130,136,137,139],[66,67,68,71,119,136,137],[71,119,122,136,137,163],[71,119,123,124,131,136,137,140],[71,119,124,136,137,151,159],[71,119,125,127,130,136,137,139],[71,118,119,126,136,137],[71,119,127,128,136,137],[71,119,129,130,136,137],[71,118,119,130,136,137],[71,119,130,131,132,136,137,151,162],[71,119,130,131,132,136,137,146,151,154],[71,112,119,127,130,133,136,137,139,151,162],[71,119,130,131,133,134,136,137,139,151,159,162],[71,119,133,135,136,137,151,159,162],[69,70,71,72,73,74,75,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168],[71,119,130,136,137],[71,119,136,137,138,162],[71,119,127,130,136,137,139,151],[71,119,136,137,140],[71,119,136,137,141],[71,118,119,136,137,142],[71,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168],[71,119,136,137,144],[71,119,136,137,145],[71,119,130,136,137,146,147],[71,119,136,137,146,148,163,165],[71,119,131,136,137],[71,119,130,136,137,151,152,154],[71,119,136,137,153,154],[71,119,136,137,151,152],[71,119,136,137,154],[71,119,136,137,155],[71,116,119,136,137,151,156],[71,119,130,136,137,157,158],[71,119,136,137,157,158],[71,119,124,136,137,139,151,159],[71,119,136,137,160],[71,119,136,137,139,161],[71,119,133,136,137,145,162],[71,119,124,136,137,163],[71,119,136,137,151,164],[71,119,136,137,138,165],[71,119,136,137,166],[71,112,119,136,137],[71,112,119,130,132,136,137,142,151,154,162,164,165,167],[71,119,136,137,151,168],[71,84,88,119,136,137,162],[71,84,119,136,137,151,162],[71,79,119,136,137],[71,81,84,119,136,137,159,162],[71,119,136,137,139,159],[71,119,136,137,169],[71,79,119,136,137,169],[71,81,84,119,136,137,139,162],[71,76,77,80,83,119,130,136,137,151,162],[71,84,91,119,136,137],[71,76,82,119,136,137],[71,84,105,106,119,136,137],[71,80,84,119,136,137,154,162,169],[71,105,119,136,137,169],[71,78,79,119,136,137,169],[71,84,119,136,137],[71,78,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,110,111,119,136,137],[71,84,99,119,136,137],[71,84,91,92,119,136,137],[71,82,84,92,93,119,136,137],[71,83,119,136,137],[71,76,79,84,119,136,137],[71,84,88,92,93,119,136,137],[71,88,119,136,137],[71,82,84,87,119,136,137,162],[71,76,81,84,91,119,136,137],[71,119,136,137,151],[71,79,84,105,119,136,137,167,169]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"5ddfd2a854188edc6ab9070531144708355a3de82bfe3518f3728c9e9249942c","signature":"886602dde98ba1ed4d3caaa2bf4e820ee5d1d1399f3922b6deb3fcaaa26035fb"},{"version":"3076c2933572b94e91dfb7230c169e3927d02be79e0aa778cd37f16fb731c9d7","signature":"1bc0988b2958a7395d441116b6441f197142a062ec8bd4dcc48c9c628d89de8d"},{"version":"68a8f6e1e81a7f2fab0bafe60a4cbb4b49635a5f99d17f3e70fcf02bed474264","signature":"dc916e2a4affd8a9b869498cb6185691ebc66500f8f3c49b3d80bc91c54353ba"},{"version":"b711ddaca8170c1a949eb20b4f3091a7e9e408b4c4def0fb75f36481f24cc2c2","signature":"0c1d7573a05dbb181cde668c0e686b65465a4b414fa75937ef80bec82eb70d73"},{"version":"c9e9bc3a28176934ea7039392042e0b3e71911a244ae43aa91b9aa9ba43c46b9","signature":"400dca09d3a2b7dff0ea7b01952631cd00c65adbc563982cef4a874f142a0f77"},{"version":"d9d71dd78cdad0ba54747b05d81c590bc8b9f63a958e1e79c066f39918b7925a","signature":"4b6d45b9585e924547324ba400ba1b79cab92dc8e285987551409101ffefb601"},{"version":"2b2251b7ac140b0796ca7839fcf32c13464180ecb2e5ae949e37b3e303d836a5","signature":"64402f8e9e44251160da5eba6818d78e5cc5de0a970ba6986a3014f0118e6faa"},{"version":"f43513ada7ab6e219546e7532d6a93da49703fc222ec54802b7bccdce7d6c761","signature":"fe07acf00866a96f9f923514d12053332faf9364947bf7de840f57afa4e08364"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"bb45cd435da536500f1d9692a9b49d0c570b763ccbf00473248b777f5c1f353b","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"21145ce1c54e05ef9e52092b98a4ebfb326b92f52e76e47211c50cfcd2a2b4ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c959a391a75be9789b43c8468f71e3fa06488b4d691d5729dde1416dcd38225b","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"5ebe6f4cc3b803cbfc962bae0d954f9c80e5078ca41eb3f1de41d92e7193ef37","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1}],"root":[[58,62],64,65],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"checkJs":false,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"outDir":"./","rootDir":"../legacy","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[59,1],[62,2],[65,3],[61,4],[64,5],[63,6],[58,6],[60,7],[116,8],[117,8],[118,9],[71,10],[119,11],[120,12],[121,13],[66,6],[69,14],[67,6],[68,6],[122,15],[123,16],[124,17],[125,18],[126,19],[127,20],[128,20],[129,21],[130,22],[131,23],[132,24],[72,6],[70,6],[133,25],[134,26],[135,27],[169,28],[136,29],[137,6],[138,30],[139,31],[140,32],[141,33],[142,34],[143,35],[144,36],[145,37],[146,38],[147,38],[148,39],[149,6],[150,40],[151,41],[153,42],[152,43],[154,44],[155,45],[156,46],[157,47],[158,48],[159,49],[160,50],[161,51],[162,52],[163,53],[164,54],[165,55],[166,56],[73,6],[74,6],[75,6],[113,57],[114,6],[115,6],[167,58],[168,59],[56,6],[57,6],[11,6],[10,6],[2,6],[12,6],[13,6],[14,6],[15,6],[16,6],[17,6],[18,6],[19,6],[3,6],[20,6],[21,6],[4,6],[22,6],[26,6],[23,6],[24,6],[25,6],[27,6],[28,6],[29,6],[5,6],[30,6],[31,6],[32,6],[33,6],[6,6],[37,6],[34,6],[35,6],[36,6],[38,6],[7,6],[39,6],[44,6],[45,6],[40,6],[41,6],[42,6],[43,6],[8,6],[49,6],[46,6],[47,6],[48,6],[50,6],[9,6],[51,6],[52,6],[53,6],[55,6],[54,6],[1,6],[91,60],[101,61],[90,60],[111,62],[82,63],[81,64],[110,65],[104,66],[109,67],[84,68],[98,69],[83,70],[107,71],[79,72],[78,65],[108,73],[80,74],[85,75],[86,6],[89,75],[76,6],[112,76],[102,77],[93,78],[94,79],[96,80],[92,81],[95,82],[105,65],[87,83],[88,84],[97,85],[77,86],[100,77],[99,75],[103,6],[106,87]],"version":"5.9.3"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { QueryResult } from "./types/node-types";
|
|
2
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
3
|
+
export declare function normalizeParameterInput(args: unknown[]): unknown[];
|
|
4
|
+
export declare function shapeRow(row: unknown, columns: string[] | undefined, mode: {
|
|
5
|
+
raw: boolean;
|
|
6
|
+
pluck: boolean;
|
|
7
|
+
expand: boolean;
|
|
8
|
+
}): unknown;
|
|
9
|
+
export declare function normalizeQueryResult(raw: unknown): QueryResult;
|
|
10
|
+
export declare function splitSqlStatements(sql: string): string[];
|
|
11
|
+
export declare function sanitizeDataDirName(name: string): string;
|
|
12
|
+
//# sourceMappingURL=better-sqlite3-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-sqlite3-shared.d.ts","sourceRoot":"","sources":["../legacy/better-sqlite3-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMlC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAelE;AAyBD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,IAAI,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACtD,OAAO,CA4CT;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CA2C9D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAKxD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD"}
|