devextreme-schematics 1.12.0 → 1.12.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/README.md +15 -14
- package/package.json +2 -2
- package/src/migrate-config-components/README.md +14 -27
- package/src/migrate-config-components/index.d.ts +3 -3
- package/src/migrate-config-components/index.js +25 -34
- package/src/migrate-config-components/index.js.map +1 -1
- package/src/migrate-config-components/index.ts +33 -36
- package/src/migrate-config-components/template-migrator.js +18 -34
- package/src/migrate-config-components/template-migrator.js.map +1 -1
- package/src/migrate-config-components/template-migrator.ts +18 -31
- package/src/utility/typescript-resolver.d.ts +12 -0
- package/src/utility/typescript-resolver.js +153 -0
- package/src/utility/typescript-resolver.js.map +1 -0
- package/src/utility/typescript-resolver.ts +144 -0
package/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
# DevExtreme Schematics
|
|
2
|
-
DevExtreme
|
|
2
|
+
DevExtreme Schematics are Angular workflow tools for applications created with [DevExtreme CLI](https://github.com/devexpress/DevExtreme-CLI). You can use these tools to add application views and layouts to your apps or to perform other tasks related to DevExtreme and the DevExtreme [Angular Application Template](https://devexpress.github.io/devextreme-angular-template). For more information on Angular Schematics, refer to the following topic: [Introduction to Angular Schematics](https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2).
|
|
3
3
|
|
|
4
4
|
## Included Schematics
|
|
5
5
|
|
|
6
6
|
This package includes the following schematics:
|
|
7
7
|
|
|
8
8
|
- [install](src/install)
|
|
9
|
-
Adds DevExtreme to an Angular application
|
|
9
|
+
Adds DevExtreme to an Angular application.
|
|
10
10
|
|
|
11
11
|
- [add-layout](src/add-layout)
|
|
12
|
-
Adds a DevExtreme layout to
|
|
12
|
+
Adds a DevExtreme layout to an Angular application.
|
|
13
13
|
|
|
14
14
|
- [add-app-template](src/add-app-template)
|
|
15
|
-
Adds a DevExtreme
|
|
15
|
+
Adds a DevExtreme app template to an Angular application.
|
|
16
16
|
|
|
17
17
|
- [add-sample-views](src/add-sample-views)
|
|
18
|
-
Adds sample views to
|
|
18
|
+
Adds sample views to an Angular application.
|
|
19
19
|
|
|
20
20
|
- [add-view](src/add-view)
|
|
21
|
-
Adds a view to
|
|
21
|
+
Adds a view to an Angular application.
|
|
22
22
|
|
|
23
23
|
## TypeScript Dependency & Global CLI Usage
|
|
24
24
|
|
|
@@ -28,21 +28,22 @@ Some DevExtreme migration schematics require TypeScript to process inline Angula
|
|
|
28
28
|
- Your project's node_modules
|
|
29
29
|
- The global node_modules
|
|
30
30
|
|
|
31
|
-
If
|
|
31
|
+
If the CLI fails to find TypeScript, it skips inline template migration and displays a warning message that contains resolution attempts and errors.
|
|
32
32
|
|
|
33
|
-
### How to
|
|
33
|
+
### How to Install TypeScript
|
|
34
34
|
|
|
35
|
-
1. **Local Project:**
|
|
35
|
+
1. **Local Project:** To install TypeScript in a project, run the following command:
|
|
36
36
|
```sh
|
|
37
37
|
npm install typescript --save-dev
|
|
38
38
|
```
|
|
39
|
-
2. **Global CLI:**
|
|
39
|
+
2. **Global CLI:** To install TypeScript globally on your machine, run the following command:
|
|
40
40
|
```sh
|
|
41
41
|
npm install -g typescript
|
|
42
42
|
```
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
|
|
44
|
+
**Troubleshooting**
|
|
45
|
+
|
|
46
|
+
- Some npm global installs may not link dependencies as expected. If you experience repeated TypeScript resolution errors, try running CLI commands from a project where TypeScript is installed locally.
|
|
46
47
|
- You can also manually link TypeScript to your global node_modules if needed.
|
|
47
48
|
|
|
48
|
-
If
|
|
49
|
+
If errors persist, review resolution attempt information in the warning output and check your npm/node installation paths.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devextreme-schematics",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.1",
|
|
4
4
|
"description": "DevExtreme schematics",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsc -p tsconfig.json",
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"tslint": "^5.20.1",
|
|
39
39
|
"typescript": "~5.2.1"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "7af3cab84fb0dee433711d63dd8ed65af4c7d9dd"
|
|
42
42
|
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
# migrate-config-components
|
|
2
2
|
|
|
3
|
-
A schematic that migrates
|
|
3
|
+
A schematic that migrates generic DevExtreme configuration components.
|
|
4
4
|
|
|
5
5
|
## Description
|
|
6
6
|
|
|
7
|
-
This schematic automatically migrates
|
|
7
|
+
This schematic automatically migrates generic configuration components to named configuration components in your DevExtreme-powered Angular app. The migration command is available as a top-level DevExtreme CLI command that you can run from any directory.
|
|
8
8
|
|
|
9
9
|
## Usage
|
|
10
10
|
|
|
11
11
|
### Via DevExtreme CLI (Recommended)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
You can run the migration command from any directory, including both inside and outside Angular workspaces:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
devextreme migrate angular-config-components
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
###
|
|
19
|
+
### Parameters (All Optional)
|
|
20
20
|
|
|
21
21
|
- `--include`: Glob patterns of template files to include (default: `**/*.html`). Separate multiple patterns with commas.
|
|
22
|
-
- `--script-include`: Glob patterns for TypeScript/JavaScript files to scan for inline
|
|
23
|
-
- `--dry`: Run in dry mode to preview changes without applying them (default: `false`)
|
|
22
|
+
- `--script-include`: Glob patterns for TypeScript/JavaScript files to scan for inline templates (default: `**/*.ts,**/*.js`). Pass an empty value ('' or []) to disable.
|
|
23
|
+
- `--dry`: Run in dry mode to preview changes without applying them (default: `false`).
|
|
24
24
|
|
|
25
25
|
### Examples
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
# Migrate all HTML templates and inline templates (
|
|
28
|
+
# Migrate all HTML templates and inline templates (default configuration)
|
|
29
29
|
devextreme migrate angular-config-components
|
|
30
30
|
|
|
31
31
|
# Migrate only specific files
|
|
@@ -43,17 +43,15 @@ devextreme migrate angular-config-components --include="*.html,*.ts" --dry
|
|
|
43
43
|
|
|
44
44
|
### Via Angular CLI
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
You can also use the Angular CLI to run the schematic:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
ng g devextreme-schematics:migrate-config-components
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
##
|
|
52
|
+
## Sample results
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
**Before (deprecated nested):**
|
|
54
|
+
**Generic configuration components:**
|
|
57
55
|
```html
|
|
58
56
|
<dx-data-grid>
|
|
59
57
|
<dxi-column field="name"></dxi-column>
|
|
@@ -61,7 +59,7 @@ This schematic automatically updates your templates to replace deprecated nested
|
|
|
61
59
|
</dx-data-grid>
|
|
62
60
|
```
|
|
63
61
|
|
|
64
|
-
**
|
|
62
|
+
**Named configuration components:**
|
|
65
63
|
```html
|
|
66
64
|
<dx-data-grid>
|
|
67
65
|
<dxi-data-grid-column field="name"></dxi-data-grid-column>
|
|
@@ -69,19 +67,8 @@ This schematic automatically updates your templates to replace deprecated nested
|
|
|
69
67
|
</dx-data-grid>
|
|
70
68
|
```
|
|
71
69
|
|
|
72
|
-
### Why migrate?
|
|
73
|
-
|
|
74
|
-
DevExtreme Angular components are moving from a nested structure (e.g., `<dxi-column>`) to a config-based structure (e.g., `<dxi-data-grid-column>`) for improved clarity, maintainability, and future compatibility. This schematic automates the migration process to help you keep your codebase up to date with the latest DevExtreme standards.
|
|
75
|
-
|
|
76
70
|
## Requirements
|
|
77
71
|
|
|
78
|
-
- Node.js and npm
|
|
79
|
-
- Angular application with DevExtreme components
|
|
80
|
-
- DevExtreme Angular version that supports
|
|
81
|
-
|
|
82
|
-
## Notes
|
|
83
|
-
|
|
84
|
-
- The command can be run from any directory, not just Angular workspaces
|
|
85
|
-
- When run outside an Angular workspace, the underlying Angular CLI will show appropriate error messages
|
|
86
|
-
- All options are optional and have sensible defaults
|
|
87
|
-
- The command uses the latest version of `devextreme-schematics` automatically
|
|
72
|
+
- Node.js and npm or yarn.
|
|
73
|
+
- Angular application with DevExtreme components.
|
|
74
|
+
- DevExtreme Angular version that supports named configuration components.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Rule } from '@angular-devkit/schematics';
|
|
2
2
|
export interface Options {
|
|
3
|
-
include?: string[];
|
|
4
|
-
dry?: boolean;
|
|
5
|
-
scriptInclude?: string[];
|
|
3
|
+
include?: string | string[];
|
|
4
|
+
dry?: boolean | string;
|
|
5
|
+
scriptInclude?: string | string[];
|
|
6
6
|
}
|
|
7
7
|
export declare function migrateConfigComponents(options?: Options): Rule;
|
|
@@ -16,40 +16,9 @@ exports.migrateConfigComponents = void 0;
|
|
|
16
16
|
const template_migrator_1 = require("./template-migrator");
|
|
17
17
|
const deprecated_config_map_json_1 = __importDefault(require("./mappings/deprecated-config-map.json"));
|
|
18
18
|
function migrateConfigComponents(options = {}) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
if (Array.isArray(rawInclude) && rawInclude.length) {
|
|
23
|
-
include = rawInclude;
|
|
24
|
-
}
|
|
25
|
-
else if (typeof rawInclude === 'string' && rawInclude) {
|
|
26
|
-
let str = rawInclude.trim();
|
|
27
|
-
if (str.startsWith('[') && str.endsWith(']')) {
|
|
28
|
-
str = str.slice(1, -1);
|
|
29
|
-
}
|
|
30
|
-
include = str.split(',').map((s) => s.trim()).filter((s) => !!s);
|
|
31
|
-
}
|
|
32
|
-
// Coerce string 'true'/'false' to boolean for dry option
|
|
33
|
-
let dryFlag = false;
|
|
34
|
-
if (typeof options.dry === 'string') {
|
|
35
|
-
dryFlag = options.dry === 'true';
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
dryFlag = !!options.dry;
|
|
39
|
-
}
|
|
40
|
-
// Accept --script-include as array or comma-separated string
|
|
41
|
-
let scriptGlobs = ['**/*.ts', '**/*.js'];
|
|
42
|
-
const rawScriptInclude = options.scriptInclude;
|
|
43
|
-
if (Array.isArray(rawScriptInclude) && rawScriptInclude.length) {
|
|
44
|
-
scriptGlobs = rawScriptInclude;
|
|
45
|
-
}
|
|
46
|
-
else if (typeof rawScriptInclude === 'string' && rawScriptInclude) {
|
|
47
|
-
let str = rawScriptInclude.trim();
|
|
48
|
-
if (str.startsWith('[') && str.endsWith(']')) {
|
|
49
|
-
str = str.slice(1, -1);
|
|
50
|
-
}
|
|
51
|
-
scriptGlobs = str.split(',').map((s) => s.trim()).filter((s) => !!s);
|
|
52
|
-
}
|
|
19
|
+
const include = normalizeGlobOption(options.include, ['**/*.html']);
|
|
20
|
+
const dryFlag = normalizeBoolean(options.dry);
|
|
21
|
+
const scriptGlobs = normalizeGlobOption(options.scriptInclude, ['**/*.ts', '**/*.js']);
|
|
53
22
|
return (tree, ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
54
23
|
ctx.logger.info(`[config-migrator] Starting…`);
|
|
55
24
|
const hostMap = deprecated_config_map_json_1.default;
|
|
@@ -77,4 +46,26 @@ function componentToSelectorGuess(componentName) {
|
|
|
77
46
|
const core = componentName.replace(/Component$/, '').replace(/^Dx/, 'dx-');
|
|
78
47
|
return core.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
79
48
|
}
|
|
49
|
+
function normalizeGlobOption(value, fallback) {
|
|
50
|
+
if (Array.isArray(value)) {
|
|
51
|
+
return value.filter(Boolean);
|
|
52
|
+
}
|
|
53
|
+
if (typeof value === 'string' && value.trim()) {
|
|
54
|
+
const trimmed = value.trim();
|
|
55
|
+
const inner = trimmed.startsWith('[') && trimmed.endsWith(']')
|
|
56
|
+
? trimmed.slice(1, -1)
|
|
57
|
+
: trimmed;
|
|
58
|
+
return inner
|
|
59
|
+
.split(',')
|
|
60
|
+
.map(segment => segment.trim())
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
}
|
|
63
|
+
return fallback.slice();
|
|
64
|
+
}
|
|
65
|
+
function normalizeBoolean(value) {
|
|
66
|
+
if (typeof value === 'string') {
|
|
67
|
+
return value.toLowerCase() === 'true';
|
|
68
|
+
}
|
|
69
|
+
return !!value;
|
|
70
|
+
}
|
|
80
71
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,2DAA+G;AAC/G,uGAA4D;AAQ5D,SAAgB,uBAAuB,CAAC,UAAmB,EAAE;IAC3D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,45 +4,15 @@ import { applyHostAwareTemplateMigrations, applyInlineComponentTemplateMigration
|
|
|
4
4
|
import mapping from './mappings/deprecated-config-map.json';
|
|
5
5
|
|
|
6
6
|
export interface Options {
|
|
7
|
-
include?: string[];
|
|
8
|
-
dry?: boolean;
|
|
9
|
-
scriptInclude?: string[];
|
|
7
|
+
include?: string | string[];
|
|
8
|
+
dry?: boolean | string;
|
|
9
|
+
scriptInclude?: string | string[];
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export function migrateConfigComponents(options: Options = {}): Rule {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
if (Array.isArray(rawInclude) && rawInclude.length) {
|
|
17
|
-
include = rawInclude;
|
|
18
|
-
} else if (typeof rawInclude === 'string' && rawInclude) {
|
|
19
|
-
let str = (rawInclude as string).trim();
|
|
20
|
-
if (str.startsWith('[') && str.endsWith(']')) {
|
|
21
|
-
str = str.slice(1, -1);
|
|
22
|
-
}
|
|
23
|
-
include = str.split(',').map((s: string) => s.trim()).filter((s: string) => !!s);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Coerce string 'true'/'false' to boolean for dry option
|
|
27
|
-
let dryFlag: boolean = false;
|
|
28
|
-
if (typeof options.dry === 'string') {
|
|
29
|
-
dryFlag = options.dry === 'true';
|
|
30
|
-
} else {
|
|
31
|
-
dryFlag = !!options.dry;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Accept --script-include as array or comma-separated string
|
|
35
|
-
let scriptGlobs: string[] = ['**/*.ts', '**/*.js'];
|
|
36
|
-
const rawScriptInclude = options.scriptInclude;
|
|
37
|
-
if (Array.isArray(rawScriptInclude) && rawScriptInclude.length) {
|
|
38
|
-
scriptGlobs = rawScriptInclude;
|
|
39
|
-
} else if (typeof rawScriptInclude === 'string' && rawScriptInclude) {
|
|
40
|
-
let str = (rawScriptInclude as string).trim();
|
|
41
|
-
if (str.startsWith('[') && str.endsWith(']')) {
|
|
42
|
-
str = str.slice(1, -1);
|
|
43
|
-
}
|
|
44
|
-
scriptGlobs = str.split(',').map((s: string) => s.trim()).filter((s: string) => !!s);
|
|
45
|
-
}
|
|
13
|
+
const include = normalizeGlobOption(options.include, ['**/*.html']);
|
|
14
|
+
const dryFlag = normalizeBoolean(options.dry);
|
|
15
|
+
const scriptGlobs = normalizeGlobOption(options.scriptInclude, ['**/*.ts', '**/*.js']);
|
|
46
16
|
|
|
47
17
|
return async (tree: Tree, ctx: SchematicContext): Promise<void> => {
|
|
48
18
|
ctx.logger.info(`[config-migrator] Starting…`);
|
|
@@ -78,3 +48,30 @@ function componentToSelectorGuess(componentName: string): string {
|
|
|
78
48
|
const core = componentName.replace(/Component$/, '').replace(/^Dx/, 'dx-');
|
|
79
49
|
return core.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
80
50
|
}
|
|
51
|
+
|
|
52
|
+
function normalizeGlobOption(
|
|
53
|
+
value: Options['include'] | Options['scriptInclude'],
|
|
54
|
+
fallback: string[]
|
|
55
|
+
): string[] {
|
|
56
|
+
if (Array.isArray(value)) {
|
|
57
|
+
return value.filter(Boolean);
|
|
58
|
+
}
|
|
59
|
+
if (typeof value === 'string' && value.trim()) {
|
|
60
|
+
const trimmed = value.trim();
|
|
61
|
+
const inner = trimmed.startsWith('[') && trimmed.endsWith(']')
|
|
62
|
+
? trimmed.slice(1, -1)
|
|
63
|
+
: trimmed;
|
|
64
|
+
return inner
|
|
65
|
+
.split(',')
|
|
66
|
+
.map(segment => segment.trim())
|
|
67
|
+
.filter(Boolean);
|
|
68
|
+
}
|
|
69
|
+
return fallback.slice();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function normalizeBoolean(value: Options['dry']): boolean {
|
|
73
|
+
if (typeof value === 'string') {
|
|
74
|
+
return value.toLowerCase() === 'true';
|
|
75
|
+
}
|
|
76
|
+
return !!value;
|
|
77
|
+
}
|
|
@@ -34,39 +34,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
34
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
|
-
var _a;
|
|
38
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
38
|
exports.transformTemplate = exports.applyInlineComponentTemplateMigrations = exports.applyHostAwareTemplateMigrations = void 0;
|
|
40
39
|
const parse5 = __importStar(require("parse5"));
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
40
|
const picomatch_1 = __importDefault(require("picomatch"));
|
|
41
|
+
const typescript_resolver_1 = require("../utility/typescript-resolver");
|
|
43
42
|
// Dynamically require TypeScript if available; skip inline template migration if not.
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
process.cwd(),
|
|
49
|
-
path.dirname(((_a = require.main) === null || _a === void 0 ? void 0 : _a.filename) || ''),
|
|
50
|
-
];
|
|
51
|
-
for (const p of tsResolutionPaths) {
|
|
52
|
-
try {
|
|
53
|
-
// tslint:disable-next-line:no-var-requires
|
|
54
|
-
ts = require(require.resolve('typescript', { paths: [p] }));
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
tsResolutionErrors.push(`Failed to import TypeScript from ${p}: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (!ts) {
|
|
62
|
-
try {
|
|
63
|
-
// tslint:disable-next-line:no-var-requires
|
|
64
|
-
ts = require('typescript');
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
tsResolutionErrors.push(`Failed to import TypeScript: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
43
|
+
// Uses a 3-level fallback: project search -> global search -> temporary install
|
|
44
|
+
const tsResolution = (0, typescript_resolver_1.resolveTypeScript)();
|
|
45
|
+
const ts = tsResolution.ts;
|
|
46
|
+
const tsResolutionErrors = tsResolution.errors;
|
|
70
47
|
// Transform external HTML template files matched by includeGlobs.
|
|
71
48
|
function applyHostAwareTemplateMigrations(tree, runner, exec) {
|
|
72
49
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -105,13 +82,20 @@ function applyInlineComponentTemplateMigrations(tree, runner, exec, scriptGlobs)
|
|
|
105
82
|
return;
|
|
106
83
|
}
|
|
107
84
|
if (!ts) {
|
|
85
|
+
const errorDetails = tsResolutionErrors.length
|
|
86
|
+
? `Resolution attempts:\n${tsResolutionErrors.map(e => ' - ' + e).join('\n')}\n`
|
|
87
|
+
: '';
|
|
108
88
|
exec.logger.warn('[config-migrator] Failed to import TypeScript. Skipping inline template migration.\n' +
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
'
|
|
112
|
-
'
|
|
113
|
-
'
|
|
114
|
-
'
|
|
89
|
+
errorDetails +
|
|
90
|
+
'The schematic attempted to import TypeScript from the following locations:\n' +
|
|
91
|
+
' 1. Project node_modules\n' +
|
|
92
|
+
' 2. Global node_modules\n' +
|
|
93
|
+
' 3. Temporary installation (npm cache)\n\n' +
|
|
94
|
+
'To resolve this issue, install TypeScript.\n\n' +
|
|
95
|
+
'Project install:\n' +
|
|
96
|
+
' npm install typescript --save-dev\n\n' +
|
|
97
|
+
'Global install:\n' +
|
|
98
|
+
' npm install -g typescript\n\n');
|
|
115
99
|
return;
|
|
116
100
|
}
|
|
117
101
|
const matcher = (0, picomatch_1.default)(scriptGlobs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-migrator.js","sourceRoot":"","sources":["template-migrator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"template-migrator.js","sourceRoot":"","sources":["template-migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +1,13 @@
|
|
|
1
1
|
import { Tree } from '@angular-devkit/schematics';
|
|
2
2
|
import * as parse5 from 'parse5';
|
|
3
|
-
import * as path from 'path';
|
|
4
3
|
import picomatch from 'picomatch';
|
|
4
|
+
import { resolveTypeScript } from '../utility/typescript-resolver';
|
|
5
5
|
|
|
6
6
|
// Dynamically require TypeScript if available; skip inline template migration if not.
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
process.cwd(),
|
|
12
|
-
path.dirname(require.main?.filename || ''),
|
|
13
|
-
];
|
|
14
|
-
for (const p of tsResolutionPaths) {
|
|
15
|
-
try {
|
|
16
|
-
// tslint:disable-next-line:no-var-requires
|
|
17
|
-
ts = require(require.resolve('typescript', { paths: [p] }));
|
|
18
|
-
break;
|
|
19
|
-
} catch (err) {
|
|
20
|
-
tsResolutionErrors.push(`Failed to import TypeScript from ${p}: ${err?.message || err}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
if (!ts) {
|
|
24
|
-
try {
|
|
25
|
-
// tslint:disable-next-line:no-var-requires
|
|
26
|
-
ts = require('typescript');
|
|
27
|
-
} catch (err) {
|
|
28
|
-
tsResolutionErrors.push(`Failed to import TypeScript: ${err?.message || err}`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
7
|
+
// Uses a 3-level fallback: project search -> global search -> temporary install
|
|
8
|
+
const tsResolution = resolveTypeScript();
|
|
9
|
+
const ts: any = tsResolution.ts;
|
|
10
|
+
const tsResolutionErrors: string[] = tsResolution.errors;
|
|
31
11
|
|
|
32
12
|
// Minimal parse5 types for our usage
|
|
33
13
|
interface P5Node { [k: string]: any; }
|
|
@@ -97,14 +77,21 @@ export async function applyInlineComponentTemplateMigrations(
|
|
|
97
77
|
return;
|
|
98
78
|
}
|
|
99
79
|
if (!ts) {
|
|
80
|
+
const errorDetails = tsResolutionErrors.length
|
|
81
|
+
? `Resolution attempts:\n${tsResolutionErrors.map(e => ' - ' + e).join('\n')}\n`
|
|
82
|
+
: '';
|
|
100
83
|
exec.logger.warn(
|
|
101
84
|
'[config-migrator] Failed to import TypeScript. Skipping inline template migration.\n' +
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
'
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
'
|
|
85
|
+
errorDetails +
|
|
86
|
+
'The schematic attempted to import TypeScript from the following locations:\n' +
|
|
87
|
+
' 1. Project node_modules\n' +
|
|
88
|
+
' 2. Global node_modules\n' +
|
|
89
|
+
' 3. Temporary installation (npm cache)\n\n' +
|
|
90
|
+
'To resolve this issue, install TypeScript.\n\n' +
|
|
91
|
+
'Project install:\n' +
|
|
92
|
+
' npm install typescript --save-dev\n\n' +
|
|
93
|
+
'Global install:\n' +
|
|
94
|
+
' npm install -g typescript\n\n'
|
|
108
95
|
);
|
|
109
96
|
return;
|
|
110
97
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface TypeScriptResolutionResult {
|
|
2
|
+
ts: any | null;
|
|
3
|
+
resolutionMethod: 'project' | 'global' | 'temporary' | null;
|
|
4
|
+
errors: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves TypeScript with a 3-level fallback strategy:
|
|
8
|
+
* 1. Project search - look in the user's project node_modules
|
|
9
|
+
* 2. Global search - look in global node_modules
|
|
10
|
+
* 3. Temporary install - use npx to temporarily install typescript
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveTypeScript(): TypeScriptResolutionResult;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.resolveTypeScript = void 0;
|
|
27
|
+
const child_process_1 = require("child_process");
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const fs = __importStar(require("fs"));
|
|
30
|
+
/**
|
|
31
|
+
* Resolves TypeScript with a 3-level fallback strategy:
|
|
32
|
+
* 1. Project search - look in the user's project node_modules
|
|
33
|
+
* 2. Global search - look in global node_modules
|
|
34
|
+
* 3. Temporary install - use npx to temporarily install typescript
|
|
35
|
+
*/
|
|
36
|
+
function resolveTypeScript() {
|
|
37
|
+
const errors = [];
|
|
38
|
+
try {
|
|
39
|
+
const projectTs = tryResolveFromProject();
|
|
40
|
+
if (projectTs) {
|
|
41
|
+
return {
|
|
42
|
+
ts: projectTs,
|
|
43
|
+
resolutionMethod: 'project',
|
|
44
|
+
errors: []
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
errors.push(`Project resolution failed: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const globalTs = tryResolveFromGlobal();
|
|
53
|
+
if (globalTs) {
|
|
54
|
+
return {
|
|
55
|
+
ts: globalTs,
|
|
56
|
+
resolutionMethod: 'global',
|
|
57
|
+
errors: []
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
errors.push(`Global resolution failed: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const tempTs = tryResolveViaTemporaryInstall();
|
|
66
|
+
if (tempTs) {
|
|
67
|
+
return {
|
|
68
|
+
ts: tempTs,
|
|
69
|
+
resolutionMethod: 'temporary',
|
|
70
|
+
errors: []
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
errors.push(`Temporary install failed: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
ts: null,
|
|
79
|
+
resolutionMethod: null,
|
|
80
|
+
errors
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
exports.resolveTypeScript = resolveTypeScript;
|
|
84
|
+
function tryResolveFromProject() {
|
|
85
|
+
var _a;
|
|
86
|
+
const searchPaths = [
|
|
87
|
+
process.cwd(),
|
|
88
|
+
path.dirname(((_a = require.main) === null || _a === void 0 ? void 0 : _a.filename) || ''),
|
|
89
|
+
];
|
|
90
|
+
for (const searchPath of searchPaths) {
|
|
91
|
+
try {
|
|
92
|
+
const tsPath = require.resolve('typescript', { paths: [searchPath] });
|
|
93
|
+
// tslint:disable-next-line:no-var-requires
|
|
94
|
+
return require(tsPath);
|
|
95
|
+
}
|
|
96
|
+
catch (_b) {
|
|
97
|
+
// Continue to next path
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
function tryResolveFromGlobal() {
|
|
103
|
+
try {
|
|
104
|
+
const globalPath = (0, child_process_1.execSync)('npm root -g', { encoding: 'utf8' }).trim();
|
|
105
|
+
const typescriptPath = path.join(globalPath, 'typescript');
|
|
106
|
+
if (fs.existsSync(typescriptPath)) {
|
|
107
|
+
// tslint:disable-next-line:no-var-requires
|
|
108
|
+
return require(typescriptPath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (_a) {
|
|
112
|
+
// Fall through
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
function tryResolveViaTemporaryInstall() {
|
|
117
|
+
try {
|
|
118
|
+
const tmpDir = path.join(require('os').tmpdir(), 'devextreme-schematics-ts-' + Date.now());
|
|
119
|
+
fs.mkdirSync(tmpDir, { recursive: true });
|
|
120
|
+
const packageJson = {
|
|
121
|
+
name: 'temp-typescript-resolver',
|
|
122
|
+
version: '1.0.0',
|
|
123
|
+
dependencies: {
|
|
124
|
+
typescript: 'latest'
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
fs.writeFileSync(path.join(tmpDir, 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
128
|
+
(0, child_process_1.execSync)('npm install --silent --no-progress', {
|
|
129
|
+
cwd: tmpDir,
|
|
130
|
+
stdio: 'ignore',
|
|
131
|
+
timeout: 30000
|
|
132
|
+
});
|
|
133
|
+
const typescriptPath = path.join(tmpDir, 'node_modules', 'typescript');
|
|
134
|
+
if (fs.existsSync(typescriptPath)) {
|
|
135
|
+
// tslint:disable-next-line:no-var-requires
|
|
136
|
+
const ts = require(typescriptPath);
|
|
137
|
+
setTimeout(() => {
|
|
138
|
+
try {
|
|
139
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
140
|
+
}
|
|
141
|
+
catch (_a) {
|
|
142
|
+
// Ignore cleanup errors
|
|
143
|
+
}
|
|
144
|
+
}, 5000);
|
|
145
|
+
return ts;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (_a) {
|
|
149
|
+
// Fall through
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=typescript-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-resolver.js","sourceRoot":"","sources":["typescript-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
|
|
5
|
+
export interface TypeScriptResolutionResult {
|
|
6
|
+
ts: any | null;
|
|
7
|
+
resolutionMethod: 'project' | 'global' | 'temporary' | null;
|
|
8
|
+
errors: string[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Resolves TypeScript with a 3-level fallback strategy:
|
|
13
|
+
* 1. Project search - look in the user's project node_modules
|
|
14
|
+
* 2. Global search - look in global node_modules
|
|
15
|
+
* 3. Temporary install - use npx to temporarily install typescript
|
|
16
|
+
*/
|
|
17
|
+
export function resolveTypeScript(): TypeScriptResolutionResult {
|
|
18
|
+
const errors: string[] = [];
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const projectTs = tryResolveFromProject();
|
|
22
|
+
if (projectTs) {
|
|
23
|
+
return {
|
|
24
|
+
ts: projectTs,
|
|
25
|
+
resolutionMethod: 'project',
|
|
26
|
+
errors: []
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
} catch (err) {
|
|
30
|
+
errors.push(`Project resolution failed: ${err?.message || err}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
const globalTs = tryResolveFromGlobal();
|
|
35
|
+
if (globalTs) {
|
|
36
|
+
return {
|
|
37
|
+
ts: globalTs,
|
|
38
|
+
resolutionMethod: 'global',
|
|
39
|
+
errors: []
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
} catch (err) {
|
|
43
|
+
errors.push(`Global resolution failed: ${err?.message || err}`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const tempTs = tryResolveViaTemporaryInstall();
|
|
48
|
+
if (tempTs) {
|
|
49
|
+
return {
|
|
50
|
+
ts: tempTs,
|
|
51
|
+
resolutionMethod: 'temporary',
|
|
52
|
+
errors: []
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
errors.push(`Temporary install failed: ${err?.message || err}`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
ts: null,
|
|
61
|
+
resolutionMethod: null,
|
|
62
|
+
errors
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function tryResolveFromProject(): any {
|
|
67
|
+
const searchPaths = [
|
|
68
|
+
process.cwd(),
|
|
69
|
+
path.dirname(require.main?.filename || ''),
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
for (const searchPath of searchPaths) {
|
|
73
|
+
try {
|
|
74
|
+
const tsPath = require.resolve('typescript', { paths: [searchPath] });
|
|
75
|
+
// tslint:disable-next-line:no-var-requires
|
|
76
|
+
return require(tsPath);
|
|
77
|
+
} catch {
|
|
78
|
+
// Continue to next path
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function tryResolveFromGlobal(): any {
|
|
86
|
+
try {
|
|
87
|
+
const globalPath = execSync('npm root -g', { encoding: 'utf8' }).trim();
|
|
88
|
+
const typescriptPath = path.join(globalPath, 'typescript');
|
|
89
|
+
|
|
90
|
+
if (fs.existsSync(typescriptPath)) {
|
|
91
|
+
// tslint:disable-next-line:no-var-requires
|
|
92
|
+
return require(typescriptPath);
|
|
93
|
+
}
|
|
94
|
+
} catch {
|
|
95
|
+
// Fall through
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function tryResolveViaTemporaryInstall(): any {
|
|
102
|
+
try {
|
|
103
|
+
const tmpDir = path.join(require('os').tmpdir(), 'devextreme-schematics-ts-' + Date.now());
|
|
104
|
+
fs.mkdirSync(tmpDir, { recursive: true });
|
|
105
|
+
|
|
106
|
+
const packageJson = {
|
|
107
|
+
name: 'temp-typescript-resolver',
|
|
108
|
+
version: '1.0.0',
|
|
109
|
+
dependencies: {
|
|
110
|
+
typescript: 'latest'
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
fs.writeFileSync(
|
|
114
|
+
path.join(tmpDir, 'package.json'),
|
|
115
|
+
JSON.stringify(packageJson, null, 2)
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
execSync('npm install --silent --no-progress', {
|
|
119
|
+
cwd: tmpDir,
|
|
120
|
+
stdio: 'ignore',
|
|
121
|
+
timeout: 30000
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const typescriptPath = path.join(tmpDir, 'node_modules', 'typescript');
|
|
125
|
+
if (fs.existsSync(typescriptPath)) {
|
|
126
|
+
// tslint:disable-next-line:no-var-requires
|
|
127
|
+
const ts = require(typescriptPath);
|
|
128
|
+
|
|
129
|
+
setTimeout(() => {
|
|
130
|
+
try {
|
|
131
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
132
|
+
} catch {
|
|
133
|
+
// Ignore cleanup errors
|
|
134
|
+
}
|
|
135
|
+
}, 5000);
|
|
136
|
+
|
|
137
|
+
return ts;
|
|
138
|
+
}
|
|
139
|
+
} catch {
|
|
140
|
+
// Fall through
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return null;
|
|
144
|
+
}
|