yeoman-test 8.0.0-beta.2 → 8.0.0-beta.4

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.
@@ -0,0 +1 @@
1
+ export function defaultEnvironment(): Promise<any>;
@@ -0,0 +1,4 @@
1
+ export const defaultEnvironment = async () => {
2
+ const dynamicEnv = await import('yeoman-environment');
3
+ return dynamicEnv.createEnv ?? dynamicEnv.default.createEnv;
4
+ };
package/dist/helpers.d.ts CHANGED
@@ -1,13 +1,12 @@
1
- import type { BaseEnvironment, BaseEnvironmentOptions, BaseGenerator, BaseGeneratorOptions, GetGeneratorConstructor, GetGeneratorOptions, PromptAnswers } from '@yeoman/types';
1
+ import type { BaseEnvironmentOptions, BaseGenerator, BaseGeneratorOptions, GetGeneratorConstructor, GetGeneratorOptions, PromptAnswers } from '@yeoman/types';
2
2
  import type { SinonSpiedInstance } from 'sinon';
3
+ import type { DefaultEnvironmentApi, DefaultGeneratorApi } from '../types/type-helpers.js';
3
4
  import { type DummyPromptOptions } from './adapter.js';
4
5
  import RunContext, { BasicRunContext, type RunContextSettings } from './run-context.js';
5
- import type { DefaultEnvironmentApi, DefaultGeneratorApi } from './type-helpers.js';
6
6
  /**
7
7
  * Dependencies can be path (autodiscovery) or an array [<generator>, <name>]
8
8
  */
9
- export type Dependency = Parameters<DefaultEnvironmentApi['register']> | Parameters<DefaultEnvironmentApi['registerStub']>;
10
- export type GeneratorFactory<GenParameter extends BaseGenerator = DefaultGeneratorApi> = GetGeneratorConstructor<GenParameter> | ((...args: ConstructorParameters<GetGeneratorConstructor<GenParameter>>) => GenParameter);
9
+ export type Dependency = string | Parameters<DefaultEnvironmentApi['register']>;
11
10
  /**
12
11
  * Collection of unit test helpers. (mostly related to Mocha syntax)
13
12
  * @class YeomanTest
@@ -91,14 +90,6 @@ export declare class YeomanTest {
91
90
  * var angular = createGenerator('angular:app', deps);
92
91
  */
93
92
  createGenerator<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(name: string, dependencies: Dependency[], args?: string[], options?: GetGeneratorOptions<GeneratorType>, localConfigOnly?: boolean): Promise<GeneratorType>;
94
- /**
95
- * @deprecated
96
- * Register a list of dependent generators into the provided env.
97
- * Dependecies can be path (autodiscovery) or an array [{generator}, {name}]
98
- *
99
- * @param dependencies - paths to the generators dependencies
100
- */
101
- registerDependencies(env: DefaultEnvironmentApi, dependencies: Dependency[]): void;
102
93
  /**
103
94
  * Shortcut to the Environment's createEnv.
104
95
  *
@@ -122,7 +113,7 @@ export declare class YeomanTest {
122
113
  * @param {Object} - Options to be passed to the environment
123
114
  * const env = createTestEnv(require('yeoman-environment').createEnv);
124
115
  */
125
- createTestEnv(envContructor?: (...args: any[]) => Promise<BaseEnvironment>, options?: BaseEnvironmentOptions): Promise<BaseEnvironment>;
116
+ createTestEnv(envContructor?: (...args: any[]) => Promise<import("@yeoman/types").BaseEnvironment>, options?: BaseEnvironmentOptions): Promise<import("@yeoman/types").BaseEnvironment>;
126
117
  /**
127
118
  * Get RunContext type
128
119
  * @return {RunContext}
@@ -132,13 +123,13 @@ export declare class YeomanTest {
132
123
  * Run the provided Generator
133
124
  * @param GeneratorOrNamespace - Generator constructor or namespace
134
125
  */
135
- run<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(GeneratorOrNamespace: string | GeneratorFactory<GeneratorType>, settings?: RunContextSettings, envOptions?: BaseEnvironmentOptions): RunContext<GeneratorType>;
126
+ run<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(GeneratorOrNamespace: string | GetGeneratorConstructor<GeneratorType>, settings?: RunContextSettings, envOptions?: BaseEnvironmentOptions): RunContext<GeneratorType>;
136
127
  /**
137
128
  * Prepare a run context
138
129
  * @param {String|Function} GeneratorOrNamespace - Generator constructor or namespace
139
130
  * @return {RunContext}
140
131
  */
