datera 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +132 -0
- package/dist/api/clean.d.ts +138 -0
- package/dist/api/clean.js +138 -0
- package/dist/api/formats.d.ts +19 -0
- package/dist/api/formats.js +106 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.js +27 -0
- package/dist/api/inspect.d.ts +13 -0
- package/dist/api/inspect.js +44 -0
- package/dist/api/parse.d.ts +2 -0
- package/dist/api/parse.js +19 -0
- package/dist/api/rows.d.ts +23 -0
- package/dist/api/rows.js +63 -0
- package/dist/cli.d.ts +62 -0
- package/dist/cli.js +225 -0
- package/dist/commands.d.ts +3 -0
- package/dist/commands.js +169 -0
- package/dist/config/check.d.ts +11 -0
- package/dist/config/check.js +99 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.js +16 -0
- package/dist/config/ioSchema.d.ts +97 -0
- package/dist/config/ioSchema.js +111 -0
- package/dist/config/load.d.ts +5 -0
- package/dist/config/load.js +68 -0
- package/dist/config/mergeSchema.d.ts +36 -0
- package/dist/config/mergeSchema.js +46 -0
- package/dist/config/messages.d.ts +7 -0
- package/dist/config/messages.js +33 -0
- package/dist/config/prepareSchema.d.ts +12 -0
- package/dist/config/prepareSchema.js +15 -0
- package/dist/config/schema.d.ts +195 -0
- package/dist/config/schema.js +44 -0
- package/dist/config/validationSchema.d.ts +27 -0
- package/dist/config/validationSchema.js +50 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.js +15 -0
- package/dist/filters/combine.d.ts +10 -0
- package/dist/filters/combine.js +60 -0
- package/dist/filters/combineTypes.d.ts +6 -0
- package/dist/filters/combineTypes.js +2 -0
- package/dist/filters/dedupe.d.ts +12 -0
- package/dist/filters/dedupe.js +45 -0
- package/dist/filters/fillEmpty.d.ts +9 -0
- package/dist/filters/fillEmpty.js +32 -0
- package/dist/filters/fillEmptyTypes.d.ts +5 -0
- package/dist/filters/fillEmptyTypes.js +2 -0
- package/dist/filters/merge.d.ts +15 -0
- package/dist/filters/merge.js +113 -0
- package/dist/filters/mergeStrategies.d.ts +10 -0
- package/dist/filters/mergeStrategies.js +69 -0
- package/dist/filters/mergeTypes.d.ts +32 -0
- package/dist/filters/mergeTypes.js +2 -0
- package/dist/filters/mergeUnkeyed.d.ts +3 -0
- package/dist/filters/mergeUnkeyed.js +21 -0
- package/dist/filters/types.d.ts +3 -0
- package/dist/filters/types.js +2 -0
- package/dist/filters/validate.d.ts +16 -0
- package/dist/filters/validate.js +79 -0
- package/dist/filters/validateTypes.d.ts +28 -0
- package/dist/filters/validateTypes.js +2 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +40 -0
- package/dist/io/csv/csvFormat.d.ts +4 -0
- package/dist/io/csv/csvFormat.js +94 -0
- package/dist/io/csv/csvSink.d.ts +14 -0
- package/dist/io/csv/csvSink.js +32 -0
- package/dist/io/csv/csvSource.d.ts +13 -0
- package/dist/io/csv/csvSource.js +29 -0
- package/dist/io/custom/loader.d.ts +1 -0
- package/dist/io/custom/loader.js +36 -0
- package/dist/io/custom/registry.d.ts +13 -0
- package/dist/io/custom/registry.js +50 -0
- package/dist/io/excel/excelCell.d.ts +4 -0
- package/dist/io/excel/excelCell.js +29 -0
- package/dist/io/excel/excelSink.d.ts +14 -0
- package/dist/io/excel/excelSink.js +57 -0
- package/dist/io/excel/excelSource.d.ts +11 -0
- package/dist/io/excel/excelSource.js +47 -0
- package/dist/io/excel/workbook.d.ts +4 -0
- package/dist/io/excel/workbook.js +20 -0
- package/dist/io/factory.d.ts +5 -0
- package/dist/io/factory.js +106 -0
- package/dist/io/files.d.ts +7 -0
- package/dist/io/files.js +48 -0
- package/dist/io/header.d.ts +2 -0
- package/dist/io/header.js +42 -0
- package/dist/io/json/jsonSink.d.ts +12 -0
- package/dist/io/json/jsonSink.js +19 -0
- package/dist/io/json/jsonSource.d.ts +11 -0
- package/dist/io/json/jsonSource.js +66 -0
- package/dist/io/mysql/client.d.ts +13 -0
- package/dist/io/mysql/client.js +73 -0
- package/dist/io/mysql/mysqlSource.d.ts +13 -0
- package/dist/io/mysql/mysqlSource.js +25 -0
- package/dist/io/optional.d.ts +2 -0
- package/dist/io/optional.js +36 -0
- package/dist/io/parquet/parquetLibrary.d.ts +11 -0
- package/dist/io/parquet/parquetLibrary.js +20 -0
- package/dist/io/parquet/parquetSink.d.ts +15 -0
- package/dist/io/parquet/parquetSink.js +58 -0
- package/dist/io/parquet/parquetSource.d.ts +13 -0
- package/dist/io/parquet/parquetSource.js +68 -0
- package/dist/io/postgres/postgresSource.d.ts +26 -0
- package/dist/io/postgres/postgresSource.js +42 -0
- package/dist/io/safety.d.ts +4 -0
- package/dist/io/safety.js +83 -0
- package/dist/io/sheets/client.d.ts +10 -0
- package/dist/io/sheets/client.js +141 -0
- package/dist/io/sheets/sheetsSink.d.ts +12 -0
- package/dist/io/sheets/sheetsSink.js +24 -0
- package/dist/io/sheets/sheetsSource.d.ts +10 -0
- package/dist/io/sheets/sheetsSource.js +47 -0
- package/dist/io/sql/cell.d.ts +5 -0
- package/dist/io/sql/cell.js +38 -0
- package/dist/io/sql/driver.d.ts +1 -0
- package/dist/io/sql/driver.js +15 -0
- package/dist/io/sql/names.d.ts +1 -0
- package/dist/io/sql/names.js +12 -0
- package/dist/io/sqlite/sqliteSource.d.ts +11 -0
- package/dist/io/sqlite/sqliteSource.js +52 -0
- package/dist/io/sqlserver/sqlServerSource.d.ts +24 -0
- package/dist/io/sqlserver/sqlServerSource.js +49 -0
- package/dist/io/types.d.ts +11 -0
- package/dist/io/types.js +2 -0
- package/dist/io/xml/xmlParse.d.ts +9 -0
- package/dist/io/xml/xmlParse.js +178 -0
- package/dist/io/xml/xmlSink.d.ts +18 -0
- package/dist/io/xml/xmlSink.js +79 -0
- package/dist/io/xml/xmlSource.d.ts +11 -0
- package/dist/io/xml/xmlSource.js +93 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.js +29 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +18 -0
- package/dist/normalizers/builtin.d.ts +5 -0
- package/dist/normalizers/builtin.js +23 -0
- package/dist/normalizers/index.d.ts +2 -0
- package/dist/normalizers/index.js +14 -0
- package/dist/normalizers/loader.d.ts +1 -0
- package/dist/normalizers/loader.js +30 -0
- package/dist/normalizers/registry.d.ts +9 -0
- package/dist/normalizers/registry.js +29 -0
- package/dist/pipeline/index.d.ts +7 -0
- package/dist/pipeline/index.js +17 -0
- package/dist/pipeline/modes.d.ts +6 -0
- package/dist/pipeline/modes.js +48 -0
- package/dist/pipeline/report.d.ts +3 -0
- package/dist/pipeline/report.js +32 -0
- package/dist/pipeline/runEtl.d.ts +24 -0
- package/dist/pipeline/runEtl.js +98 -0
- package/dist/pipeline/steps.d.ts +4 -0
- package/dist/pipeline/steps.js +36 -0
- package/dist/pipeline/types.d.ts +34 -0
- package/dist/pipeline/types.js +2 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +2 -0
- package/package.json +128 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { etlConfigSchema } from "./schema";
|
|
2
|
+
export type { EtlConfig } from "./schema";
|
|
3
|
+
export type { SourceConfig, DestinationConfig } from "./ioSchema";
|
|
4
|
+
export { loadConfig, loadJsonConfig, parseConfig, withEnv } from "./load";
|
|
5
|
+
export { checkConfigFile, checkConfigText, formatCheck } from "./check";
|
|
6
|
+
export type { ConfigCheck, ConfigProblem } from "./check";
|
|
7
|
+
export { translateIssue } from "./messages";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.translateIssue = exports.formatCheck = exports.checkConfigText = exports.checkConfigFile = exports.withEnv = exports.parseConfig = exports.loadJsonConfig = exports.loadConfig = exports.etlConfigSchema = void 0;
|
|
4
|
+
var schema_1 = require("./schema");
|
|
5
|
+
Object.defineProperty(exports, "etlConfigSchema", { enumerable: true, get: function () { return schema_1.etlConfigSchema; } });
|
|
6
|
+
var load_1 = require("./load");
|
|
7
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return load_1.loadConfig; } });
|
|
8
|
+
Object.defineProperty(exports, "loadJsonConfig", { enumerable: true, get: function () { return load_1.loadJsonConfig; } });
|
|
9
|
+
Object.defineProperty(exports, "parseConfig", { enumerable: true, get: function () { return load_1.parseConfig; } });
|
|
10
|
+
Object.defineProperty(exports, "withEnv", { enumerable: true, get: function () { return load_1.withEnv; } });
|
|
11
|
+
var check_1 = require("./check");
|
|
12
|
+
Object.defineProperty(exports, "checkConfigFile", { enumerable: true, get: function () { return check_1.checkConfigFile; } });
|
|
13
|
+
Object.defineProperty(exports, "checkConfigText", { enumerable: true, get: function () { return check_1.checkConfigText; } });
|
|
14
|
+
Object.defineProperty(exports, "formatCheck", { enumerable: true, get: function () { return check_1.formatCheck; } });
|
|
15
|
+
var messages_1 = require("./messages");
|
|
16
|
+
Object.defineProperty(exports, "translateIssue", { enumerable: true, get: function () { return messages_1.translateIssue; } });
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const sourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3
|
+
host: z.ZodOptional<z.ZodString>;
|
|
4
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
user: z.ZodOptional<z.ZodString>;
|
|
6
|
+
password: z.ZodOptional<z.ZodString>;
|
|
7
|
+
database: z.ZodOptional<z.ZodString>;
|
|
8
|
+
table: z.ZodOptional<z.ZodString>;
|
|
9
|
+
type: z.ZodLiteral<"mysql">;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
host: z.ZodOptional<z.ZodString>;
|
|
12
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
user: z.ZodOptional<z.ZodString>;
|
|
14
|
+
password: z.ZodOptional<z.ZodString>;
|
|
15
|
+
database: z.ZodOptional<z.ZodString>;
|
|
16
|
+
table: z.ZodOptional<z.ZodString>;
|
|
17
|
+
type: z.ZodLiteral<"postgres">;
|
|
18
|
+
ssl: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
20
|
+
host: z.ZodOptional<z.ZodString>;
|
|
21
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
user: z.ZodOptional<z.ZodString>;
|
|
23
|
+
password: z.ZodOptional<z.ZodString>;
|
|
24
|
+
database: z.ZodOptional<z.ZodString>;
|
|
25
|
+
table: z.ZodOptional<z.ZodString>;
|
|
26
|
+
type: z.ZodLiteral<"sqlserver">;
|
|
27
|
+
encrypt: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
trustServerCertificate: z.ZodOptional<z.ZodBoolean>;
|
|
29
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
30
|
+
type: z.ZodLiteral<"sqlite">;
|
|
31
|
+
path: z.ZodString;
|
|
32
|
+
table: z.ZodString;
|
|
33
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
34
|
+
type: z.ZodLiteral<"csv">;
|
|
35
|
+
path: z.ZodString;
|
|
36
|
+
delimiter: z.ZodOptional<z.ZodString>;
|
|
37
|
+
encoding: z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
latin1: "latin1";
|
|
39
|
+
"utf-8": "utf-8";
|
|
40
|
+
}>>;
|
|
41
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
42
|
+
type: z.ZodLiteral<"json">;
|
|
43
|
+
path: z.ZodString;
|
|
44
|
+
recordsPath: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
type: z.ZodLiteral<"xml">;
|
|
47
|
+
path: z.ZodString;
|
|
48
|
+
recordsPath: z.ZodOptional<z.ZodString>;
|
|
49
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
50
|
+
type: z.ZodLiteral<"parquet">;
|
|
51
|
+
path: z.ZodString;
|
|
52
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
53
|
+
type: z.ZodLiteral<"excel">;
|
|
54
|
+
path: z.ZodString;
|
|
55
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
56
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
57
|
+
type: z.ZodLiteral<"sheets">;
|
|
58
|
+
spreadsheetId: z.ZodString;
|
|
59
|
+
credentialsPath: z.ZodOptional<z.ZodString>;
|
|
60
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
62
|
+
type: z.ZodLiteral<"custom">;
|
|
63
|
+
adapter: z.ZodString;
|
|
64
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
65
|
+
}, z.core.$strip>], "type">;
|
|
66
|
+
export declare const destinationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
67
|
+
type: z.ZodLiteral<"sheets">;
|
|
68
|
+
spreadsheetId: z.ZodOptional<z.ZodString>;
|
|
69
|
+
credentialsPath: z.ZodOptional<z.ZodString>;
|
|
70
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
71
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
72
|
+
type: z.ZodLiteral<"csv">;
|
|
73
|
+
path: z.ZodString;
|
|
74
|
+
delimiter: z.ZodOptional<z.ZodString>;
|
|
75
|
+
bom: z.ZodOptional<z.ZodBoolean>;
|
|
76
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
77
|
+
type: z.ZodLiteral<"json">;
|
|
78
|
+
path: z.ZodString;
|
|
79
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
80
|
+
type: z.ZodLiteral<"xml">;
|
|
81
|
+
path: z.ZodString;
|
|
82
|
+
root: z.ZodOptional<z.ZodString>;
|
|
83
|
+
record: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
85
|
+
type: z.ZodLiteral<"parquet">;
|
|
86
|
+
path: z.ZodString;
|
|
87
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
88
|
+
type: z.ZodLiteral<"excel">;
|
|
89
|
+
path: z.ZodString;
|
|
90
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
91
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
92
|
+
type: z.ZodLiteral<"custom">;
|
|
93
|
+
adapter: z.ZodString;
|
|
94
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
95
|
+
}, z.core.$strip>], "type">;
|
|
96
|
+
export type SourceConfig = z.infer<typeof sourceSchema>;
|
|
97
|
+
export type DestinationConfig = z.infer<typeof destinationSchema>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.destinationSchema = exports.sourceSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const xmlName = zod_1.z
|
|
6
|
+
.string()
|
|
7
|
+
.regex(/^[\p{L}_][\p{L}\p{N}_.-]*$/u, "Nome de elemento XML inválido: use letras, números, _ . ou -, começando com letra.");
|
|
8
|
+
const serverFields = {
|
|
9
|
+
host: zod_1.z.string().optional(),
|
|
10
|
+
port: zod_1.z.number().optional(),
|
|
11
|
+
user: zod_1.z.string().optional(),
|
|
12
|
+
password: zod_1.z.string().optional(),
|
|
13
|
+
database: zod_1.z.string().optional(),
|
|
14
|
+
table: zod_1.z.string().optional(),
|
|
15
|
+
};
|
|
16
|
+
exports.sourceSchema = zod_1.z.discriminatedUnion("type", [
|
|
17
|
+
zod_1.z.object({
|
|
18
|
+
type: zod_1.z.literal("mysql"),
|
|
19
|
+
...serverFields,
|
|
20
|
+
}),
|
|
21
|
+
zod_1.z.object({
|
|
22
|
+
type: zod_1.z.literal("postgres"),
|
|
23
|
+
...serverFields,
|
|
24
|
+
ssl: zod_1.z.boolean().optional(),
|
|
25
|
+
}),
|
|
26
|
+
zod_1.z.object({
|
|
27
|
+
type: zod_1.z.literal("sqlserver"),
|
|
28
|
+
...serverFields,
|
|
29
|
+
encrypt: zod_1.z.boolean().optional(),
|
|
30
|
+
trustServerCertificate: zod_1.z.boolean().optional(),
|
|
31
|
+
}),
|
|
32
|
+
zod_1.z.object({
|
|
33
|
+
type: zod_1.z.literal("sqlite"),
|
|
34
|
+
path: zod_1.z.string(),
|
|
35
|
+
table: zod_1.z.string().min(1),
|
|
36
|
+
}),
|
|
37
|
+
zod_1.z.object({
|
|
38
|
+
type: zod_1.z.literal("csv"),
|
|
39
|
+
path: zod_1.z.string(),
|
|
40
|
+
delimiter: zod_1.z.string().min(1).optional(),
|
|
41
|
+
encoding: zod_1.z.enum(["utf-8", "latin1"]).optional(),
|
|
42
|
+
}),
|
|
43
|
+
zod_1.z.object({
|
|
44
|
+
type: zod_1.z.literal("json"),
|
|
45
|
+
path: zod_1.z.string(),
|
|
46
|
+
recordsPath: zod_1.z.string().optional(),
|
|
47
|
+
}),
|
|
48
|
+
zod_1.z.object({
|
|
49
|
+
type: zod_1.z.literal("xml"),
|
|
50
|
+
path: zod_1.z.string(),
|
|
51
|
+
recordsPath: zod_1.z.string().min(1).optional(),
|
|
52
|
+
}),
|
|
53
|
+
zod_1.z.object({
|
|
54
|
+
type: zod_1.z.literal("parquet"),
|
|
55
|
+
path: zod_1.z.string(),
|
|
56
|
+
}),
|
|
57
|
+
zod_1.z.object({
|
|
58
|
+
type: zod_1.z.literal("excel"),
|
|
59
|
+
path: zod_1.z.string(),
|
|
60
|
+
sheet: zod_1.z.string().min(1).optional(),
|
|
61
|
+
}),
|
|
62
|
+
zod_1.z.object({
|
|
63
|
+
type: zod_1.z.literal("sheets"),
|
|
64
|
+
spreadsheetId: zod_1.z.string().min(1),
|
|
65
|
+
credentialsPath: zod_1.z.string().optional(),
|
|
66
|
+
sheet: zod_1.z.string().min(1).optional(),
|
|
67
|
+
}),
|
|
68
|
+
zod_1.z.object({
|
|
69
|
+
type: zod_1.z.literal("custom"),
|
|
70
|
+
adapter: zod_1.z.string().min(1),
|
|
71
|
+
options: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
72
|
+
}),
|
|
73
|
+
]);
|
|
74
|
+
exports.destinationSchema = zod_1.z.discriminatedUnion("type", [
|
|
75
|
+
zod_1.z.object({
|
|
76
|
+
type: zod_1.z.literal("sheets"),
|
|
77
|
+
spreadsheetId: zod_1.z.string().optional(),
|
|
78
|
+
credentialsPath: zod_1.z.string().optional(),
|
|
79
|
+
sheet: zod_1.z.string().min(1).optional(),
|
|
80
|
+
}),
|
|
81
|
+
zod_1.z.object({
|
|
82
|
+
type: zod_1.z.literal("csv"),
|
|
83
|
+
path: zod_1.z.string(),
|
|
84
|
+
delimiter: zod_1.z.string().min(1).optional(),
|
|
85
|
+
bom: zod_1.z.boolean().optional(),
|
|
86
|
+
}),
|
|
87
|
+
zod_1.z.object({
|
|
88
|
+
type: zod_1.z.literal("json"),
|
|
89
|
+
path: zod_1.z.string(),
|
|
90
|
+
}),
|
|
91
|
+
zod_1.z.object({
|
|
92
|
+
type: zod_1.z.literal("xml"),
|
|
93
|
+
path: zod_1.z.string(),
|
|
94
|
+
root: xmlName.optional(),
|
|
95
|
+
record: xmlName.optional(),
|
|
96
|
+
}),
|
|
97
|
+
zod_1.z.object({
|
|
98
|
+
type: zod_1.z.literal("parquet"),
|
|
99
|
+
path: zod_1.z.string(),
|
|
100
|
+
}),
|
|
101
|
+
zod_1.z.object({
|
|
102
|
+
type: zod_1.z.literal("excel"),
|
|
103
|
+
path: zod_1.z.string(),
|
|
104
|
+
sheet: zod_1.z.string().min(1).optional(),
|
|
105
|
+
}),
|
|
106
|
+
zod_1.z.object({
|
|
107
|
+
type: zod_1.z.literal("custom"),
|
|
108
|
+
adapter: zod_1.z.string().min(1),
|
|
109
|
+
options: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
110
|
+
}),
|
|
111
|
+
]);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { EtlConfig } from "./schema";
|
|
2
|
+
export declare function loadJsonConfig(filePath: string): EtlConfig;
|
|
3
|
+
export declare function withEnv(jsonConfig: EtlConfig): EtlConfig;
|
|
4
|
+
export declare function loadConfig(jsonPath: string): EtlConfig;
|
|
5
|
+
export declare function parseConfig(value: unknown): EtlConfig;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadJsonConfig = loadJsonConfig;
|
|
7
|
+
exports.withEnv = withEnv;
|
|
8
|
+
exports.loadConfig = loadConfig;
|
|
9
|
+
exports.parseConfig = parseConfig;
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const env_1 = require("../env");
|
|
12
|
+
const schema_1 = require("./schema");
|
|
13
|
+
function loadJsonConfig(filePath) {
|
|
14
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
15
|
+
const parsedData = JSON.parse(content);
|
|
16
|
+
return schema_1.etlConfigSchema.parse(parsedData);
|
|
17
|
+
}
|
|
18
|
+
function withDatabaseEnv(source) {
|
|
19
|
+
if (source?.type !== "mysql" &&
|
|
20
|
+
source?.type !== "postgres" &&
|
|
21
|
+
source?.type !== "sqlserver")
|
|
22
|
+
return source;
|
|
23
|
+
const port = (0, env_1.getOptionalEnv)("DB_PORT");
|
|
24
|
+
return {
|
|
25
|
+
...source,
|
|
26
|
+
host: (0, env_1.getOptionalEnv)("DB_HOST") ?? source.host,
|
|
27
|
+
port: port !== undefined ? Number(port) : source.port,
|
|
28
|
+
user: (0, env_1.getOptionalEnv)("DB_USER") ?? source.user,
|
|
29
|
+
password: (0, env_1.getOptionalEnv)("DB_PASSWORD") ?? source.password,
|
|
30
|
+
database: (0, env_1.getOptionalEnv)("DB_NAME") ?? source.database,
|
|
31
|
+
table: (0, env_1.getOptionalEnv)("DB_TABLE") ?? source.table,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function withSheetsEnv(destination) {
|
|
35
|
+
if (destination?.type !== "sheets")
|
|
36
|
+
return destination;
|
|
37
|
+
return {
|
|
38
|
+
...destination,
|
|
39
|
+
spreadsheetId: (0, env_1.getOptionalEnv)("GOOGLE_SPREADSHEET_ID") ??
|
|
40
|
+
destination.spreadsheetId,
|
|
41
|
+
credentialsPath: (0, env_1.getOptionalEnv)("GOOGLE_SERVICE_ACCOUNT_KEY_PATH") ??
|
|
42
|
+
destination.credentialsPath,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function withEnv(jsonConfig) {
|
|
46
|
+
const dbPort = (0, env_1.getOptionalEnv)("DB_PORT");
|
|
47
|
+
const finalConfig = {
|
|
48
|
+
...jsonConfig,
|
|
49
|
+
source: withDatabaseEnv(jsonConfig.source),
|
|
50
|
+
destination: withSheetsEnv(jsonConfig.destination),
|
|
51
|
+
tableName: (0, env_1.getOptionalEnv)("DB_TABLE") ?? jsonConfig.tableName,
|
|
52
|
+
spreadsheetId: (0, env_1.getOptionalEnv)("GOOGLE_SPREADSHEET_ID") ?? jsonConfig.spreadsheetId,
|
|
53
|
+
credentialsPath: (0, env_1.getOptionalEnv)("GOOGLE_SERVICE_ACCOUNT_KEY_PATH") ??
|
|
54
|
+
jsonConfig.credentialsPath,
|
|
55
|
+
dbHost: (0, env_1.getOptionalEnv)("DB_HOST") ?? jsonConfig.dbHost,
|
|
56
|
+
dbPort: dbPort !== undefined ? Number(dbPort) : jsonConfig.dbPort,
|
|
57
|
+
dbUser: (0, env_1.getOptionalEnv)("DB_USER") ?? jsonConfig.dbUser,
|
|
58
|
+
dbPassword: (0, env_1.getOptionalEnv)("DB_PASSWORD") ?? jsonConfig.dbPassword,
|
|
59
|
+
dbName: (0, env_1.getOptionalEnv)("DB_NAME") ?? jsonConfig.dbName,
|
|
60
|
+
};
|
|
61
|
+
return schema_1.etlConfigSchema.parse(finalConfig);
|
|
62
|
+
}
|
|
63
|
+
function loadConfig(jsonPath) {
|
|
64
|
+
return withEnv(loadJsonConfig(jsonPath));
|
|
65
|
+
}
|
|
66
|
+
function parseConfig(value) {
|
|
67
|
+
return withEnv(schema_1.etlConfigSchema.parse(value));
|
|
68
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const mergeColumnSchema: z.ZodObject<{
|
|
3
|
+
column: z.ZodString;
|
|
4
|
+
strategy: z.ZodEnum<{
|
|
5
|
+
concat: "concat";
|
|
6
|
+
"extra-column": "extra-column";
|
|
7
|
+
overwrite: "overwrite";
|
|
8
|
+
}>;
|
|
9
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
10
|
+
distribute: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
columns: z.ZodArray<z.ZodString>;
|
|
12
|
+
overflowInto: z.ZodOptional<z.ZodString>;
|
|
13
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
byGroup: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
16
|
+
strategy: z.ZodEnum<{
|
|
17
|
+
concat: "concat";
|
|
18
|
+
"extra-column": "extra-column";
|
|
19
|
+
overwrite: "overwrite";
|
|
20
|
+
}>;
|
|
21
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
22
|
+
into: z.ZodOptional<z.ZodString>;
|
|
23
|
+
distribute: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
columns: z.ZodArray<z.ZodString>;
|
|
25
|
+
overflowInto: z.ZodOptional<z.ZodString>;
|
|
26
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
+
}, z.core.$strip>>;
|
|
28
|
+
}, z.core.$strip>>>;
|
|
29
|
+
unkeyed: z.ZodOptional<z.ZodObject<{
|
|
30
|
+
strategy: z.ZodEnum<{
|
|
31
|
+
"collapse-column": "collapse-column";
|
|
32
|
+
}>;
|
|
33
|
+
into: z.ZodOptional<z.ZodString>;
|
|
34
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, z.core.$strip>>;
|
|
36
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeColumnSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const mergeColumnStrategySchema = zod_1.z.enum([
|
|
6
|
+
"concat",
|
|
7
|
+
"overwrite",
|
|
8
|
+
"extra-column",
|
|
9
|
+
]);
|
|
10
|
+
const distributeSchema = zod_1.z.object({
|
|
11
|
+
columns: zod_1.z.array(zod_1.z.string()).min(1),
|
|
12
|
+
overflowInto: zod_1.z.string().optional(),
|
|
13
|
+
sources: zod_1.z.array(zod_1.z.string()).optional(),
|
|
14
|
+
});
|
|
15
|
+
const distributeOnlyOnConcat = {
|
|
16
|
+
message: 'distribute só é permitido quando strategy é "concat".',
|
|
17
|
+
path: ["distribute"],
|
|
18
|
+
};
|
|
19
|
+
const groupOverrideSchema = zod_1.z
|
|
20
|
+
.object({
|
|
21
|
+
strategy: mergeColumnStrategySchema,
|
|
22
|
+
separator: zod_1.z.string().optional(),
|
|
23
|
+
into: zod_1.z.string().optional(),
|
|
24
|
+
distribute: distributeSchema.optional(),
|
|
25
|
+
})
|
|
26
|
+
.refine((value) => value.strategy === "concat" || value.distribute === undefined, distributeOnlyOnConcat)
|
|
27
|
+
.refine((value) => value.into === undefined || value.distribute === undefined, {
|
|
28
|
+
message: "into e distribute não podem ser usados juntos, o distribute já define as colunas de destino.",
|
|
29
|
+
path: ["into"],
|
|
30
|
+
});
|
|
31
|
+
exports.mergeColumnSchema = zod_1.z
|
|
32
|
+
.object({
|
|
33
|
+
column: zod_1.z.string(),
|
|
34
|
+
strategy: mergeColumnStrategySchema,
|
|
35
|
+
separator: zod_1.z.string().optional(),
|
|
36
|
+
distribute: distributeSchema.optional(),
|
|
37
|
+
byGroup: zod_1.z.record(zod_1.z.string(), groupOverrideSchema).optional(),
|
|
38
|
+
unkeyed: zod_1.z
|
|
39
|
+
.object({
|
|
40
|
+
strategy: zod_1.z.enum(["collapse-column"]),
|
|
41
|
+
into: zod_1.z.string().optional(),
|
|
42
|
+
separator: zod_1.z.string().optional(),
|
|
43
|
+
})
|
|
44
|
+
.optional(),
|
|
45
|
+
})
|
|
46
|
+
.refine((value) => value.strategy === "concat" || value.distribute === undefined, distributeOnlyOnConcat);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.translateIssue = translateIssue;
|
|
4
|
+
const TYPE_NAMES = {
|
|
5
|
+
string: "texto",
|
|
6
|
+
number: "número",
|
|
7
|
+
boolean: "true ou false",
|
|
8
|
+
array: "lista",
|
|
9
|
+
object: "objeto",
|
|
10
|
+
};
|
|
11
|
+
function translateIssue(issue) {
|
|
12
|
+
const expected = typeof issue.expected === "string"
|
|
13
|
+
? (TYPE_NAMES[issue.expected] ?? issue.expected)
|
|
14
|
+
: "";
|
|
15
|
+
switch (issue.code) {
|
|
16
|
+
case "invalid_type":
|
|
17
|
+
return /received undefined/.test(issue.message)
|
|
18
|
+
? `Campo obrigatório (${expected}).`
|
|
19
|
+
: `Tipo errado: aqui vai ${expected}.`;
|
|
20
|
+
case "invalid_value":
|
|
21
|
+
return Array.isArray(issue.values)
|
|
22
|
+
? `Valor não aceito. Use um destes: ${issue.values.map((value) => JSON.stringify(value)).join(", ")}.`
|
|
23
|
+
: "Valor não aceito.";
|
|
24
|
+
case "invalid_union":
|
|
25
|
+
return "Valor não aceito aqui. Confira o type e os campos obrigatórios.";
|
|
26
|
+
case "too_small":
|
|
27
|
+
return "Não pode ficar vazio.";
|
|
28
|
+
case "unrecognized_keys":
|
|
29
|
+
return "Tem campos que o Datera não conhece.";
|
|
30
|
+
default:
|
|
31
|
+
return issue.message;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const fillEmptySchema: z.ZodObject<{
|
|
3
|
+
column: z.ZodString;
|
|
4
|
+
fallbackColumns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
5
|
+
default: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export declare const combineColumnsSchema: z.ZodObject<{
|
|
8
|
+
into: z.ZodString;
|
|
9
|
+
columns: z.ZodArray<z.ZodString>;
|
|
10
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
11
|
+
keepSources: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.combineColumnsSchema = exports.fillEmptySchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.fillEmptySchema = zod_1.z.object({
|
|
6
|
+
column: zod_1.z.string(),
|
|
7
|
+
fallbackColumns: zod_1.z.array(zod_1.z.string()).optional(),
|
|
8
|
+
default: zod_1.z.string().optional(),
|
|
9
|
+
});
|
|
10
|
+
exports.combineColumnsSchema = zod_1.z.object({
|
|
11
|
+
into: zod_1.z.string(),
|
|
12
|
+
columns: zod_1.z.array(zod_1.z.string()).min(1),
|
|
13
|
+
separator: zod_1.z.string().optional(),
|
|
14
|
+
keepSources: zod_1.z.boolean().optional(),
|
|
15
|
+
});
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const etlConfigSchema: z.ZodObject<{
|
|
3
|
+
source: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
4
|
+
host: z.ZodOptional<z.ZodString>;
|
|
5
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
user: z.ZodOptional<z.ZodString>;
|
|
7
|
+
password: z.ZodOptional<z.ZodString>;
|
|
8
|
+
database: z.ZodOptional<z.ZodString>;
|
|
9
|
+
table: z.ZodOptional<z.ZodString>;
|
|
10
|
+
type: z.ZodLiteral<"mysql">;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
host: z.ZodOptional<z.ZodString>;
|
|
13
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
user: z.ZodOptional<z.ZodString>;
|
|
15
|
+
password: z.ZodOptional<z.ZodString>;
|
|
16
|
+
database: z.ZodOptional<z.ZodString>;
|
|
17
|
+
table: z.ZodOptional<z.ZodString>;
|
|
18
|
+
type: z.ZodLiteral<"postgres">;
|
|
19
|
+
ssl: z.ZodOptional<z.ZodBoolean>;
|
|
20
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
21
|
+
host: z.ZodOptional<z.ZodString>;
|
|
22
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
user: z.ZodOptional<z.ZodString>;
|
|
24
|
+
password: z.ZodOptional<z.ZodString>;
|
|
25
|
+
database: z.ZodOptional<z.ZodString>;
|
|
26
|
+
table: z.ZodOptional<z.ZodString>;
|
|
27
|
+
type: z.ZodLiteral<"sqlserver">;
|
|
28
|
+
encrypt: z.ZodOptional<z.ZodBoolean>;
|
|
29
|
+
trustServerCertificate: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
31
|
+
type: z.ZodLiteral<"sqlite">;
|
|
32
|
+
path: z.ZodString;
|
|
33
|
+
table: z.ZodString;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
type: z.ZodLiteral<"csv">;
|
|
36
|
+
path: z.ZodString;
|
|
37
|
+
delimiter: z.ZodOptional<z.ZodString>;
|
|
38
|
+
encoding: z.ZodOptional<z.ZodEnum<{
|
|
39
|
+
latin1: "latin1";
|
|
40
|
+
"utf-8": "utf-8";
|
|
41
|
+
}>>;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
type: z.ZodLiteral<"json">;
|
|
44
|
+
path: z.ZodString;
|
|
45
|
+
recordsPath: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
47
|
+
type: z.ZodLiteral<"xml">;
|
|
48
|
+
path: z.ZodString;
|
|
49
|
+
recordsPath: z.ZodOptional<z.ZodString>;
|
|
50
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
51
|
+
type: z.ZodLiteral<"parquet">;
|
|
52
|
+
path: z.ZodString;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
type: z.ZodLiteral<"excel">;
|
|
55
|
+
path: z.ZodString;
|
|
56
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
58
|
+
type: z.ZodLiteral<"sheets">;
|
|
59
|
+
spreadsheetId: z.ZodString;
|
|
60
|
+
credentialsPath: z.ZodOptional<z.ZodString>;
|
|
61
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
63
|
+
type: z.ZodLiteral<"custom">;
|
|
64
|
+
adapter: z.ZodString;
|
|
65
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
66
|
+
}, z.core.$strip>], "type">>;
|
|
67
|
+
destination: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
68
|
+
type: z.ZodLiteral<"sheets">;
|
|
69
|
+
spreadsheetId: z.ZodOptional<z.ZodString>;
|
|
70
|
+
credentialsPath: z.ZodOptional<z.ZodString>;
|
|
71
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
72
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
73
|
+
type: z.ZodLiteral<"csv">;
|
|
74
|
+
path: z.ZodString;
|
|
75
|
+
delimiter: z.ZodOptional<z.ZodString>;
|
|
76
|
+
bom: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
78
|
+
type: z.ZodLiteral<"json">;
|
|
79
|
+
path: z.ZodString;
|
|
80
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
81
|
+
type: z.ZodLiteral<"xml">;
|
|
82
|
+
path: z.ZodString;
|
|
83
|
+
root: z.ZodOptional<z.ZodString>;
|
|
84
|
+
record: z.ZodOptional<z.ZodString>;
|
|
85
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
86
|
+
type: z.ZodLiteral<"parquet">;
|
|
87
|
+
path: z.ZodString;
|
|
88
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
89
|
+
type: z.ZodLiteral<"excel">;
|
|
90
|
+
path: z.ZodString;
|
|
91
|
+
sheet: z.ZodOptional<z.ZodString>;
|
|
92
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
93
|
+
type: z.ZodLiteral<"custom">;
|
|
94
|
+
adapter: z.ZodString;
|
|
95
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
96
|
+
}, z.core.$strip>], "type">>;
|
|
97
|
+
tableName: z.ZodOptional<z.ZodString>;
|
|
98
|
+
spreadsheetId: z.ZodOptional<z.ZodString>;
|
|
99
|
+
credentialsPath: z.ZodOptional<z.ZodString>;
|
|
100
|
+
mode: z.ZodEnum<{
|
|
101
|
+
dedupe: "dedupe";
|
|
102
|
+
merge: "merge";
|
|
103
|
+
raw: "raw";
|
|
104
|
+
}>;
|
|
105
|
+
dbHost: z.ZodOptional<z.ZodString>;
|
|
106
|
+
dbPort: z.ZodOptional<z.ZodNumber>;
|
|
107
|
+
dbUser: z.ZodOptional<z.ZodString>;
|
|
108
|
+
dbPassword: z.ZodOptional<z.ZodString>;
|
|
109
|
+
dbName: z.ZodOptional<z.ZodString>;
|
|
110
|
+
dedupeColumn: z.ZodOptional<z.ZodString>;
|
|
111
|
+
dedupeStrategy: z.ZodOptional<z.ZodEnum<{
|
|
112
|
+
"keep-first": "keep-first";
|
|
113
|
+
"keep-last": "keep-last";
|
|
114
|
+
}>>;
|
|
115
|
+
dedupeKeyNormalizer: z.ZodOptional<z.ZodString>;
|
|
116
|
+
mergeKeyColumn: z.ZodOptional<z.ZodString>;
|
|
117
|
+
mergeColumns: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
118
|
+
column: z.ZodString;
|
|
119
|
+
strategy: z.ZodEnum<{
|
|
120
|
+
concat: "concat";
|
|
121
|
+
"extra-column": "extra-column";
|
|
122
|
+
overwrite: "overwrite";
|
|
123
|
+
}>;
|
|
124
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
125
|
+
distribute: z.ZodOptional<z.ZodObject<{
|
|
126
|
+
columns: z.ZodArray<z.ZodString>;
|
|
127
|
+
overflowInto: z.ZodOptional<z.ZodString>;
|
|
128
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
129
|
+
}, z.core.$strip>>;
|
|
130
|
+
byGroup: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
131
|
+
strategy: z.ZodEnum<{
|
|
132
|
+
concat: "concat";
|
|
133
|
+
"extra-column": "extra-column";
|
|
134
|
+
overwrite: "overwrite";
|
|
135
|
+
}>;
|
|
136
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
137
|
+
into: z.ZodOptional<z.ZodString>;
|
|
138
|
+
distribute: z.ZodOptional<z.ZodObject<{
|
|
139
|
+
columns: z.ZodArray<z.ZodString>;
|
|
140
|
+
overflowInto: z.ZodOptional<z.ZodString>;
|
|
141
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
142
|
+
}, z.core.$strip>>;
|
|
143
|
+
}, z.core.$strip>>>;
|
|
144
|
+
unkeyed: z.ZodOptional<z.ZodObject<{
|
|
145
|
+
strategy: z.ZodEnum<{
|
|
146
|
+
"collapse-column": "collapse-column";
|
|
147
|
+
}>;
|
|
148
|
+
into: z.ZodOptional<z.ZodString>;
|
|
149
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
150
|
+
}, z.core.$strip>>;
|
|
151
|
+
}, z.core.$strip>>>;
|
|
152
|
+
mergeEmptyKeyLabel: z.ZodOptional<z.ZodString>;
|
|
153
|
+
mergeRejectedKeyLabel: z.ZodOptional<z.ZodString>;
|
|
154
|
+
mergeKeyNormalizer: z.ZodOptional<z.ZodString>;
|
|
155
|
+
normalizerModules: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
156
|
+
adapterModules: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
157
|
+
fillEmpty: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
158
|
+
column: z.ZodString;
|
|
159
|
+
fallbackColumns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
160
|
+
default: z.ZodOptional<z.ZodString>;
|
|
161
|
+
}, z.core.$strip>>>;
|
|
162
|
+
combineColumns: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
163
|
+
into: z.ZodString;
|
|
164
|
+
columns: z.ZodArray<z.ZodString>;
|
|
165
|
+
separator: z.ZodOptional<z.ZodString>;
|
|
166
|
+
keepSources: z.ZodOptional<z.ZodBoolean>;
|
|
167
|
+
}, z.core.$strip>>>;
|
|
168
|
+
validation: z.ZodOptional<z.ZodObject<{
|
|
169
|
+
rules: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
170
|
+
message: z.ZodOptional<z.ZodString>;
|
|
171
|
+
column: z.ZodString;
|
|
172
|
+
rule: z.ZodLiteral<"required">;
|
|
173
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
174
|
+
message: z.ZodOptional<z.ZodString>;
|
|
175
|
+
column: z.ZodString;
|
|
176
|
+
rule: z.ZodLiteral<"pattern">;
|
|
177
|
+
pattern: z.ZodString;
|
|
178
|
+
flags: z.ZodOptional<z.ZodString>;
|
|
179
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
180
|
+
message: z.ZodOptional<z.ZodString>;
|
|
181
|
+
column: z.ZodString;
|
|
182
|
+
rule: z.ZodLiteral<"oneOf">;
|
|
183
|
+
values: z.ZodArray<z.ZodString>;
|
|
184
|
+
ignoreCase: z.ZodOptional<z.ZodBoolean>;
|
|
185
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
186
|
+
message: z.ZodOptional<z.ZodString>;
|
|
187
|
+
column: z.ZodString;
|
|
188
|
+
rule: z.ZodLiteral<"normalizer">;
|
|
189
|
+
normalizer: z.ZodString;
|
|
190
|
+
}, z.core.$strip>], "rule">>;
|
|
191
|
+
pendingSheet: z.ZodOptional<z.ZodString>;
|
|
192
|
+
reasonColumn: z.ZodOptional<z.ZodString>;
|
|
193
|
+
}, z.core.$strip>>;
|
|
194
|
+
}, z.core.$strip>;
|
|
195
|
+
export type EtlConfig = z.infer<typeof etlConfigSchema>;
|