@frictionless-ts/table 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +9 -0
- package/README.md +3 -0
- package/build/assets/geojson.json +216 -0
- package/build/assets/topojson.json +259 -0
- package/build/data/index.d.ts +2 -0
- package/build/data/index.js +2 -0
- package/build/data/record.d.ts +4 -0
- package/build/data/record.js +84 -0
- package/build/data/record.spec.d.ts +1 -0
- package/build/data/record.spec.js +269 -0
- package/build/dialect/Options.d.ts +3 -0
- package/build/dialect/Options.js +3 -0
- package/build/dialect/index.d.ts +2 -0
- package/build/dialect/index.js +2 -0
- package/build/dialect/infer.d.ts +4 -0
- package/build/dialect/infer.js +2 -0
- package/build/field/Field.d.ts +5 -0
- package/build/field/Field.js +2 -0
- package/build/field/Mapping.d.ts +11 -0
- package/build/field/Mapping.js +2 -0
- package/build/field/checks/enum.d.ts +8 -0
- package/build/field/checks/enum.js +71 -0
- package/build/field/checks/enum.spec.d.ts +1 -0
- package/build/field/checks/enum.spec.js +327 -0
- package/build/field/checks/maxLength.d.ts +7 -0
- package/build/field/checks/maxLength.js +17 -0
- package/build/field/checks/maxLength.spec.d.ts +1 -0
- package/build/field/checks/maxLength.spec.js +49 -0
- package/build/field/checks/maximum.d.ts +11 -0
- package/build/field/checks/maximum.js +73 -0
- package/build/field/checks/maximum.spec.d.ts +1 -0
- package/build/field/checks/maximum.spec.js +476 -0
- package/build/field/checks/minLength.d.ts +7 -0
- package/build/field/checks/minLength.js +17 -0
- package/build/field/checks/minLength.spec.d.ts +1 -0
- package/build/field/checks/minLength.spec.js +56 -0
- package/build/field/checks/minimum.d.ts +11 -0
- package/build/field/checks/minimum.js +73 -0
- package/build/field/checks/minimum.spec.d.ts +1 -0
- package/build/field/checks/minimum.spec.js +476 -0
- package/build/field/checks/pattern.d.ts +7 -0
- package/build/field/checks/pattern.js +17 -0
- package/build/field/checks/pattern.spec.d.ts +1 -0
- package/build/field/checks/pattern.spec.js +66 -0
- package/build/field/checks/required.d.ts +7 -0
- package/build/field/checks/required.js +14 -0
- package/build/field/checks/required.spec.d.ts +1 -0
- package/build/field/checks/required.spec.js +24 -0
- package/build/field/checks/type.d.ts +7 -0
- package/build/field/checks/type.js +14 -0
- package/build/field/checks/type.spec.d.ts +1 -0
- package/build/field/checks/type.spec.js +255 -0
- package/build/field/checks/unique.d.ts +7 -0
- package/build/field/checks/unique.js +17 -0
- package/build/field/checks/unique.spec.d.ts +1 -0
- package/build/field/checks/unique.spec.js +97 -0
- package/build/field/denormalize.d.ts +6 -0
- package/build/field/denormalize.js +13 -0
- package/build/field/desubstitute.d.ts +3 -0
- package/build/field/desubstitute.js +13 -0
- package/build/field/index.d.ts +8 -0
- package/build/field/index.js +6 -0
- package/build/field/inspect.d.ts +6 -0
- package/build/field/inspect.js +131 -0
- package/build/field/inspect.spec.d.ts +1 -0
- package/build/field/inspect.spec.js +385 -0
- package/build/field/narrow.d.ts +3 -0
- package/build/field/narrow.js +14 -0
- package/build/field/narrow.spec.d.ts +1 -0
- package/build/field/narrow.spec.js +52 -0
- package/build/field/normalize.d.ts +5 -0
- package/build/field/normalize.js +14 -0
- package/build/field/parse.d.ts +3 -0
- package/build/field/parse.js +47 -0
- package/build/field/parse.spec.d.ts +1 -0
- package/build/field/parse.spec.js +33 -0
- package/build/field/stringify.d.ts +3 -0
- package/build/field/stringify.js +43 -0
- package/build/field/stringify.spec.d.ts +1 -0
- package/build/field/stringify.spec.js +41 -0
- package/build/field/substitute.d.ts +3 -0
- package/build/field/substitute.js +16 -0
- package/build/field/types/array.d.ts +3 -0
- package/build/field/types/array.js +5 -0
- package/build/field/types/array.spec.d.ts +1 -0
- package/build/field/types/array.spec.js +358 -0
- package/build/field/types/boolean.d.ts +4 -0
- package/build/field/types/boolean.js +31 -0
- package/build/field/types/boolean.spec.d.ts +1 -0
- package/build/field/types/boolean.spec.js +76 -0
- package/build/field/types/date.d.ts +4 -0
- package/build/field/types/date.js +14 -0
- package/build/field/types/date.spec.d.ts +1 -0
- package/build/field/types/date.spec.js +52 -0
- package/build/field/types/datetime.d.ts +4 -0
- package/build/field/types/datetime.js +15 -0
- package/build/field/types/datetime.spec.d.ts +1 -0
- package/build/field/types/datetime.spec.js +62 -0
- package/build/field/types/duration.d.ts +4 -0
- package/build/field/types/duration.js +9 -0
- package/build/field/types/duration.spec.d.ts +1 -0
- package/build/field/types/duration.spec.js +37 -0
- package/build/field/types/geojson.d.ts +3 -0
- package/build/field/types/geojson.js +9 -0
- package/build/field/types/geojson.spec.d.ts +1 -0
- package/build/field/types/geojson.spec.js +522 -0
- package/build/field/types/geopoint.d.ts +4 -0
- package/build/field/types/geopoint.js +59 -0
- package/build/field/types/geopoint.spec.d.ts +1 -0
- package/build/field/types/geopoint.spec.js +173 -0
- package/build/field/types/integer.d.ts +4 -0
- package/build/field/types/integer.js +41 -0
- package/build/field/types/integer.spec.d.ts +1 -0
- package/build/field/types/integer.spec.js +102 -0
- package/build/field/types/json.d.ts +6 -0
- package/build/field/types/json.js +68 -0
- package/build/field/types/list.d.ts +4 -0
- package/build/field/types/list.js +30 -0
- package/build/field/types/list.spec.d.ts +1 -0
- package/build/field/types/list.spec.js +230 -0
- package/build/field/types/number.d.ts +4 -0
- package/build/field/types/number.js +50 -0
- package/build/field/types/number.spec.d.ts +1 -0
- package/build/field/types/number.spec.js +101 -0
- package/build/field/types/object.d.ts +3 -0
- package/build/field/types/object.js +5 -0
- package/build/field/types/object.spec.d.ts +1 -0
- package/build/field/types/object.spec.js +393 -0
- package/build/field/types/string.d.ts +4 -0
- package/build/field/types/string.js +32 -0
- package/build/field/types/string.spec.d.ts +1 -0
- package/build/field/types/string.spec.js +162 -0
- package/build/field/types/time.d.ts +4 -0
- package/build/field/types/time.js +18 -0
- package/build/field/types/time.spec.d.ts +1 -0
- package/build/field/types/time.spec.js +53 -0
- package/build/field/types/year.d.ts +4 -0
- package/build/field/types/year.js +16 -0
- package/build/field/types/year.spec.d.ts +1 -0
- package/build/field/types/year.spec.js +50 -0
- package/build/field/types/yearmonth.d.ts +4 -0
- package/build/field/types/yearmonth.js +14 -0
- package/build/field/types/yearmonth.spec.d.ts +1 -0
- package/build/field/types/yearmonth.spec.js +36 -0
- package/build/helpers.d.ts +4 -0
- package/build/helpers.js +12 -0
- package/build/index.d.ts +40 -0
- package/build/index.js +27 -0
- package/build/plugin.d.ts +27 -0
- package/build/plugin.js +2 -0
- package/build/plugins/arrow/index.d.ts +2 -0
- package/build/plugins/arrow/index.js +3 -0
- package/build/plugins/arrow/plugin.d.ts +7 -0
- package/build/plugins/arrow/plugin.js +22 -0
- package/build/plugins/arrow/plugin.spec.d.ts +1 -0
- package/build/plugins/arrow/plugin.spec.js +161 -0
- package/build/plugins/arrow/table/index.d.ts +2 -0
- package/build/plugins/arrow/table/index.js +3 -0
- package/build/plugins/arrow/table/load.d.ts +4 -0
- package/build/plugins/arrow/table/load.js +23 -0
- package/build/plugins/arrow/table/load.spec.d.ts +1 -0
- package/build/plugins/arrow/table/load.spec.js +56 -0
- package/build/plugins/arrow/table/save.d.ts +3 -0
- package/build/plugins/arrow/table/save.js +31 -0
- package/build/plugins/arrow/table/save.spec.d.ts +1 -0
- package/build/plugins/arrow/table/save.spec.js +81 -0
- package/build/plugins/csv/dialect/index.d.ts +1 -0
- package/build/plugins/csv/dialect/index.js +2 -0
- package/build/plugins/csv/dialect/infer.d.ts +4 -0
- package/build/plugins/csv/dialect/infer.js +44 -0
- package/build/plugins/csv/dialect/infer.spec.d.ts +1 -0
- package/build/plugins/csv/dialect/infer.spec.js +54 -0
- package/build/plugins/csv/index.d.ts +2 -0
- package/build/plugins/csv/index.js +3 -0
- package/build/plugins/csv/plugin.d.ts +8 -0
- package/build/plugins/csv/plugin.js +22 -0
- package/build/plugins/csv/plugin.spec.d.ts +1 -0
- package/build/plugins/csv/plugin.spec.js +161 -0
- package/build/plugins/csv/table/index.d.ts +2 -0
- package/build/plugins/csv/table/index.js +3 -0
- package/build/plugins/csv/table/load.d.ts +6 -0
- package/build/plugins/csv/table/load.js +86 -0
- package/build/plugins/csv/table/load.spec.d.ts +1 -0
- package/build/plugins/csv/table/load.spec.js +293 -0
- package/build/plugins/csv/table/save.d.ts +5 -0
- package/build/plugins/csv/table/save.js +29 -0
- package/build/plugins/csv/table/save.spec.d.ts +1 -0
- package/build/plugins/csv/table/save.spec.js +137 -0
- package/build/plugins/inline/index.d.ts +2 -0
- package/build/plugins/inline/index.js +3 -0
- package/build/plugins/inline/plugin.d.ts +7 -0
- package/build/plugins/inline/plugin.js +14 -0
- package/build/plugins/inline/table/index.d.ts +1 -0
- package/build/plugins/inline/table/index.js +2 -0
- package/build/plugins/inline/table/load.d.ts +6 -0
- package/build/plugins/inline/table/load.js +24 -0
- package/build/plugins/inline/table/load.spec.d.ts +1 -0
- package/build/plugins/inline/table/load.spec.js +160 -0
- package/build/plugins/json/buffer/decode.d.ts +4 -0
- package/build/plugins/json/buffer/decode.js +10 -0
- package/build/plugins/json/buffer/encode.d.ts +4 -0
- package/build/plugins/json/buffer/encode.js +8 -0
- package/build/plugins/json/buffer/index.d.ts +2 -0
- package/build/plugins/json/buffer/index.js +3 -0
- package/build/plugins/json/index.d.ts +2 -0
- package/build/plugins/json/index.js +3 -0
- package/build/plugins/json/plugin.d.ts +7 -0
- package/build/plugins/json/plugin.js +25 -0
- package/build/plugins/json/plugin.spec.d.ts +1 -0
- package/build/plugins/json/plugin.spec.js +163 -0
- package/build/plugins/json/table/index.d.ts +2 -0
- package/build/plugins/json/table/index.js +3 -0
- package/build/plugins/json/table/load.d.ts +6 -0
- package/build/plugins/json/table/load.js +55 -0
- package/build/plugins/json/table/load.spec.d.ts +1 -0
- package/build/plugins/json/table/load.spec.js +200 -0
- package/build/plugins/json/table/parse.d.ts +3 -0
- package/build/plugins/json/table/parse.js +6 -0
- package/build/plugins/json/table/save.d.ts +5 -0
- package/build/plugins/json/table/save.js +45 -0
- package/build/plugins/json/table/save.spec.d.ts +1 -0
- package/build/plugins/json/table/save.spec.js +147 -0
- package/build/plugins/ods/index.d.ts +2 -0
- package/build/plugins/ods/index.js +3 -0
- package/build/plugins/ods/plugin.d.ts +7 -0
- package/build/plugins/ods/plugin.js +23 -0
- package/build/plugins/ods/plugin.spec.d.ts +1 -0
- package/build/plugins/ods/plugin.spec.js +142 -0
- package/build/plugins/ods/table/index.d.ts +2 -0
- package/build/plugins/ods/table/index.js +3 -0
- package/build/plugins/ods/table/load.d.ts +4 -0
- package/build/plugins/ods/table/load.js +41 -0
- package/build/plugins/ods/table/load.spec.d.ts +1 -0
- package/build/plugins/ods/table/load.spec.js +167 -0
- package/build/plugins/ods/table/save.d.ts +3 -0
- package/build/plugins/ods/table/save.js +26 -0
- package/build/plugins/ods/table/save.spec.d.ts +1 -0
- package/build/plugins/ods/table/save.spec.js +75 -0
- package/build/plugins/ods/table/test.d.ts +5 -0
- package/build/plugins/ods/table/test.js +23 -0
- package/build/plugins/parquet/index.d.ts +2 -0
- package/build/plugins/parquet/index.js +3 -0
- package/build/plugins/parquet/plugin.d.ts +7 -0
- package/build/plugins/parquet/plugin.js +23 -0
- package/build/plugins/parquet/plugin.spec.d.ts +1 -0
- package/build/plugins/parquet/plugin.spec.js +142 -0
- package/build/plugins/parquet/table/index.d.ts +2 -0
- package/build/plugins/parquet/table/index.js +3 -0
- package/build/plugins/parquet/table/load.d.ts +4 -0
- package/build/plugins/parquet/table/load.js +23 -0
- package/build/plugins/parquet/table/load.spec.d.ts +1 -0
- package/build/plugins/parquet/table/load.spec.js +56 -0
- package/build/plugins/parquet/table/save.d.ts +3 -0
- package/build/plugins/parquet/table/save.js +32 -0
- package/build/plugins/parquet/table/save.spec.d.ts +1 -0
- package/build/plugins/parquet/table/save.spec.js +81 -0
- package/build/plugins/xlxs/index.d.ts +2 -0
- package/build/plugins/xlxs/index.js +3 -0
- package/build/plugins/xlxs/plugin.d.ts +7 -0
- package/build/plugins/xlxs/plugin.js +23 -0
- package/build/plugins/xlxs/plugin.spec.d.ts +1 -0
- package/build/plugins/xlxs/plugin.spec.js +142 -0
- package/build/plugins/xlxs/table/index.d.ts +2 -0
- package/build/plugins/xlxs/table/index.js +3 -0
- package/build/plugins/xlxs/table/load.d.ts +4 -0
- package/build/plugins/xlxs/table/load.js +43 -0
- package/build/plugins/xlxs/table/load.spec.d.ts +1 -0
- package/build/plugins/xlxs/table/load.spec.js +167 -0
- package/build/plugins/xlxs/table/save.d.ts +3 -0
- package/build/plugins/xlxs/table/save.js +28 -0
- package/build/plugins/xlxs/table/save.spec.d.ts +1 -0
- package/build/plugins/xlxs/table/save.spec.js +75 -0
- package/build/plugins/xlxs/table/test.d.ts +5 -0
- package/build/plugins/xlxs/table/test.js +23 -0
- package/build/schema/Mapping.d.ts +6 -0
- package/build/schema/Mapping.js +2 -0
- package/build/schema/Options.d.ts +22 -0
- package/build/schema/Options.js +2 -0
- package/build/schema/Schema.d.ts +4 -0
- package/build/schema/Schema.js +2 -0
- package/build/schema/helpers.d.ts +3 -0
- package/build/schema/helpers.js +6 -0
- package/build/schema/index.d.ts +8 -0
- package/build/schema/index.js +5 -0
- package/build/schema/infer.d.ts +13 -0
- package/build/schema/infer.js +199 -0
- package/build/schema/infer.spec.d.ts +1 -0
- package/build/schema/infer.spec.js +304 -0
- package/build/schema/match.d.ts +6 -0
- package/build/schema/match.js +8 -0
- package/build/table/Frame.d.ts +2 -0
- package/build/table/Frame.js +2 -0
- package/build/table/Table.d.ts +2 -0
- package/build/table/Table.js +2 -0
- package/build/table/checks/unique.d.ts +7 -0
- package/build/table/checks/unique.js +23 -0
- package/build/table/checks/unique.spec.d.ts +1 -0
- package/build/table/checks/unique.spec.js +187 -0
- package/build/table/denormalize.d.ts +6 -0
- package/build/table/denormalize.js +15 -0
- package/build/table/helpers.d.ts +19 -0
- package/build/table/helpers.js +62 -0
- package/build/table/helpers.spec.d.ts +1 -0
- package/build/table/helpers.spec.js +352 -0
- package/build/table/index.d.ts +9 -0
- package/build/table/index.js +8 -0
- package/build/table/inspect.d.ts +8 -0
- package/build/table/inspect.js +165 -0
- package/build/table/inspect.spec.d.ts +1 -0
- package/build/table/inspect.spec.js +335 -0
- package/build/table/normalize.d.ts +6 -0
- package/build/table/normalize.js +27 -0
- package/build/table/normalize.spec.d.ts +1 -0
- package/build/table/normalize.spec.js +222 -0
- package/build/table/query.d.ts +3 -0
- package/build/table/query.js +6 -0
- package/package.json +45 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { inspectTable } from "../table/inspect.js";
|
|
4
|
+
import { normalizeTable } from "../table/normalize.js";
|
|
5
|
+
describe("narrowField", () => {
|
|
6
|
+
it("should narrow float to integer", async () => {
|
|
7
|
+
const table = pl
|
|
8
|
+
.DataFrame({
|
|
9
|
+
id: [1.0, 2.0, 3.0],
|
|
10
|
+
name: ["a", "b", "c"],
|
|
11
|
+
})
|
|
12
|
+
.lazy();
|
|
13
|
+
const schema = {
|
|
14
|
+
fields: [
|
|
15
|
+
{ name: "id", type: "integer" },
|
|
16
|
+
{ name: "name", type: "string" },
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
const result = await normalizeTable(table, schema);
|
|
20
|
+
const frame = await result.collect();
|
|
21
|
+
expect(frame.toRecords()).toEqual([
|
|
22
|
+
{ id: 1, name: "a" },
|
|
23
|
+
{ id: 2, name: "b" },
|
|
24
|
+
{ id: 3, name: "c" },
|
|
25
|
+
]);
|
|
26
|
+
});
|
|
27
|
+
it("should detect error when float cannot be narrowed to integer", async () => {
|
|
28
|
+
const table = pl
|
|
29
|
+
.DataFrame({
|
|
30
|
+
id: [1.0, 2.0, 3.5],
|
|
31
|
+
name: ["a", "b", "c"],
|
|
32
|
+
})
|
|
33
|
+
.lazy();
|
|
34
|
+
const schema = {
|
|
35
|
+
fields: [
|
|
36
|
+
{ name: "id", type: "integer" },
|
|
37
|
+
{ name: "name", type: "string" },
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
const errors = await inspectTable(table, { schema });
|
|
41
|
+
expect(errors).toEqual([
|
|
42
|
+
{
|
|
43
|
+
type: "cell/type",
|
|
44
|
+
fieldName: "id",
|
|
45
|
+
fieldType: "integer",
|
|
46
|
+
rowNumber: 3,
|
|
47
|
+
cell: "3.5",
|
|
48
|
+
},
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFycm93LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWVsZC9uYXJyb3cuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUV0RCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDOUMsTUFBTSxLQUFLLEdBQUcsRUFBRTthQUNiLFNBQVMsQ0FBQztZQUNULEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQ25CLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLENBQUM7YUFDRCxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sTUFBTSxHQUFXO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDL0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7YUFDakM7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ2xELE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRXBDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDaEMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDcEIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDcEIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7U0FDckIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDNUUsTUFBTSxLQUFLLEdBQUcsRUFBRTthQUNiLFNBQVMsQ0FBQztZQUNULEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQ25CLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLENBQUM7YUFDRCxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sTUFBTSxHQUFXO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDL0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7YUFDakM7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUVwRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JCO2dCQUNFLElBQUksRUFBRSxXQUFXO2dCQUNqQixTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUsU0FBUztnQkFDcEIsU0FBUyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxFQUFFLEtBQUs7YUFDWjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCAqIGFzIHBsIGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBpbnNwZWN0VGFibGUgfSBmcm9tIFwiLi4vdGFibGUvaW5zcGVjdC50c1wiXG5pbXBvcnQgeyBub3JtYWxpemVUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9ub3JtYWxpemUudHNcIlxuXG5kZXNjcmliZShcIm5hcnJvd0ZpZWxkXCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgbmFycm93IGZsb2F0IHRvIGludGVnZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gcGxcbiAgICAgIC5EYXRhRnJhbWUoe1xuICAgICAgICBpZDogWzEuMCwgMi4wLCAzLjBdLFxuICAgICAgICBuYW1lOiBbXCJhXCIsIFwiYlwiLCBcImNcIl0sXG4gICAgICB9KVxuICAgICAgLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbm9ybWFsaXplVGFibGUodGFibGUsIHNjaGVtYSlcbiAgICBjb25zdCBmcmFtZSA9IGF3YWl0IHJlc3VsdC5jb2xsZWN0KClcblxuICAgIGV4cGVjdChmcmFtZS50b1JlY29yZHMoKSkudG9FcXVhbChbXG4gICAgICB7IGlkOiAxLCBuYW1lOiBcImFcIiB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogXCJiXCIgfSxcbiAgICAgIHsgaWQ6IDMsIG5hbWU6IFwiY1wiIH0sXG4gICAgXSlcbiAgfSlcblxuICBpdChcInNob3VsZCBkZXRlY3QgZXJyb3Igd2hlbiBmbG9hdCBjYW5ub3QgYmUgbmFycm93ZWQgdG8gaW50ZWdlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBwbFxuICAgICAgLkRhdGFGcmFtZSh7XG4gICAgICAgIGlkOiBbMS4wLCAyLjAsIDMuNV0sXG4gICAgICAgIG5hbWU6IFtcImFcIiwgXCJiXCIsIFwiY1wiXSxcbiAgICAgIH0pXG4gICAgICAubGF6eSgpXG5cbiAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBpbnNwZWN0VGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG5cbiAgICBleHBlY3QoZXJyb3JzKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjZWxsL3R5cGVcIixcbiAgICAgICAgZmllbGROYW1lOiBcImlkXCIsXG4gICAgICAgIGZpZWxkVHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgIHJvd051bWJlcjogMyxcbiAgICAgICAgY2VsbDogXCIzLjVcIixcbiAgICAgIH0sXG4gICAgXSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { narrowField } from "./narrow.js";
|
|
3
|
+
import { parseField } from "./parse.js";
|
|
4
|
+
import { substituteField } from "./substitute.js";
|
|
5
|
+
export function normalizeField(mapping, options) {
|
|
6
|
+
let fieldExpr = pl.col(mapping.source.name);
|
|
7
|
+
fieldExpr = substituteField(mapping, fieldExpr);
|
|
8
|
+
if (!options?.keepType) {
|
|
9
|
+
fieldExpr = parseField(mapping, fieldExpr);
|
|
10
|
+
fieldExpr = narrowField(mapping, fieldExpr);
|
|
11
|
+
}
|
|
12
|
+
return fieldExpr.alias(mapping.target.name);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZmllbGQvbm9ybWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRW5DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFakQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FBcUIsRUFDckIsT0FBZ0M7SUFFaEMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzNDLFNBQVMsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRS9DLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDdkIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDMUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwbCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgdHlwZSB7IEZpZWxkTWFwcGluZyB9IGZyb20gXCIuL01hcHBpbmcudHNcIlxuaW1wb3J0IHsgbmFycm93RmllbGQgfSBmcm9tIFwiLi9uYXJyb3cudHNcIlxuaW1wb3J0IHsgcGFyc2VGaWVsZCB9IGZyb20gXCIuL3BhcnNlLnRzXCJcbmltcG9ydCB7IHN1YnN0aXR1dGVGaWVsZCB9IGZyb20gXCIuL3N1YnN0aXR1dGUudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRmllbGQoXG4gIG1hcHBpbmc6IEZpZWxkTWFwcGluZyxcbiAgb3B0aW9ucz86IHsga2VlcFR5cGU/OiBib29sZWFuIH0sXG4pIHtcbiAgbGV0IGZpZWxkRXhwciA9IHBsLmNvbChtYXBwaW5nLnNvdXJjZS5uYW1lKVxuICBmaWVsZEV4cHIgPSBzdWJzdGl0dXRlRmllbGQobWFwcGluZywgZmllbGRFeHByKVxuXG4gIGlmICghb3B0aW9ucz8ua2VlcFR5cGUpIHtcbiAgICBmaWVsZEV4cHIgPSBwYXJzZUZpZWxkKG1hcHBpbmcsIGZpZWxkRXhwcilcbiAgICBmaWVsZEV4cHIgPSBuYXJyb3dGaWVsZChtYXBwaW5nLCBmaWVsZEV4cHIpXG4gIH1cblxuICByZXR1cm4gZmllbGRFeHByLmFsaWFzKG1hcHBpbmcudGFyZ2V0Lm5hbWUpXG59XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { parseBooleanField } from "./types/boolean.js";
|
|
3
|
+
import { parseDateField } from "./types/date.js";
|
|
4
|
+
import { parseDatetimeField } from "./types/datetime.js";
|
|
5
|
+
import { parseDurationField } from "./types/duration.js";
|
|
6
|
+
import { parseGeopointField } from "./types/geopoint.js";
|
|
7
|
+
import { parseIntegerField } from "./types/integer.js";
|
|
8
|
+
import { parseListField } from "./types/list.js";
|
|
9
|
+
import { parseNumberField } from "./types/number.js";
|
|
10
|
+
import { parseStringField } from "./types/string.js";
|
|
11
|
+
import { parseTimeField } from "./types/time.js";
|
|
12
|
+
import { parseYearField } from "./types/year.js";
|
|
13
|
+
import { parseYearmonthField } from "./types/yearmonth.js";
|
|
14
|
+
export function parseField(mapping, fieldExpr) {
|
|
15
|
+
if (!mapping.source.type.equals(pl.String))
|
|
16
|
+
return fieldExpr;
|
|
17
|
+
const field = mapping.target;
|
|
18
|
+
switch (field.type) {
|
|
19
|
+
case "boolean":
|
|
20
|
+
return parseBooleanField(field, fieldExpr);
|
|
21
|
+
case "date":
|
|
22
|
+
return parseDateField(field, fieldExpr);
|
|
23
|
+
case "datetime":
|
|
24
|
+
return parseDatetimeField(field, fieldExpr);
|
|
25
|
+
case "duration":
|
|
26
|
+
return parseDurationField(field, fieldExpr);
|
|
27
|
+
case "geopoint":
|
|
28
|
+
return parseGeopointField(field, fieldExpr);
|
|
29
|
+
case "integer":
|
|
30
|
+
return parseIntegerField(field, fieldExpr);
|
|
31
|
+
case "list":
|
|
32
|
+
return parseListField(field, fieldExpr);
|
|
33
|
+
case "number":
|
|
34
|
+
return parseNumberField(field, fieldExpr);
|
|
35
|
+
case "string":
|
|
36
|
+
return parseStringField(field, fieldExpr);
|
|
37
|
+
case "time":
|
|
38
|
+
return parseTimeField(field, fieldExpr);
|
|
39
|
+
case "year":
|
|
40
|
+
return parseYearField(field, fieldExpr);
|
|
41
|
+
case "yearmonth":
|
|
42
|
+
return parseYearmonthField(field, fieldExpr);
|
|
43
|
+
default:
|
|
44
|
+
return fieldExpr;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWVsZC9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFMUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxPQUFxQixFQUFFLFNBQWtCO0lBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRTVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7SUFDNUIsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsS0FBSyxTQUFTO1lBQ1osT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDNUMsS0FBSyxNQUFNO1lBQ1QsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3pDLEtBQUssVUFBVTtZQUNiLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssVUFBVTtZQUNiLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssVUFBVTtZQUNiLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssU0FBUztZQUNaLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzVDLEtBQUssTUFBTTtZQUNULE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxLQUFLLFFBQVE7WUFDWCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUMzQyxLQUFLLFFBQVE7WUFDWCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUMzQyxLQUFLLE1BQU07WUFDVCxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDekMsS0FBSyxNQUFNO1lBQ1QsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3pDLEtBQUssV0FBVztZQUNkLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzlDO1lBQ0UsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwbCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgdHlwZSB7IEZpZWxkTWFwcGluZyB9IGZyb20gXCIuL01hcHBpbmcudHNcIlxuaW1wb3J0IHsgcGFyc2VCb29sZWFuRmllbGQgfSBmcm9tIFwiLi90eXBlcy9ib29sZWFuLnRzXCJcbmltcG9ydCB7IHBhcnNlRGF0ZUZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvZGF0ZS50c1wiXG5pbXBvcnQgeyBwYXJzZURhdGV0aW1lRmllbGQgfSBmcm9tIFwiLi90eXBlcy9kYXRldGltZS50c1wiXG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uRmllbGQgfSBmcm9tIFwiLi90eXBlcy9kdXJhdGlvbi50c1wiXG5pbXBvcnQgeyBwYXJzZUdlb3BvaW50RmllbGQgfSBmcm9tIFwiLi90eXBlcy9nZW9wb2ludC50c1wiXG5pbXBvcnQgeyBwYXJzZUludGVnZXJGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2ludGVnZXIudHNcIlxuaW1wb3J0IHsgcGFyc2VMaXN0RmllbGQgfSBmcm9tIFwiLi90eXBlcy9saXN0LnRzXCJcbmltcG9ydCB7IHBhcnNlTnVtYmVyRmllbGQgfSBmcm9tIFwiLi90eXBlcy9udW1iZXIudHNcIlxuaW1wb3J0IHsgcGFyc2VTdHJpbmdGaWVsZCB9IGZyb20gXCIuL3R5cGVzL3N0cmluZy50c1wiXG5pbXBvcnQgeyBwYXJzZVRpbWVGaWVsZCB9IGZyb20gXCIuL3R5cGVzL3RpbWUudHNcIlxuaW1wb3J0IHsgcGFyc2VZZWFyRmllbGQgfSBmcm9tIFwiLi90eXBlcy95ZWFyLnRzXCJcbmltcG9ydCB7IHBhcnNlWWVhcm1vbnRoRmllbGQgfSBmcm9tIFwiLi90eXBlcy95ZWFybW9udGgudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWVsZChtYXBwaW5nOiBGaWVsZE1hcHBpbmcsIGZpZWxkRXhwcjogcGwuRXhwcikge1xuICBpZiAoIW1hcHBpbmcuc291cmNlLnR5cGUuZXF1YWxzKHBsLlN0cmluZykpIHJldHVybiBmaWVsZEV4cHJcblxuICBjb25zdCBmaWVsZCA9IG1hcHBpbmcudGFyZ2V0XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gcGFyc2VCb29sZWFuRmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIHBhcnNlRGF0ZUZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gcGFyc2VEYXRldGltZUZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcImR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gcGFyc2VEdXJhdGlvbkZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcImdlb3BvaW50XCI6XG4gICAgICByZXR1cm4gcGFyc2VHZW9wb2ludEZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgIHJldHVybiBwYXJzZUludGVnZXJGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICByZXR1cm4gcGFyc2VMaXN0RmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gcGFyc2VOdW1iZXJGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBwYXJzZVN0cmluZ0ZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcInRpbWVcIjpcbiAgICAgIHJldHVybiBwYXJzZVRpbWVGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICByZXR1cm4gcGFyc2VZZWFyRmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBjYXNlIFwieWVhcm1vbnRoXCI6XG4gICAgICByZXR1cm4gcGFyc2VZZWFybW9udGhGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmllbGRFeHByXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { normalizeTable } from "../table/index.js";
|
|
4
|
+
describe("parseField", () => {
|
|
5
|
+
describe("missing values", () => {
|
|
6
|
+
it.each([
|
|
7
|
+
// Schema-level
|
|
8
|
+
["", null, {}],
|
|
9
|
+
["", "", { schemaLevel: [] }],
|
|
10
|
+
["-", null, { schemaLevel: ["-"] }],
|
|
11
|
+
["x", null, { schemaLevel: ["x"] }],
|
|
12
|
+
// Field-level
|
|
13
|
+
["", null, {}],
|
|
14
|
+
["-", null, { fieldLevel: ["-"] }],
|
|
15
|
+
["-", "-", { fieldLevel: [""] }],
|
|
16
|
+
["n/a", null, { fieldLevel: ["n/a"] }],
|
|
17
|
+
// Schema-level and field-level
|
|
18
|
+
["-", null, { schemaLevel: ["x"], fieldLevel: ["-"] }],
|
|
19
|
+
["-", "-", { schemaLevel: ["-"], fieldLevel: ["x"] }],
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
])("$0 -> $1 $2", async (cell, value, { fieldLevel, schemaLevel }) => {
|
|
22
|
+
const table = pl.DataFrame({ name: [cell] }).lazy();
|
|
23
|
+
const schema = {
|
|
24
|
+
missingValues: schemaLevel,
|
|
25
|
+
fields: [{ name: "name", type: "string", missingValues: fieldLevel }],
|
|
26
|
+
};
|
|
27
|
+
const result = await normalizeTable(table, schema);
|
|
28
|
+
const frame = await result.collect();
|
|
29
|
+
expect(frame.getColumn("name").get(0)).toEqual(value);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Uuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2ZpZWxkL3BhcnNlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUMxQixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDTixlQUFlO1lBQ2YsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUM3QixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFbkMsY0FBYztZQUNkLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDZCxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUV0QywrQkFBK0I7WUFDL0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELGFBQWE7U0FDZCxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDbkUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNuRCxNQUFNLE1BQU0sR0FBVztnQkFDckIsYUFBYSxFQUFFLFdBQVc7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUN0RSxDQUFBO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ2xELE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBRXBDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCAqIGFzIHBsIGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBub3JtYWxpemVUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5cbmRlc2NyaWJlKFwicGFyc2VGaWVsZFwiLCAoKSA9PiB7XG4gIGRlc2NyaWJlKFwibWlzc2luZyB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgIGl0LmVhY2goW1xuICAgICAgLy8gU2NoZW1hLWxldmVsXG4gICAgICBbXCJcIiwgbnVsbCwge31dLFxuICAgICAgW1wiXCIsIFwiXCIsIHsgc2NoZW1hTGV2ZWw6IFtdIH1dLFxuICAgICAgW1wiLVwiLCBudWxsLCB7IHNjaGVtYUxldmVsOiBbXCItXCJdIH1dLFxuICAgICAgW1wieFwiLCBudWxsLCB7IHNjaGVtYUxldmVsOiBbXCJ4XCJdIH1dLFxuXG4gICAgICAvLyBGaWVsZC1sZXZlbFxuICAgICAgW1wiXCIsIG51bGwsIHt9XSxcbiAgICAgIFtcIi1cIiwgbnVsbCwgeyBmaWVsZExldmVsOiBbXCItXCJdIH1dLFxuICAgICAgW1wiLVwiLCBcIi1cIiwgeyBmaWVsZExldmVsOiBbXCJcIl0gfV0sXG4gICAgICBbXCJuL2FcIiwgbnVsbCwgeyBmaWVsZExldmVsOiBbXCJuL2FcIl0gfV0sXG5cbiAgICAgIC8vIFNjaGVtYS1sZXZlbCBhbmQgZmllbGQtbGV2ZWxcbiAgICAgIFtcIi1cIiwgbnVsbCwgeyBzY2hlbWFMZXZlbDogW1wieFwiXSwgZmllbGRMZXZlbDogW1wiLVwiXSB9XSxcbiAgICAgIFtcIi1cIiwgXCItXCIsIHsgc2NoZW1hTGV2ZWw6IFtcIi1cIl0sIGZpZWxkTGV2ZWw6IFtcInhcIl0gfV0sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgXSkoXCIkMCAtPiAkMSAkMlwiLCBhc3luYyAoY2VsbCwgdmFsdWUsIHsgZmllbGRMZXZlbCwgc2NoZW1hTGV2ZWwgfSkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBwbC5EYXRhRnJhbWUoeyBuYW1lOiBbY2VsbF0gfSkubGF6eSgpXG4gICAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgICAgbWlzc2luZ1ZhbHVlczogc2NoZW1hTGV2ZWwsXG4gICAgICAgIGZpZWxkczogW3sgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIsIG1pc3NpbmdWYWx1ZXM6IGZpZWxkTGV2ZWwgfV0sXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5vcm1hbGl6ZVRhYmxlKHRhYmxlLCBzY2hlbWEpXG4gICAgICBjb25zdCBmcmFtZSA9IGF3YWl0IHJlc3VsdC5jb2xsZWN0KClcblxuICAgICAgZXhwZWN0KGZyYW1lLmdldENvbHVtbihcIm5hbWVcIikuZ2V0KDApKS50b0VxdWFsKHZhbHVlKVxuICAgIH0pXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { stringifyBooleanField } from "./types/boolean.js";
|
|
2
|
+
import { stringifyDateField } from "./types/date.js";
|
|
3
|
+
import { stringifyDatetimeField } from "./types/datetime.js";
|
|
4
|
+
import { stringifyDurationField } from "./types/duration.js";
|
|
5
|
+
import { stringifyGeopointField } from "./types/geopoint.js";
|
|
6
|
+
import { stringifyIntegerField } from "./types/integer.js";
|
|
7
|
+
import { stringifyListField } from "./types/list.js";
|
|
8
|
+
import { stringifyNumberField } from "./types/number.js";
|
|
9
|
+
import { stringifyStringField } from "./types/string.js";
|
|
10
|
+
import { stringifyTimeField } from "./types/time.js";
|
|
11
|
+
import { stringifyYearField } from "./types/year.js";
|
|
12
|
+
import { stringifyYearmonthField } from "./types/yearmonth.js";
|
|
13
|
+
export function stringifyField(field, fieldExpr) {
|
|
14
|
+
switch (field.type) {
|
|
15
|
+
case "boolean":
|
|
16
|
+
return stringifyBooleanField(field, fieldExpr);
|
|
17
|
+
case "date":
|
|
18
|
+
return stringifyDateField(field, fieldExpr);
|
|
19
|
+
case "datetime":
|
|
20
|
+
return stringifyDatetimeField(field, fieldExpr);
|
|
21
|
+
case "duration":
|
|
22
|
+
return stringifyDurationField(field, fieldExpr);
|
|
23
|
+
case "geopoint":
|
|
24
|
+
return stringifyGeopointField(field, fieldExpr);
|
|
25
|
+
case "integer":
|
|
26
|
+
return stringifyIntegerField(field, fieldExpr);
|
|
27
|
+
case "list":
|
|
28
|
+
return stringifyListField(field, fieldExpr);
|
|
29
|
+
case "number":
|
|
30
|
+
return stringifyNumberField(field, fieldExpr);
|
|
31
|
+
case "string":
|
|
32
|
+
return stringifyStringField(field, fieldExpr);
|
|
33
|
+
case "time":
|
|
34
|
+
return stringifyTimeField(field, fieldExpr);
|
|
35
|
+
case "year":
|
|
36
|
+
return stringifyYearField(field, fieldExpr);
|
|
37
|
+
case "yearmonth":
|
|
38
|
+
return stringifyYearmonthField(field, fieldExpr);
|
|
39
|
+
default:
|
|
40
|
+
return fieldExpr;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZmllbGQvc3RyaW5naWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRTlELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBWSxFQUFFLFNBQWtCO0lBQzdELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLEtBQUssU0FBUztZQUNaLE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2hELEtBQUssTUFBTTtZQUNULE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssVUFBVTtZQUNiLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2pELEtBQUssVUFBVTtZQUNiLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2pELEtBQUssVUFBVTtZQUNiLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2pELEtBQUssU0FBUztZQUNaLE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2hELEtBQUssTUFBTTtZQUNULE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssUUFBUTtZQUNYLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQy9DLEtBQUssUUFBUTtZQUNYLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQy9DLEtBQUssTUFBTTtZQUNULE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssTUFBTTtZQUNULE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLEtBQUssV0FBVztZQUNkLE9BQU8sdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2xEO1lBQ0UsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHR5cGUgKiBhcyBwbCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBzdHJpbmdpZnlCb29sZWFuRmllbGQgfSBmcm9tIFwiLi90eXBlcy9ib29sZWFuLnRzXCJcbmltcG9ydCB7IHN0cmluZ2lmeURhdGVGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2RhdGUudHNcIlxuaW1wb3J0IHsgc3RyaW5naWZ5RGF0ZXRpbWVGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2RhdGV0aW1lLnRzXCJcbmltcG9ydCB7IHN0cmluZ2lmeUR1cmF0aW9uRmllbGQgfSBmcm9tIFwiLi90eXBlcy9kdXJhdGlvbi50c1wiXG5pbXBvcnQgeyBzdHJpbmdpZnlHZW9wb2ludEZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvZ2VvcG9pbnQudHNcIlxuaW1wb3J0IHsgc3RyaW5naWZ5SW50ZWdlckZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvaW50ZWdlci50c1wiXG5pbXBvcnQgeyBzdHJpbmdpZnlMaXN0RmllbGQgfSBmcm9tIFwiLi90eXBlcy9saXN0LnRzXCJcbmltcG9ydCB7IHN0cmluZ2lmeU51bWJlckZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvbnVtYmVyLnRzXCJcbmltcG9ydCB7IHN0cmluZ2lmeVN0cmluZ0ZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvc3RyaW5nLnRzXCJcbmltcG9ydCB7IHN0cmluZ2lmeVRpbWVGaWVsZCB9IGZyb20gXCIuL3R5cGVzL3RpbWUudHNcIlxuaW1wb3J0IHsgc3RyaW5naWZ5WWVhckZpZWxkIH0gZnJvbSBcIi4vdHlwZXMveWVhci50c1wiXG5pbXBvcnQgeyBzdHJpbmdpZnlZZWFybW9udGhGaWVsZCB9IGZyb20gXCIuL3R5cGVzL3llYXJtb250aC50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlGaWVsZChmaWVsZDogRmllbGQsIGZpZWxkRXhwcjogcGwuRXhwcikge1xuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJvb2xlYW5GaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gc3RyaW5naWZ5RGF0ZUZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gc3RyaW5naWZ5RGF0ZXRpbWVGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUR1cmF0aW9uRmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBjYXNlIFwiZ2VvcG9pbnRcIjpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlHZW9wb2ludEZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbnRlZ2VyRmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUxpc3RGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlOdW1iZXJGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTdHJpbmdGaWVsZChmaWVsZCwgZmllbGRFeHByKVxuICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICByZXR1cm4gc3RyaW5naWZ5VGltZUZpZWxkKGZpZWxkLCBmaWVsZEV4cHIpXG4gICAgY2FzZSBcInllYXJcIjpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlZZWFyRmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBjYXNlIFwieWVhcm1vbnRoXCI6XG4gICAgICByZXR1cm4gc3RyaW5naWZ5WWVhcm1vbnRoRmllbGQoZmllbGQsIGZpZWxkRXhwcilcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZpZWxkRXhwclxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { denormalizeTable } from "../table/index.js";
|
|
4
|
+
describe("stringifyField", () => {
|
|
5
|
+
describe("missing values", () => {
|
|
6
|
+
it.each([
|
|
7
|
+
// Schema-level - null values should be converted to first missing value
|
|
8
|
+
[null, "", {}],
|
|
9
|
+
[null, "", { schemaLevel: [] }], // defaults to ""
|
|
10
|
+
[null, "-", { schemaLevel: ["-"] }],
|
|
11
|
+
[null, "x", { schemaLevel: ["x"] }],
|
|
12
|
+
// Regular values should remain unchanged
|
|
13
|
+
["hello", "hello", {}],
|
|
14
|
+
["world", "world", { schemaLevel: ["-"] }],
|
|
15
|
+
// Field-level missing values take precedence
|
|
16
|
+
[null, "", {}], // default field-level missing value
|
|
17
|
+
[null, "-", { fieldLevel: ["-"] }],
|
|
18
|
+
[null, "n/a", { fieldLevel: ["n/a"] }],
|
|
19
|
+
// Regular values with field-level settings
|
|
20
|
+
["test", "test", { fieldLevel: ["-"] }],
|
|
21
|
+
["value", "value", { fieldLevel: ["n/a"] }],
|
|
22
|
+
// Field-level overrides schema-level
|
|
23
|
+
[null, "-", { schemaLevel: ["x"], fieldLevel: ["-"] }],
|
|
24
|
+
[null, "x", { schemaLevel: ["-"], fieldLevel: ["x"] }],
|
|
25
|
+
// Multiple missing values - should use first one
|
|
26
|
+
[null, "-", { fieldLevel: ["-", "n/a", "null"] }],
|
|
27
|
+
[null, "n/a", { schemaLevel: ["n/a", "NULL", ""] }],
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
])("%s -> %s %s", async (value, expected, { fieldLevel, schemaLevel }) => {
|
|
30
|
+
const table = pl.DataFrame({ name: [value] }).lazy();
|
|
31
|
+
const schema = {
|
|
32
|
+
missingValues: schemaLevel,
|
|
33
|
+
fields: [{ name: "name", type: "string", missingValues: fieldLevel }],
|
|
34
|
+
};
|
|
35
|
+
const result = await denormalizeTable(table, schema);
|
|
36
|
+
const frame = await result.collect();
|
|
37
|
+
expect(frame.toRecords()[0]?.name).toEqual(expected);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWVsZC9zdHJpbmdpZnkuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFcEQsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM5QixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDTix3RUFBd0U7WUFDeEUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNkLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQjtZQUNsRCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFbkMseUNBQXlDO1lBQ3pDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUUxQyw2Q0FBNkM7WUFDN0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLG9DQUFvQztZQUNwRCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFFdEMsMkNBQTJDO1lBQzNDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUUzQyxxQ0FBcUM7WUFDckMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBRXRELGlEQUFpRDtZQUNqRCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDakQsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBRW5ELGFBQWE7U0FDZCxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDdkUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNwRCxNQUFNLE1BQU0sR0FBVztnQkFDckIsYUFBYSxFQUFFLFdBQVc7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUN0RSxDQUFBO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7WUFFcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdEQsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgKiBhcyBwbCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgZGVub3JtYWxpemVUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5cbmRlc2NyaWJlKFwic3RyaW5naWZ5RmllbGRcIiwgKCkgPT4ge1xuICBkZXNjcmliZShcIm1pc3NpbmcgdmFsdWVzXCIsICgpID0+IHtcbiAgICBpdC5lYWNoKFtcbiAgICAgIC8vIFNjaGVtYS1sZXZlbCAtIG51bGwgdmFsdWVzIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gZmlyc3QgbWlzc2luZyB2YWx1ZVxuICAgICAgW251bGwsIFwiXCIsIHt9XSxcbiAgICAgIFtudWxsLCBcIlwiLCB7IHNjaGVtYUxldmVsOiBbXSB9XSwgLy8gZGVmYXVsdHMgdG8gXCJcIlxuICAgICAgW251bGwsIFwiLVwiLCB7IHNjaGVtYUxldmVsOiBbXCItXCJdIH1dLFxuICAgICAgW251bGwsIFwieFwiLCB7IHNjaGVtYUxldmVsOiBbXCJ4XCJdIH1dLFxuXG4gICAgICAvLyBSZWd1bGFyIHZhbHVlcyBzaG91bGQgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgW1wiaGVsbG9cIiwgXCJoZWxsb1wiLCB7fV0sXG4gICAgICBbXCJ3b3JsZFwiLCBcIndvcmxkXCIsIHsgc2NoZW1hTGV2ZWw6IFtcIi1cIl0gfV0sXG5cbiAgICAgIC8vIEZpZWxkLWxldmVsIG1pc3NpbmcgdmFsdWVzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgW251bGwsIFwiXCIsIHt9XSwgLy8gZGVmYXVsdCBmaWVsZC1sZXZlbCBtaXNzaW5nIHZhbHVlXG4gICAgICBbbnVsbCwgXCItXCIsIHsgZmllbGRMZXZlbDogW1wiLVwiXSB9XSxcbiAgICAgIFtudWxsLCBcIm4vYVwiLCB7IGZpZWxkTGV2ZWw6IFtcIm4vYVwiXSB9XSxcblxuICAgICAgLy8gUmVndWxhciB2YWx1ZXMgd2l0aCBmaWVsZC1sZXZlbCBzZXR0aW5nc1xuICAgICAgW1widGVzdFwiLCBcInRlc3RcIiwgeyBmaWVsZExldmVsOiBbXCItXCJdIH1dLFxuICAgICAgW1widmFsdWVcIiwgXCJ2YWx1ZVwiLCB7IGZpZWxkTGV2ZWw6IFtcIm4vYVwiXSB9XSxcblxuICAgICAgLy8gRmllbGQtbGV2ZWwgb3ZlcnJpZGVzIHNjaGVtYS1sZXZlbFxuICAgICAgW251bGwsIFwiLVwiLCB7IHNjaGVtYUxldmVsOiBbXCJ4XCJdLCBmaWVsZExldmVsOiBbXCItXCJdIH1dLFxuICAgICAgW251bGwsIFwieFwiLCB7IHNjaGVtYUxldmVsOiBbXCItXCJdLCBmaWVsZExldmVsOiBbXCJ4XCJdIH1dLFxuXG4gICAgICAvLyBNdWx0aXBsZSBtaXNzaW5nIHZhbHVlcyAtIHNob3VsZCB1c2UgZmlyc3Qgb25lXG4gICAgICBbbnVsbCwgXCItXCIsIHsgZmllbGRMZXZlbDogW1wiLVwiLCBcIm4vYVwiLCBcIm51bGxcIl0gfV0sXG4gICAgICBbbnVsbCwgXCJuL2FcIiwgeyBzY2hlbWFMZXZlbDogW1wibi9hXCIsIFwiTlVMTFwiLCBcIlwiXSB9XSxcblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIF0pKFwiJXMgLT4gJXMgJXNcIiwgYXN5bmMgKHZhbHVlLCBleHBlY3RlZCwgeyBmaWVsZExldmVsLCBzY2hlbWFMZXZlbCB9KSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHBsLkRhdGFGcmFtZSh7IG5hbWU6IFt2YWx1ZV0gfSkubGF6eSgpXG4gICAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgICAgbWlzc2luZ1ZhbHVlczogc2NoZW1hTGV2ZWwsXG4gICAgICAgIGZpZWxkczogW3sgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIsIG1pc3NpbmdWYWx1ZXM6IGZpZWxkTGV2ZWwgfV0sXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlbm9ybWFsaXplVGFibGUodGFibGUsIHNjaGVtYSlcbiAgICAgIGNvbnN0IGZyYW1lID0gYXdhaXQgcmVzdWx0LmNvbGxlY3QoKVxuXG4gICAgICBleHBlY3QoZnJhbWUudG9SZWNvcmRzKClbMF0/Lm5hbWUpLnRvRXF1YWwoZXhwZWN0ZWQpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
const DEFAULT_MISSING_VALUES = [""];
|
|
3
|
+
export function substituteField(mapping, fieldExpr) {
|
|
4
|
+
if (!mapping.source.type.equals(pl.String))
|
|
5
|
+
return fieldExpr;
|
|
6
|
+
const flattenMissingValues = mapping.target.missingValues?.map(it => typeof it === "string" ? it : it.value) ?? DEFAULT_MISSING_VALUES;
|
|
7
|
+
if (flattenMissingValues.length) {
|
|
8
|
+
fieldExpr = pl
|
|
9
|
+
.when(fieldExpr.isIn(flattenMissingValues))
|
|
10
|
+
.then(pl.lit(null))
|
|
11
|
+
.otherwise(fieldExpr)
|
|
12
|
+
.alias(mapping.target.name);
|
|
13
|
+
}
|
|
14
|
+
return fieldExpr;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic3RpdHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2ZpZWxkL3N1YnN0aXR1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHbkMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRW5DLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBcUIsRUFBRSxTQUFrQjtJQUN2RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUU1RCxNQUFNLG9CQUFvQixHQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDckMsT0FBTyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQ3ZDLElBQUksc0JBQXNCLENBQUE7SUFFN0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxTQUFTLEdBQUcsRUFBRTthQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEIsU0FBUyxDQUFDLFNBQVMsQ0FBQzthQUNwQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBsIGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB0eXBlIHsgRmllbGRNYXBwaW5nIH0gZnJvbSBcIi4vTWFwcGluZy50c1wiXG5cbmNvbnN0IERFRkFVTFRfTUlTU0lOR19WQUxVRVMgPSBbXCJcIl1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVGaWVsZChtYXBwaW5nOiBGaWVsZE1hcHBpbmcsIGZpZWxkRXhwcjogcGwuRXhwcikge1xuICBpZiAoIW1hcHBpbmcuc291cmNlLnR5cGUuZXF1YWxzKHBsLlN0cmluZykpIHJldHVybiBmaWVsZEV4cHJcblxuICBjb25zdCBmbGF0dGVuTWlzc2luZ1ZhbHVlcyA9XG4gICAgbWFwcGluZy50YXJnZXQubWlzc2luZ1ZhbHVlcz8ubWFwKGl0ID0+XG4gICAgICB0eXBlb2YgaXQgPT09IFwic3RyaW5nXCIgPyBpdCA6IGl0LnZhbHVlLFxuICAgICkgPz8gREVGQVVMVF9NSVNTSU5HX1ZBTFVFU1xuXG4gIGlmIChmbGF0dGVuTWlzc2luZ1ZhbHVlcy5sZW5ndGgpIHtcbiAgICBmaWVsZEV4cHIgPSBwbFxuICAgICAgLndoZW4oZmllbGRFeHByLmlzSW4oZmxhdHRlbk1pc3NpbmdWYWx1ZXMpKVxuICAgICAgLnRoZW4ocGwubGl0KG51bGwpKVxuICAgICAgLm90aGVyd2lzZShmaWVsZEV4cHIpXG4gICAgICAuYWxpYXMobWFwcGluZy50YXJnZXQubmFtZSlcbiAgfVxuXG4gIHJldHVybiBmaWVsZEV4cHJcbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { inspectJsonField } from "./json.js";
|
|
2
|
+
export async function inspectArrayField(field, table) {
|
|
3
|
+
return inspectJsonField(field, table);
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9maWVsZC90eXBlcy9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFNUMsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLEtBQVk7SUFDckUsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXJyYXlGaWVsZCB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB0eXBlIHsgVGFibGUgfSBmcm9tIFwiLi4vLi4vdGFibGUvaW5kZXgudHNcIlxuaW1wb3J0IHsgaW5zcGVjdEpzb25GaWVsZCB9IGZyb20gXCIuL2pzb24udHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zcGVjdEFycmF5RmllbGQoZmllbGQ6IEFycmF5RmllbGQsIHRhYmxlOiBUYWJsZSkge1xuICByZXR1cm4gaW5zcGVjdEpzb25GaWVsZChmaWVsZCwgdGFibGUpXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|