@nfdi4plants/arctrl 2.0.0-alpha.3 → 2.0.0-alpha.4
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 +110 -15
- package/Contract/ARC.js +9 -1
- package/Contract/Datamap.js +180 -0
- package/Core/ArcTypes.js +147 -120
- package/Core/Conversion.js +99 -67
- package/Core/Data.js +119 -0
- package/Core/{Process/DataFile.js → DataFile.js} +3 -3
- package/Core/Helper/Identifier.js +40 -0
- package/Core/OntologyAnnotation.js +13 -4
- package/Core/Process/ColumnIndex.js +13 -3
- package/Core/Process/ProcessInput.js +5 -5
- package/Core/Process/ProcessOutput.js +5 -5
- package/Core/Process/Value.js +1 -1
- package/Core/Table/ArcTableAux.js +14 -3
- package/Core/Table/CompositeCell.js +67 -10
- package/Core/Table/CompositeColumn.js +9 -0
- package/Core/Table/CompositeHeader.js +58 -68
- package/Core/Table/DataMap.js +166 -0
- package/FileSystem/FileSystemTree.js +18 -4
- package/Json/Assay.js +4 -4
- package/Json/Process/Data.js +56 -18
- package/Json/Process/DataFile.js +5 -5
- package/Json/Process/PropertyValue.js +124 -4
- package/Json/Study.js +4 -4
- package/Json/Table/CompositeCell.js +7 -6
- package/Spreadsheet/AnnotationTable/ArcTable.js +9 -13
- package/Spreadsheet/AnnotationTable/CompositeCell.js +32 -50
- package/Spreadsheet/AnnotationTable/CompositeColumn.js +16 -10
- package/Spreadsheet/AnnotationTable/CompositeHeader.js +262 -143
- package/Spreadsheet/ArcAssay.js +2 -2
- package/Spreadsheet/ArcInvestigation.js +2 -2
- package/Spreadsheet/ArcStudy.js +2 -2
- package/Spreadsheet/DataMap.js +31 -0
- package/Spreadsheet/DataMapTable/DataMapColumn.js +36 -0
- package/Spreadsheet/DataMapTable/DataMapHeader.js +417 -0
- package/Spreadsheet/DataMapTable/DataMapTable.js +98 -0
- package/Spreadsheet/Metadata/Assays.js +2 -2
- package/Spreadsheet/Metadata/SparseTable.js +7 -7
- package/Spreadsheet/Metadata/Study.js +1 -1
- package/Spreadsheet/Template.js +2 -2
- package/Xlsx.js +29 -6
- package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsSpreadsheet.fableproj +9 -3
- package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsWorksheet.fs +1 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Cell.fs +23 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Cell.fs.js +21 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Row.fs +23 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Row.fs.js +19 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Table.fs +24 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Table.fs.js +15 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Value.fs +70 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Value.fs.js +48 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Workbook.fs +20 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Workbook.fs.js +21 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Worksheet.fs +49 -0
- package/fable_modules/FsSpreadsheet.6.1.2/Json/Worksheet.fs.js +44 -0
- package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/obj/Release/netstandard2.0/FsSpreadsheet.AssemblyInfo.fs +3 -3
- package/fable_modules/project_cracked.json +1 -1
- package/package.json +1 -1
- package/Core/Process/Data.js +0 -55
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Cells/FsCell.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Cells/FsCell.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Cells/FsCellsCollection.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Cells/FsCellsCollection.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/CellBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/CellBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/ColumnBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/ColumnBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/DSL.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/DSL.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Expression.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Expression.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Operators.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Operators.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/RowBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/RowBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/SheetBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/SheetBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/TableBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/TableBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Transform.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Transform.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Types.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/Types.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/WorkbookBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/DSL/WorkbookBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsAddress.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsAddress.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsColumn.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsColumn.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsRow.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsRow.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsWorkbook.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsWorkbook.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/FsWorksheet.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRange.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRange.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeAddress.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeAddress.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeBase.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeBase.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeColumn.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeColumn.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeRow.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Ranges/FsRangeRow.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/SheetBuilder.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/SheetBuilder.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Tables/FsTable.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Tables/FsTable.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Tables/FsTableField.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Tables/FsTableField.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Tables/FsTableRow.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/Tables/FsTableRow.fs.js +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/obj/Debug/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/obj/Debug/netstandard2.0/FsSpreadsheet.AssemblyInfo.fs +0 -0
- /package/fable_modules/{FsSpreadsheet.5.1.3 → FsSpreadsheet.6.1.2}/obj/Release/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs +0 -0
package/Xlsx.js
CHANGED
|
@@ -1,18 +1,38 @@
|
|
|
1
|
-
import { toFsWorkbook, fromFsWorkbook } from "./Spreadsheet/
|
|
1
|
+
import { toFsWorkbook, fromFsWorkbook } from "./Spreadsheet/DataMap.js";
|
|
2
2
|
import { class_type } from "./fable_modules/fable-library-js.4.16.0/Reflection.js";
|
|
3
|
+
import { toFsWorkbook as toFsWorkbook_1, fromFsWorkbook as fromFsWorkbook_1 } from "./Spreadsheet/ArcAssay.js";
|
|
3
4
|
import { ARCtrl_ArcStudy__ArcStudy_toFsWorkbook_Static_353D0DB7, ARCtrl_ArcStudy__ArcStudy_fromFsWorkbook_Static_32154C9D } from "./Spreadsheet/ArcStudy.js";
|
|
4
5
|
import { map, unwrap } from "./fable_modules/fable-library-js.4.16.0/Option.js";
|
|
5
6
|
import { ofSeq } from "./fable_modules/fable-library-js.4.16.0/List.js";
|
|
6
|
-
import { toLightFsWorkbook, toFsWorkbook as
|
|
7
|
+
import { toLightFsWorkbook, toFsWorkbook as toFsWorkbook_2, fromFsWorkbook as fromFsWorkbook_2 } from "./Spreadsheet/ArcInvestigation.js";
|
|
7
8
|
|
|
8
|
-
export class
|
|
9
|
+
export class XlsxHelper_DatamapXlsx {
|
|
9
10
|
constructor() {
|
|
10
11
|
}
|
|
11
12
|
fromFsWorkbook(fswb) {
|
|
12
13
|
return fromFsWorkbook(fswb);
|
|
13
14
|
}
|
|
15
|
+
toFsWorkbook(datamap) {
|
|
16
|
+
return toFsWorkbook(datamap);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function XlsxHelper_DatamapXlsx_$reflection() {
|
|
21
|
+
return class_type("ARCtrl.XlsxHelper.DatamapXlsx", void 0, XlsxHelper_DatamapXlsx);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function XlsxHelper_DatamapXlsx_$ctor() {
|
|
25
|
+
return new XlsxHelper_DatamapXlsx();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class XlsxHelper_AssayXlsx {
|
|
29
|
+
constructor() {
|
|
30
|
+
}
|
|
31
|
+
fromFsWorkbook(fswb) {
|
|
32
|
+
return fromFsWorkbook_1(fswb);
|
|
33
|
+
}
|
|
14
34
|
toFsWorkbook(assay) {
|
|
15
|
-
return
|
|
35
|
+
return toFsWorkbook_1(assay);
|
|
16
36
|
}
|
|
17
37
|
}
|
|
18
38
|
|
|
@@ -47,10 +67,10 @@ export class XlsxHelper_InvestigationXlsx {
|
|
|
47
67
|
constructor() {
|
|
48
68
|
}
|
|
49
69
|
fromFsWorkbook(fswb) {
|
|
50
|
-
return
|
|
70
|
+
return fromFsWorkbook_2(fswb);
|
|
51
71
|
}
|
|
52
72
|
toFsWorkbook(investigation) {
|
|
53
|
-
return
|
|
73
|
+
return toFsWorkbook_2(investigation);
|
|
54
74
|
}
|
|
55
75
|
toLightFsWorkbook(investigation) {
|
|
56
76
|
return toLightFsWorkbook(investigation);
|
|
@@ -68,6 +88,9 @@ export function XlsxHelper_InvestigationXlsx_$ctor() {
|
|
|
68
88
|
export class XlsxController {
|
|
69
89
|
constructor() {
|
|
70
90
|
}
|
|
91
|
+
static get Datamap() {
|
|
92
|
+
return new XlsxHelper_DatamapXlsx();
|
|
93
|
+
}
|
|
71
94
|
static get Assay() {
|
|
72
95
|
return new XlsxHelper_AssayXlsx();
|
|
73
96
|
}
|
|
@@ -33,6 +33,12 @@
|
|
|
33
33
|
<Compile Include="DSL\SheetBuilder.fs" />
|
|
34
34
|
<Compile Include="DSL\WorkbookBuilder.fs" />
|
|
35
35
|
<Compile Include="DSL\DSL.fs" />
|
|
36
|
+
<Compile Include="Json\Value.fs" />
|
|
37
|
+
<Compile Include="Json\Cell.fs" />
|
|
38
|
+
<Compile Include="Json\Row.fs" />
|
|
39
|
+
<Compile Include="Json\Table.fs" />
|
|
40
|
+
<Compile Include="Json\Worksheet.fs" />
|
|
41
|
+
<Compile Include="Json\Workbook.fs" />
|
|
36
42
|
<None Include="..\..\docs\img\logo.png" Pack="true" PackagePath="\" />
|
|
37
43
|
</ItemGroup>
|
|
38
44
|
|
|
@@ -48,11 +54,11 @@
|
|
|
48
54
|
</PropertyGroup>
|
|
49
55
|
|
|
50
56
|
<ItemGroup>
|
|
51
|
-
|
|
57
|
+
<PackageReference Include="Thoth.Json.Core" Version="0.2.1" />
|
|
52
58
|
</ItemGroup>
|
|
53
59
|
|
|
54
60
|
<ItemGroup>
|
|
55
|
-
<
|
|
61
|
+
<Content Include="*.fsproj; **\*.fs; **\*.fsi" PackagePath="fable\" />
|
|
56
62
|
</ItemGroup>
|
|
57
|
-
|
|
63
|
+
|
|
58
64
|
</Project>
|
|
@@ -150,6 +150,7 @@ type FsWorksheet (name, ?fsRows, ?fsTables, ?fsCellsCollection) =
|
|
|
150
150
|
/// <summary>
|
|
151
151
|
/// Returns the FsRow at the given FsRangeAddress. If it does not exist, it is created and appended first.
|
|
152
152
|
/// </summary>
|
|
153
|
+
/// <param name="rangeAddress">The range address of the FsRow.</param>
|
|
153
154
|
/// <param name="SkipSearch">If true, the FsRow is created and appended without checking if it already exists.</param>
|
|
154
155
|
member self.RowWithRange(rangeAddress : FsRangeAddress, ?SkipSearch) =
|
|
155
156
|
let skipSearch = defaultArg SkipSearch false
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module FsSpreadsheet.Json.Cell
|
|
2
|
+
|
|
3
|
+
open FsSpreadsheet
|
|
4
|
+
open Thoth.Json.Core
|
|
5
|
+
|
|
6
|
+
[<Literal>]
|
|
7
|
+
let column = "column"
|
|
8
|
+
|
|
9
|
+
[<Literal>]
|
|
10
|
+
let value = "value"
|
|
11
|
+
|
|
12
|
+
let encode (cell:FsCell) =
|
|
13
|
+
Encode.object [
|
|
14
|
+
column, Encode.int cell.ColumnNumber
|
|
15
|
+
value, Value.encode cell.Value
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
let decode rowNumber : Decoder<FsCell> =
|
|
19
|
+
Decode.object (fun builder ->
|
|
20
|
+
let v,dt = builder.Required.Field value (Value.decode)
|
|
21
|
+
let c = builder.Required.Field column Decode.int
|
|
22
|
+
new FsCell(v,dt,FsAddress(rowNumber,c))
|
|
23
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Json } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
2
|
+
import { decode as decode_1, encode as encode_1 } from "./Value.fs.js";
|
|
3
|
+
import { int, object } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
4
|
+
import { FsCell } from "../Cells/FsCell.fs.js";
|
|
5
|
+
import { FsAddress_$ctor_Z37302880 } from "../FsAddress.fs.js";
|
|
6
|
+
|
|
7
|
+
export function encode(cell) {
|
|
8
|
+
let value_1;
|
|
9
|
+
return new Json(5, [[["column", (value_1 = (cell.ColumnNumber | 0), new Json(7, [value_1 >>> 0]))], ["value", encode_1(cell.Value)]]]);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function decode(rowNumber) {
|
|
13
|
+
return object((builder) => {
|
|
14
|
+
let objectArg_1;
|
|
15
|
+
let patternInput;
|
|
16
|
+
const objectArg = builder.Required;
|
|
17
|
+
patternInput = objectArg.Field("value", decode_1);
|
|
18
|
+
return new FsCell(patternInput[0], patternInput[1], FsAddress_$ctor_Z37302880(rowNumber, (objectArg_1 = builder.Required, objectArg_1.Field("column", int))));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module FsSpreadsheet.Json.Row
|
|
2
|
+
|
|
3
|
+
open FsSpreadsheet
|
|
4
|
+
open Thoth.Json.Core
|
|
5
|
+
|
|
6
|
+
[<Literal>]
|
|
7
|
+
let cells = "cells"
|
|
8
|
+
|
|
9
|
+
[<Literal>]
|
|
10
|
+
let number = "number"
|
|
11
|
+
|
|
12
|
+
let encode (row:FsRow) =
|
|
13
|
+
Encode.object [
|
|
14
|
+
number, Encode.int row.Index
|
|
15
|
+
cells, Encode.seq (row.Cells |> Seq.map Cell.encode)
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
let decode : Decoder<int*FsCell seq> =
|
|
19
|
+
Decode.object (fun builder ->
|
|
20
|
+
let n = builder.Required.Field number Decode.int
|
|
21
|
+
let cs = builder.Required.Field cells (Decode.seq (Cell.decode n))
|
|
22
|
+
n,cs
|
|
23
|
+
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Json } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
2
|
+
import { seq } from "../../Thoth.Json.Core.0.2.1/Encode.fs.js";
|
|
3
|
+
import { map } from "../../fable-library-js.4.16.0/Seq.js";
|
|
4
|
+
import { decode as decode_1, encode as encode_1 } from "./Cell.fs.js";
|
|
5
|
+
import { seq as seq_1, int, object } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
6
|
+
|
|
7
|
+
export function encode(row) {
|
|
8
|
+
let value;
|
|
9
|
+
return new Json(5, [[["number", (value = (row.Index | 0), new Json(7, [value >>> 0]))], ["cells", seq(map(encode_1, row.Cells))]]]);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const decode = object((builder) => {
|
|
13
|
+
let arg_3, objectArg_1;
|
|
14
|
+
let n;
|
|
15
|
+
const objectArg = builder.Required;
|
|
16
|
+
n = objectArg.Field("number", int);
|
|
17
|
+
return [n, (arg_3 = seq_1(decode_1(n)), (objectArg_1 = builder.Required, objectArg_1.Field("cells", arg_3)))];
|
|
18
|
+
});
|
|
19
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module FsSpreadsheet.Json.Table
|
|
2
|
+
|
|
3
|
+
open FsSpreadsheet
|
|
4
|
+
open Thoth.Json.Core
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
[<Literal>]
|
|
8
|
+
let name = "name"
|
|
9
|
+
|
|
10
|
+
[<Literal>]
|
|
11
|
+
let range = "range"
|
|
12
|
+
|
|
13
|
+
let encode (sheet:FsTable) =
|
|
14
|
+
Encode.object [
|
|
15
|
+
name, Encode.string sheet.Name
|
|
16
|
+
range, Encode.string sheet.RangeAddress.Range
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
let decode : Decoder<FsTable> =
|
|
20
|
+
Decode.object (fun builder ->
|
|
21
|
+
let n = builder.Required.Field name Decode.string
|
|
22
|
+
let r = builder.Required.Field range Decode.string
|
|
23
|
+
FsTable(n, FsRangeAddress(r))
|
|
24
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Json } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
2
|
+
import { FsRangeAddress_$ctor_Z721C83C5, FsRangeAddress__get_Range } from "../Ranges/FsRangeAddress.fs.js";
|
|
3
|
+
import { FsRangeBase__get_RangeAddress } from "../Ranges/FsRangeBase.fs.js";
|
|
4
|
+
import { string, object } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
5
|
+
import { FsTable } from "../Tables/FsTable.fs.js";
|
|
6
|
+
|
|
7
|
+
export function encode(sheet) {
|
|
8
|
+
return new Json(5, [[["name", new Json(0, [sheet.Name])], ["range", new Json(0, [FsRangeAddress__get_Range(FsRangeBase__get_RangeAddress(sheet))])]]]);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const decode = object((builder) => {
|
|
12
|
+
let objectArg, objectArg_1;
|
|
13
|
+
return new FsTable((objectArg = builder.Required, objectArg.Field("name", string)), FsRangeAddress_$ctor_Z721C83C5((objectArg_1 = builder.Required, objectArg_1.Field("range", string))));
|
|
14
|
+
});
|
|
15
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module FsSpreadsheet.Json.Value
|
|
2
|
+
|
|
3
|
+
open Thoth.Json.Core
|
|
4
|
+
open FsSpreadsheet
|
|
5
|
+
|
|
6
|
+
#if FABLE_COMPILER_PYTHON
|
|
7
|
+
module PyTime =
|
|
8
|
+
|
|
9
|
+
open Fable.Core
|
|
10
|
+
open Fable.Core.PyInterop
|
|
11
|
+
|
|
12
|
+
// Currently in Fable, a created datetime object will contain a timezone. This is not allowed in python xlsx, so we need to remove it.
|
|
13
|
+
// Unfortunately, the timezone object in python is read-only, so we need to create a new datetime object without timezone.
|
|
14
|
+
// For this, we use the fromtimestamp method of the datetime module and convert the timestamp to a new datetime object without timezone.
|
|
15
|
+
|
|
16
|
+
type DateTimeStatic =
|
|
17
|
+
[<Emit("$0.fromtimestamp(timestamp=$1)")>]
|
|
18
|
+
abstract member fromTimeStamp: timestamp:float -> System.DateTime
|
|
19
|
+
|
|
20
|
+
[<Import("datetime", "datetime")>]
|
|
21
|
+
let DateTime : DateTimeStatic = nativeOnly
|
|
22
|
+
|
|
23
|
+
let toUniversalTimePy (dt:System.DateTime) =
|
|
24
|
+
|
|
25
|
+
dt.ToUniversalTime()?timestamp()
|
|
26
|
+
|> DateTime.fromTimeStamp
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
module Decode =
|
|
34
|
+
|
|
35
|
+
let datetime: Decoder<System.DateTime> =
|
|
36
|
+
#if FABLE_COMPILER_PYTHON
|
|
37
|
+
Decode.datetimeLocal |> Decode.map PyTime.toUniversalTimePy
|
|
38
|
+
#else
|
|
39
|
+
{ new Decoder<System.DateTime> with
|
|
40
|
+
member _.Decode(helpers, value) =
|
|
41
|
+
if helpers.isString value then
|
|
42
|
+
match System.DateTime.TryParse(helpers.asString value) with
|
|
43
|
+
| true, datetime -> datetime |> Ok
|
|
44
|
+
| _ -> ("", BadPrimitive("a datetime", value)) |> Error
|
|
45
|
+
else
|
|
46
|
+
("", BadPrimitive("a datetime", value)) |> Error
|
|
47
|
+
}
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
let encode (value : obj) =
|
|
51
|
+
match value with
|
|
52
|
+
| :? string as s -> Encode.string s
|
|
53
|
+
| :? float as f -> Encode.float f
|
|
54
|
+
| :? int as i -> Encode.int i
|
|
55
|
+
| :? bool as b -> Encode.bool b
|
|
56
|
+
| :? System.DateTime as d ->
|
|
57
|
+
d.ToString("O", System.Globalization.CultureInfo.InvariantCulture).Split('+').[0]
|
|
58
|
+
|> Encode.string
|
|
59
|
+
| _ -> Encode.nil
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
let decode =
|
|
64
|
+
Decode.oneOf [
|
|
65
|
+
Decode.bool |> Decode.map (fun b -> b :> obj, DataType.Boolean)
|
|
66
|
+
Decode.int |> Decode.map (fun i -> i :> obj, DataType.Number)
|
|
67
|
+
Decode.float |> Decode.map (fun f -> f :> obj, DataType.Number)
|
|
68
|
+
Decode.datetime |> Decode.map (fun d -> d :> obj, DataType.Date)
|
|
69
|
+
Decode.string |> Decode.map (fun s -> s :> obj, DataType.String)
|
|
70
|
+
]
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { toString, tryParse, minValue } from "../../fable-library-js.4.16.0/Date.js";
|
|
2
|
+
import { FSharpRef } from "../../fable-library-js.4.16.0/Types.js";
|
|
3
|
+
import { FSharpResult$2 } from "../../fable-library-js.4.16.0/Result.js";
|
|
4
|
+
import { Json, ErrorReason$1 } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
5
|
+
import { item } from "../../fable-library-js.4.16.0/Array.js";
|
|
6
|
+
import { string, float, int, bool, map, oneOf } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
7
|
+
import { DataType } from "../Cells/FsCell.fs.js";
|
|
8
|
+
import { ofArray } from "../../fable-library-js.4.16.0/List.js";
|
|
9
|
+
|
|
10
|
+
export const Decode_datetime = {
|
|
11
|
+
Decode(helpers, value) {
|
|
12
|
+
if (helpers.isString(value)) {
|
|
13
|
+
let matchValue;
|
|
14
|
+
let outArg = minValue();
|
|
15
|
+
matchValue = [tryParse(helpers.asString(value), new FSharpRef(() => outArg, (v) => {
|
|
16
|
+
outArg = v;
|
|
17
|
+
})), outArg];
|
|
18
|
+
return matchValue[0] ? (new FSharpResult$2(0, [matchValue[1]])) : (new FSharpResult$2(1, [["", new ErrorReason$1(0, ["a datetime", value])]]));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return new FSharpResult$2(1, [["", new ErrorReason$1(0, ["a datetime", value])]]);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export function encode(value) {
|
|
27
|
+
if (typeof value === "string") {
|
|
28
|
+
return new Json(0, [value]);
|
|
29
|
+
}
|
|
30
|
+
else if (typeof value === "number") {
|
|
31
|
+
return new Json(2, [value]);
|
|
32
|
+
}
|
|
33
|
+
else if (typeof value === "number") {
|
|
34
|
+
return new Json(7, [value >>> 0]);
|
|
35
|
+
}
|
|
36
|
+
else if (typeof value === "boolean") {
|
|
37
|
+
return new Json(4, [value]);
|
|
38
|
+
}
|
|
39
|
+
else if (value instanceof Date) {
|
|
40
|
+
return new Json(0, [item(0, toString(value, "O", {}).split("+"))]);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return new Json(3, []);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const decode = oneOf(ofArray([map((b) => [b, new DataType(1, [])], bool), map((i) => [i, new DataType(2, [])], int), map((f) => [f, new DataType(2, [])], float), map((d_3) => [d_3, new DataType(3, [])], Decode_datetime), map((s) => [s, new DataType(0, [])], string)]));
|
|
48
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module FsSpreadsheet.Json.Workbook
|
|
2
|
+
|
|
3
|
+
open FsSpreadsheet
|
|
4
|
+
open Thoth.Json.Core
|
|
5
|
+
|
|
6
|
+
[<Literal>]
|
|
7
|
+
let sheets = "sheets"
|
|
8
|
+
|
|
9
|
+
let encode (wb:FsWorkbook) =
|
|
10
|
+
Encode.object [
|
|
11
|
+
sheets, Encode.seq (wb.GetWorksheets() |> Seq.map Worksheet.encode)
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
let decode : Decoder<FsWorkbook> =
|
|
15
|
+
Decode.object (fun builder ->
|
|
16
|
+
let wb = new FsWorkbook()
|
|
17
|
+
let ws = builder.Required.Field sheets (Decode.seq Worksheet.decode)
|
|
18
|
+
wb.AddWorksheets(ws)
|
|
19
|
+
wb
|
|
20
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { seq } from "../../Thoth.Json.Core.0.2.1/Encode.fs.js";
|
|
2
|
+
import { map } from "../../fable-library-js.4.16.0/Seq.js";
|
|
3
|
+
import { decode as decode_1, encode as encode_1 } from "./Worksheet.fs.js";
|
|
4
|
+
import { Json } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
5
|
+
import { seq as seq_1, object } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
6
|
+
import { FsWorkbook } from "../FsWorkbook.fs.js";
|
|
7
|
+
|
|
8
|
+
export function encode(wb) {
|
|
9
|
+
return new Json(5, [[["sheets", seq(map(encode_1, wb.GetWorksheets()))]]]);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const decode = object((builder) => {
|
|
13
|
+
const wb = new FsWorkbook();
|
|
14
|
+
let ws;
|
|
15
|
+
const arg_1 = seq_1(decode_1);
|
|
16
|
+
const objectArg = builder.Required;
|
|
17
|
+
ws = objectArg.Field("sheets", arg_1);
|
|
18
|
+
wb.AddWorksheets(ws);
|
|
19
|
+
return wb;
|
|
20
|
+
});
|
|
21
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module FsSpreadsheet.Json.Worksheet
|
|
2
|
+
|
|
3
|
+
open FsSpreadsheet
|
|
4
|
+
open Thoth.Json.Core
|
|
5
|
+
|
|
6
|
+
[<Literal>]
|
|
7
|
+
let name = "name"
|
|
8
|
+
|
|
9
|
+
[<Literal>]
|
|
10
|
+
let rows = "rows"
|
|
11
|
+
|
|
12
|
+
[<Literal>]
|
|
13
|
+
let tables = "tables"
|
|
14
|
+
|
|
15
|
+
let encode (sheet:FsWorksheet) =
|
|
16
|
+
sheet.RescanRows()
|
|
17
|
+
Encode.object [
|
|
18
|
+
name, Encode.string sheet.Name
|
|
19
|
+
if Seq.isEmpty sheet.Tables |> not then
|
|
20
|
+
tables, Encode.seq (sheet.Tables |> Seq.map Table.encode)
|
|
21
|
+
rows, Encode.seq (sheet.Rows |> Seq.map Row.encode)
|
|
22
|
+
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
let decode : Decoder<FsWorksheet> =
|
|
26
|
+
Decode.object (fun builder ->
|
|
27
|
+
let n = builder.Required.Field name Decode.string
|
|
28
|
+
let ts = builder.Optional.Field tables (Decode.seq Table.decode)
|
|
29
|
+
let rs = builder.Required.Field rows (Decode.seq Row.decode)
|
|
30
|
+
let sheet = new FsWorksheet(n)
|
|
31
|
+
rs
|
|
32
|
+
|> Seq.iter (fun (rowI,cells) ->
|
|
33
|
+
let r = sheet.Row(rowI)
|
|
34
|
+
cells
|
|
35
|
+
|> Seq.iter (fun cell ->
|
|
36
|
+
let c = r[cell.ColumnNumber]
|
|
37
|
+
c.Value <- cell.Value
|
|
38
|
+
c.DataType <- cell.DataType
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
match ts with
|
|
42
|
+
| Some ts ->
|
|
43
|
+
ts
|
|
44
|
+
|> Seq.iter (fun t ->
|
|
45
|
+
sheet.AddTable(t) |> ignore
|
|
46
|
+
)
|
|
47
|
+
| None -> ()
|
|
48
|
+
sheet
|
|
49
|
+
)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { iterate, empty, map, isEmpty, singleton, append, delay, toList } from "../../fable-library-js.4.16.0/Seq.js";
|
|
2
|
+
import { Json } from "../../Thoth.Json.Core.0.2.1/Types.fs.js";
|
|
3
|
+
import { seq } from "../../Thoth.Json.Core.0.2.1/Encode.fs.js";
|
|
4
|
+
import { decode as decode_1, encode as encode_1 } from "./Table.fs.js";
|
|
5
|
+
import { decode as decode_2, encode as encode_2 } from "./Row.fs.js";
|
|
6
|
+
import { seq as seq_1, string, object } from "../../Thoth.Json.Core.0.2.1/Decode.fs.js";
|
|
7
|
+
import { FsWorksheet } from "../FsWorksheet.fs.js";
|
|
8
|
+
|
|
9
|
+
export function encode(sheet) {
|
|
10
|
+
sheet.RescanRows();
|
|
11
|
+
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", seq(map(encode_2, sheet.Rows))])))))))]);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const decode = object((builder) => {
|
|
15
|
+
let n;
|
|
16
|
+
const objectArg = builder.Required;
|
|
17
|
+
n = objectArg.Field("name", string);
|
|
18
|
+
let ts;
|
|
19
|
+
const arg_3 = seq_1(decode_1);
|
|
20
|
+
const objectArg_1 = builder.Optional;
|
|
21
|
+
ts = objectArg_1.Field("tables", arg_3);
|
|
22
|
+
let rs;
|
|
23
|
+
const arg_5 = seq_1(decode_2);
|
|
24
|
+
const objectArg_2 = builder.Required;
|
|
25
|
+
rs = objectArg_2.Field("rows", arg_5);
|
|
26
|
+
const sheet = new FsWorksheet(n);
|
|
27
|
+
iterate((tupledArg) => {
|
|
28
|
+
const r = sheet.Row(tupledArg[0]);
|
|
29
|
+
iterate((cell) => {
|
|
30
|
+
const c = r.Item(cell.ColumnNumber);
|
|
31
|
+
c.Value = cell.Value;
|
|
32
|
+
c.DataType = cell.DataType;
|
|
33
|
+
}, tupledArg[1]);
|
|
34
|
+
}, rs);
|
|
35
|
+
if (ts == null) {
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
iterate((t) => {
|
|
39
|
+
sheet.AddTable(t);
|
|
40
|
+
}, ts);
|
|
41
|
+
}
|
|
42
|
+
return sheet;
|
|
43
|
+
});
|
|
44
|
+
|
|
@@ -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("6.1.2.0")>]
|
|
14
|
+
[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("6.1.2")>]
|
|
15
15
|
[<assembly: System.Reflection.AssemblyProductAttribute("FsSpreadsheet")>]
|
|
16
16
|
[<assembly: System.Reflection.AssemblyTitleAttribute("FsSpreadsheet")>]
|
|
17
|
-
[<assembly: System.Reflection.AssemblyVersionAttribute("
|
|
17
|
+
[<assembly: System.Reflection.AssemblyVersionAttribute("6.1.2.0")>]
|
|
18
18
|
[<assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/CSBiology/FsSpreadsheet")>]
|
|
19
19
|
do()
|