generator-easy-ui5 3.5.2 → 3.6.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/CHANGELOG.md CHANGED
@@ -1,13 +1,14 @@
1
- ## [3.5.1](https://github.com/SAP/generator-easy-ui5/compare/v3.2.0...v3.5.1) (2022-09-10)
1
+ ## [3.5.2](https://github.com/SAP/generator-easy-ui5/compare/v3.5.1...v3.5.2) (2023-06-09)
2
2
 
3
3
  ### Bug Fixes
4
4
 
5
- - enable for Yeoman UI usage ([03c2e38](https://github.com/SAP/generator-easy-ui5/commit/03c2e38af4eebe108d6076710b74d8aaf7c31d8d))
5
+ - sort subgen list, remove threshold, fix permission issues ([#123](https://github.com/SAP/generator-easy-ui5/issues/123)) ([c5dd321](https://github.com/SAP/generator-easy-ui5/commit/c5dd3218a26870a61722a9675a81831cc8af50e5)), closes [#122](https://github.com/SAP/generator-easy-ui5/issues/122) [#118](https://github.com/SAP/generator-easy-ui5/issues/118) [#117](https://github.com/SAP/generator-easy-ui5/issues/117) [#111](https://github.com/SAP/generator-easy-ui5/issues/111)
6
6
 
7
- ## [3.5.0](https://github.com/SAP/generator-easy-ui5/compare/v3.2.0...v3.5.0) (2022-07-26)
7
+ ## [3.5.1](https://github.com/SAP/generator-easy-ui5/compare/v3.2.0...v3.5.1) (2022-09-10)
8
8
 
9
9
  ### Bug Fixes
10
10
 
11
+ - enable for Yeoman UI usage ([03c2e38](https://github.com/SAP/generator-easy-ui5/commit/03c2e38af4eebe108d6076710b74d8aaf7c31d8d))
11
12
  - **postinstall:** allow usage of NPM config for ghAuthToken to avoid rate limit ([#104](https://github.com/SAP/generator-easy-ui5/issues/104)) ([371d7fb](https://github.com/SAP/generator-easy-ui5/commit/371d7fbc82b8a59cef896197b99239b505b3cd90)), closes [#100](https://github.com/SAP/generator-easy-ui5/issues/100)
12
13
  - **postinstall:** avoid non-existing node_modules ([#98](https://github.com/SAP/generator-easy-ui5/issues/98)) ([f93c7c9](https://github.com/SAP/generator-easy-ui5/commit/f93c7c99b9e5df7af801a085afe72be85e462007))
13
14
  - usage of proper gh org for logging and download ([#94](https://github.com/SAP/generator-easy-ui5/issues/94)) ([a88d4db](https://github.com/SAP/generator-easy-ui5/commit/a88d4dbb0a1f5ed3cf60f7ed0297c651222a83fb))
package/README.md CHANGED
@@ -8,15 +8,15 @@
8
8
 
9
9
  ## Description
10
10
 
11
- Easy-ui5 💙 is a [Yeoman](http://yeoman.io/) generator which enables you to create simple [SAPUI5](https://sapui5.hana.ondemand.com/)/[OpenUI5](https://openui5.hana.ondemand.com/)-based web-apps and other UI5-related projects within seconds.
11
+ Easy UI5 (`easy-ui5`) 💙 is a [Yeoman](http://yeoman.io/) generator which enables you to create simple [SAPUI5](https://ui5.sap.com)/[OpenUI5](https://sdk.openui5.org)-based web-apps and other UI5-related projects within seconds.
12
12
 
13
13
  This generator has been created to simplify the creation of your UI5 prototypes. Now you can scaffold simple UI5 projects from the shell/terminal of your choice. The current best practices (such as [async](https://blogs.sap.com/2018/12/18/ui5ers-buzz-41-best-practices-for-async-loading-in-ui5/)) are already baked into our templates so you don't have to worry about the definition of the metadata files.
14
14
 
15
- The purpose of this generator is to guide you on your first steps with [SAPUI5](https://sapui5.hana.ondemand.com/) and [SAP BTP](https://www.sap.com/products/business-technology-platform.html) deployments. Once you are familiar with those technologies, you might want to tweak the projects to adapt them for productive use-cases (such as continuous deployment pipelines and full i18n).
15
+ The purpose of the `project` subgenerator is to guide you on your first steps with [SAPUI5](https://sapui5.hana.ondemand.com/) and [SAP BTP](https://www.sap.com/products/business-technology-platform.html) deployments. Once you are familiar with those technologies, you might want to tweak the projects to adapt them for productive use-cases (such as continuous deployment pipelines and full i18n).
16
16
 
17
- > :warning: Starting with easy-ui5 v3, all templates will be outsource to repositories in the [UI5 Community](https://github.com/ui5-community/). This project is from now on a shell that will offer all generators hosted on that GitHub org. Easy-ui5 will download and install these repositories when needed.
17
+ > :warning: Starting with Easy UI5 v3, all templates will be outsource to repositories in the [UI5 Community](https://github.com/ui5-community/). This project is from now on a shell that will offer all generators hosted on that GitHub org. Easy UI5 will download and install these repositories when needed.
18
18
  >
19
- > By default, it will download the repository [generator-ui5-project](https://github.com/ui5-community/generator-ui5-project/) which contains the templates that were previously integrated in easy-ui5 < 3.
19
+ > By default, it will download the repository [generator-ui5-project](https://github.com/ui5-community/generator-ui5-project/) which contains the templates that were previously integrated in Easy UI5 < 3.
20
20
 
21
21
  ## Requirements
22
22
 
@@ -63,7 +63,8 @@ During the prompting phase, the generator will ask on which target platform your
63
63
  ## More generators
64
64
 
65
65
  And this is just the start!
66
- We made easy-ui5 extensible, so that the entire [UI5 Community](https://github.com/ui5-community/) can build additional plugins to scaffold any UI5-related development activity.
66
+
67
+ We made Easy UI5 extensible, so that the entire [UI5 Community](https://github.com/ui5-community/) can build additional plugins to scaffold any UI5-related development activity.
67
68
 
68
69
  By default, this generator comes with the [project-creation-plugin](https://github.com/ui5-community/generator-ui5-project) but there are many others as well:
69
70
 
@@ -98,6 +99,14 @@ Run the following command to see all subgenerators of a given plugin
98
99
  yo easy-ui5 [project|library] <sub-generator-id>
99
100
  ```
100
101
 
102
+ ## Proxy settings
103
+
104
+ If you are running Easy UI5 behind a coporate proxy, just use the default proxy environment variables for Node.js to configure your corporate proxy:
105
+
106
+ - `HTTP_PROXY`: Specify the value to use as the HTTP proxy for all connections, e.g., `HTTP_PROXY="http://proxy.mycompany.com:8080/"`.
107
+ - `HTTPS_PROXY`: Specify the value to use as the HTTPS proxy for all connections, e.g., `HTTPS_PROXY="https://proxy.mycompany.com:8080/"`.
108
+ - `NO_PROXY`: Define the hosts that should bypass the proxy, e.g., `NO_PROXY="localhost,.mycompany.com,192.168.6.254:80"`.
109
+
101
110
  ## How to obtain support
102
111
 
103
112
  Please use the GitHub bug tracking system to post questions, bug reports or to create pull requests.
@@ -1,20 +1,33 @@
1
- "use strict";
2
- const Generator = require("yeoman-generator");
3
- const chalk = require("chalk");
4
- const yosay = require("yosay");
5
- const spawn = require("cross-spawn");
6
- const { hasYarn } = require("yarn-or-npm");
7
-
8
- const path = require("path");
9
- const fs = require("fs");
10
- const { rm } = require("fs").promises;
11
- const glob = require("glob");
12
-
13
- const { request } = require("@octokit/request");
14
- const { Octokit } = require("@octokit/rest");
15
- const { throttling } = require("@octokit/plugin-throttling");
1
+ import Generator from "yeoman-generator";
2
+
3
+ import path from "path";
4
+ import fs from "fs";
5
+ import os from "os";
6
+ import url from "url";
7
+
8
+ import { glob } from "glob";
9
+ import chalk from "chalk";
10
+ import yosay from "yosay";
11
+ import libnpmconfig from "libnpmconfig";
12
+ import yarnOrNpm from "yarn-or-npm";
13
+ const { hasYarn } = yarnOrNpm;
14
+ import AdmZip from "adm-zip";
15
+ import { request } from "@octokit/request";
16
+ import { Octokit } from "@octokit/rest";
17
+ import { throttling } from "@octokit/plugin-throttling";
16
18
  const MyOctokit = Octokit.plugin(throttling);
17
- const AdmZip = require("adm-zip");
19
+ import spawn from "cross-spawn";
20
+
21
+ const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
22
+
23
+ // apply proxy settings to GLOBAL_AGENT to support the proxy configuration
24
+ // provided via the standard Node.js environment varibales (used for fetch API)
25
+ let HTTP_PROXY, HTTPS_PROXY, NO_PROXY;
26
+ if (global?.GLOBAL_AGENT) {
27
+ HTTP_PROXY = global.GLOBAL_AGENT.HTTP_PROXY = process.env.HTTP_PROXY || process.env.http_proxy;
28
+ HTTPS_PROXY = global.GLOBAL_AGENT.HTTPS_PROXY = process.env.HTTPS_PROXY || process.env.https_proxy;
29
+ NO_PROXY = global.GLOBAL_AGENT.NO_PROXY = process.env.NO_PROXY || process.env.no_proxy;
30
+ }
18
31
 
19
32
  // helper to retrieve config entries from npm
20
33
  // --> npm config set easy-ui5_addGhOrg XYZ
@@ -22,13 +35,31 @@ const NPM_CONFIG_PREFIX = "easy-ui5_";
22
35
  let npmConfig;
23
36
  const getNPMConfig = (configName) => {
24
37
  if (!npmConfig) {
25
- npmConfig = require("libnpmconfig").read();
38
+ npmConfig = libnpmconfig.read();
26
39
  }
27
40
  return npmConfig && npmConfig[`${NPM_CONFIG_PREFIX}${configName}`];
28
41
  };
29
42
 
30
43
  // the command line options of the generator
31
44
  const generatorOptions = {
45
+ pluginsHome: {
46
+ type: String,
47
+ description: "Home directory of the plugin generators",
48
+ default: path.join(os.homedir(), ".npm", "_generator-easy-ui5", "plugin-generators"),
49
+ hide: true, // shouldn't be needed
50
+ npmConfig: true,
51
+ },
52
+ plugins: {
53
+ type: Boolean,
54
+ alias: "p",
55
+ description: "List detailed information about installed plugin generators",
56
+ },
57
+ ghBaseUrl: {
58
+ type: String,
59
+ description: "Base URL for the Octokit API (defaults to https://api.github.com if undefined)",
60
+ hide: true, // shouldn't be needed
61
+ npmConfig: true,
62
+ },
32
63
  ghAuthToken: {
33
64
  type: String,
34
65
  description: "GitHub authToken to optionally access private generator repositories",
@@ -51,6 +82,12 @@ const generatorOptions = {
51
82
  default: "generator-ui5-",
52
83
  hide: true, // we don't want to recommend to use this option
53
84
  },
85
+ addGhBaseUrl: {
86
+ type: String,
87
+ description: "Base URL for the Octokit API for the additional generators (defaults to https://api.github.com if undefined)",
88
+ hide: true, // shouldn't be needed
89
+ npmConfig: true,
90
+ },
54
91
  addGhOrg: {
55
92
  type: String,
56
93
  description: "GitHub organization to lookup for additional available generators",
@@ -64,13 +101,6 @@ const generatorOptions = {
64
101
  hide: true, // we don't want to recommend to use this option
65
102
  npmConfig: true,
66
103
  },
67
- pluginsHome: {
68
- type: String,
69
- description: "Home directory of the plugin generators",
70
- default: path.join(require("os").homedir(), ".npm", "_generator-easy-ui5", "plugin-generators"),
71
- hide: true, // shouldn't be needed
72
- npmConfig: true,
73
- },
74
104
  embed: {
75
105
  type: Boolean,
76
106
  description: "Embeds the selected plugin generator",
@@ -97,14 +127,9 @@ const generatorOptions = {
97
127
  type: Boolean,
98
128
  description: "Enable detailed logging",
99
129
  },
100
- plugins: {
101
- type: Boolean,
102
- alias: "p",
103
- description: "Get detailed version information",
104
- },
105
130
  next: {
106
131
  type: Boolean,
107
- description: "Preview the next mode to consume templates from bestofui5.org",
132
+ description: "Preview the next mode to consume subgenerators from bestofui5.org",
108
133
  },
109
134
  };
110
135
 
@@ -112,16 +137,16 @@ const generatorArgs = {
112
137
  generator: {
113
138
  type: String,
114
139
  required: false,
115
- description: 'Name of the generator to invoke (without the "generator-ui5-" prefix)',
140
+ description: `Name of the generator to invoke (without the ${chalk.yellow("generator-ui5-")} prefix)`,
116
141
  },
117
142
  subcommand: {
118
143
  type: String,
119
144
  required: false,
120
- description: 'Name of the subcommand to invoke (without the "generator:" prefix)',
145
+ description: `Name of the subcommand to invoke (without the ${chalk.yellow("generator:")} prefix)`,
121
146
  },
122
147
  };
123
148
 
124
- module.exports = class extends Generator {
149
+ export default class extends Generator {
125
150
  constructor(args, opts) {
126
151
  super(args, opts, {
127
152
  // disable the Yeoman 5 package-manager logic (auto install)!
@@ -189,7 +214,8 @@ module.exports = class extends Generator {
189
214
  );
190
215
  }
191
216
 
192
- _unzip(zip, targetPath, zipInternalPath /* used for plugin generators from GitHub (e.g. TS tutorial) */) {
217
+ _unzip(pathOrBuffer, targetPath, zipInternalPath /* used for plugin generators from GitHub (e.g. TS tutorial) */) {
218
+ const zip = new AdmZip(pathOrBuffer);
193
219
  const zipEntries = zip.getEntries();
194
220
  zipEntries.forEach((entry) => {
195
221
  const match = !entry.isDirectory && entry.entryName.match(/[^\/]+(\/.+)/);
@@ -205,9 +231,13 @@ module.exports = class extends Generator {
205
231
  });
206
232
  }
207
233
 
234
+ determineAppname() {
235
+ return "Easy UI5";
236
+ }
237
+
208
238
  async prompting() {
209
239
  const home = path.join(__dirname, "..", "..");
210
- const pkgJson = require(path.join(home, "package.json"));
240
+ const pkgJson = JSON.parse(fs.readFileSync(path.join(home, "package.json"), "utf8"));
211
241
 
212
242
  // Have Yeoman greet the user.
213
243
  if (!this.options.embedded) {
@@ -218,13 +248,25 @@ module.exports = class extends Generator {
218
248
  // %user_dir%/.npm/_generator-easy-ui5/plugin-generators
219
249
  let pluginsHome = this.options.pluginsHome;
220
250
  if (this.options.verbose) {
221
- console.error(`Plugin directory: ${chalk.green(pluginsHome)}`);
222
- console.error(chalk.red(e.message));
251
+ console.info(" Context:");
252
+ console.info(` - sourceRoot = ${chalk.green(this.sourceRoot())}`);
253
+ console.info(` - destinationRoot = ${chalk.green(this.destinationRoot())}`);
254
+ console.info(" Options:");
255
+ Object.keys(generatorOptions).forEach((option) => {
256
+ console.info(` - ${option} = ${chalk.green(this.options[option])}`);
257
+ });
258
+ console.info(" Proxy:");
259
+ console.info(` - HTTP_PROXY = ${chalk.green(HTTP_PROXY)}`);
260
+ console.info(` - HTTPS_PROXY = ${chalk.green(HTTPS_PROXY)}`);
261
+ console.info(` - NO_PROXY = ${chalk.green(NO_PROXY)}`);
223
262
  }
224
263
  fs.mkdirSync(pluginsHome, { recursive: true });
225
264
 
226
265
  // log the plugins and configuration
227
266
  if (this.options.plugins) {
267
+ const { createRequire } = await import("node:module");
268
+ const require = createRequire(import.meta.url);
269
+
228
270
  const yeoman = require("yeoman-environment/package.json");
229
271
 
230
272
  const components = {
@@ -255,9 +297,11 @@ module.exports = class extends Generator {
255
297
  if (this.options.offline) {
256
298
  this.log(`Running in ${chalk.yellow("offline")} mode!`);
257
299
  } else {
258
- octokit = new MyOctokit({
300
+ // define the options for the Octokit API
301
+ const octokitOptions = {
259
302
  userAgent: `${this.rootGeneratorName()}:${this.rootGeneratorVersion()}`,
260
303
  auth: this.options.ghAuthToken,
304
+ baseUrl: this.options.ghBaseUrl,
261
305
  throttle: {
262
306
  onRateLimit: (retryAfter, options) => {
263
307
  this.log(`${chalk.yellow("Hit the GitHub API limit!")} Request quota exhausted for this request.`);
@@ -269,12 +313,14 @@ module.exports = class extends Generator {
269
313
  return true;
270
314
  }
271
315
  },
272
- onAbuseLimit: () => {
316
+ onSecondaryRateLimit: () => {
273
317
  // does not retry, only logs a warning
274
318
  this.log(`${chalk.red("Hit the GitHub API limit again!")} Please supply an auth token with the \`--ghAuthToken\` option. For more details, run \`yo easy-ui5 --help\` `);
275
319
  },
276
320
  },
277
- });
321
+ };
322
+ // create the octokit instance
323
+ octokit = new MyOctokit(octokitOptions);
278
324
  }
279
325
 
280
326
  // helper for filtering repos with corresponding subGenerator prefix
@@ -299,6 +345,7 @@ module.exports = class extends Generator {
299
345
  const response = await octokit.repos.listForOrg({
300
346
  org: ghOrg,
301
347
  sort: "name",
348
+ // eslint-disable-next-line camelcase
302
349
  per_page: threshold,
303
350
  });
304
351
  return filterReposWithSubGeneratorPrefix(response?.data, subGeneratorPrefix);
@@ -309,6 +356,7 @@ module.exports = class extends Generator {
309
356
  const response = await octokit.repos.listForUser({
310
357
  username: ghUser,
311
358
  sort: "name",
359
+ // eslint-disable-next-line camelcase
312
360
  per_page: threshold,
313
361
  });
314
362
  return filterReposWithSubGeneratorPrefix(response?.data, subGeneratorPrefix);
@@ -356,19 +404,18 @@ module.exports = class extends Generator {
356
404
  const generatorPath = path.join(pluginsHome, generatorName);
357
405
  return {
358
406
  file,
407
+ generatorName,
359
408
  generatorPath,
360
409
  };
361
410
  })
362
411
  .filter(({ generatorPath }) => !fs.existsSync(generatorPath));
363
- // install the missing embedded generator(s)
412
+ // install (unzip) the missing embedded generator(s)
364
413
  if (generatorsToBeInstalled.length > 0) {
365
- this._showBusy(`Installing embedded generators of ${chalk.red("easy-ui5")}...`);
366
- await Promise.all(
367
- generatorsToBeInstalled.map(({ file, generatorPath }) => {
368
- this._unzip(new AdmZip(file), generatorPath);
369
- return this._npmInstall(generatorPath);
370
- })
371
- );
414
+ this._showBusy(" Installing embedded subgenerators...");
415
+ generatorsToBeInstalled.map(({ file, generatorName, generatorPath }) => {
416
+ this._showBusy(` Installing embedded subgenerator ${chalk.yellow(generatorName)}...`);
417
+ this._unzip(file, generatorPath);
418
+ });
372
419
  this._clearBusy(true);
373
420
  }
374
421
  // offline mode means local generators only versus only mode
@@ -504,10 +551,10 @@ module.exports = class extends Generator {
504
551
  branch: generator.branch,
505
552
  });
506
553
  commitSHA = reqBranch.data.commit.sha;
507
- } catch (e) {
554
+ } catch (ex) {
508
555
  console.error(chalk.red(`Failed to retrieve the branch "${generator.branch}" for repository "${generator.name}" for "${generator.org}" organization! Run with --verbose for details!`));
509
556
  if (this.options.verbose) {
510
- console.error(chalk.red(e.message));
557
+ console.error(chalk.red(ex.message));
511
558
  }
512
559
  return;
513
560
  }
@@ -524,7 +571,7 @@ module.exports = class extends Generator {
524
571
  this.log(`Generator ${chalk.yellow(generator.name)} in "${generatorPath}" is outdated!`);
525
572
  }
526
573
  // remove if the SHA marker doesn't exist => outdated!
527
- this._showBusy(` Removing old ${chalk.yellow(generator.name)} templates...`);
574
+ this._showBusy(` Deleting subgenerator ${chalk.yellow(generator.name)}...`);
528
575
  await rm(generatorPath, { recursive: true });
529
576
  }
530
577
  }
@@ -535,30 +582,26 @@ module.exports = class extends Generator {
535
582
  if (this.options.verbose) {
536
583
  this.log(`Extracting ZIP to "${generatorPath}"...`);
537
584
  }
538
- this._showBusy(` Downloading ${chalk.yellow(generator.name)} templates...`);
585
+ this._showBusy(` Downloading subgenerator ${chalk.yellow(generator.name)}...`);
539
586
  const reqZIPArchive = await octokit.repos.downloadZipballArchive({
540
587
  owner: generator.org,
541
588
  repo: generator.name,
542
589
  ref: commitSHA,
543
590
  });
544
591
 
545
- this._showBusy(` Extracting ${chalk.yellow(generator.name)} templates...`);
592
+ this._showBusy(` Extracting subgenerator ${chalk.yellow(generator.name)}...`);
546
593
  const buffer = Buffer.from(new Uint8Array(reqZIPArchive.data));
547
- const zip = new AdmZip(buffer);
548
- this._unzip(zip, generatorPath, generator.dir);
594
+ this._unzip(buffer, generatorPath, generator.dir);
549
595
 
550
596
  // write the sha marker
551
597
  fs.writeFileSync(shaMarker, commitSHA);
552
-
553
- // run yarn/npm install
554
- if (this.options.verbose) {
555
- this.log("Installing the plugin dependencies...");
556
- }
557
- this._showBusy(` Preparing ${chalk.yellow(generator.name)}...`);
558
- await this._npmInstall(generatorPath);
559
598
  }
560
599
 
561
- this._clearBusy(true);
600
+ // only when embedding we clear the busy state as otherwise
601
+ // the npm install will immediately again show the busy state
602
+ if (this.options.embed) {
603
+ this._clearBusy(true);
604
+ }
562
605
  }
563
606
 
564
607
  // do not execute the plugin generator during the setup/embed mode
@@ -566,6 +609,14 @@ module.exports = class extends Generator {
566
609
  // filter the local options and the help command
567
610
  const opts = Object.keys(this._options).filter((optionName) => !(generatorOptions.hasOwnProperty(optionName) || optionName === "help"));
568
611
 
612
+ // run yarn/npm install (always for self-healing!)
613
+ if (this.options.verbose) {
614
+ this.log("Installing the subgenerator dependencies...");
615
+ }
616
+ this._showBusy(` Preparing ${chalk.yellow(generator.name)}...`);
617
+ await this._npmInstall(generatorPath);
618
+ this._clearBusy(true);
619
+
569
620
  // create the env for the plugin generator
570
621
  let env = this.env; // in case of Yeoman UI the env is injected!
571
622
  if (!env) {
@@ -706,4 +757,4 @@ module.exports = class extends Generator {
706
757
  }
707
758
  }
708
759
  }
709
- };
760
+ }
package/package.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "generator-easy-ui5",
3
- "version": "3.5.2",
3
+ "version": "3.6.0",
4
4
  "description": "Generator for UI5-based project",
5
5
  "main": "generators/app/index.js",
6
+ "type": "module",
6
7
  "files": [
7
- "generators"
8
+ "generators",
9
+ "plugins"
8
10
  ],
9
11
  "engines": {
10
12
  "node": ">=14.0.0"
@@ -46,33 +48,33 @@
46
48
  },
47
49
  "homepage": "https://github.com/SAP/generator-easy-ui5#readme",
48
50
  "dependencies": {
49
- "@octokit/plugin-throttling": "^4.2.0",
50
- "@octokit/rest": "^19.0.4",
51
- "adm-zip": "^0.5.9",
52
- "chalk": "^4.1.2",
53
- "colors": "1.4.0",
54
- "glob": "^7.2.0",
51
+ "@octokit/plugin-throttling": "^5.2.3",
52
+ "@octokit/rest": "^19.0.11",
53
+ "adm-zip": "^0.5.10",
54
+ "chalk": "^5.2.0",
55
+ "colors": "^1.4.0",
56
+ "glob": "^10.2.7",
55
57
  "libnpmconfig": "^1.2.1",
56
- "rimraf": "^3.0.2",
58
+ "rimraf": "^5.0.1",
57
59
  "yarn-or-npm": "^3.0.1",
58
- "yeoman-environment": "^3.10.0",
59
- "yeoman-generator": "^5.7.0",
60
+ "yeoman-environment": "^3.19.3",
61
+ "yeoman-generator": "^5.9.0",
60
62
  "yosay": "^2.0.2"
61
63
  },
62
64
  "devDependencies": {
63
- "@commitlint/cli": "17.0.3",
64
- "@commitlint/config-conventional": "17.0.3",
65
- "conventional-changelog-cli": "^2.2.2",
66
- "cz-conventional-changelog": "3.3.0",
67
- "eslint": "^8.18.0",
68
- "husky": "^8.0.1",
69
- "lint-staged": "^13.0.3",
70
- "mocha": "^10.0.0",
65
+ "@commitlint/cli": "^17.6.5",
66
+ "@commitlint/config-conventional": "^17.6.5",
67
+ "conventional-changelog-cli": "^3.0.0",
68
+ "cz-conventional-changelog": "^3.3.0",
69
+ "eslint": "^8.42.0",
70
+ "husky": "^8.0.3",
71
+ "lint-staged": "^13.2.2",
72
+ "mocha": "^10.2.0",
71
73
  "npm-run-all": "^4.1.5",
72
- "prettier": "2.7.1",
74
+ "prettier": "^2.8.8",
73
75
  "pretty-quick": "^3.1.3",
74
76
  "yeoman-assert": "^3.1.1",
75
- "yeoman-test": "^6.3.0"
77
+ "yeoman-test": "^7.4.0"
76
78
  },
77
79
  "config": {
78
80
  "commitizen": {
@@ -85,6 +87,7 @@
85
87
  ]
86
88
  },
87
89
  "overrides": {
90
+ "http-cache-semantics": "^4.1.1",
88
91
  "minimist": "^1.2.6"
89
92
  }
90
93
  }