@rxap/schematics-ts-morph 19.2.0-dev.2 → 19.2.1-dev.1
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/CHANGELOG.md +144 -0
- package/TODO.md +55 -0
- package/package.json +5 -6
- package/src/generators/init/generator.js +25 -16
- package/src/generators/init/generator.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,152 @@
|
|
|
1
|
+
## 19.2.1-dev.1 (2026-06-19)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **schematic:** support dynamic project name generation in Nest module coercion
|
|
6
|
+
- replace buildNestProjectName with buildOperationServerId
|
|
7
|
+
- update to buildable open api client sdk
|
|
8
|
+
- support autocomplete controls
|
|
9
|
+
- improve table action processing
|
|
10
|
+
- add propertyValue handlebare helper
|
|
11
|
+
- add CoercePipe function
|
|
12
|
+
- support to options mapper
|
|
13
|
+
- support custom mappers
|
|
14
|
+
- add ToDtoInstanceList
|
|
15
|
+
- support string utilities in handlebar templates
|
|
16
|
+
- support form group and form array
|
|
17
|
+
- support form group and form array
|
|
18
|
+
- generate table select resolve method
|
|
19
|
+
- support custom properties for accordion controllers
|
|
20
|
+
- extend support for upstream options
|
|
21
|
+
- add CoerceGetOperation function
|
|
22
|
+
- support table parameters in tree tables
|
|
23
|
+
- support upstream configurations
|
|
24
|
+
- support custom handlebars partials and helpers
|
|
25
|
+
- support handlebars for component generator
|
|
26
|
+
- move WriteType to ts-morph package
|
|
27
|
+
- support simple type
|
|
28
|
+
- support custom id property
|
|
29
|
+
- support complex and importable types
|
|
30
|
+
- add open api table action
|
|
31
|
+
- support overwrite array
|
|
32
|
+
- add CoerceTableHeaderButtonMethod function
|
|
33
|
+
- support replace option
|
|
34
|
+
- support open api backend
|
|
35
|
+
- merge external changes
|
|
36
|
+
|
|
37
|
+
### 🩹 Fixes
|
|
38
|
+
|
|
39
|
+
- **generators:** read package.json and node_modules from disk, not the virtual Tree
|
|
40
|
+
- **generators:** match package name with .some() in init devDependency coercion
|
|
41
|
+
- **schematic:** update test utilities import paths and enhance Nest module handling
|
|
42
|
+
- **schematic:** adjust base path generation for application projects
|
|
43
|
+
- **schematic:** improve component feature validation logic
|
|
44
|
+
- **nest:** handle null serverId in operation ID generation
|
|
45
|
+
- **schematic:** ensure modules are added to the AppModule only in application projects
|
|
46
|
+
- add missing imports
|
|
47
|
+
- dont overwrite UseFormControl props
|
|
48
|
+
- dont overwrite form definition decorators
|
|
49
|
+
- use the correct property
|
|
50
|
+
- pass backend option
|
|
51
|
+
- base path creation
|
|
52
|
+
- correctly generate the tree methods
|
|
53
|
+
- add if utilities
|
|
54
|
+
- add rowId option
|
|
55
|
+
- support non upstream nestjs backends
|
|
56
|
+
- print the required commands to setup projects
|
|
57
|
+
- ensure the options are handled correctly
|
|
58
|
+
- only coerce import if required
|
|
59
|
+
- add Overwrite options type
|
|
60
|
+
- add Overwrite options type
|
|
61
|
+
- support complex data properties
|
|
62
|
+
- support complex data properties
|
|
63
|
+
- support autocomplete controls
|
|
64
|
+
- add default get tree operation mapper
|
|
65
|
+
- add default options operation mapper
|
|
66
|
+
- select form backend generation
|
|
67
|
+
- ensure the cell component are valid
|
|
68
|
+
- ensure the coerce array items function is used instead of unshift
|
|
69
|
+
- use defined identifier property
|
|
70
|
+
- ensure submit and load can have different interfaces
|
|
71
|
+
- ensure all properties are set correctly
|
|
72
|
+
- ensure all imports are added
|
|
73
|
+
- improve operation naming and return types
|
|
74
|
+
- ensure nestModule is passed to the operation generators
|
|
75
|
+
- return type generation
|
|
76
|
+
- correctly coerce the operation method parameters
|
|
77
|
+
- respect the identifier option
|
|
78
|
+
- import missing type
|
|
79
|
+
- ensure all required modules and services are imported
|
|
80
|
+
- support non service commands
|
|
81
|
+
- align the controller name processing
|
|
82
|
+
- add the open api upstream command to the module providers
|
|
83
|
+
- use the command class name as member name
|
|
84
|
+
- generate tree table column dto types
|
|
85
|
+
- small issues
|
|
86
|
+
- initial component class creation
|
|
87
|
+
- add is modifier functions
|
|
88
|
+
- mark CoercePropertyDeclaration as deprected
|
|
89
|
+
- support TypeImport
|
|
90
|
+
- use correct function return type
|
|
91
|
+
- unify coerce component functions
|
|
92
|
+
- unify type import concept
|
|
93
|
+
- merge the property and table property interface
|
|
94
|
+
- remove FlexLayout dependency
|
|
95
|
+
- use coerce component utility function
|
|
96
|
+
- only add used interfaces
|
|
97
|
+
- ensure formatting is correct
|
|
98
|
+
- include property list in operation dto generation
|
|
99
|
+
- add custom dto property types
|
|
100
|
+
- use Object.freeze instead of Object.seal
|
|
101
|
+
- support relativeTo parameter
|
|
102
|
+
- support custom form component
|
|
103
|
+
- add utility function
|
|
104
|
+
- use ToMappingObject function
|
|
105
|
+
- use correct var check name
|
|
106
|
+
- unify transformation
|
|
107
|
+
- use utility CreateProject function to create a ts-morph Project instance
|
|
108
|
+
- ensure the plain text of the nodes is used
|
|
109
|
+
- only add validators import if used
|
|
110
|
+
- ensure the filter method property has not an question token
|
|
111
|
+
- import dtos from nest-dto
|
|
112
|
+
- add deprecation comment
|
|
113
|
+
- peer dependency issue
|
|
114
|
+
- ensure new class property is inserted at the top
|
|
115
|
+
- add move deprecated hint
|
|
116
|
+
- add project ts-morph
|
|
117
|
+
- ensure the project name is not included in the project tag list
|
|
118
|
+
- change from commonjs to es2022
|
|
119
|
+
- coerce getPageData method
|
|
120
|
+
- controller name composition
|
|
121
|
+
- controller naming and route
|
|
122
|
+
- add licence file to publishable packages
|
|
123
|
+
- allow null or undefined for scope parameter
|
|
124
|
+
- update package dependency versions
|
|
125
|
+
- restructure and merge mono repos packages, schematics, plugins and nest
|
|
126
|
+
|
|
127
|
+
### 🔥 Performance
|
|
128
|
+
|
|
129
|
+
- improve project json file search
|
|
130
|
+
|
|
131
|
+
### 🧱 Updated Dependencies
|
|
132
|
+
|
|
133
|
+
- Updated workspace-utilities to 19.9.1-dev.1
|
|
134
|
+
- Updated utilities to 16.5.1-dev.1
|
|
135
|
+
- Updated ts-morph to 1.7.0-dev.1
|
|
136
|
+
|
|
137
|
+
### ❤️ Thank You
|
|
138
|
+
|
|
139
|
+
- Merzough Münker
|
|
140
|
+
|
|
1
141
|
# Change Log
|
|
2
142
|
|
|
3
143
|
All notable changes to this project will be documented in this file.
|
|
4
144
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
145
|
|
|
146
|
+
# [19.2.0-dev.3](https://gitlab.com/rxap/packages/compare/@rxap/schematics-ts-morph@19.2.0-dev.2...@rxap/schematics-ts-morph@19.2.0-dev.3) (2026-02-09)
|
|
147
|
+
|
|
148
|
+
**Note:** Version bump only for package @rxap/schematics-ts-morph
|
|
149
|
+
|
|
6
150
|
# [19.2.0-dev.2](https://gitlab.com/rxap/packages/compare/@rxap/schematics-ts-morph@19.2.0-dev.1...@rxap/schematics-ts-morph@19.2.0-dev.2) (2026-01-29)
|
|
7
151
|
|
|
8
152
|
### Bug Fixes
|
package/TODO.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# TODO: @rxap/schematics-ts-morph Audit Findings & Action Plan
|
|
2
|
+
|
|
3
|
+
This file documents critical bugs, functional issues, platform-compatibility bugs, and architectural debt found during the audit of the `@rxap/schematics-ts-morph` project.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 💻 Platform Compatibility & Path Normalization Issues
|
|
8
|
+
|
|
9
|
+
### 1. Windows-Incompatible Backslash Import Specifiers
|
|
10
|
+
* **Files:**
|
|
11
|
+
* [add-nest-module-to-app-module.ts](file:///mnt/mmuenker/Projects/rxap/packages/packages/schematic/ts-morph/src/lib/nest/add-nest-module-to-app-module.ts#L36)
|
|
12
|
+
* [coerce-nest-module.ts](file:///mnt/mmuenker/Projects/rxap/packages/packages/schematic/ts-morph/src/lib/nest/coerce-nest-module.ts#L126)
|
|
13
|
+
* **Problem:**
|
|
14
|
+
Node's `'path'` module functions (`join` and `relative`) are used to compute relative paths for module specifiers. On Windows platforms, these resolve with backslashes (`\`) (e.g., `..\foo\bar.module`). When written as TypeScript import specifiers, this causes syntax/compilation errors.
|
|
15
|
+
* **Recommended Fix:**
|
|
16
|
+
Normalize generated module specifiers to always use forward slashes (`/`), either via `@angular-devkit/core`'s `normalize` function or replacing backslashes:
|
|
17
|
+
```typescript
|
|
18
|
+
const relativePath = relative(cleanAppModulePath, modulePath).replace(/\\/g, '/');
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 2. File-to-File Relative Path Resolution Bug
|
|
22
|
+
* **File:** [coerce-nest-module.ts](file:///mnt/mmuenker/Projects/rxap/packages/packages/schematic/ts-morph/src/lib/nest/coerce-nest-module.ts#L126)
|
|
23
|
+
* **Problem:**
|
|
24
|
+
Calling `relative(moduleFile, moduleFilePath)` where both parameters are file paths causes two issues:
|
|
25
|
+
1. `relative` treats the first file path as a folder path, leading to an extra incorrect parent traversal (`../` instead of `./`).
|
|
26
|
+
2. Relative path calculation does not prepend `./` for files in the same directory, which makes compilers resolve the import from `node_modules` instead of the local folder.
|
|
27
|
+
* **Recommended Fix:**
|
|
28
|
+
Extract the directory name of the source file first before calling `relative`, and ensure the output starts with `./` or `../`:
|
|
29
|
+
```typescript
|
|
30
|
+
import { dirname } from 'path';
|
|
31
|
+
...
|
|
32
|
+
let relativePath = relative(dirname(moduleFile), moduleFilePath).replace(/\\/g, '/');
|
|
33
|
+
if (!relativePath.startsWith('.') && !relativePath.startsWith('/')) {
|
|
34
|
+
relativePath = './' + relativePath;
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 🏛️ Architectural Debt & Duplicate Logic
|
|
41
|
+
|
|
42
|
+
### 3. Local Redundant `ts-morph` Helpers
|
|
43
|
+
* **Folder:** `src/lib/ts-morph/`
|
|
44
|
+
* **Problem:**
|
|
45
|
+
A massive collection of typescript-manipulation helpers (like `CoerceDecorator`, `CoerceImports`, `CoerceClassProperty`, `CoerceInterface`) are duplicated in this project and marked as `@deprecated import from @rxap/ts-morph`. However, the local library code inside `lib/angular/` and `lib/nest/` still imports and uses these local deprecated copies instead of using `@rxap/ts-morph` directly.
|
|
46
|
+
* **Recommended Fix:**
|
|
47
|
+
1. Update all relative imports pointing to `./ts-morph/` or `../ts-morph/` to import from `@rxap/ts-morph` instead.
|
|
48
|
+
2. Delete the redundant files in `packages/schematic/ts-morph/src/lib/ts-morph/` to eliminate duplicate maintenance.
|
|
49
|
+
|
|
50
|
+
### 4. Loose Equality in Handlebars Helpers
|
|
51
|
+
* **File:** [coerce-component.ts](file:///mnt/mmuenker/Projects/rxap/packages/packages/schematic/ts-morph/src/lib/angular/coerce-component.ts#L104-L117)
|
|
52
|
+
* **Problem:**
|
|
53
|
+
Custom Handlebars helper functions `ifeq` and `ifnoteq` use loose equality (`==` and `!=`), which is an anti-pattern and can cause unexpected type-coercion bugs.
|
|
54
|
+
* **Recommended Fix:**
|
|
55
|
+
Refactor helpers to use strict equality (`===` and `!==`).
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "19.2.
|
|
2
|
+
"version": "19.2.1-dev.1",
|
|
3
3
|
"name": "@rxap/schematics-ts-morph",
|
|
4
4
|
"description": "This package provides utilities for manipulating TypeScript code using ts-morph, particularly for Angular and NestJS projects. It offers functions to add, coerce, and modify code elements like classes, methods, decorators, and imports. The package also includes specialized functions for working with Angular components, NestJS modules, and form definitions.\n",
|
|
5
5
|
"license": "GPL-3.0-or-later",
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"@angular-devkit/schematics": "19.2.1",
|
|
9
9
|
"@nx/devkit": "20.5.0",
|
|
10
10
|
"@rxap/schematics-utilities": "^19.1.0-dev.0",
|
|
11
|
-
"@rxap/ts-morph": "^1.
|
|
12
|
-
"@rxap/utilities": "^16.5.1-dev.
|
|
13
|
-
"@rxap/workspace-ts-morph": "^19.1.14-dev.
|
|
14
|
-
"@rxap/workspace-utilities": "^19.9.1-dev.
|
|
11
|
+
"@rxap/ts-morph": "^1.7.0-dev.1",
|
|
12
|
+
"@rxap/utilities": "^16.5.1-dev.1",
|
|
13
|
+
"@rxap/workspace-ts-morph": "^19.1.14-dev.1",
|
|
14
|
+
"@rxap/workspace-utilities": "^19.9.1-dev.1",
|
|
15
15
|
"colors": "^1.4.0",
|
|
16
16
|
"handlebars": "^4.7.8",
|
|
17
17
|
"ts-morph": "^18.0.0",
|
|
@@ -46,7 +46,6 @@
|
|
|
46
46
|
},
|
|
47
47
|
"schematics": "./generators.json",
|
|
48
48
|
"type": "commonjs",
|
|
49
|
-
"gitHead": "d5679c2b9b06459349f6c196d7e0db1007e79387",
|
|
50
49
|
"types": "./src/index.d.ts",
|
|
51
50
|
"main": "./src/index.js"
|
|
52
51
|
}
|
|
@@ -3,16 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.initGenerator = initGenerator;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const devkit_1 = require("@nx/devkit");
|
|
6
|
+
const fs_1 = require("fs");
|
|
6
7
|
const path_1 = require("path");
|
|
7
8
|
function initGenerator(tree, options) {
|
|
8
9
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
9
10
|
var _a, _b, _c, _d, _e;
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
// The package's own package.json lives on disk next to the compiled generator
|
|
12
|
+
// (inside node_modules when installed), which the virtual Tree does not track.
|
|
13
|
+
// Read it directly from the physical filesystem.
|
|
14
|
+
const packageJsonFilePath = (0, path_1.join)(__dirname, '..', '..', '..', 'package.json');
|
|
15
|
+
if (!(0, fs_1.existsSync)(packageJsonFilePath)) {
|
|
12
16
|
console.error('package.json not found in: ' + packageJsonFilePath);
|
|
13
17
|
return;
|
|
14
18
|
}
|
|
15
|
-
const { peerDependencies, name: packageName } = JSON.parse(
|
|
19
|
+
const { peerDependencies, name: packageName } = JSON.parse((0, fs_1.readFileSync)(packageJsonFilePath, 'utf-8'));
|
|
16
20
|
console.log(`Coerce peer dependencies for package: ${packageName}`);
|
|
17
21
|
if (!peerDependencies || !Object.keys(peerDependencies).length) {
|
|
18
22
|
console.log('No peer dependencies found');
|
|
@@ -30,11 +34,12 @@ function initGenerator(tree, options) {
|
|
|
30
34
|
isDevDependency = false;
|
|
31
35
|
tree.write('package.json', JSON.stringify(rootPackageJson, null, 2));
|
|
32
36
|
}
|
|
33
|
-
if (!isDevDependency &&
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
if (!isDevDependency &&
|
|
38
|
+
[
|
|
39
|
+
/^@rxap\/plugin/,
|
|
40
|
+
/^@rxap\/workspace/,
|
|
41
|
+
/@rxap\/schematic/,
|
|
42
|
+
].some((rx) => rx.test(packageName))) {
|
|
38
43
|
(_c = rootPackageJson.devDependencies) !== null && _c !== void 0 ? _c : (rootPackageJson.devDependencies = {});
|
|
39
44
|
rootPackageJson.devDependencies[packageName] =
|
|
40
45
|
rootPackageJson.dependencies[packageName];
|
|
@@ -63,35 +68,39 @@ function initGenerator(tree, options) {
|
|
|
63
68
|
(0, devkit_1.installPackagesTask)(tree);
|
|
64
69
|
for (const peer of Object.keys(missingPeerDependencies)) {
|
|
65
70
|
console.log(`Peer dependency ${peer} added to package.json`);
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
// node_modules is physical and excluded from the virtual Tree, so resolve
|
|
72
|
+
// peer files from disk relative to the workspace root.
|
|
73
|
+
const peerPackageDir = (0, path_1.join)(tree.root, 'node_modules', ...peer.split('/'));
|
|
74
|
+
const peerPackageJsonFilePath = (0, path_1.join)(peerPackageDir, 'package.json');
|
|
75
|
+
if (!(0, fs_1.existsSync)(peerPackageJsonFilePath)) {
|
|
68
76
|
console.log(`Peer dependency ${peer} has no package.json`);
|
|
69
77
|
continue;
|
|
70
78
|
}
|
|
71
|
-
const { generators, schematics } = JSON.parse(
|
|
79
|
+
const { generators, schematics } = JSON.parse((0, fs_1.readFileSync)(peerPackageJsonFilePath, 'utf-8'));
|
|
72
80
|
if (!generators && !schematics) {
|
|
73
81
|
console.log(`Peer dependency ${peer} has no generators or schematics`);
|
|
74
82
|
continue;
|
|
75
83
|
}
|
|
76
84
|
const configFile = generators || schematics;
|
|
77
|
-
|
|
85
|
+
const configFilePath = (0, path_1.join)(peerPackageDir, configFile);
|
|
86
|
+
if (!(0, fs_1.existsSync)(configFilePath)) {
|
|
78
87
|
console.log(`Peer dependency ${peer} has no generators or schematics file`);
|
|
79
88
|
continue;
|
|
80
89
|
}
|
|
81
|
-
const config = JSON.parse(
|
|
90
|
+
const config = JSON.parse((0, fs_1.readFileSync)(configFilePath, 'utf-8'));
|
|
82
91
|
if (!((_d = config.generators) === null || _d === void 0 ? void 0 : _d.init)) {
|
|
83
92
|
console.log(`Peer dependency ${peer} has no init generator`);
|
|
84
93
|
continue;
|
|
85
94
|
}
|
|
86
95
|
const initGeneratorFilePath = config.generators.init.factory;
|
|
87
|
-
const fullInitGeneratorFilePath = (0, path_1.join)(
|
|
88
|
-
if (!
|
|
96
|
+
const fullInitGeneratorFilePath = (0, path_1.join)(peerPackageDir, initGeneratorFilePath) + '.js';
|
|
97
|
+
if (!(0, fs_1.existsSync)(fullInitGeneratorFilePath)) {
|
|
89
98
|
console.log(`Peer dependency ${peer} has no init generator file: ` +
|
|
90
99
|
fullInitGeneratorFilePath);
|
|
91
100
|
continue;
|
|
92
101
|
}
|
|
93
102
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
94
|
-
const initGenerator = (_e = require((0, path_1.join)(
|
|
103
|
+
const initGenerator = (_e = require((0, path_1.join)(peerPackageDir, initGeneratorFilePath))) === null || _e === void 0 ? void 0 : _e.default;
|
|
95
104
|
if (typeof initGenerator !== 'function') {
|
|
96
105
|
console.log(`Peer dependency ${peer} has no init generator function`);
|
|
97
106
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/schematic/ts-morph/src/generators/init/generator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/schematic/ts-morph/src/generators/init/generator.ts"],"names":[],"mappings":"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"}
|