flexdataset 0.19.1 → 0.20.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/dist/src/cli.js +2 -11
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/validate.d.ts +30 -1
- package/dist/src/validate.js +50 -1
- package/package.json +1 -1
package/dist/src/cli.js
CHANGED
|
@@ -48,20 +48,11 @@ Usage:
|
|
|
48
48
|
Options:
|
|
49
49
|
--format Output format for "validate" (default: human).
|
|
50
50
|
--out Write SVG to a file instead of stdout (graph / er).`;
|
|
51
|
-
function formatViolation(violation) {
|
|
52
|
-
const location = [
|
|
53
|
-
violation.schema,
|
|
54
|
-
violation.table,
|
|
55
|
-
].filter(Boolean).join('.');
|
|
56
|
-
const where = location ? ` ${location}` : '';
|
|
57
|
-
const field = violation.field ? ` (${violation.field})` : '';
|
|
58
|
-
return ` ${violation.level.toUpperCase()} [${violation.code}]${where}${field}: ${violation.message}`;
|
|
59
|
-
}
|
|
60
51
|
function printHuman(result) {
|
|
61
52
|
const errors = result.violations.filter((violation) => violation.level === 'error');
|
|
62
53
|
const warnings = result.violations.filter((violation) => violation.level === 'warning');
|
|
63
54
|
for (const violation of result.violations) {
|
|
64
|
-
const line = formatViolation(violation)
|
|
55
|
+
const line = ` ${(0, validate_1.formatViolation)(violation)}`;
|
|
65
56
|
if (violation.level === 'error') {
|
|
66
57
|
console.error(line);
|
|
67
58
|
}
|
|
@@ -176,4 +167,4 @@ main(process.argv).then((code) => {
|
|
|
176
167
|
console.error(error.message);
|
|
177
168
|
process.exit(1);
|
|
178
169
|
});
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUV6Qix5Q0FFb0I7QUFDcEIscUNBRWtCO0FBQ2xCLHVDQUV1QjtBQUN2QixxQ0FFc0I7QUFDdEIsNkNBRTBCO0FBSzFCLE1BQU0sS0FBSyxHQUFHOzs7Ozs7Ozs7O2lFQVVtRCxDQUFDO0FBRWxFLFNBQVMsZUFBZSxDQUFDLFNBQW9CO0lBQ3pDLE1BQU0sUUFBUSxHQUFHO1FBQ2IsU0FBUyxDQUFDLE1BQU07UUFDaEIsU0FBUyxDQUFDLEtBQUs7S0FDbEIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsT0FBTyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMxRyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsTUFBd0I7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDcEYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFN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QUM7QUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDZixPQUFPLENBQUMsS0FBSyxDQUFFLEtBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBgZmxleGRhdGFzZXRgIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UuXG4gKlxuICogQ29tbWFuZHM6IGB2YWxpZGF0ZWAgKHN0cnVjdHVyYWwgKyBzZW1hbnRpYyBjaGVja3MpLCBgZ3JhcGhgIChkZXBlbmRlbmN5IERBR1xuICogYXMgU1ZHKSwgYW5kIGBlcmAgKGVudGl0eS1yZWxhdGlvbnNoaXAgZGlhZ3JhbSBhcyBTVkcpLiBUaGUgQ0xJIGlzIGEgdGhpblxuICogc2hlbGwgb3ZlciB0aGUgbGlicmFyeTsgYWxsIGxvZ2ljIGFuZCB0ZXN0cyBsaXZlIGluIHRoZSBtb2R1bGVzIGl0IGNhbGxzLlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcblxuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVJvb3QsIFxufSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCB7XG4gICAgbG9hZFJvb3QsIFxufSBmcm9tICcuL2xvYWRlcic7XG5pbXBvcnQge1xuICAgIGJ1aWxkRGFnRG90LCBcbn0gZnJvbSAnLi9kaWFncmFtL2RhZyc7XG5pbXBvcnQge1xuICAgIGJ1aWxkRXJEb3QsIFxufSBmcm9tICcuL2RpYWdyYW0vZXInO1xuaW1wb3J0IHtcbiAgICByZW5kZXJEb3QsIFxufSBmcm9tICcuL2RpYWdyYW0vcmVuZGVyJztcbmltcG9ydCB7XG4gICAgVmFsaWRhdGlvblJlc3VsdCwgVmlvbGF0aW9uLFxufSBmcm9tICcuL21vZGVsJztcblxuY29uc3QgVVNBR0UgPSBgZmxleGRhdGFzZXQg4oCUIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiB2YWxpZGF0b3JcblxuVXNhZ2U6XG4gIGZsZXhkYXRhc2V0IHZhbGlkYXRlIDxyb290PiBbLS1mb3JtYXQganNvbnxodW1hbl1cbiAgZmxleGRhdGFzZXQgZ3JhcGggPHJvb3Q+IFstLW91dCA8ZmlsZS5zdmc+XVxuICBmbGV4ZGF0YXNldCBlciA8cm9vdD4gWy0tb3V0IDxmaWxlLnN2Zz5dXG4gIGZsZXhkYXRhc2V0IGhlbHBcblxuT3B0aW9uczpcbiAgLS1mb3JtYXQgICBPdXRwdXQgZm9ybWF0IGZvciBcInZhbGlkYXRlXCIgKGRlZmF1bHQ6IGh1bWFuKS5cbiAgLS1vdXQgICAgICBXcml0ZSBTVkcgdG8gYSBmaWxlIGluc3RlYWQgb2Ygc3Rkb3V0IChncmFwaCAvIGVyKS5gO1xuXG5mdW5jdGlvbiBmb3JtYXRWaW9sYXRpb24odmlvbGF0aW9uOiBWaW9sYXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gW1xuICAgICAgICB2aW9sYXRpb24uc2NoZW1hLFxuICAgICAgICB2aW9sYXRpb24udGFibGUsXG4gICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICAgIGNvbnN0IHdoZXJlID0gbG9jYXRpb24gPyBgICR7bG9jYXRpb259YCA6ICcnO1xuICAgIGNvbnN0IGZpZWxkID0gdmlvbGF0aW9uLmZpZWxkID8gYCAoJHt2aW9sYXRpb24uZmllbGR9KWAgOiAnJztcbiAgICByZXR1cm4gYCAgJHt2aW9sYXRpb24ubGV2ZWwudG9VcHBlckNhc2UoKX0gWyR7dmlvbGF0aW9uLmNvZGV9XSR7d2hlcmV9JHtmaWVsZH06ICR7dmlvbGF0aW9uLm1lc3NhZ2V9YDtcbn1cblxuZnVuY3Rpb24gcHJpbnRIdW1hbihyZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvcnMgPSByZXN1bHQudmlvbGF0aW9ucy5maWx0ZXIoKHZpb2xhdGlvbikgPT4gdmlvbGF0aW9uLmxldmVsID09PSAnZXJyb3InKTtcbiAgICBjb25zdCB3YXJuaW5ncyA9IHJlc3VsdC52aW9sYXRpb25zLmZpbHRlcigodmlvbGF0aW9uKSA9PiB2aW9sYXRpb24ubGV2ZWwgPT09ICd3YXJuaW5nJyk7XG5cbiAgICBmb3IgKGNvbnN0IHZpb2xhdGlvbiBvZiByZXN1bHQudmlvbGF0aW9ucykge1xuICAgICAgICBjb25zdCBsaW5lID0gZm9ybWF0VmlvbGF0aW9uKHZpb2xhdGlvbik7XG4gICAgICAgIGlmICh2aW9sYXRpb24ubGV2ZWwgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4obGluZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBPSyDigJQgJHt3YXJuaW5ncy5sZW5ndGh9IHdhcm5pbmcocyksIDAgZXJyb3IocykuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRkFJTEVEIOKAlCAke2Vycm9ycy5sZW5ndGh9IGVycm9yKHMpLCAke3dhcm5pbmdzLmxlbmd0aH0gd2FybmluZyhzKS5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhyZXN0OiBzdHJpbmdbXSwgZmxhZzogc3RyaW5nKTogeyB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBwb3NpdGlvbmFsOiBzdHJpbmdbXSB9IHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwb3NpdGlvbmFsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAocmVzdFtpXSA9PT0gZmxhZykge1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgdmFsdWUgPSByZXN0W2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25hbC5wdXNoKHJlc3RbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBwb3NpdGlvbmFsLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHJ1blZhbGlkYXRlKHJlc3Q6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlLCBwb3NpdGlvbmFsLCBcbiAgICB9ID0gcGFyc2VPcHRpb25zKHJlc3QsICctLWZvcm1hdCcpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHZhbHVlID8/ICdodW1hbic7XG5cbiAgICBjb25zdCByb290ID0gcG9zaXRpb25hbFswXTtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndXNhZ2U6IGZsZXhkYXRhc2V0IHZhbGlkYXRlIDxyb290PiBbLS1mb3JtYXQganNvbnxodW1hbl0nKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCAhPT0gJ2h1bWFuJyAmJiBmb3JtYXQgIT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGB1bmtub3duIGZvcm1hdCBcIiR7Zm9ybWF0fVwiIChleHBlY3RlZCBcImh1bWFuXCIgb3IgXCJqc29uXCIpYCk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gdmFsaWRhdGVSb290KHJvb3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9rOiByZXN1bHQub2ssXG4gICAgICAgICAgICB2aW9sYXRpb25zOiByZXN1bHQudmlvbGF0aW9ucyxcbiAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByaW50SHVtYW4ocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0Lm9rID8gMCA6IDE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkRpYWdyYW0oY29tbWFuZDogJ2dyYXBoJyB8ICdlcicsIHJlc3Q6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiBvdXQsIHBvc2l0aW9uYWwsIFxuICAgIH0gPSBwYXJzZU9wdGlvbnMocmVzdCwgJy0tb3V0Jyk7XG5cbiAgICBjb25zdCByb290ID0gcG9zaXRpb25hbFswXTtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgdXNhZ2U6IGZsZXhkYXRhc2V0ICR7Y29tbWFuZH0gPHJvb3Q+IFstLW91dCA8ZmlsZS5zdmc+XWApO1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGxvYWRSb290KHJvb3QpLndvcmxkO1xuICAgICAgICBjb25zdCBkb3QgPSBjb21tYW5kID09PSAnZ3JhcGgnID8gYnVpbGREYWdEb3Qod29ybGQpIDogYnVpbGRFckRvdCh3b3JsZCk7XG4gICAgICAgIGNvbnN0IHN2ZyA9IGF3YWl0IHJlbmRlckRvdChkb3QpO1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG91dCwgc3ZnLCAndXRmLTgnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHdyb3RlICR7b3V0fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coc3ZnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbihhcmd2OiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgY29uc3QgY29tbWFuZCA9IGFyZ3NbMF07XG5cbiAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihVU0FHRSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZCA9PT0gJ2hlbHAnIHx8IGNvbW1hbmQgPT09ICctLWhlbHAnIHx8IGNvbW1hbmQgPT09ICctaCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coVVNBR0UpO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGNvbW1hbmQgPT09ICd2YWxpZGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIHJ1blZhbGlkYXRlKGFyZ3Muc2xpY2UoMSkpO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZCA9PT0gJ2dyYXBoJyB8fCBjb21tYW5kID09PSAnZXInKSB7XG4gICAgICAgIHJldHVybiBydW5EaWFncmFtKGNvbW1hbmQsIGFyZ3Muc2xpY2UoMSkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoYHVua25vd24gY29tbWFuZDogJHtjb21tYW5kfWApO1xuICAgIGNvbnNvbGUuZXJyb3IoVVNBR0UpO1xuICAgIHJldHVybiAxO1xufVxuXG5tYWluKHByb2Nlc3MuYXJndikudGhlbigoY29kZSkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbn0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcbiJdfQ==
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUV6Qix5Q0FHb0I7QUFDcEIscUNBRWtCO0FBQ2xCLHVDQUV1QjtBQUN2QixxQ0FFc0I7QUFDdEIsNkNBRTBCO0FBSzFCLE1BQU0sS0FBSyxHQUFHOzs7Ozs7Ozs7O2lFQVVtRCxDQUFDO0FBRWxFLFNBQVMsVUFBVSxDQUFDLE1BQXdCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRXhGLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBQSwwQkFBZSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsUUFBUSxDQUFDLE1BQU0sMEJBQTBCLENBQUMsQ0FBQztJQUNuRSxDQUFDO1NB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LEtBQUssSUFBSSxFQUFFLENBQUM7UUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN6QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUMsT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUUsS0FBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIGBmbGV4ZGF0YXNldGAgY29tbWFuZC1saW5lIGludGVyZmFjZS5cbiAqXG4gKiBDb21tYW5kczogYHZhbGlkYXRlYCAoc3RydWN0dXJhbCArIHNlbWFudGljIGNoZWNrcyksIGBncmFwaGAgKGRlcGVuZGVuY3kgREFHXG4gKiBhcyBTVkcpLCBhbmQgYGVyYCAoZW50aXR5LXJlbGF0aW9uc2hpcCBkaWFncmFtIGFzIFNWRykuIFRoZSBDTEkgaXMgYSB0aGluXG4gKiBzaGVsbCBvdmVyIHRoZSBsaWJyYXJ5OyBhbGwgbG9naWMgYW5kIHRlc3RzIGxpdmUgaW4gdGhlIG1vZHVsZXMgaXQgY2FsbHMuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQge1xuICAgIGZvcm1hdFZpb2xhdGlvbixcbiAgICB2YWxpZGF0ZVJvb3QsXG59IGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IHtcbiAgICBsb2FkUm9vdCwgXG59IGZyb20gJy4vbG9hZGVyJztcbmltcG9ydCB7XG4gICAgYnVpbGREYWdEb3QsIFxufSBmcm9tICcuL2RpYWdyYW0vZGFnJztcbmltcG9ydCB7XG4gICAgYnVpbGRFckRvdCwgXG59IGZyb20gJy4vZGlhZ3JhbS9lcic7XG5pbXBvcnQge1xuICAgIHJlbmRlckRvdCwgXG59IGZyb20gJy4vZGlhZ3JhbS9yZW5kZXInO1xuaW1wb3J0IHtcbiAgICBWYWxpZGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL21vZGVsJztcblxuY29uc3QgVVNBR0UgPSBgZmxleGRhdGFzZXQg4oCUIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiB2YWxpZGF0b3JcblxuVXNhZ2U6XG4gIGZsZXhkYXRhc2V0IHZhbGlkYXRlIDxyb290PiBbLS1mb3JtYXQganNvbnxodW1hbl1cbiAgZmxleGRhdGFzZXQgZ3JhcGggPHJvb3Q+IFstLW91dCA8ZmlsZS5zdmc+XVxuICBmbGV4ZGF0YXNldCBlciA8cm9vdD4gWy0tb3V0IDxmaWxlLnN2Zz5dXG4gIGZsZXhkYXRhc2V0IGhlbHBcblxuT3B0aW9uczpcbiAgLS1mb3JtYXQgICBPdXRwdXQgZm9ybWF0IGZvciBcInZhbGlkYXRlXCIgKGRlZmF1bHQ6IGh1bWFuKS5cbiAgLS1vdXQgICAgICBXcml0ZSBTVkcgdG8gYSBmaWxlIGluc3RlYWQgb2Ygc3Rkb3V0IChncmFwaCAvIGVyKS5gO1xuXG5mdW5jdGlvbiBwcmludEh1bWFuKHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHJlc3VsdC52aW9sYXRpb25zLmZpbHRlcigodmlvbGF0aW9uKSA9PiB2aW9sYXRpb24ubGV2ZWwgPT09ICdlcnJvcicpO1xuICAgIGNvbnN0IHdhcm5pbmdzID0gcmVzdWx0LnZpb2xhdGlvbnMuZmlsdGVyKCh2aW9sYXRpb24pID0+IHZpb2xhdGlvbi5sZXZlbCA9PT0gJ3dhcm5pbmcnKTtcblxuICAgIGZvciAoY29uc3QgdmlvbGF0aW9uIG9mIHJlc3VsdC52aW9sYXRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBgICAke2Zvcm1hdFZpb2xhdGlvbih2aW9sYXRpb24pfWA7XG4gICAgICAgIGlmICh2aW9sYXRpb24ubGV2ZWwgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4obGluZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBPSyDigJQgJHt3YXJuaW5ncy5sZW5ndGh9IHdhcm5pbmcocyksIDAgZXJyb3IocykuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRkFJTEVEIOKAlCAke2Vycm9ycy5sZW5ndGh9IGVycm9yKHMpLCAke3dhcm5pbmdzLmxlbmd0aH0gd2FybmluZyhzKS5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhyZXN0OiBzdHJpbmdbXSwgZmxhZzogc3RyaW5nKTogeyB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBwb3NpdGlvbmFsOiBzdHJpbmdbXSB9IHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwb3NpdGlvbmFsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAocmVzdFtpXSA9PT0gZmxhZykge1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgdmFsdWUgPSByZXN0W2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25hbC5wdXNoKHJlc3RbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBwb3NpdGlvbmFsLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHJ1blZhbGlkYXRlKHJlc3Q6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlLCBwb3NpdGlvbmFsLCBcbiAgICB9ID0gcGFyc2VPcHRpb25zKHJlc3QsICctLWZvcm1hdCcpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHZhbHVlID8/ICdodW1hbic7XG5cbiAgICBjb25zdCByb290ID0gcG9zaXRpb25hbFswXTtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndXNhZ2U6IGZsZXhkYXRhc2V0IHZhbGlkYXRlIDxyb290PiBbLS1mb3JtYXQganNvbnxodW1hbl0nKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCAhPT0gJ2h1bWFuJyAmJiBmb3JtYXQgIT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGB1bmtub3duIGZvcm1hdCBcIiR7Zm9ybWF0fVwiIChleHBlY3RlZCBcImh1bWFuXCIgb3IgXCJqc29uXCIpYCk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gdmFsaWRhdGVSb290KHJvb3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9rOiByZXN1bHQub2ssXG4gICAgICAgICAgICB2aW9sYXRpb25zOiByZXN1bHQudmlvbGF0aW9ucyxcbiAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByaW50SHVtYW4ocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0Lm9rID8gMCA6IDE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkRpYWdyYW0oY29tbWFuZDogJ2dyYXBoJyB8ICdlcicsIHJlc3Q6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiBvdXQsIHBvc2l0aW9uYWwsIFxuICAgIH0gPSBwYXJzZU9wdGlvbnMocmVzdCwgJy0tb3V0Jyk7XG5cbiAgICBjb25zdCByb290ID0gcG9zaXRpb25hbFswXTtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgdXNhZ2U6IGZsZXhkYXRhc2V0ICR7Y29tbWFuZH0gPHJvb3Q+IFstLW91dCA8ZmlsZS5zdmc+XWApO1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGxvYWRSb290KHJvb3QpLndvcmxkO1xuICAgICAgICBjb25zdCBkb3QgPSBjb21tYW5kID09PSAnZ3JhcGgnID8gYnVpbGREYWdEb3Qod29ybGQpIDogYnVpbGRFckRvdCh3b3JsZCk7XG4gICAgICAgIGNvbnN0IHN2ZyA9IGF3YWl0IHJlbmRlckRvdChkb3QpO1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG91dCwgc3ZnLCAndXRmLTgnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHdyb3RlICR7b3V0fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coc3ZnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbihhcmd2OiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgY29uc3QgY29tbWFuZCA9IGFyZ3NbMF07XG5cbiAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihVU0FHRSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZCA9PT0gJ2hlbHAnIHx8IGNvbW1hbmQgPT09ICctLWhlbHAnIHx8IGNvbW1hbmQgPT09ICctaCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coVVNBR0UpO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGNvbW1hbmQgPT09ICd2YWxpZGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIHJ1blZhbGlkYXRlKGFyZ3Muc2xpY2UoMSkpO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZCA9PT0gJ2dyYXBoJyB8fCBjb21tYW5kID09PSAnZXInKSB7XG4gICAgICAgIHJldHVybiBydW5EaWFncmFtKGNvbW1hbmQsIGFyZ3Muc2xpY2UoMSkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoYHVua25vd24gY29tbWFuZDogJHtjb21tYW5kfWApO1xuICAgIGNvbnNvbGUuZXJyb3IoVVNBR0UpO1xuICAgIHJldHVybiAxO1xufVxuXG5tYWluKHByb2Nlc3MuYXJndikudGhlbigoY29kZSkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbn0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcbiJdfQ==
|
package/dist/src/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './model';
|
|
5
5
|
export { LoadedSchema, World, runSemanticRules, } from './world';
|
|
6
|
-
export { validateRoot, } from './validate';
|
|
6
|
+
export { validateRoot, loadValidatedRoot, formatViolation, LoadValidatedOptions, } from './validate';
|
|
7
7
|
export { loadRoot, LoadOutcome, } from './loader';
|
|
8
8
|
export { TableTypeBase, TableTypeFields, } from './table-type';
|
|
9
9
|
export { createTableType, } from './table-types/registry';
|
package/dist/src/index.js
CHANGED
|
@@ -17,12 +17,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
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;
|
|
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.formatViolation = exports.loadValidatedRoot = exports.validateRoot = exports.runSemanticRules = void 0;
|
|
21
21
|
__exportStar(require("./model"), exports);
|
|
22
22
|
var world_1 = require("./world");
|
|
23
23
|
Object.defineProperty(exports, "runSemanticRules", { enumerable: true, get: function () { return world_1.runSemanticRules; } });
|
|
24
24
|
var validate_1 = require("./validate");
|
|
25
25
|
Object.defineProperty(exports, "validateRoot", { enumerable: true, get: function () { return validate_1.validateRoot; } });
|
|
26
|
+
Object.defineProperty(exports, "loadValidatedRoot", { enumerable: true, get: function () { return validate_1.loadValidatedRoot; } });
|
|
27
|
+
Object.defineProperty(exports, "formatViolation", { enumerable: true, get: function () { return validate_1.formatViolation; } });
|
|
26
28
|
var loader_1 = require("./loader");
|
|
27
29
|
Object.defineProperty(exports, "loadRoot", { enumerable: true, get: function () { return loader_1.loadRoot; } });
|
|
28
30
|
var table_type_1 = require("./table-type");
|
|
@@ -53,4 +55,4 @@ var er_1 = require("./diagram/er");
|
|
|
53
55
|
Object.defineProperty(exports, "buildErDot", { enumerable: true, get: function () { return er_1.buildErDot; } });
|
|
54
56
|
var render_1 = require("./diagram/render");
|
|
55
57
|
Object.defineProperty(exports, "renderDot", { enumerable: true, get: function () { return render_1.renderDot; } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QjtBQUN4QixpQ0FJaUI7QUFEYix5R0FBQSxnQkFBZ0IsT0FBQTtBQUVwQix1Q0FLb0I7QUFKaEIsd0dBQUEsWUFBWSxPQUFBO0FBQ1osNkdBQUEsaUJBQWlCLE9BQUE7QUFDakIsMkdBQUEsZUFBZSxPQUFBO0FBR25CLG1DQUdrQjtBQUZkLGtHQUFBLFFBQVEsT0FBQTtBQUdaLDJDQUdzQjtBQUZsQiwyR0FBQSxhQUFhLE9BQUE7QUFHakIsbURBRWdDO0FBRDVCLDJHQUFBLGVBQWUsT0FBQTtBQUVuQiwyREFFb0M7QUFEaEMsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFcEIsaUVBRXVDO0FBRG5DLHNIQUFBLG1CQUFtQixPQUFBO0FBRXZCLHlEQUVtQztBQUQvQiw4R0FBQSxlQUFlLE9BQUE7QUFFbkIsMkNBS3NCO0FBSmxCLCtHQUFBLGlCQUFpQixPQUFBO0FBS3JCLGlDQUdpQjtBQUZiLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLG1CQUFtQixPQUFBO0FBRXZCLHFDQVNtQjtBQVJmLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDZHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLGdIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLG9CQUFvQixPQUFBO0FBRXBCLDBHQUFBLGVBQWUsT0FBQTtBQUVmLCtHQUFBLG9CQUFvQixPQUFBO0FBRXhCLHFDQUV1QjtBQURuQixrR0FBQSxXQUFXLE9BQUE7QUFFZixtQ0FFc0I7QUFEbEIsZ0dBQUEsVUFBVSxPQUFBO0FBRWQsMkNBRTBCO0FBRHRCLG1HQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBmb3IgdGhlIEZERCBjb3JlIHBhY2thZ2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbCc7XG5leHBvcnQge1xuICAgIExvYWRlZFNjaGVtYSxcbiAgICBXb3JsZCxcbiAgICBydW5TZW1hbnRpY1J1bGVzLFxufSBmcm9tICcuL3dvcmxkJztcbmV4cG9ydCB7XG4gICAgdmFsaWRhdGVSb290LFxuICAgIGxvYWRWYWxpZGF0ZWRSb290LFxuICAgIGZvcm1hdFZpb2xhdGlvbixcbiAgICBMb2FkVmFsaWRhdGVkT3B0aW9ucyxcbn0gZnJvbSAnLi92YWxpZGF0ZSc7XG5leHBvcnQge1xuICAgIGxvYWRSb290LFxuICAgIExvYWRPdXRjb21lLFxufSBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQge1xuICAgIFRhYmxlVHlwZUJhc2UsXG4gICAgVGFibGVUeXBlRmllbGRzLFxufSBmcm9tICcuL3RhYmxlLXR5cGUnO1xuZXhwb3J0IHtcbiAgICBjcmVhdGVUYWJsZVR5cGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcmVnaXN0cnknO1xuZXhwb3J0IHtcbiAgICBIaXZlUGFycXVldFRhYmxlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL2hpdmUtcGFycXVldCc7XG5leHBvcnQge1xuICAgIEljZWJlcmdQYXJxdWV0VGFibGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvaWNlYmVyZy1wYXJxdWV0JztcbmV4cG9ydCB7XG4gICAgUG9zdGdyZXMxOFRhYmxlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3Bvc3RncmVzLTE4JztcbmV4cG9ydCB7XG4gICAgdmFsaWRhdGVTdHJ1Y3R1cmUsXG4gICAgU3RydWN0dXJhbEtpbmQsXG4gICAgU3RydWN0dXJhbFJlc3VsdCxcbiAgICBTdHJ1Y3R1cmFsRXJyb3IsXG59IGZyb20gJy4vc3RydWN0dXJhbCc7XG5leHBvcnQge1xuICAgIGlzVmFsaWRIaXZlVHlwZSxcbiAgICBpc1ZhbGlkUG9zdGdyZXNUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7XG4gICAgcGFyc2VJY2ViZXJnVHlwZSxcbiAgICBpc1ZhbGlkSWNlYmVyZ1R5cGUsXG4gICAgcGFyc2VJY2ViZXJnVHJhbnNmb3JtLFxuICAgIHRyYW5zZm9ybUxlZ2FsT25UeXBlLFxuICAgIEljZWJlcmdUeXBlLFxuICAgIEljZWJlcmdUeXBlS2luZCxcbiAgICBJY2ViZXJnVHJhbnNmb3JtLFxuICAgIEljZWJlcmdUcmFuc2Zvcm1LaW5kLFxufSBmcm9tICcuL2ljZWJlcmcnO1xuZXhwb3J0IHtcbiAgICBidWlsZERhZ0RvdCxcbn0gZnJvbSAnLi9kaWFncmFtL2RhZyc7XG5leHBvcnQge1xuICAgIGJ1aWxkRXJEb3QsXG59IGZyb20gJy4vZGlhZ3JhbS9lcic7XG5leHBvcnQge1xuICAgIHJlbmRlckRvdCxcbn0gZnJvbSAnLi9kaWFncmFtL3JlbmRlcic7XG4iXX0=
|
package/dist/src/validate.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Top-level validation: load a dataset root (Layer 1) and run the semantic
|
|
3
3
|
* rules (Layer 2), aggregating every violation.
|
|
4
4
|
*/
|
|
5
|
-
import { ValidationResult } from './model';
|
|
5
|
+
import { ValidationResult, Violation } from './model';
|
|
6
|
+
import { World } from './world';
|
|
6
7
|
/**
|
|
7
8
|
* Validate a dataset root.
|
|
8
9
|
*
|
|
@@ -11,3 +12,31 @@ import { ValidationResult } from './model';
|
|
|
11
12
|
* @throws Error When `rootDir` is not an existing directory.
|
|
12
13
|
*/
|
|
13
14
|
export declare function validateRoot(rootDir: string): ValidationResult;
|
|
15
|
+
/**
|
|
16
|
+
* Format a single violation as one human-readable line:
|
|
17
|
+
* `LEVEL [CODE] schema.table (field): message`. The location and field
|
|
18
|
+
* segments are omitted when absent.
|
|
19
|
+
*
|
|
20
|
+
* @param violation The violation to format.
|
|
21
|
+
* @returns The formatted line (no leading or trailing whitespace).
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatViolation(violation: Violation): string;
|
|
24
|
+
/** Options for {@link loadValidatedRoot}. */
|
|
25
|
+
export interface LoadValidatedOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Called once for each surviving warning-level violation, in load order.
|
|
28
|
+
* Warnings never fail the load; this is the hook for surfacing them.
|
|
29
|
+
*/
|
|
30
|
+
readonly onWarning?: (warning: Violation) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load a dataset root, run full validation (structural + semantic), and return
|
|
34
|
+
* the validated world. Throws when any error-level violation exists; warnings
|
|
35
|
+
* do not fail the load and are delivered to `options.onWarning` if provided.
|
|
36
|
+
*
|
|
37
|
+
* @param rootDir Path to the dataset root.
|
|
38
|
+
* @param options Optional callbacks, including `onWarning`.
|
|
39
|
+
* @returns The validated World.
|
|
40
|
+
* @throws Error When `rootDir` is not a directory, or any error-level violation is found.
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadValidatedRoot(rootDir: string, options?: LoadValidatedOptions): World;
|
package/dist/src/validate.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.validateRoot = validateRoot;
|
|
8
|
+
exports.formatViolation = formatViolation;
|
|
9
|
+
exports.loadValidatedRoot = loadValidatedRoot;
|
|
8
10
|
const loader_1 = require("./loader");
|
|
9
11
|
const world_1 = require("./world");
|
|
10
12
|
/**
|
|
@@ -27,4 +29,51 @@ function validateRoot(rootDir) {
|
|
|
27
29
|
violations: all,
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Format a single violation as one human-readable line:
|
|
34
|
+
* `LEVEL [CODE] schema.table (field): message`. The location and field
|
|
35
|
+
* segments are omitted when absent.
|
|
36
|
+
*
|
|
37
|
+
* @param violation The violation to format.
|
|
38
|
+
* @returns The formatted line (no leading or trailing whitespace).
|
|
39
|
+
*/
|
|
40
|
+
function formatViolation(violation) {
|
|
41
|
+
const location = [
|
|
42
|
+
violation.schema,
|
|
43
|
+
violation.table,
|
|
44
|
+
].filter(Boolean).join('.');
|
|
45
|
+
const where = location ? ` ${location}` : '';
|
|
46
|
+
const field = violation.field ? ` (${violation.field})` : '';
|
|
47
|
+
return `${violation.level.toUpperCase()} [${violation.code}]${where}${field}: ${violation.message}`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load a dataset root, run full validation (structural + semantic), and return
|
|
51
|
+
* the validated world. Throws when any error-level violation exists; warnings
|
|
52
|
+
* do not fail the load and are delivered to `options.onWarning` if provided.
|
|
53
|
+
*
|
|
54
|
+
* @param rootDir Path to the dataset root.
|
|
55
|
+
* @param options Optional callbacks, including `onWarning`.
|
|
56
|
+
* @returns The validated World.
|
|
57
|
+
* @throws Error When `rootDir` is not a directory, or any error-level violation is found.
|
|
58
|
+
*/
|
|
59
|
+
function loadValidatedRoot(rootDir, options) {
|
|
60
|
+
const { world, violations, } = (0, loader_1.loadRoot)(rootDir);
|
|
61
|
+
const all = [
|
|
62
|
+
...violations,
|
|
63
|
+
...(0, world_1.runSemanticRules)(world),
|
|
64
|
+
];
|
|
65
|
+
const errors = all.filter((violation) => violation.level === 'error');
|
|
66
|
+
if (errors.length > 0) {
|
|
67
|
+
const detail = errors.map(formatViolation).join('\n');
|
|
68
|
+
throw new Error(`validation failed for "${rootDir}":\n${detail}`);
|
|
69
|
+
}
|
|
70
|
+
if (options?.onWarning) {
|
|
71
|
+
for (const warning of all) {
|
|
72
|
+
if (warning.level === 'warning') {
|
|
73
|
+
options.onWarning(warning);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return world;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFxQkgsb0NBY0M7QUFVRCwwQ0FRQztBQXFCRCw4Q0F3QkM7QUE1RkQscUNBRWtCO0FBQ2xCLG1DQUdpQjtBQUVqQjs7Ozs7O0dBTUc7QUFDSCxTQUFnQixZQUFZLENBQUMsT0FBZTtJQUN4QyxNQUFNLEVBQ0YsS0FBSyxFQUFFLFVBQVUsR0FDcEIsR0FBRyxJQUFBLGlCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBRztRQUNSLEdBQUcsVUFBVTtRQUNiLEdBQUcsUUFBUTtLQUNkLENBQUM7SUFDRixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDakUsT0FBTztRQUNILEVBQUU7UUFDRixVQUFVLEVBQUUsR0FBRztLQUNsQixDQUFDO0FBQ04sQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixlQUFlLENBQUMsU0FBb0I7SUFDaEQsTUFBTSxRQUFRLEdBQUc7UUFDYixTQUFTLENBQUMsTUFBTTtRQUNoQixTQUFTLENBQUMsS0FBSztLQUNsQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RCxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hHLENBQUM7QUFXRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFlLEVBQUUsT0FBOEI7SUFDN0UsTUFBTSxFQUNGLEtBQUssRUFBRSxVQUFVLEdBQ3BCLEdBQUcsSUFBQSxpQkFBUSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sR0FBRyxHQUFHO1FBQ1IsR0FBRyxVQUFVO1FBQ2IsR0FBRyxJQUFBLHdCQUFnQixFQUFDLEtBQUssQ0FBQztLQUM3QixDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQztJQUN0RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvcC1sZXZlbCB2YWxpZGF0aW9uOiBsb2FkIGEgZGF0YXNldCByb290IChMYXllciAxKSBhbmQgcnVuIHRoZSBzZW1hbnRpY1xuICogcnVsZXMgKExheWVyIDIpLCBhZ2dyZWdhdGluZyBldmVyeSB2aW9sYXRpb24uXG4gKi9cblxuaW1wb3J0IHtcbiAgICBWYWxpZGF0aW9uUmVzdWx0LFxuICAgIFZpb2xhdGlvbixcbn0gZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQge1xuICAgIGxvYWRSb290LFxufSBmcm9tICcuL2xvYWRlcic7XG5pbXBvcnQge1xuICAgIHJ1blNlbWFudGljUnVsZXMsXG4gICAgV29ybGQsXG59IGZyb20gJy4vd29ybGQnO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgZGF0YXNldCByb290LlxuICpcbiAqIEBwYXJhbSByb290RGlyIFBhdGggdG8gdGhlIGRhdGFzZXQgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBhZ2dyZWdhdGUgcmVzdWx0LiBgb2tgIGlzIGZhbHNlIHdoZW4gYW55IGVycm9yLWxldmVsIHZpb2xhdGlvbiBleGlzdHMuXG4gKiBAdGhyb3dzIEVycm9yIFdoZW4gYHJvb3REaXJgIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJvb3Qocm9vdERpcjogc3RyaW5nKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3Qge1xuICAgICAgICB3b3JsZCwgdmlvbGF0aW9ucyxcbiAgICB9ID0gbG9hZFJvb3Qocm9vdERpcik7XG4gICAgY29uc3Qgc2VtYW50aWMgPSBydW5TZW1hbnRpY1J1bGVzKHdvcmxkKTtcbiAgICBjb25zdCBhbGwgPSBbXG4gICAgICAgIC4uLnZpb2xhdGlvbnMsXG4gICAgICAgIC4uLnNlbWFudGljLFxuICAgIF07XG4gICAgY29uc3Qgb2sgPSAhYWxsLnNvbWUoKHZpb2xhdGlvbikgPT4gdmlvbGF0aW9uLmxldmVsID09PSAnZXJyb3InKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBvayxcbiAgICAgICAgdmlvbGF0aW9uczogYWxsLFxuICAgIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGEgc2luZ2xlIHZpb2xhdGlvbiBhcyBvbmUgaHVtYW4tcmVhZGFibGUgbGluZTpcbiAqIGBMRVZFTCBbQ09ERV0gc2NoZW1hLnRhYmxlIChmaWVsZCk6IG1lc3NhZ2VgLiBUaGUgbG9jYXRpb24gYW5kIGZpZWxkXG4gKiBzZWdtZW50cyBhcmUgb21pdHRlZCB3aGVuIGFic2VudC5cbiAqXG4gKiBAcGFyYW0gdmlvbGF0aW9uIFRoZSB2aW9sYXRpb24gdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBsaW5lIChubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VmlvbGF0aW9uKHZpb2xhdGlvbjogVmlvbGF0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IFtcbiAgICAgICAgdmlvbGF0aW9uLnNjaGVtYSxcbiAgICAgICAgdmlvbGF0aW9uLnRhYmxlLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcbiAgICBjb25zdCB3aGVyZSA9IGxvY2F0aW9uID8gYCAke2xvY2F0aW9ufWAgOiAnJztcbiAgICBjb25zdCBmaWVsZCA9IHZpb2xhdGlvbi5maWVsZCA/IGAgKCR7dmlvbGF0aW9uLmZpZWxkfSlgIDogJyc7XG4gICAgcmV0dXJuIGAke3Zpb2xhdGlvbi5sZXZlbC50b1VwcGVyQ2FzZSgpfSBbJHt2aW9sYXRpb24uY29kZX1dJHt3aGVyZX0ke2ZpZWxkfTogJHt2aW9sYXRpb24ubWVzc2FnZX1gO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGxvYWRWYWxpZGF0ZWRSb290fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFZhbGlkYXRlZE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIHN1cnZpdmluZyB3YXJuaW5nLWxldmVsIHZpb2xhdGlvbiwgaW4gbG9hZCBvcmRlci5cbiAgICAgKiBXYXJuaW5ncyBuZXZlciBmYWlsIHRoZSBsb2FkOyB0aGlzIGlzIHRoZSBob29rIGZvciBzdXJmYWNpbmcgdGhlbS5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbldhcm5pbmc/OiAod2FybmluZzogVmlvbGF0aW9uKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QsIHJ1biBmdWxsIHZhbGlkYXRpb24gKHN0cnVjdHVyYWwgKyBzZW1hbnRpYyksIGFuZCByZXR1cm5cbiAqIHRoZSB2YWxpZGF0ZWQgd29ybGQuIFRocm93cyB3aGVuIGFueSBlcnJvci1sZXZlbCB2aW9sYXRpb24gZXhpc3RzOyB3YXJuaW5nc1xuICogZG8gbm90IGZhaWwgdGhlIGxvYWQgYW5kIGFyZSBkZWxpdmVyZWQgdG8gYG9wdGlvbnMub25XYXJuaW5nYCBpZiBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcm9vdERpciBQYXRoIHRvIHRoZSBkYXRhc2V0IHJvb3QuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjYWxsYmFja3MsIGluY2x1ZGluZyBgb25XYXJuaW5nYC5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgV29ybGQuXG4gKiBAdGhyb3dzIEVycm9yIFdoZW4gYHJvb3REaXJgIGlzIG5vdCBhIGRpcmVjdG9yeSwgb3IgYW55IGVycm9yLWxldmVsIHZpb2xhdGlvbiBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRWYWxpZGF0ZWRSb290KHJvb3REaXI6IHN0cmluZywgb3B0aW9ucz86IExvYWRWYWxpZGF0ZWRPcHRpb25zKTogV29ybGQge1xuICAgIGNvbnN0IHtcbiAgICAgICAgd29ybGQsIHZpb2xhdGlvbnMsXG4gICAgfSA9IGxvYWRSb290KHJvb3REaXIpO1xuICAgIGNvbnN0IGFsbCA9IFtcbiAgICAgICAgLi4udmlvbGF0aW9ucyxcbiAgICAgICAgLi4ucnVuU2VtYW50aWNSdWxlcyh3b3JsZCksXG4gICAgXTtcblxuICAgIGNvbnN0IGVycm9ycyA9IGFsbC5maWx0ZXIoKHZpb2xhdGlvbikgPT4gdmlvbGF0aW9uLmxldmVsID09PSAnZXJyb3InKTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZGV0YWlsID0gZXJyb3JzLm1hcChmb3JtYXRWaW9sYXRpb24pLmpvaW4oJ1xcbicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cm9vdERpcn1cIjpcXG4ke2RldGFpbH1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ub25XYXJuaW5nKSB7XG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBhbGwpIHtcbiAgICAgICAgICAgIGlmICh3YXJuaW5nLmxldmVsID09PSAnd2FybmluZycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uV2FybmluZyh3YXJuaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3b3JsZDtcbn1cbiJdfQ==
|
package/package.json
CHANGED