From f2e6a1d8b8fc49b03c75e94dfeed565eeb1bda2f Mon Sep 17 00:00:00 2001 From: Sergio Alvarenga <71974638+salvar3nga@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:28:15 +0100 Subject: [PATCH 01/24] fix: Attach release files in release please (#1636) * fix: remove worklow for attaching files * fix: build distribution and attach assets on release please --------- Co-authored-by: Sergio Alvarenga --- .github/workflows/attach-release-assets.yml | 38 --------------------- .github/workflows/release-please.yml | 16 +++++++++ 2 files changed, 16 insertions(+), 38 deletions(-) delete mode 100644 .github/workflows/attach-release-assets.yml diff --git a/.github/workflows/attach-release-assets.yml b/.github/workflows/attach-release-assets.yml deleted file mode 100644 index 9d505e689c..0000000000 --- a/.github/workflows/attach-release-assets.yml +++ /dev/null @@ -1,38 +0,0 @@ -on: - release: - types: [published] # This triggers when a new release is published - -permissions: - contents: write - -name: attach-release-assets - -jobs: - attach-assets: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2.3.1 - - name: Use Node.js 18.x - uses: actions/setup-node@v1 - with: - node-version: "18.x" - - name: Install and Build OpenSCD - run: | - npm i @nx/nx-linux-x64-gnu - npm clean-install - npm run-script build - npm run-script doc - - name: Copy Core Docs to OpenSCD - run: cp -R packages/core/doc packages/distribution/build/core-doc - - - name: Copy Plugin Docs to OpenSCD - run: cp -R packages/plugins/doc packages/distribution/build/plugin-doc - - - name: Compress files - run: tar -czf open-scd.tar.gz -C packages/distribution/build - - - name: Upload release files - run: gh release upload ${{ steps.release.outputs.tag_name }} open-scd.tar.gz - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 3f6d7fa74c..bb2d595c90 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -34,3 +34,19 @@ jobs: env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} if: ${{ steps.release.outputs.releases_created }} + + - name: Build Distribution + if: ${{ steps.release.outputs.releases_created }} + run: cd packages/distribution && npm run build + + - name: Create and Zip Build Assets + if: ${{ steps.release.outputs.releases_created }} + run: | + zip -r open-scd.zip ./packages/distribution/build/* + tar -czvf open-scd.tar.gz ./packages/distribution/build/* + + - name: Upload Build Assets + if: ${{ steps.release.outputs.releases_created }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release upload ${{ steps.release.outputs.tag_name }} open-scd.zip open-scd.tar.gz \ No newline at end of file From bc7571e8351d2a1770e19c58eabf91404cf1726e Mon Sep 17 00:00:00 2001 From: Sergio Alvarenga <71974638+salvar3nga@users.noreply.github.com> Date: Tue, 4 Mar 2025 09:24:13 +0100 Subject: [PATCH 02/24] fix: continue to upload assets job even if npm publish step fails (#1638) * fix error: TypeError: event.target.closest(...) is null * refactoring - Help.ts: move regex into explainatory variables - finder-list.ts: remove unnecessary Fn * fix failing test Test was failing for previously removing the "getDisplayString" method * refactorings * reinstate deleted Fn * fix: continue upload job even if npm publish fails --------- Co-authored-by: Sergio Alvarenga --- .github/workflows/release-please.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index bb2d595c90..8d07bfad95 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -34,6 +34,7 @@ jobs: env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} if: ${{ steps.release.outputs.releases_created }} + continue-on-error: true - name: Build Distribution if: ${{ steps.release.outputs.releases_created }} From bd554e72f308a3c6e60f4ee1d98fa4884fc5d8f8 Mon Sep 17 00:00:00 2001 From: Sergio Alvarenga <71974638+salvar3nga@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:45:21 +0100 Subject: [PATCH 03/24] fix: Build entire project and attach distribution to build output (#1639) * fix: build entire project instead of distribution * fix: build project only once --------- Co-authored-by: Sergio Alvarenga --- .github/workflows/release-please.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 8d07bfad95..ffbf7b3e60 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -28,7 +28,7 @@ jobs: if: ${{ steps.release.outputs.releases_created }} - run: npm ci --include=optional if: ${{ steps.release.outputs.releases_created }} - - run: cd packages/core && npm run build + - run: npm run build if: ${{ steps.release.outputs.releases_created }} - run: cd packages/core && npm publish --access public env: @@ -36,15 +36,12 @@ jobs: if: ${{ steps.release.outputs.releases_created }} continue-on-error: true - - name: Build Distribution - if: ${{ steps.release.outputs.releases_created }} - run: cd packages/distribution && npm run build - name: Create and Zip Build Assets if: ${{ steps.release.outputs.releases_created }} run: | - zip -r open-scd.zip ./packages/distribution/build/* - tar -czvf open-scd.tar.gz ./packages/distribution/build/* + zip -r open-scd.zip ./packages/distribution/build/ + tar -czvf open-scd.tar.gz ./packages/distribution/build/ - name: Upload Build Assets if: ${{ steps.release.outputs.releases_created }} From 81801cc776311ff996c512ea2f441b2b9cc5e2cd Mon Sep 17 00:00:00 2001 From: Sergio Alvarenga <71974638+salvar3nga@users.noreply.github.com> Date: Wed, 5 Mar 2025 12:58:10 +0100 Subject: [PATCH 04/24] fix: rename releases_created into release_created for release_please_action@V4 (#1641) * fix: use release_created instead of releases_created --------- Co-authored-by: Sergio Alvarenga --- .github/workflows/release-please.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index ffbf7b3e60..5e058cda0e 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -20,31 +20,31 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} # The logic below handles the npm publication: - uses: actions/checkout@v4 - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} - uses: actions/setup-node@v4 with: node-version: 18 registry-url: "https://registry.npmjs.org" - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} - run: npm ci --include=optional - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} - run: npm run build - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} - run: cd packages/core && npm publish --access public env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} continue-on-error: true - name: Create and Zip Build Assets - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} run: | zip -r open-scd.zip ./packages/distribution/build/ tar -czvf open-scd.tar.gz ./packages/distribution/build/ - name: Upload Build Assets - if: ${{ steps.release.outputs.releases_created }} + if: ${{ steps.release.outputs.release_created }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: gh release upload ${{ steps.release.outputs.tag_name }} open-scd.zip open-scd.tar.gz \ No newline at end of file From 43e1504fd9889988f31ee8b8008abea8fc48b8c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 13:01:17 +0100 Subject: [PATCH 05/24] chore(main): release 0.38.1 (#1637) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 576c8e5fff..20b12c4afb 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { "packages/openscd": "0.37.0", "packages/core": "0.1.4", - ".": "0.38.0" + ".": "0.38.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index cb4ff1e881..357e06eae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [0.38.1](https://github.com/openscd/open-scd/compare/v0.38.0...v0.38.1) (2025-03-05) + + +### Bug Fixes + +* Attach release files in release please ([#1636](https://github.com/openscd/open-scd/issues/1636)) ([f2e6a1d](https://github.com/openscd/open-scd/commit/f2e6a1d8b8fc49b03c75e94dfeed565eeb1bda2f)) +* Build entire project and attach distribution to build output ([#1639](https://github.com/openscd/open-scd/issues/1639)) ([bd554e7](https://github.com/openscd/open-scd/commit/bd554e72f308a3c6e60f4ee1d98fa4884fc5d8f8)) +* continue to upload assets job even if npm publish step fails ([#1638](https://github.com/openscd/open-scd/issues/1638)) ([bc7571e](https://github.com/openscd/open-scd/commit/bc7571e8351d2a1770e19c58eabf91404cf1726e)) +* rename releases_created into release_created for release_please_action@V4 ([#1641](https://github.com/openscd/open-scd/issues/1641)) ([81801cc](https://github.com/openscd/open-scd/commit/81801cc776311ff996c512ea2f441b2b9cc5e2cd)) + ## [0.38.0](https://github.com/openscd/open-scd/compare/v0.37.1...v0.38.0) (2025-02-26) diff --git a/package-lock.json b/package-lock.json index 6b65137642..936ec67614 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "openscd-monorepo", - "version": "0.38.0", + "version": "0.38.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openscd-monorepo", - "version": "0.38.0", + "version": "0.38.1", "license": "Apache-2.0", "workspaces": [ "packages/*" diff --git a/package.json b/package.json index 16f2e84626..7c17b57fc3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openscd-monorepo", - "version": "0.38.0", + "version": "0.38.1", "description": "OpenSCD base distribution and plugins", "private": true, "workspaces": [ From 54acfbc91deb133e9e85531c1cb0c3c1cc9244bf Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Mon, 17 Mar 2025 10:41:25 +0100 Subject: [PATCH 06/24] doc: Add licence information to README (#1642) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 40f7673832..bf082e4fdb 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,7 @@ A high-level overview of how it’s organized will help you know where to look f - [⚖️ Decisions](docs/decisions/README.md) documents the decisions we made and why we made them. - [✏️ Edit event API](docs/core-api/edit-api.md) documents the edit event API. + +## CC-EULA license + +Some of the files in this repository are subject to the CC-EULA License. Please check the [disclaimer](./packages/openscd/public/xml/Disclaimer.md) to to see what his means. \ No newline at end of file From a00a8f5ad24f72340dee3d33689d72ed6f4c06a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Russ?= Date: Thu, 20 Mar 2025 15:25:51 +0100 Subject: [PATCH 07/24] ref: extract tab menu from layout (#1631) --- packages/openscd/src/addons/Layout.ts | 23 ++++-- .../openscd/src/addons/menu-tabs/menu-tabs.ts | 81 +++++++++++++++++++ 2 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 packages/openscd/src/addons/menu-tabs/menu-tabs.ts diff --git a/packages/openscd/src/addons/Layout.ts b/packages/openscd/src/addons/Layout.ts index 78c0cce4b3..89ea827b22 100644 --- a/packages/openscd/src/addons/Layout.ts +++ b/packages/openscd/src/addons/Layout.ts @@ -58,6 +58,8 @@ import {OscdPluginManager} from "./plugin-manager/plugin-manager.js"; import "./plugin-manager/plugin-manager.js"; import {OscdCustomPluginDialog} from "./plugin-manager/custom-plugin-dialog.js"; import "./plugin-manager/custom-plugin-dialog.js"; +import "./menu-tabs/menu-tabs.js"; +import { TabActivatedEvent } from "./menu-tabs/menu-tabs.js"; @customElement('oscd-layout') @@ -82,6 +84,7 @@ export class OscdLayout extends LitElement { @state() validated: Promise = Promise.resolve(); @state() shouldValidate = false; + @state() activeEditor: Plugin | undefined = this.calcActiveEditors()[0]; @query('#menu') menuUI!: Drawer; @query('#pluginManager') pluginUI!: OscdPluginManager; @@ -462,17 +465,17 @@ export class OscdLayout extends LitElement { if(!hasActiveEditors){ return html``; } return html` - - ${activeEditors} - - ${renderEditorContent(this.editors, this.activeTab, this.doc)} + + ${renderEditorContent(this.doc, this.activeEditor, )} `; - function renderEditorContent(editors: Plugin[], activeTab: number, doc: XMLDocument | null){ - const editor = editors[activeTab]; + function renderEditorContent(doc: XMLDocument | null, activeEditor?: Plugin){ + const editor = activeEditor; const requireDoc = editor?.requireDoc if(requireDoc && !doc) { return html`` } @@ -483,6 +486,10 @@ export class OscdLayout extends LitElement { } } + private handleEditorTabActivated(e: TabActivatedEvent){ + this.activeEditor = e.detail.editor + } + private handleActivatedEditorTabByUser(e: CustomEvent): void { const tabIndex = e.detail.index; this.activateTab(tabIndex); diff --git a/packages/openscd/src/addons/menu-tabs/menu-tabs.ts b/packages/openscd/src/addons/menu-tabs/menu-tabs.ts new file mode 100644 index 0000000000..a02ae035c2 --- /dev/null +++ b/packages/openscd/src/addons/menu-tabs/menu-tabs.ts @@ -0,0 +1,81 @@ +import { + customElement, + html, + LitElement, + property, + query, + state, + TemplateResult, + css +} from 'lit-element'; + +import '@material/mwc-list'; +import '@material/mwc-tab'; +import '@material/mwc-tab-bar'; +import '@material/mwc-button'; + +import { + Plugin, +} from "../../plugin.js" + + +@customElement('oscd-menu-tabs') +export class OscdMenuTabs extends LitElement { + + @property({ type: Array }) editors: Plugin[] = []; + _activeEditor: Plugin | undefined; + @property({ type: Object }) get activeEditor() { return this._activeEditor; } + set activeEditor(editor: Plugin | undefined) { + this._activeEditor = editor; + this.activeTabIndex = this.editors.indexOf(this.activeEditor || this.editors[0]); + this.requestUpdate(); + }; + + @state() private activeTabIndex = 0; + + render(){ + if(this.editors.length === 0){ return html``; } + + return html` + + ${ this.editors.map( EditorTab ) } + + ` + } + + static styles = css` + mwc-tab { + background-color: var(--primary); + --mdc-theme-primary: var(--mdc-theme-on-primary); + } + ` + + private handleActivatedEditorTab(e: CustomEvent): void { + const tabIndex = e.detail.index; + const editor = this.editors[tabIndex]; + this.activeTabIndex = tabIndex; + this.dispatchActivateEditor(editor); + } + + private dispatchActivateEditor( editor: Plugin ){ + const newEvent = new CustomEvent(TabActivatedEventKey, { + detail: { editor }, + composed: true, + bubbles: true + }) + this.dispatchEvent(newEvent) + } +} + +function EditorTab({ name, icon }: Plugin): TemplateResult { + return html` + + `; +} + +export const TabActivatedEventKey = 'oscd-editor-tab-activated' +export type TabActivatedEvent = CustomEvent; +export type TabActivatedEventDetail = { editor: Plugin } From 70397a9b270e9963a012d3719600679fbfeef4d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Russ?= Date: Fri, 21 Mar 2025 10:19:12 +0100 Subject: [PATCH 08/24] Remove Unused GH Actions (#1649) --- .github/workflows/add-pr-to-board.yml | 103 --------------------- .github/workflows/save-pr-data-to-file.yml | 37 -------- 2 files changed, 140 deletions(-) delete mode 100644 .github/workflows/add-pr-to-board.yml delete mode 100644 .github/workflows/save-pr-data-to-file.yml diff --git a/.github/workflows/add-pr-to-board.yml b/.github/workflows/add-pr-to-board.yml deleted file mode 100644 index c94c91c40e..0000000000 --- a/.github/workflows/add-pr-to-board.yml +++ /dev/null @@ -1,103 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alliander N.V. -# -# SPDX-License-Identifier: Apache-2.0 - -name: Add pull requests to the overview board - -on: - workflow_run: - workflows: [Prepare PR data] - types: [completed] - -env: - todo: Pending - changes_requested: Changes Requested - approved: Approved - -jobs: - read-data-and-automate: - runs-on: ubuntu-latest - if: github.event.workflow_run.conclusion == 'success' - outputs: - pr_node_id: ${{ steps.pr_node_id.outputs.content }} - event_action: ${{ steps.event_action.outputs.content }} - review_pr_node_id: ${{ steps.review_pr_node_id.outputs.content }} - review_state: ${{ steps.review_state.outputs.content }} - steps: - # Data retrieval steps in case of a PR event - - name: Download PR data artifact - if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' - uses: dawidd6/action-download-artifact@v2 - with: - workflow: Prepare PR data - run_id: ${{ github.event.workflow_run.id }} - name: PR_DATA - - name: Read PR event's PR_NODE_ID.txt - if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' - id: pr_node_id - uses: juliangruber/read-file-action@v1 - with: - path: ./PR_NODE_ID.txt - trim: true - - name: Read PR event's EVENT_ACTION.txt - if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' - id: event_action - uses: juliangruber/read-file-action@v1 - with: - path: ./EVENT_ACTION.txt - trim: true - # Data retrieval steps in case of a PR review event - - name: Download PR review data artifact - if: github.event.workflow_run.event == 'pull_request_review' - uses: dawidd6/action-download-artifact@v2 - with: - workflow: Prepare PR data - run_id: ${{ github.event.workflow_run.id }} - name: REVIEW_DATA - - name: Read PR review event's PR_NODE_ID.txt - if: github.event.workflow_run.event == 'pull_request_review' - id: review_pr_node_id - uses: juliangruber/read-file-action@v1 - with: - path: ./PR_NODE_ID.txt - trim: true - - name: Read PR review event's REVIEW_STATE.txt - if: github.event.workflow_run.event == 'pull_request_review' - id: review_state - uses: juliangruber/read-file-action@v1 - with: - path: ./REVIEW_STATE.txt - trim: true - # Project automation steps - - name: Move PR to ${{ env.todo }} - if: ((github.event.workflow_run.event == 'pull_request' || - github.event.workflow_run.event == 'pull_request_target') && - (steps.event_action.outputs.content == 'opened' || - steps.event_action.outputs.content == 'reopened')) || - (github.event.workflow_run.event == 'pull_request_review' && - steps.review_state.outputs.content == 'dismissed') - uses: leonsteinhaeuser/project-beta-automations@v2.1.0 - with: - project_id: 7 - gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} - organization: openscd - resource_node_id: ${{ github.event.workflow_run.event == 'pull_request_review' && steps.review_pr_node_id.outputs.content || steps.pr_node_id.outputs.content }} - status_value: ${{ env.todo }} - - name: Move PR to ${{env.approved}} - if: github.event.workflow_run.event == 'pull_request_review' && steps.review_state.outputs.content == 'approved' - uses: leonsteinhaeuser/project-beta-automations@v2.1.0 - with: - project_id: 7 - gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} - organization: openscd - resource_node_id: ${{ steps.review_pr_node_id.outputs.content }} - status_value: ${{ env.approved }} - - name: Move PR to ${{env.changes_requested}} - if: github.event.workflow_run.event == 'pull_request_review' && steps.review_state.outputs.content == 'changes_requested' - uses: leonsteinhaeuser/project-beta-automations@v2.1.0 - with: - project_id: 7 - gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} - organization: openscd - resource_node_id: ${{ steps.review_pr_node_id.outputs.content }} - status_value: ${{ env.changes_requested }} diff --git a/.github/workflows/save-pr-data-to-file.yml b/.github/workflows/save-pr-data-to-file.yml deleted file mode 100644 index 16dbb839e6..0000000000 --- a/.github/workflows/save-pr-data-to-file.yml +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alliander N.V. -# -# SPDX-License-Identifier: Apache-2.0 - -name: Prepare PR data -# Necessary step to allow adding external PRs to the project board - -on: [pull_request, pull_request_target, pull_request_review] - -jobs: - save-pr-data: - name: Save PR data to file - runs-on: ubuntu-latest - if: ${{ github.event.pull_request.user.login != 'github-actions[bot]' }} - steps: - - name: Save PR node_id and event_action to files - if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' - run: echo ${{ github.event.pull_request.node_id }} > PR_NODE_ID.txt && echo ${{ github.event.action }} > EVENT_ACTION.txt - - name: Archive PR node_id and event_action - if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' - uses: actions/upload-artifact@v4 - with: - name: PR_DATA - path: | - PR_NODE_ID.txt - EVENT_ACTION.txt - - name: Save PR node_id and review_state to files - if: github.event_name == 'pull_request_review' - run: echo ${{ github.event.pull_request.node_id }} > PR_NODE_ID.txt && echo ${{ github.event.review.state }} > REVIEW_STATE.txt - - name: Archive PR and review_state - if: github.event_name == 'pull_request_review' - uses: actions/upload-artifact@v4 - with: - name: REVIEW_DATA - path: | - PR_NODE_ID.txt - REVIEW_STATE.txt From 384794420292a9e5192eac937d907238a6113120 Mon Sep 17 00:00:00 2001 From: Christopher Lepski <139237321+clepski@users.noreply.github.com> Date: Fri, 28 Mar 2025 15:25:17 +0100 Subject: [PATCH 09/24] fix: Fix handle activate editor (#1651) --- packages/openscd/src/addons/Layout.ts | 17 +++-------------- .../openscd/src/addons/menu-tabs/menu-tabs.ts | 3 ++- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/packages/openscd/src/addons/Layout.ts b/packages/openscd/src/addons/Layout.ts index 89ea827b22..3648d9e3cd 100644 --- a/packages/openscd/src/addons/Layout.ts +++ b/packages/openscd/src/addons/Layout.ts @@ -71,8 +71,6 @@ export class OscdLayout extends LitElement { @property({ type: String }) docName = ''; /** Index of the last [[`EditorAction`]] applied. */ @property({ type: Number }) editCount = -1; - /** The currently active editor tab. */ - @property({ type: Number }) activeTab = 0; /** The plugins to render the layout. */ @property({ type: Array }) plugins: Plugin[] = []; @@ -490,22 +488,13 @@ export class OscdLayout extends LitElement { this.activeEditor = e.detail.editor } - private handleActivatedEditorTabByUser(e: CustomEvent): void { - const tabIndex = e.detail.index; - this.activateTab(tabIndex); - } - private handleActivateEditorByEvent(e: CustomEvent<{name: string, src: string}>): void { const {name, src} = e.detail; const editors = this.calcActiveEditors() - const wantedEditorIndex = editors.findIndex(editor => editor.name === name || editor.src === src) - if(wantedEditorIndex < 0){ return; } // TODO: log error - - this.activateTab(wantedEditorIndex); - } + const wantedEditor = editors.find(editor => editor.name === name || editor.src === src) + if(!wantedEditor){ return; } // TODO: log error - private activateTab(index: number){ - this.activeTab = index; + this.activeEditor = wantedEditor; } private handleRunMenuByEvent(e: CustomEvent<{name: string}>): void { diff --git a/packages/openscd/src/addons/menu-tabs/menu-tabs.ts b/packages/openscd/src/addons/menu-tabs/menu-tabs.ts index a02ae035c2..f06e3e1dbd 100644 --- a/packages/openscd/src/addons/menu-tabs/menu-tabs.ts +++ b/packages/openscd/src/addons/menu-tabs/menu-tabs.ts @@ -27,7 +27,8 @@ export class OscdMenuTabs extends LitElement { @property({ type: Object }) get activeEditor() { return this._activeEditor; } set activeEditor(editor: Plugin | undefined) { this._activeEditor = editor; - this.activeTabIndex = this.editors.indexOf(this.activeEditor || this.editors[0]); + const editorIndex = this.editors.findIndex(e => e.name === editor?.name && e.src === editor?.src); + this.activeTabIndex = editorIndex > -1 ? editorIndex : 0; this.requestUpdate(); }; From ff699e357442593f07bf9665473b1fbc499606b0 Mon Sep 17 00:00:00 2001 From: Sergio Alvarenga <71974638+salvar3nga@users.noreply.github.com> Date: Thu, 3 Apr 2025 14:06:14 +0200 Subject: [PATCH 10/24] fix: modify start script to clear snowpack cache (#1654) * fix: modify start script to clear snowpack cache --------- Co-authored-by: Sergio Alvarenga --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c17b57fc3..f011330490 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "doc": "lerna run doc", "test": "npx nx run-many -t test --all --parallel=false", "graph": "npx nx graph", - "start": "lerna run start", + "start": "npx rimraf packages/distribution/node_modules/.cache/snowpack/build/lit@2.8.0 && lerna run start", "serve": "nx run @openscd/distribution:serve" }, "repository": { From f9f5e450dee98fe3c5192f50d8ecb302be666705 Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Wed, 16 Apr 2025 13:58:13 +0200 Subject: [PATCH 11/24] fix: update deprecated ubuntu image in pr-preview workflow (#1665) --- .github/workflows/pr-preview.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index 08de1179b7..ac422ed891 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -1,6 +1,5 @@ name: Deploy PR previews - on: pull_request: types: @@ -18,7 +17,7 @@ env: jobs: deploy-preview: permissions: write-all - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -35,4 +34,3 @@ jobs: with: source-dir: packages/distribution/build umbrella-dir: pr-preview - From 5476bd08711ae94341802db0636dcfd0e231cd41 Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Thu, 24 Apr 2025 09:11:21 +0200 Subject: [PATCH 12/24] fix: change pattern definition of tIDNaming to non-whitespace characters (#1670) * fix: update nmToken regex to match non-whitespace characters Signed-off-by: Nora Blomaard * fix: replace hardcoded regex pattern with patterns.nmToken in wizard tests Signed-off-by: Nora Blomaard --------- Signed-off-by: Nora Blomaard --- packages/openscd/src/foundation.ts | 2 +- .../editors/templates/datype-wizarding.test.ts | 14 ++------------ .../editors/templates/dotype-wizarding.test.ts | 4 ---- .../editors/templates/enumtype-wizarding.test.ts | 14 ++------------ .../editors/templates/lnodetype-wizard.test.ts | 14 ++------------ 5 files changed, 7 insertions(+), 41 deletions(-) diff --git a/packages/openscd/src/foundation.ts b/packages/openscd/src/foundation.ts index d1f92fdc0f..17996e42fe 100644 --- a/packages/openscd/src/foundation.ts +++ b/packages/openscd/src/foundation.ts @@ -2348,7 +2348,7 @@ const nameStartChar = const nameChar = nameStartChar + '|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040]'; const name = nameStartChar + '(' + nameChar + ')*'; -const nmToken = '(' + nameChar + ')+'; +const nmToken = '\\S+'; export const patterns = { string: diff --git a/packages/plugins/test/integration/editors/templates/datype-wizarding.test.ts b/packages/plugins/test/integration/editors/templates/datype-wizarding.test.ts index 3d0c5d644d..22418a2559 100644 --- a/packages/plugins/test/integration/editors/templates/datype-wizarding.test.ts +++ b/packages/plugins/test/integration/editors/templates/datype-wizarding.test.ts @@ -73,12 +73,7 @@ describe('DAType wizards', () => { }); }); - //work around, because the escapes get removed in snapshot it('should have correct pattern', async () => { - const pattern = - '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + - '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + - '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! .length @@ -88,7 +83,7 @@ describe('DAType wizards', () => { parent.wizardUI .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] .getAttribute('pattern') - ).to.equal(pattern); + ).to.equal(patterns.nmToken); expect( parent.wizardUI @@ -180,12 +175,7 @@ describe('DAType wizards', () => { }); }); - //work around, because the escapes get removed in snapshot it('should have correct pattern', async () => { - const pattern = - '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + - '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + - '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! .length @@ -195,7 +185,7 @@ describe('DAType wizards', () => { parent.wizardUI .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] .getAttribute('pattern') - ).to.equal(pattern); + ).to.equal(patterns.nmToken); expect( parent.wizardUI diff --git a/packages/plugins/test/integration/editors/templates/dotype-wizarding.test.ts b/packages/plugins/test/integration/editors/templates/dotype-wizarding.test.ts index 3dfc9f2168..3efde3a644 100644 --- a/packages/plugins/test/integration/editors/templates/dotype-wizarding.test.ts +++ b/packages/plugins/test/integration/editors/templates/dotype-wizarding.test.ts @@ -82,7 +82,6 @@ describe('DOType wizards', () => { }); }); - // work around, because the escapes get removed in snapshot by prettier it('should have correct pattern', async () => { expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! @@ -218,7 +217,6 @@ describe('DOType wizards', () => { }); }); - // work around, because the escapes get removed in snapshot by prettier it('should have correct pattern', async () => { expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! @@ -323,7 +321,6 @@ describe('DOType wizards', () => { }); }); - // work around, because the escapes get removed in snapshot by prettier it('should have correct pattern', async () => { expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! @@ -440,7 +437,6 @@ describe('DOType wizards', () => { }); }); - // work around, because the escapes get removed in snapshot by prettier it('should have correct pattern', async () => { expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! diff --git a/packages/plugins/test/integration/editors/templates/enumtype-wizarding.test.ts b/packages/plugins/test/integration/editors/templates/enumtype-wizarding.test.ts index e7e9af814d..1ae355a9d9 100644 --- a/packages/plugins/test/integration/editors/templates/enumtype-wizarding.test.ts +++ b/packages/plugins/test/integration/editors/templates/enumtype-wizarding.test.ts @@ -73,12 +73,7 @@ describe('EnumType wizards', () => { }); }); - //work around, because the escapes get removed in snapshot it('should have correct pattern', async () => { - const pattern = - '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + - '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + - '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! .length @@ -88,7 +83,7 @@ describe('EnumType wizards', () => { parent.wizardUI .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] .getAttribute('pattern') - ).to.equal(pattern); + ).to.equal(patterns.nmToken); expect( parent.wizardUI @@ -167,12 +162,7 @@ describe('EnumType wizards', () => { }); }); - //work around, because the escapes get removed in snapshot it('should have correct pattern', async () => { - const pattern = - '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + - '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + - '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! .length @@ -182,7 +172,7 @@ describe('EnumType wizards', () => { parent.wizardUI .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] .getAttribute('pattern') - ).to.equal(pattern); + ).to.equal(patterns.nmToken); expect( parent.wizardUI diff --git a/packages/plugins/test/integration/editors/templates/lnodetype-wizard.test.ts b/packages/plugins/test/integration/editors/templates/lnodetype-wizard.test.ts index e8187046a2..981e7c8fd5 100644 --- a/packages/plugins/test/integration/editors/templates/lnodetype-wizard.test.ts +++ b/packages/plugins/test/integration/editors/templates/lnodetype-wizard.test.ts @@ -73,12 +73,7 @@ describe('LNodeType wizards', () => { }); }); - //work around, because the escapes get removed in snapshot it('should have correct pattern', async () => { - const pattern = - '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + - '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + - '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! .length @@ -88,7 +83,7 @@ describe('LNodeType wizards', () => { parent.wizardUI .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] .getAttribute('pattern') - ).to.equal(pattern); + ).to.equal(patterns.nmToken); expect( parent.wizardUI @@ -169,12 +164,7 @@ describe('LNodeType wizards', () => { }); }); - //work around, because the escapes get removed in snapshot it('should have correct pattern', async () => { - const pattern = - '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + - '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + - '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; expect( parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! .length @@ -184,7 +174,7 @@ describe('LNodeType wizards', () => { parent.wizardUI .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] .getAttribute('pattern') - ).to.equal(pattern); + ).to.equal(patterns.nmToken); expect( parent.wizardUI From a22a165583b2ae6acf680b664e274295f9d094a2 Mon Sep 17 00:00:00 2001 From: Christopher Lepski <139237321+clepski@users.noreply.github.com> Date: Thu, 24 Apr 2025 10:22:48 +0200 Subject: [PATCH 13/24] doc: Add edit API diagram (#1671) --- docs/core-api/edit-api-flow.png | Bin 0 -> 65649 bytes docs/core-api/edit-api.md | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 docs/core-api/edit-api-flow.png diff --git a/docs/core-api/edit-api-flow.png b/docs/core-api/edit-api-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..97f2462f58616c820346bfe9147cfcd9c1b200e3 GIT binary patch literal 65649 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%0AEfgrNiiHdpL#EWtN`*y@No> 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 literal 0 HcmV?d00001 diff --git a/docs/core-api/edit-api.md b/docs/core-api/edit-api.md index 3029221682..bc9ebc77fd 100644 --- a/docs/core-api/edit-api.md +++ b/docs/core-api/edit-api.md @@ -2,6 +2,8 @@ Open SCD offers an API for editing the scd document which can be used with [Html Custom Events](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent). The main Open SCD components listens to events of the type `oscd-edit-v2`, applies the changes to the `doc` and updates the `editCount` property. +![EditApiFlow](./edit-api-flow.png) + The edits to the `doc` will be done in place, e.g. the `doc` changes but will keep the same reference. If your plugin needs to react to changes in the doc, you should listen to changes in the `editCount` property. ## Event factory From fffd1a766f175044f78f34b0d833079dba34e085 Mon Sep 17 00:00:00 2001 From: Sergio Alvarenga <71974638+salvar3nga@users.noreply.github.com> Date: Wed, 30 Apr 2025 11:17:15 +0200 Subject: [PATCH 14/24] feat: add commit lint to OpenSCD (#1676) * feat: add commitlint and husky dependencie * refactor: remove prepare script on pkg.json * docs: create documentation about correctly committing to OpenSCD * docs: move documentation to how-to folder --------- Co-authored-by: Sergio Alvarenga --- .husky/commit-msg | 1 + commitlint.config.js | 3 + docs/how-to/commiting.md | 78 ++ package-lock.json | 2425 ++++++++++++++++++++++++++++++++++---- package.json | 5 +- 5 files changed, 2277 insertions(+), 235 deletions(-) create mode 100644 .husky/commit-msg create mode 100644 commitlint.config.js create mode 100644 docs/how-to/commiting.md diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000000..0a4b97de53 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no -- commitlint --edit $1 diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000000..8229ea457c --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['@commitlint/config-conventional'] +}; diff --git a/docs/how-to/commiting.md b/docs/how-to/commiting.md new file mode 100644 index 0000000000..37bff662b4 --- /dev/null +++ b/docs/how-to/commiting.md @@ -0,0 +1,78 @@ +# 📝 Commit Message Guidelines + +## Purpose + +To maintain a clean, readable, and automated commit history, we enforce the [Conventional Commits ↗](https://www.conventionalcommits.org/en/v1.0.0/) specification across this repository. + +All commits **must** follow the format described below. Commits that do not comply will be automatically rejected by our Git hooks. + +--- + +## 📋 Commit Format + +``` +(): +``` + +- `type`: the kind of change you're committing. +- `scope`: the specific part of the codebase affected (optional but encouraged). +- `subject`: a brief description of the change. + +--- +## ✏️ Examples + +Good examples: +``` +feat(core): add authentication module +fix(openSCD): resolve login redirect bug +docs: update contributing guidelines +chore: update eslint config +``` + +Bad examples (these would be rejected): +``` +"fix bug" +"updated stuff" +"small changes" +``` + +--- +## 🔖 Some of the allowed Types + +⚠️ Disclaimer: For a full list please visit the [conventional commits ↗](https://www.conventionalcommits.org/en/v1.0.0/) page + +| Type | Purpose | +|------------|-----------------------------------------------------------| +| feat | A new feature | +| fix | A bug fix | +| docs | Documentation only changes | +| style | Changes that do not affect meaning (formatting, etc.) | +| refactor | Code change that neither fixes a bug nor adds a feature | +| perf | A code change that improves performance | +| test | Adding or correcting tests | +| chore | Maintenance tasks (build process, tooling, dependencies) | + +--- + +## 🧠 Additional Notes + +- The commit hook will automatically validate your message. +- If your commit is rejected, edit your message and try again. +- For complex changes, you can add a longer body after the subject, separated by a blank line. + +Example: +``` +feat(core): support new user roles + +This adds support for multiple user role types in the core module. Also refactors the existing permission system to be more scalable. +``` + +--- + +# ✅ Quick Checklist Before Committing + +- [ ] Is my commit message following the format? +- [ ] Is the type correct (`feat`, `fix`, `chore`, etc.)? +- [ ] Did I specify the correct scope (`core`, `openSCD`, `distribution`, etc...) if applicable? +- [ ] Is the message short, clear, and imperative? + diff --git a/package-lock.json b/package-lock.json index 936ec67614..2d6c291d51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,9 @@ "packages/*" ], "devDependencies": { + "@commitlint/cli": "^19.8.0", + "@commitlint/config-conventional": "^19.8.0", + "husky": "^9.1.7", "lerna": "^7.1.4", "nx": "18.3.4" }, @@ -2002,26 +2005,24 @@ } }, "node_modules/@commitlint/cli": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", - "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.0.tgz", + "integrity": "sha512-t/fCrLVu+Ru01h0DtlgHZXbHV2Y8gKocTR5elDOqIRUzQd0/6hpt2VIWOj9b3NDo7y4/gfxeR2zRtXq/qO6iUg==", "dev": true, "dependencies": { - "@commitlint/format": "^13.2.0", - "@commitlint/lint": "^13.2.0", - "@commitlint/load": "^13.2.1", - "@commitlint/read": "^13.2.0", - "@commitlint/types": "^13.2.0", - "lodash": "^4.17.19", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", + "@commitlint/format": "^19.8.0", + "@commitlint/lint": "^19.8.0", + "@commitlint/load": "^19.8.0", + "@commitlint/read": "^19.8.0", + "@commitlint/types": "^19.8.0", + "tinyexec": "^0.3.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "cli.js" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, "node_modules/@commitlint/cli/node_modules/yargs": { @@ -2052,298 +2053,531 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", - "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.0.tgz", + "integrity": "sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==", "dev": true, "dependencies": { - "conventional-changelog-conventionalcommits": "^4.3.1" + "@commitlint/types": "^19.8.0", + "conventional-changelog-conventionalcommits": "^7.0.2" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, + "node_modules/@commitlint/config-conventional/node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.0.tgz", + "integrity": "sha512-+r5ZvD/0hQC3w5VOHJhGcCooiAVdynFlCe2d6I9dU+PvXdV3O+fU4vipVg+6hyLbQUuCH82mz3HnT/cBQTYYuA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^19.8.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/@commitlint/ensure": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", - "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.0.tgz", + "integrity": "sha512-kNiNU4/bhEQ/wutI1tp1pVW1mQ0QbAjfPRo5v8SaxoVV+ARhkB8Wjg3BSseNYECPzWWfg/WDqQGIfV1RaBFQZg==", "dev": true, "dependencies": { - "@commitlint/types": "^13.2.0", - "lodash": "^4.17.19" + "@commitlint/types": "^19.8.0", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, "node_modules/@commitlint/execute-rule": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", - "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.0.tgz", + "integrity": "sha512-fuLeI+EZ9x2v/+TXKAjplBJWI9CNrHnyi5nvUQGQt4WRkww/d95oVRsc9ajpt4xFrFmqMZkd/xBQHZDvALIY7A==", "dev": true, "engines": { - "node": ">=v12" + "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", - "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.0.tgz", + "integrity": "sha512-EOpA8IERpQstxwp/WGnDArA7S+wlZDeTeKi98WMOvaDLKbjptuHWdOYYr790iO7kTCif/z971PKPI2PkWMfOxg==", "dev": true, "dependencies": { - "@commitlint/types": "^13.2.0", - "chalk": "^4.0.0" + "@commitlint/types": "^19.8.0", + "chalk": "^5.3.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@commitlint/is-ignored": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", - "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.0.tgz", + "integrity": "sha512-L2Jv9yUg/I+jF3zikOV0rdiHUul9X3a/oU5HIXhAJLE2+TXTnEBfqYP9G5yMw/Yb40SnR764g4fyDK6WR2xtpw==", "dev": true, "dependencies": { - "@commitlint/types": "^13.2.0", - "semver": "7.3.5" + "@commitlint/types": "^19.8.0", + "semver": "^7.6.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@commitlint/lint": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.0.tgz", + "integrity": "sha512-+/NZKyWKSf39FeNpqhfMebmaLa1P90i1Nrb1SrA7oSU5GNN/lksA4z6+ZTnsft01YfhRZSYMbgGsARXvkr/VLQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@commitlint/is-ignored": "^19.8.0", + "@commitlint/parse": "^19.8.0", + "@commitlint/rules": "^19.8.0", + "@commitlint/types": "^19.8.0" }, "engines": { - "node": ">=10" + "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/@commitlint/load": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.0.tgz", + "integrity": "sha512-4rvmm3ff81Sfb+mcWT5WKlyOa+Hd33WSbirTVUer0wjS1Hv/Hzr07Uv1ULIV9DkimZKNyOwXn593c+h8lsDQPQ==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^19.8.0", + "@commitlint/execute-rule": "^19.8.0", + "@commitlint/resolve-extends": "^19.8.0", + "@commitlint/types": "^19.8.0", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/load/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "dev": true, + "dependencies": { + "jiti": "^2.4.1" }, "engines": { - "node": ">=10" + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" } }, - "node_modules/@commitlint/is-ignored/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/@commitlint/message": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.0.tgz", + "integrity": "sha512-qs/5Vi9bYjf+ZV40bvdCyBn5DvbuelhR6qewLE8Bh476F7KnNyLfdM/ETJ4cp96WgeeHo6tesA2TMXS0sh5X4A==", + "dev": true, + "engines": { + "node": ">=v18" + } }, - "node_modules/@commitlint/lint": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", - "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "node_modules/@commitlint/parse": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.0.tgz", + "integrity": "sha512-YNIKAc4EXvNeAvyeEnzgvm1VyAe0/b3Wax7pjJSwXuhqIQ1/t2hD3OYRXb6D5/GffIvaX82RbjD+nWtMZCLL7Q==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^13.2.0", - "@commitlint/parse": "^13.2.0", - "@commitlint/rules": "^13.2.0", - "@commitlint/types": "^13.2.0" + "@commitlint/types": "^19.8.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, - "node_modules/@commitlint/load": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", - "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "node_modules/@commitlint/parse/node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, "dependencies": { - "@commitlint/execute-rule": "^13.2.0", - "@commitlint/resolve-extends": "^13.2.0", - "@commitlint/types": "^13.2.0", - "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", - "chalk": "^4.0.0", - "cosmiconfig": "^7.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "typescript": "^4.4.3" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" }, "engines": { - "node": ">=v12" + "node": ">=16" } }, - "node_modules/@commitlint/load/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/@commitlint/parse/node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "text-extensions": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@commitlint/load/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "node_modules/@commitlint/parse/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, "engines": { - "node": ">=4.2.0" + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/load/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/@commitlint/parse/node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10.x" } }, - "node_modules/@commitlint/message": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", - "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "node_modules/@commitlint/parse/node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, "engines": { - "node": ">=v12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/parse": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", - "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "node_modules/@commitlint/read": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.0.tgz", + "integrity": "sha512-6ywxOGYajcxK1y1MfzrOnwsXO6nnErna88gRWEl3qqOOP8MDu/DTeRkGLXBFIZuRZ7mm5yyxU5BmeUvMpNte5w==", "dev": true, "dependencies": { - "@commitlint/types": "^13.2.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" + "@commitlint/top-level": "^19.8.0", + "@commitlint/types": "^19.8.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^0.3.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, - "node_modules/@commitlint/parse/node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "node_modules/@commitlint/read/node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/read": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", - "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "node_modules/@commitlint/read/node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "dependencies": { - "@commitlint/top-level": "^13.2.0", - "@commitlint/types": "^13.2.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" }, "engines": { - "node": ">=v12" + "node": ">=16" } }, - "node_modules/@commitlint/read/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@commitlint/read/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "engines": { + "node": ">=16.10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/read/node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">= 10.x" } }, "node_modules/@commitlint/resolve-extends": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", - "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.0.tgz", + "integrity": "sha512-CLanRQwuG2LPfFVvrkTrBR/L/DMy3+ETsgBqW1OvRxmzp/bbVJW0Xw23LnnExgYcsaFtos967lul1CsbsnJlzQ==", "dev": true, "dependencies": { - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "@commitlint/config-validator": "^19.8.0", + "@commitlint/types": "^19.8.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, "node_modules/@commitlint/rules": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", - "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.0.tgz", + "integrity": "sha512-IZ5IE90h6DSWNuNK/cwjABLAKdy8tP8OgGVGbXe1noBEX5hSsu00uRlLu6JuruiXjWJz2dZc+YSw3H0UZyl/mA==", "dev": true, "dependencies": { - "@commitlint/ensure": "^13.2.0", - "@commitlint/message": "^13.2.0", - "@commitlint/to-lines": "^13.2.0", - "@commitlint/types": "^13.2.0", - "execa": "^5.0.0" + "@commitlint/ensure": "^19.8.0", + "@commitlint/message": "^19.8.0", + "@commitlint/to-lines": "^19.8.0", + "@commitlint/types": "^19.8.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", - "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.0.tgz", + "integrity": "sha512-3CKLUw41Cur8VMjh16y8LcsOaKbmQjAKCWlXx6B0vOUREplp6em9uIVhI8Cv934qiwkbi2+uv+mVZPnXJi1o9A==", "dev": true, "engines": { - "node": ">=v12" + "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", - "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.0.tgz", + "integrity": "sha512-Rphgoc/omYZisoNkcfaBRPQr4myZEHhLPx2/vTXNLjiCw4RgfPR1wEgUpJ9OOmDCiv5ZyIExhprNLhteqH4FuQ==", "dev": true, "dependencies": { - "find-up": "^5.0.0" + "find-up": "^7.0.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "dev": true, + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@commitlint/top-level/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@commitlint/types": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", - "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.0.tgz", + "integrity": "sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==", "dev": true, "dependencies": { - "chalk": "^4.0.0" + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" }, "engines": { - "node": ">=v12" + "node": ">=v18" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@custom-elements-manifest/analyzer": { @@ -7800,6 +8034,15 @@ "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", "dev": true }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/convert-source-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-2.0.3.tgz", @@ -14566,6 +14809,22 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -15433,6 +15692,30 @@ "node": "*" } }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -16029,70 +16312,18 @@ } }, "node_modules/husky": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", - "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, "bin": { - "husky-run": "bin/run.js", - "husky-upgrade": "lib/upgrader/bin.js" + "husky": "bin.js" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/husky" - } - }, - "node_modules/husky/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/husky/node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/husky/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" + "url": "https://github.com/sponsors/typicode" } }, "node_modules/iconv-lite": { @@ -16246,6 +16477,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -17244,6 +17485,15 @@ "node": ">= 10.13.0" } }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", @@ -18797,6 +19047,18 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -18809,12 +19071,30 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", "dev": true }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -18827,6 +19107,12 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -26888,6 +27174,12 @@ "readable-stream": "3" } }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -27676,6 +27968,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/union": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", @@ -29644,6 +29948,257 @@ "@babel/highlight": "^7.10.4" } }, + "packages/addons/node_modules/@commitlint/cli": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", + "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^13.2.0", + "@commitlint/lint": "^13.2.0", + "@commitlint/load": "^13.2.1", + "@commitlint/read": "^13.2.0", + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/addons/node_modules/@commitlint/config-conventional": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", + "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/execute-rule": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", + "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^13.2.0", + "@commitlint/resolve-extends": "^13.2.0", + "@commitlint/types": "^13.2.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/load/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/addons/node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/resolve-extends": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", + "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^13.2.0", + "@commitlint/message": "^13.2.0", + "@commitlint/to-lines": "^13.2.0", + "@commitlint/types": "^13.2.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/to-lines": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", + "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/addons/node_modules/@commitlint/types": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", + "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, "packages/addons/node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -29991,6 +30546,19 @@ "node": ">=10.0.0" } }, + "packages/addons/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, "packages/addons/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -30205,6 +30773,20 @@ "url": "https://opencollective.com/fast-check" } }, + "packages/addons/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "packages/addons/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -30327,6 +30909,18 @@ "tslib": "^2.1.0" } }, + "packages/addons/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/addons/node_modules/parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -30367,6 +30961,21 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "packages/addons/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "packages/addons/node_modules/shiki": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", @@ -30504,6 +31113,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "packages/addons/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "packages/addons/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -30513,6 +31128,15 @@ "node": ">= 6" } }, + "packages/addons/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "packages/core": { "name": "@openscd/core", "version": "0.1.4", @@ -30561,6 +31185,52 @@ "balanced-match": "^1.0.0" } }, + "packages/core/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/core/node_modules/husky": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", + "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^4.0.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "husky-run": "bin/run.js", + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/husky" + } + }, "packages/core/node_modules/minimatch": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", @@ -30576,6 +31246,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/core/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/core/node_modules/typedoc": { "version": "0.23.28", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz", @@ -30610,6 +31292,15 @@ "node": ">=4.2.0" } }, + "packages/core/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "packages/distribution": { "name": "@openscd/distribution", "version": "0.0.1", @@ -30665,6 +31356,257 @@ "@babel/highlight": "^7.10.4" } }, + "packages/distribution/node_modules/@commitlint/cli": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", + "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^13.2.0", + "@commitlint/lint": "^13.2.0", + "@commitlint/load": "^13.2.1", + "@commitlint/read": "^13.2.0", + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/distribution/node_modules/@commitlint/config-conventional": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", + "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/execute-rule": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", + "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^13.2.0", + "@commitlint/resolve-extends": "^13.2.0", + "@commitlint/types": "^13.2.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/load/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/distribution/node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/resolve-extends": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", + "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^13.2.0", + "@commitlint/message": "^13.2.0", + "@commitlint/to-lines": "^13.2.0", + "@commitlint/types": "^13.2.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/to-lines": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", + "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/distribution/node_modules/@commitlint/types": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", + "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, "packages/distribution/node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -31012,6 +31954,19 @@ "node": ">=10.0.0" } }, + "packages/distribution/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, "packages/distribution/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -31226,6 +32181,20 @@ "url": "https://opencollective.com/fast-check" } }, + "packages/distribution/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "packages/distribution/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -31348,6 +32317,18 @@ "tslib": "^2.1.0" } }, + "packages/distribution/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/distribution/node_modules/parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -31388,6 +32369,21 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "packages/distribution/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "packages/distribution/node_modules/shiki": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", @@ -31528,6 +32524,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "packages/distribution/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "packages/distribution/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -31537,6 +32539,15 @@ "node": ">= 6" } }, + "packages/distribution/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "packages/openscd": { "name": "@openscd/open-scd", "version": "0.34.0", @@ -31614,6 +32625,244 @@ "@babel/highlight": "^7.10.4" } }, + "packages/openscd/node_modules/@commitlint/cli": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", + "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^13.2.0", + "@commitlint/lint": "^13.2.0", + "@commitlint/load": "^13.2.1", + "@commitlint/read": "^13.2.0", + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/openscd/node_modules/@commitlint/config-conventional": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", + "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/execute-rule": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", + "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^13.2.0", + "@commitlint/resolve-extends": "^13.2.0", + "@commitlint/types": "^13.2.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/resolve-extends": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", + "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^13.2.0", + "@commitlint/message": "^13.2.0", + "@commitlint/to-lines": "^13.2.0", + "@commitlint/types": "^13.2.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/to-lines": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", + "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/openscd/node_modules/@commitlint/types": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", + "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, "packages/openscd/node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -32127,6 +33376,19 @@ "node": ">=10.0.0" } }, + "packages/openscd/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, "packages/openscd/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -32348,6 +33610,20 @@ "url": "https://opencollective.com/fast-check" } }, + "packages/openscd/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "packages/openscd/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -32534,6 +33810,33 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "packages/openscd/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/openscd/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/openscd/node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -32683,6 +33986,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "packages/openscd/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "packages/openscd/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -32692,6 +34001,15 @@ "node": ">= 6" } }, + "packages/openscd/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "packages/plugins": { "name": "@openscd/plugins", "version": "0.0.1", @@ -32764,6 +34082,244 @@ "@babel/highlight": "^7.10.4" } }, + "packages/plugins/node_modules/@commitlint/cli": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", + "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^13.2.0", + "@commitlint/lint": "^13.2.0", + "@commitlint/load": "^13.2.1", + "@commitlint/read": "^13.2.0", + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/plugins/node_modules/@commitlint/config-conventional": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", + "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/execute-rule": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", + "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^13.2.0", + "@commitlint/resolve-extends": "^13.2.0", + "@commitlint/types": "^13.2.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/resolve-extends": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", + "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^13.2.0", + "@commitlint/message": "^13.2.0", + "@commitlint/to-lines": "^13.2.0", + "@commitlint/types": "^13.2.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/to-lines": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", + "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/plugins/node_modules/@commitlint/types": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", + "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, "packages/plugins/node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -33277,6 +34833,19 @@ "node": ">=10.0.0" } }, + "packages/plugins/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, "packages/plugins/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -33498,6 +35067,20 @@ "url": "https://opencollective.com/fast-check" } }, + "packages/plugins/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "packages/plugins/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -33684,6 +35267,33 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "packages/plugins/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/plugins/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/plugins/node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -33833,6 +35443,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "packages/plugins/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "packages/plugins/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -33842,6 +35458,15 @@ "node": ">= 6" } }, + "packages/plugins/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "packages/wizards": { "name": "@openscd/wizards", "version": "0.0.1", @@ -33891,6 +35516,226 @@ "@babel/highlight": "^7.10.4" } }, + "packages/xml/node_modules/@commitlint/cli": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", + "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^13.2.0", + "@commitlint/lint": "^13.2.0", + "@commitlint/load": "^13.2.1", + "@commitlint/read": "^13.2.0", + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/config-conventional": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", + "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/execute-rule": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", + "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^13.2.0", + "@commitlint/resolve-extends": "^13.2.0", + "@commitlint/types": "^13.2.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/resolve-extends": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", + "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^13.2.0", + "@commitlint/message": "^13.2.0", + "@commitlint/to-lines": "^13.2.0", + "@commitlint/types": "^13.2.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/to-lines": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", + "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "packages/xml/node_modules/@commitlint/types": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", + "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, "packages/xml/node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -34233,6 +36078,35 @@ "balanced-match": "^1.0.0" } }, + "packages/xml/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/xml/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/xml/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -34414,6 +36288,20 @@ "node": ">=4" } }, + "packages/xml/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "packages/xml/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -34442,6 +36330,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "packages/xml/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/xml/node_modules/minimatch": { "version": "7.4.6", "dev": true, @@ -34462,6 +36362,21 @@ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true }, + "packages/xml/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "packages/xml/node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -34511,6 +36426,48 @@ "engines": { "node": ">=4.2.0" } + }, + "packages/xml/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "packages/xml/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "packages/xml/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "packages/xml/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } } } } diff --git a/package.json b/package.json index f011330490..4041e00408 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,13 @@ }, "license": "Apache-2.0", "devDependencies": { + "@commitlint/cli": "^19.8.0", + "@commitlint/config-conventional": "^19.8.0", + "husky": "^9.1.7", "lerna": "^7.1.4", "nx": "18.3.4" }, "optionalDependencies": { "@nx/nx-linux-x64-gnu": "18.3.4" } -} \ No newline at end of file +} From ffeb42b3796d455cb926eb68b5e9c19a02786dc9 Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Tue, 6 May 2025 13:15:31 +0200 Subject: [PATCH 15/24] ci: change ubuntu runner in pr preview action (#1677) --- .github/workflows/pr-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index ac422ed891..2d1e275f25 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -17,7 +17,7 @@ env: jobs: deploy-preview: permissions: write-all - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 From c8500880bfdffd87cf014a5ad1d9fcef89a5ba41 Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Wed, 7 May 2025 11:23:23 +0200 Subject: [PATCH 16/24] feat: remove communication from the substation editor and use oscd-publisher plugin (#1650) * feat: use openenergytools publisher plugin * feat: add scoped custom elements polyfill * feat: add oscd-publisher as submodule * fix: remove space * feat: use openscd publisher * feat: enable submodule checkout in GitHub workflows * feat: remove communication buttons and update tests * feat: update docs * fix: unit test * feat: remove publisher plugin --- .github/workflows/build-and-deploy.yml | 2 + .github/workflows/pr-preview.yml | 3 +- .github/workflows/release-please.yml | 2 + .github/workflows/test-and-build.yml | 3 +- .gitmodules | 4 + docs/plug-ins.md | 6 +- packages/distribution/index.html | 2 + packages/distribution/snowpack.config.mjs | 1 + .../scoped-custom-elements-polyfill.js | 42 ++ packages/external-plugins/oscd-publisher | 1 + packages/openscd/src/plugins.ts | 2 +- packages/plugins/src/editors/Publisher.ts | 101 ----- .../src/editors/publisher/data-set-editor.ts | 139 ------ .../publisher/data-set-element-editor.ts | 131 ------ .../src/editors/publisher/foundation.ts | 90 ---- .../editors/publisher/gse-control-editor.ts | 188 -------- .../publisher/gse-control-element-editor.ts | 233 ---------- .../publisher/report-control-editor.ts | 193 --------- .../report-control-element-editor.ts | 250 ----------- .../publisher/sampled-value-control-editor.ts | 193 --------- .../sampled-value-control-element-editor.ts | 279 ------------ .../src/editors/substation/ied-editor.ts | 23 - .../src/editors/substation/zeroline-pane.ts | 62 --- .../ied-editor-wizarding-integration.test.ts | 39 +- .../editors/substation/zeroline-pane.test.ts | 47 +- .../test/unit/editors/Publisher.test.ts | 48 --- .../data-set-editor.test.snap.js | 302 ------------- .../data-set-element-editor.test.snap.js | 108 ----- .../gse-control-editor.test.snap.js | 266 ------------ .../gse-control-element-editor.test.snap.js | 176 -------- .../report-control-editor.test.snap.js | 232 ---------- ...report-control-element-editor.test.snap.js | 190 --------- .../sampled-value-control-editor.test.snap.js | 198 --------- ...-value-control-element-editor.test.snap.js | 401 ------------------ .../editors/publisher/data-set-editor.test.ts | 96 ----- .../publisher/data-set-element-editor.test.ts | 45 -- .../unit/editors/publisher/foundation.test.ts | 11 - .../publisher/gse-control-editor.test.ts | 99 ----- .../gse-control-element-editor.test.ts | 30 -- .../publisher/report-control-editor.test.ts | 96 ----- .../report-control-element-editor.test.ts | 30 -- .../sampled-value-control-editor.test.ts | 98 ----- ...mpled-value-control-element-editor.test.ts | 49 --- .../__snapshots__/ied-editor.test.snap.js | 24 -- .../__snapshots__/zeroline-pane.test.snap.js | 38 -- .../editors/substation/ied-editor.test.ts | 41 +- .../test/unit/wizards/clientln.test.ts | 51 +-- .../plugins/test/unit/wizards/commmap.test.ts | 40 +- .../unit/wizards/controlwithiedname.test.ts | 175 -------- 49 files changed, 72 insertions(+), 4808 deletions(-) create mode 100644 .gitmodules create mode 100644 packages/distribution/src/polyfill/scoped-custom-elements-polyfill.js create mode 160000 packages/external-plugins/oscd-publisher delete mode 100644 packages/plugins/src/editors/Publisher.ts delete mode 100644 packages/plugins/src/editors/publisher/data-set-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/data-set-element-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/foundation.ts delete mode 100644 packages/plugins/src/editors/publisher/gse-control-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/gse-control-element-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/report-control-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/report-control-element-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/sampled-value-control-editor.ts delete mode 100644 packages/plugins/src/editors/publisher/sampled-value-control-element-editor.ts delete mode 100644 packages/plugins/test/unit/editors/Publisher.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/data-set-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/data-set-element-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/gse-control-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/gse-control-element-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/report-control-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/report-control-element-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/sampled-value-control-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/__snapshots__/sampled-value-control-element-editor.test.snap.js delete mode 100644 packages/plugins/test/unit/editors/publisher/data-set-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/data-set-element-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/foundation.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/gse-control-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/gse-control-element-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/report-control-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/report-control-element-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/sampled-value-control-editor.test.ts delete mode 100644 packages/plugins/test/unit/editors/publisher/sampled-value-control-element-editor.test.ts delete mode 100644 packages/plugins/test/unit/wizards/controlwithiedname.test.ts diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 793c242aca..c8bccfa815 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -12,6 +12,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2.3.1 + with: + submodules: "true" - name: Use Node.js 18.x uses: actions/setup-node@v1 diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index 2d1e275f25..5c1dd23ff7 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -21,7 +21,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - + with: + submodules: "true" - name: Install and Build OpenSCD if: github.event.action != 'closed' # You might want to skip the build if the PR has been closed run: | diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 5e058cda0e..6248a8d4bb 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -20,6 +20,8 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} # The logic below handles the npm publication: - uses: actions/checkout@v4 + with: + submodules: "true" if: ${{ steps.release.outputs.release_created }} - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/test-and-build.yml b/.github/workflows/test-and-build.yml index 3f107044f3..6a75493bd2 100644 --- a/.github/workflows/test-and-build.yml +++ b/.github/workflows/test-and-build.yml @@ -7,7 +7,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2.3.1 - + with: + submodules: "true" - name: Use Node.js 18.x uses: actions/setup-node@v1 with: diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..0c3e7bdfaf --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "packages/external-plugins/oscd-publisher"] + path = packages/external-plugins/oscd-publisher + url = https://github.com/openscd/oscd-publisher + branch = deploy diff --git a/docs/plug-ins.md b/docs/plug-ins.md index 5906e748f8..5294e4539f 100644 --- a/docs/plug-ins.md +++ b/docs/plug-ins.md @@ -119,10 +119,10 @@ implemented in these plugins. ### Publisher -> ✅ Official | Editor | by [OpenSCD](https://github.com/openscd) | [Repository](https://github.com/openscd/open-scd/) -> +> ✅ Official | Editor | by [OpenSCD](https://github.com/openscd) | [Repository](https://github.com/openscd/oscd-publisher/) +> > ``` -> https://openscd.github.io/plugins/src/editors/Publisher.js +> https://openscd.github.io/external-plugins/oscd-publisher/oscd-publisher.js > ``` ### Cleanup diff --git a/packages/distribution/index.html b/packages/distribution/index.html index 9d7b82c048..7a8c3db632 100644 --- a/packages/distribution/index.html +++ b/packages/distribution/index.html @@ -42,6 +42,8 @@ + +