@fuzdev/fuz_app 0.132.1 → 0.133.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/db/CLAUDE.md +1 -1
- package/dist/db/fact_disk_storage.d.ts +3 -3
- package/dist/db/fact_disk_storage.d.ts.map +1 -1
- package/dist/db/fact_disk_storage.js +11 -11
- package/dist/db/fact_store.d.ts +4 -4
- package/dist/db/fact_store.js +3 -3
- package/dist/db/fact_store_errors.d.ts +3 -3
- package/dist/db/fact_store_errors.d.ts.map +1 -1
- package/dist/db/fact_store_errors.js +5 -5
- package/package.json +3 -3
package/dist/db/CLAUDE.md
CHANGED
|
@@ -178,7 +178,7 @@ DO NOTHING`), `_put_fact_refs`, `_get_fact` / `_get_fact_meta` / `_has_fact`
|
|
|
178
178
|
`fsync`ed before the rename publishes it (twins the Rust `fuz_fact` §fsync
|
|
179
179
|
posture: data-sync before rename, parent-dir fsync waived) — the serve path
|
|
180
180
|
streams the file without re-hashing, so write-time durability is the guard.
|
|
181
|
-
- **`fact_store_errors.ts`** — `
|
|
181
|
+
- **`fact_store_errors.ts`** — `FactPayloadTooLargeError` / `FactStorageFullError` (+
|
|
182
182
|
`is_enospc_error`) thrown by `put_stream`, for a consumer route's 413 / 507.
|
|
183
183
|
- The HTTP serving plumbing lives under `server/` (`serve_fact_route.ts`,
|
|
184
184
|
`x_accel.ts`).
|
|
@@ -78,12 +78,12 @@ export interface StreamFactToDiskResult {
|
|
|
78
78
|
* `facts_dir`), the buffer + remaining chunks spill to `<facts_dir>/.tmp/…`,
|
|
79
79
|
* then `rename` into `<facts_dir>/<shard>/<rest>` once the hash is known —
|
|
80
80
|
* `{kind: 'disk'}`. A body over the threshold with `facts_dir === undefined`
|
|
81
|
-
* throws `
|
|
82
|
-
* - **Cap enforcement.** Aborts with `
|
|
81
|
+
* throws `FactPayloadTooLargeError` (matches `PgFactStore.put`).
|
|
82
|
+
* - **Cap enforcement.** Aborts with `FactPayloadTooLargeError` the moment the
|
|
83
83
|
* running byte count passes `max_bytes` — the mid-stream backstop for a
|
|
84
84
|
* chunked or mis-declared `Content-Length`.
|
|
85
85
|
* - **Disk-full.** An `ENOSPC` from the temp-file write surfaces as
|
|
86
|
-
* `
|
|
86
|
+
* `FactStorageFullError`.
|
|
87
87
|
*
|
|
88
88
|
* @mutates `facts_dir` filesystem
|
|
89
89
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact_disk_storage.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/db/fact_disk_storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AASH,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAIN,KAAK,WAAW,EAChB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"fact_disk_storage.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/db/fact_disk_storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AASH,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAIN,KAAK,WAAW,EAChB,MAAM,oBAAoB,CAAC;AAO5B,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAEvC,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,GACnF,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC,GAC9D,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,GACvC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAC1B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,CAAA;CAAE,CAAC;AAEvF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,GAC/B,MAAM,IAAI,CACT,mBAAmB,EACnB,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,mBAAmB,GAAG,OAAO,GAAG,MAAM,CACtE,EACD,WAAW,MAAM,GAAG,SAAS,EAC7B,QAAQ,cAAc,CAAC,UAAU,CAAC,EAClC,WAAW,MAAM,EACjB,oBAAoB,MAAM,KACxB,OAAO,CAAC,sBAAsB,CA8GhC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACpC,MAAM,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC,EAChG,WAAW,MAAM,EACjB,MAAM,QAAQ,EACd,OAAO,UAAU,KACf,OAAO,CAAC,WAAW,CAgBrB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,GACrC,MAAM,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAC5C,WAAW,MAAM,EACjB,KAAK,MAAM,KACT,OAAO,CAAC,UAAU,CAIpB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,GAC9B,MAAM,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC9D,WAAW,MAAM,EACjB,UAAU;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KAC3D,OAAO,CAAC,MAAM,CA0BhB,CAAC"}
|
|
@@ -36,7 +36,7 @@ import { to_hex } from '@fuzdev/fuz_util/hex.ts';
|
|
|
36
36
|
import { FACT_HASH_PREFIX } from '@fuzdev/fuz_util/hash_schemas.ts';
|
|
37
37
|
import { generate_random_base64url } from '../crypto.js';
|
|
38
38
|
import { fact_disk_path, mint_file_fact_url, parse_file_fact_url } from './file_fact_url.js';
|
|
39
|
-
import { is_enospc_error,
|
|
39
|
+
import { is_enospc_error, FactPayloadTooLargeError, FactStorageFullError } from './fact_store_errors.js';
|
|
40
40
|
/** Subdirectory under `facts_dir` for in-flight atomic temp files. */
|
|
41
41
|
export const FACT_TMP_DIRNAME = '.tmp';
|
|
42
42
|
/** Default age (1 hour) past which a `.tmp/*` file is considered orphaned. */
|
|
@@ -54,12 +54,12 @@ export const FACT_TMP_ORPHAN_MAX_AGE_MS = 60 * 60 * 1000;
|
|
|
54
54
|
* `facts_dir`), the buffer + remaining chunks spill to `<facts_dir>/.tmp/…`,
|
|
55
55
|
* then `rename` into `<facts_dir>/<shard>/<rest>` once the hash is known —
|
|
56
56
|
* `{kind: 'disk'}`. A body over the threshold with `facts_dir === undefined`
|
|
57
|
-
* throws `
|
|
58
|
-
* - **Cap enforcement.** Aborts with `
|
|
57
|
+
* throws `FactPayloadTooLargeError` (matches `PgFactStore.put`).
|
|
58
|
+
* - **Cap enforcement.** Aborts with `FactPayloadTooLargeError` the moment the
|
|
59
59
|
* running byte count passes `max_bytes` — the mid-stream backstop for a
|
|
60
60
|
* chunked or mis-declared `Content-Length`.
|
|
61
61
|
* - **Disk-full.** An `ENOSPC` from the temp-file write surfaces as
|
|
62
|
-
* `
|
|
62
|
+
* `FactStorageFullError`.
|
|
63
63
|
*
|
|
64
64
|
* @mutates `facts_dir` filesystem
|
|
65
65
|
*/
|
|
@@ -76,7 +76,7 @@ export const stream_fact_to_disk = async (deps, facts_dir, source, max_bytes, em
|
|
|
76
76
|
const hash_and_count = (chunk) => {
|
|
77
77
|
size += chunk.length;
|
|
78
78
|
if (size > max_bytes)
|
|
79
|
-
throw new
|
|
79
|
+
throw new FactPayloadTooLargeError(size, max_bytes);
|
|
80
80
|
blake3.update(chunk);
|
|
81
81
|
sha256.update(chunk);
|
|
82
82
|
};
|
|
@@ -111,7 +111,7 @@ export const stream_fact_to_disk = async (deps, facts_dir, source, max_bytes, em
|
|
|
111
111
|
if (facts_dir === undefined) {
|
|
112
112
|
// Over the embedded threshold with nowhere to spill — same shape as the
|
|
113
113
|
// `PgFactStore.put` oversize-without-disk_root reject.
|
|
114
|
-
throw new
|
|
114
|
+
throw new FactPayloadTooLargeError(size, embedded_threshold);
|
|
115
115
|
}
|
|
116
116
|
// Phase 2: spill. A combined stream emits the already-hashed buffered
|
|
117
117
|
// chunks, then continues pulling from `reader`, hashing each remaining
|
|
@@ -154,8 +154,8 @@ export const stream_fact_to_disk = async (deps, facts_dir, source, max_bytes, em
|
|
|
154
154
|
catch (err) {
|
|
155
155
|
await deps.remove(tmp_path).catch(() => undefined);
|
|
156
156
|
if (is_enospc_error(err))
|
|
157
|
-
throw new
|
|
158
|
-
throw err; // includes a mid-stream
|
|
157
|
+
throw new FactStorageFullError(err);
|
|
158
|
+
throw err; // includes a mid-stream FactPayloadTooLargeError surfaced via the stream
|
|
159
159
|
}
|
|
160
160
|
const hash = (FACT_HASH_PREFIX + to_hex(blake3.finalize()));
|
|
161
161
|
const { shard, rest } = await commit_temp_to_cas(deps, tmp_path, facts_dir, hash);
|
|
@@ -197,7 +197,7 @@ export const write_fact_bytes_to_disk = async (deps, facts_dir, hash, bytes) =>
|
|
|
197
197
|
catch (err) {
|
|
198
198
|
await deps.remove(tmp_path).catch(() => undefined);
|
|
199
199
|
if (is_enospc_error(err))
|
|
200
|
-
throw new
|
|
200
|
+
throw new FactStorageFullError(err);
|
|
201
201
|
throw err;
|
|
202
202
|
}
|
|
203
203
|
const { shard, rest } = await commit_temp_to_cas(deps, tmp_path, facts_dir, hash);
|
|
@@ -273,7 +273,7 @@ export const sweep_orphan_temps = async (deps, facts_dir, options) => {
|
|
|
273
273
|
* the file without re-hashing, so the bytes must be stable before they become
|
|
274
274
|
* the canonical body), then either drop the temp (byte-identical content already
|
|
275
275
|
* present — idempotent dedup) or atomically `rename` it into place. On any
|
|
276
|
-
* failure the temp is unlinked and an `ENOSPC` is surfaced as `
|
|
276
|
+
* failure the temp is unlinked and an `ENOSPC` is surfaced as `FactStorageFullError`.
|
|
277
277
|
* The single commit path shared by both writers above — twins the Rust `fuz_fact`
|
|
278
278
|
* `SpillFile::rename_into_cas` (data-sync before rename; parent-dir fsync waived).
|
|
279
279
|
*
|
|
@@ -295,7 +295,7 @@ const commit_temp_to_cas = async (deps, tmp_path, facts_dir, hash) => {
|
|
|
295
295
|
catch (err) {
|
|
296
296
|
await deps.remove(tmp_path).catch(() => undefined);
|
|
297
297
|
if (is_enospc_error(err))
|
|
298
|
-
throw new
|
|
298
|
+
throw new FactStorageFullError(err);
|
|
299
299
|
throw err;
|
|
300
300
|
}
|
|
301
301
|
return { shard, rest };
|
package/dist/db/fact_store.d.ts
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* oversize `put` throws. `put_stream` needs `fs` for a body of any size — with
|
|
25
25
|
* none it throws before reading the stream — and `disk_root` for the
|
|
26
26
|
* over-threshold spill: with none, a body that passes the threshold throws
|
|
27
|
-
* `
|
|
27
|
+
* `FactPayloadTooLargeError`.
|
|
28
28
|
*
|
|
29
29
|
* Every `external_url` the store writes is a `file:<shard>/<rest>` URL into its
|
|
30
30
|
* own disk CAS, and that CAS is the only place `get` reads external bytes from
|
|
@@ -58,7 +58,7 @@ export declare const FACT_EMBEDDED_THRESHOLD_DEFAULT: number;
|
|
|
58
58
|
* reads disk-backed facts from it. When either is unset the store writes
|
|
59
59
|
* embedded rows only and `get` returns `null` for an external row: an oversize
|
|
60
60
|
* `put` throws; `put_stream` throws for a body of any size when `fs` is unset,
|
|
61
|
-
* and with `fs` but no `disk_root` throws `
|
|
61
|
+
* and with `fs` but no `disk_root` throws `FactPayloadTooLargeError` for a body
|
|
62
62
|
* that passes the threshold. `log` is optional — its call sites are the
|
|
63
63
|
* warnings on the paths where `get` returns `null` for an external row.
|
|
64
64
|
*/
|
|
@@ -91,8 +91,8 @@ export declare class PgFactStore implements FactStore {
|
|
|
91
91
|
* BLAKE3 + SHA-256 in one pass, buffer to the embedded threshold, spill to the
|
|
92
92
|
* disk CAS), then inserts the `fact` row by placement — embedded bytes go to
|
|
93
93
|
* the PG `bytes` column, disk-spilled bytes record the `file:` `external_url`.
|
|
94
|
-
* The cap is enforced mid-stream (`
|
|
95
|
-
* stream throws `
|
|
94
|
+
* The cap is enforced mid-stream (`FactPayloadTooLargeError`); a disk-full mid-
|
|
95
|
+
* stream throws `FactStorageFullError`.
|
|
96
96
|
*
|
|
97
97
|
* Refs: explicit `options.refs` are recorded; JSON auto-extraction is NOT
|
|
98
98
|
* attempted (it would need a buffered re-read, defeating the bounded-memory
|
package/dist/db/fact_store.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* oversize `put` throws. `put_stream` needs `fs` for a body of any size — with
|
|
25
25
|
* none it throws before reading the stream — and `disk_root` for the
|
|
26
26
|
* over-threshold spill: with none, a body that passes the threshold throws
|
|
27
|
-
* `
|
|
27
|
+
* `FactPayloadTooLargeError`.
|
|
28
28
|
*
|
|
29
29
|
* Every `external_url` the store writes is a `file:<shard>/<rest>` URL into its
|
|
30
30
|
* own disk CAS, and that CAS is the only place `get` reads external bytes from
|
|
@@ -100,8 +100,8 @@ export class PgFactStore {
|
|
|
100
100
|
* BLAKE3 + SHA-256 in one pass, buffer to the embedded threshold, spill to the
|
|
101
101
|
* disk CAS), then inserts the `fact` row by placement — embedded bytes go to
|
|
102
102
|
* the PG `bytes` column, disk-spilled bytes record the `file:` `external_url`.
|
|
103
|
-
* The cap is enforced mid-stream (`
|
|
104
|
-
* stream throws `
|
|
103
|
+
* The cap is enforced mid-stream (`FactPayloadTooLargeError`); a disk-full mid-
|
|
104
|
+
* stream throws `FactStorageFullError`.
|
|
105
105
|
*
|
|
106
106
|
* Refs: explicit `options.refs` are recorded; JSON auto-extraction is NOT
|
|
107
107
|
* attempted (it would need a buffered re-read, defeating the bounded-memory
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* mis-declared `Content-Length` that the cheap header pre-check can't catch.
|
|
15
15
|
* A consumer route maps this to `413`.
|
|
16
16
|
*/
|
|
17
|
-
export declare class
|
|
17
|
+
export declare class FactPayloadTooLargeError extends Error {
|
|
18
18
|
/** Bytes read before the cap tripped (may exceed `max_bytes` by one chunk). */
|
|
19
19
|
readonly bytes_read: number;
|
|
20
20
|
readonly max_bytes: number;
|
|
@@ -26,13 +26,13 @@ export declare class PayloadTooLargeError extends Error {
|
|
|
26
26
|
* a best-effort free-space preflight can't promise (chunked uploads, TOCTOU
|
|
27
27
|
* races). A consumer route maps this to `507`.
|
|
28
28
|
*/
|
|
29
|
-
export declare class
|
|
29
|
+
export declare class FactStorageFullError extends Error {
|
|
30
30
|
constructor(cause?: unknown);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* Whether a thrown value is a Node filesystem `ENOSPC` (no space left on
|
|
34
34
|
* device). Used by the streaming disk write to translate the raw FS error
|
|
35
|
-
* into a `
|
|
35
|
+
* into a `FactStorageFullError`.
|
|
36
36
|
*/
|
|
37
37
|
export declare const is_enospc_error: (err: unknown) => boolean;
|
|
38
38
|
//# sourceMappingURL=fact_store_errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact_store_errors.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/db/fact_store_errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,qBAAa,
|
|
1
|
+
{"version":3,"file":"fact_store_errors.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/db/fact_store_errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACf,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAMjD;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,KAAK,CAAC,EAAE,OAAO;CAI3B;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,KAAG,OAID,CAAC"}
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
* mis-declared `Content-Length` that the cheap header pre-check can't catch.
|
|
15
15
|
* A consumer route maps this to `413`.
|
|
16
16
|
*/
|
|
17
|
-
export class
|
|
17
|
+
export class FactPayloadTooLargeError extends Error {
|
|
18
18
|
/** Bytes read before the cap tripped (may exceed `max_bytes` by one chunk). */
|
|
19
19
|
bytes_read;
|
|
20
20
|
max_bytes;
|
|
21
21
|
constructor(bytes_read, max_bytes) {
|
|
22
22
|
super(`payload too large: read ${bytes_read} bytes, exceeds ${max_bytes} byte limit`);
|
|
23
|
-
this.name = '
|
|
23
|
+
this.name = 'FactPayloadTooLargeError';
|
|
24
24
|
this.bytes_read = bytes_read;
|
|
25
25
|
this.max_bytes = max_bytes;
|
|
26
26
|
}
|
|
@@ -31,16 +31,16 @@ export class PayloadTooLargeError extends Error {
|
|
|
31
31
|
* a best-effort free-space preflight can't promise (chunked uploads, TOCTOU
|
|
32
32
|
* races). A consumer route maps this to `507`.
|
|
33
33
|
*/
|
|
34
|
-
export class
|
|
34
|
+
export class FactStorageFullError extends Error {
|
|
35
35
|
constructor(cause) {
|
|
36
36
|
super('storage_full', cause === undefined ? undefined : { cause });
|
|
37
|
-
this.name = '
|
|
37
|
+
this.name = 'FactStorageFullError';
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
41
|
* Whether a thrown value is a Node filesystem `ENOSPC` (no space left on
|
|
42
42
|
* device). Used by the streaming disk write to translate the raw FS error
|
|
43
|
-
* into a `
|
|
43
|
+
* into a `FactStorageFullError`.
|
|
44
44
|
*/
|
|
45
45
|
export const is_enospc_error = (err) => typeof err === 'object' &&
|
|
46
46
|
err !== null &&
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fuzdev/fuz_app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.133.0",
|
|
4
4
|
"description": "fullstack app library",
|
|
5
5
|
"glyph": "🗝",
|
|
6
6
|
"logo": "logo.svg",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"devDependencies": {
|
|
87
87
|
"@electric-sql/pglite": "^0.5.8",
|
|
88
88
|
"@fuzdev/blake3-wasm": "^0.2.0",
|
|
89
|
-
"@fuzdev/fuz_code": "^0.
|
|
89
|
+
"@fuzdev/fuz_code": "^0.52.1",
|
|
90
90
|
"@fuzdev/fuz_css": "^0.66.1",
|
|
91
91
|
"@fuzdev/fuz_ui": "^0.213.0",
|
|
92
92
|
"@fuzdev/fuz_util": "^0.72.0",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"pg": "^8.20.0",
|
|
117
117
|
"svelte": "^5.57.2",
|
|
118
118
|
"svelte-check": "^4.7.6",
|
|
119
|
-
"svelte-docinfo": "^0.
|
|
119
|
+
"svelte-docinfo": "^0.9.0",
|
|
120
120
|
"svelte2tsx": "^0.7.52",
|
|
121
121
|
"tslib": "^2.8.1",
|
|
122
122
|
"typescript": "^6.0.3",
|