yeoman-generator 5.8.0 → 5.10.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.
@@ -1,4 +1,28 @@
1
1
  'use strict';
2
+ const assert = require('assert');
3
+ const pacote = require('pacote');
4
+
5
+ const resolvePackage = async function (packageName, packageVersion) {
6
+ assert(packageName, 'Parameter packageName is required');
7
+ if (packageVersion) {
8
+ packageName = `${packageName}@${packageVersion}`;
9
+ }
10
+
11
+ const manifest = await pacote.manifest(packageName);
12
+ if (!manifest) {
13
+ return undefined;
14
+ }
15
+
16
+ const from = manifest._from;
17
+ const index = from.lastIndexOf('@');
18
+ if (index > 1) {
19
+ const resolvedVersion =
20
+ from.slice(index + 1, from.length) || manifest.version;
21
+ return [from.slice(0, Math.max(0, index)), resolvedVersion];
22
+ }
23
+
24
+ return [manifest.name, from || manifest.version];
25
+ };
2
26
 
3
27
  module.exports = (cls) =>
4
28
  /**
@@ -25,7 +49,7 @@ module.exports = (cls) =>
25
49
  Object.entries(dependencies).map(([pkg, version]) =>
26
50
  version
27
51
  ? Promise.resolve([pkg, version])
28
- : this.env.resolvePackage(pkg, version)
52
+ : resolvePackage(pkg, version)
29
53
  )
30
54
  );
31
55
  return Object.fromEntries(
@@ -34,7 +58,7 @@ module.exports = (cls) =>
34
58
  }
35
59
 
36
60
  const entries = await Promise.all(
37
- dependencies.map((dependency) => this.env.resolvePackage(dependency))
61
+ dependencies.map((dependency) => resolvePackage(dependency))
38
62
  );
39
63
  return Object.fromEntries(entries);
40
64
  }
package/lib/index.js CHANGED
@@ -190,6 +190,7 @@ class Generator extends Base {
190
190
  default: false
191
191
  });
192
192
 
193
+ /** @type {import('@yeoman/types').BaseEnvironment} */
193
194
  this.env = this.options.env;
194
195
 
195
196
  this.resolved = this.options.resolved || __filename;
@@ -250,13 +251,7 @@ class Generator extends Base {
250
251
  }
251
252
 
252
253
  // Ensure the environment support features this yeoman-generator version require.
