diff --git a/README.md b/README.md
index 86e6055..ceacd8c 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,7 @@ A simple tool to automate version bumps, changelogs, and releases using [Convent
| [`@simple-release/config`](packages/config#readme) | A simple-release config loader. | [![NPM version][config-npm]][config-npm-url] | [![Dependencies status][config-deps]][config-deps-url] |
| [`@simple-release/npm`](packages/npm#readme) | A npm addon for simple-release. | [![NPM version][npm-npm]][npm-npm-url] | [![Dependencies status][npm-deps]][npm-deps-url] |
| [`@simple-release/pnpm`](packages/pnpm#readme) | A pnpm addon for simple-release. | [![NPM version][pnpm-npm]][pnpm-npm-url] | [![Dependencies status][pnpm-deps]][pnpm-deps-url] |
+| [`@simple-release/node-gha`](packages/node-gha#readme) | A Node.js GitHub Actions addon for simple-release. | [![NPM version][node-gha-npm]][node-gha-npm-url] | [![Dependencies status][node-gha-deps]][node-gha-deps-url] |
| [`@simple-release/github`](packages/github#readme) | A github release addon for simple-release. | [![NPM version][github-npm]][github-npm-url] | [![Dependencies status][github-deps]][github-deps-url] |
| [`@simple-release/github-action`](packages/github-action#readme) | A simple-release api for github action. | [![NPM version][github-action-npm]][github-action-npm-url] | [![Dependencies status][github-action-deps]][github-action-deps-url] |
| [`simple-github-release`](packages/simple-github-release#readme) | A simple tool to create GitHub releases. | [![NPM version][simple-github-release-npm]][simple-github-release-npm-url] | [![Dependencies status][simple-github-release-deps]][simple-github-release-deps-url] |
@@ -63,6 +64,14 @@ A simple tool to automate version bumps, changelogs, and releases using [Convent
[pnpm-deps]: https://img.shields.io/librariesio/release/npm/@simple-release/pnpm
[pnpm-deps-url]: https://libraries.io/npm/@simple-release%2Fpnpm
+
+
+[node-gha-npm]: https://img.shields.io/npm/v/@simple-release/node-gha.svg
+[node-gha-npm-url]: https://www.npmjs.com/package/@simple-release/node-gha
+
+[node-gha-deps]: https://img.shields.io/librariesio/release/npm/@simple-release/node-gha
+[node-gha-deps-url]: https://libraries.io/npm/@simple-release%2Fnode-gha
+
[github-npm]: https://img.shields.io/npm/v/@simple-release/github.svg
diff --git a/packages/github-action/src/releaser.ts b/packages/github-action/src/releaser.ts
index 9dd50ff..67ffaf6 100644
--- a/packages/github-action/src/releaser.ts
+++ b/packages/github-action/src/releaser.ts
@@ -140,8 +140,8 @@ export class ReleaserGithubAction
extends Releaser<
.maintenanceBranch()
.tag()
.push()
- .release()
.publish()
+ .release()
.run(check ? ifReleaseCommit : undefined)
}
diff --git a/packages/node-gha/README.md b/packages/node-gha/README.md
new file mode 100644
index 0000000..66314ce
--- /dev/null
+++ b/packages/node-gha/README.md
@@ -0,0 +1,118 @@
+# @simple-release/node-gha
+
+[![ESM-only package][package]][package-url]
+[![NPM version][npm]][npm-url]
+[![Node version][node]][node-url]
+[![Dependencies status][deps]][deps-url]
+[![Install size][size]][size-url]
+[![Build status][build]][build-url]
+[![Coverage status][coverage]][coverage-url]
+
+[package]: https://img.shields.io/badge/package-ESM--only-ffe536.svg
+[package-url]: https://nodejs.org/api/esm.html
+
+[npm]: https://img.shields.io/npm/v/@simple-release/node-gha.svg
+[npm-url]: https://www.npmjs.com/package/@simple-release/node-gha
+
+[node]: https://img.shields.io/node/v/@simple-release/node-gha.svg
+[node-url]: https://nodejs.org
+
+[deps]: https://img.shields.io/librariesio/release/npm/@simple-release/node-gha
+[deps-url]: https://libraries.io/npm/@simple-release%2Fnode-gha
+
+[size]: https://packagephobia.com/badge?p=@simple-release/node-gha
+[size-url]: https://packagephobia.com/result?p=@simple-release/node-gha
+
+[build]: https://img.shields.io/github/actions/workflow/status/TrigenSoftware/simple-release/tests.yml?branch=main
+[build-url]: https://github.com/TrigenSoftware/simple-release/actions
+
+[coverage]: https://coveralls.io/repos/github/TrigenSoftware/simple-release/badge.svg?branch=main
+[coverage-url]: https://coveralls.io/github/TrigenSoftware/simple-release?branch=main
+
+A Node.js GitHub Actions addon for simple-release.
+
+## Install
+
+```bash
+# pnpm
+pnpm add @simple-release/node-gha
+# yarn
+yarn add @simple-release/node-gha
+# npm
+npm i @simple-release/node-gha
+```
+
+## Usage
+
+```js
+import { Releaser } from '@simple-release/core'
+import { NodeGhaProject } from '@simple-release/node-gha'
+
+await new Releaser({
+ project: new NodeGhaProject()
+})
+ .publish({
+ build: 'pnpm install --prod',
+ files: [
+ 'node_modules',
+ 'dist'
+ ]
+ })
+ .run()
+```
+
+`NodeGhaProject` publishes a built Node.js GitHub Action state by creating or updating:
+
+- `latest` branch from the current release commit.
+- `v{major}` branch from the built `latest` state.
+- `v{version}` tag from the built `latest` state.
+
+If `build` is provided, the command runs on the `latest` branch. After the command completes, files from the publish option `files` are force-added and the release commit is amended before refs are pushed. If `files` is not provided, package.json `files` is used.
+
+## Options
+
+### NodeGhaProject
+
+#### `path`
+
+Path to the `package.json` manifest file. Defaults to `'package.json'`.
+
+#### `changelogFile`
+
+Path to the changelog file. Defaults to `'CHANGELOG.md'`.
+
+#### `compose`
+
+Function to compose the main manifest with secondaries. It can be needed if you have some secondary manifests where version also should be updated. Optional.
+
+### publish
+
+Publish options for `NodeGhaProject`.
+
+#### `skip`
+
+If true, skip publishing. Optional.
+
+#### `latestBranch`
+
+Branch that points to the latest built GitHub Action state. Defaults to `'latest'`.
+
+#### `majorBranchPrefix`
+
+Prefix for the major branch. Defaults to `'v'`.
+
+#### `tagPrefix`
+
+Prefix for version tags. Defaults to `'v'`.
+
+#### `build`
+
+Build or install command to run before publishing refs. Optional.
+
+#### `files`
+
+Files to stage after `build`. Defaults to package.json `files`.
+
+#### `env`
+
+Environment variables to set before running build commands. Defaults to `process.env`.
diff --git a/packages/node-gha/oxlint.config.ts b/packages/node-gha/oxlint.config.ts
new file mode 100644
index 0000000..4eba28c
--- /dev/null
+++ b/packages/node-gha/oxlint.config.ts
@@ -0,0 +1,12 @@
+import { defineConfig } from '@trigen/oxlint'
+import testConfig from '@trigen/oxlint-config/test'
+import tsTypeCheckedConfig from '@trigen/oxlint-config/typescript-type-checked'
+import rootConfig from '../../oxlint.config.ts'
+
+export default defineConfig({
+ extends: [
+ rootConfig,
+ tsTypeCheckedConfig,
+ testConfig
+ ]
+})
diff --git a/packages/node-gha/package.json b/packages/node-gha/package.json
new file mode 100644
index 0000000..f08b2c6
--- /dev/null
+++ b/packages/node-gha/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "@simple-release/node-gha",
+ "type": "module",
+ "version": "2.3.0",
+ "description": "A Node.js GitHub Actions addon for simple-release.",
+ "author": {
+ "name": "Dan Onoshko",
+ "email": "danon0404@gmail.com",
+ "url": "https://github.com/dangreen"
+ },
+ "license": "MIT",
+ "homepage": "https://github.com/TrigenSoftware/simple-release/tree/main/packages/node-gha#readme",
+ "funding": "https://ko-fi.com/dangreen",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/TrigenSoftware/simple-release.git",
+ "directory": "packages/node-gha"
+ },
+ "bugs": {
+ "url": "https://github.com/TrigenSoftware/simple-release/issues"
+ },
+ "keywords": [
+ "simple-release",
+ "github-actions",
+ "release",
+ "publish",
+ "changelog"
+ ],
+ "engines": {
+ "node": ">=22"
+ },
+ "exports": "./src/index.ts",
+ "publishConfig": {
+ "exports": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
+ },
+ "directory": "package",
+ "linkDirectory": false
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "clear:package": "del ./package",
+ "clear:dist": "del ./dist",
+ "clear": "del ./package ./dist ./coverage",
+ "prepublishOnly": "run build clear:package clean-publish",
+ "postpublish": "pnpm clear:package",
+ "build": "tsgo -p tsconfig.build.json",
+ "lint": "oxlint",
+ "test:unit": "vitest run --coverage",
+ "test:types": "tsgo --noEmit",
+ "test": "run -p lint test:unit test:types"
+ },
+ "dependencies": {
+ "@simple-libs/child-process-utils": "^2.0.0",
+ "@simple-release/core": "workspace:^",
+ "semver": "^7.5.2"
+ },
+ "devDependencies": {
+ "@types/semver": "^7.5.8",
+ "test": "workspace:^"
+ }
+}
diff --git a/packages/node-gha/src/index.ts b/packages/node-gha/src/index.ts
new file mode 100644
index 0000000..87b9032
--- /dev/null
+++ b/packages/node-gha/src/index.ts
@@ -0,0 +1,2 @@
+export * from './project.js'
+export * from './publish.js'
diff --git a/packages/node-gha/src/project.ts b/packages/node-gha/src/project.ts
new file mode 100644
index 0000000..22a00ba
--- /dev/null
+++ b/packages/node-gha/src/project.ts
@@ -0,0 +1,29 @@
+import {
+ type PackageJsonProjectOptions,
+ type ProjectBumpOptions,
+ PackageJsonProject
+} from '@simple-release/core'
+import {
+ type PublishOptions,
+ publish
+} from './publish.js'
+
+export type NodeGhaProjectOptions = PackageJsonProjectOptions
+
+export type NodeGhaProjectBumpOptions = ProjectBumpOptions
+
+export type NodeGhaProjectPublishOptions = PublishOptions
+
+/**
+ * A Node.js GitHub Actions project that publishes version refs to git branches and tags.
+ */
+export class NodeGhaProject extends PackageJsonProject {
+ override async publish(options: NodeGhaProjectPublishOptions = {}): Promise {
+ if (options.skip) {
+ options.logger?.info('Skipping publish')
+ return
+ }
+
+ await publish(this, options)
+ }
+}
diff --git a/packages/node-gha/src/publish.spec.ts b/packages/node-gha/src/publish.spec.ts
new file mode 100644
index 0000000..c17aad0
--- /dev/null
+++ b/packages/node-gha/src/publish.spec.ts
@@ -0,0 +1,86 @@
+import { join } from 'path'
+import {
+ describe,
+ expect,
+ it
+} from 'vitest'
+import {
+ createDirectory,
+ forkProject,
+ packageJsonProject
+} from 'test'
+import { NodeGhaProject } from './project.js'
+
+function refHash(output: string) {
+ return output.split(/\s+/)[0]
+}
+
+describe('node-gha', () => {
+ describe('publish', () => {
+ it('should publish GitHub Action refs from the built latest branch', async () => {
+ const { cwd } = await forkProject('node-gha-publish', packageJsonProject({
+ version: '2.5.0',
+ files: [
+ 'dist'
+ ]
+ }))
+ const remote = await createDirectory('node-gha-publish-remote')
+ const project = new NodeGhaProject({
+ path: join(cwd, 'package.json')
+ })
+
+ await project.gitClient.exec('-C', remote, 'init', '--bare')
+ await project.gitClient.exec('remote', 'set-url', 'origin', remote)
+
+ await project.publish({
+ build: 'node -e "const fs=require(\'fs\');fs.mkdirSync(\'dist\',{recursive:true});fs.writeFileSync(\'dist/index.js\',\'built\\n\')"'
+ })
+
+ const latestRef = await project.gitClient.exec('ls-remote', '--heads', 'origin', 'latest')
+ const majorRef = await project.gitClient.exec('ls-remote', '--heads', 'origin', 'v2')
+ const tagRef = await project.gitClient.exec('ls-remote', '--tags', 'origin', 'v2.5.0')
+
+ expect(latestRef).toContain('refs/heads/latest')
+ expect(majorRef).toContain('refs/heads/v2')
+ expect(tagRef).toContain('refs/tags/v2.5.0')
+ expect(refHash(latestRef)).toBe(refHash(majorRef))
+ expect(refHash(latestRef)).toBe(refHash(tagRef))
+ expect(await project.gitClient.exec('show', 'v2.5.0:dist/index.js')).toBe('built')
+ expect(await project.gitClient.getCurrentBranch()).toBe('master')
+ })
+
+ it('should use custom ref names and explicit files', async () => {
+ const { cwd } = await forkProject('node-gha-publish-custom-refs', packageJsonProject({
+ version: '3.0.0'
+ }))
+ const remote = await createDirectory('node-gha-publish-custom-refs-remote')
+ const project = new NodeGhaProject({
+ path: join(cwd, 'package.json')
+ })
+
+ await project.gitClient.exec('-C', remote, 'init', '--bare')
+ await project.gitClient.exec('remote', 'set-url', 'origin', remote)
+
+ await project.publish({
+ latestBranch: 'stable',
+ majorBranchPrefix: 'release-',
+ tagPrefix: 'action-v',
+ build: 'node -e "const fs=require(\'fs\');fs.mkdirSync(\'lib\',{recursive:true});fs.writeFileSync(\'lib/action.js\',\'custom\\n\')"',
+ files: [
+ 'lib/action.js'
+ ]
+ })
+
+ const latestRef = await project.gitClient.exec('ls-remote', '--heads', 'origin', 'stable')
+ const majorRef = await project.gitClient.exec('ls-remote', '--heads', 'origin', 'release-3')
+ const tagRef = await project.gitClient.exec('ls-remote', '--tags', 'origin', 'action-v3.0.0')
+
+ expect(latestRef).toContain('refs/heads/stable')
+ expect(majorRef).toContain('refs/heads/release-3')
+ expect(tagRef).toContain('refs/tags/action-v3.0.0')
+ expect(refHash(latestRef)).toBe(refHash(majorRef))
+ expect(refHash(latestRef)).toBe(refHash(tagRef))
+ expect(await project.gitClient.exec('show', 'action-v3.0.0:lib/action.js')).toBe('custom')
+ })
+ })
+})
diff --git a/packages/node-gha/src/publish.ts b/packages/node-gha/src/publish.ts
new file mode 100644
index 0000000..43b0758
--- /dev/null
+++ b/packages/node-gha/src/publish.ts
@@ -0,0 +1,149 @@
+import { spawn } from 'child_process'
+import type {
+ PackageJsonProject,
+ ProjectPublishOptions
+} from '@simple-release/core'
+import { throwProcessError } from '@simple-libs/child-process-utils'
+import semverMajor from 'semver/functions/major.js'
+import semverValid from 'semver/functions/valid.js'
+
+export interface PublishOptions extends ProjectPublishOptions {
+ /**
+ * Branch that points to the latest built GitHub Action state.
+ * @default 'latest'
+ */
+ latestBranch?: string
+ /**
+ * Prefix for the major branch.
+ * @default 'v'
+ */
+ majorBranchPrefix?: string
+ /**
+ * Prefix for version tags.
+ * @default 'v'
+ */
+ tagPrefix?: string
+ /**
+ * Build or install command to run before publishing refs.
+ */
+ build?: string | string[]
+ /**
+ * Files to stage after build. Defaults to package.json `files`.
+ */
+ files?: string[]
+ /**
+ * Environment variables to set before running build commands.
+ * @default process.env
+ */
+ env?: Record
+}
+
+async function runBuildCommands(
+ commands: string[],
+ options: Pick,
+ cwd: string
+) {
+ const {
+ dryRun,
+ env = process.env,
+ logger
+ } = options
+ const silent = logger?.parent.options.silent
+
+ for (const command of commands) {
+ logger?.info(`Running build command: ${command}`)
+
+ if (!dryRun) {
+ await throwProcessError(spawn(command, {
+ cwd,
+ env,
+ shell: true,
+ stdio: silent ? 'ignore' : 'inherit'
+ }))
+ }
+ }
+}
+
+export async function publish(project: PackageJsonProject, options: PublishOptions = {}): Promise {
+ const {
+ gitClient,
+ manifest
+ } = project
+ const {
+ latestBranch = 'latest',
+ majorBranchPrefix = 'v',
+ tagPrefix = 'v',
+ dryRun,
+ logger
+ } = options
+ const { projectPath } = manifest
+ const pkg = await manifest.readManifest()
+ const version = await manifest.getVersion()
+ const validVersion = semverValid(version)
+
+ if (!validVersion) {
+ throw new Error(`Invalid GitHub Action version: ${version}`)
+ }
+
+ const majorBranch = `${majorBranchPrefix}${semverMajor(validVersion)}`
+ const versionTag = `${tagPrefix}${validVersion}`
+ const buildCommands = options.build
+ ? Array.isArray(options.build)
+ ? options.build
+ : [options.build]
+ : []
+ const files = options.files || pkg.files as string[] || []
+ const originalBranch = await gitClient.getCurrentBranch()
+ const releaseCommit = await gitClient.verify('HEAD')
+
+ logger?.info(`Publishing GitHub Action ${versionTag}...`)
+ logger?.verbose(`Latest branch: ${latestBranch}`)
+ logger?.verbose(`Major branch: ${majorBranch}`)
+
+ let shouldRestoreBranch = false
+
+ try {
+ if (!dryRun) {
+ await gitClient.exec('checkout', '-B', latestBranch, releaseCommit)
+
+ shouldRestoreBranch = originalBranch !== latestBranch
+ }
+
+ await runBuildCommands(buildCommands, options, projectPath)
+
+ if (!dryRun && buildCommands.length && files.length) {
+ logger?.info('Staging built GitHub Action files...')
+
+ await gitClient.exec('add', '--force', '--', ...files)
+
+ const stagedFiles = await gitClient.exec('diff', '--cached', '--name-only')
+
+ if (stagedFiles) {
+ await gitClient.exec('commit', '--amend', '--no-edit', '--no-verify')
+ }
+ }
+
+ if (!dryRun) {
+ logger?.info('Creating GitHub Action release refs...')
+
+ await gitClient.exec('branch', '-f', '--', majorBranch, 'HEAD')
+ await gitClient.exec('tag', '-f', '--', versionTag, 'HEAD')
+
+ logger?.info('Pushing GitHub Action release refs...')
+
+ await gitClient.push(latestBranch, {
+ force: true,
+ verify: false
+ })
+ await gitClient.push(majorBranch, {
+ force: true,
+ verify: false
+ })
+ await gitClient.exec('push', '--force', 'origin', versionTag)
+ }
+ } finally {
+ if (shouldRestoreBranch) {
+ await gitClient.checkout(originalBranch)
+ }
+ }
+}
diff --git a/packages/node-gha/tsconfig.build.json b/packages/node-gha/tsconfig.build.json
new file mode 100644
index 0000000..87a2104
--- /dev/null
+++ b/packages/node-gha/tsconfig.build.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "dist"
+ },
+ "include": [
+ "src"
+ ],
+ "exclude": [
+ "**/*.spec.ts"
+ ]
+}
diff --git a/packages/node-gha/tsconfig.json b/packages/node-gha/tsconfig.json
new file mode 100644
index 0000000..c5556fc
--- /dev/null
+++ b/packages/node-gha/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "extends": "./tsconfig.build.json",
+ "compilerOptions": {
+ "allowJs": true,
+ "rootDir": "../.."
+ },
+ "include": [
+ "src",
+ "*.js",
+ "*.ts"
+ ],
+ "exclude": []
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6ea97c1..34dd75c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -34,7 +34,7 @@ importers:
version: 22.16.2
'@typescript/native-preview':
specifier: latest
- version: 7.0.0-dev.20260627.2
+ version: 7.0.0-dev.20260628.1
'@vitest/coverage-v8':
specifier: ^4.1.9
version: 4.1.9(vitest@4.1.9)
@@ -175,6 +175,26 @@ importers:
version: link:../pnpm
publishDirectory: package
+ packages/node-gha:
+ dependencies:
+ '@simple-libs/child-process-utils':
+ specifier: ^2.0.0
+ version: 2.0.0
+ '@simple-release/core':
+ specifier: workspace:^
+ version: link:../core
+ semver:
+ specifier: ^7.5.2
+ version: 7.8.5
+ devDependencies:
+ '@types/semver':
+ specifier: ^7.5.8
+ version: 7.7.0
+ test:
+ specifier: workspace:^
+ version: link:../test
+ publishDirectory: package
+
packages/npm:
dependencies:
'@simple-libs/child-process-utils':
@@ -899,50 +919,50 @@ packages:
resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-om8UapcrjCyQ7Vsn0eb6kEB/scwo2/Np95cOyCiIIjUWObsDKL/DSpkYX3Z1cxo1L8WY48UM5edR2bzzarBxBg==}
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-eHHDHAZjbZ681sHyW87tg8mH4+xIs+Q7cHKIlrdafqeny1KYWorj3O9Qfnjvcl2Yd2Eq+IzJxffF6Tepy13L4Q==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [darwin]
- '@typescript/native-preview-darwin-x64@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-40IOEo0tMS8lNLK/iVhjPcZsgXY7Erijqe5b2HLN9eufoPaGFUfNpFQ8JYHI/xgEF6/JdgGAQp6j4s8E8oamew==}
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-xIsJSXa0Fsv0pPfQ0YYa7nUQJ/nGRF/r8p60e0Aa29SexxgOXMsu3YhOnUnJEdbvaPzqlKqa1GqNGpbGnLQcLA==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [darwin]
- '@typescript/native-preview-linux-arm64@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-66G5zoTYUi358zkza1kAoUgAXs4Ek0eA69TyPDU350fH6wgepeEkCuD5kel4iTPuIbJE40WZABcbBsQJsRCbJQ==}
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-p3yj2a70vkaFB3OD+Vt4oNUaiE7I30fwiXs6LVNAW6k0GSHNc4ucYcWVlpcp8+cej9RBQgxMnMH5MSVYmNhUvw==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [linux]
- '@typescript/native-preview-linux-arm@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-1wIpqbi6Y8plCc4dH1Qw12fBu5Uk1qAdEC1fnpybkztXG90ErTG8XeccQ/SeCAl2X65PnhUU+rvzNVwqfvGyGg==}
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-BoclteE+MBOnfK0Qh21mQgrvYPy/v2k7CPTPufcNp1g1fsSvsF3Xv6K8I/grEjo3ZjNrgIvVxivoAqaQhSMlGA==}
engines: {node: '>=16.20.0'}
cpu: [arm]
os: [linux]
- '@typescript/native-preview-linux-x64@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-0v1xRUgREzDAaNjaKtHuX5jEHVmY/MC5YR/rvSTNSYbqtg3vnUvafimRpyInXwMq399a9K6SwW2omIOfYeNJmQ==}
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-LKNKDoTnM8aacpbt1u8kJR1feXpBuLlvKKbVt0RYBL4j1OA148TXKjLtbVu37I0lcVxjqERYuAybpvut2xq31w==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [linux]
- '@typescript/native-preview-win32-arm64@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-kXsG81vUZxV4gjKfJP/Nx3mJISG9ijzQmXamDbDgPzndzpmD0g+RyzEF+s6RH5AzFAc3nuGcg3LQWY2QThl67w==}
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-XUGCYlDAfeA4PIm7ZSZtVHmvffVoMct0LhTA/CoALhSQFnFnJdipOfsZghSyU6TCpTuzBoOhWCjBufrQC23xOQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [win32]
- '@typescript/native-preview-win32-x64@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-+V3qtCz+L1d6xN1mFFHohzDnpHlPCLlOfZS11FE7Kjz/qfMViBjQwCAAtTlBT+GfZKj41nsQ5ybRqo2DVC1sMg==}
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-rJMZ+YaRv9XybOZBYAsJt7x/K2IWmX9bgRatHobl0wwkKmfKd3giNnRXcDwOqYeCaWzunCbUhAirUtuUprRcnQ==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [win32]
- '@typescript/native-preview@7.0.0-dev.20260627.2':
- resolution: {integrity: sha512-kJlusQpaCY5IxejXa5jcVUXu6IfLtIuK2+CWKvaFD3lqNhvt4OR3+1KOxAleaxHdvEc4fWMr0mrF7MIAmDXoAg==}
+ '@typescript/native-preview@7.0.0-dev.20260628.1':
+ resolution: {integrity: sha512-359WmBk3vA/bJxfeWyLbFeeejmky7Wssc8HMu0Iabu490WJLj/FqkDC51V65yuDp+anMAEkgeKO43fj6pMb/ZA==}
engines: {node: '>=16.20.0'}
hasBin: true
@@ -2905,36 +2925,36 @@ snapshots:
'@typescript-eslint/types@8.62.0': {}
- '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview-darwin-x64@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview-linux-arm64@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview-linux-arm@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview-linux-x64@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview-win32-arm64@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview-win32-x64@7.0.0-dev.20260627.2':
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20260628.1':
optional: true
- '@typescript/native-preview@7.0.0-dev.20260627.2':
+ '@typescript/native-preview@7.0.0-dev.20260628.1':
optionalDependencies:
- '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260627.2
- '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260627.2
- '@typescript/native-preview-linux-arm': 7.0.0-dev.20260627.2
- '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260627.2
- '@typescript/native-preview-linux-x64': 7.0.0-dev.20260627.2
- '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260627.2
- '@typescript/native-preview-win32-x64': 7.0.0-dev.20260627.2
+ '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260628.1
+ '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260628.1
+ '@typescript/native-preview-linux-arm': 7.0.0-dev.20260628.1
+ '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260628.1
+ '@typescript/native-preview-linux-x64': 7.0.0-dev.20260628.1
+ '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260628.1
+ '@typescript/native-preview-win32-x64': 7.0.0-dev.20260628.1
'@vitest/coverage-v8@4.1.9(vitest@4.1.9)':
dependencies: