@nestjs/schematics 11.0.9 → 12.0.0-alpha.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/dist/lib/application/files/js/package.json +10 -10
- package/dist/lib/application/files/ts/package.json +3 -3
- package/dist/lib/application/files/ts/tsconfig.json +0 -1
- package/dist/lib/application/files/ts-esm/.prettierrc +4 -0
- package/dist/lib/application/files/ts-esm/README.md +98 -0
- package/dist/lib/application/files/ts-esm/eslint.config.mjs +34 -0
- package/dist/lib/application/files/ts-esm/nest-cli.json +8 -0
- package/dist/lib/application/files/ts-esm/package.json +50 -0
- package/dist/lib/application/files/ts-esm/src/app.controller.__specFileSuffix__.ts +22 -0
- package/dist/lib/application/files/ts-esm/src/app.controller.ts +12 -0
- package/dist/lib/application/files/ts-esm/src/app.module.ts +10 -0
- package/dist/lib/application/files/ts-esm/src/app.service.ts +8 -0
- package/dist/lib/application/files/ts-esm/src/main.ts +8 -0
- package/dist/lib/application/files/ts-esm/test/app.e2e-__specFileSuffix__.ts +25 -0
- package/dist/lib/application/files/ts-esm/tsconfig.build.json +4 -0
- package/dist/lib/application/files/ts-esm/tsconfig.json +24 -0
- package/dist/lib/application/files/ts-esm/vitest.config.e2e.ts +10 -0
- package/dist/lib/application/files/ts-esm/vitest.config.ts +10 -0
- package/dist/lib/application/schema.json +14 -0
- package/dist/lib/library/files/ts/tsconfig.lib.json +1 -0
- package/dist/lib/sub-app/files/ts/tsconfig.app.json +1 -0
- package/dist/lib/sub-app/workspace/ts/tsconfig.app.json +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/{lib → src/lib}/application/application.factory.d.ts +1 -1
- package/dist/src/lib/application/application.factory.js +64 -0
- package/dist/{lib → src/lib}/class/class.factory.d.ts +1 -1
- package/dist/src/lib/class/class.factory.js +48 -0
- package/dist/{lib → src/lib}/client-app/angular/angular.factory.d.ts +1 -1
- package/dist/{lib → src/lib}/client-app/angular/angular.factory.js +23 -26
- package/dist/{lib → src/lib}/configuration/configuration.factory.d.ts +1 -1
- package/dist/src/lib/configuration/configuration.factory.js +24 -0
- package/dist/{lib → src/lib}/controller/controller.factory.d.ts +1 -1
- package/dist/src/lib/controller/controller.factory.js +69 -0
- package/dist/{lib → src/lib}/decorator/decorator.factory.d.ts +1 -1
- package/dist/src/lib/decorator/decorator.factory.js +32 -0
- package/dist/src/lib/defaults.js +14 -0
- package/dist/{lib → src/lib}/filter/filter.factory.d.ts +1 -1
- package/dist/src/lib/filter/filter.factory.js +40 -0
- package/dist/{lib → src/lib}/gateway/gateway.factory.d.ts +1 -1
- package/dist/src/lib/gateway/gateway.factory.js +69 -0
- package/dist/{lib → src/lib}/guard/guard.factory.d.ts +1 -1
- package/dist/src/lib/guard/guard.factory.js +40 -0
- package/dist/{lib → src/lib}/interceptor/interceptor.factory.d.ts +1 -1
- package/dist/src/lib/interceptor/interceptor.factory.js +41 -0
- package/dist/{lib → src/lib}/interface/interface.factory.d.ts +1 -1
- package/dist/src/lib/interface/interface.factory.js +31 -0
- package/dist/{lib → src/lib}/library/library.factory.d.ts +1 -1
- package/dist/{lib → src/lib}/library/library.factory.js +51 -64
- package/dist/{lib → src/lib}/middleware/middleware.factory.d.ts +1 -1
- package/dist/src/lib/middleware/middleware.factory.js +40 -0
- package/dist/{lib → src/lib}/module/module.factory.d.ts +1 -1
- package/dist/src/lib/module/module.factory.js +57 -0
- package/dist/{lib → src/lib}/pipe/pipe.factory.d.ts +1 -1
- package/dist/src/lib/pipe/pipe.factory.js +41 -0
- package/dist/{lib → src/lib}/provider/provider.factory.d.ts +1 -1
- package/dist/src/lib/provider/provider.factory.js +73 -0
- package/dist/{lib → src/lib}/readers/file-system.reader.d.ts +1 -1
- package/dist/{lib → src/lib}/readers/file-system.reader.js +3 -7
- package/dist/src/lib/readers/index.d.ts +2 -0
- package/dist/src/lib/readers/index.js +2 -0
- package/dist/src/lib/readers/reader.js +1 -0
- package/dist/{lib → src/lib}/resolver/resolver.factory.d.ts +1 -1
- package/dist/src/lib/resolver/resolver.factory.js +68 -0
- package/dist/{lib → src/lib}/resource/resource.factory.d.ts +1 -1
- package/dist/{lib → src/lib}/resource/resource.factory.js +35 -38
- package/dist/{lib → src/lib}/service/service.factory.d.ts +1 -1
- package/dist/src/lib/service/service.factory.js +71 -0
- package/dist/{lib → src/lib}/sub-app/sub-app.factory.d.ts +1 -1
- package/dist/{lib → src/lib}/sub-app/sub-app.factory.js +94 -69
- package/dist/{utils → src/utils}/dependencies.utils.js +7 -12
- package/dist/{utils → src/utils}/formatting.js +1 -4
- package/dist/src/utils/index.d.ts +11 -0
- package/dist/src/utils/index.js +11 -0
- package/dist/src/utils/jest-module-mapper.js +6 -0
- package/dist/{utils → src/utils}/json-file.util.js +9 -13
- package/dist/{utils → src/utils}/metadata.manager.d.ts +1 -1
- package/dist/{utils → src/utils}/metadata.manager.js +11 -15
- package/dist/{utils → src/utils}/module-import.declarator.d.ts +2 -2
- package/dist/{utils → src/utils}/module-import.declarator.js +6 -10
- package/dist/{utils → src/utils}/module-metadata.declarator.d.ts +1 -1
- package/dist/src/utils/module-metadata.declarator.js +8 -0
- package/dist/{utils → src/utils}/module.declarator.d.ts +2 -2
- package/dist/src/utils/module.declarator.js +30 -0
- package/dist/{utils → src/utils}/module.finder.js +3 -7
- package/dist/src/utils/name.parser.js +13 -0
- package/dist/{utils → src/utils}/object-sorting.js +1 -4
- package/dist/src/utils/path.solver.js +8 -0
- package/dist/src/utils/source-root.helpers.js +20 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +21 -49
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -18
- package/dist/lib/application/application.factory.js +0 -63
- package/dist/lib/class/class.factory.js +0 -51
- package/dist/lib/configuration/configuration.factory.js +0 -27
- package/dist/lib/controller/controller.factory.js +0 -72
- package/dist/lib/decorator/decorator.factory.js +0 -35
- package/dist/lib/defaults.js +0 -17
- package/dist/lib/filter/filter.factory.js +0 -43
- package/dist/lib/gateway/gateway.factory.js +0 -72
- package/dist/lib/guard/guard.factory.js +0 -43
- package/dist/lib/interceptor/interceptor.factory.js +0 -44
- package/dist/lib/interface/interface.factory.js +0 -34
- package/dist/lib/middleware/middleware.factory.js +0 -43
- package/dist/lib/module/module.factory.js +0 -60
- package/dist/lib/pipe/pipe.factory.js +0 -44
- package/dist/lib/provider/provider.factory.js +0 -76
- package/dist/lib/readers/index.d.ts +0 -2
- package/dist/lib/readers/index.js +0 -18
- package/dist/lib/readers/reader.js +0 -2
- package/dist/lib/resolver/resolver.factory.js +0 -71
- package/dist/lib/service/service.factory.js +0 -74
- package/dist/utils/index.d.ts +0 -11
- package/dist/utils/index.js +0 -27
- package/dist/utils/jest-module-mapper.js +0 -9
- package/dist/utils/module-metadata.declarator.js +0 -12
- package/dist/utils/module.declarator.js +0 -34
- package/dist/utils/name.parser.js +0 -17
- package/dist/utils/path.solver.js +0 -12
- package/dist/utils/source-root.helpers.js +0 -24
- /package/dist/{lib → src/lib}/defaults.d.ts +0 -0
- /package/dist/{lib → src/lib}/readers/reader.d.ts +0 -0
- /package/dist/{utils → src/utils}/dependencies.utils.d.ts +0 -0
- /package/dist/{utils → src/utils}/formatting.d.ts +0 -0
- /package/dist/{utils → src/utils}/jest-module-mapper.d.ts +0 -0
- /package/dist/{utils → src/utils}/json-file.util.d.ts +0 -0
- /package/dist/{utils → src/utils}/module.finder.d.ts +0 -0
- /package/dist/{utils → src/utils}/name.parser.d.ts +0 -0
- /package/dist/{utils → src/utils}/object-sorting.d.ts +0 -0
- /package/dist/{utils → src/utils}/path.solver.d.ts +0 -0
- /package/dist/{utils → src/utils}/source-root.helpers.d.ts +0 -0
|
@@ -1,50 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const name_parser_1 = require("../../utils/name.parser");
|
|
13
|
-
const source_root_helpers_1 = require("../../utils/source-root.helpers");
|
|
14
|
-
function main(options) {
|
|
1
|
+
import { join, strings } from '@angular-devkit/core';
|
|
2
|
+
import { classify } from '@angular-devkit/core/src/utils/strings';
|
|
3
|
+
import { apply, branchAndMerge, chain, filter, mergeWith, move, noop, SchematicsException, template, url, } from '@angular-devkit/schematics';
|
|
4
|
+
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
|
|
5
|
+
import * as pluralize from 'pluralize';
|
|
6
|
+
import { ModuleDeclarator, ModuleFinder, } from '../../index.js';
|
|
7
|
+
import { addPackageJsonDependency, getPackageJsonDependency, NodeDependencyType, } from '../../utils/dependencies.utils.js';
|
|
8
|
+
import { normalizeToKebabOrSnakeCase } from '../../utils/formatting.js';
|
|
9
|
+
import { NameParser } from '../../utils/name.parser.js';
|
|
10
|
+
import { mergeSourceRoot } from '../../utils/source-root.helpers.js';
|
|
11
|
+
export function main(options) {
|
|
15
12
|
options = transform(options);
|
|
16
13
|
return (tree, context) => {
|
|
17
|
-
return
|
|
14
|
+
return branchAndMerge(chain([
|
|
18
15
|
addMappedTypesDependencyIfApplies(options),
|
|
19
|
-
|
|
16
|
+
mergeSourceRoot(options),
|
|
20
17
|
addDeclarationToModule(options),
|
|
21
|
-
|
|
18
|
+
mergeWith(generate(options)),
|
|
22
19
|
]))(tree, context);
|
|
23
20
|
};
|
|
24
21
|
}
|
|
25
22
|
function transform(options) {
|
|
26
23
|
const target = Object.assign({}, options);
|
|
27
24
|
if (!target.name) {
|
|
28
|
-
throw new
|
|
25
|
+
throw new SchematicsException('Option (name) is required.');
|
|
29
26
|
}
|
|
30
27
|
target.metadata = 'imports';
|
|
31
|
-
const location = new
|
|
32
|
-
target.name =
|
|
33
|
-
target.path =
|
|
28
|
+
const location = new NameParser().parse(target);
|
|
29
|
+
target.name = normalizeToKebabOrSnakeCase(location.name);
|
|
30
|
+
target.path = normalizeToKebabOrSnakeCase(location.path);
|
|
34
31
|
target.language = target.language !== undefined ? target.language : 'ts';
|
|
35
32
|
if (target.language === 'js') {
|
|
36
33
|
throw new Error('The "resource" schematic does not support JavaScript language (only TypeScript is supported).');
|
|
37
34
|
}
|
|
38
|
-
target.specFileSuffix =
|
|
35
|
+
target.specFileSuffix = normalizeToKebabOrSnakeCase(options.specFileSuffix || 'spec');
|
|
39
36
|
target.path = target.flat
|
|
40
37
|
? target.path
|
|
41
|
-
:
|
|
38
|
+
: join(target.path, target.name);
|
|
42
39
|
target.isSwaggerInstalled = options.isSwaggerInstalled ?? false;
|
|
43
40
|
return target;
|
|
44
41
|
}
|
|
45
42
|
function generate(options) {
|
|
46
|
-
return (context) =>
|
|
47
|
-
|
|
43
|
+
return (context) => apply(url(join('./files', options.language)), [
|
|
44
|
+
filter((path) => {
|
|
48
45
|
if (path.endsWith('.dto.ts')) {
|
|
49
46
|
return (options.type !== 'graphql-code-first' &&
|
|
50
47
|
options.type !== 'graphql-schema-first' &&
|
|
@@ -77,22 +74,22 @@ function generate(options) {
|
|
|
77
74
|
return true;
|
|
78
75
|
}),
|
|
79
76
|
options.spec
|
|
80
|
-
?
|
|
81
|
-
:
|
|
77
|
+
? noop()
|
|
78
|
+
: filter((path) => {
|
|
82
79
|
const suffix = `.__specFileSuffix__.ts`;
|
|
83
80
|
return !path.endsWith(suffix);
|
|
84
81
|
}),
|
|
85
|
-
|
|
86
|
-
...
|
|
82
|
+
template({
|
|
83
|
+
...strings,
|
|
87
84
|
...options,
|
|
88
85
|
lowercased: (name) => {
|
|
89
|
-
const classifiedName =
|
|
86
|
+
const classifiedName = classify(name);
|
|
90
87
|
return (classifiedName.charAt(0).toLowerCase() + classifiedName.slice(1));
|
|
91
88
|
},
|
|
92
89
|
singular: (name) => pluralize.singular(name),
|
|
93
90
|
ent: (name) => name + '.entity',
|
|
94
91
|
}),
|
|
95
|
-
|
|
92
|
+
move(options.path),
|
|
96
93
|
])(context);
|
|
97
94
|
}
|
|
98
95
|
function addDeclarationToModule(options) {
|
|
@@ -100,7 +97,7 @@ function addDeclarationToModule(options) {
|
|
|
100
97
|
if (options.skipImport !== undefined && options.skipImport) {
|
|
101
98
|
return tree;
|
|
102
99
|
}
|
|
103
|
-
options.module = new
|
|
100
|
+
options.module = new ModuleFinder(tree).find({
|
|
104
101
|
name: options.name,
|
|
105
102
|
path: options.path,
|
|
106
103
|
});
|
|
@@ -108,7 +105,7 @@ function addDeclarationToModule(options) {
|
|
|
108
105
|
return tree;
|
|
109
106
|
}
|
|
110
107
|
const content = tree.read(options.module).toString();
|
|
111
|
-
const declarator = new
|
|
108
|
+
const declarator = new ModuleDeclarator();
|
|
112
109
|
tree.overwrite(options.module, declarator.declare(content, {
|
|
113
110
|
...options,
|
|
114
111
|
type: 'module',
|
|
@@ -123,20 +120,20 @@ function addMappedTypesDependencyIfApplies(options) {
|
|
|
123
120
|
return;
|
|
124
121
|
}
|
|
125
122
|
if (options.type === 'rest') {
|
|
126
|
-
const nodeDependencyRef =
|
|
123
|
+
const nodeDependencyRef = getPackageJsonDependency(host, '@nestjs/swagger');
|
|
127
124
|
if (nodeDependencyRef) {
|
|
128
125
|
options.isSwaggerInstalled = true;
|
|
129
126
|
return;
|
|
130
127
|
}
|
|
131
128
|
}
|
|
132
|
-
const nodeDependencyRef =
|
|
129
|
+
const nodeDependencyRef = getPackageJsonDependency(host, '@nestjs/mapped-types');
|
|
133
130
|
if (!nodeDependencyRef) {
|
|
134
|
-
|
|
135
|
-
type:
|
|
131
|
+
addPackageJsonDependency(host, {
|
|
132
|
+
type: NodeDependencyType.Default,
|
|
136
133
|
name: '@nestjs/mapped-types',
|
|
137
134
|
version: '*',
|
|
138
135
|
});
|
|
139
|
-
context.addTask(new
|
|
136
|
+
context.addTask(new NodePackageInstallTask());
|
|
140
137
|
}
|
|
141
138
|
}
|
|
142
139
|
catch {
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { join, strings } from '@angular-devkit/core';
|
|
2
|
+
import { apply, branchAndMerge, chain, filter, mergeWith, move, noop, SchematicsException, template, url, } from '@angular-devkit/schematics';
|
|
3
|
+
import { normalizeToKebabOrSnakeCase } from '../../utils/formatting.js';
|
|
4
|
+
import { ModuleDeclarator, } from '../../utils/module.declarator.js';
|
|
5
|
+
import { ModuleFinder } from '../../utils/module.finder.js';
|
|
6
|
+
import { NameParser } from '../../utils/name.parser.js';
|
|
7
|
+
import { mergeSourceRoot } from '../../utils/source-root.helpers.js';
|
|
8
|
+
function isNullOrUndefined(value) {
|
|
9
|
+
return value === null || value === undefined;
|
|
10
|
+
}
|
|
11
|
+
export function main(options) {
|
|
12
|
+
options = transform(options);
|
|
13
|
+
return (tree, context) => {
|
|
14
|
+
return branchAndMerge(chain([
|
|
15
|
+
mergeSourceRoot(options),
|
|
16
|
+
addDeclarationToModule(options),
|
|
17
|
+
mergeWith(generate(options)),
|
|
18
|
+
]))(tree, context);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function transform(source) {
|
|
22
|
+
const target = Object.assign({}, source);
|
|
23
|
+
target.metadata = 'providers';
|
|
24
|
+
target.type = 'service';
|
|
25
|
+
if (isNullOrUndefined(target.name)) {
|
|
26
|
+
throw new SchematicsException('Option (name) is required.');
|
|
27
|
+
}
|
|
28
|
+
const location = new NameParser().parse(target);
|
|
29
|
+
target.name = normalizeToKebabOrSnakeCase(location.name);
|
|
30
|
+
target.path = normalizeToKebabOrSnakeCase(location.path);
|
|
31
|
+
target.language = target.language !== undefined ? target.language : 'ts';
|
|
32
|
+
target.specFileSuffix = normalizeToKebabOrSnakeCase(source.specFileSuffix || 'spec');
|
|
33
|
+
target.path = target.flat
|
|
34
|
+
? target.path
|
|
35
|
+
: join(target.path, target.name);
|
|
36
|
+
return target;
|
|
37
|
+
}
|
|
38
|
+
function generate(options) {
|
|
39
|
+
return (context) => apply(url(join('./files', options.language)), [
|
|
40
|
+
options.spec
|
|
41
|
+
? noop()
|
|
42
|
+
: filter((path) => {
|
|
43
|
+
const languageExtension = options.language || 'ts';
|
|
44
|
+
const suffix = `.__specFileSuffix__.${languageExtension}`;
|
|
45
|
+
return !path.endsWith(suffix);
|
|
46
|
+
}),
|
|
47
|
+
template({
|
|
48
|
+
...strings,
|
|
49
|
+
...options,
|
|
50
|
+
}),
|
|
51
|
+
move(options.path),
|
|
52
|
+
])(context);
|
|
53
|
+
}
|
|
54
|
+
function addDeclarationToModule(options) {
|
|
55
|
+
return (tree) => {
|
|
56
|
+
if (options.skipImport !== undefined && options.skipImport) {
|
|
57
|
+
return tree;
|
|
58
|
+
}
|
|
59
|
+
options.module = new ModuleFinder(tree).find({
|
|
60
|
+
name: options.name,
|
|
61
|
+
path: options.path,
|
|
62
|
+
});
|
|
63
|
+
if (!options.module) {
|
|
64
|
+
return tree;
|
|
65
|
+
}
|
|
66
|
+
const content = tree.read(options.module).toString();
|
|
67
|
+
const declarator = new ModuleDeclarator();
|
|
68
|
+
tree.overwrite(options.module, declarator.declare(content, options));
|
|
69
|
+
return tree;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -1,43 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const utils_1 = require("../../utils");
|
|
9
|
-
const defaults_1 = require("../defaults");
|
|
10
|
-
function main(options) {
|
|
1
|
+
import { join, normalize, strings } from '@angular-devkit/core';
|
|
2
|
+
import { apply, branchAndMerge, chain, mergeWith, move, noop, SchematicsException, template, url, } from '@angular-devkit/schematics';
|
|
3
|
+
import { existsSync, readFileSync } from 'fs';
|
|
4
|
+
import { parse, stringify } from 'comment-json';
|
|
5
|
+
import { inPlaceSortByKeys, normalizeToKebabOrSnakeCase, } from '../../utils/index.js';
|
|
6
|
+
import { DEFAULT_APPS_PATH, DEFAULT_APP_NAME, DEFAULT_DIR_ENTRY_APP, DEFAULT_LANGUAGE, DEFAULT_LIB_PATH, DEFAULT_PATH_NAME, PROJECT_TYPE, TEST_ENV, } from '../defaults.js';
|
|
7
|
+
export function main(options) {
|
|
11
8
|
const appName = getAppNameFromPackageJson();
|
|
12
9
|
options = transform(options);
|
|
13
|
-
return
|
|
14
|
-
updateTsConfig(),
|
|
10
|
+
return chain([
|
|
11
|
+
updateTsConfig(options.path, appName),
|
|
15
12
|
updatePackageJson(options, appName),
|
|
16
13
|
(tree, context) => isMonorepo(tree)
|
|
17
|
-
?
|
|
18
|
-
:
|
|
19
|
-
|
|
14
|
+
? noop()(tree, context)
|
|
15
|
+
: chain([
|
|
16
|
+
branchAndMerge(mergeWith(generateWorkspace(options, appName))),
|
|
20
17
|
moveDefaultAppToApps(options.path, appName, options.sourceRoot),
|
|
21
18
|
])(tree, context),
|
|
22
19
|
addAppsToCliOptions(options.path, options.name, appName),
|
|
23
|
-
(
|
|
20
|
+
addTsConfigReference(options.path, options.name),
|
|
21
|
+
branchAndMerge(mergeWith(generate(options))),
|
|
24
22
|
]);
|
|
25
23
|
}
|
|
26
24
|
function getAppNameFromPackageJson() {
|
|
27
25
|
try {
|
|
28
|
-
if (!
|
|
29
|
-
return
|
|
26
|
+
if (!existsSync('./package.json')) {
|
|
27
|
+
return DEFAULT_DIR_ENTRY_APP;
|
|
30
28
|
}
|
|
31
|
-
const packageJson = JSON.parse(stripBom(
|
|
29
|
+
const packageJson = JSON.parse(stripBom(readFileSync('./package.json', 'utf-8')));
|
|
32
30
|
if (!packageJson.name) {
|
|
33
|
-
return
|
|
31
|
+
return DEFAULT_DIR_ENTRY_APP;
|
|
34
32
|
}
|
|
35
33
|
let name = packageJson.name;
|
|
36
34
|
name = name.replace(/[^\w.]+/g, '-').replace(/-+/g, '-');
|
|
37
35
|
return name[0] === '-' ? name.substr(1) : name;
|
|
38
36
|
}
|
|
39
37
|
catch {
|
|
40
|
-
return
|
|
38
|
+
return DEFAULT_DIR_ENTRY_APP;
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
function stripBom(value) {
|
|
@@ -48,16 +46,16 @@ function stripBom(value) {
|
|
|
48
46
|
}
|
|
49
47
|
function transform(options) {
|
|
50
48
|
const target = Object.assign({}, options);
|
|
51
|
-
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir :
|
|
49
|
+
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir : DEFAULT_APPS_PATH;
|
|
52
50
|
if (!target.name) {
|
|
53
|
-
target.name =
|
|
51
|
+
target.name = DEFAULT_APP_NAME;
|
|
54
52
|
}
|
|
55
|
-
target.language = target.language ? target.language :
|
|
56
|
-
target.name =
|
|
53
|
+
target.language = target.language ? target.language : DEFAULT_LANGUAGE;
|
|
54
|
+
target.name = normalizeToKebabOrSnakeCase(target.name);
|
|
57
55
|
target.path =
|
|
58
56
|
target.path !== undefined
|
|
59
|
-
?
|
|
60
|
-
:
|
|
57
|
+
? join(normalize(defaultSourceRoot), target.path)
|
|
58
|
+
: normalize(defaultSourceRoot);
|
|
61
59
|
return target;
|
|
62
60
|
}
|
|
63
61
|
function isMonorepo(host) {
|
|
@@ -72,20 +70,20 @@ function isMonorepo(host) {
|
|
|
72
70
|
return false;
|
|
73
71
|
}
|
|
74
72
|
const sourceText = source.toString('utf-8');
|
|
75
|
-
const optionsObj =
|
|
73
|
+
const optionsObj = parse(sourceText);
|
|
76
74
|
return !!optionsObj.monorepo;
|
|
77
75
|
}
|
|
78
76
|
function updateJsonFile(host, path, callback) {
|
|
79
77
|
const source = host.read(path);
|
|
80
78
|
if (source) {
|
|
81
79
|
const sourceText = source.toString('utf-8');
|
|
82
|
-
const json =
|
|
80
|
+
const json = parse(sourceText);
|
|
83
81
|
callback(json);
|
|
84
|
-
host.overwrite(path,
|
|
82
|
+
host.overwrite(path, stringify(json, null, 2));
|
|
85
83
|
}
|
|
86
84
|
return host;
|
|
87
85
|
}
|
|
88
|
-
function updateTsConfig() {
|
|
86
|
+
function updateTsConfig(projectRoot, appName) {
|
|
89
87
|
return (host) => {
|
|
90
88
|
if (!host.exists('tsconfig.json')) {
|
|
91
89
|
return host;
|
|
@@ -94,13 +92,40 @@ function updateTsConfig() {
|
|
|
94
92
|
if (!tsconfig.compilerOptions) {
|
|
95
93
|
tsconfig.compilerOptions = {};
|
|
96
94
|
}
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
delete tsconfig.compilerOptions.baseUrl;
|
|
96
|
+
delete tsconfig.compilerOptions.paths;
|
|
97
|
+
if (!tsconfig.files) {
|
|
98
|
+
tsconfig.files = [];
|
|
99
99
|
}
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
delete tsconfig.include;
|
|
101
|
+
delete tsconfig.exclude;
|
|
102
|
+
if (!tsconfig.references) {
|
|
103
|
+
tsconfig.references = [];
|
|
104
|
+
}
|
|
105
|
+
const workspaceAppTsConfigPath = join(projectRoot, appName, 'tsconfig.app.json');
|
|
106
|
+
const hasWorkspaceRef = tsconfig.references.some((ref) => ref.path === `./${workspaceAppTsConfigPath}`);
|
|
107
|
+
if (!hasWorkspaceRef) {
|
|
108
|
+
tsconfig.references.push({
|
|
109
|
+
path: `./${workspaceAppTsConfigPath}`,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function addTsConfigReference(projectRoot, projectName) {
|
|
116
|
+
return (host) => {
|
|
117
|
+
if (!host.exists('tsconfig.json')) {
|
|
118
|
+
return host;
|
|
119
|
+
}
|
|
120
|
+
return updateJsonFile(host, 'tsconfig.json', (tsconfig) => {
|
|
121
|
+
if (!tsconfig.references) {
|
|
122
|
+
tsconfig.references = [];
|
|
123
|
+
}
|
|
124
|
+
const refPath = `./${join(projectRoot, projectName, 'tsconfig.app.json')}`;
|
|
125
|
+
const hasRef = tsconfig.references.some((ref) => ref.path === refPath);
|
|
126
|
+
if (!hasRef) {
|
|
127
|
+
tsconfig.references.push({ path: refPath });
|
|
102
128
|
}
|
|
103
|
-
(0, utils_1.inPlaceSortByKeys)(tsconfig.compilerOptions.paths);
|
|
104
129
|
});
|
|
105
130
|
};
|
|
106
131
|
}
|
|
@@ -130,18 +155,18 @@ function updateNpmScripts(scripts, options, defaultAppName) {
|
|
|
130
155
|
if (scripts[defaultTestScriptName] &&
|
|
131
156
|
scripts[defaultTestScriptName].indexOf(options.path) < 0) {
|
|
132
157
|
const defaultTestDir = 'test';
|
|
133
|
-
const newTestDir =
|
|
158
|
+
const newTestDir = join(options.path, defaultAppName, defaultTestDir);
|
|
134
159
|
scripts[defaultTestScriptName] = scripts[defaultTestScriptName].replace(defaultTestDir, newTestDir);
|
|
135
160
|
}
|
|
136
161
|
if (scripts[defaultFormatScriptName] &&
|
|
137
|
-
scripts[defaultFormatScriptName].indexOf(
|
|
138
|
-
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir :
|
|
162
|
+
scripts[defaultFormatScriptName].indexOf(DEFAULT_PATH_NAME) >= 0) {
|
|
163
|
+
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir : DEFAULT_APPS_PATH;
|
|
139
164
|
scripts[defaultFormatScriptName] =
|
|
140
|
-
`prettier --write "${defaultSourceRoot}/**/*.ts" "${
|
|
165
|
+
`prettier --write "${defaultSourceRoot}/**/*.ts" "${DEFAULT_LIB_PATH}/**/*.ts"`;
|
|
141
166
|
}
|
|
142
167
|
if (scripts[defaultStartScriptName] &&
|
|
143
168
|
scripts[defaultStartScriptName].indexOf('dist/main') >= 0) {
|
|
144
|
-
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir :
|
|
169
|
+
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir : DEFAULT_APPS_PATH;
|
|
145
170
|
scripts[defaultStartScriptName] =
|
|
146
171
|
`node dist/${defaultSourceRoot}/${defaultAppName}/main`;
|
|
147
172
|
}
|
|
@@ -150,11 +175,11 @@ function updateJestOptions(jestOptions, options) {
|
|
|
150
175
|
if (!jestOptions) {
|
|
151
176
|
return;
|
|
152
177
|
}
|
|
153
|
-
if (jestOptions.rootDir ===
|
|
178
|
+
if (jestOptions.rootDir === DEFAULT_PATH_NAME) {
|
|
154
179
|
jestOptions.rootDir = '.';
|
|
155
180
|
jestOptions.coverageDirectory = './coverage';
|
|
156
181
|
}
|
|
157
|
-
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir :
|
|
182
|
+
const defaultSourceRoot = options.rootDir !== undefined ? options.rootDir : DEFAULT_APPS_PATH;
|
|
158
183
|
const jestSourceRoot = `<rootDir>/${defaultSourceRoot}/`;
|
|
159
184
|
if (!jestOptions.roots) {
|
|
160
185
|
jestOptions.roots = [jestSourceRoot];
|
|
@@ -168,12 +193,12 @@ function updateJestOptions(jestOptions, options) {
|
|
|
168
193
|
}
|
|
169
194
|
}
|
|
170
195
|
}
|
|
171
|
-
function moveDefaultAppToApps(projectRoot, appName, sourceRoot =
|
|
196
|
+
function moveDefaultAppToApps(projectRoot, appName, sourceRoot = DEFAULT_PATH_NAME) {
|
|
172
197
|
return (host) => {
|
|
173
|
-
if (process.env.NODE_ENV ===
|
|
198
|
+
if (process.env.NODE_ENV === TEST_ENV) {
|
|
174
199
|
return host;
|
|
175
200
|
}
|
|
176
|
-
const appDestination =
|
|
201
|
+
const appDestination = join(projectRoot, appName);
|
|
177
202
|
moveDirectoryTo(sourceRoot, appDestination, host);
|
|
178
203
|
moveDirectoryTo('test', appDestination, host);
|
|
179
204
|
return host;
|
|
@@ -183,7 +208,7 @@ function moveDirectoryTo(srcDir, destination, tree) {
|
|
|
183
208
|
let srcDirExists = false;
|
|
184
209
|
tree.getDir(srcDir).visit((filePath, file) => {
|
|
185
210
|
srcDirExists = true;
|
|
186
|
-
const newFilePath =
|
|
211
|
+
const newFilePath = join(destination, filePath);
|
|
187
212
|
tree.create(newFilePath, file.content);
|
|
188
213
|
});
|
|
189
214
|
if (srcDirExists) {
|
|
@@ -191,14 +216,14 @@ function moveDirectoryTo(srcDir, destination, tree) {
|
|
|
191
216
|
}
|
|
192
217
|
}
|
|
193
218
|
function addAppsToCliOptions(projectRoot, projectName, appName) {
|
|
194
|
-
const rootPath =
|
|
219
|
+
const rootPath = join(projectRoot, projectName);
|
|
195
220
|
const project = {
|
|
196
|
-
type:
|
|
221
|
+
type: PROJECT_TYPE.APPLICATION,
|
|
197
222
|
root: rootPath,
|
|
198
223
|
entryFile: 'main',
|
|
199
|
-
sourceRoot:
|
|
224
|
+
sourceRoot: join(rootPath, DEFAULT_PATH_NAME),
|
|
200
225
|
compilerOptions: {
|
|
201
|
-
tsConfigPath:
|
|
226
|
+
tsConfigPath: join(rootPath, 'tsconfig.app.json'),
|
|
202
227
|
},
|
|
203
228
|
};
|
|
204
229
|
return (host) => {
|
|
@@ -214,10 +239,10 @@ function addAppsToCliOptions(projectRoot, projectName, appName) {
|
|
|
214
239
|
optionsFile.projects = {};
|
|
215
240
|
}
|
|
216
241
|
if (optionsFile.projects[projectName]) {
|
|
217
|
-
throw new
|
|
242
|
+
throw new SchematicsException(`Project "${projectName}" exists in this workspace already.`);
|
|
218
243
|
}
|
|
219
244
|
optionsFile.projects[projectName] = project;
|
|
220
|
-
|
|
245
|
+
inPlaceSortByKeys(optionsFile.projects);
|
|
221
246
|
});
|
|
222
247
|
};
|
|
223
248
|
}
|
|
@@ -225,47 +250,47 @@ function updateMainAppOptions(optionsFile, projectRoot, appName) {
|
|
|
225
250
|
if (optionsFile.monorepo) {
|
|
226
251
|
return;
|
|
227
252
|
}
|
|
228
|
-
const rootFilePath =
|
|
229
|
-
const tsConfigPath =
|
|
253
|
+
const rootFilePath = join(projectRoot, appName);
|
|
254
|
+
const tsConfigPath = join(rootFilePath, 'tsconfig.app.json');
|
|
230
255
|
optionsFile.monorepo = true;
|
|
231
256
|
optionsFile.root = rootFilePath;
|
|
232
|
-
optionsFile.sourceRoot =
|
|
257
|
+
optionsFile.sourceRoot = join(projectRoot, appName, optionsFile.sourceRoot || DEFAULT_PATH_NAME);
|
|
233
258
|
if (!optionsFile.compilerOptions) {
|
|
234
259
|
optionsFile.compilerOptions = {};
|
|
235
260
|
}
|
|
236
|
-
optionsFile.compilerOptions.
|
|
261
|
+
optionsFile.compilerOptions.builder = 'rspack';
|
|
237
262
|
optionsFile.compilerOptions.tsConfigPath = tsConfigPath;
|
|
238
263
|
if (!optionsFile.projects) {
|
|
239
264
|
optionsFile.projects = {};
|
|
240
265
|
}
|
|
241
266
|
optionsFile.projects[appName] = {
|
|
242
|
-
type:
|
|
267
|
+
type: PROJECT_TYPE.APPLICATION,
|
|
243
268
|
root: rootFilePath,
|
|
244
269
|
entryFile: optionsFile.entryFile || 'main',
|
|
245
|
-
sourceRoot:
|
|
270
|
+
sourceRoot: join(rootFilePath, DEFAULT_PATH_NAME),
|
|
246
271
|
compilerOptions: {
|
|
247
272
|
tsConfigPath,
|
|
248
273
|
},
|
|
249
274
|
};
|
|
250
275
|
}
|
|
251
276
|
function generateWorkspace(options, appName) {
|
|
252
|
-
const path =
|
|
253
|
-
return
|
|
254
|
-
|
|
255
|
-
...
|
|
277
|
+
const path = join(options.path, appName);
|
|
278
|
+
return apply(url(join('./workspace', options.language)), [
|
|
279
|
+
template({
|
|
280
|
+
...strings,
|
|
256
281
|
...options,
|
|
257
282
|
name: appName,
|
|
258
283
|
}),
|
|
259
|
-
|
|
284
|
+
move(path),
|
|
260
285
|
]);
|
|
261
286
|
}
|
|
262
287
|
function generate(options) {
|
|
263
|
-
const path =
|
|
264
|
-
return
|
|
265
|
-
|
|
266
|
-
...
|
|
288
|
+
const path = join(options.path, options.name);
|
|
289
|
+
return apply(url(join('./files', options.language)), [
|
|
290
|
+
template({
|
|
291
|
+
...strings,
|
|
267
292
|
...options,
|
|
268
293
|
}),
|
|
269
|
-
|
|
294
|
+
move(path),
|
|
270
295
|
]);
|
|
271
296
|
}
|
|
@@ -1,33 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NodeDependencyType = void 0;
|
|
4
|
-
exports.addPackageJsonDependency = addPackageJsonDependency;
|
|
5
|
-
exports.getPackageJsonDependency = getPackageJsonDependency;
|
|
6
|
-
const json_file_util_1 = require("./json-file.util");
|
|
1
|
+
import { JSONFile } from './json-file.util.js';
|
|
7
2
|
const PKG_JSON_PATH = '/package.json';
|
|
8
|
-
var NodeDependencyType;
|
|
3
|
+
export var NodeDependencyType;
|
|
9
4
|
(function (NodeDependencyType) {
|
|
10
5
|
NodeDependencyType["Default"] = "dependencies";
|
|
11
6
|
NodeDependencyType["Dev"] = "devDependencies";
|
|
12
7
|
NodeDependencyType["Peer"] = "peerDependencies";
|
|
13
8
|
NodeDependencyType["Optional"] = "optionalDependencies";
|
|
14
|
-
})(NodeDependencyType || (
|
|
9
|
+
})(NodeDependencyType || (NodeDependencyType = {}));
|
|
15
10
|
const ALL_DEPENDENCY_TYPE = [
|
|
16
11
|
NodeDependencyType.Default,
|
|
17
12
|
NodeDependencyType.Dev,
|
|
18
13
|
NodeDependencyType.Optional,
|
|
19
14
|
NodeDependencyType.Peer,
|
|
20
15
|
];
|
|
21
|
-
function addPackageJsonDependency(tree, dependency, pkgJsonPath = PKG_JSON_PATH) {
|
|
22
|
-
const json = new
|
|
16
|
+
export function addPackageJsonDependency(tree, dependency, pkgJsonPath = PKG_JSON_PATH) {
|
|
17
|
+
const json = new JSONFile(tree, pkgJsonPath);
|
|
23
18
|
const { overwrite, type, name, version } = dependency;
|
|
24
19
|
const path = [type, name];
|
|
25
20
|
if (overwrite || !json.get(path)) {
|
|
26
21
|
json.modify(path, version);
|
|
27
22
|
}
|
|
28
23
|
}
|
|
29
|
-
function getPackageJsonDependency(tree, name, pkgJsonPath = PKG_JSON_PATH) {
|
|
30
|
-
const json = new
|
|
24
|
+
export function getPackageJsonDependency(tree, name, pkgJsonPath = PKG_JSON_PATH) {
|
|
25
|
+
const json = new JSONFile(tree, pkgJsonPath);
|
|
31
26
|
for (const depType of ALL_DEPENDENCY_TYPE) {
|
|
32
27
|
const version = json.get([depType, name]);
|
|
33
28
|
if (typeof version === 'string') {
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeToKebabOrSnakeCase = normalizeToKebabOrSnakeCase;
|
|
4
|
-
function normalizeToKebabOrSnakeCase(str) {
|
|
1
|
+
export function normalizeToKebabOrSnakeCase(str) {
|
|
5
2
|
const STRING_DASHERIZE_REGEXP = /\s/g;
|
|
6
3
|
const STRING_DECAMELIZE_REGEXP = /([a-z\d])([A-Z])/g;
|
|
7
4
|
return str
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './metadata.manager.js';
|
|
2
|
+
export * from './module-import.declarator.js';
|
|
3
|
+
export * from './module-metadata.declarator.js';
|
|
4
|
+
export * from './module.declarator.js';
|
|
5
|
+
export * from './module.finder.js';
|
|
6
|
+
export * from './name.parser.js';
|
|
7
|
+
export * from './path.solver.js';
|
|
8
|
+
export * from './source-root.helpers.js';
|
|
9
|
+
export * from './formatting.js';
|
|
10
|
+
export * from './jest-module-mapper.js';
|
|
11
|
+
export * from './object-sorting.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './metadata.manager.js';
|
|
2
|
+
export * from './module-import.declarator.js';
|
|
3
|
+
export * from './module-metadata.declarator.js';
|
|
4
|
+
export * from './module.declarator.js';
|
|
5
|
+
export * from './module.finder.js';
|
|
6
|
+
export * from './name.parser.js';
|
|
7
|
+
export * from './path.solver.js';
|
|
8
|
+
export * from './source-root.helpers.js';
|
|
9
|
+
export * from './formatting.js';
|
|
10
|
+
export * from './jest-module-mapper.js';
|
|
11
|
+
export * from './object-sorting.js';
|