@typicalday/firegraph 0.8.0 → 0.9.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/dist/backend.cjs +222 -0
- package/dist/backend.cjs.map +1 -0
- package/dist/backend.d.cts +121 -0
- package/dist/backend.d.ts +121 -0
- package/dist/backend.js +136 -0
- package/dist/backend.js.map +1 -0
- package/dist/{chunk-6OQW5OKO.js → chunk-5753Y42M.js} +12 -4
- package/dist/chunk-5753Y42M.js.map +1 -0
- package/dist/{chunk-YUXOALMR.js → chunk-EVUM6ORB.js} +14 -92
- package/dist/chunk-EVUM6ORB.js.map +1 -0
- package/dist/chunk-GLOVWKQH.js +94 -0
- package/dist/chunk-GLOVWKQH.js.map +1 -0
- package/dist/{chunk-KFA7G37W.js → chunk-SU4FNLC3.js} +32 -30
- package/dist/chunk-SU4FNLC3.js.map +1 -0
- package/dist/{chunk-WOAJRVHD.js → chunk-SZ6W4VAS.js} +5 -3
- package/dist/{chunk-WOAJRVHD.js.map → chunk-SZ6W4VAS.js.map} +1 -1
- package/dist/chunk-TYYPRVIE.js +57 -0
- package/dist/chunk-TYYPRVIE.js.map +1 -0
- package/dist/codegen/index.d.cts +1 -1
- package/dist/codegen/index.d.ts +1 -1
- package/dist/d1.cjs +11 -6
- package/dist/d1.cjs.map +1 -1
- package/dist/d1.d.cts +1 -1
- package/dist/d1.d.ts +1 -1
- package/dist/d1.js +3 -2
- package/dist/d1.js.map +1 -1
- package/dist/do-sqlite.cjs +11 -6
- package/dist/do-sqlite.cjs.map +1 -1
- package/dist/do-sqlite.d.cts +1 -1
- package/dist/do-sqlite.d.ts +1 -1
- package/dist/do-sqlite.js +3 -2
- package/dist/do-sqlite.js.map +1 -1
- package/dist/editor/client/assets/index-Bq2bfzeY.js +411 -0
- package/dist/editor/client/index.html +1 -1
- package/dist/editor/server/index.mjs +6432 -6333
- package/dist/index.cjs +110 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -133
- package/dist/index.d.ts +5 -133
- package/dist/index.js +36 -27
- package/dist/index.js.map +1 -1
- package/dist/query-client/index.cjs +30 -28
- package/dist/query-client/index.cjs.map +1 -1
- package/dist/query-client/index.d.cts +2 -2
- package/dist/query-client/index.d.ts +2 -2
- package/dist/query-client/index.js +1 -1
- package/dist/react.cjs +0 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +0 -1
- package/dist/react.js.map +1 -1
- package/dist/scope-path-BtajqNK5.d.ts +234 -0
- package/dist/scope-path-D2mNENJ-.d.cts +234 -0
- package/dist/{serialization-C6JNNOCS.js → serialization-ZZ7RSDRX.js} +2 -2
- package/dist/svelte.cjs +0 -2
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.js +0 -2
- package/dist/svelte.js.map +1 -1
- package/dist/{types-BVtx9zLv.d.cts → types-DfWVTsMn.d.cts} +3 -2
- package/dist/{types-BVtx9zLv.d.ts → types-DfWVTsMn.d.ts} +3 -2
- package/package.json +12 -1
- package/dist/chunk-6OQW5OKO.js.map +0 -1
- package/dist/chunk-KFA7G37W.js.map +0 -1
- package/dist/chunk-YUXOALMR.js.map +0 -1
- package/dist/editor/client/assets/index-tyFcX6qG.js +0 -411
- /package/dist/{serialization-C6JNNOCS.js.map → serialization-ZZ7RSDRX.js.map} +0 -0
package/dist/d1.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { G as GraphClientOptions, D as DynamicRegistryConfig, a as DynamicGraphClient, b as GraphClient } from './types-
|
|
1
|
+
import { G as GraphClientOptions, D as DynamicRegistryConfig, a as DynamicGraphClient, b as GraphClient } from './types-DfWVTsMn.cjs';
|
|
2
2
|
import '@google-cloud/firestore';
|
|
3
3
|
|
|
4
4
|
/**
|
package/dist/d1.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { G as GraphClientOptions, D as DynamicRegistryConfig, a as DynamicGraphClient, b as GraphClient } from './types-
|
|
1
|
+
import { G as GraphClientOptions, D as DynamicRegistryConfig, a as DynamicGraphClient, b as GraphClient } from './types-DfWVTsMn.js';
|
|
2
2
|
import '@google-cloud/firestore';
|
|
3
3
|
|
|
4
4
|
/**
|
package/dist/d1.js
CHANGED
|
@@ -2,10 +2,11 @@ import {
|
|
|
2
2
|
buildSchemaStatements,
|
|
3
3
|
createSqliteBackend,
|
|
4
4
|
validateTableName
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SZ6W4VAS.js";
|
|
6
6
|
import {
|
|
7
7
|
createGraphClientFromBackend
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EVUM6ORB.js";
|
|
9
|
+
import "./chunk-GLOVWKQH.js";
|
|
9
10
|
|
|
10
11
|
// src/d1.ts
|
|
11
12
|
var D1Executor = class {
|
package/dist/d1.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/d1.ts"],"sourcesContent":["/**\n * Cloudflare D1 driver for firegraph.\n *\n * D1 is async, prepared-statement-based, and supports atomic multi-statement\n * batches via `db.batch()`. D1 has no interactive transactions — reads and\n * conditional writes cannot be interleaved, so `GraphClient.runTransaction()`\n * will throw `UNSUPPORTED_OPERATION` on this driver. Use `GraphClient.batch()`\n * or migrate to Durable Object SQLite for interactive transactions.\n *\n * **Bulk-delete atomicity:** `db.batch()` is atomic *within* one batch but D1\n * caps batches at ~100 statements / 1000 bound parameters. The shared SQLite\n * backend chunks `removeNodeCascade` and `bulkRemoveEdges` automatically; each\n * chunk retries with exponential backoff (`BulkOptions.maxRetries`, default 3).\n * Cross-chunk atomicity is *not* guaranteed — a hub node with thousands of\n * edges may have some chunks commit and others fail. Both operations are\n * idempotent (re-deleting an already-deleted row is a no-op), so callers can\n * safely retry on partial failure. Inspect `result.errors` to detect it.\n */\n\nimport { createGraphClientFromBackend } from './client.js';\nimport { createSqliteBackend } from './internal/sqlite-backend.js';\nimport type { SqliteExecutor } from './internal/sqlite-executor.js';\nimport { buildSchemaStatements, validateTableName } from './internal/sqlite-schema.js';\nimport type {\n DynamicGraphClient,\n DynamicRegistryConfig,\n GraphClient,\n GraphClientOptions,\n} from './types.js';\n\n/**\n * Subset of the Cloudflare D1 Database interface that firegraph depends on.\n * Typed against the official `@cloudflare/workers-types` shape without\n * importing it, so this module has no runtime dependency on the Workers SDK.\n */\nexport interface D1Database {\n prepare(sql: string): D1PreparedStatement;\n batch(statements: D1PreparedStatement[]): Promise<unknown[]>;\n exec(sql: string): Promise<unknown>;\n}\n\nexport interface D1PreparedStatement {\n bind(...values: unknown[]): D1PreparedStatement;\n all<T = Record<string, unknown>>(): Promise<{ results?: T[] }>;\n run(): Promise<unknown>;\n}\n\nexport interface D1ClientOptions extends GraphClientOptions {\n /** Table name for firegraph triples (default: `firegraph`). */\n table?: string;\n /**\n * Run `CREATE TABLE IF NOT EXISTS …` statements on first use.\n * Default: `true`. Disable if you manage schema via a migration tool.\n */\n autoMigrate?: boolean;\n}\n\nclass D1Executor implements SqliteExecutor {\n /**\n * D1 caps `db.batch()` at roughly 100 statements (and ~1000 bound\n * parameters across them). The SqliteBackend uses this hint to chunk\n * large cascade/bulk delete operations so a hub node with thousands of\n * edges doesn't trigger a hard rejection.\n */\n readonly maxBatchSize = 100;\n /**\n * D1's secondary cap: total bound parameters across the batch. Cascade\n * deletes are 2 params each (well under the limit) but the chunker\n * respects this defensively if a future statement type pushes through\n * `executeChunkedBatches` with a higher per-statement param count.\n */\n readonly maxBatchParams = 1000;\n\n constructor(private readonly db: D1Database) {}\n\n async all(sql: string, params: unknown[]): Promise<Record<string, unknown>[]> {\n const stmt = this.db.prepare(sql).bind(...params);\n const result = await stmt.all<Record<string, unknown>>();\n return result.results ?? [];\n }\n\n async run(sql: string, params: unknown[]): Promise<void> {\n await this.db\n .prepare(sql)\n .bind(...params)\n .run();\n }\n\n async batch(statements: ReadonlyArray<{ sql: string; params: unknown[] }>): Promise<void> {\n if (statements.length === 0) return;\n const prepared = statements.map((s) => this.db.prepare(s.sql).bind(...s.params));\n await this.db.batch(prepared);\n }\n\n // No `transaction` — D1 has no interactive transactions.\n}\n\nasync function ensureSchema(db: D1Database, table: string): Promise<void> {\n const statements = buildSchemaStatements(table);\n for (const sql of statements) {\n await db.prepare(sql).run();\n }\n}\n\nexport function createD1GraphClient(\n db: D1Database,\n options: D1ClientOptions & { registryMode: DynamicRegistryConfig },\n): Promise<DynamicGraphClient>;\nexport function createD1GraphClient(\n db: D1Database,\n options?: D1ClientOptions,\n): Promise<GraphClient>;\nexport async function createD1GraphClient(\n db: D1Database,\n options: D1ClientOptions = {},\n): Promise<GraphClient | DynamicGraphClient> {\n const table = options.table ?? 'firegraph';\n validateTableName(table);\n if (options.autoMigrate !== false) {\n await ensureSchema(db, table);\n }\n\n const executor = new D1Executor(db);\n const backend = createSqliteBackend(executor, table);\n\n const { table: _t, autoMigrate: _m, ...clientOptions } = options;\n void _t;\n void _m;\n\n // If a separate meta-collection is requested, create a second backend for it.\n let metaBackend;\n if (\n clientOptions.registryMode &&\n typeof clientOptions.registryMode === 'object' &&\n clientOptions.registryMode.collection &&\n clientOptions.registryMode.collection !== table\n ) {\n const metaTable = clientOptions.registryMode.collection;\n validateTableName(metaTable);\n if (options.autoMigrate !== false) {\n await ensureSchema(db, metaTable);\n }\n metaBackend = createSqliteBackend(executor, metaTable);\n }\n\n return createGraphClientFromBackend(backend, clientOptions, metaBackend);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/d1.ts"],"sourcesContent":["/**\n * Cloudflare D1 driver for firegraph.\n *\n * D1 is async, prepared-statement-based, and supports atomic multi-statement\n * batches via `db.batch()`. D1 has no interactive transactions — reads and\n * conditional writes cannot be interleaved, so `GraphClient.runTransaction()`\n * will throw `UNSUPPORTED_OPERATION` on this driver. Use `GraphClient.batch()`\n * or migrate to Durable Object SQLite for interactive transactions.\n *\n * **Bulk-delete atomicity:** `db.batch()` is atomic *within* one batch but D1\n * caps batches at ~100 statements / 1000 bound parameters. The shared SQLite\n * backend chunks `removeNodeCascade` and `bulkRemoveEdges` automatically; each\n * chunk retries with exponential backoff (`BulkOptions.maxRetries`, default 3).\n * Cross-chunk atomicity is *not* guaranteed — a hub node with thousands of\n * edges may have some chunks commit and others fail. Both operations are\n * idempotent (re-deleting an already-deleted row is a no-op), so callers can\n * safely retry on partial failure. Inspect `result.errors` to detect it.\n */\n\nimport { createGraphClientFromBackend } from './client.js';\nimport { createSqliteBackend } from './internal/sqlite-backend.js';\nimport type { SqliteExecutor } from './internal/sqlite-executor.js';\nimport { buildSchemaStatements, validateTableName } from './internal/sqlite-schema.js';\nimport type {\n DynamicGraphClient,\n DynamicRegistryConfig,\n GraphClient,\n GraphClientOptions,\n} from './types.js';\n\n/**\n * Subset of the Cloudflare D1 Database interface that firegraph depends on.\n * Typed against the official `@cloudflare/workers-types` shape without\n * importing it, so this module has no runtime dependency on the Workers SDK.\n */\nexport interface D1Database {\n prepare(sql: string): D1PreparedStatement;\n batch(statements: D1PreparedStatement[]): Promise<unknown[]>;\n exec(sql: string): Promise<unknown>;\n}\n\nexport interface D1PreparedStatement {\n bind(...values: unknown[]): D1PreparedStatement;\n all<T = Record<string, unknown>>(): Promise<{ results?: T[] }>;\n run(): Promise<unknown>;\n}\n\nexport interface D1ClientOptions extends GraphClientOptions {\n /** Table name for firegraph triples (default: `firegraph`). */\n table?: string;\n /**\n * Run `CREATE TABLE IF NOT EXISTS …` statements on first use.\n * Default: `true`. Disable if you manage schema via a migration tool.\n */\n autoMigrate?: boolean;\n}\n\nclass D1Executor implements SqliteExecutor {\n /**\n * D1 caps `db.batch()` at roughly 100 statements (and ~1000 bound\n * parameters across them). The SqliteBackend uses this hint to chunk\n * large cascade/bulk delete operations so a hub node with thousands of\n * edges doesn't trigger a hard rejection.\n */\n readonly maxBatchSize = 100;\n /**\n * D1's secondary cap: total bound parameters across the batch. Cascade\n * deletes are 2 params each (well under the limit) but the chunker\n * respects this defensively if a future statement type pushes through\n * `executeChunkedBatches` with a higher per-statement param count.\n */\n readonly maxBatchParams = 1000;\n\n constructor(private readonly db: D1Database) {}\n\n async all(sql: string, params: unknown[]): Promise<Record<string, unknown>[]> {\n const stmt = this.db.prepare(sql).bind(...params);\n const result = await stmt.all<Record<string, unknown>>();\n return result.results ?? [];\n }\n\n async run(sql: string, params: unknown[]): Promise<void> {\n await this.db\n .prepare(sql)\n .bind(...params)\n .run();\n }\n\n async batch(statements: ReadonlyArray<{ sql: string; params: unknown[] }>): Promise<void> {\n if (statements.length === 0) return;\n const prepared = statements.map((s) => this.db.prepare(s.sql).bind(...s.params));\n await this.db.batch(prepared);\n }\n\n // No `transaction` — D1 has no interactive transactions.\n}\n\nasync function ensureSchema(db: D1Database, table: string): Promise<void> {\n const statements = buildSchemaStatements(table);\n for (const sql of statements) {\n await db.prepare(sql).run();\n }\n}\n\nexport function createD1GraphClient(\n db: D1Database,\n options: D1ClientOptions & { registryMode: DynamicRegistryConfig },\n): Promise<DynamicGraphClient>;\nexport function createD1GraphClient(\n db: D1Database,\n options?: D1ClientOptions,\n): Promise<GraphClient>;\nexport async function createD1GraphClient(\n db: D1Database,\n options: D1ClientOptions = {},\n): Promise<GraphClient | DynamicGraphClient> {\n const table = options.table ?? 'firegraph';\n validateTableName(table);\n if (options.autoMigrate !== false) {\n await ensureSchema(db, table);\n }\n\n const executor = new D1Executor(db);\n const backend = createSqliteBackend(executor, table);\n\n const { table: _t, autoMigrate: _m, ...clientOptions } = options;\n void _t;\n void _m;\n\n // If a separate meta-collection is requested, create a second backend for it.\n let metaBackend;\n if (\n clientOptions.registryMode &&\n typeof clientOptions.registryMode === 'object' &&\n clientOptions.registryMode.collection &&\n clientOptions.registryMode.collection !== table\n ) {\n const metaTable = clientOptions.registryMode.collection;\n validateTableName(metaTable);\n if (options.autoMigrate !== false) {\n await ensureSchema(db, metaTable);\n }\n metaBackend = createSqliteBackend(executor, metaTable);\n }\n\n return createGraphClientFromBackend(backend, clientOptions, metaBackend);\n}\n"],"mappings":";;;;;;;;;;;AAyDA,IAAM,aAAN,MAA2C;AAAA,EAgBzC,YAA6B,IAAgB;AAAhB;AAAA,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EATrC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOf,iBAAiB;AAAA,EAI1B,MAAM,IAAI,KAAa,QAAuD;AAC5E,UAAM,OAAO,KAAK,GAAG,QAAQ,GAAG,EAAE,KAAK,GAAG,MAAM;AAChD,UAAM,SAAS,MAAM,KAAK,IAA6B;AACvD,WAAO,OAAO,WAAW,CAAC;AAAA,EAC5B;AAAA,EAEA,MAAM,IAAI,KAAa,QAAkC;AACvD,UAAM,KAAK,GACR,QAAQ,GAAG,EACX,KAAK,GAAG,MAAM,EACd,IAAI;AAAA,EACT;AAAA,EAEA,MAAM,MAAM,YAA8E;AACxF,QAAI,WAAW,WAAW,EAAG;AAC7B,UAAM,WAAW,WAAW,IAAI,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,CAAC;AAC/E,UAAM,KAAK,GAAG,MAAM,QAAQ;AAAA,EAC9B;AAAA;AAGF;AAEA,eAAe,aAAa,IAAgB,OAA8B;AACxE,QAAM,aAAa,sBAAsB,KAAK;AAC9C,aAAW,OAAO,YAAY;AAC5B,UAAM,GAAG,QAAQ,GAAG,EAAE,IAAI;AAAA,EAC5B;AACF;AAUA,eAAsB,oBACpB,IACA,UAA2B,CAAC,GACe;AAC3C,QAAM,QAAQ,QAAQ,SAAS;AAC/B,oBAAkB,KAAK;AACvB,MAAI,QAAQ,gBAAgB,OAAO;AACjC,UAAM,aAAa,IAAI,KAAK;AAAA,EAC9B;AAEA,QAAM,WAAW,IAAI,WAAW,EAAE;AAClC,QAAM,UAAU,oBAAoB,UAAU,KAAK;AAEnD,QAAM,EAAE,OAAO,IAAI,aAAa,IAAI,GAAG,cAAc,IAAI;AACzD,OAAK;AACL,OAAK;AAGL,MAAI;AACJ,MACE,cAAc,gBACd,OAAO,cAAc,iBAAiB,YACtC,cAAc,aAAa,cAC3B,cAAc,aAAa,eAAe,OAC1C;AACA,UAAM,YAAY,cAAc,aAAa;AAC7C,sBAAkB,SAAS;AAC3B,QAAI,QAAQ,gBAAgB,OAAO;AACjC,YAAM,aAAa,IAAI,SAAS;AAAA,IAClC;AACA,kBAAc,oBAAoB,UAAU,SAAS;AAAA,EACvD;AAEA,SAAO,6BAA6B,SAAS,eAAe,WAAW;AACzE;","names":[]}
|
package/dist/do-sqlite.cjs
CHANGED
|
@@ -66,10 +66,18 @@ function serializeValue(value) {
|
|
|
66
66
|
if (value === null || value === void 0) return value;
|
|
67
67
|
if (typeof value !== "object") return value;
|
|
68
68
|
if (isTimestamp(value)) {
|
|
69
|
-
return {
|
|
69
|
+
return {
|
|
70
|
+
[SERIALIZATION_TAG]: "Timestamp",
|
|
71
|
+
seconds: value.seconds,
|
|
72
|
+
nanoseconds: value.nanoseconds
|
|
73
|
+
};
|
|
70
74
|
}
|
|
71
75
|
if (isGeoPoint(value)) {
|
|
72
|
-
return {
|
|
76
|
+
return {
|
|
77
|
+
[SERIALIZATION_TAG]: "GeoPoint",
|
|
78
|
+
latitude: value.latitude,
|
|
79
|
+
longitude: value.longitude
|
|
80
|
+
};
|
|
73
81
|
}
|
|
74
82
|
if (isDocumentReference(value)) {
|
|
75
83
|
return { [SERIALIZATION_TAG]: "DocumentReference", path: value.path };
|
|
@@ -259,10 +267,7 @@ var ValidationError = class extends FiregraphError {
|
|
|
259
267
|
};
|
|
260
268
|
var RegistryViolationError = class extends FiregraphError {
|
|
261
269
|
constructor(aType, axbType, bType) {
|
|
262
|
-
super(
|
|
263
|
-
`Unregistered triple: (${aType}) -[${axbType}]-> (${bType})`,
|
|
264
|
-
"REGISTRY_VIOLATION"
|
|
265
|
-
);
|
|
270
|
+
super(`Unregistered triple: (${aType}) -[${axbType}]-> (${bType})`, "REGISTRY_VIOLATION");
|
|
266
271
|
this.name = "RegistryViolationError";
|
|
267
272
|
}
|
|
268
273
|
};
|