microsoft-graph 2.31.0 → 2.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,10 +7,10 @@
7
7
  import type { Color } from "./Color.ts";
8
8
  export type Border = {
9
9
  color: Color;
10
- style: BorderType;
10
+ style: BorderStyle;
11
11
  weight: BorderWeight;
12
12
  };
13
13
  export type BorderSide = "EdgeTop" | "EdgeBottom" | "EdgeLeft" | "EdgeRight" | "InsideVertical" | "InsideHorizontal" | "DiagonalDown" | "DiagonalUp";
14
- export type BorderType = "None" | "Continuous" | "Dash" | "DashDot" | "DashDotDot" | "Dot" | "Double" | "SlantDashDot";
14
+ export type BorderStyle = "None" | "Continuous" | "Dash" | "DashDot" | "DashDotDot" | "Dot" | "Double" | "SlantDashDot";
15
15
  export type BorderWeight = "Hairline" | "Thin" | "Medium" | "Thick";
16
16
  //# sourceMappingURL=Border.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Border.d.ts","sourceRoot":"","sources":["../../../src/models/Border.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,YAAY,CAAC;AAErJ,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,cAAc,CAAC;AAEvH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"Border.d.ts","sourceRoot":"","sources":["../../../src/models/Border.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,YAAY,CAAC;AAErJ,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,cAAc,CAAC;AAExH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC"}
