@b2bc-devkit/sheetorm 1.1.0 → 1.2.3

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 (150) hide show
  1. package/package.json +171 -86
  2. package/readme.md +57 -17
  3. package/dist/npm/SheetOrm.d.ts +0 -41
  4. package/dist/npm/SheetOrm.d.ts.map +0 -1
  5. package/dist/npm/SheetOrm.js +0 -41
  6. package/dist/npm/SheetOrm.js.map +0 -1
  7. package/dist/npm/core/Decorators.d.ts +0 -145
  8. package/dist/npm/core/Decorators.d.ts.map +0 -1
  9. package/dist/npm/core/Decorators.js +0 -226
  10. package/dist/npm/core/Decorators.js.map +0 -1
  11. package/dist/npm/core/Record.d.ts +0 -178
  12. package/dist/npm/core/Record.d.ts.map +0 -1
  13. package/dist/npm/core/Record.js +0 -313
  14. package/dist/npm/core/Record.js.map +0 -1
  15. package/dist/npm/core/RecordConstructor.d.ts +0 -20
  16. package/dist/npm/core/RecordConstructor.d.ts.map +0 -1
  17. package/dist/npm/core/RecordConstructor.js +0 -2
  18. package/dist/npm/core/RecordConstructor.js.map +0 -1
  19. package/dist/npm/core/RecordStatic.d.ts +0 -23
  20. package/dist/npm/core/RecordStatic.d.ts.map +0 -1
  21. package/dist/npm/core/RecordStatic.js +0 -2
  22. package/dist/npm/core/RecordStatic.js.map +0 -1
  23. package/dist/npm/core/Registry.d.ts +0 -101
  24. package/dist/npm/core/Registry.d.ts.map +0 -1
  25. package/dist/npm/core/Registry.js +0 -226
  26. package/dist/npm/core/Registry.js.map +0 -1
  27. package/dist/npm/core/SheetRepository.d.ts +0 -331
  28. package/dist/npm/core/SheetRepository.d.ts.map +0 -1
  29. package/dist/npm/core/SheetRepository.js +0 -1041
  30. package/dist/npm/core/SheetRepository.js.map +0 -1
  31. package/dist/npm/core/cache/MemoryCache.d.ts +0 -67
  32. package/dist/npm/core/cache/MemoryCache.d.ts.map +0 -1
  33. package/dist/npm/core/cache/MemoryCache.js +0 -112
  34. package/dist/npm/core/cache/MemoryCache.js.map +0 -1
  35. package/dist/npm/core/types/Entity.d.ts +0 -21
  36. package/dist/npm/core/types/Entity.d.ts.map +0 -1
  37. package/dist/npm/core/types/Entity.js +0 -2
  38. package/dist/npm/core/types/Entity.js.map +0 -1
  39. package/dist/npm/core/types/FieldDefinition.d.ts +0 -21
  40. package/dist/npm/core/types/FieldDefinition.d.ts.map +0 -1
  41. package/dist/npm/core/types/FieldDefinition.js +0 -2
  42. package/dist/npm/core/types/FieldDefinition.js.map +0 -1
  43. package/dist/npm/core/types/FieldType.d.ts +0 -12
  44. package/dist/npm/core/types/FieldType.d.ts.map +0 -1
  45. package/dist/npm/core/types/FieldType.js +0 -2
  46. package/dist/npm/core/types/FieldType.js.map +0 -1
  47. package/dist/npm/core/types/Filter.d.ts +0 -16
  48. package/dist/npm/core/types/Filter.d.ts.map +0 -1
  49. package/dist/npm/core/types/Filter.js +0 -2
  50. package/dist/npm/core/types/Filter.js.map +0 -1
  51. package/dist/npm/core/types/FilterOperator.d.ts +0 -16
  52. package/dist/npm/core/types/FilterOperator.d.ts.map +0 -1
  53. package/dist/npm/core/types/FilterOperator.js +0 -2
  54. package/dist/npm/core/types/FilterOperator.js.map +0 -1
  55. package/dist/npm/core/types/GroupResult.d.ts +0 -14
  56. package/dist/npm/core/types/GroupResult.d.ts.map +0 -1
  57. package/dist/npm/core/types/GroupResult.js +0 -2
  58. package/dist/npm/core/types/GroupResult.js.map +0 -1
  59. package/dist/npm/core/types/ICacheProvider.d.ts +0 -20
  60. package/dist/npm/core/types/ICacheProvider.d.ts.map +0 -1
  61. package/dist/npm/core/types/ICacheProvider.js +0 -2
  62. package/dist/npm/core/types/ICacheProvider.js.map +0 -1
  63. package/dist/npm/core/types/ISheetAdapter.d.ts +0 -53
  64. package/dist/npm/core/types/ISheetAdapter.d.ts.map +0 -1
  65. package/dist/npm/core/types/ISheetAdapter.js +0 -2
  66. package/dist/npm/core/types/ISheetAdapter.js.map +0 -1
  67. package/dist/npm/core/types/ISpreadsheetAdapter.d.ts +0 -41
  68. package/dist/npm/core/types/ISpreadsheetAdapter.d.ts.map +0 -1
  69. package/dist/npm/core/types/ISpreadsheetAdapter.js +0 -2
  70. package/dist/npm/core/types/ISpreadsheetAdapter.js.map +0 -1
  71. package/dist/npm/core/types/IndexDefinition.d.ts +0 -16
  72. package/dist/npm/core/types/IndexDefinition.d.ts.map +0 -1
  73. package/dist/npm/core/types/IndexDefinition.js +0 -2
  74. package/dist/npm/core/types/IndexDefinition.js.map +0 -1
  75. package/dist/npm/core/types/LifecycleHooks.d.ts +0 -32
  76. package/dist/npm/core/types/LifecycleHooks.d.ts.map +0 -1
  77. package/dist/npm/core/types/LifecycleHooks.js +0 -2
  78. package/dist/npm/core/types/LifecycleHooks.js.map +0 -1
  79. package/dist/npm/core/types/PaginatedResult.d.ts +0 -18
  80. package/dist/npm/core/types/PaginatedResult.d.ts.map +0 -1
  81. package/dist/npm/core/types/PaginatedResult.js +0 -2
  82. package/dist/npm/core/types/PaginatedResult.js.map +0 -1
  83. package/dist/npm/core/types/QueryOptions.d.ts +0 -21
  84. package/dist/npm/core/types/QueryOptions.d.ts.map +0 -1
  85. package/dist/npm/core/types/QueryOptions.js +0 -2
  86. package/dist/npm/core/types/QueryOptions.js.map +0 -1
  87. package/dist/npm/core/types/SortClause.d.ts +0 -10
  88. package/dist/npm/core/types/SortClause.d.ts.map +0 -1
  89. package/dist/npm/core/types/SortClause.js +0 -2
  90. package/dist/npm/core/types/SortClause.js.map +0 -1
  91. package/dist/npm/core/types/SystemColumns.d.ts +0 -16
  92. package/dist/npm/core/types/SystemColumns.d.ts.map +0 -1
  93. package/dist/npm/core/types/SystemColumns.js +0 -16
  94. package/dist/npm/core/types/SystemColumns.js.map +0 -1
  95. package/dist/npm/core/types/TableSchema.d.ts +0 -24
  96. package/dist/npm/core/types/TableSchema.d.ts.map +0 -1
  97. package/dist/npm/core/types/TableSchema.js +0 -2
  98. package/dist/npm/core/types/TableSchema.js.map +0 -1
  99. package/dist/npm/index/IndexMeta.d.ts +0 -16
  100. package/dist/npm/index/IndexMeta.d.ts.map +0 -1
  101. package/dist/npm/index/IndexMeta.js +0 -2
  102. package/dist/npm/index/IndexMeta.js.map +0 -1
  103. package/dist/npm/index/IndexStore.d.ts +0 -397
  104. package/dist/npm/index/IndexStore.d.ts.map +0 -1
  105. package/dist/npm/index/IndexStore.js +0 -1102
  106. package/dist/npm/index/IndexStore.js.map +0 -1
  107. package/dist/npm/index.d.ts +0 -115
  108. package/dist/npm/index.d.ts.map +0 -1
  109. package/dist/npm/index.js +0 -367
  110. package/dist/npm/index.js.map +0 -1
  111. package/dist/npm/query/Query.d.ts +0 -176
  112. package/dist/npm/query/Query.d.ts.map +0 -1
  113. package/dist/npm/query/Query.js +0 -270
  114. package/dist/npm/query/Query.js.map +0 -1
  115. package/dist/npm/query/QueryEngine.d.ts +0 -140
  116. package/dist/npm/query/QueryEngine.d.ts.map +0 -1
  117. package/dist/npm/query/QueryEngine.js +0 -453
  118. package/dist/npm/query/QueryEngine.js.map +0 -1
  119. package/dist/npm/storage/GoogleSheetAdapter.d.ts +0 -119
  120. package/dist/npm/storage/GoogleSheetAdapter.d.ts.map +0 -1
  121. package/dist/npm/storage/GoogleSheetAdapter.js +0 -238
  122. package/dist/npm/storage/GoogleSheetAdapter.js.map +0 -1
  123. package/dist/npm/storage/GoogleSpreadsheetAdapter.d.ts +0 -65
  124. package/dist/npm/storage/GoogleSpreadsheetAdapter.d.ts.map +0 -1
  125. package/dist/npm/storage/GoogleSpreadsheetAdapter.js +0 -119
  126. package/dist/npm/storage/GoogleSpreadsheetAdapter.js.map +0 -1
  127. package/dist/npm/testing/ParityCatalog.d.ts +0 -38
  128. package/dist/npm/testing/ParityCatalog.d.ts.map +0 -1
  129. package/dist/npm/testing/ParityCatalog.js +0 -404
  130. package/dist/npm/testing/ParityCatalog.js.map +0 -1
  131. package/dist/npm/testing/RuntimeBenchmark.d.ts +0 -37
  132. package/dist/npm/testing/RuntimeBenchmark.d.ts.map +0 -1
  133. package/dist/npm/testing/RuntimeBenchmark.js +0 -449
  134. package/dist/npm/testing/RuntimeBenchmark.js.map +0 -1
  135. package/dist/npm/testing/RuntimeParity.d.ts +0 -62
  136. package/dist/npm/testing/RuntimeParity.d.ts.map +0 -1
  137. package/dist/npm/testing/RuntimeParity.js +0 -4126
  138. package/dist/npm/testing/RuntimeParity.js.map +0 -1
  139. package/dist/npm/utils/Serialization.d.ts +0 -111
  140. package/dist/npm/utils/Serialization.d.ts.map +0 -1
  141. package/dist/npm/utils/Serialization.js +0 -281
  142. package/dist/npm/utils/Serialization.js.map +0 -1
  143. package/dist/npm/utils/SheetOrmLogger.d.ts +0 -31
  144. package/dist/npm/utils/SheetOrmLogger.d.ts.map +0 -1
  145. package/dist/npm/utils/SheetOrmLogger.js +0 -42
  146. package/dist/npm/utils/SheetOrmLogger.js.map +0 -1
  147. package/dist/npm/utils/Uuid.d.ts +0 -29
  148. package/dist/npm/utils/Uuid.d.ts.map +0 -1
  149. package/dist/npm/utils/Uuid.js +0 -86
  150. package/dist/npm/utils/Uuid.js.map +0 -1
