@nfdi4plants/arctrl 2.0.0-beta.1 → 2.0.0-beta.8
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/ARC.js +12 -8
- package/Contract/ArcAssay.js +4 -4
- package/Contract/ArcStudy.js +3 -3
- package/Contract/Datamap.js +1 -1
- package/Contract/ValidationPackagesConfig.js +95 -0
- package/Core/ArcTypes.js +4 -4
- package/Core/Conversion.js +13 -13
- package/Core/DataContext.js +53 -6
- package/Core/{Table/DataMap.js → DataMap.js} +34 -22
- package/Core/Process/Component.js +15 -5
- package/Core/Process/FactorValue.js +14 -5
- package/Core/Process/MaterialAttributeValue.js +14 -5
- package/Core/Process/ProcessParameterValue.js +11 -2
- package/Core/Table/CompositeCell.js +12 -23
- package/Core/{Process/Value.js → Value.js} +9 -9
- package/Json/Assay.js +10 -9
- package/Json/{Process/Data.js → Data.js} +17 -17
- package/Json/{Process/DataFile.js → DataFile.js} +9 -9
- package/Json/DataMap/DataContext.js +30 -0
- package/Json/DataMap/DataMap.js +25 -0
- package/Json/Encode.js +10 -1
- package/Json/Process/Component.js +1 -1
- package/Json/Process/FactorValue.js +1 -1
- package/Json/Process/MaterialAttributeValue.js +1 -1
- package/Json/Process/ProcessInput.js +1 -1
- package/Json/Process/ProcessOutput.js +1 -1
- package/Json/Process/ProcessParameterValue.js +2 -2
- package/Json/Process/Value.js +3 -3
- package/Json/{Process/PropertyValue.js → PropertyValue.js} +30 -21
- package/Json/Study.js +9 -8
- package/Json/Table/CompositeCell.js +1 -1
- package/Json/context/rocrate/isa_data_context.js +2 -2
- package/Json/context/rocrate/isa_investigation_context.js +1 -1
- package/Json/context/rocrate/property_value_context.js +1 -1
- package/Spreadsheet/AnnotationTable/ArcTable.js +5 -5
- package/Spreadsheet/AnnotationTable/CompositeColumn.js +10 -8
- package/Spreadsheet/ArcAssay.js +32 -16
- package/Spreadsheet/ArcInvestigation.js +2 -2
- package/Spreadsheet/ArcStudy.js +26 -10
- package/Spreadsheet/DataMap.js +2 -2
- package/Spreadsheet/DataMapTable/DataMapColumn.js +1 -1
- package/Spreadsheet/DataMapTable/DataMapHeader.js +1 -1
- package/Spreadsheet/DataMapTable/DataMapTable.js +8 -8
- package/Spreadsheet/Metadata/SparseTable.js +7 -7
- package/Spreadsheet/Template.js +2 -2
- package/ValidationPackages/ValidationPackage.js +54 -0
- package/ValidationPackages/ValidationPackagesConfig.js +55 -0
- package/Xlsx.js +9 -9
- package/Yaml/Encode.js +8 -0
- package/Yaml/ValidationPackage.js +47 -0
- package/Yaml/ValidationPackagesConfig.js +48 -0
- package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsSpreadsheet.fableproj +1 -0
- package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsWorksheet.fs +4 -0
- package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsWorksheet.fs.js +9 -1
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Cell.fs +45 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Cell.fs.js +38 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Column.fs +28 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Column.fs.js +24 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Row.fs +28 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Row.fs.js +24 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Workbook.fs +33 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Workbook.fs.js +35 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Worksheet.fs +148 -0
- package/fable_modules/FsSpreadsheet.6.2.0/Json/Worksheet.fs.js +109 -0
- package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/obj/Release/netstandard2.0/FsSpreadsheet.AssemblyInfo.fs +3 -3
- package/fable_modules/YAMLicious.0.0.1/Decode.fs +374 -0
- package/fable_modules/YAMLicious.0.0.1/Decode.fs.js +1684 -0
- package/fable_modules/YAMLicious.0.0.1/Encode.fs +148 -0
- package/fable_modules/YAMLicious.0.0.1/Encode.fs.js +74 -0
- package/fable_modules/YAMLicious.0.0.1/Interop/JsInterop.fs +14 -0
- package/fable_modules/YAMLicious.0.0.1/Interop/JsInterop.fs.js +11 -0
- package/fable_modules/YAMLicious.0.0.1/Interop/PyInterop.fs +9 -0
- package/fable_modules/YAMLicious.0.0.1/Library.fs +138 -0
- package/fable_modules/YAMLicious.0.0.1/Library.fs.js +7 -0
- package/fable_modules/YAMLicious.0.0.1/Persil.fs +86 -0
- package/fable_modules/YAMLicious.0.0.1/Persil.fs.js +49 -0
- package/fable_modules/YAMLicious.0.0.1/Preprocessing.fs +59 -0
- package/fable_modules/YAMLicious.0.0.1/Preprocessing.fs.js +102 -0
- package/fable_modules/YAMLicious.0.0.1/Reader.fs +295 -0
- package/fable_modules/YAMLicious.0.0.1/Reader.fs.js +530 -0
- package/fable_modules/YAMLicious.0.0.1/Regex.fs +108 -0
- package/fable_modules/YAMLicious.0.0.1/Regex.fs.js +19 -0
- package/fable_modules/YAMLicious.0.0.1/RegexActivePatterns.fs +166 -0
- package/fable_modules/YAMLicious.0.0.1/RegexActivePatterns.fs.js +225 -0
- package/fable_modules/YAMLicious.0.0.1/Writer.fs +84 -0
- package/fable_modules/YAMLicious.0.0.1/Writer.fs.js +161 -0
- package/fable_modules/YAMLicious.0.0.1/YAMLicious.fableproj +39 -0
- package/fable_modules/YAMLicious.0.0.1/YAMLiciousTypes.fs +82 -0
- package/fable_modules/YAMLicious.0.0.1/YAMLiciousTypes.fs.js +130 -0
- package/fable_modules/YAMLicious.0.0.1/obj/Debug/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs +3 -0
- package/fable_modules/YAMLicious.0.0.1/obj/Debug/netstandard2.0/YAMLicious.AssemblyInfo.fs +19 -0
- package/fable_modules/YAMLicious.0.0.1/obj/Release/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs +3 -0
- package/fable_modules/YAMLicious.0.0.1/obj/Release/netstandard2.0/YAMLicious.AssemblyInfo.fs +19 -0
- package/fable_modules/project_cracked.json +1 -1
- package/index.js +1 -0
- package/package.json +1 -1
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Cell.fs +0 -23
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Cell.fs.js +0 -21
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Row.fs +0 -23
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Row.fs.js +0 -19
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Workbook.fs +0 -20
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Workbook.fs.js +0 -21
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Worksheet.fs +0 -49
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Worksheet.fs.js +0 -44
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Cells/FsCell.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Cells/FsCell.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Cells/FsCellsCollection.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Cells/FsCellsCollection.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/CellBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/CellBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/ColumnBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/ColumnBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/DSL.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/DSL.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Expression.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Expression.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Operators.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Operators.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/RowBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/RowBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/SheetBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/SheetBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/TableBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/TableBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Transform.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Transform.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Types.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/Types.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/WorkbookBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/DSL/WorkbookBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsAddress.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsAddress.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsColumn.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsColumn.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsRow.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsRow.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsWorkbook.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/FsWorkbook.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Json/Table.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Json/Table.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Json/Value.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Json/Value.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRange.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRange.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeAddress.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeAddress.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeBase.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeBase.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeColumn.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeColumn.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeRow.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Ranges/FsRangeRow.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/SheetBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/SheetBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Tables/FsTable.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Tables/FsTable.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Tables/FsTableField.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Tables/FsTableField.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Tables/FsTableRow.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/Tables/FsTableRow.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/obj/Debug/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/obj/Debug/netstandard2.0/FsSpreadsheet.AssemblyInfo.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.6.1.2 → FsSpreadsheet.6.2.0}/obj/Release/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { seq } from "../../Thoth.Json.Core.0.2.1/Encode.fs.js";
|
|
2
|
+
import { iterate, empty, isEmpty, append, singleton, collect, map, delay, toList } from "../../fable-library-js.4.16.0/Seq.js";
|
|
3
|
+
import { decode as decode_1, encode, encodeNoNumbers } from "./Row.fs.js";
|
|
4
|
+
import { FsCellsCollection__TryGetCell_Z37302880 } from "../Cells/FsCellsCollection.fs.js";
|
|
5
|
+
import { FsCell } from "../Cells/FsCell.fs.js";
|
|
6
|
+
import { rangeDouble } from "../../fable-library-js.4.16.0/Range.js";
|
|
7
|
+
import { Json } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
8
|
+
import { decode, encode as encode_1 } from "./Table.fs.js";
|
|
9
|
+
import { seq as seq_1, string, object } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
10
|
+
import { defaultArg } from "../../fable-library-js.4.16.0/Option.js";
|
|
11
|
+
import { FsWorksheet } from "../FsWorksheet.fs.js";
|
|
12
|
+
import { decode as decode_2, encode as encode_2, encodeNoNumbers as encodeNoNumbers_1 } from "./Column.fs.js";
|
|
13
|
+
|
|
14
|
+
export function encodeRows(noNumbering, sheet) {
|
|
15
|
+
sheet.RescanRows();
|
|
16
|
+
const jRows = noNumbering ? seq(toList(delay(() => map((r) => encodeNoNumbers(toList(delay(() => collect((c) => {
|
|
17
|
+
const matchValue = FsCellsCollection__TryGetCell_Z37302880(sheet.CellCollection, r, c);
|
|
18
|
+
return (matchValue == null) ? singleton(new FsCell("")) : singleton(matchValue);
|
|
19
|
+
}, rangeDouble(1, 1, sheet.MaxColumnIndex))))), rangeDouble(1, 1, sheet.MaxRowIndex))))) : seq(map(encode, sheet.Rows));
|
|
20
|
+
return new Json(5, [toList(delay(() => append(singleton(["name", new Json(0, [sheet.Name])]), delay(() => append(!isEmpty(sheet.Tables) ? singleton(["tables", seq(map(encode_1, sheet.Tables))]) : empty(), delay(() => singleton(["rows", jRows])))))))]);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const decodeRows = object((builder) => {
|
|
24
|
+
let arg_5, objectArg_2;
|
|
25
|
+
let rowIndex = 0;
|
|
26
|
+
let n;
|
|
27
|
+
const objectArg = builder.Required;
|
|
28
|
+
n = objectArg.Field("name", string);
|
|
29
|
+
let ts;
|
|
30
|
+
const arg_3 = seq_1(decode);
|
|
31
|
+
const objectArg_1 = builder.Optional;
|
|
32
|
+
ts = objectArg_1.Field("tables", arg_3);
|
|
33
|
+
const rs = defaultArg((arg_5 = seq_1(decode_1), (objectArg_2 = builder.Optional, objectArg_2.Field("rows", arg_5))), empty());
|
|
34
|
+
const sheet = new FsWorksheet(n);
|
|
35
|
+
iterate((tupledArg) => {
|
|
36
|
+
const rowI = tupledArg[0];
|
|
37
|
+
let colIndex = 0;
|
|
38
|
+
const rowI_1 = ((rowI == null) ? (rowIndex + 1) : rowI) | 0;
|
|
39
|
+
rowIndex = (rowI_1 | 0);
|
|
40
|
+
const r = sheet.Row(rowI_1);
|
|
41
|
+
iterate((cell) => {
|
|
42
|
+
let colI;
|
|
43
|
+
const matchValue = cell.ColumnNumber | 0;
|
|
44
|
+
colI = ((matchValue === 0) ? (colIndex + 1) : matchValue);
|
|
45
|
+
colIndex = (colI | 0);
|
|
46
|
+
const c = r.Item(colI);
|
|
47
|
+
c.Value = cell.Value;
|
|
48
|
+
c.DataType = cell.DataType;
|
|
49
|
+
}, tupledArg[1]);
|
|
50
|
+
}, rs);
|
|
51
|
+
if (ts == null) {
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
iterate((t) => {
|
|
55
|
+
sheet.AddTable(t);
|
|
56
|
+
}, ts);
|
|
57
|
+
}
|
|
58
|
+
return sheet;
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export function encodeColumns(noNumbering, sheet) {
|
|
62
|
+
sheet.RescanRows();
|
|
63
|
+
const jColumns = noNumbering ? seq(toList(delay(() => map((c) => encodeNoNumbers_1(toList(delay(() => collect((r) => {
|
|
64
|
+
const matchValue = FsCellsCollection__TryGetCell_Z37302880(sheet.CellCollection, r, c);
|
|
65
|
+
return (matchValue == null) ? singleton(new FsCell("")) : singleton(matchValue);
|
|
66
|
+
}, rangeDouble(1, 1, sheet.MaxRowIndex))))), rangeDouble(1, 1, sheet.MaxColumnIndex))))) : seq(map(encode_2, sheet.Columns));
|
|
67
|
+
return new Json(5, [toList(delay(() => append(singleton(["name", new Json(0, [sheet.Name])]), delay(() => append(!isEmpty(sheet.Tables) ? singleton(["tables", seq(map(encode_1, sheet.Tables))]) : empty(), delay(() => singleton(["columns", jColumns])))))))]);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const decodeColumns = object((builder) => {
|
|
71
|
+
let colIndex = 0;
|
|
72
|
+
let n;
|
|
73
|
+
const objectArg = builder.Required;
|
|
74
|
+
n = objectArg.Field("name", string);
|
|
75
|
+
let ts;
|
|
76
|
+
const arg_3 = seq_1(decode);
|
|
77
|
+
const objectArg_1 = builder.Optional;
|
|
78
|
+
ts = objectArg_1.Field("tables", arg_3);
|
|
79
|
+
let cs;
|
|
80
|
+
const arg_5 = seq_1(decode_2);
|
|
81
|
+
const objectArg_2 = builder.Required;
|
|
82
|
+
cs = objectArg_2.Field("columns", arg_5);
|
|
83
|
+
const sheet = new FsWorksheet(n);
|
|
84
|
+
iterate((tupledArg) => {
|
|
85
|
+
const colI = tupledArg[0];
|
|
86
|
+
let rowIndex = 0;
|
|
87
|
+
const colI_1 = ((colI == null) ? (colIndex + 1) : colI) | 0;
|
|
88
|
+
colIndex = (colI_1 | 0);
|
|
89
|
+
const col = sheet.Column(colI_1);
|
|
90
|
+
iterate((cell) => {
|
|
91
|
+
let rowI;
|
|
92
|
+
const matchValue = cell.RowNumber | 0;
|
|
93
|
+
rowI = ((matchValue === 0) ? (rowIndex + 1) : matchValue);
|
|
94
|
+
rowIndex = (rowI | 0);
|
|
95
|
+
const c = col.Item(rowIndex);
|
|
96
|
+
c.Value = cell.Value;
|
|
97
|
+
c.DataType = cell.DataType;
|
|
98
|
+
}, tupledArg[1]);
|
|
99
|
+
}, cs);
|
|
100
|
+
if (ts == null) {
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
iterate((t) => {
|
|
104
|
+
sheet.AddTable(t);
|
|
105
|
+
}, ts);
|
|
106
|
+
}
|
|
107
|
+
return sheet;
|
|
108
|
+
});
|
|
109
|
+
|
|
@@ -10,10 +10,10 @@ open System.Reflection
|
|
|
10
10
|
[<assembly: System.Reflection.AssemblyCompanyAttribute("Heinrich Lukas Weil, Oliver Maus, Kevin Schneider, Kevin Frey, Timo Mühlhaus")>]
|
|
11
11
|
[<assembly: System.Reflection.AssemblyConfigurationAttribute("Release")>]
|
|
12
12
|
[<assembly: System.Reflection.AssemblyDescriptionAttribute("Fable compliant Spreadsheet creation and manipulation in FSharp")>]
|
|
13
|
-
[<assembly: System.Reflection.AssemblyFileVersionAttribute("
|
|
14
|
-
[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("
|
|
13
|
+
[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
|
|
14
|
+
[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")>]
|
|
15
15
|
[<assembly: System.Reflection.AssemblyProductAttribute("FsSpreadsheet")>]
|
|
16
16
|
[<assembly: System.Reflection.AssemblyTitleAttribute("FsSpreadsheet")>]
|
|
17
|
-
[<assembly: System.Reflection.AssemblyVersionAttribute("
|
|
17
|
+
[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
|
|
18
18
|
[<assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/CSBiology/FsSpreadsheet")>]
|
|
19
19
|
do()
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/// From YAML
|
|
2
|
+
[<RequireQualifiedAccessAttribute>]
|
|
3
|
+
module YAMLicious.Decode
|
|
4
|
+
|
|
5
|
+
open System
|
|
6
|
+
open System.Collections.Generic
|
|
7
|
+
|
|
8
|
+
open YAMLicious
|
|
9
|
+
open YAMLicious.YAMLiciousTypes
|
|
10
|
+
open Fable.Core
|
|
11
|
+
|
|
12
|
+
[<AutoOpen>]
|
|
13
|
+
module Interop =
|
|
14
|
+
|
|
15
|
+
[<Erase>]
|
|
16
|
+
type IExports =
|
|
17
|
+
abstract Number: obj
|
|
18
|
+
|
|
19
|
+
[<ImportAll("numbers")>]
|
|
20
|
+
let numbers: IExports = nativeOnly
|
|
21
|
+
|
|
22
|
+
[<Global; Emit("list")>]
|
|
23
|
+
let pyList: obj = nativeOnly
|
|
24
|
+
|
|
25
|
+
[<Global; Emit("dict")>]
|
|
26
|
+
let pyDict: obj = nativeOnly
|
|
27
|
+
|
|
28
|
+
[<Global; Emit("int")>]
|
|
29
|
+
let pyInt: obj = nativeOnly
|
|
30
|
+
|
|
31
|
+
[<Global; Emit("bool")>]
|
|
32
|
+
let pyBool: obj = nativeOnly
|
|
33
|
+
|
|
34
|
+
module Helper =
|
|
35
|
+
|
|
36
|
+
let inline raiseInvalidArg (name: string) (message: string) wrongV =
|
|
37
|
+
invalidArg name (sprintf "%s: %A" message wrongV)
|
|
38
|
+
|
|
39
|
+
//let isInt (value: string) =
|
|
40
|
+
// #if FABLE_COMPILER_JAVASCRIPT || FABLE_COMPILER_TYPESCRIPT
|
|
41
|
+
// JsInterop.isInt value
|
|
42
|
+
// #else
|
|
43
|
+
// match System.Int32.TryParse value with
|
|
44
|
+
// | true, _ -> true
|
|
45
|
+
// | false, _ -> false
|
|
46
|
+
// #endif
|
|
47
|
+
|
|
48
|
+
//let isFloat (value: string) =
|
|
49
|
+
// #if FABLE_COMPILER_JAVASCRIPT || FABLE_COMPILER_TYPESCRIPT
|
|
50
|
+
// JsInterop.isInt value
|
|
51
|
+
// #else
|
|
52
|
+
// match System.Double.TryParse value with
|
|
53
|
+
// | true, _ -> true
|
|
54
|
+
// | false, _ -> false
|
|
55
|
+
// #endif
|
|
56
|
+
|
|
57
|
+
let isString (value: string) =
|
|
58
|
+
#if FABLE_COMPILER_JAVASCRIPT || FABLE_COMPILER_TYPESCRIPT
|
|
59
|
+
JsInterop.isString value
|
|
60
|
+
#endif
|
|
61
|
+
#if FABLE_COMPILER_PYTHON
|
|
62
|
+
YAMLicious.PyInterop.isString value
|
|
63
|
+
#endif
|
|
64
|
+
#if !FABLE_COMPILER
|
|
65
|
+
match System.Char.TryParse value with
|
|
66
|
+
| true, _ -> true
|
|
67
|
+
| false, _ -> false
|
|
68
|
+
#endif
|
|
69
|
+
|
|
70
|
+
open Helper
|
|
71
|
+
let int (value: YAMLElement) : int =
|
|
72
|
+
match value with
|
|
73
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
74
|
+
match System.Int32.TryParse v.Value with
|
|
75
|
+
| true, v -> v
|
|
76
|
+
| false, _ -> raiseInvalidArg "value" "Expected an int" v.Value
|
|
77
|
+
| _ -> raiseInvalidArg "value" "Expected an YAMLElement.Value" value
|
|
78
|
+
|
|
79
|
+
let float (value: YAMLElement) : float =
|
|
80
|
+
let Culture = System.Globalization.CultureInfo.InvariantCulture
|
|
81
|
+
match value with
|
|
82
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
83
|
+
#if FABLE_COMPILER
|
|
84
|
+
match System.Double.TryParse(v.Value) with // numberstyle and culture return not implemented warning
|
|
85
|
+
#else
|
|
86
|
+
match System.Double.TryParse(v.Value, System.Globalization.NumberStyles.Float, Culture) with
|
|
87
|
+
#endif
|
|
88
|
+
| true, v -> float v
|
|
89
|
+
| false, _ -> raiseInvalidArg "value" "Expected an int" v.Value
|
|
90
|
+
| _ -> raiseInvalidArg "value" "Expected an YAMLElement.Value" value
|
|
91
|
+
|
|
92
|
+
let char (value: YAMLElement) : char =
|
|
93
|
+
match value with
|
|
94
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
95
|
+
match isString v.Value with
|
|
96
|
+
| true -> v.Value.[0]
|
|
97
|
+
| _ -> Helper.raiseInvalidArg "value" "Expected a char" v.Value
|
|
98
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a char" anyElse
|
|
99
|
+
|
|
100
|
+
let bool (value: YAMLElement) : bool =
|
|
101
|
+
match value with
|
|
102
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
103
|
+
match System.Boolean.TryParse v.Value with
|
|
104
|
+
| true, bool -> bool
|
|
105
|
+
| false, _ -> Helper.raiseInvalidArg "value" "Expected a bool" v.Value
|
|
106
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a bool" anyElse
|
|
107
|
+
|
|
108
|
+
let map (keyDecoder: string -> 'a) (valueDecoder: YAMLElement -> 'b) (value: YAMLElement) : Map<'a, 'b> =
|
|
109
|
+
match value with
|
|
110
|
+
| YAMLElement.Object v ->
|
|
111
|
+
v |> List.map (fun x ->
|
|
112
|
+
match x with
|
|
113
|
+
| YAMLElement.Mapping (k, v) -> (keyDecoder k.Value, valueDecoder v)
|
|
114
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a mapping" x
|
|
115
|
+
) |> Map.ofList
|
|
116
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a map" anyElse
|
|
117
|
+
|
|
118
|
+
let dict (keyDecoder: string -> 'a) (valueDecoder: YAMLElement -> 'b) (value: YAMLElement) : Dictionary<'a, 'b> =
|
|
119
|
+
match value with
|
|
120
|
+
| YAMLElement.Object v ->
|
|
121
|
+
v |> List.map (fun x ->
|
|
122
|
+
match x with
|
|
123
|
+
| YAMLElement.Mapping (k, v) -> (keyDecoder k.Value, valueDecoder v)
|
|
124
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a mapping" anyElse
|
|
125
|
+
) |> Map |> Dictionary
|
|
126
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a dictionary" anyElse
|
|
127
|
+
|
|
128
|
+
let datetime (value: YAMLElement) : DateTime =
|
|
129
|
+
match value with
|
|
130
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
131
|
+
match System.DateTime.TryParse(v.Value) with
|
|
132
|
+
| true, dateTime -> dateTime
|
|
133
|
+
| false, _ -> Helper.raiseInvalidArg "value" "Expected a DateTime" v.Value
|
|
134
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a DateTime" anyElse
|
|
135
|
+
|
|
136
|
+
let datetimeOffset (value: YAMLElement) : DateTimeOffset =
|
|
137
|
+
match value with
|
|
138
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
139
|
+
match System.DateTimeOffset.TryParse(v.Value) with
|
|
140
|
+
| true, dateTimeOffset -> dateTimeOffset
|
|
141
|
+
| false, _ -> Helper.raiseInvalidArg "value" "Expected a DateTimeOffset" v.Value
|
|
142
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a DateTimeOffset" anyElse
|
|
143
|
+
|
|
144
|
+
let option (decoder: YAMLElement -> 'a) (value: YAMLElement) : 'a option =
|
|
145
|
+
match value with
|
|
146
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] ->
|
|
147
|
+
match v.Value with
|
|
148
|
+
| YAML_NULL -> None
|
|
149
|
+
| _ -> Some (decoder value)
|
|
150
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected an option" anyElse
|
|
151
|
+
|
|
152
|
+
let string (value: YAMLElement) : string =
|
|
153
|
+
match value with
|
|
154
|
+
| YAMLElement.Value v | YAMLElement.Object [YAMLElement.Value v] -> v.Value
|
|
155
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a string" anyElse
|
|
156
|
+
|
|
157
|
+
let tuple2 (decoderA: YAMLElement -> 'a) (decoderB: YAMLElement -> 'b) (value: YAMLElement) : 'a * 'b =
|
|
158
|
+
match value with
|
|
159
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b]] | YAMLElement.Sequence [a; b] -> (decoderA a, decoderB b)
|
|
160
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple2" anyElse
|
|
161
|
+
|
|
162
|
+
let tuple3 (decoderA: YAMLElement -> 'a) (decoderB: YAMLElement -> 'b) (decoderC: YAMLElement -> 'c) (value: YAMLElement) : 'a * 'b * 'c =
|
|
163
|
+
match value with
|
|
164
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b; c]] | YAMLElement.Sequence [a; b; c] -> (decoderA a, decoderB b, decoderC c)
|
|
165
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple3" anyElse
|
|
166
|
+
|
|
167
|
+
let tuple4
|
|
168
|
+
(decoderA: YAMLElement -> 'a)
|
|
169
|
+
(decoderB: YAMLElement -> 'b)
|
|
170
|
+
(decoderC: YAMLElement -> 'c)
|
|
171
|
+
(decoderD: YAMLElement -> 'd)
|
|
172
|
+
(value: YAMLElement)
|
|
173
|
+
: 'a * 'b * 'c * 'd
|
|
174
|
+
=
|
|
175
|
+
match value with
|
|
176
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b; c; d]] | YAMLElement.Sequence [a; b; c; d] -> (decoderA a, decoderB b, decoderC c, decoderD d)
|
|
177
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple4" anyElse
|
|
178
|
+
|
|
179
|
+
let tuple5
|
|
180
|
+
(decoderA: YAMLElement -> 'a)
|
|
181
|
+
(decoderB: YAMLElement -> 'b)
|
|
182
|
+
(decoderC: YAMLElement -> 'c)
|
|
183
|
+
(decoderD: YAMLElement -> 'd)
|
|
184
|
+
(decoderE: YAMLElement -> 'e)
|
|
185
|
+
(value: YAMLElement)
|
|
186
|
+
: 'a * 'b * 'c * 'd * 'e
|
|
187
|
+
=
|
|
188
|
+
match value with
|
|
189
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b; c; d; e]] | YAMLElement.Sequence [a; b; c; d; e] -> (decoderA a, decoderB b, decoderC c, decoderD d, decoderE e)
|
|
190
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple5" anyElse
|
|
191
|
+
|
|
192
|
+
let tuple6
|
|
193
|
+
(decoderA: YAMLElement -> 'a)
|
|
194
|
+
(decoderB: YAMLElement -> 'b)
|
|
195
|
+
(decoderC: YAMLElement -> 'c)
|
|
196
|
+
(decoderD: YAMLElement -> 'd)
|
|
197
|
+
(decoderE: YAMLElement -> 'e)
|
|
198
|
+
(decoderF: YAMLElement -> 'f)
|
|
199
|
+
(value: YAMLElement)
|
|
200
|
+
: 'a * 'b * 'c * 'd * 'e * 'f
|
|
201
|
+
=
|
|
202
|
+
match value with
|
|
203
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b; c; d; e; f]]
|
|
204
|
+
| YAMLElement.Sequence [a; b; c; d; e; f] ->
|
|
205
|
+
(decoderA a, decoderB b, decoderC c, decoderD d, decoderE e, decoderF f)
|
|
206
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple6" anyElse
|
|
207
|
+
|
|
208
|
+
let tuple7
|
|
209
|
+
(decoderA: YAMLElement -> 'a)
|
|
210
|
+
(decoderB: YAMLElement -> 'b)
|
|
211
|
+
(decoderC: YAMLElement -> 'c)
|
|
212
|
+
(decoderD: YAMLElement -> 'd)
|
|
213
|
+
(decoderE: YAMLElement -> 'e)
|
|
214
|
+
(decoderF: YAMLElement -> 'f)
|
|
215
|
+
(decoderG: YAMLElement -> 'g)
|
|
216
|
+
(value: YAMLElement)
|
|
217
|
+
: 'a * 'b * 'c * 'd * 'e * 'f * 'g
|
|
218
|
+
=
|
|
219
|
+
match value with
|
|
220
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b; c; d; e; f; g]]
|
|
221
|
+
| YAMLElement.Sequence [a; b; c; d; e; f; g] ->
|
|
222
|
+
(decoderA a, decoderB b, decoderC c, decoderD d, decoderE e, decoderF f, decoderG g)
|
|
223
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple7" anyElse
|
|
224
|
+
|
|
225
|
+
let tuple8
|
|
226
|
+
(decoderA: YAMLElement -> 'a)
|
|
227
|
+
(decoderB: YAMLElement -> 'b)
|
|
228
|
+
(decoderC: YAMLElement -> 'c)
|
|
229
|
+
(decoderD: YAMLElement -> 'd)
|
|
230
|
+
(decoderE: YAMLElement -> 'e)
|
|
231
|
+
(decoderF: YAMLElement -> 'f)
|
|
232
|
+
(decoderG: YAMLElement -> 'g)
|
|
233
|
+
(decoderH: YAMLElement -> 'h)
|
|
234
|
+
(value: YAMLElement)
|
|
235
|
+
: 'a * 'b * 'c * 'd * 'e * 'f * 'g * 'h
|
|
236
|
+
=
|
|
237
|
+
match value with
|
|
238
|
+
| YAMLElement.Object [YAMLElement.Sequence [a; b; c; d; e; f; g; h]]
|
|
239
|
+
| YAMLElement.Sequence [a; b; c; d; e; f; g; h] ->
|
|
240
|
+
(decoderA a, decoderB b, decoderC c, decoderD d, decoderE e, decoderF f, decoderG g, decoderH h)
|
|
241
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a tuple8" anyElse
|
|
242
|
+
|
|
243
|
+
let list (decoder: YAMLElement -> 'a) (value: YAMLElement) : 'a list =
|
|
244
|
+
match value with
|
|
245
|
+
| YAMLElement.Sequence v | YAMLElement.Object [YAMLElement.Sequence v] ->
|
|
246
|
+
v |> List.map decoder
|
|
247
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a list" anyElse
|
|
248
|
+
|
|
249
|
+
let array (decoder: YAMLElement -> 'a) (value: YAMLElement) : 'a [] =
|
|
250
|
+
match value with
|
|
251
|
+
| YAMLElement.Sequence v | YAMLElement.Object [YAMLElement.Sequence v] ->
|
|
252
|
+
v |> List.map decoder |> List.toArray
|
|
253
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected an array" anyElse
|
|
254
|
+
|
|
255
|
+
let seq (decoder: YAMLElement -> 'a) (value: YAMLElement) : seq<'a> =
|
|
256
|
+
match value with
|
|
257
|
+
| YAMLElement.Sequence v | YAMLElement.Object [YAMLElement.Sequence v] ->
|
|
258
|
+
v |> Seq.map decoder
|
|
259
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a seq" anyElse
|
|
260
|
+
|
|
261
|
+
let resizearray (decoder: YAMLElement -> 'a) (value: YAMLElement) : ResizeArray<'a> =
|
|
262
|
+
match value with
|
|
263
|
+
| YAMLElement.Sequence v | YAMLElement.Object [YAMLElement.Sequence v] ->
|
|
264
|
+
v |> List.map decoder |> ResizeArray
|
|
265
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a resizearray" anyElse
|
|
266
|
+
|
|
267
|
+
let values (decoder: YAMLElement -> 'a) (value: YAMLElement) : 'a list =
|
|
268
|
+
match value with
|
|
269
|
+
| YAMLElement.Sequence v | YAMLElement.Object [YAMLElement.Sequence v] | YAMLElement.Object v ->
|
|
270
|
+
v
|
|
271
|
+
|> List.map (function
|
|
272
|
+
| YAMLElement.Value _ as v -> decoder v
|
|
273
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a values" anyElse
|
|
274
|
+
)
|
|
275
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected a values" anyElse
|
|
276
|
+
|
|
277
|
+
module ObjectHelper =
|
|
278
|
+
|
|
279
|
+
type IRequiredGetter =
|
|
280
|
+
abstract Field: string -> (YAMLElement -> 'a) -> 'a
|
|
281
|
+
//abstract At: List<string> -> Decoder<'a> -> 'a
|
|
282
|
+
//abstract Raw: Decoder<'a> -> 'a
|
|
283
|
+
|
|
284
|
+
type IOptionalGetter =
|
|
285
|
+
abstract Field: string -> (YAMLElement -> 'a) -> 'a option
|
|
286
|
+
//abstract At: List<string> -> Decoder<'a> -> 'a option
|
|
287
|
+
//abstract Raw: Decoder<'a> -> 'a option
|
|
288
|
+
|
|
289
|
+
type IOverflowGetter =
|
|
290
|
+
abstract FieldList: string list -> Dictionary<string, YAMLElement>
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
open ObjectHelper
|
|
294
|
+
|
|
295
|
+
type IGetters =
|
|
296
|
+
abstract Required: IRequiredGetter
|
|
297
|
+
abstract Optional: IOptionalGetter
|
|
298
|
+
abstract Overflow: IOverflowGetter
|
|
299
|
+
|
|
300
|
+
type Getter(ele: YAMLElement) =
|
|
301
|
+
let required =
|
|
302
|
+
{ new IRequiredGetter with
|
|
303
|
+
member _.Field fieldName dec =
|
|
304
|
+
match ele with
|
|
305
|
+
| YAMLElement.Object v ->
|
|
306
|
+
//printfn "[GETTER] IsObject"
|
|
307
|
+
v
|
|
308
|
+
|> List.tryFind (function
|
|
309
|
+
| YAMLElement.Mapping (k, _) ->
|
|
310
|
+
//printfn "[GETTER] IsMapping"
|
|
311
|
+
let equals = k.Value = fieldName
|
|
312
|
+
//printfn "[GETTER] Equals: %A" equals
|
|
313
|
+
equals
|
|
314
|
+
| _ -> false
|
|
315
|
+
)
|
|
316
|
+
|> Option.map (function
|
|
317
|
+
| YAMLElement.Mapping (_, v) ->
|
|
318
|
+
//printfn "[GETTER] Mapping: %A" v
|
|
319
|
+
dec v
|
|
320
|
+
| _ -> Helper.raiseInvalidArg "value" "Expected a mapping" ele
|
|
321
|
+
)
|
|
322
|
+
|> fun x ->
|
|
323
|
+
if x .IsNone then
|
|
324
|
+
Helper.raiseInvalidArg "value" (sprintf "Field not found: %s" fieldName) ele
|
|
325
|
+
else x.Value
|
|
326
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected an object" anyElse
|
|
327
|
+
}
|
|
328
|
+
let optional =
|
|
329
|
+
{ new IOptionalGetter with
|
|
330
|
+
member this.Field (fieldName: string) (dec: YAMLElement -> 'a) =
|
|
331
|
+
match ele with
|
|
332
|
+
| YAMLElement.Object v ->
|
|
333
|
+
v
|
|
334
|
+
|> List.tryFind (function
|
|
335
|
+
| YAMLElement.Mapping (k, _) -> k.Value = fieldName
|
|
336
|
+
| _ -> false
|
|
337
|
+
)
|
|
338
|
+
|> Option.map (function
|
|
339
|
+
| YAMLElement.Mapping (_, v) -> dec v
|
|
340
|
+
| _ -> Helper.raiseInvalidArg "value" "Expected a mapping" ele
|
|
341
|
+
)
|
|
342
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected an object" anyElse
|
|
343
|
+
}
|
|
344
|
+
let overflow =
|
|
345
|
+
{ new IOverflowGetter with
|
|
346
|
+
member this.FieldList (fieldNames: string list) =
|
|
347
|
+
match ele with
|
|
348
|
+
| YAMLElement.Object v ->
|
|
349
|
+
let overflow =
|
|
350
|
+
v
|
|
351
|
+
|> List.filter (function
|
|
352
|
+
| YAMLElement.Mapping (k, _) -> fieldNames |> List.exists (fun x -> x = k.Value)
|
|
353
|
+
| _ -> false
|
|
354
|
+
)
|
|
355
|
+
|> List.map (function
|
|
356
|
+
| YAMLElement.Mapping (k, v) -> (k.Value, v)
|
|
357
|
+
| _ -> Helper.raiseInvalidArg "value" "Expected a mapping" ele
|
|
358
|
+
)
|
|
359
|
+
let dict = new Dictionary<string, YAMLElement>()
|
|
360
|
+
overflow |> List.iter (fun (k, v) -> dict.Add(k, v))
|
|
361
|
+
dict
|
|
362
|
+
| anyElse -> Helper.raiseInvalidArg "value" "Expected an object" anyElse
|
|
363
|
+
}
|
|
364
|
+
interface IGetters with
|
|
365
|
+
member __.Required = required
|
|
366
|
+
member __.Optional = optional
|
|
367
|
+
member __.Overflow = overflow
|
|
368
|
+
|
|
369
|
+
let object (getter: IGetters -> 'a) (value: YAMLElement) : 'a =
|
|
370
|
+
let getterObj = Getter(value) :> IGetters
|
|
371
|
+
getter getterObj
|
|
372
|
+
|
|
373
|
+
let read (yaml: string) =
|
|
374
|
+
Reader.read yaml
|