@affino/datagrid-server-client 0.1.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 +21 -0
- package/README.md +156 -0
- package/dist/src/changeFeedMapping.d.ts +21 -0
- package/dist/src/changeFeedMapping.d.ts.map +1 -0
- package/dist/src/changeFeedMapping.js +27 -0
- package/dist/src/changeFeedPoller.d.ts +29 -0
- package/dist/src/changeFeedPoller.d.ts.map +1 -0
- package/dist/src/changeFeedPoller.js +136 -0
- package/dist/src/client.d.ts +66 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +219 -0
- package/dist/src/http.d.ts +15 -0
- package/dist/src/http.d.ts.map +1 -0
- package/dist/src/http.js +170 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/invalidation.d.ts +3 -0
- package/dist/src/invalidation.d.ts.map +1 -0
- package/dist/src/invalidation.js +76 -0
- package/dist/src/normalize.d.ts +2 -0
- package/dist/src/normalize.d.ts.map +1 -0
- package/dist/src/normalize.js +12 -0
- package/dist/src/rowSnapshot.d.ts +11 -0
- package/dist/src/rowSnapshot.d.ts.map +1 -0
- package/dist/src/rowSnapshot.js +48 -0
- package/dist/tsconfig.public.tsbuildinfo +1 -0
- package/package.json +43 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 affino
|
|
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,156 @@
|
|
|
1
|
+
# Affino DataGrid Server Client
|
|
2
|
+
|
|
3
|
+
Framework-agnostic transport utilities for server-backed DataGrid:
|
|
4
|
+
|
|
5
|
+
- HTTP datasource client factory
|
|
6
|
+
- change feed polling
|
|
7
|
+
- invalidation normalization
|
|
8
|
+
- row snapshot mapping
|
|
9
|
+
- dataset version handling
|
|
10
|
+
|
|
11
|
+
## What It Is
|
|
12
|
+
|
|
13
|
+
This package contains reusable client-side helpers for talking to a server-backed DataGrid datasource. It sits below a framework adapter and above the raw HTTP contract without depending on Vue, a demo implementation, or a backend runtime.
|
|
14
|
+
|
|
15
|
+
## What It Is Not
|
|
16
|
+
|
|
17
|
+
- not a backend package
|
|
18
|
+
- not tied to Vue
|
|
19
|
+
- not the opinionated datasource adapter
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pnpm add @affino/datagrid-server-client
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Core Concepts
|
|
28
|
+
|
|
29
|
+
### Dataset Version
|
|
30
|
+
|
|
31
|
+
Use `normalizeDatasetVersion()` when the server may return a revision or version in either string or number form. The helper normalizes the value to a non-negative integer or returns `null` when the input is unusable.
|
|
32
|
+
|
|
33
|
+
### Change Feed Poller
|
|
34
|
+
|
|
35
|
+
Use `createChangeFeedPoller()` to manage polling lifecycle concerns:
|
|
36
|
+
|
|
37
|
+
- start and stop polling
|
|
38
|
+
- prevent overlapping requests
|
|
39
|
+
- abort in-flight requests on stop
|
|
40
|
+
- emit lightweight diagnostics
|
|
41
|
+
- reset on invalid since-version responses
|
|
42
|
+
|
|
43
|
+
### Row Snapshots
|
|
44
|
+
|
|
45
|
+
Use `normalizeRowSnapshots()` to normalize raw row payloads or row-entry payloads into `DataGridDataSourceRowEntry` values.
|
|
46
|
+
|
|
47
|
+
### Invalidation
|
|
48
|
+
|
|
49
|
+
Use `normalizeDatasourceInvalidation()` to convert server invalidation payloads into `DataGridDataSourceInvalidation` values.
|
|
50
|
+
|
|
51
|
+
### HTTP Client Factory
|
|
52
|
+
|
|
53
|
+
Use `createServerDatasourceHttpClient()` when you want a reusable low-level client for read and change-feed transport:
|
|
54
|
+
|
|
55
|
+
- viewport `pull`
|
|
56
|
+
- column histogram reads
|
|
57
|
+
- change-feed polling
|
|
58
|
+
- row snapshot application
|
|
59
|
+
- diagnostics
|
|
60
|
+
|
|
61
|
+
Write, fill, and history operations are backend and adapter-level concerns. If you want the full opinionated integration path, start with `@affino/datagrid-server-adapters`.
|
|
62
|
+
|
|
63
|
+
## Public API
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import {
|
|
67
|
+
createChangeFeedPoller,
|
|
68
|
+
createServerDatasourceHttpClient,
|
|
69
|
+
mapServerChangeEvent,
|
|
70
|
+
normalizeDatasetVersion,
|
|
71
|
+
normalizeDatasourceInvalidation,
|
|
72
|
+
normalizeRowSnapshots,
|
|
73
|
+
} from "@affino/datagrid-server-client"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Types:
|
|
77
|
+
|
|
78
|
+
- `ServerDatasourceChangeFeedDiagnostics`
|
|
79
|
+
- `ServerDatasourceChangeFeedPoller`
|
|
80
|
+
- `ServerDatasourceChangeFeedPollerOptions`
|
|
81
|
+
- `ServerRowSnapshotLike`
|
|
82
|
+
- `ServerChangeEventLike`
|
|
83
|
+
- `ServerChangeMappingResult`
|
|
84
|
+
- `ServerDatasourceHttpClientOptions`
|
|
85
|
+
|
|
86
|
+
## Usage
|
|
87
|
+
|
|
88
|
+
### 1. Polling change feed
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
const poller = createChangeFeedPoller({
|
|
92
|
+
getSinceVersion: () => lastSeenVersion,
|
|
93
|
+
loadSinceVersion: fetchChanges,
|
|
94
|
+
onResponse: handleChanges,
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
poller.start()
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 2. Mapping change events
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
const result = mapServerChangeEvent(change, normalizeDatasourceInvalidation)
|
|
104
|
+
|
|
105
|
+
if (result.kind === "upsert") {
|
|
106
|
+
// apply rows
|
|
107
|
+
} else {
|
|
108
|
+
// apply invalidation
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 3. Row snapshot normalization
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
const rows = normalizeRowSnapshots(serverRows)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 4. Creating a server datasource client
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
const client = createServerDatasourceHttpClient({
|
|
122
|
+
endpoints: {
|
|
123
|
+
pull: "/api/pull",
|
|
124
|
+
histogram: "/api/histogram",
|
|
125
|
+
changesSinceVersion: sinceVersion => `/api/changes?sinceVersion=${sinceVersion}`,
|
|
126
|
+
},
|
|
127
|
+
mapPullResponse: response => ({
|
|
128
|
+
rows: response.rows,
|
|
129
|
+
total: response.total,
|
|
130
|
+
revision: response.revision ?? null,
|
|
131
|
+
datasetVersion: response.datasetVersion ?? null,
|
|
132
|
+
}),
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
client.startChangeFeedPolling()
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
If you need edits, fill, or history, build those in an adapter or host-specific wrapper that composes this client with backend write endpoints.
|
|
139
|
+
|
|
140
|
+
## Design Principles
|
|
141
|
+
|
|
142
|
+
- transport-agnostic
|
|
143
|
+
- deterministic updates
|
|
144
|
+
- no silent partial mutations
|
|
145
|
+
- fail-closed behavior
|
|
146
|
+
|
|
147
|
+
## Status
|
|
148
|
+
|
|
149
|
+
Experimental, pre-1.0.
|
|
150
|
+
|
|
151
|
+
## Boundary Notes
|
|
152
|
+
|
|
153
|
+
- Keep demo-specific filter, fill, edit, and history request shaping in the sandbox adapter.
|
|
154
|
+
- Keep HTTP transport helpers internal to the package.
|
|
155
|
+
- Use `@affino/datagrid-server-adapters` for the opinionated application entrypoint.
|
|
156
|
+
- Use `@affino/datagrid-core` for shared datasource contracts and row-model types.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DataGridDataSourceInvalidation, DataGridDataSourceRowEntry } from "@affino/datagrid-core";
|
|
2
|
+
import { type ServerRowSnapshotLike } from "./rowSnapshot";
|
|
3
|
+
export interface ServerChangeEventLike<T> {
|
|
4
|
+
type: "cell" | "row" | "range" | "dataset";
|
|
5
|
+
rows?: readonly ServerRowSnapshotLike<T>[];
|
|
6
|
+
invalidation?: unknown;
|
|
7
|
+
}
|
|
8
|
+
interface ServerChangeUpsertMappingResult<T> {
|
|
9
|
+
kind: "upsert";
|
|
10
|
+
rows: readonly DataGridDataSourceRowEntry<T>[];
|
|
11
|
+
appliedCount: number;
|
|
12
|
+
}
|
|
13
|
+
interface ServerChangeInvalidateMappingResult {
|
|
14
|
+
kind: "invalidate";
|
|
15
|
+
invalidation: DataGridDataSourceInvalidation;
|
|
16
|
+
appliedCount: number;
|
|
17
|
+
}
|
|
18
|
+
export type ServerChangeMappingResult<T> = ServerChangeUpsertMappingResult<T> | ServerChangeInvalidateMappingResult;
|
|
19
|
+
export declare function mapServerChangeEvent<T>(change: ServerChangeEventLike<T>, normalizeInvalidation: (value: unknown) => DataGridDataSourceInvalidation | null): ServerChangeMappingResult<T>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=changeFeedMapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeFeedMapping.d.ts","sourceRoot":"","sources":["../../src/changeFeedMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AACvG,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEjF,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAA;IAC1C,IAAI,CAAC,EAAE,SAAS,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,UAAU,+BAA+B,CAAC,CAAC;IACzC,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,SAAS,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,mCAAmC;IAC3C,IAAI,EAAE,YAAY,CAAA;IAClB,YAAY,EAAE,8BAA8B,CAAA;IAC5C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,IACnC,+BAA+B,CAAC,CAAC,CAAC,GAClC,mCAAmC,CAAA;AAEvC,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAChC,qBAAqB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,8BAA8B,GAAG,IAAI,GAC/E,yBAAyB,CAAC,CAAC,CAAC,CA2B9B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { normalizeRowSnapshots } from "./rowSnapshot";
|
|
2
|
+
export function mapServerChangeEvent(change, normalizeInvalidation) {
|
|
3
|
+
const normalizedRows = change.type !== "dataset" ? normalizeRowSnapshots(change.rows) : null;
|
|
4
|
+
if (normalizedRows && normalizedRows.length > 0) {
|
|
5
|
+
return {
|
|
6
|
+
kind: "upsert",
|
|
7
|
+
rows: normalizedRows,
|
|
8
|
+
appliedCount: normalizedRows.length,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const invalidation = normalizeInvalidation(change.invalidation);
|
|
12
|
+
if (invalidation) {
|
|
13
|
+
return {
|
|
14
|
+
kind: "invalidate",
|
|
15
|
+
invalidation,
|
|
16
|
+
appliedCount: 1,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
kind: "invalidate",
|
|
21
|
+
invalidation: {
|
|
22
|
+
kind: "all",
|
|
23
|
+
reason: "change-feed",
|
|
24
|
+
},
|
|
25
|
+
appliedCount: 1,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ServerDatasourceChangeFeedDiagnostics {
|
|
2
|
+
currentDatasetVersion: number | null;
|
|
3
|
+
lastSeenVersion: number | null;
|
|
4
|
+
polling: boolean;
|
|
5
|
+
pending: boolean;
|
|
6
|
+
appliedChanges: number;
|
|
7
|
+
intervalMs: number | null;
|
|
8
|
+
}
|
|
9
|
+
export interface ServerDatasourceChangeFeedPollerOptions<TResponse> {
|
|
10
|
+
getSinceVersion: () => number | null;
|
|
11
|
+
loadSinceVersion: (sinceVersion: number, signal?: AbortSignal) => Promise<TResponse>;
|
|
12
|
+
onResponse: (response: TResponse, requestSinceVersion: number) => void;
|
|
13
|
+
onError?: (error: unknown) => void;
|
|
14
|
+
onDiagnostics?: (diagnostics: ServerDatasourceChangeFeedDiagnostics) => void;
|
|
15
|
+
isInvalidSinceVersionError?: (error: unknown) => boolean;
|
|
16
|
+
onInvalidSinceVersion?: () => void;
|
|
17
|
+
intervalMs?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ServerDatasourceChangeFeedPoller {
|
|
20
|
+
start(options?: {
|
|
21
|
+
intervalMs?: number;
|
|
22
|
+
}): void;
|
|
23
|
+
stop(): void;
|
|
24
|
+
pollNow(signal?: AbortSignal): Promise<void>;
|
|
25
|
+
diagnostics(): ServerDatasourceChangeFeedDiagnostics;
|
|
26
|
+
incrementAppliedChanges(count?: number): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function createChangeFeedPoller<TResponse>(options: ServerDatasourceChangeFeedPollerOptions<TResponse>): ServerDatasourceChangeFeedPoller;
|
|
29
|
+
//# sourceMappingURL=changeFeedPoller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeFeedPoller.d.ts","sourceRoot":"","sources":["../../src/changeFeedPoller.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qCAAqC;IACpD,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,uCAAuC,CAAC,SAAS;IAChE,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IACpC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IACpF,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,KAAK,IAAI,CAAA;IACtE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,qCAAqC,KAAK,IAAI,CAAA;IAC5E,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAA;IACxD,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9C,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,WAAW,IAAI,qCAAqC,CAAA;IACpD,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9C;AAYD,wBAAgB,sBAAsB,CAAC,SAAS,EAC9C,OAAO,EAAE,uCAAuC,CAAC,SAAS,CAAC,GAC1D,gCAAgC,CAwIlC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const DEFAULT_INTERVAL_MS = 500;
|
|
2
|
+
const MIN_INTERVAL_MS = 250;
|
|
3
|
+
function normalizeIntervalMs(value) {
|
|
4
|
+
if (!Number.isFinite(value)) {
|
|
5
|
+
return DEFAULT_INTERVAL_MS;
|
|
6
|
+
}
|
|
7
|
+
return Math.max(MIN_INTERVAL_MS, Math.trunc(value ?? DEFAULT_INTERVAL_MS));
|
|
8
|
+
}
|
|
9
|
+
export function createChangeFeedPoller(options) {
|
|
10
|
+
let pollingActive = false;
|
|
11
|
+
let pollingIntervalMs = null;
|
|
12
|
+
let pollTimer = null;
|
|
13
|
+
let pollInFlight = false;
|
|
14
|
+
let pollGeneration = 0;
|
|
15
|
+
let pollAbortController = null;
|
|
16
|
+
let pollAbortCleanup = null;
|
|
17
|
+
let appliedChangeCount = 0;
|
|
18
|
+
let lastSeenVersion = null;
|
|
19
|
+
function diagnostics() {
|
|
20
|
+
return {
|
|
21
|
+
currentDatasetVersion: null,
|
|
22
|
+
lastSeenVersion,
|
|
23
|
+
polling: pollingActive,
|
|
24
|
+
pending: pollInFlight,
|
|
25
|
+
appliedChanges: appliedChangeCount,
|
|
26
|
+
intervalMs: pollingIntervalMs,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function emitDiagnostics() {
|
|
30
|
+
options.onDiagnostics?.(diagnostics());
|
|
31
|
+
}
|
|
32
|
+
function clearAbortCleanup() {
|
|
33
|
+
if (pollAbortCleanup) {
|
|
34
|
+
pollAbortCleanup();
|
|
35
|
+
pollAbortCleanup = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function createRequestSignal(signal) {
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
pollAbortController = controller;
|
|
41
|
+
if (!signal) {
|
|
42
|
+
pollAbortCleanup = null;
|
|
43
|
+
return controller.signal;
|
|
44
|
+
}
|
|
45
|
+
if (signal.aborted) {
|
|
46
|
+
controller.abort();
|
|
47
|
+
pollAbortCleanup = null;
|
|
48
|
+
return controller.signal;
|
|
49
|
+
}
|
|
50
|
+
const abortListener = () => {
|
|
51
|
+
controller.abort();
|
|
52
|
+
};
|
|
53
|
+
signal.addEventListener("abort", abortListener, { once: true });
|
|
54
|
+
pollAbortCleanup = () => {
|
|
55
|
+
signal.removeEventListener("abort", abortListener);
|
|
56
|
+
};
|
|
57
|
+
return controller.signal;
|
|
58
|
+
}
|
|
59
|
+
async function pollNow(signal) {
|
|
60
|
+
if (!pollingActive || pollInFlight) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const requestGeneration = pollGeneration;
|
|
64
|
+
const sinceVersion = options.getSinceVersion() ?? 0;
|
|
65
|
+
const requestSignal = createRequestSignal(signal);
|
|
66
|
+
lastSeenVersion = sinceVersion;
|
|
67
|
+
pollInFlight = true;
|
|
68
|
+
emitDiagnostics();
|
|
69
|
+
try {
|
|
70
|
+
const response = await options.loadSinceVersion(sinceVersion, requestSignal);
|
|
71
|
+
if (!pollingActive || requestGeneration !== pollGeneration) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
options.onResponse(response, sinceVersion);
|
|
75
|
+
}
|
|
76
|
+
catch (caught) {
|
|
77
|
+
if (options.isInvalidSinceVersionError?.(caught)) {
|
|
78
|
+
options.onInvalidSinceVersion?.();
|
|
79
|
+
}
|
|
80
|
+
else if (!(caught instanceof DOMException && caught.name === "AbortError")) {
|
|
81
|
+
options.onError?.(caught);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
if (pollAbortController !== null) {
|
|
86
|
+
pollAbortController = null;
|
|
87
|
+
}
|
|
88
|
+
clearAbortCleanup();
|
|
89
|
+
pollInFlight = false;
|
|
90
|
+
emitDiagnostics();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function stop() {
|
|
94
|
+
if (pollTimer !== null) {
|
|
95
|
+
clearInterval(pollTimer);
|
|
96
|
+
pollTimer = null;
|
|
97
|
+
}
|
|
98
|
+
pollingActive = false;
|
|
99
|
+
pollingIntervalMs = null;
|
|
100
|
+
pollGeneration += 1;
|
|
101
|
+
if (pollAbortController && !pollAbortController.signal.aborted) {
|
|
102
|
+
pollAbortController.abort();
|
|
103
|
+
}
|
|
104
|
+
pollAbortController = null;
|
|
105
|
+
clearAbortCleanup();
|
|
106
|
+
pollInFlight = false;
|
|
107
|
+
lastSeenVersion = null;
|
|
108
|
+
emitDiagnostics();
|
|
109
|
+
}
|
|
110
|
+
function start(startOptions = {}) {
|
|
111
|
+
stop();
|
|
112
|
+
pollingActive = true;
|
|
113
|
+
pollingIntervalMs = normalizeIntervalMs(startOptions.intervalMs ?? options.intervalMs);
|
|
114
|
+
pollGeneration += 1;
|
|
115
|
+
emitDiagnostics();
|
|
116
|
+
void pollNow();
|
|
117
|
+
pollTimer = globalThis.setInterval(() => {
|
|
118
|
+
void pollNow();
|
|
119
|
+
}, pollingIntervalMs);
|
|
120
|
+
}
|
|
121
|
+
function incrementAppliedChanges(count = 1) {
|
|
122
|
+
const normalizedCount = Number.isFinite(count) ? Math.max(0, Math.trunc(count)) : 0;
|
|
123
|
+
if (normalizedCount <= 0) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
appliedChangeCount += normalizedCount;
|
|
127
|
+
emitDiagnostics();
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
start,
|
|
131
|
+
stop,
|
|
132
|
+
pollNow,
|
|
133
|
+
diagnostics,
|
|
134
|
+
incrementAppliedChanges,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { DataGridColumnHistogram, DataGridDataSource, DataGridDataSourceColumnHistogramRequest, DataGridDataSourcePullRequest, DataGridDataSourceRowEntry } from "@affino/datagrid-core";
|
|
2
|
+
import { type ServerDatasourceChangeFeedDiagnostics } from "./changeFeedPoller";
|
|
3
|
+
import { type ServerChangeEventLike } from "./changeFeedMapping";
|
|
4
|
+
import { type ServerRowSnapshotLike } from "./rowSnapshot";
|
|
5
|
+
export interface ServerDatasourceHttpClientOptions<TRow> {
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
fetchImpl?: typeof fetch;
|
|
8
|
+
endpoints: {
|
|
9
|
+
pull: string;
|
|
10
|
+
histogram: string;
|
|
11
|
+
commitEdits: string;
|
|
12
|
+
resolveFillBoundary: string;
|
|
13
|
+
commitFillOperation: string;
|
|
14
|
+
undoOperation: (operationId: string) => string;
|
|
15
|
+
redoOperation: (operationId: string) => string;
|
|
16
|
+
historyStatus?: string;
|
|
17
|
+
changesSinceVersion: (sinceVersion: number) => string;
|
|
18
|
+
};
|
|
19
|
+
mapPullRequest?: (request: DataGridDataSourcePullRequest) => unknown;
|
|
20
|
+
mapHistogramRequest?: (request: DataGridDataSourceColumnHistogramRequest) => unknown;
|
|
21
|
+
mapPullResponse: (response: unknown) => {
|
|
22
|
+
rows: readonly DataGridDataSourceRowEntry<TRow>[];
|
|
23
|
+
total: number;
|
|
24
|
+
revision?: string | number | null;
|
|
25
|
+
datasetVersion?: number | null;
|
|
26
|
+
};
|
|
27
|
+
mapHistogramResponse?: (response: unknown) => DataGridColumnHistogram;
|
|
28
|
+
mapCommitEditsResponse?: (response: unknown) => unknown;
|
|
29
|
+
mapFillResponse?: (response: unknown) => unknown;
|
|
30
|
+
mapChangeFeedResponse?: (response: unknown) => {
|
|
31
|
+
datasetVersion?: unknown;
|
|
32
|
+
changes?: readonly ServerChangeEventLike<TRow>[];
|
|
33
|
+
} | null;
|
|
34
|
+
isInvalidSinceVersionError?: (error: unknown) => boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Low-level server datasource transport client.
|
|
38
|
+
*
|
|
39
|
+
* This factory covers the read and change-feed side of the server datasource
|
|
40
|
+
* contract:
|
|
41
|
+
*
|
|
42
|
+
* - `pull` for viewport reads
|
|
43
|
+
* - `getColumnHistogram` for histogram reads when the backend supports it
|
|
44
|
+
* - `getChangesSinceVersion` / polling for change-feed updates
|
|
45
|
+
* - row snapshot normalization and push event dispatch
|
|
46
|
+
*
|
|
47
|
+
* Write, fill, and history behavior are backend and adapter concerns. This
|
|
48
|
+
* client can be composed underneath an opinionated adapter, but most users
|
|
49
|
+
* should start with `@affino/datagrid-server-adapters`.
|
|
50
|
+
*/
|
|
51
|
+
export declare function createServerDatasourceHttpClient<TRow>(options: ServerDatasourceHttpClientOptions<TRow>): DataGridDataSource<TRow> & {
|
|
52
|
+
startChangeFeedPolling(options?: {
|
|
53
|
+
intervalMs?: number;
|
|
54
|
+
}): void;
|
|
55
|
+
stopChangeFeedPolling(): void;
|
|
56
|
+
getChangeFeedDiagnostics(): ServerDatasourceChangeFeedDiagnostics;
|
|
57
|
+
subscribeChangeFeedDiagnostics(listener: (diagnostics: ServerDatasourceChangeFeedDiagnostics) => void): () => void;
|
|
58
|
+
applyRowSnapshots(rows: readonly ServerRowSnapshotLike<TRow>[] | readonly DataGridDataSourceRowEntry<TRow>[]): boolean;
|
|
59
|
+
getChangesSinceVersion(request: {
|
|
60
|
+
sinceVersion: number;
|
|
61
|
+
signal?: AbortSignal;
|
|
62
|
+
}): Promise<unknown>;
|
|
63
|
+
readonly latestDatasetVersion: number | null;
|
|
64
|
+
readonly lastSeenVersion: number | null;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,wCAAwC,EAExC,6BAA6B,EAI7B,0BAA0B,EAC3B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEL,KAAK,qCAAqC,EAE3C,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGtF,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEjF,MAAM,WAAW,iCAAiC,CAAC,IAAI;IACrD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IAExB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,mBAAmB,EAAE,MAAM,CAAA;QAC3B,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;QAC9C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;QAC9C,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAA;KACtD,CAAA;IAED,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAA;IACpE,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,wCAAwC,KAAK,OAAO,CAAA;IAEpF,eAAe,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK;QACtC,IAAI,EAAE,SAAS,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAA;QACjD,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;QACjC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC/B,CAAA;IAED,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,uBAAuB,CAAA;IACrE,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAA;IACvD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAA;IAChD,qBAAqB,CAAC,EAAE,CACtB,QAAQ,EAAE,OAAO,KACd;QACH,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,OAAO,CAAC,EAAE,SAAS,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAA;KACjD,GAAG,IAAI,CAAA;IAER,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAA;CACzD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EACnD,OAAO,EAAE,iCAAiC,CAAC,IAAI,CAAC,GAC/C,kBAAkB,CAAC,IAAI,CAAC,GAAG;IAC5B,sBAAsB,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC/D,qBAAqB,IAAI,IAAI,CAAA;IAC7B,wBAAwB,IAAI,qCAAqC,CAAA;IACjE,8BAA8B,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,qCAAqC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAClH,iBAAiB,CAAC,IAAI,EAAE,SAAS,qBAAqB,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,0BAA0B,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAA;IACtH,sBAAsB,CAAC,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACjG,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CACxC,CA6OA"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { createChangeFeedPoller, } from "./changeFeedPoller";
|
|
2
|
+
import { getJson, postJson, resolveEndpoint } from "./http";
|
|
3
|
+
import { mapServerChangeEvent } from "./changeFeedMapping";
|
|
4
|
+
import { normalizeDatasourceInvalidation } from "./invalidation";
|
|
5
|
+
import { normalizeDatasetVersion } from "./normalize";
|
|
6
|
+
import { normalizeRowSnapshots } from "./rowSnapshot";
|
|
7
|
+
/**
|
|
8
|
+
* Low-level server datasource transport client.
|
|
9
|
+
*
|
|
10
|
+
* This factory covers the read and change-feed side of the server datasource
|
|
11
|
+
* contract:
|
|
12
|
+
*
|
|
13
|
+
* - `pull` for viewport reads
|
|
14
|
+
* - `getColumnHistogram` for histogram reads when the backend supports it
|
|
15
|
+
* - `getChangesSinceVersion` / polling for change-feed updates
|
|
16
|
+
* - row snapshot normalization and push event dispatch
|
|
17
|
+
*
|
|
18
|
+
* Write, fill, and history behavior are backend and adapter concerns. This
|
|
19
|
+
* client can be composed underneath an opinionated adapter, but most users
|
|
20
|
+
* should start with `@affino/datagrid-server-adapters`.
|
|
21
|
+
*/
|
|
22
|
+
export function createServerDatasourceHttpClient(options) {
|
|
23
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
24
|
+
const listeners = new Set();
|
|
25
|
+
const diagnosticsListeners = new Set();
|
|
26
|
+
let latestDatasetVersion = null;
|
|
27
|
+
let lastSeenVersion = null;
|
|
28
|
+
function emitPushEvent(event) {
|
|
29
|
+
for (const listener of listeners) {
|
|
30
|
+
listener(event);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function emitDiagnostics() {
|
|
34
|
+
const diagnostics = getChangeFeedDiagnostics();
|
|
35
|
+
for (const listener of diagnosticsListeners) {
|
|
36
|
+
listener(diagnostics);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function updateDatasetVersion(version, markSeen = false) {
|
|
40
|
+
const normalizedVersion = normalizeDatasetVersion(version);
|
|
41
|
+
if (normalizedVersion === null) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
latestDatasetVersion = normalizedVersion;
|
|
45
|
+
if (markSeen) {
|
|
46
|
+
lastSeenVersion = normalizedVersion;
|
|
47
|
+
}
|
|
48
|
+
emitDiagnostics();
|
|
49
|
+
}
|
|
50
|
+
function resetChangeFeedCursor() {
|
|
51
|
+
lastSeenVersion = 0;
|
|
52
|
+
emitDiagnostics();
|
|
53
|
+
}
|
|
54
|
+
function mapChangeFeedResponse(response) {
|
|
55
|
+
const mappedResponse = options.mapChangeFeedResponse?.(response);
|
|
56
|
+
if (mappedResponse) {
|
|
57
|
+
return mappedResponse;
|
|
58
|
+
}
|
|
59
|
+
if (!response || typeof response !== "object" || Array.isArray(response)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const record = response;
|
|
63
|
+
const changes = Array.isArray(record.changes)
|
|
64
|
+
? record.changes
|
|
65
|
+
: [];
|
|
66
|
+
return {
|
|
67
|
+
datasetVersion: record.datasetVersion,
|
|
68
|
+
changes,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function dispatchChangeFeedChange(change) {
|
|
72
|
+
const mapped = mapServerChangeEvent(change, normalizeDatasourceInvalidation);
|
|
73
|
+
changeFeedPoller.incrementAppliedChanges(mapped.appliedCount);
|
|
74
|
+
if (mapped.kind === "upsert") {
|
|
75
|
+
emitPushEvent({
|
|
76
|
+
type: "upsert",
|
|
77
|
+
rows: mapped.rows,
|
|
78
|
+
datasetVersion: latestDatasetVersion,
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
emitPushEvent({
|
|
83
|
+
type: "invalidate",
|
|
84
|
+
datasetVersion: latestDatasetVersion,
|
|
85
|
+
invalidation: mapped.invalidation,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function applyChangeFeedResponse(response) {
|
|
89
|
+
const mappedResponse = mapChangeFeedResponse(response);
|
|
90
|
+
if (!mappedResponse) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
updateDatasetVersion(mappedResponse.datasetVersion, true);
|
|
94
|
+
for (const change of mappedResponse.changes ?? []) {
|
|
95
|
+
dispatchChangeFeedChange(change);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const changeFeedPoller = createChangeFeedPoller({
|
|
99
|
+
getSinceVersion: () => lastSeenVersion,
|
|
100
|
+
loadSinceVersion: async (sinceVersion, signal) => {
|
|
101
|
+
return await loadChangeFeedSinceVersion(sinceVersion, signal);
|
|
102
|
+
},
|
|
103
|
+
onResponse: response => {
|
|
104
|
+
applyChangeFeedResponse(response);
|
|
105
|
+
},
|
|
106
|
+
onError: error => {
|
|
107
|
+
console.warn("Server datasource change feed polling failed", error);
|
|
108
|
+
},
|
|
109
|
+
onDiagnostics: () => {
|
|
110
|
+
emitDiagnostics();
|
|
111
|
+
},
|
|
112
|
+
isInvalidSinceVersionError: options.isInvalidSinceVersionError,
|
|
113
|
+
onInvalidSinceVersion: () => {
|
|
114
|
+
resetChangeFeedCursor();
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
function getChangeFeedDiagnostics() {
|
|
118
|
+
const diagnostics = changeFeedPoller.diagnostics();
|
|
119
|
+
return {
|
|
120
|
+
currentDatasetVersion: latestDatasetVersion,
|
|
121
|
+
lastSeenVersion,
|
|
122
|
+
polling: diagnostics.polling,
|
|
123
|
+
pending: diagnostics.pending,
|
|
124
|
+
appliedChanges: diagnostics.appliedChanges,
|
|
125
|
+
intervalMs: diagnostics.intervalMs,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function loadChangeFeedSinceVersion(sinceVersion, signal) {
|
|
129
|
+
return getJson(fetchImpl, resolveEndpoint(options.baseUrl, options.endpoints.changesSinceVersion(sinceVersion)), signal);
|
|
130
|
+
}
|
|
131
|
+
async function getChangesSinceVersion(request) {
|
|
132
|
+
const response = await loadChangeFeedSinceVersion(request.sinceVersion, request.signal);
|
|
133
|
+
applyChangeFeedResponse(response);
|
|
134
|
+
return response;
|
|
135
|
+
}
|
|
136
|
+
function applyRowSnapshots(rows) {
|
|
137
|
+
const normalizedRows = normalizeRowSnapshots(rows);
|
|
138
|
+
if (!normalizedRows || normalizedRows.length === 0) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
emitPushEvent({
|
|
142
|
+
type: "upsert",
|
|
143
|
+
rows: normalizedRows,
|
|
144
|
+
});
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
function startChangeFeedPolling(startOptions = {}) {
|
|
148
|
+
changeFeedPoller.start({ intervalMs: startOptions.intervalMs });
|
|
149
|
+
}
|
|
150
|
+
function stopChangeFeedPolling() {
|
|
151
|
+
changeFeedPoller.stop();
|
|
152
|
+
}
|
|
153
|
+
// The low-level client intentionally leaves request shaping to the caller.
|
|
154
|
+
// Adapter-level packages can map additional domain-specific fields here.
|
|
155
|
+
function mapPullBody(request) {
|
|
156
|
+
if (options.mapPullRequest) {
|
|
157
|
+
return options.mapPullRequest(request);
|
|
158
|
+
}
|
|
159
|
+
const { signal: _signal, ...body } = request;
|
|
160
|
+
return body;
|
|
161
|
+
}
|
|
162
|
+
// Histogram requests are also read-only transport concerns. Write/fill/history
|
|
163
|
+
// flows should be implemented by an adapter or host-specific wrapper.
|
|
164
|
+
function mapHistogramBody(request) {
|
|
165
|
+
if (options.mapHistogramRequest) {
|
|
166
|
+
return options.mapHistogramRequest(request);
|
|
167
|
+
}
|
|
168
|
+
const { signal: _signal, ...body } = request;
|
|
169
|
+
return body;
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
async pull(request) {
|
|
173
|
+
const response = await postJson(fetchImpl, resolveEndpoint(options.baseUrl, options.endpoints.pull), mapPullBody(request), request.signal);
|
|
174
|
+
const mappedResponse = options.mapPullResponse(response);
|
|
175
|
+
const startIndex = Math.max(0, Math.trunc(request.range.start));
|
|
176
|
+
updateDatasetVersion(mappedResponse.datasetVersion ?? normalizeDatasetVersion(mappedResponse.revision), true);
|
|
177
|
+
return {
|
|
178
|
+
rows: mappedResponse.rows.map((entry, offset) => ({
|
|
179
|
+
...entry,
|
|
180
|
+
index: startIndex + offset,
|
|
181
|
+
})),
|
|
182
|
+
total: mappedResponse.total,
|
|
183
|
+
cursor: mappedResponse.revision == null ? null : String(mappedResponse.revision),
|
|
184
|
+
datasetVersion: latestDatasetVersion,
|
|
185
|
+
};
|
|
186
|
+
},
|
|
187
|
+
async getColumnHistogram(request) {
|
|
188
|
+
const response = await postJson(fetchImpl, resolveEndpoint(options.baseUrl, options.endpoints.histogram), mapHistogramBody(request), request.signal);
|
|
189
|
+
return options.mapHistogramResponse?.(response) ?? response;
|
|
190
|
+
},
|
|
191
|
+
subscribe(listener) {
|
|
192
|
+
listeners.add(listener);
|
|
193
|
+
return () => {
|
|
194
|
+
listeners.delete(listener);
|
|
195
|
+
};
|
|
196
|
+
},
|
|
197
|
+
invalidate(_invalidation) {
|
|
198
|
+
// Source-of-truth invalidations are emitted by the server or adapter.
|
|
199
|
+
},
|
|
200
|
+
getChangesSinceVersion,
|
|
201
|
+
startChangeFeedPolling,
|
|
202
|
+
stopChangeFeedPolling,
|
|
203
|
+
getChangeFeedDiagnostics,
|
|
204
|
+
subscribeChangeFeedDiagnostics(listener) {
|
|
205
|
+
diagnosticsListeners.add(listener);
|
|
206
|
+
listener(getChangeFeedDiagnostics());
|
|
207
|
+
return () => {
|
|
208
|
+
diagnosticsListeners.delete(listener);
|
|
209
|
+
};
|
|
210
|
+
},
|
|
211
|
+
applyRowSnapshots,
|
|
212
|
+
get latestDatasetVersion() {
|
|
213
|
+
return latestDatasetVersion;
|
|
214
|
+
},
|
|
215
|
+
get lastSeenVersion() {
|
|
216
|
+
return lastSeenVersion;
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare class HttpError extends Error {
|
|
2
|
+
readonly status: number;
|
|
3
|
+
readonly code: string | null;
|
|
4
|
+
readonly details: unknown;
|
|
5
|
+
constructor(message: string, status: number, code?: string | null, details?: unknown);
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveEndpoint(baseUrl: string | undefined, path: string): string;
|
|
8
|
+
export declare function toAbortError(): DOMException;
|
|
9
|
+
export declare function isFetchTransportFailure(caught: unknown): boolean;
|
|
10
|
+
export declare function isFetchAbortLikeError(caught: unknown): boolean;
|
|
11
|
+
export declare function parseErrorResponse(response: Response): Promise<HttpError>;
|
|
12
|
+
export declare function postJson<TResponse>(fetchImpl: typeof fetch, url: string, body: unknown, signal?: AbortSignal): Promise<TResponse>;
|
|
13
|
+
export declare function getJson<TResponse>(fetchImpl: typeof fetch, url: string, signal?: AbortSignal): Promise<TResponse>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"AAAA,cAAM,SAAU,SAAQ,KAAK;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;gBAEb,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,EAAE,OAAO,GAAE,OAAc;CAOjG;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjF;AAED,wBAAgB,YAAY,IAAI,YAAY,CAE3C;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkBhE;AAkBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAW9D;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CA8B/E;AAED,wBAAsB,QAAQ,CAAC,SAAS,EACtC,SAAS,EAAE,OAAO,KAAK,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAqCpB;AAED,wBAAsB,OAAO,CAAC,SAAS,EACrC,SAAS,EAAE,OAAO,KAAK,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAiCpB"}
|
package/dist/src/http.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
class HttpError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
code;
|
|
4
|
+
details;
|
|
5
|
+
constructor(message, status, code = null, details = null) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "HttpError";
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.details = details;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function resolveEndpoint(baseUrl, path) {
|
|
14
|
+
if (!baseUrl) {
|
|
15
|
+
return path;
|
|
16
|
+
}
|
|
17
|
+
return new URL(path, baseUrl).toString();
|
|
18
|
+
}
|
|
19
|
+
export function toAbortError() {
|
|
20
|
+
return new DOMException("Aborted", "AbortError");
|
|
21
|
+
}
|
|
22
|
+
export function isFetchTransportFailure(caught) {
|
|
23
|
+
if (caught instanceof TypeError) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
if (!caught || typeof caught !== "object") {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
const candidate = caught;
|
|
30
|
+
if (candidate.name === "TypeError") {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
if (typeof candidate.message !== "string") {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const message = candidate.message.toLowerCase();
|
|
37
|
+
return message.includes("failed to fetch")
|
|
38
|
+
|| message.includes("networkerror")
|
|
39
|
+
|| message.includes("load failed");
|
|
40
|
+
}
|
|
41
|
+
let pageLifecycleTeardownStarted = false;
|
|
42
|
+
function markPageLifecycleTeardownStarted() {
|
|
43
|
+
pageLifecycleTeardownStarted = true;
|
|
44
|
+
}
|
|
45
|
+
function resetPageLifecycleTeardownStarted() {
|
|
46
|
+
pageLifecycleTeardownStarted = false;
|
|
47
|
+
}
|
|
48
|
+
if (typeof window !== "undefined" && typeof window.addEventListener === "function") {
|
|
49
|
+
window.addEventListener("beforeunload", markPageLifecycleTeardownStarted, { capture: true });
|
|
50
|
+
window.addEventListener("pagehide", markPageLifecycleTeardownStarted, { capture: true });
|
|
51
|
+
window.addEventListener("pageshow", resetPageLifecycleTeardownStarted, { capture: true });
|
|
52
|
+
}
|
|
53
|
+
export function isFetchAbortLikeError(caught) {
|
|
54
|
+
if (caught instanceof DOMException && caught.name === "AbortError") {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (pageLifecycleTeardownStarted && isFetchTransportFailure(caught)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (!(caught instanceof Error)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return caught.name === "AbortError" || caught.message.toLowerCase().includes("abort");
|
|
64
|
+
}
|
|
65
|
+
export async function parseErrorResponse(response) {
|
|
66
|
+
const fallbackMessage = `${response.status} ${response.statusText}`.trim();
|
|
67
|
+
let parsedBody = null;
|
|
68
|
+
let message = fallbackMessage;
|
|
69
|
+
let code = null;
|
|
70
|
+
const text = await response.text();
|
|
71
|
+
if (text.length > 0) {
|
|
72
|
+
try {
|
|
73
|
+
parsedBody = JSON.parse(text);
|
|
74
|
+
if (parsedBody && typeof parsedBody === "object") {
|
|
75
|
+
const candidate = parsedBody;
|
|
76
|
+
if (typeof candidate.message === "string" && candidate.message.trim().length > 0) {
|
|
77
|
+
message = candidate.message;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
message = text;
|
|
81
|
+
}
|
|
82
|
+
if (typeof candidate.code === "string" && candidate.code.trim().length > 0) {
|
|
83
|
+
code = candidate.code;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
message = text;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
message = text;
|
|
92
|
+
parsedBody = text;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return new HttpError(message, response.status, code, parsedBody ?? text);
|
|
96
|
+
}
|
|
97
|
+
export async function postJson(fetchImpl, url, body, signal) {
|
|
98
|
+
let response;
|
|
99
|
+
try {
|
|
100
|
+
response = await fetchImpl(url, {
|
|
101
|
+
method: "POST",
|
|
102
|
+
headers: {
|
|
103
|
+
"Content-Type": "application/json",
|
|
104
|
+
},
|
|
105
|
+
body: JSON.stringify(body),
|
|
106
|
+
signal,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch (caught) {
|
|
110
|
+
if (signal?.aborted || isFetchAbortLikeError(caught)) {
|
|
111
|
+
throw toAbortError();
|
|
112
|
+
}
|
|
113
|
+
throw caught;
|
|
114
|
+
}
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
try {
|
|
117
|
+
throw await parseErrorResponse(response);
|
|
118
|
+
}
|
|
119
|
+
catch (caught) {
|
|
120
|
+
if (signal?.aborted || isFetchAbortLikeError(caught)) {
|
|
121
|
+
throw toAbortError();
|
|
122
|
+
}
|
|
123
|
+
throw caught;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
return (await response.json());
|
|
128
|
+
}
|
|
129
|
+
catch (caught) {
|
|
130
|
+
if (signal?.aborted || isFetchAbortLikeError(caught)) {
|
|
131
|
+
throw toAbortError();
|
|
132
|
+
}
|
|
133
|
+
throw caught;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export async function getJson(fetchImpl, url, signal) {
|
|
137
|
+
let response;
|
|
138
|
+
try {
|
|
139
|
+
response = await fetchImpl(url, {
|
|
140
|
+
method: "GET",
|
|
141
|
+
signal,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
catch (caught) {
|
|
145
|
+
if (signal?.aborted || isFetchAbortLikeError(caught)) {
|
|
146
|
+
throw toAbortError();
|
|
147
|
+
}
|
|
148
|
+
throw caught;
|
|
149
|
+
}
|
|
150
|
+
if (!response.ok) {
|
|
151
|
+
try {
|
|
152
|
+
throw await parseErrorResponse(response);
|
|
153
|
+
}
|
|
154
|
+
catch (caught) {
|
|
155
|
+
if (signal?.aborted || isFetchAbortLikeError(caught)) {
|
|
156
|
+
throw toAbortError();
|
|
157
|
+
}
|
|
158
|
+
throw caught;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
return (await response.json());
|
|
163
|
+
}
|
|
164
|
+
catch (caught) {
|
|
165
|
+
if (signal?.aborted || isFetchAbortLikeError(caught)) {
|
|
166
|
+
throw toAbortError();
|
|
167
|
+
}
|
|
168
|
+
throw caught;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { normalizeDatasetVersion } from "./normalize";
|
|
2
|
+
export { normalizeDatasourceInvalidation } from "./invalidation";
|
|
3
|
+
export { mapServerChangeEvent, type ServerChangeEventLike, type ServerChangeMappingResult, } from "./changeFeedMapping";
|
|
4
|
+
export { createChangeFeedPoller, type ServerDatasourceChangeFeedDiagnostics, type ServerDatasourceChangeFeedPoller, type ServerDatasourceChangeFeedPollerOptions, } from "./changeFeedPoller";
|
|
5
|
+
export { normalizeRowSnapshots, type ServerRowSnapshotLike, } from "./rowSnapshot";
|
|
6
|
+
export { createServerDatasourceHttpClient, type ServerDatasourceHttpClientOptions, } from "./client";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,sBAAsB,EACtB,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,uCAAuC,GAC7C,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,gCAAgC,EAChC,KAAK,iCAAiC,GACvC,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { normalizeDatasetVersion } from "./normalize";
|
|
2
|
+
export { normalizeDatasourceInvalidation } from "./invalidation";
|
|
3
|
+
export { mapServerChangeEvent, } from "./changeFeedMapping";
|
|
4
|
+
export { createChangeFeedPoller, } from "./changeFeedPoller";
|
|
5
|
+
export { normalizeRowSnapshots, } from "./rowSnapshot";
|
|
6
|
+
export { createServerDatasourceHttpClient, } from "./client";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidation.d.ts","sourceRoot":"","sources":["../../src/invalidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAA;AA6C3E,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,GAAG,IAAI,CA4CrG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
3
|
+
}
|
|
4
|
+
function normalizeReason(value) {
|
|
5
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
6
|
+
}
|
|
7
|
+
function normalizeRowIds(value) {
|
|
8
|
+
if (!Array.isArray(value)) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
return value
|
|
12
|
+
.filter((rowId) => typeof rowId === "string" && rowId.trim().length > 0)
|
|
13
|
+
.map(rowId => rowId.trim());
|
|
14
|
+
}
|
|
15
|
+
function normalizeCellRowIds(value) {
|
|
16
|
+
if (!Array.isArray(value)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
const rowIds = [];
|
|
20
|
+
const seen = new Set();
|
|
21
|
+
for (const cell of value) {
|
|
22
|
+
if (!isRecord(cell)) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const rowId = cell.rowId;
|
|
26
|
+
const columnId = cell.columnId;
|
|
27
|
+
if (typeof rowId !== "string" || typeof columnId !== "string") {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (seen.has(rowId)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
seen.add(rowId);
|
|
34
|
+
rowIds.push(rowId);
|
|
35
|
+
}
|
|
36
|
+
return rowIds;
|
|
37
|
+
}
|
|
38
|
+
export function normalizeDatasourceInvalidation(value) {
|
|
39
|
+
if (!isRecord(value)) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const type = typeof value.type === "string"
|
|
43
|
+
? value.type.trim().toLowerCase()
|
|
44
|
+
: typeof value.kind === "string"
|
|
45
|
+
? value.kind.trim().toLowerCase()
|
|
46
|
+
: "";
|
|
47
|
+
const reason = normalizeReason(value.reason);
|
|
48
|
+
if (type === "dataset") {
|
|
49
|
+
return { kind: "all", reason };
|
|
50
|
+
}
|
|
51
|
+
if (type === "row" || type === "rows") {
|
|
52
|
+
const rowIds = normalizeRowIds(Array.isArray(value.rows) ? value.rows : value.rowIds);
|
|
53
|
+
return rowIds.length > 0 ? { kind: "rows", rowIds, reason } : { kind: "all", reason };
|
|
54
|
+
}
|
|
55
|
+
if (type === "cell") {
|
|
56
|
+
const rowIds = normalizeCellRowIds(value.cells);
|
|
57
|
+
return rowIds.length > 0 ? { kind: "rows", rowIds, reason } : { kind: "all", reason };
|
|
58
|
+
}
|
|
59
|
+
if (type === "range") {
|
|
60
|
+
const range = isRecord(value.range) ? value.range : null;
|
|
61
|
+
const start = Number(range?.startRow ?? range?.start);
|
|
62
|
+
const end = Number(range?.endRow ?? range?.end);
|
|
63
|
+
if (!Number.isFinite(start) || !Number.isFinite(end)) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
kind: "range",
|
|
68
|
+
range: {
|
|
69
|
+
start: Math.max(0, Math.trunc(start)),
|
|
70
|
+
end: Math.max(0, Math.trunc(end)),
|
|
71
|
+
},
|
|
72
|
+
reason,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/normalize.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWrE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function normalizeDatasetVersion(value) {
|
|
2
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
3
|
+
return Math.max(0, Math.trunc(value));
|
|
4
|
+
}
|
|
5
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
6
|
+
const parsed = Number(value);
|
|
7
|
+
if (Number.isFinite(parsed)) {
|
|
8
|
+
return Math.max(0, Math.trunc(parsed));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DataGridDataSourceRowEntry } from "@affino/datagrid-core";
|
|
2
|
+
export type ServerRowSnapshotLike<T> = T | {
|
|
3
|
+
rowId: string | number;
|
|
4
|
+
index: number;
|
|
5
|
+
row: T;
|
|
6
|
+
kind?: string;
|
|
7
|
+
groupMeta?: unknown;
|
|
8
|
+
state?: unknown;
|
|
9
|
+
};
|
|
10
|
+
export declare function normalizeRowSnapshots<T>(rows: readonly ServerRowSnapshotLike<T>[] | null | undefined): readonly DataGridDataSourceRowEntry<T>[] | null;
|
|
11
|
+
//# sourceMappingURL=rowSnapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rowSnapshot.d.ts","sourceRoot":"","sources":["../../src/rowSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAmB,MAAM,uBAAuB,CAAA;AAExF,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAC/B,CAAC,GACD;IACE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,CAAC,CAAA;IACN,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAML,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,IAAI,EAAE,SAAS,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GAC3D,SAAS,0BAA0B,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAsDjD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
3
|
+
}
|
|
4
|
+
export function normalizeRowSnapshots(rows) {
|
|
5
|
+
if (!Array.isArray(rows) || rows.length === 0) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const normalized = [];
|
|
9
|
+
for (const entry of rows) {
|
|
10
|
+
if (!entry || typeof entry !== "object") {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
if ("row" in entry && "rowId" in entry) {
|
|
14
|
+
const snapshot = entry;
|
|
15
|
+
if (typeof snapshot.index !== "number" || !Number.isFinite(snapshot.index)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (typeof snapshot.rowId !== "string" && typeof snapshot.rowId !== "number") {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (typeof snapshot.row === "undefined") {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
normalized.push({
|
|
25
|
+
index: Math.max(0, Math.trunc(snapshot.index)),
|
|
26
|
+
rowId: snapshot.rowId,
|
|
27
|
+
row: snapshot.row,
|
|
28
|
+
...(typeof snapshot.kind === "string" ? { kind: snapshot.kind } : {}),
|
|
29
|
+
...(isRecord(snapshot.groupMeta) ? { groupMeta: snapshot.groupMeta } : {}),
|
|
30
|
+
...(isRecord(snapshot.state) ? { state: snapshot.state } : {}),
|
|
31
|
+
});
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const rawRow = entry;
|
|
35
|
+
if (typeof rawRow.id !== "string" && typeof rawRow.id !== "number") {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (typeof rawRow.index !== "number" || !Number.isFinite(rawRow.index)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
normalized.push({
|
|
42
|
+
index: Math.max(0, Math.trunc(rawRow.index)),
|
|
43
|
+
rowId: rawRow.id,
|
|
44
|
+
row: entry,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return normalized.length > 0 ? normalized : null;
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@vue+shared@3.4.38/node_modules/@vue/shared/dist/shared.d.ts","../../../node_modules/.pnpm/@vue+reactivity@3.4.38/node_modules/@vue/reactivity/dist/reactivity.d.ts","../../../node_modules/.pnpm/@vue+runtime-core@3.4.38/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","../../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@vue+runtime-dom@3.4.38/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","../../../node_modules/.pnpm/vue@3.4.38_typescript@5.9.3/node_modules/vue/jsx-runtime/index.d.ts","../../datagrid-core/dist/src/virtualization/types.d.ts","../../datagrid-core/dist/src/virtualization/columnSizing.d.ts","../../datagrid-core/dist/src/virtualization/columnSnapshot.d.ts","../../datagrid-format/dist/contracts.d.ts","../../datagrid-format/dist/runtime.d.ts","../../datagrid-format/dist/index.d.ts","../../datagrid-core/dist/src/types/bivariance.d.ts","../../datagrid-core/dist/src/models/columnModel.d.ts","../../datagrid-core/dist/src/cells/runtime.d.ts","../../datagrid-core/dist/src/types/column.d.ts","../../datagrid-plugins/dist/types.d.ts","../../datagrid-plugins/dist/manager.d.ts","../../datagrid-plugins/dist/index.d.ts","../../datagrid-pivot/dist/contracts.d.ts","../../datagrid-pivot/dist/coreTypes.d.ts","../../datagrid-pivot/dist/drilldownContracts.d.ts","../../datagrid-pivot/dist/drilldownRuntime.d.ts","../../datagrid-pivot/dist/layoutContracts.d.ts","../../datagrid-pivot/dist/runtimeContracts.d.ts","../../datagrid-pivot/dist/runtimeHelpers.d.ts","../../datagrid-pivot/dist/fieldRuntime.d.ts","../../datagrid-pivot/dist/incrementalHelpers.d.ts","../../datagrid-pivot/dist/helpers.d.ts","../../datagrid-pivot/dist/layoutRuntime.d.ts","../../datagrid-pivot/dist/index.d.ts","../../datagrid-core/dist/src/types/sort.d.ts","../../datagrid-core/dist/src/types/filters.d.ts","../../datagrid-core/dist/src/settings/dataGridSettingsAdapter.d.ts","../../datagrid-core/dist/src/types/base.d.ts","../../datagrid-core/dist/src/types/stable.d.ts","../../datagrid-core/dist/src/types/index.d.ts","../../datagrid-core/dist/src/protocol/versionedPublicProtocol.d.ts","../../datagrid-core/dist/src/protocol/publicProtocolCodemod.d.ts","../../datagrid-core/dist/src/runtime/dataGridRuntime.d.ts","../../datagrid-core/dist/src/protocol/eventContractTiers.d.ts","../../datagrid-core/dist/src/protocol/index.d.ts","../../datagrid-formula-engine/dist/graph/executionPlan.d.ts","../../datagrid-formula-engine/dist/graph/index.d.ts","../../datagrid-formula-engine/dist/contracts.d.ts","../../datagrid-formula-engine/dist/coreTypes.d.ts","../../datagrid-formula-engine/dist/syntax/types.d.ts","../../datagrid-formula-engine/dist/analysis/types.d.ts","../../datagrid-formula-engine/dist/syntax/ast.d.ts","../../datagrid-formula-engine/dist/runtime/types.d.ts","../../datagrid-formula-engine/dist/syntax/analysis.d.ts","../../datagrid-formula-engine/dist/syntax/values.d.ts","../../datagrid-formula-engine/dist/syntax/functions.d.ts","../../datagrid-formula-engine/dist/syntax/tokenizer.d.ts","../../datagrid-formula-engine/dist/syntax/parser.d.ts","../../datagrid-formula-engine/dist/syntax/optimizer.d.ts","../../datagrid-formula-engine/dist/syntax/index.d.ts","../../datagrid-formula-engine/dist/syntax/core.d.ts","../../datagrid-formula-engine/dist/runtime/compile.d.ts","../../datagrid-formula-engine/dist/evaluators/interpreter.d.ts","../../datagrid-formula-engine/dist/evaluators/jit.d.ts","../../datagrid-formula-engine/dist/evaluators/shared.d.ts","../../datagrid-formula-engine/dist/evaluators/columnar.d.ts","../../datagrid-formula-engine/dist/evaluators/vector.d.ts","../../datagrid-formula-engine/dist/runtime/evaluators.d.ts","../../datagrid-formula-engine/dist/runtime/index.d.ts","../../datagrid-formula-engine/dist/index.d.ts","../../datagrid-core/dist/src/models/formula/formulaEngine.d.ts","../../datagrid-core/dist/src/models/pivot/pivotContracts.d.ts","../../datagrid-core/dist/src/models/formula/formulaContracts.d.ts","../../datagrid-core/dist/src/models/rowModel.d.ts","../../datagrid-core/dist/src/models/pivot/pivotRuntime.d.ts","../../datagrid-core/dist/src/cells/index.d.ts","../../datagrid-core/dist/src/models/filters/advancedFilter.d.ts","../../datagrid-core/dist/src/models/filters/columnFilterUtils.d.ts","../../projection-engine/dist/index.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionComputeStage.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionStageRegistry.d.ts","../../datagrid-core/dist/src/models/projection/projectionStages.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionEngine.d.ts","../../datagrid-core/dist/src/models/dependency/dependencyGraph.d.ts","../../datagrid-core/dist/src/models/mutation/rowPatchAnalyzer.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionOrchestrator.d.ts","../../datagrid-core/dist/src/models/compute/clientRowComputeRuntime.d.ts","../../datagrid-core/dist/src/models/projection/projectionPolicy.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionPrimitives.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionBasicStages.d.ts","../../datagrid-core/dist/src/models/projection/clientRowDerivedCacheRuntime.d.ts","../../datagrid-core/dist/src/models/materialization/clientRowComputedSnapshotRuntime.d.ts","../../datagrid-core/dist/src/models/snapshot/clientRowCalculationSnapshotRuntime.d.ts","../../datagrid-core/dist/src/models/clientRowModel.d.ts","../../datagrid-core/dist/src/models/clientWorkbookModel.d.ts","../../datagrid-core/dist/src/models/state/clientRowRowVersionRuntime.d.ts","../../datagrid-core/dist/src/models/state/clientRowViewStateRuntime.d.ts","../../datagrid-core/dist/src/models/aggregation/aggregationEngine.d.ts","../../datagrid-core/dist/src/models/tree/treeProjectionRuntime.d.ts","../../datagrid-core/dist/src/models/aggregation/incrementalAggregationRuntime.d.ts","../../datagrid-core/dist/src/models/state/clientRowProjectionTransientStateRuntime.d.ts","../../datagrid-core/dist/src/models/projection/clientRowTreePivotIntegrationRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowProjectionIntegrationHostRuntime.d.ts","../../datagrid-core/dist/src/models/state/clientRowRuntimeStateStore.d.ts","../../datagrid-core/dist/src/models/projection/clientRowProjectionHandlersRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowProjectionHostRuntime.d.ts","../../datagrid-core/dist/src/models/state/clientRowSourceStateRuntime.d.ts","../../datagrid-core/dist/src/models/state/clientRowSourceNormalizationRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowSourceColumnHostRuntime.d.ts","../../datagrid-core/dist/src/models/snapshot/clientRowSnapshotRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowSnapshotHostRuntime.d.ts","../../datagrid-core/dist/src/models/materialization/clientRowMaterializationRuntime.d.ts","../../datagrid-core/dist/src/models/clientRowExpansionRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowExpansionHostRuntime.d.ts","../../datagrid-core/dist/src/models/projection/clientRowFlatIdentityProjectionRefreshRuntime.d.ts","../../datagrid-core/dist/src/models/materialization/clientRowComputedSnapshotFieldsRuntime.d.ts","../../datagrid-core/dist/src/models/compute/clientRowComputedRegistryRuntime.d.ts","../../datagrid-core/dist/src/models/compute/clientRowFormulaDiagnosticsRuntime.d.ts","../../datagrid-core/dist/src/models/compute/clientRowComputedExecutionRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowComputedFieldHostRuntime.d.ts","../../datagrid-core/dist/src/models/mutation/clientRowRowsMutationsRuntime.d.ts","../../datagrid-core/dist/src/models/mutation/clientRowStateMutationsRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowMutationHostRuntime.d.ts","../../datagrid-core/dist/src/models/host/clientRowComputeHostRuntime.d.ts","../../datagrid-core/dist/src/models/compute/clientRowComputeModule.d.ts","../../datagrid-core/dist/src/models/compute/clientRowFormulaComputeModule.d.ts","../../datagrid-core/dist/src/models/host/clientRowFormulaHostRuntime.d.ts","../../datagrid-core/dist/src/models/dependency/dependencyModel.d.ts","../../datagrid-core/dist/src/runtime/signals.d.ts","../../datagrid-core/dist/src/models/server/serverRowModel.d.ts","../../datagrid-core/dist/src/models/serverBackedRowModel.d.ts","../../datagrid-core/dist/src/columns/formatting.d.ts","../../datagrid-core/dist/src/models/editModel.d.ts","../../datagrid-core/dist/src/models/server/dataSourceProtocol.d.ts","../../datagrid-core/dist/src/models/mutation/clientRowPatchRuntime.d.ts","../../datagrid-core/dist/src/models/dataSourceBackedRowModel.d.ts","../../datagrid-core/dist/src/models/index.d.ts","../../datagrid-core/dist/src/selection/rowSelection.d.ts","../../datagrid-core/dist/src/selection/selectionState.d.ts","../../datagrid-core/dist/src/selection/virtualSelection.d.ts","../../datagrid-core/dist/src/selection/snapshot.d.ts","../../datagrid-core/dist/src/core/transactionService.d.ts","../../datagrid-core/dist/src/core/gridCore.d.ts","../../datagrid-core/dist/src/selection/selectionSummary.d.ts","../../datagrid-core/dist/src/core/gridApiCellRefresh.d.ts","../../datagrid-core/dist/src/core/gridApiContracts.d.ts","../../datagrid-core/dist/src/core/gridApiDependencies.d.ts","../../datagrid-core/dist/src/core/gridApiPivotLayout.d.ts","../../datagrid-core/dist/src/core/gridApi.d.ts","../../datagrid-core/dist/src/spreadsheet/formulaEditorModel.d.ts","../../datagrid-core/dist/src/spreadsheet/formulaReferenceDecorations.d.ts","../../datagrid-core/dist/src/spreadsheet/sheetModel.d.ts","../../datagrid-core/dist/src/spreadsheet/sheet.d.ts","../../datagrid-core/dist/src/spreadsheet/derivedSheetRuntime.d.ts","../../datagrid-core/dist/src/spreadsheet/viewPipeline.d.ts","../../datagrid-core/dist/src/spreadsheet/workbookModel.d.ts","../../datagrid-core/dist/src/spreadsheet/workbook.d.ts","../../datagrid-core/dist/src/spreadsheet/index.d.ts","../../datagrid-core/dist/src/public.d.ts","../../datagrid-core/dist/src/index.d.ts","../src/rowSnapshot.ts","../src/changeFeedMapping.ts","../src/changeFeedPoller.ts","../src/http.ts","../src/invalidation.ts","../src/normalize.ts","../src/client.ts","../src/index.ts"],"fileIdsList":[[48],[48,49,50,52],[49,50,51],[52],[62],[61],[59],[189,190,191,192],[181],[78,181,182,185,186,187,188,189],[181,187,190],[78],[181,182,185,186],[203],[78,118],[118,142,143],[118],[78,114,115,118,128,131,132,135,137],[118,138],[59,60,62],[124],[126,127,129,130],[114,115,118,162],[114,115,118,132],[114,115,118,169],[78,118,178,179],[114],[126,127,129,131],[118,161,163],[78,118,157],[169,170],[118,165,166],[127,130,149],[118,129,142,145,146],[118,137,154],[61,78,114,115,116,118,119,120,121,122,124,128,131,132,135,136,137,138,139,140,141,145,146,147,150,151,152,153,155,156,158,159,160,164,167,168,169,170,171,172,175,176,177,178,180],[118,119,127,129,131,132],[78,118,127,157],[118,126,128],[118,133,134],[118,148],[118,132],[118,123,125,126],[118,119,124,127,132,134,142,143,144,148],[126,127,129],[118,124],[118,119,143],[128],[118,123],[78,114,115,116,117],[78,118,138],[78,173],[78,118,174],[118,136],[78,118,148],[118,144],[118,145],[118,142],[66,84,87],[85,86,88],[81,84,89,174,181,182,184,185,187,188,193,202],[66,84],[118,185],[183,184],[118,183,185],[79,80],[118,197],[114,115,118],[194],[197,201],[194,195,196],[115,117,118,194],[118,197,198],[198,199,200],[118,197,199],[63,66,78,81],[56,61,62],[83],[84],[60,82],[54,55],[57,58],[57],[93,94],[91],[92],[96,97,109],[93,96,97],[90],[91,92,93,104,113],[93,105],[107,108,110,111],[106,112],[94,95,97],[93,94,95],[95,97,98],[98],[94,95,96,97,99,100,101,102,103],[96,100],[94,96,98,101],[94],[93],[93,98],[67],[67,68],[67,68,69],[68],[68,74],[67,68,69,70,71,72,73,74,75,76,77],[68,71],[64,65],[64],[53,204,205],[53],[53,204,205,206,207,208,209,210],[53,205,206,207,209,210,211],[53,204]],"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":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"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":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"6dcb89623cc070c3b2a29218f99a3501041b3ac3fc4c80ee7083b99ba320a694","impliedFormat":1},{"version":"d7320842ea9f50f92ccd7871357201f298e3a1e995033dfacd305fb1f82fb658","impliedFormat":1},{"version":"c3a02538a5edb234c5decee1ccc8e99efbf75f9929e32ee535ebac2eb1e4a68f","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"f6ce02ab5919d59beeaeb808732c9847e1095e88621a427590077c90da6eec1a","impliedFormat":1},{"version":"9c077ba346f2891d1725d6cbf1ff8bc7ca075ccff10d1ea38eda571245df0eeb","impliedFormat":1},"100f478b224066a595eae60c539d240d022367a227a5f82309a9e9b0bfee4b4d","78f001e22ffc7e69314e4f338cd373d358cc9fced47cc17cccbfedc871d34de7","1b4fa9cb39ebad8feeb44fb6000534c004dcc66463185059c744a4dcf6207122","e664d0a864c3eab463e66b43d6dbea91d2b638e9f6d5105813543214db09ab23","bef825c885df49ccf35aa10086761e595ba2eb1db07066a4e7d0f14f485d970f","890dfb6bdb476623cce4024930bc928b3d12c33ed5fdbbc4002ffd8cc4f40f8e","44636b471c561ebcc4ea1c7043902d0753380d2079ff4e6ba804d0f20dcc4004","6429bb8c5b1ff8a315af6493c45b991d5b633c0b6242495824f1914b208ef248","853e96c7ee7ed828152f6dc9a5aa503a0568ff3d0f135f0013a6b52ab52b725c","0eba7362516c3990314a9f7323f588b5a4a8c1c29d7ea9c645dc53f775785552","5806dbd9a4b8723d065072470a122ec7b662c4013164b0a8dcf4fc0b859e6772","5a4d5e5f1dd9e888a3e68f1084ddc734f2d71c49fd0abaea5580fac4ec60ce31","c56817689fe5b0709729a372143e17cf611f13ce66fe7b5e8b1d42d810ac85d7","67bc0c51b4a85df62999f6c0ca55fd2c03e2670d29d094cd6423d9f30cb74e62","94586b62438c3891abca24dcfd7e357ff381001fa01460b53b7c5bf2e151b6a4","ce7d96dab0b4231aa3771422d063d6aeb386ea24cb085ce87ea8ef3a9d4ce693","5803d8c96d3e8647481906b30ac343b148dfe43ca308f14bd9563e901f91b847","77f284975da16103045878067ff7e8dd87d13145e918611b341610f9c3cf594d","9d84a732fc46f355d02fd28cdcb77a1ccaa49ce7a6587b3d8b9933596f954ca0","348ac3c5e13c2afdc366e8e9c60fefd0261b6e8184dcd4e7446f145d53ed48d6","bf8ca8db7c3bd574c49022d2b8f87a35fa9b920b7076d565e288d1b92a980699","b167c0ecedf7ed784ac425bb840a0d4073355d0168074bae0987ae284ffa0b5c","5538d6e367236e5154e553a50b35d133c1b8f9f8e5d38d3898c102e9aabf41df","154cabfddba5622ff2507ae83ea4ba061fe37f8ec9ad0b5b691b428f091810a0","d95d8a1727c120f8c9e604f511ff16c85afe3689a90d133297a41141b628f3fa","1c467a100ab6b10540da5b8219dafce5102b45d57278671680d27b9d2c6ae67d","32dc3a478d2c53d81b40228657cdf90e23c0eada64fbfd2a3987c47b0f00b347","d89ac2b83e98dfa80917472429a6a14308dc5b8bed314c8ef6ef869f70a5042b","e0dadb7fc288835b270fba6b06e86d1ae413ba2efd92ad3b93ebe8834bb6a06f","74059e9dc614448a11674f0fdb3969082af6905f5740d8975cc88cf0d2d36b65","9d7eba1f7c8144e8d9a39bf7d81098a788e52d22a2262610e84c31ba9827e646","1ede47ca38b9eca1e4a2472b55d257478c08f85ead7c291b7b15ff1eaf4d61b6","cfe77ea48ec07068f94b367112012a2f0f91cf7df1fa2f4044f89c041d166e68","39438b23717db66cd597a27a3cc5d5e970b98f672fd786f2cbeba9e26a0031bf","2dad29ada1ca06658aaab3bcf2643d0cea67a28b215ca8a0f0574bd64d54a6da","b14dd5dc062192f7f51e138beafc1af13336e4bfe8ef0c210f553fa9e1959961","2df263b6a13dc093f07f96f51e7f53feb4de13fe20a65b7bda2dd27e0de27187","74a3f116974a9b682958e8fa6c6ce80e5f5118c2d7b19bdf7e2c40776afe5136","07730cd798f781f81d3f67e2102d867a282c92ba2aadbf3ed08c4f74bcc9d8d8","8354eda9637f778a739d3190862078947950ab98aa8e1b7aed9d94d09cad5704","f62a78d52584ce9da85d392c4a4b285284837577283fb70ebcbdf5eeba9ea59a","0f97daa0c2555affd86c6640ac9f5e3c11a24ddf4dbe272df8b16d0f7bba8cd3","f696b2721a0a5d3ce72d0d157beb3c08cce2e7cc94d9cf50c25531a9b90b6c45","12d31bc65e923de3eebbfaf6838fa499ff3fc541437bc89b7eafded431d1b43c","cab1b4a264706ef08d66d9c3add5e05513300fd067596f65faba7fc16bdfae63","d26eae4a2f6f69e075c54a74534f53d4bad2bb665011d01ddebedd9d89c6da4c","415c5ec1dfd87b823f604e838b0f1ecf26e51126005046d313fcc3235e0fa1ad","fb976158d1210165b8617b9d6c53c45e70fb9b410f91f628fcbc8dbb0dd3d651","5d73e450e149f6a1befdb70687aea1cc1a80764a6ad34294d2583527b440d57a","fff586d6a03bc026f6005d0c34572628d8a39110264c7bd5b2c38db924ed01c0","a283c911be3d9964373f8969ff2819d5a7f5234f692df81839d5f40047527b7a","24b4acc0fe759ec0e449a60ac99353ca3fbfe043b7d3d01cf695a4cdad4e7ea0","45087fdbf9b80815c9b8ca1d74a8cacc5a764ab48a135b28443f41799616ec53","6edd38b3c2580e31857d7723d8d464b7cb48e1a5a364bf3f0f256ff1cf1bf1fc","0866f44083f290f331ab7b84fc91c73859a999b3eefcf407639eb05b07fefbde","7847299294ef6f8e2431f03059ec2a9fe2a648a9a3b0651a6c7a963e6287efc8","8b83cbd66bf0cf49832078c6a76e8a8beb1bdbf9311e93c6f646fad37f371b68","1a0c095c9360a7e51fae717d16f030ad1588e2e421671435d0f4c38f1d09aff2","610a284faf8d12a312fdd6f095b90f8153619736028f5b9267163f82c133a9a7","9e31e36a404cfc9345ed4a044956520c247dfb1db0cde89200fafc7dffceb573","ee7ff3022dda355c83741541b7e3ed06360646c56b2cf33c695d38f8282dbf6d","fcf0f9382c328648f99a61352f76049beac3019ff825dceea50f5ba19e97cfb9","7aad6f274c5f85cb84d907389669bc73b665834437db17d558e341609687c04d","28278d9404a1f0417a416c3dafc45ea7fe45c94ba8775fbcde32b92d9a6b1536","4a027cb0301a8ada7cd097bdc808d8cc65a3846472791981c5c2a911e6d99de6","88ba3c795a943c1468816b59430d9963156ef91e580931aa18758946059793ec","662be9fa92de687637573a8368628f56116852d9a651c07d8c99f33080d96db2","3296877c3e3d1046df95ae140f05bb7bd60c8f479a387f1852091e0b25db5cab","c270a8c56822390d47de9635bdb3f4f19489b8f6ede5ebae0522a56af6898162","87291793ba97c3f610cd7d017706da18be5d553a0e97c2738c7b441d5a66d288","c1280c454053838e19cd1bc6cbea9e7f5b36ba91feb413f9b0caf3abe5dd086c","a13a5fdb0ea7157703ab1a4434d5c8441a6a97b94aa1128e4a096491ab209d88","71dec481fd4261a2a2c9af269bbde5e2d5756d90975c2f64170670b19e3f9f68","58c41471f5b4f8413840f08ccae90d28371f1bd23b244ba2e824b63f6a2d0f15","b8cfa5cdcdc2705767d1195a4d1189baea906dbe72bdc6de3b7b31c8f76e5474","8013f54ae808e6255682fc302e1e6b4868979e0e769a569a53b9a3901f99e74d","ad98eab0317aa0ebf4deff8fbc97f0821f1681183e96e90031e5af71afbb7020","165aef9fe30590eed8961f27284a0d72c2c2092598a5d0cc0c41ffa193b88385","2ef72e891216d09b427bf7b721f36b2721912d9e340d313ae752909bab6d132e","1e71c4a0f9c3872ff7b983cf53e5b5bfe2acabbd0dd1324f54632aff89417a80","dee10960e693c49430f98d6d506f1a7f9e9ff2de942e6f96324231b86b5145e3","1de0cb90e4440d2188aaeba020b794d7b4110e919dda2808d965999833828d5c","a3c060ac2969a63b328ce2f65353603307a6caa5d18e205f667f4051354b6afa","cc00e9a376a05e6c51a90d82cab31e79cb006c86ec8c70b1acd53e58d2d4f01b","a9d1f4ef894734ecb6c56b031e5bf81de65bccb0022aaf4ab2f9fc90198f5192","3ab3c5f867a0ac33396bfd0070535f011b0cf9b984527d65572d529021e3c41e","53e4557d0f12ff410bf8e405d61ce30b38c1fc49432e22ca87e38ccb3111495d","728881cab1bb5527f1a5aac49c44af3c4f4196cf8bb814e9b36896c4394218ac","439b1f6fc373322f3322ca91164268fd210f2d4611c83ab276134219b4664a53","413698d8b8acb145fd3972f45a578a69c6359cb29e93b0493e1063544602210a","7c691b173ec0817e4ca0fa1ae200f615eb6a5ec951ad929ee7c190395db09a94","107b9c77175044a5fe81c3e02000aba7598984bcf2834a3d9e0be88eeda6a5d6","fd377979701b616a826ba707dcc981a3624f8431f6c69e54eb45a308f273b027","43eff2113a4d9054b3a262520ad399d4bfc691d04e088f64dd7b04fce4cda9b0","21c52c82167d68ca48e7a95ee418df3ef3b126438abc8fa3bfb4c255d94ade55","21e93963347140f1011957feb83208574cda2052f23b285ff521cbfe69dadb62","779a2329286f38de9e3632fd9a118ea11fba2af763ed10329de87c1973b92ab9","4926f61d607325deda00acb107d167fd34cf31515564b92e81a25638299dbef3","e1e99d2f1f8004f13dc4452da05e5264bcb7eb7102136fe62346451e9cd90b4c","5a8f9c7ead92155cf2f43fba0ab9200a0a4b784de0275802e409194cb0932f95","8939f18de38741bf44f4759a29709d93dc1c98b34fcd5879ac4100bb8114f906","cf035f56298e07e1a65349dc582fe9ba97fdf9a93ad4b202cde7d8d6cc384f5e","022fffc6f69d17b8e9c811b3aee7879b8a6852c461f9755d98d4412a363a1a02","be6e901444d6828ef10376de40aaeab01512e724d2a2ef57544165125ee09ba6","affbea8b658ac1523434d593932d2c9836a5fdf9abd75dbcdd7747c60581c64b","4e47973398d66bcaab9852db7e35e2c450f396157ea15447f559c3172bab0825","90d38a6b8e39fd8dd995063ec9ae6829e38c7daa682deb2932214117724886a3","b39fc995906e85808ef97f81e75bc4ff6bc79fed5497995333536752b2127c65","ff12cf3a5e3beffe5f01d6a265b8184b2d2be0363b48fb902f00b5a4f04e1e42","ad820cb5c40dd1b481ae1ce742049c69ee78bf7181fe9b482939fc2ba1617d1f","644ca8aec9f5397c934ba3b36087adafb73101a8278ce53bd8e663edbdb16941","01566dad7c381efff19a8fc35907ab1d2bceed7c6242aa1bdd66d3e058b65351","83f10d1ea022bb8325fd85f6e8c35a0bf570c97b89f86453fb82d134f9144bfa","16d0d4d6857fe316bd9dcf42bff52c1d103b16ff92a00170723ed2116ac8b4e9","fd86403c26236f75b46d304c0344e6721ac565725abfc82ae2c16af5ada2408d","36882deb06fb0ca95fcfdb4a15fd22074d87470ca6f1fa5662817ce34d04c567","885c790b4bc2385dc082eeeeccc6e5fd4f843a1cd91f8673ed3acea8080adfb9","bf645777b720b30b78025b5379404626852d163b3122634bb5897981cb1a5b56","2aec399a4b8ee40eb2fb6e8db069a0aab576b28e36b421f22e110a9fe5e71b0b","53382b2a6becf03332ef5d61412b86a9940f9cd085c931b35eb56e69d08653fd","15983eb188b41dee7154a4a9f5a2544ee7d031f91fa135a5de30eb5dcabdc7db","b07644ab3c6838203e3db140f3be41f984b8e191c4acb8b8fa6fd1a33d762e1f","d653644f2095e3542071f8b593e76dd04a256ae96dc6493506140b7eeee22848","6c318bbfcc8072d4e1241bc38381b72c2040e000716a817beb2bbf9aede2446b","776d664cdfea61fb2ec434bfc9c038cc2f9b2ddfdd992d237fec3d0705bac7b4","89c139eedbb3a018c0ddff81ca492467257d67e6ad7b74aefcc3214e0b372e58","7fdd1dbaa370f5acb81fea94bcfffd04f6bb46788b6a16970a1d3b3293afd8ff","649062377025493aaf8bbbaeab2f886c45a520710f3adf2f96b30f9fede2e239","577565278f0b2f1029d861c805bdb8e437a4a34c415bae2c7d30a351176e2e9b","4cd305c1246c64220e91c6ed98cc0d5020a9a69b072c84962ae57a5dadc1e2ce","a5720be7a2d8c9fe9aed4670f5efc7b770ba7db8fc6d153af67c2621ed3afb74","be84506ef72213a00ace9934f71bb8c8c6caa2397168042557ca82f3d92271c4","35b521b954dbf963e2314c690b4c458eb2d2e34b5ea8191fae92cf1f8f9183b2","729c92f37d0ab8771a93762dc1f6cbe776871c37d248802554d7cbf74be5083a","0a6eaa6092ce3882f1bcf075a92f9e30e9946f3e1e1204e4a361bf70a99f6a96","6935b77fc17a62d9c13e4f9f4e64d61ef5093c43e12dcf9f8bf659aeb0c7653d","b3bcda14a6118f7d14059c4de206ff0cb6e7b11b2f0dfc5fc8930b5a9a4c887b","00e465ff6bae5f87488ec03af7a958dd507e2ce40f2769b32503c230ebb89a02","a9ae0fedbe185c24f26e813ac30ada918d2a2cabcef1d5943b68c631a570b4a5","dc7d38f6dc9c1bf8404720601baf5c7e05a38b64792e4fc39be82cbb776215aa","6eb0e9c2676a66acb1e70b6c7b15e49c42c3b844fdaba3b946c986f7b5942790","b67cbc2cd6ac03e6c90c71ff07265ab055c0576024daf6994faa9219b84d587e","75bace6fa5289d491c9d6cbbf9195cc009e6bb7c569df8efd7c8f55564a0793b","c1cf0743fa1de148f7c43ea5bef6147bf4cdb5de0917d8bc04e2a5975359ea43","ac41728fa2136c026db3b9852110acf2a2bf21ae7aa41e5a4dd5215c4be80419","781e7fbd78c20f044b2e5e6b7fb918d7120dba8bd92a3a65b6e1a144a7ef1c73","52c74315caf43b272af489635273d556d7350ca2824e1c97191a35d7e7166e0e","73201015189bcd5e38fdc788a8eaae37f3ff0dda2791e4e7a2a8a703880b2229","6411d30de095ce70d0c325bce8e6d119759dd9778264be61055138b76138e9f6","2e26865bf1e58ccca26a52a1688d70a38d56d3868caf1778c9c6939982c1efcc","396d873beccd8f6ea4587a6b25525ea87232755de4f1014ca5d058c2817e465a",{"version":"c623d1f04c50fdaa9e225adef05cf52c83aa69ef03d4c8e165a48627e1212674","signature":"fd7ce14e4ad9720115f6daab919f89a4e17fb9bd7a5c199d1f863ae050bc9cf2"},{"version":"b26483535a1ffb81bf2d1d373dd6eb0bed21315ec17e4e20a6d44a280579ddcd","signature":"014f1f4ab4b9b79f157993e5bb78cd76295fb08f2cab9523bf259689a6ccc321"},{"version":"362e5d7962ea1d446663e5f2236e043e39791987ac55bbb4f1f1845e1a0d2e9f","signature":"7289db1d3ee292a61e9ffa1193e6dfae159e3e8d229791d662c7220552b3510f"},{"version":"d2bce74505cf1d21772a2a7e72a7d0e033f9d9ebb59b0499b0780b5c4f0b5793","signature":"2fe0484fa2b866cb5fbc0ebceb3f78d7d7055e09f5895e8c7669eecf79c4d9dc"},{"version":"147a07e7b4fa9dc1bc35fdcb36ae4891578650eade642d43f2be72bcb540e5d2","signature":"01141a54bcbf49819854705d42ee6c98baf72231715fa2814301712e71176bbd"},{"version":"eebae8b23b825d1fb8391a0719449e0c32ad3bd09a8da4b9d000668bb7eb96a3","signature":"b761e1da62a81c6f6ca4912a412d8bbf3cc434f1617aa6a9607470aeb0b27e4c"},{"version":"be999cdfbb306efcd5a95b66030b8f289ed3e03cd50194dfb9057adde0e3ab49","signature":"7dd5285034f6f742c429ebd074cf4006cb5d10721aec6235dcdc92043f1160ff"},{"version":"a59da8264a436bd12c83a7476a56fb16aca28d6bea86d9cbb9ce3cf3aa28b71e","signature":"07ace9faa8d30b7e30b24c0a71f98c02c8b8a3047424b9b51a4295ccb77927eb"}],"root":[[205,212]],"options":{"allowImportingTsExtensions":false,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"..","skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[49,1],[50,2],[52,3],[53,4],[120,5],[62,6],[176,7],[193,8],[189,9],[190,10],[191,11],[192,12],[187,13],[204,14],[142,15],[144,16],[157,17],[138,18],[139,19],[61,20],[169,21],[131,22],[163,23],[161,24],[170,25],[162,17],[180,26],[177,17],[121,17],[122,17],[117,27],[115,27],[168,28],[164,29],[158,30],[171,31],[167,32],[150,33],[147,34],[155,35],[153,17],[181,36],[136,17],[156,17],[179,37],[165,17],[166,38],[129,39],[116,12],[119,12],[135,40],[159,41],[134,42],[124,17],[127,43],[149,44],[130,45],[133,17],[125,46],[146,47],[132,48],[126,49],[118,50],[178,51],[174,52],[175,53],[137,54],[154,55],[145,56],[140,17],[148,17],[152,57],[151,17],[141,15],[143,58],[88,59],[89,60],[203,61],[87,62],[182,9],[188,63],[185,64],[184,65],[81,66],[198,67],[194,68],[195,69],[202,70],[197,71],[196,72],[199,73],[201,74],[200,75],[82,76],[63,77],[84,78],[79,79],[83,80],[56,81],[59,82],[58,83],[95,84],[92,85],[93,86],[110,87],[107,88],[108,88],[109,88],[111,87],[91,89],[114,90],[106,91],[112,92],[113,93],[97,84],[98,94],[96,95],[105,96],[100,97],[104,98],[103,99],[102,100],[101,101],[94,102],[99,103],[68,104],[69,105],[70,106],[74,107],[76,104],[75,108],[78,109],[71,105],[77,110],[72,105],[73,104],[66,111],[65,112],[206,113],[207,114],[211,115],[208,114],[212,116],[209,117],[210,114],[205,117]],"latestChangedDtsFile":"./src/index.d.ts","version":"5.9.3"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@affino/datagrid-server-client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"author": "Anton Pavlov <a.pavlov@affino.dev>",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "Reusable server datasource client helpers for Affino DataGrid",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/src/index.d.ts",
|
|
10
|
+
"import": "./dist/src/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"main": "dist/src/index.js",
|
|
14
|
+
"types": "dist/src/index.d.ts",
|
|
15
|
+
"module": "dist/src/index.js",
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"sideEffects": false,
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/affinio/affinio.git",
|
|
23
|
+
"directory": "packages/datagrid-server-client"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/affinio/affinio/tree/main/packages/datagrid-server-client#readme",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"keywords": [
|
|
28
|
+
"datagrid",
|
|
29
|
+
"server",
|
|
30
|
+
"datasource",
|
|
31
|
+
"client"
|
|
32
|
+
],
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/affinio/affinio/issues"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@affino/datagrid-core": "0.3.23"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "rm -rf dist && tsc -p tsconfig.public.json",
|
|
41
|
+
"type-check": "tsc -p tsconfig.json --noEmit"
|
|
42
|
+
}
|
|
43
|
+
}
|