253
- if (
254
- !this.env ||
255
- !this.env.adapter ||
256
- !this.env.runLoop ||
257
- !this.env.sharedFs ||
258
- !this.env.fs
259
- ) {
254
+ if (!this.env || !this.env.adapter || !this.env.sharedFs) {
260
255
  throw new Error(
261
256
  "Current environment doesn't provides some necessary feature this generator needs."
262
257
  );
@@ -309,6 +304,10 @@ class Generator extends Base {
309
304
  }
310
305
 
311
306
  this.checkEnvironmentVersion('3.2.0', true);
307
+
308
+ if (this.env.getVersion) {
309
+ this.yeomanApi = semver.gte(this.env.getVersion(), '3.18.3');
310
+ }
312
311
  }
313
312
 
314
313
  /**
@@ -394,14 +393,19 @@ class Generator extends Base {
394
393
  debug(`Registering custom queue ${customQueue.queueName}`);
395
394
  this._queues[customQueue.priorityName] = customQueue;
396
395
 
397
- if (this.env.runLoop.queueNames.includes(customQueue.queueName)) {
398
- continue;
399
- }
400
-
401
396
  const beforeQueue = customQueue.before
402
397
  ? this._queues[customQueue.before].queueName
403
398
  : undefined;
404
- this.env.runLoop.addSubQueue(customQueue.queueName, beforeQueue);
399
+
400
+ if (this.yeomanApi) {
401
+ this.env.addPriority(customQueue.queueName, beforeQueue);
402
+ } else {
403
+ if (this.env.runLoop.queueNames.includes(customQueue.queueName)) {
404
+ continue;
405
+ }
406
+
407
+ this.env.runLoop.addSubQueue(customQueue.queueName, beforeQueue);
408
+ }
405
409
  }
406
410
  }
407
411
 
@@ -1230,11 +1234,13 @@ class Generator extends Base {
1230
1234
  );
1231
1235
  this.queueOwnTasks({auto: true});
1232
1236
 
1237
+ const queueParameter = this.yeomanApi ? {schedule: false} : false;
1238
+
1233
1239
  if (this._composedWith.some((generator) => generator.then)) {
1234
1240
  return Promise.all(this._composedWith).then(async (generators) => {
1235
1241
  for (const generator of generators) {
1236
1242
  // eslint-disable-next-line no-await-in-loop
1237
- await this.env.queueGenerator(await generator, false);
1243
+ await this.env.queueGenerator(await generator, queueParameter);
1238
1244
  }
1239
1245
  });
1240
1246
  }
@@ -1242,9 +1248,9 @@ class Generator extends Base {
1242
1248
  let promise;
1243
1249
  for (const generator of this._composedWith) {
1244
1250
  if (promise) {
1245
- promise.then(() => this.env.queueGenerator(generator, false));
1251
+ promise.then(() => this.env.queueGenerator(generator, queueParameter));
1246
1252
  } else {
1247
- const maybePromise = this.env.queueGenerator(generator, false);
1253
+ const maybePromise = this.env.queueGenerator(generator, queueParameter);
1248
1254
  if (maybePromise.then) {
1249
1255
  promise = maybePromise;
1250
1256
  }
@@ -1307,6 +1313,13 @@ class Generator extends Base {
1307
1313
 
1308
1314
  Generator.namespace = this.env.namespace(path);
1309
1315
 
1316
+ if (this.yeomanApi) {
1317
+ return this.env.instantiate(Generator, {
1318
+ generatorArgs: args,
1319
+ generatorOptions: options
1320
+ });
1321
+ }
1322
+
1310
1323
  return this.env.instantiate(Generator, args, options);
1311
1324
  };
1312
1325
 
@@ -1321,7 +1334,12 @@ class Generator extends Base {
1321
1334
 
1322
1335
  instantiatedGenerator = instantiate(Generator, generator);
1323
1336
  } catch {
1324
- instantiatedGenerator = this.env.create(generator, args, options);
1337
+ instantiatedGenerator = this.yeomanApi
1338
+ ? this.env.create(generator, {
1339
+ generatorArgs: args,
1340
+ generatorOptions: options
1341
+ })
1342
+ : this.env.create(generator, args, options);
1325
1343
  }
1326
1344
  } else {
1327
1345
  const {Generator, path} = generator;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yeoman-generator",
3
- "version": "5.8.0",
3
+ "version": "5.10.0",
4
4
  "description": "Rails-inspired generator system that provides scaffolding for your apps",
5
5
  "homepage": "http://yeoman.io",
6
6
  "author": "Yeoman",
@@ -25,6 +25,7 @@
25
25
  "doc_path": "../yeoman-generator-doc/"
26
26
  },
27
27
  "devDependencies": {
28
+ "@yeoman/types": "1.0.1",
28
29
  "coveralls": "^3.0.3",
29
30
  "inquirer": "^8.2.4",
30
31
  "jsdoc": "^3.6.7",
@@ -68,6 +69,7 @@
68
69
  "lodash": "^4.17.11",
69
70
  "mem-fs-editor": "^9.0.0",
70
71
  "minimist": "^1.2.5",
72
+ "pacote": "^15.2.0",
71
73
  "read-pkg-up": "^7.0.1",
72
74
  "run-async": "^2.0.0",
73
75
  "semver": "^7.2.1",
@@ -75,6 +77,15 @@
75
77
  "sort-keys": "^4.2.0",
76
78
  "text-table": "^0.2.0"
77
79
  },
80
+ "overrides": {
81
+ "@yeoman/types": {
82
+ "mem-fs": "^2.0.0",
83
+ "mem-fs-editor": "^9.0.0"
84
+ }
85
+ },
86
+ "acceptDependencies": {
87
+ "yeoman-environment": "^4.0.0"
88
+ },
78
89
  "peerDependencies": {
79
90
  "yeoman-environment": "^3.2.0"
80
91
  },