powerbi-visuals-tools 5.4.2 → 5.4.3

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/Changelog.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This page contains information about changes to the PowerBI Visual Tools (pbiviz).
4
4
 
5
+ ## 5.4.3
6
+ * Fixed bug with missing plugins for Eslint.
7
+ * New flag `--use-default` for `pbiviz package` and `pbiviz lint` commands. Use this command to lint files according to recommended lint config.
8
+
5
9
  ## 5.4.2
6
10
  * Added the **node: false** option to the webpack plugin to eliminate the use of the potentially dangerous **new Function()** method, which ensures compatibility with the Node.js runtime.
7
11
  * Introduced support for *.mjs ECMAScript modules.
package/bin/pbiviz.js CHANGED
@@ -72,6 +72,7 @@ pbiviz
72
72
  pbiviz
73
73
  .command('lint')
74
74
  .option('--fix', 'Enable autofixing of lint errors')
75
+ .option('--use-default', 'Use recommended eslintrc file')
75
76
  .action(options => {
76
77
  CommandManager.lint({ ...options, verbose: true }, rootPath);
77
78
  });
@@ -100,6 +101,7 @@ pbiviz
100
101
  .option('-l, --all-locales', "Keeps all locale files in the package. By default only used inside stringResources folder locales are included.")
101
102
  .option('-v, --verbose', "Enables verbose logging")
102
103
  .option('--fix', 'Enable autofixing of lint errors')
104
+ .option('--use-default', 'Use recommended eslintrc file')
103
105
  .option('-p, --pbiviz-file <pbiviz-file>', "Path to pbiviz.json file (useful for debugging)", pbivizFile)