@@ -1,238 +0,0 @@
1
- /**
2
- * Google Apps Script adapter implementing the ISheetAdapter interface.
3
- *
4
- * Wraps a single GAS `Sheet` object (one tab in a Spreadsheet) and
5
- * translates 0-based data indexes used by the ORM into 1-based sheet
6
- * rows required by the GAS Range API. Row 1 is always the header row;
7
- * data rows start at row 2.
8
- *
9
- * All multi-cell reads/writes are performed with `getRange().getValues()`
10
- * / `setValues()` to minimise GAS API calls (each call adds ~300 ms of
11
- * latency in the Apps Script runtime).
12
- *
13
- * @module GoogleSheetAdapter
14
- */
15
- import { SheetOrmLogger } from "../utils/SheetOrmLogger.js";
16
- /**
17
- * Production implementation of {@link ISheetAdapter} for Google Apps Script.
18
- * Delegates every operation to the underlying `GoogleAppsScript.Spreadsheet.Sheet`.
19
- */
20
- export class GoogleSheetAdapter {
21
- /**
22
- * @param sheet - A GAS Sheet object obtained via Spreadsheet.getSheetByName()
23
- * or Spreadsheet.insertSheet().
24
- */
25
- constructor(sheet) {
26
- this.sheet = sheet;
27
- }
28
- /** Return the name of the underlying sheet tab. */
29
- getName() {
30
- return this.sheet.getName();
31
- }
32
- /**
33
- * Read the header row (row 1) and return the column names as strings.
34
- * Returns an empty array if the sheet has no columns.
35
- */
36
- getHeaders() {
37
- const lastCol = this.sheet.getLastColumn();
38
- if (lastCol === 0)
39
- return [];
40
- return this.sheet
41
- .getRange(1, 1, 1, lastCol)
42
- .getValues()[0]
43
- .map((v) => String(v));
44
- }
45
- /**
46
- * Overwrite the header row (row 1) with the given column names.
47
- * No-op if the headers array is empty.
48
- */
49
- setHeaders(headers) {
50
- if (headers.length === 0)
51
- return;
52
- this.sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
53
- }
54
- /**
55
- * Read all data rows (row 2+) as a 2D array.
56
- * Returns an empty array if the sheet has no data rows.
57
- */
58
- getAllData() {
59
- const lastRow = this.sheet.getLastRow();
60
- const lastCol = this.sheet.getLastColumn();
61
- // If there is only a header row (or nothing at all), return empty
62
- if (lastRow <= 1 || lastCol === 0) {
63
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] getAllData → 0 rows (empty)`);
64
- return [];
65
- }
66
- // Read from row 2 (first data row) to the last occupied row
67
- const result = this.sheet.getRange(2, 1, lastRow - 1, lastCol).getValues();
68
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] getAllData → ${result.length} rows × ${lastCol} cols`);
69
- return result;
70
- }
71
- /**
72
- * Return the number of data rows (excludes the header row).
73
- * Computed as `lastRow - 1`, where lastRow includes the header.
74
- */
75
- getRowCount() {
76
- const lastRow = this.sheet.getLastRow();
77
- const count = Math.max(0, lastRow - 1); // exclude header row
78
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] getRowCount → ${count}`);
79
- return count;
80
- }
81
- /** Append a single row after the last occupied row using GAS appendRow(). */
82
- appendRow(values) {
83
- this.sheet.appendRow(values);
84
- }
85
- /**
86
- * Append multiple rows in a single setValues() API call.
87
- * Much faster than calling appendRow() in a loop (~300 ms per call saved).
88
- */
89
- appendRows(rows) {
90
- if (rows.length === 0)
91
- return;
92
- // Start writing immediately below the last occupied row
93
- const startRow = this.sheet.getLastRow() + 1;
94
- const numCols = rows[0].length;
95
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] appendRows ${rows.length} rows × ${numCols} cols at sheetRow=${startRow}`);
96
- this.sheet.getRange(startRow, 1, rows.length, numCols).setValues(rows);
97
- }
98
- /**
99
- * Write rows starting at the given 0-based data index.
100
- * Overwrites existing cells — used for batch-update operations.
101
- *
102
- * @param startRowIndex - 0-based data index (sheet row = index + 2).
103
- * @param rows - 2D array of values.
104
- */
105
- writeRowsAt(startRowIndex, rows) {
106
- if (rows.length === 0)
107
- return;
108
- // Convert 0-based data index to 1-based sheet row (header is row 1)
109
- const sheetRow = startRowIndex + 2;
110
- const numCols = rows[0].length;
111
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] writeRowsAt dataIdx=${startRowIndex} sheetRow=${sheetRow} rows=${rows.length} cols=${numCols}`);
112
- this.sheet.getRange(sheetRow, 1, rows.length, numCols).setValues(rows);
113
- }
114
- /**
115
- * Overwrite a single data row.
116
- *
117
- * @param rowIndex - 0-based data index (sheet row = index + 2).
118
- * @param values - Column values.
119
- */
120
- updateRow(rowIndex, values) {
121
- const sheetRow = rowIndex + 2; // +2: 1-based + header offset
122
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] updateRow dataIdx=${rowIndex} sheetRow=${sheetRow}`);
123
- this.sheet.getRange(sheetRow, 1, 1, values.length).setValues([values]);
124
- }
125
- /**
126
- * Overwrite multiple rows, batching contiguous groups into single
127
- * setValues() calls to minimise GAS API round-trips.
128
- *
129
- * Example: updating rows 3, 4, 5, 10, 11 produces two setValues() calls
130
- * instead of five.
131
- */
132
- updateRows(updates) {
133
- if (updates.length === 0)
134
- return;
135
- // Sort by rowIndex so we can detect contiguous sequences
136
- const sorted = [...updates].sort((a, b) => a.rowIndex - b.rowIndex);
137
- // Accumulate contiguous groups and flush each as a single setValues()
138
- let groupStart = sorted[0].rowIndex;
139
- let groupRows = [sorted[0].values];
140
- let groupCount = 0;
141
- for (let i = 1; i < sorted.length; i++) {
142
- if (sorted[i].rowIndex === sorted[i - 1].rowIndex + 1) {
143
- // Contiguous — add to current group
144
- groupRows.push(sorted[i].values);
145
- }
146
- else {
147
- // Non-contiguous — flush the current group and start a new one
148
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] updateRows group#${groupCount} dataIdx=${groupStart} rows=${groupRows.length}`);
149
- this.sheet.getRange(groupStart + 2, 1, groupRows.length, groupRows[0].length).setValues(groupRows);
150
- groupStart = sorted[i].rowIndex;
151
- groupRows = [sorted[i].values];
152
- groupCount++;
153
- }
154
- }
155
- // Flush the final group
156
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] updateRows group#${groupCount} dataIdx=${groupStart} rows=${groupRows.length} (final); total updates=${updates.length}`);
157
- this.sheet.getRange(groupStart + 2, 1, groupRows.length, groupRows[0].length).setValues(groupRows);
158
- }
159
- /**
160
- * Delete a single data row. GAS deleteRow() shifts all rows below up by one.
161
- * @param rowIndex - 0-based data index.
162
- */
163
- deleteRow(rowIndex) {
164
- const sheetRow = rowIndex + 2;
165
- this.sheet.deleteRow(sheetRow);
166
- }
167
- /**
168
- * Delete multiple data rows by index.
169
- * Rows are deleted from bottom to top so that earlier indexes remain valid.
170
- */
171
- deleteRows(rowIndexes) {
172
- // Sort descending to avoid index shift issues
173
- const sorted = [...rowIndexes].sort((a, b) => b - a);
174
- for (const idx of sorted) {
175
- this.deleteRow(idx);
176
- }
177
- }
178
- /**
179
- * Read a single data row.
180
- * @param rowIndex - 0-based data index.
181
- * @returns Array of cell values.
182
- */
183
- getRow(rowIndex) {
184
- const sheetRow = rowIndex + 2;
185
- const lastCol = this.sheet.getLastColumn();
186
- if (lastCol === 0)
187
- return [];
188
- return this.sheet.getRange(sheetRow, 1, 1, lastCol).getValues()[0];
189
- }
190
- /**
191
- * Replace all data rows (row 2+) with the provided 2D array.
192
- *
193
- * If the new data has fewer rows than the old data, surplus old rows
194
- * are cleared. If the new data is narrower (fewer columns), surplus
195
- * columns in the written region are also cleared.
196
- */
197
- replaceAllData(rows) {
198
- const lastRow = this.sheet.getLastRow();
199
- const lastCol = this.sheet.getLastColumn();
200
- const oldDataRows = Math.max(0, lastRow - 1);
201
- const newCols = rows.length > 0 ? rows[0].length : 0;
202
- const clearCols = Math.max(lastCol, newCols);
203
- // Write the new data
204
- if (rows.length > 0) {
205
- this.sheet.getRange(2, 1, rows.length, newCols).setValues(rows);
206
- }
207
- // Clear surplus columns in written rows if new data is narrower
208
- if (rows.length > 0 && newCols < lastCol) {
209
- this.sheet.getRange(2, newCols + 1, rows.length, lastCol - newCols).clearContent();
210
- }
211
- // Clear surplus old rows below the new data
212
- if (oldDataRows > rows.length && clearCols > 0) {
213
- this.sheet.getRange(rows.length + 2, 1, oldDataRows - rows.length, clearCols).clearContent();
214
- }
215
- }
216
- /** Clear the entire sheet (headers + data). */
217
- clear() {
218
- this.sheet.clear();
219
- }
220
- /** Force-flush pending changes to the spreadsheet (calls SpreadsheetApp.flush()). */
221
- flush() {
222
- SpreadsheetApp.flush();
223
- }
224
- /**
225
- * Write the header row and all data rows in a single setValues() API call.
226
- * Row 1 = headers, row 2+ = data.
227
- *
228
- * Used for newly-created sheets to avoid a separate setHeaders() round-trip.
229
- */
230
- writeAllRowsWithHeaders(headers, rows) {
231
- const numCols = headers.length;
232
- // Combine headers and data into one contiguous 2D array
233
- const allRows = [headers, ...rows];
234
- SheetOrmLogger.log(`[Sheet:${this.sheet.getName()}] writeAllRowsWithHeaders ${rows.length} data rows + header (${allRows.length} total)`);
235
- this.sheet.getRange(1, 1, allRows.length, numCols).setValues(allRows);
236
- }
237
- }
238
- //# sourceMappingURL=GoogleSheetAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GoogleSheetAdapter.js","sourceRoot":"","sources":["../../../src/storage/GoogleSheetAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /**
2
- * Google Apps Script adapter implementing the ISpreadsheetAdapter interface.
3
- *
4
- * Wraps a GAS `Spreadsheet` object (the whole file) and provides
5
- * operations for creating, listing, and deleting individual sheet tabs.
6
- * Defaults to the active spreadsheet when no explicit Spreadsheet object
7
- * is supplied.
8
- *
9
- * @module GoogleSpreadsheetAdapter
10
- */
11
- import type { ISpreadsheetAdapter } from "../core/types/ISpreadsheetAdapter.js";
12
- import type { ISheetAdapter } from "../core/types/ISheetAdapter.js";
13
- /**
14
- * Production implementation of {@link ISpreadsheetAdapter} for Google Apps Script.
15
- * Each call that returns a sheet wraps it in a {@link GoogleSheetAdapter}.
16
- */
17
- export declare class GoogleSpreadsheetAdapter implements ISpreadsheetAdapter {
18
- /** The wrapped GAS Spreadsheet object. */
19
- private spreadsheet;
20
- /**
21
- * @param spreadsheet - Optional explicit Spreadsheet object.
22
- * Falls back to `SpreadsheetApp.getActiveSpreadsheet()`
23
- * when omitted (the common GAS use-case).
24
- */
25
- constructor(spreadsheet?: GoogleAppsScript.Spreadsheet.Spreadsheet);
26
- /**
27
- * Look up a sheet tab by name.
28
- * @returns A wrapped adapter, or `null` if no sheet with that name exists.
29
- */
30
- getSheetByName(name: string): ISheetAdapter | null;
31
- /**
32
- * Get or create a sheet tab. If a sheet with the given name already
33
- * exists it is reused (idempotent). Otherwise a new tab is inserted.
34
- */
35
- createSheet(name: string): ISheetAdapter;
36
- /**
37
- * Always insert a brand-new sheet tab (not idempotent).
38
- * GAS throws if a sheet with the same name already exists.
39
- */
40
- insertSheet(name: string): ISheetAdapter;
41
- /** Delete a sheet tab by name. No-op if the sheet does not exist. */
42
- deleteSheet(name: string): void;
43
- /** Return an array of all sheet tab names in the spreadsheet. */
44
- getSheetNames(): string[];
45
- /** Return a Map of sheet name → adapter for every tab in the spreadsheet. */
46
- getSheets(): Map<string, ISheetAdapter>;
47
- /**
48
- * Remove all sheets and leave a single empty "Sheet1" tab.
49
- *
50
- * GAS requires at least one sheet in a spreadsheet, so the first tab
51
- * is kept, cleared, and renamed to "Sheet1" while all others are deleted.
52
- */
53
- removeAllSheets(): void;
54
- /**
55
- * Protect a sheet tab and restrict editing to the given email addresses.
56
- *
57
- * Uses the GAS `Protection` API to add a sheet-level protection.
58
- * Existing editors (except the owner) are removed, and only the
59
- * specified `editors` are granted edit access.
60
- *
61
- * No-op if the sheet does not exist.
62
- */
63
- protectSheet(name: string, editors: string[]): void;
64
- }
65
- //# sourceMappingURL=GoogleSpreadsheetAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GoogleSpreadsheetAdapter.d.ts","sourceRoot":"","sources":["../../../src/storage/GoogleSpreadsheetAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAIpE;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,mBAAmB;IAClE,0CAA0C;IAC1C,OAAO,CAAC,WAAW,CAA2C;IAE9D;;;;OAIG;gBACS,WAAW,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,WAAW;IAIlE;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAMlD;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAWxC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAMxC,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ/B,iEAAiE;IACjE,aAAa,IAAI,MAAM,EAAE;IAIzB,6EAA6E;IAC7E,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAQvC;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IAcvB;;;;;;;;OAQG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;CAUpD"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Google Apps Script adapter implementing the ISpreadsheetAdapter interface.
3
- *
4
- * Wraps a GAS `Spreadsheet` object (the whole file) and provides
5
- * operations for creating, listing, and deleting individual sheet tabs.
6
- * Defaults to the active spreadsheet when no explicit Spreadsheet object
7
- * is supplied.
8
- *
9
- * @module GoogleSpreadsheetAdapter
10
- */
11
- import { GoogleSheetAdapter } from "./GoogleSheetAdapter.js";
12
- import { SheetOrmLogger } from "../utils/SheetOrmLogger.js";
13
- /**
14
- * Production implementation of {@link ISpreadsheetAdapter} for Google Apps Script.
15
- * Each call that returns a sheet wraps it in a {@link GoogleSheetAdapter}.
16
- */
17
- export class GoogleSpreadsheetAdapter {
18
- /**
19
- * @param spreadsheet - Optional explicit Spreadsheet object.
20
- * Falls back to `SpreadsheetApp.getActiveSpreadsheet()`
21
- * when omitted (the common GAS use-case).
22
- */
23
- constructor(spreadsheet) {
24
- this.spreadsheet = spreadsheet ?? SpreadsheetApp.getActiveSpreadsheet();
25
- }
26
- /**
27
- * Look up a sheet tab by name.
28
- * @returns A wrapped adapter, or `null` if no sheet with that name exists.
29
- */
30
- getSheetByName(name) {
31
- const sheet = this.spreadsheet.getSheetByName(name);
32
- SheetOrmLogger.log(`[Spreadsheet] getSheetByName("${name}") → ${sheet ? "found" : "null"}`);
33
- return sheet ? new GoogleSheetAdapter(sheet) : null;
34
- }
35
- /**
36
- * Get or create a sheet tab. If a sheet with the given name already
37
- * exists it is reused (idempotent). Otherwise a new tab is inserted.
38
- */
39
- createSheet(name) {
40
- const existing = this.spreadsheet.getSheetByName(name);
41
- if (existing) {
42
- SheetOrmLogger.log(`[Spreadsheet] createSheet("${name}") → reusing existing sheet`);
43
- return new GoogleSheetAdapter(existing);
44
- }
45
- SheetOrmLogger.log(`[Spreadsheet] createSheet("${name}") → inserting new sheet`);
46
- const sheet = this.spreadsheet.insertSheet(name);
47
- return new GoogleSheetAdapter(sheet);
48
- }
49
- /**
50
- * Always insert a brand-new sheet tab (not idempotent).
51
- * GAS throws if a sheet with the same name already exists.
52
- */
53
- insertSheet(name) {
54
- SheetOrmLogger.log(`[Spreadsheet] insertSheet("${name}")`);
55
- const sheet = this.spreadsheet.insertSheet(name);
56
- return new GoogleSheetAdapter(sheet);
57
- }
58
- /** Delete a sheet tab by name. No-op if the sheet does not exist. */
59
- deleteSheet(name) {
60
- const sheet = this.spreadsheet.getSheetByName(name);
61
- if (sheet) {
62
- SheetOrmLogger.log(`[Spreadsheet] deleteSheet("${name}")`);
63
- this.spreadsheet.deleteSheet(sheet);
64
- }
65
- }
66
- /** Return an array of all sheet tab names in the spreadsheet. */
67
- getSheetNames() {
68
- return this.spreadsheet.getSheets().map((s) => s.getName());
69
- }
70
- /** Return a Map of sheet name → adapter for every tab in the spreadsheet. */
71
- getSheets() {
72
- const map = new Map();
73
- for (const sheet of this.spreadsheet.getSheets()) {
74
- map.set(sheet.getName(), new GoogleSheetAdapter(sheet));
75
- }
76
- return map;
77
- }
78
- /**
79
- * Remove all sheets and leave a single empty "Sheet1" tab.
80
- *
81
- * GAS requires at least one sheet in a spreadsheet, so the first tab
82
- * is kept, cleared, and renamed to "Sheet1" while all others are deleted.
83
- */
84
- removeAllSheets() {
85
- const sheets = this.spreadsheet.getSheets();
86
- SheetOrmLogger.log(`[Spreadsheet] removeAllSheets() → deleting ${sheets.length} sheet(s)`);
87
- if (sheets.length === 0)
88
- return;
89
- // Keep the first sheet to satisfy the GAS one-sheet minimum requirement
90
- const keeper = sheets[0];
91
- for (let i = 1; i < sheets.length; i++) {
92
- this.spreadsheet.deleteSheet(sheets[i]);
93
- }
94
- // Clear all content and rename to default
95
- keeper.clear();
96
- keeper.setName("Sheet1");
97
- }
98
- /**
99
- * Protect a sheet tab and restrict editing to the given email addresses.
100
- *
101
- * Uses the GAS `Protection` API to add a sheet-level protection.
102
- * Existing editors (except the owner) are removed, and only the
103
- * specified `editors` are granted edit access.
104
- *
105
- * No-op if the sheet does not exist.
106
- */
107
- protectSheet(name, editors) {
108
- const sheet = this.spreadsheet.getSheetByName(name);
109
- if (!sheet)
110
- return;
111
- SheetOrmLogger.log(`[Spreadsheet] protectSheet("${name}") → editors: [${editors.join(", ")}]`);
112
- const protection = sheet.protect().setDescription("Protected by SheetORM");
113
- protection.removeEditors(protection.getEditors());
114
- if (editors.length > 0) {
115
- protection.addEditors(editors);
116
- }
117
- }
118
- }
119
- //# sourceMappingURL=GoogleSpreadsheetAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GoogleSpreadsheetAdapter.js","sourceRoot":"","sources":["../../../src/storage/GoogleSpreadsheetAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * @module ParityCatalog
3
- *
4
- * Canonical catalog of every Jest test case that must also have a
5
- * corresponding runtime handler in {@link RuntimeParity}.
6
- *
7
- * The catalog is the single source of truth for parity validation:
8
- * - `SUITES` lists each test file and its test names.
9
- * - `CASE_IDS` is a flat array of composite IDs (`"file::testName"`).
10
- * - `toCaseId()` builds a composite ID from file + test name.
11
- *
12
- * Both Jest tests (via `parity-validator.test.ts`) and GAS runtime
13
- * tests (via `RuntimeParity.validate()`) cross-check against this
14
- * catalog to detect drift.
15
- */
16
- /** Describes a single Jest test file and its ordered list of test names. */
17
- interface ParitySuite {
18
- file: string;
19
- tests: string[];
20
- }
21
- /** Build a composite parity case ID from a test file name and test name. */
22
- declare function toParityCaseId(file: string, testName: string): string;
23
- /**
24
- * Public API for accessing the parity test catalog.
25
- *
26
- * Used by `parity-validator.test.ts` (Jest) and `RuntimeParity.validate()` (GAS)
27
- * to ensure that both environments define the same set of test cases.
28
- */
29
- export declare class ParityCatalog {
30
- /** All suite definitions with test names. */
31
- static readonly SUITES: ParitySuite[];
32
- /** Flat array of composite case IDs. */
33
- static readonly CASE_IDS: string[];
34
- /** Utility to build a composite case ID. */
35
- static toCaseId: typeof toParityCaseId;
36
- }
37
- export {};
38
- //# sourceMappingURL=ParityCatalog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParityCatalog.d.ts","sourceRoot":"","sources":["../../../src/testing/ParityCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4EAA4E;AAC5E,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAmXD,4EAA4E;AAC5E,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAOD;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,6CAA6C;IAC7C,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAiB;IACvC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAAmB;IAC3C,4CAA4C;IAC5C,MAAM,CAAC,QAAQ,wBAAkB;CAClC"}