diff --git a/.github/actions/build-alpha-release-notes/action.yml b/.github/actions/build-alpha-release-notes/action.yml index 6c664f482..a61a3cc28 100644 --- a/.github/actions/build-alpha-release-notes/action.yml +++ b/.github/actions/build-alpha-release-notes/action.yml @@ -27,12 +27,12 @@ runs: git log "${{ inputs.latest-tag }}..HEAD" \ --oneline \ --no-merges | - grep -v -E 'github-actions\[bot\]|dependabot\[bot\]|test|Bump' | + grep -v -E 'github-actions\[bot\]|dependabot\[bot\]|test|Bump|chore' || true | sed 's/^[a-f0-9]\{7,40\} //' | # remove SHA prefix awk '!seen[$0]++' | sed 's/^/- /' } > docs/release.md - - name: Upload UI artifact + - name: Upload release notes uses: actions/upload-artifact@v4 with: name: release-notes diff --git a/.github/actions/publish-website/action.yml b/.github/actions/publish-website/action.yml index 7c5c9c6a4..baf650b94 100644 --- a/.github/actions/publish-website/action.yml +++ b/.github/actions/publish-website/action.yml @@ -21,7 +21,7 @@ runs: steps: - uses: actions/setup-node@v4 with: - node-version: 23.11.1 + node-version: 24 registry-url: 'https://registry.npmjs.org' - id: release uses: pozetroninc/github-action-get-latest-release@master diff --git a/.github/actions/run-frontend-tests/action.yml b/.github/actions/run-frontend-tests/action.yml index 0adddeb5c..5c8f568e2 100644 --- a/.github/actions/run-frontend-tests/action.yml +++ b/.github/actions/run-frontend-tests/action.yml @@ -27,7 +27,7 @@ runs: shell: bash - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24 - name: Install and Build working-directory: ./webui run: | diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f02406b48..f5becbdb4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: - name: Setup node uses: actions/setup-node@v4 with: - node-version: 23 + node-version: 24 - name: build webui working-directory: ./webui run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9b023cef8..3a424fb64 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,114 @@ permissions: contents: write jobs: + build-dashboard: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-go@v5 + with: + go-version: 1.25.5 + - uses: ./.github/actions/build-release-notes + - uses: actions/setup-node@v4 + with: + node-version: 24 + registry-url: 'https://registry.npmjs.org' + - run: npm install + working-directory: ./webui + - name: Install taskfile + run: sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin + - name: Build + run: task build-vue-app + - name: Upload UI artifact + uses: actions/upload-artifact@v4 + with: + name: dashboard + path: webui/dist + + release-unix: + needs: build-dashboard + runs-on: ubuntu-latest + env: + DOCKER_CLI_EXPERIMENTAL: "enabled" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Download dashboard + uses: actions/download-artifact@v4 + with: + name: dashboard + path: webui/dist + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Docker Login + uses: docker/login-action@v1 + with: + username: marle3003 + password: ${{ secrets.DOCKER_PASSWORD }} + - uses: actions/setup-go@v5 + with: + go-version: 1.25.5 + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} + + release-windows: + needs: build-dashboard + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Download dashboard + uses: actions/download-artifact@v4 + with: + name: dashboard + path: webui/dist + - uses: actions/setup-go@v5 + with: + go-version: 1.25.5 + - name: Install goversioninfo + run: go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@v1.4.0 + - name: Generate Windows metadata (.syso) + working-directory: ./cmd/mokapi + shell: pwsh + run: | + $versionParts = ($env:GITHUB_REF -replace '.*/v', '').Split('.') + '{}' | Out-File versioninfo.json -NoNewline ascii + goversioninfo -64 ` + -platform-specific='true' ` + -charset="1200" ` + -company="Mokapi OpenSource" ` + -copyright="© Marcel Lehmann. Licensed under MIT." ` + -description="Your API Mocking Tool for Agile Development, using Go and JavaScript" ` + -icon="../../icon.ico" ` + -internal-name="mokapi" ` + -original-name="mokapi.exe" ` + -product-name="mokapi" ` + -translation="0x0409" ` + -ver-major="$($versionParts[0])" ` + -ver-minor="$($versionParts[1])" ` + -ver-patch="$($versionParts[2])" ` + -product-version="$($versionParts[0]).$($versionParts[1]).$($versionParts[2])" + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + version: latest + args: release -f .goreleaser.windows.yml --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CHOCOLATEY_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }} release-npm: runs-on: ubuntu-latest @@ -26,6 +134,6 @@ jobs: - name: Install taskfile run: sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin - name: Publish - run: task publish-npm-package VERSION=${GITHUB_REF##*/v} + run: task publish-all VERSION=${GITHUB_REF##*/v} env: CGO_ENABLED: 0 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0c8b28c1d..a0d82570f 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ # vendor/ data/* dist/ -bin/* +**/bin/ obj/ Debug/ diff --git a/Taskfile.yml b/Taskfile.yml index c27c59567..57884c31e 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -3,30 +3,6 @@ version: '3' tasks: - default: - deps: [build-vue-app] - cmds: - - task: build-windows - build-windows: - deps: [build-vue-app] - cmds: - - go build -o mokapi-windows-amd64.exe -ldflags="-w -s -X 'mokapi/version.BuildVersion=1.0'" ./cmd/mokapi - env: - GOOS: windows - GOARCH: amd64 - build-linux: - deps: [build-vue-app] - cmds: - - go build -o mokapi-linux-amd64 -ldflags="-X 'mokapi/version.BuildVersion=1.0'" ./cmd/mokapi - env: - GOOS: linux - GOARCH: amd64 - build-macos: - cmds: - - go build -o mokapi-darwin-arm64 -ldflags="-X 'mokapi/version.BuildVersion=1.0'" ./cmd/mokapi - env: - GOOS: darwin - GOARCH: arm64 build-vue-app: deps: [ensure-dist-folder] dir: webui @@ -36,36 +12,96 @@ tasks: - go run ../cmd/internal/gen-cli-docs/main.go --output-dir ./webui/src/assets/docs/configuration/static - npm version {{.VERSION}} - npm run build-dashboard - build-npm-package: - deps: [build-vue-app] + publish-all: + deps: [ build-vue-app ] cmds: - - task npm-build-windows VERSION={{.VERSION}} - - task npm-build-linux VERSION={{.VERSION}} - - task npm-build-macos VERSION={{.VERSION}} - publish-npm-package: - deps: [build-npm-package] - dir: npm + - task publish-platform-dependent VERSION={{.VERSION}} + - task publish-mokapi VERSION={{.VERSION}} + publish-platform-dependent: + deps: + - publish-mokapi-windows-x64 + - publish-mokapi-windows-arm64 + - publish-mokapi-linux-x64 + - publish-mokapi-linux-arm64 + - publish-mokapi-macos-x64 + - publish-mokapi-macos-arm64 + publish-mokapi: + dir: npm/go-mokapi cmds: - npm version {{.VERSION}} - npm publish --provenance - npm-build-windows: + publish-mokapi-windows-x64: + deps: [ build-mokapi-windows-x64 ] + dir: npm/@go-mokapi/win32-x64 + cmds: + - npm version {{.VERSION}} + - npm publish --provenance --access public + build-mokapi-windows-x64: cmds: - - go build -o ./npm/dist/mokapi-windows-amd64/mokapi.exe -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi + - go build -o ./npm/@go-mokapi/win32-x64/bin/mokapi.exe -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi env: GOOS: windows GOARCH: amd64 - npm-build-linux: + publish-mokapi-windows-arm64: + deps: [ build-mokapi-windows-arm64 ] + dir: npm/@go-mokapi/win32-arm64 cmds: - - go build -o ./npm/dist/mokapi-linux-amd64/mokapi -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi + - npm version {{.VERSION}} + - npm publish --provenance --access public + build-mokapi-windows-arm64: + cmds: + - go build -o ./npm/@go-mokapi/win32-arm64/bin/mokapi.exe -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi + env: + GOOS: windows + GOARCH: arm64 + publish-mokapi-linux-x64: + deps: [ build-mokapi-linux-x64 ] + dir: npm/@go-mokapi/linux-x64 + cmds: + - npm version {{.VERSION}} + - npm publish --provenance --access public + build-mokapi-linux-x64: + cmds: + - go build -o ./npm/@go-mokapi/linux-x64/bin/mokapi -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi env: GOOS: linux GOARCH: amd64 - npm-build-macos: + publish-mokapi-linux-arm64: + deps: [ build-mokapi-linux-arm64 ] + dir: npm/@go-mokapi/linux-arm64 + cmds: + - npm version {{.VERSION}} + - npm publish --provenance --access public + build-mokapi-linux-arm64: + cmds: + - go build -o ./npm/@go-mokapi/linux-arm64/bin/mokapi -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi + env: + GOOS: linux + GOARCH: arm64 + publish-mokapi-macos-arm64: + deps: [ build-mokapi-macos-arm64 ] + dir: npm/@go-mokapi/darwin-arm64 + cmds: + - npm version {{.VERSION}} + - npm publish --provenance --access public + build-mokapi-macos-arm64: cmds: - - go build -o ./npm/dist/mokapi-darwin-arm64/mokapi -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi + - go build -o ./npm/@go-mokapi/darwin-arm64/bin/mokapi -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi env: GOOS: darwin GOARCH: arm64 + publish-mokapi-macos-x64: + deps: [ build-mokapi-macos-x64 ] + dir: npm/@go-mokapi/darwin-x64 + cmds: + - npm version {{.VERSION}} + - npm publish --provenance --access public + build-mokapi-macos-x64: + cmds: + - go build -o ./npm/@go-mokapi/darwin-x64/bin/mokapi -ldflags="-X mokapi/version.BuildVersion={{.VERSION}}" ./cmd/mokapi + env: + GOOS: darwin + GOARCH: amd64 ensure-dist-folder: cmds: - mkdir -p webui/dist diff --git a/docs/resources/blogs/end-to-end-testing-mocked-apis.md b/docs/resources/blogs/end-to-end-testing-mocked-apis.md index 4aefbf375..13a654072 100644 --- a/docs/resources/blogs/end-to-end-testing-mocked-apis.md +++ b/docs/resources/blogs/end-to-end-testing-mocked-apis.md @@ -83,7 +83,7 @@ jobs: - name: Set Up Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24 - name: Install Dependencies run: npm install diff --git a/docs/resources/tutorials/running-mokapi-github-action.md b/docs/resources/tutorials/running-mokapi-github-action.md index 7fb8264c8..e43cd1e67 100644 --- a/docs/resources/tutorials/running-mokapi-github-action.md +++ b/docs/resources/tutorials/running-mokapi-github-action.md @@ -170,7 +170,7 @@ jobs: - name: Set Up Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24 - name: Install Dependencies run: npm install diff --git a/npm/@go-mokapi/darwin-arm64/README.md b/npm/@go-mokapi/darwin-arm64/README.md new file mode 100644 index 000000000..84dfc513c --- /dev/null +++ b/npm/@go-mokapi/darwin-arm64/README.md @@ -0,0 +1,4 @@ +# mokapi + +This package contains the **macOS ARM 64-bit binary** for **mokapi**, an API mocking tool. +See https://mokapi.io for details \ No newline at end of file diff --git a/npm/@go-mokapi/darwin-arm64/index.js b/npm/@go-mokapi/darwin-arm64/index.js new file mode 100644 index 000000000..53613b7f2 --- /dev/null +++ b/npm/@go-mokapi/darwin-arm64/index.js @@ -0,0 +1,2 @@ +const path = require('path'); +module.exports = path.join(__dirname, 'bin/mokapi'); \ No newline at end of file diff --git a/npm/@go-mokapi/darwin-arm64/package.json b/npm/@go-mokapi/darwin-arm64/package.json new file mode 100644 index 000000000..da7515725 --- /dev/null +++ b/npm/@go-mokapi/darwin-arm64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@go-mokapi/darwin-arm64", + "version": "0.36.0", + "description": "The macOS ARM 64-bit binary for mokapi, an API mocking tool", + "homepage": "https://mokapi.io", + "repository": { + "type": "git", + "url": "git+https://github.com/marle3003/mokapi.git" + }, + "author": "Marcel Lehmann", + "license": "MIT", + "preferUnplugged": true, + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ] +} diff --git a/npm/@go-mokapi/darwin-x64/README.md b/npm/@go-mokapi/darwin-x64/README.md new file mode 100644 index 000000000..56c7565ce --- /dev/null +++ b/npm/@go-mokapi/darwin-x64/README.md @@ -0,0 +1,4 @@ +# mokapi + +This package contains the **macOS 64-bit binary** for **mokapi**, an API mocking tool. +See https://mokapi.io for details \ No newline at end of file diff --git a/npm/@go-mokapi/darwin-x64/index.js b/npm/@go-mokapi/darwin-x64/index.js new file mode 100644 index 000000000..53613b7f2 --- /dev/null +++ b/npm/@go-mokapi/darwin-x64/index.js @@ -0,0 +1,2 @@ +const path = require('path'); +module.exports = path.join(__dirname, 'bin/mokapi'); \ No newline at end of file diff --git a/npm/@go-mokapi/darwin-x64/package.json b/npm/@go-mokapi/darwin-x64/package.json new file mode 100644 index 000000000..5d28a7b5e --- /dev/null +++ b/npm/@go-mokapi/darwin-x64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@go-mokapi/darwin-x64", + "version": "0.36.0", + "description": "The macOS 64-bit binary for mokapi, an API mocking tool", + "homepage": "https://mokapi.io", + "repository": { + "type": "git", + "url": "git+https://github.com/marle3003/mokapi.git" + }, + "author": "Marcel Lehmann", + "license": "MIT", + "preferUnplugged": true, + "os": [ + "darwin" + ], + "cpu": [ + "x64" + ] +} diff --git a/npm/@go-mokapi/linux-arm64/README.md b/npm/@go-mokapi/linux-arm64/README.md new file mode 100644 index 000000000..73b6e7104 --- /dev/null +++ b/npm/@go-mokapi/linux-arm64/README.md @@ -0,0 +1,4 @@ +# mokapi + +This package contains the **Linux ARM 64-bit binary** for **mokapi**, an API mocking tool. +See https://mokapi.io for details \ No newline at end of file diff --git a/npm/@go-mokapi/linux-arm64/index.js b/npm/@go-mokapi/linux-arm64/index.js new file mode 100644 index 000000000..53613b7f2 --- /dev/null +++ b/npm/@go-mokapi/linux-arm64/index.js @@ -0,0 +1,2 @@ +const path = require('path'); +module.exports = path.join(__dirname, 'bin/mokapi'); \ No newline at end of file diff --git a/npm/@go-mokapi/linux-arm64/package.json b/npm/@go-mokapi/linux-arm64/package.json new file mode 100644 index 000000000..9c1e99073 --- /dev/null +++ b/npm/@go-mokapi/linux-arm64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@go-mokapi/linux-arm64", + "version": "0.36.0", + "description": "The Linux ARM 64-bit binary for mokapi, an API mocking tool", + "homepage": "https://mokapi.io", + "repository": { + "type": "git", + "url": "git+https://github.com/marle3003/mokapi.git" + }, + "author": "Marcel Lehmann", + "license": "MIT", + "preferUnplugged": true, + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ] +} diff --git a/npm/@go-mokapi/linux-x64/README.md b/npm/@go-mokapi/linux-x64/README.md new file mode 100644 index 000000000..907697608 --- /dev/null +++ b/npm/@go-mokapi/linux-x64/README.md @@ -0,0 +1,4 @@ +# mokapi + +This package contains the **Linux 64-bit binary** for **mokapi**, an API mocking tool. +See https://mokapi.io for details \ No newline at end of file diff --git a/npm/@go-mokapi/linux-x64/index.js b/npm/@go-mokapi/linux-x64/index.js new file mode 100644 index 000000000..53613b7f2 --- /dev/null +++ b/npm/@go-mokapi/linux-x64/index.js @@ -0,0 +1,2 @@ +const path = require('path'); +module.exports = path.join(__dirname, 'bin/mokapi'); \ No newline at end of file diff --git a/npm/@go-mokapi/linux-x64/package.json b/npm/@go-mokapi/linux-x64/package.json new file mode 100644 index 000000000..b6e09d08c --- /dev/null +++ b/npm/@go-mokapi/linux-x64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@go-mokapi/linux-x64", + "version": "0.36.0", + "description": "The Linux 64-bit binary for mokapi, an API mocking tool", + "homepage": "https://mokapi.io", + "repository": { + "type": "git", + "url": "git+https://github.com/marle3003/mokapi.git" + }, + "author": "Marcel Lehmann", + "license": "MIT", + "preferUnplugged": true, + "os": [ + "linux" + ], + "cpu": [ + "x64" + ] +} diff --git a/npm/@go-mokapi/win32-arm64/README.md b/npm/@go-mokapi/win32-arm64/README.md new file mode 100644 index 000000000..0fa228997 --- /dev/null +++ b/npm/@go-mokapi/win32-arm64/README.md @@ -0,0 +1,4 @@ +# mokapi + +This package contains the **Windows ARM 64-bit binary** for **mokapi**, an API mocking tool. +See https://mokapi.io for details \ No newline at end of file diff --git a/npm/@go-mokapi/win32-arm64/index.js b/npm/@go-mokapi/win32-arm64/index.js new file mode 100644 index 000000000..53613b7f2 --- /dev/null +++ b/npm/@go-mokapi/win32-arm64/index.js @@ -0,0 +1,2 @@ +const path = require('path'); +module.exports = path.join(__dirname, 'bin/mokapi'); \ No newline at end of file diff --git a/npm/@go-mokapi/win32-arm64/package.json b/npm/@go-mokapi/win32-arm64/package.json new file mode 100644 index 000000000..a1ab5acad --- /dev/null +++ b/npm/@go-mokapi/win32-arm64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@go-mokapi/win32-arm64", + "version": "0.36.0", + "description": "The Windows ARM 64-bit binary for mokapi, an API mocking tool", + "homepage": "https://mokapi.io", + "repository": { + "type": "git", + "url": "git+https://github.com/marle3003/mokapi.git" + }, + "author": "Marcel Lehmann", + "license": "MIT", + "preferUnplugged": true, + "os": [ + "win32" + ], + "cpu": [ + "arm64" + ] +} diff --git a/npm/@go-mokapi/win32-x64/README.md b/npm/@go-mokapi/win32-x64/README.md new file mode 100644 index 000000000..8f3a7590a --- /dev/null +++ b/npm/@go-mokapi/win32-x64/README.md @@ -0,0 +1,4 @@ +# mokapi + +This package contains the **Windows 64-bit binary** for **mokapi**, an API mocking tool. +See https://mokapi.io for details \ No newline at end of file diff --git a/npm/@go-mokapi/win32-x64/index.js b/npm/@go-mokapi/win32-x64/index.js new file mode 100644 index 000000000..53613b7f2 --- /dev/null +++ b/npm/@go-mokapi/win32-x64/index.js @@ -0,0 +1,2 @@ +const path = require('path'); +module.exports = path.join(__dirname, 'bin/mokapi'); \ No newline at end of file diff --git a/npm/@go-mokapi/win32-x64/package.json b/npm/@go-mokapi/win32-x64/package.json new file mode 100644 index 000000000..4469e17fb --- /dev/null +++ b/npm/@go-mokapi/win32-x64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@go-mokapi/win32-x64", + "version": "0.36.0", + "description": "The Windows 64-bit binary for mokapi, an API mocking tool", + "homepage": "https://mokapi.io", + "repository": { + "type": "git", + "url": "git+https://github.com/marle3003/mokapi.git" + }, + "author": "Marcel Lehmann", + "license": "MIT", + "preferUnplugged": true, + "os": [ + "win32" + ], + "cpu": [ + "x64" + ] +} diff --git a/npm/README.md b/npm/README.md deleted file mode 100644 index 20c41aea7..000000000 --- a/npm/README.md +++ /dev/null @@ -1,124 +0,0 @@ -
-
-
-
-
-
-# 🧪 Learn by Example
-
-Explore tutorials that walk you through mocking different protocols and scenarios:
-
-- 🌍 [Get started with REST API](https://mokapi.io/resources/tutorials/get-started-with-rest-api)\
- This tutorial will show you how to mock a REST API using an OpenAPI specification.
-
-- ⚡ [Mocking Kafka with AsyncAPI](https://mokapi.io/resources/tutorials/get-started-with-kafka)\
- mocking a Kafka topic using Mokapi and verifying that a producer generates valid messages.
-
-- 👨💻 [Mocking LDAP Authentication](https://mokapi.io/resources/tutorials/mock-ldap-authentication-in-node)\
- Simulate LDAP-based login flows, including group-based permissions.
-
-- 📧 [Mocking SMTP Mail Servers](https://mokapi.io/resources/tutorials/mock-smtp-server-send-mail-using-node)\
- Use Mokapi to simulate sending and receiving emails in Node.js apps.
-
-- 🖥️ [End-to-End Testing with Jest and GitHub Actions](https://mokapi.io/resources/tutorials/running-mokapi-in-a-ci-cd-pipeline)\
- Integrate Mokapi into your CI pipeline for full-stack E2E testing.
-
-> More examples are available on [mokapi.io/resources](https://mokapi.io/resources)
-
-# 📚 Documentation
-
-- [Get Started](https://mokapi.io/docs/welcome)
-- [HTTP](https://mokapi.io/docs/http/overview)
-- [Kafka](https://mokapi.io/docs/kafka/overview)
-- [LDAP](https://mokapi.io/docs/ldap/overview)
-- [SMTP](https://mokapi.io/docs/mail/overview)
-- [Javascript API](https://mokapi.io/docs/javascript-api/overview)
-- [Resources](https://mokapi.io/resources)
-
-# ☕ Support
-
-If you find Mokapi helpful, consider supporting the project:
-
-
-
-# 📄 License
-
-This project is licensed under the MIT License. See the [LICENSE](https://github.com/marle3003/mokapi/blob/main/LICENSE) file for details.
\ No newline at end of file
diff --git a/npm/bin/mokapi.js b/npm/bin/mokapi.js
deleted file mode 100644
index d505207b2..000000000
--- a/npm/bin/mokapi.js
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env node
-let spawn = require('child_process').spawn;
-let path = require('path');
-
-const ARCH_MAPPING = {
- "ia32": "386",
- "x64": "amd64",
- "arm64": "arm64"
-};
-
-// Mapping between Node's `process.platform` to Golang's
-const PLATFORM_MAPPING = {
- "darwin": "darwin",
- "linux": "linux",
- "win32": "windows",
-};
-
-let exe = `../dist/mokapi-${PLATFORM_MAPPING[process.platform]}-${ARCH_MAPPING[process.arch]}/mokapi`
-if (process.platform === 'win32') {
- exe += '.exe'
-}
-const exePath = path.resolve(__dirname, exe)
-const mokapi = spawn(exePath, process.argv.slice(2), {cwd: process.cwd()})
-
-mokapi.stdout.on('data', function(data) {
- console.log(data.toString())
-})
-
-mokapi.stderr.on('data', function(data) {
- console.log(data.toString())
-})
-
diff --git a/npm/go-mokapi/README.md b/npm/go-mokapi/README.md
new file mode 100644
index 000000000..c825dc9cc
--- /dev/null
+++ b/npm/go-mokapi/README.md
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+### Multiple Providers
+Load specs from local files, HTTP URLs, Git repositories, or NPM packages.
+
+## Common Use Cases
+
+### Frontend Development
+Mock backend APIs while building UIs. Test loading states, errors, and edge cases without waiting for real endpoints.
+
+### API Testing
+Simulate timeouts, 500 errors, rate limits, and malformed responses. Test how your application handles failures.
+
+### CI/CD Integration
+Run fast, reliable tests without external dependencies. No flaky tests due to network issues or unavailable services.
+
+### Contract Validation
+Validate that your requests and responses match your OpenAPI specification. Catch breaking changes early.
+
+# Example Tutorials
+
+Explore tutorials that walk you through mocking different protocols and scenarios:
+
+- [Get started with REST API](https://mokapi.io/resources/tutorials/get-started-with-rest-api)
+ Mock a REST API using OpenAPI specification
+
+- [Mock Kafka with AsyncAPI](https://mokapi.io/resources/tutorials/get-started-with-kafka)
+ Simulate Kafka topics and validate message producers
+
+- [Mock LDAP Authentication](https://mokapi.io/resources/tutorials/mock-ldap-authentication-in-node)\
+ Test authentication flows without a real LDAP server
+
+- [Mock SMTP Mail Servers](https://mokapi.io/resources/tutorials/mock-smtp-server-send-mail-using-node)\
+ Test email workflows without sending real messages
+
+- [CI/CD Integration with GitHub Actions](https://mokapi.io/resources/tutorials/running-mokapi-in-a-ci-cd-pipeline)\
+ Run Mokapi in automated test pipelines
+
+> More examples [mokapi.io/resources](https://mokapi.io/resources)
+
+## Documentation
+
+- [Getting Started Guide](https://mokapi.io/docs/welcome)
+- [HTTP/REST API Documentation](https://mokapi.io/docs/http/overview)
+- [Kafka Documentation](https://mokapi.io/docs/kafka/overview)
+- [LDAP Documentation](https://mokapi.io/docs/ldap/overview)
+- [SMTP/Mail Documentation](https://mokapi.io/docs/mail/overview)
+- [JavaScript API Reference](https://mokapi.io/docs/javascript-api/overview)
+- [Configuration Guide](https://mokapi.io/docs/configuration/overview)
+
+## Support the Project
+
+If Mokapi helps your team ship faster, consider supporting development:
+
+
+
+## License
+
+MIT License - see [LICENSE](https://github.com/marle3003/mokapi/blob/main/LICENSE) for details.
+
+## Links
+
+- Website: [mokapi.io](https://mokapi.io)
+- GitHub: [github.com/marle3003/mokapi](https://github.com/marle3003/mokapi)
+- NPM Package: [npmjs.com/package/go-mokapi](https://npmjs.com/package/go-mokapi)
+- Documentation: [mokapi.io/docs](https://mokapi.io/docs)
+- Tutorials: [mokapi.io/resources/tutorials](https://mokapi.io/resources/tutorials)
+- Blog: [mokapi.io/resources/blogs](https://mokapi.io/resources/blogs)
\ No newline at end of file
diff --git a/npm/go-mokapi/bin/mokapi.js b/npm/go-mokapi/bin/mokapi.js
new file mode 100755
index 000000000..3aa9b0960
--- /dev/null
+++ b/npm/go-mokapi/bin/mokapi.js
@@ -0,0 +1,59 @@
+#!/usr/bin/env node
+const { spawn } = require('child_process');
+const fs = require('fs');
+
+// Mapping Node platform + arch to scoped platform packages
+function resolveBinary() {
+ const platform = process.platform;
+ const arch = process.arch;
+
+ let pkgName;
+
+ switch (platform) {
+ case 'linux':
+ pkgName = arch === 'arm64'
+ ? '@go-mokapi/linux-arm64'
+ : '@go-mokapi/linux-x64';
+ break;
+ case 'darwin':
+ pkgName = arch === 'arm64'
+ ? '@go-mokapi/darwin-arm64'
+ : '@go-mokapi/darwin-x64';
+ break;
+ case 'win32':
+ pkgName = arch === 'arm64'
+ ? '@go-mokapi/win32-arm64'
+ : '@go-mokapi/win32-x64';
+ break;
+ default:
+ console.error(`Unsupported platform/arch: ${platform}/${arch}`);
+ process.exit(1);
+ }
+
+ try {
+ // Each platform package exports the full path to the binary
+ const binaryPath = require(pkgName);
+ if (!fs.existsSync(binaryPath)) {
+ console.error(`Binary not found at ${binaryPath}`);
+ process.exit(1);
+ }
+ return binaryPath;
+ } catch (err) {
+ console.error(`Platform package ${pkgName} is not installed.`);
+ console.error(`Run 'npm install' to install the correct platform binary.`);
+ process.exit(1);
+ }
+}
+
+// Get the binary path for current platform
+const exe = resolveBinary();
+
+// Spawn Mokapi process with arguments from CLI
+const mokapi = spawn(exe, process.argv.slice(2), { cwd: process.cwd() });
+
+// Forward stdout/stderr
+mokapi.stdout.on('data', data => process.stdout.write(data));
+mokapi.stderr.on('data', data => process.stderr.write(data));
+
+// Exit with the same code as Mokapi
+mokapi.on('close', code => process.exit(code));
\ No newline at end of file
diff --git a/npm/index.d.ts b/npm/go-mokapi/index.d.ts
similarity index 100%
rename from npm/index.d.ts
rename to npm/go-mokapi/index.d.ts
diff --git a/npm/package.json b/npm/go-mokapi/package.json
similarity index 51%
rename from npm/package.json
rename to npm/go-mokapi/package.json
index f8c9bf0ad..2bb93f6ac 100644
--- a/npm/package.json
+++ b/npm/go-mokapi/package.json
@@ -1,6 +1,6 @@
{
"name": "go-mokapi",
- "version": "0.6.0",
+ "version": "0.0.0",
"description": "Easy and flexible API mocking",
"homepage": "https://mokapi.io",
"repository": {
@@ -10,23 +10,25 @@
"bin": {
"mokapi": "bin/mokapi.js"
},
- "scripts": {
- "mokapi": "mokapi"
+ "preferUnplugged": true,
+ "optionalDependencies": {
+ "@go-mokapi/darwin-arm64": "*",
+ "@go-mokapi/darwin-x64": "*",
+ "@go-mokapi/linux-arm64": "*",
+ "@go-mokapi/linux-x64": "*",
+ "@go-mokapi/win32-arm64": "*",
+ "@go-mokapi/win32-x64": "*"
},
"keywords": [
"mock",
"api",
+ "http",
"kafka",
- "rest",
- "http"
+ "ldap",
+ "smtp",
+ "imap"
],
"author": "Marcel Lehmann",
"license": "MIT",
- "types": "index.d.ts",
- "files": [
- "bin",
- "dist",
- "types",
- "index.d.ts"
- ]
+ "types": "index.d.ts"
}
diff --git a/npm/types/encoding.d.ts b/npm/go-mokapi/types/encoding.d.ts
similarity index 100%
rename from npm/types/encoding.d.ts
rename to npm/go-mokapi/types/encoding.d.ts
diff --git a/npm/types/faker.d.ts b/npm/go-mokapi/types/faker.d.ts
similarity index 100%
rename from npm/types/faker.d.ts
rename to npm/go-mokapi/types/faker.d.ts
diff --git a/npm/types/file.d.ts b/npm/go-mokapi/types/file.d.ts
similarity index 100%
rename from npm/types/file.d.ts
rename to npm/go-mokapi/types/file.d.ts
diff --git a/npm/types/global.d.ts b/npm/go-mokapi/types/global.d.ts
similarity index 100%
rename from npm/types/global.d.ts
rename to npm/go-mokapi/types/global.d.ts
diff --git a/npm/types/http.d.ts b/npm/go-mokapi/types/http.d.ts
similarity index 100%
rename from npm/types/http.d.ts
rename to npm/go-mokapi/types/http.d.ts
diff --git a/npm/types/index.d.ts b/npm/go-mokapi/types/index.d.ts
similarity index 100%
rename from npm/types/index.d.ts
rename to npm/go-mokapi/types/index.d.ts
diff --git a/npm/types/kafka.d.ts b/npm/go-mokapi/types/kafka.d.ts
similarity index 100%
rename from npm/types/kafka.d.ts
rename to npm/go-mokapi/types/kafka.d.ts
diff --git a/npm/types/mail.d.ts b/npm/go-mokapi/types/mail.d.ts
similarity index 100%
rename from npm/types/mail.d.ts
rename to npm/go-mokapi/types/mail.d.ts
diff --git a/npm/types/mustache.d.ts b/npm/go-mokapi/types/mustache.d.ts
similarity index 100%
rename from npm/types/mustache.d.ts
rename to npm/go-mokapi/types/mustache.d.ts
diff --git a/npm/types/yaml.d.ts b/npm/go-mokapi/types/yaml.d.ts
similarity index 100%
rename from npm/types/yaml.d.ts
rename to npm/go-mokapi/types/yaml.d.ts
diff --git a/server/server_test.go b/server/server_test.go
index db8981168..d4b289f2f 100644
--- a/server/server_test.go
+++ b/server/server_test.go
@@ -2,9 +2,6 @@ package server_test
import (
"context"
- log "github.com/sirupsen/logrus"
- "github.com/sirupsen/logrus/hooks/test"
- "github.com/stretchr/testify/require"
"mokapi/config/static"
"mokapi/engine"
"mokapi/runtime"
@@ -12,6 +9,10 @@ import (
"mokapi/server"
"testing"
"time"
+
+ log "github.com/sirupsen/logrus"
+ "github.com/sirupsen/logrus/hooks/test"
+ "github.com/stretchr/testify/require"
)
func TestServer(t *testing.T) {
@@ -29,16 +30,19 @@ func TestServer(t *testing.T) {
hook := test.NewGlobal()
log.SetLevel(log.DebugLevel)
s := server.NewServer(pool, app, watcher, kafka, http, mail, ldap, e)
+ stopped := make(chan bool)
go func() {
err := s.Start()
require.NoError(t, err)
+ close(stopped)
}()
time.Sleep(time.Second)
s.Close()
- time.Sleep(time.Second)
+ <-stopped
require.Len(t, hook.Entries, 1)
+ require.Equal(t, "stopping server", hook.Entries[0].Message)
}
diff --git a/webui/package-lock.json b/webui/package-lock.json
index 6624c3c5e..82c311558 100644
--- a/webui/package-lock.json
+++ b/webui/package-lock.json
@@ -48,7 +48,7 @@
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.7.0",
"@vue/tsconfig": "^0.8.1",
- "eslint": "^9.39.2",
+ "eslint": "^10.0.0",
"eslint-plugin-vue": "^10.8.0",
"npm-run-all": "^4.1.5",
"prettier": "^3.8.1",
@@ -592,153 +592,107 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
- "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.2.tgz",
+ "integrity": "sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.7",
+ "@eslint/object-schema": "^3.0.2",
"debug": "^4.3.1",
- "minimatch": "^3.1.2"
+ "minimatch": "^10.2.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/@eslint/config-array/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
+ "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/@eslint/config-array/node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^5.0.2"
},
"engines": {
- "node": "*"
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
- "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.2.tgz",
+ "integrity": "sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.17.0"
+ "@eslint/core": "^1.1.0"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/core": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
- "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
- "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.1",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@eslint/js": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
- "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
- "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz",
+ "integrity": "sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
- "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz",
+ "integrity": "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.17.0",
+ "@eslint/core": "^1.1.0",
"levn": "^0.4.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@humanfs/core": {
@@ -1314,6 +1268,13 @@
"@popperjs/core": "^2.9.2"
}
},
+ "node_modules/@types/esrecurse": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
+ "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -1955,9 +1916,9 @@
"license": "BSD-3-Clause"
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -1977,9 +1938,9 @@
}
},
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2000,22 +1961,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -2296,33 +2241,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
"node_modules/chokidar": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
@@ -2338,26 +2256,6 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -3313,33 +3211,30 @@
}
},
"node_modules/eslint": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
- "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.0.tgz",
+ "integrity": "sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.1",
- "@eslint/config-helpers": "^0.4.2",
- "@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.2",
- "@eslint/plugin-kit": "^0.4.1",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@eslint/config-array": "^0.23.0",
+ "@eslint/config-helpers": "^0.5.2",
+ "@eslint/core": "^1.1.0",
+ "@eslint/plugin-kit": "^0.6.0",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
"ajv": "^6.12.4",
- "chalk": "^4.0.0",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
+ "eslint-scope": "^9.1.0",
+ "eslint-visitor-keys": "^5.0.0",
+ "espree": "^11.1.0",
+ "esquery": "^1.7.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^8.0.0",
@@ -3349,8 +3244,7 @@
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
+ "minimatch": "^10.1.1",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3"
},
@@ -3358,7 +3252,7 @@
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://eslint.org/donate"
@@ -3452,17 +3346,19 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.1.tgz",
+ "integrity": "sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
+ "@types/esrecurse": "^4.3.1",
+ "@types/estree": "^1.0.8",
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -3481,69 +3377,84 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
"node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
+ "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^5.0.2"
},
"engines": {
- "node": "*"
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.1.1.tgz",
+ "integrity": "sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.15.0",
+ "acorn": "^8.16.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
+ "eslint-visitor-keys": "^5.0.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -3984,19 +3895,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/globalthis": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
@@ -4075,16 +3973,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -4224,23 +4112,6 @@
"node": ">= 4"
}
},
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -4915,13 +4786,6 @@
"integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==",
"license": "MIT"
},
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/magic-string": {
"version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
@@ -5682,19 +5546,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -6199,16 +6050,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/reusify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
@@ -6802,19 +6643,6 @@
"node": ">=4"
}
},
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/superjson": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz",
@@ -6827,19 +6655,6 @@
"node": ">=16"
}
},
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
diff --git a/webui/package.json b/webui/package.json
index 723f76c82..f9f03c813 100644
--- a/webui/package.json
+++ b/webui/package.json
@@ -57,7 +57,7 @@
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.7.0",
"@vue/tsconfig": "^0.8.1",
- "eslint": "^9.39.2",
+ "eslint": "^10.0.0",
"eslint-plugin-vue": "^10.8.0",
"npm-run-all": "^4.1.5",
"prettier": "^3.8.1",