yeoman-environment 4.0.0-rc.0 → 4.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.
@@ -22,5 +22,6 @@ export declare class ComposedStore {
22
22
  uniqueBy?: undefined;
23
23
  };
24
24
  getUniqueByPathMap(root: string): Map<string, BaseGenerator>;
25
- private getFeature;
25
+ findFeature(featureName: string): any[];
26
+ private findUniqueFeature;
26
27
  }
@@ -11,10 +11,10 @@ export class ComposedStore {
11
11
  this.log = log;
12
12
  }
13
13
  get customCommitTask() {
14
- return this.getFeature('customCommitTask');
14
+ return this.findUniqueFeature('customCommitTask');
15
15
  }
16
16
  get customInstallTask() {
17
- return this.getFeature('customInstallTask');
17
+ return this.findUniqueFeature('customInstallTask');
18
18
  }
19
19
  getGenerators() {
20
20
  return { ...this.generators };
@@ -53,14 +53,17 @@ export class ComposedStore {
53
53
  }
54
54
  return this.uniqueByPathMap.get(root);
55
55
  }
56
- getFeature(featureName) {
57
- const providedFeatures = Object.entries(this.generators)
56
+ findFeature(featureName) {
57
+ return Object.entries(this.generators)
58
58
  .map(([generatorId, generator]) => {
59
59
  const { features = generator.getFeatures?.() } = generator;
60
60
  const feature = features?.[featureName];
61
61
  return feature ? [generatorId, feature] : undefined;
62
62
  })
63
63
  .filter(Boolean);
64
+ }
65
+ findUniqueFeature(featureName) {
66
+ const providedFeatures = this.findFeature(featureName);
64
67
  if (providedFeatures.length > 0) {
65
68
  if (providedFeatures.length > 1) {
66
69
  this.log?.info?.(`Multiple ${featureName} tasks found (${providedFeatures.map(([generatorId]) => generatorId).join(', ')}). Using the first.`);
@@ -49,6 +49,7 @@ export default class EnvironmentBase extends EventEmitter implements BaseEnviron
49
49
  protected _rootGenerator?: BaseGenerator;
50
50
  protected compatibilityMode?: false | 'v4';
51
51
  constructor(options?: EnvironmentOptions);
52
+ findFeature(featureName: string): any[];
52
53
  applyTransforms(transformStreams: FilePipelineTransform[], options?: ApplyTransformsOptions): Promise<void>;
53
54
  /**
54
55
  * Get a single generator from the registered list of generators. The lookup is
@@ -136,6 +136,9 @@ export default class EnvironmentBase extends EventEmitter {
136
136
  this.experimental = experimental || process.argv.includes('--experimental');
137
137
  this.alias(/^([^:]+)$/, '$1:app');
138
138
  }
139
+ findFeature(featureName) {
140
+ return this.composedStore.findFeature(featureName);
141
+ }
139
142
  async applyTransforms(transformStreams, options = {}) {
140
143
  const { streamOptions = { filter: file => isFilePending(file) }, stream = this.sharedFs.stream(streamOptions), name = 'Transforming', } = options;
141
144
  if (!Array.isArray(transformStreams)) {
@@ -1,3 +1,4 @@
1
+ import type { BaseGeneratorConstructor } from '@yeoman/types';
1
2
  import { type LookupOptions } from './generator-lookup.js';
2
3
  import EnvironmentBase, { type EnvironmentOptions } from './environment-base.js';
3
4
  declare class FullEnvironment extends EnvironmentBase {
@@ -62,7 +63,7 @@ declare class FullEnvironment extends EnvironmentBase {
62
63
  * @param {string[]} args
63
64
  */
64
65
  execute(generatorNamespace: string, args?: never[]): Promise<void>;
65
- requireGenerator(namespace: string): Promise<any>;
66
+ requireGenerator(namespace: string): Promise<BaseGeneratorConstructor | undefined>;
66
67
  /**
67
68
  * Install generators at the custom local repository and register.
68
69
  *
@@ -164,8 +164,9 @@ class FullEnvironment extends EnvironmentBase {
164
164
  async requireGenerator(namespace) {
165
165
  if (namespace === undefined) {
166
166
  try {
167
- // eslint-disable-next-line @typescript-eslint/naming-convention, import/no-extraneous-dependencies
168
- const { default: Generator } = await import('yeoman-generator');
167
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
168
+ // @ts-ignore
169
+ const { default: Generator } = await import('yeoman-generator'); // eslint-disable-line @typescript-eslint/naming-convention
169
170
  return Generator;
170
171
  }
171
172
  catch { }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yeoman-environment",
3
- "version": "4.0.0-rc.0",
3
+ "version": "4.1.0",
4
4
  "description": "Handles the lifecyle and bootstrapping of generators in a specific environment",
5
5
  "keywords": [
6
6
  "development",
@@ -66,7 +66,7 @@
66
66
  "commander": "^11.1.0",
67
67
  "debug": "^4.3.4",
68
68
  "execa": "^8.0.1",
69
- "fly-import": "^0.3.1",
69
+ "fly-import": "^0.4.0",
70
70
  "globby": "^13.2.2",
71
71
  "grouped-queue": "^2.0.0",
72
72
  "locate-path": "^7.2.0",
@@ -90,25 +90,77 @@
90
90
  "prettier": "3.0.3",
91
91
  "prettier-plugin-packagejson": "^2.4.6",
92
92
  "rimraf": "^5.0.5",
93
- "sinon": "^16.1.0",
93
+ "sinon": "^17.0.0",
94
94
  "sinon-test": "^3.1.5",
95
95
  "strip-ansi": "^7.1.0",
96
96
  "typescript": "5.2.2",
97
97
  "xo": "0.56.0",
98
98
  "yeoman-assert": "^3.1.1",
99
- "yeoman-environment": "file:.",
99
+ "yeoman-environment": "file:./",
100
100
  "yeoman-generator-2": "npm:yeoman-generator@^2.0.5",
101
101
  "yeoman-generator-4": "npm:yeoman-generator@^4.13.0",
102
- "yeoman-generator-5": "npm:yeoman-generator@^5.9.0",
102
+ "yeoman-generator-5": "npm:yeoman-generator@^5.10.0",
103
103
  "yeoman-generator-6": "npm:yeoman-generator@^6.0.1",
104
+ "yeoman-generator-7": "npm:yeoman-generator@^7.0.0",
104
105
  "yeoman-test": "^8.1.0"
105
106
  },
106
107
  "overrides": {
108
+ "yeoman-generator-2": {
109
+ "chalk": "^4.1.0",
110
+ "dargs": "^7.0.0",
111
+ "debug": "^4.1.1",
112
+ "execa": "^5.1.1",
113
+ "github-username": "^6.0.0",
114
+ "lodash": "^4.17.11",
115
+ "mem-fs-editor": "^9.0.0",
116
+ "minimist": "^1.2.5",
117
+ "pacote": "^15.2.0",
118
+ "read-pkg-up": "^7.0.1",
119
+ "run-async": "^2.0.0",
120
+ "semver": "^7.2.1",
121
+ "shelljs": "^0.8.5",
122
+ "sort-keys": "^4.2.0",
123
+ "text-table": "^0.2.0",
124
+ "yeoman-environment": "^3.19.3"
125
+ },
126
+ "yeoman-generator-4": {
127
+ "chalk": "^4.1.0",
128
+ "dargs": "^7.0.0",
129
+ "debug": "^4.1.1",
130
+ "execa": "^5.1.1",
131
+ "github-username": "^6.0.0",
132
+ "lodash": "^4.17.11",
133
+ "mem-fs-editor": "^9.0.0",
134
+ "minimist": "^1.2.5",
135
+ "pacote": "^15.2.0",
136
+ "read-pkg-up": "^7.0.1",
137
+ "run-async": "^2.0.0",
138
+ "semver": "^7.2.1",
139
+ "shelljs": "^0.8.5",
140
+ "sort-keys": "^4.2.0",
141
+ "text-table": "^0.2.0",
142
+ "yeoman-environment": "^3.19.3"
143
+ },
107
144
  "yeoman-generator-5": {
108
- "yeoman-environment": "file:."
145
+ "chalk": "^4.1.0",
146
+ "dargs": "^7.0.0",
147
+ "debug": "^4.1.1",
148
+ "execa": "^5.1.1",
149
+ "github-username": "^6.0.0",
150
+ "lodash": "^4.17.11",
151
+ "mem-fs-editor": "^9.0.0",
152
+ "minimist": "^1.2.5",
153
+ "pacote": "^15.2.0",
154
+ "read-pkg-up": "^7.0.1",
155
+ "run-async": "^2.0.0",
156
+ "semver": "^7.2.1",
157
+ "shelljs": "^0.8.5",
158
+ "sort-keys": "^4.2.0",
159
+ "text-table": "^0.2.0",
160
+ "yeoman-environment": "*"
109
161
  },
110
162
  "yeoman-generator-6": {
111
- "yeoman-environment": "file:."
163
+ "yeoman-environment": "*"
112
164
  }
113
165
  },
114
166
  "peerDependencies": {