From 56d3157e8f2347fb96bf77859148c6c3f7f48f29 Mon Sep 17 00:00:00 2001 From: raideer Date: Thu, 13 Mar 2025 19:09:27 +0200 Subject: [PATCH 01/12] 1.2.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d677bfc..4ae7bdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "magebit-magento-toolbox", - "version": "1.1.3", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "magebit-magento-toolbox", - "version": "1.1.3", + "version": "1.2.0", "dependencies": { "@vscode-elements/elements": "^1.11.0", "@xml-tools/ast": "^5.0.5", diff --git a/package.json b/package.json index badc522..1a6ff2a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Magento 2 code generation, inspection and utility tools", "publisher": "magebit", "icon": "resources/logo.jpg", - "version": "1.1.3", + "version": "1.2.0", "engines": { "vscode": "^1.93.1" }, From 38fcbeb36960e8129018093a3f5e20f835f2e6e3 Mon Sep 17 00:00:00 2001 From: raideer Date: Thu, 13 Mar 2025 19:10:50 +0200 Subject: [PATCH 02/12] chore: added vsce --- package-lock.json | 943 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + 2 files changed, 919 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ae7bdf..220ec4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "@typescript-eslint/parser": "^8.17.0", "@vscode/test-cli": "^0.0.10", "@vscode/test-electron": "^2.4.1", + "@vscode/vsce": "^3.2.2", "esbuild": "^0.25.0", "eslint": "^9.16.0", "eslint-config-prettier": "^10.0.1", @@ -60,6 +61,166 @@ "vscode": "^1.93.1" } }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "dev": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.3.tgz", + "integrity": "sha512-/wGw8fJ4mdpJ1Cum7s1S+VQyXt1ihwKLzfabS1O/RDADnmzVc01dHn44qD0BvGH6KlZNzOMW95tEpKqhkCChPA==", + "dev": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.19.1.tgz", + "integrity": "sha512-zHeoI3NCs53lLBbWNzQycjnYKsA1CVKlnzSNuSFcUDwBp8HHVObePxrM7HaX+Ha5Ks639H7chNC9HOaIhNS03w==", + "dev": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", + "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", + "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "dev": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.8.0.tgz", + "integrity": "sha512-l9ALUGHtFB/JfsqmA+9iYAp2a+cCwdNO/cyIr2y7nJLJsz1aae6qVP8XxT7Kbudg0IQRSIMXj0+iivFdbD1xPA==", + "dev": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.2.3", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^10.1.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", + "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.7.0.tgz", + "integrity": "sha512-H4AIPhIQVe1qW4+BJaitqod6UGQiXE3juj7q2ZBsOPjuZicQaqcbnBp2gCroF/icS0+TJ9rGuyCBJbjlAqVOGA==", + "dev": true, + "dependencies": { + "@azure/msal-common": "15.2.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.2.1.tgz", + "integrity": "sha512-eZHtYE5OHDN0o2NahCENkczQ6ffGc0MoUSAI3hpwGpZBHJXaEQMMZPWtIx86da2L9w7uT+Tr/xgJbGwIkvTZTQ==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.3.0.tgz", + "integrity": "sha512-ulsT3EHF1RQ29X55cxBLgKsIKWni9JdbUqG7sipGVP4uhWcBpmm/vhKOMH340+27Acm9+kHGnN/5XmQ5LrIDgA==", + "dev": true, + "dependencies": { + "@azure/msal-common": "15.2.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -1262,45 +1423,408 @@ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/test-cli/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz", + "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^7.0.1", + "semver": "^7.6.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/vsce": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.2.2.tgz", + "integrity": "sha512-4TqdUq/yKlQTHcQMk/DamR632bq/+IJDomSbexOMee/UAYWqYm0XHWA6scGslsCpzY+sCWEhhl0nqdOB0XW1kw==", + "dev": true, + "dependencies": { + "@azure/identity": "^4.1.0", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "form-data": "^4.0.0", + "glob": "^11.0.0", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^14.1.0", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.3", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce-sign": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.5.tgz", + "integrity": "sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q==", + "dev": true, + "hasInstallScript": true, + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.2", + "@vscode/vsce-sign-alpine-x64": "2.0.2", + "@vscode/vsce-sign-darwin-arm64": "2.0.2", + "@vscode/vsce-sign-darwin-x64": "2.0.2", + "@vscode/vsce-sign-linux-arm": "2.0.2", + "@vscode/vsce-sign-linux-arm64": "2.0.2", + "@vscode/vsce-sign-linux-x64": "2.0.2", + "@vscode/vsce-sign-win32-arm64": "2.0.2", + "@vscode/vsce-sign-win32-x64": "2.0.2" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz", + "integrity": "sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz", + "integrity": "sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz", + "integrity": "sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz", + "integrity": "sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz", + "integrity": "sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz", + "integrity": "sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz", + "integrity": "sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz", + "integrity": "sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz", + "integrity": "sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/@vscode/vsce/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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@vscode/vsce/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@vscode/vsce/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@vscode/vsce/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/@vscode/vsce/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce/node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/@vscode/vsce/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, + "node_modules/@vscode/vsce/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, - "node_modules/@vscode/test-cli/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/@vscode/vsce/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/@vscode/test-electron": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz", - "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", + "node_modules/@vscode/vsce/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, + "node_modules/@vscode/vsce/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "dependencies": { - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "jszip": "^3.10.1", - "ora": "^7.0.1", - "semver": "^7.6.2" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "engines": { - "node": ">=16" + "node": ">=4.0.0" } }, "node_modules/@xml-tools/ast": { @@ -1508,6 +2032,12 @@ "node": ">= 0.4" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1660,6 +2190,27 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/c8": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", @@ -1958,6 +2509,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true, + "engines": { + "node": ">=16" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1974,6 +2534,18 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -2164,6 +2736,34 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -2181,6 +2781,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -2198,6 +2810,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -2290,6 +2911,15 @@ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -2800,6 +3430,15 @@ "node": ">=0.10.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -3005,6 +3644,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/formik": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz", @@ -3673,6 +4327,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3735,6 +4404,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -3941,6 +4628,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4087,6 +4789,55 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -4105,6 +4856,27 @@ "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", @@ -4240,12 +5012,54 @@ "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -4368,6 +5182,27 @@ "node": ">=4" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -4962,6 +5797,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5411,6 +6264,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -5697,6 +6559,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6133,6 +7007,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6781,6 +7665,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", diff --git a/package.json b/package.json index 1a6ff2a..bb1df31 100644 --- a/package.json +++ b/package.json @@ -323,6 +323,7 @@ "@typescript-eslint/parser": "^8.17.0", "@vscode/test-cli": "^0.0.10", "@vscode/test-electron": "^2.4.1", + "@vscode/vsce": "^3.2.2", "esbuild": "^0.25.0", "eslint": "^9.16.0", "eslint-config-prettier": "^10.0.1", From 820daca4c3610964665e5850404ba82131c9f554 Mon Sep 17 00:00:00 2001 From: raideer Date: Thu, 13 Mar 2025 20:33:58 +0200 Subject: [PATCH 03/12] chore: migrate to handlebars --- package-lock.json | 151 ++++++++---------- package.json | 4 +- src/generator/util/GenerateFromTemplate.ts | 29 +++- .../graphql/blank-schema.hbs} | 0 .../license/apache2.hbs} | 0 .../license/gplv3.hbs} | 0 .../mit.ejs => handlebars/license/mit.hbs} | 2 +- .../license/oslv3.hbs} | 0 templates/handlebars/php/registration.hbs | 8 + .../xml/blank-acl.hbs} | 4 +- .../xml/blank-config.hbs} | 4 +- .../xml/blank-crontab.hbs} | 4 +- .../xml/blank-di.hbs} | 4 +- .../xml/blank-email-templates.hbs} | 4 +- .../xml/blank-events.hbs} | 4 +- .../xml/blank-extension-attributes.hbs} | 4 +- .../xml/blank-fieldset.hbs} | 4 +- .../xml/blank-indexer.hbs} | 4 +- templates/handlebars/xml/blank-layout.hbs | 5 + .../xml/blank-mview.hbs} | 4 +- .../xml/blank-page-types.hbs} | 4 +- .../xml/blank-routes.hbs} | 10 +- .../xml/blank-sections.hbs} | 4 +- .../xml/blank-system.hbs} | 4 +- .../xml/blank-view.hbs} | 4 +- .../xml/blank-webapi.hbs} | 6 +- .../xml/blank-widget.hbs} | 4 +- templates/handlebars/xml/observer.hbs | 3 + templates/handlebars/xml/plugin.hbs | 4 + templates/handlebars/xml/preference.hbs | 1 + templates/php/registration.ejs | 10 -- templates/xml/blank-layout.ejs | 7 - templates/xml/observer.ejs | 3 - templates/xml/plugin.ejs | 4 - templates/xml/preference.ejs | 1 - 35 files changed, 135 insertions(+), 173 deletions(-) rename templates/{graphqls/blank-schema.ejs => handlebars/graphql/blank-schema.hbs} (100%) rename templates/{license/apache2.ejs => handlebars/license/apache2.hbs} (100%) rename templates/{license/gplv3.ejs => handlebars/license/gplv3.hbs} (100%) rename templates/{license/mit.ejs => handlebars/license/mit.hbs} (95%) rename templates/{license/oslv3.ejs => handlebars/license/oslv3.hbs} (100%) create mode 100644 templates/handlebars/php/registration.hbs rename templates/{xml/blank-acl.ejs => handlebars/xml/blank-acl.hbs} (76%) rename templates/{xml/blank-config.ejs => handlebars/xml/blank-config.hbs} (77%) rename templates/{xml/blank-crontab.ejs => handlebars/xml/blank-crontab.hbs} (77%) rename templates/{xml/blank-di.ejs => handlebars/xml/blank-di.hbs} (77%) rename templates/{xml/blank-email-templates.ejs => handlebars/xml/blank-email-templates.hbs} (78%) rename templates/{xml/blank-events.ejs => handlebars/xml/blank-events.hbs} (76%) rename templates/{xml/blank-extension-attributes.ejs => handlebars/xml/blank-extension-attributes.hbs} (78%) rename templates/{xml/blank-fieldset.ejs => handlebars/xml/blank-fieldset.hbs} (79%) rename templates/{xml/blank-indexer.ejs => handlebars/xml/blank-indexer.hbs} (79%) create mode 100644 templates/handlebars/xml/blank-layout.hbs rename templates/{xml/blank-mview.ejs => handlebars/xml/blank-mview.hbs} (78%) rename templates/{xml/blank-page-types.ejs => handlebars/xml/blank-page-types.hbs} (78%) rename templates/{xml/blank-routes.ejs => handlebars/xml/blank-routes.hbs} (51%) rename templates/{xml/blank-sections.ejs => handlebars/xml/blank-sections.hbs} (79%) rename templates/{xml/blank-system.ejs => handlebars/xml/blank-system.hbs} (80%) rename templates/{xml/blank-view.ejs => handlebars/xml/blank-view.hbs} (78%) rename templates/{xml/blank-webapi.ejs => handlebars/xml/blank-webapi.hbs} (77%) rename templates/{xml/blank-widget.ejs => handlebars/xml/blank-widget.hbs} (79%) create mode 100644 templates/handlebars/xml/observer.hbs create mode 100644 templates/handlebars/xml/plugin.hbs create mode 100644 templates/handlebars/xml/preference.hbs delete mode 100644 templates/php/registration.ejs delete mode 100644 templates/xml/blank-layout.ejs delete mode 100644 templates/xml/observer.ejs delete mode 100644 templates/xml/plugin.ejs delete mode 100644 templates/xml/preference.ejs 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..c235653 100644 --- a/package.json +++ b/package.json @@ -309,7 +309,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 +335,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/generator/util/GenerateFromTemplate.ts b/src/generator/util/GenerateFromTemplate.ts index 50dede4..ce3d573 100644 --- a/src/generator/util/GenerateFromTemplate.ts +++ b/src/generator/util/GenerateFromTemplate.ts @@ -1,23 +1,40 @@ -import { render } from 'ejs'; +import { create } from 'handlebars'; import { resolve } from 'path'; import FileSystem from 'util/FileSystem'; -import Logger from 'util/Logger'; import { Uri } from 'vscode'; +import Logger from 'util/Logger'; export default class GenerateFromTemplate { - public static async generate(template: string, data?: any): Promise { + public static async generate(template: string, data?: Record): Promise { try { const templatePath = this.getTemplatePath(template); const templateContent = await FileSystem.readFile(Uri.file(templatePath)); - const content = render(templateContent, data); + const handlebars = create(); + this.registerHelpers(handlebars); + this.registerPartials(handlebars); + const compiledTemplate = handlebars.compile(templateContent); + const content = compiledTemplate(data); return content; } catch (error) { - console.error(error); + Logger.log('Failed to generate template', String(error)); throw error; } } protected static getTemplatePath(templateName: string): string { - return resolve(FileSystem.getExtensionPath('templates'), templateName + '.ejs'); + return resolve(FileSystem.getExtensionPath('templates/handlebars'), templateName + '.hbs'); + } + + protected static registerHelpers(handlebars: typeof Handlebars): void { + handlebars.registerHelper('ifeq', (a: string, b: string, options: any) => { + if (a === b) { + return options.fn(this); + } + return options.inverse(this); + }); + } + + protected static registerPartials(handlebars: typeof Handlebars): void { + handlebars.registerPartial('fileHeader', '{{#if fileHeader}}\n{{{fileHeader}}}\n{{/if}}'); } } 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..d21212d 100644 --- a/templates/xml/blank-webapi.ejs +++ b/templates/handlebars/xml/blank-webapi.hbs @@ -1,7 +1,7 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{#if fileHeader}} +{{{ fileHeader }}} +{{/if}} 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 From 053b92c5470f7549f136b482c5c0ca5dc10123d0 Mon Sep 17 00:00:00 2001 From: raideer Date: Thu, 13 Mar 2025 20:35:36 +0200 Subject: [PATCH 04/12] chore: use partial --- templates/handlebars/xml/blank-webapi.hbs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/templates/handlebars/xml/blank-webapi.hbs b/templates/handlebars/xml/blank-webapi.hbs index d21212d..9ca7cf9 100644 --- a/templates/handlebars/xml/blank-webapi.hbs +++ b/templates/handlebars/xml/blank-webapi.hbs @@ -1,7 +1,5 @@ -{{#if fileHeader}} -{{{ fileHeader }}} -{{/if}} +{{> fileHeader}} From 71d3cf62eafc9c4cb0a12aa801dc89371702adac Mon Sep 17 00:00:00 2001 From: raideer Date: Thu, 13 Mar 2025 20:33:58 +0200 Subject: [PATCH 05/12] chore: migrate to handlebars --- package-lock.json | 151 ++++++++---------- package.json | 4 +- src/generator/util/GenerateFromTemplate.ts | 29 +++- .../graphql/blank-schema.hbs} | 0 .../license/apache2.hbs} | 0 .../license/gplv3.hbs} | 0 .../mit.ejs => handlebars/license/mit.hbs} | 2 +- .../license/oslv3.hbs} | 0 templates/handlebars/php/registration.hbs | 8 + .../xml/blank-acl.hbs} | 4 +- .../xml/blank-config.hbs} | 4 +- .../xml/blank-crontab.hbs} | 4 +- .../xml/blank-di.hbs} | 4 +- .../xml/blank-email-templates.hbs} | 4 +- .../xml/blank-events.hbs} | 4 +- .../xml/blank-extension-attributes.hbs} | 4 +- .../xml/blank-fieldset.hbs} | 4 +- .../xml/blank-indexer.hbs} | 4 +- templates/handlebars/xml/blank-layout.hbs | 5 + .../xml/blank-mview.hbs} | 4 +- .../xml/blank-page-types.hbs} | 4 +- .../xml/blank-routes.hbs} | 10 +- .../xml/blank-sections.hbs} | 4 +- .../xml/blank-system.hbs} | 4 +- .../xml/blank-view.hbs} | 4 +- .../xml/blank-webapi.hbs} | 6 +- .../xml/blank-widget.hbs} | 4 +- templates/handlebars/xml/observer.hbs | 3 + templates/handlebars/xml/plugin.hbs | 4 + templates/handlebars/xml/preference.hbs | 1 + templates/php/registration.ejs | 10 -- templates/xml/blank-layout.ejs | 7 - templates/xml/observer.ejs | 3 - templates/xml/plugin.ejs | 4 - templates/xml/preference.ejs | 1 - 35 files changed, 135 insertions(+), 173 deletions(-) rename templates/{graphqls/blank-schema.ejs => handlebars/graphql/blank-schema.hbs} (100%) rename templates/{license/apache2.ejs => handlebars/license/apache2.hbs} (100%) rename templates/{license/gplv3.ejs => handlebars/license/gplv3.hbs} (100%) rename templates/{license/mit.ejs => handlebars/license/mit.hbs} (95%) rename templates/{license/oslv3.ejs => handlebars/license/oslv3.hbs} (100%) create mode 100644 templates/handlebars/php/registration.hbs rename templates/{xml/blank-acl.ejs => handlebars/xml/blank-acl.hbs} (76%) rename templates/{xml/blank-config.ejs => handlebars/xml/blank-config.hbs} (77%) rename templates/{xml/blank-crontab.ejs => handlebars/xml/blank-crontab.hbs} (77%) rename templates/{xml/blank-di.ejs => handlebars/xml/blank-di.hbs} (77%) rename templates/{xml/blank-email-templates.ejs => handlebars/xml/blank-email-templates.hbs} (78%) rename templates/{xml/blank-events.ejs => handlebars/xml/blank-events.hbs} (76%) rename templates/{xml/blank-extension-attributes.ejs => handlebars/xml/blank-extension-attributes.hbs} (78%) rename templates/{xml/blank-fieldset.ejs => handlebars/xml/blank-fieldset.hbs} (79%) rename templates/{xml/blank-indexer.ejs => handlebars/xml/blank-indexer.hbs} (79%) create mode 100644 templates/handlebars/xml/blank-layout.hbs rename templates/{xml/blank-mview.ejs => handlebars/xml/blank-mview.hbs} (78%) rename templates/{xml/blank-page-types.ejs => handlebars/xml/blank-page-types.hbs} (78%) rename templates/{xml/blank-routes.ejs => handlebars/xml/blank-routes.hbs} (51%) rename templates/{xml/blank-sections.ejs => handlebars/xml/blank-sections.hbs} (79%) rename templates/{xml/blank-system.ejs => handlebars/xml/blank-system.hbs} (80%) rename templates/{xml/blank-view.ejs => handlebars/xml/blank-view.hbs} (78%) rename templates/{xml/blank-webapi.ejs => handlebars/xml/blank-webapi.hbs} (77%) rename templates/{xml/blank-widget.ejs => handlebars/xml/blank-widget.hbs} (79%) create mode 100644 templates/handlebars/xml/observer.hbs create mode 100644 templates/handlebars/xml/plugin.hbs create mode 100644 templates/handlebars/xml/preference.hbs delete mode 100644 templates/php/registration.ejs delete mode 100644 templates/xml/blank-layout.ejs delete mode 100644 templates/xml/observer.ejs delete mode 100644 templates/xml/plugin.ejs delete mode 100644 templates/xml/preference.ejs 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..c235653 100644 --- a/package.json +++ b/package.json @@ -309,7 +309,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 +335,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/generator/util/GenerateFromTemplate.ts b/src/generator/util/GenerateFromTemplate.ts index 50dede4..ce3d573 100644 --- a/src/generator/util/GenerateFromTemplate.ts +++ b/src/generator/util/GenerateFromTemplate.ts @@ -1,23 +1,40 @@ -import { render } from 'ejs'; +import { create } from 'handlebars'; import { resolve } from 'path'; import FileSystem from 'util/FileSystem'; -import Logger from 'util/Logger'; import { Uri } from 'vscode'; +import Logger from 'util/Logger'; export default class GenerateFromTemplate { - public static async generate(template: string, data?: any): Promise { + public static async generate(template: string, data?: Record): Promise { try { const templatePath = this.getTemplatePath(template); const templateContent = await FileSystem.readFile(Uri.file(templatePath)); - const content = render(templateContent, data); + const handlebars = create(); + this.registerHelpers(handlebars); + this.registerPartials(handlebars); + const compiledTemplate = handlebars.compile(templateContent); + const content = compiledTemplate(data); return content; } catch (error) { - console.error(error); + Logger.log('Failed to generate template', String(error)); throw error; } } protected static getTemplatePath(templateName: string): string { - return resolve(FileSystem.getExtensionPath('templates'), templateName + '.ejs'); + return resolve(FileSystem.getExtensionPath('templates/handlebars'), templateName + '.hbs'); + } + + protected static registerHelpers(handlebars: typeof Handlebars): void { + handlebars.registerHelper('ifeq', (a: string, b: string, options: any) => { + if (a === b) { + return options.fn(this); + } + return options.inverse(this); + }); + } + + protected static registerPartials(handlebars: typeof Handlebars): void { + handlebars.registerPartial('fileHeader', '{{#if fileHeader}}\n{{{fileHeader}}}\n{{/if}}'); } } 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..d21212d 100644 --- a/templates/xml/blank-webapi.ejs +++ b/templates/handlebars/xml/blank-webapi.hbs @@ -1,7 +1,7 @@ -<% if (fileHeader) { -%> -<%- fileHeader %> -<% } -%> +{{#if fileHeader}} +{{{ fileHeader }}} +{{/if}} 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 From 8d86a36a1f0b9cffbb20c182dac8b08f9f87f3bf Mon Sep 17 00:00:00 2001 From: raideer Date: Thu, 13 Mar 2025 20:35:36 +0200 Subject: [PATCH 06/12] chore: use partial --- templates/handlebars/xml/blank-webapi.hbs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/templates/handlebars/xml/blank-webapi.hbs b/templates/handlebars/xml/blank-webapi.hbs index d21212d..9ca7cf9 100644 --- a/templates/handlebars/xml/blank-webapi.hbs +++ b/templates/handlebars/xml/blank-webapi.hbs @@ -1,7 +1,5 @@ -{{#if fileHeader}} -{{{ fileHeader }}} -{{/if}} +{{> fileHeader}} From 6bae36dbcd7e7684b506a4906a1bd04f5e1b8e92 Mon Sep 17 00:00:00 2001 From: raideer Date: Fri, 14 Mar 2025 21:16:41 +0200 Subject: [PATCH 07/12] feat: jump to module command; added basic cursorrule for command generation --- .cursor/rules/commands.mdc | 9 +++ package.json | 86 ++++++++++++++++++--------- src/command/JumpToModuleCommand.ts | 39 ++++++++++++ src/command/index.ts | 1 + src/indexer/module/ModuleIndexData.ts | 6 +- 5 files changed, 112 insertions(+), 29 deletions(-) create mode 100644 .cursor/rules/commands.mdc create mode 100644 src/command/JumpToModuleCommand.ts diff --git a/.cursor/rules/commands.mdc b/.cursor/rules/commands.mdc new file mode 100644 index 0000000..11b33a8 --- /dev/null +++ b/.cursor/rules/commands.mdc @@ -0,0 +1,9 @@ +--- +description: Describes how to create and register new commands +globs: +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 +- 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/package.json b/package.json index c235653..b39a6c2 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 Events XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateGraphqlSchemaFile", - "title": "Magento Toolbox: Generate GraphQL Schema File" + "title": "Generate GraphQL Schema File", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateRoutesXmlFile", - "title": "Magento Toolbox: Generate Routes XML" + "title": "Generate Routes XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateAclXmlFile", - "title": "Magento Toolbox: Generate ACL XML" + "title": "Generate ACL XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateDiXmlFile", - "title": "Magento Toolbox: Generate DI XML" + "title": "Generate DI XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateWebapiXmlFile", - "title": "Magento Toolbox: Generate Webapi XML" + "title": "Generate 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 Page Types XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateCrontabXmlFile", - "title": "Magento Toolbox: Generate Crontab XML" + "title": "Generate Crontab XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateEmailTemplatesXmlFile", - "title": "Magento Toolbox: Generate Email Templates XML" + "title": "Generate Email Templates XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateSectionsXmlFile", - "title": "Magento Toolbox: Generate Sections XML" + "title": "Generate Sections XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateFieldsetXmlFile", - "title": "Magento Toolbox: Generate Fieldset XML" + "title": "Generate Fieldset XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateViewXmlFile", - "title": "Magento Toolbox: Generate View XML" + "title": "Generate View XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateIndexerXmlFile", - "title": "Magento Toolbox: Generate Indexer XML" + "title": "Generate Indexer XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateMviewXmlFile", - "title": "Magento Toolbox: Generate MVIEW XML" + "title": "Generate MVIEW XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateWidgetXmlFile", - "title": "Magento Toolbox: Generate Widget XML" + "title": "Generate Widget XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateExtensionAttributesXmlFile", - "title": "Magento Toolbox: Generate Extension Attributes XML" + "title": "Generate Extension Attributes XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateSystemXmlFile", - "title": "Magento Toolbox: Generate System XML" + "title": "Generate System XML", + "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateConfigXmlFile", - "title": "Magento Toolbox: Generate Config XML" + "title": "Generate Config XML", + "category": "Magento Toolbox" + }, + { + "command": "magento-toolbox.jumpToModule", + "title": "Jump to Module", + "category": "Magento Toolbox" } ], "menus": { 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/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/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 { From 234fd62df1f03cf383f3c6f6f755b4b28d6254fb Mon Sep 17 00:00:00 2001 From: raideer Date: Fri, 14 Mar 2025 22:05:58 +0200 Subject: [PATCH 08/12] chore: refactoring; adjusted cursorrules --- .cursor/rules/commands.mdc | 5 +- .cursor/rules/tests.mdc | 11 ++++ src/command/SimpleTemplateGeneratorCommand.ts | 57 ++++++++++++------- ...plate.ts => HandlebarsTemplateRenderer.ts} | 27 +++++---- src/generator/TemplateGenerator.ts | 18 +++++- .../observer/ObserverEventsGenerator.ts | 9 +-- src/generator/plugin/PluginDiGenerator.ts | 6 +- .../preference/PreferenceDiGenerator.ts | 6 +- src/generator/util/FindOrCreateDiXml.ts | 6 +- src/generator/util/FindOrCreateEventsXml.ts | 6 +- 10 files changed, 104 insertions(+), 47 deletions(-) create mode 100644 .cursor/rules/tests.mdc rename src/generator/{util/GenerateFromTemplate.ts => HandlebarsTemplateRenderer.ts} (50%) diff --git a/.cursor/rules/commands.mdc b/.cursor/rules/commands.mdc index 11b33a8..a27f087 100644 --- a/.cursor/rules/commands.mdc +++ b/.cursor/rules/commands.mdc @@ -1,9 +1,10 @@ --- description: Describes how to create and register new commands -globs: +globs: src/command/*.ts alwaysApply: false --- -- Commands are located in src/command directory +- 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/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/generator/util/GenerateFromTemplate.ts b/src/generator/HandlebarsTemplateRenderer.ts similarity index 50% rename from src/generator/util/GenerateFromTemplate.ts rename to src/generator/HandlebarsTemplateRenderer.ts index ce3d573..2a8be58 100644 --- a/src/generator/util/GenerateFromTemplate.ts +++ b/src/generator/HandlebarsTemplateRenderer.ts @@ -4,15 +4,20 @@ import FileSystem from 'util/FileSystem'; import { Uri } from 'vscode'; import Logger from 'util/Logger'; -export default class GenerateFromTemplate { - public static async generate(template: string, data?: Record): Promise { +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 handlebars = create(); - this.registerHelpers(handlebars); - this.registerPartials(handlebars); - const compiledTemplate = handlebars.compile(templateContent); + const compiledTemplate = this.handlebars.compile(templateContent); const content = compiledTemplate(data); return content; } catch (error) { @@ -21,12 +26,12 @@ export default class GenerateFromTemplate { } } - protected static getTemplatePath(templateName: string): string { + public getTemplatePath(templateName: string): string { return resolve(FileSystem.getExtensionPath('templates/handlebars'), templateName + '.hbs'); } - protected static registerHelpers(handlebars: typeof Handlebars): void { - handlebars.registerHelper('ifeq', (a: string, b: string, options: any) => { + protected registerHelpers(): void { + this.handlebars.registerHelper('ifeq', (a: string, b: string, options: any) => { if (a === b) { return options.fn(this); } @@ -34,7 +39,7 @@ export default class GenerateFromTemplate { }); } - protected static registerPartials(handlebars: typeof Handlebars): void { - handlebars.registerPartial('fileHeader', '{{#if fileHeader}}\n{{{fileHeader}}}\n{{/if}}'); + 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, }); } From 81acaa48bf5ca60a0c8d23b89cc4a44f502e21f8 Mon Sep 17 00:00:00 2001 From: raideer Date: Fri, 14 Mar 2025 22:08:55 +0200 Subject: [PATCH 09/12] chore: updated sample command names --- package.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index b39a6c2..f596acc 100644 --- a/package.json +++ b/package.json @@ -92,32 +92,32 @@ }, { "command": "magento-toolbox.generateEventsXml", - "title": "Generate Events XML", + "title": "Generate Sample events.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateGraphqlSchemaFile", - "title": "Generate GraphQL Schema File", + "title": "Generate Sample schema.graphqls", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateRoutesXmlFile", - "title": "Generate Routes XML", + "title": "Generate Sample routes.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateAclXmlFile", - "title": "Generate ACL XML", + "title": "Generate Sample acl.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateDiXmlFile", - "title": "Generate DI XML", + "title": "Generate Sample di.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateWebapiXmlFile", - "title": "Generate Webapi XML", + "title": "Generate Sample webapi.xml", "category": "Magento Toolbox" }, { @@ -132,62 +132,62 @@ }, { "command": "magento-toolbox.generatePageTypesXmlFile", - "title": "Generate Page Types XML", + "title": "Generate Sample page_types.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateCrontabXmlFile", - "title": "Generate Crontab XML", + "title": "Generate Sample crontab.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateEmailTemplatesXmlFile", - "title": "Generate Email Templates XML", + "title": "Generate Sample email_templates.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateSectionsXmlFile", - "title": "Generate Sections XML", + "title": "Generate Sample sections.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateFieldsetXmlFile", - "title": "Generate Fieldset XML", + "title": "Generate Sample fieldset.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateViewXmlFile", - "title": "Generate View XML", + "title": "Generate Sample view.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateIndexerXmlFile", - "title": "Generate Indexer XML", + "title": "Generate Sample indexer.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateMviewXmlFile", - "title": "Generate MVIEW XML", + "title": "Generate Sample mview.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateWidgetXmlFile", - "title": "Generate Widget XML", + "title": "Generate Sample widget.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateExtensionAttributesXmlFile", - "title": "Generate Extension Attributes XML", + "title": "Generate Sample extension_attributes.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateSystemXmlFile", - "title": "Generate System XML", + "title": "Generate Sample system.xml", "category": "Magento Toolbox" }, { "command": "magento-toolbox.generateConfigXmlFile", - "title": "Generate Config XML", + "title": "Generate Sample config.xml", "category": "Magento Toolbox" }, { From 24282c25c47a6aa30cbac7028940dfce31120a6e Mon Sep 17 00:00:00 2001 From: raideer Date: Fri, 14 Mar 2025 22:28:24 +0200 Subject: [PATCH 10/12] chore: updated changelog --- CHANGELOG.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40f8733..7ff3313 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,11 @@ 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 + +## [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 +24,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 +33,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 From 073792791fd479df7c6c0b31327d6f5bf8da8d69 Mon Sep 17 00:00:00 2001 From: KristofersOzolinsMagebit Date: Mon, 17 Mar 2025 10:00:41 +0200 Subject: [PATCH 11/12] feat: enabled combobox mode for select input --- src/webview/components/Wizard/FieldRenderer.tsx | 2 ++ 1 file changed, 2 insertions(+) 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 } From e205697ed48a29d3dcf5d3338c1835ca0328647f Mon Sep 17 00:00:00 2001 From: KristofersOzolinsMagebit Date: Mon, 17 Mar 2025 10:09:00 +0200 Subject: [PATCH 12/12] chore: updated changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ff3313..972b44b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [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