diff --git a/.ddev/commands/web/install b/.ddev/commands/web/install index 40b25e60e6..c8867cc485 100755 --- a/.ddev/commands/web/install +++ b/.ddev/commands/web/install @@ -23,4 +23,8 @@ composer install --no-interaction drush --root=/var/www/html/web site:install --account-mail=noreply@email.arizona.edu --account-name=azadmin --account-pass=azadmin2026 --db-url=mysql://db:db@db:3306/db -y --verbose drush --root=/var/www/html/web config:set -y az_cas.settings disable_login_form 0 drush --root=/var/www/html/web cache:rebuild -yarn --cwd /usr/local/quickstart-install-profile install + +# Install Yarn dev dependencies +cd /usr/local/quickstart-install-profile +yarn --version +yarn install --immutable diff --git a/.ddev/config.quickstart.yaml b/.ddev/config.quickstart.yaml index 81f87e37ef..e7593ea9d4 100644 --- a/.ddev/config.quickstart.yaml +++ b/.ddev/config.quickstart.yaml @@ -3,6 +3,7 @@ type: php docroot: web php_version: "8.3" webserver_type: nginx-fpm +corepack_enable: true # Default application ports router_http_port: "80" diff --git a/.eslintignore b/.eslintignore index 0d928f70a2..07e4fe7278 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1 @@ node_modules/**/* -*.js -!*.es6.js diff --git a/.gitattributes b/.gitattributes index f1252bfe45..e4159ab671 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20,3 +20,5 @@ themes/custom/az_barrio/libraries/*.min.js linguist-generated=true .ddev/commands/web/phpstan text eol=lf .ddev/commands/web/phpstan-contrib text eol=lf .ddev/commands/web/phpunit text eol=lf + +yarn.lock export-ignore linguist-generated=true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 449a3e7745..ded46cbcd1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -180,7 +180,9 @@ jobs: - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '20' - - run: yarn audit + - run: | + corepack enable + yarn npm audit --severity high eslint: name: eslint @@ -190,10 +192,13 @@ jobs: - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '20' - - run: yarn install --ignore-scripts + - run: | + corepack enable + yarn install --immutable - name: Generate eslint report continue-on-error: true - run: yarn run eslint . --format json --output-file eslint-report.json + run: | + yarn run eslint . --format json --output-file eslint-report.json - name: Annotate eslint results continue-on-error: true uses: ataylorme/eslint-annotate-action@v3 @@ -201,7 +206,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} report-json: "eslint-report.json" - name: Run eslint - run: yarn run eslint --color . + run: | + yarn run eslint --color . phpunit: name: PHPUnit (${{ matrix.test.name }}) diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 16771ac119..fd2da04b7d 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -56,12 +56,14 @@ jobs: cd az-quickstart-scaffolding composer audit - yarn-audit: - name: yarn audit (security) + yarn-npm-audit: + name: yarn npm audit (security) runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '20' - - run: yarn audit + - run: | + corepack enable + yarn npm audit diff --git a/.gitignore b/.gitignore index 662dbc945e..ced49413f7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,8 @@ ### Node ### /node_modules/ /node_modules/* -/yarn.lock /yarn-error.log +.yarn/* ### Drupal ### settings.local.php diff --git a/.lando.yml b/.lando.yml index aee3543b4f..5a389fe81d 100644 --- a/.lando.yml +++ b/.lando.yml @@ -69,8 +69,12 @@ services: - ln -s /usr/local/quickstart-install-profile/.vscode /app/.vscode node: type: node:20 + overrides: + environment: + COREPACK_ENABLE_DOWNLOAD_PROMPT: '0' build: - - yarn install + - corepack enable + - yarn install --immutable chromedriver: type: compose services: diff --git a/.prettierignore b/.prettierignore index 1cda54be93..ad774406ef 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,2 @@ +node_modules/**/* *.yml diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000000..a388ff9027 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,3 @@ +enableScripts: false + +nodeLinker: node-modules diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0242971676..18fc057a5e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -218,34 +218,6 @@ on the paragraph. This can be avoided currently by [a workaround](https://www.drupal.org/project/paragraphs/issues/2928759). There will likely be a more official paragraphs API for this in the future. -## Compiling Javascript in Local Development - -This project uses an ES6 to ES5 transpile process -[similar to Drupal core](https://www.drupal.org/node/2815083). - -This means that you should only update `.js` files named `.es6.js` and should -never manually edit files named `.js` as these are machine-generated. - -This can be done on demand with `yarn build`, or in response to changes -with `yarn watch`. When in watch mode, javascript files will be transpiled as -they are updated. - -### ES6 Transpiling on Lando - -``` -lando yarn build -OR -lando yarn watch -``` - -### ES6 Transpiling on DDEV - -``` -ddev yarn build -OR -ddev yarn watch -``` - ## ESLint in Local Development To maintain high-quality JavaScript code, contributors are encouraged to use diff --git a/modules/custom/az_alphabetical_listing/js/alphabetical_listing.es6.js b/modules/custom/az_alphabetical_listing/js/alphabetical_listing.es6.js deleted file mode 100644 index e60f59ab33..0000000000 --- a/modules/custom/az_alphabetical_listing/js/alphabetical_listing.es6.js +++ /dev/null @@ -1,202 +0,0 @@ -(($, Drupal) => { - Drupal.behaviors.azAlphabeticalListing = { - attach() { - /** - * Loop through each alpha navigation list item and determine if the - * corresponding search result group exists on the page. If it doesn't - * exist on the page, then hide the navigation item. - */ - $('#az-js-alpha-navigation li').each((index, element) => { - // Get ID of current nav item. - const groupId = $(element).children().attr('data-href'); - - // Enable nav item if results group exists on page - if ($(groupId).length !== 0) { - $(element).removeClass('disabled'); - $(element) - .children() - .attr('tabindex', '0') - .attr('aria-hidden', 'false') - .attr('href', groupId); - } - - // Disable nav item if no results group exists on page - else { - $(element).addClass('disabled'); - $(element) - .children() - .attr('tabindex', '-1') - .attr('aria-hidden', 'true') - .removeAttr('href'); - } - }); - - /** - * function azAlphabeticalListingCheckNoResults() - * - * Determines if there are no results that match the provided search query. - * If there are no results, then it will display the "no results" message. - * Otherwise, the "no results" message remains hidden; - */ - function azAlphabeticalListingCheckNoResults() { - let visibleResults = false; - $('.az-alphabetical-listing-group-title').each((index, element) => { - if (!$(element).hasClass('hide-result')) { - visibleResults = true; - } - }); - - if (!visibleResults) { - $('#az-js-alphabetical-listing-no-results').show(); - } else { - $('#az-js-alphabetical-listing-no-results').hide(); - } - } - - /** - * function azAlphabeticalListingGroupLoop() - * - * Check if search result "group" has no results by determining if it has - * an immediate sibling of .az-alphabetical-listing-group-title - */ - function azAlphabeticalListingGroupLoop() { - $('.az-alphabetical-listing-group-title').each((index, element) => { - // Get the ID of the current results group - const elementId = $(element).attr('id'); - const group = elementId.toLowerCase(); - // Set the target class to search with - const targetGroup = `.az-alphabetical-letter-group-${group}`; - - // Set variable to determine if there are visible children - let visibleChildren = false; - // Loop through each item in the results group - $(targetGroup).each((resultIndex, resultElement) => { - if (!$(resultElement).hasClass('hide-result')) { - // Set variable to true if item isn't hidden - visibleChildren = true; - } - }); - - // Get nav item with data attribute that matches the group's ID - const navTarget = $('#az-js-alpha-navigation').find( - `.page-link[data-href='#${elementId}']`, - ); - - if (!visibleChildren) { - // Hide title if no visible children in the group - $(element).hide(); - $(element).addClass('hide-result'); - - // Hide nav item if no visible children in the group - navTarget.parent().addClass('disabled'); - navTarget - .attr('tabindex', '-1') - .attr('aria-hidden', 'true') - .removeAttr('href'); - } else { - // Show title if visible children in the group - $(element).show(); - $(element).removeClass('hide-result'); - - // Show nav item if visible children in the group - navTarget.parent().removeClass('disabled'); - navTarget - .attr('tabindex', '0') - .attr('aria-hidden', 'false') - .attr('href', $(element).attr('id')); - } - }); - } - - /** - * Perform search as query is entered into the search input field. - */ - $('#az-js-alphabetical-listing-search').keyup((event) => { - // Retrieve the input field text - const filter = $(event.currentTarget).val(); - - /** - * Loop through the .az-js-alphabetical-listing-search-result items and - * determine if the item should be shown or hidden, based on the search - * query text provided. - */ - $('.az-js-alphabetical-listing-search-result').each( - (index, element) => { - // Get text for current item in loop. - const searchResultText = $(element) - .find('.az-alphabetical-listing-item') - .text(); - - // Hide the item if it doesn't contain search query text. - if (searchResultText.search(new RegExp(filter, 'i')) < 0) { - $(element) - .find('az-alphabetical-listing-item') - .attr('tabindex', '0'); - $(element).addClass('hide-result'); - $(element).hide(); - } - // Show the item is it does contain search query text. - else { - $(element) - .find('.az-alphabetical-listing-item') - .attr('tabindex', '0'); - $(element).removeClass('hide-result'); - $(element).show(); - } - }, - ); - - // Determine if groups have results shown - azAlphabeticalListingGroupLoop(); - - // Determine if "no results" message is needed - azAlphabeticalListingCheckNoResults(); - }); - - /** - * On click of alpha navigation items, create a smooth scrolling effect. - */ - const $root = $('html, body'); - const breakpoint = 600; - - $('#az-js-alpha-navigation a').on('click', (event) => { - event.preventDefault(); - const $alphaNav = $('#az-js-floating-alpha-nav-container'); - const href = $.attr(event.currentTarget, 'data-href'); - let fixedNavHeight = $alphaNav.outerHeight(); - const headingHeight = $( - '.az-alphabetical-listing-group-title:first', - ).outerHeight(); - const offsetHeight = fixedNavHeight + headingHeight; - - if ($(window).width() <= breakpoint) { - fixedNavHeight = 0; - } - - $root.animate( - { - scrollTop: $(href).offset().top - offsetHeight, - }, - 500, - () => { - window.location.hash = href; - }, - ); - }); - - /** - * Check if Drupal admin toolbar is present on the page, and if it is, - * increase the top value of the alpha navigation to prevent overlap with the - * Drupal admin toolbar. - */ - if ($('body.toolbar-tray-open').length) { - // Both toolbars open - $('#az-js-floating-alpha-nav-container').css('top', '79px'); - } - // Only black toolbar is open - else if ($('body.toolbar-horizontal').length) { - $('#az-js-floating-alpha-nav-container').css('top', '39px'); - } - }, - }; -})(jQuery, Drupal); diff --git a/modules/custom/az_alphabetical_listing/js/alphabetical_listing.js b/modules/custom/az_alphabetical_listing/js/alphabetical_listing.js index be036ec35a..e60f59ab33 100644 --- a/modules/custom/az_alphabetical_listing/js/alphabetical_listing.js +++ b/modules/custom/az_alphabetical_listing/js/alphabetical_listing.js @@ -1,100 +1,202 @@ -/** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function ($, Drupal) { +(($, Drupal) => { Drupal.behaviors.azAlphabeticalListing = { - attach: function attach() { - $('#az-js-alpha-navigation li').each(function (index, element) { - var groupId = $(element).children().attr('data-href'); + attach() { + /** + * Loop through each alpha navigation list item and determine if the + * corresponding search result group exists on the page. If it doesn't + * exist on the page, then hide the navigation item. + */ + $('#az-js-alpha-navigation li').each((index, element) => { + // Get ID of current nav item. + const groupId = $(element).children().attr('data-href'); + + // Enable nav item if results group exists on page if ($(groupId).length !== 0) { $(element).removeClass('disabled'); - $(element).children().attr('tabindex', '0').attr('aria-hidden', 'false').attr('href', groupId); - } else { + $(element) + .children() + .attr('tabindex', '0') + .attr('aria-hidden', 'false') + .attr('href', groupId); + } + + // Disable nav item if no results group exists on page + else { $(element).addClass('disabled'); - $(element).children().attr('tabindex', '-1').attr('aria-hidden', 'true').removeAttr('href'); + $(element) + .children() + .attr('tabindex', '-1') + .attr('aria-hidden', 'true') + .removeAttr('href'); } }); + + /** + * function azAlphabeticalListingCheckNoResults() + * + * Determines if there are no results that match the provided search query. + * If there are no results, then it will display the "no results" message. + * Otherwise, the "no results" message remains hidden; + */ function azAlphabeticalListingCheckNoResults() { - var visibleResults = false; - $('.az-alphabetical-listing-group-title').each(function (index, element) { + let visibleResults = false; + $('.az-alphabetical-listing-group-title').each((index, element) => { if (!$(element).hasClass('hide-result')) { visibleResults = true; } }); + if (!visibleResults) { $('#az-js-alphabetical-listing-no-results').show(); } else { $('#az-js-alphabetical-listing-no-results').hide(); } } + + /** + * function azAlphabeticalListingGroupLoop() + * + * Check if search result "group" has no results by determining if it has + * an immediate sibling of .az-alphabetical-listing-group-title + */ function azAlphabeticalListingGroupLoop() { - $('.az-alphabetical-listing-group-title').each(function (index, element) { - var elementId = $(element).attr('id'); - var group = elementId.toLowerCase(); - var targetGroup = ".az-alphabetical-letter-group-".concat(group); - var visibleChildren = false; - $(targetGroup).each(function (resultIndex, resultElement) { + $('.az-alphabetical-listing-group-title').each((index, element) => { + // Get the ID of the current results group + const elementId = $(element).attr('id'); + const group = elementId.toLowerCase(); + // Set the target class to search with + const targetGroup = `.az-alphabetical-letter-group-${group}`; + + // Set variable to determine if there are visible children + let visibleChildren = false; + // Loop through each item in the results group + $(targetGroup).each((resultIndex, resultElement) => { if (!$(resultElement).hasClass('hide-result')) { + // Set variable to true if item isn't hidden visibleChildren = true; } }); - var navTarget = $('#az-js-alpha-navigation').find(".page-link[data-href='#".concat(elementId, "']")); + + // Get nav item with data attribute that matches the group's ID + const navTarget = $('#az-js-alpha-navigation').find( + `.page-link[data-href='#${elementId}']`, + ); + if (!visibleChildren) { + // Hide title if no visible children in the group $(element).hide(); $(element).addClass('hide-result'); + + // Hide nav item if no visible children in the group navTarget.parent().addClass('disabled'); - navTarget.attr('tabindex', '-1').attr('aria-hidden', 'true').removeAttr('href'); + navTarget + .attr('tabindex', '-1') + .attr('aria-hidden', 'true') + .removeAttr('href'); } else { + // Show title if visible children in the group $(element).show(); $(element).removeClass('hide-result'); + + // Show nav item if visible children in the group navTarget.parent().removeClass('disabled'); - navTarget.attr('tabindex', '0').attr('aria-hidden', 'false').attr('href', $(element).attr('id')); + navTarget + .attr('tabindex', '0') + .attr('aria-hidden', 'false') + .attr('href', $(element).attr('id')); } }); } - $('#az-js-alphabetical-listing-search').keyup(function (event) { - var filter = $(event.currentTarget).val(); - $('.az-js-alphabetical-listing-search-result').each(function (index, element) { - var searchResultText = $(element).find('.az-alphabetical-listing-item').text(); - if (searchResultText.search(new RegExp(filter, 'i')) < 0) { - $(element).find('az-alphabetical-listing-item').attr('tabindex', '0'); - $(element).addClass('hide-result'); - $(element).hide(); - } else { - $(element).find('.az-alphabetical-listing-item').attr('tabindex', '0'); - $(element).removeClass('hide-result'); - $(element).show(); - } - }); + + /** + * Perform search as query is entered into the search input field. + */ + $('#az-js-alphabetical-listing-search').keyup((event) => { + // Retrieve the input field text + const filter = $(event.currentTarget).val(); + + /** + * Loop through the .az-js-alphabetical-listing-search-result items and + * determine if the item should be shown or hidden, based on the search + * query text provided. + */ + $('.az-js-alphabetical-listing-search-result').each( + (index, element) => { + // Get text for current item in loop. + const searchResultText = $(element) + .find('.az-alphabetical-listing-item') + .text(); + + // Hide the item if it doesn't contain search query text. + if (searchResultText.search(new RegExp(filter, 'i')) < 0) { + $(element) + .find('az-alphabetical-listing-item') + .attr('tabindex', '0'); + $(element).addClass('hide-result'); + $(element).hide(); + } + // Show the item is it does contain search query text. + else { + $(element) + .find('.az-alphabetical-listing-item') + .attr('tabindex', '0'); + $(element).removeClass('hide-result'); + $(element).show(); + } + }, + ); + + // Determine if groups have results shown azAlphabeticalListingGroupLoop(); + + // Determine if "no results" message is needed azAlphabeticalListingCheckNoResults(); }); - var $root = $('html, body'); - var breakpoint = 600; - $('#az-js-alpha-navigation a').on('click', function (event) { + + /** + * On click of alpha navigation items, create a smooth scrolling effect. + */ + const $root = $('html, body'); + const breakpoint = 600; + + $('#az-js-alpha-navigation a').on('click', (event) => { event.preventDefault(); - var $alphaNav = $('#az-js-floating-alpha-nav-container'); - var href = $.attr(event.currentTarget, 'data-href'); - var fixedNavHeight = $alphaNav.outerHeight(); - var headingHeight = $('.az-alphabetical-listing-group-title:first').outerHeight(); - var offsetHeight = fixedNavHeight + headingHeight; + const $alphaNav = $('#az-js-floating-alpha-nav-container'); + const href = $.attr(event.currentTarget, 'data-href'); + let fixedNavHeight = $alphaNav.outerHeight(); + const headingHeight = $( + '.az-alphabetical-listing-group-title:first', + ).outerHeight(); + const offsetHeight = fixedNavHeight + headingHeight; + if ($(window).width() <= breakpoint) { fixedNavHeight = 0; } - $root.animate({ - scrollTop: $(href).offset().top - offsetHeight - }, 500, function () { - window.location.hash = href; - }); + + $root.animate( + { + scrollTop: $(href).offset().top - offsetHeight, + }, + 500, + () => { + window.location.hash = href; + }, + ); }); + + /** + * Check if Drupal admin toolbar is present on the page, and if it is, + * increase the top value of the alpha navigation to prevent overlap with the + * Drupal admin toolbar. + */ if ($('body.toolbar-tray-open').length) { + // Both toolbars open $('#az-js-floating-alpha-nav-container').css('top', '79px'); - } else if ($('body.toolbar-horizontal').length) { + } + // Only black toolbar is open + else if ($('body.toolbar-horizontal').length) { $('#az-js-floating-alpha-nav-container').css('top', '39px'); } - } + }, }; -})(jQuery, Drupal); \ No newline at end of file +})(jQuery, Drupal); diff --git a/modules/custom/az_card/js/az-card-no-follow.es6.js b/modules/custom/az_card/js/az-card-no-follow.es6.js deleted file mode 100644 index c0e1b62cd9..0000000000 --- a/modules/custom/az_card/js/az-card-no-follow.es6.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @file - * Adds event listener and handler for cards in order prevent links from working - * under certain circumstances. - */ - -((Drupal) => { - /** - * Behavior for card no-follow preview links. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches to card preview links in node edit form. - */ - Drupal.behaviors.azCardNoFollow = { - attach(context) { - /** - * Disables links for cards. - * - * @param {ClickEvent} event - Click event. - */ - function noFollow(event) { - event.preventDefault(); - } - - /** - * Adds event listeners to card links. - */ - const cards = context.querySelectorAll('.az-card-no-follow'); - [...cards].forEach((card) => { - card.addEventListener('click', noFollow); - }); - }, - }; -})(this.Drupal); diff --git a/modules/custom/az_card/js/az-card-no-follow.js b/modules/custom/az_card/js/az-card-no-follow.js index ad2857c8be..c0e1b62cd9 100644 --- a/modules/custom/az_card/js/az-card-no-follow.js +++ b/modules/custom/az_card/js/az-card-no-follow.js @@ -1,25 +1,36 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } -function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -(function (Drupal) { + * @file + * Adds event listener and handler for cards in order prevent links from working + * under certain circumstances. + */ + +((Drupal) => { + /** + * Behavior for card no-follow preview links. + * + * @type {Drupal~behavior} + * + * @prop {Drupal~behaviorAttach} attach + * Attaches to card preview links in node edit form. + */ Drupal.behaviors.azCardNoFollow = { - attach: function attach(context) { + attach(context) { + /** + * Disables links for cards. + * + * @param {ClickEvent} event - Click event. + */ function noFollow(event) { event.preventDefault(); } - var cards = context.querySelectorAll('.az-card-no-follow'); - _toConsumableArray(cards).forEach(function (card) { + + /** + * Adds event listeners to card links. + */ + const cards = context.querySelectorAll('.az-card-no-follow'); + [...cards].forEach((card) => { card.addEventListener('click', noFollow); }); - } + }, }; -})(this.Drupal); \ No newline at end of file +})(this.Drupal); diff --git a/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.es6.js b/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.es6.js deleted file mode 100644 index 911cef299d..0000000000 --- a/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.es6.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @file - * Trellis date range picker. - */ - -((Drupal, drupalSettings, once) => { - Drupal.behaviors.trellisDatePicker = { - attach(context) { - const elements = once('aztrellisdate', '.az-trellis-daterange', context); - elements.forEach((element) => { - const begin = element; - const id = element.dataset.azTrellisDaterangeEnd; - const end = document.getElementById(id); - // eslint-disable-next-line no-unused-vars, no-undef, new-cap - const picker = new easepick.create({ - element: begin, - css: drupalSettings.trellisDatePicker.css, - zIndex: 10, - RangePlugin: { - elementEnd: end, - }, - plugins: ['RangePlugin'], - }); - }); - }, - }; -})(Drupal, drupalSettings, once); diff --git a/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.js b/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.js index f51967d668..911cef299d 100644 --- a/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.js +++ b/modules/custom/az_event/az_event_trellis/js/az_event_trellis_date.js @@ -1,27 +1,27 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (Drupal, drupalSettings, once) { + * @file + * Trellis date range picker. + */ + +((Drupal, drupalSettings, once) => { Drupal.behaviors.trellisDatePicker = { - attach: function attach(context) { - var elements = once('aztrellisdate', '.az-trellis-daterange', context); - elements.forEach(function (element) { - var begin = element; - var id = element.dataset.azTrellisDaterangeEnd; - var end = document.getElementById(id); - var picker = new easepick.create({ + attach(context) { + const elements = once('aztrellisdate', '.az-trellis-daterange', context); + elements.forEach((element) => { + const begin = element; + const id = element.dataset.azTrellisDaterangeEnd; + const end = document.getElementById(id); + // eslint-disable-next-line no-unused-vars, no-undef, new-cap + const picker = new easepick.create({ element: begin, css: drupalSettings.trellisDatePicker.css, zIndex: 10, RangePlugin: { - elementEnd: end + elementEnd: end, }, - plugins: ['RangePlugin'] + plugins: ['RangePlugin'], }); }); - } + }, }; -})(Drupal, drupalSettings, once); \ No newline at end of file +})(Drupal, drupalSettings, once); diff --git a/modules/custom/az_event/js/az_calendar_filter.es6.js b/modules/custom/az_event/js/az_calendar_filter.es6.js deleted file mode 100644 index 1c5d9cd384..0000000000 --- a/modules/custom/az_event/js/az_calendar_filter.es6.js +++ /dev/null @@ -1,233 +0,0 @@ -/** - * @file - * A JavaScript file for the datepicker calendar functionality. - * - */ - -(($, Drupal, drupalSettings, once) => { - Drupal.behaviors.azCalendarFilter = { - attach(context, settings) { - const filterInformation = drupalSettings.azCalendarFilter; - if (!drupalSettings.hasOwnProperty('calendarFilterRanges')) { - drupalSettings.calendarFilterRanges = []; - } - - // Drupal settings get merged rather than replaced during ajax. - // We should clear out stale entries when we process a new cells. - drupalSettings.azCalendarFilter = {}; - settings.azCalendarFilter = {}; - - // Process cell date strings into javascript dates. - Object.keys(filterInformation).forEach((property) => { - if (filterInformation.hasOwnProperty(property)) { - drupalSettings.calendarFilterRanges[property] = []; - const ranges = filterInformation[property]; - for (let i = 0; i < ranges.length; i++) { - drupalSettings.calendarFilterRanges[property].push([ - $.datepicker.parseDate('@', ranges[i][0] * 1000), - $.datepicker.parseDate('@', ranges[i][1] * 1000), - ]); - } - } - }); - - // We may have recieved new cell data. Refresh existing datepickers. - $('.az-calendar-filter-calendar').datepicker('refresh'); - - // Initialize calendar widget wrapper if needed. - $(once('azCalendarFilter', '.az-calendar-filter-wrapper', context)) - // eslint-disable-next-line func-names - .each(function () { - const $wrapper = $(this); - // rangeKey contains our filter identifier to find calendar cell data. - const rangeKey = $wrapper.data('az-calendar-filter'); - let rangeStart = null; - let rangeEnd = null; - $wrapper.append( - '
', - ); - const $buttonWrapper = $wrapper.children( - '.az-calendar-filter-buttons', - ); - const $calendar = $wrapper.children('.az-calendar-filter-calendar'); - const $submitButton = $wrapper - .closest('.views-exposed-form') - .find('button.form-submit'); - const $dropDown = $wrapper - .closest('.views-exposed-form') - .find('.form-select'); - let task = null; - - // Set task to trigger filter element change. - function triggerFilterChange($ancestor, delay) { - if (task != null) { - clearTimeout(task); - } - task = setTimeout(() => { - // Only trigger if submit buttion isn't disabled. - if (!$submitButton.prop('disabled')) { - $ancestor.find('input').eq(0).change(); - $submitButton.click(); - task = null; - } - // The form is disabled and we are probably ajaxing. - // Wait for a while. - else { - triggerFilterChange($ancestor, 200); - } - }, delay); - } - - // Handle dropdown, if present. - $dropDown.on('change', () => { - const $ancestor = $wrapper.closest( - '.views-widget-az-calendar-filter', - ); - triggerFilterChange($ancestor, 0); - }); - - // Function to update a filter's internal date fields from datepicker. - function updateCalendarFilters(startDate, endDate) { - const $ancestor = $wrapper.closest( - '.views-widget-az-calendar-filter', - ); - - const dates = [startDate, endDate]; - for (let i = 0; i < dates.length; i++) { - const month = dates[i].getMonth() + 1; - const day = dates[i].getDate(); - const year = dates[i].getFullYear(); - $ancestor.find('input').eq(i).val(`${year}-${month}-${day}`); - } - - // Signal to UI that the inputs were updated programmatically. - triggerFilterChange($ancestor, 0); - $ancestor - .find('.btn') - .removeClass('active') - .attr('aria-pressed', 'false'); - } - - // Get initial day if present. - const $inputWrapper = $wrapper.closest( - '.views-widget-az-calendar-filter', - ); - const initial = $inputWrapper.find('input').eq(0).val(); - let calendarInitialDay = new Date(); - if (typeof initial !== 'undefined') { - const initialDates = initial.split('-'); - if (initialDates.length === 3) { - calendarInitialDay = new Date( - initialDates[0], - initialDates[1] - 1, - initialDates[2], - ); - } - } - // Initialize the calendar datepicker options. - $calendar.datepicker({ - dateFormat: 'm-d-yy', - showOtherMonths: true, - selectOtherMonths: true, - defaultDate: calendarInitialDay, - dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], - beforeShowDay(date) { - // Loop through date ranges to determine if a day qualifies. - let dateClass = 'calendar-filter-day-no-events'; - const time = date.getTime(); - let withinRange = false; - // Check if the date is within the selection window. - if (rangeStart && rangeEnd) { - if (rangeStart <= time && rangeEnd >= time) { - withinRange = true; - // Highlight a single-day range even if it has no events. - if (rangeStart === rangeEnd) { - return [true, 'calendar-filter-window']; - } - } - } - // Check if the cell information encapsulates this date. - if ( - drupalSettings.calendarFilterRanges.hasOwnProperty(rangeKey) - ) { - const ranges = drupalSettings.calendarFilterRanges[rangeKey]; - for (let i = 0; i < ranges.length; i++) { - if ( - ranges[i][0].getTime() <= time && - ranges[i][1].getTime() >= time - ) { - dateClass = withinRange - ? 'calendar-filter-window' - : 'calendar-filter-day-events'; - } - } - } - return [true, dateClass]; - }, - onChangeMonthYear(year, month) { - // When the month is changed, update the date input fields. - const startDay = new Date(year, month - 1, 1); - const endDay = new Date(year, month, 0); - rangeStart = null; - rangeEnd = null; - updateCalendarFilters(startDay, endDay); - }, - onSelect(datetext) { - // When a day is selected, update the date input fields. - const newDate = $.datepicker.parseDate('m-d-yy', datetext); - rangeStart = newDate.getTime(); - rangeEnd = newDate.getTime(); - updateCalendarFilters(newDate, newDate); - }, - }); - $calendar.children('.ui-corner-all').removeClass('ui-corner-all'); - - // Create the range selection buttons. - $buttonWrapper.append( - '', - ); - $buttonWrapper.append( - '', - ); - $buttonWrapper.append( - '', - ); - - // Handle button presses for calendar range selection buttions. - $buttonWrapper - .children('.calendar-filter-button') - .on('click', (e) => { - const $pressed = $(e.currentTarget); - const current = new Date(Date.now()); - const today = new Date( - current.getFullYear(), - current.getMonth(), - current.getDate(), - ); - const month = current.getMonth(); - const year = current.getFullYear(); - const day = current.getDay(); - const diff = current.getDate() - day; - let startDay = today; - let endDay = today; - if ($pressed.hasClass('calendar-filter-week')) { - // Compute start and end days of the week. - startDay = new Date(year, month, diff); - endDay = new Date(year, month, diff + 6); - } else if ($pressed.hasClass('calendar-filter-month')) { - // Compute start and end days of the month. - startDay = new Date(year, month, 1); - endDay = new Date(year, month + 1, 0); - } - $calendar.datepicker('setDate', startDay); - $calendar.datepicker('setDate', null); - rangeStart = startDay.getTime(); - rangeEnd = endDay.getTime(); - updateCalendarFilters(startDay, endDay); - $('.az-calendar-filter-calendar').datepicker('refresh'); - $pressed.addClass('active').attr('aria-pressed', 'true'); - }); - }); - }, - }; -})(jQuery, Drupal, drupalSettings, once); diff --git a/modules/custom/az_event/js/az_calendar_filter.js b/modules/custom/az_event/js/az_calendar_filter.js index b5cf3631ae..1c5d9cd384 100644 --- a/modules/custom/az_event/js/az_calendar_filter.js +++ b/modules/custom/az_event/js/az_calendar_filter.js @@ -1,150 +1,233 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function ($, Drupal, drupalSettings, once) { + * @file + * A JavaScript file for the datepicker calendar functionality. + * + */ + +(($, Drupal, drupalSettings, once) => { Drupal.behaviors.azCalendarFilter = { - attach: function attach(context, settings) { - var filterInformation = drupalSettings.azCalendarFilter; + attach(context, settings) { + const filterInformation = drupalSettings.azCalendarFilter; if (!drupalSettings.hasOwnProperty('calendarFilterRanges')) { drupalSettings.calendarFilterRanges = []; } + + // Drupal settings get merged rather than replaced during ajax. + // We should clear out stale entries when we process a new cells. drupalSettings.azCalendarFilter = {}; settings.azCalendarFilter = {}; - Object.keys(filterInformation).forEach(function (property) { + + // Process cell date strings into javascript dates. + Object.keys(filterInformation).forEach((property) => { if (filterInformation.hasOwnProperty(property)) { drupalSettings.calendarFilterRanges[property] = []; - var ranges = filterInformation[property]; - for (var i = 0; i < ranges.length; i++) { - drupalSettings.calendarFilterRanges[property].push([$.datepicker.parseDate('@', ranges[i][0] * 1000), $.datepicker.parseDate('@', ranges[i][1] * 1000)]); + const ranges = filterInformation[property]; + for (let i = 0; i < ranges.length; i++) { + drupalSettings.calendarFilterRanges[property].push([ + $.datepicker.parseDate('@', ranges[i][0] * 1000), + $.datepicker.parseDate('@', ranges[i][1] * 1000), + ]); } } }); + + // We may have recieved new cell data. Refresh existing datepickers. $('.az-calendar-filter-calendar').datepicker('refresh'); - $(once('azCalendarFilter', '.az-calendar-filter-wrapper', context)).each(function () { - var $wrapper = $(this); - var rangeKey = $wrapper.data('az-calendar-filter'); - var rangeStart = null; - var rangeEnd = null; - $wrapper.append('
'); - var $buttonWrapper = $wrapper.children('.az-calendar-filter-buttons'); - var $calendar = $wrapper.children('.az-calendar-filter-calendar'); - var $submitButton = $wrapper.closest('.views-exposed-form').find('button.form-submit'); - var $dropDown = $wrapper.closest('.views-exposed-form').find('.form-select'); - var task = null; - function triggerFilterChange($ancestor, delay) { - if (task != null) { - clearTimeout(task); + + // Initialize calendar widget wrapper if needed. + $(once('azCalendarFilter', '.az-calendar-filter-wrapper', context)) + // eslint-disable-next-line func-names + .each(function () { + const $wrapper = $(this); + // rangeKey contains our filter identifier to find calendar cell data. + const rangeKey = $wrapper.data('az-calendar-filter'); + let rangeStart = null; + let rangeEnd = null; + $wrapper.append( + '
', + ); + const $buttonWrapper = $wrapper.children( + '.az-calendar-filter-buttons', + ); + const $calendar = $wrapper.children('.az-calendar-filter-calendar'); + const $submitButton = $wrapper + .closest('.views-exposed-form') + .find('button.form-submit'); + const $dropDown = $wrapper + .closest('.views-exposed-form') + .find('.form-select'); + let task = null; + + // Set task to trigger filter element change. + function triggerFilterChange($ancestor, delay) { + if (task != null) { + clearTimeout(task); + } + task = setTimeout(() => { + // Only trigger if submit buttion isn't disabled. + if (!$submitButton.prop('disabled')) { + $ancestor.find('input').eq(0).change(); + $submitButton.click(); + task = null; + } + // The form is disabled and we are probably ajaxing. + // Wait for a while. + else { + triggerFilterChange($ancestor, 200); + } + }, delay); } - task = setTimeout(function () { - if (!$submitButton.prop('disabled')) { - $ancestor.find('input').eq(0).change(); - $submitButton.click(); - task = null; - } else { - triggerFilterChange($ancestor, 200); + + // Handle dropdown, if present. + $dropDown.on('change', () => { + const $ancestor = $wrapper.closest( + '.views-widget-az-calendar-filter', + ); + triggerFilterChange($ancestor, 0); + }); + + // Function to update a filter's internal date fields from datepicker. + function updateCalendarFilters(startDate, endDate) { + const $ancestor = $wrapper.closest( + '.views-widget-az-calendar-filter', + ); + + const dates = [startDate, endDate]; + for (let i = 0; i < dates.length; i++) { + const month = dates[i].getMonth() + 1; + const day = dates[i].getDate(); + const year = dates[i].getFullYear(); + $ancestor.find('input').eq(i).val(`${year}-${month}-${day}`); } - }, delay); - } - $dropDown.on('change', function () { - var $ancestor = $wrapper.closest('.views-widget-az-calendar-filter'); - triggerFilterChange($ancestor, 0); - }); - function updateCalendarFilters(startDate, endDate) { - var $ancestor = $wrapper.closest('.views-widget-az-calendar-filter'); - var dates = [startDate, endDate]; - for (var i = 0; i < dates.length; i++) { - var month = dates[i].getMonth() + 1; - var day = dates[i].getDate(); - var year = dates[i].getFullYear(); - $ancestor.find('input').eq(i).val("".concat(year, "-").concat(month, "-").concat(day)); + + // Signal to UI that the inputs were updated programmatically. + triggerFilterChange($ancestor, 0); + $ancestor + .find('.btn') + .removeClass('active') + .attr('aria-pressed', 'false'); } - triggerFilterChange($ancestor, 0); - $ancestor.find('.btn').removeClass('active').attr('aria-pressed', 'false'); - } - var $inputWrapper = $wrapper.closest('.views-widget-az-calendar-filter'); - var initial = $inputWrapper.find('input').eq(0).val(); - var calendarInitialDay = new Date(); - if (typeof initial !== 'undefined') { - var initialDates = initial.split('-'); - if (initialDates.length === 3) { - calendarInitialDay = new Date(initialDates[0], initialDates[1] - 1, initialDates[2]); + + // Get initial day if present. + const $inputWrapper = $wrapper.closest( + '.views-widget-az-calendar-filter', + ); + const initial = $inputWrapper.find('input').eq(0).val(); + let calendarInitialDay = new Date(); + if (typeof initial !== 'undefined') { + const initialDates = initial.split('-'); + if (initialDates.length === 3) { + calendarInitialDay = new Date( + initialDates[0], + initialDates[1] - 1, + initialDates[2], + ); + } } - } - $calendar.datepicker({ - dateFormat: 'm-d-yy', - showOtherMonths: true, - selectOtherMonths: true, - defaultDate: calendarInitialDay, - dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], - beforeShowDay: function beforeShowDay(date) { - var dateClass = 'calendar-filter-day-no-events'; - var time = date.getTime(); - var withinRange = false; - if (rangeStart && rangeEnd) { - if (rangeStart <= time && rangeEnd >= time) { - withinRange = true; - if (rangeStart === rangeEnd) { - return [true, 'calendar-filter-window']; + // Initialize the calendar datepicker options. + $calendar.datepicker({ + dateFormat: 'm-d-yy', + showOtherMonths: true, + selectOtherMonths: true, + defaultDate: calendarInitialDay, + dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + beforeShowDay(date) { + // Loop through date ranges to determine if a day qualifies. + let dateClass = 'calendar-filter-day-no-events'; + const time = date.getTime(); + let withinRange = false; + // Check if the date is within the selection window. + if (rangeStart && rangeEnd) { + if (rangeStart <= time && rangeEnd >= time) { + withinRange = true; + // Highlight a single-day range even if it has no events. + if (rangeStart === rangeEnd) { + return [true, 'calendar-filter-window']; + } } } - } - if (drupalSettings.calendarFilterRanges.hasOwnProperty(rangeKey)) { - var ranges = drupalSettings.calendarFilterRanges[rangeKey]; - for (var i = 0; i < ranges.length; i++) { - if (ranges[i][0].getTime() <= time && ranges[i][1].getTime() >= time) { - dateClass = withinRange ? 'calendar-filter-window' : 'calendar-filter-day-events'; + // Check if the cell information encapsulates this date. + if ( + drupalSettings.calendarFilterRanges.hasOwnProperty(rangeKey) + ) { + const ranges = drupalSettings.calendarFilterRanges[rangeKey]; + for (let i = 0; i < ranges.length; i++) { + if ( + ranges[i][0].getTime() <= time && + ranges[i][1].getTime() >= time + ) { + dateClass = withinRange + ? 'calendar-filter-window' + : 'calendar-filter-day-events'; + } } } - } - return [true, dateClass]; - }, - onChangeMonthYear: function onChangeMonthYear(year, month) { - var startDay = new Date(year, month - 1, 1); - var endDay = new Date(year, month, 0); - rangeStart = null; - rangeEnd = null; - updateCalendarFilters(startDay, endDay); - }, - onSelect: function onSelect(datetext) { - var newDate = $.datepicker.parseDate('m-d-yy', datetext); - rangeStart = newDate.getTime(); - rangeEnd = newDate.getTime(); - updateCalendarFilters(newDate, newDate); - } - }); - $calendar.children('.ui-corner-all').removeClass('ui-corner-all'); - $buttonWrapper.append(''); - $buttonWrapper.append(''); - $buttonWrapper.append(''); - $buttonWrapper.children('.calendar-filter-button').on('click', function (e) { - var $pressed = $(e.currentTarget); - var current = new Date(Date.now()); - var today = new Date(current.getFullYear(), current.getMonth(), current.getDate()); - var month = current.getMonth(); - var year = current.getFullYear(); - var day = current.getDay(); - var diff = current.getDate() - day; - var startDay = today; - var endDay = today; - if ($pressed.hasClass('calendar-filter-week')) { - startDay = new Date(year, month, diff); - endDay = new Date(year, month, diff + 6); - } else if ($pressed.hasClass('calendar-filter-month')) { - startDay = new Date(year, month, 1); - endDay = new Date(year, month + 1, 0); - } - $calendar.datepicker('setDate', startDay); - $calendar.datepicker('setDate', null); - rangeStart = startDay.getTime(); - rangeEnd = endDay.getTime(); - updateCalendarFilters(startDay, endDay); - $('.az-calendar-filter-calendar').datepicker('refresh'); - $pressed.addClass('active').attr('aria-pressed', 'true'); + return [true, dateClass]; + }, + onChangeMonthYear(year, month) { + // When the month is changed, update the date input fields. + const startDay = new Date(year, month - 1, 1); + const endDay = new Date(year, month, 0); + rangeStart = null; + rangeEnd = null; + updateCalendarFilters(startDay, endDay); + }, + onSelect(datetext) { + // When a day is selected, update the date input fields. + const newDate = $.datepicker.parseDate('m-d-yy', datetext); + rangeStart = newDate.getTime(); + rangeEnd = newDate.getTime(); + updateCalendarFilters(newDate, newDate); + }, + }); + $calendar.children('.ui-corner-all').removeClass('ui-corner-all'); + + // Create the range selection buttons. + $buttonWrapper.append( + '', + ); + $buttonWrapper.append( + '', + ); + $buttonWrapper.append( + '', + ); + + // Handle button presses for calendar range selection buttions. + $buttonWrapper + .children('.calendar-filter-button') + .on('click', (e) => { + const $pressed = $(e.currentTarget); + const current = new Date(Date.now()); + const today = new Date( + current.getFullYear(), + current.getMonth(), + current.getDate(), + ); + const month = current.getMonth(); + const year = current.getFullYear(); + const day = current.getDay(); + const diff = current.getDate() - day; + let startDay = today; + let endDay = today; + if ($pressed.hasClass('calendar-filter-week')) { + // Compute start and end days of the week. + startDay = new Date(year, month, diff); + endDay = new Date(year, month, diff + 6); + } else if ($pressed.hasClass('calendar-filter-month')) { + // Compute start and end days of the month. + startDay = new Date(year, month, 1); + endDay = new Date(year, month + 1, 0); + } + $calendar.datepicker('setDate', startDay); + $calendar.datepicker('setDate', null); + rangeStart = startDay.getTime(); + rangeEnd = endDay.getTime(); + updateCalendarFilters(startDay, endDay); + $('.az-calendar-filter-calendar').datepicker('refresh'); + $pressed.addClass('active').attr('aria-pressed', 'true'); + }); }); - }); - } + }, }; -})(jQuery, Drupal, drupalSettings, once); \ No newline at end of file +})(jQuery, Drupal, drupalSettings, once); diff --git a/modules/custom/az_finder/js/active-filter-count.es6.js b/modules/custom/az_finder/js/active-filter-count.es6.js deleted file mode 100644 index f82913907f..0000000000 --- a/modules/custom/az_finder/js/active-filter-count.es6.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @file - * active-filter-count.es6.js - * - * This file contains the JavaScript needed to count active filters in - * exposed filter forms. - */ -((drupalSettings, Drupal) => { - Drupal.behaviors.azFinderFilterCount = { - attach(context, settings) { - const filterContainers = context.querySelectorAll( - '[data-az-better-exposed-filters]', - ); - - filterContainers.forEach((container) => { - const filterCountDisplay = container.querySelector( - '.js-active-filter-count', - ); - const textInputFields = container.querySelectorAll( - 'input[type="text"], input[type="search"]', - ); - const checkboxesAndRadios = container.querySelectorAll( - 'input[type="checkbox"], input[type="radio"]', - ); - const alwaysDisplayResetButton = - settings.azFinder.alwaysDisplayResetButton || false; - - const calculateActiveFilterCount = () => { - let count = container.querySelectorAll( - 'input[type="checkbox"]:checked, input[type="radio"]:checked', - ).length; - textInputFields.forEach((inputField) => { - if (inputField.value.trim().length >= 1) { - count += 1; - } - }); - return count; - }; - - const updateActiveFilterDisplay = () => { - const activeFilterCount = calculateActiveFilterCount(); - // See if the badge is already present. - let badge = filterCountDisplay.querySelector('.badge'); - if (!badge) { - badge = document.createElement('span'); - badge.classList.add('badge', 'badge-light'); - badge.textContent = '0'; - } - if (activeFilterCount > 0) { - badge.classList.remove('sr-only'); - badge.classList.remove('position-absolute'); - } else { - badge.classList.add('sr-only'); - badge.classList.add('position-absolute'); - } - let srText = badge.querySelector('.sr-only'); - if (!srText) { - // Create the screen reader-only text. - srText = document.createElement('span'); - srText.classList.add('sr-only'); - srText.textContent = `Active filters: `; - badge.appendChild(srText); - } - // Set the text value. - badge.firstChild.textContent = `${activeFilterCount}`; - // Replace the children of the filter count display with the badge. - filterCountDisplay.replaceChildren(badge); - - // Handle the reset button visibility. - const resetButton = container.querySelector( - '.js-active-filters-reset', - ); - - if (resetButton) { - if (alwaysDisplayResetButton || activeFilterCount > 0) { - resetButton.classList.remove('d-none'); - } else { - resetButton.classList.add('d-none'); - } - } - }; - - textInputFields.forEach((inputField) => - inputField.addEventListener('input', updateActiveFilterDisplay, { - passive: true, - }), - ); - checkboxesAndRadios.forEach((input) => - input.addEventListener('change', updateActiveFilterDisplay, { - passive: true, - }), - ); - container.addEventListener( - 'az-finder-filter-reset', - updateActiveFilterDisplay, - { passive: true }, - ); - - // Initial update call. - updateActiveFilterDisplay(); - }); - }, - }; -})(drupalSettings, Drupal); diff --git a/modules/custom/az_finder/js/active-filter-count.js b/modules/custom/az_finder/js/active-filter-count.js index 6efc361500..f82913907f 100644 --- a/modules/custom/az_finder/js/active-filter-count.js +++ b/modules/custom/az_finder/js/active-filter-count.js @@ -1,30 +1,46 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (drupalSettings, Drupal) { + * @file + * active-filter-count.es6.js + * + * This file contains the JavaScript needed to count active filters in + * exposed filter forms. + */ +((drupalSettings, Drupal) => { Drupal.behaviors.azFinderFilterCount = { - attach: function attach(context, settings) { - var filterContainers = context.querySelectorAll('[data-az-better-exposed-filters]'); - filterContainers.forEach(function (container) { - var filterCountDisplay = container.querySelector('.js-active-filter-count'); - var textInputFields = container.querySelectorAll('input[type="text"], input[type="search"]'); - var checkboxesAndRadios = container.querySelectorAll('input[type="checkbox"], input[type="radio"]'); - var alwaysDisplayResetButton = settings.azFinder.alwaysDisplayResetButton || false; - var calculateActiveFilterCount = function calculateActiveFilterCount() { - var count = container.querySelectorAll('input[type="checkbox"]:checked, input[type="radio"]:checked').length; - textInputFields.forEach(function (inputField) { + attach(context, settings) { + const filterContainers = context.querySelectorAll( + '[data-az-better-exposed-filters]', + ); + + filterContainers.forEach((container) => { + const filterCountDisplay = container.querySelector( + '.js-active-filter-count', + ); + const textInputFields = container.querySelectorAll( + 'input[type="text"], input[type="search"]', + ); + const checkboxesAndRadios = container.querySelectorAll( + 'input[type="checkbox"], input[type="radio"]', + ); + const alwaysDisplayResetButton = + settings.azFinder.alwaysDisplayResetButton || false; + + const calculateActiveFilterCount = () => { + let count = container.querySelectorAll( + 'input[type="checkbox"]:checked, input[type="radio"]:checked', + ).length; + textInputFields.forEach((inputField) => { if (inputField.value.trim().length >= 1) { count += 1; } }); return count; }; - var updateActiveFilterDisplay = function updateActiveFilterDisplay() { - var activeFilterCount = calculateActiveFilterCount(); - var badge = filterCountDisplay.querySelector('.badge'); + + const updateActiveFilterDisplay = () => { + const activeFilterCount = calculateActiveFilterCount(); + // See if the badge is already present. + let badge = filterCountDisplay.querySelector('.badge'); if (!badge) { badge = document.createElement('span'); badge.classList.add('badge', 'badge-light'); @@ -37,16 +53,24 @@ badge.classList.add('sr-only'); badge.classList.add('position-absolute'); } - var srText = badge.querySelector('.sr-only'); + let srText = badge.querySelector('.sr-only'); if (!srText) { + // Create the screen reader-only text. srText = document.createElement('span'); srText.classList.add('sr-only'); - srText.textContent = "Active filters: "; + srText.textContent = `Active filters: `; badge.appendChild(srText); } - badge.firstChild.textContent = "".concat(activeFilterCount); + // Set the text value. + badge.firstChild.textContent = `${activeFilterCount}`; + // Replace the children of the filter count display with the badge. filterCountDisplay.replaceChildren(badge); - var resetButton = container.querySelector('.js-active-filters-reset'); + + // Handle the reset button visibility. + const resetButton = container.querySelector( + '.js-active-filters-reset', + ); + if (resetButton) { if (alwaysDisplayResetButton || activeFilterCount > 0) { resetButton.classList.remove('d-none'); @@ -55,21 +79,26 @@ } } }; - textInputFields.forEach(function (inputField) { - return inputField.addEventListener('input', updateActiveFilterDisplay, { - passive: true - }); - }); - checkboxesAndRadios.forEach(function (input) { - return input.addEventListener('change', updateActiveFilterDisplay, { - passive: true - }); - }); - container.addEventListener('az-finder-filter-reset', updateActiveFilterDisplay, { - passive: true - }); + + textInputFields.forEach((inputField) => + inputField.addEventListener('input', updateActiveFilterDisplay, { + passive: true, + }), + ); + checkboxesAndRadios.forEach((input) => + input.addEventListener('change', updateActiveFilterDisplay, { + passive: true, + }), + ); + container.addEventListener( + 'az-finder-filter-reset', + updateActiveFilterDisplay, + { passive: true }, + ); + + // Initial update call. updateActiveFilterDisplay(); }); - } + }, }; -})(drupalSettings, Drupal); \ No newline at end of file +})(drupalSettings, Drupal); diff --git a/modules/custom/az_finder/js/active-filter-reset.es6.js b/modules/custom/az_finder/js/active-filter-reset.es6.js deleted file mode 100644 index f518ca4dcf..0000000000 --- a/modules/custom/az_finder/js/active-filter-reset.es6.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @file - * active-filter-reset.es6.js - * - * This file contains the JavaScript needed to reset active filters in - * exposed filter forms. - */ -((Drupal) => { - Drupal.behaviors.azFinderActiveFilterReset = { - attach(context) { - const clickHandler = (selector, action) => { - const element = selector.querySelector('.js-form-submit'); - if (element && action) action(element); - }; - - const resetFilters = (container) => { - const checkboxes = container.querySelectorAll('input[type="checkbox"]'); - const textFields = container.querySelectorAll('input[type="text"]'); - - checkboxes.forEach((checkbox) => { - checkbox.checked = false; - }); - textFields.forEach((textField) => { - textField.value = ''; - }); - clickHandler(container, (element) => element.click()); - - const event = new CustomEvent('az-finder-filter-reset', { - bubbles: true, - detail: { message: 'Filters have been reset.' }, - }); - container.dispatchEvent(event); - }; - - context - .querySelectorAll('[data-az-better-exposed-filters]') - .forEach((container) => { - const resetButton = container.querySelector( - '.js-active-filters-reset', - ); - if (resetButton) { - resetButton.addEventListener('click', (event) => { - event.preventDefault(); - resetFilters(container); - }); - } - }); - }, - }; -})(Drupal); diff --git a/modules/custom/az_finder/js/active-filter-reset.js b/modules/custom/az_finder/js/active-filter-reset.js index 07004e3d38..f518ca4dcf 100644 --- a/modules/custom/az_finder/js/active-filter-reset.js +++ b/modules/custom/az_finder/js/active-filter-reset.js @@ -1,45 +1,50 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (Drupal) { + * @file + * active-filter-reset.es6.js + * + * This file contains the JavaScript needed to reset active filters in + * exposed filter forms. + */ +((Drupal) => { Drupal.behaviors.azFinderActiveFilterReset = { - attach: function attach(context) { - var clickHandler = function clickHandler(selector, action) { - var element = selector.querySelector('.js-form-submit'); + attach(context) { + const clickHandler = (selector, action) => { + const element = selector.querySelector('.js-form-submit'); if (element && action) action(element); }; - var resetFilters = function resetFilters(container) { - var checkboxes = container.querySelectorAll('input[type="checkbox"]'); - var textFields = container.querySelectorAll('input[type="text"]'); - checkboxes.forEach(function (checkbox) { + + const resetFilters = (container) => { + const checkboxes = container.querySelectorAll('input[type="checkbox"]'); + const textFields = container.querySelectorAll('input[type="text"]'); + + checkboxes.forEach((checkbox) => { checkbox.checked = false; }); - textFields.forEach(function (textField) { + textFields.forEach((textField) => { textField.value = ''; }); - clickHandler(container, function (element) { - return element.click(); - }); - var event = new CustomEvent('az-finder-filter-reset', { + clickHandler(container, (element) => element.click()); + + const event = new CustomEvent('az-finder-filter-reset', { bubbles: true, - detail: { - message: 'Filters have been reset.' - } + detail: { message: 'Filters have been reset.' }, }); container.dispatchEvent(event); }; - context.querySelectorAll('[data-az-better-exposed-filters]').forEach(function (container) { - var resetButton = container.querySelector('.js-active-filters-reset'); - if (resetButton) { - resetButton.addEventListener('click', function (event) { - event.preventDefault(); - resetFilters(container); - }); - } - }); - } + + context + .querySelectorAll('[data-az-better-exposed-filters]') + .forEach((container) => { + const resetButton = container.querySelector( + '.js-active-filters-reset', + ); + if (resetButton) { + resetButton.addEventListener('click', (event) => { + event.preventDefault(); + resetFilters(container); + }); + } + }); + }, }; -})(Drupal); \ No newline at end of file +})(Drupal); diff --git a/modules/custom/az_finder/js/taxonomy-index-tid-widget.es6.js b/modules/custom/az_finder/js/taxonomy-index-tid-widget.es6.js deleted file mode 100644 index a5d7e736ef..0000000000 --- a/modules/custom/az_finder/js/taxonomy-index-tid-widget.es6.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @file - * active-filter-count.es6.js - * - * This file contains the JavaScript needed to count active filters in - * exposed filter forms. - */ -((Drupal) => { - Drupal.behaviors.azFinderTaxonomyIndexTidWidget = { - attach(context, settings) { - const filterContainers = context.querySelectorAll( - '[data-az-better-exposed-filters]', - ); - - function setupSVGButtonListeners(container) { - const svgLevel0ReplaceButtons = container.querySelectorAll( - '.js-svg-replace-level-0', - ); - const svgLevel1ReplaceButtons = container.querySelectorAll( - '.js-svg-replace-level-1', - ); - const { icons } = settings.azFinder; - - function getNewSVGMarkup(isExpanded, level) { - if (level === 0) { - return isExpanded ? icons.level_0_expand : icons.level_0_collapse; - } - return isExpanded ? icons.level_1_expand : icons.level_1_collapse; - } - - function toggleSVG(event) { - const button = event.currentTarget; - const level = button.classList.contains('js-svg-replace-level-0') - ? 0 - : 1; - const isExpanded = button.getAttribute('aria-expanded') === 'true'; - const newSVGMarkup = getNewSVGMarkup(isExpanded, level); - button.querySelector('svg').outerHTML = newSVGMarkup; - } - - svgLevel0ReplaceButtons.forEach((button) => { - button.addEventListener('click', toggleSVG); - }); - - svgLevel1ReplaceButtons.forEach((button) => { - button.addEventListener('click', toggleSVG); - }); - } - - filterContainers.forEach((container) => { - setupSVGButtonListeners(container, settings); - }); - }, - }; -})(Drupal); diff --git a/modules/custom/az_finder/js/taxonomy-index-tid-widget.js b/modules/custom/az_finder/js/taxonomy-index-tid-widget.js index c975d26ac0..a5d7e736ef 100644 --- a/modules/custom/az_finder/js/taxonomy-index-tid-widget.js +++ b/modules/custom/az_finder/js/taxonomy-index-tid-widget.js @@ -1,40 +1,55 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (Drupal) { + * @file + * active-filter-count.es6.js + * + * This file contains the JavaScript needed to count active filters in + * exposed filter forms. + */ +((Drupal) => { Drupal.behaviors.azFinderTaxonomyIndexTidWidget = { - attach: function attach(context, settings) { - var filterContainers = context.querySelectorAll('[data-az-better-exposed-filters]'); + attach(context, settings) { + const filterContainers = context.querySelectorAll( + '[data-az-better-exposed-filters]', + ); + function setupSVGButtonListeners(container) { - var svgLevel0ReplaceButtons = container.querySelectorAll('.js-svg-replace-level-0'); - var svgLevel1ReplaceButtons = container.querySelectorAll('.js-svg-replace-level-1'); - var icons = settings.azFinder.icons; + const svgLevel0ReplaceButtons = container.querySelectorAll( + '.js-svg-replace-level-0', + ); + const svgLevel1ReplaceButtons = container.querySelectorAll( + '.js-svg-replace-level-1', + ); + const { icons } = settings.azFinder; + function getNewSVGMarkup(isExpanded, level) { if (level === 0) { return isExpanded ? icons.level_0_expand : icons.level_0_collapse; } return isExpanded ? icons.level_1_expand : icons.level_1_collapse; } + function toggleSVG(event) { - var button = event.currentTarget; - var level = button.classList.contains('js-svg-replace-level-0') ? 0 : 1; - var isExpanded = button.getAttribute('aria-expanded') === 'true'; - var newSVGMarkup = getNewSVGMarkup(isExpanded, level); + const button = event.currentTarget; + const level = button.classList.contains('js-svg-replace-level-0') + ? 0 + : 1; + const isExpanded = button.getAttribute('aria-expanded') === 'true'; + const newSVGMarkup = getNewSVGMarkup(isExpanded, level); button.querySelector('svg').outerHTML = newSVGMarkup; } - svgLevel0ReplaceButtons.forEach(function (button) { + + svgLevel0ReplaceButtons.forEach((button) => { button.addEventListener('click', toggleSVG); }); - svgLevel1ReplaceButtons.forEach(function (button) { + + svgLevel1ReplaceButtons.forEach((button) => { button.addEventListener('click', toggleSVG); }); } - filterContainers.forEach(function (container) { + + filterContainers.forEach((container) => { setupSVGButtonListeners(container, settings); }); - } + }, }; -})(Drupal); \ No newline at end of file +})(Drupal); diff --git a/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.es6.js b/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.es6.js deleted file mode 100644 index 7a4dd7a352..0000000000 --- a/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.es6.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @file - * Provides click to copy functionality. - */ - -((window, document) => { - function init() { - const copyLinks = document.querySelectorAll('.js-click2copy a'); - - function removeClass(element) { - setTimeout(() => { - element.classList.remove('js-click-copy--copied'); - }, 3000); - } - - /** - * Handles click events on the click to copy links. - * - * @param {Event} event - * The event object. - * @return {boolean} - * Returns false if the event type is not click. Otherwise, adds the link to - * the user's clipboard and adds a class to the link to indicate that it has been - * copied. - */ - function _handleClick(event) { - const baseUrl = window.location.origin; - if (event.type === 'click') { - event.preventDefault(); - const href = event.target.getAttribute('href'); - navigator.clipboard.writeText(baseUrl + href); - event.target.classList.add('js-click-copy--copied'); - removeClass(event.target); - } else { - return false; - } - } - - copyLinks.forEach((element) => { - element.addEventListener('click', _handleClick, false); - }); - } - - if (document.readyState === 'complete') { - init(); - } else { - document.addEventListener('DOMContentLoaded', init); - } -})(this, this.document); diff --git a/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.js b/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.js index c1bc3b61fb..7a4dd7a352 100644 --- a/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.js +++ b/modules/custom/az_marketing_cloud/js/az-marketing-cloud-admin.js @@ -1,22 +1,33 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (window, document) { + * @file + * Provides click to copy functionality. + */ + +((window, document) => { function init() { - var copyLinks = document.querySelectorAll('.js-click2copy a'); + const copyLinks = document.querySelectorAll('.js-click2copy a'); + function removeClass(element) { - setTimeout(function () { + setTimeout(() => { element.classList.remove('js-click-copy--copied'); }, 3000); } + + /** + * Handles click events on the click to copy links. + * + * @param {Event} event + * The event object. + * @return {boolean} + * Returns false if the event type is not click. Otherwise, adds the link to + * the user's clipboard and adds a class to the link to indicate that it has been + * copied. + */ function _handleClick(event) { - var baseUrl = window.location.origin; + const baseUrl = window.location.origin; if (event.type === 'click') { event.preventDefault(); - var href = event.target.getAttribute('href'); + const href = event.target.getAttribute('href'); navigator.clipboard.writeText(baseUrl + href); event.target.classList.add('js-click-copy--copied'); removeClass(event.target); @@ -24,13 +35,15 @@ return false; } } - copyLinks.forEach(function (element) { + + copyLinks.forEach((element) => { element.addEventListener('click', _handleClick, false); }); } + if (document.readyState === 'complete') { init(); } else { document.addEventListener('DOMContentLoaded', init); } -})(this, this.document); \ No newline at end of file +})(this, this.document); diff --git a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.es6.js b/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.es6.js deleted file mode 100644 index 7b60bcb7d3..0000000000 --- a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.es6.js +++ /dev/null @@ -1,156 +0,0 @@ -((Drupal, once) => { - Drupal.behaviors.az_vimeo_video_bg = { - attach() { - function initVimeoBackgrounds() { - // Set default aspect ratio for Vimeo videos. - const defaultAspectRatio = 16 / 9; - - // Error messaging function - function vimeoError(error) { - switch (error.name) { - case 'PasswordError': - console.log('The Vimeo video is password-protected.'); - break; - case 'PrivacyError': - console.log('The Vimeo video is private.'); - break; - default: - console.log( - `Some errors occurred with the Vimeo video: ${error.name}`, - ); - break; - } - } - - // Resize Logic - function setDimensions(container) { - const parentParagraph = container.parentNode; - let parentHeight = parentParagraph.offsetHeight; - parentHeight = `${parentHeight.toString()}px`; - container.style.height = parentHeight; - if (container.dataset.style === 'bottom') { - container.style.top = 0; - } - const thisPlayer = - container.getElementsByClassName('az-video-player')[0].firstChild; - if (thisPlayer === null) { - return; - } - thisPlayer.style.zIndex = -100; - const width = container.offsetWidth; - const height = container.offsetHeight; - const pWidth = Math.ceil(height * defaultAspectRatio); // get new player width - const pHeight = Math.ceil(width / defaultAspectRatio); // get new player height - let widthMinuspWidthDividedByTwo = (width - pWidth) / 2; - widthMinuspWidthDividedByTwo = `${widthMinuspWidthDividedByTwo.toString()}px`; - let pHeightRatio = (height - pHeight) / 2; - pHeightRatio = `${pHeightRatio.toString()}px`; - // when screen aspect ratio differs from video, - // video must center and underlay one dimension. - if (width / defaultAspectRatio < height) { - // if new video height < window height (gap underneath) - thisPlayer.width = pWidth; - thisPlayer.height = height; - thisPlayer.style.left = widthMinuspWidthDividedByTwo; - thisPlayer.style.top = 0; - // player width is greater, offset left; reset top - } else { - // new video width < window width (gap to right) - // get new player height - thisPlayer.height = pHeight; - thisPlayer.width = width; - thisPlayer.style.top = pHeightRatio; - thisPlayer.style.left = 0; - } - } - - if (window.screen && window.screen.width > 768) { - // @see https://developer.vimeo.com/player/sdk/basics - const defaultOptions = { - vimeoId: '', - autopause: false, - autoplay: true, - controls: 0, - loop: true, - muted: true, - playButtonClass: 'az-video-play', - pauseButtonClass: 'az-video-pause', - }; - const bgVideoParagraphs = document.getElementsByClassName( - 'az-js-vimeo-video-background', - ); - - // Load Vimeo API - const tag = document.createElement('script'); - tag.src = 'https://player.vimeo.com/api/player.js'; - document.head.appendChild(tag); - - // Methods - // Ensure Vimeo API is loaded before proceeding - tag.onload = () => { - Array.from(bgVideoParagraphs).forEach((element) => { - const parentParagraph = element.parentNode; - const vimeoId = element.dataset.vimeoVideoId; - const videoPlayer = - element.getElementsByClassName('az-video-player')[0]; - const VimeoPlayer = window.Vimeo; - - // Initialize Vimeo Player - element.player = new VimeoPlayer.Player(videoPlayer, { - id: vimeoId, - autopause: defaultOptions.autopause, - autoplay: element.dataset.autoplay === 'true', - controls: 0, - loop: defaultOptions.loop, - muted: defaultOptions.muted, - }); - - // Event listener for starting play. - element.player.on('bufferend', () => { - setDimensions(element); - parentParagraph.classList.add('az-video-playing'); - }); - - // Play Button - const playButtons = - element.getElementsByClassName('az-video-play'); - if (playButtons[0]) { - playButtons[0].addEventListener('click', (event) => { - event.preventDefault(); - element.player.play().catch((error) => vimeoError(error)); - parentParagraph.classList.add('az-video-playing'); - parentParagraph.classList.remove('az-video-paused'); - }); - } - - // Pause Button - const pauseButtons = - element.getElementsByClassName('az-video-pause'); - if (pauseButtons[0]) { - pauseButtons[0].addEventListener('click', (event) => { - event.preventDefault(); - element.player.pause().catch((error) => vimeoError(error)); - parentParagraph.classList.add('az-video-paused'); - parentParagraph.classList.remove('az-video-playing'); - }); - } - }); - }; - - // Resize handler updates width, height and offset - // of player after resize/init. - const resize = () => { - Array.from(bgVideoParagraphs).forEach((element) => { - setDimensions(element); - }); - }; - window.addEventListener('resize', () => { - resize(); - }); - } - } - - once('vimeoTextOnMedia-init', 'body').forEach(initVimeoBackgrounds); - }, - }; -})(Drupal, once); diff --git a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.js b/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.js index 9487dd1b2a..7ae28021bc 100644 --- a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.js +++ b/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_vimeo.js @@ -1,62 +1,145 @@ -/** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (Drupal, once) { +((Drupal, once) => { Drupal.behaviors.az_vimeo_video_bg = { - attach: function attach() { + attach() { function initVimeoBackgrounds() { - var defaultAspectRatio = 16 / 9; + // Set default aspect ratio for Vimeo videos. + const defaultAspectRatio = 16 / 9; + + // Error messaging function function vimeoError(error) { switch (error.name) { case 'PasswordError': + // eslint-disable-next-line no-console console.log('The Vimeo video is password-protected.'); break; case 'PrivacyError': + // eslint-disable-next-line no-console console.log('The Vimeo video is private.'); break; default: - console.log("Some errors occurred with the Vimeo video: ".concat(error.name)); + // eslint-disable-next-line no-console + console.log( + `Some errors occurred with the Vimeo video: ${error.name}`, + ); break; } } + + // Resize Logic function setDimensions(container) { - var parentParagraph = container.parentNode; - var parentHeight = parentParagraph.offsetHeight; - parentHeight = "".concat(parentHeight.toString(), "px"); + const parentParagraph = container.parentNode; + let parentHeight = parentParagraph.offsetHeight; + parentHeight = `${parentHeight.toString()}px`; container.style.height = parentHeight; if (container.dataset.style === 'bottom') { container.style.top = 0; } - var thisPlayer = container.getElementsByClassName('az-video-player')[0].firstChild; + const thisPlayer = + container.getElementsByClassName('az-video-player')[0].firstChild; if (thisPlayer === null) { return; } thisPlayer.style.zIndex = -100; - var width = container.offsetWidth; - var height = container.offsetHeight; - var pWidth = Math.ceil(height * defaultAspectRatio); - var pHeight = Math.ceil(width / defaultAspectRatio); - var widthMinuspWidthDividedByTwo = (width - pWidth) / 2; - widthMinuspWidthDividedByTwo = "".concat(widthMinuspWidthDividedByTwo.toString(), "px"); - var pHeightRatio = (height - pHeight) / 2; - pHeightRatio = "".concat(pHeightRatio.toString(), "px"); + const width = container.offsetWidth; + const height = container.offsetHeight; + const pWidth = Math.ceil(height * defaultAspectRatio); // get new player width + const pHeight = Math.ceil(width / defaultAspectRatio); // get new player height + let widthMinuspWidthDividedByTwo = (width - pWidth) / 2; + widthMinuspWidthDividedByTwo = `${widthMinuspWidthDividedByTwo.toString()}px`; + let pHeightRatio = (height - pHeight) / 2; + pHeightRatio = `${pHeightRatio.toString()}px`; + // when screen aspect ratio differs from video, + // video must center and underlay one dimension. if (width / defaultAspectRatio < height) { + // if new video height < window height (gap underneath) thisPlayer.width = pWidth; thisPlayer.height = height; thisPlayer.style.left = widthMinuspWidthDividedByTwo; thisPlayer.style.top = 0; + // player width is greater, offset left; reset top } else { + // new video width < window width (gap to right) + // get new player height thisPlayer.height = pHeight; thisPlayer.width = width; thisPlayer.style.top = pHeightRatio; thisPlayer.style.left = 0; } } + + // Helper function for play button click + function handlePlayButtonClick(element, parentParagraph) { + return (event) => { + event.preventDefault(); + element.player.play().catch((error) => vimeoError(error)); + parentParagraph.classList.add('az-video-playing'); + parentParagraph.classList.remove('az-video-paused'); + }; + } + + // Helper function for pause button click + function handlePauseButtonClick(element, parentParagraph) { + return (event) => { + event.preventDefault(); + element.player.pause().catch((error) => vimeoError(error)); + parentParagraph.classList.add('az-video-paused'); + parentParagraph.classList.remove('az-video-playing'); + }; + } + + // Helper function to initialize a single Vimeo element + function initVimeoElement(element, defaultOptions) { + const parentParagraph = element.parentNode; + const vimeoId = element.dataset.vimeoVideoId; + const videoPlayer = + element.getElementsByClassName('az-video-player')[0]; + const VimeoPlayer = window.Vimeo; + + // Initialize Vimeo Player + element.player = new VimeoPlayer.Player(videoPlayer, { + id: vimeoId, + autopause: defaultOptions.autopause, + autoplay: element.dataset.autoplay === 'true', + controls: 0, + loop: defaultOptions.loop, + muted: defaultOptions.muted, + }); + + // Event listener for starting play. + element.player.on('bufferend', () => { + setDimensions(element); + parentParagraph.classList.add('az-video-playing'); + }); + + // Play Button + const playButtons = element.getElementsByClassName('az-video-play'); + if (playButtons[0]) { + playButtons[0].addEventListener( + 'click', + handlePlayButtonClick(element, parentParagraph), + ); + } + + // Pause Button + const pauseButtons = element.getElementsByClassName('az-video-pause'); + if (pauseButtons[0]) { + pauseButtons[0].addEventListener( + 'click', + handlePauseButtonClick(element, parentParagraph), + ); + } + } + + // Helper function to handle API loaded callback + function handleVimeoAPILoaded(bgVideoParagraphs, defaultOptions) { + Array.from(bgVideoParagraphs).forEach((element) => { + initVimeoElement(element, defaultOptions); + }); + } + if (window.screen && window.screen.width > 768) { - var defaultOptions = { + // @see https://developer.vimeo.com/player/sdk/basics + const defaultOptions = { vimeoId: '', autopause: false, autoplay: true, @@ -64,65 +147,36 @@ loop: true, muted: true, playButtonClass: 'az-video-play', - pauseButtonClass: 'az-video-pause' + pauseButtonClass: 'az-video-pause', }; - var bgVideoParagraphs = document.getElementsByClassName('az-js-vimeo-video-background'); - var tag = document.createElement('script'); + const bgVideoParagraphs = document.getElementsByClassName( + 'az-js-vimeo-video-background', + ); + + // Load Vimeo API + const tag = document.createElement('script'); tag.src = 'https://player.vimeo.com/api/player.js'; document.head.appendChild(tag); - tag.onload = function () { - Array.from(bgVideoParagraphs).forEach(function (element) { - var parentParagraph = element.parentNode; - var vimeoId = element.dataset.vimeoVideoId; - var videoPlayer = element.getElementsByClassName('az-video-player')[0]; - var VimeoPlayer = window.Vimeo; - element.player = new VimeoPlayer.Player(videoPlayer, { - id: vimeoId, - autopause: defaultOptions.autopause, - autoplay: element.dataset.autoplay === 'true', - controls: 0, - loop: defaultOptions.loop, - muted: defaultOptions.muted - }); - element.player.on('bufferend', function () { - setDimensions(element); - parentParagraph.classList.add('az-video-playing'); - }); - var playButtons = element.getElementsByClassName('az-video-play'); - if (playButtons[0]) { - playButtons[0].addEventListener('click', function (event) { - event.preventDefault(); - element.player.play().catch(function (error) { - return vimeoError(error); - }); - parentParagraph.classList.add('az-video-playing'); - parentParagraph.classList.remove('az-video-paused'); - }); - } - var pauseButtons = element.getElementsByClassName('az-video-pause'); - if (pauseButtons[0]) { - pauseButtons[0].addEventListener('click', function (event) { - event.preventDefault(); - element.player.pause().catch(function (error) { - return vimeoError(error); - }); - parentParagraph.classList.add('az-video-paused'); - parentParagraph.classList.remove('az-video-playing'); - }); - } - }); - }; - var resize = function resize() { - Array.from(bgVideoParagraphs).forEach(function (element) { + + // Methods + // Ensure Vimeo API is loaded before proceeding + tag.onload = () => + handleVimeoAPILoaded(bgVideoParagraphs, defaultOptions); + + // Resize handler updates width, height and offset + // of player after resize/init. + const resize = () => { + Array.from(bgVideoParagraphs).forEach((element) => { setDimensions(element); }); }; - window.addEventListener('resize', function () { + window.addEventListener('resize', () => { resize(); }); } } + once('vimeoTextOnMedia-init', 'body').forEach(initVimeoBackgrounds); - } + }, }; -})(Drupal, once); \ No newline at end of file +})(Drupal, once); diff --git a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.es6.js b/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.es6.js deleted file mode 100644 index bacdd26ca1..0000000000 --- a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.es6.js +++ /dev/null @@ -1,170 +0,0 @@ -((Drupal, once) => { - Drupal.behaviors.az_youtube_video_bg = { - attach(context) { - function initYouTubeBackgrounds() { - if (window.screen && window.screen.width > 768) { - // @see https://developers.google.com/youtube/player_parameters - const defaultSettings = { - loop: true, - mute: true, - pauseButtonClass: 'az-video-pause', - playButtonClass: 'az-video-play', - ratio: 16 / 9, - width: document.documentElement.clientWidth, - }; - const bgVideoSettings = {}; - - // Load YouTube IFrame player API - const tag = document.createElement('script'); - const firstScriptTag = document.getElementsByTagName('script')[0]; - tag.src = 'https://www.youtube.com/iframe_api'; - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); - - // Set up IFrame player - const bgVideoParagraphs = document.getElementsByClassName( - 'az-js-video-background', - ); - window.onYouTubeIframeAPIReady = () => { - Array.from(bgVideoParagraphs).forEach((element) => { - const parentParagraph = document.getElementById( - element.dataset.parentid, - ); - const youtubeId = element.dataset.youtubeid; - bgVideoSettings[youtubeId] = { - autoplay: element.dataset.autoplay === 'true', - start: element.dataset.start, - }; - const videoPlayer = - element.getElementsByClassName('az-video-player')[0]; - const youTubePlayer = window.YT; - element.player = new youTubePlayer.Player(videoPlayer, { - width: defaultSettings.width, - height: Math.ceil( - defaultSettings.width / defaultSettings.ratio, - ), - videoId: youtubeId, - playerVars: { - controls: 0, - enablejsapi: 1, - origin: window.location.origin, - rel: 0, - }, - events: { - onReady: window.onPlayerReady, - onStateChange: window.onPlayerStateChange, - }, - }); - const playButton = - element.getElementsByClassName('az-video-play')[0]; - playButton.addEventListener('click', (event) => { - event.preventDefault(); - element.player.playVideo(); - parentParagraph.classList.remove('az-video-paused'); - parentParagraph.classList.add('az-video-playing'); - }); - const pauseButton = - element.getElementsByClassName('az-video-pause')[0]; - pauseButton.addEventListener('click', (event) => { - event.preventDefault(); - element.player.pauseVideo(); - parentParagraph.classList.remove('az-video-playing'); - parentParagraph.classList.add('az-video-paused'); - }); - }); - }; - - // Updates width, height, and offset of player after resize/init. - const setDimensions = (container) => { - container.style.height = `${container.parentNode.offsetHeight}px`; - if (container.dataset.style === 'bottom') { - container.style.top = 0; - } - const thisPlayer = - container.getElementsByClassName('az-video-player')[0]; - if (thisPlayer === null) { - return; - } - thisPlayer.style.zIndex = -100; - const width = container.offsetWidth; - const height = container.offsetHeight; - const pWidth = Math.ceil(height * defaultSettings.ratio); - const pHeight = Math.ceil(width / defaultSettings.ratio); - let widthMinuspWidthDividedByTwo = (width - pWidth) / 2; - widthMinuspWidthDividedByTwo = `${widthMinuspWidthDividedByTwo.toString()}px`; - const pHeightRatio = `${(height - pHeight) / 2}px`; - // When screen aspect ratio differs from video, - // video must center and underlay one dimension. - if (width / defaultSettings.ratio < height) { - // If new video height < window height (gap underneath) - thisPlayer.width = pWidth; - thisPlayer.height = height; - thisPlayer.style.left = widthMinuspWidthDividedByTwo; - thisPlayer.style.top = 0; - // Player width is greater, offset left; reset top - } else { - // New video width < window width (gap to right) - // Get new player height - thisPlayer.height = pHeight; - thisPlayer.width = width; - thisPlayer.style.top = pHeightRatio; - thisPlayer.style.left = 0; - } - }; - - // Resize handler - const resize = () => { - Array.from(bgVideoParagraphs).forEach((element) => { - setDimensions(element); - }); - }; - - window.onPlayerReady = (event) => { - const id = event.target.options.videoId; - if (!bgVideoSettings[id].autoplay) { - return; - } - if (defaultSettings.mute) { - event.target.mute(); - } - event.target.seekTo(bgVideoSettings[id].start); - event.target.playVideo(); - // Create and dispatch a new event when video starts playing. - dispatchEvent(new Event('azVideoPlay')); - }; - - window.onPlayerStateChange = (event) => { - const id = event.target.options.videoId; - const stateChangeContainer = document.getElementById( - `${id}-bg-video-container`, - ); - const parentContainer = document.getElementById( - stateChangeContainer.dataset.parentid, - ); - if (event.data === 0 && defaultSettings.loop) { - // Video ended and loop option is set true. - stateChangeContainer.player.seekTo(bgVideoSettings[id].start); - } - if (event.data === 1) { - resize(); - parentContainer.classList.add('az-video-playing'); - parentContainer.classList.remove('az-video-loading'); - } - }; - - // Events - window.addEventListener('load', () => { - resize(); - }); - window.addEventListener('resize', () => { - resize(); - }); - } - } - - once('youTubeTextOnMedia-init', 'body').forEach( - initYouTubeBackgrounds, - context, - ); - }, - }; -})(Drupal, once); diff --git a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.js b/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.js index 6f0220bea4..bacdd26ca1 100644 --- a/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.js +++ b/modules/custom/az_paragraphs/az_paragraphs_text_media/js/az_paragraphs_az_text_media_youtube.js @@ -1,62 +1,70 @@ -/** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (Drupal, once) { +((Drupal, once) => { Drupal.behaviors.az_youtube_video_bg = { - attach: function attach(context) { + attach(context) { function initYouTubeBackgrounds() { if (window.screen && window.screen.width > 768) { - var defaultSettings = { + // @see https://developers.google.com/youtube/player_parameters + const defaultSettings = { loop: true, mute: true, pauseButtonClass: 'az-video-pause', playButtonClass: 'az-video-play', ratio: 16 / 9, - width: document.documentElement.clientWidth + width: document.documentElement.clientWidth, }; - var bgVideoSettings = {}; - var tag = document.createElement('script'); - var firstScriptTag = document.getElementsByTagName('script')[0]; + const bgVideoSettings = {}; + + // Load YouTube IFrame player API + const tag = document.createElement('script'); + const firstScriptTag = document.getElementsByTagName('script')[0]; tag.src = 'https://www.youtube.com/iframe_api'; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); - var bgVideoParagraphs = document.getElementsByClassName('az-js-video-background'); - window.onYouTubeIframeAPIReady = function () { - Array.from(bgVideoParagraphs).forEach(function (element) { - var parentParagraph = document.getElementById(element.dataset.parentid); - var youtubeId = element.dataset.youtubeid; + + // Set up IFrame player + const bgVideoParagraphs = document.getElementsByClassName( + 'az-js-video-background', + ); + window.onYouTubeIframeAPIReady = () => { + Array.from(bgVideoParagraphs).forEach((element) => { + const parentParagraph = document.getElementById( + element.dataset.parentid, + ); + const youtubeId = element.dataset.youtubeid; bgVideoSettings[youtubeId] = { autoplay: element.dataset.autoplay === 'true', - start: element.dataset.start + start: element.dataset.start, }; - var videoPlayer = element.getElementsByClassName('az-video-player')[0]; - var youTubePlayer = window.YT; + const videoPlayer = + element.getElementsByClassName('az-video-player')[0]; + const youTubePlayer = window.YT; element.player = new youTubePlayer.Player(videoPlayer, { width: defaultSettings.width, - height: Math.ceil(defaultSettings.width / defaultSettings.ratio), + height: Math.ceil( + defaultSettings.width / defaultSettings.ratio, + ), videoId: youtubeId, playerVars: { controls: 0, enablejsapi: 1, origin: window.location.origin, - rel: 0 + rel: 0, }, events: { onReady: window.onPlayerReady, - onStateChange: window.onPlayerStateChange - } + onStateChange: window.onPlayerStateChange, + }, }); - var playButton = element.getElementsByClassName('az-video-play')[0]; - playButton.addEventListener('click', function (event) { + const playButton = + element.getElementsByClassName('az-video-play')[0]; + playButton.addEventListener('click', (event) => { event.preventDefault(); element.player.playVideo(); parentParagraph.classList.remove('az-video-paused'); parentParagraph.classList.add('az-video-playing'); }); - var pauseButton = element.getElementsByClassName('az-video-pause')[0]; - pauseButton.addEventListener('click', function (event) { + const pauseButton = + element.getElementsByClassName('az-video-pause')[0]; + pauseButton.addEventListener('click', (event) => { event.preventDefault(); element.player.pauseVideo(); parentParagraph.classList.remove('az-video-playing'); @@ -64,42 +72,54 @@ }); }); }; - var setDimensions = function setDimensions(container) { - container.style.height = "".concat(container.parentNode.offsetHeight, "px"); + + // Updates width, height, and offset of player after resize/init. + const setDimensions = (container) => { + container.style.height = `${container.parentNode.offsetHeight}px`; if (container.dataset.style === 'bottom') { container.style.top = 0; } - var thisPlayer = container.getElementsByClassName('az-video-player')[0]; + const thisPlayer = + container.getElementsByClassName('az-video-player')[0]; if (thisPlayer === null) { return; } thisPlayer.style.zIndex = -100; - var width = container.offsetWidth; - var height = container.offsetHeight; - var pWidth = Math.ceil(height * defaultSettings.ratio); - var pHeight = Math.ceil(width / defaultSettings.ratio); - var widthMinuspWidthDividedByTwo = (width - pWidth) / 2; - widthMinuspWidthDividedByTwo = "".concat(widthMinuspWidthDividedByTwo.toString(), "px"); - var pHeightRatio = "".concat((height - pHeight) / 2, "px"); + const width = container.offsetWidth; + const height = container.offsetHeight; + const pWidth = Math.ceil(height * defaultSettings.ratio); + const pHeight = Math.ceil(width / defaultSettings.ratio); + let widthMinuspWidthDividedByTwo = (width - pWidth) / 2; + widthMinuspWidthDividedByTwo = `${widthMinuspWidthDividedByTwo.toString()}px`; + const pHeightRatio = `${(height - pHeight) / 2}px`; + // When screen aspect ratio differs from video, + // video must center and underlay one dimension. if (width / defaultSettings.ratio < height) { + // If new video height < window height (gap underneath) thisPlayer.width = pWidth; thisPlayer.height = height; thisPlayer.style.left = widthMinuspWidthDividedByTwo; thisPlayer.style.top = 0; + // Player width is greater, offset left; reset top } else { + // New video width < window width (gap to right) + // Get new player height thisPlayer.height = pHeight; thisPlayer.width = width; thisPlayer.style.top = pHeightRatio; thisPlayer.style.left = 0; } }; - var resize = function resize() { - Array.from(bgVideoParagraphs).forEach(function (element) { + + // Resize handler + const resize = () => { + Array.from(bgVideoParagraphs).forEach((element) => { setDimensions(element); }); }; - window.onPlayerReady = function (event) { - var id = event.target.options.videoId; + + window.onPlayerReady = (event) => { + const id = event.target.options.videoId; if (!bgVideoSettings[id].autoplay) { return; } @@ -108,13 +128,20 @@ } event.target.seekTo(bgVideoSettings[id].start); event.target.playVideo(); + // Create and dispatch a new event when video starts playing. dispatchEvent(new Event('azVideoPlay')); }; - window.onPlayerStateChange = function (event) { - var id = event.target.options.videoId; - var stateChangeContainer = document.getElementById("".concat(id, "-bg-video-container")); - var parentContainer = document.getElementById(stateChangeContainer.dataset.parentid); + + window.onPlayerStateChange = (event) => { + const id = event.target.options.videoId; + const stateChangeContainer = document.getElementById( + `${id}-bg-video-container`, + ); + const parentContainer = document.getElementById( + stateChangeContainer.dataset.parentid, + ); if (event.data === 0 && defaultSettings.loop) { + // Video ended and loop option is set true. stateChangeContainer.player.seekTo(bgVideoSettings[id].start); } if (event.data === 1) { @@ -123,15 +150,21 @@ parentContainer.classList.remove('az-video-loading'); } }; - window.addEventListener('load', function () { + + // Events + window.addEventListener('load', () => { resize(); }); - window.addEventListener('resize', function () { + window.addEventListener('resize', () => { resize(); }); } } - once('youTubeTextOnMedia-init', 'body').forEach(initYouTubeBackgrounds, context); - } + + once('youTubeTextOnMedia-init', 'body').forEach( + initYouTubeBackgrounds, + context, + ); + }, }; -})(Drupal, once); \ No newline at end of file +})(Drupal, once); diff --git a/modules/custom/az_paragraphs/js/az_paragraphs_full_width.es6.js b/modules/custom/az_paragraphs/js/az_paragraphs_full_width.es6.js deleted file mode 100644 index e6cbdaabda..0000000000 --- a/modules/custom/az_paragraphs/js/az_paragraphs_full_width.es6.js +++ /dev/null @@ -1,129 +0,0 @@ -/** - * @file - * Provides helper functions to ensure proper display of full-width-paragraphs. - */ -(() => { - /** - * Calculates scroll bar width if any and assigns the value to the - * `--scrollbar-width` CSS variable on the html element. - */ - function calculateScrollbarWidth() { - document.documentElement.style.setProperty( - '--scrollbar-width', - `${window.innerWidth - document.documentElement.clientWidth}px`, - ); - } - - /** - * Calculates and sets margin required to push sidebars beneath the last - * full-width paragraph in the Content region of the page. - * - * This function assigns values to the `--sidebar-top-margin` CSS variable on - * the `html` element. - */ - function pushSidebarsDown() { - const contentRegion = document.querySelector('main.main-content'); - if (contentRegion !== null) { - const allFullWidthElements = contentRegion.querySelectorAll( - '.paragraph.full-width-background', - ); - if (allFullWidthElements.length === 0) { - return; - } - const lastFullWidthElement = - allFullWidthElements[allFullWidthElements.length - 1]; - const contentRegionPosition = contentRegion.getBoundingClientRect(); - const style = window.getComputedStyle(lastFullWidthElement, ''); - const bottomMargin = parseFloat(style.marginBottom); - const contentRegionTop = contentRegionPosition.top; - const lastFullWidthElementPosition = - lastFullWidthElement.getBoundingClientRect(); - const lastFullWidthElementBottom = lastFullWidthElementPosition.bottom; - const sidebarTopMargin = - lastFullWidthElementBottom - contentRegionTop + bottomMargin; - if (sidebarTopMargin) { - document.documentElement.style.setProperty( - '--sidebar-top-margin', - `${sidebarTopMargin}px`, - ); - } - } - } - - /** - * Calculates and sets negative margins required for full width backgrounds. - * - * This function assigns values to the `--full-width-left-distance` and - * `--full-width-right-distance` CSS variables on the `html` element. - */ - function calculateFullWidthNegativeMargins() { - const contentRegion = document.querySelectorAll('.block-system-main-block'); - if (contentRegion.length > 0) { - const contentRegionPosition = contentRegion[0].getBoundingClientRect(); - const distanceFromLeft = contentRegionPosition.left; - const distanceFromRight = contentRegionPosition.right; - const negativeLeftMargin = 0 - distanceFromLeft; - const negativeRightMargin = - distanceFromRight - document.documentElement.clientWidth; - document.documentElement.style.setProperty( - '--full-width-left-distance', - `${negativeLeftMargin}px`, - ); - document.documentElement.style.setProperty( - '--full-width-right-distance', - `${negativeRightMargin}px`, - ); - } - const contentTopAndBottomBlocks = document.querySelectorAll( - '.region-content-top > .block, .region-content-bottom > .block', - ); - if (contentTopAndBottomBlocks.length > 0) { - const negativeAutoMargin = - -( - document.documentElement.clientWidth - - contentTopAndBottomBlocks[0].getBoundingClientRect().width - ) / 2; - document.documentElement.style.setProperty( - '--full-width-auto-distance', - `${negativeAutoMargin}px`, - ); - } - } - - /** - * Calculates and sets width required for full width content-width split screens. - * - * This function assigns values to the `--full-width-sidebar-width` - * CSS variables on the `html` element. - */ - function calculateFullWidthSidebarWidth() { - const sidebarRegion = document.querySelectorAll('.sidebar'); - if (sidebarRegion.length > 0) { - const sidebarRegionPosition = sidebarRegion[0].getBoundingClientRect(); - const sidebarWidth = sidebarRegionPosition.width; - document.documentElement.style.setProperty( - '--full-width-sidebar-width', - `${sidebarWidth}px`, - ); - } - } - - /** - * Executes functions to set up the page layout. - */ - function setFullWidthLayout() { - calculateScrollbarWidth(); - calculateFullWidthNegativeMargins(); - calculateFullWidthSidebarWidth(); - pushSidebarsDown(); - } - - // Initialize on page load - document.addEventListener('DOMContentLoaded', setFullWidthLayout); - - // Recalculate values on window resize - window.addEventListener('resize', setFullWidthLayout); - - // Recalculate values when azVideoPlay custom event fires - window.addEventListener('azVideoPlay', setFullWidthLayout); -})(); diff --git a/modules/custom/az_paragraphs/js/az_paragraphs_full_width.js b/modules/custom/az_paragraphs/js/az_paragraphs_full_width.js index 925cb2231a..e6cbdaabda 100644 --- a/modules/custom/az_paragraphs/js/az_paragraphs_full_width.js +++ b/modules/custom/az_paragraphs/js/az_paragraphs_full_width.js @@ -1,65 +1,129 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function () { + * @file + * Provides helper functions to ensure proper display of full-width-paragraphs. + */ +(() => { + /** + * Calculates scroll bar width if any and assigns the value to the + * `--scrollbar-width` CSS variable on the html element. + */ function calculateScrollbarWidth() { - document.documentElement.style.setProperty('--scrollbar-width', "".concat(window.innerWidth - document.documentElement.clientWidth, "px")); + document.documentElement.style.setProperty( + '--scrollbar-width', + `${window.innerWidth - document.documentElement.clientWidth}px`, + ); } + + /** + * Calculates and sets margin required to push sidebars beneath the last + * full-width paragraph in the Content region of the page. + * + * This function assigns values to the `--sidebar-top-margin` CSS variable on + * the `html` element. + */ function pushSidebarsDown() { - var contentRegion = document.querySelector('main.main-content'); + const contentRegion = document.querySelector('main.main-content'); if (contentRegion !== null) { - var allFullWidthElements = contentRegion.querySelectorAll('.paragraph.full-width-background'); + const allFullWidthElements = contentRegion.querySelectorAll( + '.paragraph.full-width-background', + ); if (allFullWidthElements.length === 0) { return; } - var lastFullWidthElement = allFullWidthElements[allFullWidthElements.length - 1]; - var contentRegionPosition = contentRegion.getBoundingClientRect(); - var style = window.getComputedStyle(lastFullWidthElement, ''); - var bottomMargin = parseFloat(style.marginBottom); - var contentRegionTop = contentRegionPosition.top; - var lastFullWidthElementPosition = lastFullWidthElement.getBoundingClientRect(); - var lastFullWidthElementBottom = lastFullWidthElementPosition.bottom; - var sidebarTopMargin = lastFullWidthElementBottom - contentRegionTop + bottomMargin; + const lastFullWidthElement = + allFullWidthElements[allFullWidthElements.length - 1]; + const contentRegionPosition = contentRegion.getBoundingClientRect(); + const style = window.getComputedStyle(lastFullWidthElement, ''); + const bottomMargin = parseFloat(style.marginBottom); + const contentRegionTop = contentRegionPosition.top; + const lastFullWidthElementPosition = + lastFullWidthElement.getBoundingClientRect(); + const lastFullWidthElementBottom = lastFullWidthElementPosition.bottom; + const sidebarTopMargin = + lastFullWidthElementBottom - contentRegionTop + bottomMargin; if (sidebarTopMargin) { - document.documentElement.style.setProperty('--sidebar-top-margin', "".concat(sidebarTopMargin, "px")); + document.documentElement.style.setProperty( + '--sidebar-top-margin', + `${sidebarTopMargin}px`, + ); } } } + + /** + * Calculates and sets negative margins required for full width backgrounds. + * + * This function assigns values to the `--full-width-left-distance` and + * `--full-width-right-distance` CSS variables on the `html` element. + */ function calculateFullWidthNegativeMargins() { - var contentRegion = document.querySelectorAll('.block-system-main-block'); + const contentRegion = document.querySelectorAll('.block-system-main-block'); if (contentRegion.length > 0) { - var contentRegionPosition = contentRegion[0].getBoundingClientRect(); - var distanceFromLeft = contentRegionPosition.left; - var distanceFromRight = contentRegionPosition.right; - var negativeLeftMargin = 0 - distanceFromLeft; - var negativeRightMargin = distanceFromRight - document.documentElement.clientWidth; - document.documentElement.style.setProperty('--full-width-left-distance', "".concat(negativeLeftMargin, "px")); - document.documentElement.style.setProperty('--full-width-right-distance', "".concat(negativeRightMargin, "px")); + const contentRegionPosition = contentRegion[0].getBoundingClientRect(); + const distanceFromLeft = contentRegionPosition.left; + const distanceFromRight = contentRegionPosition.right; + const negativeLeftMargin = 0 - distanceFromLeft; + const negativeRightMargin = + distanceFromRight - document.documentElement.clientWidth; + document.documentElement.style.setProperty( + '--full-width-left-distance', + `${negativeLeftMargin}px`, + ); + document.documentElement.style.setProperty( + '--full-width-right-distance', + `${negativeRightMargin}px`, + ); } - var contentTopAndBottomBlocks = document.querySelectorAll('.region-content-top > .block, .region-content-bottom > .block'); + const contentTopAndBottomBlocks = document.querySelectorAll( + '.region-content-top > .block, .region-content-bottom > .block', + ); if (contentTopAndBottomBlocks.length > 0) { - var negativeAutoMargin = -(document.documentElement.clientWidth - contentTopAndBottomBlocks[0].getBoundingClientRect().width) / 2; - document.documentElement.style.setProperty('--full-width-auto-distance', "".concat(negativeAutoMargin, "px")); + const negativeAutoMargin = + -( + document.documentElement.clientWidth - + contentTopAndBottomBlocks[0].getBoundingClientRect().width + ) / 2; + document.documentElement.style.setProperty( + '--full-width-auto-distance', + `${negativeAutoMargin}px`, + ); } } + + /** + * Calculates and sets width required for full width content-width split screens. + * + * This function assigns values to the `--full-width-sidebar-width` + * CSS variables on the `html` element. + */ function calculateFullWidthSidebarWidth() { - var sidebarRegion = document.querySelectorAll('.sidebar'); + const sidebarRegion = document.querySelectorAll('.sidebar'); if (sidebarRegion.length > 0) { - var sidebarRegionPosition = sidebarRegion[0].getBoundingClientRect(); - var sidebarWidth = sidebarRegionPosition.width; - document.documentElement.style.setProperty('--full-width-sidebar-width', "".concat(sidebarWidth, "px")); + const sidebarRegionPosition = sidebarRegion[0].getBoundingClientRect(); + const sidebarWidth = sidebarRegionPosition.width; + document.documentElement.style.setProperty( + '--full-width-sidebar-width', + `${sidebarWidth}px`, + ); } } + + /** + * Executes functions to set up the page layout. + */ function setFullWidthLayout() { calculateScrollbarWidth(); calculateFullWidthNegativeMargins(); calculateFullWidthSidebarWidth(); pushSidebarsDown(); } + + // Initialize on page load document.addEventListener('DOMContentLoaded', setFullWidthLayout); + + // Recalculate values on window resize window.addEventListener('resize', setFullWidthLayout); + + // Recalculate values when azVideoPlay custom event fires window.addEventListener('azVideoPlay', setFullWidthLayout); -})(); \ No newline at end of file +})(); diff --git a/modules/custom/az_publication/js/az_publication_date_picker.es6.js b/modules/custom/az_publication/js/az_publication_date_picker.es6.js deleted file mode 100644 index 2a14177900..0000000000 --- a/modules/custom/az_publication/js/az_publication_date_picker.es6.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @file - * Default date values. - */ - -(($, Drupal, once) => { - Drupal.behaviors.datetimeTweaksDefaultDate = { - attach(context) { - $(once('azpublicationdate', '.az-publication-date-picker input', context)) - // eslint-disable-next-line func-names - .each(function () { - // Fetch field date settings. - const dateFormat = $(this) - .data('drupal-date-format') - .replace('Y', 'yyyy') - .replace('m', 'mm') - .replace('d', 'dd'); - // Get datepicker settings. - const viewmode = $(this).data('az-publication-date-mode'); - const components = dateFormat.split('-'); - // Modify form value to correct number of components. - let value = $(this).val(); - if (value) { - value = value.split('-'); - while (value.length < components.length) { - value.push('01'); - } - value = value.slice(0, components.length); - value = value.join('-'); - $(this).val(value); - } - // Initialize datepicker. - $(this).datepicker({ - clear: true, - autoclose: true, - format: dateFormat, - viewMode: viewmode, - minViewMode: viewmode, - }); - }); - }, - }; -})(jQuery, Drupal, once); diff --git a/modules/custom/az_publication/js/az_publication_date_picker.js b/modules/custom/az_publication/js/az_publication_date_picker.js index 47b40fcec8..2a14177900 100644 --- a/modules/custom/az_publication/js/az_publication_date_picker.js +++ b/modules/custom/az_publication/js/az_publication_date_picker.js @@ -1,34 +1,43 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function ($, Drupal, once) { + * @file + * Default date values. + */ + +(($, Drupal, once) => { Drupal.behaviors.datetimeTweaksDefaultDate = { - attach: function attach(context) { - $(once('azpublicationdate', '.az-publication-date-picker input', context)).each(function () { - var dateFormat = $(this).data('drupal-date-format').replace('Y', 'yyyy').replace('m', 'mm').replace('d', 'dd'); - var viewmode = $(this).data('az-publication-date-mode'); - var components = dateFormat.split('-'); - var value = $(this).val(); - if (value) { - value = value.split('-'); - while (value.length < components.length) { - value.push('01'); + attach(context) { + $(once('azpublicationdate', '.az-publication-date-picker input', context)) + // eslint-disable-next-line func-names + .each(function () { + // Fetch field date settings. + const dateFormat = $(this) + .data('drupal-date-format') + .replace('Y', 'yyyy') + .replace('m', 'mm') + .replace('d', 'dd'); + // Get datepicker settings. + const viewmode = $(this).data('az-publication-date-mode'); + const components = dateFormat.split('-'); + // Modify form value to correct number of components. + let value = $(this).val(); + if (value) { + value = value.split('-'); + while (value.length < components.length) { + value.push('01'); + } + value = value.slice(0, components.length); + value = value.join('-'); + $(this).val(value); } - value = value.slice(0, components.length); - value = value.join('-'); - $(this).val(value); - } - $(this).datepicker({ - clear: true, - autoclose: true, - format: dateFormat, - viewMode: viewmode, - minViewMode: viewmode + // Initialize datepicker. + $(this).datepicker({ + clear: true, + autoclose: true, + format: dateFormat, + viewMode: viewmode, + minViewMode: viewmode, + }); }); - }); - } + }, }; -})(jQuery, Drupal, once); \ No newline at end of file +})(jQuery, Drupal, once); diff --git a/modules/custom/az_select_menu/js/az-select-menu.es6.js b/modules/custom/az_select_menu/js/az-select-menu.es6.js deleted file mode 100644 index b866de0607..0000000000 --- a/modules/custom/az_select_menu/js/az-select-menu.es6.js +++ /dev/null @@ -1,128 +0,0 @@ -(($, Drupal, window, document, once) => { - Drupal.azSelectMenu = Drupal.azSelectMenu || {}; - - /** - * Attaches behavior for select menu. - */ - Drupal.behaviors.azSelectMenu = { - attach(context, settings) { - // az_select_menu form id's are added in an array depending - // on the page you are on, and how many select menus are on the page. - Object.keys(settings.azSelectMenu.ids).forEach(function (property) { - if (settings.azSelectMenu.ids.hasOwnProperty(property)) { - const selectFormId = settings.azSelectMenu.ids[property]; - const selectForm = document.querySelector(`#${selectFormId}`); - once('azSelectMenu', selectForm, context).forEach((element) => { - $(element).popover(); - element.addEventListener('focus', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - element.addEventListener('change', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - element.addEventListener('mouseenter', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - const button = element.querySelector('button'); - button.addEventListener('click', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('touchstart', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('mouseenter', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('mouseleave', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('focus', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('blur', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - document.addEventListener('touchstart', (event) => { - Drupal.azSelectMenu.handleEvents(event); - }); - element.classList.add('processed'); - }); - } - }); - }, - }; - - /** - * Select menu event handler. - * - * Handles mouse and click events for the select menu - * elements. - * @param {object} event The javascript event object. - */ - - Drupal.azSelectMenu.handleEvents = (event) => { - // Hide the popover when user touches any part of the screen, except the - // select form button regardless of state. - if (event.type === 'touchstart') { - if (event.target.classList.contains('js_select_menu_button')) { - event.stopPropagation(); - } else { - $('.az-select-menu').popover('hide'); - return; - } - } - - const selectForm = event.target.closest('form'); - const $selectForm = $(selectForm); - const selectElement = selectForm.querySelector('select'); - const [optionsSelected] = selectElement.selectedOptions; - const selectElementHref = optionsSelected.dataset.href; - const button = selectForm.querySelector('button'); - - // If a navigable link is selected in the dropdown. - if (selectElementHref !== '') { - $selectForm.popover('hide'); - button.classList.remove('disabled'); - button.setAttribute('aria-disabled', 'false'); - switch (event.type) { - case 'click': - // If the link works, don't allow the button to focus. - event.stopImmediatePropagation(); - window.location = selectElementHref; - break; - default: - break; - } - } - - // Don't follow link if using the nolink setting. - else { - button.classList.add('disabled'); - button.setAttribute('aria-disabled', 'true'); - selectElement.setAttribute('aria-disabled', 'true'); - switch (event.type) { - case 'click': - if (event.target.classList.contains('js_select_menu_button')) { - $selectForm.popover('show'); - selectElement.focus(); - } - break; - - case 'focus': - case 'mouseenter': - if (event.target.classList.contains('js_select_menu_button')) { - $selectForm.popover('show'); - } else { - $selectForm.popover('hide'); - } - break; - - case 'mouseleave': - $selectForm.popover('hide'); - break; - default: - break; - } - } - }; -})(jQuery, Drupal, this, this.document, once); diff --git a/modules/custom/az_select_menu/js/az-select-menu.js b/modules/custom/az_select_menu/js/az-select-menu.js index bb7c4f948c..50da582b51 100644 --- a/modules/custom/az_select_menu/js/az-select-menu.js +++ b/modules/custom/az_select_menu/js/az-select-menu.js @@ -1,115 +1,129 @@ -/** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } -function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } -(function ($, Drupal, window, document, once) { +((Drupal, window, document, once) => { Drupal.azSelectMenu = Drupal.azSelectMenu || {}; + + /** + * Attaches behavior for select menu. + */ Drupal.behaviors.azSelectMenu = { - attach: function attach(context, settings) { - Object.keys(settings.azSelectMenu.ids).forEach(function (property) { + attach(context, settings) { + // az_select_menu form id's are added in an array depending + // on the page you are on, and how many select menus are on the page. + Object.keys(settings.azSelectMenu.ids).forEach((property) => { if (settings.azSelectMenu.ids.hasOwnProperty(property)) { - var selectFormId = settings.azSelectMenu.ids[property]; - var selectForm = document.querySelector("#".concat(selectFormId)); - once('azSelectMenu', selectForm, context).forEach(function (element) { - $(element).popover(); - element.addEventListener('focus', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - element.addEventListener('change', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - element.addEventListener('mouseenter', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - var button = element.querySelector('button'); - button.addEventListener('click', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('touchstart', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('mouseenter', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('mouseleave', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('focus', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - button.addEventListener('blur', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); - document.addEventListener('touchstart', function (event) { - Drupal.azSelectMenu.handleEvents(event); - }); + const selectFormId = settings.azSelectMenu.ids[property]; + const selectForm = document.querySelector(`#${selectFormId}`); + once('azSelectMenu', selectForm, context).forEach((element) => { + // Add event listeners using the handler function directly + const { handleEvents } = Drupal.azSelectMenu; + element.addEventListener('focus', handleEvents); + element.addEventListener('change', handleEvents); + element.addEventListener('mouseenter', handleEvents); + + const button = element.querySelector('button'); + button.addEventListener('click', handleEvents); + button.addEventListener('touchstart', handleEvents); + button.addEventListener('mouseenter', handleEvents); + button.addEventListener('mouseleave', handleEvents); + button.addEventListener('focus', handleEvents); + button.addEventListener('blur', handleEvents); + document.addEventListener('touchstart', handleEvents); element.classList.add('processed'); }); } }); - } + }, }; - Drupal.azSelectMenu.handleEvents = function (event) { + + /** + * Select menu event handler. + * + * Handles mouse and click events for the select menu + * elements. + * @param {object} event The javascript event object. + */ + + Drupal.azSelectMenu.handleEvents = (event) => { + // Hide the popover when user touches any part of the screen, except the + // select form button regardless of state. if (event.type === 'touchstart') { if (event.target.classList.contains('js_select_menu_button')) { - event.stopPropagation(); + // Don't stop propagation - let it fall through to main logic + // This will handle disabled state and popover display for touch events } else { - $('.az-select-menu').popover('hide'); + // Hide all popovers + document.querySelectorAll('.az-select-menu').forEach((form) => { + const popoverInstance = + window.arizonaBootstrap?.Popover?.getInstance(form); + if (popoverInstance) popoverInstance.hide(); + }); return; } } - var selectForm = event.target.closest('form'); - var $selectForm = $(selectForm); - var selectElement = selectForm.querySelector('select'); - var _selectElement$select = _slicedToArray(selectElement.selectedOptions, 1), - optionsSelected = _selectElement$select[0]; - var selectElementHref = optionsSelected.dataset.href; - var button = selectForm.querySelector('button'); + + const selectForm = event.target.closest('form'); + const selectElement = selectForm.querySelector('select'); + const [optionsSelected] = selectElement.selectedOptions; + const selectElementHref = optionsSelected.dataset.href; + const button = selectForm.querySelector('button'); + let popoverInstance = + window.arizonaBootstrap?.Popover?.getInstance(selectForm); + + // If a navigable link is selected in the dropdown. if (selectElementHref !== '') { - $selectForm.popover('hide'); + // Destroy popover when button is enabled + if (popoverInstance) { + popoverInstance.dispose(); + } button.classList.remove('disabled'); button.setAttribute('aria-disabled', 'false'); switch (event.type) { case 'click': + // If the link works, don't allow the button to focus. event.stopImmediatePropagation(); window.location = selectElementHref; break; default: break; } - } else { + } + + // Don't follow link if using the nolink setting. + else { button.classList.add('disabled'); button.setAttribute('aria-disabled', 'true'); selectElement.setAttribute('aria-disabled', 'true'); + + // Recreate popover when button becomes disabled + if (!popoverInstance && window.arizonaBootstrap?.Popover) { + popoverInstance = window.arizonaBootstrap.Popover.getOrCreateInstance + ? window.arizonaBootstrap.Popover.getOrCreateInstance(selectForm) + : window.arizonaBootstrap.Popover.getInstance(selectForm); + } + switch (event.type) { case 'click': + case 'touchstart': if (event.target.classList.contains('js_select_menu_button')) { - $selectForm.popover('show'); + if (popoverInstance) popoverInstance.show(); selectElement.focus(); } break; + case 'focus': case 'mouseenter': if (event.target.classList.contains('js_select_menu_button')) { - $selectForm.popover('show'); - } else { - $selectForm.popover('hide'); + if (popoverInstance) popoverInstance.show(); + } else if (popoverInstance) { + popoverInstance.hide(); } break; + case 'mouseleave': - $selectForm.popover('hide'); + if (popoverInstance) popoverInstance.hide(); break; default: break; } } }; -})(jQuery, Drupal, this, this.document, once); \ No newline at end of file +})(Drupal, this, this.document, once); diff --git a/package.json b/package.json index abec16482f..8cd26ea412 100644 --- a/package.json +++ b/package.json @@ -6,47 +6,14 @@ "yarn": ">= 1.6", "node": ">= 18.0" }, - "scripts": { - "build": "yarn build:js", - "watch": "yarn watch:js", - "build:js": "cross-env BABEL_ENV=quickstart node ./scripts/js/babel-es6-build.js", - "watch:js": "cross-env BABEL_ENV=quickstart node ./scripts/js/babel-es6-watch.js" - }, "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "@babel/register": "^7.7.7", - "babel-plugin-add-header-comment": "^1.0.3", - "chalk": "^4.1.0", - "chokidar": "^4.0.1", - "cross-env": "^7.0.2", - "dotenv-safe": "^9.1.0", "eslint": "^8.53.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^9.1.2", "eslint-plugin-import": "^2.25.4", - "eslint-plugin-jquery": "^1.5.1", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-yml": "^1.8.0", - "glob": "10.5.0", - "minimist": "^1.2.8", - "mkdirp": "^3.0.1", - "prettier": "^3.0.3", - "terser": "^5.19.0" - }, - "babel": { - "env": { - "quickstart": { - "presets": [ - [ - "@babel/preset-env", - { - "modules": false - } - ] - ] - } - } + "prettier": "^3.0.3" }, "browserslist": [ "last 2 Chrome major versions", @@ -61,5 +28,6 @@ "last 1 Samsung version", "last 1 OperaMini version", "Firefox ESR" - ] + ], + "packageManager": "yarn@4.14.1" } diff --git a/scripts/js/babel-es6-build.js b/scripts/js/babel-es6-build.js deleted file mode 100644 index a1af158b12..0000000000 --- a/scripts/js/babel-es6-build.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @file - * - * Provides the build:js command to compile *.es6.js files to ES5. - * - * Run build:js with --file to only parse a specific file. Using the --check - * flag build:js can be run to check if files are compiled correctly. - * @example Only process misc/drupal.es6.js and misc/drupal.init.es6.jsCheck if all files have been compiled correctly { - // Process all the found files. - let callback = changeOrAdded; - if (argv.check) { - callback = check; - } - filePaths.forEach(callback); -}; - -if (argv.file) { - processFiles([].concat(argv.file)); -} -else { - processFiles(globSync(fileMatch, globOptions).sort()); -} -process.exitCode = 0; diff --git a/scripts/js/babel-es6-watch.js b/scripts/js/babel-es6-watch.js deleted file mode 100644 index 3b371cac9d..0000000000 --- a/scripts/js/babel-es6-watch.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @file - * - * Watch changes to *.es6.js files and compile them to ES5 during development. - * - * @internal Remove this when Drupal core js ES6 transpiler supports contrib. - */ - -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const chokidar = require('chokidar'); - -const changeOrAdded = require('./changeOrAdded'); -const log = require('./log'); - -// Match only on .es6.js files. -const fileMatch = './**/*.es6.js'; -// Ignore everything in node_modules -const watcher = chokidar.watch(fileMatch, { - ignoreInitial: true, - ignored: './node_modules/**' -}); - -const unlinkHandler = (err) => { - if (err) { - log(err); - } -}; - -// Watch for filesystem changes. -watcher - .on('add', changeOrAdded) - .on('change', changeOrAdded) - .on('unlink', (filePath) => { - const fileName = filePath.slice(0, -7); - fs.stat(`${fileName}.js`, () => { - fs.unlink(`${fileName}.js`, unlinkHandler); - }); - }) - .on('ready', () => log(`Watching '${fileMatch}' for changes.`)); diff --git a/scripts/js/changeOrAdded.js b/scripts/js/changeOrAdded.js deleted file mode 100644 index 18fd7106ec..0000000000 --- a/scripts/js/changeOrAdded.js +++ /dev/null @@ -1,15 +0,0 @@ -const fs = require('fs'); -const log = require('./log'); -const compile = require('./compile'); - -module.exports = (filePath) => { - log(`'${filePath}' is being processed.`); - // Transform the file. - compile(filePath, function write(code) { - const fileName = filePath.slice(0, -7); - // Write the result to the filesystem. - fs.writeFile(`${fileName}.js`, code, () => { - log(`'${filePath}' is finished.`); - }); - }); -} diff --git a/scripts/js/check.js b/scripts/js/check.js deleted file mode 100644 index 8769d64e94..0000000000 --- a/scripts/js/check.js +++ /dev/null @@ -1,23 +0,0 @@ -const chalk = require('chalk'); -const fs = require('fs'); -const log = require('./log'); -const compile = require('./compile'); - -module.exports = (filePath) => { - log(`'${filePath}' is being checked.`); - // Transform the file. - compile(filePath, function check(code) { - const fileName = filePath.slice(0, -7); - fs.readFile(`${fileName}.js`, function read(err, data) { - if (err) { - log(chalk.red(err)); - process.exitCode = 1; - return; - } - if (code !== data.toString()) { - log(chalk.red(`'${filePath}' is not updated.`)); - process.exitCode = 1; - } - }); - }); -} diff --git a/scripts/js/compile.js b/scripts/js/compile.js deleted file mode 100644 index d644f55cbd..0000000000 --- a/scripts/js/compile.js +++ /dev/null @@ -1,31 +0,0 @@ -const chalk = require('chalk'); -const log = require('./log'); -const babel = require('@babel/core'); - -module.exports = (filePath, callback) => { - // Transform the file. - // Check process.env.NODE_ENV to see if we should create sourcemaps. - babel.transformFile( - filePath, - { - sourceMaps: process.env.NODE_ENV === 'development' ? 'inline' : false, - comments: false, - plugins: [ - ['add-header-comment', { - 'header': [ - `DO NOT EDIT THIS FILE.\nSee the following change record for more information,\nhttps://www.drupal.org/node/2815083\n@preserve` - ] - }] - ] - }, - (err, result) => { - if (err) { - log(chalk.red(err)); - process.exitCode = 1; - } - else { - callback(result.code); - } - } - ); -}; diff --git a/scripts/js/log.js b/scripts/js/log.js deleted file mode 100644 index 08349b3ae3..0000000000 --- a/scripts/js/log.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = (message) => { - // Logging human-readable timestamp. - console.log(`[${new Date().toTimeString().slice(0, 8)}] ${message}`); -} diff --git a/themes/custom/az_barrio/js/az-ajax.es6.js b/themes/custom/az_barrio/js/az-ajax.es6.js deleted file mode 100644 index 52189a6b76..0000000000 --- a/themes/custom/az_barrio/js/az-ajax.es6.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @file - * Ajax theme overrides for AZ Barrio. - * - * This script provides a custom theme for the AJAX progress indicator, - * utilizing Arizona Bootstrap classes. The indicator is positioned - * in the center of the screen. - */ - -((Drupal) => { - // Constants for repeated values - const Z_INDEX = 1261; - const TOP_POSITION = '48.5%'; - const LEFT_POSITION = '49%'; - const SPINNER_SIZE = '3rem'; - - // Define a dedicated CSS class for the spinner position - const spinnerPositionClass = 'js-az-spinner-position'; - - // Add CSS class to the document head - const style = document.createElement('style'); - style.textContent = ` - .${spinnerPositionClass} { - position: fixed; - z-index: ${Z_INDEX}; - top: ${TOP_POSITION}; - left: ${LEFT_POSITION}; - } - `; - document.head.appendChild(style); - - /** - * Theme override of the ajax progress indicator. - * Utilizes Arizona Bootstrap spinner classes. - * - * @return {string} - * The HTML markup for the throbber. - */ - Drupal.theme.ajaxProgressIndicatorFullscreen = () => ` -
-
- Loading... -
-
`; -})(Drupal); diff --git a/themes/custom/az_barrio/js/az-ajax.js b/themes/custom/az_barrio/js/az-ajax.js index c06bc5b93d..52189a6b76 100644 --- a/themes/custom/az_barrio/js/az-ajax.js +++ b/themes/custom/az_barrio/js/az-ajax.js @@ -1,19 +1,45 @@ /** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function (Drupal) { - var Z_INDEX = 1261; - var TOP_POSITION = '48.5%'; - var LEFT_POSITION = '49%'; - var SPINNER_SIZE = '3rem'; - var spinnerPositionClass = 'js-az-spinner-position'; - var style = document.createElement('style'); - style.textContent = "\n .".concat(spinnerPositionClass, " {\n position: fixed;\n z-index: ").concat(Z_INDEX, ";\n top: ").concat(TOP_POSITION, ";\n left: ").concat(LEFT_POSITION, ";\n }\n "); + * @file + * Ajax theme overrides for AZ Barrio. + * + * This script provides a custom theme for the AJAX progress indicator, + * utilizing Arizona Bootstrap classes. The indicator is positioned + * in the center of the screen. + */ + +((Drupal) => { + // Constants for repeated values + const Z_INDEX = 1261; + const TOP_POSITION = '48.5%'; + const LEFT_POSITION = '49%'; + const SPINNER_SIZE = '3rem'; + + // Define a dedicated CSS class for the spinner position + const spinnerPositionClass = 'js-az-spinner-position'; + + // Add CSS class to the document head + const style = document.createElement('style'); + style.textContent = ` + .${spinnerPositionClass} { + position: fixed; + z-index: ${Z_INDEX}; + top: ${TOP_POSITION}; + left: ${LEFT_POSITION}; + } + `; document.head.appendChild(style); - Drupal.theme.ajaxProgressIndicatorFullscreen = function () { - return "\n
\n
\n Loading...\n
\n
"); - }; -})(Drupal); \ No newline at end of file + + /** + * Theme override of the ajax progress indicator. + * Utilizes Arizona Bootstrap spinner classes. + * + * @return {string} + * The HTML markup for the throbber. + */ + Drupal.theme.ajaxProgressIndicatorFullscreen = () => ` +
+
+ Loading... +
+
`; +})(Drupal); diff --git a/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.es6.js b/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.es6.js deleted file mode 100644 index 0f3ab3c6d4..0000000000 --- a/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.es6.js +++ /dev/null @@ -1,13 +0,0 @@ -(($, Drupal) => { - Drupal.behaviors.azBarrioOffCanvasNav = { - attach: () => { - $('.navbar-offcanvas').on('opened.az.offcanvasmenu', (e) => { - if ( - $(e.target.ownerDocument.activeElement).attr('id') === 'jsAzSearch' - ) { - $('#block-az-barrio-offcanvas-searchform input').trigger('focus'); - } - }); - }, - }; -})(jQuery, Drupal); diff --git a/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.js b/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.js index ab651aebc7..0f3ab3c6d4 100644 --- a/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.js +++ b/themes/custom/az_barrio/js/az-barrio-off-canvas-nav.js @@ -1,17 +1,13 @@ -/** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function ($, Drupal) { +(($, Drupal) => { Drupal.behaviors.azBarrioOffCanvasNav = { - attach: function attach() { - $('.navbar-offcanvas').on('opened.az.offcanvasmenu', function (e) { - if ($(e.target.ownerDocument.activeElement).attr('id') === 'jsAzSearch') { + attach: () => { + $('.navbar-offcanvas').on('opened.az.offcanvasmenu', (e) => { + if ( + $(e.target.ownerDocument.activeElement).attr('id') === 'jsAzSearch' + ) { $('#block-az-barrio-offcanvas-searchform input').trigger('focus'); } }); - } + }, }; -})(jQuery, Drupal); \ No newline at end of file +})(jQuery, Drupal); diff --git a/themes/custom/az_barrio/js/button-no-conflict.es6.js b/themes/custom/az_barrio/js/button-no-conflict.es6.js deleted file mode 100644 index 1d260c1d67..0000000000 --- a/themes/custom/az_barrio/js/button-no-conflict.es6.js +++ /dev/null @@ -1,12 +0,0 @@ -// Give $().bootstrapBtn the Bootstrap functionality. -// See https://digital.arizona.edu/arizona-bootstrap/docs/2.0/getting-started/javascript/#no-conflict -(($, Drupal) => { - Drupal.behaviors.azBarrioButtonNoConflict = { - attach: () => { - if ($.fn.button && $.fn.button.noConflict !== undefined) { - const bootstrapButton = $.fn.button.noConflict(); - $.fn.bootstrapBtn = bootstrapButton; - } - }, - }; -})(jQuery, Drupal); diff --git a/themes/custom/az_barrio/js/button-no-conflict.js b/themes/custom/az_barrio/js/button-no-conflict.js index 6ebd6c7ab2..1d260c1d67 100644 --- a/themes/custom/az_barrio/js/button-no-conflict.js +++ b/themes/custom/az_barrio/js/button-no-conflict.js @@ -1,16 +1,12 @@ -/** -* DO NOT EDIT THIS FILE. -* See the following change record for more information, -* https://www.drupal.org/node/2815083 -* @preserve -**/ -(function ($, Drupal) { +// Give $().bootstrapBtn the Bootstrap functionality. +// See https://digital.arizona.edu/arizona-bootstrap/docs/2.0/getting-started/javascript/#no-conflict +(($, Drupal) => { Drupal.behaviors.azBarrioButtonNoConflict = { - attach: function attach() { + attach: () => { if ($.fn.button && $.fn.button.noConflict !== undefined) { - var bootstrapButton = $.fn.button.noConflict(); + const bootstrapButton = $.fn.button.noConflict(); $.fn.bootstrapBtn = bootstrapButton; } - } + }, }; -})(jQuery, Drupal); \ No newline at end of file +})(jQuery, Drupal); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..1abde79d27 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2392 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 9 + cacheKey: 10c0 + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.10.1 + resolution: "@eslint-community/eslint-utils@npm:4.10.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/b514586655698bc6b74db72a496c77e813c78b63e36a83429845ac7057dd77113b0b6c31e6e590d5baaeee2abae6ea22363a41209bcafa078d895ab83ce83011 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.3.6": + version: 0.3.6 + resolution: "@pkgr/core@npm:0.3.6" + checksum: 10c0/153f0f4563f505faeba13c733efa0e05e467ce1c6b941055a5fd3b4560da60fbf1dff4b11da0075f034ddda11f2842b90395f60895dde5825875b616edccc11c + languageName: node + linkType: hard + +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.3.3 + resolution: "@ungap/structured-clone@npm:1.3.3" + checksum: 10c0/b199e280ee06e9c447e0ccd38df60a65c2b2c13d3c77af50b1e6d77230aee1ea7da309d7b80c5a4850c8e22e4eee9e4b2813c6a33f8c360560d7f2e99a9f6e8f + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.9.0": + version: 8.18.0 + resolution: "acorn@npm:8.18.0" + bin: + acorn: bin/acorn + checksum: 10c0/be771be2135cc07910cf76f444ad514d7dcfd6d4a8026e597e93155275abc8ef61eee12211d52146e9d962874269b634f397464942087be013c89d0c54c5f8e5 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.15.0 + resolution: "ajv@npm:6.15.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/67966499dd272ecde1c2e467084411132891523d057487587879d39ac04207f4351b7b2324c83198013967fbfa632c1612adc960114a30770fbe07a0773b32c2 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d + languageName: node + linkType: hard + +"array-includes@npm:^3.1.9": + version: 3.1.9 + resolution: "array-includes@npm:3.1.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.0" + es-object-atoms: "npm:^1.1.1" + get-intrinsic: "npm:^1.3.0" + is-string: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/0235fa69078abeac05ac4250699c44996bc6f774a9cbe45db48674ce6bd142f09b327d31482ff75cf03344db4ea03eae23edb862d59378b484b47ed842574856 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.6": + version: 1.2.6 + resolution: "array.prototype.findlastindex@npm:1.2.6" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + es-shim-unscopables: "npm:^1.1.0" + checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.3": + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.3": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"az_quickstart@workspace:.": + version: 0.0.0-use.local + resolution: "az_quickstart@workspace:." + dependencies: + eslint: "npm:^8.53.0" + eslint-config-airbnb-base: "npm:^15.0.0" + eslint-config-prettier: "npm:^9.1.2" + eslint-plugin-import: "npm:^2.25.4" + eslint-plugin-prettier: "npm:^5.0.1" + eslint-plugin-yml: "npm:^1.8.0" + prettier: "npm:^3.0.3" + languageName: unknown + linkType: soft + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.18 + resolution: "brace-expansion@npm:1.1.18" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/3432c18a9e2ebf94162d4effb62198bd0adea06a9f332b2c0188df5d5e30b1e51ea3c848b6608e47d0b857ebe1ea5b3888ed3326dd3c4f6f9645c94153cf9c14 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8, call-bind@npm:^1.0.9": + version: 1.0.9 + resolution: "call-bind@npm:1.0.9" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + get-intrinsic: "npm:^1.3.0" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a6621f6da1444481919ce3b4983dff725691e0754d3507ae483ce56e54985f2da7d6f1df512c56dbf28660745cf1ca52553f1fc9aef5557f3ce353ef14fab714 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.2": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"debug@npm:^4.3.1, debug@npm:^4.3.2": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"diff-sequences@npm:^27.5.1": + version: 27.5.1 + resolution: "diff-sequences@npm:27.5.1" + checksum: 10c0/a52566d891b89a666f48ba69f54262fa8293ae6264ae04da82c7bf3b6661cba75561de0729f18463179d56003cc0fd69aa09845f2c2cd7a353b1ec1e1a96beb9 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"es-abstract-get@npm:^1.0.0": + version: 1.0.0 + resolution: "es-abstract-get@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.2" + is-callable: "npm:^1.2.7" + object-inspect: "npm:^1.13.4" + checksum: 10c0/f9b4838ae719752207383a6d95a74590f891122bf26b92f5e72eeedbe53771029e4561f1cf75ea19330b71bcf3d4f536fb0c8f7e2b601fe24d284f46e488c7e3 + languageName: node + linkType: hard + +"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0, es-abstract@npm:^1.24.2": + version: 1.24.2 + resolution: "es-abstract@npm:1.24.2" + dependencies: + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + es-set-tostringtag: "npm:^2.1.0" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.2" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.2.1" + is-set: "npm:^2.0.3" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.4" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.7" + own-keys: "npm:^1.0.1" + regexp.prototype.flags: "npm:^1.5.4" + safe-array-concat: "npm:^1.1.3" + safe-push-apply: "npm:^1.0.0" + safe-regex-test: "npm:^1.1.0" + set-proto: "npm:^1.0.0" + stop-iteration-iterator: "npm:^1.1.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.19" + checksum: 10c0/67a5bf21ef5c7d775e6f6131a836323900b4d87194cf544394ac68fe31c57fa53828b978af4a4f551ef307f83a2f910a16b6b982760ad3ddc3dc471f98d5fd1b + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1, es-object-atoms@npm:^1.1.2": + version: 1.1.2 + resolution: "es-object-atoms@npm:1.1.2" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1772861f094f739d6f41b579cfb9a18579daffeb434552a370a5fbef50a32d22227e27b63fdbb757b7ddd429d1b42fe52ccae7966d9302a2ec221b6f1b41bbc4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": + version: 1.1.0 + resolution: "es-shim-unscopables@npm:1.1.0" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/1b9702c8a1823fc3ef39035a4e958802cf294dd21e917397c561d0b3e195f383b978359816b1732d02b255ccf63e1e4815da0065b95db8d7c992037be3bbbcdb + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.3.0": + version: 1.3.4 + resolution: "es-to-primitive@npm:1.3.4" + dependencies: + es-abstract-get: "npm:^1.0.0" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.1.0" + is-symbol: "npm:^1.1.1" + checksum: 10c0/b10029f8b0b13841bade224ff39005a13d76d9cb803cd1efb18cc96a24414e83e2e7ed15d7ad9d0d0bda66884afd211b7b579b8fa31940e05b060934aa7077d8 + languageName: node + linkType: hard + +"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-compat-utils@npm:^0.6.0": + version: 0.6.5 + resolution: "eslint-compat-utils@npm:0.6.5" + dependencies: + semver: "npm:^7.5.4" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/f3519e1460ec82c6967c4b0132801924bf5c17328999014f444ec12f075b151e992d1ebf378cb8eb0b2e00b3d04e0eaac80897209121fd115f857598b4588393 + languageName: node + linkType: hard + +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" + dependencies: + confusing-browser-globals: "npm:^1.0.10" + object.assign: "npm:^4.1.2" + object.entries: "npm:^1.1.5" + semver: "npm:^6.3.0" + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.1.2": + version: 9.1.2 + resolution: "eslint-config-prettier@npm:9.1.2" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/d2e9dc913b1677764a4732433d83d258f40820458c65d0274cb9e3eaf6559b39f2136446f310c05abed065a4b3c2e901807ccf583dff76c6227eaebf4132c39a + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.10 + resolution: "eslint-import-resolver-node@npm:0.3.10" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.16.1" + resolve: "npm:^2.0.0-next.6" + checksum: 10c0/2e05bdb148fe10a25b9a6fec3c4986a2e09e98bb99208491df82a9df7725f7bb312482d585404c440d42e58ab60debe7a48d9c992191851385b18d33a146e3c3 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.12.1": + version: 2.14.0 + resolution: "eslint-module-utils@npm:2.14.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/f917eefe0aa933192df489f6188fdf13694aca4fdf8347010b77dd0d2e812b57d47622e88206ed50e769e55777ad7ce6c55a9997d5eebb44d8531ead1cc90188 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.25.4": + version: 2.32.0 + resolution: "eslint-plugin-import@npm:2.32.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.9" + array.prototype.findlastindex: "npm:^1.2.6" + array.prototype.flat: "npm:^1.3.3" + array.prototype.flatmap: "npm:^1.3.3" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.1" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.16.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.1" + semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.9" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10c0/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.0.1": + version: 5.5.6 + resolution: "eslint-plugin-prettier@npm:5.5.6" + dependencies: + prettier-linter-helpers: "npm:^1.0.1" + synckit: "npm:^0.11.13" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/af37126c947ff3e87ff1ea76408db8cb1c7da966ebdaba68c6dd5924da7eb1b43b1abc4796d753a97b1bc26ea94c5497093e6ab9f8588fffe558d5a554e19bbf + languageName: node + linkType: hard + +"eslint-plugin-yml@npm:^1.8.0": + version: 1.19.1 + resolution: "eslint-plugin-yml@npm:1.19.1" + dependencies: + debug: "npm:^4.3.2" + diff-sequences: "npm:^27.5.1" + escape-string-regexp: "npm:4.0.0" + eslint-compat-utils: "npm:^0.6.0" + natural-compare: "npm:^1.4.0" + yaml-eslint-parser: "npm:^1.2.1" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/c442966b7c3bc091b9973ec167408a509802b039643d7fd2b30d7440b72030dec916741925c58d33b098220b7d73809ac7786d970157e356f3a7eec0f74471b0 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.53.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.7.0 + resolution: "esquery@npm:1.7.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.20.1 + resolution: "fastq@npm:1.20.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.4.4 + resolution: "flatted@npm:3.4.4" + checksum: 10c0/a3a52a88ea5a4c333e5a1f097dcd87a037fa31c236a77cf46222c2aa4036ef895ab9bc76138a66d9dc22bdb3652128f9598cd26e7439561bf19f67276e2bc37e + languageName: node + linkType: hard + +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": + version: 0.3.5 + resolution: "for-each@npm:0.3.5" + dependencies: + is-callable: "npm:^1.2.7" + checksum: 10c0/0e0b50f6a843a282637d43674d1fb278dda1dd85f4f99b640024cfb10b85058aac0cc781bf689d5fe50b4b7f638e91e548560723a4e76e04fe96ae35ef039cee + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.2.0 + resolution: "function.prototype.name@npm:1.2.0" + dependencies: + call-bind: "npm:^1.0.9" + call-bound: "npm:^1.0.4" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + hasown: "npm:^2.0.4" + is-callable: "npm:^1.2.7" + is-document.all: "npm:^1.0.0" + checksum: 10c0/b20e6370ef4f7d56d0bedf5719f6684a517a8dd3334209b4d9f51e8834859302a584187156bf024cda9f50ba2479e4d6764ac34af9532ea47d2f4d9fa6bcf90d + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: "npm:^1.0.0" + async-generator-function: "npm:^1.0.0" + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2, hasown@npm:^2.0.3, hasown@npm:^2.0.4": + version: 2.0.4 + resolution: "hasown@npm:2.0.4" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/2d8de939e270b70618f8cebb69746620db10617dbb495bc66ddad326955ea24d3ca4af133aff3eb7c1853e0218f867bc2b050ec26fe02e3aea58f880ffc5e506 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" + dependencies: + async-function: "npm:^1.0.0" + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/d70c236a5e82de6fc4d44368ffd0c2fee2b088b893511ce21e679da275a5ecc6015ff59a7d7e1bdd7ca39f71a8dbdd253cf8cce5c6b3c91cdd5b42b5ce677298 + languageName: node + linkType: hard + +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" + dependencies: + has-bigints: "npm:^1.0.2" + checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.2.1": + version: 1.2.2 + resolution: "is-boolean-object@npm:1.2.2" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/36ff6baf6bd18b3130186990026f5a95c709345c39cd368468e6c1b6ab52201e9fd26d8e1f4c066357b4938b0f0401e1a5000e08257787c1a02f3a719457001e + languageName: node + linkType: hard + +"is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.1, is-core-module@npm:^2.16.2": + version: 2.16.2 + resolution: "is-core-module@npm:2.16.2" + dependencies: + hasown: "npm:^2.0.3" + checksum: 10c0/14b4258390283709c15476d023ec173e27458d5d014ccdb8ed39d576e551c3fa45498b7c9fe178f1529c4cb2648ddd58852a6a62107a019f6e349529f277518a + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 + languageName: node + linkType: hard + +"is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f + languageName: node + linkType: hard + +"is-document.all@npm:^1.0.0": + version: 1.0.0 + resolution: "is-document.all@npm:1.0.0" + dependencies: + call-bound: "npm:^1.0.4" + checksum: 10c0/955c20ed5bf01d49da8243b4c714947a6ff64b6d9ba0e12bdbfa654a3e7c47f72cc01c6cd2905e85512d02bc3a1290edd73857bca8842566ff9dcfb7c3f92dae + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10": + version: 1.1.2 + resolution: "is-generator-function@npm:1.1.2" + dependencies: + call-bound: "npm:^1.0.4" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/83da102e89c3e3b71d67b51d47c9f9bc862bceb58f87201727e27f7fa19d1d90b0ab223644ecaee6fc6e3d2d622bb25c966fbdaf87c59158b01ce7c0fe2fa372 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db + languageName: node + linkType: hard + +"is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d + languageName: node + linkType: hard + +"is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": + version: 1.1.1 + resolution: "is-weakref@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/8e0a9c07b0c780949a100e2cab2b5560a48ecd4c61726923c1a9b77b6ab0aa0046c9e7fb2206042296817045376dee2c8ab1dabe08c7c3dfbf195b01275a085b + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.3.1 + resolution: "js-yaml@npm:4.3.1" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/13c500ca322e0c3f8c81686e6ecda96d2ea37b45247a420c17c7db36932d6965cc27391abc2d1a104501600e7f0d947a5f8b7be6db619c4fefa87901b3512807 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"node-exports-info@npm:^1.6.0": + version: 1.6.2 + resolution: "node-exports-info@npm:1.6.2" + dependencies: + array.prototype.flatmap: "npm:^1.3.3" + es-errors: "npm:^1.3.0" + object.entries: "npm:^1.1.9" + semver: "npm:^6.3.1" + checksum: 10c0/5278fab18e8c97f45275c51819c3078ca9488361e875bc01b680776a339d2fee1ca9c6fcfb972df14945a1b184cc9924a1d9ba87e90f6cb3422c7f5b6900f4bc + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"object.entries@npm:^1.1.5, object.entries@npm:^1.1.9": + version: 1.1.9 + resolution: "object.entries@npm:1.1.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.1.1" + checksum: 10c0/d4b8c1e586650407da03370845f029aa14076caca4e4d4afadbc69cfb5b78035fd3ee7be417141abdb0258fa142e59b11923b4c44d8b1255b28f5ffcc50da7db + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.3": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c + languageName: node + linkType: hard + +"object.values@npm:^1.2.1": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"own-keys@npm:^1.0.1": + version: 1.0.2 + resolution: "own-keys@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.4" + get-intrinsic: "npm:^1.3.0" + object-keys: "npm:^1.1.1" + safe-push-apply: "npm:^1.0.0" + checksum: 10c0/84b0d9959475231166c3d4b9abd1b8af8042911e2e5625761eed980d1a1e4381cf52b34d907cae21ee8766c79de943f3cd85eba636149dee5e64cceff3ccdb78 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0, possible-typed-array-names@npm:^1.1.0": + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: 10c0/c810983414142071da1d644662ce4caebce890203eb2bc7bf119f37f3fe5796226e117e6cca146b521921fa6531072674174a3325066ac66fce089a53e1e5196 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "prettier-linter-helpers@npm:1.0.1" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/91cea965681bc5f62c9d26bd3ca6358b81557261d4802e96ec1cf0acbd99d4b61632d53320cd2c3ec7d7f7805a81345644108a41ef46ddc9688e783a9ac792d1 + languageName: node + linkType: hard + +"prettier@npm:^3.0.3": + version: 3.9.6 + resolution: "prettier@npm:3.9.6" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/9f7ddae234035868f3daab3dc34e6de7e54622185afb017378029f0c09a9c023248ccf6f34def0b17a0538e18c47aa1b3188bab72965d1bf735919baa0747e99 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.10, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.1" + which-builtin-type: "npm:^1.2.1" + checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.4": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.6": + version: 2.0.0-next.7 + resolution: "resolve@npm:2.0.0-next.7" + dependencies: + es-errors: "npm:^1.3.0" + is-core-module: "npm:^2.16.2" + node-exports-info: "npm:^1.6.0" + object-keys: "npm:^1.1.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8c6fa17ccdb826a3a52387ed8c42bf705dbc19d5494da52a86661b124b5b88fad5d8edbbb4434a1b563ecf7768368b7da9fb9489e20f36e02f7551a4ea87d707 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^2.0.0-next.6#optional!builtin": + version: 2.0.0-next.7 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.7#optional!builtin::version=2.0.0-next.7&hash=c3c19d" + dependencies: + es-errors: "npm:^1.3.0" + is-core-module: "npm:^2.16.2" + node-exports-info: "npm:^1.6.0" + object-keys: "npm:^1.1.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/6bb6f1d8a1789f7a5b4e35d950e76bc0ba632ff7d51fe86b6f34fb5f41e1ce0f7b884ec166828cfc0728ddffeaee49527711d752d12398297f90c51acd22195e + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.3": + version: 1.1.4 + resolution: "safe-array-concat@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.9" + call-bound: "npm:^1.0.4" + get-intrinsic: "npm:^1.3.0" + has-symbols: "npm:^1.1.0" + isarray: "npm:^2.0.5" + checksum: 10c0/95fb4904ab1d9360a666fe5ba6d88f1c4a3a39682739e4512cff809fc6b5722a94bd95189211015bfb45859a7ffbc3340ea303ae22721c91c59e8946d310975a + languageName: node + linkType: hard + +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + isarray: "npm:^2.0.5" + checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.5.4": + version: 7.8.5 + resolution: "semver@npm:7.8.5" + bin: + semver: bin/semver.js + checksum: 10c0/b1f3127a5be8125a94f37188b361c212466c292c6910adce3ec106cff5dc211ccaedc4739c11bb70fda59d6fc1f040a9bca289f4e093451521a2372e5231fe0c + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-list@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.4" + checksum: 10c0/d346c787fd2f9f1c2fdea14f00e8250118db0e7596d85a6cb9faa75f105d31a73a8f7a341c93d7df2a2429098c3d37a77bd3be9e88c37094b8c01807bc77c7a2 + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.1 + resolution: "side-channel@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.4" + side-channel-list: "npm:^1.0.1" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/dc0ab81d67f61bda9247d053ce93f41c3fd8ad2bdcb9cf9d8d2f8540d488f26d87a5e99ebfc07eea49ec025867b2452b705442d974b1478f0395e69f6bfb3270 + languageName: node + linkType: hard + +"stop-iteration-iterator@npm:^1.1.0": + version: 1.1.0 + resolution: "stop-iteration-iterator@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + internal-slot: "npm:^1.1.0" + checksum: 10c0/de4e45706bb4c0354a4b1122a2b8cc45a639e86206807ce0baf390ee9218d3ef181923fa4d2b67443367c491aa255c5fbaa64bb74648e3c5b48299928af86c09 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.11 + resolution: "string.prototype.trim@npm:1.2.11" + dependencies: + call-bind: "npm:^1.0.9" + call-bound: "npm:^1.0.4" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.2" + es-object-atoms: "npm:^1.1.2" + has-property-descriptors: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/b153cf8ed06db82ff40e27829e88e5c13f45eff9799f1d5707626e25989b488b059d6f5d57011e07f77745e28451e16735f295bc59c8ae146a4fd73a442366b0 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.9": + version: 1.0.10 + resolution: "string.prototype.trimend@npm:1.0.10" + dependencies: + call-bind: "npm:^1.0.9" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.1.2" + checksum: 10c0/cc09233181769047a5330becfd5740fec5f0c8137886e7b553626788b00f75df9f34db1159bc52dbb7fc389b8ebb6e1dab44c8c9e31eb600039729a542013286 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"synckit@npm:^0.11.13": + version: 0.11.13 + resolution: "synckit@npm:0.11.13" + dependencies: + "@pkgr/core": "npm:^0.3.6" + checksum: 10c0/5a6c19f4f79045aaa7994106401bff6dbe7cca23a6d0a0723ff14eb8b1bebeb4a71729118f6914905598e304ea2fa13509885e11ba07d92e7cb68a06740cb328 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.7": + version: 1.0.8 + resolution: "typed-array-length@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.9" + for-each: "npm:^0.3.5" + gopd: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + possible-typed-array-names: "npm:^1.1.0" + reflect.getprototypeof: "npm:^1.0.10" + checksum: 10c0/5319f740fc426a3217182c2f7c87656acb0903e046de5a938e30167337d26abf1bb3ad4b32833a72521a4cc58223aec80627b38b357d0a3d5fd64881427e77ab + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" + dependencies: + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" + is-async-function: "npm:^2.0.0" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" + is-generator-function: "npm:^1.0.10" + is-regex: "npm:^1.2.1" + is-weakref: "npm:^1.0.2" + isarray: "npm:^2.0.5" + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: "npm:^2.0.3" + is-set: "npm:^2.0.3" + is-weakmap: "npm:^2.0.2" + is-weakset: "npm:^2.0.3" + checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": + version: 1.1.22 + resolution: "which-typed-array@npm:1.1.22" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.9" + call-bound: "npm:^1.0.4" + for-each: "npm:^0.3.5" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/e59db184a4e78b461fac3b05fafc1e7badbbedafbf04a967ee1de73717f1f9723a79699e7b5de71d449541cb5da8353efc01a4f8a72a152479850e54fa196c40 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"yaml-eslint-parser@npm:^1.2.1": + version: 1.3.2 + resolution: "yaml-eslint-parser@npm:1.3.2" + dependencies: + eslint-visitor-keys: "npm:^3.0.0" + yaml: "npm:^2.0.0" + checksum: 10c0/c4b84c715f997216208be398c9869a225214b1a88963a7b0234e915b9b56acd7608d7ce06e584296fdbc67a32cdf37e57e94ea92f73278da161eaad9353ae25a + languageName: node + linkType: hard + +"yaml@npm:^2.0.0": + version: 2.9.0 + resolution: "yaml@npm:2.9.0" + bin: + yaml: bin.mjs + checksum: 10c0/f340718df45e97a9551b9bf9dac61c80050bc464513b710debfb5067c380c8472e3b67809cffacb4ab5ffb5e66ef9310816c88b05f371cec60abfedd8c88e0a2 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard