frogql 0.2.0-rc.2
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/CHANGELOG.md +25 -0
- package/LICENSE +21 -0
- package/README.md +269 -0
- package/package.json +74 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `frogql` npm package will be documented here.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
Released in lock-step with the [PyPI `frogql` package](https://pypi.org/project/frogql/).
|
|
8
|
+
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
## [0.2.0-rc.2] — 2026-05-12
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Initial public release of the napi-rs Node.js bindings for froGQL.
|
|
16
|
+
- Module surface: `open(path)`, `importJson(dbPath, jsonPath)`, `importCsv(dbPath, csvDir)`.
|
|
17
|
+
- `Connection` class with `nodeCount`, `edgeCount`, `execute(query, limit?)`, `save()`, `schema()`, `graphTypes()`.
|
|
18
|
+
- Strong TypeScript types for return shapes: `SchemaSummary`, `GraphTypeSummary`, `NodeRef`, `EdgeRef`, `DmCounters`, `DdlOk`, `IndexResult`, `IndexSummary`.
|
|
19
|
+
- Polymorphic `execute()` typed as `unknown` with documented cast targets per statement kind.
|
|
20
|
+
- Per-platform prebuilt binaries: macOS x64 + arm64, Linux x64 + arm64 (glibc), Windows x64.
|
|
21
|
+
- Pre-release tag mapped to npm dist-tag `next`; stable releases land on `latest`.
|
|
22
|
+
|
|
23
|
+
### Notes
|
|
24
|
+
|
|
25
|
+
`-rc.x` indicates the release pipeline (build matrix, multi-package publish, provenance) is being validated. Surface and on-disk format are stable; the next release will be `0.2.0` without the suffix once the platform matrix has shipped one clean tag end-to-end.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Matías Toro and contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# frogql
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/frogql)
|
|
4
|
+
[](https://pypi.org/project/frogql/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
Embedded GQL graph database for Node.js. ISO GQL path-pattern queries, single-file `.gdb` storage, Leapfrog-Triejoin runtime, ships as a native addon. Designed to drop into a VSCode extension, an Electron app, or any Node service that needs an in-process graph DB without spinning up Neo4j.
|
|
8
|
+
|
|
9
|
+
Rust core compiled to a native `.node` binary via [napi-rs](https://napi.rs). Sibling Python package on [PyPI](https://pypi.org/project/frogql/) shares the same engine + on-disk format.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install frogql
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Prebuilt binaries for macOS x64 + arm64, Linux x64 + arm64 (glibc), Windows x64. npm picks the right one for the host at install time via `optionalDependencies` — no compilation step, no build toolchain needed.
|
|
18
|
+
|
|
19
|
+
## Quick start
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { open } from "frogql";
|
|
23
|
+
|
|
24
|
+
const conn = open("examples/movies.gdb");
|
|
25
|
+
|
|
26
|
+
// 1. Count nodes / edges
|
|
27
|
+
console.log(conn.nodeCount, conn.edgeCount);
|
|
28
|
+
|
|
29
|
+
// 2. Run a query — alias-keyed rows.
|
|
30
|
+
const rows = conn.execute(
|
|
31
|
+
`MATCH (m:Movie {released: 1999})<-[:ACTED_IN]-(p:Person)
|
|
32
|
+
RETURN p.name AS actor, m.title AS film`,
|
|
33
|
+
20
|
|
34
|
+
) as Array<{ actor: string; film: string }>;
|
|
35
|
+
|
|
36
|
+
console.log(rows);
|
|
37
|
+
// [
|
|
38
|
+
// { actor: "Keanu Reeves", film: "The Matrix" },
|
|
39
|
+
// { actor: "Carrie-Anne Moss", film: "The Matrix" },
|
|
40
|
+
// ...
|
|
41
|
+
// ]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Why frogql
|
|
45
|
+
|
|
46
|
+
- **ISO/IEC 39075:2024 path patterns.** Real Graph Query Language, not Cypher-flavoured pseudocode. Union (`|`), concat, repetition (`{n,m}`), `OPTIONAL MATCH`, `EXISTS`, `WHERE`, aggregates, `ORDER BY ... LIMIT`. Type system with subtyping, label algebra, and structural row types.
|
|
47
|
+
- **Worst-case-optimal join.** Leapfrog Triejoin over six sorted orderings of the edge set. 14×–4000× faster than pairwise hash-join on shape-heavy LDBC queries (numbers in [`docs/internals/JOIN_STRATEGY_NOTES.md`](https://github.com/pleiad/frogql/blob/main/docs/internals/JOIN_STRATEGY_NOTES.md)).
|
|
48
|
+
- **Single-file storage** (`.gdb`). 4 KB pages, slotted layout, CSR adjacency, page-cached property store. One file moves with your app.
|
|
49
|
+
- **Embeddable.** No server, no daemon, no HTTP. Open a path, run queries, close. Lives in the same process as your extension / Electron app / CLI.
|
|
50
|
+
- **Secondary indexes.** Hash for equality, B-tree for ranges. Auto-built per `(label, property)` pair where values are unique within a label. Optional DDL: `CREATE INDEX ... ON :Label(prop)`.
|
|
51
|
+
- **Data modification.** ISO §13 `INSERT`, `SET`, `REMOVE`, `DELETE`, `DETACH DELETE`. Overlay-on-disk model: mutations live in RAM until you call `conn.save()`, SQLite-style.
|
|
52
|
+
|
|
53
|
+
## API
|
|
54
|
+
|
|
55
|
+
### `open(path: string): Connection`
|
|
56
|
+
|
|
57
|
+
Open or create a `.gdb`. Eagerly warms the LTJ TripleIndex so the first query runs at warm-cache speed.
|
|
58
|
+
|
|
59
|
+
### `importJson(dbPath: string, jsonPath: string): void`
|
|
60
|
+
|
|
61
|
+
Build a fresh `.gdb` from a JSON file shaped `{ nodes: [...], edges: [...] }`. Overwrites the destination.
|
|
62
|
+
|
|
63
|
+
### `importCsv(dbPath: string, csvDir: string): void`
|
|
64
|
+
|
|
65
|
+
Build a fresh `.gdb` from a directory of CSVs configured via `spanner_import_config.json`. Used by the LDBC ingest pipeline; see [Cloud Spanner import format docs](https://cloud.google.com/spanner/docs/import).
|
|
66
|
+
|
|
67
|
+
### `class Connection`
|
|
68
|
+
|
|
69
|
+
| Member | Returns | Notes |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| `nodeCount` | `number` | Live count (base + overlay). |
|
|
72
|
+
| `edgeCount` | `number` | Live count (base + overlay). |
|
|
73
|
+
| `execute(query, limit?)` | `unknown` | Polymorphic — see [Return shapes](#executequery-limit-return-shapes). |
|
|
74
|
+
| `save()` | `void` | Persist base + overlay to the file the connection was opened from. |
|
|
75
|
+
| `schema()` | `SchemaSummary` | Sorted node / edge label sets + counts. |
|
|
76
|
+
| `graphTypes()` | `GraphTypeSummary[]` | Catalog entries with active markers. |
|
|
77
|
+
|
|
78
|
+
### `execute(query, limit?)` return shapes
|
|
79
|
+
|
|
80
|
+
`execute` returns `unknown` because the shape depends on the statement kind. Cast at the call site:
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import type {
|
|
84
|
+
NodeRef, EdgeRef, DmCounters, DdlOk, IndexResult, IndexSummary,
|
|
85
|
+
GraphTypeSummary, SchemaSummary,
|
|
86
|
+
} from "frogql";
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
| Statement | Cast target |
|
|
90
|
+
|---|---|
|
|
91
|
+
| Query with `RETURN` | `Array<Record<string, unknown>>` keyed by alias |
|
|
92
|
+
| Query without `RETURN` | `Array<{ _paths: unknown[]; [v: string]: unknown }>` |
|
|
93
|
+
| `CREATE / USE / DROP GRAPH TYPE` | `DdlOk` |
|
|
94
|
+
| `SHOW GRAPH TYPES` | `GraphTypeSummary[]` |
|
|
95
|
+
| `SHOW GRAPH TYPE <name>` | object with `name`, `active`, `nodes`, `edges`, `formatted`, optional `validation` |
|
|
96
|
+
| `CREATE / DROP INDEX` | `IndexResult` |
|
|
97
|
+
| `SHOW INDEXES` | `IndexSummary[]` |
|
|
98
|
+
| `INSERT / SET / REMOVE / DELETE / DETACH DELETE` | `DmCounters` |
|
|
99
|
+
|
|
100
|
+
Node and edge references inside row values use `NodeRef` / `EdgeRef`. The `props` field on `EdgeRef` is optional: present when returned via `RETURN e` at the top level, omitted in path-internal context to keep payloads small.
|
|
101
|
+
|
|
102
|
+
## Examples
|
|
103
|
+
|
|
104
|
+
### Pattern matching with repetition
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
const friends = conn.execute(
|
|
108
|
+
`MATCH (p:Person {id: 12345})~[:knows]~{1,2}(f:Person)
|
|
109
|
+
WHERE p <> f
|
|
110
|
+
RETURN f.firstName AS name, f.lastName AS surname
|
|
111
|
+
LIMIT 20`,
|
|
112
|
+
20
|
|
113
|
+
) as Array<{ name: string; surname: string }>;
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Bounded repetition `{1,2}` unrolls to a worst-case-optimal join per length. See [perf series](https://github.com/pleiad/frogql/blob/main/docs/internals/implemented-optimizations.md) for the optimizer pipeline.
|
|
117
|
+
|
|
118
|
+
### Aggregation + ordering
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
const top = conn.execute(
|
|
122
|
+
`MATCH (m:Movie)<-[:ACTED_IN]-(p:Person)
|
|
123
|
+
RETURN m.title AS film, COUNT(p) AS cast
|
|
124
|
+
GROUP BY m.title
|
|
125
|
+
ORDER BY cast DESC, film ASC
|
|
126
|
+
LIMIT 10`,
|
|
127
|
+
10
|
|
128
|
+
) as Array<{ film: string; cast: number }>;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`ORDER BY ... LIMIT` drives through a btree-backed top-k path when an index exists on the sort key; otherwise pdqsort.
|
|
132
|
+
|
|
133
|
+
### Optional match
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
const rows = conn.execute(
|
|
137
|
+
`MATCH (p:Person)
|
|
138
|
+
OPTIONAL MATCH (p)-[:ACTED_IN]->(m:Movie)
|
|
139
|
+
RETURN p.name AS actor, m.title AS film
|
|
140
|
+
LIMIT 50`,
|
|
141
|
+
50
|
|
142
|
+
) as Array<{ actor: string; film: string | null }>;
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Left-outer join with bind-pushdown: per outer row, pin shared variables and pin-execute the inner. SQLite-style nested-loop. ~93× speedup vs the global-evaluate-and-join baseline on LDBC IS5.
|
|
146
|
+
|
|
147
|
+
### Insert, modify, persist
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
import type { DmCounters } from "frogql";
|
|
151
|
+
|
|
152
|
+
const a = conn.execute("INSERT (:Person {name: 'Alice', age: 30})") as DmCounters;
|
|
153
|
+
console.log(a.nodesInserted); // 1
|
|
154
|
+
|
|
155
|
+
conn.execute("MATCH (p:Person {name: 'Alice'}) SET p.age = 31");
|
|
156
|
+
conn.execute("MATCH (p:Person {name: 'Alice'}) REMOVE p.age");
|
|
157
|
+
|
|
158
|
+
// Until you save(), mutations live in the in-memory overlay only.
|
|
159
|
+
conn.save();
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Schema introspection
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
const s = conn.schema();
|
|
166
|
+
// { nodeLabels: ['Movie', 'Person'], edgeLabels: ['ACTED_IN', ...], nodeCount: 171, edgeCount: 253 }
|
|
167
|
+
|
|
168
|
+
const types = conn.graphTypes();
|
|
169
|
+
// [{ name: 'DEFAULT', active: true, nodes: 2, edges: 6 }]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Indexes
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
const r = conn.execute("CREATE INDEX ON :Person(name) USING HASH") as IndexResult;
|
|
176
|
+
const r2 = conn.execute("CREATE INDEX ON :Person(age) USING BTREE") as IndexResult;
|
|
177
|
+
const idx = conn.execute("SHOW INDEXES") as IndexSummary[];
|
|
178
|
+
// auto-built indexes appear here too (auto: true).
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
`HASH` accelerates equality lookups (`x.name = 'Alice'`); `BTREE` powers range scans (`x.age >= 18`) and ORDER BY top-k.
|
|
182
|
+
|
|
183
|
+
## Use in a VSCode extension
|
|
184
|
+
|
|
185
|
+
The Node addon runs in-process inside the extension host (which is Node.js). No subprocess, no IPC, no serialisation overhead.
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
import * as vscode from "vscode";
|
|
189
|
+
import { open } from "frogql";
|
|
190
|
+
import type { NodeRef } from "frogql";
|
|
191
|
+
|
|
192
|
+
export function activate(ctx: vscode.ExtensionContext) {
|
|
193
|
+
const dbPath = ctx.asAbsolutePath("data/movies.gdb");
|
|
194
|
+
const conn = open(dbPath);
|
|
195
|
+
|
|
196
|
+
ctx.subscriptions.push(
|
|
197
|
+
vscode.commands.registerCommand("frogql.queryActors", async () => {
|
|
198
|
+
const film = await vscode.window.showInputBox({ prompt: "Movie title" });
|
|
199
|
+
if (!film) return;
|
|
200
|
+
const rows = conn.execute(
|
|
201
|
+
`MATCH (m:Movie {title: '${film.replace(/'/g, "\\'")}'})<-[:ACTED_IN]-(p:Person)
|
|
202
|
+
RETURN p.name AS actor`,
|
|
203
|
+
50
|
|
204
|
+
) as Array<{ actor: string }>;
|
|
205
|
+
vscode.window.showInformationMessage(rows.map(r => r.actor).join(", "));
|
|
206
|
+
})
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Add `frogql` to `dependencies` in `package.json`. `vsce package` bundles the platform `.node` into the `.vsix`.
|
|
212
|
+
|
|
213
|
+
**Caveats**
|
|
214
|
+
|
|
215
|
+
- Desktop only. Native addons don't load in `vscode.dev` / github.dev / Codespaces web. Use a WASM build for web targets.
|
|
216
|
+
- Per-platform packaging. A `.vsix` carries one platform binary. To ship for every OS, run `vsce package --target darwin-arm64`, `--target win32-x64`, etc. and publish per-platform on the marketplace.
|
|
217
|
+
|
|
218
|
+
## Platforms
|
|
219
|
+
|
|
220
|
+
| OS | Arch | npm package |
|
|
221
|
+
|---|---|---|
|
|
222
|
+
| macOS | x64 | `frogql-darwin-x64` |
|
|
223
|
+
| macOS | arm64 (Apple Silicon) | `frogql-darwin-arm64` |
|
|
224
|
+
| Linux | x64 (glibc) | `frogql-linux-x64-gnu` |
|
|
225
|
+
| Linux | arm64 (glibc) | `frogql-linux-arm64-gnu` |
|
|
226
|
+
| Windows | x64 | `frogql-win32-x64-msvc` |
|
|
227
|
+
|
|
228
|
+
Other targets (musl Linux, FreeBSD, Windows arm64) aren't built today. If you need one, open an issue at [pleiad/frogql](https://github.com/pleiad/frogql/issues).
|
|
229
|
+
|
|
230
|
+
## Performance
|
|
231
|
+
|
|
232
|
+
Numbers from `bench/data/ldbc-sf0.1.gdb` (LDBC Social Network scale-factor 0.1: 327K nodes, 1.5M edges) on an Apple M-series laptop, lazy backend, three iterations, warm cache:
|
|
233
|
+
|
|
234
|
+
| Query | gqlrust (with indexes) | GraphQLite (Cypher + SQLite reference) | Speedup |
|
|
235
|
+
|---|---|---|---|
|
|
236
|
+
| LDBC IC2 (recent messages) | **8.7 ms** | 32.8 ms | 3.8× |
|
|
237
|
+
| LDBC IS5 (forum on creator) | varies, indexed lookup + bind-pushdown | — | — |
|
|
238
|
+
|
|
239
|
+
Open time on the same DB: ~570 ms warm (string table 80 ms + topology 70 ms + secondary index auto-build 420 ms + TripleIndex 670 ms — the last two are memory-only and rebuild each open).
|
|
240
|
+
|
|
241
|
+
For the full benchmark suite see [`docs/internals/JOIN_STRATEGY_NOTES.md`](https://github.com/pleiad/frogql/blob/main/docs/internals/JOIN_STRATEGY_NOTES.md) and [`bench/cross-system/`](https://github.com/pleiad/frogql/tree/main/bench/cross-system).
|
|
242
|
+
|
|
243
|
+
## Versioning
|
|
244
|
+
|
|
245
|
+
Released in lock-step with the PyPI `frogql` package: a single `v*` git tag fires both release workflows. Same Rust core, same `.gdb` format, fully interoperable.
|
|
246
|
+
|
|
247
|
+
Pre-releases (`0.2.0-rc.1`, `-rc.2`, …) publish to dist-tag `next` so `npm install frogql` keeps pointing at the latest stable. Install a pre-release explicitly with `npm install frogql@next`.
|
|
248
|
+
|
|
249
|
+
## Develop locally
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
git clone https://github.com/pleiad/frogql.git
|
|
253
|
+
cd frogql/node
|
|
254
|
+
npm install
|
|
255
|
+
npm run build # produces frogql.<platform>.node + index.js + index.d.ts
|
|
256
|
+
npm test # runtime smoke tests (node --test)
|
|
257
|
+
npm run typecheck # tsc --noEmit against __test__/types.test.ts
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Requires Node ≥ 16 and a stable Rust toolchain.
|
|
261
|
+
|
|
262
|
+
## License
|
|
263
|
+
|
|
264
|
+
MIT. See [LICENSE](LICENSE).
|
|
265
|
+
|
|
266
|
+
## Related
|
|
267
|
+
|
|
268
|
+
- [`frogql` on PyPI](https://pypi.org/project/frogql/) — Python bindings, same engine.
|
|
269
|
+
- [`pleiad/frogql`](https://github.com/pleiad/frogql) — main repository, Rust core, CLI (`frogql` binary modelled on `sqlite3`), benchmark suite, architecture docs.
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "frogql",
|
|
3
|
+
"version": "0.2.0-rc.2",
|
|
4
|
+
"description": "froGQL — embedded GQL graph database with ISO GQL path patterns (Rust core, Node.js bindings via napi-rs)",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Matías Toro <mtoro.cl@gmail.com>",
|
|
9
|
+
"homepage": "https://github.com/pleiad/frogql#readme",
|
|
10
|
+
"bugs": "https://github.com/pleiad/frogql/issues",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/pleiad/frogql.git",
|
|
14
|
+
"directory": "node"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"gql",
|
|
18
|
+
"graph",
|
|
19
|
+
"database",
|
|
20
|
+
"query",
|
|
21
|
+
"ltj",
|
|
22
|
+
"leapfrog-triejoin",
|
|
23
|
+
"iso-gql",
|
|
24
|
+
"napi-rs"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">= 16"
|
|
28
|
+
},
|
|
29
|
+
"napi": {
|
|
30
|
+
"name": "frogql",
|
|
31
|
+
"triples": {
|
|
32
|
+
"defaults": false,
|
|
33
|
+
"additional": [
|
|
34
|
+
"x86_64-apple-darwin",
|
|
35
|
+
"aarch64-apple-darwin",
|
|
36
|
+
"x86_64-unknown-linux-gnu",
|
|
37
|
+
"aarch64-unknown-linux-gnu",
|
|
38
|
+
"x86_64-pc-windows-msvc"
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"artifacts": "napi artifacts",
|
|
44
|
+
"build": "napi build --platform --release",
|
|
45
|
+
"build:debug": "napi build --platform",
|
|
46
|
+
"test": "node --test __test__/smoke.mjs",
|
|
47
|
+
"typecheck": "tsc --noEmit",
|
|
48
|
+
"version": "napi version"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@napi-rs/cli": "^2.18.0",
|
|
52
|
+
"@types/node": "^20.0.0",
|
|
53
|
+
"typescript": "^5.4.0"
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"index.js",
|
|
57
|
+
"index.d.ts",
|
|
58
|
+
"README.md",
|
|
59
|
+
"CHANGELOG.md",
|
|
60
|
+
"LICENSE"
|
|
61
|
+
],
|
|
62
|
+
"publishConfig": {
|
|
63
|
+
"access": "public",
|
|
64
|
+
"registry": "https://registry.npmjs.org/",
|
|
65
|
+
"provenance": true
|
|
66
|
+
},
|
|
67
|
+
"optionalDependencies": {
|
|
68
|
+
"frogql-darwin-x64": "0.2.0-rc.2",
|
|
69
|
+
"frogql-darwin-arm64": "0.2.0-rc.2",
|
|
70
|
+
"frogql-linux-x64-gnu": "0.2.0-rc.2",
|
|
71
|
+
"frogql-linux-arm64-gnu": "0.2.0-rc.2",
|
|
72
|
+
"frogql-win32-x64-msvc": "0.2.0-rc.2"
|
|
73
|
+
}
|
|
74
|
+
}
|