@b2bc-devkit/sheetorm 1.0.2 → 1.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/dist/npm/core/Record.d.ts +11 -0
- package/dist/npm/core/Record.d.ts.map +1 -1
- package/dist/npm/core/Record.js +15 -0
- package/dist/npm/core/Record.js.map +1 -1
- package/dist/npm/core/RecordStatic.d.ts +4 -0
- package/dist/npm/core/RecordStatic.d.ts.map +1 -1
- package/dist/npm/core/Registry.d.ts +1 -0
- package/dist/npm/core/Registry.d.ts.map +1 -1
- package/dist/npm/core/Registry.js +28 -7
- package/dist/npm/core/Registry.js.map +1 -1
- package/dist/npm/core/types/ISpreadsheetAdapter.d.ts +8 -0
- package/dist/npm/core/types/ISpreadsheetAdapter.d.ts.map +1 -1
- package/dist/npm/storage/GoogleSpreadsheetAdapter.d.ts +10 -0
- package/dist/npm/storage/GoogleSpreadsheetAdapter.d.ts.map +1 -1
- package/dist/npm/storage/GoogleSpreadsheetAdapter.js +20 -0
- package/dist/npm/storage/GoogleSpreadsheetAdapter.js.map +1 -1
- package/dist/npm/testing/ParityCatalog.d.ts.map +1 -1
- package/dist/npm/testing/ParityCatalog.js +4 -0
- package/dist/npm/testing/ParityCatalog.js.map +1 -1
- package/dist/npm/testing/RuntimeParity.d.ts.map +1 -1
- package/dist/npm/testing/RuntimeParity.js +96 -0
- package/dist/npm/testing/RuntimeParity.js.map +1 -1
- package/package.json +4 -4
- package/{README.md → readme.md} +39 -2
|
@@ -54,6 +54,17 @@ export declare class Record implements Entity {
|
|
|
54
54
|
* e.g. class `Car` → `"idx_Cars"`.
|
|
55
55
|
*/
|
|
56
56
|
static get indexTableName(): string;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the auto-created sheet should be protected.
|
|
59
|
+
* Override in a subclass to return `true` and enable sheet protection.
|
|
60
|
+
*/
|
|
61
|
+
static isProtected(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Email addresses of editors allowed to edit the protected sheet.
|
|
64
|
+
* Only used when `isProtected()` returns `true`.
|
|
65
|
+
* Override in a subclass to specify allowed editors.
|
|
66
|
+
*/
|
|
67
|
+
static protectedFor(): string[];
|
|
57
68
|
/**
|
|
58
69
|
* Create an in-memory instance pre-populated with the given data.
|
|
59
70
|
* The instance is **not** persisted until `save()` is called.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Record.d.ts","sourceRoot":"","sources":["../../../src/core/Record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA0ChE;;;;;;;GAOG;AACH,qBAAa,MAAO,YAAW,MAAM;IACnC,8DAA8D;IACtD,IAAI,EAAE,MAAM,CAAC;IACrB,qEAAqE;IAC7D,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,4EAA4E;IACpE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,+DAA+D;IAC/D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvB;;;OAGG;IACH,MAAM,KAAK,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,MAAM,KAAK,cAAc,IAAI,MAAM,CAElC;
|
|
1
|
+
{"version":3,"file":"Record.d.ts","sourceRoot":"","sources":["../../../src/core/Record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA0ChE;;;;;;;GAOG;AACH,qBAAa,MAAO,YAAW,MAAM;IACnC,8DAA8D;IACtD,IAAI,EAAE,MAAM,CAAC;IACrB,qEAAqE;IAC7D,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,4EAA4E;IACpE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,+DAA+D;IAC/D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvB;;;OAGG;IACH,MAAM,KAAK,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,MAAM,KAAK,cAAc,IAAI,MAAM,CAElC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,IAAI,OAAO;IAI7B;;;;OAIG;IACH,MAAM,CAAC,YAAY,IAAI,MAAM,EAAE;IAM/B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,CAAC;IAOhG;;;;;;;;;OASG;IACH,IAAI,IAAI,IAAI;IAsBZ;;;OAGG;IACH,MAAM,IAAI,OAAO;IAOjB;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKxC;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3B;;;;;;OAMG;IACH,MAAM,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAiBpC;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAC3B,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,OAAO,GACb,KAAK,CAAC,CAAC,CAAC;IAKX;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAOnF;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE;IAKtF;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,GAAG,IAAI;IAO9F,yDAAyD;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAK5C;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAKhD;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAKpE;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAC5B,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,GACrB,eAAe,CAAC,CAAC,CAAC;IASrB;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,EAC7B,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,GACrB,WAAW,CAAC,CAAC,CAAC,EAAE;IASnB;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,EAC7B,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,GACvC,CAAC,EAAE;CAKP"}
|
package/dist/npm/core/Record.js
CHANGED
|
@@ -73,6 +73,21 @@ export class Record {
|
|
|
73
73
|
static get indexTableName() {
|
|
74
74
|
return "idx_" + this.name + "s";
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Whether the auto-created sheet should be protected.
|
|
78
|
+
* Override in a subclass to return `true` and enable sheet protection.
|
|
79
|
+
*/
|
|
80
|
+
static isProtected() {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Email addresses of editors allowed to edit the protected sheet.
|
|
85
|
+
* Only used when `isProtected()` returns `true`.
|
|
86
|
+
* Override in a subclass to specify allowed editors.
|
|
87
|
+
*/
|
|
88
|
+
static protectedFor() {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
76
91
|
// ─── Static Factory ──────────────────────────────
|
|
77
92
|
/**
|
|
78
93
|
* Create an in-memory instance pre-populated with the given data.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Record.js","sourceRoot":"","sources":["../../../src/core/Record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Record.js","sourceRoot":"","sources":["../../../src/core/Record.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,9 @@ export interface RecordStatic {
|
|
|
15
15
|
indexTableName: string;
|
|
16
16
|
/** JavaScript class name (used for Registry class-name lookup). */
|
|
17
17
|
name: string;
|
|
18
|
+
/** Whether the auto-created sheet should be protected. */
|
|
19
|
+
isProtected(): boolean;
|
|
20
|
+
/** Email addresses of editors allowed to edit the protected sheet. */
|
|
21
|
+
protectedFor(): string[];
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=RecordStatic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordStatic.d.ts","sourceRoot":"","sources":["../../../src/core/RecordStatic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,QAAQ,MAAM,CAAC;IAEf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IAEvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"RecordStatic.d.ts","sourceRoot":"","sources":["../../../src/core/RecordStatic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,QAAQ,MAAM,CAAC;IAEf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IAEvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,WAAW,IAAI,OAAO,CAAC;IAEvB,sEAAsE;IACtE,YAAY,IAAI,MAAM,EAAE,CAAC;CAC1B"}
|
|
@@ -66,6 +66,7 @@ export declare class Registry {
|
|
|
66
66
|
*
|
|
67
67
|
* @param schema - The table schema (name, fields, indexes).
|
|
68
68
|
* @param indexStore - The shared IndexStore.
|
|
69
|
+
* @param ctor - The Record subclass constructor (for protection config).
|
|
69
70
|
* @returns The sheet adapter and whether it was freshly created.
|
|
70
71
|
*/
|
|
71
72
|
private ensureTable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../../../src/core/Registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../../../src/core/Registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;;GAKG;AACH,qBAAa,QAAQ;IACnB,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAEhD,qEAAqE;IACrE,OAAO,CAAC,OAAO,CAAoC;IACnD,4DAA4D;IAC5D,OAAO,CAAC,KAAK,CAA+B;IAC5C,sCAAsC;IACtC,OAAO,CAAC,UAAU,CAA2B;IAC7C,yCAAyC;IACzC,OAAO,CAAC,KAAK,CAA8C;IAC3D,mEAAmE;IACnE,OAAO,CAAC,cAAc,CAAmC;IACzD,yEAAyE;IACzE,OAAO,CAAC,aAAa,CAAmC;IAExD,0DAA0D;IAC1D,MAAM,CAAC,WAAW,IAAI,QAAQ;IAO9B,+EAA+E;IAC/E,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,IAAI;IAUnF;;;OAGG;IACH,OAAO,CAAC,UAAU;IAOlB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAmEnB;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IASvC;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC;IAkD1E;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAItD,2DAA2D;IAC3D,aAAa,IAAI,UAAU;IAI3B,mEAAmE;IACnE,UAAU,IAAI,IAAI;CAInB"}
|
|
@@ -15,6 +15,7 @@ import { IndexStore } from "../index/IndexStore.js";
|
|
|
15
15
|
import { MemoryCache } from "./cache/MemoryCache.js";
|
|
16
16
|
import { GoogleSpreadsheetAdapter } from "../storage/GoogleSpreadsheetAdapter.js";
|
|
17
17
|
import { Decorators } from "./Decorators.js";
|
|
18
|
+
import { SystemColumns } from "./types/SystemColumns.js";
|
|
18
19
|
import { SheetOrmLogger } from "../utils/SheetOrmLogger.js";
|
|
19
20
|
/**
|
|
20
21
|
* Central registry for SheetORM.
|
|
@@ -93,9 +94,10 @@ export class Registry {
|
|
|
93
94
|
*
|
|
94
95
|
* @param schema - The table schema (name, fields, indexes).
|
|
95
96
|
* @param indexStore - The shared IndexStore.
|
|
97
|
+
* @param ctor - The Record subclass constructor (for protection config).
|
|
96
98
|
* @returns The sheet adapter and whether it was freshly created.
|
|
97
99
|
*/
|
|
98
|
-
ensureTable(schema, indexStore) {
|
|
100
|
+
ensureTable(schema, indexStore, ctor) {
|
|
99
101
|
const adapter = this.getAdapter();
|
|
100
102
|
SheetOrmLogger.log(`[Registry] ensureTable "${schema.tableName}" (indexes=${schema.indexes.length})`);
|
|
101
103
|
// Check if the sheet tab already exists
|
|
@@ -106,10 +108,29 @@ export class Registry {
|
|
|
106
108
|
created = true;
|
|
107
109
|
}
|
|
108
110
|
SheetOrmLogger.log(`[Registry] ensureTable "${schema.tableName}" → ${created ? "insertSheet (G4 new)" : "existing sheet"}`);
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
// Always ensure headers are present on the sheet.
|
|
112
|
+
// Previously headers for new sheets were deferred to the first data write
|
|
113
|
+
// (L1 optimisation), but this caused a bug: if a read-only operation
|
|
114
|
+
// (e.g. findOne) triggered ensureTable, the GAS execution could end
|
|
115
|
+
// before any write flushed the deferred headers, leaving the sheet
|
|
116
|
+
// without headers for all subsequent executions.
|
|
117
|
+
const expectedHeaders = [
|
|
118
|
+
SystemColumns.ID,
|
|
119
|
+
SystemColumns.CREATED_AT,
|
|
120
|
+
SystemColumns.UPDATED_AT,
|
|
121
|
+
...schema.fields.map((f) => f.name),
|
|
122
|
+
];
|
|
123
|
+
const existingHeaders = sheet.getHeaders();
|
|
124
|
+
const hasValidHeaders = existingHeaders.length > 0 && existingHeaders.some((h) => h !== "");
|
|
125
|
+
if (!hasValidHeaders) {
|
|
126
|
+
sheet.setHeaders(expectedHeaders);
|
|
127
|
+
SheetOrmLogger.log(`[Registry] ensureTable "${schema.tableName}" → wrote ${expectedHeaders.length} headers`);
|
|
128
|
+
}
|
|
129
|
+
// Apply sheet protection when the sheet is newly created and the class opts in
|
|
130
|
+
if (created && ctor.isProtected()) {
|
|
131
|
+
const editors = ctor.protectedFor();
|
|
132
|
+
adapter.protectSheet(schema.tableName, editors);
|
|
133
|
+
SheetOrmLogger.log(`[Registry] ensureTable "${schema.tableName}" → protected (editors=${editors.length})`);
|
|
113
134
|
}
|
|
114
135
|
// If no indexes are defined, skip index table creation
|
|
115
136
|
if (schema.indexes.length === 0)
|
|
@@ -172,12 +193,12 @@ export class Registry {
|
|
|
172
193
|
indexes,
|
|
173
194
|
};
|
|
174
195
|
// Create the sheet tab (or get existing) and register indexes
|
|
175
|
-
const { sheet, created } = this.ensureTable(schema, indexStore);
|
|
196
|
+
const { sheet, created } = this.ensureTable(schema, indexStore, ctor);
|
|
176
197
|
// Construct the repository with pre-resolved sheet and row-count hints:
|
|
177
198
|
// - sheet: pre-resolved ISheetAdapter (avoids getSheetByName call)
|
|
178
199
|
// - created ? 0 : undefined: known row count (0 for new sheets, avoids getLastRow call)
|
|
179
200
|
// - created: defer header write to first data flush
|
|
180
|
-
const repo = new SheetRepository(this.getAdapter(), schema, indexStore, this.cache, undefined, sheet, created ? 0 : undefined,
|
|
201
|
+
const repo = new SheetRepository(this.getAdapter(), schema, indexStore, this.cache, undefined, sheet, created ? 0 : undefined, false);
|
|
181
202
|
this.repos.set(tableName, repo);
|
|
182
203
|
return repo;
|
|
183
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../../src/core/Registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,QAAQ;IAArB;QAIE,qEAAqE;QAC7D,YAAO,GAA+B,IAAI,CAAC;QACnD,4DAA4D;QACpD,UAAK,GAA0B,IAAI,CAAC;QAC5C,sCAAsC;QAC9B,eAAU,GAAsB,IAAI,CAAC;QAC7C,yCAAyC;QACjC,UAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC3D,mEAAmE;QAC3D,mBAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;QACzD,yEAAyE;QACjE,kBAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../../src/core/Registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,QAAQ;IAArB;QAIE,qEAAqE;QAC7D,YAAO,GAA+B,IAAI,CAAC;QACnD,4DAA4D;QACpD,UAAK,GAA0B,IAAI,CAAC;QAC5C,sCAAsC;QAC9B,eAAU,GAAsB,IAAI,CAAC;QAC7C,yCAAyC;QACjC,UAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC3D,mEAAmE;QAC3D,mBAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;QACzD,yEAAyE;QACjE,kBAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IAiO1D,CAAC;IA/NC,0DAA0D;IAC1D,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,KAAK;QACV,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,OAAkE;QAC1E,cAAc,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;QACvG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACK,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YAChD,mFAAmF;YACnF,sEAAsE;YACtE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACK,WAAW,CACjB,MAAmB,EACnB,UAAsB,EACtB,IAAkB;QAElB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,cAAc,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,SAAS,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtG,wCAAwC;QACxC,IAAI,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,cAAc,CAAC,GAAG,CAChB,2BAA2B,MAAM,CAAC,SAAS,OAAO,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CACxG,CAAC;QACF,kDAAkD;QAClD,0EAA0E;QAC1E,qEAAqE;QACrE,oEAAoE;QACpE,mEAAmE;QACnE,iDAAiD;QACjD,MAAM,eAAe,GAAG;YACtB,aAAa,CAAC,EAAE;YAChB,aAAa,CAAC,UAAU;YACxB,aAAa,CAAC,UAAU;YACxB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACpC,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAClC,cAAc,CAAC,GAAG,CAChB,2BAA2B,MAAM,CAAC,SAAS,aAAa,eAAe,CAAC,MAAM,UAAU,CACzF,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,cAAc,CAAC,GAAG,CAChB,2BAA2B,MAAM,CAAC,SAAS,0BAA0B,OAAO,CAAC,MAAM,GAAG,CACvF,CAAC;QACJ,CAAC;QAED,uDAAuD;QACvD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,SAAS,+CAA+C;gBAC9E,qGAAqG,CACxG,CAAC;QACJ,CAAC;QAED,gEAAgE;QAChE,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,IAAkB;QAC9B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAmB,IAAkB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEjC,0CAA0C;QAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,cAAc,CAAC,GAAG,CAAC,gCAAgC,SAAS,eAAe,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAkC,CAAC;QACpE,CAAC;QAED,cAAc,CAAC,GAAG,CAAC,gCAAgC,SAAS,cAAc,CAAC,CAAC;QAE5E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3C,uCAAuC;QACvC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAgB;YAC1B,SAAS;YACT,mEAAmE;YACnE,mFAAmF;YACnF,gFAAgF;YAChF,0DAA0D;YAC1D,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACpE,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;YAClC,OAAO;SACR,CAAC;QAEF,8DAA8D;QAC9D,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAEtE,wEAAwE;QACxE,mFAAmF;QACnF,yFAAyF;QACzF,kEAAkE;QAClE,MAAM,IAAI,GAAG,IAAI,eAAe,CAC9B,IAAI,CAAC,UAAU,EAAE,EACjB,MAAM,EACN,UAAU,EACV,IAAI,CAAC,KAAM,EACX,SAAS,EACT,KAAK,EACL,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACvB,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAA0C,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,2DAA2D;IAC3D,aAAa;QACX,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;IAED,mEAAmE;IACnE,UAAU;QACR,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IACxD,CAAC;;AA9OD,6CAA6C;AAC9B,iBAAQ,GAAoB,IAAI,AAAxB,CAAyB"}
|
|
@@ -29,5 +29,13 @@ export interface ISpreadsheetAdapter {
|
|
|
29
29
|
getSheets(): Map<string, ISheetAdapter>;
|
|
30
30
|
/** Delete all sheets except one (GAS requires at least one sheet to exist). */
|
|
31
31
|
removeAllSheets(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Protect a sheet tab and restrict editing to the given email addresses.
|
|
34
|
+
* No-op if the sheet does not exist.
|
|
35
|
+
*
|
|
36
|
+
* @param name - The sheet tab name to protect.
|
|
37
|
+
* @param editors - Email addresses allowed to edit the protected sheet.
|
|
38
|
+
*/
|
|
39
|
+
protectSheet(name: string, editors: string[]): void;
|
|
32
40
|
}
|
|
33
41
|
//# sourceMappingURL=ISpreadsheetAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISpreadsheetAdapter.d.ts","sourceRoot":"","sources":["../../../../src/core/types/ISpreadsheetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;IAEnD,yEAAyE;IACzE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAEzC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAEzC,kEAAkE;IAClE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,+DAA+D;IAC/D,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAExC,+EAA+E;IAC/E,eAAe,IAAI,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ISpreadsheetAdapter.d.ts","sourceRoot":"","sources":["../../../../src/core/types/ISpreadsheetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;IAEnD,yEAAyE;IACzE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAEzC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAEzC,kEAAkE;IAClE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,+DAA+D;IAC/D,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAExC,+EAA+E;IAC/E,eAAe,IAAI,IAAI,CAAC;IAExB;;;;;;OAMG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACrD"}
|
|
@@ -51,5 +51,15 @@ export declare class GoogleSpreadsheetAdapter implements ISpreadsheetAdapter {
|
|
|
51
51
|
* is kept, cleared, and renamed to "Sheet1" while all others are deleted.
|
|
52
52
|
*/
|
|
53
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;
|
|
54
64
|
}
|
|
55
65
|
//# sourceMappingURL=GoogleSpreadsheetAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
|
@@ -95,5 +95,25 @@ export class GoogleSpreadsheetAdapter {
|
|
|
95
95
|
keeper.clear();
|
|
96
96
|
keeper.setName("Sheet1");
|
|
97
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
|
+
}
|
|
98
118
|
}
|
|
99
119
|
//# sourceMappingURL=GoogleSpreadsheetAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleSpreadsheetAdapter.js","sourceRoot":"","sources":["../../../src/storage/GoogleSpreadsheetAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;GAGG;AACH,MAAM,OAAO,wBAAwB;IAInC;;;;OAIG;IACH,YAAY,WAAsD;QAChE,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpD,cAAc,CAAC,GAAG,CAAC,iCAAiC,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,CAAC,GAAG,CAAC,8BAA8B,IAAI,6BAA6B,CAAC,CAAC;YACpF,OAAO,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,8BAA8B,IAAI,0BAA0B,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACtB,cAAc,CAAC,GAAG,CAAC,8BAA8B,IAAI,IAAI,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,sEAAsE;IACtE,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,cAAc,CAAC,GAAG,CAAC,8BAA8B,IAAI,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,6EAA6E;IAC7E,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;YACjD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,eAAe;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAC5C,cAAc,CAAC,GAAG,CAAC,8CAA8C,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,wEAAwE;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,0CAA0C;QAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"GoogleSpreadsheetAdapter.js","sourceRoot":"","sources":["../../../src/storage/GoogleSpreadsheetAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
|
@@ -334,6 +334,10 @@ const PARITY_SUITES = [
|
|
|
334
334
|
"batch save updates existing entity when committed",
|
|
335
335
|
"throws when indexed model has no indexTableName",
|
|
336
336
|
"getClassByName resolves class by table name fallback",
|
|
337
|
+
"protects sheet on first save when isProtected returns true",
|
|
338
|
+
"does not protect sheet when isProtected returns false",
|
|
339
|
+
"does not re-protect sheet on subsequent saves",
|
|
340
|
+
"protects sheet with empty editors list",
|
|
337
341
|
],
|
|
338
342
|
},
|
|
339
343
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParityCatalog.js","sourceRoot":"","sources":["../../../src/testing/ParityCatalog.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ParityCatalog.js","sourceRoot":"","sources":["../../../src/testing/ParityCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,aAAa,GAAkB;IACnC;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE;YACL,6BAA6B;YAC7B,+BAA+B;YAC/B,sCAAsC;YACtC,wBAAwB;YACxB,0BAA0B;YAC1B,2BAA2B;YAC3B,sCAAsC;YACtC,6BAA6B;YAC7B,wBAAwB;YACxB,gCAAgC;YAChC,qCAAqC;YACrC,kCAAkC;YAClC,8BAA8B;YAC9B,uCAAuC;YACvC,uCAAuC;YACvC,uDAAuD;SACxD;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE;YACL,gCAAgC;YAChC,2BAA2B;YAC3B,uBAAuB;YACvB,yDAAyD;YACzD,iDAAiD;YACjD,mCAAmC;YACnC,oCAAoC;YACpC,gDAAgD;YAChD,wBAAwB;YACxB,8CAA8C;YAC9C,mDAAmD;YACnD,oDAAoD;YACpD,yCAAyC;YACzC,8CAA8C;YAC9C,mDAAmD;YACnD,4DAA4D;YAC5D,+CAA+C;YAC/C,oEAAoE;YACpE,sDAAsD;YACtD,oDAAoD;YACpD,qEAAqE;YACrE,0EAA0E;YAC1E,yEAAyE;YACzE,yDAAyD;YACzD,uEAAuE;YACvE,2CAA2C;YAC3C,kDAAkD;YAClD,2CAA2C;YAC3C,uDAAuD;YACvD,6BAA6B;YAC7B,wCAAwC;YACxC,8CAA8C;YAC9C,2DAA2D;YAC3D,2EAA2E;YAC3E,2DAA2D;YAC3D,mFAAmF;YACnF,0EAA0E;YAC1E,2CAA2C;YAC3C,iEAAiE;YACjE,wEAAwE;YACxE,qEAAqE;YACrE,sEAAsE;YACtE,mEAAmE;YACnE,wDAAwD;SACzD;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE;YACL,sBAAsB;YACtB,gCAAgC;YAChC,eAAe;YACf,gBAAgB;YAChB,gBAAgB;YAChB,oCAAoC;YACpC,wBAAwB;YACxB,qCAAqC;YACrC,8BAA8B;YAC9B,iCAAiC;YACjC,oCAAoC;YACpC,yBAAyB;YACzB,gCAAgC;YAChC,mCAAmC;YACnC,4CAA4C;YAC5C,0BAA0B;YAC1B,+BAA+B;YAC/B,wCAAwC;YACxC,4CAA4C;YAC5C,kCAAkC;YAClC,4BAA4B;YAC5B,oBAAoB;YACpB,6BAA6B;YAC7B,gCAAgC;YAChC,2BAA2B;YAC3B,+BAA+B;YAC/B,6BAA6B;YAC7B,4CAA4C;YAC5C,8DAA8D;YAC9D,wDAAwD;YACxD,uDAAuD;YACvD,gDAAgD;YAChD,oCAAoC;YACpC,wCAAwC;YACxC,uDAAuD;YACvD,uDAAuD;YACvD,4CAA4C;YAC5C,kEAAkE;YAClE,0DAA0D;YAC1D,8CAA8C;YAC9C,wDAAwD;SACzD;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE;YACL,yBAAyB;YACzB,0BAA0B;YAC1B,yBAAyB;YACzB,yBAAyB;YACzB,kCAAkC;YAClC,gCAAgC;YAChC,kDAAkD;YAClD,kCAAkC;YAClC,0BAA0B;YAC1B,gDAAgD;YAChD,iCAAiC;YACjC,6BAA6B;YAC7B,2BAA2B;YAC3B,uDAAuD;YACvD,4BAA4B;YAC5B,iBAAiB;YACjB,0BAA0B;YAC1B,gCAAgC;YAChC,oBAAoB;YACpB,mBAAmB;YACnB,uCAAuC;YACvC,iBAAiB;YACjB,mBAAmB;YACnB,qCAAqC;YACrC,0DAA0D;YAC1D,wCAAwC;YACxC,oCAAoC;YACpC,+BAA+B;YAC/B,uCAAuC;YACvC,8CAA8C;YAC9C,6CAA6C;YAC7C,gCAAgC;YAChC,gDAAgD;YAChD,kDAAkD;YAClD,8CAA8C;YAC9C,iCAAiC;YACjC,wCAAwC;YACxC,0BAA0B;YAC1B,iDAAiD;YACjD,0EAA0E;YAC1E,wDAAwD;YACxD,kCAAkC;YAClC,oCAAoC;YACpC,uBAAuB;YACvB,8CAA8C;YAC9C,+CAA+C;YAC/C,qCAAqC;YACrC,uDAAuD;YACvD,4CAA4C;YAC5C,qDAAqD;YACrD,kDAAkD;YAClD,mDAAmD;YACnD,qDAAqD;YACrD,8DAA8D;YAC9D,+CAA+C;YAC/C,uDAAuD;YACvD,kDAAkD;YAClD,8DAA8D;YAC9D,qDAAqD;YACrD,wDAAwD;SACzD;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE;YACL,mBAAmB;YACnB,mBAAmB;YACnB,oBAAoB;YACpB,iBAAiB;YACjB,iBAAiB;YACjB,iDAAiD;YACjD,sBAAsB;YACtB,qBAAqB;YACrB,iCAAiC;YACjC,qBAAqB;YACrB,sBAAsB;YACtB,mCAAmC;YACnC,uCAAuC;YACvC,mBAAmB;YACnB,+DAA+D;YAC/D,yBAAyB;YACzB,uBAAuB;YACvB,8CAA8C;YAC9C,iCAAiC;YACjC,gCAAgC;YAChC,gEAAgE;YAChE,qDAAqD;YACrD,8CAA8C;YAC9C,qDAAqD;YACrD,gDAAgD;YAChD,yDAAyD;YACzD,0DAA0D;YAC1D,4DAA4D;YAC5D,sEAAsE;YACtE,qEAAqE;YACrE,+CAA+C;YAC/C,sDAAsD;YACtD,wDAAwD;YACxD,mDAAmD;YACnD,0EAA0E;YAC1E,yCAAyC;YACzC,0CAA0C;YAC1C,4CAA4C;YAC5C,4EAA4E;YAC5E,yCAAyC;YACzC,uCAAuC;YACvC,8CAA8C;YAC9C,mDAAmD;YACnD,8CAA8C;YAC9C,gEAAgE;YAChE,iEAAiE;YACjE,oEAAoE;SACrE;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE;YACL,oCAAoC;YACpC,yBAAyB;YACzB,sDAAsD;YACtD,2CAA2C;YAC3C,4CAA4C;SAC7C;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE;YACL,6CAA6C;YAC7C,sCAAsC;YACtC,4BAA4B;YAC5B,2BAA2B;YAC3B,yCAAyC;YACzC,kCAAkC;YAClC,qCAAqC;YACrC,6BAA6B;YAC7B,+BAA+B;YAC/B,wBAAwB;YACxB,kCAAkC;YAClC,wCAAwC;YACxC,gDAAgD;YAChD,4BAA4B;YAC5B,kCAAkC;YAClC,sBAAsB;YACtB,iCAAiC;YACjC,+BAA+B;YAC/B,4BAA4B;YAC5B,4BAA4B;YAC5B,iBAAiB;YACjB,qBAAqB;YACrB,oBAAoB;YACpB,2BAA2B;YAC3B,2BAA2B;YAC3B,0BAA0B;YAC1B,wCAAwC;YACxC,oCAAoC;YACpC,wBAAwB;YACxB,8BAA8B;YAC9B,4BAA4B;YAC5B,+BAA+B;YAC/B,wCAAwC;YACxC,oCAAoC;YACpC,wDAAwD;YACxD,6DAA6D;YAC7D,4DAA4D;YAC5D,0DAA0D;YAC1D,sDAAsD;YACtD,mEAAmE;YACnE,sDAAsD;YACtD,mDAAmD;YACnD,mCAAmC;YACnC,mDAAmD;YACnD,mDAAmD;YACnD,4BAA4B;YAC5B,0DAA0D;YAC1D,8CAA8C;YAC9C,4CAA4C;YAC5C,iEAAiE;YACjE,+CAA+C;YAC/C,gEAAgE;YAChE,8CAA8C;YAC9C,gFAAgF;YAChF,8DAA8D;YAC9D,sDAAsD;YACtD,oDAAoD;YACpD,oDAAoD;YACpD,gDAAgD;YAChD,wDAAwD;YACxD,2DAA2D;YAC3D,2DAA2D;YAC3D,iEAAiE;YACjE,wDAAwD;YACxD,6DAA6D;YAC7D,mDAAmD;YACnD,gEAAgE;YAChE,+DAA+D;YAC/D,wDAAwD;YACxD,wDAAwD;YACxD,wCAAwC;YACxC,mDAAmD;YACnD,iDAAiD;YACjD,sDAAsD;YACtD,4DAA4D;YAC5D,uDAAuD;YACvD,+CAA+C;YAC/C,wCAAwC;SACzC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE;YACL,yDAAyD;YACzD,mCAAmC;YACnC,gDAAgD;YAChD,8CAA8C;YAC9C,gEAAgE;YAChE,+DAA+D;YAC/D,gEAAgE;YAChE,8CAA8C;YAC9C,4DAA4D;YAC5D,6EAA6E;YAC7E,2CAA2C;YAC3C,2DAA2D;YAC3D,6CAA6C;YAC7C,yDAAyD;YACzD,yEAAyE;YACzE,oEAAoE;YACpE,kFAAkF;YAClF,kFAAkF;YAClF,kDAAkD;YAClD,oDAAoD;YACpD,iFAAiF;YACjF,6DAA6D;YAC7D,iEAAiE;YACjE,0EAA0E;YAC1E,2FAA2F;YAC3F,iEAAiE;YACjE,+DAA+D;YAC/D,8EAA8E;YAC9E,iEAAiE;YACjE,+DAA+D;YAC/D,gEAAgE;YAChE,0DAA0D;YAC1D,iEAAiE;YACjE,oEAAoE;YACpE,mEAAmE;SACpE;KACF;CACF,CAAC;AAEF,4EAA4E;AAC5E,SAAS,cAAc,CAAC,IAAY,EAAE,QAAgB;IACpD,OAAO,GAAG,IAAI,KAAK,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,iEAAiE;AACjE,MAAM,eAAe,GAAa,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CACpE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,aAAa;;AACxB,6CAA6C;AAC7B,oBAAM,GAAG,aAAa,CAAC;AACvC,wCAAwC;AACxB,sBAAQ,GAAG,eAAe,CAAC;AAC3C,4CAA4C;AACrC,sBAAQ,GAAG,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeParity.d.ts","sourceRoot":"","sources":["../../../src/testing/RuntimeParity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"RuntimeParity.d.ts","sourceRoot":"","sources":["../../../src/testing/RuntimeParity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA2xJH;;;;;;GAMG;AACH,iBAAS,aAAa,IAAI,IAAI,CAiB7B;AA6GD,qEAAqE;AACrE,iBAAS,gBAAgB,IAAI,MAAM,CAIlC;AAED,gEAAgE;AAChE,iBAAS,gBAAgB,IAAI,MAAM,CAIlC;AAED,oDAAoD;AACpD,iBAAS,kBAAkB,IAAI,MAAM,CAIpC;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,gFAAgF;IAChF,MAAM,CAAC,WAAW,0BAAoB;IACtC,oEAAoE;IACpE,MAAM,CAAC,WAAW,0BAAoB;IACtC,2DAA2D;IAC3D,MAAM,CAAC,aAAa,4BAAsB;IAC1C,yEAAyE;IACzE,MAAM,CAAC,QAAQ,uBAAiB;IAChC,+EAA+E;IAC/E,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAA2B;CACpD"}
|
|
@@ -2975,6 +2975,102 @@ const runtimeSuiteHandlers = {
|
|
|
2975
2975
|
}
|
|
2976
2976
|
assertTrue(threw, "save() should throw when indexed schema has no indexTableName");
|
|
2977
2977
|
},
|
|
2978
|
+
"protects sheet on first save when isProtected returns true": (ctx) => {
|
|
2979
|
+
const adapter = ctx.state.getAdapter();
|
|
2980
|
+
const suffix = ctx.state.nextTableName("prot");
|
|
2981
|
+
Registry.reset();
|
|
2982
|
+
resetDecoratorCaches();
|
|
2983
|
+
Registry.getInstance().configure({ adapter });
|
|
2984
|
+
class ProtectedNote extends BaseRecord {
|
|
2985
|
+
static get tableName() {
|
|
2986
|
+
return `ProtNote_${suffix}`;
|
|
2987
|
+
}
|
|
2988
|
+
static isProtected() {
|
|
2989
|
+
return true;
|
|
2990
|
+
}
|
|
2991
|
+
static protectedFor() {
|
|
2992
|
+
return ["alice@example.com", "bob@example.com"];
|
|
2993
|
+
}
|
|
2994
|
+
}
|
|
2995
|
+
const note = new ProtectedNote();
|
|
2996
|
+
note.body = "secret";
|
|
2997
|
+
note.save();
|
|
2998
|
+
// Verify the sheet was created and protected
|
|
2999
|
+
const spreadsheet = ctx.state.getSpreadsheet();
|
|
3000
|
+
const sheet = spreadsheet.getSheetByName(`ProtNote_${suffix}`);
|
|
3001
|
+
assertTrue(sheet !== null, "protected sheet should exist");
|
|
3002
|
+
const protections = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
|
|
3003
|
+
assertTrue(protections.length > 0, "sheet should have at least one protection");
|
|
3004
|
+
const editors = protections[0].getEditors().map((e) => e.getEmail());
|
|
3005
|
+
assertTrue(editors.includes("alice@example.com"), "alice should be an editor");
|
|
3006
|
+
assertTrue(editors.includes("bob@example.com"), "bob should be an editor");
|
|
3007
|
+
},
|
|
3008
|
+
"does not protect sheet when isProtected returns false": (ctx) => {
|
|
3009
|
+
const { Car } = setup(ctx);
|
|
3010
|
+
const car = new Car();
|
|
3011
|
+
car.make = "Toyota";
|
|
3012
|
+
car.model = "Corolla";
|
|
3013
|
+
car.save();
|
|
3014
|
+
const spreadsheet = ctx.state.getSpreadsheet();
|
|
3015
|
+
const sheet = spreadsheet.getSheetByName(Car.tableName);
|
|
3016
|
+
assertTrue(sheet !== null, "sheet should exist");
|
|
3017
|
+
const protections = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
|
|
3018
|
+
assertEqual(protections.length, 0, "unprotected sheet should have no protections");
|
|
3019
|
+
},
|
|
3020
|
+
"does not re-protect sheet on subsequent saves": (ctx) => {
|
|
3021
|
+
const adapter = ctx.state.getAdapter();
|
|
3022
|
+
const suffix = ctx.state.nextTableName("reprot");
|
|
3023
|
+
Registry.reset();
|
|
3024
|
+
resetDecoratorCaches();
|
|
3025
|
+
Registry.getInstance().configure({ adapter });
|
|
3026
|
+
class TrackedProtected extends BaseRecord {
|
|
3027
|
+
static get tableName() {
|
|
3028
|
+
return `Tracked_${suffix}`;
|
|
3029
|
+
}
|
|
3030
|
+
static isProtected() {
|
|
3031
|
+
return true;
|
|
3032
|
+
}
|
|
3033
|
+
static protectedFor() {
|
|
3034
|
+
return ["admin@example.com"];
|
|
3035
|
+
}
|
|
3036
|
+
}
|
|
3037
|
+
const item1 = new TrackedProtected();
|
|
3038
|
+
item1.value = "first";
|
|
3039
|
+
item1.save();
|
|
3040
|
+
const spreadsheet = ctx.state.getSpreadsheet();
|
|
3041
|
+
const sheet = spreadsheet.getSheetByName(`Tracked_${suffix}`);
|
|
3042
|
+
assertTrue(sheet !== null, "sheet should exist");
|
|
3043
|
+
const protsBefore = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
|
|
3044
|
+
assertEqual(protsBefore.length, 1, "should have exactly one protection after first save");
|
|
3045
|
+
const item2 = new TrackedProtected();
|
|
3046
|
+
item2.value = "second";
|
|
3047
|
+
item2.save();
|
|
3048
|
+
const protsAfter = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
|
|
3049
|
+
assertEqual(protsAfter.length, 1, "should still have exactly one protection after second save");
|
|
3050
|
+
},
|
|
3051
|
+
"protects sheet with empty editors list": (ctx) => {
|
|
3052
|
+
const adapter = ctx.state.getAdapter();
|
|
3053
|
+
const suffix = ctx.state.nextTableName("locked");
|
|
3054
|
+
Registry.reset();
|
|
3055
|
+
resetDecoratorCaches();
|
|
3056
|
+
Registry.getInstance().configure({ adapter });
|
|
3057
|
+
class LockedSheet extends BaseRecord {
|
|
3058
|
+
static get tableName() {
|
|
3059
|
+
return `Locked_${suffix}`;
|
|
3060
|
+
}
|
|
3061
|
+
static isProtected() {
|
|
3062
|
+
return true;
|
|
3063
|
+
}
|
|
3064
|
+
}
|
|
3065
|
+
const item = new LockedSheet();
|
|
3066
|
+
item.data = "locked";
|
|
3067
|
+
item.save();
|
|
3068
|
+
const spreadsheet = ctx.state.getSpreadsheet();
|
|
3069
|
+
const sheet = spreadsheet.getSheetByName(`Locked_${suffix}`);
|
|
3070
|
+
assertTrue(sheet !== null, "sheet should exist");
|
|
3071
|
+
const protections = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
|
|
3072
|
+
assertTrue(protections.length > 0, "sheet should be protected even with no editors");
|
|
3073
|
+
},
|
|
2978
3074
|
};
|
|
2979
3075
|
})(),
|
|
2980
3076
|
"sheet-repository.test.ts": {
|