diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8063fdc..a057111 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,7 +53,7 @@ jobs: run: | VERSION="${{ steps.package_version.outputs.version }}" echo "Extracting release notes for version $VERSION from CHANGELOG.md" - + if [ ! -f CHANGELOG.md ]; then echo "CHANGELOG.md not found, using PR information" echo "## Changes" > release_notes.md @@ -119,12 +119,12 @@ jobs: fi fi fi - + echo "Generated release notes:" echo "========================" cat release_notes.md echo "========================" - + # Set output for GitHub Actions echo "notes<> $GITHUB_OUTPUT cat release_notes.md >> $GITHUB_OUTPUT @@ -161,4 +161,4 @@ jobs: if: steps.check_tag.outputs.tag_exists == 'true' run: | echo "Tag ${{ steps.package_version.outputs.tag }} already exists, skipping release creation" - echo "If you need to create a new release, update the version in package.json" \ No newline at end of file + echo "If you need to create a new release, update the version in package.json" diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bccc9c..7f05e84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,43 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.2.0] - 2026-05-06 + +### Added + +- `unoff create penpot-plugin` — scaffold a Penpot plugin using the new `unoff-template-penpot` submodule +- Penpot plugin template (`unoff-template-penpot`) wired as a git submodule (`templates/penpot`) + +### Changed + +- `penpot-plugin` moved from "coming soon" to available in `create` command, `unoff help`, and README +- Quick Example in README extended with Penpot workflow and plugin loading instructions + +### Fixed + +- `penpot.ui.onMessage` was incorrectly assigned as a property; corrected to a method call `penpot.ui.onMessage(callback)` — resolves *"Cannot assign to read only property"* error introduced in Penpot 2.15+ + +### Skills (`unoff-skills`) + +- Bridge and Canvas skill layers restructured into platform subdirectories: + - `bridge/figma/` + `bridge/penpot/` — communication pattern and bridge functions per platform + - `canvas/figma/` + `canvas/penpot/` — API, storage, and document generation per platform +- `app-bootstrap` skill updated with separate Figma and Penpot Canvas initialization sections +- `implement-design` skill extended with the Penpot MCP workflow (code-execution model via `@penpot/mcp`, selection-based, no URL parsing) +- Platform-specific annotations added to `app-bootstrap`, `error-handling`, `css-theming`, `i18n`, `state-management`, `payment-systems`, `types-system`, `credits-system` +- `SKILL.md` index updated to reflect the platform-split structure and improve agent routing + +### Templates (Figma + Penpot) + +- All AI tool rule files (CLAUDE.md, `.cursor/rules/project.mdc`, `.windsurf/rules/project.md`, `.github/copilot-instructions.md`) updated with new skill paths +- Penpot template: all Figma identity references corrected to Penpot (developer role, API calls, communication examples) +- Section comments added to all bridge files across both templates: + - `loadUI.ts` — Startup / Announcements / Preferences / Storage / Browser / Plans / Auth + - `checkCredits.ts` — 4 storage cases documented inline + - `checkTrialStatus.ts` — storage reads, trial status, plan status, send result + - `checkAnnouncementsStatus.ts` — storage reads, version comparison + - Short files (`checkUserLicense`, `checkUserPreferences`, `checkEditor`, `enableTrial`, `payProPlan`) — descriptive header comment + ## [0.1.5] - 2026-03-18 ### Changed @@ -103,6 +140,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - 🚧 Sketch plugin template (coming soon) - 🚧 Framer plugin template (coming soon) +[0.2.0]: https://github.com/yelbolt/unoff-cli/compare/v0.1.5...v0.2.0 [0.1.5]: https://github.com/yelbolt/unoff-cli/compare/v0.1.4...v0.1.5 [0.1.4]: https://github.com/yelbolt/unoff-cli/compare/v0.1.3...v0.1.4 [0.1.3]: https://github.com/yelbolt/unoff-cli/compare/v0.1.2...v0.1.3 diff --git a/README.md b/README.md index 303d5e1..42e472f 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ If you don't have Homebrew installed, open **Terminal** and install it: ``` Then verify: + ```bash brew --version ``` @@ -27,12 +28,14 @@ brew --version **On macOS:** Open **Terminal** and run: + ```bash # Using Homebrew (requires Homebrew to be installed) brew install node ``` **On Windows:** + 1. Download the installer from [nodejs.org](https://nodejs.org) 2. Run the installer and follow the setup wizard 3. Open **Command Prompt** (cmd.exe) or **PowerShell** and verify installation: @@ -43,6 +46,7 @@ brew install node **On Linux (Ubuntu/Debian):** Open **Terminal** and run: + ```bash sudo apt update sudo apt install nodejs npm @@ -50,6 +54,7 @@ sudo apt install nodejs npm **On Linux (Fedora/CentOS):** Open **Terminal** and run: + ```bash sudo dnf install nodejs npm ``` @@ -58,12 +63,14 @@ sudo dnf install nodejs npm **On macOS:** Open **Terminal** and run: + ```bash # Using Homebrew brew install git ``` **On Windows:** + 1. Download the installer from [git-scm.com](https://git-scm.com) 2. Run the installer and follow the setup wizard 3. Open **Command Prompt** (cmd.exe) or **PowerShell** and verify installation: @@ -73,6 +80,7 @@ brew install git **On Linux (Ubuntu/Debian):** Open **Terminal** and run: + ```bash sudo apt update sudo apt install git @@ -80,6 +88,7 @@ sudo apt install git **On Linux (Fedora/CentOS):** Open **Terminal** and run: + ```bash sudo dnf install git ``` @@ -107,8 +116,11 @@ npm install -g @unoff/cli # Create a new Figma plugin (will prompt for name) unoff create figma-plugin +# Or create a Penpot plugin +unoff create penpot-plugin + # Navigate to the plugin directory -cd color-palette-generator +cd my-plugin # Install dependencies npm install @@ -116,9 +128,8 @@ npm install # Start development unoff dev -# Open Figma and load the plugin: -# Plugins > Development > Import plugin from manifest... -# Select manifest.json from the plugin folder +# Figma: Plugins > Development > Import plugin from manifest... +# Penpot: Plugins > Add custom plugin > http://localhost:4400/manifest.json ``` ## CLI Commands @@ -131,21 +142,21 @@ Show all commands, available platforms, and workers. Scaffold a new plugin project. -| Platform | Status | -| -------- | ------ | -| `figma-plugin` | ✅ Available | -| `penpot-plugin` | 🚧 Coming soon | +| Platform | Status | +| --------------- | -------------- | +| `figma-plugin` | ✅ Available | +| `penpot-plugin` | ✅ Available | | `sketch-plugin` | 🚧 Coming soon | | `framer-plugin` | 🚧 Coming soon | The interactive prompt will ask for plugin name, output directory, GitHub username, author, license, and which external services to enable: -| Service | Default | -| ------- | ------- | -| Supabase (Database & Authentication) | ✅ | -| Mixpanel (Analytics) | ✅ | -| Sentry (Error Monitoring) | ✅ | -| Notion (Announcements & Onboarding) | ✅ | +| Service | Default | +| ------------------------------------ | ------- | +| Supabase (Database & Authentication) | ✅ | +| Mixpanel (Analytics) | ✅ | +| Sentry (Error Monitoring) | ✅ | +| Notion (Announcements & Onboarding) | ✅ | Selected services update the `is*Enabled` flags in `global.config.ts`. All environment variable placeholders are always generated in `.env.local`. @@ -173,11 +184,11 @@ Format source code with Prettier. Add a Cloudflare Worker as a git submodule. Automatically updates `package.json` workspaces and injects the corresponding start script. You will be prompted for the destination path. -| Worker | Script | Port | -| --------------- | --------------------- | ---- | -| `announcement` | `start:announcements` | 8888 | -| `auth` | `start:token` | 8787 | -| `cors` | `start:cors` | 8989 | +| Worker | Script | Port | +| -------------- | --------------------- | ---- | +| `announcement` | `start:announcements` | 8888 | +| `auth` | `start:token` | 8787 | +| `cors` | `start:cors` | 8989 | ```bash unoff add worker announcement @@ -231,7 +242,7 @@ unoff remove specs ## Features - 🚀 Quick setup with interactive CLI -- 📦 Multiple platform support (Figma ✅, Penpot 🚧, Sketch 🚧, Framer 🚧) +- 📦 Multiple platform support (Figma ✅, Penpot ✅, Sketch 🚧, Framer 🚧) - 🔧 Built-in development server with hot reload - 🏗️ Production-ready build system - 🎛️ Toggleable external services (Supabase, Mixpanel, Sentry, Notion) diff --git a/USAGE.md b/USAGE.md index 620f4e0..610a12e 100644 --- a/USAGE.md +++ b/USAGE.md @@ -105,11 +105,11 @@ Add a Cloudflare Worker as a git submodule, register it in `package.json` worksp **Available workers:** -| Worker | Script added | Port | -|---|---|---| +| Worker | Script added | Port | +| --------------------- | --------------------- | ---- | | `announcement-worker` | `start:announcements` | 8888 | -| `auth-worker` | `start:token` | 8787 | -| `cors-worker` | `start:cors` | 8989 | +| `auth-worker` | `start:token` | 8787 | +| `cors-worker` | `start:cors` | 8989 | **Examples:** @@ -142,6 +142,7 @@ unoff remove announcement-worker ``` This command: + 1. Looks up the submodule path from `.gitmodules` 2. Asks for confirmation 3. Runs `git submodule deinit` + `git rm` diff --git a/package-lock.json b/package-lock.json index df9764b..fd57153 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@unoff/cli", - "version": "0.1.6", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@unoff/cli", - "version": "0.1.6", + "version": "0.2.0", "license": "MPL-2.0", "dependencies": { "chalk": "^5.3.0", diff --git a/package.json b/package.json index 3ca4d5a..9d3c977 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@unoff/cli", - "version": "0.1.6", + "version": "0.2.0", "description": "A CLI tool to create plugins for Figma, Penpot, Sketch, and Framer", "main": "dist/index.js", "type": "module", diff --git a/src/cli.ts b/src/cli.ts index 2bf6f70..6337af5 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -15,14 +15,14 @@ program .description( 'CLI tool to create plugins for Figma, Penpot, Sketch, and Framer' ) - .version('0.1.0') + .version('0.2.0') program .command('create ') .description('Create a new plugin for a specific platform') .action(async (platform: string) => { - const availablePlatforms = ['figma-plugin'] - const comingSoonPlatforms = ['penpot-plugin', 'sketch-plugin', 'framer-plugin'] + const availablePlatforms = ['figma-plugin', 'penpot-plugin'] + const comingSoonPlatforms = ['sketch-plugin', 'framer-plugin'] const allPlatforms = [...availablePlatforms, ...comingSoonPlatforms] if (!allPlatforms.includes(platform)) { diff --git a/src/commands/add.ts b/src/commands/add.ts index 0aab422..ceaf957 100644 --- a/src/commands/add.ts +++ b/src/commands/add.ts @@ -24,26 +24,23 @@ Your content here. ` export function toTitleCase(str: string): string { - return str - .replace(/-/g, ' ') - .replace(/\b\w/g, (c) => c.toUpperCase()) + return str.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()) } export const WORKERS: Record = { - 'announcement': - 'https://github.com/a-ng-d/announcements-yelbolt-worker', - 'auth': 'https://github.com/a-ng-d/auth-yelbolt-worker', - 'cors': 'https://github.com/a-ng-d/cors-yelbolt-worker', + announcement: 'https://github.com/a-ng-d/announcements-yelbolt-worker', + auth: 'https://github.com/a-ng-d/auth-yelbolt-worker', + cors: 'https://github.com/a-ng-d/cors-yelbolt-worker', } export const WORKER_SCRIPTS: Record> = { - 'announcement': { + announcement: { 'start:announcements': 'npm run start:8888 -w announcements-yelbolt-worker', }, - 'auth': { + auth: { 'start:token': 'npm run start:8787 -w auth-yelbolt-worker', }, - 'cors': { + cors: { 'start:cors': 'npm run start:8989 -w cors-yelbolt-worker', }, } @@ -326,7 +323,10 @@ export async function addSpecs() { const spinner = ora('Creating spec...').start() await fs.ensureDir(specsPath) - await fs.writeFile(specFilePath, SPEC_TEMPLATE(specName, toTitleCase(specName))) + await fs.writeFile( + specFilePath, + SPEC_TEMPLATE(specName, toTitleCase(specName)) + ) spinner.succeed( chalk.green( diff --git a/src/commands/create.ts b/src/commands/create.ts index 7b33926..2226a06 100644 --- a/src/commands/create.ts +++ b/src/commands/create.ts @@ -271,14 +271,26 @@ export async function createPlugin(platform: string) { encoding: 'utf-8', }) if (gitInit.status === 0) { - spinner.succeed(chalk.green('Plugin created successfully! Git repository initialized.')) + spinner.succeed( + chalk.green( + 'Plugin created successfully! Git repository initialized.' + ) + ) } else { spinner.succeed(chalk.green('Plugin created successfully!')) - console.warn(chalk.yellow('⚠️ Could not initialize git repository. Run `git init` manually.')) + console.warn( + chalk.yellow( + '⚠️ Could not initialize git repository. Run `git init` manually.' + ) + ) } } else { spinner.succeed(chalk.green('Plugin created successfully!')) - console.warn(chalk.yellow('⚠️ git is not available. Run `git init` manually before using `unoff add`.')) + console.warn( + chalk.yellow( + '⚠️ git is not available. Run `git init` manually before using `unoff add`.' + ) + ) } console.log(chalk.cyan('\n📦 Next steps:\n')) @@ -434,6 +446,8 @@ VITE_TOLGEE_API_KEY='YOUR_TOLGEE_API_KEY' // Generate .env.sentry-build-plugin const envSentryContent = `# Sentry Build Plugin Configuration # Generate your auth token from: https://sentry.io/settings/account/api/auth-tokens/ +SENTRY_ORG='YOUR_SENTRY_ORG' +SENTRY_PROJECT='YOUR_SENTRY_PROJECT' SENTRY_AUTH_TOKEN='YOUR_SENTRY_AUTH_TOKEN' ` await fs.writeFile(envSentryPath, envSentryContent, 'utf-8') diff --git a/src/commands/help.ts b/src/commands/help.ts index 00ae2ee..7d575d7 100644 --- a/src/commands/help.ts +++ b/src/commands/help.ts @@ -1,18 +1,14 @@ import chalk from 'chalk' import { WORKERS, WORKER_SCRIPTS, SKILLS_REPO } from './add.js' -const AVAILABLE_PLATFORMS = ['figma-plugin'] -const COMING_SOON_PLATFORMS = [ - 'penpot-plugin', - 'sketch-plugin', - 'framer-plugin', -] +const AVAILABLE_PLATFORMS = ['figma-plugin', 'penpot-plugin'] +const COMING_SOON_PLATFORMS = ['sketch-plugin', 'framer-plugin'] const SERVICES = [ { name: 'supabase', label: 'Supabase (Database & Authentication)' }, { name: 'mixpanel', label: 'Mixpanel (Analytics)' }, - { name: 'sentry', label: 'Sentry (Error Monitoring)' }, - { name: 'notion', label: 'Notion (Announcements & Onboarding)' }, + { name: 'sentry', label: 'Sentry (Error Monitoring)' }, + { name: 'notion', label: 'Notion (Announcements & Onboarding)' }, ] function row(cmd: string, desc: string) { @@ -21,29 +17,30 @@ function row(cmd: string, desc: string) { function workerRow(name: string) { const scripts = Object.keys(WORKER_SCRIPTS[name] ?? {}) - const scriptLabel = scripts.length ? chalk.gray(`→ adds: ${scripts.join(', ')}`) : '' + const scriptLabel = scripts.length + ? chalk.gray(`→ adds: ${scripts.join(', ')}`) + : '' return ` ${chalk.yellow((' ' + name).padEnd(36))}${scriptLabel}` } export function showHelp() { console.log() - console.log(chalk.bold.white(' unoff') + chalk.gray(' — Unofficial Plugin CLI')) + console.log( + chalk.bold.white(' unoff') + chalk.gray(' — Unofficial Plugin CLI') + ) console.log() console.log(chalk.bold('USAGE')) - console.log(` ${chalk.cyan('unoff')} ${chalk.white('')} ${chalk.gray('[options]')}`) + console.log( + ` ${chalk.cyan('unoff')} ${chalk.white('')} ${chalk.gray('[options]')}` + ) console.log() console.log(chalk.bold('COMMANDS')) console.log() console.log(chalk.dim(' — Project')) - console.log( - row( - `create `, - 'Scaffold a new plugin project' - ) - ) + console.log(row(`create `, 'Scaffold a new plugin project')) console.log( chalk.gray(` ${''.padEnd(36)}Available: ${AVAILABLE_PLATFORMS.join(', ')}`) ) @@ -52,7 +49,11 @@ export function showHelp() { ` ${''.padEnd(36)}Coming soon: ${COMING_SOON_PLATFORMS.join(', ')}` ) ) - console.log(chalk.gray(` ${''.padEnd(36)}Services (toggleable, all enabled by default):`)) + console.log( + chalk.gray( + ` ${''.padEnd(36)}Services (toggleable, all enabled by default):` + ) + ) for (const s of SERVICES) { console.log(chalk.gray(` ${''.padEnd(38)}· ${s.label}`)) } @@ -61,23 +62,34 @@ export function showHelp() { console.log(chalk.dim(' — Development')) console.log(row('dev', 'Start development mode (npm run start:dev)')) console.log(row('build', 'Build for production (npm run build:prod)')) - console.log(row('check', 'Lint + typecheck (npm run lint && typecheck)')) + console.log( + row('check', 'Lint + typecheck (npm run lint && typecheck)') + ) console.log(row('format', 'Format source code (npm run format)')) console.log() console.log(chalk.dim(' — Add')) - console.log(row('add worker ', 'Add a Cloudflare Worker as a git submodule')) + console.log( + row('add worker ', 'Add a Cloudflare Worker as a git submodule') + ) console.log(chalk.gray(' Available workers:')) for (const name of Object.keys(WORKERS)) { console.log(workerRow(name)) } console.log(row('add skills', 'Add the unoff-skills repo as a git submodule')) console.log(chalk.gray(` ${''.padEnd(36)}Repo: ${SKILLS_REPO}`)) - console.log(row('add specs', 'Create a local specs folder with an empty skill template')) + console.log( + row('add specs', 'Create a local specs folder with an empty skill template') + ) console.log() console.log(chalk.dim(' — Remove')) - console.log(row('remove worker ', 'Remove a worker submodule and clean up package.json')) + console.log( + row( + 'remove worker ', + 'Remove a worker submodule and clean up package.json' + ) + ) console.log(row('remove skills', 'Remove the skills submodule')) console.log(row('remove specs', 'Remove the local specs folder')) console.log() @@ -85,6 +97,7 @@ export function showHelp() { console.log(chalk.bold('EXAMPLES')) console.log() console.log(` ${chalk.gray('$')} unoff create figma-plugin`) + console.log(` ${chalk.gray('$')} unoff create penpot-plugin`) console.log(` ${chalk.gray('$')} unoff dev`) console.log(` ${chalk.gray('$')} unoff add worker announcement`) console.log(` ${chalk.gray('$')} unoff add skills`) diff --git a/src/commands/remove.ts b/src/commands/remove.ts index 3554fd9..0fe2437 100644 --- a/src/commands/remove.ts +++ b/src/commands/remove.ts @@ -48,7 +48,9 @@ export async function removeWorker(workerName: string) { const gitmodulesContent = await fs.readFile(gitmodulesPath, 'utf-8') if (!gitmodulesContent.includes(repoUrl)) { console.error( - chalk.red(`\n❌ Worker "${workerName}" is not registered as a submodule.\n`) + chalk.red( + `\n❌ Worker "${workerName}" is not registered as a submodule.\n` + ) ) process.exit(1) } @@ -57,7 +59,9 @@ export async function removeWorker(workerName: string) { const submodulePath = extractSubmodulePath(gitmodulesContent, repoUrl) if (!submodulePath) { console.error( - chalk.red(`\n❌ Could not determine submodule path for "${workerName}".\n`) + chalk.red( + `\n❌ Could not determine submodule path for "${workerName}".\n` + ) ) process.exit(1) } @@ -103,7 +107,9 @@ export async function removeWorker(workerName: string) { } spinner.succeed( - chalk.green(`Submodule ${chalk.cyan(workerName)} removed from ${chalk.white(submodulePath)}`) + chalk.green( + `Submodule ${chalk.cyan(workerName)} removed from ${chalk.white(submodulePath)}` + ) ) // Update package.json: workspaces + scripts @@ -149,7 +155,10 @@ export async function removeWorker(workerName: string) { console.log(chalk.cyan('\n✨ Done!\n')) } -function extractSubmodulePath(gitmodulesContent: string, repoUrl: string): string | null { +function extractSubmodulePath( + gitmodulesContent: string, + repoUrl: string +): string | null { // Parse .gitmodules to find the path for a given URL const blocks = gitmodulesContent.split(/\[submodule\s+/) for (const block of blocks) { @@ -179,7 +188,9 @@ export async function removeSkills() { if (!fs.existsSync(gitmodulesPath)) { console.error( - chalk.red(`\n❌ No .gitmodules found. Have you added a skills submodule?\n`) + chalk.red( + `\n❌ No .gitmodules found. Have you added a skills submodule?\n` + ) ) process.exit(1) } @@ -259,9 +270,7 @@ export async function removeSpecs() { const specsPath = path.resolve(cwd, specsDir) if (!fs.existsSync(specsPath)) { - console.error( - chalk.red(`\n❌ Folder "${specsDir}" does not exist.\n`) - ) + console.error(chalk.red(`\n❌ Folder "${specsDir}" does not exist.\n`)) process.exit(1) } @@ -283,9 +292,7 @@ export async function removeSpecs() { await fs.remove(specsPath) - spinner.succeed( - chalk.green(`Specs folder ${chalk.white(specsDir)} removed`) - ) + spinner.succeed(chalk.green(`Specs folder ${chalk.white(specsDir)} removed`)) console.log(chalk.cyan('\n✨ Done!\n')) } diff --git a/templates/figma b/templates/figma index 58d1574..3f0c036 160000 --- a/templates/figma +++ b/templates/figma @@ -1 +1 @@ -Subproject commit 58d1574fbc92c01858da3c0f2ae3cd7cc5842db6 +Subproject commit 3f0c0367933c0432297e5530f16f9581b2ff3aaf diff --git a/templates/penpot b/templates/penpot index 27f5f3a..5915b71 160000 --- a/templates/penpot +++ b/templates/penpot @@ -1 +1 @@ -Subproject commit 27f5f3aaef47d83ab059be98a6d40c7298dd5b01 +Subproject commit 5915b71fea155104e3b801212990ef0e966fbfbc diff --git a/tests/specs.test.ts b/tests/specs.test.ts index 3182113..b73c592 100644 --- a/tests/specs.test.ts +++ b/tests/specs.test.ts @@ -12,7 +12,9 @@ import inquirer from 'inquirer' import { addSpecs } from '../src/commands/add.js' import { removeSpecs } from '../src/commands/remove.js' -const mockPrompt = vi.mocked(inquirer.prompt as (...args: unknown[]) => Promise) +const mockPrompt = vi.mocked( + inquirer.prompt as (...args: unknown[]) => Promise +) // Sentinel error to distinguish process.exit calls from real errors class ProcessExitError extends Error { @@ -60,7 +62,13 @@ describe('addSpecs()', () => { await addSpecs() - const filePath = path.join(tmpDir, 'deep', 'nested', 'specs', 'test-spec.md') + const filePath = path.join( + tmpDir, + 'deep', + 'nested', + 'specs', + 'test-spec.md' + ) expect(fs.existsSync(filePath)).toBe(true) }) diff --git a/vitest.config.d.ts b/vitest.config.d.ts index 2b17c25..21a43f6 100644 --- a/vitest.config.d.ts +++ b/vitest.config.d.ts @@ -1,3 +1,3 @@ -declare const _default: import("vite").UserConfig; -export default _default; -//# sourceMappingURL=vitest.config.d.ts.map \ No newline at end of file +declare const _default: import('vite').UserConfig +export default _default +//# sourceMappingURL=vitest.config.d.ts.map diff --git a/vitest.config.js b/vitest.config.js index d70a276..b120c83 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -1,7 +1,7 @@ -import { defineConfig } from 'vitest/config'; +import { defineConfig } from 'vitest/config' export default defineConfig({ - test: { - environment: 'node', - globals: true, - }, -}); + test: { + environment: 'node', + globals: true, + }, +})