mirror of
https://github.com/papra-hq/papra.git
synced 2025-12-19 03:51:28 -06:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32b4129e2c |
7
.changelog/releases/25.10.2/dangerous-spicy-bird.md
Normal file
7
.changelog/releases/25.10.2/dangerous-spicy-bird.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
type: feature
|
||||
isBreaking: false
|
||||
version: 25.10.2
|
||||
date: '2025-10-07'
|
||||
---
|
||||
Switched to calver versioning
|
||||
1
.changelog/version
Normal file
1
.changelog/version
Normal file
@@ -0,0 +1 @@
|
||||
25.10.2
|
||||
81
.github/workflows/changelog-release.yaml
vendored
Normal file
81
.github/workflows/changelog-release.yaml
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
name: Changelog Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
jobs:
|
||||
changelog-release:
|
||||
name: Changelog Release
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
actions: write
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
fetch-depth: 0 # Need full history for git log in changelog
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm i
|
||||
|
||||
- name: Check for pending changelogs
|
||||
id: check_pending
|
||||
run: |
|
||||
if [ -d ".changelog/pending" ] && [ "$(ls -A .changelog/pending/*.md 2>/dev/null)" ]; then
|
||||
echo "has_pending=true" >> $GITHUB_OUTPUT
|
||||
echo "Found pending changelog entries"
|
||||
else
|
||||
echo "has_pending=false" >> $GITHUB_OUTPUT
|
||||
echo "No pending changelog entries"
|
||||
fi
|
||||
|
||||
- name: Get next version
|
||||
if: steps.check_pending.outputs.has_pending == 'true'
|
||||
id: next_version
|
||||
run: |
|
||||
cd packages/changelog
|
||||
NEXT_VERSION=$(pnpm --silent changelog:next-version)
|
||||
echo "version=$NEXT_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Next version: $NEXT_VERSION"
|
||||
|
||||
- name: Release changelog
|
||||
if: steps.check_pending.outputs.has_pending == 'true'
|
||||
run: |
|
||||
cd packages/changelog
|
||||
pnpm changelog:release -v ${{ steps.next_version.outputs.version }}
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Commit changelog and version
|
||||
if: steps.check_pending.outputs.has_pending == 'true'
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git add .changelog
|
||||
git commit -m "chore(release): ${{ steps.next_version.outputs.version }}"
|
||||
git push
|
||||
|
||||
- name: Create git tag
|
||||
if: steps.check_pending.outputs.has_pending == 'true'
|
||||
run: |
|
||||
git tag "v${{ steps.next_version.outputs.version }}"
|
||||
git push origin "v${{ steps.next_version.outputs.version }}"
|
||||
|
||||
- name: Trigger Docker build
|
||||
if: steps.check_pending.outputs.has_pending == 'true'
|
||||
run: |
|
||||
gh workflow run release-docker.yaml -f version="${{ steps.next_version.outputs.version }}"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
4
packages/changelog/.gitignore
vendored
Normal file
4
packages/changelog/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
dist
|
||||
.DS_Store
|
||||
*.log
|
||||
342
packages/changelog/README.md
Normal file
342
packages/changelog/README.md
Normal file
@@ -0,0 +1,342 @@
|
||||
# @papra/changelog
|
||||
|
||||
Internal tooling for managing changelog entries and versioning using calendar-based versioning (calver).
|
||||
|
||||
## Overview
|
||||
|
||||
This package provides CLI tools and utilities to manage changelog entries for Papra's continuous deployment workflow. It replaces the traditional changesets workflow with a calver-based approach that better suits a web application with continuous deployment.
|
||||
|
||||
## Versioning Format
|
||||
|
||||
Papra uses **calendar versioning** with the format `YY.MM.N`:
|
||||
|
||||
- `YY` - Last two digits of the year (e.g., `25` for 2025)
|
||||
- `MM` - Zero-padded month (e.g., `04` for April)
|
||||
- `N` - Sequential release number for that month, starting at `1`
|
||||
|
||||
**Examples:**
|
||||
- `25.04.1` - First release in April 2025
|
||||
- `25.04.2` - Second release in April 2025
|
||||
- `25.05.1` - First release in May 2025
|
||||
|
||||
This format:
|
||||
- Looks like semantic versioning (two dots)
|
||||
- Clearly indicates when the release was made
|
||||
- Supports multiple releases per month
|
||||
- Resets the sequence counter each month
|
||||
- Is sortable and human-readable
|
||||
|
||||
## Workflow
|
||||
|
||||
### During Development (PR Phase)
|
||||
|
||||
When working on a feature or fix that should appear in the changelog:
|
||||
|
||||
1. Run `pnpm changelog add` to create a new changelog entry
|
||||
2. Answer the interactive prompts about your change
|
||||
3. Entry is saved to `apps/docs/src/content/changelog/.pending/`
|
||||
4. Commit the pending entry with your PR
|
||||
|
||||
**Multiple entries per PR:** A single PR can contain multiple changelog entries if it impacts multiple user-facing features or fixes.
|
||||
|
||||
### During Release (CD Pipeline)
|
||||
|
||||
When code is merged to `main` and passes CI:
|
||||
|
||||
1. CD pipeline runs `pnpm changelog release`
|
||||
2. The tool determines the next version number (`YY.MM.N`)
|
||||
3. All pending entries are moved to a versioned folder
|
||||
4. Git tag is created with the version
|
||||
5. Docker images are built and published with the version tag
|
||||
|
||||
## CLI Commands
|
||||
|
||||
### `pnpm changelog add`
|
||||
|
||||
Interactively create a new changelog entry.
|
||||
|
||||
**Prompts:**
|
||||
- **Type** - `feature` | `fix` | `improvement` | `breaking`
|
||||
- **Title** - Short, user-facing description (e.g., "Add calendar versioning support")
|
||||
- **Description** - Detailed markdown explanation of the change
|
||||
- **Breaking change?** - Whether this change breaks existing functionality
|
||||
- **PR number** (optional) - Associated pull request number
|
||||
|
||||
**Output:**
|
||||
Creates a markdown file in `apps/docs/src/content/changelog/.pending/` with a unique filename (e.g., `537-add-calver.md`).
|
||||
|
||||
**Example entry:**
|
||||
```markdown
|
||||
---
|
||||
type: feature
|
||||
title: Add calendar versioning support
|
||||
breaking: false
|
||||
pr: 537
|
||||
---
|
||||
|
||||
Papra now uses calendar versioning (YY.MM.N) instead of semantic versioning. This provides better clarity about when releases were made and supports continuous deployment.
|
||||
|
||||
Each version indicates the year, month, and sequential release number for that month.
|
||||
```
|
||||
|
||||
### `pnpm changelog release`
|
||||
|
||||
Process all pending changelog entries and determine the next version number.
|
||||
|
||||
**What it does:**
|
||||
1. Reads all files from `.pending/` folder
|
||||
2. Looks at existing git tags to find the latest version for current month
|
||||
3. Determines next version (`YY.MM.N` where N increments)
|
||||
4. Creates a folder for the new version: `apps/docs/src/content/changelog/{version}/`
|
||||
5. Moves all pending entries to the versioned folder
|
||||
6. Adds version and date to each entry's frontmatter
|
||||
7. Outputs the new version number for use by CD pipeline
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
$ pnpm changelog release
|
||||
📦 Found 3 pending changelog entries
|
||||
🔍 Latest version for 2025-04: 25.04.1
|
||||
🚀 Next version: 25.04.2
|
||||
✅ Moved 3 entries to changelog/25.04.2/
|
||||
📌 Version: 25.04.2
|
||||
```
|
||||
|
||||
**Usage in CD:**
|
||||
```bash
|
||||
VERSION=$(pnpm changelog release --output version)
|
||||
git tag $VERSION
|
||||
docker build -t papra:$VERSION .
|
||||
```
|
||||
|
||||
### `pnpm changelog validate`
|
||||
|
||||
Validates all pending changelog entries for correct schema and formatting.
|
||||
|
||||
Useful in CI to ensure PR contributors have properly formatted their changelog entries.
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
apps/docs/src/content/changelog/
|
||||
├── .pending/ # Pending entries (pre-release)
|
||||
│ ├── 537-add-calver.md
|
||||
│ ├── 538-fix-docker-build.md
|
||||
│ └── 539-improve-ui.md
|
||||
├── 25.04.2/ # Released version
|
||||
│ ├── add-calver.md
|
||||
│ ├── fix-docker-build.md
|
||||
│ └── improve-ui.md
|
||||
├── 25.04.1/
|
||||
│ ├── usage-page.md
|
||||
│ └── org-invites.md
|
||||
└── 25.03.1/
|
||||
└── subscription-management.md
|
||||
```
|
||||
|
||||
## Changelog Entry Schema
|
||||
|
||||
Each changelog entry (both pending and released) follows this schema:
|
||||
|
||||
```typescript
|
||||
{
|
||||
type: 'feature' | 'fix' | 'improvement' | 'breaking'
|
||||
title: string // Short, user-facing title
|
||||
breaking: boolean // Is this a breaking change?
|
||||
pr?: number // Associated PR number
|
||||
version?: string // Added during release (e.g., "25.04.2")
|
||||
date?: string // Added during release (ISO format)
|
||||
}
|
||||
```
|
||||
|
||||
**Frontmatter example:**
|
||||
```yaml
|
||||
---
|
||||
type: feature
|
||||
title: Add calendar versioning support
|
||||
breaking: false
|
||||
pr: 537
|
||||
version: 25.04.2
|
||||
date: 2025-04-07
|
||||
---
|
||||
```
|
||||
|
||||
## Integration with Astro
|
||||
|
||||
The changelog entries are consumed by the Astro documentation site:
|
||||
|
||||
```typescript
|
||||
// apps/docs/src/content/config.ts
|
||||
import { defineCollection, z } from 'astro:content';
|
||||
|
||||
const changelog = defineCollection({
|
||||
schema: z.object({
|
||||
type: z.enum(['feature', 'fix', 'improvement', 'breaking']),
|
||||
title: z.string(),
|
||||
breaking: z.boolean(),
|
||||
pr: z.number().optional(),
|
||||
version: z.string().optional(),
|
||||
date: z.string().optional(),
|
||||
}),
|
||||
});
|
||||
|
||||
export const collections = { changelog };
|
||||
```
|
||||
|
||||
The changelog page can then query and display entries:
|
||||
|
||||
```astro
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
|
||||
const entries = await getCollection('changelog');
|
||||
const byVersion = entries.reduce((acc, entry) => {
|
||||
const version = entry.data.version || 'pending';
|
||||
if (!acc[version]) acc[version] = [];
|
||||
acc[version].push(entry);
|
||||
return acc;
|
||||
}, {});
|
||||
---
|
||||
|
||||
<div class="changelog">
|
||||
{Object.entries(byVersion).map(([version, entries]) => (
|
||||
<section class="version">
|
||||
<h2>{version}</h2>
|
||||
{entries.map(entry => (
|
||||
<article class={entry.data.breaking ? 'breaking' : ''}>
|
||||
<h3>{entry.data.title}</h3>
|
||||
<div>{entry.body}</div>
|
||||
</article>
|
||||
))}
|
||||
</section>
|
||||
))}
|
||||
</div>
|
||||
```
|
||||
|
||||
## CD Pipeline Integration
|
||||
|
||||
Example GitHub Actions workflow:
|
||||
|
||||
```yaml
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Build packages
|
||||
run: pnpm build:packages
|
||||
|
||||
- name: Run tests
|
||||
run: pnpm test
|
||||
|
||||
- name: Process changelog and release
|
||||
run: |
|
||||
VERSION=$(pnpm changelog release --output version)
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
|
||||
- name: Create git tag
|
||||
run: |
|
||||
git tag ${{ env.VERSION }}
|
||||
git push origin ${{ env.VERSION }}
|
||||
|
||||
- name: Build and push Docker image
|
||||
run: |
|
||||
docker build -t papra/papra:${{ env.VERSION }} .
|
||||
docker tag papra/papra:${{ env.VERSION }} papra/papra:latest
|
||||
docker push papra/papra:${{ env.VERSION }}
|
||||
docker push papra/papra:latest
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
### Setup
|
||||
|
||||
```bash
|
||||
cd packages/changelog
|
||||
pnpm install
|
||||
pnpm build
|
||||
```
|
||||
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
pnpm test:watch
|
||||
```
|
||||
|
||||
### Local development
|
||||
|
||||
```bash
|
||||
pnpm dev # Watch mode
|
||||
```
|
||||
|
||||
## Migration from Changesets
|
||||
|
||||
When migrating from changesets to this system:
|
||||
|
||||
1. Process any pending changesets: `pnpm changeset version`
|
||||
2. Create a final semver release and tag
|
||||
3. Remove `.changeset/` folder and configuration
|
||||
4. Install this package
|
||||
5. Update CI/CD pipeline to use `pnpm changelog release`
|
||||
6. Create a migration guide changelog entry explaining the new versioning scheme to users
|
||||
|
||||
## Breaking Changes and Self-Hosters
|
||||
|
||||
Since Papra supports self-hosting and users may have custom integrations:
|
||||
|
||||
- **Always mark breaking changes** with `breaking: true`
|
||||
- **Provide migration guides** in the changelog entry body
|
||||
- **Consider creating a dedicated migration guide** for complex breaking changes
|
||||
- **Link to migration documentation** from the changelog entry
|
||||
|
||||
**Example breaking change entry:**
|
||||
|
||||
```markdown
|
||||
---
|
||||
type: breaking
|
||||
title: Change API authentication to use Bearer tokens
|
||||
breaking: true
|
||||
pr: 540
|
||||
---
|
||||
|
||||
⚠️ **Breaking Change**
|
||||
|
||||
API authentication has been updated to use Bearer tokens instead of API key headers.
|
||||
|
||||
**Migration steps:**
|
||||
|
||||
1. Update your API client to send `Authorization: Bearer YOUR_API_KEY` header
|
||||
2. Remove the legacy `X-API-Key` header from your requests
|
||||
3. Test your integration before deploying
|
||||
|
||||
See the [API Authentication Migration Guide](/docs/migrations/bearer-tokens) for detailed examples.
|
||||
```
|
||||
|
||||
## Why Not Semver?
|
||||
|
||||
Semantic versioning (major.minor.patch) is designed for libraries and packages where:
|
||||
- Consumers need to know about breaking changes (major)
|
||||
- New features are additive (minor)
|
||||
- Bug fixes are backwards compatible (patch)
|
||||
|
||||
For Papra:
|
||||
- The SaaS version is always on the latest release (users can't choose versions)
|
||||
- Self-hosters typically want the latest stable version
|
||||
- Calendar versioning makes it clear when the release was made
|
||||
- Breaking changes are communicated through changelog entries, not version numbers
|
||||
- A "0.x" version doesn't make sense for a stable, production-ready application
|
||||
|
||||
Calendar versioning provides better clarity and aligns with continuous deployment practices.
|
||||
25
packages/changelog/eslint.config.js
Normal file
25
packages/changelog/eslint.config.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import antfu from '@antfu/eslint-config';
|
||||
|
||||
export default antfu({
|
||||
stylistic: {
|
||||
semi: true,
|
||||
},
|
||||
|
||||
ignores: ['README.md'],
|
||||
|
||||
rules: {
|
||||
// To allow export on top of files
|
||||
'ts/no-use-before-define': ['error', { allowNamedExports: true, functions: false }],
|
||||
// To allow console for CLI logs
|
||||
'no-console': 'off',
|
||||
'curly': ['error', 'all'],
|
||||
'vitest/consistent-test-it': ['error', { fn: 'test' }],
|
||||
'ts/consistent-type-definitions': ['error', 'type'],
|
||||
'style/brace-style': ['error', '1tbs', { allowSingleLine: false }],
|
||||
'unused-imports/no-unused-vars': ['error', {
|
||||
argsIgnorePattern: '^_',
|
||||
varsIgnorePattern: '^_',
|
||||
caughtErrorsIgnorePattern: '^_',
|
||||
}],
|
||||
},
|
||||
});
|
||||
36
packages/changelog/package.json
Normal file
36
packages/changelog/package.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "@papra/changelog",
|
||||
"type": "module",
|
||||
"version": "1.0.0",
|
||||
"packageManager": "pnpm@10.12.3",
|
||||
"description": "Changelog management and versioning tooling for Papra",
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"keywords": [],
|
||||
"scripts": {
|
||||
"changelog:add": "tsx src/scripts/add.ts",
|
||||
"changelog:release": "tsx src/scripts/release.ts",
|
||||
"changelog:next-version": "tsx src/scripts/next-version.ts",
|
||||
"changelog:validate": "tsx src/scripts/validate.ts",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"lint": "eslint .",
|
||||
"lint:fix": "eslint --fix ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@clack/prompts": "^0.10.1",
|
||||
"@corentinth/friendly-ids": "^0.0.1",
|
||||
"gray-matter": "^4.0.3",
|
||||
"picocolors": "^1.1.1",
|
||||
"zod": "^3.25.67"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "catalog:",
|
||||
"@types/node": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"tsx": "catalog:",
|
||||
"typescript": "catalog:",
|
||||
"vitest": "catalog:"
|
||||
}
|
||||
}
|
||||
46
packages/changelog/src/commands/add.ts
Normal file
46
packages/changelog/src/commands/add.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { ChangelogEntry } from '../types';
|
||||
import path from 'node:path';
|
||||
import process from 'node:process';
|
||||
import * as p from '@clack/prompts';
|
||||
import pc from 'picocolors';
|
||||
import { generateFilename, PENDING_DIR, writeEntry } from '../utils';
|
||||
|
||||
export async function addCommand(): Promise<void> {
|
||||
p.intro(pc.bold('Changelog Entry'));
|
||||
|
||||
const entry = await p.group(
|
||||
{
|
||||
type: () => p.select<ChangelogEntry['type']>({
|
||||
message: 'What type of change is this?',
|
||||
options: [
|
||||
{ value: 'feature', label: 'Feature - New functionality' },
|
||||
{ value: 'improvement', label: 'Improvement - Enhancement to existing feature' },
|
||||
{ value: 'fix', label: 'Fix - Bug fix' },
|
||||
{ value: 'technical', label: 'Technical - Non-user facing change' },
|
||||
],
|
||||
}),
|
||||
content: () => p.text({
|
||||
message: 'Enter a detailed description (markdown supported):',
|
||||
placeholder: 'Papra now uses calver for versioning',
|
||||
}),
|
||||
isBreaking: () => p.confirm({
|
||||
message: 'Is this a breaking change?',
|
||||
initialValue: false,
|
||||
}),
|
||||
},
|
||||
{
|
||||
onCancel: () => {
|
||||
p.cancel('Changelog entry creation aborted.');
|
||||
process.exit(0);
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// Generate filename and write
|
||||
const filename = generateFilename();
|
||||
const filePath = path.join(PENDING_DIR, filename);
|
||||
|
||||
writeEntry({ filePath, entry });
|
||||
|
||||
p.outro(pc.green(`Changelog entry created: ${pc.dim(filename)}`));
|
||||
}
|
||||
9
packages/changelog/src/commands/next-version.ts
Normal file
9
packages/changelog/src/commands/next-version.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import process from 'node:process';
|
||||
import { getNextVersion } from '../utils';
|
||||
|
||||
export async function nextVersionCommand(): Promise<void> {
|
||||
const nextVersion = getNextVersion();
|
||||
|
||||
console.log(nextVersion);
|
||||
process.exit(0);
|
||||
}
|
||||
41
packages/changelog/src/commands/release.ts
Normal file
41
packages/changelog/src/commands/release.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import process from 'node:process';
|
||||
import * as p from '@clack/prompts';
|
||||
import pc from 'picocolors';
|
||||
import { getPendingEntries, movePendingEntriesToVersion, setCurrentVersion } from '../utils';
|
||||
|
||||
export async function releaseCommand({ version }: { version?: string }): Promise<void> {
|
||||
if (!version) {
|
||||
p.outro(pc.red('Version is required. Use --version or -v to specify the next version.'));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// ensure version match YY.MM.N
|
||||
if (!/^\d{2}\.\d{1,2}\.\d+$/.test(version)) {
|
||||
p.outro(pc.red('Invalid version format. Use YY.MM.N format, e.g., 24.6.0'));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const pending = getPendingEntries();
|
||||
|
||||
if (pending.length === 0) {
|
||||
p.outro(pc.yellow('No pending changelog entries found'));
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const date = new Date().toISOString().split('T')[0]!;
|
||||
|
||||
p.intro(pc.bold('Release Changelog'));
|
||||
console.log(pc.dim(`Found ${pending.length} pending changelog ${pending.length === 1 ? 'entry' : 'entries'}`));
|
||||
console.log(pc.dim(`Next version: ${pc.bold(version)}`));
|
||||
console.log();
|
||||
|
||||
const spinner = p.spinner();
|
||||
spinner.start('Moving entries to releases folder');
|
||||
|
||||
movePendingEntriesToVersion(version, date);
|
||||
setCurrentVersion(version);
|
||||
|
||||
spinner.stop(pc.green(`Moved ${pending.length} ${pending.length === 1 ? 'entry' : 'entries'} to .changelog/releases/${version}/`));
|
||||
|
||||
p.outro(pc.green(`Released version: ${pc.bold(version)}`));
|
||||
}
|
||||
8
packages/changelog/src/scripts/add.ts
Normal file
8
packages/changelog/src/scripts/add.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
import process from 'node:process';
|
||||
import { addCommand } from '../commands/add';
|
||||
|
||||
addCommand().catch((error) => {
|
||||
console.error('Failed to add changelog entry:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
8
packages/changelog/src/scripts/next-version.ts
Normal file
8
packages/changelog/src/scripts/next-version.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
import process from 'node:process';
|
||||
import { nextVersionCommand } from '../commands/next-version';
|
||||
|
||||
nextVersionCommand().catch((error) => {
|
||||
console.error('Failed to get next version:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
9
packages/changelog/src/scripts/release-next-version.ts
Normal file
9
packages/changelog/src/scripts/release-next-version.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env node
|
||||
import process from 'node:process';
|
||||
import { releaseCommand } from '../commands/release';
|
||||
import { getNextVersion } from '../utils';
|
||||
|
||||
releaseCommand({ version: getNextVersion() }).catch((error) => {
|
||||
console.error('Failed to release changelog:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
19
packages/changelog/src/scripts/release.ts
Normal file
19
packages/changelog/src/scripts/release.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env node
|
||||
import process from 'node:process';
|
||||
import { parseArgs } from 'node:util';
|
||||
import { releaseCommand } from '../commands/release';
|
||||
|
||||
const { values: { version } } = parseArgs({
|
||||
options: {
|
||||
version: {
|
||||
type: 'string',
|
||||
short: 'v',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
releaseCommand({ version }).catch((error) => {
|
||||
console.error('Failed to release changelog:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
12
packages/changelog/src/types.ts
Normal file
12
packages/changelog/src/types.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
export type PendingChangelogEntry = {
|
||||
type: string;
|
||||
content: string;
|
||||
isBreaking: boolean;
|
||||
};
|
||||
|
||||
export type ChangelogEntry = PendingChangelogEntry & {
|
||||
version: string;
|
||||
createdAt: string;
|
||||
pr?: number;
|
||||
author?: string;
|
||||
};
|
||||
234
packages/changelog/src/utils.ts
Normal file
234
packages/changelog/src/utils.ts
Normal file
@@ -0,0 +1,234 @@
|
||||
import type { ChangelogEntry, PendingChangelogEntry } from './types';
|
||||
import { execSync } from 'node:child_process';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { adjectives, animals, createIdGenerator } from '@corentinth/friendly-ids';
|
||||
import matter from 'gray-matter';
|
||||
|
||||
const generateId = createIdGenerator({
|
||||
separator: '-',
|
||||
chunks: [
|
||||
({ getRandomItem }) => getRandomItem(adjectives),
|
||||
({ getRandomItem }) => getRandomItem(adjectives),
|
||||
({ getRandomItem }) => getRandomItem(animals),
|
||||
],
|
||||
});
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const REPO_ROOT = path.resolve(__dirname, '../../..');
|
||||
export const CHANGELOG_DIR = path.join(REPO_ROOT, '.changelog');
|
||||
export const PENDING_DIR = path.join(CHANGELOG_DIR, 'pending');
|
||||
export const RELEASES_DIR = path.join(CHANGELOG_DIR, 'releases');
|
||||
export const VERSION_FILE = path.join(CHANGELOG_DIR, 'version');
|
||||
|
||||
/**
|
||||
* Ensure the pending directory exists
|
||||
*/
|
||||
export function ensureChangelogPendingDirectoryExists(): void {
|
||||
if (!fs.existsSync(PENDING_DIR)) {
|
||||
fs.mkdirSync(PENDING_DIR, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a unique filename for a changelog entry
|
||||
*/
|
||||
export function generateFilename(): string {
|
||||
const slug = generateId();
|
||||
return `${slug}.md`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a changelog entry from a file
|
||||
*/
|
||||
export function readPendingEntry(filePath: string): PendingChangelogEntry {
|
||||
const { data, content } = matter(fs.readFileSync(filePath, 'utf-8'));
|
||||
|
||||
return {
|
||||
...data as Omit<PendingChangelogEntry, 'content'>,
|
||||
content,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a changelog entry to a file
|
||||
*/
|
||||
export function writeEntry({ filePath, entry: { content, ...rest } }: { filePath: string; entry: ChangelogEntry | PendingChangelogEntry }): void {
|
||||
ensureChangelogPendingDirectoryExists();
|
||||
const frontmatter = matter.stringify(content, rest);
|
||||
fs.writeFileSync(filePath, frontmatter, 'utf-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all pending changelog entries
|
||||
*/
|
||||
export function getPendingEntries(): { path: string; entry: PendingChangelogEntry }[] {
|
||||
if (!fs.existsSync(PENDING_DIR)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const files = fs.readdirSync(PENDING_DIR)
|
||||
.filter(file => file.endsWith('.md'))
|
||||
.map(file => path.join(PENDING_DIR, file));
|
||||
|
||||
return files.map(filePath => ({
|
||||
path: filePath,
|
||||
entry: readPendingEntry(filePath),
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the commit hash that last modified a file
|
||||
*/
|
||||
export function getFileCommitHash(filePath: string): string | null {
|
||||
try {
|
||||
const hash = execSync(`git log -1 --format=%H -- "${filePath}"`, {
|
||||
encoding: 'utf-8',
|
||||
stdio: ['pipe', 'pipe', 'ignore'],
|
||||
}).trim();
|
||||
return hash || null;
|
||||
}
|
||||
catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get PR number and author from a commit hash using gh CLI
|
||||
*/
|
||||
export function getPRInfoFromCommit(commitHash: string): { pr: number; author: string } | null {
|
||||
try {
|
||||
const result = execSync(`gh pr list --search "${commitHash}" --json number,author --state merged --limit 1`, {
|
||||
encoding: 'utf-8',
|
||||
stdio: ['pipe', 'pipe', 'ignore'],
|
||||
});
|
||||
|
||||
const prs = JSON.parse(result) as Array<{ number: number; author: { login: string } }>;
|
||||
if (prs.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const pr = prs[0];
|
||||
return {
|
||||
pr: pr!.number,
|
||||
author: pr!.author.login,
|
||||
};
|
||||
}
|
||||
catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Move pending entries to a versioned folder
|
||||
*/
|
||||
export function movePendingEntriesToVersion(version: string, date: string): void {
|
||||
const pending = getPendingEntries();
|
||||
|
||||
if (pending.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const versionDir = path.join(RELEASES_DIR, version);
|
||||
|
||||
if (!fs.existsSync(versionDir)) {
|
||||
fs.mkdirSync(versionDir, { recursive: true });
|
||||
}
|
||||
|
||||
for (const { path: filePath, entry } of pending) {
|
||||
const filename = path.basename(filePath);
|
||||
const newPath = path.join(versionDir, filename);
|
||||
|
||||
// Get commit hash and PR info
|
||||
const commitHash = getFileCommitHash(filePath);
|
||||
const prInfo = commitHash ? getPRInfoFromCommit(commitHash) : null;
|
||||
|
||||
// Update entry with version, date, and PR info
|
||||
const updatedEntry: ChangelogEntry = {
|
||||
...entry,
|
||||
version,
|
||||
createdAt: date,
|
||||
...(prInfo && {
|
||||
pr: prInfo.pr,
|
||||
author: prInfo.author,
|
||||
}),
|
||||
};
|
||||
|
||||
writeEntry({ filePath: newPath, entry: updatedEntry });
|
||||
|
||||
// Remove from pending
|
||||
fs.unlinkSync(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the current version from the version file
|
||||
*/
|
||||
export function getCurrentVersion(): string | null {
|
||||
try {
|
||||
if (!fs.existsSync(VERSION_FILE)) {
|
||||
return null;
|
||||
}
|
||||
return fs.readFileSync(VERSION_FILE, 'utf-8').trim();
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the version to the version file
|
||||
*/
|
||||
export function setCurrentVersion(version: string): void {
|
||||
if (!fs.existsSync(CHANGELOG_DIR)) {
|
||||
fs.mkdirSync(CHANGELOG_DIR, { recursive: true });
|
||||
}
|
||||
fs.writeFileSync(VERSION_FILE, version, 'utf-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a version string (with or without 'v' prefix) into components
|
||||
*/
|
||||
export function parseVersion(version: string): { year: number; month: number; release: number } | null {
|
||||
const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)$/);
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
year: Number(match[1]!),
|
||||
month: Number(match[2]!),
|
||||
release: Number(match[3]!),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the next version based on CalVer (YY.M.N) or SemVer
|
||||
*/
|
||||
export function getNextVersion({ now = new Date() }: { now?: Date } = {}): string {
|
||||
const currentYearMod100 = now.getFullYear() % 100;
|
||||
const currentMonth = now.getMonth() + 1;
|
||||
|
||||
const currentVersion = getCurrentVersion();
|
||||
|
||||
if (!currentVersion) {
|
||||
// No version found, start with CalVer format based on current date
|
||||
return `${currentYearMod100}.${currentMonth}.0`;
|
||||
}
|
||||
|
||||
const parsed = parseVersion(currentVersion);
|
||||
if (!parsed) {
|
||||
// Invalid version format, start fresh
|
||||
return `${currentYearMod100}.${currentMonth}.0`;
|
||||
}
|
||||
|
||||
const { year, month, release } = parsed;
|
||||
|
||||
if (year === currentYearMod100 && month === currentMonth) {
|
||||
// Same month and year, increment release number
|
||||
return `${year}.${month}.${release + 1}`;
|
||||
} else {
|
||||
// New month or year, reset release number
|
||||
return `${currentYearMod100}.${currentMonth}.0`;
|
||||
}
|
||||
}
|
||||
20
packages/changelog/tsconfig.json
Normal file
20
packages/changelog/tsconfig.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ESNext",
|
||||
"moduleDetection": "force",
|
||||
"module": "preserve",
|
||||
"resolveJsonModule": true,
|
||||
"types": ["node"],
|
||||
"allowJs": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noUncheckedIndexedAccess": true,
|
||||
"noEmit": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"isolatedModules": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
"skipLibCheck": true
|
||||
}
|
||||
}
|
||||
10
packages/changelog/vitest.config.ts
Normal file
10
packages/changelog/vitest.config.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { defineConfig } from 'vitest/config';
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
environment: 'node',
|
||||
env: {
|
||||
TZ: 'UTC',
|
||||
},
|
||||
},
|
||||
});
|
||||
219
pnpm-lock.yaml
generated
219
pnpm-lock.yaml
generated
@@ -24,6 +24,9 @@ catalogs:
|
||||
tsdown:
|
||||
specifier: ^0.13.4
|
||||
version: 0.13.4
|
||||
tsx:
|
||||
specifier: ^4.17.0
|
||||
version: 4.20.3
|
||||
typescript:
|
||||
specifier: ^5.6.2
|
||||
version: 5.8.3
|
||||
@@ -457,6 +460,43 @@ importers:
|
||||
specifier: 'catalog:'
|
||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jsdom@26.0.0)
|
||||
|
||||
packages/changelog:
|
||||
dependencies:
|
||||
'@clack/prompts':
|
||||
specifier: ^0.10.1
|
||||
version: 0.10.1
|
||||
'@corentinth/friendly-ids':
|
||||
specifier: ^0.0.1
|
||||
version: 0.0.1
|
||||
gray-matter:
|
||||
specifier: ^4.0.3
|
||||
version: 4.0.3
|
||||
picocolors:
|
||||
specifier: ^1.1.1
|
||||
version: 1.1.1
|
||||
zod:
|
||||
specifier: ^3.25.67
|
||||
version: 3.25.67
|
||||
devDependencies:
|
||||
'@antfu/eslint-config':
|
||||
specifier: 'catalog:'
|
||||
version: 4.16.2(@vue/compiler-sfc@3.5.13)(astro-eslint-parser@1.1.0(typescript@5.8.3))(eslint-plugin-astro@1.3.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jsdom@26.0.0))
|
||||
'@types/node':
|
||||
specifier: 'catalog:'
|
||||
version: 22.16.0
|
||||
eslint:
|
||||
specifier: 'catalog:'
|
||||
version: 9.30.1(jiti@2.4.2)
|
||||
tsx:
|
||||
specifier: 'catalog:'
|
||||
version: 4.20.3
|
||||
typescript:
|
||||
specifier: 'catalog:'
|
||||
version: 5.8.3
|
||||
vitest:
|
||||
specifier: 'catalog:'
|
||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jsdom@26.0.0)
|
||||
|
||||
packages/cli:
|
||||
dependencies:
|
||||
'@clack/prompts':
|
||||
@@ -2462,9 +2502,6 @@ packages:
|
||||
'@jridgewell/sourcemap-codec@1.5.0':
|
||||
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.4':
|
||||
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.5':
|
||||
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
||||
|
||||
@@ -5347,6 +5384,10 @@ packages:
|
||||
exsolve@1.0.5:
|
||||
resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==}
|
||||
|
||||
extend-shallow@2.0.1:
|
||||
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
extend@3.0.2:
|
||||
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
|
||||
|
||||
@@ -5619,6 +5660,10 @@ packages:
|
||||
graphemer@1.4.0:
|
||||
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
||||
|
||||
gray-matter@4.0.3:
|
||||
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
|
||||
engines: {node: '>=6.0'}
|
||||
|
||||
gzip-size@6.0.0:
|
||||
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -5871,6 +5916,10 @@ packages:
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
hasBin: true
|
||||
|
||||
is-extendable@0.1.1:
|
||||
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
is-extglob@2.1.1:
|
||||
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -6059,6 +6108,10 @@ packages:
|
||||
keyv@4.5.4:
|
||||
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
|
||||
|
||||
kind-of@6.0.3:
|
||||
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
kleur@3.0.3:
|
||||
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -6923,9 +6976,6 @@ packages:
|
||||
quansync@0.2.10:
|
||||
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
|
||||
|
||||
quansync@0.2.8:
|
||||
resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==}
|
||||
|
||||
queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
|
||||
@@ -7194,6 +7244,10 @@ packages:
|
||||
resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
|
||||
engines: {node: ^14.0.0 || >=16.0.0}
|
||||
|
||||
section-matter@1.0.0:
|
||||
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
|
||||
engines: {node: '>=4'}
|
||||
|
||||
selderee@0.11.0:
|
||||
resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
|
||||
|
||||
@@ -7450,6 +7504,10 @@ packages:
|
||||
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
strip-bom-string@1.0.0:
|
||||
resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
strip-bom@3.0.0:
|
||||
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -8783,7 +8841,7 @@ snapshots:
|
||||
'@astrojs/telemetry@3.3.0':
|
||||
dependencies:
|
||||
ci-info: 4.2.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
dlv: 1.1.3
|
||||
dset: 3.1.4
|
||||
is-docker: 3.0.0
|
||||
@@ -9379,7 +9437,7 @@ snapshots:
|
||||
'@babel/traverse': 7.26.4
|
||||
'@babel/types': 7.28.0
|
||||
convert-source-map: 2.0.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
gensync: 1.0.0-beta.2
|
||||
json5: 2.2.3
|
||||
semver: 6.3.1
|
||||
@@ -9475,7 +9533,7 @@ snapshots:
|
||||
'@babel/parser': 7.28.0
|
||||
'@babel/template': 7.25.9
|
||||
'@babel/types': 7.28.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
globals: 11.12.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -9849,7 +9907,7 @@ snapshots:
|
||||
'@esbuild-kit/esm-loader@2.6.5':
|
||||
dependencies:
|
||||
'@esbuild-kit/core-utils': 3.3.2
|
||||
get-tsconfig: 4.10.0
|
||||
get-tsconfig: 4.10.1
|
||||
|
||||
'@esbuild/aix-ppc64@0.19.12':
|
||||
optional: true
|
||||
@@ -10323,7 +10381,7 @@ snapshots:
|
||||
'@eslint/config-array@0.20.0':
|
||||
dependencies:
|
||||
'@eslint/object-schema': 2.1.6
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
minimatch: 3.1.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -10331,7 +10389,7 @@ snapshots:
|
||||
'@eslint/config-array@0.21.0':
|
||||
dependencies:
|
||||
'@eslint/object-schema': 2.1.6
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
minimatch: 3.1.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -10355,7 +10413,7 @@ snapshots:
|
||||
'@eslint/eslintrc@3.3.1':
|
||||
dependencies:
|
||||
ajv: 6.12.6
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
espree: 10.4.0
|
||||
globals: 14.0.0
|
||||
ignore: 5.3.2
|
||||
@@ -10491,7 +10549,7 @@ snapshots:
|
||||
'@antfu/install-pkg': 1.1.0
|
||||
'@antfu/utils': 8.1.1
|
||||
'@iconify/types': 2.0.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
globals: 15.15.0
|
||||
kolorist: 1.8.0
|
||||
local-pkg: 1.1.1
|
||||
@@ -10595,13 +10653,13 @@ snapshots:
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.12':
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.4
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
'@jridgewell/trace-mapping': 0.3.29
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.2.1
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2': {}
|
||||
@@ -10610,19 +10668,17 @@ snapshots:
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0': {}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.4': {}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.5': {}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.29':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.4
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
'@js-sdsl/ordered-map@4.4.2': {}
|
||||
|
||||
@@ -11925,7 +11981,7 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.32.1
|
||||
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
|
||||
'@typescript-eslint/visitor-keys': 8.32.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
typescript: 5.8.3
|
||||
transitivePeerDependencies:
|
||||
@@ -11937,7 +11993,7 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.35.1
|
||||
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
|
||||
'@typescript-eslint/visitor-keys': 8.35.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.30.1(jiti@2.4.2)
|
||||
typescript: 5.8.3
|
||||
transitivePeerDependencies:
|
||||
@@ -11947,7 +12003,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3)
|
||||
'@typescript-eslint/types': 8.35.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
typescript: 5.8.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -11980,7 +12036,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
|
||||
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
ts-api-utils: 2.1.0(typescript@5.8.3)
|
||||
typescript: 5.8.3
|
||||
@@ -11991,7 +12047,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
|
||||
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.30.1(jiti@2.4.2)
|
||||
ts-api-utils: 2.1.0(typescript@5.8.3)
|
||||
typescript: 5.8.3
|
||||
@@ -12012,7 +12068,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.19.1
|
||||
'@typescript-eslint/visitor-keys': 8.19.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
@@ -12026,7 +12082,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.21.0
|
||||
'@typescript-eslint/visitor-keys': 8.21.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
@@ -12040,7 +12096,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.32.1
|
||||
'@typescript-eslint/visitor-keys': 8.32.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
@@ -12056,7 +12112,7 @@ snapshots:
|
||||
'@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3)
|
||||
'@typescript-eslint/types': 8.35.1
|
||||
'@typescript-eslint/visitor-keys': 8.35.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
@@ -12178,7 +12234,7 @@ snapshots:
|
||||
chokidar: 3.6.0
|
||||
colorette: 2.0.20
|
||||
consola: 3.4.0
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
pathe: 1.1.2
|
||||
perfect-debounce: 1.0.0
|
||||
tinyglobby: 0.2.14
|
||||
@@ -12272,7 +12328,7 @@ snapshots:
|
||||
'@unocss/rule-utils@0.65.0-beta.2':
|
||||
dependencies:
|
||||
'@unocss/core': 0.65.0-beta.2
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
|
||||
'@unocss/transformer-attributify-jsx@0.65.0-beta.2':
|
||||
dependencies:
|
||||
@@ -12300,7 +12356,7 @@ snapshots:
|
||||
'@unocss/core': 0.65.0-beta.2
|
||||
'@unocss/inspector': 0.65.0-beta.2(vue@3.5.13(typescript@5.8.3))
|
||||
chokidar: 3.6.0
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
tinyglobby: 0.2.14
|
||||
vite: 5.4.19(@types/node@22.16.0)
|
||||
transitivePeerDependencies:
|
||||
@@ -12316,7 +12372,7 @@ snapshots:
|
||||
'@unocss/core': 0.65.0-beta.2
|
||||
'@unocss/inspector': 0.65.0-beta.2(vue@3.5.13(typescript@5.8.3))
|
||||
chokidar: 3.6.0
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
tinyglobby: 0.2.14
|
||||
vite: 6.3.4(@types/node@24.0.10)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
@@ -12393,7 +12449,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.4
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
optionalDependencies:
|
||||
vite: 5.4.19(@types/node@22.16.0)
|
||||
|
||||
@@ -12401,7 +12457,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.4
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
optionalDependencies:
|
||||
vite: 5.4.19(@types/node@24.0.10)
|
||||
|
||||
@@ -12418,7 +12474,7 @@ snapshots:
|
||||
'@vitest/snapshot@3.2.4':
|
||||
dependencies:
|
||||
'@vitest/pretty-format': 3.2.4
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
pathe: 2.0.3
|
||||
|
||||
'@vitest/spy@3.2.4':
|
||||
@@ -12631,7 +12687,7 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.35.1
|
||||
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
|
||||
astrojs-compiler-sync: 1.0.1(@astrojs/compiler@2.11.0)
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
entities: 4.5.0
|
||||
eslint-scope: 8.4.0
|
||||
eslint-visitor-keys: 4.2.1
|
||||
@@ -13255,7 +13311,6 @@ snapshots:
|
||||
debug@4.4.3:
|
||||
dependencies:
|
||||
ms: 2.1.3
|
||||
optional: true
|
||||
|
||||
decimal.js@10.5.0: {}
|
||||
|
||||
@@ -13339,7 +13394,7 @@ snapshots:
|
||||
|
||||
docker-modem@5.0.6:
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
readable-stream: 3.6.2
|
||||
split-ca: 1.0.1
|
||||
ssh2: 1.16.0
|
||||
@@ -13494,7 +13549,7 @@ snapshots:
|
||||
|
||||
esbuild-register@3.6.0(esbuild@0.19.12):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
esbuild: 0.19.12
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -13816,12 +13871,12 @@ snapshots:
|
||||
'@types/doctrine': 0.0.9
|
||||
'@typescript-eslint/scope-manager': 8.19.1
|
||||
'@typescript-eslint/utils': 8.19.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
doctrine: 3.0.0
|
||||
enhanced-resolve: 5.18.0
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
get-tsconfig: 4.10.0
|
||||
get-tsconfig: 4.10.1
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
semver: 7.7.2
|
||||
@@ -13836,7 +13891,7 @@ snapshots:
|
||||
'@es-joy/jsdoccomment': 0.50.1
|
||||
are-docs-informative: 0.0.2
|
||||
comment-parser: 1.4.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
escape-string-regexp: 4.0.0
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
espree: 10.4.0
|
||||
@@ -13852,7 +13907,7 @@ snapshots:
|
||||
'@es-joy/jsdoccomment': 0.52.0
|
||||
are-docs-informative: 0.0.2
|
||||
comment-parser: 1.4.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
escape-string-regexp: 4.0.0
|
||||
eslint: 9.30.1(jiti@2.4.2)
|
||||
espree: 10.4.0
|
||||
@@ -13897,7 +13952,7 @@ snapshots:
|
||||
enhanced-resolve: 5.18.0
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
eslint-plugin-es-x: 7.8.0(eslint@9.27.0(jiti@2.4.2))
|
||||
get-tsconfig: 4.10.0
|
||||
get-tsconfig: 4.10.1
|
||||
globals: 15.14.0
|
||||
ignore: 5.3.2
|
||||
minimatch: 9.0.5
|
||||
@@ -13974,7 +14029,7 @@ snapshots:
|
||||
|
||||
eslint-plugin-toml@0.12.0(eslint@9.27.0(jiti@2.4.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
eslint-compat-utils: 0.6.4(eslint@9.27.0(jiti@2.4.2))
|
||||
lodash: 4.17.21
|
||||
@@ -13984,7 +14039,7 @@ snapshots:
|
||||
|
||||
eslint-plugin-toml@0.12.0(eslint@9.30.1(jiti@2.4.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.30.1(jiti@2.4.2)
|
||||
eslint-compat-utils: 0.6.4(eslint@9.30.1(jiti@2.4.2))
|
||||
lodash: 4.17.21
|
||||
@@ -14074,7 +14129,7 @@ snapshots:
|
||||
|
||||
eslint-plugin-yml@1.16.0(eslint@9.27.0(jiti@2.4.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
eslint-compat-utils: 0.6.4(eslint@9.27.0(jiti@2.4.2))
|
||||
lodash: 4.17.21
|
||||
@@ -14085,7 +14140,7 @@ snapshots:
|
||||
|
||||
eslint-plugin-yml@1.18.0(eslint@9.30.1(jiti@2.4.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
escape-string-regexp: 4.0.0
|
||||
eslint: 9.30.1(jiti@2.4.2)
|
||||
eslint-compat-utils: 0.6.5(eslint@9.30.1(jiti@2.4.2))
|
||||
@@ -14185,7 +14240,7 @@ snapshots:
|
||||
ajv: 6.12.6
|
||||
chalk: 4.1.2
|
||||
cross-spawn: 7.0.6
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
escape-string-regexp: 4.0.0
|
||||
eslint-scope: 8.4.0
|
||||
eslint-visitor-keys: 4.2.1
|
||||
@@ -14295,6 +14350,10 @@ snapshots:
|
||||
|
||||
exsolve@1.0.5: {}
|
||||
|
||||
extend-shallow@2.0.1:
|
||||
dependencies:
|
||||
is-extendable: 0.1.1
|
||||
|
||||
extend@3.0.2: {}
|
||||
|
||||
extendable-error@0.1.7: {}
|
||||
@@ -14481,7 +14540,7 @@ snapshots:
|
||||
gel@2.0.1:
|
||||
dependencies:
|
||||
'@petamoriken/float16': 3.9.1
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
env-paths: 3.0.0
|
||||
semver: 7.7.2
|
||||
shell-quote: 1.8.2
|
||||
@@ -14592,6 +14651,13 @@ snapshots:
|
||||
|
||||
graphemer@1.4.0: {}
|
||||
|
||||
gray-matter@4.0.3:
|
||||
dependencies:
|
||||
js-yaml: 3.14.1
|
||||
kind-of: 6.0.3
|
||||
section-matter: 1.0.0
|
||||
strip-bom-string: 1.0.0
|
||||
|
||||
gzip-size@6.0.0:
|
||||
dependencies:
|
||||
duplexer: 0.1.2
|
||||
@@ -14852,7 +14918,7 @@ snapshots:
|
||||
http-proxy-agent@7.0.2:
|
||||
dependencies:
|
||||
agent-base: 7.1.3
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -14867,7 +14933,7 @@ snapshots:
|
||||
https-proxy-agent@7.0.6:
|
||||
dependencies:
|
||||
agent-base: 7.1.3
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -14907,7 +14973,7 @@ snapshots:
|
||||
importx@0.4.4:
|
||||
dependencies:
|
||||
bundle-require: 5.1.0(esbuild@0.23.1)
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
esbuild: 0.23.1
|
||||
jiti: 2.0.0-beta.3
|
||||
jiti-v1: jiti@1.21.7
|
||||
@@ -14969,6 +15035,8 @@ snapshots:
|
||||
|
||||
is-docker@3.0.0: {}
|
||||
|
||||
is-extendable@0.1.1: {}
|
||||
|
||||
is-extglob@2.1.1: {}
|
||||
|
||||
is-fullwidth-code-point@3.0.0: {}
|
||||
@@ -15024,7 +15092,7 @@ snapshots:
|
||||
istanbul-lib-source-maps@5.0.6:
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.29
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
istanbul-lib-coverage: 3.2.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -15159,6 +15227,8 @@ snapshots:
|
||||
dependencies:
|
||||
json-buffer: 3.0.1
|
||||
|
||||
kind-of@6.0.3: {}
|
||||
|
||||
kleur@3.0.3: {}
|
||||
|
||||
kleur@4.1.5: {}
|
||||
@@ -15206,7 +15276,7 @@ snapshots:
|
||||
dependencies:
|
||||
mlly: 1.7.4
|
||||
pkg-types: 2.1.0
|
||||
quansync: 0.2.8
|
||||
quansync: 0.2.10
|
||||
|
||||
locate-path@5.0.0:
|
||||
dependencies:
|
||||
@@ -15796,7 +15866,7 @@ snapshots:
|
||||
micromark@4.0.1:
|
||||
dependencies:
|
||||
'@types/debug': 4.1.12
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
decode-named-character-reference: 1.0.2
|
||||
devlop: 1.1.0
|
||||
micromark-core-commonmark: 2.0.2
|
||||
@@ -16330,8 +16400,6 @@ snapshots:
|
||||
|
||||
quansync@0.2.10: {}
|
||||
|
||||
quansync@0.2.8: {}
|
||||
|
||||
queue-microtask@1.2.3: {}
|
||||
|
||||
radix3@1.1.2: {}
|
||||
@@ -16643,7 +16711,7 @@ snapshots:
|
||||
'@babel/types': 7.28.2
|
||||
ast-kit: 2.1.1
|
||||
birpc: 2.5.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
dts-resolver: 2.1.1
|
||||
get-tsconfig: 4.10.1
|
||||
rolldown: 1.0.0-beta.31
|
||||
@@ -16740,6 +16808,11 @@ snapshots:
|
||||
refa: 0.12.1
|
||||
regexp-ast-analysis: 0.7.1
|
||||
|
||||
section-matter@1.0.0:
|
||||
dependencies:
|
||||
extend-shallow: 2.0.1
|
||||
kind-of: 6.0.3
|
||||
|
||||
selderee@0.11.0:
|
||||
dependencies:
|
||||
parseley: 0.12.1
|
||||
@@ -17063,6 +17136,8 @@ snapshots:
|
||||
dependencies:
|
||||
ansi-regex: 6.1.0
|
||||
|
||||
strip-bom-string@1.0.0: {}
|
||||
|
||||
strip-bom@3.0.0: {}
|
||||
|
||||
strip-indent@3.0.0:
|
||||
@@ -17352,7 +17427,7 @@ snapshots:
|
||||
tsx@4.20.3:
|
||||
dependencies:
|
||||
esbuild: 0.25.2
|
||||
get-tsconfig: 4.10.0
|
||||
get-tsconfig: 4.10.1
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
|
||||
@@ -17620,7 +17695,7 @@ snapshots:
|
||||
vite-node@3.2.4(@types/node@22.16.0):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
es-module-lexer: 1.7.0
|
||||
pathe: 2.0.3
|
||||
vite: 5.4.19(@types/node@22.16.0)
|
||||
@@ -17638,7 +17713,7 @@ snapshots:
|
||||
vite-node@3.2.4(@types/node@24.0.10):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
es-module-lexer: 1.7.0
|
||||
pathe: 2.0.3
|
||||
vite: 5.4.19(@types/node@24.0.10)
|
||||
@@ -17750,9 +17825,9 @@ snapshots:
|
||||
'@vitest/spy': 3.2.4
|
||||
'@vitest/utils': 3.2.4
|
||||
chai: 5.2.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
expect-type: 1.2.1
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.2
|
||||
std-env: 3.9.0
|
||||
@@ -17783,16 +17858,16 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/chai': 5.2.2
|
||||
'@vitest/expect': 3.2.4
|
||||
'@vitest/mocker': 3.2.4(vite@5.4.19(@types/node@24.0.10))
|
||||
'@vitest/mocker': 3.2.4(vite@5.4.19(@types/node@22.16.0))
|
||||
'@vitest/pretty-format': 3.2.4
|
||||
'@vitest/runner': 3.2.4
|
||||
'@vitest/snapshot': 3.2.4
|
||||
'@vitest/spy': 3.2.4
|
||||
'@vitest/utils': 3.2.4
|
||||
chai: 5.2.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
expect-type: 1.2.1
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.2
|
||||
std-env: 3.9.0
|
||||
@@ -17830,9 +17905,9 @@ snapshots:
|
||||
'@vitest/spy': 3.2.4
|
||||
'@vitest/utils': 3.2.4
|
||||
chai: 5.2.0
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
expect-type: 1.2.1
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.19
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.2
|
||||
std-env: 3.9.0
|
||||
@@ -17861,7 +17936,7 @@ snapshots:
|
||||
|
||||
vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.30.1(jiti@2.4.2)
|
||||
eslint-scope: 8.4.0
|
||||
eslint-visitor-keys: 4.2.1
|
||||
@@ -17873,7 +17948,7 @@ snapshots:
|
||||
|
||||
vue-eslint-parser@9.4.3(eslint@9.27.0(jiti@2.4.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
debug: 4.4.3
|
||||
eslint: 9.27.0(jiti@2.4.2)
|
||||
eslint-scope: 7.2.2
|
||||
eslint-visitor-keys: 3.4.3
|
||||
|
||||
Reference in New Issue
Block a user