diff --git a/.cursor/rules/commands.mdc b/.cursor/rules/commands.mdc new file mode 100644 index 0000000..a27f087 --- /dev/null +++ b/.cursor/rules/commands.mdc @@ -0,0 +1,10 @@ +--- +description: Describes how to create and register new commands +globs: src/command/*.ts +alwaysApply: false +--- +- Commands are located in `src/command` directory +- Commands must extend the [Command.ts](mdc:src/command/Command.ts) abstract class or any other class that inherits it +- Command name must be defined in format: `magentoToolbox.commandName` +- New commands must be added to [index.ts](mdc:src/command/index.ts) file so that they are loaded. Commands also need to be added to [package.json](mdc:package.json) under contributes -> commands +- Commands that only generate files based on a pre-defined template can extend the [SimpleTemplateGeneratorCommand.ts](mdc:src/command/SimpleTemplateGeneratorCommand.ts) class diff --git a/.cursor/rules/tests.mdc b/.cursor/rules/tests.mdc new file mode 100644 index 0000000..8d98cab --- /dev/null +++ b/.cursor/rules/tests.mdc @@ -0,0 +1,11 @@ +--- +description: Describes how to write tests +globs: *.test.ts +alwaysApply: false +--- +- Tests are located in the src/test directory +- Utilities for tests can be found in this file [util.ts](mdc:src/test/util.ts) +- Some parts of the extension require the ExtensionContext to be present. To make sure it's set, tests should run the setup function from [setup.ts](mdc:src/test/setup.ts) +- Tests are written using Mocha framework (`mocha` package) in Typescript and must end with .test.ts file extension. Do NOT use `chai` +- Test spies, stubs and mocks can be written using the Sinon.js library +- Reference files for tests are stored in the test-resources directory diff --git a/CHANGELOG.md b/CHANGELOG.md index 40f8733..972b44b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,13 @@ All notable changes to the "magento-toolbox" extension will be documented in thi Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. -## [1.2.0] +## [Unreleased] + +- Added: Jump to module command +- Changed: All dropdown inputs now support searching +- Changed: Migrated ejs templates to handlebars + +## [1.2.0] - 2025-03-13 - Added: Generator command for sample Layout XML file - Added: Generator command for sample page_types.xml file @@ -20,7 +26,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how - Added: Generator command for sample system.xml file - Added: Generator command for sample config.xml file -## [1.1.3] - 3/12/2025 +## [1.1.3] - 2025-03-12 - Fixed: Block, observer, plugin and preference class generation fails if class name includes backslashes - Fixed: Composer.json license is not capitalized @@ -29,19 +35,19 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how - Fixed: Preference type attribute does not include full class namespace - Chore: Added unit tests for generator commands -## [1.1.2] - 2/27/2025 +## [1.1.2] - 2025-02-27 - Fixed: Module generator creates an invalid registration.php file -## [1.1.1] - 2/27/2025 +## [1.1.1] - 2025-02-27 - Fixed: urn catalog not generated in dockerized environments - Fixed: codegen fails in multi-folder workspaces -## [1.1.0] - 2/25/2025 +## [1.1.0] - 2025-02-25 - Added preference generation command -## [1.0.0] - 2/24/2025 +## [1.0.0] - 2025-02-24 - Initial release diff --git a/package-lock.json b/package-lock.json index 220ec4d..5d3bf45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,16 +8,17 @@ "name": "magebit-magento-toolbox", "version": "1.2.0", "dependencies": { + "@types/handlebars": "^4.1.0", "@vscode-elements/elements": "^1.11.0", "@xml-tools/ast": "^5.0.5", "@xml-tools/content-assist": "^3.1.11", "@xml-tools/parser": "^1.0.11", "@xml-tools/simple-schema": "^3.0.5", "@xml-tools/validation": "^1.0.16", - "ejs": "^3.1.10", "fast-xml-parser": "^4.5.1", "formik": "^2.4.6", "glob": "^11.0.1", + "handlebars": "^4.7.8", "indent-string": "^5.0.0", "lodash-es": "^4.17.21", "minimatch": "^10.0.1", @@ -31,7 +32,6 @@ "validatorjs": "^3.22.1" }, "devDependencies": { - "@types/ejs": "^3.1.5", "@types/lodash-es": "^4.17.12", "@types/mocha": "^10.0.10", "@types/node": "20.x", @@ -1028,18 +1028,21 @@ "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, - "node_modules/@types/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", - "dev": true - }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, + "node_modules/@types/handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", + "deprecated": "This is a stub types definition. handlebars provides its own type definitions, so you do not need this installed.", + "dependencies": { + "handlebars": "*" + } + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", @@ -2018,11 +2021,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -2308,6 +2306,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2323,6 +2322,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -2558,7 +2558,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/convert-source-map": { "version": "2.0.0", @@ -2920,20 +2921,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -3539,25 +3526,6 @@ "node": ">=16.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3902,6 +3870,26 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -3918,6 +3906,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -4716,43 +4705,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5242,7 +5194,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5463,6 +5414,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6960,6 +6916,14 @@ "node": ">=8.0.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -7605,6 +7569,18 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -8019,6 +7995,11 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", diff --git a/package.json b/package.json index bb1df31..f596acc 100644 --- a/package.json +++ b/package.json @@ -57,111 +57,143 @@ "commands": [ { "command": "magento-toolbox.generateModule", - "title": "Magento Toolbox: Generate Module" + "title": "Generate Module", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateBlock", - "title": "Magento Toolbox: Generate Block" + "title": "Generate Block", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.indexWorkspace", - "title": "Magento Toolbox: Index Workspace" + "title": "Index Workspace", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateContextPlugin", - "title": "Magento Toolbox: Generate Plugin" + "title": "Generate Plugin", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.copyMagentoPath", - "title": "Magento Toolbox: Copy Magento Path" + "title": "Copy Magento Path", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateXmlCatalog", - "title": "Magento Toolbox: Generate XML URN Catalog" + "title": "Generate XML URN Catalog", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateObserver", - "title": "Magento Toolbox: Generate Observer" + "title": "Generate Observer", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateEventsXml", - "title": "Magento Toolbox: Generate Events XML" + "title": "Generate Sample events.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateGraphqlSchemaFile", - "title": "Magento Toolbox: Generate GraphQL Schema File" + "title": "Generate Sample schema.graphqls", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateRoutesXmlFile", - "title": "Magento Toolbox: Generate Routes XML" + "title": "Generate Sample routes.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateAclXmlFile", - "title": "Magento Toolbox: Generate ACL XML" + "title": "Generate Sample acl.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateDiXmlFile", - "title": "Magento Toolbox: Generate DI XML" + "title": "Generate Sample di.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateWebapiXmlFile", - "title": "Magento Toolbox: Generate Webapi XML" + "title": "Generate Sample webapi.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generatePreference", - "title": "Magento Toolbox: Generate Preference" + "title": "Generate Preference", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateLayoutXmlFile", - "title": "Magento Toolbox: Generate Layout XML" + "title": "Generate Layout XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generatePageTypesXmlFile", - "title": "Magento Toolbox: Generate Page Types XML" + "title": "Generate Sample page_types.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateCrontabXmlFile", - "title": "Magento Toolbox: Generate Crontab XML" + "title": "Generate Sample crontab.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateEmailTemplatesXmlFile", - "title": "Magento Toolbox: Generate Email Templates XML" + "title": "Generate Sample email_templates.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateSectionsXmlFile", - "title": "Magento Toolbox: Generate Sections XML" + "title": "Generate Sample sections.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateFieldsetXmlFile", - "title": "Magento Toolbox: Generate Fieldset XML" + "title": "Generate Sample fieldset.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateViewXmlFile", - "title": "Magento Toolbox: Generate View XML" + "title": "Generate Sample view.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateIndexerXmlFile", - "title": "Magento Toolbox: Generate Indexer XML" + "title": "Generate Sample indexer.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateMviewXmlFile", - "title": "Magento Toolbox: Generate MVIEW XML" + "title": "Generate Sample mview.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateWidgetXmlFile", - "title": "Magento Toolbox: Generate Widget XML" + "title": "Generate Sample widget.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateExtensionAttributesXmlFile", - "title": "Magento Toolbox: Generate Extension Attributes XML" + "title": "Generate Sample extension_attributes.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateSystemXmlFile", - "title": "Magento Toolbox: Generate System XML" + "title": "Generate Sample system.xml", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateConfigXmlFile", - "title": "Magento Toolbox: Generate Config XML" + "title": "Generate Sample config.xml", + "category": "Magento Toolbox" + }, + { + "command": "magento-toolbox.jumpToModule", + "title": "Jump to Module", + "category": "Magento Toolbox" } ], "menus": { @@ -309,7 +341,6 @@ "deploy": "vsce publish" }, "devDependencies": { - "@types/ejs": "^3.1.5", "@types/lodash-es": "^4.17.12", "@types/mocha": "^10.0.10", "@types/node": "20.x", @@ -336,16 +367,17 @@ "vsce": "^2.15.0" }, "dependencies": { + "@types/handlebars": "^4.1.0", "@vscode-elements/elements": "^1.11.0", "@xml-tools/ast": "^5.0.5", "@xml-tools/content-assist": "^3.1.11", "@xml-tools/parser": "^1.0.11", "@xml-tools/simple-schema": "^3.0.5", "@xml-tools/validation": "^1.0.16", - "ejs": "^3.1.10", "fast-xml-parser": "^4.5.1", "formik": "^2.4.6", "glob": "^11.0.1", + "handlebars": "^4.7.8", "indent-string": "^5.0.0", "lodash-es": "^4.17.21", "minimatch": "^10.0.1", diff --git a/src/command/JumpToModuleCommand.ts b/src/command/JumpToModuleCommand.ts new file mode 100644 index 0000000..8d25e62 --- /dev/null +++ b/src/command/JumpToModuleCommand.ts @@ -0,0 +1,39 @@ +import { Command } from 'command/Command'; +import { window } from 'vscode'; +import IndexManager from 'indexer/IndexManager'; +import ModuleIndexer from 'indexer/module/ModuleIndexer'; +import { Uri } from 'vscode'; + +export default class JumpToModuleCommand extends Command { + constructor() { + super('magento-toolbox.jumpToModule'); + } + + public async execute(...args: any[]): Promise { + const moduleIndexData = IndexManager.getIndexData(ModuleIndexer.KEY); + + if (!moduleIndexData) { + window.showErrorMessage('Module index data not found'); + return; + } + + const moduleName = await window.showQuickPick(moduleIndexData.getModuleOptions(), { + placeHolder: 'Enter module name (e.g. Magento_Catalog)', + }); + + if (!moduleName) { + return; + } + + const module = moduleIndexData.getModule(moduleName.label); + + if (!module) { + window.showErrorMessage(`Module ${moduleName} not found`); + return; + } + + const moduleXmlPath = Uri.file(`${module.path}/etc/module.xml`); + + const document = await window.showTextDocument(moduleXmlPath); + } +} diff --git a/src/command/SimpleTemplateGeneratorCommand.ts b/src/command/SimpleTemplateGeneratorCommand.ts index d0837ee..d4cd512 100644 --- a/src/command/SimpleTemplateGeneratorCommand.ts +++ b/src/command/SimpleTemplateGeneratorCommand.ts @@ -1,6 +1,6 @@ import IndexManager from 'indexer/IndexManager'; import { Command } from './Command'; -import { Uri, window } from 'vscode'; +import { Uri, WorkspaceFolder } from 'vscode'; import ModuleIndexer from 'indexer/module/ModuleIndexer'; import FileGeneratorManager from 'generator/FileGeneratorManager'; import TemplateGenerator from 'generator/TemplateGenerator'; @@ -36,28 +36,50 @@ export abstract class SimpleTemplateGeneratorCommand extends Command { return data; } - public async execute(uri?: Uri): Promise { - const moduleIndex = IndexManager.getIndexData(ModuleIndexer.KEY); - let contextModule: string | undefined; + public async getWizardData(contextModule: string | undefined): Promise { + const wizard = new SimpleTemplateWizard(); + const data = await wizard.show( + this.getWizardTitle(), + contextModule, + this.getAreas(), + this.getWizardFields(), + this.getWizardValidation() + ); - const contextUri = uri || window.activeTextEditor?.document.uri; + return data; + } + + public getContextModule(contextUri: Uri | undefined): string | undefined { + if (!contextUri) { + return undefined; + } + + const moduleIndex = IndexManager.getIndexData(ModuleIndexer.KEY); if (moduleIndex && contextUri) { const module = moduleIndex.getModuleByUri(contextUri); if (module) { - contextModule = module.name; + return module.name; } } - const wizard = new SimpleTemplateWizard(); - const data = await wizard.show( - this.getWizardTitle(), - contextModule, - this.getAreas(), - this.getWizardFields(), - this.getWizardValidation() - ); + return undefined; + } + + protected getWorkspaceFolder(): WorkspaceFolder { + const workspaceFolder = Common.getActiveWorkspaceFolder(); + + if (!workspaceFolder) { + throw new Error('No active workspace folder'); + } + + return workspaceFolder; + } + + public async execute(uri?: Uri): Promise { + const contextModule = this.getContextModule(uri); + const data = await this.getWizardData(contextModule); const manager = new FileGeneratorManager([ new TemplateGenerator(this.getFilePath(data), this.getTemplateName(data), { @@ -66,12 +88,7 @@ export abstract class SimpleTemplateGeneratorCommand extends Command { }), ]); - const workspaceFolder = Common.getActiveWorkspaceFolder(); - - if (!workspaceFolder) { - window.showErrorMessage('No active workspace folder'); - return; - } + const workspaceFolder = this.getWorkspaceFolder(); await manager.generate(workspaceFolder.uri); await manager.writeFiles(); diff --git a/src/command/index.ts b/src/command/index.ts index aa4c2f2..16dc4fa 100644 --- a/src/command/index.ts +++ b/src/command/index.ts @@ -25,3 +25,4 @@ export { default as GenerateWidgetXmlFileCommand } from './GenerateWidgetXmlFile export { default as GenerateExtensionAttributesXmlFileCommand } from './GenerateExtensionAttributesXmlFileCommand'; export { default as GenerateSystemXmlFileCommand } from './GenerateSystemXmlFileCommand'; export { default as GenerateConfigXmlFileCommand } from './GenerateConfigXmlFileCommand'; +export { default as JumpToModuleCommand } from './JumpToModuleCommand'; diff --git a/src/generator/HandlebarsTemplateRenderer.ts b/src/generator/HandlebarsTemplateRenderer.ts new file mode 100644 index 0000000..2a8be58 --- /dev/null +++ b/src/generator/HandlebarsTemplateRenderer.ts @@ -0,0 +1,45 @@ +import { create } from 'handlebars'; +import { resolve } from 'path'; +import FileSystem from 'util/FileSystem'; +import { Uri } from 'vscode'; +import Logger from 'util/Logger'; + +export default class HandlebarsTemplateRenderer { + protected handlebars: typeof Handlebars; + + public constructor() { + this.handlebars = create(); + this.registerHelpers(); + this.registerPartials(); + } + + public async render(template: string, data?: Record): Promise { + try { + const templatePath = this.getTemplatePath(template); + const templateContent = await FileSystem.readFile(Uri.file(templatePath)); + const compiledTemplate = this.handlebars.compile(templateContent); + const content = compiledTemplate(data); + return content; + } catch (error) { + Logger.log('Failed to generate template', String(error)); + throw error; + } + } + + public getTemplatePath(templateName: string): string { + return resolve(FileSystem.getExtensionPath('templates/handlebars'), templateName + '.hbs'); + } + + protected registerHelpers(): void { + this.handlebars.registerHelper('ifeq', (a: string, b: string, options: any) => { + if (a === b) { + return options.fn(this); + } + return options.inverse(this); + }); + } + + protected registerPartials(): void { + this.handlebars.registerPartial('fileHeader', '{{#if fileHeader}}\n{{{fileHeader}}}\n{{/if}}'); + } +} diff --git a/src/generator/TemplateGenerator.ts b/src/generator/TemplateGenerator.ts index fe2f46d..d02b951 100644 --- a/src/generator/TemplateGenerator.ts +++ b/src/generator/TemplateGenerator.ts @@ -1,9 +1,11 @@ import { Uri } from 'vscode'; import FileGenerator from './FileGenerator'; import GeneratedFile from './GeneratedFile'; -import GenerateFromTemplate from './util/GenerateFromTemplate'; +import HandlebarsTemplateRenderer from './HandlebarsTemplateRenderer'; export default class TemplateGenerator extends FileGenerator { + protected renderer: HandlebarsTemplateRenderer | undefined; + public constructor( protected fileName: string, protected templateName: string, @@ -16,8 +18,20 @@ export default class TemplateGenerator extends FileGenerator { return this.data; } + protected getTemplateRenderer(): HandlebarsTemplateRenderer { + if (!this.renderer) { + this.renderer = new HandlebarsTemplateRenderer(); + } + + return this.renderer; + } + + protected getTemplateContent(): Promise { + return this.getTemplateRenderer().render(this.templateName, this.getTemplateData()); + } + public async generate(workspaceUri: Uri): Promise { - const content = await GenerateFromTemplate.generate(this.templateName, this.getTemplateData()); + const content = await this.getTemplateContent(); const path = Uri.joinPath(workspaceUri, this.fileName); return new GeneratedFile(path, content); diff --git a/src/generator/observer/ObserverEventsGenerator.ts b/src/generator/observer/ObserverEventsGenerator.ts index 4d1768b..09eac4d 100644 --- a/src/generator/observer/ObserverEventsGenerator.ts +++ b/src/generator/observer/ObserverEventsGenerator.ts @@ -1,15 +1,14 @@ import GeneratedFile from 'generator/GeneratedFile'; import FileGenerator from 'generator/FileGenerator'; -import GenerateFromTemplate from 'generator/util/GenerateFromTemplate'; import { Uri } from 'vscode'; import { ObserverWizardData } from 'wizard/ObserverWizard'; import indentString from 'indent-string'; import PhpNamespace from 'common/PhpNamespace'; import FindOrCreateEventsXml from 'generator/util/FindOrCreateEventsXml'; import Magento from 'util/Magento'; -import FileHeader from 'common/xml/FileHeader'; +import HandlebarsTemplateRenderer from 'generator/HandlebarsTemplateRenderer'; -export default class ObserverDiGenerator extends FileGenerator { +export default class ObserverEventsGenerator extends FileGenerator { public constructor(protected data: ObserverWizardData) { super(); } @@ -27,7 +26,9 @@ export default class ObserverDiGenerator extends FileGenerator { ); const insertPosition = this.getInsertPosition(eventsXml); - const observerXml = await GenerateFromTemplate.generate('xml/observer', { + const renderer = new HandlebarsTemplateRenderer(); + + const observerXml = await renderer.render('xml/observer', { name: this.data.observerName, className: observerNamespace.append(this.data.className).toString(), eventName: this.data.eventName, diff --git a/src/generator/plugin/PluginDiGenerator.ts b/src/generator/plugin/PluginDiGenerator.ts index e109da3..f2c60ff 100644 --- a/src/generator/plugin/PluginDiGenerator.ts +++ b/src/generator/plugin/PluginDiGenerator.ts @@ -1,7 +1,6 @@ import GeneratedFile from 'generator/GeneratedFile'; import FileGenerator from 'generator/FileGenerator'; import FindOrCreateDiXml from 'generator/util/FindOrCreateDiXml'; -import GenerateFromTemplate from 'generator/util/GenerateFromTemplate'; import { PhpClass } from 'parser/php/PhpClass'; import { PhpMethod } from 'parser/php/PhpMethod'; import { Uri } from 'vscode'; @@ -9,6 +8,7 @@ import { PluginContextWizardData } from 'wizard/PluginContextWizard'; import indentString from 'indent-string'; import { PhpInterface } from 'parser/php/PhpInterface'; import Magento from 'util/Magento'; +import HandlebarsTemplateRenderer from 'generator/HandlebarsTemplateRenderer'; export default class PluginDiGenerator extends FileGenerator { public constructor( @@ -31,7 +31,9 @@ export default class PluginDiGenerator extends FileGenerator { const diXml = await FindOrCreateDiXml.execute(workspaceUri, vendor, module, this.data.scope); const insertPosition = this.getInsertPosition(diXml); - const pluginXml = await GenerateFromTemplate.generate('xml/plugin', { + const renderer = new HandlebarsTemplateRenderer(); + + const pluginXml = await renderer.render('xml/plugin', { pluginName: this.data.name, pluginType: pluginType.toString(), sortOrder: this.data.sortOrder, diff --git a/src/generator/preference/PreferenceDiGenerator.ts b/src/generator/preference/PreferenceDiGenerator.ts index 1666527..43ab1d7 100644 --- a/src/generator/preference/PreferenceDiGenerator.ts +++ b/src/generator/preference/PreferenceDiGenerator.ts @@ -1,11 +1,11 @@ import GeneratedFile from 'generator/GeneratedFile'; import FindOrCreateDiXml from 'generator/util/FindOrCreateDiXml'; -import GenerateFromTemplate from 'generator/util/GenerateFromTemplate'; import { Uri } from 'vscode'; import { PreferenceWizardData } from 'wizard/PreferenceWizard'; import indentString from 'indent-string'; import Magento from 'util/Magento'; import FileGenerator from 'generator/FileGenerator'; +import HandlebarsTemplateRenderer from 'generator/HandlebarsTemplateRenderer'; export default class PreferenceDiGenerator extends FileGenerator { public constructor(protected data: PreferenceWizardData) { @@ -23,7 +23,9 @@ export default class PreferenceDiGenerator extends FileGenerator { const diXml = await FindOrCreateDiXml.execute(workspaceUri, vendor, module, this.data.area); const insertPosition = this.getInsertPosition(diXml); - const pluginXml = await GenerateFromTemplate.generate('xml/preference', { + const renderer = new HandlebarsTemplateRenderer(); + + const pluginXml = await renderer.render('xml/preference', { forClass: this.data.parentClass, typeClass: typeNamespace, }); diff --git a/src/generator/util/FindOrCreateDiXml.ts b/src/generator/util/FindOrCreateDiXml.ts index 6e16a1a..cf7ba7f 100644 --- a/src/generator/util/FindOrCreateDiXml.ts +++ b/src/generator/util/FindOrCreateDiXml.ts @@ -1,9 +1,9 @@ import { Uri } from 'vscode'; import FileSystem from 'util/FileSystem'; -import GenerateFromTemplate from './GenerateFromTemplate'; import FileHeader from 'common/xml/FileHeader'; import { MagentoScope } from 'types'; import Magento from 'util/Magento'; +import HandlebarsTemplateRenderer from '../HandlebarsTemplateRenderer'; export default class FindOrCreateDiXml { public static async execute( @@ -21,7 +21,9 @@ export default class FindOrCreateDiXml { const fileHeader = FileHeader.getHeader(module); - return await GenerateFromTemplate.generate('xml/blank-di', { + const renderer = new HandlebarsTemplateRenderer(); + + return await renderer.render('xml/blank-di', { fileHeader, }); } diff --git a/src/generator/util/FindOrCreateEventsXml.ts b/src/generator/util/FindOrCreateEventsXml.ts index 450ee5b..ffe7afc 100644 --- a/src/generator/util/FindOrCreateEventsXml.ts +++ b/src/generator/util/FindOrCreateEventsXml.ts @@ -1,8 +1,8 @@ import { Uri } from 'vscode'; import FileSystem from 'util/FileSystem'; -import GenerateFromTemplate from './GenerateFromTemplate'; import { MagentoScope } from 'types'; import FileHeader from 'common/xml/FileHeader'; +import HandlebarsTemplateRenderer from '../HandlebarsTemplateRenderer'; export default class FindOrCreateEventsXml { public static async execute( @@ -27,9 +27,11 @@ export default class FindOrCreateEventsXml { return await FileSystem.readFile(eventsFile); } + const renderer = new HandlebarsTemplateRenderer(); + const fileHeader = FileHeader.getHeader(`${vendor}_${module}`); - return await GenerateFromTemplate.generate('xml/blank-events', { + return await renderer.render('xml/blank-events', { fileHeader, }); } diff --git a/src/generator/util/GenerateFromTemplate.ts b/src/generator/util/GenerateFromTemplate.ts deleted file mode 100644 index 50dede4..0000000 --- a/src/generator/util/GenerateFromTemplate.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { render } from 'ejs'; -import { resolve } from 'path'; -import FileSystem from 'util/FileSystem'; -import Logger from 'util/Logger'; -import { Uri } from 'vscode'; - -export default class GenerateFromTemplate { - public static async generate(template: string, data?: any): Promise { - try { - const templatePath = this.getTemplatePath(template); - const templateContent = await FileSystem.readFile(Uri.file(templatePath)); - const content = render(templateContent, data); - return content; - } catch (error) { - console.error(error); - throw error; - } - } - - protected static getTemplatePath(templateName: string): string { - return resolve(FileSystem.getExtensionPath('templates'), templateName + '.ejs'); - } -} diff --git a/src/indexer/module/ModuleIndexData.ts b/src/indexer/module/ModuleIndexData.ts index b896a6c..2594aa4 100644 --- a/src/indexer/module/ModuleIndexData.ts +++ b/src/indexer/module/ModuleIndexData.ts @@ -13,8 +13,10 @@ export class ModuleIndexData extends AbstractIndexData { })); } - public getModule(name: string): Module | undefined { - return this.getValues().find(module => module.name === name); + public getModule(name: string, caseSensitive = false): Module | undefined { + return this.getValues().find(module => + caseSensitive ? module.name === name : module.name.toLowerCase() === name.toLowerCase() + ); } public getModuleByUri(uri: Uri, appOnly = true): Module | undefined { diff --git a/src/webview/components/Wizard/FieldRenderer.tsx b/src/webview/components/Wizard/FieldRenderer.tsx index 6375fea..7b31cd1 100644 --- a/src/webview/components/Wizard/FieldRenderer.tsx +++ b/src/webview/components/Wizard/FieldRenderer.tsx @@ -84,6 +84,7 @@ export const FieldRenderer: React.FC = ({ field, simple = false, prefix } = ({ field, simple = false, prefix } diff --git a/templates/graphqls/blank-schema.ejs b/templates/handlebars/graphql/blank-schema.hbs similarity index 100% rename from templates/graphqls/blank-schema.ejs rename to templates/handlebars/graphql/blank-schema.hbs diff --git a/templates/license/apache2.ejs b/templates/handlebars/license/apache2.hbs similarity index 100% rename from templates/license/apache2.ejs rename to templates/handlebars/license/apache2.hbs diff --git a/templates/license/gplv3.ejs b/templates/handlebars/license/gplv3.hbs similarity index 100% rename from templates/license/gplv3.ejs rename to templates/handlebars/license/gplv3.hbs diff --git a/templates/license/mit.ejs b/templates/handlebars/license/mit.hbs similarity index 95% rename from templates/license/mit.ejs rename to templates/handlebars/license/mit.hbs index 616f632..37338f8 100644 --- a/templates/license/mit.ejs +++ b/templates/handlebars/license/mit.hbs @@ -1,4 +1,4 @@ -Copyright © <%= year %>-present <%= copyright %> +Copyright © {{ year }}-present {{ copyright }} Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/templates/license/oslv3.ejs b/templates/handlebars/license/oslv3.hbs similarity index 100% rename from templates/license/oslv3.ejs rename to templates/handlebars/license/oslv3.hbs diff --git a/templates/handlebars/php/registration.hbs b/templates/handlebars/php/registration.hbs new file mode 100644 index 0000000..b5de9e8 --- /dev/null +++ b/templates/handlebars/php/registration.hbs @@ -0,0 +1,8 @@ + fileHeader}} +declare(strict_types=1); + +use Magento\Framework\Component\ComponentRegistrar; + +ComponentRegistrar::register(ComponentRegistrar::MODULE, '{{ vendor }}_{{ module }}', __DIR__); diff --git a/templates/xml/blank-acl.ejs b/templates/handlebars/xml/blank-acl.hbs similarity index 76% rename from templates/xml/blank-acl.ejs rename to templates/handlebars/xml/blank-acl.hbs index 724dbcf..472c5c9 100644 --- a/templates/xml/blank-acl.ejs +++ b/templates/handlebars/xml/blank-acl.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-config.ejs b/templates/handlebars/xml/blank-config.hbs similarity index 77% rename from templates/xml/blank-config.ejs rename to templates/handlebars/xml/blank-config.hbs index e09d979..5b89749 100644 --- a/templates/xml/blank-config.ejs +++ b/templates/handlebars/xml/blank-config.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-crontab.ejs b/templates/handlebars/xml/blank-crontab.hbs similarity index 77% rename from templates/xml/blank-crontab.ejs rename to templates/handlebars/xml/blank-crontab.hbs index 6ab66d2..d406adc 100644 --- a/templates/xml/blank-crontab.ejs +++ b/templates/handlebars/xml/blank-crontab.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-di.ejs b/templates/handlebars/xml/blank-di.hbs similarity index 77% rename from templates/xml/blank-di.ejs rename to templates/handlebars/xml/blank-di.hbs index aacdd53..4cd5ded 100644 --- a/templates/xml/blank-di.ejs +++ b/templates/handlebars/xml/blank-di.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-email-templates.ejs b/templates/handlebars/xml/blank-email-templates.hbs similarity index 78% rename from templates/xml/blank-email-templates.ejs rename to templates/handlebars/xml/blank-email-templates.hbs index 48df29e..ac165c7 100644 --- a/templates/xml/blank-email-templates.ejs +++ b/templates/handlebars/xml/blank-email-templates.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-events.ejs b/templates/handlebars/xml/blank-events.hbs similarity index 76% rename from templates/xml/blank-events.ejs rename to templates/handlebars/xml/blank-events.hbs index 888106d..7676f29 100644 --- a/templates/xml/blank-events.ejs +++ b/templates/handlebars/xml/blank-events.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-extension-attributes.ejs b/templates/handlebars/xml/blank-extension-attributes.hbs similarity index 78% rename from templates/xml/blank-extension-attributes.ejs rename to templates/handlebars/xml/blank-extension-attributes.hbs index c2a1913..d6aeda9 100644 --- a/templates/xml/blank-extension-attributes.ejs +++ b/templates/handlebars/xml/blank-extension-attributes.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-fieldset.ejs b/templates/handlebars/xml/blank-fieldset.hbs similarity index 79% rename from templates/xml/blank-fieldset.ejs rename to templates/handlebars/xml/blank-fieldset.hbs index ba00c6a..4f72168 100644 --- a/templates/xml/blank-fieldset.ejs +++ b/templates/handlebars/xml/blank-fieldset.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-indexer.ejs b/templates/handlebars/xml/blank-indexer.hbs similarity index 79% rename from templates/xml/blank-indexer.ejs rename to templates/handlebars/xml/blank-indexer.hbs index e2b1710..d114246 100644 --- a/templates/xml/blank-indexer.ejs +++ b/templates/handlebars/xml/blank-indexer.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/handlebars/xml/blank-layout.hbs b/templates/handlebars/xml/blank-layout.hbs new file mode 100644 index 0000000..07a1fe0 --- /dev/null +++ b/templates/handlebars/xml/blank-layout.hbs @@ -0,0 +1,5 @@ + +{{> fileHeader}} + + diff --git a/templates/xml/blank-mview.ejs b/templates/handlebars/xml/blank-mview.hbs similarity index 78% rename from templates/xml/blank-mview.ejs rename to templates/handlebars/xml/blank-mview.hbs index 6e2e3f8..c698820 100644 --- a/templates/xml/blank-mview.ejs +++ b/templates/handlebars/xml/blank-mview.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-page-types.ejs b/templates/handlebars/xml/blank-page-types.hbs similarity index 78% rename from templates/xml/blank-page-types.ejs rename to templates/handlebars/xml/blank-page-types.hbs index 90481c0..1f672dc 100644 --- a/templates/xml/blank-page-types.ejs +++ b/templates/handlebars/xml/blank-page-types.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} \ No newline at end of file diff --git a/templates/xml/blank-routes.ejs b/templates/handlebars/xml/blank-routes.hbs similarity index 51% rename from templates/xml/blank-routes.ejs rename to templates/handlebars/xml/blank-routes.hbs index 0f4a9fd..3b15c5e 100644 --- a/templates/xml/blank-routes.ejs +++ b/templates/handlebars/xml/blank-routes.hbs @@ -1,12 +1,10 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} - - - + + + diff --git a/templates/xml/blank-sections.ejs b/templates/handlebars/xml/blank-sections.hbs similarity index 79% rename from templates/xml/blank-sections.ejs rename to templates/handlebars/xml/blank-sections.hbs index 4b257fe..44e6081 100644 --- a/templates/xml/blank-sections.ejs +++ b/templates/handlebars/xml/blank-sections.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-system.ejs b/templates/handlebars/xml/blank-system.hbs similarity index 80% rename from templates/xml/blank-system.ejs rename to templates/handlebars/xml/blank-system.hbs index 734b6d7..1bdd740 100644 --- a/templates/xml/blank-system.ejs +++ b/templates/handlebars/xml/blank-system.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-view.ejs b/templates/handlebars/xml/blank-view.hbs similarity index 78% rename from templates/xml/blank-view.ejs rename to templates/handlebars/xml/blank-view.hbs index 47db023..42a84d7 100644 --- a/templates/xml/blank-view.ejs +++ b/templates/handlebars/xml/blank-view.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-webapi.ejs b/templates/handlebars/xml/blank-webapi.hbs similarity index 77% rename from templates/xml/blank-webapi.ejs rename to templates/handlebars/xml/blank-webapi.hbs index ee49872..9ca7cf9 100644 --- a/templates/xml/blank-webapi.ejs +++ b/templates/handlebars/xml/blank-webapi.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/xml/blank-widget.ejs b/templates/handlebars/xml/blank-widget.hbs similarity index 79% rename from templates/xml/blank-widget.ejs rename to templates/handlebars/xml/blank-widget.hbs index 87d0840..5ac5e51 100644 --- a/templates/xml/blank-widget.ejs +++ b/templates/handlebars/xml/blank-widget.hbs @@ -1,7 +1,5 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{> fileHeader}} diff --git a/templates/handlebars/xml/observer.hbs b/templates/handlebars/xml/observer.hbs new file mode 100644 index 0000000..faa7b81 --- /dev/null +++ b/templates/handlebars/xml/observer.hbs @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/handlebars/xml/plugin.hbs b/templates/handlebars/xml/plugin.hbs new file mode 100644 index 0000000..e9686dc --- /dev/null +++ b/templates/handlebars/xml/plugin.hbs @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/templates/handlebars/xml/preference.hbs b/templates/handlebars/xml/preference.hbs new file mode 100644 index 0000000..15a1e32 --- /dev/null +++ b/templates/handlebars/xml/preference.hbs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/php/registration.ejs b/templates/php/registration.ejs deleted file mode 100644 index 8a72226..0000000 --- a/templates/php/registration.ejs +++ /dev/null @@ -1,10 +0,0 @@ - -<%- fileHeader %> -<% } -%> -declare(strict_types=1); - -use Magento\Framework\Component\ComponentRegistrar; - -ComponentRegistrar::register(ComponentRegistrar::MODULE, '<%= vendor %>_<%= module %>', __DIR__); diff --git a/templates/xml/blank-layout.ejs b/templates/xml/blank-layout.ejs deleted file mode 100644 index c49adf8..0000000 --- a/templates/xml/blank-layout.ejs +++ /dev/null @@ -1,7 +0,0 @@ - -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> -layout="admin-1column"<% } %> - xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> - diff --git a/templates/xml/observer.ejs b/templates/xml/observer.ejs deleted file mode 100644 index 2c61f19..0000000 --- a/templates/xml/observer.ejs +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/xml/plugin.ejs b/templates/xml/plugin.ejs deleted file mode 100644 index 9fb18bd..0000000 --- a/templates/xml/plugin.ejs +++ /dev/null @@ -1,4 +0,0 @@ - - sortOrder="<%= sortOrder %>" <% } %>/> - \ No newline at end of file diff --git a/templates/xml/preference.ejs b/templates/xml/preference.ejs deleted file mode 100644 index 183dc4f..0000000 --- a/templates/xml/preference.ejs +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file