@yeoman/types 0.2.0 → 0.4.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.
- package/package.json +4 -3
- package/types/environment/environment.d.ts +83 -14
- package/types/environment/methods-options.d.ts +86 -0
- package/types/generator/generator-options.d.ts +2 -2
- package/types/generator/generator.d.ts +4 -0
- package/types/generator/utils.d.ts +5 -4
- package/types/index.d.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yeoman/types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Common API for yeoman's generator/environment stack",
|
|
6
6
|
"keywords": [
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"main": "",
|
|
16
16
|
"types": "./types/index.d.ts",
|
|
17
17
|
"files": [
|
|
18
|
-
"types"
|
|
18
|
+
"types",
|
|
19
|
+
"!**/*.test.ts"
|
|
19
20
|
],
|
|
20
21
|
"scripts": {
|
|
21
22
|
"build": "tsc",
|
|
@@ -55,5 +56,5 @@
|
|
|
55
56
|
"access": "public",
|
|
56
57
|
"registry": "https://registry.npmjs.org/"
|
|
57
58
|
},
|
|
58
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "fddebd6424725b9636af96a643a25f00f7314a77"
|
|
59
60
|
}
|
|
@@ -2,17 +2,18 @@ import type { Transform } from 'node:stream';
|
|
|
2
2
|
import type { Store } from 'mem-fs';
|
|
3
3
|
import type { MemFsEditorFile } from 'mem-fs-editor';
|
|
4
4
|
|
|
5
|
-
import type {
|
|
6
|
-
import type { BaseGenerator } from '../generator/generator.js';
|
|
5
|
+
import type { BaseGeneratorOptions } from '../generator/generator-options.js';
|
|
6
|
+
import type { BaseGenerator, BaseGeneratorConstructor } from '../generator/generator.js';
|
|
7
7
|
import type { GetGeneratorConstructor, GetGeneratorOptions } from '../generator/utils.js';
|
|
8
8
|
import type { InputOutputAdapter } from './adapter.js';
|
|
9
|
+
import type { GeneratorMeta, LookupGeneratorMeta, LookupOptions, BaseGeneratorMeta } from './methods-options.js';
|
|
9
10
|
|
|
10
11
|
export type EnvironmentConstructor<A extends InputOutputAdapter = InputOutputAdapter> = new (
|
|
11
12
|
options?: BaseEnvironmentOptions,
|
|
12
13
|
adapter?: A,
|
|
13
14
|
) => BaseEnvironment<A>;
|
|
14
15
|
|
|
15
|
-
export type BaseEnvironmentOptions =
|
|
16
|
+
export type BaseEnvironmentOptions = BaseGeneratorOptions & {
|
|
16
17
|
/**
|
|
17
18
|
* The working-directory of the environment.
|
|
18
19
|
*/
|
|
@@ -26,7 +27,7 @@ export type BaseEnvironmentOptions = GeneratorBaseOptions & {
|
|
|
26
27
|
/**
|
|
27
28
|
* Options to pass to every generator instantiated by this Environment.
|
|
28
29
|
*/
|
|
29
|
-
sharedOptions?:
|
|
30
|
+
sharedOptions?: BaseGeneratorOptions;
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* `mem-fs` Store.
|
|
@@ -41,7 +42,7 @@ export type ApplyTransformsOptions = {
|
|
|
41
42
|
streamOptions: Parameters<Store<MemFsEditorFile>['stream']>[0];
|
|
42
43
|
};
|
|
43
44
|
|
|
44
|
-
export type BaseEnvironment<A = InputOutputAdapter, S extends Store = Store
|
|
45
|
+
export type BaseEnvironment<A = InputOutputAdapter, S extends Store<MemFsEditorFile> = Store<MemFsEditorFile>> = {
|
|
45
46
|
cwd: string;
|
|
46
47
|
adapter: A;
|
|
47
48
|
sharedFs: S;
|
|
@@ -50,16 +51,28 @@ export type BaseEnvironment<A = InputOutputAdapter, S extends Store = Store> = {
|
|
|
50
51
|
|
|
51
52
|
applyTransforms(transformStreams: Transform[], options?: ApplyTransformsOptions): Promise<void>;
|
|
52
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Gets a single constructor of a generator from the registered list of generators.
|
|
56
|
+
*
|
|
57
|
+
* The lookup is based on generator's namespace, "walking up" the namespaces until a matching is found.
|
|
58
|
+
* Eg. if an `angular:common` namespace is registered, and we try to get `angular:common:all`,
|
|
59
|
+
* then we get `angular:common` as a fallback (unless an `angular:common:all` generator is registered).
|
|
60
|
+
*
|
|
61
|
+
* @param namespaceOrPath The namespace of the generator or the path to a generator.
|
|
62
|
+
* @returns The constructor of the generator registered under the namespace.
|
|
63
|
+
*/
|
|
64
|
+
get<C extends BaseGeneratorConstructor = BaseGeneratorConstructor>(namespaceOrPath: string): Promise<C | undefined>;
|
|
65
|
+
|
|
53
66
|
create<G extends BaseGenerator = BaseGenerator>(
|
|
54
67
|
namespaceOrPath: string | GetGeneratorConstructor<G>,
|
|
55
68
|
args: string[],
|
|
56
|
-
options?: Partial<Omit<GetGeneratorOptions<G>, 'env' | 'resolved' | '
|
|
69
|
+
options?: Partial<Omit<GetGeneratorOptions<G>, 'env' | 'resolved' | 'namespace'>>,
|
|
57
70
|
): Promise<G>;
|
|
58
71
|
|
|
59
72
|
instantiate<G extends BaseGenerator = BaseGenerator>(
|
|
60
73
|
generator: GetGeneratorConstructor<G>,
|
|
61
74
|
args: string[],
|
|
62
|
-
options?: Partial<Omit<GetGeneratorOptions<G>, 'env' | 'resolved' | '
|
|
75
|
+
options?: Partial<Omit<GetGeneratorOptions<G>, 'env' | 'resolved' | 'namespace'>>,
|
|
63
76
|
): Promise<G>;
|
|
64
77
|
|
|
65
78
|
/**
|
|
@@ -70,6 +83,30 @@ export type BaseEnvironment<A = InputOutputAdapter, S extends Store = Store> = {
|
|
|
70
83
|
*/
|
|
71
84
|
namespace(filePath: string, lookups?: string[]): string;
|
|
72
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Creates an alias.
|
|
88
|
+
*
|
|
89
|
+
* Alias allows the `get()` and `lookup()` methods to search in alternate filepath for a given namespaces.
|
|
90
|
+
* It's used for example to map `generator-*` npm package to their namespace equivalent (without the generator- prefix),
|
|
91
|
+
* or to default a single namespace like `angular` to `angular:app` or `angular:all`.
|
|
92
|
+
*
|
|
93
|
+
* If multiple aliases are defined, then the replacement is recursive, replacing each alias in reverse order.
|
|
94
|
+
*
|
|
95
|
+
* An alias can be a single String or a Regular Expression.
|
|
96
|
+
* The finding is done based on .match().
|
|
97
|
+
*
|
|
98
|
+
* @param match The name to match.
|
|
99
|
+
* @param value The replacement for the specified `match`.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* env.alias(/^([a-zA-Z0-9:\*]+)$/, 'generator-$1');
|
|
103
|
+
* env.alias(/^([^:]+)$/, '$1:app');
|
|
104
|
+
* env.alias(/^([^:]+)$/, '$1:all');
|
|
105
|
+
* env.alias('foo');
|
|
106
|
+
* // => generator-foo:all
|
|
107
|
+
*/
|
|
108
|
+
alias(match: string | RegExp, value: string): void;
|
|
109
|
+
|
|
73
110
|
/**
|
|
74
111
|
* Gets the version of this `Environment` object.
|
|
75
112
|
*/
|
|
@@ -94,20 +131,17 @@ export type BaseEnvironment<A = InputOutputAdapter, S extends Store = Store> = {
|
|
|
94
131
|
* This generator is stored under the provided `namespace` or, if not specified, a default namespace format.
|
|
95
132
|
*
|
|
96
133
|
* @param filePath The filepath to the generator or an npm package name.
|
|
97
|
-
* @param
|
|
98
|
-
* @param packagePath The path to the npm package of the generator.
|
|
134
|
+
* @param meta Generator metadata.
|
|
99
135
|
*/
|
|
100
|
-
register(filePath: string,
|
|
136
|
+
register(filePath: string, meta?: Partial<BaseGeneratorMeta>): void;
|
|
101
137
|
|
|
102
138
|
/**
|
|
103
139
|
* Registers a stubbed generator to this environment.
|
|
104
140
|
*
|
|
105
141
|
* @param generator The generator constructor.
|
|
106
|
-
* @param
|
|
107
|
-
* @param resolved The file-path to the generator.
|
|
108
|
-
* @param packagePath The path to the npm package of the generator.
|
|
142
|
+
* @param meta Generator metadata.
|
|
109
143
|
*/
|
|
110
|
-
|
|
144
|
+
register(generator: unknown, meta: BaseGeneratorMeta): void;
|
|
111
145
|
|
|
112
146
|
/**
|
|
113
147
|
* Queue tasks
|
|
@@ -123,4 +157,39 @@ export type BaseEnvironment<A = InputOutputAdapter, S extends Store = Store> = {
|
|
|
123
157
|
* @param before
|
|
124
158
|
*/
|
|
125
159
|
addPriority(priority: string, before?: string): void;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Searches for generators and their sub-generators.
|
|
163
|
+
*
|
|
164
|
+
* A generator is a `:lookup/:name/index.js` file placed inside an npm package.
|
|
165
|
+
*
|
|
166
|
+
* Default lookups are:
|
|
167
|
+
* - `./`
|
|
168
|
+
* - `./generators/`
|
|
169
|
+
* - `./lib/generators/`
|
|
170
|
+
*
|
|
171
|
+
* So the index file `node_modules/generator-dummy/lib/generators/yo/index.js` would be registered as `dummy:yo` generator.
|
|
172
|
+
*
|
|
173
|
+
* @param options The options for the lookup.
|
|
174
|
+
* @returns A list of generators.
|
|
175
|
+
*/
|
|
176
|
+
lookup(options?: LookupOptions): Promise<LookupGeneratorMeta[]>;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Checks whether a package with the specified `packageNamespace` has been registered.
|
|
180
|
+
*
|
|
181
|
+
* @param packageNamespace The package-namespace to check.
|
|
182
|
+
* @returns A value indicating whether a package with the specified `packageNamespace` has been registered.
|
|
183
|
+
*/
|
|
184
|
+
isPackageRegistered(packageNamespace?: string): boolean;
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Gets the namespaces of all registered packages.
|
|
188
|
+
*/
|
|
189
|
+
getRegisteredPackages(): string[];
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Returns stored generators meta
|
|
193
|
+
*/
|
|
194
|
+
getGeneratorMeta(namespace: string): GeneratorMeta;
|
|
126
195
|
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type BaseGenerator, type GetGeneratorConstructor } from '../index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Provides options for the `lookup` method.
|
|
5
|
+
*/
|
|
6
|
+
export type LookupOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* The paths to look for generators.
|
|
9
|
+
*/
|
|
10
|
+
packagePaths?: string[];
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The repüository paths to look for generator packages.
|
|
14
|
+
*/
|
|
15
|
+
npmPaths?: string[];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The file-patterns to look for.
|
|
19
|
+
*/
|
|
20
|
+
filePatterns?: string[];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The package patterns to look for.
|
|
24
|
+
*/
|
|
25
|
+
packagePatterns?: string[];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A value indicating whether the lookup should be stopped after finding the first result.
|
|
29
|
+
*/
|
|
30
|
+
singleResult?: boolean;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The `deep` option to pass to `globby`.
|
|
34
|
+
*/
|
|
35
|
+
globbyDeep?: number;
|
|
36
|
+
/**
|
|
37
|
+
* A value indicating whether globally installed packages should be ignored.
|
|
38
|
+
*/
|
|
39
|
+
localOnly?: boolean;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Provides information about a generator.
|
|
44
|
+
*/
|
|
45
|
+
export type LookupGeneratorMeta = {
|
|
46
|
+
/**
|
|
47
|
+
* A value indicating whether the generator could be registered.
|
|
48
|
+
*/
|
|
49
|
+
registered: boolean;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The resolved path to the generator.
|
|
53
|
+
*/
|
|
54
|
+
generatorPath: string;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The namespace of the generator.
|
|
58
|
+
*/
|
|
59
|
+
namespace: string;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The path to the package containing the generator.
|
|
63
|
+
*/
|
|
64
|
+
packagePath: string;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export type BaseGeneratorMeta = {
|
|
68
|
+
/** The key under which the generator can be retrieved */
|
|
69
|
+
namespace: string;
|
|
70
|
+
/** The file path to the generator (used only if generator is a module) */
|
|
71
|
+
resolved?: string;
|
|
72
|
+
/** PackagePath to the generator npm package */
|
|
73
|
+
packagePath?: string;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export type GeneratorMeta = BaseGeneratorMeta & {
|
|
77
|
+
packageNamespace?: string;
|
|
78
|
+
/** Import and find the Generator Class */
|
|
79
|
+
importGenerator: () => Promise<GetGeneratorConstructor>;
|
|
80
|
+
/** Import the module `import(meta.resolved)` */
|
|
81
|
+
importModule?: () => Promise<unknown>;
|
|
82
|
+
/** Intantiate the Generator `env.instantiate(await meta.importGenerator())` */
|
|
83
|
+
instantiate: <G extends BaseGenerator = BaseGenerator>(args?: string[], options?: any) => Promise<G>;
|
|
84
|
+
/** Intantiate the Generator passing help option */
|
|
85
|
+
instantiateHelp: <G extends BaseGenerator = BaseGenerator>() => Promise<G>;
|
|
86
|
+
};
|
|
@@ -2,7 +2,7 @@ import type { BaseEnvironment } from '../environment/environment.js';
|
|
|
2
2
|
|
|
3
3
|
export type GeneratorCustomOptions = Record<string, unknown>;
|
|
4
4
|
|
|
5
|
-
export type
|
|
5
|
+
export type BaseGeneratorOptions = {
|
|
6
6
|
/**
|
|
7
7
|
* Skip package manager install task.
|
|
8
8
|
*/
|
|
@@ -58,7 +58,7 @@ type GeneratorHelpOptions<H extends boolean | undefined> = {
|
|
|
58
58
|
help: H;
|
|
59
59
|
};
|
|
60
60
|
|
|
61
|
-
export type GeneratorOptions =
|
|
61
|
+
export type GeneratorOptions = BaseGeneratorOptions &
|
|
62
62
|
GeneratorNamespace &
|
|
63
63
|
(
|
|
64
64
|
| (GeneratorHelpOptions<false | undefined> & GeneratorEnvironmentOptions)
|
|
@@ -23,3 +23,7 @@ export type BaseGenerator<
|
|
|
23
23
|
// Generator >= v5
|
|
24
24
|
readonly features: F | undefined;
|
|
25
25
|
};
|
|
26
|
+
|
|
27
|
+
export type BaseGeneratorConstructor<O extends GeneratorOptions = GeneratorOptions, F extends GeneratorFeatures = GeneratorFeatures> =
|
|
28
|
+
| (new (args?: string[], options?: O, features?: F) => BaseGenerator<O, F>)
|
|
29
|
+
| (new (options?: O, features?: F) => BaseGenerator<O, F>);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { BaseGenerator } from './generator.js';
|
|
1
|
+
import type { BaseGenerator, BaseGeneratorConstructor } from './generator.js';
|
|
2
2
|
|
|
3
3
|
export type GetGeneratorOptions<T extends BaseGenerator = BaseGenerator> = T extends BaseGenerator<infer Options> ? Options : never;
|
|
4
4
|
|
|
5
5
|
export type GetGeneratorFeatures<T extends BaseGenerator = BaseGenerator> = T extends BaseGenerator<any, infer features> ? features : never;
|
|
6
6
|
|
|
7
|
-
export type GetGeneratorConstructor<T extends BaseGenerator = BaseGenerator> =
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export type GetGeneratorConstructor<T extends BaseGenerator = BaseGenerator> = BaseGeneratorConstructor<
|
|
8
|
+
GetGeneratorOptions<T>,
|
|
9
|
+
GetGeneratorFeatures<T>
|
|
10
|
+
>;
|
package/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './environment/adapter.js';
|
|
2
2
|
export * from './environment/environment.js';
|
|
3
3
|
export * from './environment/logger.js';
|
|
4
|
+
export * from './environment/methods-options.js';
|
|
4
5
|
|
|
5
6
|
export * from './generator/generator-features.js';
|
|
6
7
|
export * from './generator/generator-options.js';
|