yeoman-test 8.0.0-beta.1 → 8.0.0-beta.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/dist/default-environment.d.ts +1 -0
- package/dist/default-environment.js +4 -0
- package/dist/helpers.d.ts +6 -15
- package/dist/helpers.js +15 -34
- package/dist/run-context.d.ts +5 -6
- package/dist/run-context.js +9 -17
- package/dist/run-result.d.ts +4 -4
- package/package.json +10 -9
- package/types/type-helpers.d.ts +17 -0
- package/dist/type-helpers.d.ts +0 -6
- package/dist/type-helpers.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function defaultEnvironment(): Promise<any>;
|
package/dist/helpers.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
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 = string | Parameters<DefaultEnvironmentApi['
|
|
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
|
|
@@ -66,11 +65,11 @@ export declare class YeomanTest {
|
|
|
66
65
|
/**
|
|
67
66
|
* Create a mocked generator
|
|
68
67
|
*/
|
|
69
|
-
createMockedGenerator(GeneratorClass
|
|
68
|
+
createMockedGenerator(GeneratorClass?: any): SinonSpiedInstance<DefaultGeneratorApi>;
|
|
70
69
|
/**
|
|
71
70
|
* Create a simple, dummy generator
|
|
72
71
|
*/
|
|
73
|
-
createDummyGenerator<GenParameter extends BaseGenerator = DefaultGeneratorApi>(Generator?: GetGeneratorConstructor<GenParameter>, contents?: Record<string, (...args: any[]) => void>):
|
|
72
|
+
createDummyGenerator<GenParameter extends BaseGenerator = DefaultGeneratorApi>(Generator?: GetGeneratorConstructor<GenParameter>, contents?: Record<string, (...args: any[]) => void>): new (...args: any[]) => GenParameter;
|
|
74
73
|
/**
|
|
75
74
|
* Create a generator, using the given dependencies and controller arguments
|
|
76
75
|
* Dependecies can be path (autodiscovery) or an array [{generator}, {name}]
|
|
@@ -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
|
*
|
|
@@ -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 |
|
|
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 |
|
|
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,13 @@ 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';
|
|
11
|
+
let GeneratorImplementation;
|
|
12
|
+
try {
|
|
13
|
+
const GeneratorImport = await import('yeoman-generator');
|
|
14
|
+
GeneratorImplementation = GeneratorImport.default ?? GeneratorImport;
|
|
15
|
+
}
|
|
16
|
+
catch { }
|
|
10
17
|
const { cloneDeep } = _;
|
|
11
18
|
/**
|
|
12
19
|
* Collection of unit test helpers. (mostly related to Mocha syntax)
|
|
@@ -107,11 +114,7 @@ export class YeomanTest {
|
|
|
107
114
|
/**
|
|
108
115
|
* Create a mocked generator
|
|
109
116
|
*/
|
|
110
|
-
|
|
111
|
-
if (!GeneratorClass) {
|
|
112
|
-
const GeneratorImplementation = await import('yeoman-generator');
|
|
113
|
-
GeneratorClass = (GeneratorImplementation.default ?? GeneratorImplementation);
|
|
114
|
-
}
|
|
117
|
+
createMockedGenerator(GeneratorClass = GeneratorImplementation) {
|
|
115
118
|
class MockedGenerator extends GeneratorClass {
|
|
116
119
|
}
|
|
117
120
|
const generator = sinonSpy(MockedGenerator);
|
|
@@ -125,17 +128,12 @@ export class YeomanTest {
|
|
|
125
128
|
/**
|
|
126
129
|
* Create a simple, dummy generator
|
|
127
130
|
*/
|
|
128
|
-
|
|
131
|
+
createDummyGenerator(Generator = GeneratorImplementation, contents = {
|
|
129
132
|
test() {
|
|
130
133
|
this.shouldRun = true;
|
|
131
134
|
},
|
|
132
135
|
}) {
|
|
133
|
-
|
|
134
|
-
const GeneratorImplementation = await import('yeoman-generator');
|
|
135
|
-
Generator = (GeneratorImplementation.default ?? GeneratorImplementation);
|
|
136
|
-
}
|
|
137
|
-
const GeneratorConstructor = Generator;
|
|
138
|
-
class DummyGenerator extends GeneratorConstructor {
|
|
136
|
+
class DummyGenerator extends Generator {
|
|
139
137
|
constructor(...args) {
|
|
140
138
|
const optIndex = Array.isArray(args[0]) ? 1 : 0;
|
|
141
139
|
args[optIndex] = args[optIndex] ?? {};
|
|
@@ -174,30 +172,15 @@ export class YeomanTest {
|
|
|
174
172
|
*/
|
|
175
173
|
async createGenerator(name, dependencies, args, options, localConfigOnly = true) {
|
|
176
174
|
const env = await this.createEnv([], { sharedOptions: { localConfigOnly } });
|
|
177
|
-
this.registerDependencies(env, dependencies);
|
|
178
|
-
return env.create(name, args, options);
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* @deprecated
|
|
182
|
-
* Register a list of dependent generators into the provided env.
|
|
183
|
-
* Dependecies can be path (autodiscovery) or an array [{generator}, {name}]
|
|
184
|
-
*
|
|
185
|
-
* @param dependencies - paths to the generators dependencies
|
|
186
|
-
*/
|
|
187
|
-
registerDependencies(env, dependencies) {
|
|
188
175
|
for (const dependency of dependencies) {
|
|
189
|
-
if (
|
|
190
|
-
|
|
191
|
-
env.register(...dependency);
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
env.registerStub(...dependency);
|
|
195
|
-
}
|
|
176
|
+
if (typeof dependency === 'string') {
|
|
177
|
+
env.register(dependency);
|
|
196
178
|
}
|
|
197
179
|
else {
|
|
198
|
-
env.register(dependency);
|
|
180
|
+
env.register(...dependency);
|
|
199
181
|
}
|
|
200
182
|
}
|
|
183
|
+
return env.create(name, args, options);
|
|
201
184
|
}
|
|
202
185
|
/**
|
|
203
186
|
* Shortcut to the Environment's createEnv.
|
|
@@ -215,9 +198,7 @@ export class YeomanTest {
|
|
|
215
198
|
* });
|
|
216
199
|
*/
|
|
217
200
|
async createEnv(...args) {
|
|
218
|
-
|
|
219
|
-
const createEnv = dynamicEnv.createEnv ?? dynamicEnv.default.createEnv;
|
|
220
|
-
return createEnv(...args);
|
|
201
|
+
return (await defaultEnvironment())(...args);
|
|
221
202
|
}
|
|
222
203
|
/**
|
|
223
204
|
* Creates a test environment.
|
package/dist/run-context.d.ts
CHANGED
|
@@ -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
|
|
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>) =>
|
|
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 |
|
|
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.
|
package/dist/run-context.js
CHANGED
|
@@ -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 (
|
|
300
|
-
|
|
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,13 +327,10 @@ export class RunContextBase extends EventEmitter {
|
|
|
332
327
|
*/
|
|
333
328
|
withMockedGenerators(namespaces) {
|
|
334
329
|
assert(Array.isArray(namespaces), 'namespaces should be an array');
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
Object.assign(this.mockedGenerators, Object.fromEntries(entries));
|
|
340
|
-
this.withGenerators(dependencies);
|
|
341
|
-
});
|
|
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);
|
|
333
|
+
return this.withGenerators(dependencies);
|
|
342
334
|
}
|
|
343
335
|
/**
|
|
344
336
|
* Mock the local configuration with the provided config
|
|
@@ -504,11 +496,11 @@ export class RunContextBase extends EventEmitter {
|
|
|
504
496
|
const { namespace = typeof this.Generator === 'string' ? this.env.namespace(this.Generator) : 'gen:test' } = this.settings;
|
|
505
497
|
if (typeof this.Generator === 'string' && namespace !== this.Generator) {
|
|
506
498
|
// Generator is a file path, it should be registered.
|
|
507
|
-
this.env.register(this.Generator, namespace);
|
|
499
|
+
this.env.register(this.Generator, { namespace });
|
|
508
500
|
}
|
|
509
501
|
else if (typeof this.Generator !== 'string') {
|
|
510
502
|
const { resolved } = this.settings;
|
|
511
|
-
this.env.
|
|
503
|
+
this.env.register(this.Generator, { namespace, resolved });
|
|
512
504
|
}
|
|
513
505
|
this.generator = await this.env.create(namespace, this.args, {
|
|
514
506
|
force: true,
|
package/dist/run-result.d.ts
CHANGED
|
@@ -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
|
|
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 |
|
|
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.
|
|
3
|
+
"version": "8.0.0-beta.3",
|
|
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"
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
"@types/sinon": "^10.0.13",
|
|
50
51
|
"c8": "^7.13.0",
|
|
51
52
|
"coveralls": "^3.1.1",
|
|
52
|
-
"esmocha": "^0.1
|
|
53
|
+
"esmocha": "^1.0.1",
|
|
53
54
|
"husky": "^8.0.2",
|
|
54
55
|
"jsdoc": "^3.6.10",
|
|
55
56
|
"lint-staged": "^13.0.3",
|
|
@@ -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.
|
|
62
|
-
"yeoman-generator": "^
|
|
62
|
+
"yeoman-environment": "^3.17.0",
|
|
63
|
+
"yeoman-generator": "^5.8.0"
|
|
63
64
|
},
|
|
64
65
|
"peerDependencies": {
|
|
65
|
-
"@yeoman/types": "^0.
|
|
66
|
-
"yeoman-environment": "
|
|
67
|
-
"yeoman-generator": "
|
|
66
|
+
"@yeoman/types": "^0.4.0",
|
|
67
|
+
"yeoman-environment": ">=3.17.0 < 5.0.0",
|
|
68
|
+
"yeoman-generator": ">=5.8.0 < 7.0.0"
|
|
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
|
+
>;
|
package/dist/type-helpers.d.ts
DELETED
|
@@ -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>;
|
package/dist/type-helpers.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|