Skip to content

Commit

Permalink
switch to @yeoman/types 1.0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
mshima committed May 19, 2023
1 parent 6b945f4 commit 46bd70f
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 33 deletions.
18 changes: 9 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@
"tui-jsdoc-template": "^1.2.2",
"typescript": "^5.0.4",
"xo": "^0.54.2",
"yeoman-environment": "^3.18.2",
"yeoman-environment": "^3.18.3",
"yeoman-generator": "^5.8.0"
},
"peerDependencies": {
"@yeoman/types": "^1.0.0",
"yeoman-environment": "^3.18.0 || ^4.0.0-alpha.6",
"@yeoman/types": "^1.0.1",
"yeoman-environment": "^3.18.3 || ^4.0.0-alpha.6",
"yeoman-generator": "^5.8.0 || ^6.0.0-beta.4"
},
"peerDependenciesMeta": {
Expand Down
19 changes: 16 additions & 3 deletions src/default-environment.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
export const defaultEnvironment = async () => {
const dynamicEnv = await import('yeoman-environment');
return dynamicEnv.createEnv ?? dynamicEnv.default.createEnv;
/**
* @param {import('@yeoman/types').BaseEnvironmentOptions} options
* @returns {import('@yeoman/types').BaseEnvironment}
*/
export const createEnv = async options => {
const DynamicEnv = await import('yeoman-environment');
if (typeof DynamicEnv === 'function') {
return new DynamicEnv(options);
}

if (typeof DynamicEnv.default === 'function') {
// eslint-disable-next-line new-cap
return new DynamicEnv.default(options);
}

throw new Error(`'yeoman-environment' didn't returned a constructor`);
};
17 changes: 10 additions & 7 deletions src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import process from 'node:process';
import _ from 'lodash';
import { spy as sinonSpy, stub as sinonStub } from 'sinon';
import type {
BaseEnvironment,
BaseEnvironmentOptions,
BaseGenerator,
BaseGeneratorOptions,
Expand All @@ -18,7 +19,7 @@ import type { DefaultEnvironmentApi, DefaultGeneratorApi } from '../types/type-h
import { DummyPrompt, type DummyPromptOptions, TestAdapter } from './adapter.js';
import RunContext, { BasicRunContext, type RunContextSettings } from './run-context.js';
import testContext from './test-context.js';
import { defaultEnvironment } from './default-environment.js';
import { createEnv } from './default-environment.js';

let GeneratorImplementation;
try {
Expand All @@ -28,6 +29,8 @@ try {

const { cloneDeep } = _;

export type CreateEnv = (options: BaseEnvironmentOptions) => Promise<BaseEnvironment>;

/**
* Dependencies can be path (autodiscovery) or an array [<generator>, <name>]
*/
Expand Down Expand Up @@ -133,7 +136,7 @@ export class YeomanTest {
* @param generator or environment
*/
restorePrompt(envOrGenerator: BaseGenerator | DefaultEnvironmentApi) {
const environment: DefaultEnvironmentApi = (envOrGenerator as any).env ?? envOrGenerator;
const environment: DefaultEnvironmentApi = (envOrGenerator as BaseGenerator).env ?? envOrGenerator;
environment.adapter.close();
}

Expand Down Expand Up @@ -221,7 +224,7 @@ export class YeomanTest {
options?: GetGeneratorOptions<GeneratorType>,
localConfigOnly = true,
): Promise<GeneratorType> {
const env = await this.createEnv([], { sharedOptions: { localConfigOnly } });
const env = await this.createEnv({ sharedOptions: { localConfigOnly } });
for (const dependency of dependencies) {
if (typeof dependency === 'string') {
env.register(dependency);
Expand Down Expand Up @@ -249,8 +252,8 @@ export class YeomanTest {
* });
*/

async createEnv(...args: any[]): Promise<DefaultEnvironmentApi> {
return (await defaultEnvironment())(...args);
async createEnv(options: BaseEnvironmentOptions): Promise<DefaultEnvironmentApi> {
return createEnv(options);
}

/**
Expand All @@ -261,7 +264,7 @@ export class YeomanTest {
* const env = createTestEnv(require('yeoman-environment').createEnv);
*/

async createTestEnv(envContructor = this.createEnv, options: BaseEnvironmentOptions = { localConfigOnly: true }) {
async createTestEnv(envContructor: CreateEnv = this.createEnv, options: BaseEnvironmentOptions = { localConfigOnly: true }) {
let envOptions = cloneDeep(this.environmentOptions ?? {});
if (typeof options === 'boolean') {
envOptions = {
Expand All @@ -285,7 +288,7 @@ export class YeomanTest {
};
}

return envContructor([], envOptions, new TestAdapter() as any);
return envContructor({ ...envOptions, adapter: new TestAdapter() });
}

/**
Expand Down
8 changes: 4 additions & 4 deletions src/run-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import type {
import { create as createMemFsEditor, type MemFsEditorFile, type MemFsEditor } from 'mem-fs-editor';
import type { DefaultGeneratorApi, DefaultEnvironmentApi } from '../types/type-helpers.js';
import RunResult, { type RunResultOptions } from './run-result.js';
import defaultHelpers, { type Dependency, type YeomanTest } from './helpers.js';
import defaultHelpers, { type CreateEnv, type Dependency, type YeomanTest } from './helpers.js';
import { type DummyPromptOptions } from './adapter.js';
import testContext from './test-context.js';

Expand Down Expand Up @@ -62,7 +62,7 @@ type PromiseRunResult<GeneratorType extends BaseGenerator> = Promise<RunResult<G
type MockedGeneratorFactory<GenParameter extends BaseGenerator = DefaultGeneratorApi> = (
GeneratorClass?: GetGeneratorConstructor<GenParameter>,
) => GetGeneratorConstructor<GenParameter>;
type EnvOptions = BaseEnvironmentOptions & { createEnv?: any };
type EnvOptions = BaseEnvironmentOptions & { createEnv?: CreateEnv };

export class RunContextBase<GeneratorType extends BaseGenerator = DefaultGeneratorApi> extends EventEmitter {
readonly mockedGenerators: Record<string, BaseGenerator> = {};
Expand Down Expand Up @@ -504,7 +504,7 @@ export class RunContextBase<GeneratorType extends BaseGenerator = DefaultGenerat
*/
commitFiles(): this {
return this.onTargetDirectory(async function () {
await (this.editor as any).commit();
await this.editor.commit();
});
}

Expand Down Expand Up @@ -632,7 +632,7 @@ export class RunContextBase<GeneratorType extends BaseGenerator = DefaultGenerat
this.env.register(this.Generator, { namespace });
} else if (typeof this.Generator !== 'string') {
const { resolved } = this.settings;
this.env.register(this.Generator as any, { namespace, resolved });
this.env.register(this.Generator, { namespace, resolved });
}

this.generator = await this.env.create(namespace, {
Expand Down
16 changes: 9 additions & 7 deletions test/helpers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import process from 'node:process';
import { createRequire } from 'node:module';
import { existsSync } from 'node:fs';
import { assert as sinonAssert, spy as sinonSpy, stub as sinonStub } from 'sinon';
import yeoman from 'yeoman-environment';
import Generator from 'yeoman-generator';
import { expect } from 'esmocha';
import type Environment from 'yeoman-environment';
import { createEnv } from '../src/default-environment.js';
import helpers from '../src/helpers.js';
import { TestAdapter } from '../src/adapter.js';
import RunContext from '../src/run-context.js';
Expand All @@ -17,7 +17,7 @@ const require = createRequire(import.meta.url);
const __dirname = dirname(fileURLToPath(import.meta.url));

const { resolve, join } = path;
const env = yeoman.createEnv(undefined, undefined, new TestAdapter() as any);
const env = await createEnv({ adapter: new TestAdapter() });

describe('yeoman-test', function () {
beforeEach(function () {
Expand All @@ -28,19 +28,21 @@ describe('yeoman-test', function () {

describe('.createGenerator()', function () {
it('create a new generator', async function () {
const generator = await helpers.createGenerator('unicorn:app', [[this.StubGenerator, 'unicorn:app']]);
const generator = await helpers.createGenerator('unicorn:app', [[this.StubGenerator, { namespace: 'unicorn:app' }]]);

assert.ok(generator instanceof this.StubGenerator);
});

it('pass args params to the generator', async function () {
const generator = await helpers.createGenerator('unicorn:app', [[this.StubGenerator, 'unicorn:app']], ['temp']);
const generator = await helpers.createGenerator('unicorn:app', [[this.StubGenerator, { namespace: 'unicorn:app' }]], ['temp']);

assert.deepEqual(generator.args, ['temp']);
});

it('pass options param to the generator', async function () {
const generator = await helpers.createGenerator('unicorn:app', [[this.StubGenerator, 'unicorn:app']], ['temp'], { ui: 'tdd' });
const generator = await helpers.createGenerator('unicorn:app', [[this.StubGenerator, { namespace: 'unicorn:app' }]], ['temp'], {
ui: 'tdd',
});

assert.equal(generator.options.ui, 'tdd');
});
Expand Down Expand Up @@ -409,11 +411,11 @@ describe('yeoman-test', function () {
});
it('calls mocked createEnv with newErrorHandler option', async () => {
assert.equal(await helpers.createTestEnv(), createEnvReturn);
assert.equal(mockedCreateEnv.getCall(0).args[1].newErrorHandler, true);
assert.equal(mockedCreateEnv.getCall(0).args[0].newErrorHandler, true);
});
it('calls mocked createEnv with sharedOptions.localConfigOnly option', async () => {
assert.equal(await helpers.createTestEnv(), createEnvReturn);
assert.equal(mockedCreateEnv.getCall(0).args[1].sharedOptions.localConfigOnly, true);
assert.equal(mockedCreateEnv.getCall(0).args[0].sharedOptions.localConfigOnly, true);
});
});
describe('.prepareTemporaryFolder', () => {
Expand Down

0 comments on commit 46bd70f

Please sign in to comment.