jqwidgets-ng 18.0.0 → 18.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ReleaseNotes.txt +5 -125
- package/esm2020/jqxdatatable/angular_jqxdatatable.mjs +3 -0
- package/esm2020/jqxgrid/angular_jqxgrid.mjs +3 -0
- package/esm2020/jqxtreegrid/angular_jqxtreegrid.mjs +3 -0
- package/fesm2015/jqwidgets-ng-jqxbarcode.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxbargauge.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxbulletchart.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxbuttongroup.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxbuttons.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxcalendar.mjs +8 -6
- package/fesm2015/jqwidgets-ng-jqxchart.mjs +11 -9
- package/fesm2015/jqwidgets-ng-jqxcheckbox.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxcheckboxgroup.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxcolorpicker.mjs +7 -5
- package/fesm2015/jqwidgets-ng-jqxcombobox.mjs +8 -6
- package/fesm2015/jqwidgets-ng-jqxcomplexinput.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxdatatable.mjs +17 -12
- package/fesm2015/jqwidgets-ng-jqxdatetimeinput.mjs +8 -6
- package/fesm2015/jqwidgets-ng-jqxdocking.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxdockinglayout.mjs +10 -8
- package/fesm2015/jqwidgets-ng-jqxdockpanel.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxdragdrop.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxdraw.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxdropdownbutton.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxdropdownlist.mjs +8 -6
- package/fesm2015/jqwidgets-ng-jqxeditor.mjs +14 -12
- package/fesm2015/jqwidgets-ng-jqxexpander.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxfileupload.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxform.mjs +19 -17
- package/fesm2015/jqwidgets-ng-jqxformattedinput.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxgantt.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxgauge.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxgrid.mjs +34 -29
- package/fesm2015/jqwidgets-ng-jqxheatmap.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxinput.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxkanban.mjs +7 -5
- package/fesm2015/jqwidgets-ng-jqxknob.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxlayout.mjs +7 -5
- package/fesm2015/jqwidgets-ng-jqxlineargauge.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxlinkbutton.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxlistbox.mjs +8 -6
- package/fesm2015/jqwidgets-ng-jqxlistmenu.mjs +7 -5
- package/fesm2015/jqwidgets-ng-jqxloader.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxmaskedinput.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxmenu.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxnavbar.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxnavigationbar.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxnotification.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxnumberinput.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxpanel.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxpasswordinput.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxpivotdesigner.mjs +3 -1
- package/fesm2015/jqwidgets-ng-jqxpivotgrid.mjs +16 -14
- package/fesm2015/jqwidgets-ng-jqxpopover.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxprogressbar.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxqrcode.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxradiobutton.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxradiobuttongroup.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxrangeselector.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxrating.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxrepeatbutton.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxresponsivepanel.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxribbon.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxscheduler.mjs +24 -22
- package/fesm2015/jqwidgets-ng-jqxscrollbar.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxscrollview.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxslider.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxsortable.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxsplitlayout.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxsplitter.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxswitchbutton.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxtabs.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxtagcloud.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxtextarea.mjs +7 -5
- package/fesm2015/jqwidgets-ng-jqxtimepicker.mjs +5 -3
- package/fesm2015/jqwidgets-ng-jqxtogglebutton.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxtoolbar.mjs +10 -8
- package/fesm2015/jqwidgets-ng-jqxtooltip.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxtree.mjs +10 -8
- package/fesm2015/jqwidgets-ng-jqxtreegrid.mjs +18 -13
- package/fesm2015/jqwidgets-ng-jqxtreemap.mjs +6 -4
- package/fesm2015/jqwidgets-ng-jqxvalidator.mjs +4 -2
- package/fesm2015/jqwidgets-ng-jqxwindow.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxbarcode.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxbargauge.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxbulletchart.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxbuttongroup.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxbuttons.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxcalendar.mjs +8 -6
- package/fesm2020/jqwidgets-ng-jqxchart.mjs +11 -9
- package/fesm2020/jqwidgets-ng-jqxcheckbox.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxcheckboxgroup.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxcolorpicker.mjs +7 -5
- package/fesm2020/jqwidgets-ng-jqxcombobox.mjs +8 -6
- package/fesm2020/jqwidgets-ng-jqxcomplexinput.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxdatatable.mjs +17 -12
- package/fesm2020/jqwidgets-ng-jqxdatetimeinput.mjs +8 -6
- package/fesm2020/jqwidgets-ng-jqxdocking.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxdockinglayout.mjs +10 -8
- package/fesm2020/jqwidgets-ng-jqxdockpanel.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxdragdrop.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxdraw.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxdropdownbutton.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxdropdownlist.mjs +8 -6
- package/fesm2020/jqwidgets-ng-jqxeditor.mjs +14 -12
- package/fesm2020/jqwidgets-ng-jqxexpander.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxfileupload.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxform.mjs +19 -17
- package/fesm2020/jqwidgets-ng-jqxformattedinput.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxgantt.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxgauge.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxgrid.mjs +34 -29
- package/fesm2020/jqwidgets-ng-jqxheatmap.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxinput.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxkanban.mjs +7 -5
- package/fesm2020/jqwidgets-ng-jqxknob.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxlayout.mjs +7 -5
- package/fesm2020/jqwidgets-ng-jqxlineargauge.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxlinkbutton.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxlistbox.mjs +8 -6
- package/fesm2020/jqwidgets-ng-jqxlistmenu.mjs +7 -5
- package/fesm2020/jqwidgets-ng-jqxloader.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxmaskedinput.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxmenu.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxnavbar.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxnavigationbar.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxnotification.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxnumberinput.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxpanel.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxpasswordinput.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxpivotdesigner.mjs +3 -1
- package/fesm2020/jqwidgets-ng-jqxpivotgrid.mjs +16 -14
- package/fesm2020/jqwidgets-ng-jqxpopover.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxprogressbar.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxqrcode.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxradiobutton.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxradiobuttongroup.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxrangeselector.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxrating.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxrepeatbutton.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxresponsivepanel.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxribbon.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxscheduler.mjs +24 -22
- package/fesm2020/jqwidgets-ng-jqxscrollbar.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxscrollview.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxslider.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxsortable.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxsplitlayout.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxsplitter.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxswitchbutton.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxtabs.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxtagcloud.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxtextarea.mjs +7 -5
- package/fesm2020/jqwidgets-ng-jqxtimepicker.mjs +5 -3
- package/fesm2020/jqwidgets-ng-jqxtogglebutton.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxtoolbar.mjs +10 -8
- package/fesm2020/jqwidgets-ng-jqxtooltip.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxtree.mjs +10 -8
- package/fesm2020/jqwidgets-ng-jqxtreegrid.mjs +18 -13
- package/fesm2020/jqwidgets-ng-jqxtreemap.mjs +6 -4
- package/fesm2020/jqwidgets-ng-jqxvalidator.mjs +4 -2
- package/fesm2020/jqwidgets-ng-jqxwindow.mjs +5 -3
- package/jqwidgets/globalization/globalize.culture.cs-CZ.js +87 -87
- package/jqwidgets/globalization/globalize.culture.de-DE.js +83 -83
- package/jqwidgets/globalization/globalize.culture.en-CA.js +51 -51
- package/jqwidgets/globalization/globalize.culture.en-US.js +35 -35
- package/jqwidgets/globalization/globalize.culture.fr-FR.js +81 -81
- package/jqwidgets/globalization/globalize.culture.he-IL.js +99 -99
- package/jqwidgets/globalization/globalize.culture.hr-HR.js +83 -83
- package/jqwidgets/globalization/globalize.culture.hu-HU.js +82 -82
- package/jqwidgets/globalization/globalize.culture.it-IT.js +81 -81
- package/jqwidgets/globalization/globalize.culture.ja-JP.js +102 -102
- package/jqwidgets/globalization/globalize.culture.lt.js +85 -85
- package/jqwidgets/globalization/globalize.culture.ru-RU.js +84 -84
- package/jqwidgets/globalization/globalize.culture.sa-IN.js +73 -73
- package/jqwidgets/globalization/globalize.js +1591 -1591
- package/jqwidgets/jqx-all.js +9 -9
- package/jqwidgets/jqxangular.js +2 -2
- package/jqwidgets/jqxbarcode.js +2 -2
- package/jqwidgets/jqxbargauge.js +2 -2
- package/jqwidgets/jqxbulletchart.js +2 -2
- package/jqwidgets/jqxbuttongroup.js +2 -2
- package/jqwidgets/jqxbuttons.js +2 -2
- package/jqwidgets/jqxcalendar.js +2 -2
- package/jqwidgets/jqxchart.annotations.js +2 -2
- package/jqwidgets/jqxchart.api.js +2 -2
- package/jqwidgets/jqxchart.core.js +3 -3
- package/jqwidgets/jqxchart.js +3 -3
- package/jqwidgets/jqxchart.rangeselector.js +2 -2
- package/jqwidgets/jqxchart.waterfall.js +2 -2
- package/jqwidgets/jqxcheckbox.js +2 -2
- package/jqwidgets/jqxcheckboxgroup.js +2 -2
- package/jqwidgets/jqxcolorpicker.js +2 -2
- package/jqwidgets/jqxcombobox.js +2 -2
- package/jqwidgets/jqxcomplexinput.js +2 -2
- package/jqwidgets/jqxcore.js +3 -3
- package/jqwidgets/jqxdata.export.js +2 -2
- package/jqwidgets/jqxdata.js +2 -2
- package/jqwidgets/jqxdatatable.js +2 -2
- package/jqwidgets/jqxdate.js +2 -2
- package/jqwidgets/jqxdatetimeinput.js +2 -2
- package/jqwidgets/jqxdocking.js +2 -2
- package/jqwidgets/jqxdockinglayout.js +2 -2
- package/jqwidgets/jqxdockpanel.js +2 -2
- package/jqwidgets/jqxdragdrop.js +2 -2
- package/jqwidgets/jqxdraw.js +2 -2
- package/jqwidgets/jqxdropdownbutton.js +2 -2
- package/jqwidgets/jqxdropdownlist.js +2 -2
- package/jqwidgets/jqxeditor.js +2 -2
- package/jqwidgets/jqxexpander.js +2 -2
- package/jqwidgets/jqxfileupload.js +2 -2
- package/jqwidgets/jqxform.js +3 -3
- package/jqwidgets/jqxformattedinput.js +2 -2
- package/jqwidgets/jqxgantt.api.js +346 -382
- package/jqwidgets/jqxgantt.js +2 -2
- package/jqwidgets/jqxgauge.js +2 -2
- package/jqwidgets/jqxgrid.aggregates.js +2 -2
- package/jqwidgets/jqxgrid.columnsreorder.js +2 -2
- package/jqwidgets/jqxgrid.columnsresize.js +2 -2
- package/jqwidgets/jqxgrid.edit.js +2 -2
- package/jqwidgets/jqxgrid.export.js +2 -2
- package/jqwidgets/jqxgrid.filter.js +2 -2
- package/jqwidgets/jqxgrid.grouping.js +3 -3
- package/jqwidgets/jqxgrid.js +3 -3
- package/jqwidgets/jqxgrid.pager.js +2 -2
- package/jqwidgets/jqxgrid.selection.js +2 -2
- package/jqwidgets/jqxgrid.sort.js +3 -3
- package/jqwidgets/jqxgrid.storage.js +2 -2
- package/jqwidgets/jqxheatmap.js +2 -2
- package/jqwidgets/jqxinput.js +2 -2
- package/jqwidgets/jqxkanban.js +2 -2
- package/jqwidgets/jqxknob.js +2 -2
- package/jqwidgets/jqxknockout.js +2 -2
- package/jqwidgets/jqxlayout.js +2 -2
- package/jqwidgets/jqxlistbox.js +2 -2
- package/jqwidgets/jqxlistmenu.js +2 -2
- package/jqwidgets/jqxloader.js +2 -2
- package/jqwidgets/jqxmaskedinput.js +2 -2
- package/jqwidgets/jqxmenu.js +2 -2
- package/jqwidgets/jqxnavbar.js +2 -2
- package/jqwidgets/jqxnavigationbar.js +2 -2
- package/jqwidgets/jqxnotification.js +2 -2
- package/jqwidgets/jqxnumberinput.js +2 -2
- package/jqwidgets/jqxpanel.js +2 -2
- package/jqwidgets/jqxpasswordinput.js +2 -2
- package/jqwidgets/jqxpivot.js +2 -2
- package/jqwidgets/jqxpivotdesigner.js +2 -2
- package/jqwidgets/jqxpivotgrid.js +2 -2
- package/jqwidgets/jqxpopover.js +2 -2
- package/jqwidgets/jqxprogressbar.js +2 -2
- package/jqwidgets/jqxqrcode.js +2 -2
- package/jqwidgets/jqxradiobutton.js +2 -2
- package/jqwidgets/jqxradiobuttongroup.js +2 -2
- package/jqwidgets/jqxrangeselector.js +2 -2
- package/jqwidgets/jqxrating.js +2 -2
- package/jqwidgets/jqxresponsivepanel.js +2 -2
- package/jqwidgets/jqxribbon.js +2 -2
- package/jqwidgets/jqxscheduler.api.js +2 -2
- package/jqwidgets/jqxscheduler.js +2 -2
- package/jqwidgets/jqxscrollbar.js +2 -2
- package/jqwidgets/jqxscrollview.js +2 -2
- package/jqwidgets/jqxslider.js +2 -2
- package/jqwidgets/jqxsortable.js +2 -2
- package/jqwidgets/jqxsplitlayout.js +2 -2
- package/jqwidgets/jqxsplitter.js +2 -2
- package/jqwidgets/jqxswitchbutton.js +2 -2
- package/jqwidgets/jqxtabs.js +2 -2
- package/jqwidgets/jqxtagcloud.js +2 -2
- package/jqwidgets/jqxtextarea.js +2 -2
- package/jqwidgets/jqxtimepicker.js +2 -2
- package/jqwidgets/jqxtoolbar.js +2 -2
- package/jqwidgets/jqxtooltip.js +2 -2
- package/jqwidgets/jqxtouch.js +2 -2
- package/jqwidgets/jqxtree.js +2 -2
- package/jqwidgets/jqxtreegrid.js +3 -3
- package/jqwidgets/jqxtreemap.js +2 -2
- package/jqwidgets/jqxvalidator.js +2 -2
- package/jqwidgets/jqxwindow.js +2 -2
- package/jqwidgets/styles/font/jqx-icons.svg +268 -268
- package/jqwidgets/styles/gantt/font/jqx-icons.svg +332 -332
- package/jqwidgets/styles/gantt/jqx.gantt.css +18667 -18667
- package/jqwidgets/styles/jqx.fluent.css +3563 -3563
- package/jqwidgets/styles/jqx.fluent_old.css +1262 -1262
- package/jqwidgets/styles/theme.css +293 -293
- package/jqwidgets.d.ts +1 -1
- package/package.json +21 -3
- package/schematics/cdk/schematics/collection.json +2 -1
- package/schematics/cdk/schematics/index.d.ts +2 -1
- package/schematics/cdk/schematics/index.js +4 -4
- package/schematics/cdk/schematics/index.mjs +4 -4
- package/schematics/cdk/schematics/migration.json +4 -39
- package/schematics/cdk/schematics/ng-add/index.js +1 -1
- package/schematics/cdk/schematics/ng-add/index.mjs +1 -1
- package/schematics/cdk/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts.template +6 -10
- package/schematics/cdk/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts.template +7 -5
- package/schematics/cdk/schematics/ng-generate/drag-drop/index.js +9 -15
- package/schematics/cdk/schematics/ng-generate/drag-drop/index.mjs +9 -15
- package/schematics/cdk/schematics/ng-generate/drag-drop/schema.json +7 -0
- package/schematics/cdk/schematics/ng-update/data/attribute-selectors.js +2 -13
- package/schematics/cdk/schematics/ng-update/data/attribute-selectors.mjs +2 -13
- package/schematics/cdk/schematics/ng-update/data/class-names.js +2 -32
- package/schematics/cdk/schematics/ng-update/data/class-names.mjs +2 -32
- package/schematics/cdk/schematics/ng-update/data/constructor-checks.d.ts +1 -1
- package/schematics/cdk/schematics/ng-update/data/constructor-checks.js +2 -59
- package/schematics/cdk/schematics/ng-update/data/constructor-checks.mjs +2 -59
- package/schematics/cdk/schematics/ng-update/data/css-selectors.js +2 -5
- package/schematics/cdk/schematics/ng-update/data/css-selectors.mjs +2 -5
- package/schematics/cdk/schematics/ng-update/data/element-selectors.js +2 -5
- package/schematics/cdk/schematics/ng-update/data/element-selectors.mjs +2 -5
- package/schematics/cdk/schematics/ng-update/data/input-names.js +2 -95
- package/schematics/cdk/schematics/ng-update/data/input-names.mjs +2 -95
- package/schematics/cdk/schematics/ng-update/data/method-call-checks.js +2 -47
- package/schematics/cdk/schematics/ng-update/data/method-call-checks.mjs +2 -47
- package/schematics/cdk/schematics/ng-update/data/output-names.js +2 -19
- package/schematics/cdk/schematics/ng-update/data/output-names.mjs +2 -19
- package/schematics/cdk/schematics/ng-update/data/property-names.js +2 -127
- package/schematics/cdk/schematics/ng-update/data/property-names.mjs +2 -127
- package/schematics/cdk/schematics/ng-update/devkit-file-system.js +10 -6
- package/schematics/cdk/schematics/ng-update/devkit-file-system.mjs +10 -6
- package/schematics/cdk/schematics/ng-update/devkit-migration-rule.d.ts +2 -2
- package/schematics/cdk/schematics/ng-update/devkit-migration-rule.js +6 -14
- package/schematics/cdk/schematics/ng-update/devkit-migration-rule.mjs +6 -14
- package/schematics/cdk/schematics/ng-update/devkit-migration.d.ts +5 -5
- package/schematics/cdk/schematics/ng-update/devkit-migration.js +1 -1
- package/schematics/cdk/schematics/ng-update/devkit-migration.mjs +1 -1
- package/schematics/cdk/schematics/ng-update/find-stylesheets.js +2 -2
- package/schematics/cdk/schematics/ng-update/find-stylesheets.mjs +2 -2
- package/schematics/cdk/schematics/ng-update/html-parsing/elements.d.ts +1 -2
- package/schematics/cdk/schematics/ng-update/html-parsing/elements.js +2 -3
- package/schematics/cdk/schematics/ng-update/html-parsing/elements.mjs +2 -3
- package/schematics/cdk/schematics/ng-update/index.d.ts +2 -16
- package/schematics/cdk/schematics/ng-update/index.js +7 -43
- package/schematics/cdk/schematics/ng-update/index.mjs +7 -43
- package/schematics/cdk/schematics/ng-update/migrations/attribute-selectors.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/attribute-selectors.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/class-inheritance.js +8 -11
- package/schematics/cdk/schematics/ng-update/migrations/class-inheritance.mjs +8 -11
- package/schematics/cdk/schematics/ng-update/migrations/class-names.js +12 -15
- package/schematics/cdk/schematics/ng-update/migrations/class-names.mjs +12 -15
- package/schematics/cdk/schematics/ng-update/migrations/constructor-signature.js +7 -10
- package/schematics/cdk/schematics/ng-update/migrations/constructor-signature.mjs +7 -10
- package/schematics/cdk/schematics/ng-update/migrations/css-selectors.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/css-selectors.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/element-selectors.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/element-selectors.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/input-names.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/input-names.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/method-call-arguments.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/method-call-arguments.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/misc-template.js +4 -20
- package/schematics/cdk/schematics/ng-update/migrations/misc-template.mjs +4 -20
- package/schematics/cdk/schematics/ng-update/migrations/output-names.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/output-names.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/property-names.js +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/property-names.mjs +5 -8
- package/schematics/cdk/schematics/ng-update/migrations/symbol-removal.js +6 -10
- package/schematics/cdk/schematics/ng-update/migrations/symbol-removal.mjs +6 -10
- package/schematics/cdk/schematics/ng-update/public-api.d.ts +2 -0
- package/schematics/cdk/schematics/ng-update/public-api.js +3 -1
- package/schematics/cdk/schematics/ng-update/public-api.mjs +3 -1
- package/schematics/cdk/schematics/ng-update/upgrade-data.js +4 -1
- package/schematics/cdk/schematics/ng-update/upgrade-data.mjs +4 -1
- package/schematics/cdk/schematics/tsconfig.json +1 -0
- package/schematics/cdk/schematics/update-tool/component-resource-collector.d.ts +1 -0
- package/schematics/cdk/schematics/update-tool/component-resource-collector.js +34 -15
- package/schematics/cdk/schematics/update-tool/component-resource-collector.mjs +34 -15
- package/schematics/cdk/schematics/update-tool/file-system.d.ts +3 -3
- package/schematics/cdk/schematics/update-tool/file-system.js +1 -1
- package/schematics/cdk/schematics/update-tool/file-system.mjs +1 -1
- package/schematics/cdk/schematics/update-tool/index.d.ts +6 -2
- package/schematics/cdk/schematics/update-tool/index.js +27 -11
- package/schematics/cdk/schematics/update-tool/index.mjs +27 -11
- package/schematics/cdk/schematics/update-tool/migration.d.ts +13 -7
- package/schematics/cdk/schematics/update-tool/migration.js +14 -4
- package/schematics/cdk/schematics/update-tool/migration.mjs +14 -4
- package/schematics/cdk/schematics/update-tool/public-api.d.ts +1 -0
- package/schematics/cdk/schematics/update-tool/public-api.js +2 -1
- package/schematics/cdk/schematics/update-tool/public-api.mjs +2 -1
- package/schematics/cdk/schematics/update-tool/target-version.d.ts +1 -8
- package/schematics/cdk/schematics/update-tool/target-version.js +3 -10
- package/schematics/cdk/schematics/update-tool/target-version.mjs +3 -10
- package/schematics/cdk/schematics/update-tool/utils/decorators.d.ts +1 -1
- package/schematics/cdk/schematics/update-tool/utils/diagnostics.d.ts +11 -0
- package/schematics/cdk/schematics/update-tool/utils/diagnostics.js +19 -0
- package/schematics/cdk/schematics/update-tool/utils/diagnostics.mjs +19 -0
- package/schematics/cdk/schematics/update-tool/utils/parse-tsconfig.d.ts +8 -0
- package/schematics/cdk/schematics/update-tool/utils/parse-tsconfig.js +30 -4
- package/schematics/cdk/schematics/update-tool/utils/parse-tsconfig.mjs +30 -4
- package/schematics/cdk/schematics/update-tool/utils/property-name.d.ts +1 -1
- package/schematics/cdk/schematics/update-tool/utils/virtual-host.d.ts +2 -0
- package/schematics/cdk/schematics/update-tool/utils/virtual-host.js +13 -3
- package/schematics/cdk/schematics/update-tool/utils/virtual-host.mjs +13 -3
- package/schematics/cdk/schematics/update-tool/version-changes.d.ts +3 -3
- package/schematics/cdk/schematics/utils/ast.d.ts +2 -2
- package/schematics/cdk/schematics/utils/ast.js +15 -25
- package/schematics/cdk/schematics/utils/ast.mjs +15 -25
- package/schematics/cdk/schematics/utils/build-component.js +22 -27
- package/schematics/cdk/schematics/utils/build-component.mjs +22 -27
- package/schematics/cdk/schematics/utils/get-project.d.ts +2 -2
- package/schematics/cdk/schematics/utils/get-project.js +7 -2
- package/schematics/cdk/schematics/utils/get-project.mjs +7 -2
- package/schematics/cdk/schematics/utils/html-manipulation.d.ts +1 -1
- package/schematics/cdk/schematics/utils/html-manipulation.js +2 -2
- package/schematics/cdk/schematics/utils/html-manipulation.mjs +2 -2
- package/schematics/cdk/schematics/utils/index.d.ts +1 -0
- package/schematics/cdk/schematics/utils/index.js +2 -1
- package/schematics/cdk/schematics/utils/index.mjs +2 -1
- package/schematics/cdk/schematics/utils/parse5-element.d.ts +3 -1
- package/schematics/cdk/schematics/utils/parse5-element.js +1 -1
- package/schematics/cdk/schematics/utils/parse5-element.mjs +1 -1
- package/schematics/cdk/schematics/utils/project-index-file.d.ts +2 -3
- package/schematics/cdk/schematics/utils/project-index-file.js +4 -4
- package/schematics/cdk/schematics/utils/project-index-file.mjs +4 -4
- package/schematics/cdk/schematics/utils/project-main-file.d.ts +2 -3
- package/schematics/cdk/schematics/utils/project-main-file.js +6 -3
- package/schematics/cdk/schematics/utils/project-main-file.mjs +6 -3
- package/schematics/cdk/schematics/utils/project-style-file.d.ts +2 -2
- package/schematics/cdk/schematics/utils/project-style-file.js +4 -3
- package/schematics/cdk/schematics/utils/project-style-file.mjs +4 -3
- package/schematics/cdk/schematics/utils/project-targets.d.ts +6 -10
- package/schematics/cdk/schematics/utils/project-targets.js +18 -13
- package/schematics/cdk/schematics/utils/project-targets.mjs +18 -13
- package/schematics/cdk/schematics/utils/project-tsconfig-paths.d.ts +3 -3
- package/schematics/cdk/schematics/utils/project-tsconfig-paths.js +14 -29
- package/schematics/cdk/schematics/utils/project-tsconfig-paths.mjs +14 -29
- package/schematics/cdk/schematics/utils/schematic-options.d.ts +5 -2
- package/schematics/cdk/schematics/utils/schematic-options.js +25 -5
- package/schematics/cdk/schematics/utils/schematic-options.mjs +25 -5
- package/schematics/fonts/material-fonts.js +8 -19
- package/schematics/fonts/material-fonts.mjs +35 -0
- package/schematics/ng-add/schema.json +1 -0
- package/schematics/theming/create-custom-theme.d.ts +9 -2
- package/schematics/theming/create-custom-theme.js +51 -11
- package/schematics/theming/create-custom-theme.mjs +51 -0
- package/schematics/theming/theming.d.ts +13 -6
- package/schematics/theming/theming.js +167 -179
- package/schematics/theming/theming.mjs +152 -0
- package/schematics/theming/theming2.js +179 -0
- package/schematics/cdk/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.d.ts +0 -14
- package/schematics/cdk/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.js +0 -39
- package/schematics/cdk/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.mjs +0 -39
- package/schematics/cdk/schematics/utils/vendored-ast-utils/index.d.ts +0 -70
- package/schematics/cdk/schematics/utils/vendored-ast-utils/index.js +0 -480
- package/schematics/cdk/schematics/utils/vendored-ast-utils/index.mjs +0 -480
|
@@ -1,179 +1,167 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (!isDefaultBuilder && targetName === 'build') {
|
|
168
|
-
throw new schematics_1.SchematicsException(`Your project is not using the default builders for ` +
|
|
169
|
-
`"${targetName}". The Angular Material schematics cannot add a theme to the workspace ` +
|
|
170
|
-
`configuration if the builder has been changed.`);
|
|
171
|
-
}
|
|
172
|
-
else if (!isDefaultBuilder) {
|
|
173
|
-
// for non-build targets we gracefully report the error without actually aborting the
|
|
174
|
-
// setup schematic. This is because a theme is not mandatory for running tests.
|
|
175
|
-
logger.warn(`Your project is not using the default builders for "${targetName}". This ` +
|
|
176
|
-
`means that we cannot add the configured theme to the "${targetName}" target.`);
|
|
177
|
-
}
|
|
178
|
-
return isDefaultBuilder;
|
|
179
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.addTypographyClass = exports.addThemeToAppStyles = void 0;
|
|
11
|
+
const core_1 = require("@angular-devkit/core");
|
|
12
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
13
|
+
const schematics_2 = require("../cdk/schematics");
|
|
14
|
+
const change_1 = require("@schematics/angular/utility/change");
|
|
15
|
+
const workspace_1 = require("@schematics/angular/utility/workspace");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const create_custom_theme_1 = require("./create-custom-theme");
|
|
18
|
+
/** Path segment that can be found in paths that refer to a prebuilt theme. */
|
|
19
|
+
let prebuiltThemePathSegment = 'jqwidgets-ng/jqwidgets/styles';
|
|
20
|
+
|
|
21
|
+
/** Default file name of the custom theme that can be generated. */
|
|
22
|
+
const defaultCustomThemeFilename = 'custom-theme.scss';
|
|
23
|
+
/** Add pre-built styles to the main project style file. */
|
|
24
|
+
function addThemeToAppStyles(options) {
|
|
25
|
+
return (host, context) => {
|
|
26
|
+
const themeName = options.theme || 'base';
|
|
27
|
+
return themeName === 'custom'
|
|
28
|
+
? insertCustomTheme(options.project, host, context.logger)
|
|
29
|
+
: insertPrebuiltTheme(options.project, 'jqx.' + themeName, context.logger);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
exports.addThemeToAppStyles = addThemeToAppStyles;
|
|
33
|
+
/** Adds the global typography class to the body element. */
|
|
34
|
+
function addTypographyClass(options) {
|
|
35
|
+
return async (host) => {
|
|
36
|
+
const workspace = await (0, workspace_1.getWorkspace)(host);
|
|
37
|
+
const project = (0, schematics_2.getProjectFromWorkspace)(workspace, options.project);
|
|
38
|
+
const projectIndexFiles = (0, schematics_2.getProjectIndexFiles)(project);
|
|
39
|
+
if (!projectIndexFiles.length) {
|
|
40
|
+
throw new schematics_1.SchematicsException('No project index HTML file could be found.');
|
|
41
|
+
}
|
|
42
|
+
if (options.typography) {
|
|
43
|
+
projectIndexFiles.forEach(path => (0, schematics_2.addBodyClass)(host, path, 'mat-typography'));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exports.addTypographyClass = addTypographyClass;
|
|
48
|
+
/**
|
|
49
|
+
* Insert a custom theme to project style file. If no valid style file could be found, a new
|
|
50
|
+
* Scss file for the custom theme will be created.
|
|
51
|
+
*/
|
|
52
|
+
async function insertCustomTheme(projectName, host, logger) {
|
|
53
|
+
const workspace = await (0, workspace_1.getWorkspace)(host);
|
|
54
|
+
const project = (0, schematics_2.getProjectFromWorkspace)(workspace, projectName);
|
|
55
|
+
const stylesPath = (0, schematics_2.getProjectStyleFile)(project, 'scss');
|
|
56
|
+
const themeContent = (0, create_custom_theme_1.createCustomTheme)(projectName);
|
|
57
|
+
if (!stylesPath) {
|
|
58
|
+
if (!project.sourceRoot) {
|
|
59
|
+
throw new schematics_1.SchematicsException(`Could not find source root for project: "${projectName}". ` +
|
|
60
|
+
`Please make sure that the "sourceRoot" property is set in the workspace config.`);
|
|
61
|
+
}
|
|
62
|
+
// Normalize the path through the devkit utilities because we want to avoid having
|
|
63
|
+
// unnecessary path segments and windows backslash delimiters.
|
|
64
|
+
const customThemePath = (0, core_1.normalize)((0, path_1.join)(project.sourceRoot, defaultCustomThemeFilename));
|
|
65
|
+
if (host.exists(customThemePath)) {
|
|
66
|
+
logger.warn(`Cannot create a custom Angular Material theme because
|
|
67
|
+
${customThemePath} already exists. Skipping custom theme generation.`);
|
|
68
|
+
return (0, schematics_1.noop)();
|
|
69
|
+
}
|
|
70
|
+
host.create(customThemePath, themeContent);
|
|
71
|
+
return addThemeStyleToTarget(projectName, 'build', customThemePath, logger);
|
|
72
|
+
}
|
|
73
|
+
const insertion = new change_1.InsertChange(stylesPath, 0, themeContent);
|
|
74
|
+
const recorder = host.beginUpdate(stylesPath);
|
|
75
|
+
recorder.insertLeft(insertion.pos, insertion.toAdd);
|
|
76
|
+
host.commitUpdate(recorder);
|
|
77
|
+
return (0, schematics_1.noop)();
|
|
78
|
+
}
|
|
79
|
+
/** Insert a pre-built theme into the angular.json file. */
|
|
80
|
+
function insertPrebuiltTheme(project, theme, logger) {
|
|
81
|
+
const baseThemePath = `./node_modules/jqwidgets-ng/jqwidgets/styles/jqx.base.css`;
|
|
82
|
+
const themePath = `./node_modules/jqwidgets-ng/jqwidgets/styles/${theme}.css`;
|
|
83
|
+
|
|
84
|
+
if (theme === 'jqx.base') {
|
|
85
|
+
return schematics_1.chain([
|
|
86
|
+
addThemeStyleToTarget(project, 'build', themePath, logger),
|
|
87
|
+
addThemeStyleToTarget(project, 'test', themePath, logger)
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
prebuiltThemePathSegment += "/" + theme;
|
|
92
|
+
|
|
93
|
+
return schematics_1.chain([
|
|
94
|
+
addThemeStyleToTarget(project, 'build', baseThemePath, logger),
|
|
95
|
+
addThemeStyleToTarget(project, 'test', baseThemePath, logger),
|
|
96
|
+
addThemeStyleToTarget(project, 'build', themePath, logger),
|
|
97
|
+
addThemeStyleToTarget(project, 'test', themePath, logger)
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Adds a theming style entry to the given project target options. */
|
|
102
|
+
function addThemeStyleToTarget(projectName, targetName, assetPath, logger) {
|
|
103
|
+
return (0, workspace_1.updateWorkspace)(workspace => {
|
|
104
|
+
const project = (0, schematics_2.getProjectFromWorkspace)(workspace, projectName);
|
|
105
|
+
// Do not update the builder options in case the target does not use the default CLI builder.
|
|
106
|
+
if (!validateDefaultTargetBuilder(project, targetName, logger)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const targetOptions = (0, schematics_2.getProjectTargetOptions)(project, targetName);
|
|
110
|
+
const styles = targetOptions['styles'];
|
|
111
|
+
if (!styles) {
|
|
112
|
+
targetOptions['styles'] = [assetPath];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const existingStyles = styles.map(s => (typeof s === 'string' ? s : s.input));
|
|
116
|
+
for (let [index, stylePath] of existingStyles.entries()) {
|
|
117
|
+
// If the given asset is already specified in the styles, we don't need to do anything.
|
|
118
|
+
if (stylePath === assetPath) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// In case a prebuilt theme is already set up, we can safely replace the theme with the new
|
|
122
|
+
// theme file. If a custom theme is set up, we are not able to safely replace the custom
|
|
123
|
+
// theme because these files can contain custom styles, while prebuilt themes are
|
|
124
|
+
// always packaged and considered replaceable.
|
|
125
|
+
if (stylePath.includes(defaultCustomThemeFilename)) {
|
|
126
|
+
logger.error(`Could not add the selected theme to the CLI project ` +
|
|
127
|
+
`configuration because there is already a custom theme file referenced.`);
|
|
128
|
+
logger.info(`Please manually add the following style file to your configuration:`);
|
|
129
|
+
logger.info(` ${assetPath}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
else if (stylePath.includes(prebuiltThemePathSegment)) {
|
|
133
|
+
styles.splice(index, 1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
styles.unshift(assetPath);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Validates that the specified project target is configured with the default builders which are
|
|
142
|
+
* provided by the Angular CLI. If the configured builder does not match the default builder,
|
|
143
|
+
* this function can either throw or just show a warning.
|
|
144
|
+
*/
|
|
145
|
+
function validateDefaultTargetBuilder(project, targetName, logger) {
|
|
146
|
+
const targets = targetName === 'test' ? (0, schematics_2.getProjectTestTargets)(project) : (0, schematics_2.getProjectBuildTargets)(project);
|
|
147
|
+
const isDefaultBuilder = targets.length > 0;
|
|
148
|
+
// Because the build setup for the Angular CLI can be customized by developers, we can't know
|
|
149
|
+
// where to put the theme file in the workspace configuration if custom builders are being
|
|
150
|
+
// used. In case the builder has been changed for the "build" target, we throw an error and
|
|
151
|
+
// exit because setting up a theme is a primary goal of `ng-add`. Otherwise if just the "test"
|
|
152
|
+
// builder has been changed, we warn because a theme is not mandatory for running tests
|
|
153
|
+
// with Material. See: https://github.com/angular/components/issues/14176
|
|
154
|
+
if (!isDefaultBuilder && targetName === 'build') {
|
|
155
|
+
throw new schematics_1.SchematicsException(`Your project is not using the default builders for ` +
|
|
156
|
+
`"${targetName}". The Angular Material schematics cannot add a theme to the workspace ` +
|
|
157
|
+
`configuration if the builder has been changed.`);
|
|
158
|
+
}
|
|
159
|
+
else if (!isDefaultBuilder) {
|
|
160
|
+
// for non-build targets we gracefully report the error without actually aborting the
|
|
161
|
+
// setup schematic. This is because a theme is not mandatory for running tests.
|
|
162
|
+
logger.warn(`Your project is not using the default builders for "${targetName}". This ` +
|
|
163
|
+
`means that we cannot add the configured theme to the "${targetName}" target.`);
|
|
164
|
+
}
|
|
165
|
+
return isDefaultBuilder;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9zY2hlbWF0aWNzL25nLWFkZC90aGVtaW5nL3RoZW1pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgsK0NBQW9FO0FBQ3BFLDJEQU9vQztBQUNwQyx3REFRaUM7QUFDakMsK0RBQWdFO0FBQ2hFLHFFQUFvRjtBQUNwRiwrQkFBMEI7QUFFMUIsK0RBQXdEO0FBRXhELDhFQUE4RTtBQUM5RSxNQUFNLHdCQUF3QixHQUFHLG1DQUFtQyxDQUFDO0FBRXJFLG1FQUFtRTtBQUNuRSxNQUFNLDBCQUEwQixHQUFHLG1CQUFtQixDQUFDO0FBRXZELDJEQUEyRDtBQUMzRCxTQUFnQixtQkFBbUIsQ0FBQyxPQUFlO0lBQ2pELE9BQU8sQ0FBQyxJQUFVLEVBQUUsT0FBeUIsRUFBRSxFQUFFO1FBQy9DLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO1FBQ2pELE9BQU8sU0FBUyxLQUFLLFFBQVE7WUFDM0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDMUQsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBUEQsa0RBT0M7QUFFRCw0REFBNEQ7QUFDNUQsU0FBZ0Isa0JBQWtCLENBQUMsT0FBZTtJQUNoRCxPQUFPLEtBQUssRUFBRSxJQUFVLEVBQUUsRUFBRTtRQUMxQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFBLG9DQUF1QixFQUFDLFNBQVMs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QGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZSwgbG9nZ2luZywgd29ya3NwYWNlc30gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHtcbiAgY2hhaW4sXG4gIG5vb3AsXG4gIFJ1bGUsXG4gIFNjaGVtYXRpY0NvbnRleHQsXG4gIFNjaGVtYXRpY3NFeGNlcHRpb24sXG4gIFRyZWUsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7XG4gIGFkZEJvZHlDbGFzcyxcbiAgZ2V0UHJvamVjdEZyb21Xb3Jrc3BhY2UsXG4gIGdldFByb2plY3RTdHlsZUZpbGUsXG4gIGdldFByb2plY3RUYXJnZXRPcHRpb25zLFxuICBnZXRQcm9qZWN0SW5kZXhGaWxlcyxcbiAgZ2V0UHJvamVjdFRlc3RUYXJnZXRzLFxuICBnZXRQcm9qZWN0QnVpbGRUYXJnZXRzLFxufSBmcm9tICdAYW5ndWxhci9jZGsvc2NoZW1hdGljcyc7XG5pbXBvcnQge0luc2VydENoYW5nZX0gZnJvbSAnQHNjaGVtYXRpY3MvYW5ndWxhci91dGlsaXR5L2NoYW5nZSc7XG5pbXBvcnQge2dldFdvcmtzcGFjZSwgdXBkYXRlV29ya3NwYWNlfSBmcm9tICdAc2NoZW1hdGljcy9hbmd1bGFyL3V0aWxpdHkvd29ya3NwYWNlJztcbmltcG9ydCB7am9pbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1NjaGVtYX0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7Y3JlYXRlQ3VzdG9tVGhlbWV9IGZyb20gJy4vY3JlYXRlLWN1c3RvbS10aGVtZSc7XG5cbi8qKiBQYXRoIHNlZ21lbnQgdGhhdCBjYW4gYmUgZm91bmQgaW4gcGF0aHMgdGhhdCByZWZlciB0byBhIHByZWJ1aWx0IHRoZW1lLiAqL1xuY29uc3QgcHJlYnVpbHRUaGVtZVBhdGhTZWdtZW50ID0gJ0Bhbmd1bGFyL21hdGVyaWFsL3ByZWJ1aWx0LXRoZW1lcyc7XG5cbi8qKiBEZWZhdWx0IGZpbGUgbmFtZSBvZiB0aGUgY3VzdG9tIHRoZW1lIHRoYXQgY2FuIGJlIGdlbmVyYXRlZC4gKi9cbmNvbnN0IGRlZmF1bHRDdXN0b21UaGVtZUZpbGVuYW1lID0gJ2N1c3RvbS10aGVtZS5zY3NzJztcblxuLyoqIEFkZCBwcmUtYnVpbHQgc3R5bGVzIHRvIHRoZSBtYWluIHByb2plY3Qgc3R5bGUgZmlsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUaGVtZVRvQXBwU3R5bGVzKG9wdGlvbnM6IFNjaGVtYSk6IFJ1bGUge1xuICByZXR1cm4gKGhvc3Q6IFRyZWUsIGNvbnRleHQ6IFNjaGVtYXRpY0NvbnRleHQpID0+IHtcbiAgICBjb25zdCB0aGVtZU5hbWUgPSBvcHRpb25zLnRoZW1lIHx8ICdpbmRpZ28tcGluayc7XG4gICAgcmV0dXJuIHRoZW1lTmFtZSA9PT0gJ2N1c3RvbSdcbiAgICAgID8gaW5zZXJ0Q3VzdG9tVGhlbWUob3B0aW9ucy5wcm9qZWN0LCBob3N0LCBjb250ZXh0LmxvZ2dlcilcbiAgICAgIDogaW5zZXJ0UHJlYnVpbHRUaGVtZShvcHRpb25zLnByb2plY3QsIHRoZW1lTmFtZSwgY29udGV4dC5sb2dnZXIpO1xuICB9O1xufVxuXG4vKiogQWRkcyB0aGUgZ2xvYmFsIHR5cG9ncmFwaHkgY2xhc3MgdG8gdGhlIGJvZHkgZWxlbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBvZ3JhcGh5Q2xhc3Mob3B0aW9uczogU2NoZW1hKTogUnVsZSB7XG4gIHJldHVybiBhc3luYyAoaG9zdDogVHJlZSkgPT4ge1xuICAgIGNvbnN0IHdvcmtzcGFjZSA9IGF3YWl0IGdldFdvcmtzcGFjZShob3N0KTtcbiAgICBjb25zdCBwcm9qZWN0ID0gZ2V0UHJvamVjdEZyb21Xb3Jrc3BhY2Uod29ya3NwYWNlLCBvcHRpb25zLnByb2plY3QpO1xuICAgIGNvbnN0IHByb2plY3RJbmRleEZpbGVzID0gZ2V0UHJvamVjdEluZGV4RmlsZXMocHJvamVjdCk7XG5cbiAgICBpZiAoIXByb2plY3RJbmRleEZpbGVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oJ05vIHByb2plY3QgaW5kZXggSFRNTCBmaWxlIGNvdWxkIGJlIGZvdW5kLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnR5cG9ncmFwaHkpIHtcbiAgICAgIHByb2plY3RJbmRleEZpbGVzLmZvckVhY2gocGF0aCA9PiBhZGRCb2R5Q2xhc3MoaG9zdCwgcGF0aCwgJ21hdC10eXBvZ3JhcGh5JykpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgYSBjdXN0b20gdGhlbWUgdG8gcHJvamVjdCBzdHlsZSBmaWxlLiBJZiBubyB2YWxpZCBzdHlsZSBmaWxlIGNvdWxkIGJlIGZvdW5kLCBhIG5ld1xuICogU2NzcyBmaWxlIGZvciB0aGUgY3VzdG9tIHRoZW1lIHdpbGwgYmUgY3JlYXRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q3VzdG9tVGhlbWUoXG4gIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gIGhvc3Q6IFRyZWUsXG4gIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGksXG4pOiBQcm9taXNlPFJ1bGU+IHtcbiAgY29uc3Qgd29ya3NwYWNlID0gYXdhaXQgZ2V0V29ya3NwYWNlKGhvc3QpO1xuICBjb25zdCBwcm9qZWN0ID0gZ2V0UHJvamVjdEZyb21Xb3Jrc3BhY2Uod29ya3NwYWNlLCBwcm9qZWN0TmFtZSk7XG4gIGNvbnN0IHN0eWxlc1BhdGggPSBnZXRQcm9qZWN0U3R5bGVGaWxlKHByb2plY3QsICdzY3NzJyk7XG4gIGNvbnN0IHRoZW1lQ29udGVudCA9IGNyZWF0ZUN1c3RvbVRoZW1lKHByb2plY3ROYW1lKTtcblxuICBpZiAoIXN0eWxlc1BhdGgpIHtcbiAgICBpZiAoIXByb2plY3Quc291cmNlUm9vdCkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBzb3VyY2Ugcm9vdCBmb3IgcHJvamVjdDogXCIke3Byb2plY3ROYW1lfVwiLiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBcInNvdXJjZVJvb3RcIiBwcm9wZXJ0eSBpcyBzZXQgaW4gdGhlIHdvcmtzcGFjZSBjb25maWcuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoIHRocm91Z2ggdGhlIGRldmtpdCB1dGlsaXRpZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZ1xuICAgIC8vIHVubmVjZXNzYXJ5IHBhdGggc2VnbWVudHMgYW5kIHdpbmRvd3MgYmFja3NsYXNoIGRlbGltaXRlcnMuXG4gICAgY29uc3QgY3VzdG9tVGhlbWVQYXRoID0gbm9ybWFsaXplKGpvaW4ocHJvamVjdC5zb3VyY2VSb290LCBkZWZhdWx0Q3VzdG9tVGhlbWVGaWxlbmFtZSkpO1xuXG4gICAgaWYgKGhvc3QuZXhpc3RzKGN1c3RvbVRoZW1lUGF0aCkpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDYW5ub3QgY3JlYXRlIGEgY3VzdG9tIEFuZ3VsYXIgTWF0ZXJpYWwgdGhlbWUgYmVjYXVzZVxuICAgICAgICAgICR7Y3VzdG9tVGhlbWVQYXRofSBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcgY3VzdG9tIHRoZW1lIGdlbmVyYXRpb24uYCk7XG4gICAgICByZXR1cm4gbm9vcCgpO1xuICAgIH1cblxuICAgIGhvc3QuY3JlYXRlKGN1c3RvbVRoZW1lUGF0aCwgdGhlbWVDb250ZW50KTtcbiAgICByZXR1cm4gYWRkVGhlbWVTdHlsZVRvVGFyZ2V0KHByb2plY3ROYW1lLCAnYnVpbGQnLCBjdXN0b21UaGVtZVBhdGgsIGxvZ2dlcik7XG4gIH1cblxuICBjb25zdCBpbnNlcnRpb24gPSBuZXcgSW5zZXJ0Q2hhbmdlKHN0eWxlc1BhdGgsIDAsIHRoZW1lQ29udGVudCk7XG4gIGNvbnN0IHJlY29yZGVyID0gaG9zdC5iZWdpblVwZGF0ZShzdHlsZXNQYXRoKTtcblxuICByZWNvcmRlci5pbnNlcnRMZWZ0KGluc2VydGlvbi5wb3MsIGluc2VydGlvbi50b0FkZCk7XG4gIGhvc3QuY29tbWl0VXBkYXRlKHJlY29yZGVyKTtcbiAgcmV0dXJuIG5vb3AoKTtcbn1cblxuLyoqIEluc2VydCBhIHByZS1idWlsdCB0aGVtZSBpbnRvIHRoZSBhbmd1bGFyLmpzb24gZmlsZS4gKi9cbmZ1bmN0aW9uIGluc2VydFByZWJ1aWx0VGhlbWUocHJvamVjdDogc3RyaW5nLCB0aGVtZTogc3RyaW5nLCBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpKTogUnVsZSB7XG4gIGNvbnN0IHRoZW1lUGF0aCA9IGBAYW5ndWxhci9tYXRlcmlhbC9wcmVidWlsdC10aGVtZXMvJHt0aGVtZX0uY3NzYDtcblxuICByZXR1cm4gY2hhaW4oW1xuICAgIGFkZFRoZW1lU3R5bGVUb1RhcmdldChwcm9qZWN0LCAnYnVpbGQnLCB0aGVtZVBhdGgsIGxvZ2dlciksXG4gICAgYWRkVGhlbWVTdHlsZVRvVGFyZ2V0KHByb2plY3QsICd0ZXN0JywgdGhlbWVQYXRoLCBsb2dnZXIpLFxuICBdKTtcbn1cblxuLyoqIEFkZHMgYSB0aGVtaW5nIHN0eWxlIGVudHJ5IHRvIHRoZSBnaXZlbiBwcm9qZWN0IHRhcmdldCBvcHRpb25zLiAqL1xuZnVuY3Rpb24gYWRkVGhlbWVTdHlsZVRvVGFyZ2V0KFxuICBwcm9qZWN0TmFtZTogc3RyaW5nLFxuICB0YXJnZXROYW1lOiAndGVzdCcgfCAnYnVpbGQnLFxuICBhc3NldFBhdGg6IHN0cmluZyxcbiAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSxcbik6IFJ1bGUge1xuICByZXR1cm4gdXBkYXRlV29ya3NwYWNlKHdvcmtzcGFjZSA9PiB7XG4gICAgY29uc3QgcHJvamVjdCA9IGdldFByb2plY3RGcm9tV29ya3NwYWNlKHdvcmtzcGFjZSwgcHJvamVjdE5hbWUpO1xuXG4gICAgLy8gRG8gbm90IHVwZGF0ZSB0aGUgYnVpbGRlciBvcHRpb25zIGluIGNhc2UgdGhlIHRhcmdldCBkb2VzIG5vdCB1c2UgdGhlIGRlZmF1bHQgQ0xJIGJ1aWxkZXIuXG4gICAgaWYgKCF2YWxpZGF0ZURlZmF1bHRUYXJnZXRCdWlsZGVyKHByb2plY3QsIHRhcmdldE5hbWUsIGxvZ2dlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRPcHRpb25zID0gZ2V0UHJvamVjdFRhcmdldE9wdGlvbnMocHJvamVjdCwgdGFyZ2V0TmFtZSk7XG4gICAgY29uc3Qgc3R5bGVzID0gdGFyZ2V0T3B0aW9uc1snc3R5bGVzJ10gYXMgKHN0cmluZyB8IHtpbnB1dDogc3RyaW5nfSlbXTtcblxuICAgIGlmICghc3R5bGVzKSB7XG4gICAgICB0YXJnZXRPcHRpb25zWydzdHlsZXMnXSA9IFthc3NldFBhdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N0eWxlcyA9IHN0eWxlcy5tYXAocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMuaW5wdXQpKTtcblxuICAgICAgZm9yIChsZXQgW2luZGV4LCBzdHlsZVBhdGhdIG9mIGV4aXN0aW5nU3R5bGVzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4gYXNzZXQgaXMgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlcywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy5cbiAgICAgICAgaWYgKHN0eWxlUGF0aCA9PT0gYXNzZXRQYXRoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gY2FzZSBhIHByZWJ1aWx0IHRoZW1lIGlzIGFscmVhZHkgc2V0IHVwLCB3ZSBjYW4gc2FmZWx5IHJlcGxhY2UgdGhlIHRoZW1lIHdpdGggdGhlIG5ld1xuICAgICAgICAvLyB0aGVtZSBmaWxlLiBJZiBhIGN1c3RvbSB0aGVtZSBpcyBzZXQgdXAsIHdlIGFyZSBub3QgYWJsZSB0byBzYWZlbHkgcmVwbGFjZSB0aGUgY3VzdG9tXG4gICAgICAgIC8vIHRoZW1lIGJlY2F1c2UgdGhlc2UgZmlsZXMgY2FuIGNvbnRhaW4gY3VzdG9tIHN0eWxlcywgd2hpbGUgcHJlYnVpbHQgdGhlbWVzIGFyZVxuICAgICAgICAvLyBhbHdheXMgcGFja2FnZWQgYW5kIGNvbnNpZGVyZWQgcmVwbGFjZWFibGUuXG4gICAgICAgIGlmIChzdHlsZVBhdGguaW5jbHVkZXMoZGVmYXVsdEN1c3RvbVRoZW1lRmlsZW5hbWUpKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgYENvdWxkIG5vdCBhZGQgdGhlIHNlbGVjdGVkIHRoZW1lIHRvIHRoZSBDTEkgcHJvamVjdCBgICtcbiAgICAgICAgICAgICAgYGNvbmZpZ3VyYXRpb24gYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5IGEgY3VzdG9tIHRoZW1lIGZpbGUgcmVmZXJlbmNlZC5gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFBsZWFzZSBtYW51YWxseSBhZGQgdGhlIGZvbGxvd2luZyBzdHlsZSBmaWxlIHRvIHlvdXIgY29uZmlndXJhdGlvbjpgKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgICAgICR7YXNzZXRQYXRofWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZVBhdGguaW5jbHVkZXMocHJlYnVpbHRUaGVtZVBhdGhTZWdtZW50KSkge1xuICAgICAgICAgIHN0eWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcy51bnNoaWZ0KGFzc2V0UGF0aCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc3BlY2lmaWVkIHByb2plY3QgdGFyZ2V0IGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZGVmYXVsdCBidWlsZGVycyB3aGljaCBhcmVcbiAqIHByb3ZpZGVkIGJ5IHRoZSBBbmd1bGFyIENMSS4gSWYgdGhlIGNvbmZpZ3VyZWQgYnVpbGRlciBkb2VzIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCBidWlsZGVyLFxuICogdGhpcyBmdW5jdGlvbiBjYW4gZWl0aGVyIHRocm93IG9yIGp1c3Qgc2hvdyBhIHdhcm5pbmcuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRGVmYXVsdFRhcmdldEJ1aWxkZXIoXG4gIHByb2plY3Q6IHdvcmtzcGFjZXMuUHJvamVjdERlZmluaXRpb24sXG4gIHRhcmdldE5hbWU6ICdidWlsZCcgfCAndGVzdCcsXG4gIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGksXG4pIHtcbiAgY29uc3QgdGFyZ2V0cyA9XG4gICAgdGFyZ2V0TmFtZSA9PT0gJ3Rlc3QnID8gZ2V0UHJvamVjdFRlc3RUYXJnZXRzKHByb2plY3QpIDogZ2V0UHJvamVjdEJ1aWxkVGFyZ2V0cyhwcm9qZWN0KTtcbiAgY29uc3QgaXNEZWZhdWx0QnVpbGRlciA9IHRhcmdldHMubGVuZ3RoID4gMDtcblxuICAvLyBCZWNhdXNlIHRoZSBidWlsZCBzZXR1cCBmb3IgdGhlIEFuZ3VsYXIgQ0xJIGNhbiBiZSBjdXN0b21pemVkIGJ5IGRldmVsb3BlcnMsIHdlIGNhbid0IGtub3dcbiAgLy8gd2hlcmUgdG8gcHV0IHRoZSB0aGVtZSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBpZiBjdXN0b20gYnVpbGRlcnMgYXJlIGJlaW5nXG4gIC8vIHVzZWQuIEluIGNhc2UgdGhlIGJ1aWxkZXIgaGFzIGJlZW4gY2hhbmdlZCBmb3IgdGhlIFwiYnVpbGRcIiB0YXJnZXQsIHdlIHRocm93IGFuIGVycm9yIGFuZFxuICAvLyBleGl0IGJlY2F1c2Ugc2V0dGluZyB1cCBhIHRoZW1lIGlzIGEgcHJpbWFyeSBnb2FsIG9mIGBuZy1hZGRgLiBPdGhlcndpc2UgaWYganVzdCB0aGUgXCJ0ZXN0XCJcbiAgLy8gYnVpbGRlciBoYXMgYmVlbiBjaGFuZ2VkLCB3ZSB3YXJuIGJlY2F1c2UgYSB0aGVtZSBpcyBub3QgbWFuZGF0b3J5IGZvciBydW5uaW5nIHRlc3RzXG4gIC8vIHdpdGggTWF0ZXJpYWwuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTQxNzZcbiAgaWYgKCFpc0RlZmF1bHRCdWlsZGVyICYmIHRhcmdldE5hbWUgPT09ICdidWlsZCcpIHtcbiAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgIGBZb3VyIHByb2plY3QgaXMgbm90IHVzaW5nIHRoZSBkZWZhdWx0IGJ1aWxkZXJzIGZvciBgICtcbiAgICAgICAgYFwiJHt0YXJnZXROYW1lfVwiLiBUaGUgQW5ndWxhciBNYXRlcmlhbCBzY2hlbWF0aWNzIGNhbm5vdCBhZGQgYSB0aGVtZSB0byB0aGUgd29ya3NwYWNlIGAgK1xuICAgICAgICBgY29uZmlndXJhdGlvbiBpZiB0aGUgYnVpbGRlciBoYXMgYmVlbiBjaGFuZ2VkLmAsXG4gICAgKTtcbiAgfSBlbHNlIGlmICghaXNEZWZhdWx0QnVpbGRlcikge1xuICAgIC8vIGZvciBub24tYnVpbGQgdGFyZ2V0cyB3ZSBncmFjZWZ1bGx5IHJlcG9ydCB0aGUgZXJyb3Igd2l0aG91dCBhY3R1YWxseSBhYm9ydGluZyB0aGVcbiAgICAvLyBzZXR1cCBzY2hlbWF0aWMuIFRoaXMgaXMgYmVjYXVzZSBhIHRoZW1lIGlzIG5vdCBtYW5kYXRvcnkgZm9yIHJ1bm5pbmcgdGVzdHMuXG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICBgWW91ciBwcm9qZWN0IGlzIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBidWlsZGVycyBmb3IgXCIke3RhcmdldE5hbWV9XCIuIFRoaXMgYCArXG4gICAgICAgIGBtZWFucyB0aGF0IHdlIGNhbm5vdCBhZGQgdGhlIGNvbmZpZ3VyZWQgdGhlbWUgdG8gdGhlIFwiJHt0YXJnZXROYW1lfVwiIHRhcmdldC5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gaXNEZWZhdWx0QnVpbGRlcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.addTypographyClass = exports.addThemeToAppStyles = void 0;
|
|
11
|
+
const core_1 = require("@angular-devkit/core");
|
|
12
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
13
|
+
const schematics_2 = require("@angular/cdk/schematics");
|
|
14
|
+
const change_1 = require("@schematics/angular/utility/change");
|
|
15
|
+
const workspace_1 = require("@schematics/angular/utility/workspace");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const create_custom_theme_1 = require("./create-custom-theme");
|
|
18
|
+
/** Path segment that can be found in paths that refer to a prebuilt theme. */
|
|
19
|
+
const prebuiltThemePathSegment = '@angular/material/prebuilt-themes';
|
|
20
|
+
/** Default file name of the custom theme that can be generated. */
|
|
21
|
+
const defaultCustomThemeFilename = 'custom-theme.scss';
|
|
22
|
+
/** Add pre-built styles to the main project style file. */
|
|
23
|
+
function addThemeToAppStyles(options) {
|
|
24
|
+
return (host, context) => {
|
|
25
|
+
const themeName = options.theme || 'indigo-pink';
|
|
26
|
+
return themeName === 'custom'
|
|
27
|
+
? insertCustomTheme(options.project, host, context.logger)
|
|
28
|
+
: insertPrebuiltTheme(options.project, themeName, context.logger);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
exports.addThemeToAppStyles = addThemeToAppStyles;
|
|
32
|
+
/** Adds the global typography class to the body element. */
|
|
33
|
+
function addTypographyClass(options) {
|
|
34
|
+
return async (host) => {
|
|
35
|
+
const workspace = await (0, workspace_1.getWorkspace)(host);
|
|
36
|
+
const project = (0, schematics_2.getProjectFromWorkspace)(workspace, options.project);
|
|
37
|
+
const projectIndexFiles = (0, schematics_2.getProjectIndexFiles)(project);
|
|
38
|
+
if (!projectIndexFiles.length) {
|
|
39
|
+
throw new schematics_1.SchematicsException('No project index HTML file could be found.');
|
|
40
|
+
}
|
|
41
|
+
if (options.typography) {
|
|
42
|
+
projectIndexFiles.forEach(path => (0, schematics_2.addBodyClass)(host, path, 'mat-typography'));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
exports.addTypographyClass = addTypographyClass;
|
|
47
|
+
/**
|
|
48
|
+
* Insert a custom theme to project style file. If no valid style file could be found, a new
|
|
49
|
+
* Scss file for the custom theme will be created.
|
|
50
|
+
*/
|
|
51
|
+
async function insertCustomTheme(projectName, host, logger) {
|
|
52
|
+
const workspace = await (0, workspace_1.getWorkspace)(host);
|
|
53
|
+
const project = (0, schematics_2.getProjectFromWorkspace)(workspace, projectName);
|
|
54
|
+
const stylesPath = (0, schematics_2.getProjectStyleFile)(project, 'scss');
|
|
55
|
+
const themeContent = (0, create_custom_theme_1.createCustomTheme)(projectName);
|
|
56
|
+
if (!stylesPath) {
|
|
57
|
+
if (!project.sourceRoot) {
|
|
58
|
+
throw new schematics_1.SchematicsException(`Could not find source root for project: "${projectName}". ` +
|
|
59
|
+
`Please make sure that the "sourceRoot" property is set in the workspace config.`);
|
|
60
|
+
}
|
|
61
|
+
// Normalize the path through the devkit utilities because we want to avoid having
|
|
62
|
+
// unnecessary path segments and windows backslash delimiters.
|
|
63
|
+
const customThemePath = (0, core_1.normalize)((0, path_1.join)(project.sourceRoot, defaultCustomThemeFilename));
|
|
64
|
+
if (host.exists(customThemePath)) {
|
|
65
|
+
logger.warn(`Cannot create a custom Angular Material theme because
|
|
66
|
+
${customThemePath} already exists. Skipping custom theme generation.`);
|
|
67
|
+
return (0, schematics_1.noop)();
|
|
68
|
+
}
|
|
69
|
+
host.create(customThemePath, themeContent);
|
|
70
|
+
return addThemeStyleToTarget(projectName, 'build', customThemePath, logger);
|
|
71
|
+
}
|
|
72
|
+
const insertion = new change_1.InsertChange(stylesPath, 0, themeContent);
|
|
73
|
+
const recorder = host.beginUpdate(stylesPath);
|
|
74
|
+
recorder.insertLeft(insertion.pos, insertion.toAdd);
|
|
75
|
+
host.commitUpdate(recorder);
|
|
76
|
+
return (0, schematics_1.noop)();
|
|
77
|
+
}
|
|
78
|
+
/** Insert a pre-built theme into the angular.json file. */
|
|
79
|
+
function insertPrebuiltTheme(project, theme, logger) {
|
|
80
|
+
const themePath = `@angular/material/prebuilt-themes/${theme}.css`;
|
|
81
|
+
return (0, schematics_1.chain)([
|
|
82
|
+
addThemeStyleToTarget(project, 'build', themePath, logger),
|
|
83
|
+
addThemeStyleToTarget(project, 'test', themePath, logger),
|
|
84
|
+
]);
|
|
85
|
+
}
|
|
86
|
+
/** Adds a theming style entry to the given project target options. */
|
|
87
|
+
function addThemeStyleToTarget(projectName, targetName, assetPath, logger) {
|
|
88
|
+
return (0, workspace_1.updateWorkspace)(workspace => {
|
|
89
|
+
const project = (0, schematics_2.getProjectFromWorkspace)(workspace, projectName);
|
|
90
|
+
// Do not update the builder options in case the target does not use the default CLI builder.
|
|
91
|
+
if (!validateDefaultTargetBuilder(project, targetName, logger)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const targetOptions = (0, schematics_2.getProjectTargetOptions)(project, targetName);
|
|
95
|
+
const styles = targetOptions['styles'];
|
|
96
|
+
if (!styles) {
|
|
97
|
+
targetOptions['styles'] = [assetPath];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const existingStyles = styles.map(s => (typeof s === 'string' ? s : s.input));
|
|
101
|
+
for (let [index, stylePath] of existingStyles.entries()) {
|
|
102
|
+
// If the given asset is already specified in the styles, we don't need to do anything.
|
|
103
|
+
if (stylePath === assetPath) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// In case a prebuilt theme is already set up, we can safely replace the theme with the new
|
|
107
|
+
// theme file. If a custom theme is set up, we are not able to safely replace the custom
|
|
108
|
+
// theme because these files can contain custom styles, while prebuilt themes are
|
|
109
|
+
// always packaged and considered replaceable.
|
|
110
|
+
if (stylePath.includes(defaultCustomThemeFilename)) {
|
|
111
|
+
logger.error(`Could not add the selected theme to the CLI project ` +
|
|
112
|
+
`configuration because there is already a custom theme file referenced.`);
|
|
113
|
+
logger.info(`Please manually add the following style file to your configuration:`);
|
|
114
|
+
logger.info(` ${assetPath}`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
else if (stylePath.includes(prebuiltThemePathSegment)) {
|
|
118
|
+
styles.splice(index, 1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
styles.unshift(assetPath);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Validates that the specified project target is configured with the default builders which are
|
|
127
|
+
* provided by the Angular CLI. If the configured builder does not match the default builder,
|
|
128
|
+
* this function can either throw or just show a warning.
|
|
129
|
+
*/
|
|
130
|
+
function validateDefaultTargetBuilder(project, targetName, logger) {
|
|
131
|
+
const targets = targetName === 'test' ? (0, schematics_2.getProjectTestTargets)(project) : (0, schematics_2.getProjectBuildTargets)(project);
|
|
132
|
+
const isDefaultBuilder = targets.length > 0;
|
|
133
|
+
// Because the build setup for the Angular CLI can be customized by developers, we can't know
|
|
134
|
+
// where to put the theme file in the workspace configuration if custom builders are being
|
|
135
|
+
// used. In case the builder has been changed for the "build" target, we throw an error and
|
|
136
|
+
// exit because setting up a theme is a primary goal of `ng-add`. Otherwise if just the "test"
|
|
137
|
+
// builder has been changed, we warn because a theme is not mandatory for running tests
|
|
138
|
+
// with Material. See: https://github.com/angular/components/issues/14176
|
|
139
|
+
if (!isDefaultBuilder && targetName === 'build') {
|
|
140
|
+
throw new schematics_1.SchematicsException(`Your project is not using the default builders for ` +
|
|
141
|
+
`"${targetName}". The Angular Material schematics cannot add a theme to the workspace ` +
|
|
142
|
+
`configuration if the builder has been changed.`);
|
|
143
|
+
}
|
|
144
|
+
else if (!isDefaultBuilder) {
|
|
145
|
+
// for non-build targets we gracefully report the error without actually aborting the
|
|
146
|
+
// setup schematic. This is because a theme is not mandatory for running tests.
|
|
147
|
+
logger.warn(`Your project is not using the default builders for "${targetName}". This ` +
|
|
148
|
+
`means that we cannot add the configured theme to the "${targetName}" target.`);
|
|
149
|
+
}
|
|
150
|
+
return isDefaultBuilder;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9zY2hlbWF0aWNzL25nLWFkZC90aGVtaW5nL3RoZW1pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgsK0NBQW9FO0FBQ3BFLDJEQU9vQztBQUNwQyx3REFRaUM7QUFDakMsK0RBQWdFO0FBQ2hFLHFFQUFvRjtBQUNwRiwrQkFBMEI7QUFFMUIsK0RBQXdEO0FBRXhELDhFQUE4RTtBQUM5RSxNQUFNLHdCQUF3QixHQUFHLG1DQUFtQyxDQUFDO0FBRXJFLG1FQUFtRTtBQUNuRSxNQUFNLDBCQUEwQixHQUFHLG1CQUFtQixDQUFDO0FBRXZELDJEQUEyRDtBQUMzRCxTQUFnQixtQkFBbUIsQ0FBQyxPQUFlO0lBQ2pELE9BQU8sQ0FBQyxJQUFVLEVBQUUsT0FBeUIsRUFBRSxFQUFFO1FBQy9DLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO1FBQ2pELE9BQU8sU0FBUyxLQUFLLFFBQVE7WUFDM0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDMUQsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBUEQsa0RBT0M7QUFFRCw0REFBNEQ7QUFDNUQsU0FBZ0Isa0JBQWtCLENBQUMsT0FBZTtJQUNoRCxPQUFPLEtBQUssRUFBRSxJQUFVLEVBQUUsRUFBRTtRQUMxQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFBLG9DQUF1QixFQUFDLFNBQVMs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QGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZSwgbG9nZ2luZywgd29ya3NwYWNlc30gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHtcbiAgY2hhaW4sXG4gIG5vb3AsXG4gIFJ1bGUsXG4gIFNjaGVtYXRpY0NvbnRleHQsXG4gIFNjaGVtYXRpY3NFeGNlcHRpb24sXG4gIFRyZWUsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7XG4gIGFkZEJvZHlDbGFzcyxcbiAgZ2V0UHJvamVjdEZyb21Xb3Jrc3BhY2UsXG4gIGdldFByb2plY3RTdHlsZUZpbGUsXG4gIGdldFByb2plY3RUYXJnZXRPcHRpb25zLFxuICBnZXRQcm9qZWN0SW5kZXhGaWxlcyxcbiAgZ2V0UHJvamVjdFRlc3RUYXJnZXRzLFxuICBnZXRQcm9qZWN0QnVpbGRUYXJnZXRzLFxufSBmcm9tICdAYW5ndWxhci9jZGsvc2NoZW1hdGljcyc7XG5pbXBvcnQge0luc2VydENoYW5nZX0gZnJvbSAnQHNjaGVtYXRpY3MvYW5ndWxhci91dGlsaXR5L2NoYW5nZSc7XG5pbXBvcnQge2dldFdvcmtzcGFjZSwgdXBkYXRlV29ya3NwYWNlfSBmcm9tICdAc2NoZW1hdGljcy9hbmd1bGFyL3V0aWxpdHkvd29ya3NwYWNlJztcbmltcG9ydCB7am9pbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1NjaGVtYX0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7Y3JlYXRlQ3VzdG9tVGhlbWV9IGZyb20gJy4vY3JlYXRlLWN1c3RvbS10aGVtZSc7XG5cbi8qKiBQYXRoIHNlZ21lbnQgdGhhdCBjYW4gYmUgZm91bmQgaW4gcGF0aHMgdGhhdCByZWZlciB0byBhIHByZWJ1aWx0IHRoZW1lLiAqL1xuY29uc3QgcHJlYnVpbHRUaGVtZVBhdGhTZWdtZW50ID0gJ0Bhbmd1bGFyL21hdGVyaWFsL3ByZWJ1aWx0LXRoZW1lcyc7XG5cbi8qKiBEZWZhdWx0IGZpbGUgbmFtZSBvZiB0aGUgY3VzdG9tIHRoZW1lIHRoYXQgY2FuIGJlIGdlbmVyYXRlZC4gKi9cbmNvbnN0IGRlZmF1bHRDdXN0b21UaGVtZUZpbGVuYW1lID0gJ2N1c3RvbS10aGVtZS5zY3NzJztcblxuLyoqIEFkZCBwcmUtYnVpbHQgc3R5bGVzIHRvIHRoZSBtYWluIHByb2plY3Qgc3R5bGUgZmlsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUaGVtZVRvQXBwU3R5bGVzKG9wdGlvbnM6IFNjaGVtYSk6IFJ1bGUge1xuICByZXR1cm4gKGhvc3Q6IFRyZWUsIGNvbnRleHQ6IFNjaGVtYXRpY0NvbnRleHQpID0+IHtcbiAgICBjb25zdCB0aGVtZU5hbWUgPSBvcHRpb25zLnRoZW1lIHx8ICdpbmRpZ28tcGluayc7XG4gICAgcmV0dXJuIHRoZW1lTmFtZSA9PT0gJ2N1c3RvbSdcbiAgICAgID8gaW5zZXJ0Q3VzdG9tVGhlbWUob3B0aW9ucy5wcm9qZWN0LCBob3N0LCBjb250ZXh0LmxvZ2dlcilcbiAgICAgIDogaW5zZXJ0UHJlYnVpbHRUaGVtZShvcHRpb25zLnByb2plY3QsIHRoZW1lTmFtZSwgY29udGV4dC5sb2dnZXIpO1xuICB9O1xufVxuXG4vKiogQWRkcyB0aGUgZ2xvYmFsIHR5cG9ncmFwaHkgY2xhc3MgdG8gdGhlIGJvZHkgZWxlbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBvZ3JhcGh5Q2xhc3Mob3B0aW9uczogU2NoZW1hKTogUnVsZSB7XG4gIHJldHVybiBhc3luYyAoaG9zdDogVHJlZSkgPT4ge1xuICAgIGNvbnN0IHdvcmtzcGFjZSA9IGF3YWl0IGdldFdvcmtzcGFjZShob3N0KTtcbiAgICBjb25zdCBwcm9qZWN0ID0gZ2V0UHJvamVjdEZyb21Xb3Jrc3BhY2Uod29ya3NwYWNlLCBvcHRpb25zLnByb2plY3QpO1xuICAgIGNvbnN0IHByb2plY3RJbmRleEZpbGVzID0gZ2V0UHJvamVjdEluZGV4RmlsZXMocHJvamVjdCk7XG5cbiAgICBpZiAoIXByb2plY3RJbmRleEZpbGVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oJ05vIHByb2plY3QgaW5kZXggSFRNTCBmaWxlIGNvdWxkIGJlIGZvdW5kLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnR5cG9ncmFwaHkpIHtcbiAgICAgIHByb2plY3RJbmRleEZpbGVzLmZvckVhY2gocGF0aCA9PiBhZGRCb2R5Q2xhc3MoaG9zdCwgcGF0aCwgJ21hdC10eXBvZ3JhcGh5JykpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgYSBjdXN0b20gdGhlbWUgdG8gcHJvamVjdCBzdHlsZSBmaWxlLiBJZiBubyB2YWxpZCBzdHlsZSBmaWxlIGNvdWxkIGJlIGZvdW5kLCBhIG5ld1xuICogU2NzcyBmaWxlIGZvciB0aGUgY3VzdG9tIHRoZW1lIHdpbGwgYmUgY3JlYXRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q3VzdG9tVGhlbWUoXG4gIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gIGhvc3Q6IFRyZWUsXG4gIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGksXG4pOiBQcm9taXNlPFJ1bGU+IHtcbiAgY29uc3Qgd29ya3NwYWNlID0gYXdhaXQgZ2V0V29ya3NwYWNlKGhvc3QpO1xuICBjb25zdCBwcm9qZWN0ID0gZ2V0UHJvamVjdEZyb21Xb3Jrc3BhY2Uod29ya3NwYWNlLCBwcm9qZWN0TmFtZSk7XG4gIGNvbnN0IHN0eWxlc1BhdGggPSBnZXRQcm9qZWN0U3R5bGVGaWxlKHByb2plY3QsICdzY3NzJyk7XG4gIGNvbnN0IHRoZW1lQ29udGVudCA9IGNyZWF0ZUN1c3RvbVRoZW1lKHByb2plY3ROYW1lKTtcblxuICBpZiAoIXN0eWxlc1BhdGgpIHtcbiAgICBpZiAoIXByb2plY3Quc291cmNlUm9vdCkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBzb3VyY2Ugcm9vdCBmb3IgcHJvamVjdDogXCIke3Byb2plY3ROYW1lfVwiLiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBcInNvdXJjZVJvb3RcIiBwcm9wZXJ0eSBpcyBzZXQgaW4gdGhlIHdvcmtzcGFjZSBjb25maWcuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoIHRocm91Z2ggdGhlIGRldmtpdCB1dGlsaXRpZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZ1xuICAgIC8vIHVubmVjZXNzYXJ5IHBhdGggc2VnbWVudHMgYW5kIHdpbmRvd3MgYmFja3NsYXNoIGRlbGltaXRlcnMuXG4gICAgY29uc3QgY3VzdG9tVGhlbWVQYXRoID0gbm9ybWFsaXplKGpvaW4ocHJvamVjdC5zb3VyY2VSb290LCBkZWZhdWx0Q3VzdG9tVGhlbWVGaWxlbmFtZSkpO1xuXG4gICAgaWYgKGhvc3QuZXhpc3RzKGN1c3RvbVRoZW1lUGF0aCkpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDYW5ub3QgY3JlYXRlIGEgY3VzdG9tIEFuZ3VsYXIgTWF0ZXJpYWwgdGhlbWUgYmVjYXVzZVxuICAgICAgICAgICR7Y3VzdG9tVGhlbWVQYXRofSBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcgY3VzdG9tIHRoZW1lIGdlbmVyYXRpb24uYCk7XG4gICAgICByZXR1cm4gbm9vcCgpO1xuICAgIH1cblxuICAgIGhvc3QuY3JlYXRlKGN1c3RvbVRoZW1lUGF0aCwgdGhlbWVDb250ZW50KTtcbiAgICByZXR1cm4gYWRkVGhlbWVTdHlsZVRvVGFyZ2V0KHByb2plY3ROYW1lLCAnYnVpbGQnLCBjdXN0b21UaGVtZVBhdGgsIGxvZ2dlcik7XG4gIH1cblxuICBjb25zdCBpbnNlcnRpb24gPSBuZXcgSW5zZXJ0Q2hhbmdlKHN0eWxlc1BhdGgsIDAsIHRoZW1lQ29udGVudCk7XG4gIGNvbnN0IHJlY29yZGVyID0gaG9zdC5iZWdpblVwZGF0ZShzdHlsZXNQYXRoKTtcblxuICByZWNvcmRlci5pbnNlcnRMZWZ0KGluc2VydGlvbi5wb3MsIGluc2VydGlvbi50b0FkZCk7XG4gIGhvc3QuY29tbWl0VXBkYXRlKHJlY29yZGVyKTtcbiAgcmV0dXJuIG5vb3AoKTtcbn1cblxuLyoqIEluc2VydCBhIHByZS1idWlsdCB0aGVtZSBpbnRvIHRoZSBhbmd1bGFyLmpzb24gZmlsZS4gKi9cbmZ1bmN0aW9uIGluc2VydFByZWJ1aWx0VGhlbWUocHJvamVjdDogc3RyaW5nLCB0aGVtZTogc3RyaW5nLCBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpKTogUnVsZSB7XG4gIGNvbnN0IHRoZW1lUGF0aCA9IGBAYW5ndWxhci9tYXRlcmlhbC9wcmVidWlsdC10aGVtZXMvJHt0aGVtZX0uY3NzYDtcblxuICByZXR1cm4gY2hhaW4oW1xuICAgIGFkZFRoZW1lU3R5bGVUb1RhcmdldChwcm9qZWN0LCAnYnVpbGQnLCB0aGVtZVBhdGgsIGxvZ2dlciksXG4gICAgYWRkVGhlbWVTdHlsZVRvVGFyZ2V0KHByb2plY3QsICd0ZXN0JywgdGhlbWVQYXRoLCBsb2dnZXIpLFxuICBdKTtcbn1cblxuLyoqIEFkZHMgYSB0aGVtaW5nIHN0eWxlIGVudHJ5IHRvIHRoZSBnaXZlbiBwcm9qZWN0IHRhcmdldCBvcHRpb25zLiAqL1xuZnVuY3Rpb24gYWRkVGhlbWVTdHlsZVRvVGFyZ2V0KFxuICBwcm9qZWN0TmFtZTogc3RyaW5nLFxuICB0YXJnZXROYW1lOiAndGVzdCcgfCAnYnVpbGQnLFxuICBhc3NldFBhdGg6IHN0cmluZyxcbiAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSxcbik6IFJ1bGUge1xuICByZXR1cm4gdXBkYXRlV29ya3NwYWNlKHdvcmtzcGFjZSA9PiB7XG4gICAgY29uc3QgcHJvamVjdCA9IGdldFByb2plY3RGcm9tV29ya3NwYWNlKHdvcmtzcGFjZSwgcHJvamVjdE5hbWUpO1xuXG4gICAgLy8gRG8gbm90IHVwZGF0ZSB0aGUgYnVpbGRlciBvcHRpb25zIGluIGNhc2UgdGhlIHRhcmdldCBkb2VzIG5vdCB1c2UgdGhlIGRlZmF1bHQgQ0xJIGJ1aWxkZXIuXG4gICAgaWYgKCF2YWxpZGF0ZURlZmF1bHRUYXJnZXRCdWlsZGVyKHByb2plY3QsIHRhcmdldE5hbWUsIGxvZ2dlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRPcHRpb25zID0gZ2V0UHJvamVjdFRhcmdldE9wdGlvbnMocHJvamVjdCwgdGFyZ2V0TmFtZSk7XG4gICAgY29uc3Qgc3R5bGVzID0gdGFyZ2V0T3B0aW9uc1snc3R5bGVzJ10gYXMgKHN0cmluZyB8IHtpbnB1dDogc3RyaW5nfSlbXTtcblxuICAgIGlmICghc3R5bGVzKSB7XG4gICAgICB0YXJnZXRPcHRpb25zWydzdHlsZXMnXSA9IFthc3NldFBhdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N0eWxlcyA9IHN0eWxlcy5tYXAocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMuaW5wdXQpKTtcblxuICAgICAgZm9yIChsZXQgW2luZGV4LCBzdHlsZVBhdGhdIG9mIGV4aXN0aW5nU3R5bGVzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4gYXNzZXQgaXMgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlcywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy5cbiAgICAgICAgaWYgKHN0eWxlUGF0aCA9PT0gYXNzZXRQYXRoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gY2FzZSBhIHByZWJ1aWx0IHRoZW1lIGlzIGFscmVhZHkgc2V0IHVwLCB3ZSBjYW4gc2FmZWx5IHJlcGxhY2UgdGhlIHRoZW1lIHdpdGggdGhlIG5ld1xuICAgICAgICAvLyB0aGVtZSBmaWxlLiBJZiBhIGN1c3RvbSB0aGVtZSBpcyBzZXQgdXAsIHdlIGFyZSBub3QgYWJsZSB0byBzYWZlbHkgcmVwbGFjZSB0aGUgY3VzdG9tXG4gICAgICAgIC8vIHRoZW1lIGJlY2F1c2UgdGhlc2UgZmlsZXMgY2FuIGNvbnRhaW4gY3VzdG9tIHN0eWxlcywgd2hpbGUgcHJlYnVpbHQgdGhlbWVzIGFyZVxuICAgICAgICAvLyBhbHdheXMgcGFja2FnZWQgYW5kIGNvbnNpZGVyZWQgcmVwbGFjZWFibGUuXG4gICAgICAgIGlmIChzdHlsZVBhdGguaW5jbHVkZXMoZGVmYXVsdEN1c3RvbVRoZW1lRmlsZW5hbWUpKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgYENvdWxkIG5vdCBhZGQgdGhlIHNlbGVjdGVkIHRoZW1lIHRvIHRoZSBDTEkgcHJvamVjdCBgICtcbiAgICAgICAgICAgICAgYGNvbmZpZ3VyYXRpb24gYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5IGEgY3VzdG9tIHRoZW1lIGZpbGUgcmVmZXJlbmNlZC5gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFBsZWFzZSBtYW51YWxseSBhZGQgdGhlIGZvbGxvd2luZyBzdHlsZSBmaWxlIHRvIHlvdXIgY29uZmlndXJhdGlvbjpgKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgICAgICR7YXNzZXRQYXRofWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZVBhdGguaW5jbHVkZXMocHJlYnVpbHRUaGVtZVBhdGhTZWdtZW50KSkge1xuICAgICAgICAgIHN0eWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcy51bnNoaWZ0KGFzc2V0UGF0aCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc3BlY2lmaWVkIHByb2plY3QgdGFyZ2V0IGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZGVmYXVsdCBidWlsZGVycyB3aGljaCBhcmVcbiAqIHByb3ZpZGVkIGJ5IHRoZSBBbmd1bGFyIENMSS4gSWYgdGhlIGNvbmZpZ3VyZWQgYnVpbGRlciBkb2VzIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCBidWlsZGVyLFxuICogdGhpcyBmdW5jdGlvbiBjYW4gZWl0aGVyIHRocm93IG9yIGp1c3Qgc2hvdyBhIHdhcm5pbmcuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRGVmYXVsdFRhcmdldEJ1aWxkZXIoXG4gIHByb2plY3Q6IHdvcmtzcGFjZXMuUHJvamVjdERlZmluaXRpb24sXG4gIHRhcmdldE5hbWU6ICdidWlsZCcgfCAndGVzdCcsXG4gIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGksXG4pIHtcbiAgY29uc3QgdGFyZ2V0cyA9XG4gICAgdGFyZ2V0TmFtZSA9PT0gJ3Rlc3QnID8gZ2V0UHJvamVjdFRlc3RUYXJnZXRzKHByb2plY3QpIDogZ2V0UHJvamVjdEJ1aWxkVGFyZ2V0cyhwcm9qZWN0KTtcbiAgY29uc3QgaXNEZWZhdWx0QnVpbGRlciA9IHRhcmdldHMubGVuZ3RoID4gMDtcblxuICAvLyBCZWNhdXNlIHRoZSBidWlsZCBzZXR1cCBmb3IgdGhlIEFuZ3VsYXIgQ0xJIGNhbiBiZSBjdXN0b21pemVkIGJ5IGRldmVsb3BlcnMsIHdlIGNhbid0IGtub3dcbiAgLy8gd2hlcmUgdG8gcHV0IHRoZSB0aGVtZSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBpZiBjdXN0b20gYnVpbGRlcnMgYXJlIGJlaW5nXG4gIC8vIHVzZWQuIEluIGNhc2UgdGhlIGJ1aWxkZXIgaGFzIGJlZW4gY2hhbmdlZCBmb3IgdGhlIFwiYnVpbGRcIiB0YXJnZXQsIHdlIHRocm93IGFuIGVycm9yIGFuZFxuICAvLyBleGl0IGJlY2F1c2Ugc2V0dGluZyB1cCBhIHRoZW1lIGlzIGEgcHJpbWFyeSBnb2FsIG9mIGBuZy1hZGRgLiBPdGhlcndpc2UgaWYganVzdCB0aGUgXCJ0ZXN0XCJcbiAgLy8gYnVpbGRlciBoYXMgYmVlbiBjaGFuZ2VkLCB3ZSB3YXJuIGJlY2F1c2UgYSB0aGVtZSBpcyBub3QgbWFuZGF0b3J5IGZvciBydW5uaW5nIHRlc3RzXG4gIC8vIHdpdGggTWF0ZXJpYWwuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTQxNzZcbiAgaWYgKCFpc0RlZmF1bHRCdWlsZGVyICYmIHRhcmdldE5hbWUgPT09ICdidWlsZCcpIHtcbiAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgIGBZb3VyIHByb2plY3QgaXMgbm90IHVzaW5nIHRoZSBkZWZhdWx0IGJ1aWxkZXJzIGZvciBgICtcbiAgICAgICAgYFwiJHt0YXJnZXROYW1lfVwiLiBUaGUgQW5ndWxhciBNYXRlcmlhbCBzY2hlbWF0aWNzIGNhbm5vdCBhZGQgYSB0aGVtZSB0byB0aGUgd29ya3NwYWNlIGAgK1xuICAgICAgICBgY29uZmlndXJhdGlvbiBpZiB0aGUgYnVpbGRlciBoYXMgYmVlbiBjaGFuZ2VkLmAsXG4gICAgKTtcbiAgfSBlbHNlIGlmICghaXNEZWZhdWx0QnVpbGRlcikge1xuICAgIC8vIGZvciBub24tYnVpbGQgdGFyZ2V0cyB3ZSBncmFjZWZ1bGx5IHJlcG9ydCB0aGUgZXJyb3Igd2l0aG91dCBhY3R1YWxseSBhYm9ydGluZyB0aGVcbiAgICAvLyBzZXR1cCBzY2hlbWF0aWMuIFRoaXMgaXMgYmVjYXVzZSBhIHRoZW1lIGlzIG5vdCBtYW5kYXRvcnkgZm9yIHJ1bm5pbmcgdGVzdHMuXG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICBgWW91ciBwcm9qZWN0IGlzIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBidWlsZGVycyBmb3IgXCIke3RhcmdldE5hbWV9XCIuIFRoaXMgYCArXG4gICAgICAgIGBtZWFucyB0aGF0IHdlIGNhbm5vdCBhZGQgdGhlIGNvbmZpZ3VyZWQgdGhlbWUgdG8gdGhlIFwiJHt0YXJnZXROYW1lfVwiIHRhcmdldC5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gaXNEZWZhdWx0QnVpbGRlcjtcbn1cbiJdfQ==
|