141
- create<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(GeneratorOrNamespace: string | GeneratorFactory<GeneratorType>, settings?: RunContextSettings, envOptions?: BaseEnvironmentOptions): RunContext<GeneratorType>;
132
+ create<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(GeneratorOrNamespace: string | GetGeneratorConstructor<GeneratorType>, settings?: RunContextSettings, envOptions?: BaseEnvironmentOptions): RunContext<GeneratorType>;
142
133
  /**
143
134
  * Prepare temporary dir without generator support.
144
135
  * Generator and environment will be undefined.
package/dist/helpers.js CHANGED
@@ -7,6 +7,7 @@ import { spy as sinonSpy, stub as sinonStub } from 'sinon';
7
7
  import { DummyPrompt, TestAdapter } from './adapter.js';
8
8
  import RunContext, { BasicRunContext } from './run-context.js';
9
9
  import testContext from './test-context.js';
10
+ import { defaultEnvironment } from './default-environment.js';
10
11
  let GeneratorImplementation;
11
12
  try {
12
13
  const GeneratorImport = await import('yeoman-generator');
@@ -171,30 +172,15 @@ export class YeomanTest {
171
172
  */
172
173
  async createGenerator(name, dependencies, args, options, localConfigOnly = true) {
173
174
  const env = await this.createEnv([], { sharedOptions: { localConfigOnly } });
174
- this.registerDependencies(env, dependencies);
175
- return env.create(name, args, options);
176
- }
177
- /**
178
- * @deprecated
179
- * Register a list of dependent generators into the provided env.
180
- * Dependecies can be path (autodiscovery) or an array [{generator}, {name}]
181
- *
182
- * @param dependencies - paths to the generators dependencies
183
- */
184
- registerDependencies(env, dependencies) {
185
175
  for (const dependency of dependencies) {
186
- if (Array.isArray(dependency)) {
187
- if (typeof dependency[0] === 'string') {
188
- env.register(...dependency);
189
- }
190
- else {
191
- env.registerStub(...dependency);
192
- }
176
+ if (typeof dependency === 'string') {
177
+ env.register(dependency);
193
178
  }
194
179
  else {
195
- env.register(dependency);
180
+ env.register(...dependency);
196
181
  }
197
182
  }
183
+ return env.create(name, args, options);
198
184
  }
199
185
  /**
200
186
  * Shortcut to the Environment's createEnv.
@@ -212,9 +198,7 @@ export class YeomanTest {
212
198
  * });
213
199
  */
214
200
  async createEnv(...args) {
215
- const dynamicEnv = await import('yeoman-environment');
216
- const createEnv = dynamicEnv.createEnv ?? dynamicEnv.default.createEnv;
217
- return createEnv(...args);
201
+ return (await defaultEnvironment())(...args);
218
202
  }
219
203
  /**
220
204
  * Creates a test environment.
@@ -1,13 +1,12 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  import { EventEmitter } from 'node:events';
3
3
  import { type Store } from 'mem-fs';
4
- import type { BaseEnvironmentOptions, BaseGenerator, GetGeneratorConstructor, GetGeneratorOptions, PromptAnswers } from '@yeoman/types';
5
- import { type LookupOptions } from 'yeoman-environment';
4
+ import type { BaseEnvironmentOptions, BaseGenerator, GetGeneratorConstructor, GetGeneratorOptions, PromptAnswers, LookupOptions } from '@yeoman/types';
6
5
  import { type MemFsEditorFile, type MemFsEditor } from 'mem-fs-editor';
6
+ import type { DefaultGeneratorApi, DefaultEnvironmentApi } from '../types/type-helpers.js';
7
7
  import RunResult, { type RunResultOptions } from './run-result.js';
8
- import { type Dependency, type YeomanTest, type GeneratorFactory } from './helpers.js';
8
+ import { type Dependency, type YeomanTest } from './helpers.js';
9
9
  import { type DummyPromptOptions } from './adapter.js';
10
- import type { DefaultGeneratorApi, DefaultEnvironmentApi } from './type-helpers.js';
11
10
  /**
12
11
  * Provides settings for creating a `RunContext`.
13
12
  */
@@ -33,7 +32,7 @@ export type RunContextSettings = {
33
32
  namespace?: string;
34
33
  };
35
34
  type PromiseRunResult<GeneratorType extends BaseGenerator> = Promise<RunResult<GeneratorType>>;
36
- type MockedGeneratorFactory<GenParameter extends BaseGenerator = DefaultGeneratorApi> = (GeneratorClass?: GetGeneratorConstructor<GenParameter>) => GenParameter;
35
+ type MockedGeneratorFactory<GenParameter extends BaseGenerator = DefaultGeneratorApi> = (GeneratorClass?: GetGeneratorConstructor<GenParameter>) => GetGeneratorConstructor<GenParameter>;
37
36
  type EnvOptions = BaseEnvironmentOptions & {
38
37
  createEnv?: any;
39
38
  };
@@ -77,7 +76,7 @@ export declare class RunContextBase<GeneratorType extends BaseGenerator = Defaul
77
76
  * @param settings
78
77
  * @return {this}
79
78
  */
80
- constructor(generatorType?: string | GeneratorFactory<GeneratorType>, settings?: RunContextSettings, envOptions?: EnvOptions, helpers?: YeomanTest);
79
+ constructor(generatorType?: string | GetGeneratorConstructor<GeneratorType>, settings?: RunContextSettings, envOptions?: EnvOptions, helpers?: YeomanTest);
81
80
  /**
82
81
  * Run the generator on the environment and promises a RunResult instance.
83
82
  * @return {PromiseRunResult} Promise a RunResult instance.
@@ -296,16 +296,11 @@ export class RunContextBase extends EventEmitter {
296
296
  assert(Array.isArray(dependencies), 'dependencies should be an array');
297
297
  return this.onEnvironment(async (env) => {
298
298
  for (const dependency of dependencies) {
299
- if (Array.isArray(dependency)) {
300
- if (typeof dependency[0] === 'string') {
301
- env.register(...dependency);
302
- }
303
- else {
304
- env.registerStub(...dependency);
305
- }
299
+ if (typeof dependency === 'string') {
300
+ env.register(dependency);
306
301
  }
307
302
  else {
308
- env.register(dependency);
303
+ env.register(...dependency);
309
304
  }
310
305
  }
311
306
  });
@@ -332,9 +327,9 @@ export class RunContextBase extends EventEmitter {
332
327
  */
333
328
  withMockedGenerators(namespaces) {
334
329
  assert(Array.isArray(namespaces), 'namespaces should be an array');
335
- const dependencies = namespaces.map(namespace => [this.mockedGeneratorFactory(), namespace]);
336
- const entries = dependencies.map(([generator, namespace]) => [namespace, generator]);
337
- Object.assign(this.mockedGenerators, Object.fromEntries(entries));
330
+ const mockedGenerators = Object.fromEntries(namespaces.map(namespace => [namespace, this.mockedGeneratorFactory()]));
331
+ const dependencies = Object.entries(mockedGenerators).map(([namespace, mock]) => [mock, { namespace }]);
332
+ Object.assign(this.mockedGenerators, mockedGenerators);
338
333
  return this.withGenerators(dependencies);
339
334
  }
340
335
  /**
@@ -501,11 +496,11 @@ export class RunContextBase extends EventEmitter {
501
496
  const { namespace = typeof this.Generator === 'string' ? this.env.namespace(this.Generator) : 'gen:test' } = this.settings;
502
497
  if (typeof this.Generator === 'string' && namespace !== this.Generator) {
503
498
  // Generator is a file path, it should be registered.
504
- this.env.register(this.Generator, namespace);
499
+ this.env.register(this.Generator, { namespace });
505
500
  }
506
501
  else if (typeof this.Generator !== 'string') {
507
502
  const { resolved } = this.settings;
508
- this.env.registerStub(this.Generator, namespace, resolved);
503
+ this.env.register(this.Generator, { namespace, resolved });
509
504
  }
510
505
  this.generator = await this.env.create(namespace, this.args, {
511
506
  force: true,
@@ -1,9 +1,9 @@
1
1
  import type { Store } from 'mem-fs';
2
2
  import { type MemFsEditorFile, type MemFsEditor } from 'mem-fs-editor';
3
- import type { BaseEnvironmentOptions, BaseGenerator } from '@yeoman/types';
3
+ import type { BaseEnvironmentOptions, BaseGenerator, GetGeneratorConstructor } from '@yeoman/types';
4
+ import type { DefaultEnvironmentApi, DefaultGeneratorApi } from '../types/type-helpers.js';
4
5
  import { type RunContextSettings } from './run-context.js';
5
- import { type GeneratorFactory, type YeomanTest } from './helpers.js';
6
- import type { DefaultEnvironmentApi, DefaultGeneratorApi } from './type-helpers.js';
6
+ import { type YeomanTest } from './helpers.js';
7
7
  /**
8
8
  * Provides options for `RunResult`s.
9
9
  */
@@ -51,7 +51,7 @@ export default class RunResult<GeneratorType extends BaseGenerator = BaseGenerat
51
51
  * Create another RunContext reusing the settings.
52
52
  * See helpers.create api
53
53
  */
54
- create<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(GeneratorOrNamespace: string | GeneratorFactory<GeneratorType>, settings?: RunContextSettings, envOptions?: BaseEnvironmentOptions): import("./run-context.js").default<GeneratorType>;
54
+ create<GeneratorType extends BaseGenerator = DefaultGeneratorApi>(GeneratorOrNamespace: string | GetGeneratorConstructor<GeneratorType>, settings?: RunContextSettings, envOptions?: BaseEnvironmentOptions): import("./run-context.js").default<GeneratorType>;
55
55
  /**
56
56
  * Return an object with fs changes.
57
57
  * @param {Function} filter - parameter forwarded to mem-fs-editor#dump
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yeoman-test",
3
- "version": "8.0.0-beta.2",
3
+ "version": "8.0.0-beta.4",
4
4
  "description": "Test utilities for Yeoman generators",
5
5
  "keywords": [
6
6
  "yeoman",
@@ -17,7 +17,8 @@
17
17
  },
18
18
  "types": "./dist/index.d.ts",
19
19
  "files": [
20
- "dist"
20
+ "dist",
21
+ "types"
21
22
  ],
22
23
  "scripts": {
23
24
  "build": "tsc",
@@ -29,7 +30,7 @@
29
30
  "precommit": "lint-staged",
30
31
  "prepare": "npm run build",
31
32
  "pretest": "xo",
32
- "test": "c8 esmocha"
33
+ "test": "c8 esmocha --forbid-only"
33
34
  },
34
35
  "config": {
35
36
  "doc_path": "../yeoman-test-doc"
@@ -58,13 +59,13 @@
58
59
  "tui-jsdoc-template": "^1.2.2",
59
60
  "typescript": "^5.0.4",
60
61
  "xo": "^0.54.2",
61
- "yeoman-environment": "^3.16.1",
62
+ "yeoman-environment": "^3.17.0",
62
63
  "yeoman-generator": "^5.8.0"
63
64
  },
64
65
  "peerDependencies": {
65
- "@yeoman/types": "^0.3.0",
66
- "yeoman-environment": "^3.13.0 || ^4.0.0-alpha.0",
67
- "yeoman-generator": "^5.8.0 || ^6.0.0-beta.1"
66
+ "@yeoman/types": "^0.4.0",
67
+ "yeoman-environment": "^3.17.0 || ^4.0.0-alpha.5",
68
+ "yeoman-generator": "^5.8.0 || ^6.0.0-beta.3"
68
69
  },
69
70
  "peerDependenciesMeta": {
70
71
  "yeoman-environment": {
@@ -0,0 +1,17 @@
1
+ import type { BaseGenerator, BaseEnvironment } from '@yeoman/types';
2
+ import type GeneratorImplementation from 'yeoman-generator';
3
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
4
+ // @ts-ignore
5
+ import type EnvironmentImplementation from 'yeoman-environment';
6
+ import type { IfAny } from 'type-fest';
7
+
8
+ export type DefaultGeneratorApi = IfAny<
9
+ typeof GeneratorImplementation,
10
+ BaseGenerator,
11
+ typeof GeneratorImplementation extends BaseGenerator ? typeof GeneratorImplementation : BaseGenerator
12
+ >;
13
+ export type DefaultEnvironmentApi = IfAny<
14
+ typeof EnvironmentImplementation,
15
+ BaseEnvironment,
16
+ typeof EnvironmentImplementation extends BaseEnvironment ? typeof EnvironmentImplementation : BaseEnvironment
17
+ >;
@@ -1,6 +0,0 @@
1
- import { type BaseGenerator, type BaseEnvironment } from '@yeoman/types';
2
- import type GeneratorImplementation from 'yeoman-generator';
3
- import type EnvironmentImplementation from 'yeoman-environment';
4
- import type { IfAny } from 'type-fest';
5
- export type DefaultGeneratorApi = IfAny<typeof GeneratorImplementation, BaseGenerator, typeof GeneratorImplementation extends BaseGenerator ? typeof GeneratorImplementation : BaseGenerator>;
6
- export type DefaultEnvironmentApi = IfAny<typeof EnvironmentImplementation, BaseEnvironment, typeof EnvironmentImplementation extends BaseEnvironment ? typeof EnvironmentImplementation : BaseEnvironment>;
@@ -1 +0,0 @@
1
- export {};