diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..86f4257f41 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +**/webpack.config.js +vendor diff --git a/.eslintrc.json b/.eslintrc.json index 7c88e4121f..011399debe 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,31 +1,3 @@ { - "plugins": ["prettier"], - "extends": ["prettier", "eslint:recommended"], - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "node": true - }, - "parser": "babel-eslint", - "parserOptions": { - "ecmaFeatures": { - "jsx": true, - "classes": true, - "experimentalObjectRestSpread": true - }, - "sourceType": "module" - }, - "rules": { - "no-const-assign": "warn", - "no-console": "off", - "no-this-before-super": "warn", - "no-undef": "warn", - "no-unreachable": "warn", - "no-unused-vars": "warn", - "constructor-super": "warn", - "valid-typeof": "warn", - "no-extra-semi": "error", - "no-extra-boolean-cast": "off" - } + "extends": "eslint-config-ibexa/eslint" } diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7bda6b4764..5ab6fb5afb 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -35,6 +35,11 @@ jobs: - name: Run PHP CS Fixer run: tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --show-progress=dots + - name: Run Prettier + run: | + yarn install + yarn prettier-test --write + - name: Commit changes uses: stefanzweifel/git-auto-commit-action@v4 with: diff --git a/.gitignore b/.gitignore index d30a4f0faa..ab03be3cad 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ __pycache__/* .php-cs-fixer.cache composer.lock tools/php-cs-fixer/vendor +node_modules/ +.yarn +yarn.lock diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..d1a24d79d9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +**/webpack.config.js diff --git a/code_samples/back_office/image_editor/assets/random_dot/random-dot-stem.js b/code_samples/back_office/image_editor/assets/random_dot/random-dot-stem.js index 2583ff3580..29cd7d2aa0 100644 --- a/code_samples/back_office/image_editor/assets/random_dot/random-dot-stem.js +++ b/code_samples/back_office/image_editor/assets/random_dot/random-dot-stem.js @@ -29,5 +29,5 @@ ibexa.addConfig( icon: ibexa.helpers.icon.getIconPath('radio-button'), // Path to an icon that will be displayed in the UI identifier: IDENTIFIER, // The identifier must match the one from the configuration yaml file }, - true + true, ); diff --git a/code_samples/back_office/image_editor/assets/random_dot/random-dot.js b/code_samples/back_office/image_editor/assets/random_dot/random-dot.js index 04420bad14..0d714c89f6 100644 --- a/code_samples/back_office/image_editor/assets/random_dot/random-dot.js +++ b/code_samples/back_office/image_editor/assets/random_dot/random-dot.js @@ -65,5 +65,5 @@ ibexa.addConfig( icon: ibexa.helpers.icon.getIconPath('radio-button'), identifier: IDENTIFIER, }, - true + true, ); diff --git a/code_samples/back_office/online_editor/assets/js/online_editor/buttons/date.js b/code_samples/back_office/online_editor/assets/js/online_editor/buttons/date.js deleted file mode 100644 index e3ea1fe79c..0000000000 --- a/code_samples/back_office/online_editor/assets/js/online_editor/buttons/date.js +++ /dev/null @@ -1,41 +0,0 @@ -import PropTypes from 'prop-types'; -import AlloyEditor from 'alloyeditor'; -import IbexaButton - from '../../../../vendor/ezsystems/ezplatform-richtext/src/bundle/Resources/public/js/OnlineEditor/buttons/base/ibexa-button.js'; - -export default class BtnDate extends IbexaButton { - static get key() { - return 'date'; - } - - insertDate(data) { - this.execCommand(data); - } - - render() { - const title = 'Date'; - - return ( - - ); - } -} - -AlloyEditor.Buttons[BtnDate.key] = AlloyEditor.BtnDate = BtnDate; -ibexa.addConfig('ezAlloyEditor.BtnDate', BtnDate); - -BtnDate.propTypes = { - command: PropTypes.string, -}; - -BtnDate.defaultProps = { - command: 'InsertDate', -}; diff --git a/code_samples/back_office/online_editor/assets/js/online_editor/buttons/hr.js b/code_samples/back_office/online_editor/assets/js/online_editor/buttons/hr.js deleted file mode 100644 index b684fd249c..0000000000 --- a/code_samples/back_office/online_editor/assets/js/online_editor/buttons/hr.js +++ /dev/null @@ -1,48 +0,0 @@ -import PropTypes from 'prop-types'; -import AlloyEditor from 'alloyeditor'; -import IbexaButton - from '../../../../vendor/ezsystems/ezplatform-richtext/src/bundle/Resources/public/js/OnlineEditor/buttons/base/ibexa-button.js'; - -export default class IbexaBtnHr extends IbexaButton { - static get key() { - return 'hr'; - } - - addHr() { - this.execCommand({ - tagName: 'hr', - }); - } - - render() { - const title = "Hr"; - return ( - - ); - } -} - -AlloyEditor.Buttons[IbexaBtnHr.key] = AlloyEditor.IbexaBtnHr = IbexaBtnHr; - -const ibexa = (window.ibexa = window.ibexa || {}); - -ibexa.ezAlloyEditor = ibexa.ezAlloyEditor || {}; -ibexa.ezAlloyEditor.IbexaBtnHr = IbexaBtnHr; - -IbexaBtnHr.propTypes = { - command: PropTypes.string, - modifiesSelection: PropTypes.bool, -}; - -IbexaBtnHr.defaultProps = { - command: 'ibexaAddContent', - modifiesSelection: true, -}; diff --git a/code_samples/back_office/online_editor/assets/js/online_editor/plugins/date.js b/code_samples/back_office/online_editor/assets/js/online_editor/plugins/date.js index d75bf3364d..c306895cff 100644 --- a/code_samples/back_office/online_editor/assets/js/online_editor/plugins/date.js +++ b/code_samples/back_office/online_editor/assets/js/online_editor/plugins/date.js @@ -6,10 +6,10 @@ const InsertDate = { exec: function (editor) { const now = new Date(); - editor.insertHtml( now.toString() ); + editor.insertHtml(now.toString()); }, }; - + global.CKEDITOR.plugins.add('date', { init: (editor) => editor.addCommand('InsertDate', InsertDate), }); diff --git a/code_samples/back_office/search/append_to_webpack.config.js b/code_samples/back_office/search/append_to_webpack.config.js index 3fa0b8d917..5146bc2a0e 100644 --- a/code_samples/back_office/search/append_to_webpack.config.js +++ b/code_samples/back_office/search/append_to_webpack.config.js @@ -1,8 +1,7 @@ - const ibexaConfigManager = require('./ibexa.webpack.config.manager.js'); ibexaConfigManager.add({ ibexaConfig, entryName: 'ibexa-admin-ui-layout-js', - newItems: [ path.resolve(__dirname, './assets/js/admin.search.autocomplete.product.js'), ], + newItems: [path.resolve(__dirname, './assets/js/admin.search.autocomplete.product.js')], }); diff --git a/code_samples/back_office/search/assets/js/admin.search.autocomplete.product.js b/code_samples/back_office/search/assets/js/admin.search.autocomplete.product.js index c9a80f0b16..7394a84a93 100644 --- a/code_samples/back_office/search/assets/js/admin.search.autocomplete.product.js +++ b/code_samples/back_office/search/assets/js/admin.search.autocomplete.product.js @@ -1,14 +1,16 @@ (function (global, doc, ibexa, Routing) { const renderItem = (result, searchText) => { const globalSearch = doc.querySelector('.ibexa-global-search'); - const {highlightText} = ibexa.helpers.highlight; - const autocompleteHighlightTemplate = globalSearch.querySelector('.ibexa-global-search__autocomplete-list').dataset.templateHighlight; - const {getContentTypeIconUrl, getContentTypeName} = ibexa.helpers.contentType; + const { highlightText } = ibexa.helpers.highlight; + const autocompleteHighlightTemplate = globalSearch.querySelector('.ibexa-global-search__autocomplete-list').dataset + .templateHighlight; + const { getContentTypeIconUrl, getContentTypeName } = ibexa.helpers.contentType; - const autocompleteItemTemplate = globalSearch.querySelector('.ibexa-global-search__autocomplete-product-template').dataset.templateItem; + const autocompleteItemTemplate = globalSearch.querySelector('.ibexa-global-search__autocomplete-product-template').dataset + .templateItem; return autocompleteItemTemplate - .replace('{{ productHref }}', Routing.generate('ibexa.product_catalog.product.view', {productCode: result.productCode})) + .replace('{{ productHref }}', Routing.generate('ibexa.product_catalog.product.view', { productCode: result.productCode })) .replace('{{ productName }}', highlightText(searchText, result.name, autocompleteHighlightTemplate)) .replace('{{ productCode }}', result.productCode) .replace('{{ productTypeIconHref }}', getContentTypeIconUrl(result.productTypeIdentifier)) diff --git a/code_samples/back_office/udw/assets/js/image-tab/components/image.js b/code_samples/back_office/udw/assets/js/image-tab/components/image.js index 9319aad37f..4466982251 100644 --- a/code_samples/back_office/udw/assets/js/image-tab/components/image.js +++ b/code_samples/back_office/udw/assets/js/image-tab/components/image.js @@ -13,7 +13,6 @@ const Image = ({ restInfo, location }) => { const [selectedLocations, dispatchSelectedLocationsAction] = useContext(SelectedLocationsContext); const [multiple] = useContext(MultipleConfigContext); const updateVersionInfoState = (response) => { - setContent(response.View.Result.searchHits.searchHit[0].value.Content); }; const markLocation = ({ nativeEvent }) => { @@ -29,11 +28,10 @@ const Image = ({ restInfo, location }) => { if (!multiple) { dispatchSelectedLocationsAction({ type: 'CLEAR_SELECTED_LOCATIONS' }); - dispatchSelectedLocationsAction({ type: 'ADD_SELECTED_LOCATION', location }); + dispatchSelectedLocationsAction({ type: 'ADD_SELECTED_LOCATION', location }); } }; let src = - 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHdpZHRoPSI0MHB4IiBoZWlnaHQ9IjQwcHgiIHZpZXdCb3g9IjAgMCA0MCA0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEuNDE0MjE7IiB4PSIwcHgiIHk9IjBweCI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWwogICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTM1OWRlZykKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNTlkZWcpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHN2ZyB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxLjVzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICAgICAgICAgIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBzcGluIDEuNXMgbGluZWFyIGluZmluaXRlOwogICAgICAgICAgICB9CiAgICAgICAgXV0+PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDxnIGlkPSJvdXRlciI+CiAgICAgICAgPGc+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwwQzIyLjIwNTgsMCAyMy45OTM5LDEuNzg4MTMgMjMuOTkzOSwzLjk5MzlDMjMuOTkzOSw2LjE5OTY4IDIyLjIwNTgsNy45ODc4MSAyMCw3Ljk4NzgxQzE3Ljc5NDIsNy45ODc4MSAxNi4wMDYxLDYuMTk5NjggMTYuMDA2MSwzLjk5MzlDMTYuMDA2MSwxLjc4ODEzIDE3Ljc5NDIsMCAyMCwwWiIgc3R5bGU9ImZpbGw6YmxhY2s7Ii8+CiAgICAgICAgPC9nPgogICAgICAgIDxnPgogICAgICAgICAgICA8cGF0aCBkPSJNNS44NTc4Niw1Ljg1Nzg2QzcuNDE3NTgsNC4yOTgxNSA5Ljk0NjM4LDQuMjk4MTUgMTEuNTA2MSw1Ljg1Nzg2QzEzLjA2NTgsNy40MTc1OCAxMy4wNjU4LDkuOTQ2MzggMTEuNTA2MSwxMS41MDYxQzkuOTQ2MzgsMTMuMDY1OCA3LjQxNzU4LDEzLjA2NTggNS44NTc4NiwxMS41MDYxQzQuMjk4MTUsOS45NDYzOCA0LjI5ODE1LDcuNDE3NTggNS44NTc4Niw1Ljg1Nzg2WiIgc3R5bGU9ImZpbGw6cmdiKDIxMCwyMTAsMjEwKTsiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGc+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMi4wMTIyQzIyLjIwNTgsMzIuMDEyMiAyMy45OTM5LDMzLjgwMDMgMjMuOTkzOSwzNi4wMDYxQzIzLjk5MzksMzguMjExOSAyMi4yMDU4LDQwIDIwLDQwQzE3Ljc5NDIsNDAgMTYuMDA2MSwzOC4yMTE5IDE2LjAwNjEsMzYuMDA2MUMxNi4wMDYxLDMzLjgwMDMgMTcuNzk0MiwzMi4wMTIyIDIwLDMyLjAxMjJaIiBzdHlsZT0iZmlsbDpyZ2IoMTMwLDEzMCwxMzApOyIvPgogICAgICAgIDwvZz4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggZD0iTTI4LjQ5MzksMjguNDkzOUMzMC4wNTM2LDI2LjkzNDIgMzIuNTgyNCwyNi45MzQyIDM0LjE0MjEsMjguNDkzOUMzNS43MDE5LDMwLjA1MzYgMzUuNzAxOSwzMi41ODI0IDM0LjE0MjEsMzQuMTQyMUMzMi41ODI0LDM1LjcwMTkgMzAuMDUzNiwzNS43MDE5IDI4LjQ5MzksMzQuMTQyMUMyNi45MzQyLDMyLjU4MjQgMjYuOTM0MiwzMC4wNTM2IDI4LjQ5MzksMjguNDkzOVoiIHN0eWxlPSJmaWxsOnJnYigxMDEsMTAxLDEwMSk7Ii8+CiAgICAgICAgPC9nPgogICAgICAgIDxnPgogICAgICAgICAgICA8cGF0aCBkPSJNMy45OTM5LDE2LjAwNjFDNi4xOTk2OCwxNi4wMDYxIDcuOTg3ODEsMTcuNzk0MiA3Ljk4NzgxLDIwQzcuOTg3ODEsMjIuMjA1OCA2LjE5OTY4LDIzLjk5MzkgMy45OTM5LDIzLjk5MzlDMS43ODgxMywyMy45OTM5IDAsMjIuMjA1OCAwLDIwQzAsMTcuNzk0MiAxLjc4ODEzLDE2LjAwNjEgMy45OTM5LDE2LjAwNjFaIiBzdHlsZT0iZmlsbDpyZ2IoMTg3LDE4NywxODcpOyIvPgogICAgICAgIDwvZz4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggZD0iTTUuODU3ODYsMjguNDkzOUM3LjQxNzU4LDI2LjkzNDIgOS45NDYzOCwyNi45MzQyIDExLjUwNjEsMjguNDkzOUMxMy4wNjU4LDMwLjA1MzYgMTMuMDY1OCwzMi41ODI0IDExLjUwNjEsMzQuMTQyMUM5Ljk0NjM4LDM1LjcwMTkgNy40MTc1OCwzNS43MDE5IDUuODU3ODYsMzQuMTQyMUM0LjI5ODE1LDMyLjU4MjQgNC4yOTgxNSwzMC4wNTM2IDUuODU3ODYsMjguNDkzOVoiIHN0eWxlPSJmaWxsOnJnYigxNjQsMTY0LDE2NCk7Ii8+CiAgICAgICAgPC9nPgogICAgICAgIDxnPgogICAgICAgICAgICA8cGF0aCBkPSJNMzYuMDA2MSwxNi4wMDYxQzM4LjIxMTksMTYuMDA2MSA0MCwxNy43OTQyIDQwLDIwQzQwLDIyLjIwNTggMzguMjExOSwyMy45OTM5IDM2LjAwNjEsMjMuOTkzOUMzMy44MDAzLDIzLjk5MzkgMzIuMDEyMiwyMi4yMDU4IDMyLjAxMjIsMjBDMzIuMDEyMiwxNy43OTQyIDMzLjgwMDMsMTYuMDA2MSAzNi4wMDYxLDE2LjAwNjFaIiBzdHlsZT0iZmlsbDpyZ2IoNzQsNzQsNzQpOyIvPgogICAgICAgIDwvZz4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggZD0iTTI4LjQ5MzksNS44NTc4NkMzMC4wNTM2LDQuMjk4MTUgMzIuNTgyNCw0LjI5ODE1IDM0LjE0MjEsNS44NTc4NkMzNS43MDE5LDcuNDE3NTggMzUuNzAxOSw5Ljk0NjM4IDM0LjE0MjEsMTEuNTA2MUMzMi41ODI0LDEzLjA2NTggMzAuMDUzNiwxMy4wNjU4IDI4LjQ5MzksMTEuNTA2MUMyNi45MzQyLDkuOTQ2MzggMjYuOTM0Miw3LjQxNzU4IDI4LjQ5MzksNS44NTc4NloiIHN0eWxlPSJmaWxsOnJnYig1MCw1MCw1MCk7Ii8+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K'; let alt = 'Loading meta data ...'; diff --git a/code_samples/back_office/udw/assets/js/image-tab/image.tab.module.js b/code_samples/back_office/udw/assets/js/image-tab/image.tab.module.js index d8cd9f159e..65e25e0d91 100644 --- a/code_samples/back_office/udw/assets/js/image-tab/image.tab.module.js +++ b/code_samples/back_office/udw/assets/js/image-tab/image.tab.module.js @@ -22,7 +22,7 @@ ibexa.addConfig( icon: '/bundles/ibexaadminui/img/ibexa-icons.svg#image', }, ], - true + true, ); export default ImageTabModule; diff --git a/code_samples/forms/custom_form_attribute/assets/js/formbuilder-richtext-checkbox.js b/code_samples/forms/custom_form_attribute/assets/js/formbuilder-richtext-checkbox.js index 80a2cd40ca..3c8b1e1c0f 100644 --- a/code_samples/forms/custom_form_attribute/assets/js/formbuilder-richtext-checkbox.js +++ b/code_samples/forms/custom_form_attribute/assets/js/formbuilder-richtext-checkbox.js @@ -3,19 +3,15 @@ const richtext = new ibexa.BaseRichText(); // Enable editor in all ibexa-data-source divs - doc.querySelectorAll('.ibexa-data-source').forEach( - (ibexaDataSource) => { - const richtextContainer = ibexaDataSource.querySelector( - '.ibexa-data-source__richtext' - ); + doc.querySelectorAll('.ibexa-data-source').forEach((ibexaDataSource) => { + const richtextContainer = ibexaDataSource.querySelector('.ibexa-data-source__richtext'); - if (richtextContainer.classList.contains('ck')) { - return; - } - - richtext.init(richtextContainer); + if (richtextContainer.classList.contains('ck')) { + return; } - ); + + richtext.init(richtextContainer); + }); }); const openUdw = (config) => { diff --git a/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js b/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js index ce01850290..1c3f055d0c 100644 --- a/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js +++ b/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js @@ -1,4 +1,4 @@ -import Calculator from "/assets/page-builder/components/Calculator"; +import Calculator from '/assets/page-builder/components/Calculator'; export default { Calculator: Calculator, diff --git a/docs/administration/back_office/customize_search_suggestion.md b/docs/administration/back_office/customize_search_suggestion.md index 426353baa5..79061413aa 100644 --- a/docs/administration/back_office/customize_search_suggestion.md +++ b/docs/administration/back_office/customize_search_suggestion.md @@ -110,7 +110,7 @@ To allow template override and ease HTML writing, the example is also loading a Here is a complete `assets/js/admin.search.autocomplete.product.js` from the product suggestion example: -``` js hl_lines="8" +``` js hl_lines="9" [[= include_file('code_samples/back_office/search/assets/js/admin.search.autocomplete.product.js') =]] ``` diff --git a/package.json b/package.json index 9a72290f2a..79d74fcc33 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,17 @@ "main": "index.js", "repository": "git@github.com:ibexa/documentation-developer.git", "scripts": { - "scss": "node-sass --watch scss -o docs/css" + "scss": "sass --watch scss:docs/css", + "test": "yarn prettier-test && yarn eslint-test", + "fix": "yarn prettier-test --write && yarn eslint-test --fix", + "eslint-test": "eslint \"./code_samples/**/*.js\"", + "prettier-test": "yarn prettier \"./code_samples/**/*.{js,scss}\" --check" + }, + "prettier": "eslint-config-ibexa/prettier", + "devDependencies": { + "eslint-config-ibexa": "https://github.com/ibexa/eslint-config-ibexa.git#~v1.1.1" }, "dependencies": { - "node-sass": "^9.0.0" + "sass": "^1.82.0" } }