diff --git a/CONTRIBUTOR.md b/CONTRIBUTOR.md new file mode 100644 index 0000000..ce43875 --- /dev/null +++ b/CONTRIBUTOR.md @@ -0,0 +1,19 @@ +# Contributor Instructions + +## Sign the CLA + +Before any contributions can be done, we need you to [sign the Sencha CLA](https://goo.gl/forms/XGj5PlhNUc9suiQE3). If you have already signed it for another Sencha open source repository, you're good to go. + +## Patches & Enhancements +Have you found something that you would like to fix. + +1. Fork the repo +2. Make your modification +3. Submit your patch by pulling against the master. +4. Wait for a repo admin to review. +5. Possibly make modifications +6. Repeat #4 after modifications +7. Repo admin may merge your request. + +## Communication +Please ask us questions, we want to help. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..75e1bef --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,13 @@ +Copyright (c) 2011-2019 Sencha, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/lerna.json b/lerna.json index c40c350..41ef5f6 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": [ "packages/*" ], - "version": "3.10.7" + "version": "3.13.1" } diff --git a/misc b/misc index 033c3b2..2ff049f 100644 --- a/misc +++ b/misc @@ -10,6 +10,8 @@ npm --registry https://npm.sencha.com/ whoami https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally +ps -ej | grep sencha.jar +sudo kill -9 22952 git remote add upstream https://github.com/sencha/ext-react.git git remote -v @@ -29,6 +31,7 @@ git checkout v6.6.0 git fetch upstream git merge upstream/master git merge upstream/ext-gen-6.7.x +git merge upstream/ext-gen-7.0.x /usr/local/lib/node_modules/node/lib/node_modules/@sencha/ext-gen diff --git a/other/u/upgrade.js b/other/u/upgrade.js index 8694aed..cf6ed87 100644 --- a/other/u/upgrade.js +++ b/other/u/upgrade.js @@ -249,7 +249,7 @@ class Upgrade { handleWorkspaceJsonUpgrade() { var workspaceJsonObject = this.getJson('workspace.json') workspaceJsonObject.frameworks.ext.path = 'node_modules/@sencha/ext' - //workspaceJsonObject.frameworks.ext.version = '6.7.0.0' //needs to be looked up + //workspaceJsonObject.frameworks.ext.version = '7.0.0.0' //needs to be looked up //workspaceJsonObject.packages.dir.push("node_modules/@sencha") diff --git a/package.json b/package.json index 2cc05c8..5ba01ed 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,26 @@ { - "private": true, + "name": "ext-gen", + "version": "7.0.0", + "description": "ext-gen root", + "main": "index.js", "scripts": { - "postinstall": "lerna bootstrap", - "increment": "lerna publish --skip-git --skip-npm --force-publish", - "clean": "lerna clean", - "install:clean": "npm cache clear --force && lerna clean && npm install" + "postinstall": "npx lerna bootstrap --loglevel warn", + "increment": "npx lerna publish --skip-git --skip-npm --force-publish", + "clean": "npx lerna clean", + "install:clean": "npm cache clear --force && npx lerna clean && npm install" }, + "keywords": [ + "Ext", + "JS", + "Sencha" + ], + "author": "Sencha, Inc.", + "license": "MIT", "devDependencies": { - "lerna": "3.10.7" + "lerna": "^3.13.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sencha/ext-allshared" } } diff --git a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/home/HomeView.scss.tpl.default b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/home/HomeView.scss.tpl.default index f80cfbb..c54a243 100644 --- a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/home/HomeView.scss.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/home/HomeView.scss.tpl.default @@ -1,7 +1,7 @@ // sass for {appName}.view.home.HomeView .homeview { color: $color; - background-color: $base-light-color; + background-color: white; padding: 15px; border: 1px solid lightgray; box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.4); diff --git a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/main/detail/DetailView.scss.tpl.default b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/main/detail/DetailView.scss.tpl.default index 1700ae7..a8e9618 100644 --- a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/main/detail/DetailView.scss.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/app/desktop/src/view/main/detail/DetailView.scss.tpl.default @@ -1,6 +1,6 @@ .detailview { color: $color; - background-color: $base-light-color; + background-color: white; padding: 15px; box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.4); } \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/index.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/index.js.tpl.default new file mode 100644 index 0000000..c352a83 --- /dev/null +++ b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/index.js.tpl.default @@ -0,0 +1 @@ +//this file exists so the webpack build process will succeed \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/workspace.json.tpl.default b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/workspace.json.tpl.default index 3246e3c..e0f5b0a 100644 --- a/packages/ext-build-generate-app/ext-templates/application/classicdesktop/workspace.json.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/classicdesktop/workspace.json.tpl.default @@ -7,7 +7,7 @@ "dir": "$\u007Bworkspace.dir}/build" }, "packages": { - "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux", + "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux,$\u007Bworkspace.dir}/node_modules/@sencha/ext-font-ios", "extract": "$\u007Bworkspace.dir}/packages/remote" } -} +} \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/index.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/index.js.tpl.default new file mode 100644 index 0000000..c352a83 --- /dev/null +++ b/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/index.js.tpl.default @@ -0,0 +1 @@ +//this file exists so the webpack build process will succeed \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/workspace.json.tpl.default b/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/workspace.json.tpl.default index e9d798a..e0f5b0a 100644 --- a/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/workspace.json.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/classicdesktoplogin/workspace.json.tpl.default @@ -7,7 +7,7 @@ "dir": "$\u007Bworkspace.dir}/build" }, "packages": { - "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux", + "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux,$\u007Bworkspace.dir}/node_modules/@sencha/ext-font-ios", "extract": "$\u007Bworkspace.dir}/packages/remote" } } \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/main/header/HeaderView.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/main/header/HeaderView.js.tpl.default index 6b7718c..f9bcc5f 100644 --- a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/main/header/HeaderView.js.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/main/header/HeaderView.js.tpl.default @@ -1,20 +1,21 @@ Ext.define('{appName}.view.main.header.HeaderView', { - extend: 'Ext.Toolbar', - xtype: 'headerview', - cls: 'headerview', - items: [ - { - xtype: 'container', - cls: 'headerviewtext', - bind: { html: '\u007Bheading}' } - }, - '->', - { - xtype: 'button', - ui: 'headerbutton', - reference: 'detailtoggle', - handler: 'onHeaderViewDetailToggle', - iconCls: 'x-fa fa-arrow-left' - } - ] + extend: 'Ext.Toolbar', + xtype: 'headerview', + cls: 'headerview', + viewModel: {}, + items: [ + { + xtype: 'container', + cls: 'headerviewtext', + bind: { html: '\u007Bheading}' } + }, + '->', + { + xtype: 'button', + ui: 'headerbutton', + reference: 'detailtoggle', + handler: 'onHeaderViewDetailToggle', + iconCls: 'x-fa fa-arrow-left' + } + ] }); diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/personnel/PersonnelViewController.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/personnel/PersonnelViewController.js.tpl.default index 5da05af..6def3d5 100644 --- a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/personnel/PersonnelViewController.js.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/app/desktop/src/view/personnel/PersonnelViewController.js.tpl.default @@ -1,14 +1,23 @@ Ext.define('{appName}.view.personnel.PersonnelViewController', { - extend: 'Ext.app.ViewController', - alias: 'controller.personnelviewcontroller', + extend: 'Ext.app.ViewController', + alias: 'controller.personnelviewcontroller', onItemSelected: function (sender, record) { - Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this); + var users = [ + { firstName: "John", lastName: "Doe", age: 28, gender: "male" }, + { firstName: "Jane", lastName: "Doe", age: 5, gender: "female" }, + { firstName: "Jim", lastName: "Carrey", age: 54, gender: "male" }, + { firstName: "Kate", lastName: "Winslet", age: 40, gender: "female" } + ]; + var user = Ext._.find(users, { lastName: "Doe", gender: "male" }); + + Ext.Msg.confirm('Confirm', 'Are you sure? ' + user.age + ' years old', 'onConfirm', this); +// Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this); }, - onConfirm: function (choice) { - if (choice === 'yes') { - // - } - } + onConfirm: function (choice) { + if (choice === 'yes') { + // + } + } }); diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/index.js b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/index.js deleted file mode 100644 index a500dfc..0000000 --- a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/index.js +++ /dev/null @@ -1 +0,0 @@ -//placeholder for webpack build \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/index.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/index.js.tpl.default new file mode 100644 index 0000000..647e475 --- /dev/null +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/index.js.tpl.default @@ -0,0 +1,4 @@ +//this file exists so the webpack build process will succeed + Ext.onReady(function() { + Ext._ = require('lodash'); + }); \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/workspace.json.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/workspace.json.tpl.default index e9d798a..e0f5b0a 100644 --- a/packages/ext-build-generate-app/ext-templates/application/moderndesktop/workspace.json.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktop/workspace.json.tpl.default @@ -7,7 +7,7 @@ "dir": "$\u007Bworkspace.dir}/build" }, "packages": { - "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux", + "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux,$\u007Bworkspace.dir}/node_modules/@sencha/ext-font-ios", "extract": "$\u007Bworkspace.dir}/packages/remote" } } \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/app/desktop/src/view/main/MainView.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/app/desktop/src/view/main/MainView.js.tpl.default index f7bae0d..94149f3 100644 --- a/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/app/desktop/src/view/main/MainView.js.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/app/desktop/src/view/main/MainView.js.tpl.default @@ -8,7 +8,7 @@ Ext.define('{appName}.view.main.MainView', { items: [ { xtype: 'component', - html: 'Quick Start Tutorial Here

' + html: 'Quick Start Tutorial Here

' }, { xtype: 'displayfield', diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/index.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/index.js.tpl.default new file mode 100644 index 0000000..c352a83 --- /dev/null +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/index.js.tpl.default @@ -0,0 +1 @@ +//this file exists so the webpack build process will succeed \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/workspace.json.tpl.default b/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/workspace.json.tpl.default index e9d798a..e0f5b0a 100644 --- a/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/workspace.json.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/moderndesktopminimal/workspace.json.tpl.default @@ -7,7 +7,7 @@ "dir": "$\u007Bworkspace.dir}/build" }, "packages": { - "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux", + "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux,$\u007Bworkspace.dir}/node_modules/@sencha/ext-font-ios", "extract": "$\u007Bworkspace.dir}/packages/remote" } } \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/index.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/index.js.tpl.default new file mode 100644 index 0000000..c352a83 --- /dev/null +++ b/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/index.js.tpl.default @@ -0,0 +1 @@ +//this file exists so the webpack build process will succeed \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/workspace.json.tpl.default b/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/workspace.json.tpl.default index e9d798a..e0f5b0a 100644 --- a/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/workspace.json.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/universalclassicmodern/workspace.json.tpl.default @@ -7,7 +7,7 @@ "dir": "$\u007Bworkspace.dir}/build" }, "packages": { - "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux", + "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux,$\u007Bworkspace.dir}/node_modules/@sencha/ext-font-ios", "extract": "$\u007Bworkspace.dir}/packages/remote" } } \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/universalmodern/app/desktop/src/view/main/header/HeaderView.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/universalmodern/app/desktop/src/view/main/header/HeaderView.js.tpl.default index 6b7718c..bc24825 100644 --- a/packages/ext-build-generate-app/ext-templates/application/universalmodern/app/desktop/src/view/main/header/HeaderView.js.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/universalmodern/app/desktop/src/view/main/header/HeaderView.js.tpl.default @@ -1,20 +1,21 @@ Ext.define('{appName}.view.main.header.HeaderView', { - extend: 'Ext.Toolbar', - xtype: 'headerview', - cls: 'headerview', - items: [ - { - xtype: 'container', - cls: 'headerviewtext', - bind: { html: '\u007Bheading}' } - }, - '->', - { - xtype: 'button', - ui: 'headerbutton', - reference: 'detailtoggle', - handler: 'onHeaderViewDetailToggle', - iconCls: 'x-fa fa-arrow-left' - } - ] -}); + extend: 'Ext.Toolbar', + xtype: 'headerview', + cls: 'headerview', + viewModel: {}, + items: [ + { + xtype: 'container', + cls: 'headerviewtext', + bind: { html: '\u007Bheading}' } + }, + '->', + { + xtype: 'button', + ui: 'headerbutton', + reference: 'detailtoggle', + handler: 'onHeaderViewDetailToggle', + iconCls: 'x-fa fa-arrow-left' + } + ] +}); \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/universalmodern/index.js b/packages/ext-build-generate-app/ext-templates/application/universalmodern/index.js deleted file mode 100644 index a500dfc..0000000 --- a/packages/ext-build-generate-app/ext-templates/application/universalmodern/index.js +++ /dev/null @@ -1 +0,0 @@ -//placeholder for webpack build \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/universalmodern/index.js.tpl.default b/packages/ext-build-generate-app/ext-templates/application/universalmodern/index.js.tpl.default new file mode 100644 index 0000000..c352a83 --- /dev/null +++ b/packages/ext-build-generate-app/ext-templates/application/universalmodern/index.js.tpl.default @@ -0,0 +1 @@ +//this file exists so the webpack build process will succeed \ No newline at end of file diff --git a/packages/ext-build-generate-app/ext-templates/application/universalmodern/workspace.json.tpl.default b/packages/ext-build-generate-app/ext-templates/application/universalmodern/workspace.json.tpl.default index e9d798a..e0f5b0a 100644 --- a/packages/ext-build-generate-app/ext-templates/application/universalmodern/workspace.json.tpl.default +++ b/packages/ext-build-generate-app/ext-templates/application/universalmodern/workspace.json.tpl.default @@ -7,7 +7,7 @@ "dir": "$\u007Bworkspace.dir}/build" }, "packages": { - "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux", + "dir": "$\u007Bworkspace.dir}/packages/local,{packages},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name},$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-treegrid,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-base,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-ios,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-material,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-aria,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neutral,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-classic,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-gray,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-crisp-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-neptune-touch,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-triton,$\u007Bworkspace.dir}/node_modules/@sencha/ext-$\u007Btoolkit.name}-theme-graphite,$\u007Bworkspace.dir}/node_modules/@sencha/ext-calendar,$\u007Bworkspace.dir}/node_modules/@sencha/ext-charts,$\u007Bworkspace.dir}/node_modules/@sencha/ext-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-exporter,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot,$\u007Bworkspace.dir}/node_modules/@sencha/ext-pivot-d3,$\u007Bworkspace.dir}/node_modules/@sencha/ext-ux,$\u007Bworkspace.dir}/node_modules/@sencha/ext-font-ios", "extract": "$\u007Bworkspace.dir}/packages/remote" } } \ No newline at end of file diff --git a/packages/ext-build-generate-app/package.json b/packages/ext-build-generate-app/package.json index 18ea755..a121695 100644 --- a/packages/ext-build-generate-app/package.json +++ b/packages/ext-build-generate-app/package.json @@ -1,6 +1,6 @@ { "name": "@sencha/ext-build-generate-app", - "version": "6.7.1", + "version": "7.0.0", "description": "ext-build-generate-app - app generator for ext-gen and ext-build", "main": "generateApp.js", "dependencies": { diff --git a/packages/ext-build/package.json b/packages/ext-build/package.json index ea795b4..ae5c169 100644 --- a/packages/ext-build/package.json +++ b/packages/ext-build/package.json @@ -1,6 +1,6 @@ { "name": "@sencha/ext-build", - "version": "6.7.1", + "version": "7.0.0", "description": "ext-build - CLI tool for Sencha Ext JS", "bin": { "ext-build": "bin/ext-build.js" @@ -10,8 +10,8 @@ "loglevel": "silent" }, "dependencies": { - "@sencha/ext-build-generate-app": "~6.7.0", - "@sencha/cmd": "~6.7.0", + "@sencha/ext-build-generate-app": "~7.0.0", + "@sencha/cmd": "~7.0.0", "node-find-folder": "^0.1.32", "chalk": "^2.4.2", "child-process-promise": "^2.2.1", diff --git a/packages/ext-build/readme.md b/packages/ext-build/readme.md index 80011de..accbb49 100644 --- a/packages/ext-build/readme.md +++ b/packages/ext-build/readme.md @@ -16,9 +16,9 @@ npm install -g @sencha/ext-build * eb ## Examples -* ext-build generate app --sdk 'Ext/ext-6.7.0' --template 'universalmodern' MyApp ./MyApp -* ext-build gen app -s 'Ext/ext-6.7.0' -t 'universalmodern' MyApp ./MyApp -* eb g a -s 'Ext/ext-6.7.0' -t 'universalmodern' MyApp ./MyApp +* ext-build generate app --sdk 'Ext/ext-7.0.0' --template 'universalmodern' MyApp ./MyApp +* ext-build gen app -s 'Ext/ext-7.0.0' -t 'universalmodern' MyApp ./MyApp +* eb g a -s 'Ext/ext-7.0.0' -t 'universalmodern' MyApp ./MyApp * ext-build generate viewpackage settings ## Commands Available @@ -38,4 +38,4 @@ npm install -g @sencha/ext-build * --template -t (name of app template to use - only one currently - universalmodern) ## Comments -* Tested with Ext JS Version 6.7.0 +* Tested with Ext JS Version 7.0.0 diff --git a/packages/ext-gen/ext-gen.js b/packages/ext-gen/ext-gen.js index 64b56c8..d65bfc8 100755 --- a/packages/ext-gen/ext-gen.js +++ b/packages/ext-gen/ext-gen.js @@ -678,6 +678,8 @@ async function stepCreate() { answers['license'] = config.license answers['bugsURL'] = config.bugsURL answers['homepageURL'] = config.homepageURL + + console.dir(answers) } function displayDefaults() { diff --git a/packages/ext-gen/install.js b/packages/ext-gen/install.js index ba726f7..3bd6fc5 100644 --- a/packages/ext-gen/install.js +++ b/packages/ext-gen/install.js @@ -36,6 +36,7 @@ if (global.isCommunity) { else { classic = `ext-gen app --classictheme theme-graphite -n ClassicApp ext-gen app --template universalclassicmodern --classictheme theme-graphite --moderntheme theme-material --name CoolUniversalApp +ext-gen app --template classicdesktop --classictheme theme-gray --name GrayDesktopApp ext-gen app --template classicdesktop --classictheme theme-graphite --name CoolDesktopApp\n` } var welcome = boldGreen(`Welcome to Sencha ExtGen v${version} ${edition} Edition - The Ext JS code generator`) diff --git a/packages/ext-gen/package.json b/packages/ext-gen/package.json index 59a60f3..191847f 100644 --- a/packages/ext-gen/package.json +++ b/packages/ext-gen/package.json @@ -1,6 +1,6 @@ { "name": "@sencha/ext-gen", - "version": "6.7.1", + "version": "7.0.0", "description": "An Ext JS code generator", "bin": { "ext": "ext-gen.js", @@ -18,8 +18,8 @@ }, "preferGlobal": true, "dependencies": { - "@sencha/ext-build-generate-app": "~6.7.0", - "command-line-args": "^5.0.2", + "@sencha/ext-build-generate-app": "~7.0.0", + "command-line-args": "^5.1.0", "comment-json": "^1.1.3", "cross-spawn": "^6.0.5", "chalk":"~2.4.2", diff --git a/packages/ext-gen/templates.1/webpack.config.js.tpl.default b/packages/ext-gen/templates.1/webpack.config.js.tpl.default deleted file mode 100644 index 465da5b..0000000 --- a/packages/ext-gen/templates.1/webpack.config.js.tpl.default +++ /dev/null @@ -1,105 +0,0 @@ -const ExtWebpackPlugin = require('@sencha/ext-webpack-plugin'); -const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const webpack = require('webpack'); -const portfinder = require('portfinder'); - -module.exports = async function (env) { - var browserprofile - var watchprofile - var buildenvironment = env.environment || process.env.npm_package_extbuild_defaultenvironment - if (buildenvironment == 'production') { - browserprofile = false - watchprofile = 'no' - } - else { - if (env.browser == undefined) {env.browser = true} - browserprofile = JSON.parse(env.browser) || true - watchprofile = env.watch || 'yes' - } - const isProd = buildenvironment === 'production' - var buildprofile = env.profile || process.env.npm_package_extbuild_defaultprofile - var buildenvironment = env.environment || process.env.npm_package_extbuild_defaultenvironment - var buildverbose = env.verbose || process.env.npm_package_extbuild_defaultverbose - if (buildprofile == 'all') { buildprofile = '' } - if (env.treeshake == undefined) {env.treeshake = false} - var treeshake = env.treeshake ? JSON.parse(env.treeshake) : false - var basehref = env.basehref || '/' - var mode = isProd ? 'production': 'development' - - portfinder.basePort = (env && env.port) || 1962; - return portfinder.getPortPromise().then(port => { - const nodeEnv = env && env.prod ? 'production' : 'development' - const isProd = nodeEnv === 'production' - const plugins = [ - new HtmlWebpackPlugin({ - template: 'index.html', - hash: true, - inject: "body" - }), - new ExtWebpackPlugin({ - framework: 'extjs', - port: port, - emit: true, - browser: browserprofile, - treeshake: treeshake, - watch: watchprofile, - profile: buildprofile, - environment: buildenvironment, - verbose: buildverbose - }) - ] -// if (!isProd) { -// plugins.push( -// new webpack.HotModuleReplacementPlugin() -// ) -// } - return { - performance: { hints: false }, - mode: mode, - devtool: (mode === 'development') ? 'inline-source-map' : false, - context: path.join(__dirname, './'), - entry: { - main: "./app.js" - }, - output: { - path: path.resolve(__dirname, './'), - filename: '[name].js' - }, - module: { - rules: [ - { - test: /.js$/, - exclude: /node_modules/ - } - ] - }, - plugins: plugins, - devServer: { - contentBase: './', - historyApiFallback: true, - host: '0.0.0.0', - hot: false, - port, - disableHostCheck: false, - compress: isProd, - inline: !isProd, - stats: { - entrypoints: false, - assets: false, - children: false, - chunks: false, - hash: false, - modules: false, - publicPath: false, - timings: false, - version: false, - warnings: false, - colors: { - green: '' - } - } - } - } - }); -} diff --git a/packages/ext-gen/templates.1/package.json.tpl.default b/packages/ext-gen/templates.2/package.json.tpl.default similarity index 88% rename from packages/ext-gen/templates.1/package.json.tpl.default rename to packages/ext-gen/templates.2/package.json.tpl.default index 42f00fa..859e769 100644 --- a/packages/ext-gen/templates.1/package.json.tpl.default +++ b/packages/ext-gen/templates.2/package.json.tpl.default @@ -7,7 +7,7 @@ "scripts": { "clean": "rimraf build", "start": "cross-env-shell npm run dev", - "dev": "webpack-dev-server --env.environment=development", + "dev": "webpack-dev-server --env.verbose='no'", "prod": "webpack-dev-server --env.environment=production", "build": "npm run clean && cross-env webpack --env.environment=production", "desktop": "webpack-dev-server --env.profile=desktop --env.environment=development", @@ -44,16 +44,16 @@ }, "dependencies": { - "@sencha/ext-modern": "~6.7.0", - "@sencha/ext-modern-{modernTheme}": "~6.7.0", - "@sencha/ext-classic": "~6.7.0", - "@sencha/ext-classic-{classicTheme}": "~6.7.0", - "@sencha/ext": "~6.7.0" + "@sencha/ext-modern": "~7.0.0", + "@sencha/ext-modern-{modernTheme}": "~7.0.0", + "@sencha/ext-classic": "~7.0.0", + "@sencha/ext-classic-{classicTheme}": "~7.0.0", + "@sencha/ext": "~7.0.0" }, "devDependencies": { - "@sencha/ext-webpack-plugin": "~6.7.0", + "@sencha/ext-webpack-plugin": "~7.0.0", - "html-webpack-plugin": "^3.2.0", + "html-webpack-plugin": "^3.2.0", "cross-env": "^5.2.0", "portfinder": "^1.0.20", diff --git a/packages/ext-gen/templates.2/webpack.config.js.tpl.default b/packages/ext-gen/templates.2/webpack.config.js.tpl.default new file mode 100644 index 0000000..4d67e25 --- /dev/null +++ b/packages/ext-gen/templates.2/webpack.config.js.tpl.default @@ -0,0 +1,74 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin') +const ExtWebpackPlugin = require('@sencha/ext-webpack-plugin') +const portfinder = require('portfinder') + +module.exports = function (env) { + function get(it, val) {if(env == undefined) {return val} else if(env[it] == undefined) {return val} else {return env[it]}} + + var profile = get('profile', '') + var environment = get('environment', 'development') + var treeshake = get('treeshake', 'no') + var browser = get('browser', 'yes') + var watch = get('watch', 'yes') + var verbose = get('verbose', 'no') + if (environment == 'production') { + browser = 'no' + watch = 'no' + } + const isProd = environment === 'production' + const outputFolder = './' + portfinder.basePort = (env && env.port) || 1962 + return portfinder.getPortPromise().then(port => { + const plugins = [ + new HtmlWebpackPlugin({template: "index.html",hash: true,inject: "body"}), + new ExtWebpackPlugin({ + framework: 'extjs', + toolkit: 'modern', + theme: 'theme-kitchensink', + emit: 'yes', + script: '', + port: port, + packages: [], + profile: profile, + environment: environment, + treeshake: treeshake, + browser: browser, + watch: watch, + verbose: verbose + }) + ] + return { + mode: environment, + devtool: (environment === 'development') ? 'inline-source-map' : false, + context: path.join(__dirname, './'), + entry: './app.js', + output: { + path: path.join(__dirname, outputFolder), + filename: "[name].js" + //filename: "[name].[chunkhash:20].js" + }, + plugins: plugins, + module: { + rules: [ + { test: /\.(js)$/, exclude: /node_modules/ } + ] + }, + performance: { hints: false }, + stats: 'none', + optimization: { noEmitOnErrors: true }, + node: false, + devServer: { + contentBase: outputFolder, + hot: !isProd, + historyApiFallback: true, + host: '0.0.0.0', + port: port, + disableHostCheck: false, + compress: isProd, + inline:!isProd, + stats: 'none' + } + } + }) +} diff --git a/packages/ext-gen/templates/package.json.tpl.default b/packages/ext-gen/templates/package.json.tpl.default index ee4d0b6..8192472 100644 --- a/packages/ext-gen/templates/package.json.tpl.default +++ b/packages/ext-gen/templates/package.json.tpl.default @@ -3,73 +3,65 @@ "product": "ext", "version": "{version}", "description": "{description}", + "repository": { + "type": "git", + "url": "{repositoryURL}" + }, + "keywords": [{keywords}], + "author": "{authorName}", + "license": "{license}", + "bugs": { + "url": "{bugsURL}" + }, + "homepage": "{homepageURL}", "scripts": { + "start": "npm run dev:desktop", "clean": "rimraf build", - "start": "cross-env-shell npm run dev", - "dev": "webpack-dev-server --env.verbose='no'", - "prod": "webpack-dev-server --env.environment=production", - "build": "npm run clean && cross-env webpack --env.environment=production", - "desktop": "webpack-dev-server --env.profile=desktop --env.environment=development", - "desktop-v": "webpack-dev-server --env.profile=desktop --env.environment=development", - "build-desktop-testing": "npx sencha app build desktop testing", - "build-desktop-production": "npx sencha app build desktop production", - "phone": "webpack-dev-server --env.profile=phone --env.environment=development", - "phone-v": "webpack-dev-server --env.profile=phone --env.environment=development", - "all": "webpack-dev-server --env.profile=all --env.environment=development", - "all-v": "webpack-dev-server --env.profile=all --env.environment=development", - "build-phone-testing": "npx sencha app build phone testing", - "build-phone-production": "npx sencha app build phone production", - "createview": "cross-env-shell npx sencha generate viewpackage $npm_package_extbuild_defaultprofile $VIEW" + "dev:desktop": "webpack-dev-server --env.profile=desktop --env.browser=yes --env.verbose=no", + "dev:phone": "webpack-dev-server --env.profile=phone --env.browser=yes --env.verbose=no", + "build:desktop": "npm run clean && cross-env webpack --env.profile=desktop --env.environment=production --env.treeshake=yes", + "build:phone": "npm run clean && cross-env webpack --env.profile=phone --env.environment=production --env.treeshake=yes" }, "scripts": { + "start": "npm run dev:desktop", "clean": "rimraf build", - "start": "cross-env-shell npm run dev", - "dev": "webpack-dev-server --env.environment=development", - "prod": "webpack-dev-server --env.environment=production --env.treeshake=true", - "build": "cross-env-shell npm run clean && cross-env webpack --env.environment=production --env.treeshake=true", - "desktop": "webpack-dev-server --env.profile=desktop --env.environment=development", - "desktop-v": "webpack-dev-server --env.profile=desktop --env.environment=development", - "build-desktop-testing": "npx sencha app build desktop testing", - "build-desktop-production": "npx sencha app build desktop production", - "createview": "cross-env-shell npx sencha generate viewpackage $npm_package_extbuild_defaultprofile $VIEW" + "dev:desktop": "webpack-dev-server --env.profile=desktop --env.browser=yes --env.verbose=no", + "build:desktop": "npm run clean && cross-env webpack --env.profile=desktop --env.environment=production --env.treeshake=yes" }, - "extbuild": { - "defaultprofile": "desktop", - "defaultenvironment": "development", - "defaultverbose": "no" - }, "dependencies": { - "@sencha/ext-modern": "~6.7.0", - "@sencha/ext-modern-{modernTheme}": "~6.7.0", - "@sencha/ext-classic": "~6.7.0", - "@sencha/ext-classic-{classicTheme}": "~6.7.0", - "@sencha/ext": "~6.7.0" + "@sencha/ext-modern": "~7.0.0", + "@sencha/ext-modern-{modernTheme}": "~7.0.0", + "@sencha/ext-classic": "~7.0.0", + "@sencha/ext-classic-{classicTheme}": "~7.0.0", + "@sencha/ext": "~7.0.0" }, "devDependencies": { "@sencha/ext-webpack-plugin": "~7.0.0", - "html-webpack-plugin": "^3.2.0", + "html-webpack-plugin": "^3.2.0", + "base-href-webpack-plugin": "~2.0.0", + "cross-env": "^5.2.0", "portfinder": "^1.0.20", - "webpack": "^4.29.1", + "webpack": "^4.29.6", "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" - }, - "repository": { - "type": "git", - "url": "{repositoryURL}" - }, - "keywords": [{keywords}], - "author": "{authorName}", - "license": "{license}", - "bugs": { - "url": "{bugsURL}" - }, - "homepage": "{homepageURL}" + "webpack-dev-server": "^3.2.1", + + "@babel/cli": "^7.1.0", + "@babel/core": "^7.1.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.1.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/preset-env": "^7.1.0", + "babel-plugin-add-module-exports": "^1.0.0", + "babel-loader": "^8.0.5", + + "lodash": "^4.17.11" + } } diff --git a/packages/ext-gen/templates/webpack.config.js.tpl.default b/packages/ext-gen/templates/webpack.config.js.tpl.default index 4d67e25..e93878d 100644 --- a/packages/ext-gen/templates/webpack.config.js.tpl.default +++ b/packages/ext-gen/templates/webpack.config.js.tpl.default @@ -1,35 +1,52 @@ const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin') -const ExtWebpackPlugin = require('@sencha/ext-webpack-plugin') -const portfinder = require('portfinder') +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const { BaseHrefWebpackPlugin } = require('base-href-webpack-plugin'); +const ExtWebpackPlugin = require('@sencha/ext-webpack-plugin'); +const portfinder = require('portfinder'); -module.exports = function (env) { +module.exports = async function (env) { function get(it, val) {if(env == undefined) {return val} else if(env[it] == undefined) {return val} else {return env[it]}} - var profile = get('profile', '') - var environment = get('environment', 'development') - var treeshake = get('treeshake', 'no') - var browser = get('browser', 'yes') - var watch = get('watch', 'yes') - var verbose = get('verbose', 'no') - if (environment == 'production') { - browser = 'no' - watch = 'no' + //******* */ + var framework = get('framework', 'extjs') + var contextFolder = get('contextFolder', './') + var entryFile = get('entryFile', './index.js') + var outputFolder = get('outputFolder', './') + const rules =[ + //{ test: /\.(js|jsx)$/, exclude: /node_modules/ } + { test: /\.(js)$/, use: ['babel-loader'] } + ] + const resolve = { } + //******* */ + + var toolkit = get('toolkit', 'modern') + var theme = get('theme', 'theme-material') + var packages = get('packages', ['treegrid']) + var script = get('script', '') + var emit = get('emit', 'yes') + var profile = get('profile', '') + var environment = get('environment', 'development') + var treeshake = get('treeshake', 'no') + var browser = get('browser', 'yes') + var watch = get('watch', 'yes') + var verbose = get('verbose', 'no') + var basehref = get('basehref', '/') + const isProd = environment === 'production' - const outputFolder = './' portfinder.basePort = (env && env.port) || 1962 return portfinder.getPortPromise().then(port => { const plugins = [ - new HtmlWebpackPlugin({template: "index.html",hash: true,inject: "body"}), + new HtmlWebpackPlugin({ template: "index.html", hash: true, inject: "body" }), + new BaseHrefWebpackPlugin({ baseHref: basehref }), new ExtWebpackPlugin({ - framework: 'extjs', - toolkit: 'modern', - theme: 'theme-kitchensink', - emit: 'yes', - script: '', + framework: framework, + toolkit: toolkit, + theme: theme, + packages: packages, + script: script, + emit: emit, port: port, - packages: [], profile: profile, environment: environment, treeshake: treeshake, @@ -38,22 +55,21 @@ module.exports = function (env) { verbose: verbose }) ] + return { mode: environment, devtool: (environment === 'development') ? 'inline-source-map' : false, - context: path.join(__dirname, './'), - entry: './app.js', + context: path.join(__dirname, contextFolder), + entry: entryFile, output: { path: path.join(__dirname, outputFolder), filename: "[name].js" - //filename: "[name].[chunkhash:20].js" }, plugins: plugins, module: { - rules: [ - { test: /\.(js)$/, exclude: /node_modules/ } - ] + rules: rules }, + resolve: resolve, performance: { hints: false }, stats: 'none', optimization: { noEmitOnErrors: true }, diff --git a/packages/ext-webpack-plugin-orig/dist/angularUtil.js b/packages/ext-webpack-plugin-orig/dist/angularUtil.js deleted file mode 100644 index 7574f02..0000000 --- a/packages/ext-webpack-plugin-orig/dist/angularUtil.js +++ /dev/null @@ -1,344 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getValidateOptions = getValidateOptions; -exports.getDefaultOptions = getDefaultOptions; -exports.getDefaultVars = getDefaultVars; -exports.extractFromSource = extractFromSource; -exports._toProd = _toProd; -exports._toDev = _toDev; -exports._getAllComponents = _getAllComponents; -exports._writeFilesToProdFolder = _writeFilesToProdFolder; - -function getValidateOptions() { - return { - "type": "object", - "properties": { - "framework": { - "type": ["string"] - }, - "toolkit": { - "type": ["string"] - }, - "port": { - "type": ["integer"] - }, - "emit": { - "type": ["boolean"] - }, - "browser": { - "type": ["boolean"] - }, - "watch": { - "type": ["string"] - }, - "profile": { - "type": ["string"] - }, - "environment": { - "type": ["string"] - }, - "verbose": { - "type": ["string"] - }, - "theme": { - "type": ["string"] - }, - "treeshake": { - "type": ["boolean"] - }, - "packages": { - "type": ["string", "array"] - } - }, - "additionalProperties": false - }; -} - -function getDefaultOptions() { - return { - port: 1962, - emit: true, - browser: true, - watch: 'yes', - profile: '', - treeshake: false, - environment: 'development', - verbose: 'no', - toolkit: 'modern', - packages: null - }; -} - -function getDefaultVars() { - return { - watchStarted: false, - firstTime: true, - firstCompile: true, - browserCount: 0, - manifest: null, - extPath: 'ext-angular', - pluginErrors: [], - deps: [], - usedExtComponents: [], - rebuild: true - }; -} - -function toXtype(str) { - return str.toLowerCase().replace(/_/g, '-'); -} - -function extractFromSource(module, options, compilation, extComponents) { - try { - var js = module._source._value; - - const logv = require('./pluginUtil').logv; //logv(options,'HOOK succeedModule, FUNCTION extractFromSource: ' + module.resource) - - - var statements = []; - - var generate = require("@babel/generator").default; - - var parse = require("babylon").parse; - - var traverse = require("ast-traverse"); - - var ast = parse(js, { - plugins: ['typescript', 'flow', 'doExpressions', 'objectRestSpread', 'classProperties', 'exportDefaultFrom', 'exportExtensions', 'asyncGenerators', 'functionBind', 'functionSent', 'dynamicImport'], - sourceType: 'module' - }); - traverse(ast, { - pre: function (node) { - if (node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name === 'Ext') { - statements.push(generate(node).code); - } - - if (node.type === 'StringLiteral') { - let code = node.value; - - for (var i = 0; i < code.length; ++i) { - if (code.charAt(i) == '<') { - if (code.substr(i, 4) == '') + 3; - } else if (code.charAt(i + 1) !== '/') { - var start = code.substring(i); - var spaceEnd = start.indexOf(' '); - var newlineEnd = start.indexOf('\n'); - var tagEnd = start.indexOf('>'); - var end = Math.min(spaceEnd, newlineEnd, tagEnd); - - if (end >= 0) { - var xtype = toXtype(start.substring(1, end)); - - if (extComponents.includes(xtype)) { - var theValue = node.value.toLowerCase(); - - if (theValue.indexOf('doctype html') == -1) { - var type = { - xtype: xtype - }; - let config = JSON.stringify(type); - statements.push(`Ext.create(${config})`); - } - } - - i += end; - } - } - } - } - } - } - }); - return statements; - } catch (e) { - console.log(e); - compilation.errors.push('extractFromSource: ' + e); - return []; - } -} - -function changeIt(o) { - const path = require('path'); - - const fsx = require('fs-extra'); - - const wherePath = path.resolve(process.cwd(), o.where); - var js = fsx.readFileSync(wherePath).toString(); - var newJs = js.replace(o.from, o.to); - fsx.writeFileSync(wherePath, newJs, 'utf-8', () => { - return; - }); -} - -function _toProd(vars, options) { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _toProd'); - - try { - const fsx = require('fs-extra'); - - const fs = require('fs'); - - const mkdirp = require('mkdirp'); - - const path = require('path'); - - const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); - - if (!fs.existsSync(pathExtAngularProd)) { - mkdirp.sync(pathExtAngularProd); - - const t = require('./artifacts').extAngularModule('', '', ''); - - fsx.writeFileSync(`${pathExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', () => { - return; - }); - } - - var o = {}; - o.where = 'src/app/app.module.ts'; - o.from = `import { ExtAngularModule } from '@sencha/ext-angular'`; - o.to = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'`; - changeIt(o); - o = {}; - o.where = 'src/main.ts'; - o.from = `bootstrapModule( AppModule );`; - o.to = `enableProdMode();bootstrapModule(AppModule);`; - changeIt(o); - } catch (e) { - console.log(e); - return []; - } -} - -function _toDev(vars, options) { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _toProd'); - - try { - const path = require('path'); - - const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); - - require('rimraf').sync(pathExtAngularProd); - - var o = {}; - o.where = 'src/app/app.module.ts'; - o.from = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'`; - o.to = `import { ExtAngularModule } from '@sencha/ext-angular'`; - changeIt(o); - o = {}; - o.where = 'src/main.ts'; - o.from = `enableProdMode();bootstrapModule(AppModule);`; - o.to = `bootstrapModule( AppModule );`; - changeIt(o); - } catch (e) { - console.log(e); - return []; - } -} - -function _getAllComponents(vars, options) { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _getAllComponents'); - - try { - const path = require('path'); - - const fsx = require('fs-extra'); - - var extComponents = []; - const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib'); - var files = fsx.readdirSync(packageLibPath); - files.forEach(fileName => { - if (fileName && fileName.substr(0, 4) == 'ext-') { - var end = fileName.substr(4).indexOf('.component'); - - if (end >= 0) { - extComponents.push(fileName.substring(4, end + 4)); - } - } - }); - return extComponents; - } catch (e) { - console.log(e); - return []; - } -} - -function _writeFilesToProdFolder(vars, options) { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _writeFilesToProdFolder'); - - try { - const path = require('path'); - - const fsx = require('fs-extra'); - - const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib'); - const pathToExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); - const string = 'Ext.create({\"xtype\":\"'; - vars.deps.forEach(code => { - var index = code.indexOf(string); - - if (index >= 0) { - code = code.substring(index + string.length); - var end = code.indexOf('\"'); - vars.usedExtComponents.push(code.substr(0, end)); - } - }); - vars.usedExtComponents = [...new Set(vars.usedExtComponents)]; - var writeToPathWritten = false; - var moduleVars = { - imports: '', - exports: '', - declarations: '' - }; - vars.usedExtComponents.forEach(xtype => { - var capclassname = xtype.charAt(0).toUpperCase() + xtype.replace(/-/g, "_").slice(1); - moduleVars.imports = moduleVars.imports + `import { Ext${capclassname}Component } from './ext-${xtype}.component';\n`; - moduleVars.exports = moduleVars.exports + ` Ext${capclassname}Component,\n`; - moduleVars.declarations = moduleVars.declarations + ` Ext${capclassname}Component,\n`; - var classFile = `ext-${xtype}.component.ts`; - const contents = fsx.readFileSync(`${packageLibPath}/${classFile}`).toString(); - fsx.writeFileSync(`${pathToExtAngularProd}/${classFile}`, contents, 'utf-8', () => { - return; - }); - writeToPathWritten = true; - }); - - if (writeToPathWritten) { - var t = require('./artifacts').extAngularModule(moduleVars.imports, moduleVars.exports, moduleVars.declarations); - - fsx.writeFileSync(`${pathToExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', () => { - return; - }); - } - - const baseContent = fsx.readFileSync(`${packageLibPath}/base.ts`).toString(); - fsx.writeFileSync(`${pathToExtAngularProd}/base.ts`, baseContent, 'utf-8', () => { - return; - }); - } catch (e) { - console.log(e); - return []; - } -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hbmd1bGFyVXRpbC5qcyJdLCJuYW1lcyI6WyJnZXRWYWxpZGF0ZU9wdGlvbnMiLCJnZXREZWZhdWx0T3B0aW9ucyIsInBvcnQiLCJlbWl0IiwiYnJvd3NlciIsIndhdGNoIiwicHJvZmlsZSIsInRyZWVzaGFrZSIsImVudmlyb25tZW50IiwidmVyYm9zZSIsInRvb2xraXQiLCJwYWNrYWdlcyIsImdldERlZmF1bHRWYXJzIiwid2F0Y2hTdGFydGVkIiwiZmlyc3RUaW1lIiwiZmlyc3RDb21waWxlIiwiYnJvd3NlckNvdW50IiwibWFuaWZlc3QiLCJleHRQYXRoIiwicGx1Z2luRXJyb3JzIiwiZGVwcyIsInVzZWRFeHRDb21wb25lbnRzIiwicmVidWlsZCIsInRvWHR5cGUiLCJzdHIiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJleHRyYWN0RnJvbVNvdXJjZSIsIm1vZHVsZSIsIm9wdGlvbnMiLCJjb21waWxhdGlvbiIsImV4dENvbXBvbmVudHMiLCJqcyIsIl9zb3VyY2UiLCJfdmFsdWUiLCJsb2d2IiwicmVxdWlyZSIsInN0YXRlbWVudHMiLCJnZW5lcmF0ZSIsImRlZmF1bHQiLCJwYXJzZSIsInRyYXZlcnNlIiwiYXN0IiwicGx1Z2lucyIsInNvdXJjZVR5cGUiLCJwcmUiLCJub2RlIiwidHlwZSIsImNhbGxlZSIsIm9iamVjdCIsIm5hbWUiLCJwdXNoIiwiY29kZSIsInZhbHVlIiwiaSIsImxlbmd0aCIsImNoYXJBdCIsInN1YnN0ciIsImluZGV4T2YiLCJzdGFydCIsInN1YnN0cmluZyIsInNwYWNlRW5kIiwibmV3bGluZUVuZCIsInRhZ0VuZCIsImVuZCIsIk1hdGgiLCJtaW4iLCJ4dHlwZSIsImluY2x1ZGVzIiwidGhlVmFsdWUiLCJjb25maWciLCJKU09OIiwic3RyaW5naWZ5IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJlcnJvcnMiLCJjaGFuZ2VJdCIsIm8iLCJwYXRoIiwiZnN4Iiwid2hlcmVQYXRoIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJjd2QiLCJ3aGVyZSIsInJlYWRGaWxlU3luYyIsInRvU3RyaW5nIiwibmV3SnMiLCJmcm9tIiwidG8iLCJ3cml0ZUZpbGVTeW5jIiwiX3RvUHJvZCIsInZhcnMiLCJmcyIsIm1rZGlycCIsInBhdGhFeHRBbmd1bGFyUHJvZCIsImV4aXN0c1N5bmMiLCJzeW5jIiwidCIsImV4dEFuZ3VsYXJNb2R1bGUiLCJfdG9EZXYiLCJfZ2V0QWxsQ29tcG9uZW50cyIsInBhY2thZ2VMaWJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImZvckVhY2giLCJmaWxlTmFtZSIsIl93cml0ZUZpbGVzVG9Qcm9kRm9sZGVyIiwicGF0aFRvRXh0QW5ndWxhclByb2QiLCJzdHJpbmciLCJpbmRleCIsIlNldCIsIndyaXRlVG9QYXRoV3JpdHRlbiIsIm1vZHVsZVZhcnMiLCJpbXBvcnRzIiwiZXhwb3J0cyIsImRlY2xhcmF0aW9ucyIsImNhcGNsYXNzbmFtZSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJjbGFzc0ZpbGUiLCJjb250ZW50cyIsImJhc2VDb250ZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxrQkFBVCxHQUE4QjtBQUNuQyxTQUFPO0FBQ0wsWUFBUSxRQURIO0FBRUwsa0JBQWM7QUFDWixtQkFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRjtBQUFULE9BREg7QUFFWixpQkFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRjtBQUFULE9BRkg7QUFHWixjQUFlO0FBQUMsZ0JBQVEsQ0FBRSxTQUFGO0FBQVQsT0FISDtBQUlaLGNBQWU7QUFBQyxnQkFBUSxDQUFFLFNBQUY7QUFBVCxPQUpIO0FBS1osaUJBQWU7QUFBQyxnQkFBUSxDQUFFLFNBQUY7QUFBVCxPQUxIO0FBTVosZUFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRjtBQUFULE9BTkg7QUFPWixpQkFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRjtBQUFULE9BUEg7QUFRWixxQkFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRjtBQUFULE9B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VSxDQUFDRyxZQUQ3QyxDQUFSOztBQUdBckMsTUFBQUEsR0FBRyxDQUFDVyxhQUFKLENBQW1CLEdBQUVrQixvQkFBcUIsd0JBQTFDLEVBQW1FVixDQUFuRSxFQUFzRSxPQUF0RSxFQUErRSxNQUFJO0FBQUM7QUFBTyxPQUEzRjtBQUNEOztBQUVELFVBQU13QixXQUFXLEdBQUczQyxHQUFHLENBQUNNLFlBQUosQ0FBa0IsR0FBRWlCLGNBQWUsVUFBbkMsRUFBOENoQixRQUE5QyxFQUFwQjtBQUNBUCxJQUFBQSxHQUFHLENBQUNXLGFBQUosQ0FBbUIsR0FBRWtCLG9CQUFxQixVQUExQyxFQUFxRGMsV0FBckQsRUFBa0UsT0FBbEUsRUFBMkUsTUFBSTtBQUFDO0FBQU8sS0FBdkY7QUFFRCxHQTVDRCxDQTZDQSxPQUFPbEQsQ0FBUCxFQUFVO0FBQ1JDLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0EsV0FBTyxFQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0ZU9wdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgIFwiZnJhbWV3b3JrXCI6ICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcInRvb2xraXRcIjogICAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiIF19LFxuICAgICAgXCJwb3J0XCI6ICAgICAgICB7XCJ0eXBlXCI6IFsgXCJpbnRlZ2VyXCIgXX0sXG4gICAgICBcImVtaXRcIjogICAgICAgIHtcInR5cGVcIjogWyBcImJvb2xlYW5cIiBdfSxcbiAgICAgIFwiYnJvd3NlclwiOiAgICAge1widHlwZVwiOiBbIFwiYm9vbGVhblwiIF19LFxuICAgICAgXCJ3YXRjaFwiOiAgICAgICB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiBdfSxcbiAgICAgIFwicHJvZmlsZVwiOiAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcImVudmlyb25tZW50XCI6IHtcInR5cGVcIjogWyBcInN0cmluZ1wiIF19LFxuICAgICAgXCJ2ZXJib3NlXCI6ICAgICB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiBdfSxcbiAgICAgIFwidGhlbWVcIjogICAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcInRyZWVzaGFrZVwiOiB7XCJ0eXBlXCI6IFsgXCJib29sZWFuXCIgXX0sXG4gICAgICBcInBhY2thZ2VzXCI6ICAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiLCBcImFycmF5XCIgXX1cbiAgICB9LFxuICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgcG9ydDogMTk2MixcbiAgICBlbWl0OiB0cnVlLFxuICAgIGJyb3dzZXI6IHRydWUsXG4gICAgd2F0Y2g6ICd5ZXMnLFxuICAgIHByb2ZpbGU6ICcnLCBcbiAgICB0cmVlc2hha2U6IGZhbHNlLFxuICAgIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnLCBcbiAgICB2ZXJib3NlOiAnbm8nLFxuICAgIHRvb2xraXQ6ICdtb2Rlcm4nLFxuICAgIHBhY2thZ2VzOiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYXJzKCkge1xuICByZXR1cm4ge1xuICAgIHdhdGNoU3RhcnRlZCA6IGZhbHNlLFxuICAgIGZpcnN0VGltZSA6IHRydWUsXG4gICAgZmlyc3RDb21waWxlOiB0cnVlLFxuICAgIGJyb3dzZXJDb3VudCA6IDAsXG4gICAgbWFuaWZlc3Q6IG51bGwsXG4gICAgZXh0UGF0aDogJ2V4dC1hbmd1bGFyJyxcbiAgICBwbHVnaW5FcnJvcnM6IFtdLFxuICAgIGRlcHM6IFtdLFxuICAgIHVzZWRFeHRDb21wb25lbnRzOiBbXSxcbiAgICByZWJ1aWxkOiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gdG9YdHlwZShzdHIpIHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgJy0nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEZyb21Tb3VyY2UobW9kdWxlLCBvcHRpb25zLCBjb21waWxhdGlvbiwgZXh0Q29tcG9uZW50cykge1xuICB0cnkge1xuICAgIHZhciBqcyA9IG1vZHVsZS5fc291cmNlLl92YWx1ZVxuICAgIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gICAgLy9sb2d2KG9wdGlvbnMsJ0hPT0sgc3VjY2VlZE1vZHVsZSwgRlVOQ1RJT04gZXh0cmFjdEZyb21Tb3VyY2U6ICcgKyBtb2R1bGUucmVzb3VyY2UpXG5cbiAgICB2YXIgc3RhdGVtZW50cyA9IFtdXG5cbiAgICB2YXIgZ2VuZXJhdGUgPSByZXF1aXJlKFwiQGJhYmVsL2dlbmVyYXRvclwiKS5kZWZhdWx0XG4gICAgdmFyIHBhcnNlID0gcmVxdWlyZShcImJhYnlsb25cIikucGFyc2VcbiAgICB2YXIgdHJhdmVyc2UgPSByZXF1aXJlKFwiYXN0LXRyYXZlcnNlXCIpXG5cbiAgICB2YXIgYXN0ID0gcGFyc2UoanMsIHtcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgJ3R5cGVzY3JpcHQnLFxuICAgICAgICAnZmxvdycsXG4gICAgICAgICdkb0V4cHJlc3Npb25zJyxcbiAgICAgICAgJ29iamVjdFJlc3RTcHJlYWQnLFxuICAgICAgICAnY2xhc3NQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ2V4cG9ydERlZmF1bHRGcm9tJyxcbiAgICAgICAgJ2V4cG9ydEV4dGVuc2lvbnMnLFxuICAgICAgICAnYXN5bmNHZW5lcmF0b3JzJyxcbiAgICAgICAgJ2Z1bmN0aW9uQmluZCcsXG4gICAgICAgICdmdW5jdGlvblNlbnQnLFxuICAgICAgICAnZHluYW1pY0ltcG9ydCdcbiAgICAgIF0sXG4gICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgIH0pXG5cbiAgICB0cmF2ZXJzZShhc3QsIHtcbiAgICAgIHByZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBub2RlLmNhbGxlZSAmJiBub2RlLmNhbGxlZS5vYmplY3QgJiYgbm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICdFeHQnKSB7XG4gICAgICAgICAgc3RhdGVtZW50cy5wdXNoKGdlbmVyYXRlKG5vZGUpLmNvZGUpXG4gICAgICAgIH1cbiAgICAgICAgaWYobm9kZS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgICAgICBsZXQgY29kZSA9IG5vZGUudmFsdWVcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmNoYXJBdChpKSA9PSAnPCcpIHtcbiAgICAgICAgICAgICAgaWYgKGNvZGUuc3Vic3RyKGksIDQpID09ICc8IS0tJykge1xuICAgICAgICAgICAgICAgIGkgKz0gNFxuICAgICAgICAgICAgICAgIGkgKz0gY29kZS5zdWJzdHIoaSkuaW5kZXhPZignLS0+JykgKyAzXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZS5jaGFyQXQoaSsxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY29kZS5zdWJzdHJpbmcoaSlcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2VFbmQgPSBzdGFydC5pbmRleE9mKCcgJylcbiAgICAgICAgICAgICAgICB2YXIgbmV3bGluZUVuZCA9IHN0YXJ0LmluZGV4T2YoJ1xcbicpXG4gICAgICAgICAgICAgICAgdmFyIHRhZ0VuZCA9IHN0YXJ0LmluZGV4T2YoJz4nKVxuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBNYXRoLm1pbihzcGFjZUVuZCwgbmV3bGluZUVuZCwgdGFnRW5kKVxuICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgdmFyIHh0eXBlID0gdG9YdHlwZShzdGFydC5zdWJzdHJpbmcoMSwgZW5kKSlcbiAgICAgICAgICAgICAgICAgIGlmKGV4dENvbXBvbmVudHMuaW5jbHVkZXMoeHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGVWYWx1ZSA9IG5vZGUudmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhlVmFsdWUuaW5kZXhPZignZG9jdHlwZSBodG1sJykgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHt4dHlwZTogeHR5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cy5wdXNoKGBFeHQuY3JlYXRlKCR7Y29uZmlnfSlgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpICs9IGVuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gc3RhdGVtZW50c1xuICB9XG4gIGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmxvZyhlKVxuICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdleHRyYWN0RnJvbVNvdXJjZTogJyArIGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hhbmdlSXQobykge1xuICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gIGNvbnN0IGZzeCA9IHJlcXVpcmUoJ2ZzLWV4dHJhJylcbiAgY29uc3Qgd2hlcmVQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIG8ud2hlcmUpXG4gIHZhciBqcyA9IGZzeC5yZWFkRmlsZVN5bmMod2hlcmVQYXRoKS50b1N0cmluZygpXG4gIHZhciBuZXdKcyA9IGpzLnJlcGxhY2Uoby5mcm9tLG8udG8pO1xuICBmc3gud3JpdGVGaWxlU3luYyh3aGVyZVBhdGgsIG5ld0pzLCAndXRmLTgnLCAoKT0+e3JldHVybn0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdG9Qcm9kKHZhcnMsIG9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nXG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gX3RvUHJvZCcpXG4gIHRyeSB7XG4gICAgY29uc3QgZnN4ID0gcmVxdWlyZSgnZnMtZXh0cmEnKVxuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoJ21rZGlycCcpXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG4gICAgY29uc3QgcGF0aEV4dEFuZ3VsYXJQcm9kID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGBzcmMvYXBwL2V4dC1hbmd1bGFyLXByb2RgKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aEV4dEFuZ3VsYXJQcm9kKSkge1xuICAgICAgbWtkaXJwLnN5bmMocGF0aEV4dEFuZ3VsYXJQcm9kKVxuICAgICAgY29uc3QgdCA9IHJlcXVpcmUoJy4vYXJ0aWZhY3RzJykuZXh0QW5ndWxhck1vZHVsZSgnJywgJycsICcnKVxuICAgICAgZnN4LndyaXRlRmlsZVN5bmMoYCR7cGF0aEV4dEFuZ3VsYXJQcm9kfS9leHQtYW5ndWxhci5tb2R1bGUudHNgLCB0LCAndXRmLTgnLCAoKSA9PiB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSlcbiAgICB9XG5cbiAgICB2YXIgbyA9IHt9XG4gICAgby53aGVyZSA9ICdzcmMvYXBwL2FwcC5tb2R1bGUudHMnXG4gICAgby5mcm9tID0gYGltcG9ydCB7IEV4dEFuZ3VsYXJNb2R1bGUgfSBmcm9tICdAc2VuY2hhL2V4dC1hbmd1bGFyJ2BcbiAgICBvLnRvID0gYGltcG9ydCB7IEV4dEFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2V4dC1hbmd1bGFyLXByb2QvZXh0LWFuZ3VsYXIubW9kdWxlJ2BcbiAgICBjaGFuZ2VJdChvKVxuXG4gICAgbyA9IHt9XG4gICAgby53aGVyZSA9ICdzcmMvbWFpbi50cydcbiAgICBvLmZyb20gPSBgYm9vdHN0cmFwTW9kdWxlKCBBcHBNb2R1bGUgKTtgXG4gICAgby50byA9IGBlbmFibGVQcm9kTW9kZSgpO2Jvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO2BcbiAgICBjaGFuZ2VJdChvKVxuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coZSlcbiAgICByZXR1cm4gW11cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RvRGV2KHZhcnMsIG9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nXG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gX3RvUHJvZCcpXG4gIHRyeSB7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgIGNvbnN0IHBhdGhFeHRBbmd1bGFyUHJvZCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgc3JjL2FwcC9leHQtYW5ndWxhci1wcm9kYCk7XG4gICAgcmVxdWlyZSgncmltcmFmJykuc3luYyhwYXRoRXh0QW5ndWxhclByb2QpO1xuXG4gICAgdmFyIG8gPSB7fVxuICAgIG8ud2hlcmUgPSAnc3JjL2FwcC9hcHAubW9kdWxlLnRzJ1xuICAgIG8uZnJvbSA9IGBpbXBvcnQgeyBFeHRBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi9leHQtYW5ndWxhci1wcm9kL2V4dC1hbmd1bGFyLm1vZHVsZSdgXG4gICAgby50byA9IGBpbXBvcnQgeyBFeHRBbmd1bGFyTW9kdWxlIH0gZnJvbSAnQHNlbmNoYS9leHQtYW5ndWxhcidgXG4gICAgY2hhbmdlSXQobylcblxuICAgIG8gPSB7fVxuICAgIG8ud2hlcmUgPSAnc3JjL21haW4udHMnXG4gICAgby5mcm9tID0gYGVuYWJsZVByb2RNb2RlKCk7Ym9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7YFxuICAgIG8udG8gPSBgYm9vdHN0cmFwTW9kdWxlKCBBcHBNb2R1bGUgKTtgXG4gICAgY2hhbmdlSXQobylcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gX2dldEFsbENvbXBvbmVudHModmFycywgb3B0aW9ucykge1xuICBjb25zdCBsb2cgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2dcbiAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgbG9ndihvcHRpb25zLCdGVU5DVElPTiBfZ2V0QWxsQ29tcG9uZW50cycpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gICAgY29uc3QgZnN4ID0gcmVxdWlyZSgnZnMtZXh0cmEnKVxuXG4gICAgdmFyIGV4dENvbXBvbmVudHMgPSBbXVxuICAgIGNvbnN0IHBhY2thZ2VMaWJQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtYW5ndWxhci9zcmMvbGliJylcbiAgICB2YXIgZmlsZXMgPSBmc3gucmVhZGRpclN5bmMocGFja2FnZUxpYlBhdGgpXG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgIGlmIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5zdWJzdHIoMCwgNCkgPT0gJ2V4dC0nKSB7XG4gICAgICAgIHZhciBlbmQgPSBmaWxlTmFtZS5zdWJzdHIoNCkuaW5kZXhPZignLmNvbXBvbmVudCcpXG4gICAgICAgIGlmIChlbmQgPj0gMCkge1xuICAgICAgICAgIGV4dENvbXBvbmVudHMucHVzaChmaWxlTmFtZS5zdWJzdHJpbmcoNCwgZW5kICsgNCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBleHRDb21wb25lbnRzXG5cbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF93cml0ZUZpbGVzVG9Qcm9kRm9sZGVyKHZhcnMsIG9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nXG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gX3dyaXRlRmlsZXNUb1Byb2RGb2xkZXInKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgIGNvbnN0IGZzeCA9IHJlcXVpcmUoJ2ZzLWV4dHJhJylcblxuICAgIGNvbnN0IHBhY2thZ2VMaWJQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtYW5ndWxhci9zcmMvbGliJylcbiAgICBjb25zdCBwYXRoVG9FeHRBbmd1bGFyUHJvZCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgc3JjL2FwcC9leHQtYW5ndWxhci1wcm9kYClcbiAgICBjb25zdCBzdHJpbmcgPSAnRXh0LmNyZWF0ZSh7XFxcInh0eXBlXFxcIjpcXFwiJ1xuXG4gICAgdmFycy5kZXBzLmZvckVhY2goY29kZSA9PiB7XG4gICAgICB2YXIgaW5kZXggPSBjb2RlLmluZGV4T2Yoc3RyaW5nKVxuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29kZSA9IGNvZGUuc3Vic3RyaW5nKGluZGV4ICsgc3RyaW5nLmxlbmd0aClcbiAgICAgICAgdmFyIGVuZCA9IGNvZGUuaW5kZXhPZignXFxcIicpXG4gICAgICAgIHZhcnMudXNlZEV4dENvbXBvbmVudHMucHVzaChjb2RlLnN1YnN0cigwLCBlbmQpKVxuICAgICAgfVxuICAgIH0pXG4gICAgdmFycy51c2VkRXh0Q29tcG9uZW50cyA9IFsuLi5uZXcgU2V0KHZhcnMudXNlZEV4dENvbXBvbmVudHMpXVxuXG4gICAgdmFyIHdyaXRlVG9QYXRoV3JpdHRlbiA9IGZhbHNlXG4gICAgdmFyIG1vZHVsZVZhcnMgPSB7XG4gICAgICBpbXBvcnRzOiAnJyxcbiAgICAgIGV4cG9ydHM6ICcnLFxuICAgICAgZGVjbGFyYXRpb25zOiAnJ1xuICAgIH1cbiAgICB2YXJzLnVzZWRFeHRDb21wb25lbnRzLmZvckVhY2goeHR5cGUgPT4ge1xuICAgICAgdmFyIGNhcGNsYXNzbmFtZSA9IHh0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgeHR5cGUucmVwbGFjZSgvLS9nLCBcIl9cIikuc2xpY2UoMSlcbiAgICAgIG1vZHVsZVZhcnMuaW1wb3J0cyA9IG1vZHVsZVZhcnMuaW1wb3J0cyArIGBpbXBvcnQgeyBFeHQke2NhcGNsYXNzbmFtZX1Db21wb25lbnQgfSBmcm9tICcuL2V4dC0ke3h0eXBlfS5jb21wb25lbnQnO1xcbmBcbiAgICAgIG1vZHVsZVZhcnMuZXhwb3J0cyA9IG1vZHVsZVZhcnMuZXhwb3J0cyArIGAgICAgRXh0JHtjYXBjbGFzc25hbWV9Q29tcG9uZW50LFxcbmBcbiAgICAgIG1vZHVsZVZhcnMuZGVjbGFyYXRpb25zID0gbW9kdWxlVmFycy5kZWNsYXJhdGlvbnMgKyBgICAgIEV4dCR7Y2FwY2xhc3NuYW1lfUNvbXBvbmVudCxcXG5gXG4gICAgICB2YXIgY2xhc3NGaWxlID0gYGV4dC0ke3h0eXBlfS5jb21wb25lbnQudHNgXG4gICAgICBjb25zdCBjb250ZW50cyA9IGZzeC5yZWFkRmlsZVN5bmMoYCR7cGFja2FnZUxpYlBhdGh9LyR7Y2xhc3NGaWxlfWApLnRvU3RyaW5nKClcbiAgICAgIGZzeC53cml0ZUZpbGVTeW5jKGAke3BhdGhUb0V4dEFuZ3VsYXJQcm9kfS8ke2NsYXNzRmlsZX1gLCBjb250ZW50cywgJ3V0Zi04JywgKCk9PntyZXR1cm59KVxuICAgICAgd3JpdGVUb1BhdGhXcml0dGVuID0gdHJ1ZVxuICAgIH0pXG4gICAgaWYgKHdyaXRlVG9QYXRoV3JpdHRlbikge1xuICAgICAgdmFyIHQgPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmV4dEFuZ3VsYXJNb2R1bGUoXG4gICAgICAgIG1vZHVsZVZhcnMuaW1wb3J0cywgbW9kdWxlVmFycy5leHBvcnRzLCBtb2R1bGVWYXJzLmRlY2xhcmF0aW9uc1xuICAgICAgKVxuICAgICAgZnN4LndyaXRlRmlsZVN5bmMoYCR7cGF0aFRvRXh0QW5ndWxhclByb2R9L2V4dC1hbmd1bGFyLm1vZHVsZS50c2AsIHQsICd1dGYtOCcsICgpPT57cmV0dXJufSlcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlQ29udGVudCA9IGZzeC5yZWFkRmlsZVN5bmMoYCR7cGFja2FnZUxpYlBhdGh9L2Jhc2UudHNgKS50b1N0cmluZygpXG4gICAgZnN4LndyaXRlRmlsZVN5bmMoYCR7cGF0aFRvRXh0QW5ndWxhclByb2R9L2Jhc2UudHNgLCBiYXNlQ29udGVudCwgJ3V0Zi04JywgKCk9PntyZXR1cm59KVxuXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmxvZyhlKVxuICAgIHJldHVybiBbXVxuICB9XG59Il19 \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/dist/artifacts.js b/packages/ext-webpack-plugin-orig/dist/artifacts.js deleted file mode 100644 index ff22ff7..0000000 --- a/packages/ext-webpack-plugin-orig/dist/artifacts.js +++ /dev/null @@ -1,241 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.createAppJson = createAppJson; -exports.createJSDOMEnvironment = createJSDOMEnvironment; -exports.createWorkspaceJson = createWorkspaceJson; -exports.extAngularModule = exports.buildXML = void 0; - -const buildXML = function (compress, options, output) { - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION buildXML'); - let compression = ''; - - if (compress) { - compression = ` - then - fs - minify - -yui - -from=ext.js - -to=ext.js - `; - } - - return ` - - - - - - - - - - - - - - - - - - - - - - - - - - - -`.trim(); -}; - -exports.buildXML = buildXML; - -function createAppJson(theme, packages, toolkit, options, output) { - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION createAppJson'); - - const fs = require('fs'); - - var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); - var pathDifference = output.substring(process.cwd().length); - var numberOfPaths = pathDifference.split(isWindows ? "\\" : "/").length - 1; - var nodeModulePath = ''; - - for (var i = 0; i < numberOfPaths; i++) { - nodeModulePath += "../"; - } - - const config = { - framework: "ext", - toolkit, - requires: packages, - "overrides": ["overrides", "jsdom-environment.js"], - "packages": { - "dir": [nodeModulePath + "node_modules/@sencha", "packages"] - }, - output: { - base: '.', - resources: { - path: './resources', - shared: "./resources" - } - } // if theme is local add it as an additional package dir - - }; - - if (fs.existsSync(theme)) { - const path = require('path'); - - const cjson = require('cjson'); - - const packageInfo = cjson.load(path.join(theme, 'package.json')); - config.theme = packageInfo.name; - config.packages.dir.push(path.resolve(theme)); - } else { - config.theme = theme; - } - - return JSON.stringify(config, null, 2); -} - -function createJSDOMEnvironment(options, output) { - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION createJSDOMEnvironment'); - return 'window.Ext = Ext;'; -} - -function createWorkspaceJson(options, output) { - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION createWorkspaceJson'); - var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); - var pathDifference = output.substring(process.cwd().length); - var numberOfPaths = pathDifference.split(isWindows ? "\\" : "/").length - 1; - var nodeModulePath = ''; - - for (var i = 0; i < numberOfPaths; i++) { - nodeModulePath += "../"; - } - - logv(options, 'isWindows: ' + isWindows); - logv(options, 'output: ' + output); - logv(options, 'pathDifference: ' + pathDifference); - logv(options, 'numberOfPaths: ' + numberOfPaths); - logv(options, 'nodeModulePath: ' + nodeModulePath); - const config = { - "frameworks": { - "ext": nodeModulePath + "node_modules/@sencha/ext" - }, - "build": { - "dir": "${workspace.dir}/" + nodeModulePath + "build" - }, - "packages": { - "dir": ["${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages/local", "${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-ios", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-material", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-aria", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neutral", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-classic", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-gray", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-crisp", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-crisp-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-triton", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-graphite"], - "extract": "${workspace.dir}/" + nodeModulePath + "packages/remote" - } - }; - return JSON.stringify(config, null, 2); -} - -const extAngularModule = function (imports, exports, declarations) { - return ` - import { NgModule } from '@angular/core'; - ${imports} - @NgModule({ - imports: [ - ], - declarations: [ - ${declarations} ], - exports: [ - ${exports} ] - }) - export class ExtAngularModule { } - `; -}; - -exports.extAngularModule = extAngularModule; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnRpZmFjdHMuanMiXSwibmFtZXMiOlsiYnVpbGRYTUwiLCJjb21wcmVzcyIsIm9wdGlvbnMiLCJvdXRwdXQiLCJsb2d2IiwicmVxdWlyZSIsImNvbXByZXNzaW9uIiwidHJpbSIsImNyZWF0ZUFwcEpzb24iLCJ0aGVtZSIsInBhY2thZ2VzIiwidG9vbGtpdCIsImZzIiwiaXNXaW5kb3dzIiwicHJvY2VzcyIsInBsYXRmb3JtIiwibWF0Y2giLCJwYXRoRGlmZmVyZW5jZSIsInN1YnN0cmluZyIsImN3ZCIsImxlbmd0aCIsIm51bWJlck9mUGF0aHMiLCJzcGxpdCIsIm5vZGVNb2R1bGVQYXRoIiwiaSIsImNvbmZpZyIsImZyYW1ld29yayIsInJlcXVpcmVzIiwiYmFzZSIsInJlc291cmNlcyIsInBhdGgiLCJzaGFyZWQiLCJleGlzdHNTeW5jIiwiY2pzb24iLCJwYWNrYWdlSW5mbyIsImxvYWQiLCJqb2luIiwibmFtZSIsImRpciIsInB1c2giLCJyZXNvbHZlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNyZWF0ZUpTRE9NRW52aXJvbm1lbnQiLCJjcmVhdGVXb3Jrc3BhY2VKc29uIiwiZXh0QW5ndWxhck1vZHVsZSIsImltcG9ydHMiLCJleHBvcnRzIiwiZGVjbGFyYXRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQU8sTUFBTUEsUUFBUSxHQUFHLFVBQVNDLFFBQVQsRUFBbUJDLE9BQW5CLEVBQTRCQyxNQUE1QixFQUFvQztBQUMxRCxRQUFNQyxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQVAsQ0FBd0JELElBQXJDOztBQUNBQSxFQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyxtQkFBVCxDQUFKO0FBRUEsTUFBSUksV0FBVyxHQUFHLEVBQWxCOztBQUVBLE1BQUlMLFFBQUosRUFBYztBQUNaSyxJQUFBQSxXQUFXLEdBQUk7Ozs7Ozs7S0FBZjtBQVFEOztBQUVDLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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dEIsR0FBdUM7QUFwQnhDO0FBUEMsR0FBZjtBQThCQSxTQUFPa0IsSUFBSSxDQUFDQyxTQUFMLENBQWVqQixNQUFmLEVBQXVCLElBQXZCLEVBQTZCLENBQTdCLENBQVA7QUFDRDs7QUFFTSxNQUFNb0IsZ0JBQWdCLEdBQUcsVUFBU0MsT0FBVCxFQUFrQkMsT0FBbEIsRUFBMkJDLFlBQTNCLEVBQXlDO0FBQ3ZFLFNBQVE7O0lBRU5GLE9BQVE7Ozs7O0lBS1JFLFlBQWE7O0lBRWJELE9BQVE7OztHQVRWO0FBYUQsQ0FkTSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBidWlsZFhNTCA9IGZ1bmN0aW9uKGNvbXByZXNzLCBvcHRpb25zLCBvdXRwdXQpIHtcbiAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgbG9ndihvcHRpb25zLCdGVU5DVElPTiBidWlsZFhNTCcpXG4gIFxuICBsZXQgY29tcHJlc3Npb24gPSAnJ1xuXG4gIGlmIChjb21wcmVzcykge1xuICAgIGNvbXByZXNzaW9uID0gYFxuICAgICAgdGhlbiBcbiAgICAgIGZzIFxuICAgICAgbWluaWZ5IFxuICAgICAgICAteXVpIFxuICAgICAgICAtZnJvbT1leHQuanMgXG4gICAgICAgIC10bz1leHQuanNcbiAgICBgO1xuICB9XG5cbiAgICByZXR1cm4gYDxwcm9qZWN0IG5hbWU9XCJzaW1wbGUtYnVpbGRcIiBiYXNlZGlyPVwiLlwiPlxuICA8IS0tICBpbnRlcm5hbGx5LCB3YXRjaCBjYWxscyB0aGUgaW5pdCB0YXJnZXQsIHNvIG5lZWQgdG8gaGF2ZSBvbmUgaGVyZSAtLT5cbiAgPHRhcmdldCBuYW1lPVwiaW5pdFwiLz5cbiAgPHRhcmdldCBuYW1lPVwiaW5pdC1jbWRcIj5cbiAgICA8dGFza2RlZiAgcmVzb3VyY2U9XCJjb20vc2VuY2hhL2FudC9hbnRsaWIueG1sXCJcbiAgICAgICAgICAgICAgY2xhc3NwYXRoPVwiXFwke2NtZC5kaXJ9L3NlbmNoYS5qYXJcIlxuICAgICAgICAgICAgICBsb2FkZXJyZWY9XCJzZW5jaGFsb2FkZXJcIi8+XG4gICAgPHgtZXh0ZW5kLWNsYXNzcGF0aD5cbiAgICAgICAgPGphciBwYXRoPVwiXFwke2NtZC5kaXJ9L3NlbmNoYS5qYXJcIi8+XG4gICAgPC94LWV4dGVuZC1jbGFzc3BhdGg+XG4gICAgPHgtc2VuY2hhLWluaXQgcHJlZml4PVwiXCIvPlxuICAgIDx4LWNvbXBpbGUgcmVmaWQ9XCJ0aGVDb21waWxlclwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlyPVwiXFwke2Jhc2VkaXJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBpbml0T25seT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRBbGw9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDwhW0NEQVRBW1xuICAgICAgICAgICAgICAtY2xhc3NwYXRoPVxcJHtiYXNlZGlyfS9tYW5pZmVzdC5qc1xuICAgICAgICAgICAgICBsb2FkLWFwcFxuICAgICAgICAgICAgICAgICAgLXRlbXA9XFwke2Jhc2VkaXJ9L3RlbXBcbiAgICAgICAgICAgICAgICAgIC10YWc9QXBwXG4gICAgICAgIF1dPlxuICAgICAgPC94LWNvbXBpbGU+XG4gIDwvdGFyZ2V0PlxuICA8dGFyZ2V0IG5hbWU9XCJyZWJ1aWxkXCI+XG4gICAgPHgtY29tcGlsZSByZWZpZD1cInRoZUNvbXBpbGVyXCJcbiAgICAgICAgICAgICAgZGlyPVwiXFwke2Jhc2VkaXJ9XCJcbiAgICAgICAgICAgICAgaW5oZXJpdEFsbD1cInRydWVcIj5cbiAgICAgIDwhW0NEQVRBW1xuICAgICAgLS1kZWJ1Z1xuICAgICAgZXhjbHVkZVxuICAgICAgLWFsbFxuICAgICAgYW5kXG4gICAgICBpbmNsdWRlXG4gICAgICAtZj1Cb290LmpzXG4gICAgICBhbmRcbiAgICAgIGNvbmNhdGVuYXRlXG4gICAgICAgICAgZXh0LmpzXG4gICAgICBhbmRcbiAgICAgIGV4Y2x1ZGVcbiAgICAgIC1hbGxcbiAgICAgIGFuZFxuICAgICAgIyBpbmNsdWRlIHRoZW1lIG92ZXJyaWRlc1xuICAgICAgaW5jbHVkZVxuICAgICAgICAtclxuICAgICAgICAtdGFnPW92ZXJyaWRlc1xuICAgICAgYW5kXG4gICAgICAjIGluY2x1ZGUgYWxsIGpzIGZpbGVzIG5lZWRlZCBmb3IgbWFuaWZlc3QuanNcbiAgICAgIGluY2x1ZGVcbiAgICAgICAgICAtclxuICAgICAgICAgIC1mPW1hbmlmZXN0LmpzXG4gICAgICBhbmRcbiAgICAgICMgZXhjbHVkZSB0aGUgZ2VuZXJhdGVkIG1hbmlmZXN0IGZpbGUgaXRzZWxmLFxuICAgICAgIyBzaW5jZSB3ZSBkb24ndCB3YW50IHRoZSBnZW5lcmF0ZWQgYnVuZGxlIGZpbGUgdG8gY3JlYXRlIGFueSBjb21wb25lbnRzXG4gICAgICBleGNsdWRlXG4gICAgICAtZj1tYW5pZmVzdC5qc1xuICAgICAgYW5kXG4gICAgICBjb25jYXRlbmF0ZVxuICAgICAgK2FwcGVuZFxuICAgICAgICAgIGV4dC5qc1xuICAgICAgYW5kXG4gICAgICBzY3NzXG4gICAgICAgICAgLWFwcE5hbWU9QXBwXG4gICAgICAgICAgLWltYWdlU2VhcmNoUGF0aD1yZXNvdXJjZXNcbiAgICAgICAgICAtdGhlbWVOYW1lPXRyaXRvblxuICAgICAgICAgIC1yZXNvdXJjZU1hcEJhc2U9LlxuICAgICAgICAgIC1vdXRwdXQ9ZXh0LnNjc3NcbiAgICAgIGFuZFxuICAgICAgcmVzb3VyY2VzXG4gICAgICAgICAgLWV4Y2x1ZGVzPS1hbGwqLmNzc1xuICAgICAgICAgIC1vdXQ9cmVzb3VyY2VzXG4gICAgICBhbmRcbiAgICAgIHJlc291cmNlc1xuICAgICAgICAgIC1tb2RlbD10cnVlXG4gICAgICAgICAgLW91dD1yZXNvdXJjZXNcbiAgICAgIF1dPlxuICAgIDwveC1jb21waWxlPlxuICA8L3RhcmdldD5cbiAgPHRhcmdldCBuYW1lPVwiYnVpbGRcIiBkZXBlbmRzPVwiaW5pdC1jbWQscmVidWlsZFwiPlxuICAgIDx4LXNlbmNoYS1jb21tYW5kIGRpcj1cIlxcJHtiYXNlZGlyfVwiPlxuICAgICAgPCFbQ0RBVEFbXG4gICAgICBmYXNoaW9uXG4gICAgICAgICAgLXB3ZD0uXG4gICAgICAgICAgLXNwbGl0PTQwOTVcbiAgICAgICAgICAke2NvbXByZXNzID8gJy1jb21wcmVzcycgOiAnJ31cbiAgICAgICAgICAgICAgZXh0LnNjc3NcbiAgICAgICAgICBleHQuY3NzXG4gICAgICAke2NvbXByZXNzaW9ufVxuICAgICAgXV0+XG4gICAgPC94LXNlbmNoYS1jb21tYW5kPlxuICA8L3RhcmdldD5cbiAgPHRhcmdldCBuYW1lPVwid2F0Y2hcIiBkZXBlbmRzPVwiaW5pdC1jbWQsYnVpbGRcIj5cbiAgICA8eC1mYXNoaW9uLXdhdGNoXG4gICAgICByZWZOYW1lPVwiZmFzaGlvbi13YXRjaFwiXG4gICAgICBpbnB1dEZpbGU9XCJleHQuc2Nzc1wiXG4gICAgICBvdXRwdXRGaWxlPVwiZXh0LmNzc1wiXG4gICAgICBzcGxpdD1cIjQwOTVcIlxuICAgICAgY29tcHJlc3M9XCIke2NvbXByZXNzID8gJ3RydWUnIDogJ2ZhbHNlJ31cIlxuICAgICAgY29uZmlnRmlsZT1cImFwcC5qc29uXCJcbiAgICAgIGZvcms9XCJ0cnVlXCIvPlxuICAgIDx4LXdhdGNoIGNvbXBpbGVyUmVmPVwidGhlQ29tcGlsZXJcIiB0YXJnZXRzPVwicmVidWlsZFwiLz5cbiAgPC90YXJnZXQ+XG48L3Byb2plY3Q+XG5gLnRyaW0oKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwSnNvbiggdGhlbWUsIHBhY2thZ2VzLCB0b29sa2l0LCBvcHRpb25zLCBvdXRwdXQgKSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gY3JlYXRlQXBwSnNvbicpXG5cbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG5cbiAgdmFyIGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtICE9ICd1bmRlZmluZWQnICYmICEhcHJvY2Vzcy5wbGF0Zm9ybS5tYXRjaCgvXndpbi8pO1xuICB2YXIgcGF0aERpZmZlcmVuY2UgPSBvdXRwdXQuc3Vic3RyaW5nKHByb2Nlc3MuY3dkKCkubGVuZ3RoKVxuICB2YXIgbnVtYmVyT2ZQYXRocyA9IHBhdGhEaWZmZXJlbmNlLnNwbGl0KGlzV2luZG93cyA/IFwiXFxcXFwiIDogXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHZhciBub2RlTW9kdWxlUGF0aCA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXRoczsgaSsrKSB7IFxuICAgIG5vZGVNb2R1bGVQYXRoICs9IFwiLi4vXCJcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBmcmFtZXdvcms6IFwiZXh0XCIsXG4gICAgdG9vbGtpdCxcbiAgICByZXF1aXJlczogcGFja2FnZXMsXG4gICAgXCJvdmVycmlkZXNcIjogW1xuICAgICAgXCJvdmVycmlkZXNcIixcbiAgICAgIFwianNkb20tZW52aXJvbm1lbnQuanNcIlxuICAgIF0sXG4gICAgXCJwYWNrYWdlc1wiOiB7XG4gICAgICBcImRpclwiOiBbXG4gICAgICAgIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYVwiLFxuICAgICAgICBcInBhY2thZ2VzXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIG91dHB1dDoge1xuICAgICAgYmFzZTogJy4nLFxuICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgIHBhdGg6ICcuL3Jlc291cmNlcycsXG4gICAgICAgIHNoYXJlZDogXCIuL3Jlc291cmNlc1wiXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlbWUgaXMgbG9jYWwgYWRkIGl0IGFzIGFuIGFkZGl0aW9uYWwgcGFja2FnZSBkaXJcbiAgaWYgKGZzLmV4aXN0c1N5bmModGhlbWUpKSB7XG4gICAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gICAgICBjb25zdCBjanNvbiA9IHJlcXVpcmUoJ2Nqc29uJylcbiAgICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gY2pzb24ubG9hZChwYXRoLmpvaW4odGhlbWUsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICBjb25maWcudGhlbWUgPSBwYWNrYWdlSW5mby5uYW1lO1xuICAgICAgY29uZmlnLnBhY2thZ2VzLmRpci5wdXNoKHBhdGgucmVzb2x2ZSh0aGVtZSkpO1xuICB9IGVsc2Uge1xuICAgICAgY29uZmlnLnRoZW1lID0gdGhlbWU7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUpTRE9NRW52aXJvbm1lbnQob3B0aW9ucywgb3V0cHV0KSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gY3JlYXRlSlNET01FbnZpcm9ubWVudCcpXG5cbiAgcmV0dXJuICd3aW5kb3cuRXh0ID0gRXh0Oydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZUpzb24ob3B0aW9ucywgb3V0cHV0KSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gY3JlYXRlV29ya3NwYWNlSnNvbicpXG5cbiAgdmFyIGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtICE9ICd1bmRlZmluZWQnICYmICEhcHJvY2Vzcy5wbGF0Zm9ybS5tYXRjaCgvXndpbi8pO1xuICB2YXIgcGF0aERpZmZlcmVuY2UgPSBvdXRwdXQuc3Vic3RyaW5nKHByb2Nlc3MuY3dkKCkubGVuZ3RoKVxuICB2YXIgbnVtYmVyT2ZQYXRocyA9IHBhdGhEaWZmZXJlbmNlLnNwbGl0KGlzV2luZG93cyA/IFwiXFxcXFwiIDogXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHZhciBub2RlTW9kdWxlUGF0aCA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXRoczsgaSsrKSB7IFxuICAgIG5vZGVNb2R1bGVQYXRoICs9IFwiLi4vXCJcbiAgfVxuXG4gIGxvZ3Yob3B0aW9ucywnaXNXaW5kb3dzOiAnICsgaXNXaW5kb3dzKVxuICBsb2d2KG9wdGlvbnMsJ291dHB1dDogJyArIG91dHB1dClcbiAgbG9ndihvcHRpb25zLCdwYXRoRGlmZmVyZW5jZTogJyArIHBhdGhEaWZmZXJlbmNlKVxuICBsb2d2KG9wdGlvbnMsJ251bWJlck9mUGF0aHM6ICcgKyBudW1iZXJPZlBhdGhzKVxuICBsb2d2KG9wdGlvbnMsJ25vZGVNb2R1bGVQYXRoOiAnICsgbm9kZU1vZHVsZVBhdGgpXG5cbiAgY29uc3QgY29uZmlnID0ge1xuICAgIFwiZnJhbWV3b3Jrc1wiOiB7XG4gICAgICBcImV4dFwiOiBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0XCJcbiAgICB9LFxuICAgIFwiYnVpbGRcIjoge1xuICAgICAgXCJkaXJcIjogXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcImJ1aWxkXCJcbiAgICB9LFxuICAgIFwicGFja2FnZXNcIjoge1xuICAgICAgXCJkaXJcIjogW1xuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwiZXh0LVwiICsgb3B0aW9ucy5mcmFtZXdvcmsgKyBcIi9wYWNrYWdlcy9sb2NhbFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwiZXh0LVwiICsgb3B0aW9ucy5mcmFtZXdvcmsgKyBcIi9wYWNrYWdlc1wiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGFcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX1cIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtYmFzZVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1pb3NcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtbWF0ZXJpYWxcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtYXJpYVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1uZXV0cmFsXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWNsYXNzaWNcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtZ3JheVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1jcmlzcFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1jcmlzcC10b3VjaFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1uZXB0dW5lXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLW5lcHR1bmUtdG91Y2hcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtdHJpdG9uXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWdyYXBoaXRlXCJcbiAgICAgIF0sXG4gICAgICBcImV4dHJhY3RcIjogXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcInBhY2thZ2VzL3JlbW90ZVwiXG4gICAgfVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpXG59XG5cbmV4cG9ydCBjb25zdCBleHRBbmd1bGFyTW9kdWxlID0gZnVuY3Rpb24oaW1wb3J0cywgZXhwb3J0cywgZGVjbGFyYXRpb25zKSB7XG4gIHJldHVybiBgXG4gIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICR7aW1wb3J0c31cbiAgQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgJHtkZWNsYXJhdGlvbnN9ICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgJHtleHBvcnRzfSAgXVxuICB9KVxuICBleHBvcnQgY2xhc3MgRXh0QW5ndWxhck1vZHVsZSB7IH1cbiAgYFxufVxuIl19 \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/dist/extjsUtil.js b/packages/ext-webpack-plugin-orig/dist/extjsUtil.js deleted file mode 100644 index 97fb0af..0000000 --- a/packages/ext-webpack-plugin-orig/dist/extjsUtil.js +++ /dev/null @@ -1,232 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getValidateOptions = getValidateOptions; -exports.getDefaultOptions = getDefaultOptions; -exports.getDefaultVars = getDefaultVars; -exports._afterCompile = _afterCompile; -exports._prepareForBuild = _prepareForBuild; - -function getValidateOptions() { - return { - "type": "object", - "properties": { - "framework": { - "type": ["string"] - }, - "port": { - "type": ["integer"] - }, - "emit": { - "type": ["boolean"] - }, - "browser": { - "type": ["boolean"] - }, - "watch": { - "type": ["string"] - }, - "profile": { - "type": ["string"] - }, - "environment": { - "type": ["string"] - }, - "verbose": { - "type": ["string"] - }, - // "theme": {"type": [ "string" ]}, - // "toolkit": {"type": [ "string" ]}, - "treeshake": { - "type": ["boolean"] // "packages": {"type": [ "string", "array" ]}, - - } - }, - "additionalProperties": false // "errorMessage": { - // "option": "should be {Boolean} (https:/github.com/org/repo#anchor)" - // } - - }; -} - -function getDefaultOptions() { - return { - port: 1962, - emit: true, - browser: true, - watch: 'yes', - profile: 'desktop', - environment: 'development', - verbose: 'no' - }; -} - -function getDefaultVars() { - return { - watchStarted: false, - firstTime: true, - browserCount: 0, - cwd: process.cwd(), - extPath: '.', - pluginErrors: [], - lastNumFiles: 0, - lastMilliseconds: 0, - lastMillisecondsAppJson: 0, - files: ['./app.json'], - dirs: ['./app', './packages'] - }; -} - -function _afterCompile(compilation, vars, options) { - try { - require('./pluginUtil').logv(options, 'FUNCTION ext-after-compile'); - - const path = require('path'); - - let { - files, - dirs - } = vars; - const { - cwd - } = vars; - files = typeof files === 'string' ? [files] : files; - dirs = typeof dirs === 'string' ? [dirs] : dirs; - - const { - fileDependencies, - contextDependencies - } = _getFileAndContextDeps(compilation, files, dirs, cwd, options); - - if (files.length > 0) { - fileDependencies.forEach(file => { - compilation.fileDependencies.add(path.resolve(file)); - }); - } - - if (dirs.length > 0) { - contextDependencies.forEach(context => { - compilation.contextDependencies.add(context); - }); - } - } catch (e) { - console.log(e); - compilation.errors.push('_afterCompile: ' + e); - } -} - -function _getFileAndContextDeps(compilation, files, dirs, cwd, options) { - require('./pluginUtil').logv(options, 'FUNCTION _getFileAndContextDeps'); - - const uniq = require('lodash.uniq'); - - const isGlob = require('is-glob'); - - const { - fileDependencies, - contextDependencies - } = compilation; - const isWebpack4 = compilation.hooks; - let fds = isWebpack4 ? [...fileDependencies] : fileDependencies; - let cds = isWebpack4 ? [...contextDependencies] : contextDependencies; - - if (files.length > 0) { - files.forEach(pattern => { - let f = pattern; - - if (isGlob(pattern)) { - f = glob.sync(pattern, { - cwd, - dot: true, - absolute: true - }); - } - - fds = fds.concat(f); - }); - fds = uniq(fds); - } - - if (dirs.length > 0) { - cds = uniq(cds.concat(dirs)); - } - - return { - fileDependencies: fds, - contextDependencies: cds - }; -} - -function _prepareForBuild(app, vars, options, output, compilation) { - try { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, '_prepareForBuild'); - - const fs = require('fs'); - - const recursiveReadSync = require('recursive-readdir-sync'); - - var watchedFiles = []; - - try { - watchedFiles = recursiveReadSync('./app').concat(recursiveReadSync('./packages')); - } catch (err) { - if (err.errno === 34) { - console.log('Path does not exist'); - } else { - throw err; - } - } - - var currentNumFiles = watchedFiles.length; - logv(options, 'watchedFiles: ' + currentNumFiles); - var doBuild = true; // var doBuild = false - // for (var file in watchedFiles) { - // if (vars.lastMilliseconds < fs.statSync(watchedFiles[file]).mtimeMs) { - // if (watchedFiles[file].indexOf("scss") != -1) {doBuild=true;break;} - // } - // } - // if (vars.lastMilliseconds < fs.statSync('./app.json').mtimeMs) { - // doBuild=true - // } - - logv(options, 'doBuild: ' + doBuild); - vars.lastMilliseconds = new Date().getTime(); - var filesource = 'this file enables client reload'; - compilation.assets[currentNumFiles + 'FilesUnderAppFolder.md'] = { - source: function () { - return filesource; - }, - size: function () { - return filesource.length; - } - }; - logv(options, 'currentNumFiles: ' + currentNumFiles); - logv(options, 'vars.lastNumFiles: ' + vars.lastNumFiles); - logv(options, 'doBuild: ' + doBuild); - - if (currentNumFiles != vars.lastNumFiles || doBuild) { - vars.rebuild = true; - var bundleDir = output.replace(process.cwd(), ''); - - if (bundleDir.trim() == '') { - bundleDir = './'; - } - - log(app + 'Building Ext bundle at: ' + bundleDir); - } else { - vars.rebuild = false; - } - - vars.lastNumFiles = currentNumFiles; - } catch (e) { - console.log(e); - compilation.errors.push('_prepareForBuild: ' + e); - } -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRqc1V0aWwuanMiXSwibmFtZXMiOlsiZ2V0VmFsaWRhdGVPcHRpb25zIiwiZ2V0RGVmYXVsdE9wdGlvbnMiLCJwb3J0IiwiZW1pdCIsImJyb3dzZXIiLCJ3YXRjaCIsInByb2ZpbGUiLCJlbnZpcm9ubWVudCIsInZlcmJvc2UiLCJnZXREZWZhdWx0VmFycyIsIndhdGNoU3RhcnRlZCIsImZpcnN0VGltZSIsImJyb3dzZXJDb3VudCIsImN3ZCIsInByb2Nlc3MiLCJleHRQYXRoIiwicGx1Z2luRXJyb3JzIiwibGFzdE51bUZpbGVzIiwibGFzdE1pbGxpc2Vjb25kcyIsImxhc3RNaWxsaXNlY29uZHNBcHBKc29uIiwiZmlsZXMiLCJkaXJzIiwiX2FmdGVyQ29tcGlsZSIsImNvbXBpbGF0aW9uIiwidmFycyIsIm9wdGlvbnMiLCJyZXF1aXJlIiwibG9ndiIsInBhdGgiLCJmaWxlRGVwZW5kZW5jaWVzIiwiY29udGV4dERlcGVuZGVuY2llcyIsIl9nZXRGaWxlQW5kQ29udGV4dERlcHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiZmlsZSIsImFkZCIsInJlc29sdmUiLCJjb250ZXh0IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJlcnJvcnMiLCJwdXNoIiwidW5pcSIsImlzR2xvYiIsImlzV2VicGFjazQiLCJob29rcyIsImZkcyIsImNkcyIsInBhdHRlcm4iLCJmIiwiZ2xvYiIsInN5bmMiLCJkb3QiLCJhYnNvbHV0ZSIsImNvbmNhdCIsIl9wcmVwYXJlRm9yQnVpbGQiLCJhcHAiLCJvdXRwdXQiLCJmcyIsInJlY3Vyc2l2ZVJlYWRTeW5jIiwid2F0Y2hlZEZpbGVzIiwiZXJyIiwiZXJybm8iLCJjdXJyZW50TnVtRmlsZXMiLCJkb0J1aWxkIiwiRGF0ZSIsImdldFRpbWUiLCJmaWxlc291cmNlIiwiYXNzZXRzIiwic291cmNlIiwic2l6ZSIsInJlYnVpbGQiLCJidW5kbGVEaXIiLCJyZXBsYWNlIiwidHJpbSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7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QjtBQUZvQixLQUFqRTtBQUtBTCxJQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyxzQkFBc0J1QyxlQUEvQixDQUFKO0FBQ0FyQyxJQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyx3QkFBd0JELElBQUksQ0FBQ1AsWUFBdEMsQ0FBSjtBQUNBVSxJQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyxjQUFjd0MsT0FBdkIsQ0FBSjs7QUFFQSxRQUFJRCxlQUFlLElBQUl4QyxJQUFJLENBQUNQLFlBQXhCLElBQXdDZ0QsT0FBNUMsRUFBcUQ7QUFDbkR6QyxNQUFBQSxJQUFJLENBQUNnRCxPQUFMLEdBQWUsSUFBZjtBQUNBLFVBQUlDLFNBQVMsR0FBR2YsTUFBTSxDQUFDZ0IsT0FBUCxDQUFlNUQsT0FBTyxDQUFDRCxHQUFSLEVBQWYsRUFBOEIsRUFBOUIsQ0FBaEI7O0FBQ0EsVUFBSTRELFNBQVMsQ0FBQ0UsSUFBVixNQUFvQixFQUF4QixFQUE0QjtBQUFDRixRQUFBQSxTQUFTLEdBQUcsSUFBWjtBQUFpQjs7QUFDOUNqQyxNQUFBQSxHQUFHLENBQUNpQixHQUFHLEdBQUcsMEJBQU4sR0FBbUNnQixTQUFwQyxDQUFIO0FBQ0QsS0FMRCxNQU1LO0FBQ0hqRCxNQUFBQSxJQUFJLENBQUNnRCxPQUFMLEdBQWUsS0FBZjtBQUNEOztBQUNEaEQsSUFBQUEsSUFBSSxDQUFDUCxZQUFMLEdBQW9CK0MsZUFBcEI7QUFDRCxHQTlDRCxDQStDQSxPQUFNMUIsQ0FBTixFQUFTO0FBQ1BDLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0FmLElBQUFBLFdBQVcsQ0FBQ2tCLE1BQVosQ0FBbUJDLElBQW5CLENBQXdCLHVCQUF1QkosQ0FBL0M7QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRlT3B0aW9ucygpIHtcbiAgcmV0dXJuIHtcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgXCJmcmFtZXdvcmtcIjogICB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiBdfSxcbiAgICAgIFwicG9ydFwiOiAgICAgICAge1widHlwZVwiOiBbIFwiaW50ZWdlclwiIF19LFxuICAgICAgXCJlbWl0XCI6ICAgICAgICB7XCJ0eXBlXCI6IFsgXCJib29sZWFuXCIgXX0sXG4gICAgICBcImJyb3dzZXJcIjogICAgIHtcInR5cGVcIjogWyBcImJvb2xlYW5cIiBdfSxcbiAgICAgIFwid2F0Y2hcIjogICAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcInByb2ZpbGVcIjogICAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiIF19LFxuICAgICAgXCJlbnZpcm9ubWVudFwiOiB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiBdfSxcbiAgICAgIFwidmVyYm9zZVwiOiAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4vLyAgICAgIFwidGhlbWVcIjogICAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4vLyAgICAgIFwidG9vbGtpdFwiOiAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcInRyZWVzaGFrZVwiOiAgIHtcInR5cGVcIjogWyBcImJvb2xlYW5cIiBdfVxuLy8gICAgICBcInBhY2thZ2VzXCI6ICAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiLCBcImFycmF5XCIgXX0sXG5cbiAgICB9LFxuICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICAvLyBcImVycm9yTWVzc2FnZVwiOiB7XG4gICAgLy8gICBcIm9wdGlvblwiOiBcInNob3VsZCBiZSB7Qm9vbGVhbn0gKGh0dHBzOi9naXRodWIuY29tL29yZy9yZXBvI2FuY2hvcilcIlxuICAgIC8vIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgcG9ydDogMTk2MixcbiAgICBlbWl0OiB0cnVlLFxuICAgIGJyb3dzZXI6IHRydWUsXG4gICAgd2F0Y2g6ICd5ZXMnLFxuICAgIHByb2ZpbGU6ICdkZXNrdG9wJywgXG4gICAgZW52aXJvbm1lbnQ6ICdkZXZlbG9wbWVudCcsIFxuICAgIHZlcmJvc2U6ICdubydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhcnMoKSB7XG4gIHJldHVybiB7XG4gICAgd2F0Y2hTdGFydGVkIDogZmFsc2UsXG4gICAgZmlyc3RUaW1lIDogdHJ1ZSxcbiAgICBicm93c2VyQ291bnQgOiAwLFxuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBleHRQYXRoOiAnLicsXG4gICAgcGx1Z2luRXJyb3JzOiBbXSxcbiAgICBsYXN0TnVtRmlsZXM6IDAsXG4gICAgbGFzdE1pbGxpc2Vjb25kczogMCxcbiAgICBsYXN0TWlsbGlzZWNvbmRzQXBwSnNvbjogMCxcbiAgICBmaWxlczogWycuL2FwcC5qc29uJ10sXG4gICAgZGlyczogWycuL2FwcCcsJy4vcGFja2FnZXMnXVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfYWZ0ZXJDb21waWxlKGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndihvcHRpb25zLCdGVU5DVElPTiBleHQtYWZ0ZXItY29tcGlsZScpXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgIGxldCB7IGZpbGVzLCBkaXJzIH0gPSB2YXJzXG4gICAgY29uc3QgeyBjd2QgfSA9IHZhcnNcbiAgICBmaWxlcyA9IHR5cGVvZiBmaWxlcyA9PT0gJ3N0cmluZycgPyBbZmlsZXNdIDogZmlsZXNcbiAgICBkaXJzID0gdHlwZW9mIGRpcnMgPT09ICdzdHJpbmcnID8gW2RpcnNdIDogZGlyc1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVEZXBlbmRlbmNpZXMsXG4gICAgICBjb250ZXh0RGVwZW5kZW5jaWVzLFxuICAgIH0gPSBfZ2V0RmlsZUFuZENvbnRleHREZXBzKGNvbXBpbGF0aW9uLCBmaWxlcywgZGlycywgY3dkLCBvcHRpb25zKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZmlsZURlcGVuZGVuY2llcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIGNvbXBpbGF0aW9uLmZpbGVEZXBlbmRlbmNpZXMuYWRkKHBhdGgucmVzb2x2ZShmaWxlKSk7XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoZGlycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb250ZXh0RGVwZW5kZW5jaWVzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29tcGlsYXRpb24uY29udGV4dERlcGVuZGVuY2llcy5hZGQoY29udGV4dCk7XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBjYXRjaChlKSB7XG4gICAgY29uc29sZS5sb2coZSlcbiAgICBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX2FmdGVyQ29tcGlsZTogJyArIGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldEZpbGVBbmRDb250ZXh0RGVwcyhjb21waWxhdGlvbiwgZmlsZXMsIGRpcnMsIGN3ZCwgb3B0aW9ucykge1xuICByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIF9nZXRGaWxlQW5kQ29udGV4dERlcHMnKVxuICBjb25zdCB1bmlxID0gcmVxdWlyZSgnbG9kYXNoLnVuaXEnKVxuICBjb25zdCBpc0dsb2IgPSByZXF1aXJlKCdpcy1nbG9iJylcblxuICBjb25zdCB7IGZpbGVEZXBlbmRlbmNpZXMsIGNvbnRleHREZXBlbmRlbmNpZXMgfSA9IGNvbXBpbGF0aW9uO1xuICBjb25zdCBpc1dlYnBhY2s0ID0gY29tcGlsYXRpb24uaG9va3M7XG4gIGxldCBmZHMgPSBpc1dlYnBhY2s0ID8gWy4uLmZpbGVEZXBlbmRlbmNpZXNdIDogZmlsZURlcGVuZGVuY2llcztcbiAgbGV0IGNkcyA9IGlzV2VicGFjazQgPyBbLi4uY29udGV4dERlcGVuZGVuY2llc10gOiBjb250ZXh0RGVwZW5kZW5jaWVzO1xuICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZpbGVzLmZvckVhY2goKHBhdHRlcm4pID0+IHtcbiAgICAgIGxldCBmID0gcGF0dGVyblxuICAgICAgaWYgKGlzR2xvYihwYXR0ZXJuKSkge1xuICAgICAgICBmID0gZ2xvYi5zeW5jKHBhdHRlcm4sIHsgY3dkLCBkb3Q6IHRydWUsIGFic29sdXRlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBmZHMgPSBmZHMuY29uY2F0KGYpXG4gICAgfSlcbiAgICBmZHMgPSB1bmlxKGZkcylcbiAgfVxuICBpZiAoZGlycy5sZW5ndGggPiAwKSB7XG4gICAgY2RzID0gdW5pcShjZHMuY29uY2F0KGRpcnMpKVxuICB9XG4gIHJldHVybiB7IGZpbGVEZXBlbmRlbmNpZXM6IGZkcywgY29udGV4dERlcGVuZGVuY2llczogY2RzIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmVwYXJlRm9yQnVpbGQoYXBwLCB2YXJzLCBvcHRpb25zLCBvdXRwdXQsIGNvbXBpbGF0aW9uKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbG9nID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nXG4gICAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgICBsb2d2KG9wdGlvbnMsJ19wcmVwYXJlRm9yQnVpbGQnKVxuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuICAgIGNvbnN0IHJlY3Vyc2l2ZVJlYWRTeW5jID0gcmVxdWlyZSgncmVjdXJzaXZlLXJlYWRkaXItc3luYycpXG4gICAgdmFyIHdhdGNoZWRGaWxlcz1bXVxuICAgIHRyeSB7d2F0Y2hlZEZpbGVzID0gcmVjdXJzaXZlUmVhZFN5bmMoJy4vYXBwJykuY29uY2F0KHJlY3Vyc2l2ZVJlYWRTeW5jKCcuL3BhY2thZ2VzJykpfVxuICAgIGNhdGNoKGVycikge2lmKGVyci5lcnJubyA9PT0gMzQpe2NvbnNvbGUubG9nKCdQYXRoIGRvZXMgbm90IGV4aXN0Jyk7fSBlbHNlIHt0aHJvdyBlcnI7fX1cbiAgICB2YXIgY3VycmVudE51bUZpbGVzID0gd2F0Y2hlZEZpbGVzLmxlbmd0aFxuICAgIGxvZ3Yob3B0aW9ucywnd2F0Y2hlZEZpbGVzOiAnICsgY3VycmVudE51bUZpbGVzKVxuICAgIHZhciBkb0J1aWxkID0gdHJ1ZVxuXG4gICAgLy8gdmFyIGRvQnVpbGQgPSBmYWxzZVxuICAgIC8vIGZvciAodmFyIGZpbGUgaW4gd2F0Y2hlZEZpbGVzKSB7XG4gICAgLy8gICBpZiAodmFycy5sYXN0TWlsbGlzZWNvbmRzIDwgZnMuc3RhdFN5bmMod2F0Y2hlZEZpbGVzW2ZpbGVdKS5tdGltZU1zKSB7XG4gICAgLy8gICAgIGlmICh3YXRjaGVkRmlsZXNbZmlsZV0uaW5kZXhPZihcInNjc3NcIikgIT0gLTEpIHtkb0J1aWxkPXRydWU7YnJlYWs7fVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvLyBpZiAodmFycy5sYXN0TWlsbGlzZWNvbmRzIDwgZnMuc3RhdFN5bmMoJy4vYXBwLmpzb24nKS5tdGltZU1zKSB7XG4gICAgLy8gICBkb0J1aWxkPXRydWVcbiAgICAvLyB9XG4gICAgXG4gICAgbG9ndihvcHRpb25zLCdkb0J1aWxkOiAnICsgZG9CdWlsZClcblxuICAgIHZhcnMubGFzdE1pbGxpc2Vjb25kcyA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpXG4gICAgdmFyIGZpbGVzb3VyY2UgPSAndGhpcyBmaWxlIGVuYWJsZXMgY2xpZW50IHJlbG9hZCdcbiAgICBjb21waWxhdGlvbi5hc3NldHNbY3VycmVudE51bUZpbGVzICsgJ0ZpbGVzVW5kZXJBcHBGb2xkZXIubWQnXSA9IHtcbiAgICAgIHNvdXJjZTogZnVuY3Rpb24oKSB7cmV0dXJuIGZpbGVzb3VyY2V9LFxuICAgICAgc2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJuIGZpbGVzb3VyY2UubGVuZ3RofVxuICAgIH1cblxuICAgIGxvZ3Yob3B0aW9ucywnY3VycmVudE51bUZpbGVzOiAnICsgY3VycmVudE51bUZpbGVzKVxuICAgIGxvZ3Yob3B0aW9ucywndmFycy5sYXN0TnVtRmlsZXM6ICcgKyB2YXJzLmxhc3ROdW1GaWxlcylcbiAgICBsb2d2KG9wdGlvbnMsJ2RvQnVpbGQ6ICcgKyBkb0J1aWxkKVxuXG4gICAgaWYgKGN1cnJlbnROdW1GaWxlcyAhPSB2YXJzLmxhc3ROdW1GaWxlcyB8fCBkb0J1aWxkKSB7XG4gICAgICB2YXJzLnJlYnVpbGQgPSB0cnVlXG4gICAgICB2YXIgYnVuZGxlRGlyID0gb3V0cHV0LnJlcGxhY2UocHJvY2Vzcy5jd2QoKSwgJycpXG4gICAgICBpZiAoYnVuZGxlRGlyLnRyaW0oKSA9PSAnJykge2J1bmRsZURpciA9ICcuLyd9XG4gICAgICBsb2coYXBwICsgJ0J1aWxkaW5nIEV4dCBidW5kbGUgYXQ6ICcgKyBidW5kbGVEaXIpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFycy5yZWJ1aWxkID0gZmFsc2VcbiAgICB9XG4gICAgdmFycy5sYXN0TnVtRmlsZXMgPSBjdXJyZW50TnVtRmlsZXNcbiAgfVxuICBjYXRjaChlKSB7XG4gICAgY29uc29sZS5sb2coZSlcbiAgICBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX3ByZXBhcmVGb3JCdWlsZDogJyArIGUpXG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/dist/index.js b/packages/ext-webpack-plugin-orig/dist/index.js deleted file mode 100644 index 703d232..0000000 --- a/packages/ext-webpack-plugin-orig/dist/index.js +++ /dev/null @@ -1,82 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -require('@babel/polyfill'); - -const v = require('./pluginUtil').logv; - -class ExtWebpackPlugin { - constructor(options) { - this.plugin = require(`./pluginUtil`)._constructor(options); - } - - apply(compiler) { - const vars = this.plugin.vars; - const options = this.plugin.options; - v(options, 'FUNCTION apply'); - - if (!compiler.hooks) { - console.log('not webpack 4'); - return; - } - - compiler.hooks.thisCompilation.tap(`ext-this-compilation`, compilation => { - v(options, 'HOOK thisCompilation'); - - if (vars.pluginErrors.length > 0) { - compilation.errors.push(new Error(vars.pluginErrors.join(""))); - } - }); - - if (vars.pluginErrors.length > 0) { - return; - } - - if (vars.framework == 'extjs') { - compiler.hooks.compilation.tap(`ext-compilation`, compilation => { - v(options, 'HOOK compilation (empty)'); - }); - compiler.hooks.afterCompile.tap('ext-after-compile', compilation => { - v(options, 'HOOK afterCompile'); - - require(`./extjsUtil`)._afterCompile(compilation, vars, options); - }); - } else { - compiler.hooks.compilation.tap(`ext-compilation`, compilation => { - v(options, 'HOOK compilation'); - - require(`./pluginUtil`)._compilation(compiler, compilation, vars, options); - }); - compiler.hooks.afterCompile.tap('ext-after-compile', compilation => { - v(options, 'HOOK afterCompile'); - - require(`./pluginUtil`)._afterCompile(compiler, compilation, vars, options); - }); - } - - if (options.treeshake == true && options.environment == 'production' || options.treeshake == false && options.environment != 'production') { - compiler.hooks.emit.tapAsync(`ext-emit`, (compilation, callback) => { - v(options, 'HOOK emit'); - - require(`./pluginUtil`).emit(compiler, compilation, vars, options, callback); - }); - } - - compiler.hooks.done.tap(`ext-done`, () => { - v(options, 'HOOK done'); - - require(`./pluginUtil`)._done(vars, options); - - require('./pluginUtil').log(vars.app + `Completed ext-webpack-plugin processing`); - }); - } - -} - -exports.default = ExtWebpackPlugin; -module.exports = exports.default; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwidiIsImxvZ3YiLCJFeHRXZWJwYWNrUGx1Z2luIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicGx1Z2luIiwiX2NvbnN0cnVjdG9yIiwiYXBwbHkiLCJjb21waWxlciIsInZhcnMiLCJob29rcyIsImNvbnNvbGUiLCJsb2ciLCJ0aGlzQ29tcGlsYXRpb24iLCJ0YXAiLCJjb21waWxhdGlvbiIsInBsdWdpbkVycm9ycyIsImxlbmd0aCIsImVycm9ycyIsInB1c2giLCJFcnJvciIsImpvaW4iLCJmcmFtZXdvcmsiLCJhZnRlckNvbXBpbGUiLCJfYWZ0ZXJDb21waWxlIiwiX2NvbXBpbGF0aW9uIiwidHJlZXNoYWtlIiwiZW52aXJvbm1lbnQiLCJlbWl0IiwidGFwQXN5bmMiLCJjYWxsYmFjayIsImRvbmUiLCJfZG9uZSIsImFwcCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUFDQUEsT0FBTyxDQUFDLGlCQUFELENBQVA7O0FBQ0EsTUFBTUMsQ0FBQyxHQUFHRCxPQUFPLENBQUMsY0FBRCxDQUFQLENBQXdCRSxJQUFsQzs7QUFDZSxNQUFNQyxnQkFBTixDQUF1QjtBQUNwQ0MsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVU7QUFDbkIsU0FBS0MsTUFBTCxHQUFjTixPQUFPLENBQUUsY0FBRixDQUFQLENBQXdCTyxZQUF4QixDQUFxQ0YsT0FBckMsQ0FBZDtBQUNEOztBQUVERyxFQUFBQSxLQUFLLENBQUNDLFFBQUQsRUFBVztBQUNkLFVBQU1DLElBQUksR0FBRyxLQUFLSixNQUFMLENBQVlJLElBQXpCO0FBQ0EsVUFBTUwsT0FBTyxHQUFHLEtBQUtDLE1BQUwsQ0FBWUQsT0FBNUI7QUFDQUosSUFBQUEsQ0FBQyxDQUFDSSxPQUFELEVBQVMsZ0JBQVQsQ0FBRDs7QUFDQSxRQUFJLENBQUNJLFFBQVEsQ0FBQ0UsS0FBZCxFQUFxQjtBQUFDQyxNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxl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eUIsVUFBekIsRUFBb0MsTUFBTTtBQUN4Q2QsTUFBQUEsQ0FBQyxDQUFDSSxPQUFELEVBQVMsV0FBVCxDQUFEOztBQUNBTCxNQUFBQSxPQUFPLENBQUUsY0FBRixDQUFQLENBQXdCaUMsS0FBeEIsQ0FBOEJ2QixJQUE5QixFQUFvQ0wsT0FBcEM7O0FBQ0FMLE1BQUFBLE9BQU8sQ0FBQyxjQUFELENBQVAsQ0FBd0JhLEdBQXhCLENBQTRCSCxJQUFJLENBQUN3QixHQUFMLEdBQVkseUNBQXhDO0FBQ0QsS0FKRDtBQUtEOztBQXZEbUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcbnJlcXVpcmUoJ0BiYWJlbC9wb2x5ZmlsbCcpXG5jb25zdCB2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0V2VicGFja1BsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnBsdWdpbiA9IHJlcXVpcmUoYC4vcGx1Z2luVXRpbGApLl9jb25zdHJ1Y3RvcihvcHRpb25zKVxuICB9XG5cbiAgYXBwbHkoY29tcGlsZXIpIHtcbiAgICBjb25zdCB2YXJzID0gdGhpcy5wbHVnaW4udmFyc1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnBsdWdpbi5vcHRpb25zXG4gICAgdihvcHRpb25zLCdGVU5DVElPTiBhcHBseScpXG4gICAgaWYgKCFjb21waWxlci5ob29rcykge2NvbnNvbGUubG9nKCdub3Qgd2VicGFjayA0Jyk7cmV0dXJufVxuXG4gICAgY29tcGlsZXIuaG9va3MudGhpc0NvbXBpbGF0aW9uLnRhcChgZXh0LXRoaXMtY29tcGlsYXRpb25gLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgIHYob3B0aW9ucywnSE9PSyB0aGlzQ29tcGlsYXRpb24nKVxuICAgICAgaWYgKHZhcnMucGx1Z2luRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29tcGlsYXRpb24uZXJyb3JzLnB1c2goIG5ldyBFcnJvcih2YXJzLnBsdWdpbkVycm9ycy5qb2luKFwiXCIpKSApXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAodmFycy5wbHVnaW5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCB2YXJzLmZyYW1ld29yayA9PSAnZXh0anMnKSB7XG4gICAgICBjb21waWxlci5ob29rcy5jb21waWxhdGlvbi50YXAoYGV4dC1jb21waWxhdGlvbmAsIChjb21waWxhdGlvbikgPT4ge1xuICAgICAgICB2KG9wdGlvbnMsJ0hPT0sgY29tcGlsYXRpb24gKGVtcHR5KScpXG4gICAgICB9KVxuICAgICAgY29tcGlsZXIuaG9va3MuYWZ0ZXJDb21waWxlLnRhcCgnZXh0LWFmdGVyLWNvbXBpbGUnLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgICAgdihvcHRpb25zLCdIT09LIGFmdGVyQ29tcGlsZScpXG4gICAgICAgIHJlcXVpcmUoYC4vZXh0anNVdGlsYCkuX2FmdGVyQ29tcGlsZShjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucylcbiAgICAgIH0pXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29tcGlsZXIuaG9va3MuY29tcGlsYXRpb24udGFwKGBleHQtY29tcGlsYXRpb25gLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgICAgdihvcHRpb25zLCdIT09LIGNvbXBpbGF0aW9uJylcbiAgICAgICAgcmVxdWlyZShgLi9wbHVnaW5VdGlsYCkuX2NvbXBpbGF0aW9uKGNvbXBpbGVyLCBjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucylcbiAgICAgIH0pXG4gICAgICBjb21waWxlci5ob29rcy5hZnRlckNvbXBpbGUudGFwKCdleHQtYWZ0ZXItY29tcGlsZScsIChjb21waWxhdGlvbikgPT4ge1xuICAgICAgICB2KG9wdGlvbnMsJ0hPT0sgYWZ0ZXJDb21waWxlJylcbiAgICAgICAgcmVxdWlyZShgLi9wbHVnaW5VdGlsYCkuX2FmdGVyQ29tcGlsZShjb21waWxlciwgY29tcGlsYXRpb24sIHZhcnMsIG9wdGlvbnMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmKChvcHRpb25zLnRyZWVzaGFrZSA9PSB0cnVlICYmIG9wdGlvbnMuZW52aXJvbm1lbnQgPT0gJ3Byb2R1Y3Rpb24nKSB8fFxuICAgICAgIChvcHRpb25zLnRyZWVzaGFrZSA9PSBmYWxzZSAmJiBvcHRpb25zLmVudmlyb25tZW50ICE9ICdwcm9kdWN0aW9uJykpXG4gICAge1xuICAgICAgY29tcGlsZXIuaG9va3MuZW1pdC50YXBBc3luYyhgZXh0LWVtaXRgLCAoY29tcGlsYXRpb24sIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHYob3B0aW9ucywnSE9PSyBlbWl0JylcbiAgICAgICAgcmVxdWlyZShgLi9wbHVnaW5VdGlsYCkuZW1pdChjb21waWxlciwgY29tcGlsYXRpb24sIHZhcnMsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb21waWxlci5ob29rcy5kb25lLnRhcChgZXh0LWRvbmVgLCAoKSA9PiB7XG4gICAgICB2KG9wdGlvbnMsJ0hPT0sgZG9uZScpXG4gICAgICByZXF1aXJlKGAuL3BsdWdpblV0aWxgKS5fZG9uZSh2YXJzLCBvcHRpb25zKVxuICAgICAgcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nKHZhcnMuYXBwICsgYENvbXBsZXRlZCBleHQtd2VicGFjay1wbHVnaW4gcHJvY2Vzc2luZ2ApXG4gICAgfSlcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/dist/pluginUtil.js b/packages/ext-webpack-plugin-orig/dist/pluginUtil.js deleted file mode 100644 index 62d80b1..0000000 --- a/packages/ext-webpack-plugin-orig/dist/pluginUtil.js +++ /dev/null @@ -1,683 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports._constructor = _constructor; -exports._compilation = _compilation; -exports._afterCompile = _afterCompile; -exports.emit = emit; -exports._prepareForBuild = _prepareForBuild; -exports._buildExtBundle = _buildExtBundle; -exports._done = _done; -exports.executeAsync = executeAsync; -exports.log = log; -exports.logv = logv; -exports._getApp = _getApp; -exports._getVersions = _getVersions; - -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -//********** -function _constructor(options) { - const fs = require('fs'); - - var thisVars = {}; - var thisOptions = {}; - var plugin = {}; - - if (options.framework == undefined) { - thisVars.pluginErrors = []; - thisVars.pluginErrors.push('webpack config: framework parameter on ext-webpack-plugin is not defined - values: react, angular, extjs'); - plugin.vars = thisVars; - return plugin; - } - - const validateOptions = require('schema-utils'); - - validateOptions(require(`./${options.framework}Util`).getValidateOptions(), options, ''); - thisVars = require(`./${options.framework}Util`).getDefaultVars(); - thisVars.framework = options.framework; - - switch (thisVars.framework) { - case 'extjs': - thisVars.pluginName = 'ext-webpack-plugin'; - break; - - case 'react': - thisVars.pluginName = 'ext-react-webpack-plugin'; - break; - - case 'angular': - thisVars.pluginName = 'ext-angular-webpack-plugin'; - break; - - default: - thisVars.pluginName = 'ext-webpack-plugin'; - } - - thisVars.app = require('./pluginUtil')._getApp(); - logv(options, `pluginName - ${thisVars.pluginName}`); - logv(options, `thisVars.app - ${thisVars.app}`); - const rc = fs.existsSync(`.ext-${thisVars.framework}rc`) && JSON.parse(fs.readFileSync(`.ext-${thisVars.framework}rc`, 'utf-8')) || {}; - thisOptions = _objectSpread({}, require(`./${thisVars.framework}Util`).getDefaultOptions(), options, rc); - logv(options, `thisOptions - ${JSON.stringify(thisOptions)}`); - - if (thisOptions.environment == 'production') { - thisVars.production = true; - } else { - thisVars.production = false; - } - - logv(options, `thisVars - ${JSON.stringify(thisVars)}`); - log(require('./pluginUtil')._getVersions(thisVars.app, thisVars.pluginName, thisVars.framework)); - log(thisVars.app + 'Building for ' + thisOptions.environment); - log(thisVars.app + 'Treeshake is ' + thisOptions.treeshake); - - if (thisVars.production == true && thisOptions.treeshake == true && options.framework == 'angular') { - require(`./angularUtil`)._toProd(thisVars, thisOptions); - } - - plugin.vars = thisVars; - plugin.options = thisOptions; - - require('./pluginUtil').logv(options, 'FUNCTION constructor (end)'); - - return plugin; -} //********** - - -function _compilation(compiler, compilation, vars, options) { - try { - require('./pluginUtil').logv(options, 'FUNCTION _compilation'); - - var extComponents = []; - - if (vars.production) { - if (options.framework == 'angular' && options.treeshake) { - extComponents = require('./angularUtil')._getAllComponents(vars, options); - } - - compilation.hooks.succeedModule.tap(`ext-succeed-module`, module => { - //require('./pluginUtil').logv(options, 'HOOK succeedModule') - if (module.resource && !module.resource.match(/node_modules/)) { - if (module.resource.match(/\.html$/) != null) { - if (module._source._value.toLowerCase().includes('doctype html') == false) { - vars.deps = [...(vars.deps || []), ...require(`./${vars.framework}Util`).extractFromSource(module, options, compilation, extComponents)]; - } - } else { - vars.deps = [...(vars.deps || []), ...require(`./${vars.framework}Util`).extractFromSource(module, options, compilation, extComponents)]; - } - } // if (extComponents.length && module.resource && (module.resource.match(/\.(j|t)sx?$/) || - // options.framework == 'angular' && module.resource.match(/\.html$/)) && - // !module.resource.match(/node_modules/) && !module.resource.match(`/ext-{$options.framework}/build/`)) { - // vars.deps = [...(vars.deps || []), ...require(`./${vars.framework}Util`).extractFromSource(module, options, compilation, extComponents)] - // } - - }); - - if (options.framework == 'angular' && options.treeshake == true) { - compilation.hooks.finishModules.tap(`ext-finish-modules`, modules => { - require('./pluginUtil').logv(options, 'HOOK finishModules'); - - require('./angularUtil')._writeFilesToProdFolder(vars, options); - }); - } - } - - if (options.framework == 'angular' && options.treeshake == false || options.framework == 'react') { - compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tap(`ext-html-generation`, data => { - logv(options, 'HOOK ext-html-generation'); - - const path = require('path'); - - var outputPath = ''; - - if (compiler.options.devServer) { - if (compiler.outputPath === '/') { - outputPath = path.join(compiler.options.devServer.contentBase, outputPath); - } else { - if (compiler.options.devServer.contentBase == undefined) { - outputPath = 'build'; - } else { - outputPath = ''; - } - } - } else { - outputPath = 'build'; - } - - outputPath = outputPath.replace(process.cwd(), '').trim(); - var jsPath = path.join(outputPath, vars.extPath, 'ext.js'); - var cssPath = path.join(outputPath, vars.extPath, 'ext.css'); - data.assets.js.unshift(jsPath); - data.assets.css.unshift(cssPath); - log(vars.app + `Adding ${jsPath} and ${cssPath} to index.html`); - }); - } else { - logv(options, 'skipped HOOK ext-html-generation'); - } - } catch (e) { - require('./pluginUtil').logv(options, e); - - compilation.errors.push('_compilation: ' + e); - } -} //********** - - -function _afterCompile(compiler, compilation, vars, options) { - require('./pluginUtil').logv(options, 'FUNCTION _afterCompile'); -} //********** - - -function emit(_x, _x2, _x3, _x4, _x5) { - return _emit.apply(this, arguments); -} //********** - - -function _emit() { - _emit = _asyncToGenerator( - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee(compiler, compilation, vars, options, callback) { - var log, logv, app, framework, path, _buildExtBundle, outputPath, command, parms; - - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - log = require('./pluginUtil').log; - logv = require('./pluginUtil').logv; - logv(options, 'FUNCTION emit'); - app = vars.app; - framework = vars.framework; - path = require('path'); - _buildExtBundle = require('./pluginUtil')._buildExtBundle; - outputPath = path.join(compiler.outputPath, vars.extPath); - - if (compiler.outputPath === '/' && compiler.options.devServer) { - outputPath = path.join(compiler.options.devServer.contentBase, outputPath); - } - - logv(options, 'outputPath: ' + outputPath); - logv(options, 'framework: ' + framework); - - if (!(options.emit == true)) { - _context.next = 29; - break; - } - - if (framework != 'extjs') { - _prepareForBuild(app, vars, options, outputPath, compilation); - } else { - if (options.framework == 'angular' && options.treeshake == false) { - require(`./${framework}Util`)._prepareForBuild(app, vars, options, outputPath, compilation); - } else { - require(`./${framework}Util`)._prepareForBuild(app, vars, options, outputPath, compilation); - } - } - - command = ''; - - if (options.watch == 'yes' && vars.production == false) { - command = 'watch'; - } else { - command = 'build'; - } - - if (!(vars.rebuild == true)) { - _context.next = 26; - break; - } - - parms = []; - - if (options.profile == undefined || options.profile == '' || options.profile == null) { - if (command == 'build') { - parms = ['app', command, options.environment]; - } else { - parms = ['app', command, '--web-server', 'false', options.environment]; - } - } else { - if (command == 'build') { - parms = ['app', command, options.profile, options.environment]; - } else { - parms = ['app', command, '--web-server', 'false', options.profile, options.environment]; - } - } - - if (!(vars.watchStarted == false)) { - _context.next = 23; - break; - } - - _context.next = 22; - return _buildExtBundle(app, compilation, outputPath, parms, options); - - case 22: - vars.watchStarted = true; - - case 23: - callback(); - _context.next = 27; - break; - - case 26: - callback(); - - case 27: - _context.next = 31; - break; - - case 29: - log(`${vars.app}FUNCTION emit not run`); - callback(); - - case 31: - _context.next = 38; - break; - - case 33: - _context.prev = 33; - _context.t0 = _context["catch"](0); - - require('./pluginUtil').logv(options, _context.t0); - - compilation.errors.push('emit: ' + _context.t0); - callback(); - - case 38: - case "end": - return _context.stop(); - } - }, _callee, this, [[0, 33]]); - })); - return _emit.apply(this, arguments); -} - -function _prepareForBuild(app, vars, options, output, compilation) { - try { - logv(options, 'FUNCTION _prepareForBuild'); - - const rimraf = require('rimraf'); - - const mkdirp = require('mkdirp'); - - const fsx = require('fs-extra'); - - const fs = require('fs'); - - const path = require('path'); - - var packages = options.packages; - var toolkit = options.toolkit; - var theme = options.theme; - theme = theme || (toolkit === 'classic' ? 'theme-triton' : 'theme-material'); - logv(options, 'firstTime: ' + vars.firstTime); - - if (vars.firstTime) { - rimraf.sync(output); - mkdirp.sync(output); - - const buildXML = require('./artifacts').buildXML; - - const createAppJson = require('./artifacts').createAppJson; - - const createWorkspaceJson = require('./artifacts').createWorkspaceJson; - - const createJSDOMEnvironment = require('./artifacts').createJSDOMEnvironment; - - fs.writeFileSync(path.join(output, 'build.xml'), buildXML(vars.production, options, output), 'utf8'); - fs.writeFileSync(path.join(output, 'app.json'), createAppJson(theme, packages, toolkit, options, output), 'utf8'); - fs.writeFileSync(path.join(output, 'jsdom-environment.js'), createJSDOMEnvironment(options, output), 'utf8'); - fs.writeFileSync(path.join(output, 'workspace.json'), createWorkspaceJson(options, output), 'utf8'); - var framework = vars.framework; //because of a problem with colorpicker - - if (fs.existsSync(path.join(process.cwd(), `ext-${framework}/ux/`))) { - var fromPath = path.join(process.cwd(), `ext-${framework}/ux/`); - var toPath = path.join(output, 'ux'); - fsx.copySync(fromPath, toPath); - log(app + 'Copying (ux) ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')); - } - - if (fs.existsSync(path.join(process.cwd(), `ext-${framework}/packages/`))) { - var fromPath = path.join(process.cwd(), `ext-${framework}/packages/`); - var toPath = path.join(output, 'packages'); - fsx.copySync(fromPath, toPath); - log(app + 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')); - } - - if (fs.existsSync(path.join(process.cwd(), `ext-${framework}/overrides/`))) { - var fromPath = path.join(process.cwd(), `ext-${framework}/overrides/`); - var toPath = path.join(output, 'overrides'); - fsx.copySync(fromPath, toPath); - log(app + 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')); - } - - if (fs.existsSync(path.join(process.cwd(), 'resources/'))) { - var fromResources = path.join(process.cwd(), 'resources/'); - var toResources = path.join(output, '../resources'); - fsx.copySync(fromResources, toResources); - log(app + 'Copying ' + fromResources.replace(process.cwd(), '') + ' to: ' + toResources.replace(process.cwd(), '')); - } - } - - vars.firstTime = false; - var js = ''; - - if (vars.production) { - js = vars.deps.join(';\n'); - } else { - js = 'Ext.require("Ext.*")'; - } - - if (vars.manifest === null || js !== vars.manifest) { - vars.manifest = js; - const manifest = path.join(output, 'manifest.js'); - fs.writeFileSync(manifest, js, 'utf8'); - vars.rebuild = true; - var bundleDir = output.replace(process.cwd(), ''); - - if (bundleDir.trim() == '') { - bundleDir = './'; - } - - log(app + 'Building Ext bundle at: ' + bundleDir); - } else { - vars.rebuild = false; - log(app + 'Ext rebuild NOT needed'); - } - } catch (e) { - require('./pluginUtil').logv(options, e); - - compilation.errors.push('_prepareForBuild: ' + e); - } -} //********** - - -function _buildExtBundle(app, compilation, outputPath, parms, options) { - try { - const fs = require('fs'); - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _buildExtBundle'); - let sencha; - - try { - sencha = require('@sencha/cmd'); - } catch (e) { - sencha = 'sencha'; - } - - if (fs.existsSync(sencha)) { - logv(options, 'sencha folder exists'); - } else { - logv(options, 'sencha folder DOES NOT exist'); - } - - return new Promise((resolve, reject) => { - const onBuildDone = () => { - logv(options, 'onBuildDone'); - resolve(); - }; - - var opts = { - cwd: outputPath, - silent: true, - stdio: 'pipe', - encoding: 'utf-8' - }; - executeAsync(app, sencha, parms, opts, compilation, options).then(function () { - onBuildDone(); - }, function (reason) { - reject(reason); - }); - }); - } catch (e) { - console.log('e'); - - require('./pluginUtil').logv(options, e); - - compilation.errors.push('_buildExtBundle: ' + e); - callback(); - } -} //********** - - -function _done(vars, options) { - try { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _done'); - - if (vars.production == true && options.treeshake == false && options.framework == 'angular') { - require(`./${options.framework}Util`)._toDev(vars, options); - } - - try { - if (options.browser == true && options.watch == 'yes' && vars.production == false) { - if (vars.browserCount == 0) { - var url = 'http://localhost:' + options.port; - - require('./pluginUtil').log(vars.app + `Opening browser at ${url}`); - - vars.browserCount++; - - const opn = require('opn'); - - opn(url); - } - } - } catch (e) { - console.log(e); //compilation.errors.push('show browser window - ext-done: ' + e) - } - } catch (e) { - require('./pluginUtil').logv(options, e); - } -} //********** - - -function executeAsync(_x6, _x7, _x8, _x9, _x10, _x11) { - return _executeAsync.apply(this, arguments); -} - -function _executeAsync() { - _executeAsync = _asyncToGenerator( - /*#__PURE__*/ - regeneratorRuntime.mark(function _callee2(app, command, parms, opts, compilation, options) { - var DEFAULT_SUBSTRS, substrings, chalk, crossSpawn, log; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - _context2.prev = 0; - //const DEFAULT_SUBSTRS = ['[INF] Loading', '[INF] Processing', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Server", "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; - DEFAULT_SUBSTRS = ["[INF] xServer", '[INF] Loading', '[INF] Append', '[INF] Processing', '[INF] Processing Build', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; - substrings = DEFAULT_SUBSTRS; - chalk = require('chalk'); - crossSpawn = require('cross-spawn'); - log = require('./pluginUtil').log; - logv(options, 'FUNCTION executeAsync'); - _context2.next = 9; - return new Promise((resolve, reject) => { - logv(options, `command - ${command}`); - logv(options, `parms - ${parms}`); - logv(options, `opts - ${JSON.stringify(opts)}`); - let child = crossSpawn(command, parms, opts); - child.on('close', (code, signal) => { - logv(options, `on close: ` + code); - - if (code === 0) { - resolve(0); - } else { - compilation.errors.push(new Error(code)); - resolve(0); - } - }); - child.on('error', error => { - logv(options, `on error`); - compilation.errors.push(error); - resolve(0); - }); - child.stdout.on('data', data => { - var str = data.toString().replace(/\r?\n|\r/g, " ").trim(); - logv(options, `${str}`); - - if (data && data.toString().match(/waiting for changes\.\.\./)) { - resolve(0); - } else { - if (substrings.some(function (v) { - return data.indexOf(v) >= 0; - })) { - str = str.replace("[INF]", ""); - str = str.replace("[LOG]", ""); - str = str.replace(process.cwd(), '').trim(); - - if (str.includes("[ERR]")) { - compilation.errors.push(app + str.replace(/^\[ERR\] /gi, '')); - str = str.replace("[ERR]", `${chalk.red("[ERR]")}`); - } - - log(`${app}${str}`); - } - } - }); - child.stderr.on('data', data => { - logv(options, `error on close: ` + data); - var str = data.toString().replace(/\r?\n|\r/g, " ").trim(); - var strJavaOpts = "Picked up _JAVA_OPTIONS"; - var includes = str.includes(strJavaOpts); - - if (!includes) { - console.log(`${app} ${chalk.red("[ERR]")} ${str}`); - } - }); - }); - - case 9: - _context2.next = 16; - break; - - case 11: - _context2.prev = 11; - _context2.t0 = _context2["catch"](0); - - require('./pluginUtil').logv(options, _context2.t0); - - compilation.errors.push('executeAsync: ' + _context2.t0); - callback(); - - case 16: - case "end": - return _context2.stop(); - } - }, _callee2, this, [[0, 11]]); - })); - return _executeAsync.apply(this, arguments); -} - -function log(s) { - require('readline').cursorTo(process.stdout, 0); - - try { - process.stdout.clearLine(); - } catch (e) {} - - process.stdout.write(s); - process.stdout.write('\n'); -} - -function logv(options, s) { - if (options.verbose == 'yes') { - require('readline').cursorTo(process.stdout, 0); - - try { - process.stdout.clearLine(); - } catch (e) {} - - process.stdout.write(`-verbose: ${s}`); - process.stdout.write('\n'); - } -} - -function _getApp() { - var chalk = require('chalk'); - - var prefix = ``; - - const platform = require('os').platform(); - - if (platform == 'darwin') { - prefix = `ℹ 「ext」:`; - } else { - prefix = `i [ext]:`; - } - - return `${chalk.green(prefix)} `; -} - -function _getVersions(app, pluginName, frameworkName) { - const path = require('path'); - - const fs = require('fs'); - - var v = {}; - var pluginPath = path.resolve(process.cwd(), 'node_modules/@sencha', pluginName); - var pluginPkg = fs.existsSync(pluginPath + '/package.json') && JSON.parse(fs.readFileSync(pluginPath + '/package.json', 'utf-8')) || {}; - v.pluginVersion = pluginPkg.version; - v._resolved = pluginPkg._resolved; - - if (v._resolved == undefined) { - v.edition = `Commercial`; - } else { - if (-1 == v._resolved.indexOf('community')) { - v.edition = `Commercial`; - } else { - v.edition = `Community`; - } - } - - var webpackPath = path.resolve(process.cwd(), 'node_modules/webpack'); - var webpackPkg = fs.existsSync(webpackPath + '/package.json') && JSON.parse(fs.readFileSync(webpackPath + '/package.json', 'utf-8')) || {}; - v.webpackVersion = webpackPkg.version; - var extPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext'); - var extPkg = fs.existsSync(extPath + '/package.json') && JSON.parse(fs.readFileSync(extPath + '/package.json', 'utf-8')) || {}; - v.extVersion = extPkg.sencha.version; - var cmdPath = path.resolve(process.cwd(), `node_modules/@sencha/cmd`); - var cmdPkg = fs.existsSync(cmdPath + '/package.json') && JSON.parse(fs.readFileSync(cmdPath + '/package.json', 'utf-8')) || {}; - v.cmdVersion = cmdPkg.version_full; - - if (v.cmdVersion == undefined) { - var cmdPath = path.resolve(process.cwd(), `node_modules/@sencha/${pluginName}/node_modules/@sencha/cmd`); - var cmdPkg = fs.existsSync(cmdPath + '/package.json') && JSON.parse(fs.readFileSync(cmdPath + '/package.json', 'utf-8')) || {}; - v.cmdVersion = cmdPkg.version_full; - } - - var frameworkInfo = ''; - - if (frameworkName != undefined && frameworkName != 'extjs') { - var frameworkPath = ''; - - if (frameworkName == 'react') { - frameworkPath = path.resolve(process.cwd(), 'node_modules/react'); - } - - if (frameworkName == 'angular') { - frameworkPath = path.resolve(process.cwd(), 'node_modules/@angular/core'); - } - - var frameworkPkg = fs.existsSync(frameworkPath + '/package.json') && JSON.parse(fs.readFileSync(frameworkPath + '/package.json', 'utf-8')) || {}; - v.frameworkVersion = frameworkPkg.version; - frameworkInfo = ', ' + frameworkName + ' v' + v.frameworkVersion; - } - - return app + 'ext-webpack-plugin v' + v.pluginVersion + ', Ext JS v' + v.extVersion + ' ' + v.edition + ' Edition, Sencha Cmd v' + v.cmdVersion + ', webpack v' + v.webpackVersion + frameworkInfo; -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5VdGlsLmpzIl0sIm5hbWVzIjpbIl9jb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJmcyIsInJlcXVpcmUiLCJ0aGlzVmFycyIsInRoaXNPcHRpb25zIiwicGx1Z2luIiwiZnJhbWV3b3JrIiwidW5kZWZpbmVkIiwicGx1Z2luRXJyb3JzIiwicHVzaCIsInZhcnMiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJnZXRWYWxpZGF0ZU9wdGlvbnMiLCJnZXREZWZhdWx0VmFycyIsInBsdWdpbk5hbWUiLCJhcHAiLCJfZ2V0QXBwIiwibG9ndiIsInJjIiwiZXhpc3RzU3luYyIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsImdldERlZmF1bHRPcHRpb25zIiwic3RyaW5naWZ5IiwiZW52aXJvbm1lbnQiLCJwcm9kdWN0aW9uIiwibG9nIiwiX2dldFZlcnNpb25zIiwidHJlZXNoYWtlIiwiX3RvUHJvZCIsIl9jb21waWxhdGlvbiIsImNvbXBpbGVyIiwiY29tcGlsYXRpb24iLCJleHRDb21wb25lbnRzIiwiX2dldEFsbENvbXBvbmVudHMiLCJob29rcyIsInN1Y2NlZWRNb2R1bGUiLCJ0YXAiLCJtb2R1bGUiLCJyZXNvdXJjZSIsIm1hdGNoIiwiX3NvdXJjZSIsIl92YWx1ZSIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJkZXBzIiwiZXh0cmFjdEZyb21Tb3VyY2UiLCJmaW5pc2hNb2R1bGVzIiwibW9kdWxlcyIsIl93cml0ZUZpbGVzVG9Qcm9kRm9sZGVyIiwiaHRtbFdlYnBhY2tQbHVnaW5CZWZvcmVIdG1sR2VuZXJhdGlvbiIsImRhdGEiLCJwYXRoIiwib3V0cHV0UGF0aCIsImRldlNlcnZlciIsImpvaW4iLCJjb250ZW50QmFzZSIsInJlcGxhY2UiLCJwcm9jZXNzIiwiY3dkIiwidHJpbSIsImpzUGF0aCIsImV4dFBhdGgiLCJjc3NQYXRoIiwiYXNzZXRzIiwianMiLCJ1bnNoaWZ0IiwiY3NzIiwiZSIsImVycm9ycyIsIl9hZnRlckNvbXBpbGUiLCJlbWl0IiwiY2FsbGJhY2siLCJfYnVpbGRFeHRCdW5kbGUiLCJfcHJlcGFyZUZvckJ1aWxkIiwiY29tbWFuZCIsIndhdGNoIiwicmVidWlsZCIsInBhcm1zIiwicHJvZmlsZSIsIndhdGNoU3RhcnRlZCIsIm91dHB1dCIsInJpbXJhZiIsIm1rZGlycCIsImZzeCIsInBhY2thZ2VzIiwidG9vbGtpdCIsInRoZW1lIiwiZmlyc3RUaW1lIiwic3luYyIsImJ1aWxkWE1MIiwiY3JlYXRlQXBwSnNvbiIsImNyZWF0ZVdvcmtzcGFjZUpzb24iLCJjcmVhdGVKU0RPTUVudmlyb25tZW50Iiwid3JpdGVGaWxlU3luYyIsImZyb21QYXRoIiwidG9QYXRoIiwiY29weVN5bmMiLCJmcm9tUmVzb3VyY2VzIiwidG9SZXNvdXJjZXMiLCJtYW5pZmVzdCIsImJ1bmRsZURpciIsInNlbmNoYSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25CdWlsZERvbmUiLCJvcHRzIiwic2lsZW50Iiwic3RkaW8iLCJlbmNvZGluZyIsImV4ZWN1dGVBc3luYyIsInRoZW4iLCJyZWFzb24iLCJjb25zb2xlIiwiX2RvbmUiLCJfdG9EZXYiLCJicm93c2VyIiwiYnJvd3NlckNvdW50IiwidXJsIiwicG9ydCIsIm9wbiIsIkRFRkFVTFRfU1VCU1RSUyIsInN1YnN0cmluZ3MiLCJjaGFsayIsImNyb3NzU3Bhd24iLCJjaGlsZCIsIm9uIiwiY29kZSIsInNpZ25hbCIsIkVycm9yIiwiZXJyb3IiLCJzdGRvdXQiLCJzdHIiLCJ0b1N0cmluZyIsInNvbWUiLCJ2IiwiaW5kZXhPZiIsInJlZCIsInN0ZGVyciIsInN0ckphdmFPcHRzIiwicyIsImN1cnNvclRvIiwiY2xlYXJMaW5lIiwid3JpdGUiLCJ2ZXJib3NlIiwicHJlZml4IiwicGxhdGZvcm0iLCJncmVlbiIsImZyYW1ld29ya05hbWUiLCJwbHVnaW5QYXRoIiwicGx1Z2luUGtnIiwicGx1Z2luVmVyc2lvbiIsInZlcnNpb24iLCJfcmVzb2x2ZWQiLCJlZGl0aW9uIiwid2VicGFja1BhdGgiLCJ3ZWJwYWNrUGtnIiwid2VicGFja1ZlcnNpb24iLCJleHRQa2ciLCJleHRWZXJzaW9uIiwiY21kUGF0aCIsImNtZFBrZyIsImNtZFZlcnNpb24iLCJ2ZXJzaW9uX2Z1bGwiLCJmcmFtZXdvcmtJbmZvIiwiZnJhbWV3b3JrUGF0aCIsImZyYW1ld29ya1BrZyIsImZyYW1ld29ya1ZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDTyxTQUFTQSxZQUFULENBQXNCQyxPQUF0QixFQUErQjtBQUNwQyxRQUFNQyxFQUFFLEdBQUdDLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUVBLE1BQUlDLFFBQVEsR0FBRyxFQUFmO0FBQ0EsTUFBSUMsV0FBVyxHQUFHLEVBQWxCO0FBQ0EsTUFBSUMsTUFBTSxHQUFHLEVBQWI7O0FBRUEsTUFBSUwsT0FBTyxDQUFDTSxTQUFSLElBQXFCQyxTQUF6QixFQUFvQztBQUNsQ0osSUFBQUEsUUFBUSxDQUFDSyxZQUFULEdBQXdCLEVBQXhCO0FBQ0FMLElBQUFBLFFBQVEsQ0FBQ0ssWUFBVCxDQUFzQkMsSUFBdEIsQ0FBMkIsMEdBQTNCO0FBQ0FKLElBQUFBLE1BQU0sQ0FBQ0ssSUFBUCxHQUFjUCxRQUFkO0FBQ0EsV0FBT0UsTUFBUDtBQUNEOztBQUVELFFBQU1NLGVBQWUsR0FBR1QsT0FBTyxDQUFDLGNBQUQsQ0FBL0I7O0FBQ0FTLEVBQUFBLGVBQWUsQ0FBQ1QsT0FBTyxDQUFFLEtBQUlGLE9BQU8sQ0FBQ00sU0FBVSxNQUF4QixDQUFQLENBQXNDTSxrQkFBdEMsRUFBRCxFQUE2RFosT0FBN0QsRUFBc0UsRUFBdEUsQ0FBZjtBQUNBRyxFQUFBQSxRQUFRLEdBQUdELE9BQU8sQ0FBRSxLQUFJRixPQUFPLENBQUNNLFNBQVUsTUFBeEIsQ0FBUCxDQUFzQ08sY0FBdEMsRUFBWDtBQUNBVixFQUFBQSxRQUFRLENBQUNHLFNBQVQsR0FBcUJOLE9BQU8sQ0FBQ00sU0FBN0I7O0FBQ0EsVUFBT0gsUUFBUSxDQUFD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RCxHQUFnRWhCLENBQUMsQ0FBQ3dCLFVBQWxFLEdBQStFLEdBQS9FLEdBQXFGeEIsQ0FBQyxDQUFDbUIsT0FBdkYsR0FBaUcsd0JBQWpHLEdBQTRIbkIsQ0FBQyxDQUFDMkIsVUFBOUgsR0FBMkksYUFBM0ksR0FBMkozQixDQUFDLENBQUNzQixjQUE3SixHQUE4S08sYUFBckw7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8vKioqKioqKioqKlxuZXhwb3J0IGZ1bmN0aW9uIF9jb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuIFxuICB2YXIgdGhpc1ZhcnMgPSB7fVxuICB2YXIgdGhpc09wdGlvbnMgPSB7fVxuICB2YXIgcGx1Z2luID0ge31cblxuICBpZiAob3B0aW9ucy5mcmFtZXdvcmsgPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1ZhcnMucGx1Z2luRXJyb3JzID0gW11cbiAgICB0aGlzVmFycy5wbHVnaW5FcnJvcnMucHVzaCgnd2VicGFjayBjb25maWc6IGZyYW1ld29yayBwYXJhbWV0ZXIgb24gZXh0LXdlYnBhY2stcGx1Z2luIGlzIG5vdCBkZWZpbmVkIC0gdmFsdWVzOiByZWFjdCwgYW5ndWxhciwgZXh0anMnKVxuICAgIHBsdWdpbi52YXJzID0gdGhpc1ZhcnNcbiAgICByZXR1cm4gcGx1Z2luXG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZU9wdGlvbnMgPSByZXF1aXJlKCdzY2hlbWEtdXRpbHMnKVxuICB2YWxpZGF0ZU9wdGlvbnMocmVxdWlyZShgLi8ke29wdGlvbnMuZnJhbWV3b3JrfVV0aWxgKS5nZXRWYWxpZGF0ZU9wdGlvbnMoKSwgb3B0aW9ucywgJycpXG4gIHRoaXNWYXJzID0gcmVxdWlyZShgLi8ke29wdGlvbnMuZnJhbWV3b3JrfVV0aWxgKS5nZXREZWZhdWx0VmFycygpXG4gIHRoaXNWYXJzLmZyYW1ld29yayA9IG9wdGlvbnMuZnJhbWV3b3JrXG4gIHN3aXRjaCh0aGlzVmFycy5mcmFtZXdvcmspIHtcbiAgICBjYXNlICdleHRqcyc6XG4gICAgICB0aGlzVmFycy5wbHVnaW5OYW1lID0gJ2V4dC13ZWJwYWNrLXBsdWdpbidcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JlYWN0JzpcbiAgICAgIHRoaXNWYXJzLnBsdWdpbk5hbWUgPSAnZXh0LXJlYWN0LXdlYnBhY2stcGx1Z2luJ1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYW5ndWxhcic6XG4gICAgICB0aGlzVmFycy5wbHVnaW5OYW1lID0gJ2V4dC1hbmd1bGFyLXdlYnBhY2stcGx1Z2luJ1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXNWYXJzLnBsdWdpbk5hbWUgPSAnZXh0LXdlYnBhY2stcGx1Z2luJ1xuICB9XG5cbiAgdGhpc1ZhcnMuYXBwID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykuX2dldEFwcCgpXG4gIGxvZ3Yob3B0aW9ucywgYHBsdWdpbk5hbWUgLSAke3RoaXNWYXJzLnBsdWdpbk5hbWV9YClcbiAgbG9ndihvcHRpb25zLCBgdGhpc1ZhcnMuYXBwIC0gJHt0aGlzVmFycy5hcHB9YClcblxuICBjb25zdCByYyA9IChmcy5leGlzdHNTeW5jKGAuZXh0LSR7dGhpc1ZhcnMuZnJhbWV3b3JrfXJjYCkgJiYgSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoYC5leHQtJHt0aGlzVmFycy5mcmFtZXdvcmt9cmNgLCAndXRmLTgnKSkgfHwge30pXG4gIHRoaXNPcHRpb25zID0geyAuLi5yZXF1aXJlKGAuLyR7dGhpc1ZhcnMuZnJhbWV3b3JrfVV0aWxgKS5nZXREZWZhdWx0T3B0aW9ucygpLCAuLi5vcHRpb25zLCAuLi5yYyB9XG4gIGxvZ3Yob3B0aW9ucywgYHRoaXNPcHRpb25zIC0gJHtKU09OLnN0cmluZ2lmeSh0aGlzT3B0aW9ucyl9YClcblxuICBpZiAodGhpc09wdGlvbnMuZW52aXJvbm1lbnQgPT0gJ3Byb2R1Y3Rpb24nKSBcbiAgICB7dGhpc1ZhcnMucHJvZHVjdGlvbiA9IHRydWV9XG4gIGVsc2UgXG4gICAge3RoaXNWYXJzLnByb2R1Y3Rpb24gPSBmYWxzZX1cbiAgbG9ndihvcHRpb25zLCBgdGhpc1ZhcnMgLSAke0pTT04uc3RyaW5naWZ5KHRoaXNWYXJzKX1gKVxuXG4gIGxvZyhyZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5fZ2V0VmVyc2lvbnModGhpc1ZhcnMuYXBwLCB0aGlzVmFycy5wbHVnaW5OYW1lLCB0aGlzVmFycy5mcmFtZXdvcmspKVxuICBsb2codGhpc1ZhcnMuYXBwICsgJ0J1aWxkaW5nIGZvciAnICsgdGhpc09wdGlvbnMuZW52aXJvbm1lbnQpXG4gIGxvZyh0aGlzVmFycy5hcHAgKyAnVHJlZXNoYWtlIGlzICcgKyB0aGlzT3B0aW9ucy50cmVlc2hha2UpXG5cbiAgaWYgKHRoaXNWYXJzLnByb2R1Y3Rpb24gPT0gdHJ1ZSAmJiB0aGlzT3B0aW9ucy50cmVlc2hha2UgPT0gdHJ1ZSAmJiBvcHRpb25zLmZyYW1ld29yayA9PSAnYW5ndWxhcicpIHtcbiAgICByZXF1aXJlKGAuL2FuZ3VsYXJVdGlsYCkuX3RvUHJvZCh0aGlzVmFycywgdGhpc09wdGlvbnMpXG4gIH1cblxuICBwbHVnaW4udmFycyA9IHRoaXNWYXJzXG4gIHBsdWdpbi5vcHRpb25zID0gdGhpc09wdGlvbnNcbiAgcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndihvcHRpb25zLCAnRlVOQ1RJT04gY29uc3RydWN0b3IgKGVuZCknKVxuICByZXR1cm4gcGx1Z2luXG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGZ1bmN0aW9uIF9jb21waWxhdGlvbihjb21waWxlciwgY29tcGlsYXRpb24sIHZhcnMsIG9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2KG9wdGlvbnMsICdGVU5DVElPTiBfY29tcGlsYXRpb24nKVxuXG4gICAgdmFyIGV4dENvbXBvbmVudHMgPSBbXVxuXG4gICAgaWYgKHZhcnMucHJvZHVjdGlvbikge1xuICAgICAgaWYgKG9wdGlvbnMuZnJhbWV3b3JrID09ICdhbmd1bGFyJyAmJiBvcHRpb25zLnRyZWVzaGFrZSkge1xuICAgICAgICBleHRDb21wb25lbnRzID0gcmVxdWlyZSgnLi9hbmd1bGFyVXRpbCcpLl9nZXRBbGxDb21wb25lbnRzKHZhcnMsIG9wdGlvbnMpXG4gICAgICB9XG5cbiAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLnN1Y2NlZWRNb2R1bGUudGFwKGBleHQtc3VjY2VlZC1tb2R1bGVgLCBtb2R1bGUgPT4ge1xuICAgICAgICAvL3JlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucywgJ0hPT0sgc3VjY2VlZE1vZHVsZScpXG4gICAgICAgIGlmIChtb2R1bGUucmVzb3VyY2UgJiYgIW1vZHVsZS5yZXNvdXJjZS5tYXRjaCgvbm9kZV9tb2R1bGVzLykpIHtcbiAgICAgICAgICBpZihtb2R1bGUucmVzb3VyY2UubWF0Y2goL1xcLmh0bWwkLykgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYobW9kdWxlLl9zb3VyY2UuX3ZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RvY3R5cGUgaHRtbCcpID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHZhcnMuZGVwcyA9IFsuLi4odmFycy5kZXBzIHx8IFtdKSwgLi4ucmVxdWlyZShgLi8ke3ZhcnMuZnJhbWV3b3JrfVV0aWxgKS5leHRyYWN0RnJvbVNvdXJjZShtb2R1bGUsIG9wdGlvbnMsIGNvbXBpbGF0aW9uLCBleHRDb21wb25lbnRzKV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXJzLmRlcHMgPSBbLi4uKHZhcnMuZGVwcyB8fCBbXSksIC4uLnJlcXVpcmUoYC4vJHt2YXJzLmZyYW1ld29ya31VdGlsYCkuZXh0cmFjdEZyb21Tb3VyY2UobW9kdWxlLCBvcHRpb25zLCBjb21waWxhdGlvbiwgZXh0Q29tcG9uZW50cyldXG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKGV4dENvbXBvbmVudHMubGVuZ3RoICYmIG1vZHVsZS5yZXNvdXJjZSAmJiAobW9kdWxlLnJlc291cmNlLm1hdGNoKC9cXC4oanx0KXN4PyQvKSB8fFxuICAgICAgICAvLyBvcHRpb25zLmZyYW1ld29yayA9PSAnYW5ndWxhcicgJiYgbW9kdWxlLnJlc291cmNlLm1hdGNoKC9cXC5odG1sJC8pKSAmJlxuICAgICAgICAvLyAhbW9kdWxlLnJlc291cmNlLm1hdGNoKC9ub2RlX21vZHVsZXMvKSAmJiAhbW9kdWxlLnJlc291cmNlLm1hdGNoKGAvZXh0LXskb3B0aW9ucy5mcmFtZXdvcmt9L2J1aWxkL2ApKSB7XG4gICAgICAgIC8vICAgdmFycy5kZXBzID0gWy4uLih2YXJzLmRlcHMgfHwgW10pLCAuLi5yZXF1aXJlKGAuLyR7dmFycy5mcmFtZXdvcmt9VXRpbGApLmV4dHJhY3RGcm9tU291cmNlKG1vZHVsZSwgb3B0aW9ucywgY29tcGlsYXRpb24sIGV4dENvbXBvbmVudHMpXVxuICAgICAgICAvLyB9XG4gICAgICB9KVxuXG4gICAgICBpZiAob3B0aW9ucy5mcmFtZXdvcmsgPT0gJ2FuZ3VsYXInICYmIG9wdGlvbnMudHJlZXNoYWtlID09IHRydWUpIHtcbiAgICAgICAgY29tcGlsYXRpb24uaG9va3MuZmluaXNoTW9kdWxlcy50YXAoYGV4dC1maW5pc2gtbW9kdWxlc2AsIG1vZHVsZXMgPT4ge1xuICAgICAgICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucywgJ0hPT0sgZmluaXNoTW9kdWxlcycpXG4gICAgICAgICAgcmVxdWlyZSgnLi9hbmd1bGFyVXRpbCcpLl93cml0ZUZpbGVzVG9Qcm9kRm9sZGVyKHZhcnMsIG9wdGlvbnMpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAob3B0aW9ucy5mcmFtZXdvcmsgPT0gJ2FuZ3VsYXInICYmIG9wdGlvbnMudHJlZXNoYWtlID09IGZhbHNlKSB8fFxuICAgICAgKG9wdGlvbnMuZnJhbWV3b3JrID09ICdyZWFjdCcpXG4gICAgKSB7XG4gICAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLmh0bWxXZWJwYWNrUGx1Z2luQmVmb3JlSHRtbEdlbmVyYXRpb24udGFwKGBleHQtaHRtbC1nZW5lcmF0aW9uYCwoZGF0YSkgPT4ge1xuICAgICAgICBsb2d2KG9wdGlvbnMsJ0hPT0sgZXh0LWh0bWwtZ2VuZXJhdGlvbicpXG4gICAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbiAgICAgICAgdmFyIG91dHB1dFBhdGggPSAnJ1xuICAgICAgICBpZiAoY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIpIHtcbiAgICAgICAgICBpZiAoY29tcGlsZXIub3V0cHV0UGF0aCA9PT0gJy8nKSB7XG4gICAgICAgICAgICBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLmNvbnRlbnRCYXNlLCBvdXRwdXRQYXRoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5jb250ZW50QmFzZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgb3V0cHV0UGF0aCA9ICdidWlsZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBvdXRwdXRQYXRoID0gJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9ICdidWlsZCdcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXRQYXRoID0gb3V0cHV0UGF0aC5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKS50cmltKClcbiAgICAgICAgdmFyIGpzUGF0aCA9IHBhdGguam9pbihvdXRwdXRQYXRoLCB2YXJzLmV4dFBhdGgsICdleHQuanMnKVxuICAgICAgICB2YXIgY3NzUGF0aCA9IHBhdGguam9pbihvdXRwdXRQYXRoLCB2YXJzLmV4dFBhdGgsICdleHQuY3NzJylcbiAgICAgICAgZGF0YS5hc3NldHMuanMudW5zaGlmdChqc1BhdGgpXG4gICAgICAgIGRhdGEuYXNzZXRzLmNzcy51bnNoaWZ0KGNzc1BhdGgpXG4gICAgICAgIGxvZyh2YXJzLmFwcCArIGBBZGRpbmcgJHtqc1BhdGh9IGFuZCAke2Nzc1BhdGh9IHRvIGluZGV4Lmh0bWxgKVxuICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsb2d2KG9wdGlvbnMsJ3NraXBwZWQgSE9PSyBleHQtaHRtbC1nZW5lcmF0aW9uJylcbiAgICB9XG4gIH1cbiAgY2F0Y2goZSkge1xuICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucyxlKVxuICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdfY29tcGlsYXRpb246ICcgKyBlKVxuICB9XG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGZ1bmN0aW9uIF9hZnRlckNvbXBpbGUoY29tcGlsZXIsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4gIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucywgJ0ZVTkNUSU9OIF9hZnRlckNvbXBpbGUnKVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbWl0KGNvbXBpbGVyLCBjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsb2cgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2dcbiAgICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICAgIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gZW1pdCcpXG4gICAgdmFyIGFwcCA9IHZhcnMuYXBwXG4gICAgdmFyIGZyYW1ld29yayA9IHZhcnMuZnJhbWV3b3JrXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgIGNvbnN0IF9idWlsZEV4dEJ1bmRsZSA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLl9idWlsZEV4dEJ1bmRsZVxuICAgIGxldCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGNvbXBpbGVyLm91dHB1dFBhdGgsdmFycy5leHRQYXRoKVxuICAgIGlmIChjb21waWxlci5vdXRwdXRQYXRoID09PSAnLycgJiYgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIpIHtcbiAgICAgIG91dHB1dFBhdGggPSBwYXRoLmpvaW4oY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuY29udGVudEJhc2UsIG91dHB1dFBhdGgpXG4gICAgfVxuICAgIGxvZ3Yob3B0aW9ucywnb3V0cHV0UGF0aDogJyArIG91dHB1dFBhdGgpXG4gICAgbG9ndihvcHRpb25zLCdmcmFtZXdvcms6ICcgKyBmcmFtZXdvcmspXG4gICAgaWYgKG9wdGlvbnMuZW1pdCA9PSB0cnVlKSB7XG4gICAgICBpZiAoZnJhbWV3b3JrICE9ICdleHRqcycpIHtcbiAgICAgICAgX3ByZXBhcmVGb3JCdWlsZChhcHAsIHZhcnMsIG9wdGlvbnMsIG91dHB1dFBhdGgsIGNvbXBpbGF0aW9uKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZyYW1ld29yayA9PSAnYW5ndWxhcicgJiYgb3B0aW9ucy50cmVlc2hha2UgPT0gZmFsc2UpIHtcbiAgICAgICAgICByZXF1aXJlKGAuLyR7ZnJhbWV3b3JrfVV0aWxgKS5fcHJlcGFyZUZvckJ1aWxkKGFwcCwgdmFycywgb3B0aW9ucywgb3V0cHV0UGF0aCwgY29tcGlsYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmVxdWlyZShgLi8ke2ZyYW1ld29ya31VdGlsYCkuX3ByZXBhcmVGb3JCdWlsZChhcHAsIHZhcnMsIG9wdGlvbnMsIG91dHB1dFBhdGgsIGNvbXBpbGF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21tYW5kID0gJydcbiAgICAgIGlmIChvcHRpb25zLndhdGNoID09ICd5ZXMnICYmIHZhcnMucHJvZHVjdGlvbiA9PSBmYWxzZSkge1xuICAgICAgICBjb21tYW5kID0gJ3dhdGNoJ1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbW1hbmQgPSAnYnVpbGQnXG4gICAgICB9XG5cbiAgICAgIGlmICh2YXJzLnJlYnVpbGQgPT0gdHJ1ZSkge1xuICAgICAgICB2YXIgcGFybXMgPSBbXVxuICAgICAgICBpZiAob3B0aW9ucy5wcm9maWxlID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLnByb2ZpbGUgPT0gJycgfHwgb3B0aW9ucy5wcm9maWxlID09IG51bGwpIHtcbiAgICAgICAgICBpZiAoY29tbWFuZCA9PSAnYnVpbGQnKSB7XG4gICAgICAgICAgICBwYXJtcyA9IFsnYXBwJywgY29tbWFuZCwgb3B0aW9ucy5lbnZpcm9ubWVudF1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJtcyA9IFsnYXBwJywgY29tbWFuZCwgJy0td2ViLXNlcnZlcicsICdmYWxzZScsIG9wdGlvbnMuZW52aXJvbm1lbnRdXG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGNvbW1hbmQgPT0gJ2J1aWxkJykge1xuICAgICAgICAgICAgcGFybXMgPSBbJ2FwcCcsIGNvbW1hbmQsIG9wdGlvbnMucHJvZmlsZSwgb3B0aW9ucy5lbnZpcm9ubWVudF1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJtcyA9IFsnYXBwJywgY29tbWFuZCwgJy0td2ViLXNlcnZlcicsICdmYWxzZScsIG9wdGlvbnMucHJvZmlsZSwgb3B0aW9ucy5lbnZpcm9ubWVudF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFycy53YXRjaFN0YXJ0ZWQgPT0gZmFsc2UpIHtcbiAgICAgICAgICBhd2FpdCBfYnVpbGRFeHRCdW5kbGUoYXBwLCBjb21waWxhdGlvbiwgb3V0cHV0UGF0aCwgcGFybXMsIG9wdGlvbnMpXG4gICAgICAgICAgdmFycy53YXRjaFN0YXJ0ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsb2coYCR7dmFycy5hcHB9RlVOQ1RJT04gZW1pdCBub3QgcnVuYClcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cbiAgY2F0Y2goZSkge1xuICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucyxlKVxuICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdlbWl0OiAnICsgZSlcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gX3ByZXBhcmVGb3JCdWlsZChhcHAsIHZhcnMsIG9wdGlvbnMsIG91dHB1dCwgY29tcGlsYXRpb24pIHtcbiAgdHJ5IHtcbiAgICBsb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIF9wcmVwYXJlRm9yQnVpbGQnKVxuICAgIGNvbnN0IHJpbXJhZiA9IHJlcXVpcmUoJ3JpbXJhZicpXG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZSgnbWtkaXJwJylcbiAgICBjb25zdCBmc3ggPSByZXF1aXJlKCdmcy1leHRyYScpXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG4gICAgdmFyIHBhY2thZ2VzID0gb3B0aW9ucy5wYWNrYWdlc1xuICAgIHZhciB0b29sa2l0ID0gb3B0aW9ucy50b29sa2l0XG4gICAgdmFyIHRoZW1lID0gb3B0aW9ucy50aGVtZVxuXG4gICAgdGhlbWUgPSB0aGVtZSB8fCAodG9vbGtpdCA9PT0gJ2NsYXNzaWMnID8gJ3RoZW1lLXRyaXRvbicgOiAndGhlbWUtbWF0ZXJpYWwnKVxuICAgIGxvZ3Yob3B0aW9ucywnZmlyc3RUaW1lOiAnICsgdmFycy5maXJzdFRpbWUpXG4gICAgaWYgKHZhcnMuZmlyc3RUaW1lKSB7XG4gICAgICByaW1yYWYuc3luYyhvdXRwdXQpXG4gICAgICBta2RpcnAuc3luYyhvdXRwdXQpXG4gICAgICBjb25zdCBidWlsZFhNTCA9IHJlcXVpcmUoJy4vYXJ0aWZhY3RzJykuYnVpbGRYTUxcbiAgICAgIGNvbnN0IGNyZWF0ZUFwcEpzb24gPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmNyZWF0ZUFwcEpzb25cbiAgICAgIGNvbnN0IGNyZWF0ZVdvcmtzcGFjZUpzb24gPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmNyZWF0ZVdvcmtzcGFjZUpzb25cbiAgICAgIGNvbnN0IGNyZWF0ZUpTRE9NRW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmNyZWF0ZUpTRE9NRW52aXJvbm1lbnRcblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0LCAnYnVpbGQueG1sJyksIGJ1aWxkWE1MKHZhcnMucHJvZHVjdGlvbiwgb3B0aW9ucywgb3V0cHV0KSwgJ3V0ZjgnKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0LCAnYXBwLmpzb24nKSwgY3JlYXRlQXBwSnNvbih0aGVtZSwgcGFja2FnZXMsIHRvb2xraXQsIG9wdGlvbnMsIG91dHB1dCksICd1dGY4JylcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dCwgJ2pzZG9tLWVudmlyb25tZW50LmpzJyksIGNyZWF0ZUpTRE9NRW52aXJvbm1lbnQob3B0aW9ucywgb3V0cHV0KSwgJ3V0ZjgnKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0LCAnd29ya3NwYWNlLmpzb24nKSwgY3JlYXRlV29ya3NwYWNlSnNvbihvcHRpb25zLCBvdXRwdXQpLCAndXRmOCcpXG5cbiAgICAgIHZhciBmcmFtZXdvcmsgPSB2YXJzLmZyYW1ld29yaztcbiAgICAgIC8vYmVjYXVzZSBvZiBhIHByb2JsZW0gd2l0aCBjb2xvcnBpY2tlclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksYGV4dC0ke2ZyYW1ld29ya30vdXgvYCkpKSB7XG4gICAgICAgIHZhciBmcm9tUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBgZXh0LSR7ZnJhbWV3b3JrfS91eC9gKVxuICAgICAgICB2YXIgdG9QYXRoID0gcGF0aC5qb2luKG91dHB1dCwgJ3V4JylcbiAgICAgICAgZnN4LmNvcHlTeW5jKGZyb21QYXRoLCB0b1BhdGgpXG4gICAgICAgIGxvZyhhcHAgKyAnQ29weWluZyAodXgpICcgKyBmcm9tUGF0aC5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSArICcgdG86ICcgKyB0b1BhdGgucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykpXG4gICAgICB9XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSxgZXh0LSR7ZnJhbWV3b3JrfS9wYWNrYWdlcy9gKSkpIHtcbiAgICAgICAgdmFyIGZyb21QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGBleHQtJHtmcmFtZXdvcmt9L3BhY2thZ2VzL2ApXG4gICAgICAgIHZhciB0b1BhdGggPSBwYXRoLmpvaW4ob3V0cHV0LCAncGFja2FnZXMnKVxuICAgICAgICBmc3guY29weVN5bmMoZnJvbVBhdGgsIHRvUGF0aClcbiAgICAgICAgbG9nKGFwcCArICdDb3B5aW5nICcgKyBmcm9tUGF0aC5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSArICcgdG86ICcgKyB0b1BhdGgucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykpXG4gICAgICB9XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSxgZXh0LSR7ZnJhbWV3b3JrfS9vdmVycmlkZXMvYCkpKSB7XG4gICAgICAgIHZhciBmcm9tUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBgZXh0LSR7ZnJhbWV3b3JrfS9vdmVycmlkZXMvYClcbiAgICAgICAgdmFyIHRvUGF0aCA9IHBhdGguam9pbihvdXRwdXQsICdvdmVycmlkZXMnKVxuICAgICAgICBmc3guY29weVN5bmMoZnJvbVBhdGgsIHRvUGF0aClcbiAgICAgICAgbG9nKGFwcCArICdDb3B5aW5nICcgKyBmcm9tUGF0aC5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSArICcgdG86ICcgKyB0b1BhdGgucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykpXG4gICAgICB9XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwncmVzb3VyY2VzLycpKSkge1xuICAgICAgICB2YXIgZnJvbVJlc291cmNlcyA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAncmVzb3VyY2VzLycpXG4gICAgICAgIHZhciB0b1Jlc291cmNlcyA9IHBhdGguam9pbihvdXRwdXQsICcuLi9yZXNvdXJjZXMnKVxuICAgICAgICBmc3guY29weVN5bmMoZnJvbVJlc291cmNlcywgdG9SZXNvdXJjZXMpXG4gICAgICAgIGxvZyhhcHAgKyAnQ29weWluZyAnICsgZnJvbVJlc291cmNlcy5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSArICcgdG86ICcgKyB0b1Jlc291cmNlcy5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdmFycy5maXJzdFRpbWUgPSBmYWxzZVxuICAgIHZhciBqcyA9ICcnXG4gICAgaWYgKHZhcnMucHJvZHVjdGlvbikge1xuICAgICAganMgPSB2YXJzLmRlcHMuam9pbignO1xcbicpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGpzID0gJ0V4dC5yZXF1aXJlKFwiRXh0LipcIiknXG4gICAgfVxuICAgIGlmICh2YXJzLm1hbmlmZXN0ID09PSBudWxsIHx8IGpzICE9PSB2YXJzLm1hbmlmZXN0KSB7XG4gICAgICB2YXJzLm1hbmlmZXN0ID0ganNcbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcGF0aC5qb2luKG91dHB1dCwgJ21hbmlmZXN0LmpzJylcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFuaWZlc3QsIGpzLCAndXRmOCcpXG4gICAgICB2YXJzLnJlYnVpbGQgPSB0cnVlXG4gICAgICB2YXIgYnVuZGxlRGlyID0gb3V0cHV0LnJlcGxhY2UocHJvY2Vzcy5jd2QoKSwgJycpXG4gICAgICBpZiAoYnVuZGxlRGlyLnRyaW0oKSA9PSAnJykge2J1bmRsZURpciA9ICcuLyd9XG4gICAgICBsb2coYXBwICsgJ0J1aWxkaW5nIEV4dCBidW5kbGUgYXQ6ICcgKyBidW5kbGVEaXIpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFycy5yZWJ1aWxkID0gZmFsc2VcbiAgICAgIGxvZyhhcHAgKyAnRXh0IHJlYnVpbGQgTk9UIG5lZWRlZCcpXG4gICAgfVxuICB9XG4gIGNhdGNoKGUpIHtcbiAgICByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2KG9wdGlvbnMsZSlcbiAgICBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX3ByZXBhcmVGb3JCdWlsZDogJyArIGUpXG4gIH1cbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gX2J1aWxkRXh0QnVuZGxlKGFwcCwgY29tcGlsYXRpb24sIG91dHB1dFBhdGgsIHBhcm1zLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG4gICAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgICBsb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIF9idWlsZEV4dEJ1bmRsZScpXG5cbiAgICBsZXQgc2VuY2hhOyB0cnkgeyBzZW5jaGEgPSByZXF1aXJlKCdAc2VuY2hhL2NtZCcpIH0gY2F0Y2ggKGUpIHsgc2VuY2hhID0gJ3NlbmNoYScgfVxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNlbmNoYSkpIHtcbiAgICAgIGxvZ3Yob3B0aW9ucywnc2VuY2hhIGZvbGRlciBleGlzdHMnKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxvZ3Yob3B0aW9ucywnc2VuY2hhIGZvbGRlciBET0VTIE5PVCBleGlzdCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9uQnVpbGREb25lID0gKCkgPT4ge1xuICAgICAgICBsb2d2KG9wdGlvbnMsJ29uQnVpbGREb25lJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRzID0geyBjd2Q6IG91dHB1dFBhdGgsIHNpbGVudDogdHJ1ZSwgc3RkaW86ICdwaXBlJywgZW5jb2Rpbmc6ICd1dGYtOCd9XG4gICAgICBleGVjdXRlQXN5bmMoYXBwLCBzZW5jaGEsIHBhcm1zLCBvcHRzLCBjb21waWxhdGlvbiwgb3B0aW9ucykudGhlbiAoXG4gICAgICAgIGZ1bmN0aW9uKCkgeyBvbkJ1aWxkRG9uZSgpIH0sIFxuICAgICAgICBmdW5jdGlvbihyZWFzb24pIHsgcmVqZWN0KHJlYXNvbikgfVxuICAgICAgKVxuICAgIH0pXG4gIH1cbiAgY2F0Y2goZSkge1xuICAgIGNvbnNvbGUubG9nKCdlJylcbiAgICByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2KG9wdGlvbnMsZSlcbiAgICBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX2J1aWxkRXh0QnVuZGxlOiAnICsgZSlcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gX2RvbmUodmFycywgb3B0aW9ucykge1xuICB0cnkge1xuICAgIGNvbnN0IGxvZyA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ1xuICAgIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gICAgbG9ndihvcHRpb25zLCdGVU5DVElPTiBfZG9uZScpXG5cblxuICAgIGlmICh2YXJzLnByb2R1Y3Rpb24gPT0gdHJ1ZSAmJiBvcHRpb25zLnRyZWVzaGFrZSA9PSBmYWxzZSAmJiBvcHRpb25zLmZyYW1ld29yayA9PSAnYW5ndWxhcicpIHtcbiAgICAgIHJlcXVpcmUoYC4vJHtvcHRpb25zLmZyYW1ld29ya31VdGlsYCkuX3RvRGV2KHZhcnMsIG9wdGlvbnMpXG4gICAgfVxuXG5cbiAgICB0cnkge1xuICAgICAgaWYob3B0aW9ucy5icm93c2VyID09IHRydWUgJiYgb3B0aW9ucy53YXRjaCA9PSAneWVzJyAmJiB2YXJzLnByb2R1Y3Rpb24gPT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHZhcnMuYnJvd3NlckNvdW50ID09IDApIHtcbiAgICAgICAgICB2YXIgdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6JyArIG9wdGlvbnMucG9ydFxuICAgICAgICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZyh2YXJzLmFwcCArIGBPcGVuaW5nIGJyb3dzZXIgYXQgJHt1cmx9YClcbiAgICAgICAgICB2YXJzLmJyb3dzZXJDb3VudCsrXG4gICAgICAgICAgY29uc3Qgb3BuID0gcmVxdWlyZSgnb3BuJylcbiAgICAgICAgICBvcG4odXJsKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKVxuICAgICAgLy9jb21waWxhdGlvbi5lcnJvcnMucHVzaCgnc2hvdyBicm93c2VyIHdpbmRvdyAtIGV4dC1kb25lOiAnICsgZSlcbiAgICB9XG4gIH1cbiAgY2F0Y2goZSkge1xuICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucyxlKVxuICB9XG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBc3luYyAoYXBwLCBjb21tYW5kLCBwYXJtcywgb3B0cywgY29tcGlsYXRpb24sIG9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICAvL2NvbnN0IERFRkFVTFRfU1VCU1RSUyA9IFsnW0lORl0gTG9hZGluZycsICdbSU5GXSBQcm9jZXNzaW5nJywgJ1tMT0ddIEZhc2hpb24gYnVpbGQgY29tcGxldGUnLCAnW0VSUl0nLCAnW1dSTl0nLCBcIltJTkZdIFNlcnZlclwiLCBcIltJTkZdIFdyaXRpbmdcIiwgXCJbSU5GXSBMb2FkaW5nIEJ1aWxkXCIsIFwiW0lORl0gV2FpdGluZ1wiLCBcIltMT0ddIEZhc2hpb24gd2FpdGluZ1wiXTtcbiAgICBjb25zdCBERUZBVUxUX1NVQlNUUlMgPSBbXCJbSU5GXSB4U2VydmVyXCIsICdbSU5GXSBMb2FkaW5nJywgJ1tJTkZdIEFwcGVuZCcsICdbSU5GXSBQcm9jZXNzaW5nJywgJ1tJTkZdIFByb2Nlc3NpbmcgQnVpbGQnLCAnW0xPR10gRmFzaGlvbiBidWlsZCBjb21wbGV0ZScsICdbRVJSXScsICdbV1JOXScsIFwiW0lORl0gV3JpdGluZ1wiLCBcIltJTkZdIExvYWRpbmcgQnVpbGRcIiwgXCJbSU5GXSBXYWl0aW5nXCIsIFwiW0xPR10gRmFzaGlvbiB3YWl0aW5nXCJdO1xuICAgIHZhciBzdWJzdHJpbmdzID0gREVGQVVMVF9TVUJTVFJTIFxuICAgIHZhciBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJylcbiAgICBjb25zdCBjcm9zc1NwYXduID0gcmVxdWlyZSgnY3Jvc3Mtc3Bhd24nKVxuICAgIGNvbnN0IGxvZyA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ1xuICAgIGxvZ3Yob3B0aW9ucywgJ0ZVTkNUSU9OIGV4ZWN1dGVBc3luYycpXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbG9ndihvcHRpb25zLGBjb21tYW5kIC0gJHtjb21tYW5kfWApXG4gICAgICBsb2d2KG9wdGlvbnMsIGBwYXJtcyAtICR7cGFybXN9YClcbiAgICAgIGxvZ3Yob3B0aW9ucywgYG9wdHMgLSAke0pTT04uc3RyaW5naWZ5KG9wdHMpfWApXG4gICAgICBsZXQgY2hpbGQgPSBjcm9zc1NwYXduKGNvbW1hbmQsIHBhcm1zLCBvcHRzKVxuICAgICAgY2hpbGQub24oJ2Nsb3NlJywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBsb2d2KG9wdGlvbnMsIGBvbiBjbG9zZTogYCArIGNvZGUpIFxuICAgICAgICBpZihjb2RlID09PSAwKSB7IHJlc29sdmUoMCkgfVxuICAgICAgICBlbHNlIHsgY29tcGlsYXRpb24uZXJyb3JzLnB1c2goIG5ldyBFcnJvcihjb2RlKSApOyByZXNvbHZlKDApIH1cbiAgICAgIH0pXG4gICAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyb3IpID0+IHsgXG4gICAgICAgIGxvZ3Yob3B0aW9ucywgYG9uIGVycm9yYCkgXG4gICAgICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICByZXNvbHZlKDApXG4gICAgICB9KVxuICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgdmFyIHN0ciA9IGRhdGEudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCBcIiBcIikudHJpbSgpXG4gICAgICAgIGxvZ3Yob3B0aW9ucywgYCR7c3RyfWApXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEudG9TdHJpbmcoKS5tYXRjaCgvd2FpdGluZyBmb3IgY2hhbmdlc1xcLlxcLlxcLi8pKSB7XG4gICAgICAgICAgcmVzb2x2ZSgwKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChzdWJzdHJpbmdzLnNvbWUoZnVuY3Rpb24odikgeyByZXR1cm4gZGF0YS5pbmRleE9mKHYpID49IDA7IH0pKSB7IFxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCJbSU5GXVwiLCBcIlwiKVxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCJbTE9HXVwiLCBcIlwiKVxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UocHJvY2Vzcy5jd2QoKSwgJycpLnRyaW0oKVxuICAgICAgICAgICAgaWYgKHN0ci5pbmNsdWRlcyhcIltFUlJdXCIpKSB7XG4gICAgICAgICAgICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKGFwcCArIHN0ci5yZXBsYWNlKC9eXFxbRVJSXFxdIC9naSwgJycpKTtcbiAgICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCJbRVJSXVwiLCBgJHtjaGFsay5yZWQoXCJbRVJSXVwiKX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nKGAke2FwcH0ke3N0cn1gKSBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBsb2d2KG9wdGlvbnMsIGBlcnJvciBvbiBjbG9zZTogYCArIGRhdGEpIFxuICAgICAgICB2YXIgc3RyID0gZGF0YS50b1N0cmluZygpLnJlcGxhY2UoL1xccj9cXG58XFxyL2csIFwiIFwiKS50cmltKClcbiAgICAgICAgdmFyIHN0ckphdmFPcHRzID0gXCJQaWNrZWQgdXAgX0pBVkFfT1BUSU9OU1wiO1xuICAgICAgICB2YXIgaW5jbHVkZXMgPSBzdHIuaW5jbHVkZXMoc3RySmF2YU9wdHMpXG4gICAgICAgIGlmICghaW5jbHVkZXMpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgJHthcHB9ICR7Y2hhbGsucmVkKFwiW0VSUl1cIil9ICR7c3RyfWApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuICBjYXRjaChlKSB7XG4gICAgcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndihvcHRpb25zLGUpXG4gICAgY29tcGlsYXRpb24uZXJyb3JzLnB1c2goJ2V4ZWN1dGVBc3luYzogJyArIGUpXG4gICAgY2FsbGJhY2soKVxuICB9IFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKHMpIHtcbiAgcmVxdWlyZSgncmVhZGxpbmUnKS5jdXJzb3JUbyhwcm9jZXNzLnN0ZG91dCwgMClcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLnN0ZG91dC5jbGVhckxpbmUoKVxuICB9XG4gIGNhdGNoKGUpIHt9XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHMpXG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXG4nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9ndihvcHRpb25zLCBzKSB7XG4gIGlmIChvcHRpb25zLnZlcmJvc2UgPT0gJ3llcycpIHtcbiAgICByZXF1aXJlKCdyZWFkbGluZScpLmN1cnNvclRvKHByb2Nlc3Muc3Rkb3V0LCAwKVxuICAgIHRyeSB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC5jbGVhckxpbmUoKVxuICAgIH1cbiAgICBjYXRjaChlKSB7fVxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAtdmVyYm9zZTogJHtzfWApXG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRBcHAoKSB7XG4gIHZhciBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJylcbiAgdmFyIHByZWZpeCA9IGBgXG4gIGNvbnN0IHBsYXRmb3JtID0gcmVxdWlyZSgnb3MnKS5wbGF0Zm9ybSgpXG4gIGlmIChwbGF0Zm9ybSA9PSAnZGFyd2luJykgeyBwcmVmaXggPSBg4oS5IO+9omV4dO+9ozpgIH1cbiAgZWxzZSB7IHByZWZpeCA9IGBpIFtleHRdOmAgfVxuICByZXR1cm4gYCR7Y2hhbGsuZ3JlZW4ocHJlZml4KX0gYFxufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dldFZlcnNpb25zKGFwcCwgcGx1Z2luTmFtZSwgZnJhbWV3b3JrTmFtZSkge1xuICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuXG4gIHZhciB2ID0ge31cbiAgdmFyIHBsdWdpblBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwnbm9kZV9tb2R1bGVzL0BzZW5jaGEnLCBwbHVnaW5OYW1lKVxuICB2YXIgcGx1Z2luUGtnID0gKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCsnL3BhY2thZ2UuanNvbicpICYmIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBsdWdpblBhdGgrJy9wYWNrYWdlLmpzb24nLCAndXRmLTgnKSkgfHwge30pO1xuICB2LnBsdWdpblZlcnNpb24gPSBwbHVnaW5Qa2cudmVyc2lvblxuICB2Ll9yZXNvbHZlZCA9IHBsdWdpblBrZy5fcmVzb2x2ZWRcbiAgaWYgKHYuX3Jlc29sdmVkID09IHVuZGVmaW5lZCkge1xuICAgIHYuZWRpdGlvbiA9IGBDb21tZXJjaWFsYFxuICB9XG4gIGVsc2Uge1xuICAgIGlmICgtMSA9PSB2Ll9yZXNvbHZlZC5pbmRleE9mKCdjb21tdW5pdHknKSkge1xuICAgICAgdi5lZGl0aW9uID0gYENvbW1lcmNpYWxgXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdi5lZGl0aW9uID0gYENvbW11bml0eWBcbiAgICB9XG4gIH1cblxuICB2YXIgd2VicGFja1BhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwnbm9kZV9tb2R1bGVzL3dlYnBhY2snKVxuICB2YXIgd2VicGFja1BrZyA9IChmcy5leGlzdHNTeW5jKHdlYnBhY2tQYXRoKycvcGFja2FnZS5qc29uJykgJiYgSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMod2VicGFja1BhdGgrJy9wYWNrYWdlLmpzb24nLCAndXRmLTgnKSkgfHwge30pO1xuICB2LndlYnBhY2tWZXJzaW9uID0gd2VicGFja1BrZy52ZXJzaW9uXG5cbiAgdmFyIGV4dFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwnbm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0JylcbiAgdmFyIGV4dFBrZyA9IChmcy5leGlzdHNTeW5jKGV4dFBhdGgrJy9wYWNrYWdlLmpzb24nKSAmJiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhleHRQYXRoKycvcGFja2FnZS5qc29uJywgJ3V0Zi04JykpIHx8IHt9KTtcbiAgdi5leHRWZXJzaW9uID0gZXh0UGtnLnNlbmNoYS52ZXJzaW9uXG5cbiAgdmFyIGNtZFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSxgbm9kZV9tb2R1bGVzL0BzZW5jaGEvY21kYClcbiAgdmFyIGNtZFBrZyA9IChmcy5leGlzdHNTeW5jKGNtZFBhdGgrJy9wYWNrYWdlLmpzb24nKSAmJiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjbWRQYXRoKycvcGFja2FnZS5qc29uJywgJ3V0Zi04JykpIHx8IHt9KTtcbiAgdi5jbWRWZXJzaW9uID0gY21kUGtnLnZlcnNpb25fZnVsbFxuXG4gIGlmICh2LmNtZFZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGNtZFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSxgbm9kZV9tb2R1bGVzL0BzZW5jaGEvJHtwbHVnaW5OYW1lfS9ub2RlX21vZHVsZXMvQHNlbmNoYS9jbWRgKVxuICAgIHZhciBjbWRQa2cgPSAoZnMuZXhpc3RzU3luYyhjbWRQYXRoKycvcGFja2FnZS5qc29uJykgJiYgSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY21kUGF0aCsnL3BhY2thZ2UuanNvbicsICd1dGYtOCcpKSB8fCB7fSk7XG4gICAgdi5jbWRWZXJzaW9uID0gY21kUGtnLnZlcnNpb25fZnVsbFxuICB9XG5cbiAgdmFyIGZyYW1ld29ya0luZm8gPSAnJ1xuICAgaWYgKGZyYW1ld29ya05hbWUgIT0gdW5kZWZpbmVkICYmIGZyYW1ld29ya05hbWUgIT0gJ2V4dGpzJykge1xuICAgIHZhciBmcmFtZXdvcmtQYXRoID0gJydcbiAgICBpZiAoZnJhbWV3b3JrTmFtZSA9PSAncmVhY3QnKSB7XG4gICAgICBmcmFtZXdvcmtQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksJ25vZGVfbW9kdWxlcy9yZWFjdCcpXG4gICAgfVxuICAgIGlmIChmcmFtZXdvcmtOYW1lID09ICdhbmd1bGFyJykge1xuICAgICAgZnJhbWV3b3JrUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCdub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29yZScpXG4gICAgfVxuICAgIHZhciBmcmFtZXdvcmtQa2cgPSAoZnMuZXhpc3RzU3luYyhmcmFtZXdvcmtQYXRoKycvcGFja2FnZS5qc29uJykgJiYgSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZnJhbWV3b3JrUGF0aCsnL3BhY2thZ2UuanNvbicsICd1dGYtOCcpKSB8fCB7fSk7XG4gICAgdi5mcmFtZXdvcmtWZXJzaW9uID0gZnJhbWV3b3JrUGtnLnZlcnNpb25cbiAgICBmcmFtZXdvcmtJbmZvID0gJywgJyArIGZyYW1ld29ya05hbWUgKyAnIHYnICsgdi5mcmFtZXdvcmtWZXJzaW9uXG4gIH1cbiAgcmV0dXJuIGFwcCArICdleHQtd2VicGFjay1wbHVnaW4gdicgKyB2LnBsdWdpblZlcnNpb24gKyAnLCBFeHQgSlMgdicgKyB2LmV4dFZlcnNpb24gKyAnICcgKyB2LmVkaXRpb24gKyAnIEVkaXRpb24sIFNlbmNoYSBDbWQgdicgKyB2LmNtZFZlcnNpb24gKyAnLCB3ZWJwYWNrIHYnICsgdi53ZWJwYWNrVmVyc2lvbiArIGZyYW1ld29ya0luZm9cbiB9Il19 \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/dist/reactUtil.js b/packages/ext-webpack-plugin-orig/dist/reactUtil.js deleted file mode 100644 index 57e2847..0000000 --- a/packages/ext-webpack-plugin-orig/dist/reactUtil.js +++ /dev/null @@ -1,195 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getValidateOptions = getValidateOptions; -exports.getDefaultOptions = getDefaultOptions; -exports.getDefaultVars = getDefaultVars; -exports.extractFromSource = extractFromSource; -exports._done = _done; - -function getValidateOptions() { - return { - "type": "object", - "properties": { - "framework": { - "type": ["string"] - }, - "toolkit": { - "type": ["string"] - }, - "port": { - "type": ["integer"] - }, - "emit": { - "type": ["boolean"] - }, - "browser": { - "type": ["boolean"] - }, - "watch": { - "type": ["string"] - }, - "profile": { - "type": ["string"] - }, - "environment": { - "type": ["string"] - }, - "verbose": { - "type": ["string"] - }, - "theme": { - "type": ["string"] - }, - "treeshake": { - "type": ["boolean"] - }, - "packages": { - "type": ["string", "array"] - } - }, - "additionalProperties": false // "errorMessage": { - // "option": "should be {Boolean} (https:/github.com/org/repo#anchor)" - // } - - }; -} - -function getDefaultOptions() { - return { - port: 1962, - emit: true, - browser: true, - watch: 'yes', - profile: '', - environment: 'development', - verbose: 'no', - toolkit: 'modern', - packages: null - }; -} - -function getDefaultVars() { - return { - watchStarted: false, - firstTime: true, - firstCompile: true, - browserCount: 0, - manifest: null, - extPath: 'ext-react', - pluginErrors: [], - deps: [], - rebuild: true - }; -} - -function toXtype(str) { - return str.toLowerCase().replace(/_/g, '-'); -} - -function extractFromSource(module, options, compilation) { - try { - var js = module._source._value; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION extractFromSource'); - - var generate = require("@babel/generator").default; - - var parse = require("babylon").parse; - - var traverse = require("ast-traverse"); - - const statements = []; - const ast = parse(js, { - plugins: ['jsx', 'flow', 'doExpressions', 'objectRestSpread', 'classProperties', 'exportExtensions', 'asyncGenerators', 'functionBind', 'functionSent', 'dynamicImport'], - sourceType: 'module' - }); - - function addType(argNode) { - var type; - - if (argNode.type === 'StringLiteral') { - var xtype = toXtype(argNode.value); - - if (xtype != 'extreact') { - type = { - xtype: toXtype(argNode.value) - }; - } - } else { - type = { - xclass: js.slice(argNode.start, argNode.end) - }; - } - - if (type != undefined) { - let config = JSON.stringify(type); - statements.push(`Ext.create(${config})`); - } - } - - traverse(ast, { - pre: function (node) { - if (node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name === 'Ext') { - statements.push(generate(node).code); - } - - if (node.type == 'VariableDeclarator' && node.init && node.init.type === 'CallExpression' && node.init.callee) { - if (node.init.callee.name == 'reactify') { - for (let i = 0; i < node.init.arguments.length; i++) { - const valueNode = node.init.arguments[i]; - if (!valueNode) continue; - addType(valueNode); - } - } - } // // Convert React.createElement(...) calls to the equivalent Ext.create(...) calls to put in the manifest. - // if (node.type === 'CallExpressionx' - // && node.callee.object - // && node.callee.object.name === 'React' - // && node.callee.property.name === 'createElement') { - // const [props] = node.arguments - // let config - // if (Array.isArray(props.properties)) { - // config = generate(props).code - // for (let key in type) { - // config = `{\n ${key}: '${type[key]}',${config.slice(1)}` - // } - // } else { - // config = JSON.stringify(type) - // } - // } - - } - }); - return statements; - } catch (e) { - console.log(module.resource); - console.log(js); - console.log(e); - compilation.errors.push('extractFromSource: ' + e); - return []; - } -} //********** - - -function _done(vars, options) { - try { - const log = require('./pluginUtil').log; - - const logv = require('./pluginUtil').logv; - - logv(options, 'FUNCTION _done'); - - try {} catch (e) { - console.log(e); - return []; - } - } catch (e) { - require('./pluginUtil').logv(options, e); - } -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWFjdFV0aWwuanMiXSwibmFtZXMiOlsiZ2V0VmFsaWRhdGVPcHRpb25zIiwiZ2V0RGVmYXVsdE9wdGlvbnMiLCJwb3J0IiwiZW1pdCIsImJyb3dzZXIiLCJ3YXRjaCIsInByb2ZpbGUiLCJlbnZpcm9ubWVudCIsInZlcmJvc2UiLCJ0b29sa2l0IiwicGFja2FnZXMiLCJnZXREZWZhdWx0VmFycyIsIndhdGNoU3RhcnRlZCIsImZpcnN0VGltZSIsImZpcnN0Q29tcGlsZSIsImJyb3dzZXJDb3VudCIsIm1hbmlmZXN0IiwiZXh0UGF0aCIsInBsdWdpbkVycm9ycyIsImRlcHMiLCJyZWJ1aWxkIiwidG9YdHlwZSIsInN0ciIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsImV4dHJhY3RGcm9tU291cmNlIiwibW9kdWxlIiwib3B0aW9ucyIsImNvbXBpbGF0aW9uIiwianMiLCJfc291cmNlIiwiX3ZhbHVlIiwibG9ndiIsInJlcXVpcmUiLCJnZW5lcmF0ZSIsImRlZmF1bHQiLCJwYXJzZSIsInRyYXZlcnNlIiwic3RhdGVtZW50cyIsImFzdCIsInBsdWdpbnMiLCJzb3VyY2VUeXBlIiwiYWRkVHlwZSIsImFyZ05vZGUiLCJ0eXBlIiwieHR5cGUiLCJ2YWx1ZSIsInhjbGFzcyIsInNsaWNlIiwic3RhcnQiLCJlbmQiLCJ1bmRlZmluZWQiLCJjb25maWciLCJKU09OIiwic3RyaW5naWZ5IiwicHVzaCIsInByZSIsIm5vZGUiLCJjYWxsZWUiLCJvYmplY3QiLCJuYW1lIiwiY29kZSIsImluaXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidmFsdWVOb2RlIiwiZSIsImNvbnNvbGUiLCJsb2ciLCJyZXNvdXJjZSIsImVycm9ycyIsIl9kb25lIiwidmFycyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0FBRU8sU0FBU0Esa0JBQVQsR0FBOEI7QUFDbkMsU0FBTztBQUNMLFlBQVEsUUFESDtBQUVMLGtCQUFjO0FBQ1osbUJBQWU7QUFBQyxnQkFBUSxDQUFFLFFBQUY7QUFBVCxPQURIO0FBRVosaUJBQWU7QUFBQyxnQkFBUSxDQUFFLFFBQUY7QUFBVCxPQUZIO0FBR1osY0FBZTtBQUFDLGdCQUFRLENBQUUsU0FBRjtBQUFULE9BSEg7QUFJWixjQUFlO0FBQUMsZ0JBQVEsQ0FBRSxTQUFGO0FBQVQsT0FKSDtBQUtaLGlCQUFlO0FBQUMsZ0JBQVEsQ0FBRSxTQUFGO0FBQVQsT0FMSDtBQU1aLGVBQWU7QUFBQyxnQkFBUSxDQUFFLFFBQUY7QUFBVCxPQU5IO0FBT1osaUJBQWU7QUFBQyxnQkFBUSxDQUFFLFFBQUY7QUFBVCxPQVBIO0FBUVoscUJBQWU7QUFBQyxnQkFBUSxDQUFFLFFBQUY7QUFBVCxPQVJIO0FBU1osaUJBQWU7QUFBQyxnQkFBUSxDQUFFLFFBQUY7QUFBVCxPQVRIO0FBVVosZUFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRjtBQUFULE9BVkg7QUFXWixtQkFBYTtBQUFDLGdCQUFRLENBQUUsU0FBRjtBQUFULE9BWEQ7QUFZWixrQkFBZTtBQUFDLGdCQUFRLENBQUUsUUFBRixFQUFZLE9BQVo7QUFBVDtBQVpILEtBRlQ7QUFnQkwsNEJBQXdCLEtBaEJuQixDQWlCTDtBQUNBO0FBQ0E7O0FBbkJLLEdBQVA7QUFxQkQ7O0FBRU0sU0FBU0MsaUJBQVQsR0FBNkI7QUFDbEMsU0FBTztBQUNMQyxJQUFBQSxJQUFJLEVBQUUsSUFERDtBQUVMQyxJQUFBQSxJQUFJLEVBQUUsSUFGRDtBQUdMQyxJQUFBQSxPQUFPLEVBQUUsSUFISjtBQUlMQyxJQUFBQSxLQUFLLEVBQUUsS0FKRjtBQUtMQyxJQUFBQSxPQUFPLEVBQUUsRUFMSjtBQU1MQyxJQUFBQSxXQUFXLEVBQUUsYUFOUjtBQU9MQyxJQUFBQSxPQUFPLEVBQUUsSUFQSjtBQVFMQyxJQUFBQSxPQUFPLEVBQUUsUUFSSjtBQVNMQyxJQUFBQSxRQUFRLEVBQUU7QUFUTCxHQUFQO0FBV0Q7O0FBRU0sU0FBU0MsY0FBVCxHQUEwQjtBQUMvQixTQUFPO0FBQ0xDLElBQUFBLFlBQVksRUFBRyxLQURWO0FBRUxDLElBQUFBLFNBQVMsRUFBRyxJQUZQO0FBR0xDLElBQUFBLFlBQVksRUFBRSxJQUhUO0FBSUxDLElBQUFBLFlBQVksRUFBRyxDQUpWO0FBS0xDLElBQUFBLFFBQVEsRUFBRSxJQUxMO0FBTUxDLElBQUFBLE9BQU8sRUFBRSxXQU5KO0FBT0xDLElBQUFBLFlBQVksRUFBRSxFQVBUO0FBUUxDLElBQUFBLElBQUksRUFBRSxFQVJEO0FBU0xDLElBQUFBLE9BQU8sRUFBRTtBQVRKLEdBQVA7QUFXRDs7QUFFRCxTQUFTQyxPQUFULENBQWlCQyxHQUFqQixFQUFzQjtBQUNwQixTQUFPQSxHQUFHLENBQUNDLFdBQUosR0FBa0JDLE9BQWxCLENBQTBCLElBQTFCLEVBQWdDLEdBQWhDLENBQVA7QUFDRDs7QUFFTSxTQUFTQyxpQkFBVCxDQUEyQkMsTUFBM0IsRUFBbUNDLE9BQW5DLEVBQTRDQyxXQUE1QyxFQUF5RDtBQUM5RCxNQUFJO0FBQ0YsUUFBSUMsRUFBRSxHQUFHSCxNQUFNLENBQUNJLE9BQVAsQ0FBZUMsTUFBeEI7O0FBQ0EsVUFBTUMsSUFBSSxHQUFHQyxPQUFPLENBQUMsY0FBRCxDQUFQLENBQXdCRCxJQUFyQzs7QUFDQUEsSUFBQUEsSUFBSSxDQUFDTCxPQUFELEVBQVMsNEJBQVQsQ0FBSjs7QUFDQSxRQUFJTyxRQUFRLEdBQUdELE9BQU8sQ0FBQyxrQkFBRCxDQUFQLENBQTRCRSxPQUEzQzs7QUFDQSxRQUFJQyxLQUFLLEdBQUdILE9BQU8sQ0FBQyxTQUFELENBQVAsQ0FBbUJHLEtBQS9COztBQUNBLFFBQUlDLFFBQVEsR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBdEI7O0FBQ0EsVUFBTUssVUFBVSxHQUFHLEVBQW5CO0FBRUEsVUFBTUMsR0FBRyxHQUFHSCxLQUFLLENBQUNQLEVBQUQsRUFBSztBQUNwQlcsTUFBQUEsT0FBTyxFQUFFLENBQ1AsS0FETyxFQUVQLE1BRk8sRUFHUCxlQUhPLEVBSVAsa0JBSk8sRUFLUCxpQkFMTyxFQU1QLGtCQU5PLEVBT1AsaUJBUE8sRUFRUCxjQVJPLEVBU1AsY0FUTyxFQVVQLGVBVk8sQ0FEVztBQWFwQkMsTUFBQUEsVUFBVSxFQUFFO0FBYlEsS0FBTCxDQUFqQjs7QUFnQkEsYUFBU0MsT0FBVCxDQUFpQkMsT0FBakIsRUFBMEI7QUFDeEIsVUFBSUMsSUFBSjs7QUFDQSxVQUFJRCxPQUFPLENBQUNDLElBQVIsS0FBaUIsZUFBckIsRUFBc0M7QUFDcEMsWUFBSUMsS0FBSyxHQUFHeEIsT0FBTyxDQUFDc0IsT0FBTyxDQUFDRyxLQUFULENBQW5COztBQUNBLFlBQUlELEtBQUssSUFBSSxVQUFiLEVBQXlCO0FBQ3ZCRCxVQUFBQSxJQUFJLEdBQUc7QUFBRUMsWUFBQUEsS0FBSyxFQUFFeEIsT0FBTyxDQUFDc0IsT0FBTyxDQUFDRyxLQUFUO0FBQWhCLFdBQVA7QUFDRDtBQUNGLE9BTEQsTUFLTztBQUNMRixRQUFBQSxJQUFJLEdBQUc7QUFBRUcsVUFBQUEsTUFBTSxFQUFFbEIsRUFBRSxDQUFDbUIsS0FBSCxDQUFTTCxPQUFPLENBQUNNLEtBQWpCLEVBQXdCTixPQUFPLENBQUNPLEdBQWhDO0FBQVYsU0FBUDtBQUNEOztBQUNELFVBQUlOLElBQUksSUFBSU8sU0FBWixFQUF1QjtBQUNyQixZQUFJQyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlVixJQUFmLENBQWI7QUFDQU4sUUFBQUEsVUFBVSxDQUFDaUIsSUFBWCxDQUFpQixjQUFhSCxNQUFPLEdBQXJDO0FBQ0Q7QUFDRjs7QUFFRGYsSUFBQUEsUUFBUSxDQUFDRSxHQUFELEVBQU07QUFDWmlCLE1BQUFBLEdBQUcsRUFBRSxVQUFTQyxJQUFULEVBQWU7QUFDbEIsWUFBSUEsSUFBSSxDQUFDYixJQUFMLEtBQWMsZ0JBQWQsSUFDR2EsSUFBSSxDQUFDQyxNQURSLElBRUdELElBQUksQ0FBQ0MsTUFBTCxDQUFZQyxNQUZmLElBR0dGLElBQUksQ0FBQ0MsTUFBTCxDQUFZQyxNQUFaLENBQW1CQyxJQUFuQixLQUE0QixLQUhuQyxFQUlFO0FBQ0F0QixVQUFBQSxVQUFVLENBQUNpQixJQUFYLENBQWdCckIsUUFBUSxDQUFDdUIsSUFBRCxDQUFSLENBQWVJLElBQS9CO0FBQ0Q7O0FBQ0QsWUFBSUosSUFBSSxDQUFDYixJQUFMLElBQWEsb0JBQWIsSUFDR2EsSUFBSSxDQUFDSyxJQURSLElBRUdMLElBQUksQ0FBQ0ssSUFBTCxDQUFVbEIsSUFBVixLQUFtQixnQkFGdEIsSUFHR2EsSUFBSSxDQUFDSyxJQUFMLENBQVVKLE1BSGpCLEVBSUU7QUFDQSxjQUFJRCxJQUFJLENBQUNLLElBQUwsQ0FBVUosTUFBVixDQUFpQkUsSUFBakIsSUFBeUIsVUFBN0IsRUFBeUM7QUFDdkMsaUJBQUssSUFBSUcsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR04sSUFBSSxDQUFDSyxJQUFMLENBQVVFLFNBQVYsQ0FBb0JDLE1BQXhDLEVBQWdERixDQUFDLEVBQWpELEVBQXFEO0FBQ25ELG9CQUFNRyxTQUFTLEdBQUdULElBQUksQ0FBQ0ssSUFBTCxDQUFVRSxTQUFWLENBQW9CRCxDQUFwQixDQUFsQjtBQUNBLGtCQUFJLENBQUNHLFNBQUwsRUFBZ0I7QUFDaEJ4QixjQUFBQSxPQUFPLENBQUN3QixTQUFELENBQVA7QUFDRDtBQUNGO0FBQ0YsU0FwQmlCLENBc0JsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDRDtBQXZDVyxLQUFOLENBQVI7QUF5Q0EsV0FBTzVCLFVBQVA7QUFDRCxHQW5GRCxDQW9GQSxPQUFNNkIsQ0FBTixFQUFTO0FBQ1BDLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZM0MsTUFBTSxDQUFDNEMsUUFBbkI7QUFDQUYsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVl4QyxFQUFaO0FBQ0F1QyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNBdkMsSUFBQUEsV0FBVyxDQUFDMkMsTUFBWixDQUFtQmhCLElBQW5CLENBQXdCLHdCQUF3QlksQ0FBaEQ7QUFDQSxXQUFPLEVBQVA7QUFDRDtBQUNGLEMsQ0FFRDs7O0FBQ08sU0FBU0ssS0FBVCxDQUFlQyxJQUFmLEVBQXFCOUMsT0FBckIsRUFBOEI7QUFDbkMsTUFBSTtBQUNGLFVBQU0wQyxHQUFHLEdBQUdwQyxPQUFPLENBQUMsY0FBRCxDQUFQLENBQXdCb0MsR0FBcEM7O0FBQ0EsVUFBTXJDLElBQUksR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBUCxDQUF3QkQsSUFBckM7O0FBQ0FBLElBQUFBLElBQUksQ0FBQ0wsT0FBRCxFQUFTLGdCQUFULENBQUo7O0FBRUEsUUFBSSxDQUNILENBREQsQ0FFQSxPQUFPd0MsQ0FBUCxFQUFVO0FBQ1JDLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0EsYUFBTyxFQUFQO0FBQ0Q7QUFDRixHQVhELENBWUEsT0FBTUEsQ0FBTixFQUFTO0FBQ1BsQyxJQUFBQSxPQUFPLENBQUMsY0FBRCxDQUFQLENBQXdCRCxJQUF4QixDQUE2QkwsT0FBN0IsRUFBcUN3QyxDQUFyQztBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRhdGVPcHRpb25zKCkge1xuICByZXR1cm4ge1xuICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICBcImZyYW1ld29ya1wiOiAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiIF19LFxuICAgICAgXCJ0b29sa2l0XCI6ICAgICB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiBdfSxcbiAgICAgIFwicG9ydFwiOiAgICAgICAge1widHlwZVwiOiBbIFwiaW50ZWdlclwiIF19LFxuICAgICAgXCJlbWl0XCI6ICAgICAgICB7XCJ0eXBlXCI6IFsgXCJib29sZWFuXCIgXX0sXG4gICAgICBcImJyb3dzZXJcIjogICAgIHtcInR5cGVcIjogWyBcImJvb2xlYW5cIiBdfSxcbiAgICAgIFwid2F0Y2hcIjogICAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcInByb2ZpbGVcIjogICAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiIF19LFxuICAgICAgXCJlbnZpcm9ubWVudFwiOiB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiBdfSxcbiAgICAgIFwidmVyYm9zZVwiOiAgICAge1widHlwZVwiOiBbIFwic3RyaW5nXCIgXX0sXG4gICAgICBcInRoZW1lXCI6ICAgICAgIHtcInR5cGVcIjogWyBcInN0cmluZ1wiIF19LFxuICAgICAgXCJ0cmVlc2hha2VcIjoge1widHlwZVwiOiBbIFwiYm9vbGVhblwiIF19LFxuICAgICAgXCJwYWNrYWdlc1wiOiAgICB7XCJ0eXBlXCI6IFsgXCJzdHJpbmdcIiwgXCJhcnJheVwiIF19XG4gICAgfSxcbiAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgLy8gXCJlcnJvck1lc3NhZ2VcIjoge1xuICAgIC8vICAgXCJvcHRpb25cIjogXCJzaG91bGQgYmUge0Jvb2xlYW59IChodHRwczovZ2l0aHViLmNvbS9vcmcvcmVwbyNhbmNob3IpXCJcbiAgICAvLyB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IDE5NjIsXG4gICAgZW1pdDogdHJ1ZSxcbiAgICBicm93c2VyOiB0cnVlLFxuICAgIHdhdGNoOiAneWVzJyxcbiAgICBwcm9maWxlOiAnJywgXG4gICAgZW52aXJvbm1lbnQ6ICdkZXZlbG9wbWVudCcsIFxuICAgIHZlcmJvc2U6ICdubycsXG4gICAgdG9vbGtpdDogJ21vZGVybicsXG4gICAgcGFja2FnZXM6IG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhcnMoKSB7XG4gIHJldHVybiB7XG4gICAgd2F0Y2hTdGFydGVkIDogZmFsc2UsXG4gICAgZmlyc3RUaW1lIDogdHJ1ZSxcbiAgICBmaXJzdENvbXBpbGU6IHRydWUsXG4gICAgYnJvd3NlckNvdW50IDogMCxcbiAgICBtYW5pZmVzdDogbnVsbCxcbiAgICBleHRQYXRoOiAnZXh0LXJlYWN0JyxcbiAgICBwbHVnaW5FcnJvcnM6IFtdLFxuICAgIGRlcHM6IFtdLFxuICAgIHJlYnVpbGQ6IHRydWVcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1h0eXBlKHN0cikge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCAnLScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RnJvbVNvdXJjZShtb2R1bGUsIG9wdGlvbnMsIGNvbXBpbGF0aW9uKSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzID0gbW9kdWxlLl9zb3VyY2UuX3ZhbHVlXG4gICAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgICBsb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIGV4dHJhY3RGcm9tU291cmNlJylcbiAgICB2YXIgZ2VuZXJhdGUgPSByZXF1aXJlKFwiQGJhYmVsL2dlbmVyYXRvclwiKS5kZWZhdWx0XG4gICAgdmFyIHBhcnNlID0gcmVxdWlyZShcImJhYnlsb25cIikucGFyc2VcbiAgICB2YXIgdHJhdmVyc2UgPSByZXF1aXJlKFwiYXN0LXRyYXZlcnNlXCIpXG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IFtdXG4gICAgXG4gICAgY29uc3QgYXN0ID0gcGFyc2UoanMsIHtcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICdmbG93JyxcbiAgICAgICAgJ2RvRXhwcmVzc2lvbnMnLFxuICAgICAgICAnb2JqZWN0UmVzdFNwcmVhZCcsXG4gICAgICAgICdjbGFzc1Byb3BlcnRpZXMnLFxuICAgICAgICAnZXhwb3J0RXh0ZW5zaW9ucycsXG4gICAgICAgICdhc3luY0dlbmVyYXRvcnMnLFxuICAgICAgICAnZnVuY3Rpb25CaW5kJyxcbiAgICAgICAgJ2Z1bmN0aW9uU2VudCcsXG4gICAgICAgICdkeW5hbWljSW1wb3J0J1xuICAgICAgXSxcbiAgICAgIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG4gICAgfSlcblxuICAgIGZ1bmN0aW9uIGFkZFR5cGUoYXJnTm9kZSkge1xuICAgICAgdmFyIHR5cGVcbiAgICAgIGlmIChhcmdOb2RlLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICB2YXIgeHR5cGUgPSB0b1h0eXBlKGFyZ05vZGUudmFsdWUpXG4gICAgICAgIGlmICh4dHlwZSAhPSAnZXh0cmVhY3QnKSB7XG4gICAgICAgICAgdHlwZSA9IHsgeHR5cGU6IHRvWHR5cGUoYXJnTm9kZS52YWx1ZSkgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0geyB4Y2xhc3M6IGpzLnNsaWNlKGFyZ05vZGUuc3RhcnQsIGFyZ05vZGUuZW5kKSB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHR5cGUpXG4gICAgICAgIHN0YXRlbWVudHMucHVzaChgRXh0LmNyZWF0ZSgke2NvbmZpZ30pYClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cmF2ZXJzZShhc3QsIHtcbiAgICAgIHByZTogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgICAgICAgICAmJiBub2RlLmNhbGxlZVxuICAgICAgICAgICAgJiYgbm9kZS5jYWxsZWUub2JqZWN0XG4gICAgICAgICAgICAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gJ0V4dCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhdGVtZW50cy5wdXNoKGdlbmVyYXRlKG5vZGUpLmNvZGUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PSAnVmFyaWFibGVEZWNsYXJhdG9yJyBcbiAgICAgICAgICAgICYmIG5vZGUuaW5pdCBcbiAgICAgICAgICAgICYmIG5vZGUuaW5pdC50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nIFxuICAgICAgICAgICAgJiYgbm9kZS5pbml0LmNhbGxlZSBcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG5vZGUuaW5pdC5jYWxsZWUubmFtZSA9PSAncmVhY3RpZnknKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuaW5pdC5hcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gbm9kZS5pbml0LmFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWx1ZU5vZGUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBhZGRUeXBlKHZhbHVlTm9kZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLyBDb252ZXJ0IFJlYWN0LmNyZWF0ZUVsZW1lbnQoLi4uKSBjYWxscyB0byB0aGUgZXF1aXZhbGVudCBFeHQuY3JlYXRlKC4uLikgY2FsbHMgdG8gcHV0IGluIHRoZSBtYW5pZmVzdC5cbiAgICAgICAgLy8gaWYgKG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9ueCcgXG4gICAgICAgIC8vICAgICAmJiBub2RlLmNhbGxlZS5vYmplY3QgXG4gICAgICAgIC8vICAgICAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gJ1JlYWN0JyBcbiAgICAgICAgLy8gICAgICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICdjcmVhdGVFbGVtZW50Jykge1xuICAgICAgICAvLyAgIGNvbnN0IFtwcm9wc10gPSBub2RlLmFyZ3VtZW50c1xuICAgICAgICAvLyAgIGxldCBjb25maWdcbiAgICAgICAgLy8gICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgICAvLyAgICAgY29uZmlnID0gZ2VuZXJhdGUocHJvcHMpLmNvZGVcbiAgICAgICAgLy8gICAgIGZvciAobGV0IGtleSBpbiB0eXBlKSB7XG4gICAgICAgIC8vICAgICAgIGNvbmZpZyA9IGB7XFxuICAke2tleX06ICcke3R5cGVba2V5XX0nLCR7Y29uZmlnLnNsaWNlKDEpfWBcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodHlwZSlcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBzdGF0ZW1lbnRzXG4gIH1cbiAgY2F0Y2goZSkge1xuICAgIGNvbnNvbGUubG9nKG1vZHVsZS5yZXNvdXJjZSlcbiAgICBjb25zb2xlLmxvZyhqcylcbiAgICBjb25zb2xlLmxvZyhlKVxuICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdleHRyYWN0RnJvbVNvdXJjZTogJyArIGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gX2RvbmUodmFycywgb3B0aW9ucykge1xuICB0cnkge1xuICAgIGNvbnN0IGxvZyA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ1xuICAgIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gICAgbG9ndihvcHRpb25zLCdGVU5DVElPTiBfZG9uZScpXG5cbiAgICB0cnkge1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSlcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxuICBjYXRjaChlKSB7XG4gICAgcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndihvcHRpb25zLGUpXG4gIH1cbn0iXX0= \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/src/angularUtil.js b/packages/ext-webpack-plugin-orig/src/angularUtil.js deleted file mode 100644 index f19c6e0..0000000 --- a/packages/ext-webpack-plugin-orig/src/angularUtil.js +++ /dev/null @@ -1,290 +0,0 @@ -"use strict" - -export function getValidateOptions() { - return { - "type": "object", - "properties": { - "framework": {"type": [ "string" ]}, - "toolkit": {"type": [ "string" ]}, - "port": {"type": [ "integer" ]}, - "emit": {"type": [ "boolean" ]}, - "browser": {"type": [ "boolean" ]}, - "watch": {"type": [ "string" ]}, - "profile": {"type": [ "string" ]}, - "environment": {"type": [ "string" ]}, - "verbose": {"type": [ "string" ]}, - "theme": {"type": [ "string" ]}, - "treeshake": {"type": [ "boolean" ]}, - "packages": {"type": [ "string", "array" ]} - }, - "additionalProperties": false - } -} - -export function getDefaultOptions() { - return { - port: 1962, - emit: true, - browser: true, - watch: 'yes', - profile: '', - treeshake: false, - environment: 'development', - verbose: 'no', - toolkit: 'modern', - packages: null - } -} - -export function getDefaultVars() { - return { - watchStarted : false, - firstTime : true, - firstCompile: true, - browserCount : 0, - manifest: null, - extPath: 'ext-angular', - pluginErrors: [], - deps: [], - usedExtComponents: [], - rebuild: true - } -} - -function toXtype(str) { - return str.toLowerCase().replace(/_/g, '-') -} - -export function extractFromSource(module, options, compilation, extComponents) { - try { - var js = module._source._value - const logv = require('./pluginUtil').logv - //logv(options,'HOOK succeedModule, FUNCTION extractFromSource: ' + module.resource) - - var statements = [] - - var generate = require("@babel/generator").default - var parse = require("babylon").parse - var traverse = require("ast-traverse") - - var ast = parse(js, { - plugins: [ - 'typescript', - 'flow', - 'doExpressions', - 'objectRestSpread', - 'classProperties', - 'exportDefaultFrom', - 'exportExtensions', - 'asyncGenerators', - 'functionBind', - 'functionSent', - 'dynamicImport' - ], - sourceType: 'module' - }) - - traverse(ast, { - pre: function (node) { - if (node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name === 'Ext') { - statements.push(generate(node).code) - } - if(node.type === 'StringLiteral') { - let code = node.value - for (var i = 0; i < code.length; ++i) { - if (code.charAt(i) == '<') { - if (code.substr(i, 4) == '') + 3 - } else if (code.charAt(i+1) !== '/') { - var start = code.substring(i) - var spaceEnd = start.indexOf(' ') - var newlineEnd = start.indexOf('\n') - var tagEnd = start.indexOf('>') - var end = Math.min(spaceEnd, newlineEnd, tagEnd) - if (end >= 0) { - var xtype = toXtype(start.substring(1, end)) - if(extComponents.includes(xtype)) { - var theValue = node.value.toLowerCase() - if (theValue.indexOf('doctype html') == -1) { - var type = {xtype: xtype} - let config = JSON.stringify(type) - statements.push(`Ext.create(${config})`) - } - } - i += end - } - } - } - } - } - } - }) - - return statements - } - catch(e) { - console.log(e) - compilation.errors.push('extractFromSource: ' + e) - return [] - } -} - -function changeIt(o) { - const path = require('path') - const fsx = require('fs-extra') - const wherePath = path.resolve(process.cwd(), o.where) - var js = fsx.readFileSync(wherePath).toString() - var newJs = js.replace(o.from,o.to); - fsx.writeFileSync(wherePath, newJs, 'utf-8', ()=>{return}) -} - -export function _toProd(vars, options) { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _toProd') - try { - const fsx = require('fs-extra') - const fs = require('fs') - const mkdirp = require('mkdirp') - const path = require('path') - - const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); - if (!fs.existsSync(pathExtAngularProd)) { - mkdirp.sync(pathExtAngularProd) - const t = require('./artifacts').extAngularModule('', '', '') - fsx.writeFileSync(`${pathExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', () => { - return - }) - } - - var o = {} - o.where = 'src/app/app.module.ts' - o.from = `import { ExtAngularModule } from '@sencha/ext-angular'` - o.to = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'` - changeIt(o) - - o = {} - o.where = 'src/main.ts' - o.from = `bootstrapModule( AppModule );` - o.to = `enableProdMode();bootstrapModule(AppModule);` - changeIt(o) - } - catch (e) { - console.log(e) - return [] - } -} - -export function _toDev(vars, options) { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _toProd') - try { - const path = require('path') - const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); - require('rimraf').sync(pathExtAngularProd); - - var o = {} - o.where = 'src/app/app.module.ts' - o.from = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'` - o.to = `import { ExtAngularModule } from '@sencha/ext-angular'` - changeIt(o) - - o = {} - o.where = 'src/main.ts' - o.from = `enableProdMode();bootstrapModule(AppModule);` - o.to = `bootstrapModule( AppModule );` - changeIt(o) - } - catch (e) { - console.log(e) - return [] - } -} - - -export function _getAllComponents(vars, options) { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _getAllComponents') - - try { - const path = require('path') - const fsx = require('fs-extra') - - var extComponents = [] - const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib') - var files = fsx.readdirSync(packageLibPath) - files.forEach((fileName) => { - if (fileName && fileName.substr(0, 4) == 'ext-') { - var end = fileName.substr(4).indexOf('.component') - if (end >= 0) { - extComponents.push(fileName.substring(4, end + 4)) - } - } - }) - return extComponents - - } - catch (e) { - console.log(e) - return [] - } -} - -export function _writeFilesToProdFolder(vars, options) { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _writeFilesToProdFolder') - - try { - const path = require('path') - const fsx = require('fs-extra') - - const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib') - const pathToExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`) - const string = 'Ext.create({\"xtype\":\"' - - vars.deps.forEach(code => { - var index = code.indexOf(string) - if (index >= 0) { - code = code.substring(index + string.length) - var end = code.indexOf('\"') - vars.usedExtComponents.push(code.substr(0, end)) - } - }) - vars.usedExtComponents = [...new Set(vars.usedExtComponents)] - - var writeToPathWritten = false - var moduleVars = { - imports: '', - exports: '', - declarations: '' - } - vars.usedExtComponents.forEach(xtype => { - var capclassname = xtype.charAt(0).toUpperCase() + xtype.replace(/-/g, "_").slice(1) - moduleVars.imports = moduleVars.imports + `import { Ext${capclassname}Component } from './ext-${xtype}.component';\n` - moduleVars.exports = moduleVars.exports + ` Ext${capclassname}Component,\n` - moduleVars.declarations = moduleVars.declarations + ` Ext${capclassname}Component,\n` - var classFile = `ext-${xtype}.component.ts` - const contents = fsx.readFileSync(`${packageLibPath}/${classFile}`).toString() - fsx.writeFileSync(`${pathToExtAngularProd}/${classFile}`, contents, 'utf-8', ()=>{return}) - writeToPathWritten = true - }) - if (writeToPathWritten) { - var t = require('./artifacts').extAngularModule( - moduleVars.imports, moduleVars.exports, moduleVars.declarations - ) - fsx.writeFileSync(`${pathToExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', ()=>{return}) - } - - const baseContent = fsx.readFileSync(`${packageLibPath}/base.ts`).toString() - fsx.writeFileSync(`${pathToExtAngularProd}/base.ts`, baseContent, 'utf-8', ()=>{return}) - - } - catch (e) { - console.log(e) - return [] - } -} \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/src/index.js b/packages/ext-webpack-plugin-orig/src/index.js deleted file mode 100644 index e000376..0000000 --- a/packages/ext-webpack-plugin-orig/src/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict' -require('@babel/polyfill') -const v = require('./pluginUtil').logv -export default class ExtWebpackPlugin { - constructor(options) { - this.plugin = require(`./pluginUtil`)._constructor(options) - } - - apply(compiler) { - const vars = this.plugin.vars - const options = this.plugin.options - v(options,'FUNCTION apply') - if (!compiler.hooks) {console.log('not webpack 4');return} - - compiler.hooks.thisCompilation.tap(`ext-this-compilation`, (compilation) => { - v(options,'HOOK thisCompilation') - if (vars.pluginErrors.length > 0) { - compilation.errors.push( new Error(vars.pluginErrors.join("")) ) - } - }) - if (vars.pluginErrors.length > 0) { - return - } - - if ( vars.framework == 'extjs') { - compiler.hooks.compilation.tap(`ext-compilation`, (compilation) => { - v(options,'HOOK compilation (empty)') - }) - compiler.hooks.afterCompile.tap('ext-after-compile', (compilation) => { - v(options,'HOOK afterCompile') - require(`./extjsUtil`)._afterCompile(compilation, vars, options) - }) - } - else { - compiler.hooks.compilation.tap(`ext-compilation`, (compilation) => { - v(options,'HOOK compilation') - require(`./pluginUtil`)._compilation(compiler, compilation, vars, options) - }) - compiler.hooks.afterCompile.tap('ext-after-compile', (compilation) => { - v(options,'HOOK afterCompile') - require(`./pluginUtil`)._afterCompile(compiler, compilation, vars, options) - }) - } - - if((options.treeshake == true && options.environment == 'production') || - (options.treeshake == false && options.environment != 'production')) - { - compiler.hooks.emit.tapAsync(`ext-emit`, (compilation, callback) => { - v(options,'HOOK emit') - require(`./pluginUtil`).emit(compiler, compilation, vars, options, callback) - }) - } - - compiler.hooks.done.tap(`ext-done`, () => { - v(options,'HOOK done') - require(`./pluginUtil`)._done(vars, options) - require('./pluginUtil').log(vars.app + `Completed ext-webpack-plugin processing`) - }) - } -} diff --git a/packages/ext-webpack-plugin-orig/src/pluginUtil.js b/packages/ext-webpack-plugin-orig/src/pluginUtil.js deleted file mode 100644 index 67284e6..0000000 --- a/packages/ext-webpack-plugin-orig/src/pluginUtil.js +++ /dev/null @@ -1,538 +0,0 @@ -//********** -export function _constructor(options) { - const fs = require('fs') - - var thisVars = {} - var thisOptions = {} - var plugin = {} - - if (options.framework == undefined) { - thisVars.pluginErrors = [] - thisVars.pluginErrors.push('webpack config: framework parameter on ext-webpack-plugin is not defined - values: react, angular, extjs') - plugin.vars = thisVars - return plugin - } - - const validateOptions = require('schema-utils') - validateOptions(require(`./${options.framework}Util`).getValidateOptions(), options, '') - thisVars = require(`./${options.framework}Util`).getDefaultVars() - thisVars.framework = options.framework - switch(thisVars.framework) { - case 'extjs': - thisVars.pluginName = 'ext-webpack-plugin' - break; - case 'react': - thisVars.pluginName = 'ext-react-webpack-plugin' - break; - case 'angular': - thisVars.pluginName = 'ext-angular-webpack-plugin' - break; - default: - thisVars.pluginName = 'ext-webpack-plugin' - } - - thisVars.app = require('./pluginUtil')._getApp() - logv(options, `pluginName - ${thisVars.pluginName}`) - logv(options, `thisVars.app - ${thisVars.app}`) - - const rc = (fs.existsSync(`.ext-${thisVars.framework}rc`) && JSON.parse(fs.readFileSync(`.ext-${thisVars.framework}rc`, 'utf-8')) || {}) - thisOptions = { ...require(`./${thisVars.framework}Util`).getDefaultOptions(), ...options, ...rc } - logv(options, `thisOptions - ${JSON.stringify(thisOptions)}`) - - if (thisOptions.environment == 'production') - {thisVars.production = true} - else - {thisVars.production = false} - logv(options, `thisVars - ${JSON.stringify(thisVars)}`) - - log(require('./pluginUtil')._getVersions(thisVars.app, thisVars.pluginName, thisVars.framework)) - log(thisVars.app + 'Building for ' + thisOptions.environment) - log(thisVars.app + 'Treeshake is ' + thisOptions.treeshake) - - if (thisVars.production == true && thisOptions.treeshake == true && options.framework == 'angular') { - require(`./angularUtil`)._toProd(thisVars, thisOptions) - } - - plugin.vars = thisVars - plugin.options = thisOptions - require('./pluginUtil').logv(options, 'FUNCTION constructor (end)') - return plugin -} - -//********** -export function _compilation(compiler, compilation, vars, options) { - try { - require('./pluginUtil').logv(options, 'FUNCTION _compilation') - - var extComponents = [] - - if (vars.production) { - if (options.framework == 'angular' && options.treeshake) { - extComponents = require('./angularUtil')._getAllComponents(vars, options) - } - - compilation.hooks.succeedModule.tap(`ext-succeed-module`, module => { - //require('./pluginUtil').logv(options, 'HOOK succeedModule') - if (module.resource && !module.resource.match(/node_modules/)) { - if(module.resource.match(/\.html$/) != null) { - if(module._source._value.toLowerCase().includes('doctype html') == false) { - vars.deps = [...(vars.deps || []), ...require(`./${vars.framework}Util`).extractFromSource(module, options, compilation, extComponents)] - } - } - else { - vars.deps = [...(vars.deps || []), ...require(`./${vars.framework}Util`).extractFromSource(module, options, compilation, extComponents)] - - } - } - // if (extComponents.length && module.resource && (module.resource.match(/\.(j|t)sx?$/) || - // options.framework == 'angular' && module.resource.match(/\.html$/)) && - // !module.resource.match(/node_modules/) && !module.resource.match(`/ext-{$options.framework}/build/`)) { - // vars.deps = [...(vars.deps || []), ...require(`./${vars.framework}Util`).extractFromSource(module, options, compilation, extComponents)] - // } - }) - - if (options.framework == 'angular' && options.treeshake == true) { - compilation.hooks.finishModules.tap(`ext-finish-modules`, modules => { - require('./pluginUtil').logv(options, 'HOOK finishModules') - require('./angularUtil')._writeFilesToProdFolder(vars, options) - }) - } - - } - - if ( - (options.framework == 'angular' && options.treeshake == false) || - (options.framework == 'react') - ) { - compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tap(`ext-html-generation`,(data) => { - logv(options,'HOOK ext-html-generation') - const path = require('path') - - //var outputPath = '' - // if (compiler.options.devServer) { - // if (compiler.outputPath === '/') { - // outputPath = path.join(compiler.options.devServer.contentBase, outputPath) - // } - // else { - // if (compiler.options.devServer.contentBase == undefined) { - // outputPath = 'build' - // } - // else { - // outputPath = '' - // } - // } - // } - // else { - // outputPath = 'build' - // } - // outputPath = outputPath.replace(process.cwd(), '').trim() - //var jsPath = path.join(outputPath, vars.extPath, 'ext.js') - //var cssPath = path.join(outputPath, vars.extPath, 'ext.css') - - var jsPath = path.join(vars.extPath, 'ext.js') - var cssPath = path.join(vars.extPath, 'ext.css') - data.assets.js.unshift(jsPath) - data.assets.css.unshift(cssPath) - log(vars.app + `Adding ${jsPath} and ${cssPath} to index.html`) - }) - } - else { - logv(options,'skipped HOOK ext-html-generation') - } - } - catch(e) { - require('./pluginUtil').logv(options,e) - compilation.errors.push('_compilation: ' + e) - } -} - -//********** -export function _afterCompile(compiler, compilation, vars, options) { - require('./pluginUtil').logv(options, 'FUNCTION _afterCompile') -} - -//********** -export async function emit(compiler, compilation, vars, options, callback) { - try { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION emit') - var app = vars.app - var framework = vars.framework - const path = require('path') - const _buildExtBundle = require('./pluginUtil')._buildExtBundle - let outputPath = path.join(compiler.outputPath,vars.extPath) - if (compiler.outputPath === '/' && compiler.options.devServer) { - outputPath = path.join(compiler.options.devServer.contentBase, outputPath) - } - logv(options,'outputPath: ' + outputPath) - logv(options,'framework: ' + framework) - if (options.emit == true) { - if (framework != 'extjs') { - _prepareForBuild(app, vars, options, outputPath, compilation) - } - else { - if (options.framework == 'angular' && options.treeshake == false) { - require(`./${framework}Util`)._prepareForBuild(app, vars, options, outputPath, compilation) - } - else { - require(`./${framework}Util`)._prepareForBuild(app, vars, options, outputPath, compilation) - } - } - - var command = '' - if (options.watch == 'yes' && vars.production == false) { - command = 'watch' - } - else { - command = 'build' - } - - if (vars.rebuild == true) { - var parms = [] - if (options.profile == undefined || options.profile == '' || options.profile == null) { - if (command == 'build') { - parms = ['app', command, options.environment] - } - else { - parms = ['app', command, '--web-server', 'false', options.environment] - } - - } - else { - if (command == 'build') { - parms = ['app', command, options.profile, options.environment] - } - else { - parms = ['app', command, '--web-server', 'false', options.profile, options.environment] - } - } - - if (vars.watchStarted == false) { - await _buildExtBundle(app, compilation, outputPath, parms, options) - vars.watchStarted = true - } - callback() - } - else { - callback() - } - } - else { - log(`${vars.app}FUNCTION emit not run`) - callback() - } - } - catch(e) { - require('./pluginUtil').logv(options,e) - compilation.errors.push('emit: ' + e) - callback() - } -} - -//********** -export function _prepareForBuild(app, vars, options, output, compilation) { - try { - logv(options,'FUNCTION _prepareForBuild') - const rimraf = require('rimraf') - const mkdirp = require('mkdirp') - const fsx = require('fs-extra') - const fs = require('fs') - const path = require('path') - - var packages = options.packages - var toolkit = options.toolkit - var theme = options.theme - - theme = theme || (toolkit === 'classic' ? 'theme-triton' : 'theme-material') - logv(options,'firstTime: ' + vars.firstTime) - if (vars.firstTime) { - rimraf.sync(output) - mkdirp.sync(output) - const buildXML = require('./artifacts').buildXML - const createAppJson = require('./artifacts').createAppJson - const createWorkspaceJson = require('./artifacts').createWorkspaceJson - const createJSDOMEnvironment = require('./artifacts').createJSDOMEnvironment - - fs.writeFileSync(path.join(output, 'build.xml'), buildXML(vars.production, options, output), 'utf8') - fs.writeFileSync(path.join(output, 'app.json'), createAppJson(theme, packages, toolkit, options, output), 'utf8') - fs.writeFileSync(path.join(output, 'jsdom-environment.js'), createJSDOMEnvironment(options, output), 'utf8') - fs.writeFileSync(path.join(output, 'workspace.json'), createWorkspaceJson(options, output), 'utf8') - - var framework = vars.framework; - //because of a problem with colorpicker - if (fs.existsSync(path.join(process.cwd(),`ext-${framework}/ux/`))) { - var fromPath = path.join(process.cwd(), `ext-${framework}/ux/`) - var toPath = path.join(output, 'ux') - fsx.copySync(fromPath, toPath) - log(app + 'Copying (ux) ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')) - } - if (fs.existsSync(path.join(process.cwd(),`ext-${framework}/packages/`))) { - var fromPath = path.join(process.cwd(), `ext-${framework}/packages/`) - var toPath = path.join(output, 'packages') - fsx.copySync(fromPath, toPath) - log(app + 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')) - } - if (fs.existsSync(path.join(process.cwd(),`ext-${framework}/overrides/`))) { - var fromPath = path.join(process.cwd(), `ext-${framework}/overrides/`) - var toPath = path.join(output, 'overrides') - fsx.copySync(fromPath, toPath) - log(app + 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')) - } - if (fs.existsSync(path.join(process.cwd(),'resources/'))) { - var fromResources = path.join(process.cwd(), 'resources/') - var toResources = path.join(output, '../resources') - fsx.copySync(fromResources, toResources) - log(app + 'Copying ' + fromResources.replace(process.cwd(), '') + ' to: ' + toResources.replace(process.cwd(), '')) - } - } - vars.firstTime = false - var js = '' - if (vars.production) { - js = vars.deps.join(';\n'); - } - else { - js = 'Ext.require("Ext.*")' - } - if (vars.manifest === null || js !== vars.manifest) { - vars.manifest = js - const manifest = path.join(output, 'manifest.js') - fs.writeFileSync(manifest, js, 'utf8') - vars.rebuild = true - var bundleDir = output.replace(process.cwd(), '') - if (bundleDir.trim() == '') {bundleDir = './'} - log(app + 'Building Ext bundle at: ' + bundleDir) - } - else { - vars.rebuild = false - log(app + 'Ext rebuild NOT needed') - } - } - catch(e) { - require('./pluginUtil').logv(options,e) - compilation.errors.push('_prepareForBuild: ' + e) - } -} - -//********** -export function _buildExtBundle(app, compilation, outputPath, parms, options) { - try { - const fs = require('fs') - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _buildExtBundle') - - let sencha; try { sencha = require('@sencha/cmd') } catch (e) { sencha = 'sencha' } - if (fs.existsSync(sencha)) { - logv(options,'sencha folder exists') - } - else { - logv(options,'sencha folder DOES NOT exist') - } - - return new Promise((resolve, reject) => { - const onBuildDone = () => { - logv(options,'onBuildDone') - resolve() - } - - var opts = { cwd: outputPath, silent: true, stdio: 'pipe', encoding: 'utf-8'} - executeAsync(app, sencha, parms, opts, compilation, options).then ( - function() { onBuildDone() }, - function(reason) { reject(reason) } - ) - }) - } - catch(e) { - console.log('e') - require('./pluginUtil').logv(options,e) - compilation.errors.push('_buildExtBundle: ' + e) - callback() - } -} - -//********** -export function _done(vars, options) { - try { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _done') - - - if (vars.production == true && options.treeshake == false && options.framework == 'angular') { - require(`./${options.framework}Util`)._toDev(vars, options) - } - - - try { - if(options.browser == true && options.watch == 'yes' && vars.production == false) { - if (vars.browserCount == 0) { - var url = 'http://localhost:' + options.port - require('./pluginUtil').log(vars.app + `Opening browser at ${url}`) - vars.browserCount++ - const opn = require('opn') - opn(url) - } - } - } - catch (e) { - console.log(e) - //compilation.errors.push('show browser window - ext-done: ' + e) - } - } - catch(e) { - require('./pluginUtil').logv(options,e) - } -} - -//********** -export async function executeAsync (app, command, parms, opts, compilation, options) { - try { - //const DEFAULT_SUBSTRS = ['[INF] Loading', '[INF] Processing', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Server", "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; - const DEFAULT_SUBSTRS = ["[INF] xServer", '[INF] Loading', '[INF] Append', '[INF] Processing', '[INF] Processing Build', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; - var substrings = DEFAULT_SUBSTRS - var chalk = require('chalk') - const crossSpawn = require('cross-spawn') - const log = require('./pluginUtil').log - logv(options, 'FUNCTION executeAsync') - await new Promise((resolve, reject) => { - logv(options,`command - ${command}`) - logv(options, `parms - ${parms}`) - logv(options, `opts - ${JSON.stringify(opts)}`) - let child = crossSpawn(command, parms, opts) - child.on('close', (code, signal) => { - logv(options, `on close: ` + code) - if(code === 0) { resolve(0) } - else { compilation.errors.push( new Error(code) ); resolve(0) } - }) - child.on('error', (error) => { - logv(options, `on error`) - compilation.errors.push(error) - resolve(0) - }) - child.stdout.on('data', (data) => { - var str = data.toString().replace(/\r?\n|\r/g, " ").trim() - logv(options, `${str}`) - if (data && data.toString().match(/Fashion waiting for changes\.\.\./)) { - const fs = require('fs'); - var filename = process.cwd()+'/src/index.js'; - var data = fs.readFileSync(filename); - fs.writeFileSync(filename, data + ' ', 'utf8') - logv(options, `touching ${filename}`) - resolve(0) - } - else { - if (substrings.some(function(v) { return data.indexOf(v) >= 0; })) { - str = str.replace("[INF]", "") - str = str.replace("[LOG]", "") - str = str.replace(process.cwd(), '').trim() - if (str.includes("[ERR]")) { - compilation.errors.push(app + str.replace(/^\[ERR\] /gi, '')); - str = str.replace("[ERR]", `${chalk.red("[ERR]")}`) - } - log(`${app}${str}`) - } - } - }) - child.stderr.on('data', (data) => { - logv(options, `error on close: ` + data) - var str = data.toString().replace(/\r?\n|\r/g, " ").trim() - var strJavaOpts = "Picked up _JAVA_OPTIONS"; - var includes = str.includes(strJavaOpts) - if (!includes) { - console.log(`${app} ${chalk.red("[ERR]")} ${str}`) - } - }) - }) - } - catch(e) { - require('./pluginUtil').logv(options,e) - compilation.errors.push('executeAsync: ' + e) - callback() - } -} - -export function log(s) { - require('readline').cursorTo(process.stdout, 0) - try { - process.stdout.clearLine() - } - catch(e) {} - process.stdout.write(s) - process.stdout.write('\n') -} - -export function logv(options, s) { - if (options.verbose == 'yes') { - require('readline').cursorTo(process.stdout, 0) - try { - process.stdout.clearLine() - } - catch(e) {} - process.stdout.write(`-verbose: ${s}`) - process.stdout.write('\n') - } -} - -export function _getApp() { - var chalk = require('chalk') - var prefix = `` - const platform = require('os').platform() - if (platform == 'darwin') { prefix = `ℹ 「ext」:` } - else { prefix = `i [ext]:` } - return `${chalk.green(prefix)} ` -} - -export function _getVersions(app, pluginName, frameworkName) { - const path = require('path') - const fs = require('fs') - - var v = {} - var pluginPath = path.resolve(process.cwd(),'node_modules/@sencha', pluginName) - var pluginPkg = (fs.existsSync(pluginPath+'/package.json') && JSON.parse(fs.readFileSync(pluginPath+'/package.json', 'utf-8')) || {}); - v.pluginVersion = pluginPkg.version - v._resolved = pluginPkg._resolved - if (v._resolved == undefined) { - v.edition = `Commercial` - } - else { - if (-1 == v._resolved.indexOf('community')) { - v.edition = `Commercial` - } - else { - v.edition = `Community` - } - } - - var webpackPath = path.resolve(process.cwd(),'node_modules/webpack') - var webpackPkg = (fs.existsSync(webpackPath+'/package.json') && JSON.parse(fs.readFileSync(webpackPath+'/package.json', 'utf-8')) || {}); - v.webpackVersion = webpackPkg.version - - var extPath = path.resolve(process.cwd(),'node_modules/@sencha/ext') - var extPkg = (fs.existsSync(extPath+'/package.json') && JSON.parse(fs.readFileSync(extPath+'/package.json', 'utf-8')) || {}); - v.extVersion = extPkg.sencha.version - - var cmdPath = path.resolve(process.cwd(),`node_modules/@sencha/cmd`) - var cmdPkg = (fs.existsSync(cmdPath+'/package.json') && JSON.parse(fs.readFileSync(cmdPath+'/package.json', 'utf-8')) || {}); - v.cmdVersion = cmdPkg.version_full - - if (v.cmdVersion == undefined) { - var cmdPath = path.resolve(process.cwd(),`node_modules/@sencha/${pluginName}/node_modules/@sencha/cmd`) - var cmdPkg = (fs.existsSync(cmdPath+'/package.json') && JSON.parse(fs.readFileSync(cmdPath+'/package.json', 'utf-8')) || {}); - v.cmdVersion = cmdPkg.version_full - } - - var frameworkInfo = '' - if (frameworkName != undefined && frameworkName != 'extjs') { - var frameworkPath = '' - if (frameworkName == 'react') { - frameworkPath = path.resolve(process.cwd(),'node_modules/react') - } - if (frameworkName == 'angular') { - frameworkPath = path.resolve(process.cwd(),'node_modules/@angular/core') - } - var frameworkPkg = (fs.existsSync(frameworkPath+'/package.json') && JSON.parse(fs.readFileSync(frameworkPath+'/package.json', 'utf-8')) || {}); - v.frameworkVersion = frameworkPkg.version - frameworkInfo = ', ' + frameworkName + ' v' + v.frameworkVersion - } - return app + 'ext-webpack-plugin v' + v.pluginVersion + ', Ext JS v' + v.extVersion + ' ' + v.edition + ' Edition, Sencha Cmd v' + v.cmdVersion + ', webpack v' + v.webpackVersion + frameworkInfo - } \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/angularUtil.js b/packages/ext-webpack-plugin/dist/angularUtil.js new file mode 100644 index 0000000..0601284 --- /dev/null +++ b/packages/ext-webpack-plugin/dist/angularUtil.js @@ -0,0 +1,256 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports._getDefaultVars = _getDefaultVars; +exports._extractFromSource = _extractFromSource; +exports._toProd = _toProd; +exports._toDev = _toDev; +exports._getAllComponents = _getAllComponents; +exports._writeFilesToProdFolder = _writeFilesToProdFolder; + +function _getDefaultVars() { + return { + touchFile: '/src/themer.ts', + watchStarted: false, + buildstep: '1 of 1', + firstTime: true, + firstCompile: true, + browserCount: 0, + manifest: null, + extPath: 'ext', + pluginErrors: [], + deps: [], + usedExtComponents: [], + rebuild: true + }; +} + +function _extractFromSource(module, options, compilation, extComponents) { + const logv = require('./pluginUtil').logv; + + const verbose = options.verbose; + logv(verbose, 'FUNCTION _extractFromSource'); + var js = module._source._value; + var statements = []; + + var generate = require("@babel/generator").default; + + var parse = require("babylon").parse; + + var traverse = require("ast-traverse"); + + var ast = parse(js, { + plugins: ['typescript', 'flow', 'doExpressions', 'objectRestSpread', 'classProperties', 'exportDefaultFrom', 'exportExtensions', 'asyncGenerators', 'functionBind', 'functionSent', 'dynamicImport'], + sourceType: 'module' + }); + traverse(ast, { + pre: function (node) { + if (node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name === 'Ext') { + statements.push(generate(node).code); + } + + if (node.type === 'StringLiteral') { + let code = node.value; + + for (var i = 0; i < code.length; ++i) { + if (code.charAt(i) == '<') { + if (code.substr(i, 4) == '') + 3; + } else if (code.charAt(i + 1) !== '/') { + var start = code.substring(i); + var spaceEnd = start.indexOf(' '); + var newlineEnd = start.indexOf('\n'); + var tagEnd = start.indexOf('>'); + var end = Math.min(spaceEnd, newlineEnd, tagEnd); + + if (end >= 0) { + var xtype = require('./pluginUtil')._toXtype(start.substring(1, end)); + + if (extComponents.includes(xtype)) { + var theValue = node.value.toLowerCase(); + + if (theValue.indexOf('doctype html') == -1) { + var type = { + xtype: xtype + }; + let config = JSON.stringify(type); + statements.push(`Ext.create(${config})`); + } + } + + i += end; + } + } + } + } + } + } + }); + return statements; +} + +function changeIt(o) { + const path = require('path'); + + const fsx = require('fs-extra'); + + const wherePath = path.resolve(process.cwd(), o.where); + var js = fsx.readFileSync(wherePath).toString(); + var newJs = js.replace(o.from, o.to); + fsx.writeFileSync(wherePath, newJs, 'utf-8', () => { + return; + }); +} + +function _toProd(vars, options) { + const log = require('./pluginUtil').log; + + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _toProd'); + + const fsx = require('fs-extra'); + + const fs = require('fs'); + + const mkdirp = require('mkdirp'); + + const path = require('path'); + + const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); + + if (!fs.existsSync(pathExtAngularProd)) { + mkdirp.sync(pathExtAngularProd); + + const t = require('./artifacts').extAngularModule('', '', ''); + + fsx.writeFileSync(`${pathExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', () => { + return; + }); + } + + var o = {}; + o.where = 'src/app/app.module.ts'; + o.from = `import { ExtAngularModule } from '@sencha/ext-angular'`; + o.to = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'`; + changeIt(o); + o = {}; + o.where = 'src/main.ts'; + o.from = `bootstrapModule( AppModule );`; + o.to = `enableProdMode();bootstrapModule(AppModule);`; + changeIt(o); +} + +function _toDev(vars, options) { + const log = require('./pluginUtil').log; + + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _toDev'); + + const path = require('path'); + + const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); + + require('rimraf').sync(pathExtAngularProd); + + var o = {}; + o.where = 'src/app/app.module.ts'; + o.from = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'`; + o.to = `import { ExtAngularModule } from '@sencha/ext-angular'`; + changeIt(o); + o = {}; + o.where = 'src/main.ts'; + o.from = `enableProdMode();bootstrapModule(AppModule);`; + o.to = `bootstrapModule( AppModule );`; + changeIt(o); +} + +function _getAllComponents(vars, options) { + const log = require('./pluginUtil').log; + + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _getAllComponents'); + + const path = require('path'); + + const fsx = require('fs-extra'); // log(vars.app, `Getting all referenced ext-${options.framework} modules`) + + + var extComponents = []; + const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib'); + var files = fsx.readdirSync(packageLibPath); + files.forEach(fileName => { + if (fileName && fileName.substr(0, 4) == 'ext-') { + var end = fileName.substr(4).indexOf('.component'); + + if (end >= 0) { + extComponents.push(fileName.substring(4, end + 4)); + } + } + }); + log(vars.app, `Writing all referenced ext-${options.framework} modules`); + return extComponents; +} + +function _writeFilesToProdFolder(vars, options) { + const log = require('./pluginUtil').log; + + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _writeFilesToProdFolder'); + + const path = require('path'); + + const fsx = require('fs-extra'); + + const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib'); + const pathToExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); + const string = 'Ext.create({\"xtype\":\"'; + vars.deps.forEach(code => { + var index = code.indexOf(string); + + if (index >= 0) { + code = code.substring(index + string.length); + var end = code.indexOf('\"'); + vars.usedExtComponents.push(code.substr(0, end)); + } + }); + vars.usedExtComponents = [...new Set(vars.usedExtComponents)]; + var writeToPathWritten = false; + var moduleVars = { + imports: '', + exports: '', + declarations: '' + }; + vars.usedExtComponents.forEach(xtype => { + var capclassname = xtype.charAt(0).toUpperCase() + xtype.replace(/-/g, "_").slice(1); + moduleVars.imports = moduleVars.imports + `import { Ext${capclassname}Component } from './ext-${xtype}.component';\n`; + moduleVars.exports = moduleVars.exports + ` Ext${capclassname}Component,\n`; + moduleVars.declarations = moduleVars.declarations + ` Ext${capclassname}Component,\n`; + var classFile = `ext-${xtype}.component.ts`; + const contents = fsx.readFileSync(`${packageLibPath}/${classFile}`).toString(); + fsx.writeFileSync(`${pathToExtAngularProd}/${classFile}`, contents, 'utf-8', () => { + return; + }); + writeToPathWritten = true; + }); + + if (writeToPathWritten) { + var t = require('./artifacts').extAngularModule(moduleVars.imports, moduleVars.exports, moduleVars.declarations); + + fsx.writeFileSync(`${pathToExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', () => { + return; + }); + } + + const baseContent = fsx.readFileSync(`${packageLibPath}/base.ts`).toString(); + fsx.writeFileSync(`${pathToExtAngularProd}/base.ts`, baseContent, 'utf-8', () => { + return; + }); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hbmd1bGFyVXRpbC5qcyJdLCJuYW1lcyI6WyJfZ2V0RGVmYXVsdFZhcnMiLCJ0b3VjaEZpbGUiLCJ3YXRjaFN0YXJ0ZWQiLCJidWlsZHN0ZXAiLCJmaXJzdFRpbWUiLCJmaXJzdENvbXBpbGUiLCJicm93c2VyQ291bnQiLCJtYW5pZmVzdCIsImV4dFBhdGgiLCJwbHVnaW5FcnJvcnMiLCJkZXBzIiwidXNlZEV4dENvbXBvbmVudHMiLCJyZWJ1aWxkIiwiX2V4dHJhY3RGcm9tU291cmNlIiwibW9kdWxlIiwib3B0aW9ucyIsImNvbXBpbGF0aW9uIiwiZXh0Q29tcG9uZW50cyIsImxvZ3YiLCJyZXF1aXJlIiwidmVyYm9zZSIsImpzIiwiX3NvdXJjZSIsIl92YWx1ZSIsInN0YXRlbWVudHMiLCJnZW5lcmF0ZSIsImRlZmF1bHQiLCJwYXJzZSIsInRyYXZlcnNlIiwiYXN0IiwicGx1Z2lucyIsInNvdXJjZVR5cGUiLCJwcmUiLCJub2RlIiwidHlwZSIsImNhbGxlZSIsIm9iamVjdCIsIm5hbWUiLCJwdXNoIiwiY29kZSIsInZhbHVlIiwiaSIsImxlbmd0aCIsImNoYXJBdCIsInN1YnN0ciIsImluZGV4T2YiLCJzdGFydCIsInN1YnN0cmluZyIsInNwYWNlRW5kIiwibmV3bGluZUVuZCIsInRhZ0VuZCIsImVuZCIsIk1hdGgiLCJtaW4iLCJ4dHlwZSIsIl90b1h0eXBlIiwiaW5jbHVkZXMiLCJ0aGVWYWx1ZSIsInRvTG93ZXJDYXNlIiwiY29uZmlnIiwiSlNPTiIsInN0cmluZ2lmeSIsImNoYW5nZUl0IiwibyIsInBhdGgiLCJmc3giLCJ3aGVyZVBhdGgiLCJyZXNvbHZlIiwicHJvY2VzcyIsImN3ZCIsIndoZXJlIiwicmVhZEZpbGVTeW5jIiwidG9TdHJpbmciLCJuZXdKcyIsInJlcGxhY2UiLCJmcm9tIiwidG8iLCJ3cml0ZUZpbGVTeW5jIiwiX3RvUHJvZCIsInZhcnMiLCJsb2ciLCJmcyIsIm1rZGlycCIsInBhdGhFeHRBbmd1bGFyUHJvZCIsImV4aXN0c1N5bmMiLCJzeW5jIiwidCIsImV4dEFuZ3VsYXJNb2R1bGUiLCJfdG9EZXYiLCJfZ2V0QWxsQ29tcG9uZW50cyIsInBhY2thZ2VMaWJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImZvckVhY2giLCJmaWxlTmFtZSIsImFwcCIsImZyYW1ld29yayIsIl93cml0ZUZpbGVzVG9Qcm9kRm9sZGVyIiwicGF0aFRvRXh0QW5ndWxhclByb2QiLCJzdHJpbmciLCJpbmRleCIsIlNldCIsIndyaXRlVG9QYXRoV3JpdHRlbiIsIm1vZHVsZVZhcnMiLCJpbXBvcnRzIiwiZXhwb3J0cyIsImRlY2xhcmF0aW9ucyIsImNhcGNsYXNzbmFtZSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJjbGFzc0ZpbGUiLCJjb250ZW50cyIsImJhc2VDb250ZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBRU8sU0FBU0EsZUFBVCxHQUEyQjtBQUNoQyxTQUFPO0FBQ0xDLElBQUFBLFNBQVMsRUFBRSxnQkFETjtBQUVMQyxJQUFBQSxZQUFZLEVBQUcsS0FGVjtBQUdMQyxJQUFBQSxTQUFTLEVBQUUsUUFITjtBQUlMQyxJQUFBQSxTQUFTLEVBQUcsSUFKUDtBQUtMQyxJQUFBQSxZQUFZLEVBQUUsSUFMVDtBQU1MQyxJQUFBQSxZQUFZLEVBQUcsQ0FOVjtBQU9MQyxJQUFBQSxRQUFRLEVBQUUsSUFQTDtBQVFMQyxJQUFBQSxPQUFPLEVBQUUsS0FSSjtBQVNMQyxJQUFBQSxZQUFZLEVBQUUsRUFUVDtBQVVMQyxJQUFBQSxJQUFJLEVBQUUsRUFWRDtBQVdMQyxJQUFBQSxpQkFBaUIsRUFBRSxFQVhkO0FBWUxDLElBQUFBLE9BQU8sRUFBRTtBQVpKLEdBQVA7QUFjRDs7QUFFTSxTQUFTQyxrQkFBVCxDQUE0QkMsTUFBNUIsRUFBb0NDLE9BQXBDLEVBQTZDQyxXQUE3QyxFQUEwREMsYUFBMUQsRUFBeUU7QUFDOUUsUUFBTUMsSUFBSSxHQUFHQyxPQUFPLENBQUMsY0FBRCxDQUFQLENBQXdCRCxJQUFyQzs7QUFD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QVUsQ0FBQ0csWUFBWCxHQUEyQixVQUFTQyxZQUFhLGNBQTNFO0FBQ0EsUUFBSUcsU0FBUyxHQUFJLE9BQU14RCxLQUFNLGVBQTdCO0FBQ0EsVUFBTXlELFFBQVEsR0FBRzlDLEdBQUcsQ0FBQ00sWUFBSixDQUFrQixHQUFFbUIsY0FBZSxJQUFHb0IsU0FBVSxFQUFoRCxFQUFtRHRDLFFBQW5ELEVBQWpCO0FBQ0FQLElBQUFBLEdBQUcsQ0FBQ1ksYUFBSixDQUFtQixHQUFFcUIsb0JBQXFCLElBQUdZLFNBQVUsRUFBdkQsRUFBMERDLFFBQTFELEVBQW9FLE9BQXBFLEVBQTZFLE1BQUk7QUFBQztBQUFPLEtBQXpGO0FBQ0FULElBQUFBLGtCQUFrQixHQUFHLElBQXJCO0FBQ0QsR0FURDs7QUFVQSxNQUFJQSxrQkFBSixFQUF3QjtBQUN0QixRQUFJaEIsQ0FBQyxHQUFHbkUsT0FBTyxDQUFDLGFBQUQsQ0FBUCxDQUF1Qm9FLGdCQUF2QixDQUNOZ0IsVUFBVSxDQUFDQyxPQURMLEVBQ2NELFVBQVUsQ0FBQ0UsT0FEekIsRUFDa0NGLFVBQVUsQ0FBQ0csWUFEN0MsQ0FBUjs7QUFHQXpDLElBQUFBLEdBQUcsQ0FBQ1ksYUFBSixDQUFtQixHQUFFcUIsb0JBQXFCLHdCQUExQyxFQUFtRVosQ0FBbkUsRUFBc0UsT0FBdEUsRUFBK0UsTUFBSTtBQUFDO0FBQU8sS0FBM0Y7QUFDRDs7QUFFRCxRQUFNMEIsV0FBVyxHQUFHL0MsR0FBRyxDQUFDTSxZQUFKLENBQWtCLEdBQUVtQixjQUFlLFVBQW5DLEVBQThDbEIsUUFBOUMsRUFBcEI7QUFDQVAsRUFBQUEsR0FBRyxDQUFDWSxhQUFKLENBQW1CLEdBQUVxQixvQkFBcUIsVUFBMUMsRUFBcURjLFdBQXJELEVBQWtFLE9BQWxFLEVBQTJFLE1BQUk7QUFBQztBQUFPLEdBQXZGO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIlxuXG5leHBvcnQgZnVuY3Rpb24gX2dldERlZmF1bHRWYXJzKCkge1xuICByZXR1cm4ge1xuICAgIHRvdWNoRmlsZTogJy9zcmMvdGhlbWVyLnRzJyxcbiAgICB3YXRjaFN0YXJ0ZWQgOiBmYWxzZSxcbiAgICBidWlsZHN0ZXA6ICcxIG9mIDEnLFxuICAgIGZpcnN0VGltZSA6IHRydWUsXG4gICAgZmlyc3RDb21waWxlOiB0cnVlLFxuICAgIGJyb3dzZXJDb3VudCA6IDAsXG4gICAgbWFuaWZlc3Q6IG51bGwsXG4gICAgZXh0UGF0aDogJ2V4dCcsXG4gICAgcGx1Z2luRXJyb3JzOiBbXSxcbiAgICBkZXBzOiBbXSxcbiAgICB1c2VkRXh0Q29tcG9uZW50czogW10sXG4gICAgcmVidWlsZDogdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXh0cmFjdEZyb21Tb3VyY2UobW9kdWxlLCBvcHRpb25zLCBjb21waWxhdGlvbiwgZXh0Q29tcG9uZW50cykge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBjb25zdCB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gIGxvZ3YodmVyYm9zZSwnRlVOQ1RJT04gX2V4dHJhY3RGcm9tU291cmNlJylcbiAgdmFyIGpzID0gbW9kdWxlLl9zb3VyY2UuX3ZhbHVlXG5cbiAgdmFyIHN0YXRlbWVudHMgPSBbXVxuXG4gIHZhciBnZW5lcmF0ZSA9IHJlcXVpcmUoXCJAYmFiZWwvZ2VuZXJhdG9yXCIpLmRlZmF1bHRcbiAgdmFyIHBhcnNlID0gcmVxdWlyZShcImJhYnlsb25cIikucGFyc2VcbiAgdmFyIHRyYXZlcnNlID0gcmVxdWlyZShcImFzdC10cmF2ZXJzZVwiKVxuXG4gIHZhciBhc3QgPSBwYXJzZShqcywge1xuICAgIHBsdWdpbnM6IFtcbiAgICAgICd0eXBlc2NyaXB0JyxcbiAgICAgICdmbG93JyxcbiAgICAgICdkb0V4cHJlc3Npb25zJyxcbiAgICAgICdvYmplY3RSZXN0U3ByZWFkJyxcbiAgICAgICdjbGFzc1Byb3BlcnRpZXMnLFxuICAgICAgJ2V4cG9ydERlZmF1bHRGcm9tJyxcbiAgICAgICdleHBvcnRFeHRlbnNpb25zJyxcbiAgICAgICdhc3luY0dlbmVyYXRvcnMnLFxuICAgICAgJ2Z1bmN0aW9uQmluZCcsXG4gICAgICAnZnVuY3Rpb25TZW50JyxcbiAgICAgICdkeW5hbWljSW1wb3J0J1xuICAgIF0sXG4gICAgc291cmNlVHlwZTogJ21vZHVsZSdcbiAgfSlcblxuICB0cmF2ZXJzZShhc3QsIHtcbiAgICBwcmU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nICYmIG5vZGUuY2FsbGVlICYmIG5vZGUuY2FsbGVlLm9iamVjdCAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gJ0V4dCcpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKGdlbmVyYXRlKG5vZGUpLmNvZGUpXG4gICAgICB9XG4gICAgICBpZihub2RlLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICBsZXQgY29kZSA9IG5vZGUudmFsdWVcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKGNvZGUuY2hhckF0KGkpID09ICc8Jykge1xuICAgICAgICAgICAgaWYgKGNvZGUuc3Vic3RyKGksIDQpID09ICc8IS0tJykge1xuICAgICAgICAgICAgICBpICs9IDRcbiAgICAgICAgICAgICAgaSArPSBjb2RlLnN1YnN0cihpKS5pbmRleE9mKCctLT4nKSArIDNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZS5jaGFyQXQoaSsxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICAgIHZhciBzdGFydCA9IGNvZGUuc3Vic3RyaW5nKGkpXG4gICAgICAgICAgICAgIHZhciBzcGFjZUVuZCA9IHN0YXJ0LmluZGV4T2YoJyAnKVxuICAgICAgICAgICAgICB2YXIgbmV3bGluZUVuZCA9IHN0YXJ0LmluZGV4T2YoJ1xcbicpXG4gICAgICAgICAgICAgIHZhciB0YWdFbmQgPSBzdGFydC5pbmRleE9mKCc+JylcbiAgICAgICAgICAgICAgdmFyIGVuZCA9IE1hdGgubWluKHNwYWNlRW5kLCBuZXdsaW5lRW5kLCB0YWdFbmQpXG4gICAgICAgICAgICAgIGlmIChlbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgIHZhciB4dHlwZSA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLl90b1h0eXBlKHN0YXJ0LnN1YnN0cmluZygxLCBlbmQpKVxuICAgICAgICAgICAgICAgIGlmKGV4dENvbXBvbmVudHMuaW5jbHVkZXMoeHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgdGhlVmFsdWUgPSBub2RlLnZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIGlmICh0aGVWYWx1ZS5pbmRleE9mKCdkb2N0eXBlIGh0bWwnKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHt4dHlwZTogeHR5cGV9XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnN0cmluZ2lmeSh0eXBlKVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzLnB1c2goYEV4dC5jcmVhdGUoJHtjb25maWd9KWApXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkgKz0gZW5kXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHN0YXRlbWVudHNcbn1cblxuZnVuY3Rpb24gY2hhbmdlSXQobykge1xuICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gIGNvbnN0IGZzeCA9IHJlcXVpcmUoJ2ZzLWV4dHJhJylcbiAgY29uc3Qgd2hlcmVQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIG8ud2hlcmUpXG4gIHZhciBqcyA9IGZzeC5yZWFkRmlsZVN5bmMod2hlcmVQYXRoKS50b1N0cmluZygpXG4gIHZhciBuZXdKcyA9IGpzLnJlcGxhY2Uoby5mcm9tLG8udG8pO1xuICBmc3gud3JpdGVGaWxlU3luYyh3aGVyZVBhdGgsIG5ld0pzLCAndXRmLTgnLCAoKT0+e3JldHVybn0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdG9Qcm9kKHZhcnMsIG9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nXG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucy52ZXJib3NlLCdGVU5DVElPTiBfdG9Qcm9kJylcbiAgY29uc3QgZnN4ID0gcmVxdWlyZSgnZnMtZXh0cmEnKVxuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcbiAgY29uc3QgbWtkaXJwID0gcmVxdWlyZSgnbWtkaXJwJylcbiAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG4gIGNvbnN0IHBhdGhFeHRBbmd1bGFyUHJvZCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgc3JjL2FwcC9leHQtYW5ndWxhci1wcm9kYCk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhwYXRoRXh0QW5ndWxhclByb2QpKSB7XG4gICAgbWtkaXJwLnN5bmMocGF0aEV4dEFuZ3VsYXJQcm9kKVxuICAgIGNvbnN0IHQgPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmV4dEFuZ3VsYXJNb2R1bGUoJycsICcnLCAnJylcbiAgICBmc3gud3JpdGVGaWxlU3luYyhgJHtwYXRoRXh0QW5ndWxhclByb2R9L2V4dC1hbmd1bGFyLm1vZHVsZS50c2AsIHQsICd1dGYtOCcsICgpID0+IHtcbiAgICAgIHJldHVyblxuICAgIH0pXG4gIH1cblxuICB2YXIgbyA9IHt9XG4gIG8ud2hlcmUgPSAnc3JjL2FwcC9hcHAubW9kdWxlLnRzJ1xuICBvLmZyb20gPSBgaW1wb3J0IHsgRXh0QW5ndWxhck1vZHVsZSB9IGZyb20gJ0BzZW5jaGEvZXh0LWFuZ3VsYXInYFxuICBvLnRvID0gYGltcG9ydCB7IEV4dEFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2V4dC1hbmd1bGFyLXByb2QvZXh0LWFuZ3VsYXIubW9kdWxlJ2BcbiAgY2hhbmdlSXQobylcblxuICBvID0ge31cbiAgby53aGVyZSA9ICdzcmMvbWFpbi50cydcbiAgby5mcm9tID0gYGJvb3RzdHJhcE1vZHVsZSggQXBwTW9kdWxlICk7YFxuICBvLnRvID0gYGVuYWJsZVByb2RNb2RlKCk7Ym9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7YFxuICBjaGFuZ2VJdChvKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RvRGV2KHZhcnMsIG9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9nXG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucy52ZXJib3NlLCdGVU5DVElPTiBfdG9EZXYnKVxuICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gIGNvbnN0IHBhdGhFeHRBbmd1bGFyUHJvZCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgc3JjL2FwcC9leHQtYW5ndWxhci1wcm9kYCk7XG4gIHJlcXVpcmUoJ3JpbXJhZicpLnN5bmMocGF0aEV4dEFuZ3VsYXJQcm9kKTtcblxuICB2YXIgbyA9IHt9XG4gIG8ud2hlcmUgPSAnc3JjL2FwcC9hcHAubW9kdWxlLnRzJ1xuICBvLmZyb20gPSBgaW1wb3J0IHsgRXh0QW5ndWxhck1vZHVsZSB9IGZyb20gJy4vZXh0LWFuZ3VsYXItcHJvZC9leHQtYW5ndWxhci5tb2R1bGUnYFxuICBvLnRvID0gYGltcG9ydCB7IEV4dEFuZ3VsYXJNb2R1bGUgfSBmcm9tICdAc2VuY2hhL2V4dC1hbmd1bGFyJ2BcbiAgY2hhbmdlSXQobylcblxuICBvID0ge31cbiAgby53aGVyZSA9ICdzcmMvbWFpbi50cydcbiAgby5mcm9tID0gYGVuYWJsZVByb2RNb2RlKCk7Ym9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7YFxuICBvLnRvID0gYGJvb3RzdHJhcE1vZHVsZSggQXBwTW9kdWxlICk7YFxuICBjaGFuZ2VJdChvKVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0QWxsQ29tcG9uZW50cyh2YXJzLCBvcHRpb25zKSB7XG4gIGNvbnN0IGxvZyA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMudmVyYm9zZSwnRlVOQ1RJT04gX2dldEFsbENvbXBvbmVudHMnKVxuXG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbiAgY29uc3QgZnN4ID0gcmVxdWlyZSgnZnMtZXh0cmEnKVxuXG4vLyAgICBsb2codmFycy5hcHAsIGBHZXR0aW5nIGFsbCByZWZlcmVuY2VkIGV4dC0ke29wdGlvbnMuZnJhbWV3b3JrfSBtb2R1bGVzYClcbiAgdmFyIGV4dENvbXBvbmVudHMgPSBbXVxuICBjb25zdCBwYWNrYWdlTGliUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LWFuZ3VsYXIvc3JjL2xpYicpXG4gIHZhciBmaWxlcyA9IGZzeC5yZWFkZGlyU3luYyhwYWNrYWdlTGliUGF0aClcbiAgZmlsZXMuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICBpZiAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuc3Vic3RyKDAsIDQpID09ICdleHQtJykge1xuICAgICAgdmFyIGVuZCA9IGZpbGVOYW1lLnN1YnN0cig0KS5pbmRleE9mKCcuY29tcG9uZW50JylcbiAgICAgIGlmIChlbmQgPj0gMCkge1xuICAgICAgICBleHRDb21wb25lbnRzLnB1c2goZmlsZU5hbWUuc3Vic3RyaW5nKDQsIGVuZCArIDQpKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgbG9nKHZhcnMuYXBwLCBgV3JpdGluZyBhbGwgcmVmZXJlbmNlZCBleHQtJHtvcHRpb25zLmZyYW1ld29ya30gbW9kdWxlc2ApXG4gIHJldHVybiBleHRDb21wb25lbnRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfd3JpdGVGaWxlc1RvUHJvZEZvbGRlcih2YXJzLCBvcHRpb25zKSB7XG4gIGNvbnN0IGxvZyA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMudmVyYm9zZSwnRlVOQ1RJT04gX3dyaXRlRmlsZXNUb1Byb2RGb2xkZXInKVxuXG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbiAgY29uc3QgZnN4ID0gcmVxdWlyZSgnZnMtZXh0cmEnKVxuXG4gIGNvbnN0IHBhY2thZ2VMaWJQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtYW5ndWxhci9zcmMvbGliJylcbiAgY29uc3QgcGF0aFRvRXh0QW5ndWxhclByb2QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYHNyYy9hcHAvZXh0LWFuZ3VsYXItcHJvZGApXG4gIGNvbnN0IHN0cmluZyA9ICdFeHQuY3JlYXRlKHtcXFwieHR5cGVcXFwiOlxcXCInXG5cbiAgdmFycy5kZXBzLmZvckVhY2goY29kZSA9PiB7XG4gICAgdmFyIGluZGV4ID0gY29kZS5pbmRleE9mKHN0cmluZylcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgY29kZSA9IGNvZGUuc3Vic3RyaW5nKGluZGV4ICsgc3RyaW5nLmxlbmd0aClcbiAgICAgIHZhciBlbmQgPSBjb2RlLmluZGV4T2YoJ1xcXCInKVxuICAgICAgdmFycy51c2VkRXh0Q29tcG9uZW50cy5wdXNoKGNvZGUuc3Vic3RyKDAsIGVuZCkpXG4gICAgfVxuICB9KVxuICB2YXJzLnVzZWRFeHRDb21wb25lbnRzID0gWy4uLm5ldyBTZXQodmFycy51c2VkRXh0Q29tcG9uZW50cyldXG5cbiAgdmFyIHdyaXRlVG9QYXRoV3JpdHRlbiA9IGZhbHNlXG4gIHZhciBtb2R1bGVWYXJzID0ge1xuICAgIGltcG9ydHM6ICcnLFxuICAgIGV4cG9ydHM6ICcnLFxuICAgIGRlY2xhcmF0aW9uczogJydcbiAgfVxuICB2YXJzLnVzZWRFeHRDb21wb25lbnRzLmZvckVhY2goeHR5cGUgPT4ge1xuICAgIHZhciBjYXBjbGFzc25hbWUgPSB4dHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHh0eXBlLnJlcGxhY2UoLy0vZywgXCJfXCIpLnNsaWNlKDEpXG4gICAgbW9kdWxlVmFycy5pbXBvcnRzID0gbW9kdWxlVmFycy5pbXBvcnRzICsgYGltcG9ydCB7IEV4dCR7Y2FwY2xhc3NuYW1lfUNvbXBvbmVudCB9IGZyb20gJy4vZXh0LSR7eHR5cGV9LmNvbXBvbmVudCc7XFxuYFxuICAgIG1vZHVsZVZhcnMuZXhwb3J0cyA9IG1vZHVsZVZhcnMuZXhwb3J0cyArIGAgICAgRXh0JHtjYXBjbGFzc25hbWV9Q29tcG9uZW50LFxcbmBcbiAgICBtb2R1bGVWYXJzLmRlY2xhcmF0aW9ucyA9IG1vZHVsZVZhcnMuZGVjbGFyYXRpb25zICsgYCAgICBFeHQke2NhcGNsYXNzbmFtZX1Db21wb25lbnQsXFxuYFxuICAgIHZhciBjbGFzc0ZpbGUgPSBgZXh0LSR7eHR5cGV9LmNvbXBvbmVudC50c2BcbiAgICBjb25zdCBjb250ZW50cyA9IGZzeC5yZWFkRmlsZVN5bmMoYCR7cGFja2FnZUxpYlBhdGh9LyR7Y2xhc3NGaWxlfWApLnRvU3RyaW5nKClcbiAgICBmc3gud3JpdGVGaWxlU3luYyhgJHtwYXRoVG9FeHRBbmd1bGFyUHJvZH0vJHtjbGFzc0ZpbGV9YCwgY29udGVudHMsICd1dGYtOCcsICgpPT57cmV0dXJufSlcbiAgICB3cml0ZVRvUGF0aFdyaXR0ZW4gPSB0cnVlXG4gIH0pXG4gIGlmICh3cml0ZVRvUGF0aFdyaXR0ZW4pIHtcbiAgICB2YXIgdCA9IHJlcXVpcmUoJy4vYXJ0aWZhY3RzJykuZXh0QW5ndWxhck1vZHVsZShcbiAgICAgIG1vZHVsZVZhcnMuaW1wb3J0cywgbW9kdWxlVmFycy5leHBvcnRzLCBtb2R1bGVWYXJzLmRlY2xhcmF0aW9uc1xuICAgIClcbiAgICBmc3gud3JpdGVGaWxlU3luYyhgJHtwYXRoVG9FeHRBbmd1bGFyUHJvZH0vZXh0LWFuZ3VsYXIubW9kdWxlLnRzYCwgdCwgJ3V0Zi04JywgKCk9PntyZXR1cm59KVxuICB9XG5cbiAgY29uc3QgYmFzZUNvbnRlbnQgPSBmc3gucmVhZEZpbGVTeW5jKGAke3BhY2thZ2VMaWJQYXRofS9iYXNlLnRzYCkudG9TdHJpbmcoKVxuICBmc3gud3JpdGVGaWxlU3luYyhgJHtwYXRoVG9FeHRBbmd1bGFyUHJvZH0vYmFzZS50c2AsIGJhc2VDb250ZW50LCAndXRmLTgnLCAoKT0+e3JldHVybn0pXG59Il19 \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/artifacts.js b/packages/ext-webpack-plugin/dist/artifacts.js new file mode 100644 index 0000000..d348313 --- /dev/null +++ b/packages/ext-webpack-plugin/dist/artifacts.js @@ -0,0 +1,246 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createAppJson = createAppJson; +exports.createJSDOMEnvironment = createJSDOMEnvironment; +exports.createWorkspaceJson = createWorkspaceJson; +exports.extAngularModule = exports.buildXML = void 0; + +const buildXML = function (compress, options, output) { + const logv = require('./pluginUtil').logv; + + logv(options, 'FUNCTION buildXML'); + let compression = ''; + + if (compress) { + compression = ` + then + fs + minify + -yui + -from=ext.js + -to=ext.js + `; + } + + return ` + + + + + + + + + + + + + + + + + + + + + + + + + + + +`.trim(); +}; + +exports.buildXML = buildXML; + +function createAppJson(theme, packages, toolkit, options, output) { + const logv = require('./pluginUtil').logv; + + logv(options, 'FUNCTION createAppJson'); + + const fs = require('fs'); + + var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); + var pathDifference = output.substring(process.cwd().length); + var numberOfPaths = pathDifference.split(isWindows ? "\\" : "/").length - 1; + var nodeModulePath = ''; + + for (var i = 0; i < numberOfPaths; i++) { + nodeModulePath += "../"; + } + + const config = { + framework: "ext", + toolkit, + requires: packages, + "overrides": ["overrides", "jsdom-environment.js"], + // "language": { + // "js": { + // "output": "ES5" + // } + // }, + "packages": { + "dir": [nodeModulePath + "node_modules/@sencha", nodeModulePath + toolkit + "/packages"] + }, + output: { + base: '.', + resources: { + path: './resources', + shared: "./resources" + } + } // if theme is local add it as an additional package dir + + }; + + if (fs.existsSync(theme)) { + const path = require('path'); + + const cjson = require('cjson'); + + const packageInfo = cjson.load(path.join(theme, 'package.json')); + config.theme = packageInfo.name; + config.packages.dir.push(path.resolve(theme)); + } else { + config.theme = theme; + } + + return JSON.stringify(config, null, 2); +} + +function createJSDOMEnvironment(options, output) { + const logv = require('./pluginUtil').logv; + + logv(options, 'FUNCTION createJSDOMEnvironment'); + return 'window.Ext = Ext;'; +} + +function createWorkspaceJson(options, output) { + const logv = require('./pluginUtil').logv; + + logv(options, 'FUNCTION createWorkspaceJson'); + var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); + var pathDifference = output.substring(process.cwd().length); + var numberOfPaths = pathDifference.split(isWindows ? "\\" : "/").length - 1; + var nodeModulePath = ''; + + for (var i = 0; i < numberOfPaths; i++) { + nodeModulePath += "../"; + } + + logv(options, 'isWindows: ' + isWindows); + logv(options, 'output: ' + output); + logv(options, 'pathDifference: ' + pathDifference); + logv(options, 'numberOfPaths: ' + numberOfPaths); + logv(options, 'nodeModulePath: ' + nodeModulePath); + const config = { + "frameworks": { + "ext": nodeModulePath + "node_modules/@sencha/ext" + }, + "build": { + "dir": "${workspace.dir}/" + nodeModulePath + "build" + }, + "packages": { + "dir": ["${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages/local", "${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-font-ios", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-ios", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-material", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-aria", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neutral", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-classic", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-gray", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-crisp", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-crisp-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-triton", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-graphite", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-calendar", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-charts", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-d3", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-exporter", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-pivot", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-pivot-d3", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-ux"], + "extract": "${workspace.dir}/" + nodeModulePath + "packages/remote" + } + }; + return JSON.stringify(config, null, 2); +} + +const extAngularModule = function (imports, exports, declarations) { + return ` + import { NgModule } from '@angular/core'; + ${imports} + @NgModule({ + imports: [ + ], + declarations: [ + ${declarations} ], + exports: [ + ${exports} ] + }) + export class ExtAngularModule { } + `; +}; + +exports.extAngularModule = extAngularModule; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnRpZmFjdHMuanMiXSwibmFtZXMiOlsiYnVpbGRYTUwiLCJjb21wcmVzcyIsIm9wdGlvbnMiLCJvdXRwdXQiLCJsb2d2IiwicmVxdWlyZSIsImNvbXByZXNzaW9uIiwidHJpbSIsImNyZWF0ZUFwcEpzb24iLCJ0aGVtZSIsInBhY2thZ2VzIiwidG9vbGtpdCIsImZzIiwiaXNXaW5kb3dzIiwicHJvY2VzcyIsInBsYXRmb3JtIiwibWF0Y2giLCJwYXRoRGlmZmVyZW5jZSIsInN1YnN0cmluZyIsImN3ZCIsImxlbmd0aCIsIm51bWJlck9mUGF0aHMiLCJzcGxpdCIsIm5vZGVNb2R1bGVQYXRoIiwiaSIsImNvbmZpZyIsImZyYW1ld29yayIsInJlcXVpcmVzIiwiYmFzZSIsInJlc291cmNlcyIsInBhdGgiLCJzaGFyZWQiLCJleGlzdHNTeW5jIiwiY2pzb24iLCJwYWNrYWdlSW5mbyIsImxvYWQiLCJqb2luIiwibmFtZSIsImRpciIsInB1c2giLCJyZXNvbHZlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNyZWF0ZUpTRE9NRW52aXJvbm1lbnQiLCJjcmVhdGVXb3Jrc3BhY2VKc29uIiwiZXh0QW5ndWxhck1vZHVsZSIsImltcG9ydHMiLCJleHBvcnRzIiwiZGVjbGFyYXRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQU8sTUFBTUEsUUFBUSxHQUFHLFVBQVNDLFFBQVQsRUFBbUJDLE9BQW5CLEVBQTRCQyxNQUE1QixFQUFvQztBQUMxRCxRQUFNQyxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQVAsQ0FBd0JELElBQXJDOztBQUNBQSxFQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyxtQkFBVCxDQUFKO0FBRUEsTUFBSUksV0FBVyxHQUFHLEVBQWxCOztBQUVBLE1BQUlMLFFBQUosRUFBYztBQUNaSyxJQUFBQSxXQUFXLEdBQUk7Ozs7Ozs7S0FBZjtBQVFEOztBQUVDLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QkEsY0FBdEIsR0FBdUMsdURBakJsQyxFQWtCTCxzQkFBc0JBLGNBQXRCLEdBQXVDLHlEQWxCbEMsRUFtQkwsc0JBQXNCQSxjQUF0QixHQUF1QyxtQ0FuQmxDLEVBb0JMLHNCQUFzQkEsY0FBdEIsR0FBdUMsaUNBcEJsQyxFQXFCTCxzQkFBc0JBLGNBQXRCLEdBQXVDLDZCQXJCbEMsRUFzQkwsc0JBQXNCQSxjQUF0QixHQUF1QyxtQ0F0QmxDLEVBdUJMLHNCQUFzQkEsY0FBdEIsR0FBdUMsZ0NBdkJsQyxFQXdCTCxzQkFBc0JBLGNBQXRCLEdBQXVDLG1DQXhCbEMsRUF5Qkwsc0JBQXNCQSxjQUF0QixHQUF1Qyw2QkF6QmxDLENBREc7QUE0QlYsaUJBQVcsc0JBQXNCQSxjQUF0QixHQUF1QztBQTVCeEM7QUFQQyxHQUFmO0FBc0NBLFNBQU9rQixJQUFJLENBQUNDLFNBQUwsQ0FBZWpCLE1BQWYsRUFBdUIsSUFBdkIsRUFBNkIsQ0FBN0IsQ0FBUDtBQUNEOztBQUVNLE1BQU1vQixnQkFBZ0IsR0FBRyxVQUFTQyxPQUFULEVBQWtCQyxPQUFsQixFQUEyQkMsWUFBM0IsRUFBeUM7QUFDdkUsU0FBUTs7SUFFTkYsT0FBUTs7Ozs7SUFLUkUsWUFBYTs7SUFFYkQsT0FBUTs7O0dBVFY7QUFhRCxDQWRNIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGJ1aWxkWE1MID0gZnVuY3Rpb24oY29tcHJlc3MsIG9wdGlvbnMsIG91dHB1dCkge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIGJ1aWxkWE1MJylcbiAgXG4gIGxldCBjb21wcmVzc2lvbiA9ICcnXG5cbiAgaWYgKGNvbXByZXNzKSB7XG4gICAgY29tcHJlc3Npb24gPSBgXG4gICAgICB0aGVuIFxuICAgICAgZnMgXG4gICAgICBtaW5pZnkgXG4gICAgICAgIC15dWkgXG4gICAgICAgIC1mcm9tPWV4dC5qcyBcbiAgICAgICAgLXRvPWV4dC5qc1xuICAgIGA7XG4gIH1cblxuICAgIHJldHVybiBgPHByb2plY3QgbmFtZT1cInNpbXBsZS1idWlsZFwiIGJhc2VkaXI9XCIuXCI+XG4gIDwhLS0gIGludGVybmFsbHksIHdhdGNoIGNhbGxzIHRoZSBpbml0IHRhcmdldCwgc28gbmVlZCB0byBoYXZlIG9uZSBoZXJlIC0tPlxuICA8dGFyZ2V0IG5hbWU9XCJpbml0XCIvPlxuICA8dGFyZ2V0IG5hbWU9XCJpbml0LWNtZFwiPlxuICAgIDx0YXNrZGVmICByZXNvdXJjZT1cImNvbS9zZW5jaGEvYW50L2FudGxpYi54bWxcIlxuICAgICAgICAgICAgICBjbGFzc3BhdGg9XCJcXCR7Y21kLmRpcn0vc2VuY2hhLmphclwiXG4gICAgICAgICAgICAgIGxvYWRlcnJlZj1cInNlbmNoYWxvYWRlclwiLz5cbiAgICA8eC1leHRlbmQtY2xhc3NwYXRoPlxuICAgICAgICA8amFyIHBhdGg9XCJcXCR7Y21kLmRpcn0vc2VuY2hhLmphclwiLz5cbiAgICA8L3gtZXh0ZW5kLWNsYXNzcGF0aD5cbiAgICA8eC1zZW5jaGEtaW5pdCBwcmVmaXg9XCJcIi8+XG4gICAgPHgtY29tcGlsZSByZWZpZD1cInRoZUNvbXBpbGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXI9XCJcXCR7YmFzZWRpcn1cIlxuICAgICAgICAgICAgICAgICAgICAgIGluaXRPbmx5PVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdEFsbD1cInRydWVcIj5cbiAgICAgICAgICAgICAgPCFbQ0RBVEFbXG4gICAgICAgICAgICAgIC1jbGFzc3BhdGg9XFwke2Jhc2VkaXJ9L21hbmlmZXN0LmpzXG4gICAgICAgICAgICAgIGxvYWQtYXBwXG4gICAgICAgICAgICAgICAgICAtdGVtcD1cXCR7YmFzZWRpcn0vdGVtcFxuICAgICAgICAgICAgICAgICAgLXRhZz1BcHBcbiAgICAgICAgXV0+XG4gICAgICA8L3gtY29tcGlsZT5cbiAgPC90YXJnZXQ+XG4gIDx0YXJnZXQgbmFtZT1cInJlYnVpbGRcIj5cbiAgICA8eC1jb21waWxlIHJlZmlkPVwidGhlQ29tcGlsZXJcIlxuICAgICAgICAgICAgICBkaXI9XCJcXCR7YmFzZWRpcn1cIlxuICAgICAgICAgICAgICBpbmhlcml0QWxsPVwidHJ1ZVwiPlxuICAgICAgPCFbQ0RBVEFbXG4gICAgICAtLWRlYnVnXG4gICAgICBleGNsdWRlXG4gICAgICAtYWxsXG4gICAgICBhbmRcbiAgICAgIGluY2x1ZGVcbiAgICAgIC1mPUJvb3QuanNcbiAgICAgIGFuZFxuICAgICAgY29uY2F0ZW5hdGVcbiAgICAgICAgICBleHQuanNcbiAgICAgIGFuZFxuICAgICAgZXhjbHVkZVxuICAgICAgLWFsbFxuICAgICAgYW5kXG4gICAgICAjIGluY2x1ZGUgdGhlbWUgb3ZlcnJpZGVzXG4gICAgICBpbmNsdWRlXG4gICAgICAgIC1yXG4gICAgICAgIC10YWc9b3ZlcnJpZGVzXG4gICAgICBhbmRcbiAgICAgICMgaW5jbHVkZSBhbGwganMgZmlsZXMgbmVlZGVkIGZvciBtYW5pZmVzdC5qc1xuICAgICAgaW5jbHVkZVxuICAgICAgICAgIC1yXG4gICAgICAgICAgLWY9bWFuaWZlc3QuanNcbiAgICAgIGFuZFxuICAgICAgIyBleGNsdWRlIHRoZSBnZW5lcmF0ZWQgbWFuaWZlc3QgZmlsZSBpdHNlbGYsXG4gICAgICAjIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhlIGdlbmVyYXRlZCBidW5kbGUgZmlsZSB0byBjcmVhdGUgYW55IGNvbXBvbmVudHNcbiAgICAgIGV4Y2x1ZGVcbiAgICAgIC1mPW1hbmlmZXN0LmpzXG4gICAgICBhbmRcbiAgICAgIGNvbmNhdGVuYXRlXG4gICAgICArYXBwZW5kXG4gICAgICAgICAgZXh0LmpzXG4gICAgICBhbmRcbiAgICAgIHNjc3NcbiAgICAgICAgICAtYXBwTmFtZT1BcHBcbiAgICAgICAgICAtaW1hZ2VTZWFyY2hQYXRoPXJlc291cmNlc1xuICAgICAgICAgIC10aGVtZU5hbWU9dHJpdG9uXG4gICAgICAgICAgLXJlc291cmNlTWFwQmFzZT0uXG4gICAgICAgICAgLW91dHB1dD1leHQuc2Nzc1xuICAgICAgYW5kXG4gICAgICByZXNvdXJjZXNcbiAgICAgICAgICAtZXhjbHVkZXM9LWFsbCouY3NzXG4gICAgICAgICAgLW91dD1yZXNvdXJjZXNcbiAgICAgIGFuZFxuICAgICAgcmVzb3VyY2VzXG4gICAgICAgICAgLW1vZGVsPXRydWVcbiAgICAgICAgICAtb3V0PXJlc291cmNlc1xuICAgICAgXV0+XG4gICAgPC94LWNvbXBpbGU+XG4gIDwvdGFyZ2V0PlxuICA8dGFyZ2V0IG5hbWU9XCJidWlsZFwiIGRlcGVuZHM9XCJpbml0LWNtZCxyZWJ1aWxkXCI+XG4gICAgPHgtc2VuY2hhLWNvbW1hbmQgZGlyPVwiXFwke2Jhc2VkaXJ9XCI+XG4gICAgICA8IVtDREFUQVtcbiAgICAgIGZhc2hpb25cbiAgICAgICAgICAtcHdkPS5cbiAgICAgICAgICAtc3BsaXQ9NDA5NVxuICAgICAgICAgICR7Y29tcHJlc3MgPyAnLWNvbXByZXNzJyA6ICcnfVxuICAgICAgICAgICAgICBleHQuc2Nzc1xuICAgICAgICAgIGV4dC5jc3NcbiAgICAgICR7Y29tcHJlc3Npb259XG4gICAgICBdXT5cbiAgICA8L3gtc2VuY2hhLWNvbW1hbmQ+XG4gIDwvdGFyZ2V0PlxuICA8dGFyZ2V0IG5hbWU9XCJ3YXRjaFwiIGRlcGVuZHM9XCJpbml0LWNtZCxidWlsZFwiPlxuICAgIDx4LWZhc2hpb24td2F0Y2hcbiAgICAgIHJlZk5hbWU9XCJmYXNoaW9uLXdhdGNoXCJcbiAgICAgIGlucHV0RmlsZT1cImV4dC5zY3NzXCJcbiAgICAgIG91dHB1dEZpbGU9XCJleHQuY3NzXCJcbiAgICAgIHNwbGl0PVwiNDA5NVwiXG4gICAgICBjb21wcmVzcz1cIiR7Y29tcHJlc3MgPyAndHJ1ZScgOiAnZmFsc2UnfVwiXG4gICAgICBjb25maWdGaWxlPVwiYXBwLmpzb25cIlxuICAgICAgZm9yaz1cInRydWVcIi8+XG4gICAgPHgtd2F0Y2ggY29tcGlsZXJSZWY9XCJ0aGVDb21waWxlclwiIHRhcmdldHM9XCJyZWJ1aWxkXCIvPlxuICA8L3RhcmdldD5cbjwvcHJvamVjdD5cbmAudHJpbSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBKc29uKCB0aGVtZSwgcGFja2FnZXMsIHRvb2xraXQsIG9wdGlvbnMsIG91dHB1dCApIHtcbiAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgbG9ndihvcHRpb25zLCdGVU5DVElPTiBjcmVhdGVBcHBKc29uJylcblxuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcblxuICB2YXIgaXNXaW5kb3dzID0gdHlwZW9mIHByb2Nlc3MgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MucGxhdGZvcm0gIT0gJ3VuZGVmaW5lZCcgJiYgISFwcm9jZXNzLnBsYXRmb3JtLm1hdGNoKC9ed2luLyk7XG4gIHZhciBwYXRoRGlmZmVyZW5jZSA9IG91dHB1dC5zdWJzdHJpbmcocHJvY2Vzcy5jd2QoKS5sZW5ndGgpXG4gIHZhciBudW1iZXJPZlBhdGhzID0gcGF0aERpZmZlcmVuY2Uuc3BsaXQoaXNXaW5kb3dzID8gXCJcXFxcXCIgOiBcIi9cIikubGVuZ3RoIC0gMTtcbiAgdmFyIG5vZGVNb2R1bGVQYXRoID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZlBhdGhzOyBpKyspIHsgXG4gICAgbm9kZU1vZHVsZVBhdGggKz0gXCIuLi9cIlxuICB9XG5cbiAgY29uc3QgY29uZmlnID0ge1xuICAgIGZyYW1ld29yazogXCJleHRcIixcbiAgICB0b29sa2l0LFxuICAgIHJlcXVpcmVzOiBwYWNrYWdlcyxcbiAgICBcIm92ZXJyaWRlc1wiOiBbXG4gICAgICBcIm92ZXJyaWRlc1wiLFxuICAgICAgXCJqc2RvbS1lbnZpcm9ubWVudC5qc1wiXG4gICAgXSxcbiAgICAvLyBcImxhbmd1YWdlXCI6IHtcbiAgICAvLyAgIFwianNcIjoge1xuICAgIC8vICAgICBcIm91dHB1dFwiOiBcIkVTNVwiXG4gICAgLy8gICB9XG4gICAgLy8gfSxcbiAgICBcInBhY2thZ2VzXCI6IHtcbiAgICAgIFwiZGlyXCI6IFtcbiAgICAgICAgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhXCIsXG4gICAgICAgIG5vZGVNb2R1bGVQYXRoICsgdG9vbGtpdCArIFwiL3BhY2thZ2VzXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIG91dHB1dDoge1xuICAgICAgYmFzZTogJy4nLFxuICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgIHBhdGg6ICcuL3Jlc291cmNlcycsXG4gICAgICAgIHNoYXJlZDogXCIuL3Jlc291cmNlc1wiXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlbWUgaXMgbG9jYWwgYWRkIGl0IGFzIGFuIGFkZGl0aW9uYWwgcGFja2FnZSBkaXJcbiAgaWYgKGZzLmV4aXN0c1N5bmModGhlbWUpKSB7XG4gICAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gICAgICBjb25zdCBjanNvbiA9IHJlcXVpcmUoJ2Nqc29uJylcbiAgICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gY2pzb24ubG9hZChwYXRoLmpvaW4odGhlbWUsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICBjb25maWcudGhlbWUgPSBwYWNrYWdlSW5mby5uYW1lO1xuICAgICAgY29uZmlnLnBhY2thZ2VzLmRpci5wdXNoKHBhdGgucmVzb2x2ZSh0aGVtZSkpO1xuICB9IGVsc2Uge1xuICAgICAgY29uZmlnLnRoZW1lID0gdGhlbWU7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUpTRE9NRW52aXJvbm1lbnQob3B0aW9ucywgb3V0cHV0KSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gY3JlYXRlSlNET01FbnZpcm9ubWVudCcpXG5cbiAgcmV0dXJuICd3aW5kb3cuRXh0ID0gRXh0Oydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZUpzb24ob3B0aW9ucywgb3V0cHV0KSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gY3JlYXRlV29ya3NwYWNlSnNvbicpXG5cbiAgdmFyIGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtICE9ICd1bmRlZmluZWQnICYmICEhcHJvY2Vzcy5wbGF0Zm9ybS5tYXRjaCgvXndpbi8pO1xuICB2YXIgcGF0aERpZmZlcmVuY2UgPSBvdXRwdXQuc3Vic3RyaW5nKHByb2Nlc3MuY3dkKCkubGVuZ3RoKVxuICB2YXIgbnVtYmVyT2ZQYXRocyA9IHBhdGhEaWZmZXJlbmNlLnNwbGl0KGlzV2luZG93cyA/IFwiXFxcXFwiIDogXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHZhciBub2RlTW9kdWxlUGF0aCA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXRoczsgaSsrKSB7IFxuICAgIG5vZGVNb2R1bGVQYXRoICs9IFwiLi4vXCJcbiAgfVxuXG4gIGxvZ3Yob3B0aW9ucywnaXNXaW5kb3dzOiAnICsgaXNXaW5kb3dzKVxuICBsb2d2KG9wdGlvbnMsJ291dHB1dDogJyArIG91dHB1dClcbiAgbG9ndihvcHRpb25zLCdwYXRoRGlmZmVyZW5jZTogJyArIHBhdGhEaWZmZXJlbmNlKVxuICBsb2d2KG9wdGlvbnMsJ251bWJlck9mUGF0aHM6ICcgKyBudW1iZXJPZlBhdGhzKVxuICBsb2d2KG9wdGlvbnMsJ25vZGVNb2R1bGVQYXRoOiAnICsgbm9kZU1vZHVsZVBhdGgpXG5cblxuXG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBcImZyYW1ld29ya3NcIjoge1xuICAgICAgXCJleHRcIjogbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dFwiXG4gICAgfSxcbiAgICBcImJ1aWxkXCI6IHtcbiAgICAgIFwiZGlyXCI6IFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJidWlsZFwiXG4gICAgfSxcbiAgICBcInBhY2thZ2VzXCI6IHtcbiAgICAgIFwiZGlyXCI6IFtcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcImV4dC1cIiArIG9wdGlvbnMuZnJhbWV3b3JrICsgXCIvcGFja2FnZXMvbG9jYWxcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcImV4dC1cIiArIG9wdGlvbnMuZnJhbWV3b3JrICsgXCIvcGFja2FnZXNcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtZm9udC1pb3NcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtYmFzZVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1iYXNlXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWlvc1wiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1tYXRlcmlhbFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1hcmlhXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLW5ldXRyYWxcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtY2xhc3NpY1wiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1ncmF5XCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWNyaXNwXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWNyaXNwLXRvdWNoXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLW5lcHR1bmVcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtbmVwdHVuZS10b3VjaFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS10cml0b25cIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtZ3JhcGhpdGVcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC1jYWxlbmRhclwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LWNoYXJ0c1wiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LWQzXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtZXhwb3J0ZXJcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC1waXZvdFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LXBpdm90LWQzXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtdXhcIixcbiAgICAgIF0sXG4gICAgICBcImV4dHJhY3RcIjogXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcInBhY2thZ2VzL3JlbW90ZVwiXG4gICAgfVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpXG59XG5cbmV4cG9ydCBjb25zdCBleHRBbmd1bGFyTW9kdWxlID0gZnVuY3Rpb24oaW1wb3J0cywgZXhwb3J0cywgZGVjbGFyYXRpb25zKSB7XG4gIHJldHVybiBgXG4gIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICR7aW1wb3J0c31cbiAgQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgJHtkZWNsYXJhdGlvbnN9ICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgJHtleHBvcnRzfSAgXVxuICB9KVxuICBleHBvcnQgY2xhc3MgRXh0QW5ndWxhck1vZHVsZSB7IH1cbiAgYFxufVxuIl19 \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/componentsUtil.js b/packages/ext-webpack-plugin/dist/componentsUtil.js new file mode 100644 index 0000000..2e0aa80 --- /dev/null +++ b/packages/ext-webpack-plugin/dist/componentsUtil.js @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports._getDefaultVars = _getDefaultVars; +exports._extractFromSource = _extractFromSource; +exports._toProd = _toProd; +exports._toDev = _toDev; +exports._getAllComponents = _getAllComponents; +exports._writeFilesToProdFolder = _writeFilesToProdFolder; + +function _getDefaultVars() { + return { + touchFile: '/src/themer.js', + watchStarted: false, + buildstep: '1 of 1', + firstTime: true, + firstCompile: true, + browserCount: 0, + manifest: null, + extPath: 'ext', + pluginErrors: [], + deps: [], + usedExtComponents: [], + rebuild: true + }; +} + +function _extractFromSource(module, options, compilation, extComponents) { + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _extractFromSource (empty)'); + + try { + var statements = ['Ext.require("Ext.*")']; + return statements; + } catch (e) { + console.log(e); + compilation.errors.push('extractFromSource: ' + e); + return []; + } +} + +function _toProd(vars, options) { + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _toProd (empty'); + + try {} catch (e) { + console.log(e); + return []; + } +} + +function _toDev(vars, options) { + try {} catch (e) { + console.log(e); + return []; + } +} + +function _getAllComponents(vars, options) { + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _getAllComponents (empty)'); + + try { + var extComponents = []; + return extComponents; + } catch (e) { + console.log(e); + return []; + } +} + +function _writeFilesToProdFolder(vars, options) { + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _writeFilesToProdFolder (empty)'); + + try {} catch (e) { + console.log(e); + } +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzVXRpbC5qcyJdLCJuYW1lcyI6WyJfZ2V0RGVmYXVsdFZhcnMiLCJ0b3VjaEZpbGUiLCJ3YXRjaFN0YXJ0ZWQiLCJidWlsZHN0ZXAiLCJmaXJzdFRpbWUiLCJmaXJzdENvbXBpbGUiLCJicm93c2VyQ291bnQiLCJtYW5pZmVzdCIsImV4dFBhdGgiLCJwbHVnaW5FcnJvcnMiLCJkZXBzIiwidXNlZEV4dENvbXBvbmVudHMiLCJyZWJ1aWxkIiwiX2V4dHJhY3RGcm9tU291cmNlIiwibW9kdWxlIiwib3B0aW9ucyIsImNvbXBpbGF0aW9uIiwiZXh0Q29tcG9uZW50cyIsImxvZ3YiLCJyZXF1aXJlIiwidmVyYm9zZSIsInN0YXRlbWVudHMiLCJlIiwiY29uc29sZSIsImxvZyIsImVycm9ycyIsInB1c2giLCJfdG9Qcm9kIiwidmFycyIsIl90b0RldiIsIl9nZXRBbGxDb21wb25lbnRzIiwiX3dyaXRlRmlsZXNUb1Byb2RGb2xkZXIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULEdBQTJCO0FBQ2hDLFNBQU87QUFDTEMsSUFBQUEsU0FBUyxFQUFFLGdCQUROO0FBRUxDLElBQUFBLFlBQVksRUFBRyxLQUZWO0FBR0xDLElBQUFBLFNBQVMsRUFBRSxRQUhOO0FBSUxDLElBQUFBLFNBQVMsRUFBRyxJQUpQO0FBS0xDLElBQUFBLFlBQVksRUFBRSxJQUxUO0FBTUxDLElBQUFBLFlBQVksRUFBRyxDQU5WO0FBT0xDLElBQUFBLFFBQVEsRUFBRSxJQVBMO0FBUUxDLElBQUFBLE9BQU8sRUFBRSxLQVJKO0FBU0xDLElBQUFBLFlBQVksRUFBRSxFQVRUO0FBVUxDLElBQUFBLElBQUksRUFBRSxFQVZEO0FBV0xDLElBQUFBLGlCQUFpQixFQUFFLEVBWGQ7QUFZTEMsSUFBQUEsT0FBTyxFQUFFO0FBWkosR0FBUDtBQWNEOztBQUVNLFNBQVNDLGtCQUFULENBQTRCQyxNQUE1QixFQUFvQ0MsT0FBcEMsRUFBNkNDLFdBQTdDLEVBQTBEQyxhQUExRCxFQUF5RTtBQUM5RSxRQUFNQyxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQVAsQ0FBd0JELElBQXJDOztBQUNBQSxFQUFBQSxJQUFJLENBQUNILE9BQU8sQ0FBQ0ssT0FBVCxFQUFpQixxQ0FBakIsQ0FBSjs7QUFDQSxNQUFJO0FBQ0YsUUFBSUMsVUFBVSxHQUFHLENBQ2Ysc0JBRGUsQ0FBakI7QUFHQSxXQUFPQSxVQUFQO0FBQ0QsR0FMRCxDQU1BLE9BQU1DLENBQU4sRUFBUztBQUNQQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNBTixJQUFBQSxXQUFXLENBQUNTLE1BQVosQ0FBbUJDLElBQW5CLENBQXdCLHdCQUF3QkosQ0FBaEQ7QUFDQSxXQUFPLEVBQVA7QUFDRDtBQUNGOztBQUVNLFNBQVNLLE9BQVQsQ0FBaUJDLElBQWpCLEVBQXVCYixPQUF2QixFQUFnQztBQUNyQyxRQUFNRyxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQVAsQ0FBd0JELElBQXJDOztBQUNBQSxFQUFBQSxJQUFJLENBQUNILE9BQU8sQ0FBQ0ssT0FBVCxFQUFpQix5QkFBakIsQ0FBSjs7QUFDQSxNQUFJLENBQ0gsQ0FERCxDQUVBLE9BQU9FLENBQVAsRUFBVTtBQUNSQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNBLFdBQU8sRUFBUDtBQUNEO0FBQ0Y7O0FBRU0sU0FBU08sTUFBVCxDQUFnQkQsSUFBaEIsRUFBc0JiLE9BQXRCLEVBQStCO0FBQ3BDLE1BQUksQ0FDSCxDQURELENBRUEsT0FBT08sQ0FBUCxFQUFVO0FBQ1JDLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0EsV0FBTyxFQUFQO0FBQ0Q7QUFDRjs7QUFFTSxTQUFTUSxpQkFBVCxDQUEyQkYsSUFBM0IsRUFBaUNiLE9BQWpDLEVBQTBDO0FBQzlDLFFBQU1HLElBQUksR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBUCxDQUF3QkQsSUFBckM7O0FBQ0RBLEVBQUFBLElBQUksQ0FBQ0gsT0FBTyxDQUFDSyxPQUFULEVBQWlCLG9DQUFqQixDQUFKOztBQUNBLE1BQUk7QUFDRixRQUFJSCxhQUFhLEdBQUcsRUFBcEI7QUFDQyxXQUFPQSxhQUFQO0FBQ0YsR0FIRCxDQUlBLE9BQU9LLENBQVAsRUFBVTtBQUNSQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNBLFdBQU8sRUFBUDtBQUNEO0FBQ0Y7O0FBRU0sU0FBU1MsdUJBQVQsQ0FBaUNILElBQWpDLEVBQXVDYixPQUF2QyxFQUFnRDtBQUNyRCxRQUFNRyxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQVAsQ0FBd0JELElBQXJDOztBQUNBQSxFQUFBQSxJQUFJLENBQUNILE9BQU8sQ0FBQ0ssT0FBVCxFQUFpQiwwQ0FBakIsQ0FBSjs7QUFDQSxNQUFJLENBQ0gsQ0FERCxDQUVBLE9BQU9FLENBQVAsRUFBVTtBQUNSQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIlxuXG5leHBvcnQgZnVuY3Rpb24gX2dldERlZmF1bHRWYXJzKCkge1xuICByZXR1cm4ge1xuICAgIHRvdWNoRmlsZTogJy9zcmMvdGhlbWVyLmpzJyxcbiAgICB3YXRjaFN0YXJ0ZWQgOiBmYWxzZSxcbiAgICBidWlsZHN0ZXA6ICcxIG9mIDEnLFxuICAgIGZpcnN0VGltZSA6IHRydWUsXG4gICAgZmlyc3RDb21waWxlOiB0cnVlLFxuICAgIGJyb3dzZXJDb3VudCA6IDAsXG4gICAgbWFuaWZlc3Q6IG51bGwsXG4gICAgZXh0UGF0aDogJ2V4dCcsXG4gICAgcGx1Z2luRXJyb3JzOiBbXSxcbiAgICBkZXBzOiBbXSxcbiAgICB1c2VkRXh0Q29tcG9uZW50czogW10sXG4gICAgcmVidWlsZDogdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXh0cmFjdEZyb21Tb3VyY2UobW9kdWxlLCBvcHRpb25zLCBjb21waWxhdGlvbiwgZXh0Q29tcG9uZW50cykge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMudmVyYm9zZSwnRlVOQ1RJT04gX2V4dHJhY3RGcm9tU291cmNlIChlbXB0eSknKVxuICB0cnkge1xuICAgIHZhciBzdGF0ZW1lbnRzID0gW1xuICAgICAgJ0V4dC5yZXF1aXJlKFwiRXh0LipcIiknLFxuICAgIF1cbiAgICByZXR1cm4gc3RhdGVtZW50c1xuICB9XG4gIGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmxvZyhlKVxuICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdleHRyYWN0RnJvbVNvdXJjZTogJyArIGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90b1Byb2QodmFycywgb3B0aW9ucykge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMudmVyYm9zZSwnRlVOQ1RJT04gX3RvUHJvZCAoZW1wdHknKVxuICB0cnkge1xuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coZSlcbiAgICByZXR1cm4gW11cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RvRGV2KHZhcnMsIG9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRBbGxDb21wb25lbnRzKHZhcnMsIG9wdGlvbnMpIHtcbiAgIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucy52ZXJib3NlLCdGVU5DVElPTiBfZ2V0QWxsQ29tcG9uZW50cyAoZW1wdHkpJylcbiAgdHJ5IHtcbiAgICB2YXIgZXh0Q29tcG9uZW50cyA9IFtdXG4gICAgIHJldHVybiBleHRDb21wb25lbnRzXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmxvZyhlKVxuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfd3JpdGVGaWxlc1RvUHJvZEZvbGRlcih2YXJzLCBvcHRpb25zKSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucy52ZXJib3NlLCdGVU5DVElPTiBfd3JpdGVGaWxlc1RvUHJvZEZvbGRlciAoZW1wdHkpJylcbiAgdHJ5IHtcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpXG4gIH1cbn0iXX0= \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/extjsUtil.js b/packages/ext-webpack-plugin/dist/extjsUtil.js new file mode 100644 index 0000000..b66d952 --- /dev/null +++ b/packages/ext-webpack-plugin/dist/extjsUtil.js @@ -0,0 +1,172 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports._getDefaultVars = _getDefaultVars; +exports._afterCompile = _afterCompile; +exports._prepareForBuild = _prepareForBuild; + +function _getDefaultVars() { + return { + touchFile: '/themer.js', + rebuild: true, + watchStarted: false, + firstTime: true, + browserCount: 0, + cwd: process.cwd(), + extPath: '.', + pluginErrors: [], + lastNumFiles: 0, + lastMilliseconds: 0, + lastMillisecondsAppJson: 0, + files: ['./app.json'], + dirs: ['./app', './packages'] + }; +} + +function _afterCompile(compilation, vars, options) { + var verbose = options.verbose; + + var logv = require('./pluginUtil').logv; + + logv(verbose, 'FUNCTION extjs _afterCompile'); + + const path = require('path'); + + let { + files, + dirs + } = vars; + const { + cwd + } = vars; + files = typeof files === 'string' ? [files] : files; + dirs = typeof dirs === 'string' ? [dirs] : dirs; + + const { + fileDependencies, + contextDependencies + } = _getFileAndContextDeps(compilation, files, dirs, cwd, options); + + if (files.length > 0) { + fileDependencies.forEach(file => { + compilation.fileDependencies.add(path.resolve(file)); + }); + } + + if (dirs.length > 0) { + contextDependencies.forEach(context => { + compilation.contextDependencies.add(context); + }); + } +} + +function _getFileAndContextDeps(compilation, files, dirs, cwd, options) { + var verbose = options.verbose; + + var logv = require('./pluginUtil').logv; + + logv(verbose, 'FUNCTION _getFileAndContextDeps'); + + const uniq = require('lodash.uniq'); + + const isGlob = require('is-glob'); + + const { + fileDependencies, + contextDependencies + } = compilation; + const isWebpack4 = compilation.hooks; + let fds = isWebpack4 ? [...fileDependencies] : fileDependencies; + let cds = isWebpack4 ? [...contextDependencies] : contextDependencies; + + if (files.length > 0) { + files.forEach(pattern => { + let f = pattern; + + if (isGlob(pattern)) { + f = glob.sync(pattern, { + cwd, + dot: true, + absolute: true + }); + } + + fds = fds.concat(f); + }); + fds = uniq(fds); + } + + if (dirs.length > 0) { + cds = uniq(cds.concat(dirs)); + } + + return { + fileDependencies: fds, + contextDependencies: cds + }; +} + +function _prepareForBuild(app, vars, options, output, compilation) { + // try { + const log = require('./pluginUtil').log; + + const logv = require('./pluginUtil').logv; + + logv(options, '_prepareForBuild'); + + const fs = require('fs'); + + const recursiveReadSync = require('recursive-readdir-sync'); + + var watchedFiles = []; + + try { + watchedFiles = recursiveReadSync('./app').concat(recursiveReadSync('./packages')); + } catch (err) { + if (err.errno === 34) { + console.log('Path does not exist'); + } else { + throw err; + } + } + + var currentNumFiles = watchedFiles.length; + logv(options, 'watchedFiles: ' + currentNumFiles); + var doBuild = true; + logv(options, 'doBuild: ' + doBuild); + vars.lastMilliseconds = new Date().getTime(); + var filesource = 'this file enables client reload'; + compilation.assets[currentNumFiles + 'FilesUnderAppFolder.md'] = { + source: function () { + return filesource; + }, + size: function () { + return filesource.length; + } + }; + logv(options, 'currentNumFiles: ' + currentNumFiles); + logv(options, 'vars.lastNumFiles: ' + vars.lastNumFiles); + logv(options, 'doBuild: ' + doBuild); + + if (currentNumFiles != vars.lastNumFiles || doBuild) { + vars.rebuild = true; + var bundleDir = output.replace(process.cwd(), ''); + + if (bundleDir.trim() == '') { + bundleDir = './'; + } + + log(app + 'Building Ext bundle at: ' + bundleDir); + } else { + vars.rebuild = false; + } + + vars.lastNumFiles = currentNumFiles; // } + // catch(e) { + // console.log(e) + // compilation.errors.push('_prepareForBuild: ' + e) + // } +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRqc1V0aWwuanMiXSwibmFtZXMiOlsiX2dldERlZmF1bHRWYXJzIiwidG91Y2hGaWxlIiwicmVidWlsZCIsIndhdGNoU3RhcnRlZCIsImZpcnN0VGltZSIsImJyb3dzZXJDb3VudCIsImN3ZCIsInByb2Nlc3MiLCJleHRQYXRoIiwicGx1Z2luRXJyb3JzIiwibGFzdE51bUZpbGVzIiwibGFzdE1pbGxpc2Vjb25kcyIsImxhc3RNaWxsaXNlY29uZHNBcHBKc29uIiwiZmlsZXMiLCJkaXJzIiwiX2FmdGVyQ29tcGlsZSIsImNvbXBpbGF0aW9uIiwidmFycyIsIm9wdGlvbnMiLCJ2ZXJib3NlIiwibG9ndiIsInJlcXVpcmUiLCJwYXRoIiwiZmlsZURlcGVuZGVuY2llcyIsImNvbnRleHREZXBlbmRlbmNpZXMiLCJfZ2V0RmlsZUFuZENvbnRleHREZXBzIiwibGVuZ3RoIiwiZm9yRWFjaCIsImZpbGUiLCJhZGQiLCJyZXNvbHZlIiwiY29udGV4dCIsInVuaXEiLCJpc0dsb2IiLCJpc1dlYnBhY2s0IiwiaG9va3MiLCJmZHMiLCJjZHMiLCJwYXR0ZXJuIiwiZiIsImdsb2IiLCJzeW5jIiwiZG90IiwiYWJzb2x1dGUiLCJjb25jYXQiLCJfcHJlcGFyZUZvckJ1aWxkIiwiYXBwIiwib3V0cHV0IiwibG9nIiwiZnMiLCJyZWN1cnNpdmVSZWFkU3luYyIsIndhdGNoZWRGaWxlcyIsImVyciIsImVycm5vIiwiY29uc29sZSIsImN1cnJlbnROdW1GaWxlcyIsImRvQnVpbGQiLCJEYXRlIiwiZ2V0VGltZSIsImZpbGVzb3VyY2UiLCJhc3NldHMiLCJzb3VyY2UiLCJzaXplIiwiYnVuZGxlRGlyIiwicmVwbGFjZSIsInRyaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULEdBQTJCO0FBQ2hDLFNBQU87QUFDTEMsSUFBQUEsU0FBUyxFQUFFLFlBRE47QUFFTEMsSUFBQUEsT0FBTyxFQUFFLElBRko7QUFHTEMsSUFBQUEsWUFB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LENBQUNqQyxNQUFsQjtBQUF5QjtBQUZvQixHQUFqRTtBQUtBTixFQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyxzQkFBc0JxQyxlQUEvQixDQUFKO0FBQ0FuQyxFQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyx3QkFBd0JELElBQUksQ0FBQ1AsWUFBdEMsQ0FBSjtBQUNBVSxFQUFBQSxJQUFJLENBQUNGLE9BQUQsRUFBUyxjQUFjc0MsT0FBdkIsQ0FBSjs7QUFFQSxNQUFJRCxlQUFlLElBQUl0QyxJQUFJLENBQUNQLFlBQXhCLElBQXdDOEMsT0FBNUMsRUFBcUQ7QUFDbkR2QyxJQUFBQSxJQUFJLENBQUNmLE9BQUwsR0FBZSxJQUFmO0FBQ0EsUUFBSTZELFNBQVMsR0FBR2hCLE1BQU0sQ0FBQ2lCLE9BQVAsQ0FBZXpELE9BQU8sQ0FBQ0QsR0FBUixFQUFmLEVBQThCLEVBQTlCLENBQWhCOztBQUNBLFFBQUl5RCxTQUFTLENBQUNFLElBQVYsTUFBb0IsRUFBeEIsRUFBNEI7QUFBQ0YsTUFBQUEsU0FBUyxHQUFHLElBQVo7QUFBaUI7O0FBQzlDZixJQUFBQSxHQUFHLENBQUNGLEdBQUcsR0FBRywwQkFBTixHQUFtQ2lCLFNBQXBDLENBQUg7QUFDRCxHQUxELE1BTUs7QUFDSDlDLElBQUFBLElBQUksQ0FBQ2YsT0FBTCxHQUFlLEtBQWY7QUFDRDs7QUFDRGUsRUFBQUEsSUFBSSxDQUFDUCxZQUFMLEdBQW9CNkMsZUFBcEIsQ0FwQ3NFLENBcUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIlxuXG5leHBvcnQgZnVuY3Rpb24gX2dldERlZmF1bHRWYXJzKCkge1xuICByZXR1cm4ge1xuICAgIHRvdWNoRmlsZTogJy90aGVtZXIuanMnLFxuICAgIHJlYnVpbGQ6IHRydWUsXG4gICAgd2F0Y2hTdGFydGVkIDogZmFsc2UsXG4gICAgZmlyc3RUaW1lIDogdHJ1ZSxcbiAgICBicm93c2VyQ291bnQgOiAwLFxuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBleHRQYXRoOiAnLicsXG4gICAgcGx1Z2luRXJyb3JzOiBbXSxcbiAgICBsYXN0TnVtRmlsZXM6IDAsXG4gICAgbGFzdE1pbGxpc2Vjb25kczogMCxcbiAgICBsYXN0TWlsbGlzZWNvbmRzQXBwSnNvbjogMCxcbiAgICBmaWxlczogWycuL2FwcC5qc29uJ10sXG4gICAgZGlyczogWycuL2FwcCcsJy4vcGFja2FnZXMnXVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfYWZ0ZXJDb21waWxlKGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4gIHZhciB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gIHZhciBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KHZlcmJvc2UsJ0ZVTkNUSU9OIGV4dGpzIF9hZnRlckNvbXBpbGUnKVxuICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gIGxldCB7IGZpbGVzLCBkaXJzIH0gPSB2YXJzXG4gIGNvbnN0IHsgY3dkIH0gPSB2YXJzXG4gIGZpbGVzID0gdHlwZW9mIGZpbGVzID09PSAnc3RyaW5nJyA/IFtmaWxlc10gOiBmaWxlc1xuICBkaXJzID0gdHlwZW9mIGRpcnMgPT09ICdzdHJpbmcnID8gW2RpcnNdIDogZGlyc1xuICBjb25zdCB7XG4gICAgZmlsZURlcGVuZGVuY2llcyxcbiAgICBjb250ZXh0RGVwZW5kZW5jaWVzLFxuICB9ID0gX2dldEZpbGVBbmRDb250ZXh0RGVwcyhjb21waWxhdGlvbiwgZmlsZXMsIGRpcnMsIGN3ZCwgb3B0aW9ucyk7XG4gIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgZmlsZURlcGVuZGVuY2llcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBjb21waWxhdGlvbi5maWxlRGVwZW5kZW5jaWVzLmFkZChwYXRoLnJlc29sdmUoZmlsZSkpO1xuICAgIH0pXG4gIH1cbiAgaWYgKGRpcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnRleHREZXBlbmRlbmNpZXMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29tcGlsYXRpb24uY29udGV4dERlcGVuZGVuY2llcy5hZGQoY29udGV4dCk7XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0RmlsZUFuZENvbnRleHREZXBzKGNvbXBpbGF0aW9uLCBmaWxlcywgZGlycywgY3dkLCBvcHRpb25zKSB7XG4gIHZhciB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gIHZhciBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KHZlcmJvc2UsJ0ZVTkNUSU9OIF9nZXRGaWxlQW5kQ29udGV4dERlcHMnKVxuICBjb25zdCB1bmlxID0gcmVxdWlyZSgnbG9kYXNoLnVuaXEnKVxuICBjb25zdCBpc0dsb2IgPSByZXF1aXJlKCdpcy1nbG9iJylcblxuICBjb25zdCB7IGZpbGVEZXBlbmRlbmNpZXMsIGNvbnRleHREZXBlbmRlbmNpZXMgfSA9IGNvbXBpbGF0aW9uO1xuICBjb25zdCBpc1dlYnBhY2s0ID0gY29tcGlsYXRpb24uaG9va3M7XG4gIGxldCBmZHMgPSBpc1dlYnBhY2s0ID8gWy4uLmZpbGVEZXBlbmRlbmNpZXNdIDogZmlsZURlcGVuZGVuY2llcztcbiAgbGV0IGNkcyA9IGlzV2VicGFjazQgPyBbLi4uY29udGV4dERlcGVuZGVuY2llc10gOiBjb250ZXh0RGVwZW5kZW5jaWVzO1xuICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZpbGVzLmZvckVhY2goKHBhdHRlcm4pID0+IHtcbiAgICAgIGxldCBmID0gcGF0dGVyblxuICAgICAgaWYgKGlzR2xvYihwYXR0ZXJuKSkge1xuICAgICAgICBmID0gZ2xvYi5zeW5jKHBhdHRlcm4sIHsgY3dkLCBkb3Q6IHRydWUsIGFic29sdXRlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBmZHMgPSBmZHMuY29uY2F0KGYpXG4gICAgfSlcbiAgICBmZHMgPSB1bmlxKGZkcylcbiAgfVxuICBpZiAoZGlycy5sZW5ndGggPiAwKSB7XG4gICAgY2RzID0gdW5pcShjZHMuY29uY2F0KGRpcnMpKVxuICB9XG4gIHJldHVybiB7IGZpbGVEZXBlbmRlbmNpZXM6IGZkcywgY29udGV4dERlcGVuZGVuY2llczogY2RzIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmVwYXJlRm9yQnVpbGQoYXBwLCB2YXJzLCBvcHRpb25zLCBvdXRwdXQsIGNvbXBpbGF0aW9uKSB7XG4vLyAgdHJ5IHtcbiAgICBjb25zdCBsb2cgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2dcbiAgICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICAgIGxvZ3Yob3B0aW9ucywnX3ByZXBhcmVGb3JCdWlsZCcpXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG4gICAgY29uc3QgcmVjdXJzaXZlUmVhZFN5bmMgPSByZXF1aXJlKCdyZWN1cnNpdmUtcmVhZGRpci1zeW5jJylcbiAgICB2YXIgd2F0Y2hlZEZpbGVzPVtdXG4gICAgdHJ5IHt3YXRjaGVkRmlsZXMgPSByZWN1cnNpdmVSZWFkU3luYygnLi9hcHAnKS5jb25jYXQocmVjdXJzaXZlUmVhZFN5bmMoJy4vcGFja2FnZXMnKSl9XG4gICAgY2F0Y2goZXJyKSB7aWYoZXJyLmVycm5vID09PSAzNCl7Y29uc29sZS5sb2coJ1BhdGggZG9lcyBub3QgZXhpc3QnKTt9IGVsc2Uge3Rocm93IGVycjt9fVxuICAgIHZhciBjdXJyZW50TnVtRmlsZXMgPSB3YXRjaGVkRmlsZXMubGVuZ3RoXG4gICAgbG9ndihvcHRpb25zLCd3YXRjaGVkRmlsZXM6ICcgKyBjdXJyZW50TnVtRmlsZXMpXG4gICAgdmFyIGRvQnVpbGQgPSB0cnVlXG4gICAgXG4gICAgbG9ndihvcHRpb25zLCdkb0J1aWxkOiAnICsgZG9CdWlsZClcblxuICAgIHZhcnMubGFzdE1pbGxpc2Vjb25kcyA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpXG4gICAgdmFyIGZpbGVzb3VyY2UgPSAndGhpcyBmaWxlIGVuYWJsZXMgY2xpZW50IHJlbG9hZCdcbiAgICBjb21waWxhdGlvbi5hc3NldHNbY3VycmVudE51bUZpbGVzICsgJ0ZpbGVzVW5kZXJBcHBGb2xkZXIubWQnXSA9IHtcbiAgICAgIHNvdXJjZTogZnVuY3Rpb24oKSB7cmV0dXJuIGZpbGVzb3VyY2V9LFxuICAgICAgc2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJuIGZpbGVzb3VyY2UubGVuZ3RofVxuICAgIH1cblxuICAgIGxvZ3Yob3B0aW9ucywnY3VycmVudE51bUZpbGVzOiAnICsgY3VycmVudE51bUZpbGVzKVxuICAgIGxvZ3Yob3B0aW9ucywndmFycy5sYXN0TnVtRmlsZXM6ICcgKyB2YXJzLmxhc3ROdW1GaWxlcylcbiAgICBsb2d2KG9wdGlvbnMsJ2RvQnVpbGQ6ICcgKyBkb0J1aWxkKVxuXG4gICAgaWYgKGN1cnJlbnROdW1GaWxlcyAhPSB2YXJzLmxhc3ROdW1GaWxlcyB8fCBkb0J1aWxkKSB7XG4gICAgICB2YXJzLnJlYnVpbGQgPSB0cnVlXG4gICAgICB2YXIgYnVuZGxlRGlyID0gb3V0cHV0LnJlcGxhY2UocHJvY2Vzcy5jd2QoKSwgJycpXG4gICAgICBpZiAoYnVuZGxlRGlyLnRyaW0oKSA9PSAnJykge2J1bmRsZURpciA9ICcuLyd9XG4gICAgICBsb2coYXBwICsgJ0J1aWxkaW5nIEV4dCBidW5kbGUgYXQ6ICcgKyBidW5kbGVEaXIpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFycy5yZWJ1aWxkID0gZmFsc2VcbiAgICB9XG4gICAgdmFycy5sYXN0TnVtRmlsZXMgPSBjdXJyZW50TnVtRmlsZXNcbiAgLy8gfVxuICAvLyBjYXRjaChlKSB7XG4gIC8vICAgY29uc29sZS5sb2coZSlcbiAgLy8gICBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX3ByZXBhcmVGb3JCdWlsZDogJyArIGUpXG4gIC8vIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/index.js b/packages/ext-webpack-plugin/dist/index.js new file mode 100644 index 0000000..62a8b77 --- /dev/null +++ b/packages/ext-webpack-plugin/dist/index.js @@ -0,0 +1,66 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +require('@babel/polyfill'); + +const p = require(`./pluginUtil`); + +class ExtWebpackPlugin { + constructor(options) { + var o = p._constructor(options); + + this.vars = o.vars; + this.options = o.options; + } + + apply(compiler) { + const vars = this.vars; + const options = this.options; + const app = this.app; + + if (!compiler.hooks) { + console.log('not webpack 4'); + return; + } + + compiler.hooks.thisCompilation.tap(`ext-this-compilation`, compilation => { + p.logh(app, `HOOK thisCompilation`); + + p._thisCompilation(compiler, compilation, vars, options); + + if (vars.pluginErrors.length > 0) { + compilation.errors.push(new Error(vars.pluginErrors.join(""))); + return; + } + }); + compiler.hooks.compilation.tap(`ext-compilation`, compilation => { + p.logh(app, `HOOK compilation`); + + p._compilation(compiler, compilation, vars, options); + }); + compiler.hooks.afterCompile.tap('ext-after-compile', compilation => { + p.logh(app, `HOOK afterCompile`); + + p._afterCompile(compiler, compilation, vars, options); + }); + compiler.hooks.emit.tapAsync(`ext-emit`, (compilation, callback) => { + p.logh(app, `HOOK emit (async)`); + + p._emit(compiler, compilation, vars, options, callback); + }); + compiler.hooks.done.tap(`ext-done`, stats => { + p.logh(app, `HOOK done`); + + p._done(stats, vars, options); + }); + } + +} + +exports.default = ExtWebpackPlugin; +module.exports = exports.default; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwicCIsIkV4dFdlYnBhY2tQbHVnaW4iLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJvIiwiX2NvbnN0cnVjdG9yIiwidmFycyIsImFwcGx5IiwiY29tcGlsZXIiLCJhcHAiLCJob29rcyIsImNvbnNvbGUiLCJsb2ciLCJ0aGlzQ29tcGlsYXRpb24iLCJ0YXAiLCJjb21waWxhdGlvbiIsImxvZ2giLCJfdGhpc0NvbXBpbGF0aW9uIiwicGx1Z2luRXJyb3JzIiwibGVuZ3RoIiwiZXJyb3JzIiwicHVzaCIsIkVycm9yIiwiam9pbiIsIl9jb21waWxhdGlvbiIsImFmdGVyQ29tcGlsZSIsIl9hZnRlckNvbXBpbGUiLCJlbWl0IiwidGFwQXN5bmMiLCJjYWxsYmFjayIsIl9lbWl0IiwiZG9uZSIsInN0YXRzIiwiX2RvbmUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBQ0FBLE9BQU8sQ0FBQyxpQkFBRCxDQUFQOztBQUNBLE1BQU1DLENBQUMsR0FBR0QsT0FBTyxDQUFFLGNBQUYsQ0FBakI7O0FBRWUsTUFBTUUsZ0JBQU4sQ0FBdUI7QUFFcENDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVO0FBQ25CLFFBQUlDLENBQUMsR0FBR0osQ0FBQyxDQUFDSyxZQUFGLENBQWVGLE9BQWYsQ0FBUjs7QUFDQSxTQUFLRyxJQUFMLEdBQVlGLENBQUMsQ0FBQ0UsSUFBZDtBQUNBLFNBQUtILE9BQUwsR0FBZUMsQ0FBQyxDQUFDRCxPQUFqQjtBQUNEOztBQUVESSxFQUFBQSxLQUFLLENBQUNDLFFBQUQsRUFBVztBQUNkLFVBQU1GLElBQUksR0FBRyxLQUFLQSxJQUFsQjtBQUNBLFVBQU1ILE9BQU8sR0FBRyxLQUFLQSxPQUFyQjtBQUNBLFVBQU1NLEdBQUcsR0FBRyxLQUFLQSxHQUFqQjs7QUFFQSxRQUFJLENBQUNELFFBQVEsQ0FBQ0UsS0FBZCxFQUFxQjtBQUFDQyxNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxlQUFaO0FBQTZCO0FBQU87O0FBRTFESixJQUFBQSxRQUFRLENBQUNFLEtBQVQsQ0FBZUcsZUFBZixDQUErQkMsR0FBL0IsQ0FBb0Msc0JBQXBDLEVBQTREQyxXQUFELElBQWlCO0FBQzFFZixNQUFBQSxDQUFDLENBQUNnQixJQUFGLENBQU9QLEdBQVAsRUFBYSxzQkFBYjs7QUFDQVQsTUFBQUEsQ0FBQyxDQUFDaUIsZ0JBQUYsQ0FBbUJULFFBQW5CLEVBQTZCTyxXQUE3QixFQUEwQ1QsSUFBMUMsRUFBZ0RILE9BQWhEOztBQUNBLFVBQUlHLElBQUksQ0FBQ1ksWUFBTCxDQUFrQkMsTUFBbEIsR0FBMkIsQ0FBL0IsRUFBa0M7QUFDaENKLFFBQUFBLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQkMsSUFBbkIsQ0FBeUIsSUFBSUMsS0FBSixDQUFVaEIsSUFBSSxDQUFDWSxZQUFMLENBQWtCSyxJQUFsQixDQUF1QixFQUF2QixDQUFWLENBQXpCO0FBQ0E7QUFDRDtBQUNGLEtBUEQ7QUFTQWYsSUFBQUEsUUFBUSxDQUFDRSxLQUFULENBQWVLLFdBQWYsQ0FBMkJELEdBQTNCLENBQWdDLGlCQUFoQyxFQUFtREMsV0FBRCxJQUFpQjtBQUNqRWYsTUFBQUEsQ0FBQyxDQUFDZ0IsSUFBRixDQUFPUCxHQUFQLEVBQWEsa0JBQWI7O0FBQ0FULE1BQUFBLENBQUMsQ0FBQ3dCLFlBQUYsQ0FBZWhCLFFBQWYsRUFBeUJPLFdBQXpCLEVBQXNDVCxJQUF0QyxFQUE0Q0gsT0FBNUM7QUFDRCxLQUhEO0FBS0FLLElBQUFBLFFBQVEsQ0FBQ0UsS0FBVCxDQUFlZSxZQUFmLENBQTRCWCxHQUE1QixDQUFnQyxtQkFBaEMsRUFBc0RDLFdBQUQsSUFBaUI7QUFDcEVmLE1BQUFBLENBQUMsQ0FBQ2dCLElBQUYsQ0FBT1AsR0FBUCxFQUFhLG1CQUFiOztBQUNBVCxNQUFBQSxDQUFDLENBQUMwQixhQUFGLENBQWdCbEIsUUFBaEIsRUFBMEJPLFdBQTFCLEVBQXVDVCxJQUF2QyxFQUE2Q0gsT0FBN0M7QUFDRCxLQUhEO0FBS0FLLElBQUFBLFFBQVEsQ0FBQ0UsS0FBVCxDQUFlaUIsSUFBZixDQUFvQkMsUUFBcEIsQ0FBOEIsVUFBOUIsRUFBeUMsQ0FBQ2IsV0FBRCxFQUFjYyxRQUFkLEtBQTJCO0FBQ2xFN0IsTUFBQUEsQ0FBQyxDQUFDZ0IsSUFBRixDQUFPUCxHQUFQLEVBQWEsbUJBQWI7O0FBQ0FULE1BQUFBLENBQUMsQ0FBQzhCLEtBQUYsQ0FBUXRCLFFBQVIsRUFBa0JPLFdBQWxCLEVBQStCVCxJQUEvQixFQUFxQ0gsT0FBckMsRUFBOEMwQixRQUE5QztBQUNELEtBSEQ7QUFLQXJCLElBQUFBLFFBQVEsQ0FBQ0UsS0FBVCxDQUFlcUIsSUFBZixDQUFvQmpCLEdBQXBCLENBQXlCLFVBQXpCLEVBQXFDa0IsS0FBRCxJQUFXO0FBQzdDaEMsTUFBQUEsQ0FBQyxDQUFDZ0IsSUFBRixDQUFPUCxHQUFQLEVBQWEsV0FBYjs7QUFDQVQsTUFBQUEsQ0FBQyxDQUFDaUMsS0FBRixDQUFRRCxLQUFSLEVBQWUxQixJQUFmLEVBQXFCSCxPQUFyQjtBQUNELEtBSEQ7QUFJRDs7QUEzQ21DIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5yZXF1aXJlKCdAYmFiZWwvcG9seWZpbGwnKVxuY29uc3QgcCA9IHJlcXVpcmUoYC4vcGx1Z2luVXRpbGApXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4dFdlYnBhY2tQbHVnaW4ge1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB2YXIgbyA9IHAuX2NvbnN0cnVjdG9yKG9wdGlvbnMpXG4gICAgdGhpcy52YXJzID0gby52YXJzXG4gICAgdGhpcy5vcHRpb25zID0gby5vcHRpb25zXG4gIH1cblxuICBhcHBseShjb21waWxlcikge1xuICAgIGNvbnN0IHZhcnMgPSB0aGlzLnZhcnNcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG4gICAgY29uc3QgYXBwID0gdGhpcy5hcHBcblxuICAgIGlmICghY29tcGlsZXIuaG9va3MpIHtjb25zb2xlLmxvZygnbm90IHdlYnBhY2sgNCcpO3JldHVybn1cblxuICAgIGNvbXBpbGVyLmhvb2tzLnRoaXNDb21waWxhdGlvbi50YXAoYGV4dC10aGlzLWNvbXBpbGF0aW9uYCwgKGNvbXBpbGF0aW9uKSA9PiB7XG4gICAgICBwLmxvZ2goYXBwLCBgSE9PSyB0aGlzQ29tcGlsYXRpb25gKVxuICAgICAgcC5fdGhpc0NvbXBpbGF0aW9uKGNvbXBpbGVyLCBjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucylcbiAgICAgIGlmICh2YXJzLnBsdWdpbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCBuZXcgRXJyb3IodmFycy5wbHVnaW5FcnJvcnMuam9pbihcIlwiKSkgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29tcGlsZXIuaG9va3MuY29tcGlsYXRpb24udGFwKGBleHQtY29tcGlsYXRpb25gLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgIHAubG9naChhcHAsIGBIT09LIGNvbXBpbGF0aW9uYClcbiAgICAgIHAuX2NvbXBpbGF0aW9uKGNvbXBpbGVyLCBjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucylcbiAgICB9KVxuXG4gICAgY29tcGlsZXIuaG9va3MuYWZ0ZXJDb21waWxlLnRhcCgnZXh0LWFmdGVyLWNvbXBpbGUnLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgIHAubG9naChhcHAsIGBIT09LIGFmdGVyQ29tcGlsZWApXG4gICAgICBwLl9hZnRlckNvbXBpbGUoY29tcGlsZXIsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKVxuICAgIH0pXG5cbiAgICBjb21waWxlci5ob29rcy5lbWl0LnRhcEFzeW5jKGBleHQtZW1pdGAsIChjb21waWxhdGlvbiwgY2FsbGJhY2spID0+IHtcbiAgICAgIHAubG9naChhcHAsIGBIT09LIGVtaXQgKGFzeW5jKWApXG4gICAgICBwLl9lbWl0KGNvbXBpbGVyLCBjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgfSlcblxuICAgIGNvbXBpbGVyLmhvb2tzLmRvbmUudGFwKGBleHQtZG9uZWAsIChzdGF0cykgPT4ge1xuICAgICAgcC5sb2doKGFwcCwgYEhPT0sgZG9uZWApXG4gICAgICBwLl9kb25lKHN0YXRzLCB2YXJzLCBvcHRpb25zKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/pluginUtil.js b/packages/ext-webpack-plugin/dist/pluginUtil.js new file mode 100644 index 0000000..7ea4b0e --- /dev/null +++ b/packages/ext-webpack-plugin/dist/pluginUtil.js @@ -0,0 +1,861 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports._constructor = _constructor; +exports._thisCompilation = _thisCompilation; +exports._compilation = _compilation; +exports._afterCompile = _afterCompile; +exports._emit = _emit; +exports._done = _done; +exports._prepareForBuild = _prepareForBuild; +exports._buildExtBundle = _buildExtBundle; +exports._executeAsync = _executeAsync; +exports._toXtype = _toXtype; +exports._getApp = _getApp; +exports._getVersions = _getVersions; +exports.log = log; +exports.logh = logh; +exports.logv = logv; + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +//********** +function _constructor(initialOptions) { + const fs = require('fs'); + + var vars = {}; + var options = {}; + + try { + if (initialOptions.framework == undefined) { + vars.pluginErrors = []; + vars.pluginErrors.push('webpack config: framework parameter on ext-webpack-plugin is not defined - values: react, angular, extjs, components'); + var o = {}; + o.vars = vars; + return o; + } + + var framework = initialOptions.framework; + var treeshake = initialOptions.treeshake; + var verbose = initialOptions.verbose; + + const validateOptions = require('schema-utils'); + + validateOptions(_getValidateOptions(), initialOptions, ''); + const rc = fs.existsSync(`.ext-${framework}rc`) && JSON.parse(fs.readFileSync(`.ext-${framework}rc`, 'utf-8')) || {}; + options = _objectSpread({}, _getDefaultOptions(), initialOptions, rc); + vars = require(`./${framework}Util`)._getDefaultVars(); + vars.pluginName = 'ext-webpack-plugin'; + vars.app = _getApp(); + var pluginName = vars.pluginName; + var app = vars.app; + logv(verbose, 'FUNCTION _constructor'); + logv(verbose, `pluginName - ${pluginName}`); + logv(verbose, `app - ${app}`); + + if (options.environment == 'production') { + vars.production = true; + options.browser = 'no'; + options.watch = 'no'; + } else { + vars.production = false; + } //logv(verbose, `options:`);if (verbose == 'yes') {console.dir(options)} + //logv(verbose, `vars:`);if (verbose == 'yes') {console.dir(vars)} + + + log(app, _getVersions(pluginName, framework)); + + if (framework == 'react' || framework == 'extjs') { + if (vars.production == true) { + vars.buildstep = '1 of 1'; + log(app, 'Starting Production Build for ' + framework); + } else { + vars.buildstep = '1 of 1'; + log(app, 'Starting development build for ' + framework); + } + } else if (vars.production == true) { + if (treeshake == 'yes') { + vars.buildstep = '1 of 2'; + log(app, 'Starting production build for ' + framework + ' - ' + vars.buildstep); + + require(`./${framework}Util`)._toProd(vars, options); + } else { + vars.buildstep = '2 of 2'; + log(app, 'Continuing production build for ' + framework + ' - ' + vars.buildstep); + } + } else { + vars.buildstep = '1 of 1'; + log(app, 'Starting development build for ' + framework); + } + + logv(verbose, 'Building for ' + options.environment + ', ' + 'Treeshake is ' + options.treeshake); + var o = {}; + o.vars = vars; + o.options = options; + return o; + } catch (e) { + throw '_constructor: ' + e.toString(); + } +} //********** + + +function _thisCompilation(compiler, compilation, vars, options) { + try { + var app = vars.app; + var verbose = options.verbose; + logv(verbose, 'FUNCTION _thisCompilation'); + logv(verbose, `options.script: ${options.script}`); + logv(verbose, `buildstep: ${vars.buildstep}`); + + if (vars.buildstep == '1 of 1' || vars.buildstep == '1 of 2') { + if (options.script != undefined) { + if (options.script != null) { + if (options.script != '') { + log(app, `Started running ${options.script}`); + runScript(options.script, function (err) { + if (err) throw err; + log(app, `Finished running ${options.script}`); + }); + } + } + } + } + } catch (e) { + throw '_thisCompilation: ' + e.toString(); + } +} //********** + + +function _compilation(compiler, compilation, vars, options) { + try { + var app = vars.app; + var verbose = options.verbose; + var framework = options.framework; + logv(verbose, 'FUNCTION _compilation'); // if (framework == 'extjs') { + // logv(verbose, 'FUNCTION _compilation end (extjs)') + // return + // } + + if (framework != 'extjs') { + var extComponents = []; + + if (vars.buildstep == '1 of 2') { + extComponents = require(`./${framework}Util`)._getAllComponents(vars, options); + } + + compilation.hooks.succeedModule.tap(`ext-succeed-module`, module => { + if (module.resource && !module.resource.match(/node_modules/)) { + if (module.resource.match(/\.html$/) != null) { + if (module._source._value.toLowerCase().includes('doctype html') == false) { + vars.deps = [...(vars.deps || []), ...require(`./${framework}Util`)._extractFromSource(module, options, compilation, extComponents)]; + } + } else { + vars.deps = [...(vars.deps || []), ...require(`./${framework}Util`)._extractFromSource(module, options, compilation, extComponents)]; + } + } + }); + + if (vars.buildstep == '1 of 2') { + compilation.hooks.finishModules.tap(`ext-finish-modules`, modules => { + require(`./${framework}Util`)._writeFilesToProdFolder(vars, options); + }); + } + + if (vars.buildstep == '1 of 1' || vars.buildstep == '2 of 2') { + compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tap(`ext-html-generation`, data => { + const path = require('path'); + + var jsPath = path.join(vars.extPath, 'ext.js'); + var cssPath = path.join(vars.extPath, 'ext.css'); + data.assets.js.unshift(jsPath); + data.assets.css.unshift(cssPath); + log(app, `Adding ${jsPath} and ${cssPath} to index.html`); + }); + } + } + } catch (e) { + throw '_compilation: ' + e.toString(); // logv(options.verbose,e) + // compilation.errors.push('_compilation: ' + e) + } +} //********** + + +function _afterCompile(compiler, compilation, vars, options) { + try { + var app = vars.app; + var verbose = options.verbose; + var framework = options.framework; + logv(verbose, 'FUNCTION _afterCompile'); + + if (framework == 'extjs') { + require(`./extjsUtil`)._afterCompile(compilation, vars, options); + } else { + logv(verbose, 'FUNCTION _afterCompile not run'); + } + } catch (e) { + throw '_afterCompile: ' + e.toString(); + } +} //********** + + +function _emit(_x, _x2, _x3, _x4, _x5) { + return _emit2.apply(this, arguments); +} //********** + + +function _emit2() { + _emit2 = _asyncToGenerator( + /*#__PURE__*/ + regeneratorRuntime.mark(function _callee(compiler, compilation, vars, options, callback) { + var path, app, verbose, emit, framework, outputPath, command, parms; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + _context.prev = 0; + path = require('path'); + app = vars.app; + verbose = options.verbose; + emit = options.emit; + framework = options.framework; + logv(verbose, 'FUNCTION _emit'); + + if (!(emit == 'yes')) { + _context.next = 33; + break; + } + + if (!(vars.buildstep == '1 of 1' || vars.buildstep == '1 of 2')) { + _context.next = 29; + break; + } + + outputPath = path.join(compiler.outputPath, vars.extPath); + + if (compiler.outputPath === '/' && compiler.options.devServer) { + outputPath = path.join(compiler.options.devServer.contentBase, outputPath); + } + + logv(verbose, 'outputPath: ' + outputPath); + logv(verbose, 'framework: ' + framework); + + if (framework != 'extjs') { + _prepareForBuild(app, vars, options, outputPath, compilation); + } + + command = ''; + + if (options.watch == 'yes' && vars.production == false) { + command = 'watch'; + } else { + command = 'build'; + } + + if (!(vars.rebuild == true)) { + _context.next = 26; + break; + } + + parms = []; + + if (options.profile == undefined || options.profile == '' || options.profile == null) { + if (command == 'build') { + parms = ['app', command, options.environment]; + } else { + parms = ['app', command, '--web-server', 'false', options.environment]; + } + } else { + if (command == 'build') { + parms = ['app', command, options.profile, options.environment]; + } else { + parms = ['app', command, '--web-server', 'false', options.profile, options.environment]; + } + } + + if (!(vars.watchStarted == false)) { + _context.next = 23; + break; + } + + _context.next = 22; + return _buildExtBundle(app, compilation, outputPath, parms, vars, options); + + case 22: + vars.watchStarted = true; + + case 23: + callback(); + _context.next = 27; + break; + + case 26: + callback(); + + case 27: + _context.next = 31; + break; + + case 29: + logv(verbose, 'NOT running emit'); + callback(); + + case 31: + _context.next = 35; + break; + + case 33: + logv(verbose, 'emit is no'); + callback(); + + case 35: + _context.next = 41; + break; + + case 37: + _context.prev = 37; + _context.t0 = _context["catch"](0); + callback(); + throw '_emit: ' + _context.t0.toString(); + + case 41: + case "end": + return _context.stop(); + } + }, _callee, null, [[0, 37]]); + })); + return _emit2.apply(this, arguments); +} + +function _done(stats, vars, options) { + try { + var verbose = options.verbose; + var framework = options.framework; + logv(verbose, 'FUNCTION _done'); + + if (stats.compilation.errors && stats.compilation.errors.length) // && process.argv.indexOf('--watch') == -1) + { + var chalk = require('chalk'); + + console.log(chalk.red('******************************************')); + console.log(stats.compilation.errors[0]); + console.log(chalk.red('******************************************')); + process.exit(0); + } //mjg refactor + + + if (vars.production == true && options.treeshake == 'no' && framework == 'angular') { + require(`./${options.framework}Util`)._toDev(vars, options); + } + + try { + if (options.browser == 'yes' && options.watch == 'yes' && vars.production == false) { + if (vars.browserCount == 0) { + var url = 'http://localhost:' + options.port; + + require('./pluginUtil').log(vars.app, `Opening browser at ${url}`); + + vars.browserCount++; + + const opn = require('opn'); + + opn(url); + } + } + } catch (e) { + console.log(e); + } + + if (vars.buildstep == '1 of 1') { + if (vars.production == true) { + require('./pluginUtil').log(vars.app, `Ending production build`); + } else { + require('./pluginUtil').log(vars.app, `Ending development build`); + } + } + + if (vars.buildstep == '2 of 2') { + require('./pluginUtil').log(vars.app, `Ending production build`); + } + } catch (e) { + // require('./pluginUtil').logv(options.verbose,e) + throw '_done: ' + e.toString(); + } +} //********** + + +function _prepareForBuild(app, vars, options, output, compilation) { + try { + var verbose = options.verbose; + var packages = options.packages; + var toolkit = options.toolkit; + var theme = options.theme; + logv(verbose, 'FUNCTION _prepareForBuild'); + + const rimraf = require('rimraf'); + + const mkdirp = require('mkdirp'); + + const fsx = require('fs-extra'); + + const fs = require('fs'); + + const path = require('path'); + + theme = theme || (toolkit === 'classic' ? 'theme-triton' : 'theme-material'); + logv(verbose, 'firstTime: ' + vars.firstTime); + + if (vars.firstTime) { + rimraf.sync(output); + mkdirp.sync(output); + + const buildXML = require('./artifacts').buildXML; + + const createAppJson = require('./artifacts').createAppJson; + + const createWorkspaceJson = require('./artifacts').createWorkspaceJson; + + const createJSDOMEnvironment = require('./artifacts').createJSDOMEnvironment; + + fs.writeFileSync(path.join(output, 'build.xml'), buildXML(vars.production, options, output), 'utf8'); + fs.writeFileSync(path.join(output, 'app.json'), createAppJson(theme, packages, toolkit, options, output), 'utf8'); + fs.writeFileSync(path.join(output, 'jsdom-environment.js'), createJSDOMEnvironment(options, output), 'utf8'); + fs.writeFileSync(path.join(output, 'workspace.json'), createWorkspaceJson(options, output), 'utf8'); + var framework = vars.framework; //because of a problem with colorpicker + + if (fs.existsSync(path.join(process.cwd(), `ext-${framework}/ux/`))) { + var fromPath = path.join(process.cwd(), `ext-${framework}/ux/`); + var toPath = path.join(output, 'ux'); + fsx.copySync(fromPath, toPath); + log(app, 'Copying (ux) ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')); + } + + if (fs.existsSync(path.join(process.cwd(), `ext-${framework}/packages/`))) { + var fromPath = path.join(process.cwd(), `ext-${framework}/packages/`); + var toPath = path.join(output, 'packages'); + fsx.copySync(fromPath, toPath); + log(app, 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')); + } + + if (fs.existsSync(path.join(process.cwd(), `ext-${framework}/overrides/`))) { + var fromPath = path.join(process.cwd(), `ext-${framework}/overrides/`); + var toPath = path.join(output, 'overrides'); + fsx.copySync(fromPath, toPath); + log(app, 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')); + } + + if (fs.existsSync(path.join(process.cwd(), 'resources/'))) { + var fromResources = path.join(process.cwd(), 'resources/'); + var toResources = path.join(output, '../resources'); + fsx.copySync(fromResources, toResources); + log(app, 'Copying ' + fromResources.replace(process.cwd(), '') + ' to: ' + toResources.replace(process.cwd(), '')); + } + } + + vars.firstTime = false; + var js = ''; + + if (vars.production) { + js = vars.deps.join(';\n'); + } else { + js = 'Ext.require(["Ext.*","Ext.data.TreeStore"])'; + } + + if (vars.manifest === null || js !== vars.manifest) { + vars.manifest = js; + const manifest = path.join(output, 'manifest.js'); + fs.writeFileSync(manifest, js, 'utf8'); + vars.rebuild = true; + var bundleDir = output.replace(process.cwd(), ''); + + if (bundleDir.trim() == '') { + bundleDir = './'; + } + + log(app, 'Building Ext bundle at: ' + bundleDir); + } else { + vars.rebuild = false; + log(app, 'Ext rebuild NOT needed'); + } + } catch (e) { + require('./pluginUtil').logv(options.verbose, e); + + compilation.errors.push('_prepareForBuild: ' + e); + } +} //********** + + +function _buildExtBundle(app, compilation, outputPath, parms, vars, options) { + // try { + var verbose = options.verbose; + + const fs = require('fs'); + + logv(verbose, 'FUNCTION _buildExtBundle'); + let sencha; + + try { + sencha = require('@sencha/cmd'); + } catch (e) { + sencha = 'sencha'; + } + + if (fs.existsSync(sencha)) { + logv(verbose, 'sencha folder exists'); + } else { + logv(verbose, 'sencha folder DOES NOT exist'); + } + + return new Promise((resolve, reject) => { + const onBuildDone = () => { + logv(verbose, 'onBuildDone'); + resolve(); + }; + + var opts = { + cwd: outputPath, + silent: true, + stdio: 'pipe', + encoding: 'utf-8' + }; + + _executeAsync(app, sencha, parms, opts, compilation, vars, options).then(function () { + onBuildDone(); + }, function (reason) { + reject(reason); + }); + }); // } + // catch(e) { + // console.log('e') + // require('./pluginUtil').logv(options.verbose,e) + // compilation.errors.push('_buildExtBundle: ' + e) + // callback() + // } +} //********** + + +function _executeAsync(_x6, _x7, _x8, _x9, _x10, _x11, _x12) { + return _executeAsync2.apply(this, arguments); +} //********** + + +function _executeAsync2() { + _executeAsync2 = _asyncToGenerator( + /*#__PURE__*/ + regeneratorRuntime.mark(function _callee2(app, command, parms, opts, compilation, vars, options) { + var verbose, framework, DEFAULT_SUBSTRS, substrings, chalk, crossSpawn; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + // try { + verbose = options.verbose; + framework = options.framework; //const DEFAULT_SUBSTRS = ['[INF] Loading', '[INF] Processing', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Server", "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; + + DEFAULT_SUBSTRS = ["[INF] xServer", '[INF] Loading', '[INF] Append', '[INF] Processing', '[INF] Processing Build', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; + substrings = DEFAULT_SUBSTRS; + chalk = require('chalk'); + crossSpawn = require('cross-spawn'); + logv(verbose, 'FUNCTION _executeAsync'); + _context2.next = 9; + return new Promise((resolve, reject) => { + logv(verbose, `command - ${command}`); + logv(verbose, `parms - ${parms}`); + logv(verbose, `opts - ${JSON.stringify(opts)}`); + let child = crossSpawn(command, parms, opts); + child.on('close', (code, signal) => { + logv(verbose, `on close: ` + code); + + if (code === 0) { + resolve(0); + } else { + compilation.errors.push(new Error(code)); + resolve(0); + } + }); + child.on('error', error => { + logv(verbose, `on error`); + compilation.errors.push(error); + resolve(0); + }); + child.stdout.on('data', data => { + var str = data.toString().replace(/\r?\n|\r/g, " ").trim(); + logv(verbose, `${str}`); + + if (data && data.toString().match(/Fashion waiting for changes\.\.\./)) { + const fs = require('fs'); + + var filename = process.cwd() + vars.touchFile; + + try { + var d = new Date().toLocaleString(); + var data = fs.readFileSync(filename); + fs.writeFileSync(filename, '//' + d, 'utf8'); + logv(app, `touching ${filename}`); + } catch (e) { + logv(app, `NOT touching ${filename}`); + } + + resolve(0); + } else { + if (substrings.some(function (v) { + return data.indexOf(v) >= 0; + })) { + str = str.replace("[INF]", ""); + str = str.replace("[LOG]", ""); + str = str.replace(process.cwd(), '').trim(); + + if (str.includes("[ERR]")) { + compilation.errors.push(app + str.replace(/^\[ERR\] /gi, '')); + str = str.replace("[ERR]", `${chalk.red("[ERR]")}`); + } + + log(app, str); + } + } + }); + child.stderr.on('data', data => { + logv(options, `error on close: ` + data); + var str = data.toString().replace(/\r?\n|\r/g, " ").trim(); + var strJavaOpts = "Picked up _JAVA_OPTIONS"; + var includes = str.includes(strJavaOpts); + + if (!includes) { + console.log(`${app} ${chalk.red("[ERR]")} ${str}`); + } + }); + }); + + case 9: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + return _executeAsync2.apply(this, arguments); +} + +function runScript(scriptPath, callback) { + var childProcess = require('child_process'); // keep track of whether callback has been invoked to prevent multiple invocations + + + var invoked = false; + var process = childProcess.fork(scriptPath); // listen for errors as they may prevent the exit event from firing + + process.on('error', function (err) { + if (invoked) return; + invoked = true; + callback(err); + }); // execute the callback once the process has finished running + + process.on('exit', function (code) { + if (invoked) return; + invoked = true; + var err = code === 0 ? null : new Error('exit code ' + code); + callback(err); + }); +} //********** + + +function _toXtype(str) { + return str.toLowerCase().replace(/_/g, '-'); +} //********** + + +function _getApp() { + var chalk = require('chalk'); + + var prefix = ``; + + const platform = require('os').platform(); + + if (platform == 'darwin') { + prefix = `ℹ 「ext」:`; + } else { + prefix = `i [ext]:`; + } + + return `${chalk.green(prefix)} `; +} //********** + + +function _getVersions(pluginName, frameworkName) { + const path = require('path'); + + const fs = require('fs'); + + var v = {}; + var pluginPath = path.resolve(process.cwd(), 'node_modules/@sencha', pluginName); + var pluginPkg = fs.existsSync(pluginPath + '/package.json') && JSON.parse(fs.readFileSync(pluginPath + '/package.json', 'utf-8')) || {}; + v.pluginVersion = pluginPkg.version; + v._resolved = pluginPkg._resolved; + + if (v._resolved == undefined) { + v.edition = `Commercial`; + } else { + if (-1 == v._resolved.indexOf('community')) { + v.edition = `Commercial`; + } else { + v.edition = `Community`; + } + } + + var webpackPath = path.resolve(process.cwd(), 'node_modules/webpack'); + var webpackPkg = fs.existsSync(webpackPath + '/package.json') && JSON.parse(fs.readFileSync(webpackPath + '/package.json', 'utf-8')) || {}; + v.webpackVersion = webpackPkg.version; + var extPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext'); + var extPkg = fs.existsSync(extPath + '/package.json') && JSON.parse(fs.readFileSync(extPath + '/package.json', 'utf-8')) || {}; + v.extVersion = extPkg.sencha.version; + var cmdPath = path.resolve(process.cwd(), `node_modules/@sencha/cmd`); + var cmdPkg = fs.existsSync(cmdPath + '/package.json') && JSON.parse(fs.readFileSync(cmdPath + '/package.json', 'utf-8')) || {}; + v.cmdVersion = cmdPkg.version_full; + + if (v.cmdVersion == undefined) { + var cmdPath = path.resolve(process.cwd(), `node_modules/@sencha/${pluginName}/node_modules/@sencha/cmd`); + var cmdPkg = fs.existsSync(cmdPath + '/package.json') && JSON.parse(fs.readFileSync(cmdPath + '/package.json', 'utf-8')) || {}; + v.cmdVersion = cmdPkg.version_full; + } + + var frameworkInfo = ''; + + if (frameworkName != undefined && frameworkName != 'extjs') { + var frameworkPath = ''; + + if (frameworkName == 'react') { + frameworkPath = path.resolve(process.cwd(), 'node_modules/react'); + } + + if (frameworkName == 'angular') { + frameworkPath = path.resolve(process.cwd(), 'node_modules/@angular/core'); + } + + var frameworkPkg = fs.existsSync(frameworkPath + '/package.json') && JSON.parse(fs.readFileSync(frameworkPath + '/package.json', 'utf-8')) || {}; + v.frameworkVersion = frameworkPkg.version; + frameworkInfo = ', ' + frameworkName + ' v' + v.frameworkVersion; + } + + return 'ext-webpack-plugin v' + v.pluginVersion + ', Ext JS v' + v.extVersion + ' ' + v.edition + ' Edition, Sencha Cmd v' + v.cmdVersion + ', webpack v' + v.webpackVersion + frameworkInfo; +} //********** + + +function log(app, message) { + var s = app + message; + + require('readline').cursorTo(process.stdout, 0); + + try { + process.stdout.clearLine(); + } catch (e) {} + + process.stdout.write(s); + process.stdout.write('\n'); +} //********** + + +function logh(app, message) { + var h = false; + var s = app + message; + + if (h == true) { + require('readline').cursorTo(process.stdout, 0); + + try { + process.stdout.clearLine(); + } catch (e) {} + + process.stdout.write(s); + process.stdout.write('\n'); + } +} //********** + + +function logv(verbose, s) { + if (verbose == 'yes') { + require('readline').cursorTo(process.stdout, 0); + + try { + process.stdout.clearLine(); + } catch (e) {} + + process.stdout.write(`-verbose: ${s}`); + process.stdout.write('\n'); + } +} + +function _getValidateOptions() { + return { + "type": "object", + "properties": { + "framework": { + "type": ["string"] + }, + "toolkit": { + "type": ["string"] + }, + "theme": { + "type": ["string"] + }, + "emit": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "script": { + "type": ["string"] + }, + "port": { + "type": ["integer"] + }, + "packages": { + "type": ["string", "array"] + }, + "profile": { + "type": ["string"] + }, + "environment": { + "errorMessage": "should be 'development' or 'production' string value", + "type": ["string"] + }, + "treeshake": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "browser": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "watch": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "verbose": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + } + }, + "additionalProperties": false + }; +} + +function _getDefaultOptions() { + return { + framework: 'extjs', + toolkit: 'modern', + theme: 'theme-material', + emit: 'yes', + script: null, + port: 1962, + packages: [], + profile: '', + environment: 'development', + treeshake: 'no', + browser: 'yes', + watch: 'yes', + verbose: 'no' + }; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5VdGlsLmpzIl0sIm5hbWVzIjpbIl9jb25zdHJ1Y3RvciIsImluaXRpYWxPcHRpb25zIiwiZnMiLCJyZXF1aXJlIiwidmFycyIsIm9wdGlvbnMiLCJmcmFtZXdvcmsiLCJ1bmRlZmluZWQiLCJwbHVnaW5FcnJvcnMiLCJwdXNoIiwibyIsInRyZWVzaGFrZSIsInZlcmJvc2UiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJfZ2V0VmFsaWRhdGVPcHRpb25zIiwicmMiLCJleGlzdHNTeW5jIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGVTeW5jIiwiX2dldERlZmF1bHRPcHRpb25zIiwiX2dldERlZmF1bHRWYXJzIiwicGx1Z2luTmFtZSIsImFwcCIsIl9nZXRBcHAiLCJsb2d2IiwiZW52aXJvbm1lbnQiLCJwcm9kdWN0aW9uIiwiYnJvd3NlciIsIndhdGNoIiwibG9nIiwiX2dldFZlcnNpb25zIiwiYnVpbGRzdGVwIiwiX3RvUHJvZCIsImUiLCJ0b1N0cmluZyIsIl90aGlzQ29tcGlsYXRpb24iLCJjb21waWxlciIsImNvbXBpbGF0aW9uIiwic2NyaXB0IiwicnVuU2NyaXB0IiwiZXJyIiwiX2NvbXBpbGF0aW9uIiwiZXh0Q29tcG9uZW50cyIsIl9nZXRBbGxDb21wb25lbnRzIiwiaG9va3MiLCJzdWNjZWVkTW9kdWxlIiwidGFwIiwibW9kdWxlIiwicmVzb3VyY2UiLCJtYXRjaCIsIl9zb3VyY2UiLCJfdmFsdWUiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiZGVwcyIsIl9leHRyYWN0RnJvbVNvdXJjZSIsImZpbmlzaE1vZHVsZXMiLCJtb2R1bGVzIiwiX3dyaXRlRmlsZXNUb1Byb2RGb2xkZXIiLCJodG1sV2VicGFja1BsdWdpbkJlZm9yZUh0bWxHZW5lcmF0aW9uIiwiZGF0YSIsInBhdGgiLCJqc1BhdGgiLCJqb2luIiwiZXh0UGF0aCIsImNzc1BhdGgiLCJhc3NldHMiLCJqcyIsInVuc2hpZnQiLCJjc3MiLCJfYWZ0ZXJDb21waWxlIiwiX2VtaXQiLCJjYWxsYmFjayIsImVtaXQiLCJvdXRwdXRQYXRoIiwiZGV2U2VydmVyIiwiY29udGVudEJhc2UiLCJfcHJlcGFyZUZvckJ1aWxkIiwiY29tbWFuZCIsInJlYnVpbGQiLCJwYXJtcyIsInByb2ZpbGUiLCJ3YXRjaFN0YXJ0ZWQiLCJfYnVpbGRFeHRCdW5kbGUiLCJfZG9uZSIsInN0YXRzIiwiZXJyb3JzIiwibGVuZ3RoIiwiY2hhbGsiLCJjb25zb2xlIiwicmVkIiwicHJvY2VzcyIsImV4aXQiLCJfdG9EZXYiLCJicm93c2VyQ291bnQiLCJ1cmwiLCJwb3J0Iiwib3BuIiwib3V0cHV0IiwicGFja2FnZXMiLCJ0b29sa2l0IiwidGhlbWUiLCJyaW1yYWYiLCJta2RpcnAiLCJmc3giLCJmaXJzdFRpbWUiLCJzeW5jIiwiYnVpbGRYTUwiLCJjcmVhdGVBcHBKc29uIiwiY3JlYXRlV29ya3NwYWNlSnNvbiIsImNyZWF0ZUpTRE9NRW52aXJvbm1lbnQiLCJ3cml0ZUZpbGVTeW5jIiwiY3dkIiwiZnJvbVBhdGgiLCJ0b1BhdGgiLCJjb3B5U3luYyIsInJlcGxhY2UiLCJmcm9tUmVzb3VyY2VzIiwidG9SZXNvdXJjZXMiLCJtYW5pZmVzdCIsImJ1bmRsZURpciIsInRyaW0iLCJzZW5jaGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uQnVpbGREb25lIiwib3B0cyIsInNpbGVudCIsInN0ZGlvIiwiZW5jb2RpbmciLCJfZXhlY3V0ZUFzeW5jIiwidGhlbiIsInJlYXNvbiIsIkRFRkFVTFRfU1VCU1RSUyIsInN1YnN0cmluZ3MiLCJjcm9zc1NwYXduIiwic3RyaW5naWZ5IiwiY2hpbGQiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJFcnJvciIsImVycm9yIiwic3Rkb3V0Iiwic3RyIiwiZmlsZW5hbWUiLCJ0b3VjaEZpbGUiLCJkIiwiRGF0ZSIsInRvTG9jYWxlU3RyaW5nIiwic29tZSIsInYiLCJpbmRleE9mIiwic3RkZXJyIiwic3RySmF2YU9wdHMiLCJzY3JpcHRQYXRoIiwiY2hpbGRQcm9jZXNzIiwiaW52b2tlZCIsImZvcmsiLCJfdG9YdHlwZSIsInByZWZpeCIsInBsYXRmb3JtIiwiZ3JlZW4iLCJmcmFtZXdvcmtOYW1lIiwicGx1Z2luUGF0aCIsInBsdWdpblBrZyIsInBsdWdpblZlcnNpb24iLCJ2ZXJzaW9uIiwiX3Jlc29sdmVkIiwiZWRpdGlvbiIsIndlYnBhY2tQYXRoIiwid2VicGFja1BrZyIsIndlYnBhY2tWZXJzaW9uIiwiZXh0UGtnIiwiZXh0VmVyc2lvbiIsImNtZFBhdGgiLCJjbWRQa2ciLCJjbWRWZXJzaW9uIiwidmVyc2lvbl9mdWxsIiwiZnJhbWV3b3JrSW5mbyIsImZyYW1ld29ya1BhdGgiLCJmcmFtZXdvcmtQa2ciLCJmcmFtZXdvcmtWZXJzaW9uIiwibWVzc2FnZSIsInMiLCJjdXJzb3JUbyIsImNsZWFyTGluZSIsIndyaXRlIiwibG9naCIsImgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDTyxTQUFTQSxZQUFULENBQXNCQyxjQUF0QixFQUFzQztBQUMzQyxRQUFNQyxFQUFFLEdBQUdDLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLE1BQUlDLElBQUksR0FBRyxFQUFYO0FBQ0EsTUFBSUMsT0FBTyxHQUFHLEVBQWQ7O0FBQ0EsTUFBSTtBQUNGLFFBQUlKLGNBQWMsQ0FBQ0ssU0FBZixJQUE0QkMsU0FBaEMsRUFBMkM7QUFDekNILE1BQUFBLElBQUksQ0FBQ0ksWUFBTCxHQUFvQixFQUFwQjtBQUNBSixNQUFBQSxJQUFJLENBQUNJLFlBQUwsQ0FBa0JDLElBQWxCLENBQXVCLHNIQUF2QjtBQUNBLFVBQUlDLENBQUMsR0FBRyxFQUFSO0FBQ0FBLE1BQUFBLENBQUMsQ0FBQ04sSUFBRixHQUFTQSxJQUFUO0FBQ0EsYUFBT00sQ0FBUDtBQUNEOztBQUNELFFBQUlKLFNBQVMsR0FBR0wsY0FBYyxDQUFDSyxTQUEvQjtBQUNBLFFBQUlLLFNBQVMsR0FBR1YsY0FBYyxDQUFDVSxTQUEvQjtBQUNBLFFBQUlDLE9BQU8s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Z0JBQVEsQ0FBQyxRQUFEO0FBRkQsT0F0Q0c7QUEwQ1osaUJBQVc7QUFDVCx3QkFBZ0IsMERBRFA7QUFFVCxnQkFBUSxDQUFDLFFBQUQ7QUFGQztBQTFDQyxLQUZUO0FBaURMLDRCQUF3QjtBQWpEbkIsR0FBUDtBQW1ERDs7QUFHRCxTQUFTTSxrQkFBVCxHQUE4QjtBQUM1QixTQUFPO0FBQ0xkLElBQUFBLFNBQVMsRUFBRSxPQUROO0FBRUwrRixJQUFBQSxPQUFPLEVBQUUsUUFGSjtBQUdMQyxJQUFBQSxLQUFLLEVBQUUsZ0JBSEY7QUFJTDVCLElBQUFBLElBQUksRUFBRSxLQUpEO0FBS0xuQyxJQUFBQSxNQUFNLEVBQUUsSUFMSDtBQU1MMEQsSUFBQUEsSUFBSSxFQUFFLElBTkQ7QUFPTEcsSUFBQUEsUUFBUSxFQUFFLEVBUEw7QUFTTGxCLElBQUFBLE9BQU8sRUFBRSxFQVRKO0FBVUx4RCxJQUFBQSxXQUFXLEVBQUUsYUFWUjtBQVdMZixJQUFBQSxTQUFTLEVBQUUsSUFYTjtBQVlMaUIsSUFBQUEsT0FBTyxFQUFFLEtBWko7QUFhTEMsSUFBQUEsS0FBSyxFQUFFLEtBYkY7QUFjTGpCLElBQUFBLE9BQU8sRUFBRTtBQWRKLEdBQVA7QUFnQkQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyoqKioqKioqKipcbmV4cG9ydCBmdW5jdGlvbiBfY29uc3RydWN0b3IoaW5pdGlhbE9wdGlvbnMpIHtcbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG4gIHZhciB2YXJzID0ge31cbiAgdmFyIG9wdGlvbnMgPSB7fVxuICB0cnkge1xuICAgIGlmIChpbml0aWFsT3B0aW9ucy5mcmFtZXdvcmsgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXJzLnBsdWdpbkVycm9ycyA9IFtdXG4gICAgICB2YXJzLnBsdWdpbkVycm9ycy5wdXNoKCd3ZWJwYWNrIGNvbmZpZzogZnJhbWV3b3JrIHBhcmFtZXRlciBvbiBleHQtd2VicGFjay1wbHVnaW4gaXMgbm90IGRlZmluZWQgLSB2YWx1ZXM6IHJlYWN0LCBhbmd1bGFyLCBleHRqcywgY29tcG9uZW50cycpXG4gICAgICB2YXIgbyA9IHt9XG4gICAgICBvLnZhcnMgPSB2YXJzXG4gICAgICByZXR1cm4gb1xuICAgIH1cbiAgICB2YXIgZnJhbWV3b3JrID0gaW5pdGlhbE9wdGlvbnMuZnJhbWV3b3JrXG4gICAgdmFyIHRyZWVzaGFrZSA9IGluaXRpYWxPcHRpb25zLnRyZWVzaGFrZVxuICAgIHZhciB2ZXJib3NlID0gaW5pdGlhbE9wdGlvbnMudmVyYm9zZVxuXG4gICAgY29uc3QgdmFsaWRhdGVPcHRpb25zID0gcmVxdWlyZSgnc2NoZW1hLXV0aWxzJylcbiAgICB2YWxpZGF0ZU9wdGlvbnMoX2dldFZhbGlkYXRlT3B0aW9ucygpLCBpbml0aWFsT3B0aW9ucywgJycpXG5cbiAgICBjb25zdCByYyA9IChmcy5leGlzdHNTeW5jKGAuZXh0LSR7ZnJhbWV3b3JrfXJjYCkgJiYgSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoYC5leHQtJHtmcmFtZXdvcmt9cmNgLCAndXRmLTgnKSkgfHwge30pXG4gICAgb3B0aW9ucyA9IHsgLi4uX2dldERlZmF1bHRPcHRpb25zKCksIC4uLmluaXRpYWxPcHRpb25zLCAuLi5yYyB9XG5cbiAgICB2YXJzID0gcmVxdWlyZShgLi8ke2ZyYW1ld29ya31VdGlsYCkuX2dldERlZmF1bHRWYXJzKClcbiAgICB2YXJzLnBsdWdpbk5hbWUgPSAnZXh0LXdlYnBhY2stcGx1Z2luJ1xuICAgIHZhcnMuYXBwID0gX2dldEFwcCgpXG4gICAgdmFyIHBsdWdpbk5hbWUgPSB2YXJzLnBsdWdpbk5hbWVcbiAgICB2YXIgYXBwID0gdmFycy5hcHBcblxuICAgIGxvZ3YodmVyYm9zZSwgJ0ZVTkNUSU9OIF9jb25zdHJ1Y3RvcicpXG4gICAgbG9ndih2ZXJib3NlLCBgcGx1Z2luTmFtZSAtICR7cGx1Z2luTmFtZX1gKVxuICAgIGxvZ3YodmVyYm9zZSwgYGFwcCAtICR7YXBwfWApXG5cbiAgICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudCA9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhcnMucHJvZHVjdGlvbiA9IHRydWVcbiAgICAgIG9wdGlvbnMuYnJvd3NlciA9ICdubydcbiAgICAgIG9wdGlvbnMud2F0Y2ggPSAnbm8nXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFycy5wcm9kdWN0aW9uID0gZmFsc2VcbiAgICB9XG4gICAgXG4gICAgLy9sb2d2KHZlcmJvc2UsIGBvcHRpb25zOmApO2lmICh2ZXJib3NlID09ICd5ZXMnKSB7Y29uc29sZS5kaXIob3B0aW9ucyl9XG4gICAgLy9sb2d2KHZlcmJvc2UsIGB2YXJzOmApO2lmICh2ZXJib3NlID09ICd5ZXMnKSB7Y29uc29sZS5kaXIodmFycyl9XG4gICAgXG4gICAgbG9nKGFwcCwgX2dldFZlcnNpb25zKHBsdWdpbk5hbWUsIGZyYW1ld29yaykpXG5cbiAgICBpZiAoZnJhbWV3b3JrID09ICdyZWFjdCcgfHwgZnJhbWV3b3JrID09ICdleHRqcycpIHtcbiAgICAgIGlmICh2YXJzLnByb2R1Y3Rpb24gPT0gdHJ1ZSkge1xuICAgICAgICB2YXJzLmJ1aWxkc3RlcCA9ICcxIG9mIDEnXG4gICAgICAgIGxvZyhhcHAsICdTdGFydGluZyBQcm9kdWN0aW9uIEJ1aWxkIGZvciAnICsgZnJhbWV3b3JrKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhcnMuYnVpbGRzdGVwID0gJzEgb2YgMSdcbiAgICAgICAgbG9nKGFwcCwgJ1N0YXJ0aW5nIGRldmVsb3BtZW50IGJ1aWxkIGZvciAnICsgZnJhbWV3b3JrKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2YXJzLnByb2R1Y3Rpb24gPT0gdHJ1ZSkge1xuICAgICAgaWYgKHRyZWVzaGFrZSA9PSAneWVzJykge1xuICAgICAgICB2YXJzLmJ1aWxkc3RlcCA9ICcxIG9mIDInXG4gICAgICAgIGxvZyhhcHAsICdTdGFydGluZyBwcm9kdWN0aW9uIGJ1aWxkIGZvciAnICsgZnJhbWV3b3JrICsgJyAtICcgKyB2YXJzLmJ1aWxkc3RlcClcbiAgICAgICAgcmVxdWlyZShgLi8ke2ZyYW1ld29ya31VdGlsYCkuX3RvUHJvZCh2YXJzLCBvcHRpb25zKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhcnMuYnVpbGRzdGVwID0gJzIgb2YgMidcbiAgICAgICAgbG9nKGFwcCwgJ0NvbnRpbnVpbmcgcHJvZHVjdGlvbiBidWlsZCBmb3IgJyArIGZyYW1ld29yayArICcgLSAnICsgdmFycy5idWlsZHN0ZXApXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFycy5idWlsZHN0ZXAgPSAnMSBvZiAxJ1xuICAgICAgbG9nKGFwcCwgJ1N0YXJ0aW5nIGRldmVsb3BtZW50IGJ1aWxkIGZvciAnICsgZnJhbWV3b3JrKVxuICAgIH1cbiAgICBsb2d2KHZlcmJvc2UsICdCdWlsZGluZyBmb3IgJyArIG9wdGlvbnMuZW52aXJvbm1lbnQgKyAnLCAnICsgJ1RyZWVzaGFrZSBpcyAnICsgb3B0aW9ucy50cmVlc2hha2UpXG5cbiAgICB2YXIgbyA9IHt9XG4gICAgby52YXJzID0gdmFyc1xuICAgIG8ub3B0aW9ucyA9IG9wdGlvbnNcbiAgICByZXR1cm4gb1xuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgdGhyb3cgJ19jb25zdHJ1Y3RvcjogJyArIGUudG9TdHJpbmcoKVxuICB9XG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGZ1bmN0aW9uIF90aGlzQ29tcGlsYXRpb24oY29tcGlsZXIsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFwcCA9IHZhcnMuYXBwXG4gICAgdmFyIHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2VcbiAgICBsb2d2KHZlcmJvc2UsICdGVU5DVElPTiBfdGhpc0NvbXBpbGF0aW9uJylcbiAgICBsb2d2KHZlcmJvc2UsIGBvcHRpb25zLnNjcmlwdDogJHtvcHRpb25zLnNjcmlwdCB9YClcbiAgICBsb2d2KHZlcmJvc2UsIGBidWlsZHN0ZXA6ICR7dmFycy5idWlsZHN0ZXB9YClcblxuICAgIGlmICh2YXJzLmJ1aWxkc3RlcCA9PSAnMSBvZiAxJyB8fCB2YXJzLmJ1aWxkc3RlcCA9PSAnMSBvZiAyJykge1xuICAgICAgaWYgKG9wdGlvbnMuc2NyaXB0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChvcHRpb25zLnNjcmlwdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zY3JpcHQgIT0gJycpIHtcbiAgICAgICAgICAgIGxvZyhhcHAsIGBTdGFydGVkIHJ1bm5pbmcgJHtvcHRpb25zLnNjcmlwdH1gKVxuICAgICAgICAgICAgcnVuU2NyaXB0KG9wdGlvbnMuc2NyaXB0LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgIGlmIChlcnIpIHRocm93IGVycjtcbiAgICAgICAgICAgICAgbG9nKGFwcCwgYEZpbmlzaGVkIHJ1bm5pbmcgJHtvcHRpb25zLnNjcmlwdH1gKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYXRjaChlKSB7XG4gICAgdGhyb3cgJ190aGlzQ29tcGlsYXRpb246ICcgKyBlLnRvU3RyaW5nKClcbiAgfVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBmdW5jdGlvbiBfY29tcGlsYXRpb24oY29tcGlsZXIsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFwcCA9IHZhcnMuYXBwXG4gICAgdmFyIHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2VcbiAgICB2YXIgZnJhbWV3b3JrID0gb3B0aW9ucy5mcmFtZXdvcmtcbiAgICBsb2d2KHZlcmJvc2UsICdGVU5DVElPTiBfY29tcGlsYXRpb24nKVxuICAgIFxuICAgIC8vIGlmIChmcmFtZXdvcmsgPT0gJ2V4dGpzJykge1xuICAgIC8vICAgbG9ndih2ZXJib3NlLCAnRlVOQ1RJT04gX2NvbXBpbGF0aW9uIGVuZCAoZXh0anMpJylcbiAgICAvLyAgIHJldHVyblxuICAgIC8vIH1cblxuICAgIGlmIChmcmFtZXdvcmsgIT0gJ2V4dGpzJykge1xuICAgICAgdmFyIGV4dENvbXBvbmVudHMgPSBbXVxuICAgICAgaWYgKHZhcnMuYnVpbGRzdGVwID09ICcxIG9mIDInKSB7XG4gICAgICAgIGV4dENvbXBvbmVudHMgPSByZXF1aXJlKGAuLyR7ZnJhbWV3b3JrfVV0aWxgKS5fZ2V0QWxsQ29tcG9uZW50cyh2YXJzLCBvcHRpb25zKVxuICAgICAgfVxuICAgICAgY29tcGlsYXRpb24uaG9va3Muc3VjY2VlZE1vZHVsZS50YXAoYGV4dC1zdWNjZWVkLW1vZHVsZWAsIG1vZHVsZSA9PiB7XG4gICAgICAgIGlmIChtb2R1bGUucmVzb3VyY2UgJiYgIW1vZHVsZS5yZXNvdXJjZS5tYXRjaCgvbm9kZV9tb2R1bGVzLykpIHtcbiAgICAgICAgICBpZihtb2R1bGUucmVzb3VyY2UubWF0Y2goL1xcLmh0bWwkLykgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYobW9kdWxlLl9zb3VyY2UuX3ZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RvY3R5cGUgaHRtbCcpID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHZhcnMuZGVwcyA9IFtcbiAgICAgICAgICAgICAgICAuLi4odmFycy5kZXBzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAuLi5yZXF1aXJlKGAuLyR7ZnJhbWV3b3JrfVV0aWxgKS5fZXh0cmFjdEZyb21Tb3VyY2UobW9kdWxlLCBvcHRpb25zLCBjb21waWxhdGlvbiwgZXh0Q29tcG9uZW50cyldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFycy5kZXBzID0gW1xuICAgICAgICAgICAgICAuLi4odmFycy5kZXBzIHx8IFtdKSxcbiAgICAgICAgICAgICAgLi4ucmVxdWlyZShgLi8ke2ZyYW1ld29ya31VdGlsYCkuX2V4dHJhY3RGcm9tU291cmNlKG1vZHVsZSwgb3B0aW9ucywgY29tcGlsYXRpb24sIGV4dENvbXBvbmVudHMpXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaWYgKHZhcnMuYnVpbGRzdGVwID09ICcxIG9mIDInKSB7XG4gICAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLmZpbmlzaE1vZHVsZXMudGFwKGBleHQtZmluaXNoLW1vZHVsZXNgLCBtb2R1bGVzID0+IHtcbiAgICAgICAgICByZXF1aXJlKGAuLyR7ZnJhbWV3b3JrfVV0aWxgKS5fd3JpdGVGaWxlc1RvUHJvZEZvbGRlcih2YXJzLCBvcHRpb25zKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHZhcnMuYnVpbGRzdGVwID09ICcxIG9mIDEnIHx8IHZhcnMuYnVpbGRzdGVwID09ICcyIG9mIDInKSB7XG4gICAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLmh0bWxXZWJwYWNrUGx1Z2luQmVmb3JlSHRtbEdlbmVyYXRpb24udGFwKGBleHQtaHRtbC1nZW5lcmF0aW9uYCwoZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbiAgICAgICAgICB2YXIganNQYXRoID0gcGF0aC5qb2luKHZhcnMuZXh0UGF0aCwgJ2V4dC5qcycpXG4gICAgICAgICAgdmFyIGNzc1BhdGggPSBwYXRoLmpvaW4odmFycy5leHRQYXRoLCAnZXh0LmNzcycpXG4gICAgICAgICAgZGF0YS5hc3NldHMuanMudW5zaGlmdChqc1BhdGgpXG4gICAgICAgICAgZGF0YS5hc3NldHMuY3NzLnVuc2hpZnQoY3NzUGF0aClcbiAgICAgICAgICBsb2coYXBwLCBgQWRkaW5nICR7anNQYXRofSBhbmQgJHtjc3NQYXRofSB0byBpbmRleC5odG1sYClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuICBjYXRjaChlKSB7XG4gICAgdGhyb3cgJ19jb21waWxhdGlvbjogJyArIGUudG9TdHJpbmcoKVxuLy8gICAgbG9ndihvcHRpb25zLnZlcmJvc2UsZSlcbi8vICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdfY29tcGlsYXRpb246ICcgKyBlKVxuICB9XG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGZ1bmN0aW9uIF9hZnRlckNvbXBpbGUoY29tcGlsZXIsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFwcCA9IHZhcnMuYXBwXG4gICAgdmFyIHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2VcbiAgICB2YXIgZnJhbWV3b3JrID0gb3B0aW9ucy5mcmFtZXdvcmtcbiAgICBsb2d2KHZlcmJvc2UsICdGVU5DVElPTiBfYWZ0ZXJDb21waWxlJylcbiAgICBpZiAoZnJhbWV3b3JrID09ICdleHRqcycpIHtcbiAgICAgIHJlcXVpcmUoYC4vZXh0anNVdGlsYCkuX2FmdGVyQ29tcGlsZShjb21waWxhdGlvbiwgdmFycywgb3B0aW9ucylcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsb2d2KHZlcmJvc2UsICdGVU5DVElPTiBfYWZ0ZXJDb21waWxlIG5vdCBydW4nKVxuICAgIH1cbiAgfVxuICBjYXRjaChlKSB7XG4gICAgdGhyb3cgJ19hZnRlckNvbXBpbGU6ICcgKyBlLnRvU3RyaW5nKClcbiAgfVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZW1pdChjb21waWxlciwgY29tcGlsYXRpb24sIHZhcnMsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgIHZhciBhcHAgPSB2YXJzLmFwcFxuICAgIHZhciB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gICAgdmFyIGVtaXQgPSBvcHRpb25zLmVtaXRcbiAgICB2YXIgZnJhbWV3b3JrID0gb3B0aW9ucy5mcmFtZXdvcmtcbiAgICBsb2d2KHZlcmJvc2UsJ0ZVTkNUSU9OIF9lbWl0JylcbiAgICBpZiAoZW1pdCA9PSAneWVzJykge1xuICAgICAgaWYgKHZhcnMuYnVpbGRzdGVwID09ICcxIG9mIDEnIHx8IHZhcnMuYnVpbGRzdGVwID09ICcxIG9mIDInKSB7XG4gICAgICAgIGxldCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGNvbXBpbGVyLm91dHB1dFBhdGgsdmFycy5leHRQYXRoKVxuICAgICAgICBpZiAoY29tcGlsZXIub3V0cHV0UGF0aCA9PT0gJy8nICYmIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyKSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IHBhdGguam9pbihjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5jb250ZW50QmFzZSwgb3V0cHV0UGF0aClcbiAgICAgICAgfVxuICAgICAgICBsb2d2KHZlcmJvc2UsJ291dHB1dFBhdGg6ICcgKyBvdXRwdXRQYXRoKVxuICAgICAgICBsb2d2KHZlcmJvc2UsJ2ZyYW1ld29yazogJyArIGZyYW1ld29yaylcbiAgICAgICAgaWYgKGZyYW1ld29yayAhPSAnZXh0anMnKSB7XG4gICAgICAgICAgX3ByZXBhcmVGb3JCdWlsZChhcHAsIHZhcnMsIG9wdGlvbnMsIG91dHB1dFBhdGgsIGNvbXBpbGF0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHZhciBjb21tYW5kID0gJydcbiAgICAgICAgaWYgKG9wdGlvbnMud2F0Y2ggPT0gJ3llcycgJiYgdmFycy5wcm9kdWN0aW9uID09IGZhbHNlKVxuICAgICAgICAgIHtjb21tYW5kID0gJ3dhdGNoJ31cbiAgICAgICAgZWxzZSBcbiAgICAgICAgICB7Y29tbWFuZCA9ICdidWlsZCd9XG4gICAgICAgIGlmICh2YXJzLnJlYnVpbGQgPT0gdHJ1ZSkge1xuICAgICAgICAgIHZhciBwYXJtcyA9IFtdXG4gICAgICAgICAgaWYgKG9wdGlvbnMucHJvZmlsZSA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5wcm9maWxlID09ICcnIHx8IG9wdGlvbnMucHJvZmlsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCA9PSAnYnVpbGQnKVxuICAgICAgICAgICAgICB7IHBhcm1zID0gWydhcHAnLCBjb21tYW5kLCBvcHRpb25zLmVudmlyb25tZW50XSB9XG4gICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICB7IHBhcm1zID0gWydhcHAnLCBjb21tYW5kLCAnLS13ZWItc2VydmVyJywgJ2ZhbHNlJywgb3B0aW9ucy5lbnZpcm9ubWVudF0gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kID09ICdidWlsZCcpIFxuICAgICAgICAgICAgICB7cGFybXMgPSBbJ2FwcCcsIGNvbW1hbmQsIG9wdGlvbnMucHJvZmlsZSwgb3B0aW9ucy5lbnZpcm9ubWVudF19XG4gICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICB7cGFybXMgPSBbJ2FwcCcsIGNvbW1hbmQsICctLXdlYi1zZXJ2ZXInLCAnZmFsc2UnLCBvcHRpb25zLnByb2ZpbGUsIG9wdGlvbnMuZW52aXJvbm1lbnRdfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFycy53YXRjaFN0YXJ0ZWQgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGF3YWl0IF9idWlsZEV4dEJ1bmRsZShhcHAsIGNvbXBpbGF0aW9uLCBvdXRwdXRQYXRoLCBwYXJtcywgdmFycywgb3B0aW9ucylcbiAgICAgICAgICAgIHZhcnMud2F0Y2hTdGFydGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbG9ndih2ZXJib3NlLCdOT1QgcnVubmluZyBlbWl0JylcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxvZ3YodmVyYm9zZSwnZW1pdCBpcyBubycpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG4gIGNhdGNoKGUpIHtcbiAgICBjYWxsYmFjaygpXG4gICAgdGhyb3cgJ19lbWl0OiAnICsgZS50b1N0cmluZygpXG4gICAgLy8gbG9ndihvcHRpb25zLnZlcmJvc2UsZSlcbiAgICAvLyBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX2VtaXQ6ICcgKyBlKVxuICAgIC8vIGNhbGxiYWNrKClcbiAgfVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBmdW5jdGlvbiBfZG9uZShzdGF0cywgdmFycywgb3B0aW9ucykge1xuICB0cnkge1xuICAgIHZhciB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gICAgdmFyIGZyYW1ld29yayA9IG9wdGlvbnMuZnJhbWV3b3JrXG4gICAgbG9ndih2ZXJib3NlLCdGVU5DVElPTiBfZG9uZScpXG4gICAgaWYgKHN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyAmJiBzdGF0cy5jb21waWxhdGlvbi5lcnJvcnMubGVuZ3RoKSAvLyAmJiBwcm9jZXNzLmFyZ3YuaW5kZXhPZignLS13YXRjaCcpID09IC0xKVxuICAgIHtcbiAgICAgIHZhciBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKicpKTtcbiAgICAgIGNvbnNvbGUubG9nKHN0YXRzLmNvbXBpbGF0aW9uLmVycm9yc1swXSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKicpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICAvL21qZyByZWZhY3RvclxuICAgIGlmICh2YXJzLnByb2R1Y3Rpb24gPT0gdHJ1ZSAmJiBvcHRpb25zLnRyZWVzaGFrZSA9PSAnbm8nICYmIGZyYW1ld29yayA9PSAnYW5ndWxhcicpIHtcbiAgICAgIHJlcXVpcmUoYC4vJHtvcHRpb25zLmZyYW1ld29ya31VdGlsYCkuX3RvRGV2KHZhcnMsIG9wdGlvbnMpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZihvcHRpb25zLmJyb3dzZXIgPT0gJ3llcycgJiYgb3B0aW9ucy53YXRjaCA9PSAneWVzJyAmJiB2YXJzLnByb2R1Y3Rpb24gPT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHZhcnMuYnJvd3NlckNvdW50ID09IDApIHtcbiAgICAgICAgICB2YXIgdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6JyArIG9wdGlvbnMucG9ydFxuICAgICAgICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZyh2YXJzLmFwcCwgYE9wZW5pbmcgYnJvd3NlciBhdCAke3VybH1gKVxuICAgICAgICAgIHZhcnMuYnJvd3NlckNvdW50KytcbiAgICAgICAgICBjb25zdCBvcG4gPSByZXF1aXJlKCdvcG4nKVxuICAgICAgICAgIG9wbih1cmwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpXG4gICAgfVxuICAgIGlmICh2YXJzLmJ1aWxkc3RlcCA9PSAnMSBvZiAxJykge1xuICAgICAgaWYgKHZhcnMucHJvZHVjdGlvbiA9PSB0cnVlKSB7XG4gICAgICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZyh2YXJzLmFwcCwgYEVuZGluZyBwcm9kdWN0aW9uIGJ1aWxkYClcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2codmFycy5hcHAsIGBFbmRpbmcgZGV2ZWxvcG1lbnQgYnVpbGRgKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFycy5idWlsZHN0ZXAgPT0gJzIgb2YgMicpIHtcbiAgICAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZyh2YXJzLmFwcCwgYEVuZGluZyBwcm9kdWN0aW9uIGJ1aWxkYClcbiAgICB9XG4gIH1cbiAgY2F0Y2goZSkge1xuLy8gICAgcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndihvcHRpb25zLnZlcmJvc2UsZSlcbiAgICB0aHJvdyAnX2RvbmU6ICcgKyBlLnRvU3RyaW5nKClcbiAgfVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBmdW5jdGlvbiBfcHJlcGFyZUZvckJ1aWxkKGFwcCwgdmFycywgb3B0aW9ucywgb3V0cHV0LCBjb21waWxhdGlvbikge1xuICB0cnkge1xuICAgIHZhciB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gICAgdmFyIHBhY2thZ2VzID0gb3B0aW9ucy5wYWNrYWdlc1xuICAgIHZhciB0b29sa2l0ID0gb3B0aW9ucy50b29sa2l0XG4gICAgdmFyIHRoZW1lID0gb3B0aW9ucy50aGVtZVxuICAgIGxvZ3YodmVyYm9zZSwnRlVOQ1RJT04gX3ByZXBhcmVGb3JCdWlsZCcpXG4gICAgY29uc3QgcmltcmFmID0gcmVxdWlyZSgncmltcmFmJylcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKCdta2RpcnAnKVxuICAgIGNvbnN0IGZzeCA9IHJlcXVpcmUoJ2ZzLWV4dHJhJylcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG4gICAgdGhlbWUgPSB0aGVtZSB8fCAodG9vbGtpdCA9PT0gJ2NsYXNzaWMnID8gJ3RoZW1lLXRyaXRvbicgOiAndGhlbWUtbWF0ZXJpYWwnKVxuICAgIGxvZ3YodmVyYm9zZSwnZmlyc3RUaW1lOiAnICsgdmFycy5maXJzdFRpbWUpXG4gICAgaWYgKHZhcnMuZmlyc3RUaW1lKSB7XG4gICAgICByaW1yYWYuc3luYyhvdXRwdXQpXG4gICAgICBta2RpcnAuc3luYyhvdXRwdXQpXG4gICAgICBjb25zdCBidWlsZFhNTCA9IHJlcXVpcmUoJy4vYXJ0aWZhY3RzJykuYnVpbGRYTUxcbiAgICAgIGNvbnN0IGNyZWF0ZUFwcEpzb24gPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmNyZWF0ZUFwcEpzb25cbiAgICAgIGNvbnN0IGNyZWF0ZVdvcmtzcGFjZUpzb24gPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmNyZWF0ZVdvcmtzcGFjZUpzb25cbiAgICAgIGNvbnN0IGNyZWF0ZUpTRE9NRW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2FydGlmYWN0cycpLmNyZWF0ZUpTRE9NRW52aXJvbm1lbnRcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dCwgJ2J1aWxkLnhtbCcpLCBidWlsZFhNTCh2YXJzLnByb2R1Y3Rpb24sIG9wdGlvbnMsIG91dHB1dCksICd1dGY4JylcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dCwgJ2FwcC5qc29uJyksIGNyZWF0ZUFwcEpzb24odGhlbWUsIHBhY2thZ2VzLCB0b29sa2l0LCBvcHRpb25zLCBvdXRwdXQpLCAndXRmOCcpXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRwdXQsICdqc2RvbS1lbnZpcm9ubWVudC5qcycpLCBjcmVhdGVKU0RPTUVudmlyb25tZW50KG9wdGlvbnMsIG91dHB1dCksICd1dGY4JylcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dCwgJ3dvcmtzcGFjZS5qc29uJyksIGNyZWF0ZVdvcmtzcGFjZUpzb24ob3B0aW9ucywgb3V0cHV0KSwgJ3V0ZjgnKVxuICAgICAgdmFyIGZyYW1ld29yayA9IHZhcnMuZnJhbWV3b3JrO1xuICAgICAgLy9iZWNhdXNlIG9mIGEgcHJvYmxlbSB3aXRoIGNvbG9ycGlja2VyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSxgZXh0LSR7ZnJhbWV3b3JrfS91eC9gKSkpIHtcbiAgICAgICAgdmFyIGZyb21QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGBleHQtJHtmcmFtZXdvcmt9L3V4L2ApXG4gICAgICAgIHZhciB0b1BhdGggPSBwYXRoLmpvaW4ob3V0cHV0LCAndXgnKVxuICAgICAgICBmc3guY29weVN5bmMoZnJvbVBhdGgsIHRvUGF0aClcbiAgICAgICAgbG9nKGFwcCwgJ0NvcHlpbmcgKHV4KSAnICsgZnJvbVBhdGgucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykgKyAnIHRvOiAnICsgdG9QYXRoLnJlcGxhY2UocHJvY2Vzcy5jd2QoKSwgJycpKVxuICAgICAgfVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksYGV4dC0ke2ZyYW1ld29ya30vcGFja2FnZXMvYCkpKSB7XG4gICAgICAgIHZhciBmcm9tUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBgZXh0LSR7ZnJhbWV3b3JrfS9wYWNrYWdlcy9gKVxuICAgICAgICB2YXIgdG9QYXRoID0gcGF0aC5qb2luKG91dHB1dCwgJ3BhY2thZ2VzJylcbiAgICAgICAgZnN4LmNvcHlTeW5jKGZyb21QYXRoLCB0b1BhdGgpXG4gICAgICAgIGxvZyhhcHAsICdDb3B5aW5nICcgKyBmcm9tUGF0aC5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSArICcgdG86ICcgKyB0b1BhdGgucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykpXG4gICAgICB9XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSxgZXh0LSR7ZnJhbWV3b3JrfS9vdmVycmlkZXMvYCkpKSB7XG4gICAgICAgIHZhciBmcm9tUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBgZXh0LSR7ZnJhbWV3b3JrfS9vdmVycmlkZXMvYClcbiAgICAgICAgdmFyIHRvUGF0aCA9IHBhdGguam9pbihvdXRwdXQsICdvdmVycmlkZXMnKVxuICAgICAgICBmc3guY29weVN5bmMoZnJvbVBhdGgsIHRvUGF0aClcbiAgICAgICAgbG9nKGFwcCwgJ0NvcHlpbmcgJyArIGZyb21QYXRoLnJlcGxhY2UocHJvY2Vzcy5jd2QoKSwgJycpICsgJyB0bzogJyArIHRvUGF0aC5yZXBsYWNlKHByb2Nlc3MuY3dkKCksICcnKSlcbiAgICAgIH1cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCdyZXNvdXJjZXMvJykpKSB7XG4gICAgICAgIHZhciBmcm9tUmVzb3VyY2VzID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdyZXNvdXJjZXMvJylcbiAgICAgICAgdmFyIHRvUmVzb3VyY2VzID0gcGF0aC5qb2luKG91dHB1dCwgJy4uL3Jlc291cmNlcycpXG4gICAgICAgIGZzeC5jb3B5U3luYyhmcm9tUmVzb3VyY2VzLCB0b1Jlc291cmNlcylcbiAgICAgICAgbG9nKGFwcCwgJ0NvcHlpbmcgJyArIGZyb21SZXNvdXJjZXMucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykgKyAnIHRvOiAnICsgdG9SZXNvdXJjZXMucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykpXG4gICAgICB9XG4gICAgfVxuICAgIHZhcnMuZmlyc3RUaW1lID0gZmFsc2VcbiAgICB2YXIganMgPSAnJ1xuICAgIGlmICh2YXJzLnByb2R1Y3Rpb24pIHtcbiAgICAgIGpzID0gdmFycy5kZXBzLmpvaW4oJztcXG4nKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBqcyA9ICdFeHQucmVxdWlyZShbXCJFeHQuKlwiLFwiRXh0LmRhdGEuVHJlZVN0b3JlXCJdKSdcbiAgICB9XG4gICAgaWYgKHZhcnMubWFuaWZlc3QgPT09IG51bGwgfHwganMgIT09IHZhcnMubWFuaWZlc3QpIHtcbiAgICAgIHZhcnMubWFuaWZlc3QgPSBqc1xuICAgICAgY29uc3QgbWFuaWZlc3QgPSBwYXRoLmpvaW4ob3V0cHV0LCAnbWFuaWZlc3QuanMnKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYW5pZmVzdCwganMsICd1dGY4JylcbiAgICAgIHZhcnMucmVidWlsZCA9IHRydWVcbiAgICAgIHZhciBidW5kbGVEaXIgPSBvdXRwdXQucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJylcbiAgICAgIGlmIChidW5kbGVEaXIudHJpbSgpID09ICcnKSB7YnVuZGxlRGlyID0gJy4vJ31cbiAgICAgIGxvZyhhcHAsICdCdWlsZGluZyBFeHQgYnVuZGxlIGF0OiAnICsgYnVuZGxlRGlyKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhcnMucmVidWlsZCA9IGZhbHNlXG4gICAgICBsb2coYXBwLCAnRXh0IHJlYnVpbGQgTk9UIG5lZWRlZCcpXG4gICAgfVxuICB9XG4gIGNhdGNoKGUpIHtcbiAgICByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2KG9wdGlvbnMudmVyYm9zZSxlKVxuICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdfcHJlcGFyZUZvckJ1aWxkOiAnICsgZSlcbiAgfVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBmdW5jdGlvbiBfYnVpbGRFeHRCdW5kbGUoYXBwLCBjb21waWxhdGlvbiwgb3V0cHV0UGF0aCwgcGFybXMsIHZhcnMsIG9wdGlvbnMpIHtcbi8vICB0cnkge1xuICAgIHZhciB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG4gICAgbG9ndih2ZXJib3NlLCdGVU5DVElPTiBfYnVpbGRFeHRCdW5kbGUnKVxuICAgIGxldCBzZW5jaGE7IHRyeSB7IHNlbmNoYSA9IHJlcXVpcmUoJ0BzZW5jaGEvY21kJykgfSBjYXRjaCAoZSkgeyBzZW5jaGEgPSAnc2VuY2hhJyB9XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2VuY2hhKSkge1xuICAgICAgbG9ndih2ZXJib3NlLCdzZW5jaGEgZm9sZGVyIGV4aXN0cycpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbG9ndih2ZXJib3NlLCdzZW5jaGEgZm9sZGVyIERPRVMgTk9UIGV4aXN0JylcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9uQnVpbGREb25lID0gKCkgPT4ge1xuICAgICAgICBsb2d2KHZlcmJvc2UsJ29uQnVpbGREb25lJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgICB2YXIgb3B0cyA9IHsgY3dkOiBvdXRwdXRQYXRoLCBzaWxlbnQ6IHRydWUsIHN0ZGlvOiAncGlwZScsIGVuY29kaW5nOiAndXRmLTgnfVxuICAgICAgX2V4ZWN1dGVBc3luYyhhcHAsIHNlbmNoYSwgcGFybXMsIG9wdHMsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKS50aGVuIChcbiAgICAgICAgZnVuY3Rpb24oKSB7IG9uQnVpbGREb25lKCkgfSwgXG4gICAgICAgIGZ1bmN0aW9uKHJlYXNvbikgeyByZWplY3QocmVhc29uKSB9XG4gICAgICApXG4gICAgfSlcbiAgLy8gfVxuICAvLyBjYXRjaChlKSB7XG4gIC8vICAgY29uc29sZS5sb2coJ2UnKVxuICAvLyAgIHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3Yob3B0aW9ucy52ZXJib3NlLGUpXG4gIC8vICAgY29tcGlsYXRpb24uZXJyb3JzLnB1c2goJ19idWlsZEV4dEJ1bmRsZTogJyArIGUpXG4gIC8vICAgY2FsbGJhY2soKVxuICAvLyB9XG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9leGVjdXRlQXN5bmMgKGFwcCwgY29tbWFuZCwgcGFybXMsIG9wdHMsIGNvbXBpbGF0aW9uLCB2YXJzLCBvcHRpb25zKSB7XG4vLyAgdHJ5IHtcbiAgICB2YXIgdmVyYm9zZSA9IG9wdGlvbnMudmVyYm9zZVxuICAgIHZhciBmcmFtZXdvcmsgPSBvcHRpb25zLmZyYW1ld29ya1xuICAgIC8vY29uc3QgREVGQVVMVF9TVUJTVFJTID0gWydbSU5GXSBMb2FkaW5nJywgJ1tJTkZdIFByb2Nlc3NpbmcnLCAnW0xPR10gRmFzaGlvbiBidWlsZCBjb21wbGV0ZScsICdbRVJSXScsICdbV1JOXScsIFwiW0lORl0gU2VydmVyXCIsIFwiW0lORl0gV3JpdGluZ1wiLCBcIltJTkZdIExvYWRpbmcgQnVpbGRcIiwgXCJbSU5GXSBXYWl0aW5nXCIsIFwiW0xPR10gRmFzaGlvbiB3YWl0aW5nXCJdO1xuICAgIGNvbnN0IERFRkFVTFRfU1VCU1RSUyA9IFtcIltJTkZdIHhTZXJ2ZXJcIiwgJ1tJTkZdIExvYWRpbmcnLCAnW0lORl0gQXBwZW5kJywgJ1tJTkZdIFByb2Nlc3NpbmcnLCAnW0lORl0gUHJvY2Vzc2luZyBCdWlsZCcsICdbTE9HXSBGYXNoaW9uIGJ1aWxkIGNvbXBsZXRlJywgJ1tFUlJdJywgJ1tXUk5dJywgXCJbSU5GXSBXcml0aW5nXCIsIFwiW0lORl0gTG9hZGluZyBCdWlsZFwiLCBcIltJTkZdIFdhaXRpbmdcIiwgXCJbTE9HXSBGYXNoaW9uIHdhaXRpbmdcIl07XG4gICAgdmFyIHN1YnN0cmluZ3MgPSBERUZBVUxUX1NVQlNUUlMgXG4gICAgdmFyIGNoYWxrID0gcmVxdWlyZSgnY2hhbGsnKVxuICAgIGNvbnN0IGNyb3NzU3Bhd24gPSByZXF1aXJlKCdjcm9zcy1zcGF3bicpXG4gICAgbG9ndih2ZXJib3NlLCAnRlVOQ1RJT04gX2V4ZWN1dGVBc3luYycpXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbG9ndih2ZXJib3NlLGBjb21tYW5kIC0gJHtjb21tYW5kfWApXG4gICAgICBsb2d2KHZlcmJvc2UsIGBwYXJtcyAtICR7cGFybXN9YClcbiAgICAgIGxvZ3YodmVyYm9zZSwgYG9wdHMgLSAke0pTT04uc3RyaW5naWZ5KG9wdHMpfWApXG4gICAgICBsZXQgY2hpbGQgPSBjcm9zc1NwYXduKGNvbW1hbmQsIHBhcm1zLCBvcHRzKVxuICAgICAgY2hpbGQub24oJ2Nsb3NlJywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBsb2d2KHZlcmJvc2UsIGBvbiBjbG9zZTogYCArIGNvZGUpIFxuICAgICAgICBpZihjb2RlID09PSAwKSB7IHJlc29sdmUoMCkgfVxuICAgICAgICBlbHNlIHsgY29tcGlsYXRpb24uZXJyb3JzLnB1c2goIG5ldyBFcnJvcihjb2RlKSApOyByZXNvbHZlKDApIH1cbiAgICAgIH0pXG4gICAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyb3IpID0+IHsgXG4gICAgICAgIGxvZ3YodmVyYm9zZSwgYG9uIGVycm9yYCkgXG4gICAgICAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICByZXNvbHZlKDApXG4gICAgICB9KVxuICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgdmFyIHN0ciA9IGRhdGEudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCBcIiBcIikudHJpbSgpXG4gICAgICAgIGxvZ3YodmVyYm9zZSwgYCR7c3RyfWApXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEudG9TdHJpbmcoKS5tYXRjaCgvRmFzaGlvbiB3YWl0aW5nIGZvciBjaGFuZ2VzXFwuXFwuXFwuLykpIHtcblxuICAgICAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBwcm9jZXNzLmN3ZCgpICsgdmFycy50b3VjaEZpbGU7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSk7XG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVuYW1lLCAnLy8nICsgZCwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGxvZ3YoYXBwLCBgdG91Y2hpbmcgJHtmaWxlbmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICAgICAgbG9ndihhcHAsIGBOT1QgdG91Y2hpbmcgJHtmaWxlbmFtZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKDApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHN1YnN0cmluZ3Muc29tZShmdW5jdGlvbih2KSB7IHJldHVybiBkYXRhLmluZGV4T2YodikgPj0gMDsgfSkpIHsgXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIltJTkZdXCIsIFwiXCIpXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIltMT0ddXCIsIFwiXCIpXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShwcm9jZXNzLmN3ZCgpLCAnJykudHJpbSgpXG4gICAgICAgICAgICBpZiAoc3RyLmluY2x1ZGVzKFwiW0VSUl1cIikpIHtcbiAgICAgICAgICAgICAgY29tcGlsYXRpb24uZXJyb3JzLnB1c2goYXBwICsgc3RyLnJlcGxhY2UoL15cXFtFUlJcXF0gL2dpLCAnJykpO1xuICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIltFUlJdXCIsIGAke2NoYWxrLnJlZChcIltFUlJdXCIpfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2coYXBwLCBzdHIpIFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIGxvZ3Yob3B0aW9ucywgYGVycm9yIG9uIGNsb3NlOiBgICsgZGF0YSkgXG4gICAgICAgIHZhciBzdHIgPSBkYXRhLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgXCIgXCIpLnRyaW0oKVxuICAgICAgICB2YXIgc3RySmF2YU9wdHMgPSBcIlBpY2tlZCB1cCBfSkFWQV9PUFRJT05TXCI7XG4gICAgICAgIHZhciBpbmNsdWRlcyA9IHN0ci5pbmNsdWRlcyhzdHJKYXZhT3B0cylcbiAgICAgICAgaWYgKCFpbmNsdWRlcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAke2FwcH0gJHtjaGFsay5yZWQoXCJbRVJSXVwiKX0gJHtzdHJ9YClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICAvLyB9XG4gIC8vIGNhdGNoKGUpIHtcbiAgLy8gICBsb2d2KG9wdGlvbnMsZSlcbiAgLy8gICBjb21waWxhdGlvbi5lcnJvcnMucHVzaCgnX2V4ZWN1dGVBc3luYzogJyArIGUpXG4gIC8vICAgY2FsbGJhY2soKVxuICAvLyB9IFxufVxuXG4vLyoqKioqKioqKipcbmZ1bmN0aW9uIHJ1blNjcmlwdChzY3JpcHRQYXRoLCBjYWxsYmFjaykge1xuICB2YXIgY2hpbGRQcm9jZXNzID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuICAvLyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgY2FsbGJhY2sgaGFzIGJlZW4gaW52b2tlZCB0byBwcmV2ZW50IG11bHRpcGxlIGludm9jYXRpb25zXG4gIHZhciBpbnZva2VkID0gZmFsc2U7XG4gIHZhciBwcm9jZXNzID0gY2hpbGRQcm9jZXNzLmZvcmsoc2NyaXB0UGF0aCk7XG4gIC8vIGxpc3RlbiBmb3IgZXJyb3JzIGFzIHRoZXkgbWF5IHByZXZlbnQgdGhlIGV4aXQgZXZlbnQgZnJvbSBmaXJpbmdcbiAgcHJvY2Vzcy5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGludm9rZWQpIHJldHVybjtcbiAgICBpbnZva2VkID0gdHJ1ZTtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9KTtcbiAgLy8gZXhlY3V0ZSB0aGUgY2FsbGJhY2sgb25jZSB0aGUgcHJvY2VzcyBoYXMgZmluaXNoZWQgcnVubmluZ1xuICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHtcbiAgICBpZiAoaW52b2tlZCkgcmV0dXJuO1xuICAgIGludm9rZWQgPSB0cnVlO1xuICAgIHZhciBlcnIgPSBjb2RlID09PSAwID8gbnVsbCA6IG5ldyBFcnJvcignZXhpdCBjb2RlICcgKyBjb2RlKTtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9KTtcbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gX3RvWHR5cGUoc3RyKSB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csICctJylcbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gX2dldEFwcCgpIHtcbiAgdmFyIGNoYWxrID0gcmVxdWlyZSgnY2hhbGsnKVxuICB2YXIgcHJlZml4ID0gYGBcbiAgY29uc3QgcGxhdGZvcm0gPSByZXF1aXJlKCdvcycpLnBsYXRmb3JtKClcbiAgaWYgKHBsYXRmb3JtID09ICdkYXJ3aW4nKSB7IHByZWZpeCA9IGDihLkg772iZXh0772jOmAgfVxuICBlbHNlIHsgcHJlZml4ID0gYGkgW2V4dF06YCB9XG4gIHJldHVybiBgJHtjaGFsay5ncmVlbihwcmVmaXgpfSBgXG59XG5cbi8vKioqKioqKioqKlxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRWZXJzaW9ucyhwbHVnaW5OYW1lLCBmcmFtZXdvcmtOYW1lKSB7XG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG4gIHZhciB2ID0ge31cbiAgdmFyIHBsdWdpblBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwnbm9kZV9tb2R1bGVzL0BzZW5jaGEnLCBwbHVnaW5OYW1lKVxuICB2YXIgcGx1Z2luUGtnID0gKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCsnL3BhY2thZ2UuanNvbicpICYmIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBsdWdpblBhdGgrJy9wYWNrYWdlLmpzb24nLCAndXRmLTgnKSkgfHwge30pO1xuICB2LnBsdWdpblZlcnNpb24gPSBwbHVnaW5Qa2cudmVyc2lvblxuICB2Ll9yZXNvbHZlZCA9IHBsdWdpblBrZy5fcmVzb2x2ZWRcbiAgaWYgKHYuX3Jlc29sdmVkID09IHVuZGVmaW5lZCkge1xuICAgIHYuZWRpdGlvbiA9IGBDb21tZXJjaWFsYFxuICB9XG4gIGVsc2Uge1xuICAgIGlmICgtMSA9PSB2Ll9yZXNvbHZlZC5pbmRleE9mKCdjb21tdW5pdHknKSkge1xuICAgICAgdi5lZGl0aW9uID0gYENvbW1lcmNpYWxgXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdi5lZGl0aW9uID0gYENvbW11bml0eWBcbiAgICB9XG4gIH1cbiAgdmFyIHdlYnBhY2tQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksJ25vZGVfbW9kdWxlcy93ZWJwYWNrJylcbiAgdmFyIHdlYnBhY2tQa2cgPSAoZnMuZXhpc3RzU3luYyh3ZWJwYWNrUGF0aCsnL3BhY2thZ2UuanNvbicpICYmIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHdlYnBhY2tQYXRoKycvcGFja2FnZS5qc29uJywgJ3V0Zi04JykpIHx8IHt9KTtcbiAgdi53ZWJwYWNrVmVyc2lvbiA9IHdlYnBhY2tQa2cudmVyc2lvblxuICB2YXIgZXh0UGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCdub2RlX21vZHVsZXMvQHNlbmNoYS9leHQnKVxuICB2YXIgZXh0UGtnID0gKGZzLmV4aXN0c1N5bmMoZXh0UGF0aCsnL3BhY2thZ2UuanNvbicpICYmIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGV4dFBhdGgrJy9wYWNrYWdlLmpzb24nLCAndXRmLTgnKSkgfHwge30pO1xuICB2LmV4dFZlcnNpb24gPSBleHRQa2cuc2VuY2hhLnZlcnNpb25cbiAgdmFyIGNtZFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSxgbm9kZV9tb2R1bGVzL0BzZW5jaGEvY21kYClcbiAgdmFyIGNtZFBrZyA9IChmcy5leGlzdHNTeW5jKGNtZFBhdGgrJy9wYWNrYWdlLmpzb24nKSAmJiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjbWRQYXRoKycvcGFja2FnZS5qc29uJywgJ3V0Zi04JykpIHx8IHt9KTtcbiAgdi5jbWRWZXJzaW9uID0gY21kUGtnLnZlcnNpb25fZnVsbFxuICBpZiAodi5jbWRWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjbWRQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksYG5vZGVfbW9kdWxlcy9Ac2VuY2hhLyR7cGx1Z2luTmFtZX0vbm9kZV9tb2R1bGVzL0BzZW5jaGEvY21kYClcbiAgICB2YXIgY21kUGtnID0gKGZzLmV4aXN0c1N5bmMoY21kUGF0aCsnL3BhY2thZ2UuanNvbicpICYmIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNtZFBhdGgrJy9wYWNrYWdlLmpzb24nLCAndXRmLTgnKSkgfHwge30pO1xuICAgIHYuY21kVmVyc2lvbiA9IGNtZFBrZy52ZXJzaW9uX2Z1bGxcbiAgfVxuICB2YXIgZnJhbWV3b3JrSW5mbyA9ICcnXG4gICBpZiAoZnJhbWV3b3JrTmFtZSAhPSB1bmRlZmluZWQgJiYgZnJhbWV3b3JrTmFtZSAhPSAnZXh0anMnKSB7XG4gICAgdmFyIGZyYW1ld29ya1BhdGggPSAnJ1xuICAgIGlmIChmcmFtZXdvcmtOYW1lID09ICdyZWFjdCcpIHtcbiAgICAgIGZyYW1ld29ya1BhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwnbm9kZV9tb2R1bGVzL3JlYWN0JylcbiAgICB9XG4gICAgaWYgKGZyYW1ld29ya05hbWUgPT0gJ2FuZ3VsYXInKSB7XG4gICAgICBmcmFtZXdvcmtQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksJ25vZGVfbW9kdWxlcy9AYW5ndWxhci9jb3JlJylcbiAgICB9XG4gICAgdmFyIGZyYW1ld29ya1BrZyA9IChmcy5leGlzdHNTeW5jKGZyYW1ld29ya1BhdGgrJy9wYWNrYWdlLmpzb24nKSAmJiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmcmFtZXdvcmtQYXRoKycvcGFja2FnZS5qc29uJywgJ3V0Zi04JykpIHx8IHt9KTtcbiAgICB2LmZyYW1ld29ya1ZlcnNpb24gPSBmcmFtZXdvcmtQa2cudmVyc2lvblxuICAgIGZyYW1ld29ya0luZm8gPSAnLCAnICsgZnJhbWV3b3JrTmFtZSArICcgdicgKyB2LmZyYW1ld29ya1ZlcnNpb25cbiAgfVxuICByZXR1cm4gJ2V4dC13ZWJwYWNrLXBsdWdpbiB2JyArIHYucGx1Z2luVmVyc2lvbiArICcsIEV4dCBKUyB2JyArIHYuZXh0VmVyc2lvbiArICcgJyArIHYuZWRpdGlvbiArICcgRWRpdGlvbiwgU2VuY2hhIENtZCB2JyArIHYuY21kVmVyc2lvbiArICcsIHdlYnBhY2sgdicgKyB2LndlYnBhY2tWZXJzaW9uICsgZnJhbWV3b3JrSW5mb1xuIH1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gbG9nKGFwcCxtZXNzYWdlKSB7XG4gIHZhciBzID0gYXBwICsgbWVzc2FnZSBcbiAgcmVxdWlyZSgncmVhZGxpbmUnKS5jdXJzb3JUbyhwcm9jZXNzLnN0ZG91dCwgMClcbiAgdHJ5IHtwcm9jZXNzLnN0ZG91dC5jbGVhckxpbmUoKX1jYXRjaChlKSB7fVxuICBwcm9jZXNzLnN0ZG91dC53cml0ZShzKTtwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJylcbn1cblxuLy8qKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gbG9naChhcHAsbWVzc2FnZSkge1xuICB2YXIgaCA9IGZhbHNlXG4gIHZhciBzID0gYXBwICsgbWVzc2FnZSBcbiAgaWYgKGggPT0gdHJ1ZSkge1xuICAgIHJlcXVpcmUoJ3JlYWRsaW5lJykuY3Vyc29yVG8ocHJvY2Vzcy5zdGRvdXQsIDApXG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgpXG4gICAgfVxuICAgIGNhdGNoKGUpIHt9XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocylcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJylcbiAgfVxufVxuXG4vLyoqKioqKioqKipcbmV4cG9ydCBmdW5jdGlvbiBsb2d2KHZlcmJvc2UsIHMpIHtcbiAgaWYgKHZlcmJvc2UgPT0gJ3llcycpIHtcbiAgICByZXF1aXJlKCdyZWFkbGluZScpLmN1cnNvclRvKHByb2Nlc3Muc3Rkb3V0LCAwKVxuICAgIHRyeSB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC5jbGVhckxpbmUoKVxuICAgIH1cbiAgICBjYXRjaChlKSB7fVxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAtdmVyYm9zZTogJHtzfWApXG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpXG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldFZhbGlkYXRlT3B0aW9ucygpIHtcbiAgcmV0dXJuIHtcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgXCJmcmFtZXdvcmtcIjoge1xuICAgICAgICBcInR5cGVcIjogW1wic3RyaW5nXCJdXG4gICAgICB9LFxuICAgICAgXCJ0b29sa2l0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiXVxuICAgICAgfSxcbiAgICAgIFwidGhlbWVcIjoge1xuICAgICAgICBcInR5cGVcIjogW1wic3RyaW5nXCJdXG4gICAgICB9LFxuICAgICAgXCJlbWl0XCI6IHtcbiAgICAgICAgXCJlcnJvck1lc3NhZ2VcIjogXCJzaG91bGQgYmUgJ3llcycgb3IgJ25vJyBzdHJpbmcgdmFsdWUgKE5PVCB0cnVlIG9yIGZhbHNlKVwiLFxuICAgICAgICBcInR5cGVcIjogW1wic3RyaW5nXCJdXG4gICAgICB9LFxuICAgICAgXCJzY3JpcHRcIjoge1xuICAgICAgICBcInR5cGVcIjogW1wic3RyaW5nXCJdXG4gICAgICB9LFxuICAgICAgXCJwb3J0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFtcImludGVnZXJcIl1cbiAgICAgIH0sXG4gICAgICBcInBhY2thZ2VzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiLCBcImFycmF5XCJdXG4gICAgICB9LFxuICAgICAgXCJwcm9maWxlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiXVxuICAgICAgfSxcbiAgICAgIFwiZW52aXJvbm1lbnRcIjoge1xuICAgICAgICBcImVycm9yTWVzc2FnZVwiOiBcInNob3VsZCBiZSAnZGV2ZWxvcG1lbnQnIG9yICdwcm9kdWN0aW9uJyBzdHJpbmcgdmFsdWVcIixcbiAgICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiXVxuICAgICAgfSxcbiAgICAgIFwidHJlZXNoYWtlXCI6IHtcbiAgICAgICAgXCJlcnJvck1lc3NhZ2VcIjogXCJzaG91bGQgYmUgJ3llcycgb3IgJ25vJyBzdHJpbmcgdmFsdWUgKE5PVCB0cnVlIG9yIGZhbHNlKVwiLFxuICAgICAgICBcInR5cGVcIjogW1wic3RyaW5nXCJdXG4gICAgICB9LFxuICAgICAgXCJicm93c2VyXCI6IHtcbiAgICAgICAgXCJlcnJvck1lc3NhZ2VcIjogXCJzaG91bGQgYmUgJ3llcycgb3IgJ25vJyBzdHJpbmcgdmFsdWUgKE5PVCB0cnVlIG9yIGZhbHNlKVwiLFxuICAgICAgICBcInR5cGVcIjogW1wic3RyaW5nXCJdXG4gICAgICB9LFxuICAgICAgXCJ3YXRjaFwiOiB7XG4gICAgICAgIFwiZXJyb3JNZXNzYWdlXCI6IFwic2hvdWxkIGJlICd5ZXMnIG9yICdubycgc3RyaW5nIHZhbHVlIChOT1QgdHJ1ZSBvciBmYWxzZSlcIixcbiAgICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiXVxuICAgICAgfSxcbiAgICAgIFwidmVyYm9zZVwiOiB7XG4gICAgICAgIFwiZXJyb3JNZXNzYWdlXCI6IFwic2hvdWxkIGJlICd5ZXMnIG9yICdubycgc3RyaW5nIHZhbHVlIChOT1QgdHJ1ZSBvciBmYWxzZSlcIixcbiAgICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiXVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIHtcbiAgICBmcmFtZXdvcms6ICdleHRqcycsXG4gICAgdG9vbGtpdDogJ21vZGVybicsXG4gICAgdGhlbWU6ICd0aGVtZS1tYXRlcmlhbCcsXG4gICAgZW1pdDogJ3llcycsXG4gICAgc2NyaXB0OiBudWxsLFxuICAgIHBvcnQ6IDE5NjIsXG4gICAgcGFja2FnZXM6IFtdLFxuXG4gICAgcHJvZmlsZTogJycsIFxuICAgIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnLCBcbiAgICB0cmVlc2hha2U6ICdubycsXG4gICAgYnJvd3NlcjogJ3llcycsXG4gICAgd2F0Y2g6ICd5ZXMnLFxuICAgIHZlcmJvc2U6ICdubydcbiAgfVxufVxuXG5cbiJdfQ== \ No newline at end of file diff --git a/packages/ext-webpack-plugin/dist/reactUtil.js b/packages/ext-webpack-plugin/dist/reactUtil.js new file mode 100644 index 0000000..3685a52 --- /dev/null +++ b/packages/ext-webpack-plugin/dist/reactUtil.js @@ -0,0 +1,111 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports._getDefaultVars = _getDefaultVars; +exports._extractFromSource = _extractFromSource; + +function _getDefaultVars() { + return { + touchFile: '/src/themer.js', + watchStarted: false, + buildstep: '1 of 1', + firstTime: true, + firstCompile: true, + browserCount: 0, + manifest: null, + extPath: 'ext', + pluginErrors: [], + deps: [], + usedExtComponents: [], + rebuild: true + }; +} + +function _extractFromSource(module, options, compilation, extComponents) { + const logv = require('./pluginUtil').logv; + + logv(options.verbose, 'FUNCTION _extractFromSource'); // try { + + var js = module._source._value; + logv(options.verbose, 'FUNCTION extractFromSource'); + + var generate = require("@babel/generator").default; + + var parse = require("babylon").parse; + + var traverse = require("ast-traverse"); + + const statements = []; + const ast = parse(js, { + plugins: ['jsx', 'flow', 'doExpressions', 'objectRestSpread', 'classProperties', 'exportExtensions', 'asyncGenerators', 'functionBind', 'functionSent', 'dynamicImport'], + sourceType: 'module' + }); + + function addType(argNode) { + var type; + + if (argNode.type === 'StringLiteral') { + var xtype = require('./pluginUtil')._toXtype(argNode.value); + + if (xtype != 'extreact') { + type = { + xtype: require('./pluginUtil')._toXtype(argNode.value) + }; + } + } else { + type = { + xclass: js.slice(argNode.start, argNode.end) + }; + } + + if (type != undefined) { + let config = JSON.stringify(type); + statements.push(`Ext.create(${config})`); + } + } + + traverse(ast, { + pre: function (node) { + if (node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name === 'Ext') { + statements.push(generate(node).code); + } + + if (node.type == 'VariableDeclarator' && node.init && node.init.type === 'CallExpression' && node.init.callee) { + if (node.init.callee.name == 'reactify') { + for (let i = 0; i < node.init.arguments.length; i++) { + const valueNode = node.init.arguments[i]; + if (!valueNode) continue; + addType(valueNode); + } + } + } // // Convert React.createElement(...) calls to the equivalent Ext.create(...) calls to put in the manifest. + // if (node.type === 'CallExpressionx' + // && node.callee.object + // && node.callee.object.name === 'React' + // && node.callee.property.name === 'createElement') { + // const [props] = node.arguments + // let config + // if (Array.isArray(props.properties)) { + // config = generate(props).code + // for (let key in type) { + // config = `{\n ${key}: '${type[key]}',${config.slice(1)}` + // } + // } else { + // config = JSON.stringify(type) + // } + // } + + } + }); + return statements; // } + // catch(e) { + // console.log(module.resource) + // console.log(js) + // console.log(e) + // compilation.errors.push('extractFromSource: ' + e) + // return [] + // } +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWFjdFV0aWwuanMiXSwibmFtZXMiOlsiX2dldERlZmF1bHRWYXJzIiwidG91Y2hGaWxlIiwid2F0Y2hTdGFydGVkIiwiYnVpbGRzdGVwIiwiZmlyc3RUaW1lIiwiZmlyc3RDb21waWxlIiwiYnJvd3NlckNvdW50IiwibWFuaWZlc3QiLCJleHRQYXRoIiwicGx1Z2luRXJyb3JzIiwiZGVwcyIsInVzZWRFeHRDb21wb25lbnRzIiwicmVidWlsZCIsIl9leHRyYWN0RnJvbVNvdXJjZSIsIm1vZHVsZSIsIm9wdGlvbnMiLCJjb21waWxhdGlvbiIsImV4dENvbXBvbmVudHMiLCJsb2d2IiwicmVxdWlyZSIsInZlcmJvc2UiLCJqcyIsIl9zb3VyY2UiLCJfdmFsdWUiLCJnZW5lcmF0ZSIsImRlZmF1bHQiLCJwYXJzZSIsInRyYXZlcnNlIiwic3RhdGVtZW50cyIsImFzdCIsInBsdWdpbnMiLCJzb3VyY2VUeXBlIiwiYWRkVHlwZSIsImFyZ05vZGUiLCJ0eXBlIiwieHR5cGUiLCJfdG9YdHlwZSIsInZhbHVlIiwieGNsYXNzIiwic2xpY2UiLCJzdGFydCIsImVuZCIsInVuZGVmaW5lZCIsImNvbmZpZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJwdXNoIiwicHJlIiwibm9kZSIsImNhbGxlZSIsIm9iamVjdCIsIm5hbWUiLCJjb2RlIiwiaW5pdCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ2YWx1ZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVPLFNBQVNBLGVBQVQsR0FBMkI7QUFDaEMsU0FBTztBQUNMQyxJQUFBQSxTQUFTLEVBQUUsZ0JBRE47QUFFTEMsSUFBQUEsWUFBWSxFQUFHLEtBRlY7QUFHTEMsSUFBQUEsU0FBUyxFQUFFLFFBSE47QUFJTEMsSUFBQUEsU0FBUyxFQUFHLElBSlA7QUFLTEMsSUFBQUEsWUFBWSxFQUFFLElBTFQ7QUFNTEMsSUFBQUEsWUFBWSxFQUFHLENBTlY7QUFPTEMsSUFBQUEsUUFBUSxFQUFFLElBUEw7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LFVBQUlKLElBQUksQ0FBQ2QsSUFBTCxJQUFhLG9CQUFiLElBQ0djLElBQUksQ0FBQ0ssSUFEUixJQUVHTCxJQUFJLENBQUNLLElBQUwsQ0FBVW5CLElBQVYsS0FBbUIsZ0JBRnRCLElBR0djLElBQUksQ0FBQ0ssSUFBTCxDQUFVSixNQUhqQixFQUlFO0FBQ0EsWUFBSUQsSUFBSSxDQUFDSyxJQUFMLENBQVVKLE1BQVYsQ0FBaUJFLElBQWpCLElBQXlCLFVBQTdCLEVBQXlDO0FBQ3ZDLGVBQUssSUFBSUcsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR04sSUFBSSxDQUFDSyxJQUFMLENBQVVFLFNBQVYsQ0FBb0JDLE1BQXhDLEVBQWdERixDQUFDLEVBQWpELEVBQXFEO0FBQ25ELGtCQUFNRyxTQUFTLEdBQUdULElBQUksQ0FBQ0ssSUFBTCxDQUFVRSxTQUFWLENBQW9CRCxDQUFwQixDQUFsQjtBQUNBLGdCQUFJLENBQUNHLFNBQUwsRUFBZ0I7QUFDaEJ6QixZQUFBQSxPQUFPLENBQUN5QixTQUFELENBQVA7QUFDRDtBQUNGO0FBQ0YsT0FwQmlCLENBc0JsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDRDtBQXZDVyxHQUFOLENBQVI7QUF5Q0EsU0FBTzdCLFVBQVAsQ0FwRjRFLENBcUY5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIlxuXG5leHBvcnQgZnVuY3Rpb24gX2dldERlZmF1bHRWYXJzKCkge1xuICByZXR1cm4ge1xuICAgIHRvdWNoRmlsZTogJy9zcmMvdGhlbWVyLmpzJyxcbiAgICB3YXRjaFN0YXJ0ZWQgOiBmYWxzZSxcbiAgICBidWlsZHN0ZXA6ICcxIG9mIDEnLFxuICAgIGZpcnN0VGltZSA6IHRydWUsXG4gICAgZmlyc3RDb21waWxlOiB0cnVlLFxuICAgIGJyb3dzZXJDb3VudCA6IDAsXG4gICAgbWFuaWZlc3Q6IG51bGwsXG4gICAgZXh0UGF0aDogJ2V4dCcsXG4gICAgcGx1Z2luRXJyb3JzOiBbXSxcbiAgICBkZXBzOiBbXSxcbiAgICB1c2VkRXh0Q29tcG9uZW50czogW10sXG4gICAgcmVidWlsZDogdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXh0cmFjdEZyb21Tb3VyY2UobW9kdWxlLCBvcHRpb25zLCBjb21waWxhdGlvbiwgZXh0Q29tcG9uZW50cykge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMudmVyYm9zZSwnRlVOQ1RJT04gX2V4dHJhY3RGcm9tU291cmNlJylcbi8vICB0cnkge1xuICAgIHZhciBqcyA9IG1vZHVsZS5fc291cmNlLl92YWx1ZVxuICAgIGxvZ3Yob3B0aW9ucy52ZXJib3NlLCdGVU5DVElPTiBleHRyYWN0RnJvbVNvdXJjZScpXG4gICAgdmFyIGdlbmVyYXRlID0gcmVxdWlyZShcIkBiYWJlbC9nZW5lcmF0b3JcIikuZGVmYXVsdFxuICAgIHZhciBwYXJzZSA9IHJlcXVpcmUoXCJiYWJ5bG9uXCIpLnBhcnNlXG4gICAgdmFyIHRyYXZlcnNlID0gcmVxdWlyZShcImFzdC10cmF2ZXJzZVwiKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXVxuICAgIFxuICAgIGNvbnN0IGFzdCA9IHBhcnNlKGpzLCB7XG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgICdqc3gnLFxuICAgICAgICAnZmxvdycsXG4gICAgICAgICdkb0V4cHJlc3Npb25zJyxcbiAgICAgICAgJ29iamVjdFJlc3RTcHJlYWQnLFxuICAgICAgICAnY2xhc3NQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ2V4cG9ydEV4dGVuc2lvbnMnLFxuICAgICAgICAnYXN5bmNHZW5lcmF0b3JzJyxcbiAgICAgICAgJ2Z1bmN0aW9uQmluZCcsXG4gICAgICAgICdmdW5jdGlvblNlbnQnLFxuICAgICAgICAnZHluYW1pY0ltcG9ydCdcbiAgICAgIF0sXG4gICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgIH0pXG5cbiAgICBmdW5jdGlvbiBhZGRUeXBlKGFyZ05vZGUpIHtcbiAgICAgIHZhciB0eXBlXG4gICAgICBpZiAoYXJnTm9kZS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgICAgdmFyIHh0eXBlID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykuX3RvWHR5cGUoYXJnTm9kZS52YWx1ZSlcbiAgICAgICAgaWYgKHh0eXBlICE9ICdleHRyZWFjdCcpIHtcbiAgICAgICAgICB0eXBlID0geyB4dHlwZTogcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykuX3RvWHR5cGUoYXJnTm9kZS52YWx1ZSkgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0geyB4Y2xhc3M6IGpzLnNsaWNlKGFyZ05vZGUuc3RhcnQsIGFyZ05vZGUuZW5kKSB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHR5cGUpXG4gICAgICAgIHN0YXRlbWVudHMucHVzaChgRXh0LmNyZWF0ZSgke2NvbmZpZ30pYClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cmF2ZXJzZShhc3QsIHtcbiAgICAgIHByZTogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgICAgICAgICAmJiBub2RlLmNhbGxlZVxuICAgICAgICAgICAgJiYgbm9kZS5jYWxsZWUub2JqZWN0XG4gICAgICAgICAgICAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gJ0V4dCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhdGVtZW50cy5wdXNoKGdlbmVyYXRlKG5vZGUpLmNvZGUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PSAnVmFyaWFibGVEZWNsYXJhdG9yJyBcbiAgICAgICAgICAgICYmIG5vZGUuaW5pdCBcbiAgICAgICAgICAgICYmIG5vZGUuaW5pdC50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nIFxuICAgICAgICAgICAgJiYgbm9kZS5pbml0LmNhbGxlZSBcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG5vZGUuaW5pdC5jYWxsZWUubmFtZSA9PSAncmVhY3RpZnknKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuaW5pdC5hcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gbm9kZS5pbml0LmFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWx1ZU5vZGUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBhZGRUeXBlKHZhbHVlTm9kZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLyBDb252ZXJ0IFJlYWN0LmNyZWF0ZUVsZW1lbnQoLi4uKSBjYWxscyB0byB0aGUgZXF1aXZhbGVudCBFeHQuY3JlYXRlKC4uLikgY2FsbHMgdG8gcHV0IGluIHRoZSBtYW5pZmVzdC5cbiAgICAgICAgLy8gaWYgKG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9ueCcgXG4gICAgICAgIC8vICAgICAmJiBub2RlLmNhbGxlZS5vYmplY3QgXG4gICAgICAgIC8vICAgICAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gJ1JlYWN0JyBcbiAgICAgICAgLy8gICAgICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICdjcmVhdGVFbGVtZW50Jykge1xuICAgICAgICAvLyAgIGNvbnN0IFtwcm9wc10gPSBub2RlLmFyZ3VtZW50c1xuICAgICAgICAvLyAgIGxldCBjb25maWdcbiAgICAgICAgLy8gICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgICAvLyAgICAgY29uZmlnID0gZ2VuZXJhdGUocHJvcHMpLmNvZGVcbiAgICAgICAgLy8gICAgIGZvciAobGV0IGtleSBpbiB0eXBlKSB7XG4gICAgICAgIC8vICAgICAgIGNvbmZpZyA9IGB7XFxuICAke2tleX06ICcke3R5cGVba2V5XX0nLCR7Y29uZmlnLnNsaWNlKDEpfWBcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodHlwZSlcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBzdGF0ZW1lbnRzXG4gIC8vIH1cbiAgLy8gY2F0Y2goZSkge1xuICAvLyAgIGNvbnNvbGUubG9nKG1vZHVsZS5yZXNvdXJjZSlcbiAgLy8gICBjb25zb2xlLmxvZyhqcylcbiAgLy8gICBjb25zb2xlLmxvZyhlKVxuICAvLyAgIGNvbXBpbGF0aW9uLmVycm9ycy5wdXNoKCdleHRyYWN0RnJvbVNvdXJjZTogJyArIGUpXG4gIC8vICAgcmV0dXJuIFtdXG4gIC8vIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/package.json b/packages/ext-webpack-plugin/package.json similarity index 69% rename from packages/ext-webpack-plugin-orig/package.json rename to packages/ext-webpack-plugin/package.json index 62095f0..8d074dc 100644 --- a/packages/ext-webpack-plugin-orig/package.json +++ b/packages/ext-webpack-plugin/package.json @@ -1,31 +1,33 @@ { - "name": "@sencha/ext-webpack-plugin-orig", - "version": "6.7.1", + "name": "@sencha/ext-webpack-plugin", + "version": "7.0.0", "description": "A webpack plugin for new Ext JS applications", "main": "dist/index.js", "scripts": { "build": "babel ./src --out-dir ./dist" }, "dependencies": { + "html-webpack-plugin": "^3.2.0", "switchit":"^1.0.8", - "@babel/generator": "^7.3.0", - "@babel/polyfill": "^7.2.5", - "@sencha/cmd": "~6.7.0", + "@babel/generator": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@sencha/cmd": "~7.0.0", "lodash.uniq": "^4.5.0", "schema-utils": "^1.0.0", - "chalk": "^2.4.2", - "fs-extra":"^7.0.1", - "opn": "^5.4.0", + "babylon": "^6.18.0", + "ast-traverse": "^0.1.1", + "chalk": "^2.4.1", + "fs-extra":"^7.0.0", + "opn": "^5.3.0", "recursive-readdir-sync": "^1.0.6" }, "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", - "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/cli": "^7.1.0", + "@babel/core": "^7.1.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.1.0", "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", + "@babel/preset-env": "^7.1.0", "babel-plugin-add-module-exports": "^1.0.0" }, "babel": { diff --git a/packages/ext-webpack-plugin-orig/readme.md b/packages/ext-webpack-plugin/readme.md similarity index 100% rename from packages/ext-webpack-plugin-orig/readme.md rename to packages/ext-webpack-plugin/readme.md diff --git a/packages/ext-webpack-plugin/src/angularUtil.js b/packages/ext-webpack-plugin/src/angularUtil.js new file mode 100644 index 0000000..bf7f5f2 --- /dev/null +++ b/packages/ext-webpack-plugin/src/angularUtil.js @@ -0,0 +1,222 @@ +"use strict" + +export function _getDefaultVars() { + return { + touchFile: '/src/themer.ts', + watchStarted : false, + buildstep: '1 of 1', + firstTime : true, + firstCompile: true, + browserCount : 0, + manifest: null, + extPath: 'ext', + pluginErrors: [], + deps: [], + usedExtComponents: [], + rebuild: true + } +} + +export function _extractFromSource(module, options, compilation, extComponents) { + const logv = require('./pluginUtil').logv + const verbose = options.verbose + logv(verbose,'FUNCTION _extractFromSource') + var js = module._source._value + + var statements = [] + + var generate = require("@babel/generator").default + var parse = require("babylon").parse + var traverse = require("ast-traverse") + + var ast = parse(js, { + plugins: [ + 'typescript', + 'flow', + 'doExpressions', + 'objectRestSpread', + 'classProperties', + 'exportDefaultFrom', + 'exportExtensions', + 'asyncGenerators', + 'functionBind', + 'functionSent', + 'dynamicImport' + ], + sourceType: 'module' + }) + + traverse(ast, { + pre: function (node) { + if (node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name === 'Ext') { + statements.push(generate(node).code) + } + if(node.type === 'StringLiteral') { + let code = node.value + for (var i = 0; i < code.length; ++i) { + if (code.charAt(i) == '<') { + if (code.substr(i, 4) == '') + 3 + } else if (code.charAt(i+1) !== '/') { + var start = code.substring(i) + var spaceEnd = start.indexOf(' ') + var newlineEnd = start.indexOf('\n') + var tagEnd = start.indexOf('>') + var end = Math.min(spaceEnd, newlineEnd, tagEnd) + if (end >= 0) { + var xtype = require('./pluginUtil')._toXtype(start.substring(1, end)) + if(extComponents.includes(xtype)) { + var theValue = node.value.toLowerCase() + if (theValue.indexOf('doctype html') == -1) { + var type = {xtype: xtype} + let config = JSON.stringify(type) + statements.push(`Ext.create(${config})`) + } + } + i += end + } + } + } + } + } + } + }) + + return statements +} + +function changeIt(o) { + const path = require('path') + const fsx = require('fs-extra') + const wherePath = path.resolve(process.cwd(), o.where) + var js = fsx.readFileSync(wherePath).toString() + var newJs = js.replace(o.from,o.to); + fsx.writeFileSync(wherePath, newJs, 'utf-8', ()=>{return}) +} + +export function _toProd(vars, options) { + const log = require('./pluginUtil').log + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _toProd') + const fsx = require('fs-extra') + const fs = require('fs') + const mkdirp = require('mkdirp') + const path = require('path') + + const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); + if (!fs.existsSync(pathExtAngularProd)) { + mkdirp.sync(pathExtAngularProd) + const t = require('./artifacts').extAngularModule('', '', '') + fsx.writeFileSync(`${pathExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', () => { + return + }) + } + + var o = {} + o.where = 'src/app/app.module.ts' + o.from = `import { ExtAngularModule } from '@sencha/ext-angular'` + o.to = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'` + changeIt(o) + + o = {} + o.where = 'src/main.ts' + o.from = `bootstrapModule( AppModule );` + o.to = `enableProdMode();bootstrapModule(AppModule);` + changeIt(o) +} + +export function _toDev(vars, options) { + const log = require('./pluginUtil').log + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _toDev') + const path = require('path') + const pathExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`); + require('rimraf').sync(pathExtAngularProd); + + var o = {} + o.where = 'src/app/app.module.ts' + o.from = `import { ExtAngularModule } from './ext-angular-prod/ext-angular.module'` + o.to = `import { ExtAngularModule } from '@sencha/ext-angular'` + changeIt(o) + + o = {} + o.where = 'src/main.ts' + o.from = `enableProdMode();bootstrapModule(AppModule);` + o.to = `bootstrapModule( AppModule );` + changeIt(o) +} + + +export function _getAllComponents(vars, options) { + const log = require('./pluginUtil').log + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _getAllComponents') + + const path = require('path') + const fsx = require('fs-extra') + +// log(vars.app, `Getting all referenced ext-${options.framework} modules`) + var extComponents = [] + const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib') + var files = fsx.readdirSync(packageLibPath) + files.forEach((fileName) => { + if (fileName && fileName.substr(0, 4) == 'ext-') { + var end = fileName.substr(4).indexOf('.component') + if (end >= 0) { + extComponents.push(fileName.substring(4, end + 4)) + } + } + }) + log(vars.app, `Writing all referenced ext-${options.framework} modules`) + return extComponents +} + +export function _writeFilesToProdFolder(vars, options) { + const log = require('./pluginUtil').log + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _writeFilesToProdFolder') + + const path = require('path') + const fsx = require('fs-extra') + + const packageLibPath = path.resolve(process.cwd(), 'node_modules/@sencha/ext-angular/src/lib') + const pathToExtAngularProd = path.resolve(process.cwd(), `src/app/ext-angular-prod`) + const string = 'Ext.create({\"xtype\":\"' + + vars.deps.forEach(code => { + var index = code.indexOf(string) + if (index >= 0) { + code = code.substring(index + string.length) + var end = code.indexOf('\"') + vars.usedExtComponents.push(code.substr(0, end)) + } + }) + vars.usedExtComponents = [...new Set(vars.usedExtComponents)] + + var writeToPathWritten = false + var moduleVars = { + imports: '', + exports: '', + declarations: '' + } + vars.usedExtComponents.forEach(xtype => { + var capclassname = xtype.charAt(0).toUpperCase() + xtype.replace(/-/g, "_").slice(1) + moduleVars.imports = moduleVars.imports + `import { Ext${capclassname}Component } from './ext-${xtype}.component';\n` + moduleVars.exports = moduleVars.exports + ` Ext${capclassname}Component,\n` + moduleVars.declarations = moduleVars.declarations + ` Ext${capclassname}Component,\n` + var classFile = `ext-${xtype}.component.ts` + const contents = fsx.readFileSync(`${packageLibPath}/${classFile}`).toString() + fsx.writeFileSync(`${pathToExtAngularProd}/${classFile}`, contents, 'utf-8', ()=>{return}) + writeToPathWritten = true + }) + if (writeToPathWritten) { + var t = require('./artifacts').extAngularModule( + moduleVars.imports, moduleVars.exports, moduleVars.declarations + ) + fsx.writeFileSync(`${pathToExtAngularProd}/ext-angular.module.ts`, t, 'utf-8', ()=>{return}) + } + + const baseContent = fsx.readFileSync(`${packageLibPath}/base.ts`).toString() + fsx.writeFileSync(`${pathToExtAngularProd}/base.ts`, baseContent, 'utf-8', ()=>{return}) +} \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/src/artifacts.js b/packages/ext-webpack-plugin/src/artifacts.js similarity index 91% rename from packages/ext-webpack-plugin-orig/src/artifacts.js rename to packages/ext-webpack-plugin/src/artifacts.js index d942666..20299af 100644 --- a/packages/ext-webpack-plugin-orig/src/artifacts.js +++ b/packages/ext-webpack-plugin/src/artifacts.js @@ -200,6 +200,8 @@ export function createWorkspaceJson(options, output) { logv(options,'numberOfPaths: ' + numberOfPaths) logv(options,'nodeModulePath: ' + nodeModulePath) + + const config = { "frameworks": { "ext": nodeModulePath + "node_modules/@sencha/ext" @@ -212,7 +214,8 @@ export function createWorkspaceJson(options, output) { "${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages/local", "${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha", - "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-font-ios", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-ios", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-material", @@ -225,7 +228,14 @@ export function createWorkspaceJson(options, output) { "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-triton", - "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-graphite" + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-graphite", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-calendar", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-charts", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-d3", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-exporter", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-pivot", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-pivot-d3", + "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-ux", ], "extract": "${workspace.dir}/" + nodeModulePath + "packages/remote" } diff --git a/packages/ext-webpack-plugin/src/componentsUtil.js b/packages/ext-webpack-plugin/src/componentsUtil.js new file mode 100644 index 0000000..9fe4bbd --- /dev/null +++ b/packages/ext-webpack-plugin/src/componentsUtil.js @@ -0,0 +1,77 @@ +"use strict" + +export function _getDefaultVars() { + return { + touchFile: '/src/themer.js', + watchStarted : false, + buildstep: '1 of 1', + firstTime : true, + firstCompile: true, + browserCount : 0, + manifest: null, + extPath: 'ext', + pluginErrors: [], + deps: [], + usedExtComponents: [], + rebuild: true + } +} + +export function _extractFromSource(module, options, compilation, extComponents) { + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _extractFromSource (empty)') + try { + var statements = [ + 'Ext.require("Ext.*")', + ] + return statements + } + catch(e) { + console.log(e) + compilation.errors.push('extractFromSource: ' + e) + return [] + } +} + +export function _toProd(vars, options) { + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _toProd (empty') + try { + } + catch (e) { + console.log(e) + return [] + } +} + +export function _toDev(vars, options) { + try { + } + catch (e) { + console.log(e) + return [] + } +} + +export function _getAllComponents(vars, options) { + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _getAllComponents (empty)') + try { + var extComponents = [] + return extComponents + } + catch (e) { + console.log(e) + return [] + } +} + +export function _writeFilesToProdFolder(vars, options) { + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _writeFilesToProdFolder (empty)') + try { + } + catch (e) { + console.log(e) + } +} \ No newline at end of file diff --git a/packages/ext-webpack-plugin-orig/src/extjsUtil.js b/packages/ext-webpack-plugin/src/extjsUtil.js similarity index 52% rename from packages/ext-webpack-plugin-orig/src/extjsUtil.js rename to packages/ext-webpack-plugin/src/extjsUtil.js index ad91c75..91f1c60 100644 --- a/packages/ext-webpack-plugin-orig/src/extjsUtil.js +++ b/packages/ext-webpack-plugin/src/extjsUtil.js @@ -1,44 +1,9 @@ "use strict" -export function getValidateOptions() { - return { - "type": "object", - "properties": { - "framework": {"type": [ "string" ]}, - "port": {"type": [ "integer" ]}, - "emit": {"type": [ "boolean" ]}, - "browser": {"type": [ "boolean" ]}, - "watch": {"type": [ "string" ]}, - "profile": {"type": [ "string" ]}, - "environment": {"type": [ "string" ]}, - "verbose": {"type": [ "string" ]}, -// "theme": {"type": [ "string" ]}, -// "toolkit": {"type": [ "string" ]}, - "treeshake": {"type": [ "boolean" ]} -// "packages": {"type": [ "string", "array" ]}, - - }, - "additionalProperties": false - // "errorMessage": { - // "option": "should be {Boolean} (https:/github.com/org/repo#anchor)" - // } - } -} - -export function getDefaultOptions() { - return { - port: 1962, - emit: true, - browser: true, - watch: 'yes', - profile: 'desktop', - environment: 'development', - verbose: 'no' - } -} - -export function getDefaultVars() { +export function _getDefaultVars() { return { + touchFile: '/themer.js', + rebuild: true, watchStarted : false, firstTime : true, browserCount : 0, @@ -54,36 +19,34 @@ export function getDefaultVars() { } export function _afterCompile(compilation, vars, options) { - try { - require('./pluginUtil').logv(options,'FUNCTION ext-after-compile') - const path = require('path') - let { files, dirs } = vars - const { cwd } = vars - files = typeof files === 'string' ? [files] : files - dirs = typeof dirs === 'string' ? [dirs] : dirs - const { - fileDependencies, - contextDependencies, - } = _getFileAndContextDeps(compilation, files, dirs, cwd, options); - if (files.length > 0) { - fileDependencies.forEach((file) => { - compilation.fileDependencies.add(path.resolve(file)); - }) - } - if (dirs.length > 0) { - contextDependencies.forEach((context) => { - compilation.contextDependencies.add(context); - }) - } + var verbose = options.verbose + var logv = require('./pluginUtil').logv + logv(verbose,'FUNCTION extjs _afterCompile') + const path = require('path') + let { files, dirs } = vars + const { cwd } = vars + files = typeof files === 'string' ? [files] : files + dirs = typeof dirs === 'string' ? [dirs] : dirs + const { + fileDependencies, + contextDependencies, + } = _getFileAndContextDeps(compilation, files, dirs, cwd, options); + if (files.length > 0) { + fileDependencies.forEach((file) => { + compilation.fileDependencies.add(path.resolve(file)); + }) } - catch(e) { - console.log(e) - compilation.errors.push('_afterCompile: ' + e) + if (dirs.length > 0) { + contextDependencies.forEach((context) => { + compilation.contextDependencies.add(context); + }) } } function _getFileAndContextDeps(compilation, files, dirs, cwd, options) { - require('./pluginUtil').logv(options,'FUNCTION _getFileAndContextDeps') + var verbose = options.verbose + var logv = require('./pluginUtil').logv + logv(verbose,'FUNCTION _getFileAndContextDeps') const uniq = require('lodash.uniq') const isGlob = require('is-glob') @@ -108,7 +71,7 @@ function _getFileAndContextDeps(compilation, files, dirs, cwd, options) { } export function _prepareForBuild(app, vars, options, output, compilation) { - try { +// try { const log = require('./pluginUtil').log const logv = require('./pluginUtil').logv logv(options,'_prepareForBuild') @@ -120,16 +83,6 @@ export function _prepareForBuild(app, vars, options, output, compilation) { var currentNumFiles = watchedFiles.length logv(options,'watchedFiles: ' + currentNumFiles) var doBuild = true - - // var doBuild = false - // for (var file in watchedFiles) { - // if (vars.lastMilliseconds < fs.statSync(watchedFiles[file]).mtimeMs) { - // if (watchedFiles[file].indexOf("scss") != -1) {doBuild=true;break;} - // } - // } - // if (vars.lastMilliseconds < fs.statSync('./app.json').mtimeMs) { - // doBuild=true - // } logv(options,'doBuild: ' + doBuild) @@ -154,9 +107,9 @@ export function _prepareForBuild(app, vars, options, output, compilation) { vars.rebuild = false } vars.lastNumFiles = currentNumFiles - } - catch(e) { - console.log(e) - compilation.errors.push('_prepareForBuild: ' + e) - } + // } + // catch(e) { + // console.log(e) + // compilation.errors.push('_prepareForBuild: ' + e) + // } } diff --git a/packages/ext-webpack-plugin/src/index.js b/packages/ext-webpack-plugin/src/index.js new file mode 100644 index 0000000..1703563 --- /dev/null +++ b/packages/ext-webpack-plugin/src/index.js @@ -0,0 +1,49 @@ +'use strict' +require('@babel/polyfill') +const p = require(`./pluginUtil`) + +export default class ExtWebpackPlugin { + + constructor(options) { + var o = p._constructor(options) + this.vars = o.vars + this.options = o.options + } + + apply(compiler) { + const vars = this.vars + const options = this.options + const app = this.app + + if (!compiler.hooks) {console.log('not webpack 4');return} + + compiler.hooks.thisCompilation.tap(`ext-this-compilation`, (compilation) => { + p.logh(app, `HOOK thisCompilation`) + p._thisCompilation(compiler, compilation, vars, options) + if (vars.pluginErrors.length > 0) { + compilation.errors.push( new Error(vars.pluginErrors.join("")) ) + return + } + }) + + compiler.hooks.compilation.tap(`ext-compilation`, (compilation) => { + p.logh(app, `HOOK compilation`) + p._compilation(compiler, compilation, vars, options) + }) + + compiler.hooks.afterCompile.tap('ext-after-compile', (compilation) => { + p.logh(app, `HOOK afterCompile`) + p._afterCompile(compiler, compilation, vars, options) + }) + + compiler.hooks.emit.tapAsync(`ext-emit`, (compilation, callback) => { + p.logh(app, `HOOK emit (async)`) + p._emit(compiler, compilation, vars, options, callback) + }) + + compiler.hooks.done.tap(`ext-done`, (stats) => { + p.logh(app, `HOOK done`) + p._done(stats, vars, options) + }) + } +} diff --git a/packages/ext-webpack-plugin/src/pluginUtil.js b/packages/ext-webpack-plugin/src/pluginUtil.js new file mode 100644 index 0000000..575780b --- /dev/null +++ b/packages/ext-webpack-plugin/src/pluginUtil.js @@ -0,0 +1,697 @@ +//********** +export function _constructor(initialOptions) { + const fs = require('fs') + var vars = {} + var options = {} + try { + if (initialOptions.framework == undefined) { + vars.pluginErrors = [] + vars.pluginErrors.push('webpack config: framework parameter on ext-webpack-plugin is not defined - values: react, angular, extjs, components') + var o = {} + o.vars = vars + return o + } + var framework = initialOptions.framework + var treeshake = initialOptions.treeshake + var verbose = initialOptions.verbose + + const validateOptions = require('schema-utils') + validateOptions(_getValidateOptions(), initialOptions, '') + + const rc = (fs.existsSync(`.ext-${framework}rc`) && JSON.parse(fs.readFileSync(`.ext-${framework}rc`, 'utf-8')) || {}) + options = { ..._getDefaultOptions(), ...initialOptions, ...rc } + + vars = require(`./${framework}Util`)._getDefaultVars() + vars.pluginName = 'ext-webpack-plugin' + vars.app = _getApp() + var pluginName = vars.pluginName + var app = vars.app + + logv(verbose, 'FUNCTION _constructor') + logv(verbose, `pluginName - ${pluginName}`) + logv(verbose, `app - ${app}`) + + if (options.environment == 'production') { + vars.production = true + options.browser = 'no' + options.watch = 'no' + } + else { + vars.production = false + } + + //logv(verbose, `options:`);if (verbose == 'yes') {console.dir(options)} + //logv(verbose, `vars:`);if (verbose == 'yes') {console.dir(vars)} + + log(app, _getVersions(pluginName, framework)) + + if (framework == 'react' || framework == 'extjs') { + if (vars.production == true) { + vars.buildstep = '1 of 1' + log(app, 'Starting Production Build for ' + framework) + } + else { + vars.buildstep = '1 of 1' + log(app, 'Starting development build for ' + framework) + } + } + else if (vars.production == true) { + if (treeshake == 'yes') { + vars.buildstep = '1 of 2' + log(app, 'Starting production build for ' + framework + ' - ' + vars.buildstep) + require(`./${framework}Util`)._toProd(vars, options) + } + else { + vars.buildstep = '2 of 2' + log(app, 'Continuing production build for ' + framework + ' - ' + vars.buildstep) + } + } + else { + vars.buildstep = '1 of 1' + log(app, 'Starting development build for ' + framework) + } + logv(verbose, 'Building for ' + options.environment + ', ' + 'Treeshake is ' + options.treeshake) + + var o = {} + o.vars = vars + o.options = options + return o + } + catch (e) { + throw '_constructor: ' + e.toString() + } +} + +//********** +export function _thisCompilation(compiler, compilation, vars, options) { + try { + var app = vars.app + var verbose = options.verbose + logv(verbose, 'FUNCTION _thisCompilation') + logv(verbose, `options.script: ${options.script }`) + logv(verbose, `buildstep: ${vars.buildstep}`) + + if (vars.buildstep == '1 of 1' || vars.buildstep == '1 of 2') { + if (options.script != undefined) { + if (options.script != null) { + if (options.script != '') { + log(app, `Started running ${options.script}`) + runScript(options.script, function (err) { + if (err) throw err; + log(app, `Finished running ${options.script}`) + }); + } + } + } + } + } + catch(e) { + throw '_thisCompilation: ' + e.toString() + } +} + +//********** +export function _compilation(compiler, compilation, vars, options) { + try { + var app = vars.app + var verbose = options.verbose + var framework = options.framework + logv(verbose, 'FUNCTION _compilation') + + // if (framework == 'extjs') { + // logv(verbose, 'FUNCTION _compilation end (extjs)') + // return + // } + + if (framework != 'extjs') { + var extComponents = [] + if (vars.buildstep == '1 of 2') { + extComponents = require(`./${framework}Util`)._getAllComponents(vars, options) + } + compilation.hooks.succeedModule.tap(`ext-succeed-module`, module => { + if (module.resource && !module.resource.match(/node_modules/)) { + if(module.resource.match(/\.html$/) != null) { + if(module._source._value.toLowerCase().includes('doctype html') == false) { + vars.deps = [ + ...(vars.deps || []), + ...require(`./${framework}Util`)._extractFromSource(module, options, compilation, extComponents)] + } + } + else { + vars.deps = [ + ...(vars.deps || []), + ...require(`./${framework}Util`)._extractFromSource(module, options, compilation, extComponents)] + } + } + }) + + if (vars.buildstep == '1 of 2') { + compilation.hooks.finishModules.tap(`ext-finish-modules`, modules => { + require(`./${framework}Util`)._writeFilesToProdFolder(vars, options) + }) + } + if (vars.buildstep == '1 of 1' || vars.buildstep == '2 of 2') { + compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tap(`ext-html-generation`,(data) => { + const path = require('path') + var jsPath = path.join(vars.extPath, 'ext.js') + var cssPath = path.join(vars.extPath, 'ext.css') + data.assets.js.unshift(jsPath) + data.assets.css.unshift(cssPath) + log(app, `Adding ${jsPath} and ${cssPath} to index.html`) + }) + } + } + + } + catch(e) { + throw '_compilation: ' + e.toString() +// logv(options.verbose,e) +// compilation.errors.push('_compilation: ' + e) + } +} + +//********** +export function _afterCompile(compiler, compilation, vars, options) { + try { + var app = vars.app + var verbose = options.verbose + var framework = options.framework + logv(verbose, 'FUNCTION _afterCompile') + if (framework == 'extjs') { + require(`./extjsUtil`)._afterCompile(compilation, vars, options) + } + else { + logv(verbose, 'FUNCTION _afterCompile not run') + } + } + catch(e) { + throw '_afterCompile: ' + e.toString() + } +} + +//********** +export async function _emit(compiler, compilation, vars, options, callback) { + try { + const path = require('path') + var app = vars.app + var verbose = options.verbose + var emit = options.emit + var framework = options.framework + logv(verbose,'FUNCTION _emit') + if (emit == 'yes') { + if (vars.buildstep == '1 of 1' || vars.buildstep == '1 of 2') { + let outputPath = path.join(compiler.outputPath,vars.extPath) + if (compiler.outputPath === '/' && compiler.options.devServer) { + outputPath = path.join(compiler.options.devServer.contentBase, outputPath) + } + logv(verbose,'outputPath: ' + outputPath) + logv(verbose,'framework: ' + framework) + if (framework != 'extjs') { + _prepareForBuild(app, vars, options, outputPath, compilation) + } + var command = '' + if (options.watch == 'yes' && vars.production == false) + {command = 'watch'} + else + {command = 'build'} + if (vars.rebuild == true) { + var parms = [] + if (options.profile == undefined || options.profile == '' || options.profile == null) { + if (command == 'build') + { parms = ['app', command, options.environment] } + else + { parms = ['app', command, '--web-server', 'false', options.environment] } + } + else { + if (command == 'build') + {parms = ['app', command, options.profile, options.environment]} + else + {parms = ['app', command, '--web-server', 'false', options.profile, options.environment]} + } + if (vars.watchStarted == false) { + await _buildExtBundle(app, compilation, outputPath, parms, vars, options) + vars.watchStarted = true + } + callback() + } + else { + callback() + } + } + else { + logv(verbose,'NOT running emit') + callback() + } + } + else { + logv(verbose,'emit is no') + callback() + } + } + catch(e) { + callback() + throw '_emit: ' + e.toString() + // logv(options.verbose,e) + // compilation.errors.push('_emit: ' + e) + // callback() + } +} + +//********** +export function _done(stats, vars, options) { + try { + var verbose = options.verbose + var framework = options.framework + logv(verbose,'FUNCTION _done') + if (stats.compilation.errors && stats.compilation.errors.length) // && process.argv.indexOf('--watch') == -1) + { + var chalk = require('chalk'); + console.log(chalk.red('******************************************')); + console.log(stats.compilation.errors[0]); + console.log(chalk.red('******************************************')); + process.exit(0); + } + + //mjg refactor + if (vars.production == true && options.treeshake == 'no' && framework == 'angular') { + require(`./${options.framework}Util`)._toDev(vars, options) + } + try { + if(options.browser == 'yes' && options.watch == 'yes' && vars.production == false) { + if (vars.browserCount == 0) { + var url = 'http://localhost:' + options.port + require('./pluginUtil').log(vars.app, `Opening browser at ${url}`) + vars.browserCount++ + const opn = require('opn') + opn(url) + } + } + } + catch (e) { + console.log(e) + } + if (vars.buildstep == '1 of 1') { + if (vars.production == true) { + require('./pluginUtil').log(vars.app, `Ending production build`) + } + else { + require('./pluginUtil').log(vars.app, `Ending development build`) + } + } + if (vars.buildstep == '2 of 2') { + require('./pluginUtil').log(vars.app, `Ending production build`) + } + } + catch(e) { +// require('./pluginUtil').logv(options.verbose,e) + throw '_done: ' + e.toString() + } +} + +//********** +export function _prepareForBuild(app, vars, options, output, compilation) { + try { + var verbose = options.verbose + var packages = options.packages + var toolkit = options.toolkit + var theme = options.theme + logv(verbose,'FUNCTION _prepareForBuild') + const rimraf = require('rimraf') + const mkdirp = require('mkdirp') + const fsx = require('fs-extra') + const fs = require('fs') + const path = require('path') + theme = theme || (toolkit === 'classic' ? 'theme-triton' : 'theme-material') + logv(verbose,'firstTime: ' + vars.firstTime) + if (vars.firstTime) { + rimraf.sync(output) + mkdirp.sync(output) + const buildXML = require('./artifacts').buildXML + const createAppJson = require('./artifacts').createAppJson + const createWorkspaceJson = require('./artifacts').createWorkspaceJson + const createJSDOMEnvironment = require('./artifacts').createJSDOMEnvironment + fs.writeFileSync(path.join(output, 'build.xml'), buildXML(vars.production, options, output), 'utf8') + fs.writeFileSync(path.join(output, 'app.json'), createAppJson(theme, packages, toolkit, options, output), 'utf8') + fs.writeFileSync(path.join(output, 'jsdom-environment.js'), createJSDOMEnvironment(options, output), 'utf8') + fs.writeFileSync(path.join(output, 'workspace.json'), createWorkspaceJson(options, output), 'utf8') + var framework = vars.framework; + //because of a problem with colorpicker + if (fs.existsSync(path.join(process.cwd(),`ext-${framework}/ux/`))) { + var fromPath = path.join(process.cwd(), `ext-${framework}/ux/`) + var toPath = path.join(output, 'ux') + fsx.copySync(fromPath, toPath) + log(app, 'Copying (ux) ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')) + } + if (fs.existsSync(path.join(process.cwd(),`ext-${framework}/packages/`))) { + var fromPath = path.join(process.cwd(), `ext-${framework}/packages/`) + var toPath = path.join(output, 'packages') + fsx.copySync(fromPath, toPath) + log(app, 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')) + } + if (fs.existsSync(path.join(process.cwd(),`ext-${framework}/overrides/`))) { + var fromPath = path.join(process.cwd(), `ext-${framework}/overrides/`) + var toPath = path.join(output, 'overrides') + fsx.copySync(fromPath, toPath) + log(app, 'Copying ' + fromPath.replace(process.cwd(), '') + ' to: ' + toPath.replace(process.cwd(), '')) + } + if (fs.existsSync(path.join(process.cwd(),'resources/'))) { + var fromResources = path.join(process.cwd(), 'resources/') + var toResources = path.join(output, '../resources') + fsx.copySync(fromResources, toResources) + log(app, 'Copying ' + fromResources.replace(process.cwd(), '') + ' to: ' + toResources.replace(process.cwd(), '')) + } + } + vars.firstTime = false + var js = '' + if (vars.production) { + js = vars.deps.join(';\n'); + } + else { + js = 'Ext.require(["Ext.*","Ext.data.TreeStore"])' + } + if (vars.manifest === null || js !== vars.manifest) { + vars.manifest = js + const manifest = path.join(output, 'manifest.js') + fs.writeFileSync(manifest, js, 'utf8') + vars.rebuild = true + var bundleDir = output.replace(process.cwd(), '') + if (bundleDir.trim() == '') {bundleDir = './'} + log(app, 'Building Ext bundle at: ' + bundleDir) + } + else { + vars.rebuild = false + log(app, 'Ext rebuild NOT needed') + } + } + catch(e) { + require('./pluginUtil').logv(options.verbose,e) + compilation.errors.push('_prepareForBuild: ' + e) + } +} + +//********** +export function _buildExtBundle(app, compilation, outputPath, parms, vars, options) { +// try { + var verbose = options.verbose + const fs = require('fs') + logv(verbose,'FUNCTION _buildExtBundle') + let sencha; try { sencha = require('@sencha/cmd') } catch (e) { sencha = 'sencha' } + if (fs.existsSync(sencha)) { + logv(verbose,'sencha folder exists') + } + else { + logv(verbose,'sencha folder DOES NOT exist') + } + return new Promise((resolve, reject) => { + const onBuildDone = () => { + logv(verbose,'onBuildDone') + resolve() + } + var opts = { cwd: outputPath, silent: true, stdio: 'pipe', encoding: 'utf-8'} + _executeAsync(app, sencha, parms, opts, compilation, vars, options).then ( + function() { onBuildDone() }, + function(reason) { reject(reason) } + ) + }) + // } + // catch(e) { + // console.log('e') + // require('./pluginUtil').logv(options.verbose,e) + // compilation.errors.push('_buildExtBundle: ' + e) + // callback() + // } +} + +//********** +export async function _executeAsync (app, command, parms, opts, compilation, vars, options) { +// try { + var verbose = options.verbose + var framework = options.framework + //const DEFAULT_SUBSTRS = ['[INF] Loading', '[INF] Processing', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Server", "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; + const DEFAULT_SUBSTRS = ["[INF] xServer", '[INF] Loading', '[INF] Append', '[INF] Processing', '[INF] Processing Build', '[LOG] Fashion build complete', '[ERR]', '[WRN]', "[INF] Writing", "[INF] Loading Build", "[INF] Waiting", "[LOG] Fashion waiting"]; + var substrings = DEFAULT_SUBSTRS + var chalk = require('chalk') + const crossSpawn = require('cross-spawn') + logv(verbose, 'FUNCTION _executeAsync') + await new Promise((resolve, reject) => { + logv(verbose,`command - ${command}`) + logv(verbose, `parms - ${parms}`) + logv(verbose, `opts - ${JSON.stringify(opts)}`) + let child = crossSpawn(command, parms, opts) + child.on('close', (code, signal) => { + logv(verbose, `on close: ` + code) + if(code === 0) { resolve(0) } + else { compilation.errors.push( new Error(code) ); resolve(0) } + }) + child.on('error', (error) => { + logv(verbose, `on error`) + compilation.errors.push(error) + resolve(0) + }) + child.stdout.on('data', (data) => { + var str = data.toString().replace(/\r?\n|\r/g, " ").trim() + logv(verbose, `${str}`) + if (data && data.toString().match(/Fashion waiting for changes\.\.\./)) { + + const fs = require('fs'); + var filename = process.cwd() + vars.touchFile; + try { + var d = new Date().toLocaleString() + var data = fs.readFileSync(filename); + fs.writeFileSync(filename, '//' + d, 'utf8'); + logv(app, `touching ${filename}`); + } + catch(e) { + logv(app, `NOT touching ${filename}`); + } + + resolve(0) + } + else { + if (substrings.some(function(v) { return data.indexOf(v) >= 0; })) { + str = str.replace("[INF]", "") + str = str.replace("[LOG]", "") + str = str.replace(process.cwd(), '').trim() + if (str.includes("[ERR]")) { + compilation.errors.push(app + str.replace(/^\[ERR\] /gi, '')); + str = str.replace("[ERR]", `${chalk.red("[ERR]")}`) + } + log(app, str) + } + } + }) + child.stderr.on('data', (data) => { + logv(options, `error on close: ` + data) + var str = data.toString().replace(/\r?\n|\r/g, " ").trim() + var strJavaOpts = "Picked up _JAVA_OPTIONS"; + var includes = str.includes(strJavaOpts) + if (!includes) { + console.log(`${app} ${chalk.red("[ERR]")} ${str}`) + } + }) + }) + // } + // catch(e) { + // logv(options,e) + // compilation.errors.push('_executeAsync: ' + e) + // callback() + // } +} + +//********** +function runScript(scriptPath, callback) { + var childProcess = require('child_process'); + // keep track of whether callback has been invoked to prevent multiple invocations + var invoked = false; + var process = childProcess.fork(scriptPath); + // listen for errors as they may prevent the exit event from firing + process.on('error', function (err) { + if (invoked) return; + invoked = true; + callback(err); + }); + // execute the callback once the process has finished running + process.on('exit', function (code) { + if (invoked) return; + invoked = true; + var err = code === 0 ? null : new Error('exit code ' + code); + callback(err); + }); +} + +//********** +export function _toXtype(str) { + return str.toLowerCase().replace(/_/g, '-') +} + +//********** +export function _getApp() { + var chalk = require('chalk') + var prefix = `` + const platform = require('os').platform() + if (platform == 'darwin') { prefix = `ℹ 「ext」:` } + else { prefix = `i [ext]:` } + return `${chalk.green(prefix)} ` +} + +//********** +export function _getVersions(pluginName, frameworkName) { + const path = require('path') + const fs = require('fs') + var v = {} + var pluginPath = path.resolve(process.cwd(),'node_modules/@sencha', pluginName) + var pluginPkg = (fs.existsSync(pluginPath+'/package.json') && JSON.parse(fs.readFileSync(pluginPath+'/package.json', 'utf-8')) || {}); + v.pluginVersion = pluginPkg.version + v._resolved = pluginPkg._resolved + if (v._resolved == undefined) { + v.edition = `Commercial` + } + else { + if (-1 == v._resolved.indexOf('community')) { + v.edition = `Commercial` + } + else { + v.edition = `Community` + } + } + var webpackPath = path.resolve(process.cwd(),'node_modules/webpack') + var webpackPkg = (fs.existsSync(webpackPath+'/package.json') && JSON.parse(fs.readFileSync(webpackPath+'/package.json', 'utf-8')) || {}); + v.webpackVersion = webpackPkg.version + var extPath = path.resolve(process.cwd(),'node_modules/@sencha/ext') + var extPkg = (fs.existsSync(extPath+'/package.json') && JSON.parse(fs.readFileSync(extPath+'/package.json', 'utf-8')) || {}); + v.extVersion = extPkg.sencha.version + var cmdPath = path.resolve(process.cwd(),`node_modules/@sencha/cmd`) + var cmdPkg = (fs.existsSync(cmdPath+'/package.json') && JSON.parse(fs.readFileSync(cmdPath+'/package.json', 'utf-8')) || {}); + v.cmdVersion = cmdPkg.version_full + if (v.cmdVersion == undefined) { + var cmdPath = path.resolve(process.cwd(),`node_modules/@sencha/${pluginName}/node_modules/@sencha/cmd`) + var cmdPkg = (fs.existsSync(cmdPath+'/package.json') && JSON.parse(fs.readFileSync(cmdPath+'/package.json', 'utf-8')) || {}); + v.cmdVersion = cmdPkg.version_full + } + var frameworkInfo = '' + if (frameworkName != undefined && frameworkName != 'extjs') { + var frameworkPath = '' + if (frameworkName == 'react') { + frameworkPath = path.resolve(process.cwd(),'node_modules/react') + } + if (frameworkName == 'angular') { + frameworkPath = path.resolve(process.cwd(),'node_modules/@angular/core') + } + var frameworkPkg = (fs.existsSync(frameworkPath+'/package.json') && JSON.parse(fs.readFileSync(frameworkPath+'/package.json', 'utf-8')) || {}); + v.frameworkVersion = frameworkPkg.version + frameworkInfo = ', ' + frameworkName + ' v' + v.frameworkVersion + } + return 'ext-webpack-plugin v' + v.pluginVersion + ', Ext JS v' + v.extVersion + ' ' + v.edition + ' Edition, Sencha Cmd v' + v.cmdVersion + ', webpack v' + v.webpackVersion + frameworkInfo + } + +//********** +export function log(app,message) { + var s = app + message + require('readline').cursorTo(process.stdout, 0) + try {process.stdout.clearLine()}catch(e) {} + process.stdout.write(s);process.stdout.write('\n') +} + +//********** +export function logh(app,message) { + var h = false + var s = app + message + if (h == true) { + require('readline').cursorTo(process.stdout, 0) + try { + process.stdout.clearLine() + } + catch(e) {} + process.stdout.write(s) + process.stdout.write('\n') + } +} + +//********** +export function logv(verbose, s) { + if (verbose == 'yes') { + require('readline').cursorTo(process.stdout, 0) + try { + process.stdout.clearLine() + } + catch(e) {} + process.stdout.write(`-verbose: ${s}`) + process.stdout.write('\n') + } +} + +function _getValidateOptions() { + return { + "type": "object", + "properties": { + "framework": { + "type": ["string"] + }, + "toolkit": { + "type": ["string"] + }, + "theme": { + "type": ["string"] + }, + "emit": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "script": { + "type": ["string"] + }, + "port": { + "type": ["integer"] + }, + "packages": { + "type": ["string", "array"] + }, + "profile": { + "type": ["string"] + }, + "environment": { + "errorMessage": "should be 'development' or 'production' string value", + "type": ["string"] + }, + "treeshake": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "browser": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "watch": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + }, + "verbose": { + "errorMessage": "should be 'yes' or 'no' string value (NOT true or false)", + "type": ["string"] + } + }, + "additionalProperties": false + }; +} + + +function _getDefaultOptions() { + return { + framework: 'extjs', + toolkit: 'modern', + theme: 'theme-material', + emit: 'yes', + script: null, + port: 1962, + packages: [], + + profile: '', + environment: 'development', + treeshake: 'no', + browser: 'yes', + watch: 'yes', + verbose: 'no' + } +} + + diff --git a/packages/ext-webpack-plugin-orig/src/reactUtil.js b/packages/ext-webpack-plugin/src/reactUtil.js similarity index 57% rename from packages/ext-webpack-plugin-orig/src/reactUtil.js rename to packages/ext-webpack-plugin/src/reactUtil.js index 428c6fc..04df2d1 100644 --- a/packages/ext-webpack-plugin-orig/src/reactUtil.js +++ b/packages/ext-webpack-plugin/src/reactUtil.js @@ -1,66 +1,28 @@ "use strict" -export function getValidateOptions() { - return { - "type": "object", - "properties": { - "framework": {"type": [ "string" ]}, - "toolkit": {"type": [ "string" ]}, - "port": {"type": [ "integer" ]}, - "emit": {"type": [ "boolean" ]}, - "browser": {"type": [ "boolean" ]}, - "watch": {"type": [ "string" ]}, - "profile": {"type": [ "string" ]}, - "environment": {"type": [ "string" ]}, - "verbose": {"type": [ "string" ]}, - "theme": {"type": [ "string" ]}, - "treeshake": {"type": [ "boolean" ]}, - "packages": {"type": [ "string", "array" ]} - }, - "additionalProperties": false - // "errorMessage": { - // "option": "should be {Boolean} (https:/github.com/org/repo#anchor)" - // } - } -} - -export function getDefaultOptions() { - return { - port: 1962, - emit: true, - browser: true, - watch: 'yes', - profile: '', - environment: 'development', - verbose: 'no', - toolkit: 'modern', - packages: null - } -} - -export function getDefaultVars() { +export function _getDefaultVars() { return { + touchFile: '/src/themer.js', watchStarted : false, + buildstep: '1 of 1', firstTime : true, firstCompile: true, browserCount : 0, manifest: null, - extPath: 'ext-react', + extPath: 'ext', pluginErrors: [], deps: [], + usedExtComponents: [], rebuild: true } } -function toXtype(str) { - return str.toLowerCase().replace(/_/g, '-') -} - -export function extractFromSource(module, options, compilation) { - try { +export function _extractFromSource(module, options, compilation, extComponents) { + const logv = require('./pluginUtil').logv + logv(options.verbose,'FUNCTION _extractFromSource') +// try { var js = module._source._value - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION extractFromSource') + logv(options.verbose,'FUNCTION extractFromSource') var generate = require("@babel/generator").default var parse = require("babylon").parse var traverse = require("ast-traverse") @@ -85,9 +47,9 @@ export function extractFromSource(module, options, compilation) { function addType(argNode) { var type if (argNode.type === 'StringLiteral') { - var xtype = toXtype(argNode.value) + var xtype = require('./pluginUtil')._toXtype(argNode.value) if (xtype != 'extreact') { - type = { xtype: toXtype(argNode.value) } + type = { xtype: require('./pluginUtil')._toXtype(argNode.value) } } } else { type = { xclass: js.slice(argNode.start, argNode.end) } @@ -140,31 +102,12 @@ export function extractFromSource(module, options, compilation) { } }) return statements - } - catch(e) { - console.log(module.resource) - console.log(js) - console.log(e) - compilation.errors.push('extractFromSource: ' + e) - return [] - } + // } + // catch(e) { + // console.log(module.resource) + // console.log(js) + // console.log(e) + // compilation.errors.push('extractFromSource: ' + e) + // return [] + // } } - -//********** -export function _done(vars, options) { - try { - const log = require('./pluginUtil').log - const logv = require('./pluginUtil').logv - logv(options,'FUNCTION _done') - - try { - } - catch (e) { - console.log(e) - return [] - } - } - catch(e) { - require('./pluginUtil').logv(options,e) - } -} \ No newline at end of file