recordbase 0.0.0-stage → 0.1.1

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.
Files changed (107) hide show
  1. package/LICENSE +18 -0
  2. package/dist/grid/GoogleGridProvider.d.ts +25 -0
  3. package/dist/grid/GoogleGridProvider.d.ts.map +1 -0
  4. package/dist/grid/GoogleGridProvider.js +268 -0
  5. package/dist/grid/GoogleGridProvider.js.map +1 -0
  6. package/dist/grid/GridAddress.d.ts +20 -0
  7. package/dist/grid/GridAddress.d.ts.map +1 -0
  8. package/dist/grid/GridAddress.js +53 -0
  9. package/dist/grid/GridAddress.js.map +1 -0
  10. package/dist/grid/GridBlock.d.ts +27 -0
  11. package/dist/grid/GridBlock.d.ts.map +1 -0
  12. package/dist/grid/GridBlock.js +92 -0
  13. package/dist/grid/GridBlock.js.map +1 -0
  14. package/dist/grid/GridProvider.d.ts +17 -0
  15. package/dist/grid/GridProvider.d.ts.map +1 -0
  16. package/dist/grid/GridProvider.js +4 -0
  17. package/dist/grid/GridProvider.js.map +1 -0
  18. package/dist/grid/GridRecordStore.d.ts +26 -0
  19. package/dist/grid/GridRecordStore.d.ts.map +1 -0
  20. package/dist/grid/GridRecordStore.js +241 -0
  21. package/dist/grid/GridRecordStore.js.map +1 -0
  22. package/dist/grid/index.d.ts +6 -0
  23. package/dist/grid/index.d.ts.map +1 -0
  24. package/dist/grid/index.js +22 -0
  25. package/dist/grid/index.js.map +1 -0
  26. package/dist/helpers/grid.d.ts +7 -0
  27. package/dist/helpers/grid.d.ts.map +1 -0
  28. package/dist/helpers/grid.js +10 -0
  29. package/dist/helpers/grid.js.map +1 -0
  30. package/dist/helpers/index.d.ts +11 -0
  31. package/dist/helpers/index.d.ts.map +1 -0
  32. package/dist/helpers/index.js +58 -0
  33. package/dist/helpers/index.js.map +1 -0
  34. package/dist/index.d.ts +5 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +44 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/record/RecordBook.d.ts +36 -0
  39. package/dist/record/RecordBook.d.ts.map +1 -0
  40. package/dist/record/RecordBook.js +253 -0
  41. package/dist/record/RecordBook.js.map +1 -0
  42. package/dist/record/RecordCache.d.ts +23 -0
  43. package/dist/record/RecordCache.d.ts.map +1 -0
  44. package/dist/record/RecordCache.js +29 -0
  45. package/dist/record/RecordCache.js.map +1 -0
  46. package/dist/record/RecordFields.d.ts +15 -0
  47. package/dist/record/RecordFields.d.ts.map +1 -0
  48. package/dist/record/RecordFields.js +80 -0
  49. package/dist/record/RecordFields.js.map +1 -0
  50. package/dist/record/RecordIssue.d.ts +12 -0
  51. package/dist/record/RecordIssue.d.ts.map +1 -0
  52. package/dist/record/RecordIssue.js +12 -0
  53. package/dist/record/RecordIssue.js.map +1 -0
  54. package/dist/record/RecordOperationBuilders.d.ts +56 -0
  55. package/dist/record/RecordOperationBuilders.d.ts.map +1 -0
  56. package/dist/record/RecordOperationBuilders.js +70 -0
  57. package/dist/record/RecordOperationBuilders.js.map +1 -0
  58. package/dist/record/RecordOperations.d.ts +47 -0
  59. package/dist/record/RecordOperations.d.ts.map +1 -0
  60. package/dist/record/RecordOperations.js +6 -0
  61. package/dist/record/RecordOperations.js.map +1 -0
  62. package/dist/record/RecordSchema.d.ts +49 -0
  63. package/dist/record/RecordSchema.d.ts.map +1 -0
  64. package/dist/record/RecordSchema.js +57 -0
  65. package/dist/record/RecordSchema.js.map +1 -0
  66. package/dist/record/RecordShapes.d.ts +27 -0
  67. package/dist/record/RecordShapes.d.ts.map +1 -0
  68. package/dist/record/RecordShapes.js +3 -0
  69. package/dist/record/RecordShapes.js.map +1 -0
  70. package/dist/record/RecordStore.d.ts +14 -0
  71. package/dist/record/RecordStore.d.ts.map +1 -0
  72. package/dist/record/RecordStore.js +3 -0
  73. package/dist/record/RecordStore.js.map +1 -0
  74. package/dist/record/RecordTable.d.ts +13 -0
  75. package/dist/record/RecordTable.d.ts.map +1 -0
  76. package/dist/record/RecordTable.js +16 -0
  77. package/dist/record/RecordTable.js.map +1 -0
  78. package/dist/record/index.d.ts +11 -0
  79. package/dist/record/index.d.ts.map +1 -0
  80. package/dist/record/index.js +27 -0
  81. package/dist/record/index.js.map +1 -0
  82. package/dist/util/Executor.d.ts +23 -0
  83. package/dist/util/Executor.d.ts.map +1 -0
  84. package/dist/util/Executor.js +44 -0
  85. package/dist/util/Executor.js.map +1 -0
  86. package/dist/util/Lazy.d.ts +10 -0
  87. package/dist/util/Lazy.d.ts.map +1 -0
  88. package/dist/util/Lazy.js +28 -0
  89. package/dist/util/Lazy.js.map +1 -0
  90. package/dist/util/Result.d.ts +19 -0
  91. package/dist/util/Result.d.ts.map +1 -0
  92. package/dist/util/Result.js +21 -0
  93. package/dist/util/Result.js.map +1 -0
  94. package/dist/util/functions.d.ts +5 -0
  95. package/dist/util/functions.d.ts.map +1 -0
  96. package/dist/util/functions.js +12 -0
  97. package/dist/util/functions.js.map +1 -0
  98. package/dist/util/index.d.ts +6 -0
  99. package/dist/util/index.d.ts.map +1 -0
  100. package/dist/util/index.js +22 -0
  101. package/dist/util/index.js.map +1 -0
  102. package/dist/util/types.d.ts +8 -0
  103. package/dist/util/types.d.ts.map +1 -0
  104. package/dist/util/types.js +3 -0
  105. package/dist/util/types.js.map +1 -0
  106. package/package.json +46 -4
  107. 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;AAuFzC,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,268 @@
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 === undefined)
31
+ return null;
32
+ else if (value === null)
33
+ return '';
34
+ else if (value instanceof Date)
35
+ return dateToSerialNumber(value);
36
+ else if (typeof value === 'string')
37
+ return value ? `'${value}` : '';
38
+ else if (typeof value === 'object')
39
+ return value.formula.startsWith('=')
40
+ ? value.formula
41
+ : `=${value.formula}`;
42
+ else
43
+ return value;
44
+ };
45
+ const toGoogleWriteRequest = (sheetIds, block) => {
46
+ const sheetId = sheetIds.get(block.grid);
47
+ if (sheetId === undefined)
48
+ throw new Error(`Unknown Google sheet "${block.grid}"`);
49
+ const rows = block.rows.map(row => ({
50
+ values: row.map(value => ({
51
+ userEnteredValue: toGoogleCellValue(value)
52
+ }))
53
+ }));
54
+ const fields = 'userEnteredValue';
55
+ return block.start === undefined
56
+ ? { appendCells: { sheetId, rows, fields } }
57
+ : {
58
+ updateCells: {
59
+ start: {
60
+ sheetId,
61
+ rowIndex: block.start.row,
62
+ columnIndex: block.start.col
63
+ },
64
+ rows,
65
+ fields
66
+ }
67
+ };
68
+ };
69
+ const noRetry = () => undefined;
70
+ const retry = (0, util_1.retryHandler)({ attempts: 3, wait: 1000 });
71
+ const defaultHandlers = {
72
+ read: retry,
73
+ write: noRetry,
74
+ info: retry
75
+ };
76
+ const resolveHandlers = (handlers) => {
77
+ if (typeof handlers === 'function')
78
+ return { read: handlers, write: handlers, info: handlers };
79
+ const resolve = (key) => handlers?.[key] ?? handlers?.default ?? defaultHandlers[key];
80
+ return { read: resolve('read'), write: resolve('write'), info: resolve('info') };
81
+ };
82
+ const planWrites = (requests) => {
83
+ const appends = new Map();
84
+ const updates = [];
85
+ requests.forEach((request, index) => {
86
+ const { block } = request;
87
+ if (block.start !== undefined) {
88
+ updates.push({
89
+ index,
90
+ request,
91
+ blocks: GridBlock_1.GridBlock.split(block)
92
+ });
93
+ return;
94
+ }
95
+ let group = appends.get(block.grid);
96
+ if (!group) {
97
+ group = {
98
+ block: { grid: block.grid, start: undefined, rows: [] },
99
+ parts: []
100
+ };
101
+ appends.set(block.grid, group);
102
+ }
103
+ const offset = group.block.rows.length;
104
+ group.block.rows.push(...block.rows);
105
+ group.parts.push({
106
+ index,
107
+ request,
108
+ offset,
109
+ length: block.rows.length
110
+ });
111
+ });
112
+ return { appends, updates };
113
+ };
114
+ /* MAIN CLASS */
115
+ class GoogleGridProvider {
116
+ #id;
117
+ #api;
118
+ #handlers;
119
+ #sheetIds;
120
+ constructor(options) {
121
+ this.#id = options.id;
122
+ this.#api = (0, util_1.lazy)(options.api);
123
+ this.#handlers = resolveHandlers(options.handlers);
124
+ }
125
+ async read(ranges) {
126
+ if (!ranges.length)
127
+ return [];
128
+ // translate ranges into A1 notation
129
+ const a1Ranges = ranges.map(range => GridAddress_1.GridAddress.toA1(range, encodeGridName));
130
+ // execute batchGet
131
+ const api = await this.#api;
132
+ const response = await (0, util_1.execute)(() => api.spreadsheets.values.batchGet({
133
+ spreadsheetId: this.#id,
134
+ ranges: a1Ranges,
135
+ majorDimension: "ROWS",
136
+ valueRenderOption: "FORMATTED_VALUE"
137
+ }), this.#handlers.read);
138
+ // translate results into GridReadBlocks
139
+ const values = response.data.valueRanges ?? [];
140
+ return ranges.map((range, index) => ({
141
+ grid: range.grid,
142
+ start: range.from,
143
+ rows: (values[index]?.values ?? [])
144
+ }));
145
+ }
146
+ // Write
147
+ async #loadSheetIds() {
148
+ const cache = this.#sheetIds ??= (0, util_1.lazy)(async () => {
149
+ const api = await this.#api;
150
+ const response = await (0, util_1.execute)(() => api.spreadsheets.get({
151
+ spreadsheetId: this.#id,
152
+ fields: "sheets(properties(sheetId,title))"
153
+ }), this.#handlers.info);
154
+ const ids = new Map();
155
+ for (const sheet of response.data.sheets ?? []) {
156
+ const properties = sheet.properties;
157
+ if (properties?.title != null && properties.sheetId != null)
158
+ ids.set(properties.title, properties.sheetId);
159
+ }
160
+ return ids;
161
+ });
162
+ return await cache;
163
+ }
164
+ async #writeBatch(blocks) {
165
+ if (!blocks.length)
166
+ return;
167
+ const api = await this.#api;
168
+ const sheetIds = await this.#loadSheetIds();
169
+ const requests = blocks.map(block => toGoogleWriteRequest(sheetIds, block));
170
+ await (0, util_1.execute)(() => api.spreadsheets.batchUpdate({
171
+ spreadsheetId: this.#id,
172
+ requestBody: { requests }
173
+ }), this.#handlers.write);
174
+ }
175
+ async #appendGroup(group) {
176
+ const api = await this.#api;
177
+ const { block } = group;
178
+ const response = await (0, util_1.execute)(() => api.spreadsheets.values.append({
179
+ spreadsheetId: this.#id,
180
+ range: encodeGridName(block.grid),
181
+ valueInputOption: 'USER_ENTERED',
182
+ insertDataOption: 'INSERT_ROWS',
183
+ requestBody: {
184
+ majorDimension: 'ROWS',
185
+ values: block.rows.map(row => row.map(toGoogleAppendValue))
186
+ }
187
+ }), this.#handlers.write);
188
+ const range = response.data.updates?.updatedRange;
189
+ if (!range)
190
+ throw new Error(`Google Sheets did not return an append range for "${block.grid}"`);
191
+ return GridAddress_1.GridAddress.fromA1(range).from;
192
+ }
193
+ async #executePlan(plan) {
194
+ const locations = new Map();
195
+ const blocks = plan.updates.flatMap(update => update.blocks);
196
+ const positioned = [];
197
+ // Updates already have known coordinates
198
+ for (const update of plan.updates) {
199
+ if (update.request.returns !== undefined)
200
+ locations.set(update.index, update.request.block.start);
201
+ }
202
+ // Separate append groups by whether coordinates are needed
203
+ for (const group of plan.appends.values()) {
204
+ if (group.parts.some(part => part.request.returns !== undefined))
205
+ positioned.push(group);
206
+ else
207
+ blocks.push(group.block);
208
+ }
209
+ // One batched write for updates and ordinary appends
210
+ await this.#writeBatch(blocks);
211
+ // Append groups requiring their actual positions
212
+ for (const group of positioned) {
213
+ const start = await this.#appendGroup(group);
214
+ for (const part of group.parts) {
215
+ if (part.request.returns !== undefined)
216
+ locations.set(part.index, {
217
+ col: start.col,
218
+ row: start.row + part.offset
219
+ });
220
+ }
221
+ }
222
+ return locations;
223
+ }
224
+ async #resolveResults(requests, locations) {
225
+ const results = new Array(requests.length).fill(undefined);
226
+ const ranges = [];
227
+ const indices = [];
228
+ // 1. Resolve refs and collect requested data ranges
229
+ requests.forEach((request, index) => {
230
+ if (request.returns === undefined)
231
+ return;
232
+ const start = locations.get(index);
233
+ if (request.returns === 'ref') {
234
+ results[index] = start;
235
+ return;
236
+ }
237
+ const { block } = request;
238
+ const width = block.rows.reduce((max, row) => Math.max(max, row.length), 0);
239
+ ranges.push(GridAddress_1.GridAddress.range(block.grid, start.col, start.row, width, block.rows.length));
240
+ indices.push(index);
241
+ });
242
+ // 2. Fetch all requested data in one batch
243
+ if (ranges.length) {
244
+ const blocks = await this.read(ranges);
245
+ blocks.forEach((block, index) => {
246
+ const originalIndex = indices[index];
247
+ const length = requests[originalIndex].block.rows.length;
248
+ results[originalIndex] = {
249
+ ...block,
250
+ rows: Array.from({ length }, (_, row) => block.rows[row] ?? [])
251
+ };
252
+ });
253
+ }
254
+ return results;
255
+ }
256
+ async write(requests) {
257
+ if (!requests.length)
258
+ return [];
259
+ const plan = planWrites(requests);
260
+ const locations = await this.#executePlan(plan);
261
+ return await this.#resolveResults(requests, locations);
262
+ }
263
+ invalidate() {
264
+ this.#sheetIds = undefined;
265
+ }
266
+ }
267
+ exports.GoogleGridProvider = GoogleGridProvider;
268
+ //# 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,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ ;
4
+ //# sourceMappingURL=GridProvider.js.map
@@ -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"}