chore: init oxc
This commit is contained in:
196
.agents/skills/migrate-oxlint/SKILL.md
Normal file
196
.agents/skills/migrate-oxlint/SKILL.md
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
name: migrate-oxlint
|
||||
description: Guide for migrating a project from ESLint to Oxlint. Use when asked to migrate, convert, or switch a JavaScript/TypeScript project's linter from ESLint to Oxlint.
|
||||
---
|
||||
|
||||
This skill guides you through migrating a JavaScript/TypeScript project from ESLint to [Oxlint](https://oxc.rs/docs/guide/usage/linter/).
|
||||
|
||||
## Overview
|
||||
|
||||
Oxlint is a high-performance linter that implements many popular ESLint rules natively in Rust. It can be used alongside ESLint or as a full replacement.
|
||||
|
||||
An official migration tool is available, and will be used by this skill: [`@oxlint/migrate`](https://github.com/oxc-project/oxlint-migrate)
|
||||
|
||||
## Step 1: Run Automated Migration
|
||||
|
||||
Run the migration tool in the project root:
|
||||
|
||||
```bash
|
||||
npx @oxlint/migrate
|
||||
```
|
||||
|
||||
This reads your ESLint flat config (`eslint.config.js` for example) and generates a `.oxlintrc.json` file from it. It will find your ESLint config file automatically in most cases.
|
||||
|
||||
See options below for more info.
|
||||
|
||||
### Key Options
|
||||
|
||||
| Option | Description |
|
||||
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `--type-aware` | Include type-aware rules from `@typescript-eslint` (will require the `oxlint-tsgolint` package to be installed after migrating) |
|
||||
| `--with-nursery` | Include experimental rules still under development, may not be fully stable or consistent with ESLint equivalents |
|
||||
| `--js-plugins [bool]` | Enable/disable ESLint plugin migration via `jsPlugins` (default: enabled) |
|
||||
| `--details` | List rules that could not be migrated |
|
||||
| `--replace-eslint-comments` | Convert all `// eslint-disable` comments to `// oxlint-disable` |
|
||||
| `--output-file <file>` | Specify a different output path (default: `.oxlintrc.json`) |
|
||||
|
||||
If your ESLint config is not at the default location, pass the path explicitly:
|
||||
|
||||
```bash
|
||||
npx @oxlint/migrate ./path/to/eslint.config.js
|
||||
```
|
||||
|
||||
## Step 2: Review Generated Config
|
||||
|
||||
After migration, review the generated `.oxlintrc.json`.
|
||||
|
||||
### Plugin Mapping
|
||||
|
||||
The migration tool automatically maps ESLint plugins to oxlint's built-in equivalents. The following table is for reference when reviewing the generated config:
|
||||
|
||||
| ESLint Plugin | Oxlint Plugin Name |
|
||||
| --------------------------------------------------- | ------------------ |
|
||||
| `@typescript-eslint/eslint-plugin` | `typescript` |
|
||||
| `eslint-plugin-react` / `eslint-plugin-react-hooks` | `react` |
|
||||
| `eslint-plugin-import` / `eslint-plugin-import-x` | `import` |
|
||||
| `eslint-plugin-unicorn` | `unicorn` |
|
||||
| `eslint-plugin-jsx-a11y` | `jsx-a11y` |
|
||||
| `eslint-plugin-react-perf` | `react-perf` |
|
||||
| `eslint-plugin-promise` | `promise` |
|
||||
| `eslint-plugin-jest` | `jest` |
|
||||
| `@vitest/eslint-plugin` | `vitest` |
|
||||
| `eslint-plugin-jsdoc` | `jsdoc` |
|
||||
| `eslint-plugin-next` | `nextjs` |
|
||||
| `eslint-plugin-node` | `node` |
|
||||
| `eslint-plugin-vue` | `vue` |
|
||||
|
||||
Default plugins (enabled when `plugins` field is omitted): `unicorn`, `typescript`, `oxc`.
|
||||
Setting the `plugins` array explicitly overrides these defaults.
|
||||
|
||||
ESLint core rules are usable in oxlint without needing to configure a plugin in the config file.
|
||||
|
||||
### Rule Categories
|
||||
|
||||
Oxlint groups rules into categories for bulk configuration, though only `correctness` is enabled by default:
|
||||
|
||||
```json
|
||||
{
|
||||
"categories": {
|
||||
"correctness": "error",
|
||||
"suspicious": "warn"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Available categories: `correctness` (default: enabled), `suspicious`, `pedantic`, `perf`, `style`, `restriction`, `nursery`.
|
||||
|
||||
Individual rule settings in `rules` override category settings.
|
||||
|
||||
`@oxlint/migrate` will turn `correctness` off to avoid enabling additional rules that weren't enabled by your ESLint config. You can choose to enable additional categories after migration if desired.
|
||||
|
||||
### Check Unmigrated Rules
|
||||
|
||||
Run with `--details` to see which ESLint rules could not be migrated:
|
||||
|
||||
```bash
|
||||
npx @oxlint/migrate --details
|
||||
```
|
||||
|
||||
Review the output and decide whether to keep ESLint for those rules or not. Some rules may be mentioned in the output from `--details` as having equivalents in oxlint that were not automatically mapped by the migration tool. In those cases, consider enabling the equivalent oxlint rule manually after migration.
|
||||
|
||||
## Step 3: Install Oxlint
|
||||
|
||||
Install the core oxlint package (use `yarn install`, `pnpm install`, `vp install`, `bun install`, etc. depending on your package manager):
|
||||
|
||||
```bash
|
||||
npm install -D oxlint
|
||||
```
|
||||
|
||||
If you want to add the `oxlint-tsgolint` package, if you intend to use type-aware rules that require TypeScript type information:
|
||||
|
||||
```bash
|
||||
npm install -D oxlint-tsgolint
|
||||
```
|
||||
|
||||
No other packages besides the above are needed by default, though you will need to keep/install any additional ESLint plugins that were migrated into `jsPlugins`. Do not add `@oxlint/migrate` to the package.json, it is meant for one-off usage.
|
||||
|
||||
## Step 4: Handle Unsupported Features
|
||||
|
||||
Some features require manual attention:
|
||||
|
||||
- Local plugins (relative path imports): Must be migrated manually to `jsPlugins`
|
||||
- `eslint-plugin-prettier`: Supported, but very slow. It is recommended to use [oxfmt](https://oxc.rs/docs/guide/usage/formatter) instead, or switch to `prettier --check` as a separate step alongside oxlint.
|
||||
- `settings` in override configs: Oxlint does not support `settings` inside `overrides` blocks.
|
||||
- ESLint v9+ plugins: Not all work with oxlint's JS Plugins API, but the majority will.
|
||||
|
||||
### Local Plugins
|
||||
|
||||
If you have any custom ESLint rules in the project repo itself, you can migrate them manually after running the migration tool by adding them to the `jsPlugins` field in `.oxlintrc.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsPlugins": ["./path/to/my-plugin.js"],
|
||||
"rules": {
|
||||
"local-plugin/rule-name": "error"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### External ESLint Plugins
|
||||
|
||||
For ESLint plugins without a built-in oxlint equivalent, use the `jsPlugins` field to load them:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsPlugins": ["eslint-plugin-custom"],
|
||||
"rules": {
|
||||
"custom/my-rule": "warn"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Step 5: Update CI and Scripts
|
||||
|
||||
Replace ESLint commands with oxlint. Path arguments are optional; oxlint defaults to the current working directory.
|
||||
|
||||
```bash
|
||||
# Before
|
||||
npx eslint src/
|
||||
npx eslint --fix src/
|
||||
|
||||
# After
|
||||
npx oxlint src/
|
||||
npx oxlint --fix src/
|
||||
```
|
||||
|
||||
### Common CLI Options
|
||||
|
||||
| ESLint | oxlint equivalent |
|
||||
| ------------------------- | ---------------------------------------------- |
|
||||
| `eslint .` | `oxlint` (default: lints the cwd) |
|
||||
| `eslint src/` | `oxlint src/` |
|
||||
| `eslint --fix` | `oxlint --fix` |
|
||||
| `eslint --max-warnings 0` | `oxlint --deny-warnings` or `--max-warnings 0` |
|
||||
| `eslint --format json` | `oxlint --format json` |
|
||||
|
||||
Additional oxlint options:
|
||||
|
||||
- `--tsconfig <path>`: Specify tsconfig.json path, likely unnecessary unless you have a non-standard name for `tsconfig.json`.
|
||||
|
||||
## Tips
|
||||
|
||||
- You can run alongside ESLint if necessary: Oxlint is designed to complement ESLint during migration, but with JS Plugins many projects can switch over fully without losing many rules.
|
||||
- Disable comments work: `// eslint-disable` and `// eslint-disable-next-line` comments are supported by oxlint. Use `--replace-eslint-comments` when running @oxlint/migrate to convert them to `// oxlint-disable` equivalents if desired.
|
||||
- List available rules: Run `npx oxlint --rules` to see all supported rules, or refer to the [rule documentation](https://oxc.rs/docs/guide/usage/linter/rules.html).
|
||||
- Schema support: Add `"$schema": "./node_modules/oxlint/configuration_schema.json"` to `.oxlintrc.json` for editor autocompletion if the migration tool didn't do it automatically.
|
||||
- Output formats: `default`, `stylish`, `json`, `github`, `gitlab`, `junit`, `checkstyle`, `unix`
|
||||
- Ignore files: `.eslintignore` is supported by oxlint if you have it, but it's recommended to move any ignore patterns into the `ignorePatterns` field in `.oxlintrc.json` for consistency and simplicity. All files and paths ignored via a `.gitignore` file will be ignored by oxlint by default as well.
|
||||
- If you ran the migration tool multiple times, remove the `.oxlintrc.json.bak` backup file created by the migration tool once you've finished migrating.
|
||||
- If you are not using any JS Plugins and have replaced your ESLint configuration, you can remove all ESLint packages from your project dependencies.
|
||||
- Ensure your editor is configured to use oxlint instead of ESLint for linting and error reporting. You may want to install the Oxc extension for your preferred editor. See https://oxc.rs/docs/guide/usage/linter/editors.html for more details.
|
||||
|
||||
## References
|
||||
|
||||
- [CLI Reference](https://oxc.rs/docs/guide/usage/linter/cli.html)
|
||||
- [Config File Reference](https://oxc.rs/docs/guide/usage/linter/config-file-reference.html)
|
||||
- [Complete Oxlint rule list and docs](https://oxc.rs/docs/guide/usage/linter/rules.html)
|
||||
53
.eslintrc.js
53
.eslintrc.js
@@ -1,53 +0,0 @@
|
||||
require("@rushstack/eslint-patch/modern-module-resolution")
|
||||
|
||||
const DEV_TOOL_ACTIVATED =
|
||||
process.env.NODE_ENV === "production" ? "warn" : "off"
|
||||
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true,
|
||||
es2022: true,
|
||||
},
|
||||
extends: ["plugin:vue/vue3-essential", "@vue/eslint-config-typescript"],
|
||||
plugins: ["simple-import-sort", "unused-imports"],
|
||||
rules: {
|
||||
"no-console": DEV_TOOL_ACTIVATED,
|
||||
"no-debugger": DEV_TOOL_ACTIVATED,
|
||||
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||
"@typescript-eslint/camelcase": "off",
|
||||
"prettier-vue/prettier": [
|
||||
"error",
|
||||
{
|
||||
semi: false,
|
||||
singleQuote: true,
|
||||
trailingComma: "none",
|
||||
arrowParens: "always",
|
||||
},
|
||||
],
|
||||
"vue/no-v-html": "off",
|
||||
"no-restricted-imports": [
|
||||
"error",
|
||||
{
|
||||
paths: [
|
||||
{
|
||||
name: "vue-demi",
|
||||
importNames: ["computed"],
|
||||
message: "Please use computed from vue instead.",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
"simple-import-sort/imports": "error",
|
||||
"simple-import-sort/exports": "error",
|
||||
"unused-imports/no-unused-imports": "error",
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
"**/__tests__/*.{j,t}s?(x)",
|
||||
"**/tests/unit/**/*.spec.{j,t}s?(x)",
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
9
.oxfmtrc.json
Normal file
9
.oxfmtrc.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 80,
|
||||
"sortPackageJson": false,
|
||||
"ignorePatterns": []
|
||||
}
|
||||
40
.oxlintrc.json
Normal file
40
.oxlintrc.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
||||
"plugins": ["typescript"],
|
||||
"jsPlugins": [
|
||||
"eslint-plugin-prettier-vue",
|
||||
"eslint-plugin-simple-import-sort",
|
||||
"eslint-plugin-unused-imports"
|
||||
],
|
||||
"categories": {
|
||||
"correctness": "off"
|
||||
},
|
||||
"env": {
|
||||
"builtin": true
|
||||
},
|
||||
"rules": {
|
||||
"no-restricted-imports": [
|
||||
"error",
|
||||
{
|
||||
"paths": [
|
||||
{
|
||||
"name": "vue-demi",
|
||||
"importNames": ["computed"],
|
||||
"message": "Please use computed from vue instead."
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"simple-import-sort/imports": "error",
|
||||
"simple-import-sort/exports": "error",
|
||||
"unused-imports/no-unused-imports": "error"
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["**/*.vue"],
|
||||
"rules": {
|
||||
"unused-imports/no-unused-imports": "off"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"semi": false
|
||||
}
|
||||
@@ -3,42 +3,43 @@
|
||||
// Script pour changer facilement le thème sombre de l'application Remanso
|
||||
// Usage: pnpm run theme:dark [theme-name]
|
||||
|
||||
import { readFileSync, writeFileSync } from "fs"
|
||||
import { join } from "path"
|
||||
import { commitTheme } from "./change-theme"
|
||||
import { readFileSync, writeFileSync } from 'fs'
|
||||
import { join } from 'path'
|
||||
|
||||
import { commitTheme } from './change-theme'
|
||||
|
||||
// Chemins vers les fichiers
|
||||
const themeConfigPath = join(__dirname, "..", "src", "theme.config.ts")
|
||||
const appCssPath = join(__dirname, "..", "src", "styles", "app.css")
|
||||
const themeConfigPath = join(__dirname, '..', 'src', 'theme.config.ts')
|
||||
const appCssPath = join(__dirname, '..', 'src', 'styles', 'app.css')
|
||||
|
||||
// Vérifier les arguments
|
||||
if (process.argv.length < 3) {
|
||||
console.log("Usage: pnpm run theme:dark [theme-name]")
|
||||
console.log("Exemple: pnpm run theme:dark business")
|
||||
console.log('Usage: pnpm run theme:dark [theme-name]')
|
||||
console.log('Exemple: pnpm run theme:dark business')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// Mode fixé à dark pour ce script
|
||||
const mode = "dark"
|
||||
const mode = 'dark'
|
||||
const newTheme = process.argv[2] // nom du nouveau thème
|
||||
|
||||
// Lire le contenu actuel du fichier de configuration
|
||||
let themeConfigContent = readFileSync(themeConfigPath, "utf8")
|
||||
let themeConfigContent = readFileSync(themeConfigPath, 'utf8')
|
||||
|
||||
// Remplacer la valeur du thème sombre
|
||||
themeConfigContent = themeConfigContent.replace(
|
||||
/dark:\s*['"][^'"]*['"],/,
|
||||
`dark: '${newTheme}',`,
|
||||
`dark: '${newTheme}',`
|
||||
)
|
||||
|
||||
// Écrire le contenu mis à jour dans le fichier
|
||||
writeFileSync(themeConfigPath, themeConfigContent)
|
||||
|
||||
// Mettre à jour également le fichier app.css pour le thème --prefersdark
|
||||
let appCssContent = readFileSync(appCssPath, "utf8")
|
||||
let appCssContent = readFileSync(appCssPath, 'utf8')
|
||||
appCssContent = appCssContent.replace(
|
||||
/(\s+)([a-zA-Z0-9-]+)(\s+--prefersdark;)/,
|
||||
`$1${newTheme}$3`,
|
||||
`$1${newTheme}$3`
|
||||
)
|
||||
writeFileSync(appCssPath, appCssContent)
|
||||
|
||||
|
||||
@@ -3,51 +3,52 @@
|
||||
// Script pour changer facilement le thème clair de l'application Remanso
|
||||
// Usage: pnpm run theme:light [theme-name]
|
||||
|
||||
import { readFileSync, writeFileSync } from "fs"
|
||||
import { join } from "path"
|
||||
import { commitTheme } from "./change-theme"
|
||||
import { readFileSync, writeFileSync } from 'fs'
|
||||
import { join } from 'path'
|
||||
|
||||
import { commitTheme } from './change-theme'
|
||||
|
||||
// Chemins vers les fichiers
|
||||
const themeConfigPath = join(__dirname, "..", "src", "theme.config.ts")
|
||||
const indexPath = join(__dirname, "..", "index.html")
|
||||
const appCssPath = join(__dirname, "..", "src", "styles", "app.css")
|
||||
const themeConfigPath = join(__dirname, '..', 'src', 'theme.config.ts')
|
||||
const indexPath = join(__dirname, '..', 'index.html')
|
||||
const appCssPath = join(__dirname, '..', 'src', 'styles', 'app.css')
|
||||
|
||||
// Vérifier les arguments
|
||||
if (process.argv.length < 3) {
|
||||
console.log("Usage: pnpm run theme:light [theme-name]")
|
||||
console.log("Exemple: pnpm run theme:light cupcake")
|
||||
console.log('Usage: pnpm run theme:light [theme-name]')
|
||||
console.log('Exemple: pnpm run theme:light cupcake')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// Mode fixé à light pour ce script
|
||||
const mode = "light"
|
||||
const mode = 'light'
|
||||
const newTheme = process.argv[2] // nom du nouveau thème
|
||||
|
||||
// Lire le contenu actuel du fichier de configuration
|
||||
let themeConfigContent = readFileSync(themeConfigPath, "utf8")
|
||||
let themeConfigContent = readFileSync(themeConfigPath, 'utf8')
|
||||
|
||||
// Remplacer la valeur du thème clair
|
||||
themeConfigContent = themeConfigContent.replace(
|
||||
/light:\s*['"][^'"]*['"],/,
|
||||
`light: '${newTheme}',`,
|
||||
`light: '${newTheme}',`
|
||||
)
|
||||
|
||||
// Écrire le contenu mis à jour dans le fichier
|
||||
writeFileSync(themeConfigPath, themeConfigContent)
|
||||
|
||||
// Mettre à jour également le fichier index.html
|
||||
let indexContent = readFileSync(indexPath, "utf8")
|
||||
let indexContent = readFileSync(indexPath, 'utf8')
|
||||
indexContent = indexContent.replace(
|
||||
/data-theme="[^"]*"/,
|
||||
`data-theme="${newTheme}"`,
|
||||
`data-theme="${newTheme}"`
|
||||
)
|
||||
writeFileSync(indexPath, indexContent)
|
||||
|
||||
// Mettre à jour également le fichier app.css pour le thème --default
|
||||
let appCssContent = readFileSync(appCssPath, "utf8")
|
||||
let appCssContent = readFileSync(appCssPath, 'utf8')
|
||||
appCssContent = appCssContent.replace(
|
||||
/(\s+)([a-zA-Z0-9-]+)(\s+--default,)/,
|
||||
`$1${newTheme}$3`,
|
||||
`$1${newTheme}$3`
|
||||
)
|
||||
writeFileSync(appCssPath, appCssContent)
|
||||
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
import { execSync } from "child_process"
|
||||
import { execSync } from 'child_process'
|
||||
|
||||
export const commitTheme = (mode: string, newTheme: string) => {
|
||||
// Créer un commit avec les changements
|
||||
try {
|
||||
// Ajouter tous les fichiers modifiés
|
||||
execSync("git add .", { stdio: "inherit" })
|
||||
execSync('git add .', { stdio: 'inherit' })
|
||||
|
||||
// Créer le commit avec le message approprié
|
||||
const commitMessage = `design: change ${mode} theme to ${newTheme}`
|
||||
execSync(`git commit -m "${commitMessage}"`, { stdio: "inherit" })
|
||||
execSync(`git commit -m "${commitMessage}"`, { stdio: 'inherit' })
|
||||
|
||||
console.log(`Commit créé avec succès: "${commitMessage}"`)
|
||||
|
||||
execSync(`git push`, { stdio: "inherit" })
|
||||
execSync(`git push`, { stdio: 'inherit' })
|
||||
|
||||
console.log(`Push sur origin`)
|
||||
} catch (error) {
|
||||
console.error("Erreur lors de la création du commit:", error)
|
||||
console.error('Erreur lors de la création du commit:', error)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,11 +26,10 @@ Rolldown's minifier drops the `while(`/`for(;` keyword when a `while (x in globa
|
||||
File: `node_modules/@ark/schema/out/shared/registry.js`
|
||||
|
||||
```js
|
||||
let _registryName = "$ark";
|
||||
let suffix = 2;
|
||||
while (_registryName in globalThis)
|
||||
_registryName = `$ark${suffix++}`;
|
||||
export const registryName = _registryName;
|
||||
let _registryName = '$ark'
|
||||
let suffix = 2
|
||||
while (_registryName in globalThis) _registryName = `$ark${suffix++}`
|
||||
export const registryName = _registryName
|
||||
```
|
||||
|
||||
## Actual minified output
|
||||
@@ -44,7 +43,10 @@ The `while(` keyword is missing. The orphaned `)` is a syntax error.
|
||||
## Expected output
|
||||
|
||||
```js
|
||||
var dn=`$ark`,fn=2;for(;dn in globalThis;)dn=`$ark${fn++}`;var pn=dn;
|
||||
var dn = `$ark`,
|
||||
fn = 2
|
||||
for (; dn in globalThis; ) dn = `$ark${fn++}`
|
||||
var pn = dn
|
||||
```
|
||||
|
||||
## Impact
|
||||
|
||||
@@ -9,9 +9,9 @@ status = 200
|
||||
|
||||
[[headers]]
|
||||
for = "/client-metadata.json"
|
||||
[headers.values]
|
||||
Access-Control-Allow-Origin = "*"
|
||||
Content-Type = "application/json"
|
||||
[headers.values]
|
||||
Access-Control-Allow-Origin = "*"
|
||||
Content-Type = "application/json"
|
||||
|
||||
[[redirects]]
|
||||
from = "/client-metadata.json"
|
||||
|
||||
@@ -8,7 +8,10 @@
|
||||
"serve": "vite preview",
|
||||
"test": "vitest",
|
||||
"types": "tsc --noEmit",
|
||||
"lint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore --fix src",
|
||||
"lint": "oxlint",
|
||||
"lint:fix": "oxlint --fix",
|
||||
"fmt": "oxfmt",
|
||||
"fmt:check": "oxfmt --check",
|
||||
"prepare": "husky",
|
||||
"theme:light": "esno _scripts/change-theme-light.ts",
|
||||
"theme:dark": "esno _scripts/change-theme-dark.ts",
|
||||
@@ -85,6 +88,8 @@
|
||||
"eslint-plugin-vue": "^10.8.0",
|
||||
"esno": "^4.8.0",
|
||||
"husky": "^9.1.7",
|
||||
"oxfmt": "^0.42.0",
|
||||
"oxlint": "^1.57.0",
|
||||
"prettier": "^3.8.1",
|
||||
"prettier-vue": "^1.1.2",
|
||||
"sass": "^1.98.0",
|
||||
|
||||
431
pnpm-lock.yaml
generated
431
pnpm-lock.yaml
generated
@@ -213,6 +213,12 @@ importers:
|
||||
husky:
|
||||
specifier: ^9.1.7
|
||||
version: 9.1.7
|
||||
oxfmt:
|
||||
specifier: ^0.42.0
|
||||
version: 0.42.0
|
||||
oxlint:
|
||||
specifier: ^1.57.0
|
||||
version: 1.57.0
|
||||
prettier:
|
||||
specifier: ^3.8.1
|
||||
version: 3.8.1
|
||||
@@ -1405,6 +1411,250 @@ packages:
|
||||
'@oxc-project/types@0.120.0':
|
||||
resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==}
|
||||
|
||||
'@oxfmt/binding-android-arm-eabi@0.42.0':
|
||||
resolution: {integrity: sha512-dsqPTYsozeokRjlrt/b4E7Pj0z3eS3Eg74TWQuuKbjY4VttBmA88rB7d50Xrd+TZ986qdXCNeZRPEzZHAe+jow==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@oxfmt/binding-android-arm64@0.42.0':
|
||||
resolution: {integrity: sha512-t+aAjHxcr5eOBphFHdg1ouQU9qmZZoRxnX7UOJSaTwSoKsb6TYezNKO0YbWytGXCECObRqNcUxPoPr0KaraAIg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@oxfmt/binding-darwin-arm64@0.42.0':
|
||||
resolution: {integrity: sha512-ulpSEYMKg61C5bRMZinFHrKJYRoKGVbvMEXA5zM1puX3O9T6Q4XXDbft20yrDijpYWeuG59z3Nabt+npeTsM1A==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxfmt/binding-darwin-x64@0.42.0':
|
||||
resolution: {integrity: sha512-ttxLKhQYPdFiM8I/Ri37cvqChE4Xa562nNOsZFcv1CKTVLeEozXjKuYClNvxkXmNlcF55nzM80P+CQkdFBu+uQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxfmt/binding-freebsd-x64@0.42.0':
|
||||
resolution: {integrity: sha512-Og7QS3yI3tdIKYZ58SXik0rADxIk2jmd+/YvuHRyKULWpG4V2fR5V4hvKm624Mc0cQET35waPXiCQWvjQEjwYQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@oxfmt/binding-linux-arm-gnueabihf@0.42.0':
|
||||
resolution: {integrity: sha512-jwLOw/3CW4H6Vxcry4/buQHk7zm9Ne2YsidzTL1kpiMe4qqrRCwev3dkyWe2YkFmP+iZCQ7zku4KwjcLRoh8ew==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@oxfmt/binding-linux-arm-musleabihf@0.42.0':
|
||||
resolution: {integrity: sha512-XwXu2vkMtiq2h7tfvN+WA/9/5/1IoGAVCFPiiQUvcAuG3efR97KNcRGM8BetmbYouFotQ2bDal3yyjUx6IPsTg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@oxfmt/binding-linux-arm64-gnu@0.42.0':
|
||||
resolution: {integrity: sha512-ea7s/XUJoT7ENAtUQDudFe3nkSM3e3Qpz4nJFRdzO2wbgXEcjnchKLEsV3+t4ev3r8nWxIYr9NRjPWtnyIFJVA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxfmt/binding-linux-arm64-musl@0.42.0':
|
||||
resolution: {integrity: sha512-+JA0YMlSdDqmacygGi2REp57c3fN+tzARD8nwsukx9pkCHK+6DkbAA9ojS4lNKsiBjIW8WWa0pBrBWhdZEqfuw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@oxfmt/binding-linux-ppc64-gnu@0.42.0':
|
||||
resolution: {integrity: sha512-VfnET0j4Y5mdfCzh5gBt0NK28lgn5DKx+8WgSMLYYeSooHhohdbzwAStLki9pNuGy51y4I7IoW8bqwAaCMiJQg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxfmt/binding-linux-riscv64-gnu@0.42.0':
|
||||
resolution: {integrity: sha512-gVlCbmBkB0fxBWbhBj9rcxezPydsQHf4MFKeHoTSPicOQ+8oGeTQgQ8EeesSybWeiFPVRx3bgdt4IJnH6nOjAA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxfmt/binding-linux-riscv64-musl@0.42.0':
|
||||
resolution: {integrity: sha512-zN5OfstL0avgt/IgvRu0zjQzVh/EPkcLzs33E9LMAzpqlLWiPWeMDZyMGFlSRGOdDjuNmlZBCgj0pFnK5u32TQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@oxfmt/binding-linux-s390x-gnu@0.42.0':
|
||||
resolution: {integrity: sha512-9X6+H2L0qMc2sCAgO9HS03bkGLMKvOFjmEdchaFlany3vNZOjnVui//D8k/xZAtQv2vaCs1reD5KAgPoIU4msA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxfmt/binding-linux-x64-gnu@0.42.0':
|
||||
resolution: {integrity: sha512-BajxJ6KQvMMdpXGPWhBGyjb2Jvx4uec0w+wi6TJZ6Tv7+MzPwe0pO8g5h1U0jyFgoaF7mDl6yKPW3ykWcbUJRw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxfmt/binding-linux-x64-musl@0.42.0':
|
||||
resolution: {integrity: sha512-0wV284I6vc5f0AqAhgAbHU2935B4bVpncPoe5n/WzVZY/KnHgqxC8iSFGeSyLWEgstFboIcWkOPck7tqbdHkzA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@oxfmt/binding-openharmony-arm64@0.42.0':
|
||||
resolution: {integrity: sha512-p4BG6HpGnhfgHk1rzZfyR6zcWkE7iLrWxyehHfXUy4Qa5j3e0roglFOdP/Nj5cJJ58MA3isQ5dlfkW2nNEpolw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [openharmony]
|
||||
|
||||
'@oxfmt/binding-win32-arm64-msvc@0.42.0':
|
||||
resolution: {integrity: sha512-mn//WV60A+IetORDxYieYGAoQso4KnVRRjORDewMcod4irlRe0OSC7YPhhwaexYNPQz/GCFk+v9iUcZ2W22yxQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@oxfmt/binding-win32-ia32-msvc@0.42.0':
|
||||
resolution: {integrity: sha512-3gWltUrvuz4LPJXWivoAxZ28Of2O4N7OGuM5/X3ubPXCEV8hmgECLZzjz7UYvSDUS3grfdccQwmjynm+51EFpw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@oxfmt/binding-win32-x64-msvc@0.42.0':
|
||||
resolution: {integrity: sha512-Wg4TMAfQRL9J9AZevJ/ZNy3uyyDztDYQtGr4P8UyyzIhLhFrdSmz1J/9JT+rv0fiCDLaFOBQnj3f3K3+a5PzDQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@oxlint/binding-android-arm-eabi@1.57.0':
|
||||
resolution: {integrity: sha512-C7EiyfAJG4B70496eV543nKiq5cH0o/xIh/ufbjQz3SIvHhlDDsyn+mRFh+aW8KskTyUpyH2LGWL8p2oN6bl1A==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@oxlint/binding-android-arm64@1.57.0':
|
||||
resolution: {integrity: sha512-9i80AresjZ/FZf5xK8tKFbhQnijD4s1eOZw6/FHUwD59HEZbVLRc2C88ADYJfLZrF5XofWDiRX/Ja9KefCLy7w==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@oxlint/binding-darwin-arm64@1.57.0':
|
||||
resolution: {integrity: sha512-0eUfhRz5L2yKa9I8k3qpyl37XK3oBS5BvrgdVIx599WZK63P8sMbg+0s4IuxmIiZuBK68Ek+Z+gcKgeYf0otsg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxlint/binding-darwin-x64@1.57.0':
|
||||
resolution: {integrity: sha512-UvrSuzBaYOue+QMAcuDITe0k/Vhj6KZGjfnI6x+NkxBTke/VoM7ZisaxgNY0LWuBkTnd1OmeQfEQdQ48fRjkQg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxlint/binding-freebsd-x64@1.57.0':
|
||||
resolution: {integrity: sha512-wtQq0dCoiw4bUwlsNVDJJ3pxJA218fOezpgtLKrbQqUtQJcM9yP8z+I9fu14aHg0uyAxIY+99toL6uBa2r7nxA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@oxlint/binding-linux-arm-gnueabihf@1.57.0':
|
||||
resolution: {integrity: sha512-qxFWl2BBBFcT4djKa+OtMdnLgoHEJXpqjyGwz8OhW35ImoCwR5qtAGqApNYce5260FQqoAHW8S8eZTjiX67Tsg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@oxlint/binding-linux-arm-musleabihf@1.57.0':
|
||||
resolution: {integrity: sha512-SQoIsBU7J0bDW15/f0/RvxHfY3Y0+eB/caKBQtNFbuerTiA6JCYx9P1MrrFTwY2dTm/lMgTSgskvCEYk2AtG/Q==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@oxlint/binding-linux-arm64-gnu@1.57.0':
|
||||
resolution: {integrity: sha512-jqxYd1W6WMeozsCmqe9Rzbu3SRrGTyGDAipRlRggetyYbUksJqJKvUNTQtZR/KFoJPb+grnSm5SHhdWrywv3RQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxlint/binding-linux-arm64-musl@1.57.0':
|
||||
resolution: {integrity: sha512-i66WyEPVEvq9bxRUCJ/MP5EBfnTDN3nhwEdFZFTO5MmLLvzngfWEG3NSdXQzTT3vk5B9i6C2XSIYBh+aG6uqyg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@oxlint/binding-linux-ppc64-gnu@1.57.0':
|
||||
resolution: {integrity: sha512-oMZDCwz4NobclZU3pH+V1/upVlJZiZvne4jQP+zhJwt+lmio4XXr4qG47CehvrW1Lx2YZiIHuxM2D4YpkG3KVA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxlint/binding-linux-riscv64-gnu@1.57.0':
|
||||
resolution: {integrity: sha512-uoBnjJ3MMEBbfnWC1jSFr7/nSCkcQYa72NYoNtLl1imshDnWSolYCjzb8LVCwYCCfLJXD+0gBLD7fyC14c0+0g==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxlint/binding-linux-riscv64-musl@1.57.0':
|
||||
resolution: {integrity: sha512-BdrwD7haPZ8a9KrZhKJRSj6jwCor+Z8tHFZ3PT89Y3Jq5v3LfMfEePeAmD0LOTWpiTmzSzdmyw9ijneapiVHKQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@oxlint/binding-linux-s390x-gnu@1.57.0':
|
||||
resolution: {integrity: sha512-BNs+7ZNsRstVg2tpNxAXfMX/Iv5oZh204dVyb8Z37+/gCh+yZqNTlg6YwCLIMPSk5wLWIGOaQjT0GUOahKYImw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxlint/binding-linux-x64-gnu@1.57.0':
|
||||
resolution: {integrity: sha512-AghS18w+XcENcAX0+BQGLiqjpqpaxKJa4cWWP0OWNLacs27vHBxu7TYkv9LUSGe5w8lOJHeMxcYfZNOAPqw2bg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@oxlint/binding-linux-x64-musl@1.57.0':
|
||||
resolution: {integrity: sha512-E/FV3GB8phu/Rpkhz5T96hAiJlGzn91qX5yj5gU754P5cmVGXY1Jw/VSjDSlZBCY3VHjsVLdzgdkJaomEmcNOg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@oxlint/binding-openharmony-arm64@1.57.0':
|
||||
resolution: {integrity: sha512-xvZ2yZt0nUVfU14iuGv3V25jpr9pov5N0Wr28RXnHFxHCRxNDMtYPHV61gGLhN9IlXM96gI4pyYpLSJC5ClLCQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [openharmony]
|
||||
|
||||
'@oxlint/binding-win32-arm64-msvc@1.57.0':
|
||||
resolution: {integrity: sha512-Z4D8Pd0AyHBKeazhdIXeUUy5sIS3Mo0veOlzlDECg6PhRRKgEsBJCCV1n+keUZtQ04OP+i7+itS3kOykUyNhDg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@oxlint/binding-win32-ia32-msvc@1.57.0':
|
||||
resolution: {integrity: sha512-StOZ9nFMVKvevicbQfql6Pouu9pgbeQnu60Fvhz2S6yfMaii+wnueLnqQ5I1JPgNF0Syew4voBlAaHD13wH6tw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@oxlint/binding-win32-x64-msvc@1.57.0':
|
||||
resolution: {integrity: sha512-6PuxhYgth8TuW0+ABPOIkGdBYw+qYGxgIdXPHSVpiCDm+hqTTWCmC739St1Xni0DJBt8HnSHTG67i1y6gr8qrA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@parcel/watcher-android-arm64@2.5.0':
|
||||
resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
@@ -5017,6 +5267,21 @@ packages:
|
||||
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
oxfmt@0.42.0:
|
||||
resolution: {integrity: sha512-QhejGErLSMReNuZ6vxgFHDyGoPbjTRNi6uGHjy0cvIjOQFqD6xmr/T+3L41ixR3NIgzcNiJ6ylQKpvShTgDfqg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
|
||||
oxlint@1.57.0:
|
||||
resolution: {integrity: sha512-DGFsuBX5MFZX9yiDdtKjTrYPq45CZ8Fft6qCltJITYZxfwYjVdGf/6wycGYTACloauwIPxUnYhBVeZbHvleGhw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
oxlint-tsgolint: '>=0.15.0'
|
||||
peerDependenciesMeta:
|
||||
oxlint-tsgolint:
|
||||
optional: true
|
||||
|
||||
p-cancelable@0.3.0:
|
||||
resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -5907,6 +6172,10 @@ packages:
|
||||
resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
|
||||
engines: {node: ^18.0.0 || >=20.0.0}
|
||||
|
||||
tinypool@2.1.0:
|
||||
resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
|
||||
engines: {node: ^20.0.0 || >=22.0.0}
|
||||
|
||||
tinyrainbow@2.0.0:
|
||||
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
@@ -7872,6 +8141,120 @@ snapshots:
|
||||
|
||||
'@oxc-project/types@0.120.0': {}
|
||||
|
||||
'@oxfmt/binding-android-arm-eabi@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-android-arm64@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-darwin-arm64@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-darwin-x64@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-freebsd-x64@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-arm-gnueabihf@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-arm-musleabihf@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-arm64-gnu@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-arm64-musl@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-ppc64-gnu@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-riscv64-gnu@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-riscv64-musl@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-s390x-gnu@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-x64-gnu@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-linux-x64-musl@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-openharmony-arm64@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-win32-arm64-msvc@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-win32-ia32-msvc@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxfmt/binding-win32-x64-msvc@0.42.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-android-arm-eabi@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-android-arm64@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-darwin-arm64@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-darwin-x64@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-freebsd-x64@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-arm-gnueabihf@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-arm-musleabihf@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-arm64-gnu@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-arm64-musl@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-ppc64-gnu@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-riscv64-gnu@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-riscv64-musl@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-s390x-gnu@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-x64-gnu@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-linux-x64-musl@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-openharmony-arm64@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-win32-arm64-msvc@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-win32-ia32-msvc@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/binding-win32-x64-msvc@1.57.0':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-android-arm64@2.5.0':
|
||||
optional: true
|
||||
|
||||
@@ -11839,6 +12222,52 @@ snapshots:
|
||||
object-keys: 1.1.1
|
||||
safe-push-apply: 1.0.0
|
||||
|
||||
oxfmt@0.42.0:
|
||||
dependencies:
|
||||
tinypool: 2.1.0
|
||||
optionalDependencies:
|
||||
'@oxfmt/binding-android-arm-eabi': 0.42.0
|
||||
'@oxfmt/binding-android-arm64': 0.42.0
|
||||
'@oxfmt/binding-darwin-arm64': 0.42.0
|
||||
'@oxfmt/binding-darwin-x64': 0.42.0
|
||||
'@oxfmt/binding-freebsd-x64': 0.42.0
|
||||
'@oxfmt/binding-linux-arm-gnueabihf': 0.42.0
|
||||
'@oxfmt/binding-linux-arm-musleabihf': 0.42.0
|
||||
'@oxfmt/binding-linux-arm64-gnu': 0.42.0
|
||||
'@oxfmt/binding-linux-arm64-musl': 0.42.0
|
||||
'@oxfmt/binding-linux-ppc64-gnu': 0.42.0
|
||||
'@oxfmt/binding-linux-riscv64-gnu': 0.42.0
|
||||
'@oxfmt/binding-linux-riscv64-musl': 0.42.0
|
||||
'@oxfmt/binding-linux-s390x-gnu': 0.42.0
|
||||
'@oxfmt/binding-linux-x64-gnu': 0.42.0
|
||||
'@oxfmt/binding-linux-x64-musl': 0.42.0
|
||||
'@oxfmt/binding-openharmony-arm64': 0.42.0
|
||||
'@oxfmt/binding-win32-arm64-msvc': 0.42.0
|
||||
'@oxfmt/binding-win32-ia32-msvc': 0.42.0
|
||||
'@oxfmt/binding-win32-x64-msvc': 0.42.0
|
||||
|
||||
oxlint@1.57.0:
|
||||
optionalDependencies:
|
||||
'@oxlint/binding-android-arm-eabi': 1.57.0
|
||||
'@oxlint/binding-android-arm64': 1.57.0
|
||||
'@oxlint/binding-darwin-arm64': 1.57.0
|
||||
'@oxlint/binding-darwin-x64': 1.57.0
|
||||
'@oxlint/binding-freebsd-x64': 1.57.0
|
||||
'@oxlint/binding-linux-arm-gnueabihf': 1.57.0
|
||||
'@oxlint/binding-linux-arm-musleabihf': 1.57.0
|
||||
'@oxlint/binding-linux-arm64-gnu': 1.57.0
|
||||
'@oxlint/binding-linux-arm64-musl': 1.57.0
|
||||
'@oxlint/binding-linux-ppc64-gnu': 1.57.0
|
||||
'@oxlint/binding-linux-riscv64-gnu': 1.57.0
|
||||
'@oxlint/binding-linux-riscv64-musl': 1.57.0
|
||||
'@oxlint/binding-linux-s390x-gnu': 1.57.0
|
||||
'@oxlint/binding-linux-x64-gnu': 1.57.0
|
||||
'@oxlint/binding-linux-x64-musl': 1.57.0
|
||||
'@oxlint/binding-openharmony-arm64': 1.57.0
|
||||
'@oxlint/binding-win32-arm64-msvc': 1.57.0
|
||||
'@oxlint/binding-win32-ia32-msvc': 1.57.0
|
||||
'@oxlint/binding-win32-x64-msvc': 1.57.0
|
||||
|
||||
p-cancelable@0.3.0: {}
|
||||
|
||||
p-finally@1.0.0: {}
|
||||
@@ -12836,6 +13265,8 @@ snapshots:
|
||||
|
||||
tinypool@1.1.1: {}
|
||||
|
||||
tinypool@2.1.0: {}
|
||||
|
||||
tinyrainbow@2.0.0: {}
|
||||
|
||||
tinyspy@4.0.3: {}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module.exports = {
|
||||
plugins: { "@tailwindcss/postcss": {}, autoprefixer: {} },
|
||||
plugins: { '@tailwindcss/postcss': {}, autoprefixer: {} }
|
||||
}
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
"client_id": "https://remanso.space/client-metadata.json",
|
||||
"client_name": "Remanso",
|
||||
"client_uri": "https://remanso.space",
|
||||
"redirect_uris": [
|
||||
"https://remanso.space/"
|
||||
],
|
||||
"redirect_uris": ["https://remanso.space/"],
|
||||
"scope": "atproto transition:generic",
|
||||
"grant_types": ["authorization_code", "refresh_token"],
|
||||
"response_types": ["code"],
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {
|
||||
defineConfig,
|
||||
minimal2023Preset as preset,
|
||||
} from "@vite-pwa/assets-generator/config"
|
||||
minimal2023Preset as preset
|
||||
} from '@vite-pwa/assets-generator/config'
|
||||
|
||||
export default defineConfig({
|
||||
preset,
|
||||
images: ["public/favicon.png"],
|
||||
images: ['public/favicon.png']
|
||||
})
|
||||
|
||||
10
skills-lock.json
Normal file
10
skills-lock.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": 1,
|
||||
"skills": {
|
||||
"migrate-oxlint": {
|
||||
"source": "oxc-project/oxc",
|
||||
"sourceType": "github",
|
||||
"computedHash": "80ce5201b1ef52d6cabe553a4cacfd6e1db97bad99618216b9cf9318d11d7e64"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,67 +1,67 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
const dotenv = require("dotenv")
|
||||
const dotenv = require('dotenv')
|
||||
|
||||
dotenv.config()
|
||||
|
||||
const defaultTitleStyles = Array.from(
|
||||
{ length: 6 },
|
||||
(_, k) => `h${k + 1}`,
|
||||
(_, k) => `h${k + 1}`
|
||||
).reduce(
|
||||
(acc, heading) => ({
|
||||
...acc,
|
||||
[heading]: {
|
||||
"margin-top": "0",
|
||||
"margin-bottom": "0.5em",
|
||||
},
|
||||
'margin-top': '0',
|
||||
'margin-bottom': '0.5em'
|
||||
}
|
||||
}),
|
||||
{},
|
||||
{}
|
||||
)
|
||||
|
||||
const BOX_SHADOW = "6px"
|
||||
const BOX_SHADOW = '6px'
|
||||
|
||||
module.exports = {
|
||||
content: ["./src/**/*.{vue,js,ts}"],
|
||||
content: ['./src/**/*.{vue,js,ts}'],
|
||||
theme: {
|
||||
extend: {
|
||||
typography: () => ({
|
||||
DEFAULT: {
|
||||
css: {
|
||||
...defaultTitleStyles,
|
||||
"font-size": "13pt",
|
||||
"font-family": '"Libertinus Serif", serif',
|
||||
'font-size': '13pt',
|
||||
'font-family': '"Libertinus Serif", serif',
|
||||
p: {
|
||||
"margin-top": "0.8em",
|
||||
"margin-bottom": "0.8em",
|
||||
"text-align": "left",
|
||||
'margin-top': '0.8em',
|
||||
'margin-bottom': '0.8em',
|
||||
'text-align': 'left'
|
||||
// "text-wrap": "balance",
|
||||
},
|
||||
"img, video": {
|
||||
margin: "auto",
|
||||
"border-radius": "0.5rem",
|
||||
"box-shadow":
|
||||
"rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px",
|
||||
"max-width": `calc(100% - 2 * ${BOX_SHADOW})`,
|
||||
'img, video': {
|
||||
margin: 'auto',
|
||||
'border-radius': '0.5rem',
|
||||
'box-shadow':
|
||||
'rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px',
|
||||
'max-width': `calc(100% - 2 * ${BOX_SHADOW})`
|
||||
},
|
||||
a: {
|
||||
"font-weight": 600,
|
||||
'font-weight': 600,
|
||||
// "text-decoration": "wavy underline var(--color-contrast-content)",
|
||||
// "text-decoration-thickness": "0.1em",
|
||||
"text-decoration": "none",
|
||||
color: "var(--color-accent)",
|
||||
'text-decoration': 'none',
|
||||
color: 'var(--color-accent)'
|
||||
},
|
||||
"a.btn-primary": {
|
||||
color: "var(--color-secondary-content)",
|
||||
'a.btn-primary': {
|
||||
color: 'var(--color-secondary-content)'
|
||||
},
|
||||
"a:hover": {
|
||||
"text-decoration": "underline",
|
||||
'a:hover': {
|
||||
'text-decoration': 'underline'
|
||||
},
|
||||
li: {
|
||||
"margin-top": 0,
|
||||
"margin-bottom": 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
},
|
||||
},
|
||||
'margin-top': 0,
|
||||
'margin-bottom': 0
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"sourceMap": true,
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"types": ["node", "vite/client", "vite-plugin-pwa/vue"],
|
||||
"paths": {
|
||||
|
||||
106
vite.config.mts
106
vite.config.mts
@@ -1,87 +1,87 @@
|
||||
import vue from "@vitejs/plugin-vue"
|
||||
import path from "path"
|
||||
import { defineConfig, type UserConfigExport } from "vite"
|
||||
import { VitePWA } from "vite-plugin-pwa"
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import path from 'path'
|
||||
import { defineConfig, type UserConfigExport } from 'vite'
|
||||
import { VitePWA } from 'vite-plugin-pwa'
|
||||
|
||||
export default defineConfig(({ command }) => {
|
||||
const config: UserConfigExport = {
|
||||
build: {
|
||||
minify: "esbuild",
|
||||
minify: 'esbuild'
|
||||
},
|
||||
plugins: [
|
||||
vue(),
|
||||
VitePWA({
|
||||
registerType: "prompt",
|
||||
registerType: 'prompt',
|
||||
includeAssets: [
|
||||
"favicon.ico",
|
||||
"apple-touch-icon.png",
|
||||
"apple-touch-icon-180x180.png",
|
||||
"favicon.png",
|
||||
"pwa-64x64.png",
|
||||
"pwa-192x192.png",
|
||||
"pwa-512x512.png",
|
||||
"masked-icon.png",
|
||||
"maskable-icon-512x512.png",
|
||||
"monochrome-icon.png",
|
||||
"assets/*.svg",
|
||||
'favicon.ico',
|
||||
'apple-touch-icon.png',
|
||||
'apple-touch-icon-180x180.png',
|
||||
'favicon.png',
|
||||
'pwa-64x64.png',
|
||||
'pwa-192x192.png',
|
||||
'pwa-512x512.png',
|
||||
'masked-icon.png',
|
||||
'maskable-icon-512x512.png',
|
||||
'monochrome-icon.png',
|
||||
'assets/*.svg'
|
||||
],
|
||||
manifest: {
|
||||
name: "Remanso",
|
||||
short_name: "Remanso",
|
||||
description: "Note taking & sharing app",
|
||||
background_color: "#ffa4c0",
|
||||
theme_color: "#ffa4c0",
|
||||
name: 'Remanso',
|
||||
short_name: 'Remanso',
|
||||
description: 'Note taking & sharing app',
|
||||
background_color: '#ffa4c0',
|
||||
theme_color: '#ffa4c0',
|
||||
icons: [
|
||||
{
|
||||
src: "pwa-64x64.png",
|
||||
sizes: "64x64",
|
||||
type: "image/png",
|
||||
src: 'pwa-64x64.png',
|
||||
sizes: '64x64',
|
||||
type: 'image/png'
|
||||
},
|
||||
{
|
||||
src: "pwa-192x192.png",
|
||||
sizes: "192x192",
|
||||
type: "image/png",
|
||||
src: 'pwa-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png'
|
||||
},
|
||||
{
|
||||
src: "pwa-512x512.png",
|
||||
sizes: "512x512",
|
||||
type: "image/png",
|
||||
src: 'pwa-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png'
|
||||
},
|
||||
{
|
||||
src: "favicon.png",
|
||||
sizes: "1024x1024",
|
||||
type: "image/png",
|
||||
src: 'favicon.png',
|
||||
sizes: '1024x1024',
|
||||
type: 'image/png'
|
||||
},
|
||||
{
|
||||
src: "maskable-icon-512x512.png",
|
||||
sizes: "512x512",
|
||||
type: "image/png",
|
||||
purpose: "maskable",
|
||||
src: 'maskable-icon-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
purpose: 'maskable'
|
||||
},
|
||||
{
|
||||
src: "monochrome-icon.png",
|
||||
sizes: "1024x1024",
|
||||
type: "image/png",
|
||||
purpose: "monochrome",
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
src: 'monochrome-icon.png',
|
||||
sizes: '1024x1024',
|
||||
type: 'image/png',
|
||||
purpose: 'monochrome'
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": path.resolve(__dirname, "./src"),
|
||||
"node-fetch": "isomorphic-fetch",
|
||||
},
|
||||
},
|
||||
'@': path.resolve(__dirname, './src'),
|
||||
'node-fetch': 'isomorphic-fetch'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (command === "serve") {
|
||||
if (command === 'serve') {
|
||||
config.define = {
|
||||
global: {},
|
||||
global: {}
|
||||
}
|
||||
config.server = {
|
||||
host: "127.0.0.1",
|
||||
host: '127.0.0.1'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user