microsoft-graph 2.34.0 → 2.35.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.
Files changed (61) hide show
  1. package/dist/cjs/services/objectMapping.d.ts +100 -0
  2. package/dist/cjs/services/objectMapping.d.ts.map +1 -0
  3. package/dist/cjs/services/objectMapping.js +143 -0
  4. package/dist/cjs/tasks/insertWorkbookRangeRow.d.ts +2 -2
  5. package/dist/cjs/tasks/insertWorkbookRangeRow.js +2 -2
  6. package/dist/cjs/tasks/insertWorkbookRangeRows.d.ts +3 -3
  7. package/dist/cjs/tasks/insertWorkbookRangeRows.js +3 -3
  8. package/dist/cjs/tasks/iterateWorkbookRangeRows.d.ts +1 -1
  9. package/dist/cjs/tasks/iterateWorkbookRangeRows.js +1 -1
  10. package/dist/cjs/tasks/readWorkbookRangeFirstRow.d.ts +2 -2
  11. package/dist/cjs/tasks/readWorkbookRangeFirstRow.js +2 -2
  12. package/dist/cjs/tasks/readWorkbookRangeRows.d.ts +2 -2
  13. package/dist/cjs/tasks/readWorkbookRangeRows.js +2 -2
  14. package/dist/cjs/tasks/updateWorkbookRangeFirstRow.d.ts +3 -3
  15. package/dist/cjs/tasks/updateWorkbookRangeFirstRow.js +3 -3
  16. package/dist/cjs/tasks/updateWorkbookRangeRows.d.ts +15 -6
  17. package/dist/cjs/tasks/updateWorkbookRangeRows.d.ts.map +1 -1
  18. package/dist/cjs/tasks/updateWorkbookRangeRows.js +16 -7
  19. package/dist/esm/services/objectMapping.d.ts +100 -0
  20. package/dist/esm/services/objectMapping.d.ts.map +1 -0
  21. package/dist/esm/services/objectMapping.js +132 -0
  22. package/dist/esm/tasks/insertWorkbookRangeRow.d.ts +2 -2
  23. package/dist/esm/tasks/insertWorkbookRangeRow.js +2 -2
  24. package/dist/esm/tasks/insertWorkbookRangeRows.d.ts +3 -3
  25. package/dist/esm/tasks/insertWorkbookRangeRows.js +3 -3
  26. package/dist/esm/tasks/iterateWorkbookRangeRows.d.ts +1 -1
  27. package/dist/esm/tasks/iterateWorkbookRangeRows.js +1 -1
  28. package/dist/esm/tasks/readWorkbookRangeFirstRow.d.ts +2 -2
  29. package/dist/esm/tasks/readWorkbookRangeFirstRow.js +2 -2
  30. package/dist/esm/tasks/readWorkbookRangeRows.d.ts +2 -2
  31. package/dist/esm/tasks/readWorkbookRangeRows.js +2 -2
  32. package/dist/esm/tasks/updateWorkbookRangeFirstRow.d.ts +3 -3
  33. package/dist/esm/tasks/updateWorkbookRangeFirstRow.js +3 -3
  34. package/dist/esm/tasks/updateWorkbookRangeRows.d.ts +15 -6
  35. package/dist/esm/tasks/updateWorkbookRangeRows.d.ts.map +1 -1
  36. package/dist/esm/tasks/updateWorkbookRangeRows.js +16 -7
  37. package/docs/api/README.md +8 -9
  38. package/docs/api/{insertRow.md → insertWorkbookRangeRow.md} +3 -3
  39. package/docs/api/{insertRows.md → insertWorkbookRangeRows.md} +5 -5
  40. package/docs/api/{iterateRows.md → iterateWorkbookRangeRows.md} +2 -2
  41. package/docs/api/objectMapping.md +225 -0
  42. package/docs/api/{readFirstRow.md → readWorkbookRangeFirstRow.md} +3 -3
  43. package/docs/api/{readRows.md → readWorkbookRangeRows.md} +4 -4
  44. package/docs/api/{updateFirstRow.md → updateWorkbookRangeFirstRow.md} +4 -4
  45. package/docs/api/{updateRows.md → updateWorkbookRangeRows.md} +19 -10
  46. package/docs/api/writeWorkbookRows.md +1 -1
  47. package/package.json +26 -51
  48. package/dist/cjs/models/DataSource.d.ts +0 -49
  49. package/dist/cjs/models/DataSource.d.ts.map +0 -1
  50. package/dist/cjs/models/DataSource.js +0 -8
  51. package/dist/cjs/services/dataSource.d.ts +0 -69
  52. package/dist/cjs/services/dataSource.d.ts.map +0 -1
  53. package/dist/cjs/services/dataSource.js +0 -193
  54. package/dist/esm/models/DataSource.d.ts +0 -49
  55. package/dist/esm/models/DataSource.d.ts.map +0 -1
  56. package/dist/esm/models/DataSource.js +0 -7
  57. package/dist/esm/services/dataSource.d.ts +0 -69
  58. package/dist/esm/services/dataSource.d.ts.map +0 -1
  59. package/dist/esm/services/dataSource.js +0 -182
  60. package/docs/api/DataSource-1.md +0 -191
  61. package/docs/api/dataSource.md +0 -204
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Automated conversion of rows to objects and vice versa based on defined mapping rules.
3
+ * @module objectMapping
4
+ * @category Services
5
+ */
6
+ import type { Cell } from "../models/Cell.ts";
7
+ import type { ColumnName, ColumnOffset } from "../models/Column.ts";
8
+ /**
9
+ * Defines rules for mapping between spreadsheet rows and object properties.
10
+ * @template T Object type to map to/from.
11
+ */
12
+ export type ObjectMapping<T> = {
13
+ [K in keyof T]-?: {
14
+ /**
15
+ * Pattern to match a column heading for mapping to the object property.
16
+ * If a string is provided, it will be used as the column name.
17
+ */
18
+ columnPattern: RegExp;
19
+ /**
20
+ * Decodes a cell to an object property value.
21
+ * @param cell Cell to decode.
22
+ * @returns Decoded property value.
23
+ * @remarks If omitted, the cell's `value` (not `text`) will be used without conversion.
24
+ * @example
25
+ * (cell: Cell) => Number.parseFloat(cell.value.toString()) // Convert string number to number
26
+ */
27
+ decode?: (cell: Cell) => T[K];
28
+ /**
29
+ * Encodes an object property value to a cell.
30
+ * @param prop Property value to encode.
31
+ * @returns Encoded cell.
32
+ * @remarks If omitted, the cell will be created with the `value` property set to the property value.
33
+ * @example
34
+ * (prop: number) => ({ value: prop.toString(), ... }) // Convert number to string cell value
35
+ */
36
+ encode?: (prop: T[K]) => Cell;
37
+ };
38
+ };
39
+ /**
40
+ * Resolved mapping from object properties to column offsets and encode/decode functions.
41
+ * @template T Object type being mapped.
42
+ */
43
+ export type ResolvedObjectMapping<T> = {
44
+ [K in keyof T]-?: {
45
+ columnOffset: ColumnOffset;
46
+ decode: (cell: Cell) => T[K];
47
+ encode: (prop: T[K]) => Cell;
48
+ };
49
+ };
50
+ /**
51
+ * Converts spreadsheet rows to objects using the first row as a header.
52
+ * @template T The object type to yield.
53
+ * @param rows Iterable or async iterable of cell arrays (rows).
54
+ * @param rules Mapping rules for converting columns to object properties.
55
+ * @yields Objects of type T, one for each data row.
56
+ */
57
+ export declare function rowsToObjectsWithHeader<T>(rows: Iterable<Cell[]> | AsyncIterable<Cell[]>, rules: ObjectMapping<T>): AsyncIterable<T>;
58
+ /**
59
+ * Creates a mapping from a header row to object properties based on provided rules.
60
+ * @template T The object type being mapped.
61
+ * @param headerRow The header row, used to determine column offsets.
62
+ * @param rules The mapping rules for converting cells to object properties.
63
+ * @returns The resolved mapping for use in row/object conversion.
64
+ * @throws {InvalidArgumentError} If a column matching a pattern is not found in the header row.
65
+ */
66
+ export declare function createObjectMapping<T>(headerRow: (ColumnName | Cell)[], rules: ObjectMapping<T>): ResolvedObjectMapping<T>;
67
+ /**
68
+ * Converts spreadsheet rows to objects using a provided mapping.
69
+ * @template T The object type to yield.
70
+ * @param rows Iterable or async iterable of cell arrays (rows).
71
+ * @param mapping The resolved mapping for row/object conversion.
72
+ * @yields Objects of type T, one for each row.
73
+ */
74
+ export declare function rowsToObjects<T>(rows: Iterable<Cell[]> | AsyncIterable<Cell[]>, mapping: ResolvedObjectMapping<T>): AsyncIterable<T>;
75
+ /**
76
+ * Converts objects to spreadsheet rows using a provided mapping.
77
+ * @template T The object type to convert.
78
+ * @param objects Iterable or async iterable of objects.
79
+ * @param mapping The resolved mapping for object/row conversion.
80
+ * @yields Arrays of partial cells, one for each object.
81
+ */
82
+ export declare function objectsToRows<T>(objects: Iterable<T> | AsyncIterable<T>, mapping: ResolvedObjectMapping<T>): AsyncIterable<Partial<Cell>[]>;
83
+ /**
84
+ * Converts a row of cells to an object using the provided mapping.
85
+ * @template T The object type to return.
86
+ * @param cells The array of cells representing a row.
87
+ * @param rules The resolved mapping for row/object conversion.
88
+ * @returns The object of type T.
89
+ * @throws {InvalidArgumentError} If a required column is missing in the row.
90
+ */
91
+ export declare function rowToObject<T>(cells: Cell[], rules: ResolvedObjectMapping<T>): T;
92
+ /**
93
+ * Converts an object to a row of cells using the provided mapping.
94
+ * @template T The object type to convert.
95
+ * @param record The object to convert.
96
+ * @param mapper The resolved mapping for object/row conversion.
97
+ * @returns An array of partial cells representing the row.
98
+ */
99
+ export declare function objectToRow<T>(record: T, mapper: ResolvedObjectMapping<T>): Partial<Cell>[];
100
+ //# sourceMappingURL=objectMapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectMapping.d.ts","sourceRoot":"","sources":["../../../src/services/objectMapping.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAa,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGpE;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;KAC7B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;QACjB;;;WAGG;QACH,aAAa,EAAE,MAAM,CAAC;QAEtB;;;;;;;WAOG;QACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9B;;;;;;;WAOG;QACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;KAC9B;CACD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI;KACrC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;QACjB,YAAY,EAAE,YAAY,CAAC;QAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;KAC7B;CACD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAuB,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAW3I;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAsC1H;AAED;;;;;;GAMG;AACH,wBAAuB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAI3I;AAED;;;;;;GAMG;AACH,wBAAuB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAIlJ;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAe5E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAW3F"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Automated conversion of rows to objects and vice versa based on defined mapping rules.
4
+ * @module objectMapping
5
+ * @category Services
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.rowsToObjectsWithHeader = rowsToObjectsWithHeader;
12
+ exports.createObjectMapping = createObjectMapping;
13
+ exports.rowsToObjects = rowsToObjects;
14
+ exports.objectsToRows = objectsToRows;
15
+ exports.rowToObject = rowToObject;
16
+ exports.objectToRow = objectToRow;
17
+ const InvalidArgumentError_ts_1 = __importDefault(require("../errors/InvalidArgumentError.js"));
18
+ const cell_ts_1 = require("./cell.js");
19
+ /**
20
+ * Converts spreadsheet rows to objects using the first row as a header.
21
+ * @template T The object type to yield.
22
+ * @param rows Iterable or async iterable of cell arrays (rows).
23
+ * @param rules Mapping rules for converting columns to object properties.
24
+ * @yields Objects of type T, one for each data row.
25
+ */
26
+ async function* rowsToObjectsWithHeader(rows, rules) {
27
+ let mapping = null;
28
+ for await (const row of rows) {
29
+ if (!mapping) {
30
+ mapping = createObjectMapping(row, rules);
31
+ continue;
32
+ }
33
+ yield rowToObject(row, mapping);
34
+ }
35
+ }
36
+ /**
37
+ * Creates a mapping from a header row to object properties based on provided rules.
38
+ * @template T The object type being mapped.
39
+ * @param headerRow The header row, used to determine column offsets.
40
+ * @param rules The mapping rules for converting cells to object properties.
41
+ * @returns The resolved mapping for use in row/object conversion.
42
+ * @throws {InvalidArgumentError} If a column matching a pattern is not found in the header row.
43
+ */
44
+ function createObjectMapping(headerRow, rules) {
45
+ const headStrings = headerRow.map((c) => (typeof c === "object" ? c.text : c));
46
+ const resolved = {};
47
+ for (const key in rules) {
48
+ if (!Object.prototype.hasOwnProperty.call(rules, key)) {
49
+ continue;
50
+ }
51
+ const rule = rules[key];
52
+ const offset = headStrings.findIndex((h) => rule.columnPattern.test(h));
53
+ if (offset === -1) {
54
+ throw new InvalidArgumentError_ts_1.default(`Column matching "${rule.columnPattern}" not found in header.`);
55
+ }
56
+ const columnOffset = offset;
57
+ const defaultDecode = (cell) => cell.value;
58
+ const defaultEncode = (prop) => ({
59
+ value: prop,
60
+ text: prop?.toString() ?? "",
61
+ format: cell_ts_1.generalCellFormat,
62
+ merge: {},
63
+ alignment: {},
64
+ borders: {},
65
+ fill: {},
66
+ font: {},
67
+ });
68
+ const decode = rule.decode ?? defaultDecode;
69
+ const encode = rule.encode ?? defaultEncode;
70
+ resolved[key] = {
71
+ columnOffset,
72
+ decode,
73
+ encode,
74
+ };
75
+ }
76
+ return resolved;
77
+ }
78
+ /**
79
+ * Converts spreadsheet rows to objects using a provided mapping.
80
+ * @template T The object type to yield.
81
+ * @param rows Iterable or async iterable of cell arrays (rows).
82
+ * @param mapping The resolved mapping for row/object conversion.
83
+ * @yields Objects of type T, one for each row.
84
+ */
85
+ async function* rowsToObjects(rows, mapping) {
86
+ for await (const row of rows) {
87
+ yield rowToObject(row, mapping);
88
+ }
89
+ }
90
+ /**
91
+ * Converts objects to spreadsheet rows using a provided mapping.
92
+ * @template T The object type to convert.
93
+ * @param objects Iterable or async iterable of objects.
94
+ * @param mapping The resolved mapping for object/row conversion.
95
+ * @yields Arrays of partial cells, one for each object.
96
+ */
97
+ async function* objectsToRows(objects, mapping) {
98
+ for await (const obj of objects) {
99
+ yield objectToRow(obj, mapping);
100
+ }
101
+ }
102
+ /**
103
+ * Converts a row of cells to an object using the provided mapping.
104
+ * @template T The object type to return.
105
+ * @param cells The array of cells representing a row.
106
+ * @param rules The resolved mapping for row/object conversion.
107
+ * @returns The object of type T.
108
+ * @throws {InvalidArgumentError} If a required column is missing in the row.
109
+ */
110
+ function rowToObject(cells, rules) {
111
+ const record = {};
112
+ for (const key in rules) {
113
+ if (!Object.prototype.hasOwnProperty.call(rules, key)) {
114
+ continue;
115
+ }
116
+ const rule = rules[key];
117
+ const cell = cells[rule.columnOffset];
118
+ if (!cell) {
119
+ throw new InvalidArgumentError_ts_1.default(`Column at index ${rule.columnOffset} is missing for key "${key}".`);
120
+ }
121
+ record[key] = rule.decode(cell);
122
+ }
123
+ return record;
124
+ }
125
+ /**
126
+ * Converts an object to a row of cells using the provided mapping.
127
+ * @template T The object type to convert.
128
+ * @param record The object to convert.
129
+ * @param mapper The resolved mapping for object/row conversion.
130
+ * @returns An array of partial cells representing the row.
131
+ */
132
+ function objectToRow(record, mapper) {
133
+ const row = [];
134
+ for (const key in mapper) {
135
+ if (!Object.prototype.hasOwnProperty.call(mapper, key)) {
136
+ continue;
137
+ }
138
+ const { columnOffset, encode } = mapper[key];
139
+ const prop = record[key];
140
+ row[columnOffset] = encode(prop);
141
+ }
142
+ return row;
143
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Inserts a single row into a workbook range.
3
- * @module insertRow
3
+ * @module insertWorkbookRangeRow
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
@@ -12,7 +12,7 @@ import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
12
12
  * @param row Array of cells to insert as a single row.
13
13
  * @experimental
14
14
  * @example
15
- * await insertRow(originRef, [{ value: "A1" }, { value: "B1" }, { value: "C1" }]);
15
+ * await insertWorkbookRangeRow(originRef, [{ value: "A1" }, { value: "B1" }, { value: "C1" }]);
16
16
  */
17
17
  export default function insertWorkbookRangeRow(originRef: WorkbookRangeRef, row: Partial<Cell>[]): Promise<void>;
18
18
  //# sourceMappingURL=insertWorkbookRangeRow.d.ts.map
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Inserts a single row into a workbook range.
4
- * @module insertRow
4
+ * @module insertWorkbookRangeRow
5
5
  * @category Tasks
6
6
  * @experimental
7
7
  */
@@ -17,7 +17,7 @@ const insertWorkbookRangeRows_ts_1 = __importDefault(require("./insertWorkbookRa
17
17
  * @param row Array of cells to insert as a single row.
18
18
  * @experimental
19
19
  * @example
20
- * await insertRow(originRef, [{ value: "A1" }, { value: "B1" }, { value: "C1" }]);
20
+ * await insertWorkbookRangeRow(originRef, [{ value: "A1" }, { value: "B1" }, { value: "C1" }]);
21
21
  */
22
22
  async function insertWorkbookRangeRow(originRef, row) {
23
23
  await (0, insertWorkbookRangeRows_ts_1.default)(originRef, [row]);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Inserts rows into a workbook range.
3
- * @module insertRows
3
+ * @module insertWorkbookRangeRows
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
@@ -14,14 +14,14 @@ import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
14
14
  * @experimental
15
15
  * @example
16
16
  * // Basic example:
17
- * await insertRows(originRef, [
17
+ * await insertWorkbookRangeRows(originRef, [
18
18
  * [{ value: "A1" }, { value: "B1" }, { value: "C1" }],
19
19
  * [{ value: "A2" }, { value: "B2" }, { value: "C2" }],
20
20
  * [{ value: "A3" }, { value: "B3" }, { value: "C3" }],
21
21
  * ])
22
22
  *
23
23
  * // Advanced example with cell formatting:
24
- * await insertRows(originRef, [
24
+ * await insertWorkbookRangeRows(originRef, [
25
25
  * [{ value: "A1", format: { fontColor: "red" } }, { value: "B1" }, { value: "C1" }],
26
26
  * [{ value: "A2" }, { value: "B2", format: { fontColor: "blue" } }, { value: "C2" }],
27
27
  * [{ value: "A3" }, { value: "B3" }, { value: "C3", format: { fontColor: "green" } }],
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Inserts rows into a workbook range.
4
- * @module insertRows
4
+ * @module insertWorkbookRangeRows
5
5
  * @category Tasks
6
6
  * @experimental
7
7
  */
@@ -23,14 +23,14 @@ const updateWorkbookRangeRows_ts_1 = __importDefault(require("./updateWorkbookRa
23
23
  * @experimental
24
24
  * @example
25
25
  * // Basic example:
26
- * await insertRows(originRef, [
26
+ * await insertWorkbookRangeRows(originRef, [
27
27
  * [{ value: "A1" }, { value: "B1" }, { value: "C1" }],
28
28
  * [{ value: "A2" }, { value: "B2" }, { value: "C2" }],
29
29
  * [{ value: "A3" }, { value: "B3" }, { value: "C3" }],
30
30
  * ])
31
31
  *
32
32
  * // Advanced example with cell formatting:
33
- * await insertRows(originRef, [
33
+ * await insertWorkbookRangeRows(originRef, [
34
34
  * [{ value: "A1", format: { fontColor: "red" } }, { value: "B1" }, { value: "C1" }],
35
35
  * [{ value: "A2" }, { value: "B2", format: { fontColor: "blue" } }, { value: "C2" }],
36
36
  * [{ value: "A3" }, { value: "B3" }, { value: "C3", format: { fontColor: "green" } }],
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Iterate over the rows in a given worksheet range.
3
- * @module iterateRows
3
+ * @module iterateWorkbookRangeRows
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Iterate over the rows in a given worksheet range.
4
- * @module iterateRows
4
+ * @module iterateWorkbookRangeRows
5
5
  * @category Tasks
6
6
  * @experimental
7
7
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Read the first row from a given workbook range.
3
- * @module readFirstRow
3
+ * @module readWorkbookRangeFirstRow
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
@@ -12,7 +12,7 @@ import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
12
12
  * @returns A promise that resolves to an array of cells in the first row.
13
13
  * @remarks Particularly useful for reading header rows.
14
14
  * @example
15
- * const firstRow = await readFirstRow(rangeRef);
15
+ * const firstRow = await readWorkbookRangeFirstRow(rangeRef);
16
16
  */
17
17
  export default function readWorkbookRangeFirstRow(rangeRef: WorkbookRangeRef, scope?: import("../models/Cell.ts").CellScope): Promise<Cell[]>;
18
18
  //# sourceMappingURL=readWorkbookRangeFirstRow.d.ts.map
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Read the first row from a given workbook range.
4
- * @module readFirstRow
4
+ * @module readWorkbookRangeFirstRow
5
5
  * @category Tasks
6
6
  * @experimental
7
7
  */
@@ -20,7 +20,7 @@ const iterateWorkbookRangeRows_ts_1 = require("./iterateWorkbookRangeRows.js");
20
20
  * @returns A promise that resolves to an array of cells in the first row.
21
21
  * @remarks Particularly useful for reading header rows.
22
22
  * @example
23
- * const firstRow = await readFirstRow(rangeRef);
23
+ * const firstRow = await readWorkbookRangeFirstRow(rangeRef);
24
24
  */
25
25
  async function readWorkbookRangeFirstRow(rangeRef, scope = cell_ts_1.defaultCellScope) {
26
26
  const firstRowRef = (0, addressManipulation_ts_1.subRange)(rangeRef, 0, 1);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Read all rows from a given workbook range.
3
- * @module readRows
3
+ * @module readWorkbookRangeRows
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
@@ -14,7 +14,7 @@ import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
14
14
  * @remarks Where practical, prefer using {@link iterateWorkbookRangeRows} for more efficient memory usage.
15
15
  * @experimental
16
16
  * @example
17
- * const rows = await readRows(rangeRef);
17
+ * const rows = await readWorkbookRangeRows(rangeRef);
18
18
  */
19
19
  export default function readWorkbookRangeRows(rangeRef: WorkbookRangeRef, scope?: import("../models/Cell.ts").CellScope): Promise<Cell[][]>;
20
20
  //# sourceMappingURL=readWorkbookRangeRows.d.ts.map
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Read all rows from a given workbook range.
4
- * @module readRows
4
+ * @module readWorkbookRangeRows
5
5
  * @category Tasks
6
6
  * @experimental
7
7
  */
@@ -17,7 +17,7 @@ const iterateWorkbookRangeRows_ts_1 = require("./iterateWorkbookRangeRows.js");
17
17
  * @remarks Where practical, prefer using {@link iterateWorkbookRangeRows} for more efficient memory usage.
18
18
  * @experimental
19
19
  * @example
20
- * const rows = await readRows(rangeRef);
20
+ * const rows = await readWorkbookRangeRows(rangeRef);
21
21
  */
22
22
  async function readWorkbookRangeRows(rangeRef, scope = cell_ts_1.defaultCellScope) {
23
23
  const rows = [];
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Update first row in a given workbook range.
3
- * @module updateFirstRow
3
+ * @module updateWorkbookRangeFirstRow
4
4
  * @category Tasks
5
5
  * @experimental
6
6
  */
@@ -14,10 +14,10 @@ import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
14
14
  * @experimental
15
15
  * @example
16
16
  * // Basic example:
17
- * await updateFirstRow(rangeRef, [{ value: 1 }, { value: 2 }]);
17
+ * await updateWorkbookRangeFirstRow(rangeRef, [{ value: 1 }, { value: 2 }]);
18
18
  *
19
19
  * // Advanced example with cell formatting:
20
- * await updateRows(rangeRef, [
20
+ * await updateWorkbookRangeFirstRow(rangeRef, [
21
21
  * { value: "Column A", style: { alignment: { horizontal: "Right" }, font: { bold: true } } },
22
22
  * { value: "Column B", style: { alignment: { horizontal: "Right" }, font: { bold: true } } }
23
23
  * ]);
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Update first row in a given workbook range.
4
- * @module updateFirstRow
4
+ * @module updateWorkbookRangeFirstRow
5
5
  * @category Tasks
6
6
  * @experimental
7
7
  */
@@ -19,10 +19,10 @@ const updateWorkbookRangeRows_ts_1 = __importDefault(require("./updateWorkbookRa
19
19
  * @experimental
20
20
  * @example
21
21
  * // Basic example:
22
- * await updateFirstRow(rangeRef, [{ value: 1 }, { value: 2 }]);
22
+ * await updateWorkbookRangeFirstRow(rangeRef, [{ value: 1 }, { value: 2 }]);
23
23
  *
24
24
  * // Advanced example with cell formatting:
25
- * await updateRows(rangeRef, [
25
+ * await updateWorkbookRangeFirstRow(rangeRef, [
26
26
  * { value: "Column A", style: { alignment: { horizontal: "Right" }, font: { bold: true } } },
27
27
  * { value: "Column B", style: { alignment: { horizontal: "Right" }, font: { bold: true } } }
28
28
  * ]);
@@ -9,18 +9,27 @@ import type { WorkbookRangeRef } from "../models/WorkbookRange.ts";
9
9
  * @experimental
10
10
  * @example
11
11
  * // Basic example:
12
- * await updateRows(rangeRef, [
12
+ * await updateWorkbookRangeRows(rangeRef, [
13
13
  * [{ value: 1 }, { value: 2 }],
14
14
  * [{ value: 3 }, { value: 4 }],
15
15
  * [{ value: 5 }, { value: 6 }],
16
16
  * ]);
17
17
  *
18
18
  * // Advanced example with cell formatting:
19
- * await updateRows(rangeRef, [
20
- * [{ value: "Column A", style: { alignment: { horizontal: "Right" }, font: { bold: true } } }, { value: "Column B", style: { alignment: { horizontal: "Right" }, font: { bold: true } } }],
21
- * [{ value: 1, format: accountingCellFormat }, { value: "A" }],
22
- * [{ value: 2, format: accountingCellFormat }, { value: "B" }],
23
- * ]);
19
+ * await updateWorkbookRangeRows(rangeRef, [
20
+ * [
21
+ * { value: "Column A", alignment: { horizontal: "Right" }, font: { bold: true, color: "#ffffff" as Color }, fill: { color: "#000000" as Color } },
22
+ * { value: "Column B", alignment: { horizontal: "Right" }, font: { bold: true, color: "#ffffff" as Color }, fill: { color: "#000000" as Color } },
23
+ * ],
24
+ * [
25
+ * { value: 1, format: accountingCellFormat },
26
+ * { value: "A" },
27
+ * ],
28
+ * [
29
+ * { value: 2, format: accountingCellFormat },
30
+ * { value: "B" }],
31
+ * ],
32
+ * );
24
33
  */
25
34
  export default function updateWorkbookRangeRows(originRef: WorkbookRangeRef, cells: Iterable<Partial<Cell>[]> | AsyncIterable<Partial<Cell>[]>, maxCellsPerOperation?: number | null): Promise<void>;
26
35
  //# sourceMappingURL=updateWorkbookRangeRows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateWorkbookRangeRows.d.ts","sourceRoot":"","sources":["../../../src/tasks/updateWorkbookRangeRows.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAA8B,uBAAuB,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,oBAAoB,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/M"}
1
+ {"version":3,"file":"updateWorkbookRangeRows.d.ts","sourceRoot":"","sources":["../../../src/tasks/updateWorkbookRangeRows.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,wBAA8B,uBAAuB,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,oBAAoB,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/M"}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.default = updateWorkbookRangeRows;
7
7
  /**
8
8
  * Update rows in a given workbook range.
9
- * @module updateRows
9
+ * @module updateWorkbookRangeRows
10
10
  * @category Tasks
11
11
  * @experimental
12
12
  */
@@ -30,18 +30,27 @@ const stringCaseConversion_ts_1 = require("../services/stringCaseConversion.js")
30
30
  * @experimental
31
31
  * @example
32
32
  * // Basic example:
33
- * await updateRows(rangeRef, [
33
+ * await updateWorkbookRangeRows(rangeRef, [
34
34
  * [{ value: 1 }, { value: 2 }],
35
35
  * [{ value: 3 }, { value: 4 }],
36
36
  * [{ value: 5 }, { value: 6 }],
37
37
  * ]);
38
38
  *
39
39
  * // Advanced example with cell formatting:
40
- * await updateRows(rangeRef, [
41
- * [{ value: "Column A", style: { alignment: { horizontal: "Right" }, font: { bold: true } } }, { value: "Column B", style: { alignment: { horizontal: "Right" }, font: { bold: true } } }],
42
- * [{ value: 1, format: accountingCellFormat }, { value: "A" }],
43
- * [{ value: 2, format: accountingCellFormat }, { value: "B" }],
44
- * ]);
40
+ * await updateWorkbookRangeRows(rangeRef, [
41
+ * [
42
+ * { value: "Column A", alignment: { horizontal: "Right" }, font: { bold: true, color: "#ffffff" as Color }, fill: { color: "#000000" as Color } },
43
+ * { value: "Column B", alignment: { horizontal: "Right" }, font: { bold: true, color: "#ffffff" as Color }, fill: { color: "#000000" as Color } },
44
+ * ],
45
+ * [
46
+ * { value: 1, format: accountingCellFormat },
47
+ * { value: "A" },
48
+ * ],
49
+ * [
50
+ * { value: 2, format: accountingCellFormat },
51
+ * { value: "B" }],
52
+ * ],
53
+ * );
45
54
  */
46
55
  async function updateWorkbookRangeRows(originRef, cells, maxCellsPerOperation = null) {
47
56
  let maxRowsPerOperation = maxCellsPerOperation;
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Automated conversion of rows to objects and vice versa based on defined mapping rules.
3
+ * @module objectMapping
4
+ * @category Services
5
+ */
6
+ import type { Cell } from "../models/Cell.ts";
7
+ import type { ColumnName, ColumnOffset } from "../models/Column.ts";
8
+ /**
9
+ * Defines rules for mapping between spreadsheet rows and object properties.
10
+ * @template T Object type to map to/from.
11
+ */
12
+ export type ObjectMapping<T> = {
13
+ [K in keyof T]-?: {
14
+ /**
15
+ * Pattern to match a column heading for mapping to the object property.
16
+ * If a string is provided, it will be used as the column name.
17
+ */
18
+ columnPattern: RegExp;
19
+ /**
20
+ * Decodes a cell to an object property value.
21
+ * @param cell Cell to decode.
22
+ * @returns Decoded property value.
23
+ * @remarks If omitted, the cell's `value` (not `text`) will be used without conversion.
24
+ * @example
25
+ * (cell: Cell) => Number.parseFloat(cell.value.toString()) // Convert string number to number
26
+ */
27
+ decode?: (cell: Cell) => T[K];
28
+ /**
29
+ * Encodes an object property value to a cell.
30
+ * @param prop Property value to encode.
31
+ * @returns Encoded cell.
32
+ * @remarks If omitted, the cell will be created with the `value` property set to the property value.
33
+ * @example
34
+ * (prop: number) => ({ value: prop.toString(), ... }) // Convert number to string cell value
35
+ */
36
+ encode?: (prop: T[K]) => Cell;
37
+ };
38
+ };
39
+ /**
40
+ * Resolved mapping from object properties to column offsets and encode/decode functions.
41
+ * @template T Object type being mapped.
42
+ */
43
+ export type ResolvedObjectMapping<T> = {
44
+ [K in keyof T]-?: {
45
+ columnOffset: ColumnOffset;
46
+ decode: (cell: Cell) => T[K];
47
+ encode: (prop: T[K]) => Cell;
48
+ };
49
+ };
50
+ /**
51
+ * Converts spreadsheet rows to objects using the first row as a header.
52
+ * @template T The object type to yield.
53
+ * @param rows Iterable or async iterable of cell arrays (rows).
54
+ * @param rules Mapping rules for converting columns to object properties.
55
+ * @yields Objects of type T, one for each data row.
56
+ */
57
+ export declare function rowsToObjectsWithHeader<T>(rows: Iterable<Cell[]> | AsyncIterable<Cell[]>, rules: ObjectMapping<T>): AsyncIterable<T>;
58
+ /**
59
+ * Creates a mapping from a header row to object properties based on provided rules.
60
+ * @template T The object type being mapped.
61
+ * @param headerRow The header row, used to determine column offsets.
62
+ * @param rules The mapping rules for converting cells to object properties.
63
+ * @returns The resolved mapping for use in row/object conversion.
64
+ * @throws {InvalidArgumentError} If a column matching a pattern is not found in the header row.
65
+ */
66
+ export declare function createObjectMapping<T>(headerRow: (ColumnName | Cell)[], rules: ObjectMapping<T>): ResolvedObjectMapping<T>;
67
+ /**
68
+ * Converts spreadsheet rows to objects using a provided mapping.
69
+ * @template T The object type to yield.
70
+ * @param rows Iterable or async iterable of cell arrays (rows).
71
+ * @param mapping The resolved mapping for row/object conversion.
72
+ * @yields Objects of type T, one for each row.
73
+ */
74
+ export declare function rowsToObjects<T>(rows: Iterable<Cell[]> | AsyncIterable<Cell[]>, mapping: ResolvedObjectMapping<T>): AsyncIterable<T>;
75
+ /**
76
+ * Converts objects to spreadsheet rows using a provided mapping.
77
+ * @template T The object type to convert.
78
+ * @param objects Iterable or async iterable of objects.
79
+ * @param mapping The resolved mapping for object/row conversion.
80
+ * @yields Arrays of partial cells, one for each object.
81
+ */
82
+ export declare function objectsToRows<T>(objects: Iterable<T> | AsyncIterable<T>, mapping: ResolvedObjectMapping<T>): AsyncIterable<Partial<Cell>[]>;
83
+ /**
84
+ * Converts a row of cells to an object using the provided mapping.
85
+ * @template T The object type to return.
86
+ * @param cells The array of cells representing a row.
87
+ * @param rules The resolved mapping for row/object conversion.
88
+ * @returns The object of type T.
89
+ * @throws {InvalidArgumentError} If a required column is missing in the row.
90
+ */
91
+ export declare function rowToObject<T>(cells: Cell[], rules: ResolvedObjectMapping<T>): T;
92
+ /**
93
+ * Converts an object to a row of cells using the provided mapping.
94
+ * @template T The object type to convert.
95
+ * @param record The object to convert.
96
+ * @param mapper The resolved mapping for object/row conversion.
97
+ * @returns An array of partial cells representing the row.
98
+ */
99
+ export declare function objectToRow<T>(record: T, mapper: ResolvedObjectMapping<T>): Partial<Cell>[];
100
+ //# sourceMappingURL=objectMapping.d.ts.map