@@ -106,19 +106,19 @@ export type CellStyle = {
106
106
  * The amount of detail that we're reading from a cell.
107
107
  */
108
108
  export type CellScope = {
109
- /** Raw underlying value. Cheap to read/write (1 op per ~10K cells for values, text & format) */
109
+ /** Raw cell value. CHEAP (~1 op per 10K cells, no additional op with `text` or `format`) */
110
110
  values: boolean;
111
- /** Formatted value, as presented to the user. Cheap to read/write (1 op per ~10K cells for values, text & format) */
111
+ /** Formatted value, as presented to the user. CHEAP (~1 op per 10K cells, no additional call op `values` or `format`) */
112
112
  text: boolean;
113
- /** Logic used to format values to text. Cheap to read/write (1 op per ~10K cells for values, text & format) */
113
+ /** Logic used to format values to text. CHEAP (~1 op per 10K cells, no additional call op `values` or `text`) */
114
114
  format: boolean;
115
- /** Content position with the cell. Expensive to read/write (1 op per cell) */
115
+ /** Content position with the cell. VERY EXPENSIVE (+1 op per cell) */
116
116
  alignment: boolean;
117
- /** Cell borders. Expensive to read/write (1 op per cell) */
117
+ /** Cell borders. VERY EXPENSIVE (+1 op per cell) */
118
118
  borders: boolean;
119
- /** Background fill style. Expensive to read/write (1 op per cell) */
119
+ /** Background fill style. VERY EXPENSIVE (+1 op per cell) */
120
120
  fill: boolean;
121
- /** Text style. Expensive to read/write (1 op per cell) */
121
+ /** Text style. VERY EXPENSIVE (+1 op per cell) */
122
122
  font: boolean;
123
123
  };
124
124
  export type CellHorizontalAlignment = "General" | "Left" | "Center" | "Right" | "Fill" | "Justify" | "CenterAcrossSelection" | "Distributed";
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../src/models/Cell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../src/models/Cell.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ const InvalidArgumentError_ts_1 = __importDefault(require("../../errors/InvalidA
13
13
  const driveItem_ts_1 = require("../../services/driveItem.js");
14
14
  const operationInvoker_ts_1 = require("../../services/operationInvoker.js");
15
15
  const templatedPaths_ts_1 = require("../../services/templatedPaths.js");
16
- const blankFile = "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";
16
+ const blankFile = "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";
17
17
  /**
18
18
  * Create a new blank binary workbook (XLSB).
19
19
  * @param parentRef Reference to the parent drive or folder where the workbook will be created.
@@ -21,6 +21,7 @@ export declare function createClientSecretContextWithDriveRef(tenantId: AzureTen
21
21
  * @returns A reference to the default drive.
22
22
  * @remarks This method is opinionated and not recommended for production use.
23
23
  * @deprecated Use `createClientSecretContextWithDriveRef()` instead.
24
+ * @hidden
24
25
  */
25
26
  export declare function getDefaultDriveRef(): DriveRef;
26
27
  //# sourceMappingURL=drive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../../src/services/drive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAChH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAUvF;AAED,qDAAqD;AACrD,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAKnL;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAY7C"}
1
+ {"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../../src/services/drive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAChH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAUvF;AAED,qDAAqD;AACrD,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAKnL;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAY7C"}
@@ -44,6 +44,7 @@ function createClientSecretContextWithDriveRef(tenantId, clientId, clientSecret,
44
44
  * @returns A reference to the default drive.
45
45
  * @remarks This method is opinionated and not recommended for production use.
46
46
  * @deprecated Use `createClientSecretContextWithDriveRef()` instead.
47
+ * @hidden
47
48
  */
48
49
  function getDefaultDriveRef() {
49
50
  const tenantId = (0, environmentVariable_ts_1.getEnvironmentVariable)("AZURE_TENANT_ID");
@@ -4,21 +4,33 @@
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
7
- import type { CellScope } from "../models/Cell.ts";
8
- import type { Row } from "../models/Row.ts";
7
+ import type { Cell, CellScope } from "../models/Cell.ts";
8
+ import type { RowOffset } from "../models/Row.ts";
9
9
  import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
10
+ /**
11
+ * Represents a row yielded by the {@link iterateRows} generator.
12
+ * @property {Cell[]} cells Array of cells in the row, each containing value, text, format, and optionally style information depending on the scope.
13
+ * @property {RowOffset} offset Zero-based offset of the row within the original range.
14
+ * @property {boolean} isFirst If this is the first row in the iteration.
15
+ * @property {boolean} isLast If this is the last row in the iteration.
16
+ */
17
+ export type IteratedRow = {
18
+ cells: Cell[];
19
+ offset: RowOffset;
20
+ isFirst: boolean;
21
+ isLast: boolean;
22
+ };
10
23
  /**
11
24
  * Iterate over the rows in a given worksheet range.
12
25
  * @param rangeRef Reference to the workbook range to iterate over.
13
- * @param skip Number of rows to skip before starting to yield rows. Can be negative to get last rows (e.g., -1 for the last row).
14
- * @param take Max number of rows to yield. `POSITIVE_INFINITY` returns all rows.
15
26
  * @param scope Amount of detail to include for each cell.
16
27
  * @param maxCellsPerOperation Prescribe max cells to retrieve per operation. `null` automatically determines value. DO NOT SET EXCEPT FOR ADVANCED TUNING.
17
28
  * @remarks Including `style` in the scope requires over three operations for each and every cell. Use this sparingly!
29
+ * @experimental
18
30
  * @example
19
- * for await (const row of iterateRows(rangeRef)) {
31
+ * for await (const { row } of iterateRows(rangeRef)) {
20
32
  * console.log(row);
21
33
  * }
22
34
  */
23
- export declare function iterateRows(rangeRef: WorkbookRangeRef, skip?: number, take?: number, scope?: Partial<CellScope>, maxCellsPerOperation?: number | null): AsyncIterable<Row>;
35
+ export declare function iterateRows(rangeRef: WorkbookRangeRef, scope?: Partial<CellScope>, maxCellsPerOperation?: number | null): AsyncIterable<IteratedRow>;
24
36
  //# sourceMappingURL=iterateRows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iterateRows.d.ts","sourceRoot":"","sources":["../../../src/tasks/iterateRows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAA6C,SAAS,EAAwE,MAAM,mBAAmB,CAAC;AAGpK,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE;;;;;;;;;;;;GAYG;AACH,wBAAuB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,SAAI,EAAE,IAAI,GAAE,MAAiC,EAAE,KAAK,GAAE,OAAO,CAAC,SAAS,CAAgB,EAAE,oBAAoB,GAAE,MAAM,GAAG,IAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAiC1N"}
1
+ {"version":3,"file":"iterateRows.d.ts","sourceRoot":"","sources":["../../../src/tasks/iterateRows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAwE,MAAM,mBAAmB,CAAC;AAIpK,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAuB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,GAAE,OAAO,CAAC,SAAS,CAAgB,EAAE,oBAAoB,GAAE,MAAM,GAAG,IAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAwC/K"}
@@ -22,41 +22,47 @@ const defaultScope = { values: true, text: true, format: true };
22
22
  /**
23
23
  * Iterate over the rows in a given worksheet range.
24
24
  * @param rangeRef Reference to the workbook range to iterate over.
25
- * @param skip Number of rows to skip before starting to yield rows. Can be negative to get last rows (e.g., -1 for the last row).
26
- * @param take Max number of rows to yield. `POSITIVE_INFINITY` returns all rows.
27
25
  * @param scope Amount of detail to include for each cell.
28
26
  * @param maxCellsPerOperation Prescribe max cells to retrieve per operation. `null` automatically determines value. DO NOT SET EXCEPT FOR ADVANCED TUNING.
29
27
  * @remarks Including `style` in the scope requires over three operations for each and every cell. Use this sparingly!
28
+ * @experimental
30
29
  * @example
31
- * for await (const row of iterateRows(rangeRef)) {
30
+ * for await (const { row } of iterateRows(rangeRef)) {
32
31
  * console.log(row);
33
32
  * }
34
33
  */
35
- async function* iterateRows(rangeRef, skip = 0, take = Number.POSITIVE_INFINITY, scope = defaultScope, maxCellsPerOperation = null) {
36
- const totalRangeRef = (0, addressManipulation_ts_1.subRange)(rangeRef, skip, take);
37
- const totalColumnCount = (0, addressManipulation_ts_1.countAddressColumns)(totalRangeRef.address);
38
- const totalRowCount = (0, addressManipulation_ts_1.countAddressRows)(totalRangeRef.address);
34
+ async function* iterateRows(rangeRef, scope = defaultScope, maxCellsPerOperation = null) {
35
+ const totalColumnCount = (0, addressManipulation_ts_1.countAddressColumns)(rangeRef.address);
36
+ const totalRowCount = (0, addressManipulation_ts_1.countAddressRows)(rangeRef.address);
39
37
  const maxRowsPerOperation = calculateMaxRowsPerOperation(totalColumnCount, maxCellsPerOperation);
40
38
  const rangeSelect = scopeToRangeSelect(scope);
41
39
  for (let operationRowStart = 0; operationRowStart < totalRowCount; operationRowStart += maxRowsPerOperation) {
42
40
  const operationRowCount = Math.min(maxRowsPerOperation, totalRowCount - operationRowStart);
43
- const operationRangeRef = (0, addressManipulation_ts_1.subRange)(totalRangeRef, operationRowStart, operationRowCount);
41
+ const operationRangeRef = (0, addressManipulation_ts_1.subRange)(rangeRef, operationRowStart, operationRowCount);
44
42
  const range = rangeSelect ? await (0, getWorkbookWorksheetRange_ts_1.default)(operationRangeRef, rangeSelect) : null;
45
- for (let rowIndex = 0; rowIndex < operationRowCount; rowIndex++) {
46
- const row = [];
47
- for (let columnIndex = 0; columnIndex < totalColumnCount; columnIndex++) {
48
- const value = (range?.values?.[rowIndex]?.[columnIndex] ?? ""); // The root of these is undefined if that detail isn't in scope
49
- const text = (range?.text?.[rowIndex]?.[columnIndex] ?? "");
50
- const format = (range?.numberFormat?.[rowIndex]?.[columnIndex] ?? "");
51
- const style = await getStyle((0, addressManipulation_ts_1.subRange)(rangeRef, rowIndex, 1, columnIndex, 1), scope); // This line is potentially expensive
52
- row.push({
43
+ for (let operationRowOffset = 0; operationRowOffset < operationRowCount; operationRowOffset++) {
44
+ const cells = [];
45
+ for (let columnOffset = 0; columnOffset < totalColumnCount; columnOffset++) {
46
+ const value = (range?.values?.[operationRowOffset]?.[columnOffset] ?? ""); // The root of these is undefined if that detail isn't in scope
47
+ const text = (range?.text?.[operationRowOffset]?.[columnOffset] ?? "");
48
+ const format = (range?.numberFormat?.[operationRowOffset]?.[columnOffset] ?? "");
49
+ const style = await getStyle((0, addressManipulation_ts_1.subRange)(rangeRef, operationRowOffset, 1, columnOffset, 1), scope); // This line is potentially expensive
50
+ cells.push({
53
51
  value,
54
52
  text,
55
53
  format,
56
54
  style,
57
55
  });
58
56
  }
59
- yield row;
57
+ const offset = (operationRowStart + operationRowOffset);
58
+ const isFirst = offset === 0;
59
+ const isLast = offset === totalRowCount - 1;
60
+ yield {
61
+ cells,
62
+ offset,
63
+ isFirst,
64
+ isLast,
65
+ };
60
66
  }
61
67
  }
62
68
  }
@@ -7,10 +7,10 @@
7
7
  import type { Color } from "./Color.ts";
8
8
  export type Border = {
9
9
  color: Color;
10
- style: BorderType;
10
+ style: BorderStyle;
11
11
  weight: BorderWeight;
12
12
  };
13
13
  export type BorderSide = "EdgeTop" | "EdgeBottom" | "EdgeLeft" | "EdgeRight" | "InsideVertical" | "InsideHorizontal" | "DiagonalDown" | "DiagonalUp";
14
- export type BorderType = "None" | "Continuous" | "Dash" | "DashDot" | "DashDotDot" | "Dot" | "Double" | "SlantDashDot";
14
+ export type BorderStyle = "None" | "Continuous" | "Dash" | "DashDot" | "DashDotDot" | "Dot" | "Double" | "SlantDashDot";
15
15
  export type BorderWeight = "Hairline" | "Thin" | "Medium" | "Thick";
16
16
  //# sourceMappingURL=Border.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Border.d.ts","sourceRoot":"","sources":["../../../src/models/Border.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,YAAY,CAAC;AAErJ,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,cAAc,CAAC;AAEvH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"Border.d.ts","sourceRoot":"","sources":["../../../src/models/Border.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,YAAY,CAAC;AAErJ,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,cAAc,CAAC;AAExH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC"}
@@ -106,19 +106,19 @@ export type CellStyle = {
106
106
  * The amount of detail that we're reading from a cell.
107
107
  */
108
108
  export type CellScope = {
109
- /** Raw underlying value. Cheap to read/write (1 op per ~10K cells for values, text & format) */
109
+ /** Raw cell value. CHEAP (~1 op per 10K cells, no additional op with `text` or `format`) */
110
110
  values: boolean;
111
- /** Formatted value, as presented to the user. Cheap to read/write (1 op per ~10K cells for values, text & format) */
111
+ /** Formatted value, as presented to the user. CHEAP (~1 op per 10K cells, no additional call op `values` or `format`) */
112
112
  text: boolean;
113
- /** Logic used to format values to text. Cheap to read/write (1 op per ~10K cells for values, text & format) */
113
+ /** Logic used to format values to text. CHEAP (~1 op per 10K cells, no additional call op `values` or `text`) */
114
114
  format: boolean;
115
- /** Content position with the cell. Expensive to read/write (1 op per cell) */
115
+ /** Content position with the cell. VERY EXPENSIVE (+1 op per cell) */
116
116
  alignment: boolean;
117
- /** Cell borders. Expensive to read/write (1 op per cell) */
117
+ /** Cell borders. VERY EXPENSIVE (+1 op per cell) */
118
118
  borders: boolean;
119
- /** Background fill style. Expensive to read/write (1 op per cell) */
119
+ /** Background fill style. VERY EXPENSIVE (+1 op per cell) */
120
120
  fill: boolean;
121
- /** Text style. Expensive to read/write (1 op per cell) */
121
+ /** Text style. VERY EXPENSIVE (+1 op per cell) */
122
122
  font: boolean;
123
123
  };
124
124
  export type CellHorizontalAlignment = "General" | "Left" | "Center" | "Right" | "Fill" | "Justify" | "CenterAcrossSelection" | "Distributed";
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../src/models/Cell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../src/models/Cell.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import InvalidArgumentError from "../../errors/InvalidArgumentError.js";
7
7
  import { binaryWorkbookFileExtension, createDriveItemRef, workbookFileExtension } from "../../services/driveItem.js";
8
8
  import { operation } from "../../services/operationInvoker.js";
9
9
  import { generatePath } from "../../services/templatedPaths.js";
10
- const blankFile = "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";
10
+ const blankFile = "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";
11
11
  /**
12
12
  * Create a new blank binary workbook (XLSB).
13
13
  * @param parentRef Reference to the parent drive or folder where the workbook will be created.
@@ -21,6 +21,7 @@ export declare function createClientSecretContextWithDriveRef(tenantId: AzureTen
21
21
  * @returns A reference to the default drive.
22
22
  * @remarks This method is opinionated and not recommended for production use.
23
23
  * @deprecated Use `createClientSecretContextWithDriveRef()` instead.
24
+ * @hidden
24
25
  */
25
26
  export declare function getDefaultDriveRef(): DriveRef;
26
27
  //# sourceMappingURL=drive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../../src/services/drive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAChH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAUvF;AAED,qDAAqD;AACrD,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAKnL;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAY7C"}
1
+ {"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../../src/services/drive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAChH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAUvF;AAED,qDAAqD;AACrD,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAKnL;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAY7C"}
@@ -36,6 +36,7 @@ export function createClientSecretContextWithDriveRef(tenantId, clientId, client
36
36
  * @returns A reference to the default drive.
37
37
  * @remarks This method is opinionated and not recommended for production use.
38
38
  * @deprecated Use `createClientSecretContextWithDriveRef()` instead.
39
+ * @hidden
39
40
  */
40
41
  export function getDefaultDriveRef() {
41
42
  const tenantId = getEnvironmentVariable("AZURE_TENANT_ID");
@@ -4,21 +4,33 @@
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
7
- import type { CellScope } from "../models/Cell.ts";
8
- import type { Row } from "../models/Row.ts";
7
+ import type { Cell, CellScope } from "../models/Cell.ts";
8
+ import type { RowOffset } from "../models/Row.ts";
9
9
  import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
10
+ /**
11
+ * Represents a row yielded by the {@link iterateRows} generator.
12
+ * @property {Cell[]} cells Array of cells in the row, each containing value, text, format, and optionally style information depending on the scope.
13
+ * @property {RowOffset} offset Zero-based offset of the row within the original range.
14
+ * @property {boolean} isFirst If this is the first row in the iteration.
15
+ * @property {boolean} isLast If this is the last row in the iteration.
16
+ */
17
+ export type IteratedRow = {
18
+ cells: Cell[];
19
+ offset: RowOffset;
20
+ isFirst: boolean;
21
+ isLast: boolean;
22
+ };
10
23
  /**
11
24
  * Iterate over the rows in a given worksheet range.
12
25
  * @param rangeRef Reference to the workbook range to iterate over.
13
- * @param skip Number of rows to skip before starting to yield rows. Can be negative to get last rows (e.g., -1 for the last row).
14
- * @param take Max number of rows to yield. `POSITIVE_INFINITY` returns all rows.
15
26
  * @param scope Amount of detail to include for each cell.
16
27
  * @param maxCellsPerOperation Prescribe max cells to retrieve per operation. `null` automatically determines value. DO NOT SET EXCEPT FOR ADVANCED TUNING.
17
28
  * @remarks Including `style` in the scope requires over three operations for each and every cell. Use this sparingly!
29
+ * @experimental
18
30
  * @example
19
- * for await (const row of iterateRows(rangeRef)) {
31
+ * for await (const { row } of iterateRows(rangeRef)) {
20
32
  * console.log(row);
21
33
  * }
22
34
  */
23
- export declare function iterateRows(rangeRef: WorkbookRangeRef, skip?: number, take?: number, scope?: Partial<CellScope>, maxCellsPerOperation?: number | null): AsyncIterable<Row>;
35
+ export declare function iterateRows(rangeRef: WorkbookRangeRef, scope?: Partial<CellScope>, maxCellsPerOperation?: number | null): AsyncIterable<IteratedRow>;
24
36
  //# sourceMappingURL=iterateRows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iterateRows.d.ts","sourceRoot":"","sources":["../../../src/tasks/iterateRows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAA6C,SAAS,EAAwE,MAAM,mBAAmB,CAAC;AAGpK,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE;;;;;;;;;;;;GAYG;AACH,wBAAuB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,SAAI,EAAE,IAAI,GAAE,MAAiC,EAAE,KAAK,GAAE,OAAO,CAAC,SAAS,CAAgB,EAAE,oBAAoB,GAAE,MAAM,GAAG,IAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAiC1N"}
1
+ {"version":3,"file":"iterateRows.d.ts","sourceRoot":"","sources":["../../../src/tasks/iterateRows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAwE,MAAM,mBAAmB,CAAC;AAIpK,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAuB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,GAAE,OAAO,CAAC,SAAS,CAAgB,EAAE,oBAAoB,GAAE,MAAM,GAAG,IAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAwC/K"}
@@ -16,41 +16,47 @@ const defaultScope = { values: true, text: true, format: true };
16
16
  /**
17
17
  * Iterate over the rows in a given worksheet range.
18
18
  * @param rangeRef Reference to the workbook range to iterate over.
19
- * @param skip Number of rows to skip before starting to yield rows. Can be negative to get last rows (e.g., -1 for the last row).
20
- * @param take Max number of rows to yield. `POSITIVE_INFINITY` returns all rows.
21
19
  * @param scope Amount of detail to include for each cell.
22
20
  * @param maxCellsPerOperation Prescribe max cells to retrieve per operation. `null` automatically determines value. DO NOT SET EXCEPT FOR ADVANCED TUNING.
23
21
  * @remarks Including `style` in the scope requires over three operations for each and every cell. Use this sparingly!
22
+ * @experimental
24
23
  * @example
25
- * for await (const row of iterateRows(rangeRef)) {
24
+ * for await (const { row } of iterateRows(rangeRef)) {
26
25
  * console.log(row);
27
26
  * }
28
27
  */
29
- export async function* iterateRows(rangeRef, skip = 0, take = Number.POSITIVE_INFINITY, scope = defaultScope, maxCellsPerOperation = null) {
30
- const totalRangeRef = subRange(rangeRef, skip, take);
31
- const totalColumnCount = countAddressColumns(totalRangeRef.address);
32
- const totalRowCount = countAddressRows(totalRangeRef.address);
28
+ export async function* iterateRows(rangeRef, scope = defaultScope, maxCellsPerOperation = null) {
29
+ const totalColumnCount = countAddressColumns(rangeRef.address);
30
+ const totalRowCount = countAddressRows(rangeRef.address);
33
31
  const maxRowsPerOperation = calculateMaxRowsPerOperation(totalColumnCount, maxCellsPerOperation);
34
32
  const rangeSelect = scopeToRangeSelect(scope);
35
33
  for (let operationRowStart = 0; operationRowStart < totalRowCount; operationRowStart += maxRowsPerOperation) {
36
34
  const operationRowCount = Math.min(maxRowsPerOperation, totalRowCount - operationRowStart);
37
- const operationRangeRef = subRange(totalRangeRef, operationRowStart, operationRowCount);
35
+ const operationRangeRef = subRange(rangeRef, operationRowStart, operationRowCount);
38
36
  const range = rangeSelect ? await getWorkbookWorksheetRange(operationRangeRef, rangeSelect) : null;
39
- for (let rowIndex = 0; rowIndex < operationRowCount; rowIndex++) {
40
- const row = [];
41
- for (let columnIndex = 0; columnIndex < totalColumnCount; columnIndex++) {
42
- const value = (range?.values?.[rowIndex]?.[columnIndex] ?? ""); // The root of these is undefined if that detail isn't in scope
43
- const text = (range?.text?.[rowIndex]?.[columnIndex] ?? "");
44
- const format = (range?.numberFormat?.[rowIndex]?.[columnIndex] ?? "");
45
- const style = await getStyle(subRange(rangeRef, rowIndex, 1, columnIndex, 1), scope); // This line is potentially expensive
46
- row.push({
37
+ for (let operationRowOffset = 0; operationRowOffset < operationRowCount; operationRowOffset++) {
38
+ const cells = [];
39
+ for (let columnOffset = 0; columnOffset < totalColumnCount; columnOffset++) {
40
+ const value = (range?.values?.[operationRowOffset]?.[columnOffset] ?? ""); // The root of these is undefined if that detail isn't in scope
41
+ const text = (range?.text?.[operationRowOffset]?.[columnOffset] ?? "");
42
+ const format = (range?.numberFormat?.[operationRowOffset]?.[columnOffset] ?? "");
43
+ const style = await getStyle(subRange(rangeRef, operationRowOffset, 1, columnOffset, 1), scope); // This line is potentially expensive
44
+ cells.push({
47
45
  value,
48
46
  text,
49
47
  format,
50
48
  style,
51
49
  });
52
50
  }
53
- yield row;
51
+ const offset = (operationRowStart + operationRowOffset);
52
+ const isFirst = offset === 0;
53
+ const isLast = offset === totalRowCount - 1;
54
+ yield {
55
+ cells,
56
+ offset,
57
+ isFirst,
58
+ isLast,
59
+ };
54
60
  }
55
61
  }
56
62
  }
@@ -21,7 +21,7 @@ Defined in: [src/models/Border.ts:9](https://github.com/Future-Secure-AI/microso
21
21
  | Property | Type | Defined in |
22
22
  | ------ | ------ | ------ |
23
23
  | <a id="color"></a> `color` | [`Color`](Color.md#color) | [src/models/Border.ts:10](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Border.ts#L10) |
24
- | <a id="style"></a> `style` | [`BorderType`](#bordertype) | [src/models/Border.ts:11](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Border.ts#L11) |
24
+ | <a id="style"></a> `style` | [`BorderStyle`](#borderstyle-1) | [src/models/Border.ts:11](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Border.ts#L11) |
25
25
  | <a id="weight"></a> `weight` | [`BorderWeight`](#borderweight-1) | [src/models/Border.ts:12](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Border.ts#L12) |
26
26
 
27
27
  ***
@@ -36,9 +36,9 @@ Defined in: [src/models/Border.ts:15](https://github.com/Future-Secure-AI/micros
36
36
 
37
37
  ***
38
38
 
39
- ### BorderType
39
+ ### BorderStyle
40
40
 
41
- > **BorderType** = `"None"` \| `"Continuous"` \| `"Dash"` \| `"DashDot"` \| `"DashDotDot"` \| `"Dot"` \| `"Double"` \| `"SlantDashDot"`
41
+ > **BorderStyle** = `"None"` \| `"Continuous"` \| `"Dash"` \| `"DashDot"` \| `"DashDotDot"` \| `"Dot"` \| `"Double"` \| `"SlantDashDot"`
42
42
 
43
43
  Defined in: [src/models/Border.ts:17](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Border.ts#L17)
44
44
 
package/docs/api/Cell.md CHANGED
@@ -69,13 +69,13 @@ The amount of detail that we're reading from a cell.
69
69
 
70
70
  | Property | Type | Description | Defined in |
71
71
  | ------ | ------ | ------ | ------ |
72
- | <a id="alignment"></a> `alignment` | `boolean` | Content position with the cell. Expensive to read/write (1 op per cell) | [src/models/Cell.ts:138](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L138) |
73
- | <a id="borders"></a> `borders` | `boolean` | Cell borders. Expensive to read/write (1 op per cell) | [src/models/Cell.ts:141](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L141) |
74
- | <a id="fill"></a> `fill` | `boolean` | Background fill style. Expensive to read/write (1 op per cell) | [src/models/Cell.ts:144](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L144) |
75
- | <a id="font"></a> `font` | `boolean` | Text style. Expensive to read/write (1 op per cell) | [src/models/Cell.ts:147](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L147) |
76
- | <a id="format-1"></a> `format` | `boolean` | Logic used to format values to text. Cheap to read/write (1 op per ~10K cells for values, text & format) | [src/models/Cell.ts:135](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L135) |
77
- | <a id="text-1"></a> `text` | `boolean` | Formatted value, as presented to the user. Cheap to read/write (1 op per ~10K cells for values, text & format) | [src/models/Cell.ts:132](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L132) |
78
- | <a id="values"></a> `values` | `boolean` | Raw underlying value. Cheap to read/write (1 op per ~10K cells for values, text & format) | [src/models/Cell.ts:129](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L129) |
72
+ | <a id="alignment"></a> `alignment` | `boolean` | Content position with the cell. VERY EXPENSIVE (+1 op per cell) | [src/models/Cell.ts:138](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L138) |
73
+ | <a id="borders"></a> `borders` | `boolean` | Cell borders. VERY EXPENSIVE (+1 op per cell) | [src/models/Cell.ts:141](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L141) |
74
+ | <a id="fill"></a> `fill` | `boolean` | Background fill style. VERY EXPENSIVE (+1 op per cell) | [src/models/Cell.ts:144](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L144) |
75
+ | <a id="font"></a> `font` | `boolean` | Text style. VERY EXPENSIVE (+1 op per cell) | [src/models/Cell.ts:147](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L147) |
76
+ | <a id="format-1"></a> `format` | `boolean` | Logic used to format values to text. CHEAP (~1 op per 10K cells, no additional call op `values` or `text`) | [src/models/Cell.ts:135](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L135) |
77
+ | <a id="text-1"></a> `text` | `boolean` | Formatted value, as presented to the user. CHEAP (~1 op per 10K cells, no additional call op `values` or `format`) | [src/models/Cell.ts:132](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L132) |
78
+ | <a id="values"></a> `values` | `boolean` | Raw cell value. CHEAP (~1 op per 10K cells, no additional op with `text` or `format`) | [src/models/Cell.ts:129](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/models/Cell.ts#L129) |
79
79
 
80
80
  ***
81
81
 
@@ -10,7 +10,7 @@ Create a new blank binary workbook (XLSB).
10
10
 
11
11
  > **createBinaryWorkbook**(`parentRef`, `itemPath`): [`GraphOperation`](GraphOperation.md#graphoperation)\<`DriveItem` & [`SiteRef`](Site-1.md#siteref) & `object` & `object` & `object`\>
12
12
 
13
- Defined in: src/operations/workbook/createBinaryWorkbook.ts:28
13
+ Defined in: [src/operations/workbook/createBinaryWorkbook.ts:28](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/operations/workbook/createBinaryWorkbook.ts#L28)
14
14
 
15
15
  Create a new blank binary workbook (XLSB).
16
16
 
package/docs/api/drive.md CHANGED
@@ -54,27 +54,3 @@ A reference to the drive.
54
54
  #### Throws
55
55
 
56
56
  ProtocolError if the drive ID is missing.
57
-
58
- ***
59
-
60
- ### ~~getDefaultDriveRef()~~
61
-
62
- > **getDefaultDriveRef**(): [`DriveRef`](Drive-1.md#driveref)
63
-
64
- Defined in: [src/services/drive.ts:48](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/services/drive.ts#L48)
65
-
66
- Retrieves the opinionated default drive reference. NOT RECOMMENDED FOR PRODUCTION USE.
67
-
68
- #### Returns
69
-
70
- [`DriveRef`](Drive-1.md#driveref)
71
-
72
- A reference to the default drive.
73
-
74
- #### Remarks
75
-
76
- This method is opinionated and not recommended for production use.
77
-
78
- #### Deprecated
79
-
80
- Use `createClientSecretContextWithDriveRef()` instead.
@@ -6,13 +6,34 @@
6
6
 
7
7
  Iterate over the rows in a given worksheet range.
8
8
 
9
+ ## Type Aliases
10
+
11
+ ### IteratedRow
12
+
13
+ > **IteratedRow** = `object`
14
+
15
+ Defined in: [src/tasks/iterateRows.ts:34](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L34)
16
+
17
+ **`Experimental`**
18
+
19
+ Represents a row yielded by the [iterateRows](#iteraterows) generator.
20
+
21
+ #### Properties
22
+
23
+ | Property | Type | Description | Defined in |
24
+ | ------ | ------ | ------ | ------ |
25
+ | <a id="cells"></a> `cells` | [`Cell`](Cell.md#cell)[] | Array of cells in the row, each containing value, text, format, and optionally style information depending on the scope. | [src/tasks/iterateRows.ts:35](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L35) |
26
+ | <a id="isfirst"></a> `isFirst` | `boolean` | If this is the first row in the iteration. | [src/tasks/iterateRows.ts:37](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L37) |
27
+ | <a id="islast"></a> `isLast` | `boolean` | If this is the last row in the iteration. | [src/tasks/iterateRows.ts:38](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L38) |
28
+ | <a id="offset"></a> `offset` | [`RowOffset`](Row.md#rowoffset) | Zero-based offset of the row within the original range. | [src/tasks/iterateRows.ts:36](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L36) |
29
+
9
30
  ## Functions
10
31
 
11
32
  ### iterateRows()
12
33
 
13
- > **iterateRows**(`rangeRef`, `skip`, `take`, `scope`, `maxCellsPerOperation`): `AsyncIterable`\<[`Row`](Row.md#row)\>
34
+ > **iterateRows**(`rangeRef`, `scope`, `maxCellsPerOperation`): `AsyncIterable`\<[`IteratedRow`](#iteratedrow)\>
14
35
 
15
- Defined in: [src/tasks/iterateRows.ts:39](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L39)
36
+ Defined in: [src/tasks/iterateRows.ts:53](https://github.com/Future-Secure-AI/microsoft-graph/blob/main/src/tasks/iterateRows.ts#L53)
16
37
 
17
38
  **`Experimental`**
18
39
 
@@ -21,14 +42,12 @@ Defined in: [src/tasks/iterateRows.ts:39](https://github.com/Future-Secure-AI/mi
21
42
  | Parameter | Type | Default value | Description |
22
43
  | ------ | ------ | ------ | ------ |
23
44
  | `rangeRef` | [`WorkbookRangeRef`](WorkbookRange-1.md#workbookrangeref) | `undefined` | Reference to the workbook range to iterate over. |
24
- | `skip` | `number` | `0` | Number of rows to skip before starting to yield rows. Can be negative to get last rows (e.g., -1 for the last row). |
25
- | `take` | `number` | `Number.POSITIVE_INFINITY` | Max number of rows to yield. `POSITIVE_INFINITY` returns all rows. |
26
45
  | `scope` | [`Partial`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype)\<[`CellScope`](Cell.md#cellscope)\> | `defaultScope` | Amount of detail to include for each cell. |
27
46
  | `maxCellsPerOperation` | `null` \| `number` | `null` | Prescribe max cells to retrieve per operation. `null` automatically determines value. DO NOT SET EXCEPT FOR ADVANCED TUNING. |
28
47
 
29
48
  #### Returns
30
49
 
31
- `AsyncIterable`\<[`Row`](Row.md#row)\>
50
+ `AsyncIterable`\<[`IteratedRow`](#iteratedrow)\>
32
51
 
33
52
  #### Remarks
34
53
 
@@ -37,7 +56,7 @@ Including `style` in the scope requires over three operations for each and every
37
56
  #### Example
38
57
 
39
58
  ```ts
40
- for await (const row of iterateRows(rangeRef)) {
59
+ for await (const { row } of iterateRows(rangeRef)) {
41
60
  console.log(row);
42
61
  }
43
62
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microsoft-graph",
3
- "version": "2.31.0",
3
+ "version": "2.31.1",
4
4
  "description": "Microsoft GraphAPI SDK for NodeJS",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",