microsoft-graph 2.2.3 → 2.2.5
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/.github/workflows/{check.yml → quality.yml} +4 -2
- package/dist/graphApi.js +12 -6
- package/dist/models/Address.d.ts +8 -0
- package/dist/models/Address.d.ts.map +1 -0
- package/dist/models/Address.js +1 -0
- package/dist/models/WorkbookRangeRef.d.ts +2 -2
- package/dist/models/WorkbookRangeRef.d.ts.map +1 -1
- package/dist/operations/workbookRange/clearWorkbookRange.test.js +13 -21
- package/dist/operations/workbookRange/deleteWorkbookRange.test.js +13 -17
- package/dist/operations/workbookRange/getWorkbookUsedRange.d.ts.map +1 -1
- package/dist/operations/workbookRange/getWorkbookUsedRange.js +4 -0
- package/dist/operations/workbookRange/getWorkbookUsedRange.test.js +6 -12
- package/dist/operations/workbookRange/getWorkbookVisibleRange.test.js +6 -12
- package/dist/operations/workbookRange/getWorkbookWorksheetRange.d.ts +6 -0
- package/dist/operations/workbookRange/getWorkbookWorksheetRange.d.ts.map +1 -0
- package/dist/operations/workbookRange/getWorkbookWorksheetRange.js +21 -0
- package/dist/operations/workbookRange/getWorkbookWorksheetRange.test.d.ts +2 -0
- package/dist/operations/workbookRange/getWorkbookWorksheetRange.test.d.ts.map +1 -0
- package/dist/operations/workbookRange/getWorkbookWorksheetRange.test.js +32 -0
- package/dist/operations/workbookRange/insertWorkbookCells.d.ts +2 -2
- package/dist/operations/workbookRange/insertWorkbookCells.d.ts.map +1 -1
- package/dist/operations/workbookRange/insertWorkbookCells.js +4 -0
- package/dist/operations/workbookRange/insertWorkbookCells.test.js +1 -2
- package/dist/operations/workbookRange/updateWorkbookRange.test.js +7 -13
- package/dist/operations/workbookTable/createWorkbookTable.test.js +3 -3
- package/dist/operations/workbookTable/getWorkbookTable.test.js +3 -3
- package/dist/operations/workbookTable/getWorkbookTableBodyRange.d.ts.map +1 -1
- package/dist/operations/workbookTable/getWorkbookTableBodyRange.js +4 -0
- package/dist/operations/workbookTable/getWorkbookTableBodyRange.test.js +3 -3
- package/dist/operations/workbookTable/getWorkbookTableHeaderRange.d.ts.map +1 -1
- package/dist/operations/workbookTable/getWorkbookTableHeaderRange.js +4 -0
- package/dist/operations/workbookTable/getWorkbookTableHeaderRange.test.js +3 -3
- package/dist/operations/workbookTable/listWorkbookTableColumns.test.js +3 -3
- package/dist/operations/workbookTable/listWorkbookTableRows.test.js +3 -3
- package/dist/operations/workbookTable/listWorkbookTables.test.js +4 -4
- package/dist/operations/workbookWorksheet/updateWorkbookWorksheet.test.js +6 -3
- package/dist/services/address.d.ts +10 -13
- package/dist/services/address.d.ts.map +1 -1
- package/dist/services/address.js +104 -19
- package/dist/services/address.test.js +57 -39
- package/dist/services/httpStatus.d.ts +1 -0
- package/dist/services/httpStatus.d.ts.map +1 -1
- package/dist/services/httpStatus.js +3 -0
- package/dist/services/random.d.ts.map +1 -1
- package/dist/services/random.js +2 -2
- package/dist/services/workbookRange.d.ts +2 -2
- package/dist/services/workbookRange.d.ts.map +1 -1
- package/dist/tasks/getRangeLastUsedCell.js +3 -3
- package/dist/tasks/getWorkbookTableVisibleBody.test.js +3 -0
- package/dist/tasks/setWorkbookTableBodyVisibleRows.js +5 -5
- package/package.json +11 -3
- package/vitest.config.ts +1 -1
package/dist/graphApi.js
CHANGED
|
@@ -7,7 +7,7 @@ import RequestFailedError from "./errors/RequestFailedError.js";
|
|
|
7
7
|
import { getCurrentAccessToken } from "./services/accessToken.js";
|
|
8
8
|
import { getContext } from "./services/context.js";
|
|
9
9
|
import { tryGetHttpAgent } from "./services/httpAgent.js";
|
|
10
|
-
import { isHttpOk, isHttpTooManyRequests } from "./services/httpStatus.js";
|
|
10
|
+
import { isHttpOk, isHttpTooManyRequests, isServiceUnavailable } from "./services/httpStatus.js";
|
|
11
11
|
import { operationIdToIndex, operationIndexToId } from "./services/operationId.js";
|
|
12
12
|
import { sleep } from "./services/sleep.js";
|
|
13
13
|
export const authenticationScope = "https://graph.microsoft.com/.default";
|
|
@@ -103,8 +103,11 @@ async function executeBatch(...ops) {
|
|
|
103
103
|
}
|
|
104
104
|
if (!isHttpOk(r.status)) {
|
|
105
105
|
const bodyError = body;
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
let errorMessage = `${r.status}`;
|
|
107
|
+
if (bodyError?.error) {
|
|
108
|
+
errorMessage += `: [${bodyError.error.code}] '${bodyError.error.message}'`;
|
|
109
|
+
}
|
|
110
|
+
RequestFailedError.throw(`GraphAPI operation ${index} failed: ${errorMessage}`, op, r);
|
|
108
111
|
}
|
|
109
112
|
responses[index] = op.responseTransform(body);
|
|
110
113
|
}
|
|
@@ -119,7 +122,7 @@ async function innerFetch(args) {
|
|
|
119
122
|
while (attempts < maxRetries) {
|
|
120
123
|
// Retry at most 3 times
|
|
121
124
|
response = await fetch(url, options);
|
|
122
|
-
if (!isHttpTooManyRequests(response.status)) {
|
|
125
|
+
if (!(isHttpTooManyRequests(response.status) || isServiceUnavailable(response.status))) {
|
|
123
126
|
break;
|
|
124
127
|
}
|
|
125
128
|
const requestedRetryAfterSeconds = Number.parseInt(response.headers.get("Retry-After") ?? "0", 10);
|
|
@@ -143,8 +146,11 @@ async function innerFetch(args) {
|
|
|
143
146
|
const body = replyContentType?.startsWith("application/json") ? await response.json() : null;
|
|
144
147
|
if (!isHttpOk(response.status)) {
|
|
145
148
|
const bodyError = body;
|
|
146
|
-
|
|
147
|
-
|
|
149
|
+
let errorMessage = `${response.status} '${response.statusText}'`;
|
|
150
|
+
if (bodyError?.error) {
|
|
151
|
+
errorMessage += `: [${bodyError.error.code}] '${bodyError.error.message}'`;
|
|
152
|
+
}
|
|
153
|
+
RequestFailedError.throw(`GraphAPI fetch failed: ${errorMessage}`, args, body);
|
|
148
154
|
}
|
|
149
155
|
return body;
|
|
150
156
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ColumnAddress = `${Uppercase<string>}`;
|
|
2
|
+
export type ColumnRangeAddress = `${CellAddress}:${CellAddress}`;
|
|
3
|
+
export type RowAddress = `${number}`;
|
|
4
|
+
export type RowRangeAddress = `${RowAddress}:${RowAddress}`;
|
|
5
|
+
export type CellAddress = `${ColumnAddress}${RowAddress}`;
|
|
6
|
+
export type CellRangeAddress = `${CellAddress}:${CellAddress}`;
|
|
7
|
+
export type Address = ColumnAddress | RowAddress | ColumnRangeAddress | RowRangeAddress | CellRangeAddress | CellAddress;
|
|
8
|
+
//# sourceMappingURL=Address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../src/models/Address.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACnD,MAAM,MAAM,kBAAkB,GAAG,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,GAAG,MAAM,EAAE,CAAC;AACrC,MAAM,MAAM,eAAe,GAAG,GAAG,UAAU,IAAI,UAAU,EAAE,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,GAAG,aAAa,GAAG,UAAU,EAAE,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;AAE/D,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,UAAU,GAAG,kBAAkB,GAAG,eAAe,GAAG,gBAAgB,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Address } from "./Address.ts";
|
|
2
2
|
import type { WorkbookWorksheetRef } from "./WorkbookWorksheetRef.ts";
|
|
3
3
|
export type WorkbookRangeRef = WorkbookWorksheetRef & {
|
|
4
|
-
address:
|
|
4
|
+
address: Address;
|
|
5
5
|
};
|
|
6
6
|
//# sourceMappingURL=WorkbookRangeRef.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkbookRangeRef.d.ts","sourceRoot":"","sources":["../../src/models/WorkbookRangeRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"WorkbookRangeRef.d.ts","sourceRoot":"","sources":["../../src/models/WorkbookRangeRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG;IACrD,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC"}
|
|
@@ -8,22 +8,25 @@ import { createWorkbookWorksheetRef, defaultWorkbookWorksheetId } from "../../se
|
|
|
8
8
|
import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
9
9
|
import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
10
10
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
11
|
-
import getWorkbookWorksheetRange from "../workbookWorksheet/getWorkbookWorksheetRange.js";
|
|
12
11
|
import clearWorkbookRange from "./clearWorkbookRange.js";
|
|
12
|
+
import getWorkbookWorksheetRange from "./getWorkbookWorksheetRange.js";
|
|
13
13
|
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
14
|
+
const values = [
|
|
15
|
+
[1, 2],
|
|
16
|
+
[3, 4],
|
|
17
|
+
];
|
|
18
|
+
const clearedValues = [
|
|
19
|
+
["", ""],
|
|
20
|
+
["", ""],
|
|
21
|
+
];
|
|
14
22
|
describe("clearWorkbookRange", () => {
|
|
15
23
|
it("can clear a range in an existing workbook", async () => {
|
|
16
|
-
const address = "A1:B2";
|
|
17
|
-
const values = [
|
|
18
|
-
[1, 2],
|
|
19
|
-
[3, 4],
|
|
20
|
-
];
|
|
21
24
|
const workbookName = generateTempFileName("xlsx");
|
|
22
25
|
const workbookPath = driveItemPath(workbookName);
|
|
23
26
|
const driveRef = getDefaultDriveRef();
|
|
24
27
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
25
28
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
26
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
29
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
27
30
|
try {
|
|
28
31
|
await updateWorkbookRange(rangeRef, {
|
|
29
32
|
values: values,
|
|
@@ -31,35 +34,24 @@ describe("clearWorkbookRange", () => {
|
|
|
31
34
|
await clearWorkbookRange(rangeRef);
|
|
32
35
|
await calculateWorkbook(workbook);
|
|
33
36
|
const clearedRange = await getWorkbookWorksheetRange(rangeRef);
|
|
34
|
-
expect(clearedRange.values).toEqual(
|
|
35
|
-
["", ""],
|
|
36
|
-
["", ""],
|
|
37
|
-
]);
|
|
37
|
+
expect(clearedRange.values).toEqual(clearedValues);
|
|
38
38
|
}
|
|
39
39
|
finally {
|
|
40
40
|
await deleteDriveItemWithRetry(workbook);
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
it("can clear a range in an existing workbook sequential", async () => {
|
|
44
|
-
const address = "A1:B2";
|
|
45
|
-
const values = [
|
|
46
|
-
[1, 2],
|
|
47
|
-
[3, 4],
|
|
48
|
-
];
|
|
49
44
|
const workbookName = generateTempFileName("xlsx");
|
|
50
45
|
const workbookPath = driveItemPath(workbookName);
|
|
51
46
|
const driveRef = getDefaultDriveRef();
|
|
52
47
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
53
48
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
54
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
49
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
55
50
|
try {
|
|
56
51
|
const [_, __, ___, clearedRange] = await sequential(updateWorkbookRange(rangeRef, {
|
|
57
52
|
values: values,
|
|
58
53
|
}), clearWorkbookRange(rangeRef), calculateWorkbook(workbook), getWorkbookWorksheetRange(rangeRef));
|
|
59
|
-
expect(clearedRange.values).toEqual(
|
|
60
|
-
["", ""],
|
|
61
|
-
["", ""],
|
|
62
|
-
]);
|
|
54
|
+
expect(clearedRange.values).toEqual(clearedValues);
|
|
63
55
|
}
|
|
64
56
|
finally {
|
|
65
57
|
await deleteDriveItemWithRetry(workbook);
|
|
@@ -8,22 +8,25 @@ import { createWorkbookWorksheetRef, defaultWorkbookWorksheetId } from "../../se
|
|
|
8
8
|
import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
9
9
|
import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
10
10
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
11
|
-
import getWorkbookWorksheetRange from "../workbookWorksheet/getWorkbookWorksheetRange.js";
|
|
12
11
|
import deleteWorkbookRange from "./deleteWorkbookRange.js";
|
|
12
|
+
import getWorkbookWorksheetRange from "./getWorkbookWorksheetRange.js";
|
|
13
13
|
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
14
|
+
const values = [
|
|
15
|
+
[1, 2],
|
|
16
|
+
[3, 4],
|
|
17
|
+
];
|
|
18
|
+
const clearedValues = [
|
|
19
|
+
["", ""],
|
|
20
|
+
["", ""],
|
|
21
|
+
];
|
|
14
22
|
describe("deleteWorkbookRange", () => {
|
|
15
23
|
it("can delete a range in an existing workbook", async () => {
|
|
16
|
-
const address = "A1:B2";
|
|
17
|
-
const values = [
|
|
18
|
-
[1, 2],
|
|
19
|
-
[3, 4],
|
|
20
|
-
];
|
|
21
24
|
const workbookName = generateTempFileName("xlsx");
|
|
22
25
|
const workbookPath = driveItemPath(workbookName);
|
|
23
26
|
const driveRef = getDefaultDriveRef();
|
|
24
27
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
25
28
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
26
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
29
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
27
30
|
try {
|
|
28
31
|
await updateWorkbookRange(rangeRef, {
|
|
29
32
|
values: values,
|
|
@@ -31,17 +34,13 @@ describe("deleteWorkbookRange", () => {
|
|
|
31
34
|
await deleteWorkbookRange(rangeRef, "Up");
|
|
32
35
|
await calculateWorkbook(workbook);
|
|
33
36
|
const deletedRange = await getWorkbookWorksheetRange(rangeRef);
|
|
34
|
-
expect(deletedRange.values).toEqual(
|
|
35
|
-
["", ""],
|
|
36
|
-
["", ""],
|
|
37
|
-
]);
|
|
37
|
+
expect(deletedRange.values).toEqual(clearedValues);
|
|
38
38
|
}
|
|
39
39
|
finally {
|
|
40
40
|
await deleteDriveItemWithRetry(workbook);
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
it("can delete a range in an existing workbook sequential", async () => {
|
|
44
|
-
const address = "A1:B2";
|
|
45
44
|
const values = [
|
|
46
45
|
[1, 2],
|
|
47
46
|
[3, 4],
|
|
@@ -51,15 +50,12 @@ describe("deleteWorkbookRange", () => {
|
|
|
51
50
|
const driveRef = getDefaultDriveRef();
|
|
52
51
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
53
52
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
54
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
53
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
55
54
|
try {
|
|
56
55
|
const [_, __, ___, deletedRange] = await sequential(updateWorkbookRange(rangeRef, {
|
|
57
56
|
values: values,
|
|
58
57
|
}), deleteWorkbookRange(rangeRef, "Up"), calculateWorkbook(workbook), getWorkbookWorksheetRange(rangeRef));
|
|
59
|
-
expect(deletedRange.values).toEqual(
|
|
60
|
-
["", ""],
|
|
61
|
-
["", ""],
|
|
62
|
-
]);
|
|
58
|
+
expect(deletedRange.values).toEqual(clearedValues);
|
|
63
59
|
}
|
|
64
60
|
finally {
|
|
65
61
|
await deleteDriveItemWithRetry(workbook);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWorkbookUsedRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookRange/getWorkbookUsedRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"getWorkbookUsedRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookRange/getWorkbookUsedRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAItE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAIjF,kKAAkK;AAClK,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,YAAY,EAAE,oBAAoB,GAAG,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAsBjI"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import ProtocolError from "../../errors/ProtocolError.js";
|
|
1
2
|
import { operation } from "../../graphApi.js";
|
|
2
3
|
import { generatePath } from "../../services/templatedPaths.js";
|
|
3
4
|
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
@@ -13,6 +14,9 @@ export default function getWorkbookUsedRange(worksheetRef) {
|
|
|
13
14
|
body: null,
|
|
14
15
|
responseTransform: (response) => {
|
|
15
16
|
const range = response;
|
|
17
|
+
if (!range.address) {
|
|
18
|
+
throw new ProtocolError("Invalid response: address is missing");
|
|
19
|
+
}
|
|
16
20
|
const rangeRef = createWorkbookRangeRef(worksheetRef, range.address);
|
|
17
21
|
return {
|
|
18
22
|
...range,
|
|
@@ -10,19 +10,18 @@ import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
|
10
10
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
11
11
|
import getWorkbookUsedRange from "./getWorkbookUsedRange.js";
|
|
12
12
|
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
13
|
+
const values = [
|
|
14
|
+
[1, 2],
|
|
15
|
+
[3, 4],
|
|
16
|
+
];
|
|
13
17
|
describe("getWorkbookUsedRange", () => {
|
|
14
18
|
it("can retrieve the used range from an existing workbook", async () => {
|
|
15
|
-
const address = "A1:B2";
|
|
16
|
-
const values = [
|
|
17
|
-
[1, 2],
|
|
18
|
-
[3, 4],
|
|
19
|
-
];
|
|
20
19
|
const workbookName = generateTempFileName("xlsx");
|
|
21
20
|
const workbookPath = driveItemPath(workbookName);
|
|
22
21
|
const driveRef = getDefaultDriveRef();
|
|
23
22
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
24
23
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
25
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
24
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
26
25
|
try {
|
|
27
26
|
await updateWorkbookRange(rangeRef, {
|
|
28
27
|
values: values,
|
|
@@ -36,17 +35,12 @@ describe("getWorkbookUsedRange", () => {
|
|
|
36
35
|
}
|
|
37
36
|
});
|
|
38
37
|
it("can retrieve the used range from an existing workbook sequential", async () => {
|
|
39
|
-
const address = "A1:B2";
|
|
40
|
-
const values = [
|
|
41
|
-
[1, 2],
|
|
42
|
-
[3, 4],
|
|
43
|
-
];
|
|
44
38
|
const workbookName = generateTempFileName("xlsx");
|
|
45
39
|
const workbookPath = driveItemPath(workbookName);
|
|
46
40
|
const driveRef = getDefaultDriveRef();
|
|
47
41
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
48
42
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
49
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
43
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
50
44
|
try {
|
|
51
45
|
const [_, __, usedRange] = await sequential(updateWorkbookRange(rangeRef, {
|
|
52
46
|
values: values,
|
|
@@ -10,19 +10,18 @@ import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
|
10
10
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
11
11
|
import getWorkbookVisibleRange from "./getWorkbookVisibleRange.js";
|
|
12
12
|
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
13
|
+
const values = [
|
|
14
|
+
[1, 2],
|
|
15
|
+
[3, 4],
|
|
16
|
+
];
|
|
13
17
|
describe("getWorkbookRangeVisible", () => {
|
|
14
18
|
it("can retrieve the visible view of a range in an existing workbook", async () => {
|
|
15
|
-
const address = "A1:B2";
|
|
16
|
-
const values = [
|
|
17
|
-
[1, 2],
|
|
18
|
-
[3, 4],
|
|
19
|
-
];
|
|
20
19
|
const workbookName = generateTempFileName("xlsx");
|
|
21
20
|
const workbookPath = driveItemPath(workbookName);
|
|
22
21
|
const driveRef = getDefaultDriveRef();
|
|
23
22
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
24
23
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
25
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
24
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
26
25
|
try {
|
|
27
26
|
await updateWorkbookRange(rangeRef, { values: values });
|
|
28
27
|
await calculateWorkbook(workbook);
|
|
@@ -34,17 +33,12 @@ describe("getWorkbookRangeVisible", () => {
|
|
|
34
33
|
}
|
|
35
34
|
});
|
|
36
35
|
it("can retrieve the visible view of a range in an existing workbook sequential", async () => {
|
|
37
|
-
const address = "A1:B2";
|
|
38
|
-
const values = [
|
|
39
|
-
[1, 2],
|
|
40
|
-
[3, 4],
|
|
41
|
-
];
|
|
42
36
|
const workbookName = generateTempFileName("xlsx");
|
|
43
37
|
const workbookPath = driveItemPath(workbookName);
|
|
44
38
|
const driveRef = getDefaultDriveRef();
|
|
45
39
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
46
40
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
47
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
41
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
48
42
|
try {
|
|
49
43
|
const [_, __, visibleView] = await sequential(updateWorkbookRange(rangeRef, { values: values }), calculateWorkbook(workbook), getWorkbookVisibleRange(rangeRef));
|
|
50
44
|
expect(visibleView).toBeDefined();
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WorkbookRange } from "@microsoft/microsoft-graph-types";
|
|
2
|
+
import type { GraphOperation } from "../../models/GraphOperation.ts";
|
|
3
|
+
import type { WorkbookRangeRef } from "../../models/WorkbookRangeRef.ts";
|
|
4
|
+
/** Fetch a range, including values and formatting. @see https://learn.microsoft.com/en-us/graph/api/range-get */
|
|
5
|
+
export default function getWorkbookWorksheetRange(rangeRef: WorkbookRangeRef): GraphOperation<WorkbookRange & WorkbookRangeRef>;
|
|
6
|
+
//# sourceMappingURL=getWorkbookWorksheetRange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getWorkbookWorksheetRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookRange/getWorkbookWorksheetRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,iHAAiH;AACjH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAkB9H"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { operation } from "../../graphApi.js";
|
|
2
|
+
import { generatePath } from "../../services/templatedPaths.js";
|
|
3
|
+
/** Fetch a range, including values and formatting. @see https://learn.microsoft.com/en-us/graph/api/range-get */
|
|
4
|
+
export default function getWorkbookWorksheetRange(rangeRef) {
|
|
5
|
+
return operation({
|
|
6
|
+
contextId: rangeRef.contextId,
|
|
7
|
+
method: "GET",
|
|
8
|
+
path: generatePath(`/sites/{site-id}/drives/{drive-id}/items/{item-id}/workbook/worksheets/{worksheet-id}/range(address='${rangeRef.address}')`, rangeRef),
|
|
9
|
+
headers: {
|
|
10
|
+
"workbook-session-id": rangeRef.sessionId,
|
|
11
|
+
},
|
|
12
|
+
body: null,
|
|
13
|
+
responseTransform: (response) => {
|
|
14
|
+
const range = response;
|
|
15
|
+
return {
|
|
16
|
+
...range,
|
|
17
|
+
...rangeRef,
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getWorkbookWorksheetRange.test.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookRange/getWorkbookWorksheetRange.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { getDefaultDriveRef } from "../../services/drive.js";
|
|
3
|
+
import { driveItemPath } from "../../services/driveItem.js";
|
|
4
|
+
import { generateTempFileName } from "../../services/temporaryFiles.js";
|
|
5
|
+
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
6
|
+
import { createWorkbookWorksheetRef, defaultWorkbookWorksheetId } from "../../services/workbookWorksheet.js";
|
|
7
|
+
import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
8
|
+
import createWorkbook from "../workbook/createWorkbook.js";
|
|
9
|
+
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
10
|
+
const values = [
|
|
11
|
+
[1, 2],
|
|
12
|
+
[3, 4],
|
|
13
|
+
];
|
|
14
|
+
describe("getWorkbookRange", () => {
|
|
15
|
+
it("can retrieve a range from an existing worksheet", async () => {
|
|
16
|
+
const workbookName = generateTempFileName("xlsx");
|
|
17
|
+
const workbookPath = driveItemPath(workbookName);
|
|
18
|
+
const driveRef = getDefaultDriveRef();
|
|
19
|
+
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
20
|
+
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
21
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
22
|
+
try {
|
|
23
|
+
const range = await updateWorkbookRange(rangeRef, {
|
|
24
|
+
values: values,
|
|
25
|
+
});
|
|
26
|
+
expect(range.values).toEqual(values);
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await deleteDriveItemWithRetry(workbook);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { WorkbookRange } from "@microsoft/microsoft-graph-types";
|
|
2
|
+
import type { Address } from "../../models/Address.ts";
|
|
2
3
|
import type { GraphOperation } from "../../models/GraphOperation.ts";
|
|
3
|
-
import type { RangeAddress } from "../../models/RangeAddress.ts";
|
|
4
4
|
import type { WorkbookRangeRef } from "../../models/WorkbookRangeRef.ts";
|
|
5
5
|
import type { WorkbookWorksheetRef } from "../../models/WorkbookWorksheetRef.ts";
|
|
6
6
|
/** Insert a new blank range at a specified address, shifting existing cells. Use `updateRange` after to set content. @see https://learn.microsoft.com/en-us/graph/api/range-insert */
|
|
7
|
-
export default function insertWorkbookCells(worksheetRef: WorkbookWorksheetRef, address:
|
|
7
|
+
export default function insertWorkbookCells(worksheetRef: WorkbookWorksheetRef, address: Address, shift: "Down" | "Right"): GraphOperation<WorkbookRange & WorkbookRangeRef>;
|
|
8
8
|
//# sourceMappingURL=insertWorkbookCells.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insertWorkbookCells.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookRange/insertWorkbookCells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"insertWorkbookCells.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookRange/insertWorkbookCells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGtE,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAIjF,sLAAsL;AACtL,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,YAAY,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAwB3K"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import ProtocolError from "../../errors/ProtocolError.js";
|
|
1
2
|
import { operation } from "../../graphApi.js";
|
|
2
3
|
import { generatePath } from "../../services/templatedPaths.js";
|
|
3
4
|
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
@@ -16,6 +17,9 @@ export default function insertWorkbookCells(worksheetRef, address, shift) {
|
|
|
16
17
|
},
|
|
17
18
|
responseTransform: (response) => {
|
|
18
19
|
const workbook = response;
|
|
20
|
+
if (!workbook.address) {
|
|
21
|
+
throw new ProtocolError("Invalid response: address is missing");
|
|
22
|
+
}
|
|
19
23
|
const rangeRef = createWorkbookRangeRef(worksheetRef, workbook.address);
|
|
20
24
|
return {
|
|
21
25
|
...workbook,
|
|
@@ -12,7 +12,6 @@ import insertWorkbookCells from "./insertWorkbookCells.js";
|
|
|
12
12
|
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
13
13
|
describe("insertWorkbookCells", () => {
|
|
14
14
|
it("can insert cells in an existing workbook using sequential", { timeout: 20000 }, async () => {
|
|
15
|
-
const address = "A1:B2";
|
|
16
15
|
const initialValues = [
|
|
17
16
|
[1, 2],
|
|
18
17
|
[3, 4],
|
|
@@ -26,7 +25,7 @@ describe("insertWorkbookCells", () => {
|
|
|
26
25
|
const workbookPath = driveItemPath(workbookName);
|
|
27
26
|
const workbook = await createWorkbook(getDefaultDriveRef(), workbookPath);
|
|
28
27
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
29
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
28
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
30
29
|
try {
|
|
31
30
|
await updateWorkbookRange(rangeRef, { values: initialValues });
|
|
32
31
|
await insertWorkbookCells(worksheetRef, "A1", "Down");
|
|
@@ -8,21 +8,20 @@ import { createWorkbookWorksheetRef, defaultWorkbookWorksheetId } from "../../se
|
|
|
8
8
|
import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
9
9
|
import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
10
10
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
11
|
-
import getWorkbookWorksheetRange from "
|
|
11
|
+
import getWorkbookWorksheetRange from "./getWorkbookWorksheetRange.js";
|
|
12
12
|
import updateWorkbookRange from "./updateWorkbookRange.js";
|
|
13
|
+
const values = [
|
|
14
|
+
[1, 2],
|
|
15
|
+
[3, 4],
|
|
16
|
+
];
|
|
13
17
|
describe("updateWorkbookRange", () => {
|
|
14
18
|
it("can update a range in an existing workbook", async () => {
|
|
15
|
-
const address = "A1:B2";
|
|
16
|
-
const values = [
|
|
17
|
-
[1, 2],
|
|
18
|
-
[3, 4],
|
|
19
|
-
];
|
|
20
19
|
const workbookName = generateTempFileName("xlsx");
|
|
21
20
|
const workbookPath = driveItemPath(workbookName);
|
|
22
21
|
const driveRef = getDefaultDriveRef();
|
|
23
22
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
24
23
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
25
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
24
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
26
25
|
try {
|
|
27
26
|
await updateWorkbookRange(rangeRef, {
|
|
28
27
|
values: values,
|
|
@@ -36,17 +35,12 @@ describe("updateWorkbookRange", () => {
|
|
|
36
35
|
}
|
|
37
36
|
});
|
|
38
37
|
it("can update a range in an existing workbook sequential", async () => {
|
|
39
|
-
const address = "A1:B2";
|
|
40
|
-
const values = [
|
|
41
|
-
[1, 2],
|
|
42
|
-
[3, 4],
|
|
43
|
-
];
|
|
44
38
|
const workbookName = generateTempFileName("xlsx");
|
|
45
39
|
const workbookPath = driveItemPath(workbookName);
|
|
46
40
|
const driveRef = getDefaultDriveRef();
|
|
47
41
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
48
42
|
const worksheetRef = createWorkbookWorksheetRef(workbook, defaultWorkbookWorksheetId);
|
|
49
|
-
const rangeRef = createWorkbookRangeRef(worksheetRef,
|
|
43
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:B2");
|
|
50
44
|
try {
|
|
51
45
|
const [_, __, updatedRange] = await sequential(updateWorkbookRange(rangeRef, {
|
|
52
46
|
values: values,
|
|
@@ -3,9 +3,9 @@ import { getDefaultDriveRef } from "../../services/drive.js";
|
|
|
3
3
|
import { driveItemPath } from "../../services/driveItem.js";
|
|
4
4
|
import { generateTempFileName } from "../../services/temporaryFiles.js";
|
|
5
5
|
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
6
|
+
import { createDefaultWorkbookWorksheetRef } from "../../services/workbookWorksheet.js";
|
|
6
7
|
import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
7
8
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
8
|
-
import createWorkbookWorksheet from "../workbookWorksheet/createWorkbookWorksheet.js";
|
|
9
9
|
import createWorkbookTable from "./createWorkbookTable.js";
|
|
10
10
|
describe("createWorkbookTable", () => {
|
|
11
11
|
it("can create a new table in an existing worksheet", async () => {
|
|
@@ -13,8 +13,8 @@ describe("createWorkbookTable", () => {
|
|
|
13
13
|
const workbookPath = driveItemPath(workbookName);
|
|
14
14
|
const workbook = await createWorkbook(getDefaultDriveRef(), workbookPath);
|
|
15
15
|
try {
|
|
16
|
-
const
|
|
17
|
-
const rangeRef = createWorkbookRangeRef(
|
|
16
|
+
const worksheetRef = createDefaultWorkbookWorksheetRef(workbook);
|
|
17
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:D4");
|
|
18
18
|
const table = await createWorkbookTable(rangeRef, true);
|
|
19
19
|
expect(table.id).toBeTruthy();
|
|
20
20
|
}
|
|
@@ -3,10 +3,10 @@ import { getDefaultDriveRef } from "../../services/drive.js";
|
|
|
3
3
|
import { driveItemPath } from "../../services/driveItem.js";
|
|
4
4
|
import { generateTempFileName } from "../../services/temporaryFiles.js";
|
|
5
5
|
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
6
|
+
import { createDefaultWorkbookWorksheetRef } from "../../services/workbookWorksheet.js";
|
|
6
7
|
import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
7
8
|
import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
8
9
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
9
|
-
import createWorkbookWorksheet from "../workbookWorksheet/createWorkbookWorksheet.js";
|
|
10
10
|
import createWorkbookTable from "./createWorkbookTable.js";
|
|
11
11
|
import getWorkbookTable from "./getWorkbookTable.js";
|
|
12
12
|
describe("getWorkbookTable", () => {
|
|
@@ -16,8 +16,8 @@ describe("getWorkbookTable", () => {
|
|
|
16
16
|
const driveRef = getDefaultDriveRef();
|
|
17
17
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
18
18
|
try {
|
|
19
|
-
const
|
|
20
|
-
const rangeRef = createWorkbookRangeRef(
|
|
19
|
+
const worksheetRef = createDefaultWorkbookWorksheetRef(workbook);
|
|
20
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:D4");
|
|
21
21
|
const table = await createWorkbookTable(rangeRef, true);
|
|
22
22
|
await calculateWorkbook(workbook);
|
|
23
23
|
const retrievedTable = await getWorkbookTable(table);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWorkbookTableBodyRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookTable/getWorkbookTableBodyRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"getWorkbookTableBodyRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookTable/getWorkbookTableBodyRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAItE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIzE,oHAAoH;AACpH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAsB9H"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import ProtocolError from "../../errors/ProtocolError.js";
|
|
1
2
|
import { operation } from "../../graphApi.js";
|
|
2
3
|
import { generatePath } from "../../services/templatedPaths.js";
|
|
3
4
|
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
@@ -13,6 +14,9 @@ export default function getWorkbookTableBodyRange(tableRef) {
|
|
|
13
14
|
body: null,
|
|
14
15
|
responseTransform: (response) => {
|
|
15
16
|
const range = response;
|
|
17
|
+
if (!range.address) {
|
|
18
|
+
throw new ProtocolError("Invalid response: address is missing");
|
|
19
|
+
}
|
|
16
20
|
const rangeRef = createWorkbookRangeRef(tableRef, range.address);
|
|
17
21
|
return {
|
|
18
22
|
...range,
|
|
@@ -8,9 +8,9 @@ import deleteDriveItemWithRetry from "../../tasks/deleteDriveItemWithRetry.js";
|
|
|
8
8
|
import calculateWorkbook from "../workbook/calculateWorkbook.js";
|
|
9
9
|
import createWorkbook from "../workbook/createWorkbook.js";
|
|
10
10
|
import updateWorkbookRange from "../workbookRange/updateWorkbookRange.js";
|
|
11
|
-
import createWorkbookWorksheet from "../workbookWorksheet/createWorkbookWorksheet.js";
|
|
12
11
|
import createWorkbookTable from "./createWorkbookTable.js";
|
|
13
12
|
import getWorkbookTableBodyRange from "./getWorkbookTableBodyRange.js";
|
|
13
|
+
import { createDefaultWorkbookWorksheetRef } from "../../services/workbookWorksheet.js";
|
|
14
14
|
describe("getWorkbookTableBodyRange", () => {
|
|
15
15
|
it("can retrieve the data body range of a table", async () => {
|
|
16
16
|
const workbookName = generateTempFileName("xlsx");
|
|
@@ -18,8 +18,8 @@ describe("getWorkbookTableBodyRange", () => {
|
|
|
18
18
|
const driveRef = getDefaultDriveRef();
|
|
19
19
|
const workbook = await createWorkbook(driveRef, workbookPath);
|
|
20
20
|
try {
|
|
21
|
-
const
|
|
22
|
-
const rangeRef = createWorkbookRangeRef(
|
|
21
|
+
const worksheetRef = createDefaultWorkbookWorksheetRef(workbook);
|
|
22
|
+
const rangeRef = createWorkbookRangeRef(worksheetRef, "A1:D4");
|
|
23
23
|
const table = await createWorkbookTable(rangeRef, true);
|
|
24
24
|
await updateWorkbookRange(rangeRef, {
|
|
25
25
|
values: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWorkbookTableHeaderRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookTable/getWorkbookTableHeaderRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"getWorkbookTableHeaderRange.d.ts","sourceRoot":"","sources":["../../../src/operations/workbookTable/getWorkbookTableHeaderRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAItE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIzE,sHAAsH;AACtH,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAsBhI"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import ProtocolError from "../../errors/ProtocolError.js";
|
|
1
2
|
import { operation } from "../../graphApi.js";
|
|
2
3
|
import { generatePath } from "../../services/templatedPaths.js";
|
|
3
4
|
import { createWorkbookRangeRef } from "../../services/workbookRange.js";
|
|
@@ -13,6 +14,9 @@ export default function getWorkbookTableHeaderRange(tableRef) {
|
|
|
13
14
|
body: null,
|
|
14
15
|
responseTransform: (response) => {
|
|
15
16
|
const range = response;
|
|
17
|
+
if (!range.address) {
|
|
18
|
+
throw new ProtocolError("Invalid response: address is missing");
|
|
19
|
+
}
|
|
16
20
|
const rangeRef = createWorkbookRangeRef(tableRef, range.address);
|
|
17
21
|
return {
|
|
18
22
|
...range,
|