104
106
  .addOption(new Option('-c, --compression <compressionLevel>', "Enables compression of visual package")
105
107
  .choices(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
@@ -1,28 +1,28 @@
1
1
  -----BEGIN PRIVATE KEY-----
2
- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCogcnCQF7icDMN
3
- Ot76I0U7W33z/d4kDirk525CT+uehSAEFqoNuz6fOXIsjDIz4nYrXusmcX2w3XTt
4
- SJr9vxvia437lE6wiNUUTmD8j2Xin3pjPa3j203suQQ+WZnbomidBDDgPTuEnqtY
5
- v/BDnT6i0DBtFu22CRDgdUK/zJRW6pJ1jikHDMJeEplaZXMYVTC3ZvyZXPQfvWzV
6
- EoIh4root7GyWOEPUuhZf2BfS2hP7ELTBG+EMFw5j7grO1uiNVy68pSMPTSv92Hn
7
- QmlGARlVsXlpCwyjHbmGU6UkHiP+LeMIKnSPIzbaHFz1TXBp93Tel/YyglSGx7UD
8
- eZr8Su4NAgMBAAECggEAAKfMluaifGyTctVebxqDlza7icPKHKLK5qLm9/d+nn7h
9
- W6T/yDMtea6nc69WfvC+N1xCO3qM0q+os2vgGC5yfBsztmaZgAvd7XamllvF3i+X
10
- n+0O2iz6tfnzH32Jl796xERzHssJnJaq2GQIdXCWN9vFUQYsc4rkxWmayTjstxRn
11
- CK0cEA42ObwABm1PXzkF1f4yX0K0EKxu+IgWcab2QM1QytuUXy5g3aqSgvHltfyu
12
- 7sAsvwbR0eDNT5errekwXp6P5p3Z32wGqtGPITvhXrDRO9dwdIqriYXONUeSjuUQ
13
- QQWcXMjUXjrWRmXeYVUT29qpA5RsTYB4ZPyKuZlQ4wKBgQDB8siSdtGRD624nDYU
14
- M+oRpCivJnIOXXTTZwt0LaHWepwDK/9DTlCGjKiBZ018arcDfEwCzPqKlkq9c4/k
15
- jCG94o+wrRNLmA8nJsDX/VzCUixsvypvnpmlTNL3gZuPrpcODJwi1GCnll9BKKrx
16
- euzPAprFiIl11vL9UvctxqHDfwKBgQDeaz5/hB7K7ns2Pr6+QjOwGE2lADgb90rk
17
- ovnz5BDIX5FdlYqp1FcL5VxlFZBg7evzFenG9p/F5A/ILtRvsCOMrNgAvg8YO17+
18
- lYdJMGMte7FPbU7ZbrEwXSqWTyqWbIRkSF6p/UZjKdqVkvbI5kLoD9Rv5yX2N7Kt
19
- wzkNBf3kcwKBgQCrH2uYzv1Y4FyG5k1Qxf1gU1cSMvmvcwYBAIo6l4iTlNrScZ9n
20
- 41FpZfHHOz5C6GVRzfnC/tiQLssDHVN4c6vRvnTJjevYZvH3uVmtOP7+9UH9MS5g
21
- Da/DCWWau+BlhcYBv16D3J7rPuIMu7UYGz2V6NZmM3IVZvI+UVWGLhvMQQKBgQDV
22
- mvFezag1BGvYYNIXLsUtLWoEOP2p/gkzI0Ih9LoZdY7J7cBJ8d/XUOM3QUpzjIu5
23
- 3SWzK0+uYaS2gCMNUIATrjuUGvOsNfi5TymqJIpbOBvFSBkdwKzy4cbwq/8ekAFl
24
- vgsL/m4G9j8yvv27W0iOTgWbosZWfI9hScgUtdhr+QKBgFHglSD6HJO3KMYzVYHQ
25
- UaZWBs3vRY651vd9uIa4+SD09++t8wpSnOw8BAVkC0H4B2u/H+uXqLkBjta4QlHn
26
- 6++Lg73bPmYVTvGwFpNeqaYmn2huP1vVr5Vayzjg9l0hoDCFnsFZMyfenhjlOCbm
27
- p2AItkHbaog5a/rLjV58yEXA
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDA/HV0YoD7zmrM
3
+ +IwncAJLHH7ld0deBjC4tIPzv06sGwOqLgnUy5zSjHIb5k7/ojuyW1KQ1dcWU3az
4
+ yj6To9Sl7aieuzHbobsUM7jSKTmCk5zowjZa9JSmU3gP/Ma2/IptvtkWoa8oTCU9
5
+ /iisjLugVBUNyAjSObIWOqtLDlXgHjfX7U/PhrZmQaAC6Z33uHB+J+L3tQq1B7fx
6
+ bNDuW1qQhdTodZ7ecKeyYXZ6uGP961+WyUWFIkLJxYojXYI9QwEfOIMQN3H9LqaP
7
+ m7ZsYtdzUfKcWryRRHiejUALNdkDIpLYixfPsoVzBty2uVE4qFb0vuWA9pVhIdIx
8
+ zAmQbvxnAgMBAAECggEAPzp3wQoE+HtIwp8sTD+GgNV1Pfk2iLe+fsWl9dZYEEtJ
9
+ iBhNYErVtqYNPNbYSyj8JhOFma52KfpuiblZh0XGBhc3h8oNK8hxYs0PYMvg68cx
10
+ QZFf/azkhxoR3CsVcB6NvCcrOR8AJFPOX+FFskLptj3WKA3B1h7RGjdep9iqiiLK
11
+ fxMAJgZE0QYcvAzLcLKYIGvRgVRx9Koq3v+2pRUhcI75e+QSFuXf+NpETVCMlr8i
12
+ o0wJsl1gyCOVpsxv1FgUWFs8BT1mawbKK3z0sJ1FT6sICeGtb3O/cV3QhGieJRS7
13
+ A8p8cCa/4+FXAiXExniABDcZwoft/c0AZh0k4mfKAQKBgQDsG94VmPc8CnKbOXZy
14
+ UkXyPOhp571qMRGR1znVtiZ7nuExSsep7rguE3a8z9ELdhtXDC3Z16UGAfu0B5tO
15
+ tWDjaI+0jauHr/YfMOYNm6MwqaxYgfmUumVhHzxHLu1HNu5NIab1sdrrSUZqPWqa
16
+ DzFOTlw8HUQKEce/EcPjJZ1caQKBgQDRPpG3b1SYOJQZvqdZdWYt6LAwarK5NKbM
17
+ Vfi7ctH6uiCDcE7Kpc0vnvxPIhImFTeBEqKDu4VnEDml6cErIMdOWiVSIPSxvHeb
18
+ wQ6NLybINQpsEkByy2ln7+W+FHLjR5d3ZrTScVtqulVNCxYq/4e+Su0teKkw0kXg
19
+ J7EISFS4TwKBgQDK8jk2v0Dj7ucL3ZyeL3HIAeqT/YmmmX7MqP8hX2w8nhha0jhF
20
+ LNhLYpeRO+AnxeFCNUnEEcPbIiFEYbVxNh6N2faL76oc+3bG4LUdxUXEMlPdz/rD
21
+ iGRT0xFw7jkuGV1EF0T3s2TFETrhXuEegyiScnB9i3pMXXQgHBkQSei04QKBgDFP
22
+ 8p1tYl1hcB3FHcFqdoM5RFSUwLv/GZQsaqsaezwAo2r2i8scWgfwCvxHRkmtVGBZ
23
+ 2Oz8w4qvezaLqVeVqQLhIcyCMci1ZubRD7HcO+KRBXzErGWhZJz3H4i1XwILPDoK
24
+ fXDfADFd6n52r2nAwOfq1oyR1CXKWGdkU0dlbHnnAoGAGxJ3vRghrEMx3FjUo59S
25
+ sjFZUuTNdyZZFGV5ljlqYT//h4meLqENAXaqZ+shGc5Fkd8vqOO9m2dWyP5fANLo
26
+ Q+ll6+24umDaKOKTJ3uZ1Y1lNjNsf3NyCgljvFp7zUEesCZTP9I0ZpPPb2pPXAHw
27
+ vE2wID0n9rOdFO88j56f6z0=
28
28
  -----END PRIVATE KEY-----
@@ -1,19 +1,19 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDCTCCAfGgAwIBAgIURq4z8w69FkvegPibl5y4/gy6j0gwDQYJKoZIhvcNAQEL
3
- BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI0MDIxMjE5MDE1MVoXDTI1MDIx
4
- MTE5MDE1MVowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
5
- AAOCAQ8AMIIBCgKCAQEAqIHJwkBe4nAzDTre+iNFO1t98/3eJA4q5OduQk/rnoUg
6
- BBaqDbs+nzlyLIwyM+J2K17rJnF9sN107Uia/b8b4muN+5ROsIjVFE5g/I9l4p96
7
- Yz2t49tN7LkEPlmZ26JonQQw4D07hJ6rWL/wQ50+otAwbRbttgkQ4HVCv8yUVuqS
8
- dY4pBwzCXhKZWmVzGFUwt2b8mVz0H71s1RKCIeK6KLexsljhD1LoWX9gX0toT+xC
9
- 0wRvhDBcOY+4KztbojVcuvKUjD00r/dh50JpRgEZVbF5aQsMox25hlOlJB4j/i3j
10
- CCp0jyM22hxc9U1wafd03pf2MoJUhse1A3ma/EruDQIDAQABo1MwUTAdBgNVHQ4E
11
- FgQUP6Yxfkh8EYZu8C30+jj+4mjOJQwwHwYDVR0jBBgwFoAUP6Yxfkh8EYZu8C30
12
- +jj+4mjOJQwwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEANQdr
13
- HnpKoC7vgYEXEsnrZNRqAlTCUBSZlsBP9wvUCAS2lgZJTeNKiqONg7KlfTR0ob1P
14
- MqeqyYxMuEGYRmIglZPORvX7dN3bl/l6860RTV+ctzvVGszvOFGAUZ7YV2nEcTaR
15
- KTg17huZ9E9apt4P0wT5edUcAQdF10WuOuCZVs0jgIlLv1EOkzkB6QJLu/GGhaYH
16
- sBf6i0FBRnDtcBw9/20xIUqXFQb56bL0X+6TWOfDMTKcl99KrlHFtg2O0tFInNSc
17
- 0e10FLES58gKb2w7q1UyHpWWDLjCyP3SqB4lcpFaKYHUio0IvvFME3PfJMcNjurL
18
- X0ge18jFIOnvUvOiLw==
2
+ MIIDCTCCAfGgAwIBAgIUK/pAQEwJJMgHkQ4n58nNO/cwsNcwDQYJKoZIhvcNAQEL
3
+ BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI0MDMyOTE3MDU0OFoXDTI1MDMy
4
+ OTE3MDU0OFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
5
+ AAOCAQ8AMIIBCgKCAQEAwPx1dGKA+85qzPiMJ3ACSxx+5XdHXgYwuLSD879OrBsD
6
+ qi4J1Muc0oxyG+ZO/6I7sltSkNXXFlN2s8o+k6PUpe2onrsx26G7FDO40ik5gpOc
7
+ 6MI2WvSUplN4D/zGtvyKbb7ZFqGvKEwlPf4orIy7oFQVDcgI0jmyFjqrSw5V4B43
8
+ 1+1Pz4a2ZkGgAumd97hwfifi97UKtQe38WzQ7ltakIXU6HWe3nCnsmF2erhj/etf
9
+ lslFhSJCycWKI12CPUMBHziDEDdx/S6mj5u2bGLXc1HynFq8kUR4no1ACzXZAyKS
10
+ 2IsXz7KFcwbctrlROKhW9L7lgPaVYSHSMcwJkG78ZwIDAQABo1MwUTAdBgNVHQ4E
11
+ FgQUNVa/M6yDr6zThWXt51Ag6kZlAaYwHwYDVR0jBBgwFoAUNVa/M6yDr6zThWXt
12
+ 51Ag6kZlAaYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAGYjh
13
+ ykXpTW2OcRUM6xPcp9MGdr/b1V1sQQ2OI4GXBuBuqBybY1mROSvprzmEre+SslWI
14
+ joR/wepusgPsoWl54Gylg1eir4xWPq06U6KkNtngMpwHO1ln97Fw6eEND0bJWcn3
15
+ HKagaqOd96vNii4AjMeQnncNUqQGfizDjEOwDY0JY6A4DDjf+Zud6dcpkr7emZby
16
+ 3ZQEQ5Jzt2aCqmc1Dzbw2RE/mnlcc87x0jWXyTGVC+L+e08et8WLPFcDtgVa+2L0
17
+ NSVE+P9vchDdX8oHcqGovC0LZibkJZ46oNtqeQQ5/LN2P3Zk6dji4BI7u//U03Gf
18
+ ko5df8qJp7CXHrl6+Q==
19
19
  -----END CERTIFICATE-----
@@ -49,6 +49,7 @@ export default class CommandManager {
49
49
  const lintOptions = {
50
50
  verbose: options.verbose,
51
51
  fix: options.fix,
52
+ useDefault: options.useDefault
52
53
  };
53
54
  const visual = new VisualManager(rootPath).prepareVisual(options.pbivizFile);
54
55
  await visual.runLintValidation(lintOptions);
@@ -1,37 +1,44 @@
1
1
  import { ESLint } from "eslint";
2
+ import path from 'path';
3
+ import fs from 'fs';
2
4
  import ConsoleWriter from "./ConsoleWriter.js";
3
5
  import { fileExists, getRootPath } from "./utils.js";
4
6
  export class LintValidator {
5
7
  visualPath;
6
8
  rootPath;
9
+ isVerboseMode;
10
+ useDefault;
11
+ shouldFix;
7
12
  config;
8
- defaultConfig;
9
13
  linterInstance;
10
- constructor(fix = false) {
14
+ constructor({ verbose, fix, useDefault }) {
11
15
  this.visualPath = process.cwd();
12
16
  this.rootPath = getRootPath();
13
- this.prepareConfig(fix);
17
+ this.isVerboseMode = verbose;
18
+ this.useDefault = useDefault;
19
+ this.shouldFix = fix;
20
+ this.prepareConfig();
14
21
  this.linterInstance = new ESLint(this.config);
15
22
  }
16
23
  /**
17
24
  * Runs lint validation in the visual folder
18
25
  */
19
- async runLintValidation({ verbose, fix }) {
26
+ async runLintValidation() {
20
27
  ConsoleWriter.info("Running lint check...");
21
28
  // By default it will lint all files in the src of current working directory, but some files can be excluded in .eslintignore
22
- const results = await this.linterInstance.lintFiles("src/**/*");
23
- if (fix) {
29
+ const results = await this.linterInstance.lintFiles("src/");
30
+ if (this.shouldFix) {
24
31
  await this.fixErrors(results);
25
32
  }
26
- await this.outputResults(results, verbose);
33
+ await this.outputResults(results);
27
34
  ConsoleWriter.info("Lint check completed.");
28
35
  }
29
36
  async fixErrors(results) {
30
37
  ConsoleWriter.info("Lint fixing errors...");
31
38
  await ESLint.outputFixes(results);
32
39
  }
33
- async outputResults(results, verbose) {
34
- if (verbose) {
40
+ async outputResults(results) {
41
+ if (this.isVerboseMode) {
35
42
  const formatter = await this.linterInstance.loadFormatter("stylish");
36
43
  const formattedResults = await formatter.format(results);
37
44
  console.log(formattedResults);
@@ -46,33 +53,42 @@ export class LintValidator {
46
53
  }
47
54
  }
48
55
  }
49
- prepareConfig(fix) {
50
- this.defaultConfig = {
51
- overrideConfig: {
52
- env: {
53
- browser: true,
54
- es6: true,
55
- es2022: true
56
- },
57
- plugins: [
58
- "powerbi-visuals"
59
- ],
60
- extends: [
61
- "plugin:powerbi-visuals/recommended"
62
- ]
63
- },
64
- extensions: [".ts", ".tsx"],
65
- resolvePluginsRelativeTo: this.rootPath,
66
- useEslintrc: false,
67
- fix
56
+ prepareConfig() {
57
+ const requiredConfig = {
58
+ extensions: [".js", ".jsx", ".ts", ".tsx"],
59
+ fix: this.shouldFix,
60
+ resolvePluginsRelativeTo: this.getPluginPath()
68
61
  };
69
- const eslintrcExtensions = ['.json', '.js', '.ts'];
70
- if (eslintrcExtensions.some(el => fileExists(this.visualPath, `.eslintrc${el}`))) {
71
- this.config = { fix };
62
+ const eslintrcExtensions = ['.json', '.js', '.cjs', '.ts', ''];
63
+ if (!this.useDefault && eslintrcExtensions.some(el => fileExists(this.visualPath, `.eslintrc${el}`))) {
64
+ this.config = requiredConfig;
72
65
  }
73
66
  else {
74
- ConsoleWriter.warning("No .eslintrc file found in the visual folder. Using default config.");
75
- this.config = this.defaultConfig;
67
+ ConsoleWriter.warning("Using recommended eslint config.");
68
+ this.config = {
69
+ ...requiredConfig,
70
+ overrideConfig: {
71
+ env: {
72
+ browser: true,
73
+ es6: true,
74
+ es2022: true
75
+ },
76
+ plugins: [
77
+ "powerbi-visuals"
78
+ ],
79
+ extends: [
80
+ "plugin:powerbi-visuals/recommended"
81
+ ]
82
+ },
83
+ useEslintrc: false,
84
+ };
76
85
  }
77
86
  }
87
+ getPluginPath() {
88
+ const pluginPaths = [
89
+ path.resolve(this.visualPath, "node_modules", "eslint-plugin-powerbi-visuals"),
90
+ path.resolve(this.rootPath, "node_modules", "eslint-plugin-powerbi-visuals")
91
+ ];
92
+ return pluginPaths.find(fs.existsSync);
93
+ }
78
94
  }
@@ -68,9 +68,17 @@ export default class VisualManager {
68
68
  }
69
69
  return this;
70
70
  }
71
- runLintValidation(options) {
72
- const linter = new LintValidator(options.fix);
73
- linter.runLintValidation(options);
71
+ async runLintValidation(options) {
72
+ try {
73
+ const linter = new LintValidator(options);
74
+ await linter.runLintValidation();
75
+ }
76
+ catch (error) {
77
+ ConsoleWriter.error("Can't run lint validation.");
78
+ if (options.verbose) {
79
+ ConsoleWriter.error(error.message);
80
+ }
81
+ }
74
82
  }
75
83
  createVisualInstance() {
76
84
  this.capabilities = readJsonFromVisual("capabilities.json", this.basePath);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powerbi-visuals-tools",
3
- "version": "5.4.2",
3
+ "version": "5.4.3",
4
4
  "description": "Command line tool for creating and publishing visuals for Power BI",
5
5
  "main": "./bin/pbiviz.js",
6
6
  "type": "module",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "homepage": "https://github.com/Microsoft/PowerBI-visuals-tools#readme",
31
31
  "dependencies": {
32
- "@typescript-eslint/parser": "^6.17.0",
32
+ "@typescript-eslint/parser": "^6.21.0",
33
33
  "assert": "^2.1.0",
34
34
  "async": "^3.2.5",
35
35
  "browserify-zlib": "^0.2.0",
@@ -40,13 +40,13 @@
40
40
  "console-browserify": "^1.2.0",
41
41
  "constants-browserify": "^1.0.0",
42
42
  "crypto-browserify": "^3.12.0",
43
- "css-loader": "^6.8.1",
43
+ "css-loader": "^6.10.0",
44
44
  "domain-browser": "^5.7.0",
45
45
  "events": "^3.3.0",
46
46
  "extra-watch-webpack-plugin": "^1.0.3",
47
47
  "fs-extra": "^11.2.0",
48
48
  "https-browserify": "^1.0.0",
49
- "inline-source-map": "^0.6.2",
49
+ "inline-source-map": "^0.6.3",
50
50
  "json-loader": "0.5.7",
51
51
  "jszip": "^3.10.1",
52
52
  "less": "^4.2.0",
@@ -55,7 +55,7 @@
55
55
  "lodash.defaults": "4.2.0",
56
56
  "lodash.isequal": "4.5.0",
57
57
  "lodash.ismatch": "^4.4.0",
58
- "mini-css-extract-plugin": "^2.7.6",
58
+ "mini-css-extract-plugin": "^2.8.1",
59
59
  "os-browserify": "^0.3.0",
60
60
  "path-browserify": "^1.0.1",
61
61
  "powerbi-visuals-webpack-plugin": "4.1.0",
@@ -74,17 +74,17 @@
74
74
  "url": "^0.11.3",
75
75
  "util": "^0.12.5",
76
76
  "vm-browserify": "^1.1.2",
77
- "webpack": "^5.89.0",
77
+ "webpack": "^5.91.0",
78
78
  "webpack-bundle-analyzer": "4.10.1",
79
- "webpack-dev-server": "^4.15.1"
79
+ "webpack-dev-server": "^4.15.2"
80
80
  },
81
81
  "devDependencies": {
82
- "@typescript-eslint/eslint-plugin": "^6.17.0",
83
- "eslint": "^8.56.0",
82
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
83
+ "eslint": "^8.57.0",
84
84
  "eslint-plugin-powerbi-visuals": "^0.8.1",
85
85
  "jasmine": "5.1.0",
86
86
  "jasmine-spec-reporter": "7.0.0",
87
- "semver": "7.5.4",
87
+ "semver": "7.6.0",
88
88
  "tree-kill": "1.2.2",
89
89
  "webpack-cli": "^5.1.4"
90
90
  },