@lucca-front/ng 21.0.3 → 21.1.0-rc.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/fesm2022/lucca-front-ng-a11y.mjs +8 -8
- package/fesm2022/lucca-front-ng-a11y.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-api.mjs +56 -88
- package/fesm2022/lucca-front-ng-api.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-app-layout.mjs +3 -3
- package/fesm2022/lucca-front-ng-box.mjs +3 -3
- package/fesm2022/lucca-front-ng-breadcrumbs.mjs +10 -10
- package/fesm2022/lucca-front-ng-breadcrumbs.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-bubble-icon.mjs +51 -0
- package/fesm2022/lucca-front-ng-bubble-icon.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-bubble-illustration.mjs +135 -0
- package/fesm2022/lucca-front-ng-bubble-illustration.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-button.mjs +3 -3
- package/fesm2022/lucca-front-ng-callout.mjs +28 -28
- package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-chip.mjs +8 -8
- package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-clear.mjs +8 -8
- package/fesm2022/lucca-front-ng-clear.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-code.mjs +3 -3
- package/fesm2022/lucca-front-ng-color.mjs +28 -0
- package/fesm2022/lucca-front-ng-color.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-comment.mjs +9 -9
- package/fesm2022/lucca-front-ng-container.mjs +4 -4
- package/fesm2022/lucca-front-ng-container.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-api.mjs +9 -9
- package/fesm2022/lucca-front-ng-core-select-department.mjs +6 -6
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs +9 -9
- package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +6 -6
- package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs +3 -3
- package/fesm2022/lucca-front-ng-core-select-user.mjs +28 -28
- package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select.mjs +117 -96
- package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core.mjs +28 -16
- package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-data-table.mjs +29 -29
- package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-date.mjs +102 -135
- package/fesm2022/lucca-front-ng-date.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-date2.mjs +78 -60
- package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-department.mjs +31 -47
- package/fesm2022/lucca-front-ng-department.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-dialog.mjs +60 -37
- package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-divider.mjs +3 -3
- package/fesm2022/lucca-front-ng-dropdown.mjs +40 -40
- package/fesm2022/lucca-front-ng-empty-state.mjs +56 -14
- package/fesm2022/lucca-front-ng-empty-state.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-establishment.mjs +43 -107
- package/fesm2022/lucca-front-ng-establishment.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-fancy-box.mjs +3 -3
- package/fesm2022/lucca-front-ng-file-upload.mjs +67 -44
- package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-filter-pills.mjs +30 -29
- package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-footer.mjs +3 -3
- package/fesm2022/lucca-front-ng-form-field.mjs +86 -17
- package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-form-header.mjs +3 -3
- package/fesm2022/lucca-front-ng-form.mjs +21 -7
- package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-formly.mjs +58 -58
- package/fesm2022/lucca-front-ng-formly.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +15 -13
- package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +117 -100
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms.mjs +194 -79
- package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-gauge.mjs +3 -3
- package/fesm2022/lucca-front-ng-grid.mjs +6 -6
- package/fesm2022/lucca-front-ng-highlight-data.mjs +3 -3
- package/fesm2022/lucca-front-ng-horizontal-navigation.mjs +7 -7
- package/fesm2022/lucca-front-ng-horizontal-navigation.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-icon.mjs +3 -3
- package/fesm2022/lucca-front-ng-index-table.mjs +31 -31
- package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-inline-message.mjs +3 -3
- package/fesm2022/lucca-front-ng-input.mjs +27 -27
- package/fesm2022/lucca-front-ng-input.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-link.mjs +21 -15
- package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-listbox.mjs +9 -9
- package/fesm2022/lucca-front-ng-listing.mjs +6 -6
- package/fesm2022/lucca-front-ng-loading.mjs +3 -3
- package/fesm2022/lucca-front-ng-main-layout.mjs +7 -7
- package/fesm2022/lucca-front-ng-main-layout.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-mobile-push.mjs +8 -8
- package/fesm2022/lucca-front-ng-mobile-push.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-modal.mjs +22 -22
- package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-multi-select.mjs +62 -62
- package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-new-badge.mjs +3 -3
- package/fesm2022/lucca-front-ng-number-format.mjs +6 -6
- package/fesm2022/lucca-front-ng-number.mjs +7 -7
- package/fesm2022/lucca-front-ng-numeric-badge.mjs +3 -3
- package/fesm2022/lucca-front-ng-option.mjs +327 -437
- package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-page-header.mjs +3 -3
- package/fesm2022/lucca-front-ng-pagination.mjs +7 -7
- package/fesm2022/lucca-front-ng-pagination.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-plg-push.mjs +7 -7
- package/fesm2022/lucca-front-ng-plg-push.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-popover.mjs +18 -50
- package/fesm2022/lucca-front-ng-popover.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-popover2.mjs +20 -20
- package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-popup.mjs +10 -10
- package/fesm2022/lucca-front-ng-progress-bar.mjs +3 -3
- package/fesm2022/lucca-front-ng-read-more.mjs +25 -23
- package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-resource-card.mjs +13 -13
- package/fesm2022/lucca-front-ng-resource-card.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-safe-content.mjs +10 -10
- package/fesm2022/lucca-front-ng-scroll-box.mjs +5 -5
- package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-scroll.mjs +7 -7
- package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +6 -6
- package/fesm2022/lucca-front-ng-segmented-control.mjs +6 -6
- package/fesm2022/lucca-front-ng-select.mjs +14 -14
- package/fesm2022/lucca-front-ng-sidepanel.mjs +7 -7
- package/fesm2022/lucca-front-ng-simple-select.mjs +40 -25
- package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-skeleton.mjs +22 -22
- package/fesm2022/lucca-front-ng-skeleton.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-sortable-list.mjs +6 -6
- package/fesm2022/lucca-front-ng-sortable-list.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-status-badge.mjs +3 -3
- package/fesm2022/lucca-front-ng-table-of-content.mjs +6 -6
- package/fesm2022/lucca-front-ng-tag.mjs +3 -3
- package/fesm2022/lucca-front-ng-text-flow.mjs +20 -0
- package/fesm2022/lucca-front-ng-text-flow.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-time.mjs +72 -33
- package/fesm2022/lucca-front-ng-time.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-title.mjs +10 -10
- package/fesm2022/lucca-front-ng-toast.mjs +14 -14
- package/fesm2022/lucca-front-ng-toast.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-tooltip.mjs +27 -41
- package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-tree-select.mjs +6 -6
- package/fesm2022/lucca-front-ng-tree-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-user-popover.mjs +23 -23
- package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-user.mjs +75 -91
- package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-vertical-navigation.mjs +12 -12
- package/package.json +19 -3
- package/schematics/action-icon/index.js +4 -5
- package/schematics/action-icon/migration.js +3 -4
- package/schematics/action-icon/migration.spec.js +8 -8
- package/schematics/alignment-utilities/index.js +3 -4
- package/schematics/alignment-utilities/migration.spec.js +8 -8
- package/schematics/cdn-urls/index.js +3 -4
- package/schematics/cdn-urls/migration.js +7 -9
- package/schematics/cdn-urls/migration.spec.js +8 -8
- package/schematics/class-prefix/index.js +3 -4
- package/schematics/class-prefix/migration.spec.js +8 -8
- package/schematics/collection.json +10 -0
- package/schematics/color-text/index.js +3 -4
- package/schematics/color-text/migration.spec.js +8 -8
- package/schematics/component-path/index.js +3 -4
- package/schematics/component-path/migration.spec.js +8 -8
- package/schematics/empty-state-title/index.js +5 -7
- package/schematics/empty-state-title/migration.spec.js +5 -5
- package/schematics/lib/index.js +29 -0
- package/schematics/lib/local-deps/package-lock.json +2 -0
- package/schematics/lib/local-deps/package.json +1 -2
- package/schematics/lib/schematic.utils.js +5 -0
- package/schematics/lu-button/index.js +3 -4
- package/schematics/lu-button/migration.js +5 -11
- package/schematics/lu-button/migration.spec.js +5 -5
- package/schematics/lu-container/index.js +23 -0
- package/schematics/lu-container/migration.js +116 -0
- package/schematics/lu-container/migration.spec.js +23 -0
- package/schematics/lu-container/schema.json +23 -0
- package/schematics/lu-icon/index.js +3 -4
- package/schematics/lu-icon/migration.js +8 -14
- package/schematics/lu-icon/migration.spec.js +5 -5
- package/schematics/lu-loading/index.js +23 -0
- package/schematics/lu-loading/migration.js +136 -0
- package/schematics/lu-loading/migration.spec.js +23 -0
- package/schematics/lu-loading/schema.json +28 -0
- package/schematics/lu-select/index.js +3 -4
- package/schematics/lu-select/migration.js +18 -21
- package/schematics/lu-select/migration.spec.js +5 -5
- package/schematics/lu-select/util.js +17 -19
- package/schematics/lu-text-input/index.js +3 -4
- package/schematics/lu-text-input/migration.js +22 -28
- package/schematics/lu-text-input/migration.spec.js +5 -5
- package/schematics/new-icons/index.js +5 -6
- package/schematics/new-icons/migration.js +11 -16
- package/schematics/new-icons/migration.spec.js +8 -8
- package/schematics/palettes/index.js +3 -4
- package/schematics/palettes/migration.spec.js +8 -8
- package/schematics/tokens-radius/index.js +3 -4
- package/schematics/tokens-radius/migration.spec.js +8 -8
- package/schematics/tokens-spacing/index.js +3 -4
- package/schematics/tokens-spacing/migration.spec.js +8 -8
- package/schematics/tokens-typo/index.js +3 -4
- package/schematics/tokens-typo/migration.spec.js +8 -8
- package/types/lucca-front-ng-a11y.d.ts +3 -3
- package/types/lucca-front-ng-api.d.ts +1 -19
- package/types/lucca-front-ng-breadcrumbs.d.ts +9 -9
- package/types/lucca-front-ng-bubble-icon.d.ts +20 -0
- package/types/lucca-front-ng-bubble-illustration.d.ts +24 -0
- package/types/lucca-front-ng-callout.d.ts +2 -2
- package/types/lucca-front-ng-chip.d.ts +2 -2
- package/types/lucca-front-ng-clear.d.ts +2 -2
- package/types/lucca-front-ng-color.d.ts +12 -0
- package/types/lucca-front-ng-core-select.d.ts +84 -78
- package/types/lucca-front-ng-core.d.ts +23 -2
- package/types/lucca-front-ng-data-table.d.ts +2 -2
- package/types/lucca-front-ng-date.d.ts +6 -24
- package/types/lucca-front-ng-date2.d.ts +8 -6
- package/types/lucca-front-ng-department.d.ts +3 -12
- package/types/lucca-front-ng-dialog.d.ts +12 -5
- package/types/lucca-front-ng-empty-state.d.ts +6 -4
- package/types/lucca-front-ng-establishment.d.ts +3 -39
- package/types/lucca-front-ng-file-upload.d.ts +18 -8
- package/types/lucca-front-ng-filter-pills.d.ts +6 -5
- package/types/lucca-front-ng-form-field.d.ts +35 -5
- package/types/lucca-front-ng-form.d.ts +9 -5
- package/types/lucca-front-ng-forms-phone-number-input.d.ts +1 -0
- package/types/lucca-front-ng-forms-rich-text-input.d.ts +16 -16
- package/types/lucca-front-ng-forms.d.ts +51 -12
- package/types/lucca-front-ng-input.d.ts +2 -2
- package/types/lucca-front-ng-link.d.ts +4 -5
- package/types/lucca-front-ng-mobile-push.d.ts +2 -2
- package/types/lucca-front-ng-multi-select.d.ts +26 -24
- package/types/lucca-front-ng-option.d.ts +86 -149
- package/types/lucca-front-ng-pagination.d.ts +2 -2
- package/types/lucca-front-ng-plg-push.d.ts +2 -2
- package/types/lucca-front-ng-popover.d.ts +1 -20
- package/types/lucca-front-ng-popover2.d.ts +4 -4
- package/types/lucca-front-ng-read-more.d.ts +9 -9
- package/types/lucca-front-ng-simple-select.d.ts +5 -4
- package/types/lucca-front-ng-text-flow.d.ts +8 -0
- package/types/lucca-front-ng-time.d.ts +22 -16
- package/types/lucca-front-ng-toast.d.ts +2 -2
- package/types/lucca-front-ng-tooltip.d.ts +7 -14
- package/types/lucca-front-ng-user-popover.d.ts +6 -7
- package/types/lucca-front-ng-user.d.ts +6 -15
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.migrateComponent = migrateComponent;
|
|
4
|
-
const html_ast_js_1 = require("../lib/html-ast.js");
|
|
5
|
-
const typescript_1 = require("typescript");
|
|
6
|
-
const angular_component_ast_1 = require("../lib/angular-component-ast");
|
|
7
|
-
const angular_template_1 = require("../lib/angular-template");
|
|
8
|
-
const util_1 = require("./util");
|
|
9
|
-
const select_context_1 = require("./model/select-context");
|
|
10
4
|
const change_1 = require("@schematics/angular/utility/change");
|
|
11
5
|
const eol_1 = require("@schematics/angular/utility/eol");
|
|
12
|
-
const
|
|
6
|
+
const typescript_1 = require("typescript");
|
|
7
|
+
const lib_1 = require("../lib");
|
|
8
|
+
const select_context_1 = require("./model/select-context");
|
|
9
|
+
const util_1 = require("./util");
|
|
13
10
|
const importSource = {
|
|
14
11
|
LuSimpleSelectInputComponent: '@lucca-front/ng/simple-select',
|
|
15
12
|
LuMultiSelectInputComponent: '@lucca-front/ng/multi-select',
|
|
@@ -55,13 +52,13 @@ function migrateComponent(sourceFile, path, tree, noComments = false) {
|
|
|
55
52
|
// We're not checking using else here because handle** methods can also add a rejection reason
|
|
56
53
|
// We want to handle both cases (before handling and after) here
|
|
57
54
|
if (select.rejection) {
|
|
58
|
-
|
|
55
|
+
lib_1.currentSchematicContext.logFailure(`Couldn't migrate ${select.component} in ${path}: ${util_1.RejectionReason[select.rejection.reason]}`);
|
|
59
56
|
if (!noComments) {
|
|
60
57
|
insertRejectionComment(templateUpdate, select);
|
|
61
58
|
}
|
|
62
59
|
}
|
|
63
60
|
else {
|
|
64
|
-
|
|
61
|
+
lib_1.currentSchematicContext.logSuccess(`Migrated ${select.component} in ${path}`);
|
|
65
62
|
}
|
|
66
63
|
});
|
|
67
64
|
tree.commitUpdate(tsUpdate);
|
|
@@ -99,18 +96,18 @@ function insertRejectionComment(update, select) {
|
|
|
99
96
|
update.insertLeft(select.nodeOffset + select.node.startSourceSpan.start.offset, `<!-- [lu-select migration] REJECTED: ${detailedReason || util_1.RejectionReason[select.rejection.reason]} -->\n${indentBefore}`);
|
|
100
97
|
}
|
|
101
98
|
function findSelectContexts(sourceFile, basePath, tree) {
|
|
102
|
-
const imports = (0,
|
|
99
|
+
const imports = (0, lib_1.extractComponentImports)(sourceFile);
|
|
103
100
|
if (possibleSelectComponents.some((c) => imports.includes(c))) {
|
|
104
101
|
const selects = [];
|
|
105
|
-
const template = (0,
|
|
106
|
-
const htmlAst = new
|
|
102
|
+
const template = (0, lib_1.extractNgTemplatesIncludingHtml)(sourceFile, tree, basePath)[0];
|
|
103
|
+
const htmlAst = new lib_1.HtmlAst(template.content);
|
|
107
104
|
htmlAst.visitNodes((node) => {
|
|
108
|
-
if (node instanceof
|
|
105
|
+
if (node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstElement) {
|
|
109
106
|
const selectComponentClass = selectorToComponentNameRecord[node.name];
|
|
110
107
|
const multipleInput = node.inputs.find((attr) => attr.name === 'multiple');
|
|
111
|
-
const unsupportedMultiple = multipleInput?.value instanceof
|
|
108
|
+
const unsupportedMultiple = multipleInput?.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource && multipleInput.value.source !== 'true';
|
|
112
109
|
const multipleAttr = node.attributes.find((attr) => attr.name === 'multiple');
|
|
113
|
-
const multipleFromInput = multipleInput?.value instanceof
|
|
110
|
+
const multipleFromInput = multipleInput?.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource && multipleInput.value.source === 'true'
|
|
114
111
|
? { start: multipleInput?.sourceSpan?.start?.offset, end: multipleInput?.sourceSpan?.end?.offset + 1 }
|
|
115
112
|
: null;
|
|
116
113
|
const multipleFromAttr = multipleAttr && (multipleAttr.value === 'true' || multipleAttr.value === '') ? { start: multipleAttr?.sourceSpan?.start?.offset, end: multipleAttr?.sourceSpan?.end?.offset + 1 } : null;
|
|
@@ -145,7 +142,7 @@ function updateImports(sourceFile, selects, path, tree) {
|
|
|
145
142
|
const imports = new Set(selects.filter((s) => !s.rejection).flatMap((select) => select.requiredImports || []));
|
|
146
143
|
imports.forEach((importToAdd) => {
|
|
147
144
|
if (importSource[importToAdd]) {
|
|
148
|
-
(0, change_1.applyToUpdateRecorder)(update, [(0,
|
|
145
|
+
(0, change_1.applyToUpdateRecorder)(update, [(0, lib_1.insertTSImportIfNeeded)(sourceFile, path, importToAdd, importSource[importToAdd]), (0, lib_1.insertAngularImportIfNeeded)(sourceFile, path, importToAdd)]);
|
|
149
146
|
}
|
|
150
147
|
else {
|
|
151
148
|
console.error(`Can't add import for ${importToAdd} because source is unknown`);
|
|
@@ -155,11 +152,11 @@ function updateImports(sourceFile, selects, path, tree) {
|
|
|
155
152
|
const componentsCleanupUpdate = tree.beginUpdate(path);
|
|
156
153
|
// Cleanup unused select component imports
|
|
157
154
|
const updatedSourceFile = (0, typescript_1.createSourceFile)(path, tree.readText(path), typescript_1.ScriptTarget.ESNext);
|
|
158
|
-
const templatesAfterUpdate = (0,
|
|
155
|
+
const templatesAfterUpdate = (0, lib_1.extractNgTemplatesIncludingHtml)(updatedSourceFile, tree, path);
|
|
159
156
|
templatesAfterUpdate.forEach((template) => {
|
|
160
157
|
Object.entries(select_context_1.selectorToComponentName).forEach(([selector, className]) => {
|
|
161
158
|
if (!template.content.includes(selector)) {
|
|
162
|
-
(0, change_1.applyToUpdateRecorder)(componentsCleanupUpdate, [(0,
|
|
159
|
+
(0, change_1.applyToUpdateRecorder)(componentsCleanupUpdate, [(0, lib_1.removeTSImport)(updatedSourceFile, path, className), (0, lib_1.removeAngularImport)(updatedSourceFile, path, className)]);
|
|
163
160
|
}
|
|
164
161
|
});
|
|
165
162
|
});
|
|
@@ -178,7 +175,7 @@ function updateImports(sourceFile, selects, path, tree) {
|
|
|
178
175
|
function handleLuSelectInputComponent(select, update) {
|
|
179
176
|
const dataSource = (0, util_1.getDataSource)(select);
|
|
180
177
|
let hasClearer = false;
|
|
181
|
-
new
|
|
178
|
+
new lib_1.HtmlAstVisitor(select.node).visitElements(/lu-input-clearer/, (node) => {
|
|
182
179
|
// Doing the check just in case
|
|
183
180
|
if (node.name === 'lu-input-clearer') {
|
|
184
181
|
hasClearer = true;
|
|
@@ -275,14 +272,14 @@ function handleApiSelectInputComponent(select, update) {
|
|
|
275
272
|
}
|
|
276
273
|
});
|
|
277
274
|
select.node.inputs.forEach((input) => {
|
|
278
|
-
if (input.name === 'api' && input.value instanceof
|
|
275
|
+
if (input.name === 'api' && input.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource) {
|
|
279
276
|
apiEndpoint = input.value?.source || '';
|
|
280
277
|
oldApiInput = {
|
|
281
278
|
pos: input.sourceSpan.start.offset,
|
|
282
279
|
length: input.sourceSpan.end.offset - input.sourceSpan.start.offset
|
|
283
280
|
};
|
|
284
281
|
}
|
|
285
|
-
if (input.name === 'standard' && input.value instanceof
|
|
282
|
+
if (input.name === 'standard' && input.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource) {
|
|
286
283
|
apiStandard = (input.value?.source || 'v3');
|
|
287
284
|
oldApiStandard = {
|
|
288
285
|
pos: input.sourceSpan.start.offset,
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const path = require("path");
|
|
4
|
-
const
|
|
4
|
+
const lib_1 = require("../lib");
|
|
5
5
|
const collectionPath = path.normalize(path.join(__dirname, '..', 'collection.json'));
|
|
6
6
|
const testsRoot = path.join(__dirname, 'tests');
|
|
7
7
|
describe('lu-select Migration', () => {
|
|
8
8
|
it('should handle basic case files', async () => {
|
|
9
9
|
// Arrange
|
|
10
|
-
const tree = (0,
|
|
11
|
-
const expectedTree = (0,
|
|
10
|
+
const tree = (0, lib_1.createTreeFromFolder)(path.join(testsRoot, 'input'));
|
|
11
|
+
const expectedTree = (0, lib_1.createTreeFromFolder)(path.join(testsRoot, 'output'));
|
|
12
12
|
// Act
|
|
13
13
|
try {
|
|
14
|
-
await (0,
|
|
14
|
+
await (0, lib_1.runSchematic)('collection', collectionPath, 'lu-select', { skipInstallation: true }, tree);
|
|
15
15
|
}
|
|
16
16
|
catch (error) {
|
|
17
17
|
// eslint-disable-next-line no-console
|
|
18
18
|
console.log(error);
|
|
19
19
|
}
|
|
20
20
|
// Assert
|
|
21
|
-
(0,
|
|
21
|
+
(0, lib_1.expectTree)(tree).toMatchTree(expectedTree);
|
|
22
22
|
});
|
|
23
23
|
});
|
|
@@ -5,9 +5,7 @@ exports.isRejection = isRejection;
|
|
|
5
5
|
exports.getCommonMigrationRejectionReason = getCommonMigrationRejectionReason;
|
|
6
6
|
exports.getDataSource = getDataSource;
|
|
7
7
|
exports.getDisplayer = getDisplayer;
|
|
8
|
-
const
|
|
9
|
-
const angular_component_ast_1 = require("../lib/angular-component-ast");
|
|
10
|
-
const lf_schematic_context_1 = require("../lib/lf-schematic-context");
|
|
8
|
+
const lib_1 = require("../lib");
|
|
11
9
|
var RejectionReason;
|
|
12
10
|
(function (RejectionReason) {
|
|
13
11
|
RejectionReason[RejectionReason["UNSUPPORTED_ATTRIBUTE"] = 0] = "UNSUPPORTED_ATTRIBUTE";
|
|
@@ -28,7 +26,7 @@ function isRejection(value) {
|
|
|
28
26
|
return value?.reason !== undefined && RejectionReason[value.reason] != undefined;
|
|
29
27
|
}
|
|
30
28
|
function getCommonMigrationRejectionReason(node, sourceFile) {
|
|
31
|
-
if (node instanceof
|
|
29
|
+
if (node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstElement) {
|
|
32
30
|
const unsupportedAttr = node.attributes.find((attr) => !allowedAttributes.some((rxp) => rxp.test(attr.name)));
|
|
33
31
|
if (unsupportedAttr) {
|
|
34
32
|
return {
|
|
@@ -43,7 +41,7 @@ function getCommonMigrationRejectionReason(node, sourceFile) {
|
|
|
43
41
|
details: unsupportedInput.name
|
|
44
42
|
};
|
|
45
43
|
}
|
|
46
|
-
const providers = (0,
|
|
44
|
+
const providers = (0, lib_1.extractProviders)(sourceFile);
|
|
47
45
|
if (providers.length > 0) {
|
|
48
46
|
switch (node.name) {
|
|
49
47
|
case 'lu-establishment-select':
|
|
@@ -99,7 +97,7 @@ function getDataSource(select) {
|
|
|
99
97
|
let result = {
|
|
100
98
|
reason: RejectionReason.NO_DATA_SOURCE
|
|
101
99
|
};
|
|
102
|
-
const htmlAstVisitor = new
|
|
100
|
+
const htmlAstVisitor = new lib_1.HtmlAstVisitor(select.node);
|
|
103
101
|
let rejected = false;
|
|
104
102
|
// First of all, check that there's no lu-option-select-all, because this is a rejection reason
|
|
105
103
|
htmlAstVisitor.visitElements(/(lu-option-select-all)|(lu-tree-.*)/, (node) => {
|
|
@@ -121,7 +119,7 @@ function getDataSource(select) {
|
|
|
121
119
|
}
|
|
122
120
|
htmlAstVisitor.visitElements(/lu-option-picker(-advanced)?/, (node) => {
|
|
123
121
|
// If picker doesn't have option as direct child, reject, we can't migrate this kind of custom stuff
|
|
124
|
-
const luOption = node.children.find((c) => c instanceof
|
|
122
|
+
const luOption = node.children.find((c) => c instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstTemplate && c.tagName === 'lu-option');
|
|
125
123
|
if (luOption === undefined) {
|
|
126
124
|
result = {
|
|
127
125
|
reason: RejectionReason.CUSTOM_PICKER_CONTENT
|
|
@@ -129,20 +127,20 @@ function getDataSource(select) {
|
|
|
129
127
|
}
|
|
130
128
|
else {
|
|
131
129
|
// TODO Handle advanced option picker
|
|
132
|
-
if (luOption instanceof
|
|
130
|
+
if (luOption instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstTemplate && node.name === 'lu-option-picker') {
|
|
133
131
|
let valueName = '';
|
|
134
132
|
let ngForOfName = '';
|
|
135
133
|
let ngForImplicitVarName = '';
|
|
136
134
|
// If that's a simple option picker, lu-option should have dataSource in its ngFor
|
|
137
135
|
luOption.templateAttrs.forEach((attr) => {
|
|
138
|
-
if (attr.name === 'ngForOf' && attr.value instanceof
|
|
136
|
+
if (attr.name === 'ngForOf' && attr.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource) {
|
|
139
137
|
ngForOfName = attr.value.source || '';
|
|
140
138
|
ngForImplicitVarName = luOption.variables.find((v) => v.value === '$implicit')?.name || '';
|
|
141
139
|
}
|
|
142
140
|
});
|
|
143
141
|
// Grab assigned value to make sure it's a supported one
|
|
144
142
|
luOption.inputs.forEach((attr) => {
|
|
145
|
-
if (attr.name === 'value' && attr.value instanceof
|
|
143
|
+
if (attr.name === 'value' && attr.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource) {
|
|
146
144
|
valueName = attr.value.source || '';
|
|
147
145
|
}
|
|
148
146
|
});
|
|
@@ -157,10 +155,10 @@ function getDataSource(select) {
|
|
|
157
155
|
// We have found value and it matches, now let's check how it's rendered
|
|
158
156
|
// Idk why but AST has two levels for a single node in this case
|
|
159
157
|
const contentHost = luOption.children[0];
|
|
160
|
-
if (contentHost instanceof
|
|
161
|
-
const templateNodes = contentHost.children.filter(c => c instanceof
|
|
158
|
+
if (contentHost instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstElement) {
|
|
159
|
+
const templateNodes = contentHost.children.filter(c => c instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstBoundText);
|
|
162
160
|
const firstValue = templateNodes[0];
|
|
163
|
-
if (firstValue instanceof
|
|
161
|
+
if (firstValue instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstBoundText && firstValue.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource) {
|
|
164
162
|
const firstTemplateSource = firstValue.value.source?.trim();
|
|
165
163
|
// First of all, check if it's a basic ?.name approach, in which case we can remove it
|
|
166
164
|
if ((templateNodes.length === 1 && firstTemplateSource === `{{ ${valueName} }}`) ||
|
|
@@ -190,7 +188,7 @@ function getDataSource(select) {
|
|
|
190
188
|
}
|
|
191
189
|
}
|
|
192
190
|
const comparerAST = node.inputs.find(attr => attr.name === 'option-comparer')?.value;
|
|
193
|
-
if (comparerAST instanceof
|
|
191
|
+
if (comparerAST instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource && comparerAST?.source && !isRejection(result)) {
|
|
194
192
|
result.comparer = comparerAST?.source;
|
|
195
193
|
}
|
|
196
194
|
}
|
|
@@ -199,23 +197,23 @@ function getDataSource(select) {
|
|
|
199
197
|
return result;
|
|
200
198
|
}
|
|
201
199
|
function getDisplayer(select) {
|
|
202
|
-
const displayerHostNode = select.node.children.find((node) => node instanceof
|
|
200
|
+
const displayerHostNode = select.node.children.find((node) => node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstTemplate && node.templateAttrs.some((attr) => attr.name === 'luDisplayer'));
|
|
203
201
|
if (!displayerHostNode) {
|
|
204
202
|
return {
|
|
205
203
|
canBeRemoved: true
|
|
206
204
|
};
|
|
207
205
|
}
|
|
208
|
-
if (displayerHostNode instanceof
|
|
206
|
+
if (displayerHostNode instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstTemplate) {
|
|
209
207
|
const displayerVarName = displayerHostNode.variables.find((v) => v.value === '$implicit')?.name;
|
|
210
208
|
const templateNodes = [];
|
|
211
|
-
new
|
|
212
|
-
if (c instanceof
|
|
209
|
+
new lib_1.HtmlAstVisitor(displayerHostNode.children).visitNodes((c) => {
|
|
210
|
+
if (c instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstBoundText) {
|
|
213
211
|
templateNodes.push(c);
|
|
214
212
|
}
|
|
215
213
|
});
|
|
216
214
|
if (templateNodes?.length > 0) {
|
|
217
215
|
const firstValue = templateNodes[0];
|
|
218
|
-
if (firstValue instanceof
|
|
216
|
+
if (firstValue instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstBoundText && firstValue.value instanceof lib_1.currentSchematicContext.angularCompiler.ASTWithSource) {
|
|
219
217
|
const firstTemplateSource = firstValue.value.source?.trim();
|
|
220
218
|
if ((templateNodes.length === 1 && firstTemplateSource === `{{ ${displayerVarName} }}`) ||
|
|
221
219
|
firstTemplateSource === `{{ ${displayerVarName}?.name }}` ||
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const typescript_1 = require("typescript");
|
|
4
|
-
const
|
|
5
|
-
const schematics_1 = require("../lib/schematics");
|
|
4
|
+
const lib_1 = require("../lib");
|
|
6
5
|
const migration_1 = require("./migration");
|
|
7
6
|
// Nx need to see "@angular-devkit/schematics" in order to run this migration correctly (see https://github.com/nrwl/nx/blob/d9fed4b832bf01d1b9a44ae9e486a5e5cd2d2253/packages/nx/src/command-line/migrate/migrate.ts#L1729-L1738)
|
|
8
7
|
require('@angular-devkit/schematics');
|
|
9
8
|
exports.default = (options) => {
|
|
10
9
|
return async (tree, context) => {
|
|
11
|
-
await
|
|
10
|
+
await lib_1.currentSchematicContext.init(context, options);
|
|
12
11
|
tree.visit((path, entry) => {
|
|
13
12
|
if (path.includes('node_modules') || !entry) {
|
|
14
13
|
return;
|
|
15
14
|
}
|
|
16
15
|
if (path.endsWith('.ts')) {
|
|
17
|
-
(0,
|
|
16
|
+
(0, lib_1.migrateFile)(path, entry, tree, (content) => {
|
|
18
17
|
const sourceFile = (0, typescript_1.createSourceFile)(path, content, typescript_1.ScriptTarget.ESNext);
|
|
19
18
|
return (0, migration_1.migrateComponent)(sourceFile, path, tree);
|
|
20
19
|
});
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.migrateComponent = migrateComponent;
|
|
4
|
-
const angular_template_1 = require("../lib/angular-template");
|
|
5
|
-
const html_ast_js_1 = require("../lib/html-ast.js");
|
|
6
|
-
const lf_schematic_context_1 = require("../lib/lf-schematic-context");
|
|
7
|
-
const angular_component_ast_1 = require("../lib/angular-component-ast");
|
|
8
4
|
const change_1 = require("@schematics/angular/utility/change");
|
|
5
|
+
const lib_1 = require("../lib");
|
|
9
6
|
function migrateComponent(sourceFile, path, tree) {
|
|
10
7
|
const textfields = findTextfields(sourceFile, path, tree);
|
|
11
8
|
if (textfields.length > 0) {
|
|
@@ -24,7 +21,7 @@ function migrateComponent(sourceFile, path, tree) {
|
|
|
24
21
|
// Let's remove everything first
|
|
25
22
|
templateUpdate.remove(field.nodeOffset + field.node.startSourceSpan.start.offset, field.node.sourceSpan.toString().length);
|
|
26
23
|
// Then forge the new input
|
|
27
|
-
const textInput = `<lu-text-input ${(0,
|
|
24
|
+
const textInput = `<lu-text-input ${(0, lib_1.inputValueToHTML)('placeholder', field.inputs.placeholder)} ${(0, lib_1.inputValueToHTML)('formControlName', field.inputs.formControlName)} ${(0, lib_1.inputValueToHTML)('ngModel', field.inputs.ngModel)} />`.replace(/\s{2,}/, " ");
|
|
28
25
|
const fieldOpeningTag = `lu-form-field [label]="labelTpl"`.replace(/\s{2,}/, " ").trim();
|
|
29
26
|
// TODO handle required migration from template-driven to form-driven???
|
|
30
27
|
const newInput = `<${fieldOpeningTag}>
|
|
@@ -38,10 +35,10 @@ function migrateComponent(sourceFile, path, tree) {
|
|
|
38
35
|
if (updatedStuff) {
|
|
39
36
|
// Add import if needed
|
|
40
37
|
(0, change_1.applyToUpdateRecorder)(tsUpdate, [
|
|
41
|
-
(0,
|
|
42
|
-
(0,
|
|
43
|
-
(0,
|
|
44
|
-
(0,
|
|
38
|
+
(0, lib_1.insertTSImportIfNeeded)(sourceFile, path, 'FormFieldComponent', '@lucca-front/ng/form-field'),
|
|
39
|
+
(0, lib_1.insertAngularImportIfNeeded)(sourceFile, path, 'FormFieldComponent'),
|
|
40
|
+
(0, lib_1.insertTSImportIfNeeded)(sourceFile, path, 'TextInputComponent', '@lucca-front/ng/forms'),
|
|
41
|
+
(0, lib_1.insertAngularImportIfNeeded)(sourceFile, path, 'TextInputComponent')
|
|
45
42
|
]);
|
|
46
43
|
tree.commitUpdate(tsUpdate);
|
|
47
44
|
if (!isInlineTemplate) {
|
|
@@ -53,11 +50,11 @@ function migrateComponent(sourceFile, path, tree) {
|
|
|
53
50
|
}
|
|
54
51
|
function findTextfields(sourceFile, basePath, tree) {
|
|
55
52
|
const fields = [];
|
|
56
|
-
const ngTemplates = (0,
|
|
53
|
+
const ngTemplates = (0, lib_1.extractNgTemplatesIncludingHtml)(sourceFile, tree, basePath);
|
|
57
54
|
ngTemplates.forEach((template) => {
|
|
58
|
-
const htmlAst = new
|
|
55
|
+
const htmlAst = new lib_1.HtmlAst(template.content);
|
|
59
56
|
htmlAst.visitNodes((node) => {
|
|
60
|
-
if (isInterestingNode(node) && node.name === "label") {
|
|
57
|
+
if ((0, lib_1.isInterestingNode)(node) && node.name === "label") {
|
|
61
58
|
const classes = getNodeClasses(node);
|
|
62
59
|
const inputs = {
|
|
63
60
|
size: classes.find(c => /mod-(XS|S|M|L|XL|XXL)/.test(c))?.replace('mod-', '')
|
|
@@ -71,24 +68,24 @@ function findTextfields(sourceFile, basePath, tree) {
|
|
|
71
68
|
classes: classes
|
|
72
69
|
};
|
|
73
70
|
if (classes.includes("textfield")) {
|
|
74
|
-
if (node.children.filter(el => isInterestingNode(el) || isControlFlowNode(el)).length > 2) {
|
|
71
|
+
if (node.children.filter(el => (0, lib_1.isInterestingNode)(el) || isControlFlowNode(el)).length > 2) {
|
|
75
72
|
field.rejection = "Field contains more than an input + label";
|
|
76
73
|
}
|
|
77
74
|
// Find native input and grab params from it
|
|
78
|
-
const nativeInput = node.children.find(el => isInterestingNode(el) && el.name === "input");
|
|
75
|
+
const nativeInput = node.children.find(el => (0, lib_1.isInterestingNode)(el) && el.name === "input");
|
|
79
76
|
if (!nativeInput) {
|
|
80
77
|
field.rejection = "Field doesn't contain a native input[type=text]";
|
|
81
78
|
}
|
|
82
|
-
else if (isInterestingNode(nativeInput)) {
|
|
83
|
-
inputs.placeholder = (0,
|
|
84
|
-
inputs.formControlName = (0,
|
|
85
|
-
inputs.ngModel = (0,
|
|
86
|
-
inputs.forceRequired = (0,
|
|
79
|
+
else if ((0, lib_1.isInterestingNode)(nativeInput)) {
|
|
80
|
+
inputs.placeholder = (0, lib_1.getInputValue)(nativeInput, "placeholder");
|
|
81
|
+
inputs.formControlName = (0, lib_1.getInputValue)(nativeInput, "formControlName");
|
|
82
|
+
inputs.ngModel = (0, lib_1.getInputValue)(nativeInput, "ngModel");
|
|
83
|
+
inputs.forceRequired = (0, lib_1.getInputValue)(nativeInput, "aria-required");
|
|
87
84
|
}
|
|
88
85
|
// This is a textfield, now let's find if it has everything required for migration
|
|
89
|
-
const visitor = new
|
|
86
|
+
const visitor = new lib_1.HtmlAstVisitor(node);
|
|
90
87
|
visitor.visitElements(/span/, (el) => {
|
|
91
|
-
if (isInterestingNode(el) && getNodeClasses(el).includes("textfield-label")) {
|
|
88
|
+
if ((0, lib_1.isInterestingNode)(el) && getNodeClasses(el).includes("textfield-label")) {
|
|
92
89
|
field.label = template.content.slice(el.startSourceSpan.end.offset, el.endSourceSpan?.start?.offset);
|
|
93
90
|
}
|
|
94
91
|
});
|
|
@@ -105,12 +102,9 @@ function findTextfields(sourceFile, basePath, tree) {
|
|
|
105
102
|
function getNodeClasses(node) {
|
|
106
103
|
return (node.attributes.find(attr => attr.name === 'class')?.value || "").split(" ");
|
|
107
104
|
}
|
|
108
|
-
function isInterestingNode(node) {
|
|
109
|
-
return node instanceof lf_schematic_context_1.currentSchematicContext.angularCompiler.TmplAstElement;
|
|
110
|
-
}
|
|
111
105
|
function isControlFlowNode(node) {
|
|
112
|
-
return node instanceof
|
|
113
|
-
node instanceof
|
|
114
|
-
node instanceof
|
|
115
|
-
node instanceof
|
|
106
|
+
return node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstIfBlock ||
|
|
107
|
+
node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstForLoopBlock ||
|
|
108
|
+
node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstSwitchBlock ||
|
|
109
|
+
node instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstDeferredBlock;
|
|
116
110
|
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const path = require("path");
|
|
4
|
-
const
|
|
4
|
+
const lib_1 = require("../lib");
|
|
5
5
|
const collectionPath = path.normalize(path.join(__dirname, '..', 'collection.json'));
|
|
6
6
|
const testsRoot = path.join(__dirname, 'tests');
|
|
7
7
|
describe('Textfield Migration', () => {
|
|
8
8
|
it('should handle basic case files', async () => {
|
|
9
9
|
// Arrange
|
|
10
|
-
const tree = (0,
|
|
11
|
-
const expectedTree = (0,
|
|
10
|
+
const tree = (0, lib_1.createTreeFromFolder)(path.join(testsRoot, 'input'));
|
|
11
|
+
const expectedTree = (0, lib_1.createTreeFromFolder)(path.join(testsRoot, 'output'));
|
|
12
12
|
// Act
|
|
13
13
|
try {
|
|
14
|
-
await (0,
|
|
14
|
+
await (0, lib_1.runSchematic)('collection', collectionPath, 'lu-text-input', { skipInstallation: true }, tree);
|
|
15
15
|
}
|
|
16
16
|
catch (error) {
|
|
17
17
|
// eslint-disable-next-line no-console
|
|
18
18
|
console.log(error);
|
|
19
19
|
}
|
|
20
20
|
// Assert
|
|
21
|
-
(0,
|
|
21
|
+
(0, lib_1.expectTree)(tree).toMatchTree(expectedTree);
|
|
22
22
|
});
|
|
23
23
|
});
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const lib_1 = require("../lib");
|
|
4
4
|
const migration_js_1 = require("./migration.js");
|
|
5
|
-
const lf_schematic_context_1 = require("../lib/lf-schematic-context");
|
|
6
5
|
// Nx need to see "@angular-devkit/schematics" in order to run this migration correctly (see https://github.com/nrwl/nx/blob/d9fed4b832bf01d1b9a44ae9e486a5e5cd2d2253/packages/nx/src/command-line/migrate/migrate.ts#L1729-L1738)
|
|
7
6
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
8
7
|
require('@angular-devkit/schematics');
|
|
9
8
|
exports.default = (options) => {
|
|
10
9
|
return async (tree, context) => {
|
|
11
|
-
await
|
|
10
|
+
await lib_1.currentSchematicContext.init(context, options);
|
|
12
11
|
const postCssScss = await Promise.resolve().then(() => require('../lib/local-deps/postcss-scss.js'));
|
|
13
12
|
const { postcssSelectorParser } = await Promise.resolve().then(() => require('../lib/local-deps/postcss-selector-parser.js'));
|
|
14
13
|
tree.visit((path, entry) => {
|
|
@@ -16,13 +15,13 @@ exports.default = (options) => {
|
|
|
16
15
|
return;
|
|
17
16
|
}
|
|
18
17
|
if (path.endsWith('.scss')) {
|
|
19
|
-
(0,
|
|
18
|
+
(0, lib_1.migrateFile)(path, entry, tree, (content) => (0, migration_js_1.migrateScssFile)(content, postCssScss, postcssSelectorParser));
|
|
20
19
|
}
|
|
21
20
|
if (path.endsWith('.html')) {
|
|
22
|
-
(0,
|
|
21
|
+
(0, lib_1.migrateFile)(path, entry, tree, (content) => (0, migration_js_1.migrateHTMLFile)(content));
|
|
23
22
|
}
|
|
24
23
|
if (path.endsWith('.ts')) {
|
|
25
|
-
(0,
|
|
24
|
+
(0, lib_1.migrateFile)(path, entry, tree, (content) => (0, migration_js_1.migrateTsFile)(path, content));
|
|
26
25
|
}
|
|
27
26
|
});
|
|
28
27
|
};
|
|
@@ -4,26 +4,21 @@ exports.migrateScssFile = migrateScssFile;
|
|
|
4
4
|
exports.migrateHTMLFile = migrateHTMLFile;
|
|
5
5
|
exports.migrateTsFile = migrateTsFile;
|
|
6
6
|
const typescript_1 = require("typescript");
|
|
7
|
-
const
|
|
8
|
-
const file_update_js_1 = require("../lib/file-update.js");
|
|
9
|
-
const html_ast_js_1 = require("../lib/html-ast.js");
|
|
10
|
-
const scss_ast_js_1 = require("../lib/scss-ast.js");
|
|
11
|
-
const typescript_ast_js_1 = require("../lib/typescript-ast.js");
|
|
7
|
+
const lib_1 = require("../lib");
|
|
12
8
|
const mapping_js_1 = require("./mapping.js");
|
|
13
|
-
const lf_schematic_context_1 = require("../lib/lf-schematic-context");
|
|
14
9
|
function migrateScssFile(content, postCssScss, postcssSelectorParser) {
|
|
15
10
|
const root = postCssScss.parse(content);
|
|
16
|
-
(0,
|
|
11
|
+
(0, lib_1.updateCSSClassNamesInRules)(root, mapping_js_1.oldIconClassToNewIconClass, postcssSelectorParser);
|
|
17
12
|
return root.toResult({ syntax: { stringify: postCssScss.stringify } }).css;
|
|
18
13
|
}
|
|
19
14
|
function migrateHTMLFile(content) {
|
|
20
|
-
content = (0,
|
|
21
|
-
content = (0,
|
|
22
|
-
return (0,
|
|
23
|
-
const htmlAst = new
|
|
15
|
+
content = (0, lib_1.updateCssClassNames)(content, mapping_js_1.oldIconClassToNewIconClass);
|
|
16
|
+
content = (0, lib_1.replaceComponentInput)('lu-icon', 'icon', mapping_js_1.oldIconToNewIcon, content);
|
|
17
|
+
return (0, lib_1.updateContent)(content, (updates) => {
|
|
18
|
+
const htmlAst = new lib_1.HtmlAst(content);
|
|
24
19
|
htmlAst.visitElementWithAttribute(/.*/, 'class', (elem, attr) => {
|
|
25
|
-
const legacyIconText = attr.value.includes('lucca-icon') && elem.children.find((c) => c instanceof
|
|
26
|
-
if (attr.valueSpan && legacyIconText && legacyIconText instanceof
|
|
20
|
+
const legacyIconText = attr.value.includes('lucca-icon') && elem.children.find((c) => c instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstText && mapping_js_1.oldIcons.has(c.value));
|
|
21
|
+
if (attr.valueSpan && legacyIconText && legacyIconText instanceof lib_1.currentSchematicContext.angularCompiler.TmplAstText) {
|
|
27
22
|
updates.push({
|
|
28
23
|
position: legacyIconText.sourceSpan.start.offset,
|
|
29
24
|
oldContent: legacyIconText.value,
|
|
@@ -39,14 +34,14 @@ function migrateHTMLFile(content) {
|
|
|
39
34
|
});
|
|
40
35
|
}
|
|
41
36
|
function migrateTsFile(fileName, content) {
|
|
42
|
-
return (0,
|
|
37
|
+
return (0, lib_1.updateContent)(content, (updates) => {
|
|
43
38
|
const sourcefile = (0, typescript_1.createSourceFile)(fileName, content, typescript_1.ScriptTarget.ESNext);
|
|
44
|
-
const templates = (0,
|
|
39
|
+
const templates = (0, lib_1.extractNgTemplates)(sourcefile);
|
|
45
40
|
updates.push(...templates.map((tpl) => ({
|
|
46
41
|
position: tpl.offsetStart,
|
|
47
42
|
oldContent: tpl.content,
|
|
48
43
|
newContent: migrateHTMLFile(tpl.content)
|
|
49
44
|
})));
|
|
50
|
-
updates.push(...(0,
|
|
45
|
+
updates.push(...(0, lib_1.replaceStringLiterals)(sourcefile, mapping_js_1.oldIconClassToNewIconClass));
|
|
51
46
|
});
|
|
52
47
|
}
|
|
@@ -3,25 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const fs = require("fs");
|
|
4
4
|
const glob = require("glob");
|
|
5
5
|
const path = require("path");
|
|
6
|
-
const
|
|
6
|
+
const lib_1 = require("../lib");
|
|
7
7
|
const collectionPath = path.normalize(path.join(__dirname, '..', 'collection.json'));
|
|
8
8
|
const testsRoot = path.join(__dirname, 'tests');
|
|
9
9
|
const files = fs.readdirSync(testsRoot);
|
|
10
10
|
describe('New icons Migration', () => {
|
|
11
11
|
it('should update files', async () => {
|
|
12
12
|
// Arrange
|
|
13
|
-
const tree = (0,
|
|
14
|
-
const expectedTree = (0,
|
|
13
|
+
const tree = (0, lib_1.createTreeFromFiles)(testsRoot, files, '.input.');
|
|
14
|
+
const expectedTree = (0, lib_1.createTreeFromFiles)(testsRoot, files, '.output.');
|
|
15
15
|
// Act
|
|
16
16
|
try {
|
|
17
|
-
await (0,
|
|
17
|
+
await (0, lib_1.runSchematic)('collection', collectionPath, 'new-icons', { skipInstallation: true }, tree);
|
|
18
18
|
}
|
|
19
19
|
catch (error) {
|
|
20
20
|
// eslint-disable-next-line no-console
|
|
21
21
|
console.log(error);
|
|
22
22
|
}
|
|
23
23
|
// Assert
|
|
24
|
-
(0,
|
|
24
|
+
(0, lib_1.expectTree)(tree).toMatchTree(expectedTree);
|
|
25
25
|
});
|
|
26
26
|
// Use this to migrate @lucca-front/* packages
|
|
27
27
|
it.skip('should migrate @lucca-front/*', async () => {
|
|
@@ -33,10 +33,10 @@ describe('New icons Migration', () => {
|
|
|
33
33
|
...glob.sync('packages/ng/**/*', { cwd: lfRoot, nodir: true, ignore: ['**/schematics/**'] }),
|
|
34
34
|
...glob.sync('stories/**', { cwd: lfRoot, nodir: true }),
|
|
35
35
|
];
|
|
36
|
-
const treeOriginalTree = (0,
|
|
37
|
-
const tree = (0,
|
|
36
|
+
const treeOriginalTree = (0, lib_1.createTreeFromFiles)(lfRoot, lfFiles, '.');
|
|
37
|
+
const tree = (0, lib_1.createTreeFromFiles)(lfRoot, lfFiles, '.');
|
|
38
38
|
// Act
|
|
39
|
-
await (0,
|
|
39
|
+
await (0, lib_1.runSchematic)('collection', collectionPath, 'new-icons', { skipInstallation: true }, tree);
|
|
40
40
|
// Assert
|
|
41
41
|
tree.visit((p, entry) => {
|
|
42
42
|
const original = treeOriginalTree.get(p)?.content.toString() || '';
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const lf_schematic_context_1 = require("../lib/lf-schematic-context");
|
|
3
|
+
const lib_1 = require("../lib");
|
|
5
4
|
// Nx need to see "@angular-devkit/schematics" in order to run this migration correctly (see https://github.com/nrwl/nx/blob/d9fed4b832bf01d1b9a44ae9e486a5e5cd2d2253/packages/nx/src/command-line/migrate/migrate.ts#L1729-L1738)
|
|
6
5
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
7
6
|
require('@angular-devkit/schematics');
|
|
8
7
|
exports.default = (options) => {
|
|
9
8
|
return async (tree, context) => {
|
|
10
|
-
await
|
|
11
|
-
await new
|
|
9
|
+
await lib_1.currentSchematicContext.init(context, options);
|
|
10
|
+
await new lib_1.CssMapper(tree, {
|
|
12
11
|
classes: {
|
|
13
12
|
'palette-grey': 'palette-neutral',
|
|
14
13
|
'palette-primary': 'palette-product',
|
|
@@ -3,25 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const fs = require("fs");
|
|
4
4
|
const glob = require("glob");
|
|
5
5
|
const path = require("path");
|
|
6
|
-
const
|
|
6
|
+
const lib_1 = require("../lib");
|
|
7
7
|
const collectionPath = path.normalize(path.join(__dirname, '..', 'collection.json'));
|
|
8
8
|
const testsRoot = path.join(__dirname, 'tests');
|
|
9
9
|
const files = fs.readdirSync(testsRoot);
|
|
10
10
|
describe('Palettes Migration', () => {
|
|
11
11
|
it('should update files', async () => {
|
|
12
12
|
// Arrange
|
|
13
|
-
const tree = (0,
|
|
14
|
-
const expectedTree = (0,
|
|
13
|
+
const tree = (0, lib_1.createTreeFromFiles)(testsRoot, files, '.input.');
|
|
14
|
+
const expectedTree = (0, lib_1.createTreeFromFiles)(testsRoot, files, '.output.');
|
|
15
15
|
// Act
|
|
16
16
|
try {
|
|
17
|
-
await (0,
|
|
17
|
+
await (0, lib_1.runSchematic)('collection', collectionPath, 'palettes', { skipInstallation: true }, tree);
|
|
18
18
|
}
|
|
19
19
|
catch (error) {
|
|
20
20
|
// eslint-disable-next-line no-console
|
|
21
21
|
console.log(error);
|
|
22
22
|
}
|
|
23
23
|
// Assert
|
|
24
|
-
(0,
|
|
24
|
+
(0, lib_1.expectTree)(tree).toMatchTree(expectedTree);
|
|
25
25
|
});
|
|
26
26
|
// Use this to migrate @lucca-front/* packages
|
|
27
27
|
it.skip('should migrate @lucca-front/*', async () => {
|
|
@@ -33,10 +33,10 @@ describe('Palettes Migration', () => {
|
|
|
33
33
|
...glob.sync('packages/ng/**/*', { cwd: lfRoot, nodir: true, ignore: ['**/schematics/**'] }),
|
|
34
34
|
...glob.sync('stories/**', { cwd: lfRoot, nodir: true }),
|
|
35
35
|
];
|
|
36
|
-
const treeOriginalTree = (0,
|
|
37
|
-
const tree = (0,
|
|
36
|
+
const treeOriginalTree = (0, lib_1.createTreeFromFiles)(lfRoot, lfFiles, '.');
|
|
37
|
+
const tree = (0, lib_1.createTreeFromFiles)(lfRoot, lfFiles, '.');
|
|
38
38
|
// Act
|
|
39
|
-
await (0,
|
|
39
|
+
await (0, lib_1.runSchematic)('collection', collectionPath, 'palettes', { skipInstallation: true }, tree);
|
|
40
40
|
// Assert
|
|
41
41
|
tree.visit((p, entry) => {
|
|
42
42
|
const original = treeOriginalTree.get(p)?.content.toString() || '';
|