recordbase 0.0.0-stage → 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 +18 -0
- package/dist/grid/GoogleGridProvider.d.ts +25 -0
- package/dist/grid/GoogleGridProvider.d.ts.map +1 -0
- package/dist/grid/GoogleGridProvider.js +265 -0
- package/dist/grid/GoogleGridProvider.js.map +1 -0
- package/dist/grid/GridAddress.d.ts +20 -0
- package/dist/grid/GridAddress.d.ts.map +1 -0
- package/dist/grid/GridAddress.js +53 -0
- package/dist/grid/GridAddress.js.map +1 -0
- package/dist/grid/GridBlock.d.ts +27 -0
- package/dist/grid/GridBlock.d.ts.map +1 -0
- package/dist/grid/GridBlock.js +92 -0
- package/dist/grid/GridBlock.js.map +1 -0
- package/dist/grid/GridProvider.d.ts +17 -0
- package/dist/grid/GridProvider.d.ts.map +1 -0
- package/dist/grid/GridProvider.js +4 -0
- package/dist/grid/GridProvider.js.map +1 -0
- package/dist/grid/GridRecordStore.d.ts +26 -0
- package/dist/grid/GridRecordStore.d.ts.map +1 -0
- package/dist/grid/GridRecordStore.js +241 -0
- package/dist/grid/GridRecordStore.js.map +1 -0
- package/dist/grid/index.d.ts +6 -0
- package/dist/grid/index.d.ts.map +1 -0
- package/dist/grid/index.js +22 -0
- package/dist/grid/index.js.map +1 -0
- package/dist/helpers/grid.d.ts +7 -0
- package/dist/helpers/grid.d.ts.map +1 -0
- package/dist/helpers/grid.js +10 -0
- package/dist/helpers/grid.js.map +1 -0
- package/dist/helpers/index.d.ts +11 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +58 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/record/RecordBook.d.ts +36 -0
- package/dist/record/RecordBook.d.ts.map +1 -0
- package/dist/record/RecordBook.js +253 -0
- package/dist/record/RecordBook.js.map +1 -0
- package/dist/record/RecordCache.d.ts +23 -0
- package/dist/record/RecordCache.d.ts.map +1 -0
- package/dist/record/RecordCache.js +29 -0
- package/dist/record/RecordCache.js.map +1 -0
- package/dist/record/RecordFields.d.ts +15 -0
- package/dist/record/RecordFields.d.ts.map +1 -0
- package/dist/record/RecordFields.js +80 -0
- package/dist/record/RecordFields.js.map +1 -0
- package/dist/record/RecordIssue.d.ts +12 -0
- package/dist/record/RecordIssue.d.ts.map +1 -0
- package/dist/record/RecordIssue.js +12 -0
- package/dist/record/RecordIssue.js.map +1 -0
- package/dist/record/RecordOperationBuilders.d.ts +56 -0
- package/dist/record/RecordOperationBuilders.d.ts.map +1 -0
- package/dist/record/RecordOperationBuilders.js +70 -0
- package/dist/record/RecordOperationBuilders.js.map +1 -0
- package/dist/record/RecordOperations.d.ts +47 -0
- package/dist/record/RecordOperations.d.ts.map +1 -0
- package/dist/record/RecordOperations.js +6 -0
- package/dist/record/RecordOperations.js.map +1 -0
- package/dist/record/RecordSchema.d.ts +49 -0
- package/dist/record/RecordSchema.d.ts.map +1 -0
- package/dist/record/RecordSchema.js +57 -0
- package/dist/record/RecordSchema.js.map +1 -0
- package/dist/record/RecordShapes.d.ts +27 -0
- package/dist/record/RecordShapes.d.ts.map +1 -0
- package/dist/record/RecordShapes.js +3 -0
- package/dist/record/RecordShapes.js.map +1 -0
- package/dist/record/RecordStore.d.ts +14 -0
- package/dist/record/RecordStore.d.ts.map +1 -0
- package/dist/record/RecordStore.js +3 -0
- package/dist/record/RecordStore.js.map +1 -0
- package/dist/record/RecordTable.d.ts +13 -0
- package/dist/record/RecordTable.d.ts.map +1 -0
- package/dist/record/RecordTable.js +16 -0
- package/dist/record/RecordTable.js.map +1 -0
- package/dist/record/index.d.ts +11 -0
- package/dist/record/index.d.ts.map +1 -0
- package/dist/record/index.js +27 -0
- package/dist/record/index.js.map +1 -0
- package/dist/util/Executor.d.ts +23 -0
- package/dist/util/Executor.d.ts.map +1 -0
- package/dist/util/Executor.js +44 -0
- package/dist/util/Executor.js.map +1 -0
- package/dist/util/Lazy.d.ts +10 -0
- package/dist/util/Lazy.d.ts.map +1 -0
- package/dist/util/Lazy.js +28 -0
- package/dist/util/Lazy.js.map +1 -0
- package/dist/util/Result.d.ts +19 -0
- package/dist/util/Result.d.ts.map +1 -0
- package/dist/util/Result.js +21 -0
- package/dist/util/Result.js.map +1 -0
- package/dist/util/functions.d.ts +5 -0
- package/dist/util/functions.d.ts.map +1 -0
- package/dist/util/functions.js +12 -0
- package/dist/util/functions.js.map +1 -0
- package/dist/util/index.d.ts +6 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +22 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/types.d.ts +8 -0
- package/dist/util/types.d.ts.map +1 -0
- package/dist/util/types.js +3 -0
- package/dist/util/types.js.map +1 -0
- package/package.json +46 -4
- package/README.md +0 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lemfraust
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
6
|
+
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
|
9
|
+
following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
12
|
+
portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
15
|
+
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
|
|
16
|
+
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
18
|
+
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { sheets_v4 } from "@googleapis/sheets";
|
|
2
|
+
import { ExecutorHandler, Resolvable } from "../util";
|
|
3
|
+
import { GridRange } from "./GridAddress";
|
|
4
|
+
import { GridReadBlock } from "./GridBlock";
|
|
5
|
+
import { GridProvider, GridWriteRequest, GridWriteResults } from "./GridProvider";
|
|
6
|
+
export type GoogleApi = sheets_v4.Sheets;
|
|
7
|
+
export type GoogleGridProviderOptions = {
|
|
8
|
+
id: string;
|
|
9
|
+
api: Resolvable<GoogleApi>;
|
|
10
|
+
handlers?: ExecutorHandler | GoogleGridProviderHandlerOptions;
|
|
11
|
+
};
|
|
12
|
+
export type GoogleGridProviderHandlerOptions = {
|
|
13
|
+
default?: ExecutorHandler;
|
|
14
|
+
read?: ExecutorHandler;
|
|
15
|
+
write?: ExecutorHandler;
|
|
16
|
+
info?: ExecutorHandler;
|
|
17
|
+
};
|
|
18
|
+
export declare class GoogleGridProvider implements GridProvider {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(options: GoogleGridProviderOptions);
|
|
21
|
+
read(ranges: readonly GridRange[]): Promise<GridReadBlock[]>;
|
|
22
|
+
write<const Requests extends readonly GridWriteRequest[]>(requests: Requests): Promise<GridWriteResults<Requests>>;
|
|
23
|
+
invalidate(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=GoogleGridProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleGridProvider.d.ts","sourceRoot":"","sources":["../../src/grid/GoogleGridProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAW,eAAe,EAAc,UAAU,EAAgB,MAAM,SAAS,CAAC;AACzF,OAAO,EAA+B,SAAS,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAa,aAAa,EAA6B,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlF,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;AAmFzC,MAAM,MAAM,yBAAyB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,eAAe,GAAG,gCAAgC,CAAC;CACjE,CAAC;AAGF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AA6FF,qBAAa,kBAAmB,YAAW,YAAY;;gBAQvC,OAAO,EAAE,yBAAyB;IAOxC,IAAI,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA4L5D,KAAK,CAAC,KAAK,CAAC,QAAQ,SAAS,SAAS,gBAAgB,EAAE,EAC1D,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAWtC,UAAU,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoogleGridProvider = void 0;
|
|
4
|
+
const util_1 = require("../util");
|
|
5
|
+
const GridAddress_1 = require("./GridAddress");
|
|
6
|
+
const GridBlock_1 = require("./GridBlock");
|
|
7
|
+
/* Google Helpers */
|
|
8
|
+
const encodeGridName = (name) => `'${name.replaceAll("'", "''")}'`;
|
|
9
|
+
const dateToSerialNumber = (date) => {
|
|
10
|
+
const epoch = new Date(1899, 11, 30);
|
|
11
|
+
return (date.getTime() - epoch.getTime()) / 86400000;
|
|
12
|
+
};
|
|
13
|
+
const toGoogleCellValue = (value) => {
|
|
14
|
+
if (typeof value === 'string')
|
|
15
|
+
return { stringValue: value };
|
|
16
|
+
else if (typeof value === 'number')
|
|
17
|
+
return { numberValue: value };
|
|
18
|
+
else if (typeof value === 'boolean')
|
|
19
|
+
return { boolValue: value };
|
|
20
|
+
else if (value instanceof Date)
|
|
21
|
+
return { numberValue: dateToSerialNumber(value) };
|
|
22
|
+
else if (value === null)
|
|
23
|
+
return { stringValue: '' };
|
|
24
|
+
else if (value === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
else
|
|
27
|
+
return { formulaValue: value.formula.startsWith('=') ? value.formula : `=${value.formula}` };
|
|
28
|
+
};
|
|
29
|
+
const toGoogleAppendValue = (value) => {
|
|
30
|
+
if (value == null)
|
|
31
|
+
return '';
|
|
32
|
+
if (value instanceof Date)
|
|
33
|
+
return dateToSerialNumber(value);
|
|
34
|
+
if (typeof value === 'string')
|
|
35
|
+
return value ? `'${value}` : '';
|
|
36
|
+
if (typeof value === 'object')
|
|
37
|
+
return value.formula.startsWith('=')
|
|
38
|
+
? value.formula
|
|
39
|
+
: `=${value.formula}`;
|
|
40
|
+
return value;
|
|
41
|
+
};
|
|
42
|
+
const toGoogleWriteRequest = (sheetIds, block) => {
|
|
43
|
+
const sheetId = sheetIds.get(block.grid);
|
|
44
|
+
if (sheetId === undefined)
|
|
45
|
+
throw new Error(`Unknown Google sheet "${block.grid}"`);
|
|
46
|
+
const rows = block.rows.map(row => ({
|
|
47
|
+
values: row.map(value => ({
|
|
48
|
+
userEnteredValue: toGoogleCellValue(value)
|
|
49
|
+
}))
|
|
50
|
+
}));
|
|
51
|
+
const fields = 'userEnteredValue';
|
|
52
|
+
return block.start === undefined
|
|
53
|
+
? { appendCells: { sheetId, rows, fields } }
|
|
54
|
+
: {
|
|
55
|
+
updateCells: {
|
|
56
|
+
start: {
|
|
57
|
+
sheetId,
|
|
58
|
+
rowIndex: block.start.row,
|
|
59
|
+
columnIndex: block.start.col
|
|
60
|
+
},
|
|
61
|
+
rows,
|
|
62
|
+
fields
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const noRetry = () => undefined;
|
|
67
|
+
const retry = (0, util_1.retryHandler)({ attempts: 3, wait: 1000 });
|
|
68
|
+
const defaultHandlers = {
|
|
69
|
+
read: retry,
|
|
70
|
+
write: noRetry,
|
|
71
|
+
info: retry
|
|
72
|
+
};
|
|
73
|
+
const resolveHandlers = (handlers) => {
|
|
74
|
+
if (typeof handlers === 'function')
|
|
75
|
+
return { read: handlers, write: handlers, info: handlers };
|
|
76
|
+
const resolve = (key) => handlers?.[key] ?? handlers?.default ?? defaultHandlers[key];
|
|
77
|
+
return { read: resolve('read'), write: resolve('write'), info: resolve('info') };
|
|
78
|
+
};
|
|
79
|
+
const planWrites = (requests) => {
|
|
80
|
+
const appends = new Map();
|
|
81
|
+
const updates = [];
|
|
82
|
+
requests.forEach((request, index) => {
|
|
83
|
+
const { block } = request;
|
|
84
|
+
if (block.start !== undefined) {
|
|
85
|
+
updates.push({
|
|
86
|
+
index,
|
|
87
|
+
request,
|
|
88
|
+
blocks: GridBlock_1.GridBlock.split(block)
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
let group = appends.get(block.grid);
|
|
93
|
+
if (!group) {
|
|
94
|
+
group = {
|
|
95
|
+
block: { grid: block.grid, start: undefined, rows: [] },
|
|
96
|
+
parts: []
|
|
97
|
+
};
|
|
98
|
+
appends.set(block.grid, group);
|
|
99
|
+
}
|
|
100
|
+
const offset = group.block.rows.length;
|
|
101
|
+
group.block.rows.push(...block.rows);
|
|
102
|
+
group.parts.push({
|
|
103
|
+
index,
|
|
104
|
+
request,
|
|
105
|
+
offset,
|
|
106
|
+
length: block.rows.length
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
return { appends, updates };
|
|
110
|
+
};
|
|
111
|
+
/* MAIN CLASS */
|
|
112
|
+
class GoogleGridProvider {
|
|
113
|
+
#id;
|
|
114
|
+
#api;
|
|
115
|
+
#handlers;
|
|
116
|
+
#sheetIds;
|
|
117
|
+
constructor(options) {
|
|
118
|
+
this.#id = options.id;
|
|
119
|
+
this.#api = (0, util_1.lazy)(options.api);
|
|
120
|
+
this.#handlers = resolveHandlers(options.handlers);
|
|
121
|
+
}
|
|
122
|
+
async read(ranges) {
|
|
123
|
+
if (!ranges.length)
|
|
124
|
+
return [];
|
|
125
|
+
// translate ranges into A1 notation
|
|
126
|
+
const a1Ranges = ranges.map(range => GridAddress_1.GridAddress.toA1(range, encodeGridName));
|
|
127
|
+
// execute batchGet
|
|
128
|
+
const api = await this.#api;
|
|
129
|
+
const response = await (0, util_1.execute)(() => api.spreadsheets.values.batchGet({
|
|
130
|
+
spreadsheetId: this.#id,
|
|
131
|
+
ranges: a1Ranges,
|
|
132
|
+
majorDimension: "ROWS",
|
|
133
|
+
valueRenderOption: "FORMATTED_VALUE"
|
|
134
|
+
}), this.#handlers.read);
|
|
135
|
+
// translate results into GridReadBlocks
|
|
136
|
+
const values = response.data.valueRanges ?? [];
|
|
137
|
+
return ranges.map((range, index) => ({
|
|
138
|
+
grid: range.grid,
|
|
139
|
+
start: range.from,
|
|
140
|
+
rows: (values[index]?.values ?? [])
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
// Write
|
|
144
|
+
async #loadSheetIds() {
|
|
145
|
+
const cache = this.#sheetIds ??= (0, util_1.lazy)(async () => {
|
|
146
|
+
const api = await this.#api;
|
|
147
|
+
const response = await (0, util_1.execute)(() => api.spreadsheets.get({
|
|
148
|
+
spreadsheetId: this.#id,
|
|
149
|
+
fields: "sheets(properties(sheetId,title))"
|
|
150
|
+
}), this.#handlers.info);
|
|
151
|
+
const ids = new Map();
|
|
152
|
+
for (const sheet of response.data.sheets ?? []) {
|
|
153
|
+
const properties = sheet.properties;
|
|
154
|
+
if (properties?.title != null && properties.sheetId != null)
|
|
155
|
+
ids.set(properties.title, properties.sheetId);
|
|
156
|
+
}
|
|
157
|
+
return ids;
|
|
158
|
+
});
|
|
159
|
+
return await cache;
|
|
160
|
+
}
|
|
161
|
+
async #writeBatch(blocks) {
|
|
162
|
+
if (!blocks.length)
|
|
163
|
+
return;
|
|
164
|
+
const api = await this.#api;
|
|
165
|
+
const sheetIds = await this.#loadSheetIds();
|
|
166
|
+
const requests = blocks.map(block => toGoogleWriteRequest(sheetIds, block));
|
|
167
|
+
await (0, util_1.execute)(() => api.spreadsheets.batchUpdate({
|
|
168
|
+
spreadsheetId: this.#id,
|
|
169
|
+
requestBody: { requests }
|
|
170
|
+
}), this.#handlers.write);
|
|
171
|
+
}
|
|
172
|
+
async #appendGroup(group) {
|
|
173
|
+
const api = await this.#api;
|
|
174
|
+
const { block } = group;
|
|
175
|
+
const response = await (0, util_1.execute)(() => api.spreadsheets.values.append({
|
|
176
|
+
spreadsheetId: this.#id,
|
|
177
|
+
range: encodeGridName(block.grid),
|
|
178
|
+
valueInputOption: 'USER_ENTERED',
|
|
179
|
+
insertDataOption: 'INSERT_ROWS',
|
|
180
|
+
requestBody: {
|
|
181
|
+
majorDimension: 'ROWS',
|
|
182
|
+
values: block.rows.map(row => row.map(toGoogleAppendValue))
|
|
183
|
+
}
|
|
184
|
+
}), this.#handlers.write);
|
|
185
|
+
const range = response.data.updates?.updatedRange;
|
|
186
|
+
if (!range)
|
|
187
|
+
throw new Error(`Google Sheets did not return an append range for "${block.grid}"`);
|
|
188
|
+
return GridAddress_1.GridAddress.fromA1(range).from;
|
|
189
|
+
}
|
|
190
|
+
async #executePlan(plan) {
|
|
191
|
+
const locations = new Map();
|
|
192
|
+
const blocks = plan.updates.flatMap(update => update.blocks);
|
|
193
|
+
const positioned = [];
|
|
194
|
+
// Updates already have known coordinates
|
|
195
|
+
for (const update of plan.updates) {
|
|
196
|
+
if (update.request.returns !== undefined)
|
|
197
|
+
locations.set(update.index, update.request.block.start);
|
|
198
|
+
}
|
|
199
|
+
// Separate append groups by whether coordinates are needed
|
|
200
|
+
for (const group of plan.appends.values()) {
|
|
201
|
+
if (group.parts.some(part => part.request.returns !== undefined))
|
|
202
|
+
positioned.push(group);
|
|
203
|
+
else
|
|
204
|
+
blocks.push(group.block);
|
|
205
|
+
}
|
|
206
|
+
// One batched write for updates and ordinary appends
|
|
207
|
+
await this.#writeBatch(blocks);
|
|
208
|
+
// Append groups requiring their actual positions
|
|
209
|
+
for (const group of positioned) {
|
|
210
|
+
const start = await this.#appendGroup(group);
|
|
211
|
+
for (const part of group.parts) {
|
|
212
|
+
if (part.request.returns !== undefined)
|
|
213
|
+
locations.set(part.index, {
|
|
214
|
+
col: start.col,
|
|
215
|
+
row: start.row + part.offset
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return locations;
|
|
220
|
+
}
|
|
221
|
+
async #resolveResults(requests, locations) {
|
|
222
|
+
const results = new Array(requests.length).fill(undefined);
|
|
223
|
+
const ranges = [];
|
|
224
|
+
const indices = [];
|
|
225
|
+
// 1. Resolve refs and collect requested data ranges
|
|
226
|
+
requests.forEach((request, index) => {
|
|
227
|
+
if (request.returns === undefined)
|
|
228
|
+
return;
|
|
229
|
+
const start = locations.get(index);
|
|
230
|
+
if (request.returns === 'ref') {
|
|
231
|
+
results[index] = start;
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const { block } = request;
|
|
235
|
+
const width = block.rows.reduce((max, row) => Math.max(max, row.length), 0);
|
|
236
|
+
ranges.push(GridAddress_1.GridAddress.range(block.grid, start.col, start.row, width, block.rows.length));
|
|
237
|
+
indices.push(index);
|
|
238
|
+
});
|
|
239
|
+
// 2. Fetch all requested data in one batch
|
|
240
|
+
if (ranges.length) {
|
|
241
|
+
const blocks = await this.read(ranges);
|
|
242
|
+
blocks.forEach((block, index) => {
|
|
243
|
+
const originalIndex = indices[index];
|
|
244
|
+
const length = requests[originalIndex].block.rows.length;
|
|
245
|
+
results[originalIndex] = {
|
|
246
|
+
...block,
|
|
247
|
+
rows: Array.from({ length }, (_, row) => block.rows[row] ?? [])
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return results;
|
|
252
|
+
}
|
|
253
|
+
async write(requests) {
|
|
254
|
+
if (!requests.length)
|
|
255
|
+
return [];
|
|
256
|
+
const plan = planWrites(requests);
|
|
257
|
+
const locations = await this.#executePlan(plan);
|
|
258
|
+
return await this.#resolveResults(requests, locations);
|
|
259
|
+
}
|
|
260
|
+
invalidate() {
|
|
261
|
+
this.#sheetIds = undefined;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
exports.GoogleGridProvider = GoogleGridProvider;
|
|
265
|
+
//# sourceMappingURL=GoogleGridProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleGridProvider.js","sourceRoot":"","sources":["../../src/grid/GoogleGridProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type GridCoordinate = {
|
|
2
|
+
col: number;
|
|
3
|
+
row: number;
|
|
4
|
+
};
|
|
5
|
+
export type GridOrigin = {
|
|
6
|
+
grid: string;
|
|
7
|
+
from: GridCoordinate;
|
|
8
|
+
};
|
|
9
|
+
export type GridRange = GridOrigin & {
|
|
10
|
+
to?: Partial<GridCoordinate>;
|
|
11
|
+
};
|
|
12
|
+
export declare const GridAddress: {
|
|
13
|
+
cell: (grid: string, col: number, row: number) => GridOrigin;
|
|
14
|
+
column: (grid: string, col: number, offset: number, height?: number) => GridRange;
|
|
15
|
+
row: (grid: string, row: number, offset: number, width?: number) => GridRange;
|
|
16
|
+
range: (grid: string, col: number, row: number, width?: number, height?: number) => GridRange;
|
|
17
|
+
toA1: (range: GridRange, encoder?: (name: string) => string) => string;
|
|
18
|
+
fromA1: (a1: string, decoder?: (name: string) => string) => GridRange;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=GridAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridAddress.d.ts","sourceRoot":"","sources":["../../src/grid/GridAddress.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;CAAE,CAAC;AAEjE,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAAE,CAAC;AA4BvE,eAAO,MAAM,WAAW;iBACP,MAAM,OAAO,MAAM,OAAO,MAAM,KAAG,UAAU;mBAE3C,MAAM,OAAO,MAAM,UAAU,MAAM,WAAW,MAAM,KAAG,SAAS;gBAGnE,MAAM,OAAO,MAAM,UAAU,MAAM,UAAU,MAAM,KAAG,SAAS;kBAG7D,MAAM,OAAO,MAAM,OAAO,MAAM,UAAU,MAAM,WAAW,MAAM,KAAG,SAAS;kBAG7E,SAAS,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KAAG,MAAM;iBAkBvD,MAAM,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KAAG,SAAS;CAkBtE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GridAddress = void 0;
|
|
4
|
+
const charCodeA = 'A'.charCodeAt(0);
|
|
5
|
+
const letterfy = (value) => {
|
|
6
|
+
let result = '';
|
|
7
|
+
while (value >= 0) {
|
|
8
|
+
const digit = String.fromCharCode(charCodeA + value % 26 | 0);
|
|
9
|
+
result = digit + result;
|
|
10
|
+
value = (value / 26 | 0) - 1;
|
|
11
|
+
}
|
|
12
|
+
return result;
|
|
13
|
+
};
|
|
14
|
+
const unletterfy = (value) => {
|
|
15
|
+
let result = 0;
|
|
16
|
+
for (let i = 0; i < value.length; i++)
|
|
17
|
+
result = (result * 26) + (value.toUpperCase().charCodeAt(i) - charCodeA + 1);
|
|
18
|
+
return result - 1;
|
|
19
|
+
};
|
|
20
|
+
// Grid!A1 | Grid!A1:B | Grid!A1:1 | Grid!A1:B1
|
|
21
|
+
const A1Regex = /^(?<grid>.+)!(?<fromCol>[A-Za-z]+)(?<fromRow>\d+)(?::(?:(?<toCol1>[A-Za-z]+)(?<toRow1>\d+)?|(?<toCol2>[A-Za-z]+)?(?<toRow2>\d+)))?$/;
|
|
22
|
+
exports.GridAddress = {
|
|
23
|
+
cell: (grid, col, row) => ({ grid, from: { col, row } }),
|
|
24
|
+
column: (grid, col, offset, height) => ({ grid, from: { col, row: offset }, to: { col, row: height ? offset + height - 1 : undefined } }),
|
|
25
|
+
row: (grid, row, offset, width) => ({ grid, from: { col: offset, row }, to: { col: width ? offset + width - 1 : undefined, row } }),
|
|
26
|
+
range: (grid, col, row, width, height) => ({ grid, from: { col, row }, to: { col: width ? col + width - 1 : undefined, row: height ? row + height - 1 : undefined } }),
|
|
27
|
+
toA1: (range, encoder) => {
|
|
28
|
+
const { from, to } = range;
|
|
29
|
+
let result = letterfy(from.col) + (from.row + 1);
|
|
30
|
+
if (to) {
|
|
31
|
+
const { col, row } = to;
|
|
32
|
+
const toResult = `${col !== undefined ? letterfy(col) : ''}${row !== undefined ? row + 1 : ''}`;
|
|
33
|
+
if (toResult && toResult !== result)
|
|
34
|
+
result += ':' + toResult;
|
|
35
|
+
}
|
|
36
|
+
const grid = encoder ? encoder(range.grid) : range.grid;
|
|
37
|
+
return `${grid}!${result}`;
|
|
38
|
+
},
|
|
39
|
+
fromA1: (a1, decoder) => {
|
|
40
|
+
const match = a1.match(A1Regex);
|
|
41
|
+
if (!match)
|
|
42
|
+
throw new Error('Invalid A1 range');
|
|
43
|
+
let { grid, fromCol, fromRow, toCol1, toRow1, toCol2, toRow2 } = match.groups;
|
|
44
|
+
if (decoder)
|
|
45
|
+
grid = decoder(grid);
|
|
46
|
+
const from = { col: unletterfy(fromCol), row: parseInt(fromRow) - 1 };
|
|
47
|
+
const toColumn = (toCol1 || toCol2) ? unletterfy(toCol1 || toCol2) : undefined;
|
|
48
|
+
const toRow = (toRow1 || toRow2) ? parseInt(toRow1 || toRow2) - 1 : undefined;
|
|
49
|
+
const to = (toColumn !== undefined || toRow !== undefined) ? { col: toColumn, row: toRow } : undefined;
|
|
50
|
+
return { grid, from, to };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=GridAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridAddress.js","sourceRoot":"","sources":["../../src/grid/GridAddress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { GridCoordinate } from "./GridAddress";
|
|
2
|
+
export type GridValue = string | number | boolean | Date | {
|
|
3
|
+
formula: string;
|
|
4
|
+
} | null | undefined;
|
|
5
|
+
export type GridBlock<T> = {
|
|
6
|
+
grid: string;
|
|
7
|
+
start: GridCoordinate | undefined;
|
|
8
|
+
rows: T[][];
|
|
9
|
+
};
|
|
10
|
+
export type GridReadBlock = GridBlock<string>;
|
|
11
|
+
export type GridWriteBlock = GridBlock<GridValue>;
|
|
12
|
+
declare function GridColumnBlock<T>(grid: string, values: T[]): GridBlock<T>;
|
|
13
|
+
declare function GridColumnBlock<T>(grid: string, start: GridCoordinate | undefined, values: T[]): GridBlock<T>;
|
|
14
|
+
declare function GridRowBlock<T>(grid: string, values: T[]): GridBlock<T>;
|
|
15
|
+
declare function GridRowBlock<T>(grid: string, start: GridCoordinate | undefined, values: T[]): GridBlock<T>;
|
|
16
|
+
declare function GridRangeBlock<T>(grid: string, values: T[][]): GridBlock<T>;
|
|
17
|
+
declare function GridRangeBlock<T>(grid: string, start: GridCoordinate | undefined, values: T[][]): GridBlock<T>;
|
|
18
|
+
declare function GridCellBlock<T>(grid: string, start: GridCoordinate, value: T): GridBlock<T>;
|
|
19
|
+
export declare const GridBlock: {
|
|
20
|
+
column: typeof GridColumnBlock;
|
|
21
|
+
row: typeof GridRowBlock;
|
|
22
|
+
range: typeof GridRangeBlock;
|
|
23
|
+
cell: typeof GridCellBlock;
|
|
24
|
+
split: <T>(raw: GridBlock<T>) => GridBlock<T>[];
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=GridBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridBlock.d.ts","sourceRoot":"","sources":["../../src/grid/GridBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAEnG,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;CAAE,CAAC;AAE7F,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAElD,iBAAS,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACrE,iBAAS,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AASxG,iBAAS,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAClE,iBAAS,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AASrG,iBAAS,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACtE,iBAAS,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AASzG,iBAAS,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAErF;AAmFD,eAAO,MAAM,SAAS;;;;;YAhFE,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAG,SAAS,CAAC,CAAC,CAAC,EAAE;CAsF5D,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GridBlock = void 0;
|
|
4
|
+
function GridColumnBlock(grid, startOrValues, values) {
|
|
5
|
+
if (Array.isArray(startOrValues)) {
|
|
6
|
+
values = startOrValues;
|
|
7
|
+
startOrValues = undefined;
|
|
8
|
+
}
|
|
9
|
+
return { grid, start: startOrValues, rows: values.map(value => [value]) };
|
|
10
|
+
}
|
|
11
|
+
function GridRowBlock(grid, startOrValues, values) {
|
|
12
|
+
if (Array.isArray(startOrValues)) {
|
|
13
|
+
values = startOrValues;
|
|
14
|
+
startOrValues = undefined;
|
|
15
|
+
}
|
|
16
|
+
return { grid, start: startOrValues, rows: [values] };
|
|
17
|
+
}
|
|
18
|
+
function GridRangeBlock(grid, startOrValues, values) {
|
|
19
|
+
if (Array.isArray(startOrValues)) {
|
|
20
|
+
values = startOrValues;
|
|
21
|
+
startOrValues = undefined;
|
|
22
|
+
}
|
|
23
|
+
return { grid, start: startOrValues, rows: values };
|
|
24
|
+
}
|
|
25
|
+
function GridCellBlock(grid, start, value) {
|
|
26
|
+
return { grid, start, rows: [[value]] };
|
|
27
|
+
}
|
|
28
|
+
const splitGridBlock = (raw) => {
|
|
29
|
+
if (!raw.start)
|
|
30
|
+
return [raw];
|
|
31
|
+
const rows = raw.rows.map(row => row.reduce((state, value) => {
|
|
32
|
+
const current = state[state.length - 1];
|
|
33
|
+
const isUndefined = value === undefined;
|
|
34
|
+
if (!current)
|
|
35
|
+
state = [{ length: 1, undefined: isUndefined }];
|
|
36
|
+
else if (current.undefined === isUndefined)
|
|
37
|
+
current.length++;
|
|
38
|
+
else
|
|
39
|
+
state.push({ length: 1, undefined: isUndefined });
|
|
40
|
+
return state;
|
|
41
|
+
}, []));
|
|
42
|
+
const blocks = rows.reduce((state, row) => {
|
|
43
|
+
// trim trailing undefined values
|
|
44
|
+
if (row.length >= 1 && row[row.length - 1].undefined)
|
|
45
|
+
row.pop();
|
|
46
|
+
const split = row.length !== 1;
|
|
47
|
+
const current = state[state.length - 1];
|
|
48
|
+
if (!current)
|
|
49
|
+
state = [{ rows: [row], split }];
|
|
50
|
+
else if (current.split || split)
|
|
51
|
+
state.push({ rows: [row], split });
|
|
52
|
+
else
|
|
53
|
+
current.rows.push(row);
|
|
54
|
+
return state;
|
|
55
|
+
}, []);
|
|
56
|
+
let rowIndex = 0;
|
|
57
|
+
return blocks.flatMap(block => {
|
|
58
|
+
if (!block.split) {
|
|
59
|
+
const result = {
|
|
60
|
+
grid: raw.grid,
|
|
61
|
+
start: { col: raw.start.col, row: raw.start.row + rowIndex },
|
|
62
|
+
rows: block.rows.map((row, index) => raw.rows[rowIndex + index].slice(0, row[0].length)),
|
|
63
|
+
};
|
|
64
|
+
rowIndex += block.rows.length;
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
let col = 0;
|
|
69
|
+
const results = [];
|
|
70
|
+
for (const segment of block.rows[0]) {
|
|
71
|
+
if (!segment.undefined) {
|
|
72
|
+
results.push({
|
|
73
|
+
grid: raw.grid,
|
|
74
|
+
start: { col: raw.start.col + col, row: raw.start.row + rowIndex },
|
|
75
|
+
rows: [raw.rows[rowIndex].slice(col, col + segment.length)],
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
col += segment.length;
|
|
79
|
+
}
|
|
80
|
+
rowIndex++;
|
|
81
|
+
return results;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
exports.GridBlock = {
|
|
86
|
+
column: GridColumnBlock,
|
|
87
|
+
row: GridRowBlock,
|
|
88
|
+
range: GridRangeBlock,
|
|
89
|
+
cell: GridCellBlock,
|
|
90
|
+
split: splitGridBlock,
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=GridBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridBlock.js","sourceRoot":"","sources":["../../src/grid/GridBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RecordReturn, RecordReturnData, RecordReturnRef } from "../record/RecordOperations";
|
|
2
|
+
import { GridCoordinate, GridRange } from "./GridAddress";
|
|
3
|
+
import { GridReadBlock, GridWriteBlock } from "./GridBlock";
|
|
4
|
+
export type GridWriteRequest<Returns extends RecordReturn = RecordReturn> = {
|
|
5
|
+
block: GridWriteBlock;
|
|
6
|
+
returns: Returns;
|
|
7
|
+
};
|
|
8
|
+
export type GridWriteResult<Returns extends RecordReturn> = Returns extends RecordReturnData ? GridReadBlock : Returns extends RecordReturnRef ? GridCoordinate : undefined;
|
|
9
|
+
export type GridWriteResults<Requests extends readonly GridWriteRequest[]> = {
|
|
10
|
+
[Index in keyof Requests]: Requests[Index] extends GridWriteRequest<infer Returns> ? GridWriteResult<Returns> : never;
|
|
11
|
+
};
|
|
12
|
+
export interface GridProvider {
|
|
13
|
+
read(ranges: readonly GridRange[]): Promise<GridReadBlock[]>;
|
|
14
|
+
write<const Requests extends readonly GridWriteRequest[]>(requests: Requests): Promise<GridWriteResults<Requests>>;
|
|
15
|
+
invalidate(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=GridProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridProvider.d.ts","sourceRoot":"","sources":["../../src/grid/GridProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,YAAY,GAAG,YAAY,IAAI;IACxE,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,YAAY,IACpD,OAAO,SAAS,gBAAgB,GAC1B,aAAa,GACb,OAAO,SAAS,eAAe,GAC3B,cAAc,GACd,SAAS,CAAC;AAExB,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,SAAS,gBAAgB,EAAE,IAAI;KACpE,KAAK,IAAI,MAAM,QAAQ,GACpB,QAAQ,CAAC,KAAK,CAAC,SAAS,gBAAgB,CAAC,MAAM,OAAO,CAAC,GACjD,eAAe,CAAC,OAAO,CAAC,GACxB,KAAK;CAClB,CAAC;AAGN,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE7D,KAAK,CAAC,KAAK,CAAC,QAAQ,SAAS,SAAS,gBAAgB,EAAE,EACnD,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1C,UAAU,IAAI,IAAI,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridProvider.js","sourceRoot":"","sources":["../../src/grid/GridProvider.ts"],"names":[],"mappings":";;AAgCC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RecordReadOperation, RecordReadResults, RecordWriteOperation, RecordWriteResults } from "../record/RecordOperations";
|
|
2
|
+
import { RecordSchema } from "../record/RecordSchema";
|
|
3
|
+
import { RecordStore } from "../record/RecordStore";
|
|
4
|
+
import { RecordTable } from "../record/RecordTable";
|
|
5
|
+
import { GridProvider } from "./GridProvider";
|
|
6
|
+
export type GridTableOptions = {
|
|
7
|
+
name: string;
|
|
8
|
+
offset: number;
|
|
9
|
+
};
|
|
10
|
+
export type GridTablesOf<Sources extends readonly GridTableSource<RecordTable>[]> = {
|
|
11
|
+
[Index in keyof Sources]: Sources[Index] extends RecordTable ? Sources[Index] : Sources[Index] extends readonly [infer Table extends RecordTable, unknown] ? Table : never;
|
|
12
|
+
};
|
|
13
|
+
export type GridTableSource<Table extends RecordTable<any, RecordSchema>> = Table | readonly [Table, Partial<GridTableOptions>];
|
|
14
|
+
type GridTableSources<Tables extends readonly RecordTable<any, RecordSchema>[]> = {
|
|
15
|
+
[Index in keyof Tables]: GridTableSource<Tables[Index]>;
|
|
16
|
+
};
|
|
17
|
+
export declare class GridRecordStore<const Tables extends readonly RecordTable<any, RecordSchema>[]> implements RecordStore<Tables> {
|
|
18
|
+
#private;
|
|
19
|
+
readonly tables: Tables;
|
|
20
|
+
constructor(provider: GridProvider, sources: GridTableSources<Tables>);
|
|
21
|
+
read<const Reads extends readonly RecordReadOperation<Tables[number]>[]>(reads: Reads): Promise<RecordReadResults<Reads>>;
|
|
22
|
+
write<const Writes extends readonly RecordWriteOperation<Tables[number]>[]>(writes: Writes): Promise<RecordWriteResults<Writes>>;
|
|
23
|
+
invalidate(): void;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=GridRecordStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridRecordStore.d.ts","sourceRoot":"","sources":["../../src/grid/GridRecordStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAgB,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC5I,OAAO,EAAiB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAuD,MAAM,uBAAuB,CAAC;AAIzG,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,SAAS,eAAe,CAAC,WAAW,CAAC,EAAE,IAAI;KAC/E,KAAK,IAAI,MAAM,OAAO,GACnB,OAAO,CAAC,KAAK,CAAC,SAAS,WAAW,GAC5B,OAAO,CAAC,KAAK,CAAC,GACd,OAAO,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,SAAS,WAAW,EAAE,OAAO,CAAC,GACtE,KAAK,GACL,KAAK;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,IAClE,KAAK,GACL,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAElD,KAAK,gBAAgB,CAAC,MAAM,SAAS,SAAS,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,IAAI;KAC7E,KAAK,IAAI,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CAC1D,CAAC;AA8BF,qBAAa,eAAe,CAAC,KAAK,CAAC,MAAM,SAAS,SAAS,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAE,YAAW,WAAW,CAAC,MAAM,CAAC;;IAEvH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAOZ,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAuF/D,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,SAAS,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EACxE,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IA8GjC,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,SAAS,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAC3E,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAqGzD,UAAU,IAAI,IAAI;CAGrB"}
|