flexdataset 0.4.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 +201 -0
- package/README.md +30 -0
- package/dist/src/cli.d.ts +9 -0
- package/dist/src/cli.js +179 -0
- package/dist/src/diagram/dag.d.ts +16 -0
- package/dist/src/diagram/dag.js +58 -0
- package/dist/src/diagram/er.d.ts +16 -0
- package/dist/src/diagram/er.js +62 -0
- package/dist/src/diagram/render.d.ts +16 -0
- package/dist/src/diagram/render.js +24 -0
- package/dist/src/iceberg.d.ts +85 -0
- package/dist/src/iceberg.js +221 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.js +56 -0
- package/dist/src/loader.d.ts +26 -0
- package/dist/src/loader.js +239 -0
- package/dist/src/model.d.ts +104 -0
- package/dist/src/model.js +26 -0
- package/dist/src/schema/schema.schema.json +27 -0
- package/dist/src/schema/table.schema.json +128 -0
- package/dist/src/structural.d.ts +31 -0
- package/dist/src/structural.js +54 -0
- package/dist/src/table-type.d.ts +115 -0
- package/dist/src/table-type.js +275 -0
- package/dist/src/table-types/hive-parquet.d.ts +29 -0
- package/dist/src/table-types/hive-parquet.js +70 -0
- package/dist/src/table-types/iceberg-parquet.d.ts +41 -0
- package/dist/src/table-types/iceberg-parquet.js +103 -0
- package/dist/src/table-types/postgres-18.d.ts +25 -0
- package/dist/src/table-types/postgres-18.js +44 -0
- package/dist/src/table-types/registry.d.ts +13 -0
- package/dist/src/table-types/registry.js +36 -0
- package/dist/src/types.d.ts +11 -0
- package/dist/src/types.js +182 -0
- package/dist/src/validate.d.ts +13 -0
- package/dist/src/validate.js +30 -0
- package/dist/src/world.d.ts +39 -0
- package/dist/src/world.js +82 -0
- package/package.json +69 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Thin wrapper over the WASM Graphviz engine. Kept separate from the DOT
|
|
4
|
+
* builders so the (pure, deterministic) DOT generation can be unit-tested
|
|
5
|
+
* without loading WASM.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.renderDot = renderDot;
|
|
9
|
+
/**
|
|
10
|
+
* Render a Graphviz DOT document to SVG.
|
|
11
|
+
*
|
|
12
|
+
* `@hpcc-js/wasm-graphviz` is ESM-only, so it is pulled in via a dynamic import
|
|
13
|
+
* (preserved by the NodeNext target and resolvable from this CommonJS module at
|
|
14
|
+
* runtime) rather than a static import.
|
|
15
|
+
*
|
|
16
|
+
* @param dot A DOT document.
|
|
17
|
+
* @returns The rendered SVG markup.
|
|
18
|
+
*/
|
|
19
|
+
async function renderDot(dot) {
|
|
20
|
+
const { Graphviz, } = await import('@hpcc-js/wasm-graphviz');
|
|
21
|
+
const graphviz = await Graphviz.load();
|
|
22
|
+
return graphviz.dot(dot);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RpYWdyYW0vcmVuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOztBQVlILDhCQU1DO0FBaEJEOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxTQUFTLENBQUMsR0FBVztJQUN2QyxNQUFNLEVBQ0YsUUFBUSxHQUNYLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbiB3cmFwcGVyIG92ZXIgdGhlIFdBU00gR3JhcGh2aXogZW5naW5lLiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIERPVFxuICogYnVpbGRlcnMgc28gdGhlIChwdXJlLCBkZXRlcm1pbmlzdGljKSBET1QgZ2VuZXJhdGlvbiBjYW4gYmUgdW5pdC10ZXN0ZWRcbiAqIHdpdGhvdXQgbG9hZGluZyBXQVNNLlxuICovXG5cbi8qKlxuICogUmVuZGVyIGEgR3JhcGh2aXogRE9UIGRvY3VtZW50IHRvIFNWRy5cbiAqXG4gKiBgQGhwY2MtanMvd2FzbS1ncmFwaHZpemAgaXMgRVNNLW9ubHksIHNvIGl0IGlzIHB1bGxlZCBpbiB2aWEgYSBkeW5hbWljIGltcG9ydFxuICogKHByZXNlcnZlZCBieSB0aGUgTm9kZU5leHQgdGFyZ2V0IGFuZCByZXNvbHZhYmxlIGZyb20gdGhpcyBDb21tb25KUyBtb2R1bGUgYXRcbiAqIHJ1bnRpbWUpIHJhdGhlciB0aGFuIGEgc3RhdGljIGltcG9ydC5cbiAqXG4gKiBAcGFyYW0gZG90IEEgRE9UIGRvY3VtZW50LlxuICogQHJldHVybnMgVGhlIHJlbmRlcmVkIFNWRyBtYXJrdXAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJEb3QoZG90OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgR3JhcGh2aXosIFxuICAgIH0gPSBhd2FpdCBpbXBvcnQoJ0BocGNjLWpzL3dhc20tZ3JhcGh2aXonKTtcbiAgICBjb25zdCBncmFwaHZpeiA9IGF3YWl0IEdyYXBodml6LmxvYWQoKTtcbiAgICByZXR1cm4gZ3JhcGh2aXouZG90KGRvdCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iceberg type and partition-transform parsing and legality.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the arceus repo (`lib/iceberg/iceberg-type.ts`,
|
|
5
|
+
* `lib/iceberg/iceberg-partition-transform.ts`). arceus models types as
|
|
6
|
+
* constructed objects and *throws* on the first problem because it is a CDK
|
|
7
|
+
* construct; FDD instead parses the *string* type found in a JSON file and
|
|
8
|
+
* returns structured results so the validator can collect every violation.
|
|
9
|
+
*
|
|
10
|
+
* v0 supports Iceberg primitives plus the parameterized `decimal(p,s)` and
|
|
11
|
+
* `fixed[L]`. Nested `list`/`map`/`struct` types are deferred to a later
|
|
12
|
+
* version; partition transforms only apply to primitive source types anyway.
|
|
13
|
+
*/
|
|
14
|
+
/** Iceberg primitive / parameterized type kinds supported in v0. */
|
|
15
|
+
export declare enum IcebergTypeKind {
|
|
16
|
+
BOOLEAN = "boolean",
|
|
17
|
+
INT = "int",
|
|
18
|
+
LONG = "long",
|
|
19
|
+
FLOAT = "float",
|
|
20
|
+
DOUBLE = "double",
|
|
21
|
+
DATE = "date",
|
|
22
|
+
TIME = "time",
|
|
23
|
+
TIMESTAMP = "timestamp",
|
|
24
|
+
TIMESTAMPTZ = "timestamptz",
|
|
25
|
+
STRING = "string",
|
|
26
|
+
UUID = "uuid",
|
|
27
|
+
BINARY = "binary",
|
|
28
|
+
DECIMAL = "decimal",
|
|
29
|
+
FIXED = "fixed"
|
|
30
|
+
}
|
|
31
|
+
/** A parsed Iceberg type. */
|
|
32
|
+
export interface IcebergType {
|
|
33
|
+
/** Discriminator. */
|
|
34
|
+
readonly kind: IcebergTypeKind;
|
|
35
|
+
/** Decimal precision (set when `kind === DECIMAL`). */
|
|
36
|
+
readonly decimalPrecision?: number;
|
|
37
|
+
/** Decimal scale (set when `kind === DECIMAL`). */
|
|
38
|
+
readonly decimalScale?: number;
|
|
39
|
+
/** Fixed byte length (set when `kind === FIXED`). */
|
|
40
|
+
readonly fixedLength?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parse an Iceberg type string into a structured type. Matching is
|
|
44
|
+
* case-insensitive, consistent with the Hive and Postgres registries.
|
|
45
|
+
*
|
|
46
|
+
* @param typeStr Type string from a column definition.
|
|
47
|
+
* @returns The parsed type, or null if it is not a valid v0 Iceberg type.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseIcebergType(typeStr: string): IcebergType | null;
|
|
50
|
+
/** Whether the string is a valid v0 Iceberg column type. */
|
|
51
|
+
export declare function isValidIcebergType(typeStr: string): boolean;
|
|
52
|
+
/** Iceberg partition-transform kinds. */
|
|
53
|
+
export declare enum IcebergTransformKind {
|
|
54
|
+
IDENTITY = "identity",
|
|
55
|
+
YEAR = "year",
|
|
56
|
+
MONTH = "month",
|
|
57
|
+
DAY = "day",
|
|
58
|
+
HOUR = "hour",
|
|
59
|
+
VOID = "void",
|
|
60
|
+
BUCKET = "bucket",
|
|
61
|
+
TRUNCATE = "truncate"
|
|
62
|
+
}
|
|
63
|
+
/** A parsed Iceberg partition transform. */
|
|
64
|
+
export interface IcebergTransform {
|
|
65
|
+
/** Discriminator. */
|
|
66
|
+
readonly kind: IcebergTransformKind;
|
|
67
|
+
/** Parameter for `bucket[N]` / `truncate[W]` (positive integer). */
|
|
68
|
+
readonly param?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parse an Iceberg transform string. Matching is case-insensitive.
|
|
72
|
+
*
|
|
73
|
+
* @param transformStr Transform string from a partition definition.
|
|
74
|
+
* @returns The parsed transform, or null if it is not a valid transform.
|
|
75
|
+
*/
|
|
76
|
+
export declare function parseIcebergTransform(transformStr: string): IcebergTransform | null;
|
|
77
|
+
/**
|
|
78
|
+
* Whether a transform is legal on a given source-column type. Mirrors arceus's
|
|
79
|
+
* `IcebergPartitionTransform.validateSourceType`.
|
|
80
|
+
*
|
|
81
|
+
* @param transform Parsed transform.
|
|
82
|
+
* @param sourceType Parsed source-column type.
|
|
83
|
+
* @returns True when the transform may be applied to that type.
|
|
84
|
+
*/
|
|
85
|
+
export declare function transformLegalOnType(transform: IcebergTransform, sourceType: IcebergType): boolean;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Iceberg type and partition-transform parsing and legality.
|
|
4
|
+
*
|
|
5
|
+
* Ported from the arceus repo (`lib/iceberg/iceberg-type.ts`,
|
|
6
|
+
* `lib/iceberg/iceberg-partition-transform.ts`). arceus models types as
|
|
7
|
+
* constructed objects and *throws* on the first problem because it is a CDK
|
|
8
|
+
* construct; FDD instead parses the *string* type found in a JSON file and
|
|
9
|
+
* returns structured results so the validator can collect every violation.
|
|
10
|
+
*
|
|
11
|
+
* v0 supports Iceberg primitives plus the parameterized `decimal(p,s)` and
|
|
12
|
+
* `fixed[L]`. Nested `list`/`map`/`struct` types are deferred to a later
|
|
13
|
+
* version; partition transforms only apply to primitive source types anyway.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.IcebergTransformKind = exports.IcebergTypeKind = void 0;
|
|
17
|
+
exports.parseIcebergType = parseIcebergType;
|
|
18
|
+
exports.isValidIcebergType = isValidIcebergType;
|
|
19
|
+
exports.parseIcebergTransform = parseIcebergTransform;
|
|
20
|
+
exports.transformLegalOnType = transformLegalOnType;
|
|
21
|
+
/** Iceberg primitive / parameterized type kinds supported in v0. */
|
|
22
|
+
var IcebergTypeKind;
|
|
23
|
+
(function (IcebergTypeKind) {
|
|
24
|
+
IcebergTypeKind["BOOLEAN"] = "boolean";
|
|
25
|
+
IcebergTypeKind["INT"] = "int";
|
|
26
|
+
IcebergTypeKind["LONG"] = "long";
|
|
27
|
+
IcebergTypeKind["FLOAT"] = "float";
|
|
28
|
+
IcebergTypeKind["DOUBLE"] = "double";
|
|
29
|
+
IcebergTypeKind["DATE"] = "date";
|
|
30
|
+
IcebergTypeKind["TIME"] = "time";
|
|
31
|
+
IcebergTypeKind["TIMESTAMP"] = "timestamp";
|
|
32
|
+
IcebergTypeKind["TIMESTAMPTZ"] = "timestamptz";
|
|
33
|
+
IcebergTypeKind["STRING"] = "string";
|
|
34
|
+
IcebergTypeKind["UUID"] = "uuid";
|
|
35
|
+
IcebergTypeKind["BINARY"] = "binary";
|
|
36
|
+
IcebergTypeKind["DECIMAL"] = "decimal";
|
|
37
|
+
IcebergTypeKind["FIXED"] = "fixed";
|
|
38
|
+
})(IcebergTypeKind || (exports.IcebergTypeKind = IcebergTypeKind = {}));
|
|
39
|
+
const ICEBERG_PRIMITIVES = [
|
|
40
|
+
IcebergTypeKind.BOOLEAN,
|
|
41
|
+
IcebergTypeKind.INT,
|
|
42
|
+
IcebergTypeKind.LONG,
|
|
43
|
+
IcebergTypeKind.FLOAT,
|
|
44
|
+
IcebergTypeKind.DOUBLE,
|
|
45
|
+
IcebergTypeKind.DATE,
|
|
46
|
+
IcebergTypeKind.TIME,
|
|
47
|
+
IcebergTypeKind.TIMESTAMP,
|
|
48
|
+
IcebergTypeKind.TIMESTAMPTZ,
|
|
49
|
+
IcebergTypeKind.STRING,
|
|
50
|
+
IcebergTypeKind.UUID,
|
|
51
|
+
IcebergTypeKind.BINARY,
|
|
52
|
+
];
|
|
53
|
+
const DECIMAL_RE = /^decimal\(\s*(\d+)\s*,\s*(\d+)\s*\)$/;
|
|
54
|
+
const FIXED_RE = /^fixed\[\s*(\d+)\s*\]$/;
|
|
55
|
+
/**
|
|
56
|
+
* Parse an Iceberg type string into a structured type. Matching is
|
|
57
|
+
* case-insensitive, consistent with the Hive and Postgres registries.
|
|
58
|
+
*
|
|
59
|
+
* @param typeStr Type string from a column definition.
|
|
60
|
+
* @returns The parsed type, or null if it is not a valid v0 Iceberg type.
|
|
61
|
+
*/
|
|
62
|
+
function parseIcebergType(typeStr) {
|
|
63
|
+
const trimmed = typeStr.trim().toLowerCase();
|
|
64
|
+
if (ICEBERG_PRIMITIVES.includes(trimmed)) {
|
|
65
|
+
return {
|
|
66
|
+
kind: trimmed,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const decimalMatch = DECIMAL_RE.exec(trimmed);
|
|
70
|
+
if (decimalMatch) {
|
|
71
|
+
const precision = Number(decimalMatch[1]);
|
|
72
|
+
const scale = Number(decimalMatch[2]);
|
|
73
|
+
if (precision < 1 || precision > 38 || scale > precision) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
kind: IcebergTypeKind.DECIMAL,
|
|
78
|
+
decimalPrecision: precision,
|
|
79
|
+
decimalScale: scale,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const fixedMatch = FIXED_RE.exec(trimmed);
|
|
83
|
+
if (fixedMatch) {
|
|
84
|
+
const length = Number(fixedMatch[1]);
|
|
85
|
+
if (length < 1) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
kind: IcebergTypeKind.FIXED,
|
|
90
|
+
fixedLength: length,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/** Whether the string is a valid v0 Iceberg column type. */
|
|
96
|
+
function isValidIcebergType(typeStr) {
|
|
97
|
+
return parseIcebergType(typeStr) !== null;
|
|
98
|
+
}
|
|
99
|
+
/** Iceberg partition-transform kinds. */
|
|
100
|
+
var IcebergTransformKind;
|
|
101
|
+
(function (IcebergTransformKind) {
|
|
102
|
+
IcebergTransformKind["IDENTITY"] = "identity";
|
|
103
|
+
IcebergTransformKind["YEAR"] = "year";
|
|
104
|
+
IcebergTransformKind["MONTH"] = "month";
|
|
105
|
+
IcebergTransformKind["DAY"] = "day";
|
|
106
|
+
IcebergTransformKind["HOUR"] = "hour";
|
|
107
|
+
IcebergTransformKind["VOID"] = "void";
|
|
108
|
+
IcebergTransformKind["BUCKET"] = "bucket";
|
|
109
|
+
IcebergTransformKind["TRUNCATE"] = "truncate";
|
|
110
|
+
})(IcebergTransformKind || (exports.IcebergTransformKind = IcebergTransformKind = {}));
|
|
111
|
+
const NULLARY_TRANSFORMS = [
|
|
112
|
+
IcebergTransformKind.IDENTITY,
|
|
113
|
+
IcebergTransformKind.YEAR,
|
|
114
|
+
IcebergTransformKind.MONTH,
|
|
115
|
+
IcebergTransformKind.DAY,
|
|
116
|
+
IcebergTransformKind.HOUR,
|
|
117
|
+
IcebergTransformKind.VOID,
|
|
118
|
+
];
|
|
119
|
+
const BUCKET_RE = /^bucket\[\s*(\d+)\s*\]$/;
|
|
120
|
+
const TRUNCATE_RE = /^truncate\[\s*(\d+)\s*\]$/;
|
|
121
|
+
/**
|
|
122
|
+
* Parse an Iceberg transform string. Matching is case-insensitive.
|
|
123
|
+
*
|
|
124
|
+
* @param transformStr Transform string from a partition definition.
|
|
125
|
+
* @returns The parsed transform, or null if it is not a valid transform.
|
|
126
|
+
*/
|
|
127
|
+
function parseIcebergTransform(transformStr) {
|
|
128
|
+
const trimmed = transformStr.trim().toLowerCase();
|
|
129
|
+
if (NULLARY_TRANSFORMS.includes(trimmed)) {
|
|
130
|
+
return {
|
|
131
|
+
kind: trimmed,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const bucketMatch = BUCKET_RE.exec(trimmed);
|
|
135
|
+
if (bucketMatch) {
|
|
136
|
+
const param = Number(bucketMatch[1]);
|
|
137
|
+
if (param < 1) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
kind: IcebergTransformKind.BUCKET,
|
|
142
|
+
param,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const truncateMatch = TRUNCATE_RE.exec(trimmed);
|
|
146
|
+
if (truncateMatch) {
|
|
147
|
+
const param = Number(truncateMatch[1]);
|
|
148
|
+
if (param < 1) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
kind: IcebergTransformKind.TRUNCATE,
|
|
153
|
+
param,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
function isTemporal(kind) {
|
|
159
|
+
return kind === IcebergTypeKind.DATE
|
|
160
|
+
|| kind === IcebergTypeKind.TIMESTAMP
|
|
161
|
+
|| kind === IcebergTypeKind.TIMESTAMPTZ;
|
|
162
|
+
}
|
|
163
|
+
function isTimestamp(kind) {
|
|
164
|
+
return kind === IcebergTypeKind.TIMESTAMP
|
|
165
|
+
|| kind === IcebergTypeKind.TIMESTAMPTZ;
|
|
166
|
+
}
|
|
167
|
+
const BUCKET_LEGAL = new Set([
|
|
168
|
+
IcebergTypeKind.INT,
|
|
169
|
+
IcebergTypeKind.LONG,
|
|
170
|
+
IcebergTypeKind.DATE,
|
|
171
|
+
IcebergTypeKind.TIME,
|
|
172
|
+
IcebergTypeKind.TIMESTAMP,
|
|
173
|
+
IcebergTypeKind.TIMESTAMPTZ,
|
|
174
|
+
IcebergTypeKind.STRING,
|
|
175
|
+
IcebergTypeKind.UUID,
|
|
176
|
+
IcebergTypeKind.BINARY,
|
|
177
|
+
IcebergTypeKind.DECIMAL,
|
|
178
|
+
IcebergTypeKind.FIXED,
|
|
179
|
+
]);
|
|
180
|
+
const TRUNCATE_LEGAL = new Set([
|
|
181
|
+
IcebergTypeKind.INT,
|
|
182
|
+
IcebergTypeKind.LONG,
|
|
183
|
+
IcebergTypeKind.STRING,
|
|
184
|
+
IcebergTypeKind.BINARY,
|
|
185
|
+
IcebergTypeKind.DECIMAL,
|
|
186
|
+
]);
|
|
187
|
+
function isBucketLegal(kind) {
|
|
188
|
+
return BUCKET_LEGAL.has(kind);
|
|
189
|
+
}
|
|
190
|
+
function isTruncateLegal(kind) {
|
|
191
|
+
return TRUNCATE_LEGAL.has(kind);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Whether a transform is legal on a given source-column type. Mirrors arceus's
|
|
195
|
+
* `IcebergPartitionTransform.validateSourceType`.
|
|
196
|
+
*
|
|
197
|
+
* @param transform Parsed transform.
|
|
198
|
+
* @param sourceType Parsed source-column type.
|
|
199
|
+
* @returns True when the transform may be applied to that type.
|
|
200
|
+
*/
|
|
201
|
+
function transformLegalOnType(transform, sourceType) {
|
|
202
|
+
switch (transform.kind) {
|
|
203
|
+
case IcebergTransformKind.IDENTITY:
|
|
204
|
+
case IcebergTransformKind.VOID:
|
|
205
|
+
return true;
|
|
206
|
+
case IcebergTransformKind.YEAR:
|
|
207
|
+
case IcebergTransformKind.MONTH:
|
|
208
|
+
case IcebergTransformKind.DAY:
|
|
209
|
+
return isTemporal(sourceType.kind);
|
|
210
|
+
case IcebergTransformKind.HOUR:
|
|
211
|
+
return isTimestamp(sourceType.kind);
|
|
212
|
+
case IcebergTransformKind.BUCKET:
|
|
213
|
+
return isBucketLegal(sourceType.kind);
|
|
214
|
+
case IcebergTransformKind.TRUNCATE:
|
|
215
|
+
return isTruncateLegal(sourceType.kind);
|
|
216
|
+
/* istanbul ignore next: exhaustive — every kind is handled above */
|
|
217
|
+
default:
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNlYmVyZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pY2ViZXJnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7OztBQTRESCw0Q0FvQ0M7QUFHRCxnREFFQztBQXlDRCxzREFrQ0M7QUFtREQsb0RBbUJDO0FBcFBELG9FQUFvRTtBQUNwRSxJQUFZLGVBZVg7QUFmRCxXQUFZLGVBQWU7SUFDdkIsc0NBQW1CLENBQUE7SUFDbkIsOEJBQVcsQ0FBQTtJQUNYLGdDQUFhLENBQUE7SUFDYixrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtJQUNiLGdDQUFhLENBQUE7SUFDYiwwQ0FBdUIsQ0FBQTtJQUN2Qiw4Q0FBMkIsQ0FBQTtJQUMzQixvQ0FBaUIsQ0FBQTtJQUNqQixnQ0FBYSxDQUFBO0lBQ2Isb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsa0NBQWUsQ0FBQTtBQUNuQixDQUFDLEVBZlcsZUFBZSwrQkFBZixlQUFlLFFBZTFCO0FBRUQsTUFBTSxrQkFBa0IsR0FBK0I7SUFDbkQsZUFBZSxDQUFDLE9BQU87SUFDdkIsZUFBZSxDQUFDLEdBQUc7SUFDbkIsZUFBZSxDQUFDLElBQUk7SUFDcEIsZUFBZSxDQUFDLEtBQUs7SUFDckIsZUFBZSxDQUFDLE1BQU07SUFDdEIsZUFBZSxDQUFDLElBQUk7SUFDcEIsZUFBZSxDQUFDLElBQUk7SUFDcEIsZUFBZSxDQUFDLFNBQVM7SUFDekIsZUFBZSxDQUFDLFdBQVc7SUFDM0IsZUFBZSxDQUFDLE1BQU07SUFDdEIsZUFBZSxDQUFDLElBQUk7SUFDcEIsZUFBZSxDQUFDLE1BQU07Q0FDekIsQ0FBQztBQWlCRixNQUFNLFVBQVUsR0FBRyxzQ0FBc0MsQ0FBQztBQUMxRCxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUFlO0lB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LENBQUMsUUFBUTtZQUM5QixPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsb0VBQW9FO1FBQ3BFO1lBQ0ksT0FBTyxLQUFLLENBQUM7SUFDckIsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEljZWJlcmcgdHlwZSBhbmQgcGFydGl0aW9uLXRyYW5zZm9ybSBwYXJzaW5nIGFuZCBsZWdhbGl0eS5cbiAqXG4gKiBQb3J0ZWQgZnJvbSB0aGUgYXJjZXVzIHJlcG8gKGBsaWIvaWNlYmVyZy9pY2ViZXJnLXR5cGUudHNgLFxuICogYGxpYi9pY2ViZXJnL2ljZWJlcmctcGFydGl0aW9uLXRyYW5zZm9ybS50c2ApLiBhcmNldXMgbW9kZWxzIHR5cGVzIGFzXG4gKiBjb25zdHJ1Y3RlZCBvYmplY3RzIGFuZCAqdGhyb3dzKiBvbiB0aGUgZmlyc3QgcHJvYmxlbSBiZWNhdXNlIGl0IGlzIGEgQ0RLXG4gKiBjb25zdHJ1Y3Q7IEZERCBpbnN0ZWFkIHBhcnNlcyB0aGUgKnN0cmluZyogdHlwZSBmb3VuZCBpbiBhIEpTT04gZmlsZSBhbmRcbiAqIHJldHVybnMgc3RydWN0dXJlZCByZXN1bHRzIHNvIHRoZSB2YWxpZGF0b3IgY2FuIGNvbGxlY3QgZXZlcnkgdmlvbGF0aW9uLlxuICpcbiAqIHYwIHN1cHBvcnRzIEljZWJlcmcgcHJpbWl0aXZlcyBwbHVzIHRoZSBwYXJhbWV0ZXJpemVkIGBkZWNpbWFsKHAscylgIGFuZFxuICogYGZpeGVkW0xdYC4gTmVzdGVkIGBsaXN0YC9gbWFwYC9gc3RydWN0YCB0eXBlcyBhcmUgZGVmZXJyZWQgdG8gYSBsYXRlclxuICogdmVyc2lvbjsgcGFydGl0aW9uIHRyYW5zZm9ybXMgb25seSBhcHBseSB0byBwcmltaXRpdmUgc291cmNlIHR5cGVzIGFueXdheS5cbiAqL1xuXG4vKiogSWNlYmVyZyBwcmltaXRpdmUgLyBwYXJhbWV0ZXJpemVkIHR5cGUga2luZHMgc3VwcG9ydGVkIGluIHYwLiAqL1xuZXhwb3J0IGVudW0gSWNlYmVyZ1R5cGVLaW5kIHtcbiAgICBCT09MRUFOID0gJ2Jvb2xlYW4nLFxuICAgIElOVCA9ICdpbnQnLFxuICAgIExPTkcgPSAnbG9uZycsXG4gICAgRkxPQVQgPSAnZmxvYXQnLFxuICAgIERPVUJMRSA9ICdkb3VibGUnLFxuICAgIERBVEUgPSAnZGF0ZScsXG4gICAgVElNRSA9ICd0aW1lJyxcbiAgICBUSU1FU1RBTVAgPSAndGltZXN0YW1wJyxcbiAgICBUSU1FU1RBTVBUWiA9ICd0aW1lc3RhbXB0eicsXG4gICAgU1RSSU5HID0gJ3N0cmluZycsXG4gICAgVVVJRCA9ICd1dWlkJyxcbiAgICBCSU5BUlkgPSAnYmluYXJ5JyxcbiAgICBERUNJTUFMID0gJ2RlY2ltYWwnLFxuICAgIEZJWEVEID0gJ2ZpeGVkJyxcbn1cblxuY29uc3QgSUNFQkVSR19QUklNSVRJVkVTOiByZWFkb25seSBJY2ViZXJnVHlwZUtpbmRbXSA9IFtcbiAgICBJY2ViZXJnVHlwZUtpbmQuQk9PTEVBTixcbiAgICBJY2ViZXJnVHlwZUtpbmQuSU5ULFxuICAgIEljZWJlcmdUeXBlS2luZC5MT05HLFxuICAgIEljZWJlcmdUeXBlS2luZC5GTE9BVCxcbiAgICBJY2ViZXJnVHlwZUtpbmQuRE9VQkxFLFxuICAgIEljZWJlcmdUeXBlS2luZC5EQVRFLFxuICAgIEljZWJlcmdUeXBlS2luZC5USU1FLFxuICAgIEljZWJlcmdUeXBlS2luZC5USU1FU1RBTVAsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLlRJTUVTVEFNUFRaLFxuICAgIEljZWJlcmdUeXBlS2luZC5TVFJJTkcsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLlVVSUQsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLkJJTkFSWSxcbl07XG5cbi8qKiBBIHBhcnNlZCBJY2ViZXJnIHR5cGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEljZWJlcmdUeXBlIHtcbiAgICAvKiogRGlzY3JpbWluYXRvci4gKi9cbiAgICByZWFkb25seSBraW5kOiBJY2ViZXJnVHlwZUtpbmQ7XG5cbiAgICAvKiogRGVjaW1hbCBwcmVjaXNpb24gKHNldCB3aGVuIGBraW5kID09PSBERUNJTUFMYCkuICovXG4gICAgcmVhZG9ubHkgZGVjaW1hbFByZWNpc2lvbj86IG51bWJlcjtcblxuICAgIC8qKiBEZWNpbWFsIHNjYWxlIChzZXQgd2hlbiBga2luZCA9PT0gREVDSU1BTGApLiAqL1xuICAgIHJlYWRvbmx5IGRlY2ltYWxTY2FsZT86IG51bWJlcjtcblxuICAgIC8qKiBGaXhlZCBieXRlIGxlbmd0aCAoc2V0IHdoZW4gYGtpbmQgPT09IEZJWEVEYCkuICovXG4gICAgcmVhZG9ubHkgZml4ZWRMZW5ndGg/OiBudW1iZXI7XG59XG5cbmNvbnN0IERFQ0lNQUxfUkUgPSAvXmRlY2ltYWxcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKlxcKSQvO1xuY29uc3QgRklYRURfUkUgPSAvXmZpeGVkXFxbXFxzKihcXGQrKVxccypcXF0kLztcblxuLyoqXG4gKiBQYXJzZSBhbiBJY2ViZXJnIHR5cGUgc3RyaW5nIGludG8gYSBzdHJ1Y3R1cmVkIHR5cGUuIE1hdGNoaW5nIGlzXG4gKiBjYXNlLWluc2Vuc2l0aXZlLCBjb25zaXN0ZW50IHdpdGggdGhlIEhpdmUgYW5kIFBvc3RncmVzIHJlZ2lzdHJpZXMuXG4gKlxuICogQHBhcmFtIHR5cGVTdHIgVHlwZSBzdHJpbmcgZnJvbSBhIGNvbHVtbiBkZWZpbml0aW9uLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCB0eXBlLCBvciBudWxsIGlmIGl0IGlzIG5vdCBhIHZhbGlkIHYwIEljZWJlcmcgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSWNlYmVyZ1R5cGUodHlwZVN0cjogc3RyaW5nKTogSWNlYmVyZ1R5cGUgfCBudWxsIHtcbiAgICBjb25zdCB0cmltbWVkID0gdHlwZVN0ci50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICgoSUNFQkVSR19QUklNSVRJVkVTIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyh0cmltbWVkKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogdHJpbW1lZCBhcyBJY2ViZXJnVHlwZUtpbmQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGVjaW1hbE1hdGNoID0gREVDSU1BTF9SRS5leGVjKHRyaW1tZWQpO1xuICAgIGlmIChkZWNpbWFsTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlY2lzaW9uID0gTnVtYmVyKGRlY2ltYWxNYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gTnVtYmVyKGRlY2ltYWxNYXRjaFsyXSk7XG4gICAgICAgIGlmIChwcmVjaXNpb24gPCAxIHx8IHByZWNpc2lvbiA+IDM4IHx8IHNjYWxlID4gcHJlY2lzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogSWNlYmVyZ1R5cGVLaW5kLkRFQ0lNQUwsXG4gICAgICAgICAgICBkZWNpbWFsUHJlY2lzaW9uOiBwcmVjaXNpb24sXG4gICAgICAgICAgICBkZWNpbWFsU2NhbGU6IHNjYWxlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpeGVkTWF0Y2ggPSBGSVhFRF9SRS5leGVjKHRyaW1tZWQpO1xuICAgIGlmIChmaXhlZE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE51bWJlcihmaXhlZE1hdGNoWzFdKTtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiBJY2ViZXJnVHlwZUtpbmQuRklYRUQsXG4gICAgICAgICAgICBmaXhlZExlbmd0aDogbGVuZ3RoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG4vKiogV2hldGhlciB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgdjAgSWNlYmVyZyBjb2x1bW4gdHlwZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSWNlYmVyZ1R5cGUodHlwZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhcnNlSWNlYmVyZ1R5cGUodHlwZVN0cikgIT09IG51bGw7XG59XG5cbi8qKiBJY2ViZXJnIHBhcnRpdGlvbi10cmFuc2Zvcm0ga2luZHMuICovXG5leHBvcnQgZW51bSBJY2ViZXJnVHJhbnNmb3JtS2luZCB7XG4gICAgSURFTlRJVFkgPSAnaWRlbnRpdHknLFxuICAgIFlFQVIgPSAneWVhcicsXG4gICAgTU9OVEggPSAnbW9udGgnLFxuICAgIERBWSA9ICdkYXknLFxuICAgIEhPVVIgPSAnaG91cicsXG4gICAgVk9JRCA9ICd2b2lkJyxcbiAgICBCVUNLRVQgPSAnYnVja2V0JyxcbiAgICBUUlVOQ0FURSA9ICd0cnVuY2F0ZScsXG59XG5cbmNvbnN0IE5VTExBUllfVFJBTlNGT1JNUzogcmVhZG9ubHkgSWNlYmVyZ1RyYW5zZm9ybUtpbmRbXSA9IFtcbiAgICBJY2ViZXJnVHJhbnNmb3JtS2luZC5JREVOVElUWSxcbiAgICBJY2ViZXJnVHJhbnNmb3JtS2luZC5ZRUFSLFxuICAgIEljZWJlcmdUcmFuc2Zvcm1LaW5kLk1PTlRILFxuICAgIEljZWJlcmdUcmFuc2Zvcm1LaW5kLkRBWSxcbiAgICBJY2ViZXJnVHJhbnNmb3JtS2luZC5IT1VSLFxuICAgIEljZWJlcmdUcmFuc2Zvcm1LaW5kLlZPSUQsXG5dO1xuXG4vKiogQSBwYXJzZWQgSWNlYmVyZyBwYXJ0aXRpb24gdHJhbnNmb3JtLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnVHJhbnNmb3JtIHtcbiAgICAvKiogRGlzY3JpbWluYXRvci4gKi9cbiAgICByZWFkb25seSBraW5kOiBJY2ViZXJnVHJhbnNmb3JtS2luZDtcblxuICAgIC8qKiBQYXJhbWV0ZXIgZm9yIGBidWNrZXRbTl1gIC8gYHRydW5jYXRlW1ddYCAocG9zaXRpdmUgaW50ZWdlcikuICovXG4gICAgcmVhZG9ubHkgcGFyYW0/OiBudW1iZXI7XG59XG5cbmNvbnN0IEJVQ0tFVF9SRSA9IC9eYnVja2V0XFxbXFxzKihcXGQrKVxccypcXF0kLztcbmNvbnN0IFRSVU5DQVRFX1JFID0gL150cnVuY2F0ZVxcW1xccyooXFxkKylcXHMqXFxdJC87XG5cbi8qKlxuICogUGFyc2UgYW4gSWNlYmVyZyB0cmFuc2Zvcm0gc3RyaW5nLiBNYXRjaGluZyBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSB0cmFuc2Zvcm1TdHIgVHJhbnNmb3JtIHN0cmluZyBmcm9tIGEgcGFydGl0aW9uIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHRyYW5zZm9ybSwgb3IgbnVsbCBpZiBpdCBpcyBub3QgYSB2YWxpZCB0cmFuc2Zvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUljZWJlcmdUcmFuc2Zvcm0odHJhbnNmb3JtU3RyOiBzdHJpbmcpOiBJY2ViZXJnVHJhbnNmb3JtIHwgbnVsbCB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHRyYW5zZm9ybVN0ci50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICgoTlVMTEFSWV9UUkFOU0ZPUk1TIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyh0cmltbWVkKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogdHJpbW1lZCBhcyBJY2ViZXJnVHJhbnNmb3JtS2luZCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBidWNrZXRNYXRjaCA9IEJVQ0tFVF9SRS5leGVjKHRyaW1tZWQpO1xuICAgIGlmIChidWNrZXRNYXRjaCkge1xuICAgICAgICBjb25zdCBwYXJhbSA9IE51bWJlcihidWNrZXRNYXRjaFsxXSk7XG4gICAgICAgIGlmIChwYXJhbSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiBJY2ViZXJnVHJhbnNmb3JtS2luZC5CVUNLRVQsXG4gICAgICAgICAgICBwYXJhbSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0cnVuY2F0ZU1hdGNoID0gVFJVTkNBVEVfUkUuZXhlYyh0cmltbWVkKTtcbiAgICBpZiAodHJ1bmNhdGVNYXRjaCkge1xuICAgICAgICBjb25zdCBwYXJhbSA9IE51bWJlcih0cnVuY2F0ZU1hdGNoWzFdKTtcbiAgICAgICAgaWYgKHBhcmFtIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6IEljZWJlcmdUcmFuc2Zvcm1LaW5kLlRSVU5DQVRFLFxuICAgICAgICAgICAgcGFyYW0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVGVtcG9yYWwoa2luZDogSWNlYmVyZ1R5cGVLaW5kKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtpbmQgPT09IEljZWJlcmdUeXBlS2luZC5EQVRFXG4gICAgICAgIHx8IGtpbmQgPT09IEljZWJlcmdUeXBlS2luZC5USU1FU1RBTVBcbiAgICAgICAgfHwga2luZCA9PT0gSWNlYmVyZ1R5cGVLaW5kLlRJTUVTVEFNUFRaO1xufVxuXG5mdW5jdGlvbiBpc1RpbWVzdGFtcChraW5kOiBJY2ViZXJnVHlwZUtpbmQpOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2luZCA9PT0gSWNlYmVyZ1R5cGVLaW5kLlRJTUVTVEFNUFxuICAgICAgICB8fCBraW5kID09PSBJY2ViZXJnVHlwZUtpbmQuVElNRVNUQU1QVFo7XG59XG5cbmNvbnN0IEJVQ0tFVF9MRUdBTDogUmVhZG9ubHlTZXQ8SWNlYmVyZ1R5cGVLaW5kPiA9IG5ldyBTZXQoW1xuICAgIEljZWJlcmdUeXBlS2luZC5JTlQsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLkxPTkcsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLkRBVEUsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLlRJTUUsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLlRJTUVTVEFNUCxcbiAgICBJY2ViZXJnVHlwZUtpbmQuVElNRVNUQU1QVFosXG4gICAgSWNlYmVyZ1R5cGVLaW5kLlNUUklORyxcbiAgICBJY2ViZXJnVHlwZUtpbmQuVVVJRCxcbiAgICBJY2ViZXJnVHlwZUtpbmQuQklOQVJZLFxuICAgIEljZWJlcmdUeXBlS2luZC5ERUNJTUFMLFxuICAgIEljZWJlcmdUeXBlS2luZC5GSVhFRCxcbl0pO1xuXG5jb25zdCBUUlVOQ0FURV9MRUdBTDogUmVhZG9ubHlTZXQ8SWNlYmVyZ1R5cGVLaW5kPiA9IG5ldyBTZXQoW1xuICAgIEljZWJlcmdUeXBlS2luZC5JTlQsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLkxPTkcsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLlNUUklORyxcbiAgICBJY2ViZXJnVHlwZUtpbmQuQklOQVJZLFxuICAgIEljZWJlcmdUeXBlS2luZC5ERUNJTUFMLFxuXSk7XG5cbmZ1bmN0aW9uIGlzQnVja2V0TGVnYWwoa2luZDogSWNlYmVyZ1R5cGVLaW5kKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJVQ0tFVF9MRUdBTC5oYXMoa2luZCk7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1bmNhdGVMZWdhbChraW5kOiBJY2ViZXJnVHlwZUtpbmQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVFJVTkNBVEVfTEVHQUwuaGFzKGtpbmQpO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSB0cmFuc2Zvcm0gaXMgbGVnYWwgb24gYSBnaXZlbiBzb3VyY2UtY29sdW1uIHR5cGUuIE1pcnJvcnMgYXJjZXVzJ3NcbiAqIGBJY2ViZXJnUGFydGl0aW9uVHJhbnNmb3JtLnZhbGlkYXRlU291cmNlVHlwZWAuXG4gKlxuICogQHBhcmFtIHRyYW5zZm9ybSBQYXJzZWQgdHJhbnNmb3JtLlxuICogQHBhcmFtIHNvdXJjZVR5cGUgUGFyc2VkIHNvdXJjZS1jb2x1bW4gdHlwZS5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdHJhbnNmb3JtIG1heSBiZSBhcHBsaWVkIHRvIHRoYXQgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUxlZ2FsT25UeXBlKHRyYW5zZm9ybTogSWNlYmVyZ1RyYW5zZm9ybSwgc291cmNlVHlwZTogSWNlYmVyZ1R5cGUpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHRyYW5zZm9ybS5raW5kKSB7XG4gICAgICAgIGNhc2UgSWNlYmVyZ1RyYW5zZm9ybUtpbmQuSURFTlRJVFk6XG4gICAgICAgIGNhc2UgSWNlYmVyZ1RyYW5zZm9ybUtpbmQuVk9JRDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlIEljZWJlcmdUcmFuc2Zvcm1LaW5kLllFQVI6XG4gICAgICAgIGNhc2UgSWNlYmVyZ1RyYW5zZm9ybUtpbmQuTU9OVEg6XG4gICAgICAgIGNhc2UgSWNlYmVyZ1RyYW5zZm9ybUtpbmQuREFZOlxuICAgICAgICAgICAgcmV0dXJuIGlzVGVtcG9yYWwoc291cmNlVHlwZS5raW5kKTtcbiAgICAgICAgY2FzZSBJY2ViZXJnVHJhbnNmb3JtS2luZC5IT1VSOlxuICAgICAgICAgICAgcmV0dXJuIGlzVGltZXN0YW1wKHNvdXJjZVR5cGUua2luZCk7XG4gICAgICAgIGNhc2UgSWNlYmVyZ1RyYW5zZm9ybUtpbmQuQlVDS0VUOlxuICAgICAgICAgICAgcmV0dXJuIGlzQnVja2V0TGVnYWwoc291cmNlVHlwZS5raW5kKTtcbiAgICAgICAgY2FzZSBJY2ViZXJnVHJhbnNmb3JtS2luZC5UUlVOQ0FURTpcbiAgICAgICAgICAgIHJldHVybiBpc1RydW5jYXRlTGVnYWwoc291cmNlVHlwZS5raW5kKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGV4aGF1c3RpdmUg4oCUIGV2ZXJ5IGtpbmQgaXMgaGFuZGxlZCBhYm92ZSAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API for the FDD core package.
|
|
3
|
+
*/
|
|
4
|
+
export * from './model';
|
|
5
|
+
export { LoadedSchema, World, runSemanticRules, } from './world';
|
|
6
|
+
export { validateRoot, } from './validate';
|
|
7
|
+
export { loadRoot, LoadOutcome, } from './loader';
|
|
8
|
+
export { TableTypeBase, TableTypeFields, } from './table-type';
|
|
9
|
+
export { createTableType, } from './table-types/registry';
|
|
10
|
+
export { HiveParquetTable, } from './table-types/hive-parquet';
|
|
11
|
+
export { IcebergParquetTable, } from './table-types/iceberg-parquet';
|
|
12
|
+
export { Postgres18Table, } from './table-types/postgres-18';
|
|
13
|
+
export { validateStructure, StructuralKind, StructuralResult, StructuralError, } from './structural';
|
|
14
|
+
export { isValidHiveType, isValidPostgresType, } from './types';
|
|
15
|
+
export { parseIcebergType, isValidIcebergType, parseIcebergTransform, transformLegalOnType, IcebergType, IcebergTypeKind, IcebergTransform, IcebergTransformKind, } from './iceberg';
|
|
16
|
+
export { buildDagDot, } from './diagram/dag';
|
|
17
|
+
export { buildErDot, } from './diagram/er';
|
|
18
|
+
export { renderDot, } from './diagram/render';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Public API for the FDD core package.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.renderDot = exports.buildErDot = exports.buildDagDot = exports.IcebergTransformKind = exports.IcebergTypeKind = exports.transformLegalOnType = exports.parseIcebergTransform = exports.isValidIcebergType = exports.parseIcebergType = exports.isValidPostgresType = exports.isValidHiveType = exports.validateStructure = exports.Postgres18Table = exports.IcebergParquetTable = exports.HiveParquetTable = exports.createTableType = exports.TableTypeBase = exports.loadRoot = exports.validateRoot = exports.runSemanticRules = void 0;
|
|
21
|
+
__exportStar(require("./model"), exports);
|
|
22
|
+
var world_1 = require("./world");
|
|
23
|
+
Object.defineProperty(exports, "runSemanticRules", { enumerable: true, get: function () { return world_1.runSemanticRules; } });
|
|
24
|
+
var validate_1 = require("./validate");
|
|
25
|
+
Object.defineProperty(exports, "validateRoot", { enumerable: true, get: function () { return validate_1.validateRoot; } });
|
|
26
|
+
var loader_1 = require("./loader");
|
|
27
|
+
Object.defineProperty(exports, "loadRoot", { enumerable: true, get: function () { return loader_1.loadRoot; } });
|
|
28
|
+
var table_type_1 = require("./table-type");
|
|
29
|
+
Object.defineProperty(exports, "TableTypeBase", { enumerable: true, get: function () { return table_type_1.TableTypeBase; } });
|
|
30
|
+
var registry_1 = require("./table-types/registry");
|
|
31
|
+
Object.defineProperty(exports, "createTableType", { enumerable: true, get: function () { return registry_1.createTableType; } });
|
|
32
|
+
var hive_parquet_1 = require("./table-types/hive-parquet");
|
|
33
|
+
Object.defineProperty(exports, "HiveParquetTable", { enumerable: true, get: function () { return hive_parquet_1.HiveParquetTable; } });
|
|
34
|
+
var iceberg_parquet_1 = require("./table-types/iceberg-parquet");
|
|
35
|
+
Object.defineProperty(exports, "IcebergParquetTable", { enumerable: true, get: function () { return iceberg_parquet_1.IcebergParquetTable; } });
|
|
36
|
+
var postgres_18_1 = require("./table-types/postgres-18");
|
|
37
|
+
Object.defineProperty(exports, "Postgres18Table", { enumerable: true, get: function () { return postgres_18_1.Postgres18Table; } });
|
|
38
|
+
var structural_1 = require("./structural");
|
|
39
|
+
Object.defineProperty(exports, "validateStructure", { enumerable: true, get: function () { return structural_1.validateStructure; } });
|
|
40
|
+
var types_1 = require("./types");
|
|
41
|
+
Object.defineProperty(exports, "isValidHiveType", { enumerable: true, get: function () { return types_1.isValidHiveType; } });
|
|
42
|
+
Object.defineProperty(exports, "isValidPostgresType", { enumerable: true, get: function () { return types_1.isValidPostgresType; } });
|
|
43
|
+
var iceberg_1 = require("./iceberg");
|
|
44
|
+
Object.defineProperty(exports, "parseIcebergType", { enumerable: true, get: function () { return iceberg_1.parseIcebergType; } });
|
|
45
|
+
Object.defineProperty(exports, "isValidIcebergType", { enumerable: true, get: function () { return iceberg_1.isValidIcebergType; } });
|
|
46
|
+
Object.defineProperty(exports, "parseIcebergTransform", { enumerable: true, get: function () { return iceberg_1.parseIcebergTransform; } });
|
|
47
|
+
Object.defineProperty(exports, "transformLegalOnType", { enumerable: true, get: function () { return iceberg_1.transformLegalOnType; } });
|
|
48
|
+
Object.defineProperty(exports, "IcebergTypeKind", { enumerable: true, get: function () { return iceberg_1.IcebergTypeKind; } });
|
|
49
|
+
Object.defineProperty(exports, "IcebergTransformKind", { enumerable: true, get: function () { return iceberg_1.IcebergTransformKind; } });
|
|
50
|
+
var dag_1 = require("./diagram/dag");
|
|
51
|
+
Object.defineProperty(exports, "buildDagDot", { enumerable: true, get: function () { return dag_1.buildDagDot; } });
|
|
52
|
+
var er_1 = require("./diagram/er");
|
|
53
|
+
Object.defineProperty(exports, "buildErDot", { enumerable: true, get: function () { return er_1.buildErDot; } });
|
|
54
|
+
var render_1 = require("./diagram/render");
|
|
55
|
+
Object.defineProperty(exports, "renderDot", { enumerable: true, get: function () { return render_1.renderDot; } });
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QjtBQUN4QixpQ0FJaUI7QUFEYix5R0FBQSxnQkFBZ0IsT0FBQTtBQUVwQix1Q0FFb0I7QUFEaEIsd0dBQUEsWUFBWSxPQUFBO0FBRWhCLG1DQUdrQjtBQUZkLGtHQUFBLFFBQVEsT0FBQTtBQUdaLDJDQUdzQjtBQUZsQiwyR0FBQSxhQUFhLE9BQUE7QUFHakIsbURBRWdDO0FBRDVCLDJHQUFBLGVBQWUsT0FBQTtBQUVuQiwyREFFb0M7QUFEaEMsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFcEIsaUVBRXVDO0FBRG5DLHNIQUFBLG1CQUFtQixPQUFBO0FBRXZCLHlEQUVtQztBQUQvQiw4R0FBQSxlQUFlLE9BQUE7QUFFbkIsMkNBS3NCO0FBSmxCLCtHQUFBLGlCQUFpQixPQUFBO0FBS3JCLGlDQUdpQjtBQUZiLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLG1CQUFtQixPQUFBO0FBRXZCLHFDQVNtQjtBQVJmLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDZHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLGdIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLG9CQUFvQixPQUFBO0FBRXBCLDBHQUFBLGVBQWUsT0FBQTtBQUVmLCtHQUFBLG9CQUFvQixPQUFBO0FBRXhCLHFDQUV1QjtBQURuQixrR0FBQSxXQUFXLE9BQUE7QUFFZixtQ0FFc0I7QUFEbEIsZ0dBQUEsVUFBVSxPQUFBO0FBRWQsMkNBRTBCO0FBRHRCLG1HQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBmb3IgdGhlIEZERCBjb3JlIHBhY2thZ2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbCc7XG5leHBvcnQge1xuICAgIExvYWRlZFNjaGVtYSxcbiAgICBXb3JsZCxcbiAgICBydW5TZW1hbnRpY1J1bGVzLFxufSBmcm9tICcuL3dvcmxkJztcbmV4cG9ydCB7XG4gICAgdmFsaWRhdGVSb290LFxufSBmcm9tICcuL3ZhbGlkYXRlJztcbmV4cG9ydCB7XG4gICAgbG9hZFJvb3QsXG4gICAgTG9hZE91dGNvbWUsXG59IGZyb20gJy4vbG9hZGVyJztcbmV4cG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbiAgICBUYWJsZVR5cGVGaWVsZHMsXG59IGZyb20gJy4vdGFibGUtdHlwZSc7XG5leHBvcnQge1xuICAgIGNyZWF0ZVRhYmxlVHlwZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlcy9yZWdpc3RyeSc7XG5leHBvcnQge1xuICAgIEhpdmVQYXJxdWV0VGFibGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvaGl2ZS1wYXJxdWV0JztcbmV4cG9ydCB7XG4gICAgSWNlYmVyZ1BhcnF1ZXRUYWJsZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlcy9pY2ViZXJnLXBhcnF1ZXQnO1xuZXhwb3J0IHtcbiAgICBQb3N0Z3JlczE4VGFibGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcG9zdGdyZXMtMTgnO1xuZXhwb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbiAgICBTdHJ1Y3R1cmFsS2luZCxcbiAgICBTdHJ1Y3R1cmFsUmVzdWx0LFxuICAgIFN0cnVjdHVyYWxFcnJvcixcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmV4cG9ydCB7XG4gICAgaXNWYWxpZEhpdmVUeXBlLFxuICAgIGlzVmFsaWRQb3N0Z3Jlc1R5cGUsXG59IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHtcbiAgICBwYXJzZUljZWJlcmdUeXBlLFxuICAgIGlzVmFsaWRJY2ViZXJnVHlwZSxcbiAgICBwYXJzZUljZWJlcmdUcmFuc2Zvcm0sXG4gICAgdHJhbnNmb3JtTGVnYWxPblR5cGUsXG4gICAgSWNlYmVyZ1R5cGUsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLFxuICAgIEljZWJlcmdUcmFuc2Zvcm0sXG4gICAgSWNlYmVyZ1RyYW5zZm9ybUtpbmQsXG59IGZyb20gJy4vaWNlYmVyZyc7XG5leHBvcnQge1xuICAgIGJ1aWxkRGFnRG90LFxufSBmcm9tICcuL2RpYWdyYW0vZGFnJztcbmV4cG9ydCB7XG4gICAgYnVpbGRFckRvdCxcbn0gZnJvbSAnLi9kaWFncmFtL2VyJztcbmV4cG9ydCB7XG4gICAgcmVuZGVyRG90LFxufSBmcm9tICcuL2RpYWdyYW0vcmVuZGVyJztcbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem loader. Walks a dataset root, parses each JSON file, runs Layer 1
|
|
3
|
+
* structural validation, and normalizes everything into a `World` of
|
|
4
|
+
* concrete `TableTypeBase` instances that the semantic rules operate on.
|
|
5
|
+
*
|
|
6
|
+
* Parse errors, structural errors, and a missing schema-description file are
|
|
7
|
+
* reported here; all cross-field / cross-file logic lives in the table-type
|
|
8
|
+
* classes (`./table-type.ts`, `./table-types/*`).
|
|
9
|
+
*/
|
|
10
|
+
import { Violation } from './model';
|
|
11
|
+
import { World } from './world';
|
|
12
|
+
/** Result of loading a root: the model plus any load-time violations. */
|
|
13
|
+
export interface LoadOutcome {
|
|
14
|
+
/** The loaded model. */
|
|
15
|
+
readonly world: World;
|
|
16
|
+
/** Parse, structural, and missing-description violations. */
|
|
17
|
+
readonly violations: Violation[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Load a dataset root into a `World`.
|
|
21
|
+
*
|
|
22
|
+
* @param rootDir Absolute or relative path to the dataset root.
|
|
23
|
+
* @returns The loaded world plus load-time violations.
|
|
24
|
+
* @throws Error When `rootDir` is not an existing directory.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadRoot(rootDir: string): LoadOutcome;
|