@pbiplint/core 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 +661 -0
- package/NOTICE +29 -0
- package/README.md +34 -0
- package/dist/engine/config.d.ts +33 -0
- package/dist/engine/config.d.ts.map +1 -0
- package/dist/engine/config.js +61 -0
- package/dist/engine/config.js.map +1 -0
- package/dist/engine/ignore.d.ts +8 -0
- package/dist/engine/ignore.d.ts.map +1 -0
- package/dist/engine/ignore.js +17 -0
- package/dist/engine/ignore.js.map +1 -0
- package/dist/engine/lint.d.ts +38 -0
- package/dist/engine/lint.d.ts.map +1 -0
- package/dist/engine/lint.js +33 -0
- package/dist/engine/lint.js.map +1 -0
- package/dist/engine/rank.d.ts +24 -0
- package/dist/engine/rank.d.ts.map +1 -0
- package/dist/engine/rank.js +38 -0
- package/dist/engine/rank.js.map +1 -0
- package/dist/engine/run.d.ts +21 -0
- package/dist/engine/run.d.ts.map +1 -0
- package/dist/engine/run.js +43 -0
- package/dist/engine/run.js.map +1 -0
- package/dist/format/index.d.ts +11 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +21 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/json.d.ts +4 -0
- package/dist/format/json.d.ts.map +1 -0
- package/dist/format/json.js +20 -0
- package/dist/format/json.js.map +1 -0
- package/dist/format/markdown.d.ts +4 -0
- package/dist/format/markdown.d.ts.map +1 -0
- package/dist/format/markdown.js +28 -0
- package/dist/format/markdown.js.map +1 -0
- package/dist/format/sarif.d.ts +4 -0
- package/dist/format/sarif.d.ts.map +1 -0
- package/dist/format/sarif.js +77 -0
- package/dist/format/sarif.js.map +1 -0
- package/dist/format/text.d.ts +31 -0
- package/dist/format/text.d.ts.map +1 -0
- package/dist/format/text.js +57 -0
- package/dist/format/text.js.map +1 -0
- package/dist/index/build.d.ts +11 -0
- package/dist/index/build.d.ts.map +1 -0
- package/dist/index/build.js +11 -0
- package/dist/index/build.js.map +1 -0
- package/dist/index/references.d.ts +37 -0
- package/dist/index/references.d.ts.map +1 -0
- package/dist/index/references.js +126 -0
- package/dist/index/references.js.map +1 -0
- package/dist/index/relationships.d.ts +10 -0
- package/dist/index/relationships.d.ts.map +1 -0
- package/dist/index/relationships.js +24 -0
- package/dist/index/relationships.js.map +1 -0
- package/dist/index/usage.d.ts +11 -0
- package/dist/index/usage.d.ts.map +1 -0
- package/dist/index/usage.js +25 -0
- package/dist/index/usage.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/model/build.d.ts +9 -0
- package/dist/model/build.d.ts.map +1 -0
- package/dist/model/build.js +282 -0
- package/dist/model/build.js.map +1 -0
- package/dist/model/names.d.ts +12 -0
- package/dist/model/names.d.ts.map +1 -0
- package/dist/model/names.js +21 -0
- package/dist/model/names.js.map +1 -0
- package/dist/model/types.d.ts +150 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +2 -0
- package/dist/model/types.js.map +1 -0
- package/dist/rules/helpers.d.ts +54 -0
- package/dist/rules/helpers.d.ts.map +1 -0
- package/dist/rules/helpers.js +189 -0
- package/dist/rules/helpers.js.map +1 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +4 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/microsoft-bpa/bpa-rules.data.d.ts +12 -0
- package/dist/rules/microsoft-bpa/bpa-rules.data.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/bpa-rules.data.js +664 -0
- package/dist/rules/microsoft-bpa/bpa-rules.data.js.map +1 -0
- package/dist/rules/microsoft-bpa/columns.d.ts +14 -0
- package/dist/rules/microsoft-bpa/columns.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/columns.js +117 -0
- package/dist/rules/microsoft-bpa/columns.js.map +1 -0
- package/dist/rules/microsoft-bpa/define.d.ts +14 -0
- package/dist/rules/microsoft-bpa/define.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/define.js +75 -0
- package/dist/rules/microsoft-bpa/define.js.map +1 -0
- package/dist/rules/microsoft-bpa/dependencies.d.ts +11 -0
- package/dist/rules/microsoft-bpa/dependencies.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/dependencies.js +56 -0
- package/dist/rules/microsoft-bpa/dependencies.js.map +1 -0
- package/dist/rules/microsoft-bpa/index.d.ts +4 -0
- package/dist/rules/microsoft-bpa/index.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/index.js +20 -0
- package/dist/rules/microsoft-bpa/index.js.map +1 -0
- package/dist/rules/microsoft-bpa/live-model.d.ts +3 -0
- package/dist/rules/microsoft-bpa/live-model.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/live-model.js +10 -0
- package/dist/rules/microsoft-bpa/live-model.js.map +1 -0
- package/dist/rules/microsoft-bpa/measures.d.ts +15 -0
- package/dist/rules/microsoft-bpa/measures.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/measures.js +69 -0
- package/dist/rules/microsoft-bpa/measures.js.map +1 -0
- package/dist/rules/microsoft-bpa/naming.d.ts +14 -0
- package/dist/rules/microsoft-bpa/naming.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/naming.js +47 -0
- package/dist/rules/microsoft-bpa/naming.js.map +1 -0
- package/dist/rules/microsoft-bpa/relationships.d.ts +14 -0
- package/dist/rules/microsoft-bpa/relationships.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/relationships.js +97 -0
- package/dist/rules/microsoft-bpa/relationships.js.map +1 -0
- package/dist/rules/microsoft-bpa/tables.d.ts +16 -0
- package/dist/rules/microsoft-bpa/tables.d.ts.map +1 -0
- package/dist/rules/microsoft-bpa/tables.js +147 -0
- package/dist/rules/microsoft-bpa/tables.js.map +1 -0
- package/dist/rules/parse-issue.d.ts +4 -0
- package/dist/rules/parse-issue.d.ts.map +1 -0
- package/dist/rules/parse-issue.js +19 -0
- package/dist/rules/parse-issue.js.map +1 -0
- package/dist/rules/rule-summaries.data.d.ts +3 -0
- package/dist/rules/rule-summaries.data.d.ts.map +1 -0
- package/dist/rules/rule-summaries.data.js +78 -0
- package/dist/rules/rule-summaries.data.js.map +1 -0
- package/dist/rules/types.d.ts +42 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +15 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/tmdl/parse.d.ts +7 -0
- package/dist/tmdl/parse.d.ts.map +1 -0
- package/dist/tmdl/parse.js +196 -0
- package/dist/tmdl/parse.js.map +1 -0
- package/dist/tmdl/quote.d.ts +5 -0
- package/dist/tmdl/quote.d.ts.map +1 -0
- package/dist/tmdl/quote.js +15 -0
- package/dist/tmdl/quote.js.map +1 -0
- package/dist/tmdl/types.d.ts +32 -0
- package/dist/tmdl/types.d.ts.map +1 -0
- package/dist/tmdl/types.js +2 -0
- package/dist/tmdl/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +51 -0
- package/src/engine/config.ts +91 -0
- package/src/engine/ignore.ts +18 -0
- package/src/engine/lint.ts +79 -0
- package/src/engine/rank.ts +67 -0
- package/src/engine/run.ts +67 -0
- package/src/format/index.ts +37 -0
- package/src/format/json.ts +22 -0
- package/src/format/markdown.ts +37 -0
- package/src/format/sarif.ts +85 -0
- package/src/format/text.ts +90 -0
- package/src/index/build.ts +18 -0
- package/src/index/references.ts +170 -0
- package/src/index/relationships.ts +33 -0
- package/src/index/usage.ts +33 -0
- package/src/index.ts +80 -0
- package/src/model/build.ts +306 -0
- package/src/model/names.ts +31 -0
- package/src/model/types.ts +165 -0
- package/src/rules/helpers.ts +223 -0
- package/src/rules/index.ts +5 -0
- package/src/rules/microsoft-bpa/bpa-rules.data.ts +782 -0
- package/src/rules/microsoft-bpa/columns.ts +192 -0
- package/src/rules/microsoft-bpa/define.ts +84 -0
- package/src/rules/microsoft-bpa/dependencies.ts +95 -0
- package/src/rules/microsoft-bpa/index.ts +22 -0
- package/src/rules/microsoft-bpa/live-model.ts +10 -0
- package/src/rules/microsoft-bpa/measures.ts +143 -0
- package/src/rules/microsoft-bpa/naming.ts +104 -0
- package/src/rules/microsoft-bpa/relationships.ts +189 -0
- package/src/rules/microsoft-bpa/tables.ts +249 -0
- package/src/rules/parse-issue.ts +23 -0
- package/src/rules/rule-summaries.data.ts +144 -0
- package/src/rules/types.ts +87 -0
- package/src/tmdl/parse.ts +194 -0
- package/src/tmdl/quote.ts +15 -0
- package/src/tmdl/types.ts +34 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpa-rules.data.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/bpa-rules.data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const AVOID_FLOATING_POINT_DATA_TYPES: import("../types.js").Rule;
|
|
2
|
+
export declare const DATECOLUMN_FORMATSTRING: import("../types.js").Rule;
|
|
3
|
+
export declare const MONTHCOLUMN_FORMATSTRING: import("../types.js").Rule;
|
|
4
|
+
export declare const ADD_DATA_CATEGORY_FOR_COLUMNS: import("../types.js").Rule;
|
|
5
|
+
export declare const MONTH_AS_A_STRING_MUST_BE_SORTED: import("../types.js").Rule;
|
|
6
|
+
export declare const NUMERIC_COLUMN_SUMMARIZE_BY: import("../types.js").Rule;
|
|
7
|
+
export declare const FORMAT_FLAG_COLUMNS_AS_YES_NO_VALUE_STRINGS: import("../types.js").Rule;
|
|
8
|
+
export declare const DATA_COLUMNS_MUST_HAVE_A_SOURCE_COLUMN: import("../types.js").Rule;
|
|
9
|
+
export declare const ISAVAILABLEINMDX_FALSE_NONATTRIBUTE_COLUMNS: import("../types.js").Rule;
|
|
10
|
+
export declare const SET_ISAVAILABLEINMDX_TO_TRUE_ON_NECESSARY_COLUMNS: import("../types.js").Rule;
|
|
11
|
+
export declare const UNNECESSARY_COLUMNS: import("../types.js").Rule;
|
|
12
|
+
export declare const HIDE_FACT_TABLE_COLUMNS: import("../types.js").Rule;
|
|
13
|
+
export declare const columnRules: import("../types.js").Rule[];
|
|
14
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/columns.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,+BAA+B,4BAE3C,CAAC;AAEF,eAAO,MAAM,uBAAuB,4BAMnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,4BAMpC,CAAC;AAEF,eAAO,MAAM,6BAA6B,4BAWzC,CAAC;AAEF,eAAO,MAAM,gCAAgC,4BAU5C,CAAC;AAGF,eAAO,MAAM,2BAA2B,4BAQvC,CAAC;AAEF,eAAO,MAAM,2CAA2C,4BAUvD,CAAC;AAEF,eAAO,MAAM,sCAAsC,4BAGlD,CAAC;AAEF,eAAO,MAAM,2CAA2C,4BAavD,CAAC;AAEF,eAAO,MAAM,iDAAiD,4BAY7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,4BA4B9B,CAAC;AAkBH,eAAO,MAAM,uBAAuB,4BAUlC,CAAC;AAEH,eAAO,MAAM,WAAW,8BAavB,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { allColumns, allMeasures, allTablePermissions, dataType, escapeRegExp, finding, hiddenOrTableHidden, isBlank, isNumericType, } from "../helpers.js";
|
|
2
|
+
import { bpaRule } from "./define.js";
|
|
3
|
+
const columns = (m, pred) => allColumns(m).filter(pred).map(finding.column);
|
|
4
|
+
export const AVOID_FLOATING_POINT_DATA_TYPES = bpaRule("AVOID_FLOATING_POINT_DATA_TYPES", (m) => columns(m, (c) => dataType(c) === "double"));
|
|
5
|
+
export const DATECOLUMN_FORMATSTRING = bpaRule("DATECOLUMN_FORMATSTRING", (m) => columns(m, (c) => /date/i.test(c.name) && dataType(c) === "datetime" && (c.formatString ?? "") !== "mm/dd/yyyy"));
|
|
6
|
+
export const MONTHCOLUMN_FORMATSTRING = bpaRule("MONTHCOLUMN_FORMATSTRING", (m) => columns(m, (c) => /month/i.test(c.name) && dataType(c) === "datetime" && (c.formatString ?? "") !== "MMMM yyyy"));
|
|
7
|
+
export const ADD_DATA_CATEGORY_FOR_COLUMNS = bpaRule("ADD_DATA_CATEGORY_FOR_COLUMNS", (m) => columns(m, (c) => {
|
|
8
|
+
const n = c.name.toLowerCase();
|
|
9
|
+
const d = dataType(c);
|
|
10
|
+
return (isBlank(c.dataCategory) &&
|
|
11
|
+
(((n.includes("country") || n.includes("continent") || n.includes("city")) &&
|
|
12
|
+
d === "string") ||
|
|
13
|
+
((n === "latitude" || n === "longitude") && (d === "decimal" || d === "double"))));
|
|
14
|
+
}));
|
|
15
|
+
export const MONTH_AS_A_STRING_MUST_BE_SORTED = bpaRule("MONTH_(AS_A_STRING)_MUST_BE_SORTED", (m) => columns(m, (c) => {
|
|
16
|
+
const u = c.name.toUpperCase();
|
|
17
|
+
return (u.includes("MONTH") &&
|
|
18
|
+
!u.includes("MONTHS") &&
|
|
19
|
+
dataType(c) === "string" &&
|
|
20
|
+
c.sortByColumn === undefined);
|
|
21
|
+
}));
|
|
22
|
+
// TOM's default SummarizeBy is Default, which is not None, so a column without the property is flagged.
|
|
23
|
+
export const NUMERIC_COLUMN_SUMMARIZE_BY = bpaRule("NUMERIC_COLUMN_SUMMARIZE_BY", (m) => columns(m, (c) => isNumericType(c) &&
|
|
24
|
+
(c.summarizeBy ?? "default").toLowerCase() !== "none" &&
|
|
25
|
+
!hiddenOrTableHidden(c)));
|
|
26
|
+
export const FORMAT_FLAG_COLUMNS_AS_YES_NO_VALUE_STRINGS = bpaRule("FORMAT_FLAG_COLUMNS_AS_YES/NO_VALUE_STRINGS", (m) => columns(m, (c) => !hiddenOrTableHidden(c) &&
|
|
27
|
+
((c.name.startsWith("Is") && dataType(c) === "int64") ||
|
|
28
|
+
(c.name.endsWith(" Flag") && dataType(c) !== "string"))));
|
|
29
|
+
export const DATA_COLUMNS_MUST_HAVE_A_SOURCE_COLUMN = bpaRule("DATA_COLUMNS_MUST_HAVE_A_SOURCE_COLUMN", (m) => columns(m, (c) => c.kind === "data" && isBlank(c.sourceColumn)));
|
|
30
|
+
export const ISAVAILABLEINMDX_FALSE_NONATTRIBUTE_COLUMNS = bpaRule("ISAVAILABLEINMDX_FALSE_NONATTRIBUTE_COLUMNS", (m, { indexes: { usage } }) => columns(m, (c) => c.isAvailableInMdx &&
|
|
31
|
+
hiddenOrTableHidden(c) &&
|
|
32
|
+
!usage.usedInSortBy(c) &&
|
|
33
|
+
!usage.usedInHierarchies(c) &&
|
|
34
|
+
!usage.usedInVariations(c) &&
|
|
35
|
+
c.sortByColumn === undefined));
|
|
36
|
+
export const SET_ISAVAILABLEINMDX_TO_TRUE_ON_NECESSARY_COLUMNS = bpaRule("SET_ISAVAILABLEINMDX_TO_TRUE_ON_NECESSARY_COLUMNS", (m, { indexes: { usage } }) => columns(m, (c) => !c.isAvailableInMdx &&
|
|
37
|
+
(usage.usedInSortBy(c) ||
|
|
38
|
+
usage.usedInHierarchies(c) ||
|
|
39
|
+
usage.usedInVariations(c) ||
|
|
40
|
+
c.sortByColumn !== undefined)));
|
|
41
|
+
export const UNNECESSARY_COLUMNS = bpaRule("UNNECESSARY_COLUMNS", (m, { indexes }) => {
|
|
42
|
+
const permissions = allTablePermissions(m);
|
|
43
|
+
return columns(m, (c) => {
|
|
44
|
+
if (!hiddenOrTableHidden(c))
|
|
45
|
+
return false;
|
|
46
|
+
if (indexes.references.columnReferencedBy(c).length > 0)
|
|
47
|
+
return false;
|
|
48
|
+
if (indexes.relationships.forColumn(c.table.name, c.name).length > 0)
|
|
49
|
+
return false;
|
|
50
|
+
if (indexes.usage.usedInSortBy(c) || indexes.usage.usedInHierarchies(c))
|
|
51
|
+
return false;
|
|
52
|
+
// The source rule also does plain substring checks on RLS filters (case-insensitive).
|
|
53
|
+
const bare = `[${c.name}]`.toLowerCase();
|
|
54
|
+
const qualified = [
|
|
55
|
+
`${c.table.name}[${c.name}]`.toLowerCase(),
|
|
56
|
+
`'${c.table.name}'[${c.name}]`.toLowerCase(),
|
|
57
|
+
];
|
|
58
|
+
for (const tp of permissions) {
|
|
59
|
+
const f = tp.filter?.toLowerCase();
|
|
60
|
+
if (f === undefined)
|
|
61
|
+
continue;
|
|
62
|
+
if (tp.table === c.table.name && f.includes(bare))
|
|
63
|
+
return false;
|
|
64
|
+
if (qualified.some((q) => f.includes(q)))
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Object-level security on the column or its table.
|
|
68
|
+
for (const tp of permissions) {
|
|
69
|
+
if (tp.table !== c.table.name)
|
|
70
|
+
continue;
|
|
71
|
+
if (tp.metadataPermission === "none")
|
|
72
|
+
return false;
|
|
73
|
+
if (tp.columnPermissions.some((cp) => cp.column === c.name && cp.permission === "none"))
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
const AGGREGATIONS = [
|
|
80
|
+
"COUNT",
|
|
81
|
+
"COUNTBLANK",
|
|
82
|
+
"SUM",
|
|
83
|
+
"AVERAGE",
|
|
84
|
+
"VALUES",
|
|
85
|
+
"DISTINCT",
|
|
86
|
+
"DISTINCTCOUNT",
|
|
87
|
+
"MIN",
|
|
88
|
+
"MAX",
|
|
89
|
+
"COUNTA",
|
|
90
|
+
"AVERAGEA",
|
|
91
|
+
"MAXA",
|
|
92
|
+
"MINA",
|
|
93
|
+
];
|
|
94
|
+
export const HIDE_FACT_TABLE_COLUMNS = bpaRule("HIDE_FACT_TABLE_COLUMNS", (m) => {
|
|
95
|
+
const measures = allMeasures(m);
|
|
96
|
+
return columns(m, (c) => {
|
|
97
|
+
if (c.isHidden || !isNumericType(c))
|
|
98
|
+
return false;
|
|
99
|
+
const re = new RegExp(`(?:${AGGREGATIONS.join("|")})\\s*\\(\\s*'*${escapeRegExp(c.table.name)}'*\\[${escapeRegExp(c.name)}\\]\\s*\\)`, "i");
|
|
100
|
+
return measures.some((x) => re.test(x.expression));
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
export const columnRules = [
|
|
104
|
+
AVOID_FLOATING_POINT_DATA_TYPES,
|
|
105
|
+
DATECOLUMN_FORMATSTRING,
|
|
106
|
+
MONTHCOLUMN_FORMATSTRING,
|
|
107
|
+
ADD_DATA_CATEGORY_FOR_COLUMNS,
|
|
108
|
+
MONTH_AS_A_STRING_MUST_BE_SORTED,
|
|
109
|
+
NUMERIC_COLUMN_SUMMARIZE_BY,
|
|
110
|
+
FORMAT_FLAG_COLUMNS_AS_YES_NO_VALUE_STRINGS,
|
|
111
|
+
DATA_COLUMNS_MUST_HAVE_A_SOURCE_COLUMN,
|
|
112
|
+
ISAVAILABLEINMDX_FALSE_NONATTRIBUTE_COLUMNS,
|
|
113
|
+
SET_ISAVAILABLEINMDX_TO_TRUE_ON_NECESSARY_COLUMNS,
|
|
114
|
+
UNNECESSARY_COLUMNS,
|
|
115
|
+
HIDE_FACT_TABLE_COLUMNS,
|
|
116
|
+
];
|
|
117
|
+
//# sourceMappingURL=columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/columns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Model } from "../../model/types.js";
|
|
2
|
+
import type { ObjectType, Rule, RuleContext, RuleFinding } from "../types.js";
|
|
3
|
+
import { type BpaRuleMeta } from "./bpa-rules.data.js";
|
|
4
|
+
export declare function mapScope(scope: string): ObjectType[];
|
|
5
|
+
export declare const metaOf: (id: string) => BpaRuleMeta;
|
|
6
|
+
/**
|
|
7
|
+
* A literal port of one Microsoft BPA rule: metadata from the ruleset, behavior from `check`.
|
|
8
|
+
* The description is pbiplint's own summary from the rule page, never the ruleset's text; the
|
|
9
|
+
* ruleset description is read only for the reference URLs it carries.
|
|
10
|
+
*/
|
|
11
|
+
export declare function bpaRule(id: string, check: (model: Model, ctx: RuleContext) => RuleFinding[]): Rule;
|
|
12
|
+
/** A rule that needs VertiPaq statistics: declared so it can be listed, never run. */
|
|
13
|
+
export declare function liveModelRule(id: string): Rule;
|
|
14
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAY,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AAElG,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA4BlE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAWpD;AAED,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,KAAG,WAInC,CAAC;AAQF;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,KAAK,WAAW,EAAE,GACvD,IAAI,CAcN;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE9C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { RULE_SUMMARIES } from "../rule-summaries.data.js";
|
|
2
|
+
import { BPA_RULES } from "./bpa-rules.data.js";
|
|
3
|
+
const byId = new Map(BPA_RULES.map((r) => [r.id, r]));
|
|
4
|
+
/** Microsoft scope name to pbiplint object type. KPI is not modeled in v1 and maps to nothing. */
|
|
5
|
+
const SCOPE_MAP = {
|
|
6
|
+
Model: "Model",
|
|
7
|
+
Table: "Table",
|
|
8
|
+
CalculatedTable: "CalculatedTable",
|
|
9
|
+
CalculationGroup: "CalculationGroupTable",
|
|
10
|
+
DataColumn: "Column",
|
|
11
|
+
CalculatedColumn: "CalculatedColumn",
|
|
12
|
+
CalculatedTableColumn: "CalculatedTableColumn",
|
|
13
|
+
Measure: "Measure",
|
|
14
|
+
Partition: "Partition",
|
|
15
|
+
Relationship: "Relationship",
|
|
16
|
+
ModelRole: "Role",
|
|
17
|
+
TablePermission: "TablePermission",
|
|
18
|
+
Perspective: "Perspective",
|
|
19
|
+
Hierarchy: "Hierarchy",
|
|
20
|
+
Level: "Level",
|
|
21
|
+
CalculationItem: "CalculationItem",
|
|
22
|
+
NamedExpression: "NamedExpression",
|
|
23
|
+
ProviderDataSource: "DataSource",
|
|
24
|
+
StructuredDataSource: "DataSource",
|
|
25
|
+
KPI: null,
|
|
26
|
+
};
|
|
27
|
+
export function mapScope(scope) {
|
|
28
|
+
const out = [];
|
|
29
|
+
for (const s of scope
|
|
30
|
+
.split(",")
|
|
31
|
+
.map((x) => x.trim())
|
|
32
|
+
.filter((x) => x.length > 0)) {
|
|
33
|
+
if (!(s in SCOPE_MAP))
|
|
34
|
+
throw new Error(`Unknown BPA scope: ${s}`);
|
|
35
|
+
const t = SCOPE_MAP[s];
|
|
36
|
+
if (t && !out.includes(t))
|
|
37
|
+
out.push(t);
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
export const metaOf = (id) => {
|
|
42
|
+
const meta = byId.get(id);
|
|
43
|
+
if (!meta)
|
|
44
|
+
throw new Error(`Unknown BPA rule id: ${id}`);
|
|
45
|
+
return meta;
|
|
46
|
+
};
|
|
47
|
+
const stripCategory = (name) => name.replace(/^\[[^\]]*\]\s*/, "");
|
|
48
|
+
const extractUrls = (text) => [
|
|
49
|
+
...new Set((text.match(/https?:\/\/[^\s)"]+/g) ?? []).map((u) => u.replace(/[.,]$/, ""))),
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* A literal port of one Microsoft BPA rule: metadata from the ruleset, behavior from `check`.
|
|
53
|
+
* The description is pbiplint's own summary from the rule page, never the ruleset's text; the
|
|
54
|
+
* ruleset description is read only for the reference URLs it carries.
|
|
55
|
+
*/
|
|
56
|
+
export function bpaRule(id, check) {
|
|
57
|
+
const meta = metaOf(id);
|
|
58
|
+
return {
|
|
59
|
+
id,
|
|
60
|
+
name: stripCategory(meta.name),
|
|
61
|
+
category: meta.category,
|
|
62
|
+
severity: meta.severity,
|
|
63
|
+
scope: mapScope(meta.scope),
|
|
64
|
+
description: RULE_SUMMARIES[id] ?? stripCategory(meta.name),
|
|
65
|
+
fixExpression: meta.fixExpression,
|
|
66
|
+
references: extractUrls(meta.description),
|
|
67
|
+
status: "ported",
|
|
68
|
+
check,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** A rule that needs VertiPaq statistics: declared so it can be listed, never run. */
|
|
72
|
+
export function liveModelRule(id) {
|
|
73
|
+
return { ...bpaRule(id, () => []), status: "needsLiveModel" };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RefOwner } from "../../index/references.js";
|
|
2
|
+
import type { RuleFinding } from "../types.js";
|
|
3
|
+
/** The finding shell for whichever object owns a DAX expression. */
|
|
4
|
+
export declare function ownerFinding(o: RefOwner): RuleFinding;
|
|
5
|
+
export declare const DAX_COLUMNS_FULLY_QUALIFIED: import("../types.js").Rule;
|
|
6
|
+
export declare const DAX_MEASURES_UNQUALIFIED: import("../types.js").Rule;
|
|
7
|
+
export declare const AVOID_DUPLICATE_MEASURES: import("../types.js").Rule;
|
|
8
|
+
export declare const MEASURES_SHOULD_NOT_BE_DIRECT_REFERENCES_OF_OTHER_MEASURES: import("../types.js").Rule;
|
|
9
|
+
export declare const UNNECESSARY_MEASURES: import("../types.js").Rule;
|
|
10
|
+
export declare const dependencyRules: import("../types.js").Rule[];
|
|
11
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAU1D,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,aAAa,CAAC;AAG5D,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAarD;AAID,eAAO,MAAM,2BAA2B,4BAUvC,CAAC;AAGF,eAAO,MAAM,wBAAwB,4BASpC,CAAC;AAIF,eAAO,MAAM,wBAAwB,4BAUnC,CAAC;AAEH,eAAO,MAAM,0DAA0D,4BAOtE,CAAC;AAEF,eAAO,MAAM,oBAAoB,4BAQhC,CAAC;AAEF,eAAO,MAAM,eAAe,8BAM3B,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { measureRef } from "../../model/names.js";
|
|
2
|
+
import { allMeasures, finding } from "../helpers.js";
|
|
3
|
+
import { bpaRule } from "./define.js";
|
|
4
|
+
/** The finding shell for whichever object owns a DAX expression. */
|
|
5
|
+
export function ownerFinding(o) {
|
|
6
|
+
switch (o.kind) {
|
|
7
|
+
case "measure":
|
|
8
|
+
return finding.measure(o.object);
|
|
9
|
+
case "calculatedColumn":
|
|
10
|
+
return finding.column(o.object);
|
|
11
|
+
case "calculatedTable":
|
|
12
|
+
return finding.table(o.object);
|
|
13
|
+
case "tablePermission":
|
|
14
|
+
return finding.tablePermission(o.object);
|
|
15
|
+
case "calculationItem":
|
|
16
|
+
return finding.calculationItem(o.object);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Scope: Measure, KPI, TablePermission, CalculationItem. KPIs are not modeled in v1. Calculation items
|
|
20
|
+
// never resolve bare references to columns (ground-truth item 3), so they never fire here.
|
|
21
|
+
export const DAX_COLUMNS_FULLY_QUALIFIED = bpaRule("DAX_COLUMNS_FULLY_QUALIFIED", (_m, { indexes: { references } }) => references.owners
|
|
22
|
+
.filter((o) => (o.kind === "measure" || o.kind === "tablePermission" || o.kind === "calculationItem") &&
|
|
23
|
+
o.refs.some((r) => r.kind === "column" && !r.qualified))
|
|
24
|
+
.map(ownerFinding));
|
|
25
|
+
// Scope: Measure, CalculatedColumn, CalculatedTable, KPI, CalculationItem.
|
|
26
|
+
export const DAX_MEASURES_UNQUALIFIED = bpaRule("DAX_MEASURES_UNQUALIFIED", (_m, { indexes: { references } }) => references.owners
|
|
27
|
+
.filter((o) => o.kind !== "tablePermission" && o.refs.some((r) => r.kind === "measure" && r.qualified))
|
|
28
|
+
.map(ownerFinding));
|
|
29
|
+
const stripWhitespace = (s) => s.replace(/[ \n\r\t]/g, "");
|
|
30
|
+
export const AVOID_DUPLICATE_MEASURES = bpaRule("AVOID_DUPLICATE_MEASURES", (m) => {
|
|
31
|
+
const all = allMeasures(m);
|
|
32
|
+
const counts = new Map();
|
|
33
|
+
for (const x of all) {
|
|
34
|
+
const k = stripWhitespace(x.expression);
|
|
35
|
+
counts.set(k, (counts.get(k) ?? 0) + 1);
|
|
36
|
+
}
|
|
37
|
+
return all
|
|
38
|
+
.filter((x) => (counts.get(stripWhitespace(x.expression)) ?? 0) > 1)
|
|
39
|
+
.map(finding.measure);
|
|
40
|
+
});
|
|
41
|
+
export const MEASURES_SHOULD_NOT_BE_DIRECT_REFERENCES_OF_OTHER_MEASURES = bpaRule("MEASURES_SHOULD_NOT_BE_DIRECT_REFERENCES_OF_OTHER_MEASURES", (m) => {
|
|
42
|
+
const all = allMeasures(m);
|
|
43
|
+
const names = new Set(all.map((x) => measureRef(x.name)));
|
|
44
|
+
return all.filter((x) => names.has(x.expression)).map(finding.measure);
|
|
45
|
+
});
|
|
46
|
+
export const UNNECESSARY_MEASURES = bpaRule("UNNECESSARY_MEASURES", (m, { indexes: { references } }) => allMeasures(m)
|
|
47
|
+
.filter((x) => (x.table.isHidden || x.isHidden) && references.measureReferencedBy(x).length === 0)
|
|
48
|
+
.map(finding.measure));
|
|
49
|
+
export const dependencyRules = [
|
|
50
|
+
DAX_COLUMNS_FULLY_QUALIFIED,
|
|
51
|
+
DAX_MEASURES_UNQUALIFIED,
|
|
52
|
+
AVOID_DUPLICATE_MEASURES,
|
|
53
|
+
MEASURES_SHOULD_NOT_BE_DIRECT_REFERENCES_OF_OTHER_MEASURES,
|
|
54
|
+
UNNECESSARY_MEASURES,
|
|
55
|
+
];
|
|
56
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAYxC,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,IAAI,EAQiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BPA_RULES } from "./bpa-rules.data.js";
|
|
2
|
+
import { columnRules } from "./columns.js";
|
|
3
|
+
import { dependencyRules } from "./dependencies.js";
|
|
4
|
+
import { liveModelRules } from "./live-model.js";
|
|
5
|
+
import { measureRules } from "./measures.js";
|
|
6
|
+
import { namingRules } from "./naming.js";
|
|
7
|
+
import { relationshipRules } from "./relationships.js";
|
|
8
|
+
import { tableRules } from "./tables.js";
|
|
9
|
+
const order = new Map(BPA_RULES.map((r, i) => [r.id, i]));
|
|
10
|
+
/** The microsoft-bpa pack: every rule in BPARules.json, in ruleset order. */
|
|
11
|
+
export const microsoftBpaRules = [
|
|
12
|
+
...columnRules,
|
|
13
|
+
...relationshipRules,
|
|
14
|
+
...measureRules,
|
|
15
|
+
...dependencyRules,
|
|
16
|
+
...tableRules,
|
|
17
|
+
...namingRules,
|
|
18
|
+
...liveModelRules,
|
|
19
|
+
].sort((a, b) => order.get(a.id) - order.get(b.id));
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAW;IACvC,GAAG,WAAW;IACd,GAAG,iBAAiB;IACpB,GAAG,YAAY;IACf,GAAG,eAAe;IAClB,GAAG,UAAU;IACb,GAAG,WAAW;IACd,GAAG,cAAc;CAClB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-model.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/live-model.ts"],"names":[],"mappings":"AAEA,oHAAoH;AACpH,eAAO,MAAM,cAAc,8BAM1B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { liveModelRule } from "./define.js";
|
|
2
|
+
/** Rules that read VertiPaq statistics stored as annotations by a Tabular Editor script. Files never carry them. */
|
|
3
|
+
export const liveModelRules = [
|
|
4
|
+
liveModelRule("AVOID_BI-DIRECTIONAL_RELATIONSHIPS_AGAINST_HIGH-CARDINALITY_COLUMNS"),
|
|
5
|
+
liveModelRule("REDUCE_USAGE_OF_LONG-LENGTH_COLUMNS_WITH_HIGH_CARDINALITY"),
|
|
6
|
+
liveModelRule("SPLIT_DATE_AND_TIME"),
|
|
7
|
+
liveModelRule("LARGE_TABLES_SHOULD_BE_PARTITIONED"),
|
|
8
|
+
liveModelRule("FIX_REFERENTIAL_INTEGRITY_VIOLATIONS"),
|
|
9
|
+
];
|
|
10
|
+
//# sourceMappingURL=live-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-model.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/live-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,oHAAoH;AACpH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa,CAAC,qEAAqE,CAAC;IACpF,aAAa,CAAC,2DAA2D,CAAC;IAC1E,aAAa,CAAC,qBAAqB,CAAC;IACpC,aAAa,CAAC,oCAAoC,CAAC;IACnD,aAAa,CAAC,sCAAsC,CAAC;CACtD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Rule } from "../types.js";
|
|
2
|
+
export declare const PROVIDE_FORMAT_STRING_FOR_MEASURES: Rule;
|
|
3
|
+
export declare const INTEGER_FORMATTING: Rule;
|
|
4
|
+
export declare const PERCENTAGE_FORMATTING: Rule;
|
|
5
|
+
export declare const USE_THE_DIVIDE_FUNCTION_FOR_DIVISION: Rule;
|
|
6
|
+
export declare const AVOID_USING_THE_IFERROR_FUNCTION: Rule;
|
|
7
|
+
export declare const USE_THE_TREATAS_FUNCTION_INSTEAD_OF_INTERSECT: Rule;
|
|
8
|
+
export declare const FILTER_COLUMN_VALUES: Rule;
|
|
9
|
+
export declare const FILTER_MEASURE_VALUES_BY_COLUMNS: Rule;
|
|
10
|
+
export declare const AVOID_USING_1_X_Y_SYNTAX: Rule;
|
|
11
|
+
export declare const EVALUATEANDLOG_SHOULD_NOT_BE_USED_IN_PRODUCTION_MODELS: Rule;
|
|
12
|
+
export declare const REDUCE_USAGE_OF_CALCULATED_COLUMNS_THAT_USE_THE_RELATED_FUNCTION: Rule;
|
|
13
|
+
export declare const EXPRESSION_RELIANT_OBJECTS_MUST_HAVE_AN_EXPRESSION: Rule;
|
|
14
|
+
export declare const measureRules: Rule[];
|
|
15
|
+
//# sourceMappingURL=measures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measures.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/measures.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAexC,eAAO,MAAM,kCAAkC,MAY9C,CAAC;AAUF,eAAO,MAAM,kBAAkB,MAO9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,MAMjC,CAAC;AAEF,eAAO,MAAM,oCAAoC,MAIhD,CAAC;AAEF,eAAO,MAAM,gCAAgC,MAI5C,CAAC;AAEF,eAAO,MAAM,6CAA6C,MAIzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,MAOhC,CAAC;AAEF,eAAO,MAAM,gCAAgC,MAO5C,CAAC;AAEF,eAAO,MAAM,wBAAwB,MAOpC,CAAC;AAEF,eAAO,MAAM,sDAAsD,MAIlE,CAAC;AAEF,eAAO,MAAM,gEAAgE,MAI5E,CAAC;AAIF,eAAO,MAAM,kDAAkD,MAM9D,CAAC;AAEF,eAAO,MAAM,YAAY,QAaxB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { allMeasures, expressionObjects, finding, isBlank, } from "../helpers.js";
|
|
2
|
+
import { bpaRule } from "./define.js";
|
|
3
|
+
const M = "measure";
|
|
4
|
+
const CC = "calculatedColumn";
|
|
5
|
+
const CI = "calculationItem";
|
|
6
|
+
/** A rule that flags every object in `kinds` whose expression matches any pattern. */
|
|
7
|
+
const patternRule = (id, kinds, patterns) => bpaRule(id, (m) => expressionObjects(m, kinds)
|
|
8
|
+
.filter((o) => patterns.some((p) => p.test(o.expression)))
|
|
9
|
+
.map((o) => o.finding));
|
|
10
|
+
export const PROVIDE_FORMAT_STRING_FOR_MEASURES = bpaRule("PROVIDE_FORMAT_STRING_FOR_MEASURES", (m) => allMeasures(m)
|
|
11
|
+
.filter((x) => !x.isHidden &&
|
|
12
|
+
!x.table.isHidden &&
|
|
13
|
+
isBlank(x.formatString) &&
|
|
14
|
+
isBlank(x.formatStringDefinition))
|
|
15
|
+
.map(finding.measure));
|
|
16
|
+
// The source rule reads only the static format string, so an unformatted currency or percentage
|
|
17
|
+
// measure fires under a name that calls it a whole number. The detail says what the rule saw.
|
|
18
|
+
const formatStringDetail = (x) => {
|
|
19
|
+
const fs = x.formatString ?? "";
|
|
20
|
+
if (fs.trim() !== "")
|
|
21
|
+
return `format string "${fs}"`;
|
|
22
|
+
return isBlank(x.formatStringDefinition) ? "no format string" : "dynamic format string only";
|
|
23
|
+
};
|
|
24
|
+
export const INTEGER_FORMATTING = bpaRule("INTEGER_FORMATTING", (m) => allMeasures(m)
|
|
25
|
+
.filter((x) => {
|
|
26
|
+
const fs = x.formatString ?? "";
|
|
27
|
+
return !fs.includes("$") && !fs.includes("%") && !(fs === "#,0" || fs === "#,0.0");
|
|
28
|
+
})
|
|
29
|
+
.map((x) => ({ ...finding.measure(x), detail: formatStringDetail(x) })));
|
|
30
|
+
export const PERCENTAGE_FORMATTING = bpaRule("PERCENTAGE_FORMATTING", (m) => allMeasures(m)
|
|
31
|
+
.filter((x) => (x.formatString ?? "").includes("%") && x.formatString !== "#,0.0%;-#,0.0%;#,0.0%")
|
|
32
|
+
.map(finding.measure));
|
|
33
|
+
export const USE_THE_DIVIDE_FUNCTION_FOR_DIVISION = patternRule("USE_THE_DIVIDE_FUNCTION_FOR_DIVISION", [M, CC, CI], [/\]\s*\/(?!\/)(?!\*)/, /\)\s*\/(?!\/)(?!\*)/]);
|
|
34
|
+
export const AVOID_USING_THE_IFERROR_FUNCTION = patternRule("AVOID_USING_THE_IFERROR_FUNCTION", [M, CC], [/IFERROR\s*\(/i]);
|
|
35
|
+
export const USE_THE_TREATAS_FUNCTION_INSTEAD_OF_INTERSECT = patternRule("USE_THE_TREATAS_FUNCTION_INSTEAD_OF_INTERSECT", [M, CI], [/INTERSECT\s*\(/i]);
|
|
36
|
+
export const FILTER_COLUMN_VALUES = patternRule("FILTER_COLUMN_VALUES", [M, CC, CI], [
|
|
37
|
+
/CALCULATE\s*\(\s*[^,]+,\s*FILTER\s*\(\s*'*[A-Za-z0-9 _]+'*\s*,\s*'*[A-Za-z0-9 _]+'*\[[A-Za-z0-9 _]+\]/i,
|
|
38
|
+
/CALCULATETABLE\s*\([^,]*,\s*FILTER\s*\(\s*'*[A-Za-z0-9 _]+'*,\s*'*[A-Za-z0-9 _]+'*\[[A-Za-z0-9 _]+\]/i,
|
|
39
|
+
]);
|
|
40
|
+
export const FILTER_MEASURE_VALUES_BY_COLUMNS = patternRule("FILTER_MEASURE_VALUES_BY_COLUMNS", [M, CC, CI], [
|
|
41
|
+
/CALCULATE\s*\(\s*[^,]+,\s*FILTER\s*\(\s*'*[A-Za-z0-9 _]+'*\s*,\s*\[[^\]]+\]/i,
|
|
42
|
+
/CALCULATETABLE\s*\([^,]*,\s*FILTER\s*\(\s*'*[A-Za-z0-9 _]+'*,\s*\[/i,
|
|
43
|
+
]);
|
|
44
|
+
export const AVOID_USING_1_X_Y_SYNTAX = patternRule("AVOID_USING_'1-(X/Y)'_SYNTAX", [M, CC, CI], [
|
|
45
|
+
/[0-9]+\s*[-+]\s*[(]*\s*SUM\s*\(\s*'*[A-Za-z0-9 _]+'*\s*\[[A-Za-z0-9 _]+\]\s*\)\s*\//i,
|
|
46
|
+
/[0-9]+\s*[-+]\s*DIVIDE\s*\(/i,
|
|
47
|
+
]);
|
|
48
|
+
export const EVALUATEANDLOG_SHOULD_NOT_BE_USED_IN_PRODUCTION_MODELS = patternRule("EVALUATEANDLOG_SHOULD_NOT_BE_USED_IN_PRODUCTION_MODELS", [M], [/EVALUATEANDLOG\s*\(/i]);
|
|
49
|
+
export const REDUCE_USAGE_OF_CALCULATED_COLUMNS_THAT_USE_THE_RELATED_FUNCTION = patternRule("REDUCE_USAGE_OF_CALCULATED_COLUMNS_THAT_USE_THE_RELATED_FUNCTION", [CC], [/RELATED\s*\(/i]);
|
|
50
|
+
// The TMDL reader never yields an empty expression (the next indented line becomes the expression),
|
|
51
|
+
// so this rule can only fire on models built some other way. It is kept for completeness.
|
|
52
|
+
export const EXPRESSION_RELIANT_OBJECTS_MUST_HAVE_AN_EXPRESSION = bpaRule("EXPRESSION_RELIANT_OBJECTS_MUST_HAVE_AN_EXPRESSION", (m) => expressionObjects(m, [M, CC, CI])
|
|
53
|
+
.filter((o) => isBlank(o.expression))
|
|
54
|
+
.map((o) => o.finding));
|
|
55
|
+
export const measureRules = [
|
|
56
|
+
PROVIDE_FORMAT_STRING_FOR_MEASURES,
|
|
57
|
+
INTEGER_FORMATTING,
|
|
58
|
+
PERCENTAGE_FORMATTING,
|
|
59
|
+
USE_THE_DIVIDE_FUNCTION_FOR_DIVISION,
|
|
60
|
+
AVOID_USING_THE_IFERROR_FUNCTION,
|
|
61
|
+
USE_THE_TREATAS_FUNCTION_INSTEAD_OF_INTERSECT,
|
|
62
|
+
FILTER_COLUMN_VALUES,
|
|
63
|
+
FILTER_MEASURE_VALUES_BY_COLUMNS,
|
|
64
|
+
AVOID_USING_1_X_Y_SYNTAX,
|
|
65
|
+
EVALUATEANDLOG_SHOULD_NOT_BE_USED_IN_PRODUCTION_MODELS,
|
|
66
|
+
REDUCE_USAGE_OF_CALCULATED_COLUMNS_THAT_USE_THE_RELATED_FUNCTION,
|
|
67
|
+
EXPRESSION_RELIANT_OBJECTS_MUST_HAVE_AN_EXPRESSION,
|
|
68
|
+
];
|
|
69
|
+
//# sourceMappingURL=measures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measures.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/measures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,OAAO,GAER,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,GAAmB,SAAS,CAAC;AACpC,MAAM,EAAE,GAAmB,kBAAkB,CAAC;AAC9C,MAAM,EAAE,GAAmB,iBAAiB,CAAC;AAE7C,sFAAsF;AACtF,MAAM,WAAW,GAAG,CAAC,EAAU,EAAE,KAAuB,EAAE,QAAkB,EAAQ,EAAE,CACpF,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAChB,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC;KACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;KACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACzB,CAAC;AAEJ,MAAM,CAAC,MAAM,kCAAkC,GAAG,OAAO,CACvD,oCAAoC,EACpC,CAAC,CAAC,EAAE,EAAE,CACJ,WAAW,CAAC,CAAC,CAAC;KACX,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,QAAQ;IACX,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;IACjB,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;IACvB,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CACpC;KACA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAC1B,CAAC;AAEF,gGAAgG;AAChG,8FAA8F;AAC9F,MAAM,kBAAkB,GAAG,CAAC,CAAU,EAAU,EAAE;IAChD,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;IAChC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,kBAAkB,EAAE,GAAG,CAAC;IACrD,OAAO,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpE,WAAW,CAAC,CAAC,CAAC;KACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;IACZ,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC;AACrF,CAAC,CAAC;KACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC1E,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC1E,WAAW,CAAC,CAAC,CAAC;KACX,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,uBAAuB,CAC1F;KACA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,WAAW,CAC7D,sCAAsC,EACtC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EACX,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,CACzD,kCAAkC,EAClC,CAAC,CAAC,EAAE,EAAE,CAAC,EACP,CAAC,eAAe,CAAC,CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,6CAA6C,GAAG,WAAW,CACtE,+CAA+C,EAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,EACP,CAAC,iBAAiB,CAAC,CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAC7C,sBAAsB,EACtB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EACX;IACE,wGAAwG;IACxG,uGAAuG;CACxG,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,CACzD,kCAAkC,EAClC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EACX;IACE,8EAA8E;IAC9E,qEAAqE;CACtE,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CACjD,8BAA8B,EAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EACX;IACE,sFAAsF;IACtF,8BAA8B;CAC/B,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sDAAsD,GAAG,WAAW,CAC/E,wDAAwD,EACxD,CAAC,CAAC,CAAC,EACH,CAAC,sBAAsB,CAAC,CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,gEAAgE,GAAG,WAAW,CACzF,kEAAkE,EAClE,CAAC,EAAE,CAAC,EACJ,CAAC,eAAe,CAAC,CAClB,CAAC;AAEF,oGAAoG;AACpG,0FAA0F;AAC1F,MAAM,CAAC,MAAM,kDAAkD,GAAG,OAAO,CACvE,oDAAoD,EACpD,CAAC,CAAC,EAAE,EAAE,CACJ,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;KAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;KACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kCAAkC;IAClC,kBAAkB;IAClB,qBAAqB;IACrB,oCAAoC;IACpC,gCAAgC;IAChC,6CAA6C;IAC7C,oBAAoB;IACpB,gCAAgC;IAChC,wBAAwB;IACxB,sDAAsD;IACtD,gEAAgE;IAChE,kDAAkD;CACnD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Rule } from "../types.js";
|
|
2
|
+
export declare const TRIM_OBJECT_NAMES: Rule;
|
|
3
|
+
export declare const OBJECTS_SHOULD_NOT_START_OR_END_WITH_A_SPACE: Rule;
|
|
4
|
+
export declare const SPECIAL_CHARS_IN_OBJECT_NAMES: Rule;
|
|
5
|
+
export declare const AVOID_INVALID_NAME_CHARACTERS: Rule;
|
|
6
|
+
export declare const AVOID_INVALID_DESCRIPTION_CHARACTERS: Rule;
|
|
7
|
+
export declare const FIRST_LETTER_OF_OBJECTS_MUST_BE_CAPITALIZED: Rule;
|
|
8
|
+
export declare const PERSPECTIVES_WITH_NO_OBJECTS: Rule;
|
|
9
|
+
export declare const CALCULATION_GROUPS_WITH_NO_CALCULATION_ITEMS: Rule;
|
|
10
|
+
export declare const REMOVE_ROLES_WITH_NO_MEMBERS: Rule;
|
|
11
|
+
export declare const REMOVE_DATA_SOURCES_NOT_REFERENCED_BY_ANY_PARTITIONS: Rule;
|
|
12
|
+
export declare const AVOID_STRUCTURED_DATA_SOURCES_WITH_PROVIDER_PARTITIONS: Rule;
|
|
13
|
+
export declare const namingRules: Rule[];
|
|
14
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/naming.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAgBxC,eAAO,MAAM,iBAAiB,MAA8D,CAAC;AAE7F,eAAO,MAAM,4CAA4C,MAGxD,CAAC;AAEF,eAAO,MAAM,6BAA6B,MAGzC,CAAC;AAMF,eAAO,MAAM,6BAA6B,MAGzC,CAAC;AAEF,eAAO,MAAM,oCAAoC,MAGhD,CAAC;AAEF,eAAO,MAAM,2CAA2C,MAGvD,CAAC;AAEF,eAAO,MAAM,4BAA4B,MAExC,CAAC;AAEF,eAAO,MAAM,4CAA4C,MAMxD,CAAC;AAEF,eAAO,MAAM,4BAA4B,MAExC,CAAC;AAGF,eAAO,MAAM,oDAAoD,MAYhE,CAAC;AAEF,eAAO,MAAM,sDAAsD,MAUlE,CAAC;AAEF,eAAO,MAAM,WAAW,QAYvB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { allPartitions, finding, namedObjects } from "../helpers.js";
|
|
2
|
+
import { bpaRule, mapScope, metaOf } from "./define.js";
|
|
3
|
+
/** A rule over every object in the rule's own scope, testing name and description. */
|
|
4
|
+
const namedObjectRule = (id, test) => bpaRule(id, (m) => namedObjects(m, mapScope(metaOf(id).scope))
|
|
5
|
+
.filter((o) => test(o.name, o.description))
|
|
6
|
+
.map((o) => o.finding));
|
|
7
|
+
const startsOrEndsWithSpace = (name) => name.startsWith(" ") || name.endsWith(" ");
|
|
8
|
+
export const TRIM_OBJECT_NAMES = namedObjectRule("TRIM_OBJECT_NAMES", startsOrEndsWithSpace);
|
|
9
|
+
export const OBJECTS_SHOULD_NOT_START_OR_END_WITH_A_SPACE = namedObjectRule("OBJECTS_SHOULD_NOT_START_OR_END_WITH_A_SPACE", startsOrEndsWithSpace);
|
|
10
|
+
export const SPECIAL_CHARS_IN_OBJECT_NAMES = namedObjectRule("SPECIAL_CHARS_IN_OBJECT_NAMES", (name) => /[\t\n\r]/.test(name));
|
|
11
|
+
// .NET char.IsControl minus char.IsWhiteSpace: U+0000..U+001F and U+007F..U+009F, except U+0009..U+000D and U+0085.
|
|
12
|
+
// eslint-disable-next-line no-control-regex -- matching control characters is the whole point of these two rules
|
|
13
|
+
const CONTROL_NOT_WHITESPACE = /[\x00-\x08\x0E-\x1F\x7F-\x84\x86-\x9F]/;
|
|
14
|
+
export const AVOID_INVALID_NAME_CHARACTERS = namedObjectRule("AVOID_INVALID_NAME_CHARACTERS", (name) => CONTROL_NOT_WHITESPACE.test(name));
|
|
15
|
+
export const AVOID_INVALID_DESCRIPTION_CHARACTERS = namedObjectRule("AVOID_INVALID_DESCRIPTION_CHARACTERS", (_name, description) => CONTROL_NOT_WHITESPACE.test(description ?? ""));
|
|
16
|
+
export const FIRST_LETTER_OF_OBJECTS_MUST_BE_CAPITALIZED = namedObjectRule("FIRST_LETTER_OF_OBJECTS_MUST_BE_CAPITALIZED", (name) => name.length > 0 && name.slice(0, 1).toUpperCase() !== name.slice(0, 1));
|
|
17
|
+
export const PERSPECTIVES_WITH_NO_OBJECTS = bpaRule("PERSPECTIVES_WITH_NO_OBJECTS", (m) => m.perspectives.filter((p) => p.tables.length === 0).map(finding.perspective));
|
|
18
|
+
export const CALCULATION_GROUPS_WITH_NO_CALCULATION_ITEMS = bpaRule("CALCULATION_GROUPS_WITH_NO_CALCULATION_ITEMS", (m) => m.tables
|
|
19
|
+
.filter((t) => t.calculationGroup !== undefined && t.calculationGroup.items.length === 0)
|
|
20
|
+
.map(finding.table));
|
|
21
|
+
export const REMOVE_ROLES_WITH_NO_MEMBERS = bpaRule("REMOVE_ROLES_WITH_NO_MEMBERS", (m) => m.roles.filter((r) => r.members.length === 0).map(finding.role));
|
|
22
|
+
// Table.SourceExpression in the source is approximated by every partition's query or M text.
|
|
23
|
+
export const REMOVE_DATA_SOURCES_NOT_REFERENCED_BY_ANY_PARTITIONS = bpaRule("REMOVE_DATA_SOURCES_NOT_REFERENCED_BY_ANY_PARTITIONS", (m) => {
|
|
24
|
+
const partitions = allPartitions(m);
|
|
25
|
+
return m.dataSources
|
|
26
|
+
.filter((ds) => !partitions.some((p) => p.dataSource === ds.name) &&
|
|
27
|
+
!partitions.some((p) => (p.source ?? "").includes(ds.name)))
|
|
28
|
+
.map(finding.dataSource);
|
|
29
|
+
});
|
|
30
|
+
export const AVOID_STRUCTURED_DATA_SOURCES_WITH_PROVIDER_PARTITIONS = bpaRule("AVOID_STRUCTURED_DATA_SOURCES_WITH_PROVIDER_PARTITIONS", (m) => allPartitions(m)
|
|
31
|
+
.filter((p) => p.sourceType === "query" &&
|
|
32
|
+
m.dataSources.some((ds) => ds.name === p.dataSource && ds.kind === "structured"))
|
|
33
|
+
.map(finding.partition));
|
|
34
|
+
export const namingRules = [
|
|
35
|
+
TRIM_OBJECT_NAMES,
|
|
36
|
+
OBJECTS_SHOULD_NOT_START_OR_END_WITH_A_SPACE,
|
|
37
|
+
SPECIAL_CHARS_IN_OBJECT_NAMES,
|
|
38
|
+
AVOID_INVALID_NAME_CHARACTERS,
|
|
39
|
+
AVOID_INVALID_DESCRIPTION_CHARACTERS,
|
|
40
|
+
FIRST_LETTER_OF_OBJECTS_MUST_BE_CAPITALIZED,
|
|
41
|
+
PERSPECTIVES_WITH_NO_OBJECTS,
|
|
42
|
+
CALCULATION_GROUPS_WITH_NO_CALCULATION_ITEMS,
|
|
43
|
+
REMOVE_ROLES_WITH_NO_MEMBERS,
|
|
44
|
+
REMOVE_DATA_SOURCES_NOT_REFERENCED_BY_ANY_PARTITIONS,
|
|
45
|
+
AVOID_STRUCTURED_DATA_SOURCES_WITH_PROVIDER_PARTITIONS,
|
|
46
|
+
];
|
|
47
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/rules/microsoft-bpa/naming.ts"],"names":[],"mappings":"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"}
|