Compare commits
No commits in common. "main" and "v0.4.1" have entirely different histories.
22
.github/workflows/release.yml
vendored
22
.github/workflows/release.yml
vendored
@ -1,22 +0,0 @@
|
|||||||
name: Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 16.x
|
|
||||||
|
|
||||||
- run: npx changelogithub
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
275
CHANGELOG.md
Normal file
275
CHANGELOG.md
Normal file
@ -0,0 +1,275 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.4.1](https://github.com/antfu/eslint-config/compare/v0.4.0...v0.4.1) (2020-10-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-monorepo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.4](https://github.com/antfu/eslint-config/compare/v0.3.3...v0.3.4) (2020-10-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-monorepo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.3](https://github.com/antfu/eslint-config/compare/v0.3.2...v0.3.3) (2020-08-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* disable import/no-absolute-path ([245001d](https://github.com/antfu/eslint-config/commit/245001d08129b3ec4961741d596f70abb2c9be5f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.2](https://github.com/antfu/eslint-config/compare/v0.3.1...v0.3.2) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-monorepo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.1](https://github.com/antfu/eslint-config/compare/v0.3.0...v0.3.1) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* ref ([e53f3ec](https://github.com/antfu/eslint-config/commit/e53f3ec8dbc1cc3e32d57c08604b2b1d51661ca4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.3.0](https://github.com/antfu/eslint-config/compare/v0.2.14...v0.3.0) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([f82ee6f](https://github.com/antfu/eslint-config/commit/f82ee6fce9153f098c8fbbeef17f88261e08176f))
|
||||||
|
* **deps:** update all non-major dependencies ([2243bf6](https://github.com/antfu/eslint-config/commit/2243bf67fac0f75c1a4e35c604f49ebb2092d960))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.7.0 ([3a6b4ea](https://github.com/antfu/eslint-config/commit/3a6b4ea59ec8b9a4d75452ae1f6fd2c51d96b242))
|
||||||
|
* **deps:** update dependency eslint-plugin-vue to v7.0.0-beta.0 ([e0b59f2](https://github.com/antfu/eslint-config/commit/e0b59f271fa3c679e5c4a7d61b5af79cef37721f))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add react and all ([a7fbdca](https://github.com/antfu/eslint-config/commit/a7fbdcad4b20294e26e817fae468f468376e49cf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.14](https://github.com/antfu/eslint-config/compare/v0.2.13...v0.2.14) (2020-07-18)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.13](https://github.com/antfu/eslint-config/compare/v0.2.12...v0.2.13) (2020-06-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.1.0 ([494d99c](https://github.com/antfu/eslint-config/commit/494d99c2bb52895a055cea7be9b50494a6a67358))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.12](https://github.com/antfu/eslint-config/compare/v0.2.11...v0.2.12) (2020-06-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([ae3acb4](https://github.com/antfu/eslint-config/commit/ae3acb40f34fa117bb0afe6f9959daa5c0f9a197))
|
||||||
|
* **deps:** update all non-major dependencies ([367c663](https://github.com/antfu/eslint-config/commit/367c663eb0eca976b2e932d5666b0e47f751a03c))
|
||||||
|
* **deps:** update all non-major dependencies ([d938b1d](https://github.com/antfu/eslint-config/commit/d938b1d714e429f4dd4cce56b8b2c4cdee0de242))
|
||||||
|
* **deps:** update all non-major dependencies ([8bda49a](https://github.com/antfu/eslint-config/commit/8bda49afb37d50c647995354cec4d11589eeef8f))
|
||||||
|
* **deps:** update all non-major dependencies ([cd48d47](https://github.com/antfu/eslint-config/commit/cd48d476bfe63623b66d9d5107b794f3b2e73129))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.21.0 ([ae238f2](https://github.com/antfu/eslint-config/commit/ae238f275c17c8959274da007b60cae2f029b7d0))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.23.0 ([ae8dee6](https://github.com/antfu/eslint-config/commit/ae8dee603589f80410cb19a009a4f50a7daf5472))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.25.0 ([da8bfed](https://github.com/antfu/eslint-config/commit/da8bfed5c582940ebef807cc396a4c28de7135dd))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.26.0 ([9c66671](https://github.com/antfu/eslint-config/commit/9c666715c2eef912e343649875441a564486d5ec))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.27.0 ([dc00c77](https://github.com/antfu/eslint-config/commit/dc00c77075c87f8e49b39b32d44ca4fde0590731))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.28.0 ([e42c576](https://github.com/antfu/eslint-config/commit/e42c5767f6f9a9013286354ee238977b36bbbee2))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.29.0 ([5e65853](https://github.com/antfu/eslint-config/commit/5e6585335d4f7b88355a7430911c9712bcd20115))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.30.0 ([cabb099](https://github.com/antfu/eslint-config/commit/cabb0999cd95d63fd35b50a0073c324f54a621e5))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.31.0 ([2fb8855](https://github.com/antfu/eslint-config/commit/2fb885521b80ba72511b1005ad919ed148c99428))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.33.0 ([d857537](https://github.com/antfu/eslint-config/commit/d8575375f6505bfee4165dc33b1cd924b63fb15e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.0.2 ([214c0be](https://github.com/antfu/eslint-config/commit/214c0be0292d8b95d57d1fe0272ee7af7a130b78))
|
||||||
|
* **deps:** update dependency eslint-plugin-nuxt to v1 ([f5d6ebd](https://github.com/antfu/eslint-config/commit/f5d6ebda7cfa17ad8992e1ccc4fd9be020711375))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v16 ([8bb4687](https://github.com/antfu/eslint-config/commit/8bb46879d8beda646e06e558db6ea7489d0e02cc))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v17 ([9685653](https://github.com/antfu/eslint-config/commit/96856537cd165d553dc745b96332889daebf75a4))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v18 ([05334ab](https://github.com/antfu/eslint-config/commit/05334ab400e3a4d172251264c45faae1fcafd861))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v19 ([cbd45fd](https://github.com/antfu/eslint-config/commit/cbd45fdcf9d06cbcf66bd2c23510ac36b330941b))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v20 ([7a2af88](https://github.com/antfu/eslint-config/commit/7a2af88bd9935f58df3ac0b733642ec32fb9f722))
|
||||||
|
* **deps:** update typescript-eslint monorepo to v3 ([ebb1820](https://github.com/antfu/eslint-config/commit/ebb18209d5c8417da41be7ca8b2b8658bd4ba1a5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.11](https://github.com/antfu/eslint-config/compare/v0.2.10...v0.2.11) (2020-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([faa9b11](https://github.com/antfu/eslint-config/commit/faa9b11d52d5d34a4c89917bb6b1aeaa8f7bbdb2))
|
||||||
|
* **deps:** update dependency eslint-plugin-node to v11 ([#19](https://github.com/antfu/eslint-config/issues/19)) ([d37b5cc](https://github.com/antfu/eslint-config/commit/d37b5cc912b017eeca513a806a3f755c1094bafe))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v15 ([#18](https://github.com/antfu/eslint-config/issues/18)) ([b6c068c](https://github.com/antfu/eslint-config/commit/b6c068cf01539d2d94867664cbc54728fa99852e))
|
||||||
|
* update ([ce7f9ec](https://github.com/antfu/eslint-config/commit/ce7f9ec9687fea47757e973344fd2068cc7e5a8f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.10](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.10) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v14 ([#16](https://github.com/antfu/eslint-config/issues/16)) ([49f5108](https://github.com/antfu/eslint-config/commit/49f5108fb2144f6ccc5f6a15d1bc135542070168))
|
||||||
|
* **deps:** update dependency eslint-plugin-vue to v6 ([#13](https://github.com/antfu/eslint-config/issues/13)) ([5d0daca](https://github.com/antfu/eslint-config/commit/5d0dacae0af218e30868fcfb7b60afd6dbeda45b))
|
||||||
|
* dependencies ([c773e5e](https://github.com/antfu/eslint-config/commit/c773e5e043ad37a90785ccfe4834b4fcd2a9dadd))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.9](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.9) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v14 ([#16](https://github.com/antfu/eslint-config/issues/16)) ([49f5108](https://github.com/antfu/eslint-config/commit/49f5108fb2144f6ccc5f6a15d1bc135542070168))
|
||||||
|
* **deps:** update dependency eslint-plugin-vue to v6 ([#13](https://github.com/antfu/eslint-config/issues/13)) ([5d0daca](https://github.com/antfu/eslint-config/commit/5d0dacae0af218e30868fcfb7b60afd6dbeda45b))
|
||||||
|
* dependencies ([c773e5e](https://github.com/antfu/eslint-config/commit/c773e5e043ad37a90785ccfe4834b4fcd2a9dadd))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.8](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.8) (2019-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.1.0 ([99a5c38](https://github.com/antfu/eslint-config/commit/99a5c38))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.3.1 ([8c12e7e](https://github.com/antfu/eslint-config/commit/8c12e7e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.5.0 ([#11](https://github.com/antfu/eslint-config/issues/11)) ([d5341a2](https://github.com/antfu/eslint-config/commit/d5341a2))
|
||||||
|
* **deps:** update dependency eslint-config-standard to v14 ([d8d11aa](https://github.com/antfu/eslint-config/commit/d8d11aa))
|
||||||
|
* **deps:** update dependency eslint-plugin-node to v10 ([2e4bef3](https://github.com/antfu/eslint-config/commit/2e4bef3))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v12 ([f565a2f](https://github.com/antfu/eslint-config/commit/f565a2f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.7](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.7) (2019-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.1.0 ([99a5c38](https://github.com/antfu/eslint-config/commit/99a5c38))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.3.1 ([8c12e7e](https://github.com/antfu/eslint-config/commit/8c12e7e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.5.0 ([#11](https://github.com/antfu/eslint-config/issues/11)) ([d5341a2](https://github.com/antfu/eslint-config/commit/d5341a2))
|
||||||
|
* **deps:** update dependency eslint-config-standard to v14 ([d8d11aa](https://github.com/antfu/eslint-config/commit/d8d11aa))
|
||||||
|
* **deps:** update dependency eslint-plugin-node to v10 ([2e4bef3](https://github.com/antfu/eslint-config/commit/2e4bef3))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v12 ([f565a2f](https://github.com/antfu/eslint-config/commit/f565a2f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.6](https://github.com/antfu/eslint-config/compare/v0.2.5...v0.2.6) (2019-08-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v10 ([b4b704f](https://github.com/antfu/eslint-config/commit/b4b704f))
|
||||||
|
* **deps:** update typescript-eslint monorepo to v2 ([1f4250e](https://github.com/antfu/eslint-config/commit/1f4250e))
|
||||||
|
* update ts config ([0a2b8cd](https://github.com/antfu/eslint-config/commit/0a2b8cd))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.5](https://github.com/antfu/eslint-config/compare/v0.2.4...v0.2.5) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* vue ([be4d232](https://github.com/antfu/eslint-config/commit/be4d232))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.4](https://github.com/antfu/eslint-config/compare/v0.2.3...v0.2.4) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* vue deps ([03b3d7a](https://github.com/antfu/eslint-config/commit/03b3d7a))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.3](https://github.com/antfu/eslint-config/compare/v0.2.2...v0.2.3) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* update vue config ([cbf7bca](https://github.com/antfu/eslint-config/commit/cbf7bca))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.2](https://github.com/antfu/eslint-config/compare/v0.2.1...v0.2.2) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* update ts rules ([5d507f1](https://github.com/antfu/eslint-config/commit/5d507f1))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.1](https://github.com/antfu/eslint-config/compare/v0.2.0...v0.2.1) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* extends order ([0b40222](https://github.com/antfu/eslint-config/commit/0b40222))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.2.0](https://github.com/antfu/eslint-config/compare/v0.1.5...v0.2.0) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add ts config ([b025b09](https://github.com/antfu/eslint-config/commit/b025b09))
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019-PRESENT Anthony Fu<https://github.com/antfu>
|
Copyright (c) 2019 Anthony Fu<https://github.com/antfu>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
160
README.md
160
README.md
@ -1,160 +0,0 @@
|
|||||||
# @antfu/eslint-config
|
|
||||||
|
|
||||||
[](https://npmjs.com/package/@antfu/eslint-config) [](https://github.com/antfu/eslint-config)
|
|
||||||
|
|
||||||
- Single quotes, no semi
|
|
||||||
- Auto fix for formatting (aimed to be used standalone **without** Prettier)
|
|
||||||
- Designed to work with TypeScript, Vue out-of-box
|
|
||||||
- Lint also for json, yaml, markdown
|
|
||||||
- Sorted imports, dangling commas
|
|
||||||
- Reasonable defaults, best practices, only one-line of config
|
|
||||||
- **Style principle**: Minimal for reading, stable for diff
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
### Install
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm add -D eslint @antfu/eslint-config
|
|
||||||
```
|
|
||||||
|
|
||||||
### Config `.eslintrc`
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"extends": "@antfu"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
> You don't need `.eslintignore` normally as it has been provided by the preset.
|
|
||||||
|
|
||||||
### Add script for package.json
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"scripts": {
|
|
||||||
"lint": "eslint .",
|
|
||||||
"lint:fix": "eslint . --fix"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### VS Code support (auto fix)
|
|
||||||
|
|
||||||
Install [VS Code ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
|
|
||||||
|
|
||||||
Add the following settings to your `settings.json`:
|
|
||||||
|
|
||||||
```jsonc
|
|
||||||
{
|
|
||||||
"prettier.enable": false,
|
|
||||||
"editor.formatOnSave": false,
|
|
||||||
"editor.codeActionsOnSave": {
|
|
||||||
"source.fixAll.eslint": true,
|
|
||||||
"source.organizeImports": false
|
|
||||||
},
|
|
||||||
|
|
||||||
// The following is optional.
|
|
||||||
// It's better to put under project setting `.vscode/settings.json`
|
|
||||||
// to avoid conflicts with working with different eslint configs
|
|
||||||
// that does not support all formats.
|
|
||||||
"eslint.validate": [
|
|
||||||
"javascript",
|
|
||||||
"javascriptreact",
|
|
||||||
"typescript",
|
|
||||||
"typescriptreact",
|
|
||||||
"vue",
|
|
||||||
"html",
|
|
||||||
"markdown",
|
|
||||||
"json",
|
|
||||||
"jsonc",
|
|
||||||
"yaml"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### TypeScript Aware Rules
|
|
||||||
|
|
||||||
Type aware rules are enabled when a `tsconfig.eslint.json` is found in the project root, which will introduce some stricter rules into your project. If you want to enable it while have no `tsconfig.eslint.json` in the project root, you can change tsconfig name by modifying `ESLINT_TSCONFIG` env.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// .eslintrc.js
|
|
||||||
const process = require('node:process')
|
|
||||||
|
|
||||||
process.env.ESLINT_TSCONFIG = 'tsconfig.json'
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
extends: '@antfu'
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lint Staged
|
|
||||||
|
|
||||||
If you want to apply lint and auto-fix before every commit, you can add the following to your `package.json`:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"simple-git-hooks": {
|
|
||||||
"pre-commit": "pnpm lint-staged"
|
|
||||||
},
|
|
||||||
"lint-staged": {
|
|
||||||
"*": "eslint --fix"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
and then
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm i -D lint-staged simple-git-hooks
|
|
||||||
```
|
|
||||||
|
|
||||||
## Badge
|
|
||||||
|
|
||||||
If you enjoy this code style, and would like to mention it in your project, here is the badge you can use:
|
|
||||||
|
|
||||||
```md
|
|
||||||
[](https://github.com/antfu/eslint-config)
|
|
||||||
```
|
|
||||||
|
|
||||||
[](https://github.com/antfu/eslint-config)
|
|
||||||
|
|
||||||
## FAQ
|
|
||||||
|
|
||||||
### Prettier?
|
|
||||||
|
|
||||||
[Why I don't use Prettier](https://antfu.me/posts/why-not-prettier)
|
|
||||||
|
|
||||||
### How to lint CSS?
|
|
||||||
|
|
||||||
This config does NOT lint CSS. I personally use [UnoCSS](https://github.com/unocss/unocss) so I don't write CSS. If you still prefer CSS, you can use [stylelint](https://stylelint.io/) for CSS linting.
|
|
||||||
|
|
||||||
### I prefer XXX...
|
|
||||||
|
|
||||||
Sure, you can override the rules in your `.eslintrc` file.
|
|
||||||
|
|
||||||
<!-- eslint-skip -->
|
|
||||||
|
|
||||||
```jsonc
|
|
||||||
{
|
|
||||||
"extends": "@antfu",
|
|
||||||
"rules": {
|
|
||||||
// your rules...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Or you can always fork this repo and make your own.
|
|
||||||
|
|
||||||
## Check Also
|
|
||||||
|
|
||||||
- [antfu/dotfiles](https://github.com/antfu/dotfiles) - My dotfiles
|
|
||||||
- [antfu/vscode-settings](https://github.com/antfu/vscode-settings) - My VS Code settings
|
|
||||||
- [antfu/ts-starter](https://github.com/antfu/ts-starter) - My starter template for TypeScript library
|
|
||||||
- [antfu/vitesse](https://github.com/antfu/vitesse) - My starter template for Vue & Vite app
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[MIT](./LICENSE) License © 2019-PRESENT [Anthony Fu](https://github.com/antfu)
|
|
@ -1,9 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
9
fixtures/vitesse/.gitignore
vendored
9
fixtures/vitesse/.gitignore
vendored
@ -1,9 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
.vite-ssg-dist
|
|
||||||
.vite-ssg-temp
|
|
||||||
*.local
|
|
||||||
dist
|
|
||||||
dist-ssr
|
|
||||||
node_modules
|
|
||||||
.idea/
|
|
||||||
*.log
|
|
@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020-2021 Anthony Fu
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
@ -1 +0,0 @@
|
|||||||
This is a fixture cloned from https://github.com/antfu/vitesse. It's only for lint checking and does not run.
|
|
@ -1,10 +0,0 @@
|
|||||||
import { defineConfig } from 'cypress'
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
e2e: {
|
|
||||||
baseUrl: 'http://localhost:3333',
|
|
||||||
chromeWebSecurity: false,
|
|
||||||
specPattern: 'cypress/e2e/**/*.spec.*',
|
|
||||||
supportFile: false,
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,36 +0,0 @@
|
|||||||
context('Basic', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
cy.visit('/')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('basic nav', () => {
|
|
||||||
cy.url()
|
|
||||||
.should('eq', 'http://localhost:3333/')
|
|
||||||
|
|
||||||
cy.contains('[Home Layout]')
|
|
||||||
.should('exist')
|
|
||||||
|
|
||||||
cy.get('#input')
|
|
||||||
.type('Vitesse{Enter}')
|
|
||||||
.url()
|
|
||||||
.should('eq', 'http://localhost:3333/hi/Vitesse')
|
|
||||||
|
|
||||||
cy.contains('[Default Layout]')
|
|
||||||
.should('exist')
|
|
||||||
|
|
||||||
cy.get('[btn]')
|
|
||||||
.click()
|
|
||||||
.url()
|
|
||||||
.should('eq', 'http://localhost:3333/')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('markdown', () => {
|
|
||||||
cy.get('[title="About"]')
|
|
||||||
.click()
|
|
||||||
.url()
|
|
||||||
.should('eq', 'http://localhost:3333/about')
|
|
||||||
|
|
||||||
cy.get('.shiki')
|
|
||||||
.should('exist')
|
|
||||||
})
|
|
||||||
})
|
|
@ -1,22 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<link rel="apple-touch-icon" href="/pwa-192x192.png">
|
|
||||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#00aba9">
|
|
||||||
<meta name="msapplication-TileColor" content="#00aba9">
|
|
||||||
<script>
|
|
||||||
(function () {
|
|
||||||
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
||||||
const setting = localStorage.getItem('vueuse-color-scheme') || 'auto'
|
|
||||||
if (setting === 'dark' || (prefersDark && setting !== 'light'))
|
|
||||||
document.documentElement.classList.toggle('dark', true)
|
|
||||||
})()
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body class="font-sans">
|
|
||||||
<div id="app"></div>
|
|
||||||
<script type="module" src="/src/main.ts"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "module",
|
|
||||||
"private": true,
|
|
||||||
"packageManager": "pnpm@8.6.12",
|
|
||||||
"scripts": {
|
|
||||||
"build": "vite-ssg build",
|
|
||||||
"dev": "vite --port 3333 --open",
|
|
||||||
"lint": "eslint .",
|
|
||||||
"preview": "vite preview",
|
|
||||||
"preview-https": "serve dist",
|
|
||||||
"test": "vitest",
|
|
||||||
"test:e2e": "cypress open",
|
|
||||||
"test:unit": "vitest",
|
|
||||||
"typecheck": "vue-tsc --noEmit",
|
|
||||||
"up": "taze major -I"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@unocss/reset": "^0.54.2",
|
|
||||||
"@vueuse/core": "^10.3.0",
|
|
||||||
"@vueuse/head": "^1.1.26",
|
|
||||||
"nprogress": "^0.2.0",
|
|
||||||
"pinia": "^2.1.6",
|
|
||||||
"vue": "^3.3.4",
|
|
||||||
"vue-demi": "^0.14.5",
|
|
||||||
"vue-i18n": "^9.2.2",
|
|
||||||
"vue-router": "^4.2.4"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@antfu/eslint-config": "^0.40.0",
|
|
||||||
"@iconify-json/carbon": "^1.1.19",
|
|
||||||
"@intlify/vite-plugin-vue-i18n": "^7.0.0",
|
|
||||||
"@types/markdown-it-link-attributes": "^3.0.1",
|
|
||||||
"@types/nprogress": "^0.2.0",
|
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
|
||||||
"@vue/test-utils": "^2.4.1",
|
|
||||||
"critters": "^0.0.20",
|
|
||||||
"cross-env": "^7.0.3",
|
|
||||||
"cypress": "^12.17.3",
|
|
||||||
"eslint": "^8.46.0",
|
|
||||||
"eslint-plugin-cypress": "^2.13.3",
|
|
||||||
"https-localhost": "^4.7.1",
|
|
||||||
"markdown-it-link-attributes": "^4.0.1",
|
|
||||||
"markdown-it-shiki": "^0.9.0",
|
|
||||||
"pnpm": "^8.6.12",
|
|
||||||
"shiki": "^0.14.3",
|
|
||||||
"taze": "^0.11.2",
|
|
||||||
"typescript": "^5.1.6",
|
|
||||||
"unocss": "^0.54.2",
|
|
||||||
"unplugin-auto-import": "^0.16.6",
|
|
||||||
"unplugin-vue-components": "^0.25.1",
|
|
||||||
"vite": "^4.4.9",
|
|
||||||
"vite-plugin-inspect": "^0.7.35",
|
|
||||||
"vite-plugin-pages": "^0.31.0",
|
|
||||||
"vite-plugin-pwa": "^0.16.4",
|
|
||||||
"vite-plugin-vue-layouts": "^0.8.0",
|
|
||||||
"vite-plugin-vue-markdown": "^0.23.7",
|
|
||||||
"vite-ssg": "^0.23.1",
|
|
||||||
"vite-ssg-sitemap": "^0.5.1",
|
|
||||||
"vitest": "^0.34.1",
|
|
||||||
"vue-tsc": "^1.8.8"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
// https://github.com/vueuse/head
|
|
||||||
// you can use this to manipulate the document head in any components,
|
|
||||||
// they will be rendered correctly in the html results with vite-ssg
|
|
||||||
useHead({
|
|
||||||
title: 'Vitesse',
|
|
||||||
meta: [
|
|
||||||
{ name: 'description', content: 'Opinionated Vite Starter Template' },
|
|
||||||
{
|
|
||||||
name: 'theme-color',
|
|
||||||
content: computed(() => isDark.value ? '#00aba9' : '#ffffff'),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
link: [
|
|
||||||
{
|
|
||||||
rel: 'icon',
|
|
||||||
type: 'image/svg+xml',
|
|
||||||
href: computed(() => preferredDark.value ? '/favicon-dark.svg' : '/favicon.svg'),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<RouterView />
|
|
||||||
</template>
|
|
546
fixtures/vitesse/src/auto-imports.d.ts
vendored
546
fixtures/vitesse/src/auto-imports.d.ts
vendored
@ -1,546 +0,0 @@
|
|||||||
// Generated by 'unplugin-auto-import'
|
|
||||||
export {}
|
|
||||||
declare global {
|
|
||||||
const $$: typeof import('vue/macros')['$$']
|
|
||||||
const $: typeof import('vue/macros')['$']
|
|
||||||
const $computed: typeof import('vue/macros')['$computed']
|
|
||||||
const $customRef: typeof import('vue/macros')['$customRef']
|
|
||||||
const $ref: typeof import('vue/macros')['$ref']
|
|
||||||
const $shallowRef: typeof import('vue/macros')['$shallowRef']
|
|
||||||
const $toRef: typeof import('vue/macros')['$toRef']
|
|
||||||
const EffectScope: typeof import('vue')['EffectScope']
|
|
||||||
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
|
|
||||||
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
|
|
||||||
const computed: typeof import('vue')['computed']
|
|
||||||
const computedAsync: typeof import('@vueuse/core')['computedAsync']
|
|
||||||
const computedEager: typeof import('@vueuse/core')['computedEager']
|
|
||||||
const computedInject: typeof import('@vueuse/core')['computedInject']
|
|
||||||
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
|
|
||||||
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
|
|
||||||
const controlledRef: typeof import('@vueuse/core')['controlledRef']
|
|
||||||
const createApp: typeof import('vue')['createApp']
|
|
||||||
const createEventHook: typeof import('@vueuse/core')['createEventHook']
|
|
||||||
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
|
|
||||||
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
|
|
||||||
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
|
|
||||||
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
|
|
||||||
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
|
|
||||||
const customRef: typeof import('vue')['customRef']
|
|
||||||
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
|
|
||||||
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
|
|
||||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
|
||||||
const defineComponent: typeof import('vue')['defineComponent']
|
|
||||||
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
|
|
||||||
const effectScope: typeof import('vue')['effectScope']
|
|
||||||
const extendRef: typeof import('@vueuse/core')['extendRef']
|
|
||||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
|
||||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
|
||||||
const h: typeof import('vue')['h']
|
|
||||||
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
|
|
||||||
const inject: typeof import('vue')['inject']
|
|
||||||
const isDark: typeof import('./composables/dark')['isDark']
|
|
||||||
const isDefined: typeof import('@vueuse/core')['isDefined']
|
|
||||||
const isProxy: typeof import('vue')['isProxy']
|
|
||||||
const isReactive: typeof import('vue')['isReactive']
|
|
||||||
const isReadonly: typeof import('vue')['isReadonly']
|
|
||||||
const isRef: typeof import('vue')['isRef']
|
|
||||||
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
|
|
||||||
const markRaw: typeof import('vue')['markRaw']
|
|
||||||
const nextTick: typeof import('vue')['nextTick']
|
|
||||||
const onActivated: typeof import('vue')['onActivated']
|
|
||||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
|
||||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
|
||||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
|
||||||
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
|
|
||||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
|
||||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
|
||||||
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
|
|
||||||
const onLongPress: typeof import('@vueuse/core')['onLongPress']
|
|
||||||
const onMounted: typeof import('vue')['onMounted']
|
|
||||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
|
||||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
|
||||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
|
||||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
|
||||||
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
|
|
||||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
|
||||||
const onUpdated: typeof import('vue')['onUpdated']
|
|
||||||
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
|
|
||||||
const preferredDark: typeof import('./composables/dark')['preferredDark']
|
|
||||||
const provide: typeof import('vue')['provide']
|
|
||||||
const reactify: typeof import('@vueuse/core')['reactify']
|
|
||||||
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
|
|
||||||
const reactive: typeof import('vue')['reactive']
|
|
||||||
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
|
|
||||||
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
|
|
||||||
const reactivePick: typeof import('@vueuse/core')['reactivePick']
|
|
||||||
const readonly: typeof import('vue')['readonly']
|
|
||||||
const ref: typeof import('vue')['ref']
|
|
||||||
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
|
|
||||||
const refDebounced: typeof import('@vueuse/core')['refDebounced']
|
|
||||||
const refDefault: typeof import('@vueuse/core')['refDefault']
|
|
||||||
const refThrottled: typeof import('@vueuse/core')['refThrottled']
|
|
||||||
const refWithControl: typeof import('@vueuse/core')['refWithControl']
|
|
||||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
|
||||||
const resolveRef: typeof import('@vueuse/core')['resolveRef']
|
|
||||||
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
|
|
||||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
|
||||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
|
||||||
const shallowRef: typeof import('vue')['shallowRef']
|
|
||||||
const syncRef: typeof import('@vueuse/core')['syncRef']
|
|
||||||
const syncRefs: typeof import('@vueuse/core')['syncRefs']
|
|
||||||
const templateRef: typeof import('@vueuse/core')['templateRef']
|
|
||||||
const throttledRef: typeof import('@vueuse/core')['throttledRef']
|
|
||||||
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
|
|
||||||
const toRaw: typeof import('vue')['toRaw']
|
|
||||||
const toReactive: typeof import('@vueuse/core')['toReactive']
|
|
||||||
const toRef: typeof import('vue')['toRef']
|
|
||||||
const toRefs: typeof import('vue')['toRefs']
|
|
||||||
const toggleDark: typeof import('./composables/dark')['toggleDark']
|
|
||||||
const triggerRef: typeof import('vue')['triggerRef']
|
|
||||||
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
|
|
||||||
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
|
|
||||||
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
|
|
||||||
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
|
|
||||||
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
|
|
||||||
const unref: typeof import('vue')['unref']
|
|
||||||
const unrefElement: typeof import('@vueuse/core')['unrefElement']
|
|
||||||
const until: typeof import('@vueuse/core')['until']
|
|
||||||
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
|
|
||||||
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
|
|
||||||
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
|
|
||||||
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
|
|
||||||
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
|
|
||||||
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
|
|
||||||
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
|
|
||||||
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
|
|
||||||
const useArraySome: typeof import('@vueuse/core')['useArraySome']
|
|
||||||
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
|
|
||||||
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
|
|
||||||
const useAttrs: typeof import('vue')['useAttrs']
|
|
||||||
const useBase64: typeof import('@vueuse/core')['useBase64']
|
|
||||||
const useBattery: typeof import('@vueuse/core')['useBattery']
|
|
||||||
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
|
|
||||||
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
|
|
||||||
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
|
|
||||||
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
|
|
||||||
const useCached: typeof import('@vueuse/core')['useCached']
|
|
||||||
const useClipboard: typeof import('@vueuse/core')['useClipboard']
|
|
||||||
const useColorMode: typeof import('@vueuse/core')['useColorMode']
|
|
||||||
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
|
|
||||||
const useCounter: typeof import('@vueuse/core')['useCounter']
|
|
||||||
const useCssModule: typeof import('vue')['useCssModule']
|
|
||||||
const useCssVar: typeof import('@vueuse/core')['useCssVar']
|
|
||||||
const useCssVars: typeof import('vue')['useCssVars']
|
|
||||||
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
|
|
||||||
const useCycleList: typeof import('@vueuse/core')['useCycleList']
|
|
||||||
const useDark: typeof import('@vueuse/core')['useDark']
|
|
||||||
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
|
|
||||||
const useDebounce: typeof import('@vueuse/core')['useDebounce']
|
|
||||||
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
|
|
||||||
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
|
|
||||||
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
|
|
||||||
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
|
|
||||||
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
|
|
||||||
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
|
|
||||||
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
|
|
||||||
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
|
|
||||||
const useDraggable: typeof import('@vueuse/core')['useDraggable']
|
|
||||||
const useDropZone: typeof import('@vueuse/core')['useDropZone']
|
|
||||||
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
|
|
||||||
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
|
|
||||||
const useElementHover: typeof import('@vueuse/core')['useElementHover']
|
|
||||||
const useElementSize: typeof import('@vueuse/core')['useElementSize']
|
|
||||||
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
|
|
||||||
const useEventBus: typeof import('@vueuse/core')['useEventBus']
|
|
||||||
const useEventListener: typeof import('@vueuse/core')['useEventListener']
|
|
||||||
const useEventSource: typeof import('@vueuse/core')['useEventSource']
|
|
||||||
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
|
|
||||||
const useFavicon: typeof import('@vueuse/core')['useFavicon']
|
|
||||||
const useFetch: typeof import('@vueuse/core')['useFetch']
|
|
||||||
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
|
|
||||||
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
|
|
||||||
const useFocus: typeof import('@vueuse/core')['useFocus']
|
|
||||||
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
|
|
||||||
const useFps: typeof import('@vueuse/core')['useFps']
|
|
||||||
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
|
|
||||||
const useGamepad: typeof import('@vueuse/core')['useGamepad']
|
|
||||||
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
|
|
||||||
const useHead: typeof import('@vueuse/head')['useHead']
|
|
||||||
const useI18n: typeof import('vue-i18n')['useI18n']
|
|
||||||
const useIdle: typeof import('@vueuse/core')['useIdle']
|
|
||||||
const useImage: typeof import('@vueuse/core')['useImage']
|
|
||||||
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
|
|
||||||
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
|
|
||||||
const useInterval: typeof import('@vueuse/core')['useInterval']
|
|
||||||
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
|
|
||||||
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
|
|
||||||
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
|
|
||||||
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
|
|
||||||
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
|
|
||||||
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
|
|
||||||
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
|
|
||||||
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
|
|
||||||
const useMemoize: typeof import('@vueuse/core')['useMemoize']
|
|
||||||
const useMemory: typeof import('@vueuse/core')['useMemory']
|
|
||||||
const useMounted: typeof import('@vueuse/core')['useMounted']
|
|
||||||
const useMouse: typeof import('@vueuse/core')['useMouse']
|
|
||||||
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
|
|
||||||
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
|
|
||||||
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
|
|
||||||
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
|
|
||||||
const useNetwork: typeof import('@vueuse/core')['useNetwork']
|
|
||||||
const useNow: typeof import('@vueuse/core')['useNow']
|
|
||||||
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
|
|
||||||
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
|
|
||||||
const useOnline: typeof import('@vueuse/core')['useOnline']
|
|
||||||
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
|
|
||||||
const useParallax: typeof import('@vueuse/core')['useParallax']
|
|
||||||
const usePermission: typeof import('@vueuse/core')['usePermission']
|
|
||||||
const usePointer: typeof import('@vueuse/core')['usePointer']
|
|
||||||
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
|
|
||||||
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
|
|
||||||
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
|
|
||||||
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
|
|
||||||
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
|
|
||||||
const useRafFn: typeof import('@vueuse/core')['useRafFn']
|
|
||||||
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
|
|
||||||
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
|
|
||||||
const useRoute: typeof import('vue-router')['useRoute']
|
|
||||||
const useRouter: typeof import('vue-router')['useRouter']
|
|
||||||
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
|
|
||||||
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
|
|
||||||
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
|
|
||||||
const useScroll: typeof import('@vueuse/core')['useScroll']
|
|
||||||
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
|
|
||||||
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
|
|
||||||
const useShare: typeof import('@vueuse/core')['useShare']
|
|
||||||
const useSlots: typeof import('vue')['useSlots']
|
|
||||||
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
|
|
||||||
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
|
|
||||||
const useStepper: typeof import('@vueuse/core')['useStepper']
|
|
||||||
const useStorage: typeof import('@vueuse/core')['useStorage']
|
|
||||||
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
|
|
||||||
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
|
|
||||||
const useSupported: typeof import('@vueuse/core')['useSupported']
|
|
||||||
const useSwipe: typeof import('@vueuse/core')['useSwipe']
|
|
||||||
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
|
|
||||||
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
|
|
||||||
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
|
|
||||||
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
|
|
||||||
const useThrottle: typeof import('@vueuse/core')['useThrottle']
|
|
||||||
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
|
|
||||||
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
|
|
||||||
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
|
|
||||||
const useTimeout: typeof import('@vueuse/core')['useTimeout']
|
|
||||||
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
|
|
||||||
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
|
|
||||||
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
|
|
||||||
const useTitle: typeof import('@vueuse/core')['useTitle']
|
|
||||||
const useToNumber: typeof import('@vueuse/core')['useToNumber']
|
|
||||||
const useToString: typeof import('@vueuse/core')['useToString']
|
|
||||||
const useToggle: typeof import('@vueuse/core')['useToggle']
|
|
||||||
const useTransition: typeof import('@vueuse/core')['useTransition']
|
|
||||||
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
|
|
||||||
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
|
|
||||||
const useUserStore: typeof import('./store/user')['useUserStore']
|
|
||||||
const useVModel: typeof import('@vueuse/core')['useVModel']
|
|
||||||
const useVModels: typeof import('@vueuse/core')['useVModels']
|
|
||||||
const useVibrate: typeof import('@vueuse/core')['useVibrate']
|
|
||||||
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
|
|
||||||
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
|
|
||||||
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
|
|
||||||
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
|
|
||||||
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
|
|
||||||
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
|
|
||||||
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
|
|
||||||
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
|
|
||||||
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
|
|
||||||
const watch: typeof import('vue')['watch']
|
|
||||||
const watchArray: typeof import('@vueuse/core')['watchArray']
|
|
||||||
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
|
|
||||||
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
|
|
||||||
const watchEffect: typeof import('vue')['watchEffect']
|
|
||||||
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
|
|
||||||
const watchOnce: typeof import('@vueuse/core')['watchOnce']
|
|
||||||
const watchPausable: typeof import('@vueuse/core')['watchPausable']
|
|
||||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
|
||||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
|
||||||
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
|
|
||||||
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
|
|
||||||
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
|
|
||||||
const whenever: typeof import('@vueuse/core')['whenever']
|
|
||||||
}
|
|
||||||
// for vue template auto import
|
|
||||||
import { UnwrapRef } from 'vue'
|
|
||||||
declare module '@vue/runtime-core' {
|
|
||||||
interface ComponentCustomProperties {
|
|
||||||
readonly $$: UnwrapRef<typeof import('vue/macros')['$$']>
|
|
||||||
readonly $: UnwrapRef<typeof import('vue/macros')['$']>
|
|
||||||
readonly $computed: UnwrapRef<typeof import('vue/macros')['$computed']>
|
|
||||||
readonly $customRef: UnwrapRef<typeof import('vue/macros')['$customRef']>
|
|
||||||
readonly $ref: UnwrapRef<typeof import('vue/macros')['$ref']>
|
|
||||||
readonly $shallowRef: UnwrapRef<typeof import('vue/macros')['$shallowRef']>
|
|
||||||
readonly $toRef: UnwrapRef<typeof import('vue/macros')['$toRef']>
|
|
||||||
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
|
||||||
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
|
||||||
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
|
||||||
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
|
||||||
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
|
||||||
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
|
||||||
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
|
|
||||||
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
|
|
||||||
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
|
|
||||||
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
|
|
||||||
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
|
|
||||||
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
|
|
||||||
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
|
|
||||||
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
|
|
||||||
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
|
|
||||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
|
||||||
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
|
||||||
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
|
||||||
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
|
||||||
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
|
||||||
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
|
|
||||||
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
|
|
||||||
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
|
|
||||||
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
|
|
||||||
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
|
|
||||||
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
|
|
||||||
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
|
|
||||||
readonly h: UnwrapRef<typeof import('vue')['h']>
|
|
||||||
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
|
|
||||||
readonly inject: UnwrapRef<typeof import('vue')['inject']>
|
|
||||||
readonly isDark: UnwrapRef<typeof import('./composables/dark')['isDark']>
|
|
||||||
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
|
|
||||||
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
|
|
||||||
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
|
||||||
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
|
||||||
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
|
||||||
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
|
|
||||||
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
|
|
||||||
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
|
|
||||||
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
|
|
||||||
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
|
|
||||||
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
|
|
||||||
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
|
|
||||||
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
|
|
||||||
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
|
|
||||||
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
|
|
||||||
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
|
|
||||||
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
|
|
||||||
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
|
|
||||||
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
|
|
||||||
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
|
|
||||||
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
|
|
||||||
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
|
|
||||||
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
|
|
||||||
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
|
|
||||||
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
|
|
||||||
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
|
|
||||||
readonly preferredDark: UnwrapRef<typeof import('./composables/dark')['preferredDark']>
|
|
||||||
readonly provide: UnwrapRef<typeof import('vue')['provide']>
|
|
||||||
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
|
|
||||||
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
|
|
||||||
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
|
|
||||||
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
|
|
||||||
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
|
|
||||||
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
|
|
||||||
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
|
|
||||||
readonly ref: UnwrapRef<typeof import('vue')['ref']>
|
|
||||||
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
|
|
||||||
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
|
|
||||||
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
|
|
||||||
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
|
|
||||||
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
|
|
||||||
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
|
|
||||||
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
|
|
||||||
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
|
|
||||||
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
|
|
||||||
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
|
|
||||||
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
|
|
||||||
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
|
|
||||||
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
|
|
||||||
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
|
|
||||||
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
|
|
||||||
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
|
|
||||||
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
|
|
||||||
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
|
|
||||||
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
|
|
||||||
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
|
|
||||||
readonly toggleDark: UnwrapRef<typeof import('./composables/dark')['toggleDark']>
|
|
||||||
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
|
|
||||||
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
|
|
||||||
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
|
|
||||||
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
|
|
||||||
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
|
|
||||||
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
|
|
||||||
readonly unref: UnwrapRef<typeof import('vue')['unref']>
|
|
||||||
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
|
|
||||||
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
|
|
||||||
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
|
|
||||||
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
|
|
||||||
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
|
|
||||||
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
|
|
||||||
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
|
|
||||||
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
|
|
||||||
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
|
|
||||||
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
|
|
||||||
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
|
|
||||||
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
|
|
||||||
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
|
|
||||||
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
|
|
||||||
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
|
|
||||||
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
|
|
||||||
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
|
|
||||||
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
|
|
||||||
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
|
|
||||||
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
|
|
||||||
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
|
|
||||||
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
|
|
||||||
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
|
|
||||||
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
|
|
||||||
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
|
|
||||||
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
|
|
||||||
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
|
|
||||||
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
|
|
||||||
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
|
|
||||||
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
|
|
||||||
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
|
|
||||||
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
|
|
||||||
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
|
|
||||||
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
|
|
||||||
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
|
|
||||||
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
|
|
||||||
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
|
|
||||||
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
|
|
||||||
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
|
|
||||||
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
|
|
||||||
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
|
|
||||||
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
|
|
||||||
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
|
|
||||||
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
|
|
||||||
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
|
|
||||||
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
|
|
||||||
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
|
|
||||||
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
|
|
||||||
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
|
|
||||||
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
|
|
||||||
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
|
|
||||||
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
|
|
||||||
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
|
|
||||||
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
|
|
||||||
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
|
|
||||||
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
|
|
||||||
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
|
|
||||||
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
|
|
||||||
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
|
|
||||||
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
|
|
||||||
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
|
|
||||||
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
|
|
||||||
readonly useHead: UnwrapRef<typeof import('@vueuse/head')['useHead']>
|
|
||||||
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
|
|
||||||
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
|
|
||||||
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
|
|
||||||
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
|
|
||||||
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
|
|
||||||
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
|
|
||||||
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
|
|
||||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
|
||||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
|
||||||
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
|
|
||||||
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
|
|
||||||
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
|
|
||||||
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
|
|
||||||
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
|
|
||||||
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
|
|
||||||
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
|
|
||||||
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
|
|
||||||
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
|
|
||||||
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
|
|
||||||
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
|
|
||||||
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
|
|
||||||
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
|
|
||||||
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
|
|
||||||
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
|
|
||||||
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
|
|
||||||
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
|
|
||||||
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
|
|
||||||
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
|
|
||||||
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
|
|
||||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
|
||||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
|
||||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
|
||||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
|
||||||
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
|
|
||||||
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
|
|
||||||
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
|
|
||||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
|
||||||
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
|
|
||||||
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
|
|
||||||
readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
|
|
||||||
readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']>
|
|
||||||
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
|
|
||||||
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
|
|
||||||
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
|
|
||||||
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
|
|
||||||
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
|
|
||||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
|
||||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
|
||||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
|
||||||
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
|
|
||||||
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
|
|
||||||
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
|
|
||||||
readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']>
|
|
||||||
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
|
|
||||||
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
|
|
||||||
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
|
|
||||||
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
|
|
||||||
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
|
|
||||||
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
|
|
||||||
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
|
|
||||||
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
|
|
||||||
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
|
|
||||||
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
|
|
||||||
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
|
|
||||||
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
|
|
||||||
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
|
|
||||||
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
|
|
||||||
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
|
|
||||||
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
|
|
||||||
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
|
|
||||||
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
|
|
||||||
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
|
|
||||||
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
|
|
||||||
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
|
|
||||||
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
|
|
||||||
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
|
|
||||||
readonly useUserStore: UnwrapRef<typeof import('./store/user')['useUserStore']>
|
|
||||||
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
|
|
||||||
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
|
|
||||||
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
|
|
||||||
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
|
|
||||||
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
|
|
||||||
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
|
|
||||||
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
|
|
||||||
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
|
|
||||||
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
|
|
||||||
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
|
|
||||||
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
|
|
||||||
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
|
|
||||||
readonly watch: UnwrapRef<typeof import('vue')['watch']>
|
|
||||||
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
|
|
||||||
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
|
|
||||||
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
|
|
||||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
|
||||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
|
||||||
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
|
|
||||||
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
|
|
||||||
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
|
|
||||||
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
|
|
||||||
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
|
|
||||||
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
|
|
||||||
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
|
|
||||||
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
|
|
||||||
}
|
|
||||||
}
|
|
16
fixtures/vitesse/src/components.d.ts
vendored
16
fixtures/vitesse/src/components.d.ts
vendored
@ -1,16 +0,0 @@
|
|||||||
// generated by unplugin-vue-components
|
|
||||||
// We suggest you to commit this file into source control
|
|
||||||
// Read more: https://github.com/vuejs/core/pull/3399
|
|
||||||
import '@vue/runtime-core'
|
|
||||||
|
|
||||||
export {}
|
|
||||||
|
|
||||||
declare module '@vue/runtime-core' {
|
|
||||||
export interface GlobalComponents {
|
|
||||||
Counter: typeof import('./components/Counter.vue')['default']
|
|
||||||
Footer: typeof import('./components/Footer.vue')['default']
|
|
||||||
README: typeof import('./components/README.md')['default']
|
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const props = defineProps<{
|
|
||||||
initial: number
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const { count, inc, dec } = useCounter(props.initial)
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
{{ count }}
|
|
||||||
<button class="inc" @click="inc()">
|
|
||||||
+
|
|
||||||
</button>
|
|
||||||
<button class="dec" @click="dec()">
|
|
||||||
-
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
@ -1,33 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const { t, availableLocales, locale } = useI18n()
|
|
||||||
|
|
||||||
function toggleLocales() {
|
|
||||||
// change to some real logic
|
|
||||||
const locales = availableLocales
|
|
||||||
locale.value = locales[(locales.indexOf(locale.value) + 1) % locales.length]
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<nav text-xl mt-6>
|
|
||||||
<RouterLink class="icon-btn mx-2" to="/" :title="t('button.home')">
|
|
||||||
<div i-carbon-campsite />
|
|
||||||
</RouterLink>
|
|
||||||
|
|
||||||
<button class="icon-btn mx-2 !outline-none" :title="t('button.toggle_dark')" @click="toggleDark()">
|
|
||||||
<div i="carbon-sun dark:carbon-moon" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<a class="icon-btn mx-2" :title="t('button.toggle_langs')" @click="toggleLocales()">
|
|
||||||
<div i-carbon-language />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<RouterLink class="icon-btn mx-2" to="/about" :title="t('button.about')">
|
|
||||||
<div i-carbon-dicom-overlay />
|
|
||||||
</RouterLink>
|
|
||||||
|
|
||||||
<a class="icon-btn mx-2" rel="noreferrer" href="https://github.com/antfu/vitesse" target="_blank" title="GitHub">
|
|
||||||
<div i-carbon-logo-github />
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
</template>
|
|
@ -1,10 +0,0 @@
|
|||||||
## Components
|
|
||||||
|
|
||||||
Components in this dir will be auto-registered and on-demand, powered by [`unplugin-vue-components`](https://github.com/antfu/unplugin-vue-components).
|
|
||||||
|
|
||||||
|
|
||||||
### Icons
|
|
||||||
|
|
||||||
You can use icons from almost any icon sets by the power of [Iconify](https://iconify.design/).
|
|
||||||
|
|
||||||
It will only bundle the icons you use. Check out [`unplugin-icons`](https://github.com/antfu/unplugin-icons) for more details.
|
|
@ -1,4 +0,0 @@
|
|||||||
// these APIs are auto-imported from @vueuse/core
|
|
||||||
export const isDark = useDark()
|
|
||||||
export const toggleDark = useToggle(isDark)
|
|
||||||
export const preferredDark = usePreferredDark()
|
|
@ -1,18 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const router = useRouter()
|
|
||||||
const { t } = useI18n()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<main p="x4 y10" text="center teal-700 dark:gray-200">
|
|
||||||
<div text-4xl>
|
|
||||||
<div i-carbon-warning inline-block />
|
|
||||||
</div>
|
|
||||||
<RouterView />
|
|
||||||
<div>
|
|
||||||
<button btn text-sm m="3 t8" @click="router.back()">
|
|
||||||
{{ t('button.back') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</template>
|
|
@ -1,14 +0,0 @@
|
|||||||
## Layouts
|
|
||||||
|
|
||||||
Vue components in this dir are used as layouts.
|
|
||||||
|
|
||||||
By default, `default.vue` will be used unless an alternative is specified in the route meta.
|
|
||||||
|
|
||||||
With [`vite-plugin-pages`](https://github.com/hannoeru/vite-plugin-pages) and [`vite-plugin-vue-layouts`](https://github.com/JohnCampionJr/vite-plugin-vue-layouts), you can specify the layout in the page's SFCs like this:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<route lang="yaml">
|
|
||||||
meta:
|
|
||||||
layout: home
|
|
||||||
</route>
|
|
||||||
```
|
|
@ -1,9 +0,0 @@
|
|||||||
<template>
|
|
||||||
<main class="px-4 py-10 text-center text-gray-700 dark:text-gray-200">
|
|
||||||
<RouterView />
|
|
||||||
<Footer />
|
|
||||||
<div class="mt-5 mx-auto text-center opacity-75 dark:opacity-50 text-sm">
|
|
||||||
[Default Layout]
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</template>
|
|
@ -1,9 +0,0 @@
|
|||||||
<template>
|
|
||||||
<main class="px-4 py-10 text-center text-gray-700 dark:text-gray-200">
|
|
||||||
<RouterView />
|
|
||||||
<Footer />
|
|
||||||
<div class="mt-5 mx-auto text-center opacity-75 dark:opacity-50 text-sm">
|
|
||||||
[Home Layout]
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</template>
|
|
@ -1,22 +0,0 @@
|
|||||||
import { ViteSSG } from 'vite-ssg'
|
|
||||||
import { setupLayouts } from 'virtual:generated-layouts'
|
|
||||||
import App from './App.vue'
|
|
||||||
import type { UserModule } from './types'
|
|
||||||
import generatedRoutes from '~pages'
|
|
||||||
|
|
||||||
import '@unocss/reset/tailwind.css'
|
|
||||||
import './styles/main.css'
|
|
||||||
import 'uno.css'
|
|
||||||
|
|
||||||
const routes = setupLayouts(generatedRoutes)
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-ssg
|
|
||||||
export const createApp = ViteSSG(
|
|
||||||
App,
|
|
||||||
{ routes, base: import.meta.env.BASE_URL },
|
|
||||||
(ctx) => {
|
|
||||||
// install all modules under `modules/`
|
|
||||||
Object.values(import.meta.glob<{ install: UserModule }>('./modules/*.ts', { eager: true }))
|
|
||||||
.forEach(i => i.install?.(ctx))
|
|
||||||
},
|
|
||||||
)
|
|
@ -1,11 +0,0 @@
|
|||||||
## Modules
|
|
||||||
|
|
||||||
A custom user module system. Place a `.ts` file with the following template, it will be installed automatically.
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { type UserModule } from '~/types'
|
|
||||||
|
|
||||||
export const install: UserModule = ({ app, router, isClient }) => {
|
|
||||||
// do something
|
|
||||||
}
|
|
||||||
```
|
|
@ -1,25 +0,0 @@
|
|||||||
import { createI18n } from 'vue-i18n'
|
|
||||||
import { type UserModule } from '~/types'
|
|
||||||
|
|
||||||
// Import i18n resources
|
|
||||||
// https://vitejs.dev/guide/features.html#glob-import
|
|
||||||
//
|
|
||||||
// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
|
|
||||||
const messages = Object.fromEntries(
|
|
||||||
Object.entries(
|
|
||||||
import.meta.glob<{ default: any }>('../../locales/*.y(a)?ml', { eager: true }))
|
|
||||||
.map(([key, value]) => {
|
|
||||||
const yaml = key.endsWith('.yaml')
|
|
||||||
return [key.slice(14, yaml ? -5 : -4), value.default]
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
export const install: UserModule = ({ app }) => {
|
|
||||||
const i18n = createI18n({
|
|
||||||
legacy: false,
|
|
||||||
locale: 'en',
|
|
||||||
messages,
|
|
||||||
})
|
|
||||||
|
|
||||||
app.use(i18n)
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
import NProgress from 'nprogress'
|
|
||||||
import { type UserModule } from '~/types'
|
|
||||||
|
|
||||||
export const install: UserModule = ({ isClient, router }) => {
|
|
||||||
if (isClient) {
|
|
||||||
router.beforeEach((to, from) => {
|
|
||||||
if (to.path !== from.path)
|
|
||||||
NProgress.start()
|
|
||||||
})
|
|
||||||
router.afterEach(() => {
|
|
||||||
NProgress.done()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
import { createPinia } from 'pinia'
|
|
||||||
import { type UserModule } from '~/types'
|
|
||||||
|
|
||||||
// Setup Pinia
|
|
||||||
// https://pinia.vuejs.org/
|
|
||||||
export const install: UserModule = ({ isClient, initialState, app }) => {
|
|
||||||
const pinia = createPinia()
|
|
||||||
app.use(pinia)
|
|
||||||
// Refer to
|
|
||||||
// https://github.com/antfu/vite-ssg/blob/main/README.md#state-serialization
|
|
||||||
// for other serialization strategies.
|
|
||||||
if (isClient)
|
|
||||||
pinia.state.value = (initialState.pinia) || {}
|
|
||||||
|
|
||||||
else
|
|
||||||
initialState.pinia = pinia.state.value
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
import { type UserModule } from '~/types'
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-plugin-pwa#automatic-reload-when-new-content-available
|
|
||||||
export const install: UserModule = ({ isClient, router }) => {
|
|
||||||
if (!isClient)
|
|
||||||
return
|
|
||||||
|
|
||||||
router.isReady().then(async () => {
|
|
||||||
const { registerSW } = await import('virtual:pwa-register')
|
|
||||||
registerSW({ immediate: true })
|
|
||||||
})
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
## File-based Routing
|
|
||||||
|
|
||||||
Routes will be auto-generated for Vue files in this dir with the same file structure.
|
|
||||||
Check out [`vite-plugin-pages`](https://github.com/hannoeru/vite-plugin-pages) for more details.
|
|
||||||
|
|
||||||
### Path Aliasing
|
|
||||||
|
|
||||||
`~/` is aliased to `./src/` folder.
|
|
||||||
|
|
||||||
For example, instead of having
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { isDark } from '../../../../composables'
|
|
||||||
```
|
|
||||||
|
|
||||||
now, you can use
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { isDark } from '~/composables'
|
|
||||||
```
|
|
@ -1,14 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const { t } = useI18n()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
{{ t('not-found') }}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<route lang="yaml">
|
|
||||||
meta:
|
|
||||||
layout: 404
|
|
||||||
</route>
|
|
@ -1,21 +0,0 @@
|
|||||||
---
|
|
||||||
title: About
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="text-center">
|
|
||||||
<!-- You can use Vue components inside markdown -->
|
|
||||||
<div i-carbon-dicom-overlay class="text-4xl -mb-6 m-auto" />
|
|
||||||
<h3>About</h3>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
[Vitesse](https://github.com/antfu/vitesse) is an opinionated [Vite](https://github.com/vitejs/vite) starter template made by [@antfu](https://github.com/antfu) for mocking apps swiftly. With **file-based routing**, **components auto importing**, **markdown support**, I18n, PWA and uses **UnoCSS** for styling and icons.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// syntax highlighting example
|
|
||||||
function vitesse() {
|
|
||||||
const foo = 'bar'
|
|
||||||
console.log(foo)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Check out the [GitHub repo](https://github.com/antfu/vitesse) for more details.
|
|
@ -1,47 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const props = defineProps<{ name: string }>()
|
|
||||||
const router = useRouter()
|
|
||||||
const user = useUserStore()
|
|
||||||
const { t } = useI18n()
|
|
||||||
|
|
||||||
watchEffect(() => {
|
|
||||||
user.setNewName(props.name)
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<div text-4xl>
|
|
||||||
<div i-carbon-pedestrian inline-block />
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
{{ t('intro.hi', { name: props.name }) }}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p text-sm opacity-75>
|
|
||||||
<em>{{ t('intro.dynamic-route') }}</em>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<template v-if="user.otherNames.length">
|
|
||||||
<p text-sm mt-4>
|
|
||||||
<span opacity-75>{{ t('intro.aka') }}:</span>
|
|
||||||
<ul>
|
|
||||||
<li v-for="otherName in user.otherNames" :key="otherName">
|
|
||||||
<router-link :to="`/hi/${otherName}`" replace>
|
|
||||||
{{ otherName }}
|
|
||||||
</router-link>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<button
|
|
||||||
btn m="3 t6" text-sm
|
|
||||||
@click="router.back()"
|
|
||||||
>
|
|
||||||
{{ t('button.back') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
@ -1,62 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const user = useUserStore()
|
|
||||||
const name = $ref(user.savedName)
|
|
||||||
|
|
||||||
const router = useRouter()
|
|
||||||
function go() {
|
|
||||||
if (name)
|
|
||||||
router.push(`/hi/${encodeURIComponent(name)}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
const { t } = useI18n()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<div text-4xl>
|
|
||||||
<div i-carbon-campsite inline-block />
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
<a rel="noreferrer" href="https://github.com/antfu/vitesse" target="_blank">
|
|
||||||
Vitesse
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<em text-sm opacity-75>{{ t('intro.desc') }}</em>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div py-4 />
|
|
||||||
|
|
||||||
<input
|
|
||||||
id="input"
|
|
||||||
v-model="name"
|
|
||||||
:placeholder="t('intro.whats-your-name')"
|
|
||||||
:aria-label="t('intro.whats-your-name')"
|
|
||||||
type="text"
|
|
||||||
autocomplete="false"
|
|
||||||
p="x4 y2"
|
|
||||||
w="250px"
|
|
||||||
text="center"
|
|
||||||
bg="transparent"
|
|
||||||
border="~ rounded gray-200 dark:gray-700"
|
|
||||||
outline="none active:none"
|
|
||||||
@keydown.enter="go"
|
|
||||||
>
|
|
||||||
<label class="hidden" for="input">{{ t('intro.whats-your-name') }}</label>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<button
|
|
||||||
btn m-3 text-sm
|
|
||||||
:disabled="!name"
|
|
||||||
@click="go"
|
|
||||||
>
|
|
||||||
{{ t('button.go') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<route lang="yaml">
|
|
||||||
meta:
|
|
||||||
layout: home
|
|
||||||
</route>
|
|
16
fixtures/vitesse/src/shims.d.ts
vendored
16
fixtures/vitesse/src/shims.d.ts
vendored
@ -1,16 +0,0 @@
|
|||||||
declare interface Window {
|
|
||||||
// extend the window
|
|
||||||
}
|
|
||||||
|
|
||||||
// with vite-plugin-vue-markdown, markdown files can be treated as Vue components
|
|
||||||
declare module '*.md' {
|
|
||||||
import { type DefineComponent } from 'vue'
|
|
||||||
const component: DefineComponent<{}, {}, any>
|
|
||||||
export default component
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module '*.vue' {
|
|
||||||
import { type DefineComponent } from 'vue'
|
|
||||||
const component: DefineComponent<{}, {}, any>
|
|
||||||
export default component
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
import { acceptHMRUpdate, defineStore } from 'pinia'
|
|
||||||
|
|
||||||
export const useUserStore = defineStore('user', () => {
|
|
||||||
/**
|
|
||||||
* Current name of the user.
|
|
||||||
*/
|
|
||||||
const savedName = ref('')
|
|
||||||
const previousNames = ref(new Set<string>())
|
|
||||||
|
|
||||||
const usedNames = computed(() => Array.from(previousNames.value))
|
|
||||||
const otherNames = computed(() => usedNames.value.filter(name => name !== savedName.value))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changes the current name of the user and saves the one that was used
|
|
||||||
* before.
|
|
||||||
*
|
|
||||||
* @param name - new name to set
|
|
||||||
*/
|
|
||||||
function setNewName(name: string) {
|
|
||||||
if (savedName.value)
|
|
||||||
previousNames.value.add(savedName.value)
|
|
||||||
|
|
||||||
savedName.value = name
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
setNewName,
|
|
||||||
otherNames,
|
|
||||||
savedName,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (import.meta.hot)
|
|
||||||
import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot))
|
|
@ -1,29 +0,0 @@
|
|||||||
@import './markdown.css';
|
|
||||||
|
|
||||||
html,
|
|
||||||
body,
|
|
||||||
#app {
|
|
||||||
height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
html.dark {
|
|
||||||
background: #121212;
|
|
||||||
color-scheme: dark;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nprogress {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nprogress .bar {
|
|
||||||
background: rgb(13,148,136);
|
|
||||||
opacity: 0.75;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 1031;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 2px;
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
.prose pre:not(.shiki) {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prose .shiki {
|
|
||||||
font-family: 'DM Mono', monospace;
|
|
||||||
font-size: 1.2em;
|
|
||||||
line-height: 1.4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prose img {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shiki-light {
|
|
||||||
background: #f8f8f8 !important;
|
|
||||||
}
|
|
||||||
.shiki-dark {
|
|
||||||
background: #0e0e0e !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
html.dark .shiki-light {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
html:not(.dark) .shiki-dark {
|
|
||||||
display: none;
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
import { type ViteSSGContext } from 'vite-ssg'
|
|
||||||
|
|
||||||
export type UserModule = (ctx: ViteSSGContext) => void
|
|
@ -1,3 +0,0 @@
|
|||||||
// Vitest Snapshot v1
|
|
||||||
|
|
||||||
exports[`Counter.vue > should render 1`] = `"<div>10 <button class=\\"inc\\"> + </button><button class=\\"dec\\"> - </button></div>"`;
|
|
@ -1,7 +0,0 @@
|
|||||||
import { describe, expect, it } from 'vitest'
|
|
||||||
|
|
||||||
describe('tests', () => {
|
|
||||||
it('should works', () => {
|
|
||||||
expect(1 + 1).toEqual(2)
|
|
||||||
})
|
|
||||||
})
|
|
@ -1,28 +0,0 @@
|
|||||||
import { mount } from '@vue/test-utils'
|
|
||||||
import { describe, expect, it } from 'vitest'
|
|
||||||
import Counter from '../src/components/Counter.vue'
|
|
||||||
|
|
||||||
describe('Counter.vue', () => {
|
|
||||||
it('should render', () => {
|
|
||||||
const wrapper = mount(Counter, { props: { initial: 10 } })
|
|
||||||
expect(wrapper.text()).toContain('10')
|
|
||||||
expect(wrapper.html()).toMatchSnapshot()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should be interactive', async () => {
|
|
||||||
const wrapper = mount(Counter, { props: { initial: 0 } })
|
|
||||||
expect(wrapper.text()).toContain('0')
|
|
||||||
|
|
||||||
expect(wrapper.find('.inc').exists()).toBe(true)
|
|
||||||
|
|
||||||
expect(wrapper.find('.dec').exists()).toBe(true)
|
|
||||||
|
|
||||||
await wrapper.get('.inc').trigger('click')
|
|
||||||
|
|
||||||
expect(wrapper.text()).toContain('1')
|
|
||||||
|
|
||||||
await wrapper.get('.dec').trigger('click')
|
|
||||||
|
|
||||||
expect(wrapper.text()).toContain('0')
|
|
||||||
})
|
|
||||||
})
|
|
@ -1,38 +0,0 @@
|
|||||||
import {
|
|
||||||
defineConfig,
|
|
||||||
presetAttributify,
|
|
||||||
presetIcons,
|
|
||||||
presetTypography,
|
|
||||||
presetUno,
|
|
||||||
presetWebFonts,
|
|
||||||
transformerDirectives,
|
|
||||||
transformerVariantGroup,
|
|
||||||
} from 'unocss'
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
shortcuts: [
|
|
||||||
['btn', 'px-4 py-1 rounded inline-block bg-teal-700 text-white cursor-pointer hover:bg-teal-800 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50'],
|
|
||||||
['icon-btn', 'inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-teal-600'],
|
|
||||||
],
|
|
||||||
presets: [
|
|
||||||
presetUno(),
|
|
||||||
presetAttributify(),
|
|
||||||
presetIcons({
|
|
||||||
scale: 1.2,
|
|
||||||
warn: true,
|
|
||||||
}),
|
|
||||||
presetTypography(),
|
|
||||||
presetWebFonts({
|
|
||||||
fonts: {
|
|
||||||
sans: 'DM Sans',
|
|
||||||
serif: 'DM Serif Display',
|
|
||||||
mono: 'DM Mono',
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
transformers: [
|
|
||||||
transformerDirectives(),
|
|
||||||
transformerVariantGroup(),
|
|
||||||
],
|
|
||||||
safelist: 'prose prose-sm m-auto text-left'.split(' '),
|
|
||||||
})
|
|
@ -1,153 +0,0 @@
|
|||||||
import path from 'node:path'
|
|
||||||
import { defineConfig } from 'vite'
|
|
||||||
import Vue from '@vitejs/plugin-vue'
|
|
||||||
import Pages from 'vite-plugin-pages'
|
|
||||||
import generateSitemap from 'vite-ssg-sitemap'
|
|
||||||
import Layouts from 'vite-plugin-vue-layouts'
|
|
||||||
import Components from 'unplugin-vue-components/vite'
|
|
||||||
import AutoImport from 'unplugin-auto-import/vite'
|
|
||||||
import Markdown from 'vite-plugin-vue-markdown'
|
|
||||||
import { VitePWA } from 'vite-plugin-pwa'
|
|
||||||
import VueI18n from '@intlify/vite-plugin-vue-i18n'
|
|
||||||
import Inspect from 'vite-plugin-inspect'
|
|
||||||
import LinkAttributes from 'markdown-it-link-attributes'
|
|
||||||
import Unocss from 'unocss/vite'
|
|
||||||
import Shiki from 'markdown-it-shiki'
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'~/': `${path.resolve(__dirname, 'src')}/`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
Vue({
|
|
||||||
include: [/\.vue$/, /\.md$/],
|
|
||||||
reactivityTransform: true,
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/hannoeru/vite-plugin-pages
|
|
||||||
Pages({
|
|
||||||
extensions: ['vue', 'md'],
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/JohnCampionJr/vite-plugin-vue-layouts
|
|
||||||
Layouts(),
|
|
||||||
|
|
||||||
// https://github.com/antfu/unplugin-auto-import
|
|
||||||
AutoImport({
|
|
||||||
imports: [
|
|
||||||
'vue',
|
|
||||||
'vue-router',
|
|
||||||
'vue-i18n',
|
|
||||||
'vue/macros',
|
|
||||||
'@vueuse/head',
|
|
||||||
'@vueuse/core',
|
|
||||||
],
|
|
||||||
dts: 'src/auto-imports.d.ts',
|
|
||||||
dirs: [
|
|
||||||
'src/composables',
|
|
||||||
'src/store',
|
|
||||||
],
|
|
||||||
vueTemplate: true,
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/antfu/unplugin-vue-components
|
|
||||||
Components({
|
|
||||||
// allow auto load markdown components under `./src/components/`
|
|
||||||
extensions: ['vue', 'md'],
|
|
||||||
// allow auto import and register components used in markdown
|
|
||||||
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
|
|
||||||
dts: 'src/components.d.ts',
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/antfu/unocss
|
|
||||||
// see unocss.config.ts for config
|
|
||||||
Unocss(),
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-plugin-vue-markdown
|
|
||||||
// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
|
|
||||||
Markdown({
|
|
||||||
wrapperClasses: 'prose prose-sm m-auto text-left',
|
|
||||||
headEnabled: true,
|
|
||||||
markdownItSetup(md) {
|
|
||||||
// https://prismjs.com/
|
|
||||||
md.use(Shiki, {
|
|
||||||
theme: {
|
|
||||||
light: 'vitesse-light',
|
|
||||||
dark: 'vitesse-dark',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
md.use(LinkAttributes, {
|
|
||||||
matcher: (link: string) => /^https?:\/\//.test(link),
|
|
||||||
attrs: {
|
|
||||||
target: '_blank',
|
|
||||||
rel: 'noopener',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-plugin-pwa
|
|
||||||
VitePWA({
|
|
||||||
registerType: 'autoUpdate',
|
|
||||||
includeAssets: ['favicon.svg', 'safari-pinned-tab.svg'],
|
|
||||||
manifest: {
|
|
||||||
name: 'Vitesse',
|
|
||||||
short_name: 'Vitesse',
|
|
||||||
theme_color: '#ffffff',
|
|
||||||
icons: [
|
|
||||||
{
|
|
||||||
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',
|
|
||||||
purpose: 'any maskable',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/intlify/bundle-tools/tree/main/packages/vite-plugin-vue-i18n
|
|
||||||
VueI18n({
|
|
||||||
runtimeOnly: true,
|
|
||||||
compositionOnly: true,
|
|
||||||
include: [path.resolve(__dirname, 'locales/**')],
|
|
||||||
}),
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-plugin-inspect
|
|
||||||
// Visit http://localhost:3333/__inspect/ to see the inspector
|
|
||||||
Inspect(),
|
|
||||||
],
|
|
||||||
|
|
||||||
// https://github.com/vitest-dev/vitest
|
|
||||||
test: {
|
|
||||||
include: ['test/**/*.test.ts'],
|
|
||||||
environment: 'jsdom',
|
|
||||||
deps: {
|
|
||||||
inline: ['@vue', '@vueuse', 'vue-demi'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-ssg
|
|
||||||
ssgOptions: {
|
|
||||||
script: 'async',
|
|
||||||
formatting: 'minify',
|
|
||||||
onFinished() { generateSitemap() },
|
|
||||||
},
|
|
||||||
|
|
||||||
ssr: {
|
|
||||||
// TODO: workaround until they support native ESM
|
|
||||||
noExternal: ['workbox-window', /vue-i18n/],
|
|
||||||
},
|
|
||||||
})
|
|
6
lerna.json
Normal file
6
lerna.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
"packages/*"
|
||||||
|
],
|
||||||
|
"version": "0.4.1"
|
||||||
|
}
|
25
package.json
25
package.json
@ -1,23 +1,18 @@
|
|||||||
{
|
{
|
||||||
"name": "@taoyaal/eslint-config-monorepo",
|
"name": "@antfu/eslint-config-monorepo",
|
||||||
"version": "0.40.11",
|
"version": "0.1.0",
|
||||||
"private": true,
|
|
||||||
"packageManager": "pnpm@8.6.12",
|
|
||||||
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "pnpm -r run stub && eslint .",
|
"preinstall": "npx only-allow pnpm",
|
||||||
"test": "pnpm -r run test",
|
"lint": "npx eslint --ext .js --fix .",
|
||||||
"build": "pnpm -r run build",
|
"release": "lerna publish --conventional-commits"
|
||||||
"prepare": "pnpm -r run stub",
|
|
||||||
"release": "bumpp -r && pnpm -r publish"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "workspace:*",
|
"@antfu/eslint-config": "*",
|
||||||
"bumpp": "^9.1.1",
|
"eslint": "^7.11.0",
|
||||||
"eslint": "^8.46.0",
|
"lerna": "^3.22.1",
|
||||||
"eslint-plugin-antfu": "link:./packages/eslint-plugin-antfu",
|
"typescript": "^4.0.3"
|
||||||
"rimraf": "^5.0.1",
|
|
||||||
"typescript": "^5.1.6"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
51
packages/all/CHANGELOG.md
Normal file
51
packages/all/CHANGELOG.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.4.1](https://github.com/antfu/eslint-config/compare/v0.4.0...v0.4.1) (2020-10-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.4](https://github.com/antfu/eslint-config/compare/v0.3.3...v0.3.4) (2020-10-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.3](https://github.com/antfu/eslint-config/compare/v0.3.2...v0.3.3) (2020-08-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.2](https://github.com/antfu/eslint-config/compare/v0.3.1...v0.3.2) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.1](https://github.com/antfu/eslint-config/compare/v0.3.0...v0.3.1) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.3.0](https://github.com/antfu/eslint-config/compare/v0.2.14...v0.3.0) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add react and all ([a7fbdca](https://github.com/antfu/eslint-config/commit/a7fbdcad4b20294e26e817fae468f468376e49cf))
|
@ -1,5 +1,6 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
extends: [
|
extends: [
|
||||||
|
'@antfu/eslint-config-react',
|
||||||
'@antfu/eslint-config-vue',
|
'@antfu/eslint-config-vue',
|
||||||
],
|
],
|
||||||
}
|
}
|
25
packages/all/package.json
Normal file
25
packages/all/package.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "@antfu/eslint-config",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"keywords": [],
|
||||||
|
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
||||||
|
"license": "MIT",
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"peerDependencies": {
|
||||||
|
"eslint": ">=7.4.0"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@antfu/eslint-config-react": "^0.4.1",
|
||||||
|
"@antfu/eslint-config-vue": "^0.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "^7.11.0"
|
||||||
|
}
|
||||||
|
}
|
187
packages/basic/CHANGELOG.md
Normal file
187
packages/basic/CHANGELOG.md
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.3.4](https://github.com/antfu/eslint-config/compare/v0.3.3...v0.3.4) (2020-10-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-basic
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.3](https://github.com/antfu/eslint-config/compare/v0.3.2...v0.3.3) (2020-08-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* disable import/no-absolute-path ([245001d](https://github.com/antfu/eslint-config/commit/245001d08129b3ec4961741d596f70abb2c9be5f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.2](https://github.com/antfu/eslint-config/compare/v0.3.1...v0.3.2) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-basic
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.3.0](https://github.com/antfu/eslint-config/compare/v0.2.14...v0.3.0) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add react and all ([a7fbdca](https://github.com/antfu/eslint-config/commit/a7fbdcad4b20294e26e817fae468f468376e49cf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.14](https://github.com/antfu/eslint-config/compare/v0.2.13...v0.2.14) (2020-07-18)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.13](https://github.com/antfu/eslint-config/compare/v0.2.12...v0.2.13) (2020-06-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.1.0 ([494d99c](https://github.com/antfu/eslint-config/commit/494d99c2bb52895a055cea7be9b50494a6a67358))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.12](https://github.com/antfu/eslint-config/compare/v0.2.11...v0.2.12) (2020-06-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([ae3acb4](https://github.com/antfu/eslint-config/commit/ae3acb40f34fa117bb0afe6f9959daa5c0f9a197))
|
||||||
|
* **deps:** update all non-major dependencies ([367c663](https://github.com/antfu/eslint-config/commit/367c663eb0eca976b2e932d5666b0e47f751a03c))
|
||||||
|
* **deps:** update all non-major dependencies ([d938b1d](https://github.com/antfu/eslint-config/commit/d938b1d714e429f4dd4cce56b8b2c4cdee0de242))
|
||||||
|
* **deps:** update all non-major dependencies ([8bda49a](https://github.com/antfu/eslint-config/commit/8bda49afb37d50c647995354cec4d11589eeef8f))
|
||||||
|
* **deps:** update all non-major dependencies ([cd48d47](https://github.com/antfu/eslint-config/commit/cd48d476bfe63623b66d9d5107b794f3b2e73129))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.21.0 ([ae238f2](https://github.com/antfu/eslint-config/commit/ae238f275c17c8959274da007b60cae2f029b7d0))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.23.0 ([ae8dee6](https://github.com/antfu/eslint-config/commit/ae8dee603589f80410cb19a009a4f50a7daf5472))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.25.0 ([da8bfed](https://github.com/antfu/eslint-config/commit/da8bfed5c582940ebef807cc396a4c28de7135dd))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.26.0 ([9c66671](https://github.com/antfu/eslint-config/commit/9c666715c2eef912e343649875441a564486d5ec))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.27.0 ([dc00c77](https://github.com/antfu/eslint-config/commit/dc00c77075c87f8e49b39b32d44ca4fde0590731))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.28.0 ([e42c576](https://github.com/antfu/eslint-config/commit/e42c5767f6f9a9013286354ee238977b36bbbee2))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.29.0 ([5e65853](https://github.com/antfu/eslint-config/commit/5e6585335d4f7b88355a7430911c9712bcd20115))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.30.0 ([cabb099](https://github.com/antfu/eslint-config/commit/cabb0999cd95d63fd35b50a0073c324f54a621e5))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.31.0 ([2fb8855](https://github.com/antfu/eslint-config/commit/2fb885521b80ba72511b1005ad919ed148c99428))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.33.0 ([d857537](https://github.com/antfu/eslint-config/commit/d8575375f6505bfee4165dc33b1cd924b63fb15e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.0.2 ([214c0be](https://github.com/antfu/eslint-config/commit/214c0be0292d8b95d57d1fe0272ee7af7a130b78))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v16 ([8bb4687](https://github.com/antfu/eslint-config/commit/8bb46879d8beda646e06e558db6ea7489d0e02cc))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v17 ([9685653](https://github.com/antfu/eslint-config/commit/96856537cd165d553dc745b96332889daebf75a4))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v18 ([05334ab](https://github.com/antfu/eslint-config/commit/05334ab400e3a4d172251264c45faae1fcafd861))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v19 ([cbd45fd](https://github.com/antfu/eslint-config/commit/cbd45fdcf9d06cbcf66bd2c23510ac36b330941b))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v20 ([7a2af88](https://github.com/antfu/eslint-config/commit/7a2af88bd9935f58df3ac0b733642ec32fb9f722))
|
||||||
|
* **deps:** update typescript-eslint monorepo to v3 ([ebb1820](https://github.com/antfu/eslint-config/commit/ebb18209d5c8417da41be7ca8b2b8658bd4ba1a5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.11](https://github.com/antfu/eslint-config/compare/v0.2.10...v0.2.11) (2020-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([faa9b11](https://github.com/antfu/eslint-config/commit/faa9b11d52d5d34a4c89917bb6b1aeaa8f7bbdb2))
|
||||||
|
* **deps:** update dependency eslint-plugin-node to v11 ([#19](https://github.com/antfu/eslint-config/issues/19)) ([d37b5cc](https://github.com/antfu/eslint-config/commit/d37b5cc912b017eeca513a806a3f755c1094bafe))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v15 ([#18](https://github.com/antfu/eslint-config/issues/18)) ([b6c068c](https://github.com/antfu/eslint-config/commit/b6c068cf01539d2d94867664cbc54728fa99852e))
|
||||||
|
* update ([ce7f9ec](https://github.com/antfu/eslint-config/commit/ce7f9ec9687fea47757e973344fd2068cc7e5a8f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.10](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.10) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v14 ([#16](https://github.com/antfu/eslint-config/issues/16)) ([49f5108](https://github.com/antfu/eslint-config/commit/49f5108fb2144f6ccc5f6a15d1bc135542070168))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.9](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.9) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v14 ([#16](https://github.com/antfu/eslint-config/issues/16)) ([49f5108](https://github.com/antfu/eslint-config/commit/49f5108fb2144f6ccc5f6a15d1bc135542070168))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.8](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.8) (2019-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.1.0 ([99a5c38](https://github.com/antfu/eslint-config/commit/99a5c38))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.3.1 ([8c12e7e](https://github.com/antfu/eslint-config/commit/8c12e7e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.5.0 ([#11](https://github.com/antfu/eslint-config/issues/11)) ([d5341a2](https://github.com/antfu/eslint-config/commit/d5341a2))
|
||||||
|
* **deps:** update dependency eslint-config-standard to v14 ([d8d11aa](https://github.com/antfu/eslint-config/commit/d8d11aa))
|
||||||
|
* **deps:** update dependency eslint-plugin-node to v10 ([2e4bef3](https://github.com/antfu/eslint-config/commit/2e4bef3))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v12 ([f565a2f](https://github.com/antfu/eslint-config/commit/f565a2f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.7](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.7) (2019-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.1.0 ([99a5c38](https://github.com/antfu/eslint-config/commit/99a5c38))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.3.1 ([8c12e7e](https://github.com/antfu/eslint-config/commit/8c12e7e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.5.0 ([#11](https://github.com/antfu/eslint-config/issues/11)) ([d5341a2](https://github.com/antfu/eslint-config/commit/d5341a2))
|
||||||
|
* **deps:** update dependency eslint-config-standard to v14 ([d8d11aa](https://github.com/antfu/eslint-config/commit/d8d11aa))
|
||||||
|
* **deps:** update dependency eslint-plugin-node to v10 ([2e4bef3](https://github.com/antfu/eslint-config/commit/2e4bef3))
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v12 ([f565a2f](https://github.com/antfu/eslint-config/commit/f565a2f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.6](https://github.com/antfu/eslint-config/compare/v0.2.5...v0.2.6) (2019-08-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency eslint-plugin-unicorn to v10 ([b4b704f](https://github.com/antfu/eslint-config/commit/b4b704f))
|
||||||
|
* **deps:** update typescript-eslint monorepo to v2 ([1f4250e](https://github.com/antfu/eslint-config/commit/1f4250e))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.2.0](https://github.com/antfu/eslint-config/compare/v0.1.5...v0.2.0) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add ts config ([b025b09](https://github.com/antfu/eslint-config/commit/b025b09))
|
133
packages/basic/index.js
Normal file
133
packages/basic/index.js
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
es6: true,
|
||||||
|
browser: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
extends: ['standard', 'plugin:import/errors', 'plugin:import/warnings'],
|
||||||
|
plugins: ['html', 'unicorn'],
|
||||||
|
settings: {
|
||||||
|
'import/resolver': {
|
||||||
|
node: { extensions: ['.js', '.mjs'] },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
// import
|
||||||
|
'import/order': 'error',
|
||||||
|
'import/first': 'error',
|
||||||
|
'import/no-mutable-exports': 'error',
|
||||||
|
'import/no-unresolved': 'off',
|
||||||
|
'import/no-absolute-path': 'off',
|
||||||
|
|
||||||
|
// Common
|
||||||
|
semi: [2, 'never'],
|
||||||
|
curly: [2, 'multi-or-nest', 'consistent'],
|
||||||
|
quotes: ['error', 'single'],
|
||||||
|
'no-unused-vars': 'warn',
|
||||||
|
'no-param-reassign': 'off',
|
||||||
|
'array-bracket-spacing': ['error', 'never'],
|
||||||
|
'brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
|
||||||
|
'block-spacing': ['error', 'always'],
|
||||||
|
camelcase: 'off',
|
||||||
|
'comma-spacing': ['error', { before: false, after: true }],
|
||||||
|
'comma-style': ['error', 'last'],
|
||||||
|
'comma-dangle': ['error', 'always-multiline'],
|
||||||
|
'no-constant-condition': 'warn',
|
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||||
|
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||||
|
'no-cond-assign': ['error', 'always'],
|
||||||
|
'func-call-spacing': ['off', 'never'],
|
||||||
|
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
|
||||||
|
indent: [
|
||||||
|
'error',
|
||||||
|
2,
|
||||||
|
{ SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 },
|
||||||
|
],
|
||||||
|
'no-restricted-syntax': [
|
||||||
|
'error',
|
||||||
|
'DebuggerStatement',
|
||||||
|
'ForInStatement',
|
||||||
|
'LabeledStatement',
|
||||||
|
'WithStatement',
|
||||||
|
],
|
||||||
|
'no-spaced-func': 'error',
|
||||||
|
'object-curly-spacing': ['error', 'always'],
|
||||||
|
'no-return-await': 'off',
|
||||||
|
'space-before-function-paren': 'error',
|
||||||
|
|
||||||
|
// es6
|
||||||
|
'no-var': 'error',
|
||||||
|
'prefer-const': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
destructuring: 'any',
|
||||||
|
ignoreReadBeforeAssign: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'prefer-arrow-callback': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
allowNamedFunctions: false,
|
||||||
|
allowUnboundThis: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'object-shorthand': [
|
||||||
|
'error',
|
||||||
|
'always',
|
||||||
|
{
|
||||||
|
ignoreConstructors: false,
|
||||||
|
avoidQuotes: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'prefer-rest-params': 'error',
|
||||||
|
'prefer-spread': 'error',
|
||||||
|
'prefer-template': 'error',
|
||||||
|
'template-curly-spacing': 'error',
|
||||||
|
'arrow-parens': ['error', 'as-needed', { requireForBlockBody: true }],
|
||||||
|
'generator-star-spacing': 'off',
|
||||||
|
|
||||||
|
// best-practice
|
||||||
|
'array-callback-return': 'error',
|
||||||
|
'block-scoped-var': 'error',
|
||||||
|
'consistent-return': 'off',
|
||||||
|
complexity: ['off', 11],
|
||||||
|
eqeqeq: ['error', 'allow-null'],
|
||||||
|
'no-alert': 'warn',
|
||||||
|
'no-case-declarations': 'error',
|
||||||
|
'no-multi-spaces': 'error',
|
||||||
|
'no-multi-str': 'error',
|
||||||
|
'no-with': 'error',
|
||||||
|
'no-void': 'error',
|
||||||
|
'no-useless-escape': 'error',
|
||||||
|
'vars-on-top': 'error',
|
||||||
|
'require-await': 'off',
|
||||||
|
'no-return-assign': 'off',
|
||||||
|
'operator-linebreak': [2, 'before'],
|
||||||
|
|
||||||
|
// unicorns
|
||||||
|
// Pass error message when throwing errors
|
||||||
|
'unicorn/error-message': 'error',
|
||||||
|
// Uppercase regex escapes
|
||||||
|
'unicorn/escape-case': 'error',
|
||||||
|
// Array.isArray instead of instanceof
|
||||||
|
'unicorn/no-array-instanceof': 'error',
|
||||||
|
// Prevent deprecated `new Buffer()`
|
||||||
|
'unicorn/no-new-buffer': 'error',
|
||||||
|
// Keep regex literals safe!
|
||||||
|
'unicorn/no-unsafe-regex': 'off',
|
||||||
|
// Lowercase number formatting for octal, hex, binary (0x12 instead of 0X12)
|
||||||
|
'unicorn/number-literal-case': 'error',
|
||||||
|
// ** instead of Math.pow()
|
||||||
|
'unicorn/prefer-exponentiation-operator': 'error',
|
||||||
|
// includes over indexOf when checking for existence
|
||||||
|
'unicorn/prefer-includes': 'error',
|
||||||
|
// String methods startsWith/endsWith instead of more complicated stuff
|
||||||
|
'unicorn/prefer-starts-ends-with': 'error',
|
||||||
|
// textContent instead of innerText
|
||||||
|
'unicorn/prefer-text-content': 'error',
|
||||||
|
// Enforce throwing type error when throwing error while checking typeof
|
||||||
|
'unicorn/prefer-type-error': 'error',
|
||||||
|
// Use new when throwing error
|
||||||
|
'unicorn/throw-new-error': 'error',
|
||||||
|
},
|
||||||
|
}
|
33
packages/basic/package.json
Normal file
33
packages/basic/package.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "@antfu/eslint-config-basic",
|
||||||
|
"version": "0.4.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"keywords": [],
|
||||||
|
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
||||||
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "eslint . --config=index.js"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"eslint": ">=7.4.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"eslint-config-standard": "^14.1.1",
|
||||||
|
"eslint-plugin-html": "^6.1.0",
|
||||||
|
"eslint-plugin-import": "^2.22.1",
|
||||||
|
"eslint-plugin-node": "^11.1.0",
|
||||||
|
"eslint-plugin-promise": "^4.2.1",
|
||||||
|
"eslint-plugin-standard": "^4.0.1",
|
||||||
|
"eslint-plugin-unicorn": "^23.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "^7.11.0"
|
||||||
|
}
|
||||||
|
}
|
@ -1,378 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
env: {
|
|
||||||
es6: true,
|
|
||||||
browser: true,
|
|
||||||
node: true,
|
|
||||||
},
|
|
||||||
reportUnusedDisableDirectives: true,
|
|
||||||
extends: [
|
|
||||||
'./standard',
|
|
||||||
'plugin:import/recommended',
|
|
||||||
'plugin:eslint-comments/recommended',
|
|
||||||
'plugin:jsonc/recommended-with-jsonc',
|
|
||||||
'plugin:yml/standard',
|
|
||||||
],
|
|
||||||
ignorePatterns: [
|
|
||||||
'*.min.*',
|
|
||||||
'*.d.ts',
|
|
||||||
'CHANGELOG.md',
|
|
||||||
'dist',
|
|
||||||
'LICENSE*',
|
|
||||||
'output',
|
|
||||||
'out',
|
|
||||||
'coverage',
|
|
||||||
'public',
|
|
||||||
'temp',
|
|
||||||
'package-lock.json',
|
|
||||||
'pnpm-lock.yaml',
|
|
||||||
'yarn.lock',
|
|
||||||
'__snapshots__',
|
|
||||||
// ignore for in lint-staged
|
|
||||||
'*.css',
|
|
||||||
'*.png',
|
|
||||||
'*.ico',
|
|
||||||
'*.toml',
|
|
||||||
'*.patch',
|
|
||||||
'*.txt',
|
|
||||||
'*.crt',
|
|
||||||
'*.key',
|
|
||||||
'Dockerfile',
|
|
||||||
// force include
|
|
||||||
'!.github',
|
|
||||||
'!.vitepress',
|
|
||||||
'!.vscode',
|
|
||||||
// force exclude
|
|
||||||
'**/.vitepress/cache',
|
|
||||||
],
|
|
||||||
plugins: [
|
|
||||||
'html',
|
|
||||||
'unicorn',
|
|
||||||
'antfu',
|
|
||||||
'no-only-tests',
|
|
||||||
'unused-imports',
|
|
||||||
],
|
|
||||||
settings: {
|
|
||||||
'import/resolver': {
|
|
||||||
node: { extensions: ['.js', '.mjs'] },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: ['*.json', '*.json5', '*.jsonc'],
|
|
||||||
parser: 'jsonc-eslint-parser',
|
|
||||||
rules: {
|
|
||||||
'jsonc/array-bracket-spacing': ['error', 'never'],
|
|
||||||
'jsonc/comma-dangle': ['error', 'never'],
|
|
||||||
'jsonc/comma-style': ['error', 'last'],
|
|
||||||
'jsonc/indent': ['error', 2],
|
|
||||||
'jsonc/key-spacing': ['error', { beforeColon: false, afterColon: true }],
|
|
||||||
'jsonc/no-octal-escape': 'error',
|
|
||||||
'jsonc/object-curly-newline': ['error', { multiline: true, consistent: true }],
|
|
||||||
'jsonc/object-curly-spacing': ['error', 'always'],
|
|
||||||
'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.yaml', '*.yml'],
|
|
||||||
parser: 'yaml-eslint-parser',
|
|
||||||
rules: {
|
|
||||||
'spaced-comment': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['package.json'],
|
|
||||||
parser: 'jsonc-eslint-parser',
|
|
||||||
rules: {
|
|
||||||
'jsonc/sort-keys': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
pathPattern: '^$',
|
|
||||||
order: [
|
|
||||||
'publisher',
|
|
||||||
'name',
|
|
||||||
'displayName',
|
|
||||||
'type',
|
|
||||||
'version',
|
|
||||||
'private',
|
|
||||||
'packageManager',
|
|
||||||
'description',
|
|
||||||
'author',
|
|
||||||
'license',
|
|
||||||
'funding',
|
|
||||||
'homepage',
|
|
||||||
'repository',
|
|
||||||
'bugs',
|
|
||||||
'keywords',
|
|
||||||
'categories',
|
|
||||||
'sideEffects',
|
|
||||||
'exports',
|
|
||||||
'main',
|
|
||||||
'module',
|
|
||||||
'unpkg',
|
|
||||||
'jsdelivr',
|
|
||||||
'types',
|
|
||||||
'typesVersions',
|
|
||||||
'bin',
|
|
||||||
'icon',
|
|
||||||
'files',
|
|
||||||
'engines',
|
|
||||||
'activationEvents',
|
|
||||||
'contributes',
|
|
||||||
'scripts',
|
|
||||||
'peerDependencies',
|
|
||||||
'peerDependenciesMeta',
|
|
||||||
'dependencies',
|
|
||||||
'optionalDependencies',
|
|
||||||
'devDependencies',
|
|
||||||
'pnpm',
|
|
||||||
'overrides',
|
|
||||||
'resolutions',
|
|
||||||
'husky',
|
|
||||||
'simple-git-hooks',
|
|
||||||
'lint-staged',
|
|
||||||
'eslintConfig',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$',
|
|
||||||
order: { type: 'asc' },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
pathPattern: '^exports.*$',
|
|
||||||
order: [
|
|
||||||
'types',
|
|
||||||
'import',
|
|
||||||
'require',
|
|
||||||
'default',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.d.ts'],
|
|
||||||
rules: {
|
|
||||||
'import/no-duplicates': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.js', '*.cjs', '*.jsx'],
|
|
||||||
rules: {
|
|
||||||
'@typescript-eslint/no-var-requires': 'off',
|
|
||||||
'@typescript-eslint/no-require-imports': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.ts', '*.tsx', '*.mts', '*.cts'],
|
|
||||||
rules: {
|
|
||||||
'no-void': ['error', { allowAsStatement: true }],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['scripts/**/*.*', 'cli.*'],
|
|
||||||
rules: {
|
|
||||||
'no-console': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['*.test.ts', '*.test.js', '*.spec.ts', '*.spec.js'],
|
|
||||||
rules: {
|
|
||||||
'no-unused-expressions': 'off',
|
|
||||||
'no-only-tests/no-only-tests': 'error',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
// import
|
|
||||||
'import/order': 'error',
|
|
||||||
'import/first': 'error',
|
|
||||||
'import/no-mutable-exports': 'error',
|
|
||||||
'import/no-unresolved': 'off',
|
|
||||||
'import/no-absolute-path': 'off',
|
|
||||||
'import/newline-after-import': ['error', { count: 1, considerComments: true }],
|
|
||||||
'import/no-self-import': 'error',
|
|
||||||
|
|
||||||
// Common
|
|
||||||
'semi': ['error', 'never'],
|
|
||||||
'curly': ['error', 'multi-or-nest', 'consistent'],
|
|
||||||
'quotes': ['error', 'single'],
|
|
||||||
'quote-props': ['error', 'consistent-as-needed'],
|
|
||||||
|
|
||||||
'unused-imports/no-unused-imports': 'error',
|
|
||||||
'unused-imports/no-unused-vars': [
|
|
||||||
'warn',
|
|
||||||
{ vars: 'all', varsIgnorePattern: '^_', args: 'after-used', argsIgnorePattern: '^_' },
|
|
||||||
],
|
|
||||||
|
|
||||||
'no-param-reassign': 'off',
|
|
||||||
'array-bracket-spacing': ['error', 'never'],
|
|
||||||
'brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
|
|
||||||
'block-spacing': ['error', 'always'],
|
|
||||||
'camelcase': 'off',
|
|
||||||
'comma-spacing': ['error', { before: false, after: true }],
|
|
||||||
'comma-style': ['error', 'last'],
|
|
||||||
'comma-dangle': ['error', 'always-multiline'],
|
|
||||||
'no-constant-condition': 'warn',
|
|
||||||
'no-debugger': 'error',
|
|
||||||
'no-console': ['error', { allow: ['warn', 'error'] }],
|
|
||||||
'no-cond-assign': ['error', 'always'],
|
|
||||||
'func-call-spacing': 'off',
|
|
||||||
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
|
|
||||||
'indent': ['error', 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
|
|
||||||
'no-restricted-syntax': [
|
|
||||||
'error',
|
|
||||||
'DebuggerStatement',
|
|
||||||
'LabeledStatement',
|
|
||||||
'WithStatement',
|
|
||||||
],
|
|
||||||
'object-curly-spacing': ['error', 'always'],
|
|
||||||
'no-return-await': 'off',
|
|
||||||
'space-before-function-paren': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
anonymous: 'always',
|
|
||||||
named: 'never',
|
|
||||||
asyncArrow: 'always',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'no-restricted-globals': [
|
|
||||||
'error',
|
|
||||||
{ name: 'global', message: 'Use `globalThis` instead.' },
|
|
||||||
{ name: 'self', message: 'Use `globalThis` instead.' },
|
|
||||||
],
|
|
||||||
'no-restricted-properties': [
|
|
||||||
'error',
|
|
||||||
{ property: '__proto__', message: 'Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.' },
|
|
||||||
{ property: '__defineGetter__', message: 'Use `Object.defineProperty` instead.' },
|
|
||||||
{ property: '__defineSetter__', message: 'Use `Object.defineProperty` instead.' },
|
|
||||||
{ property: '__lookupGetter__', message: 'Use `Object.getOwnPropertyDescriptor` instead.' },
|
|
||||||
{ property: '__lookupSetter__', message: 'Use `Object.getOwnPropertyDescriptor` instead.' },
|
|
||||||
],
|
|
||||||
|
|
||||||
// es6
|
|
||||||
'no-var': 'error',
|
|
||||||
'prefer-const': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
destructuring: 'all',
|
|
||||||
ignoreReadBeforeAssign: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'prefer-arrow-callback': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
allowNamedFunctions: false,
|
|
||||||
allowUnboundThis: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'object-shorthand': [
|
|
||||||
'error',
|
|
||||||
'always',
|
|
||||||
{
|
|
||||||
ignoreConstructors: false,
|
|
||||||
avoidQuotes: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'prefer-exponentiation-operator': 'error',
|
|
||||||
'prefer-rest-params': 'error',
|
|
||||||
'prefer-spread': 'error',
|
|
||||||
'prefer-template': 'error',
|
|
||||||
'template-curly-spacing': 'error',
|
|
||||||
'arrow-parens': ['error', 'as-needed', { requireForBlockBody: true }],
|
|
||||||
'generator-star-spacing': 'off',
|
|
||||||
'spaced-comment': ['error', 'always', {
|
|
||||||
line: {
|
|
||||||
markers: ['/'],
|
|
||||||
exceptions: ['/', '#'],
|
|
||||||
},
|
|
||||||
block: {
|
|
||||||
markers: ['!'],
|
|
||||||
exceptions: ['*'],
|
|
||||||
balanced: true,
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
|
|
||||||
// best-practice
|
|
||||||
'array-callback-return': 'error',
|
|
||||||
'block-scoped-var': 'error',
|
|
||||||
'consistent-return': 'off',
|
|
||||||
'complexity': 'off',
|
|
||||||
'eqeqeq': ['error', 'smart'],
|
|
||||||
'no-alert': 'warn',
|
|
||||||
'no-case-declarations': 'error',
|
|
||||||
'no-multi-spaces': 'error',
|
|
||||||
'no-multi-str': 'error',
|
|
||||||
'no-with': 'error',
|
|
||||||
'no-void': 'error',
|
|
||||||
'no-useless-escape': 'off',
|
|
||||||
'no-invalid-this': 'error',
|
|
||||||
'vars-on-top': 'error',
|
|
||||||
'require-await': 'off',
|
|
||||||
'no-return-assign': 'off',
|
|
||||||
'operator-linebreak': ['error', 'before'],
|
|
||||||
'max-statements-per-line': ['error', { max: 1 }],
|
|
||||||
|
|
||||||
// node
|
|
||||||
'n/prefer-global/process': ['error', 'never'],
|
|
||||||
'n/prefer-global/buffer': ['error', 'never'],
|
|
||||||
'n/no-callback-literal': 'off',
|
|
||||||
|
|
||||||
// unicorns
|
|
||||||
// Pass error message when throwing errors
|
|
||||||
'unicorn/error-message': 'error',
|
|
||||||
// Uppercase regex escapes
|
|
||||||
'unicorn/escape-case': 'error',
|
|
||||||
// Array.isArray instead of instanceof
|
|
||||||
'unicorn/no-instanceof-array': 'error',
|
|
||||||
// Prevent deprecated `new Buffer()`
|
|
||||||
'unicorn/no-new-buffer': 'error',
|
|
||||||
// Keep regex literals safe!
|
|
||||||
'unicorn/no-unsafe-regex': 'off',
|
|
||||||
// Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error')
|
|
||||||
'unicorn/number-literal-case': 'error',
|
|
||||||
// includes over indexOf when checking for existence
|
|
||||||
'unicorn/prefer-includes': 'error',
|
|
||||||
// String methods startsWith/endsWith instead of more complicated stuff
|
|
||||||
'unicorn/prefer-string-starts-ends-with': 'error',
|
|
||||||
// textContent instead of innerText
|
|
||||||
'unicorn/prefer-text-content': 'error',
|
|
||||||
// Enforce throwing type error when throwing error while checking typeof
|
|
||||||
'unicorn/prefer-type-error': 'error',
|
|
||||||
// Use new when throwing error
|
|
||||||
'unicorn/throw-new-error': 'error',
|
|
||||||
// Prefer using the node: protocol
|
|
||||||
'unicorn/prefer-node-protocol': 'error',
|
|
||||||
// Prefer using number properties like `Number.isNaN` rather than `isNaN`
|
|
||||||
'unicorn/prefer-number-properties': 'error',
|
|
||||||
// Ban `new Array` as `Array` constructor's params are ambiguous
|
|
||||||
'unicorn/no-new-array': 'error',
|
|
||||||
|
|
||||||
'no-use-before-define': ['error', { functions: false, classes: false, variables: true }],
|
|
||||||
'eslint-comments/disable-enable-pair': 'off',
|
|
||||||
'import/no-named-as-default-member': 'off',
|
|
||||||
'import/no-named-as-default': 'off',
|
|
||||||
'import/namespace': 'off',
|
|
||||||
|
|
||||||
'sort-imports': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
ignoreCase: false,
|
|
||||||
ignoreDeclarationSort: true,
|
|
||||||
ignoreMemberSort: false,
|
|
||||||
memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
|
|
||||||
allowSeparatedGroups: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
// yml
|
|
||||||
'yml/quotes': ['error', { prefer: 'single', avoidEscape: false }],
|
|
||||||
'yml/no-empty-document': 'off',
|
|
||||||
|
|
||||||
// antfu
|
|
||||||
'antfu/no-import-node-modules-by-path': 'error',
|
|
||||||
'antfu/if-newline': 'error',
|
|
||||||
'antfu/import-dedupe': 'error',
|
|
||||||
'antfu/top-level-function': 'error',
|
|
||||||
// 'antfu/prefer-inline-type-import': 'error',
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@antfu/eslint-config-basic",
|
|
||||||
"version": "0.40.11",
|
|
||||||
"description": "",
|
|
||||||
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
|
||||||
"license": "MIT",
|
|
||||||
"homepage": "https://git.taoya.art/taolin/eslint-config.git",
|
|
||||||
"keywords": [
|
|
||||||
"eslint-config"
|
|
||||||
],
|
|
||||||
"main": "index.js",
|
|
||||||
"files": [
|
|
||||||
"*.js"
|
|
||||||
],
|
|
||||||
"scripts": {
|
|
||||||
"lint": "eslint . --config=index.js"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"eslint": ">=7.4.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"eslint-plugin-antfu": "workspace:*",
|
|
||||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
||||||
"eslint-plugin-html": "^7.1.0",
|
|
||||||
"eslint-plugin-import": "npm:eslint-plugin-i@2.28.0-2",
|
|
||||||
"eslint-plugin-jsonc": "^2.9.0",
|
|
||||||
"eslint-plugin-n": "^16.0.1",
|
|
||||||
"eslint-plugin-no-only-tests": "^3.1.0",
|
|
||||||
"eslint-plugin-promise": "^6.1.1",
|
|
||||||
"eslint-plugin-unicorn": "^48.0.1",
|
|
||||||
"eslint-plugin-unused-imports": "^3.0.0",
|
|
||||||
"eslint-plugin-yml": "^1.8.0",
|
|
||||||
"jsonc-eslint-parser": "^2.3.0",
|
|
||||||
"yaml-eslint-parser": "^1.2.2"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"eslint": "^8.46.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,247 +0,0 @@
|
|||||||
// Inline from https://github.com/standard/eslint-config-standard/blob/master/.eslintrc.json
|
|
||||||
// Until it upgrades
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
parserOptions: {
|
|
||||||
ecmaVersion: 2022,
|
|
||||||
ecmaFeatures: {
|
|
||||||
jsx: true,
|
|
||||||
},
|
|
||||||
sourceType: 'module',
|
|
||||||
},
|
|
||||||
|
|
||||||
env: {
|
|
||||||
es2021: true,
|
|
||||||
node: true,
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
'import',
|
|
||||||
'n',
|
|
||||||
'promise',
|
|
||||||
],
|
|
||||||
|
|
||||||
globals: {
|
|
||||||
document: 'readonly',
|
|
||||||
navigator: 'readonly',
|
|
||||||
window: 'readonly',
|
|
||||||
},
|
|
||||||
|
|
||||||
rules: {
|
|
||||||
'no-var': 'warn',
|
|
||||||
'object-shorthand': ['warn', 'properties'],
|
|
||||||
|
|
||||||
'accessor-pairs': ['error', { setWithoutGet: true, enforceForClassMembers: true }],
|
|
||||||
'array-bracket-spacing': ['error', 'never'],
|
|
||||||
'array-callback-return': ['error', {
|
|
||||||
allowImplicit: false,
|
|
||||||
checkForEach: false,
|
|
||||||
}],
|
|
||||||
'arrow-spacing': ['error', { before: true, after: true }],
|
|
||||||
'block-spacing': ['error', 'always'],
|
|
||||||
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
|
|
||||||
'camelcase': ['error', {
|
|
||||||
allow: ['^UNSAFE_'],
|
|
||||||
properties: 'never',
|
|
||||||
ignoreGlobals: true,
|
|
||||||
}],
|
|
||||||
'comma-dangle': ['error', {
|
|
||||||
arrays: 'never',
|
|
||||||
objects: 'never',
|
|
||||||
imports: 'never',
|
|
||||||
exports: 'never',
|
|
||||||
functions: 'never',
|
|
||||||
}],
|
|
||||||
'comma-spacing': ['error', { before: false, after: true }],
|
|
||||||
'comma-style': ['error', 'last'],
|
|
||||||
'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }],
|
|
||||||
'constructor-super': 'error',
|
|
||||||
'curly': ['error', 'multi-line'],
|
|
||||||
'default-case-last': 'error',
|
|
||||||
'dot-location': ['error', 'property'],
|
|
||||||
'dot-notation': ['error', { allowKeywords: true }],
|
|
||||||
'eol-last': 'error',
|
|
||||||
'eqeqeq': ['error', 'always', { null: 'ignore' }],
|
|
||||||
'func-call-spacing': ['error', 'never'],
|
|
||||||
'generator-star-spacing': ['error', { before: true, after: true }],
|
|
||||||
'indent': ['error', 2, {
|
|
||||||
SwitchCase: 1,
|
|
||||||
VariableDeclarator: 1,
|
|
||||||
outerIIFEBody: 1,
|
|
||||||
MemberExpression: 1,
|
|
||||||
FunctionDeclaration: { parameters: 1, body: 1 },
|
|
||||||
FunctionExpression: { parameters: 1, body: 1 },
|
|
||||||
CallExpression: { arguments: 1 },
|
|
||||||
ArrayExpression: 1,
|
|
||||||
ObjectExpression: 1,
|
|
||||||
ImportDeclaration: 1,
|
|
||||||
flatTernaryExpressions: false,
|
|
||||||
ignoreComments: false,
|
|
||||||
ignoredNodes: ['TemplateLiteral *', 'JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXFragment', 'JSXOpeningFragment', 'JSXClosingFragment', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'],
|
|
||||||
offsetTernaryExpressions: true,
|
|
||||||
}],
|
|
||||||
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
|
|
||||||
'keyword-spacing': ['error', { before: true, after: true }],
|
|
||||||
'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }],
|
|
||||||
'multiline-ternary': ['error', 'always-multiline'],
|
|
||||||
'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }],
|
|
||||||
'new-parens': 'error',
|
|
||||||
'no-array-constructor': 'error',
|
|
||||||
'no-async-promise-executor': 'error',
|
|
||||||
'no-caller': 'error',
|
|
||||||
'no-case-declarations': 'error',
|
|
||||||
'no-class-assign': 'error',
|
|
||||||
'no-compare-neg-zero': 'error',
|
|
||||||
'no-cond-assign': 'error',
|
|
||||||
'no-const-assign': 'error',
|
|
||||||
'no-constant-condition': ['error', { checkLoops: false }],
|
|
||||||
'no-control-regex': 'error',
|
|
||||||
'no-debugger': 'error',
|
|
||||||
'no-delete-var': 'error',
|
|
||||||
'no-dupe-args': 'error',
|
|
||||||
'no-dupe-class-members': 'error',
|
|
||||||
'no-dupe-keys': 'error',
|
|
||||||
'no-duplicate-case': 'error',
|
|
||||||
'no-useless-backreference': 'error',
|
|
||||||
'no-empty': ['error', { allowEmptyCatch: true }],
|
|
||||||
'no-empty-character-class': 'error',
|
|
||||||
'no-empty-pattern': 'error',
|
|
||||||
'no-eval': 'error',
|
|
||||||
'no-ex-assign': 'error',
|
|
||||||
'no-extend-native': 'error',
|
|
||||||
'no-extra-bind': 'error',
|
|
||||||
'no-extra-boolean-cast': 'error',
|
|
||||||
'no-extra-parens': ['error', 'functions'],
|
|
||||||
'no-fallthrough': 'error',
|
|
||||||
'no-floating-decimal': 'error',
|
|
||||||
'no-func-assign': 'error',
|
|
||||||
'no-global-assign': 'error',
|
|
||||||
'no-implied-eval': 'error',
|
|
||||||
'no-import-assign': 'error',
|
|
||||||
'no-invalid-regexp': 'error',
|
|
||||||
'no-irregular-whitespace': 'error',
|
|
||||||
'no-iterator': 'error',
|
|
||||||
'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
|
|
||||||
'no-lone-blocks': 'error',
|
|
||||||
'no-loss-of-precision': 'error',
|
|
||||||
'no-misleading-character-class': 'error',
|
|
||||||
'no-prototype-builtins': 'error',
|
|
||||||
'no-useless-catch': 'error',
|
|
||||||
'no-mixed-operators': ['error', {
|
|
||||||
groups: [
|
|
||||||
['==', '!=', '===', '!==', '>', '>=', '<', '<='],
|
|
||||||
['&&', '||'],
|
|
||||||
['in', 'instanceof'],
|
|
||||||
],
|
|
||||||
allowSamePrecedence: true,
|
|
||||||
}],
|
|
||||||
'no-mixed-spaces-and-tabs': 'error',
|
|
||||||
'no-multi-spaces': 'error',
|
|
||||||
'no-multi-str': 'error',
|
|
||||||
'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }],
|
|
||||||
'no-new': 'error',
|
|
||||||
'no-new-func': 'error',
|
|
||||||
'no-new-object': 'error',
|
|
||||||
'no-new-symbol': 'error',
|
|
||||||
'no-new-wrappers': 'error',
|
|
||||||
'no-obj-calls': 'error',
|
|
||||||
'no-octal': 'error',
|
|
||||||
'no-octal-escape': 'error',
|
|
||||||
'no-proto': 'error',
|
|
||||||
'no-redeclare': ['error', { builtinGlobals: false }],
|
|
||||||
'no-regex-spaces': 'error',
|
|
||||||
'no-return-assign': ['error', 'except-parens'],
|
|
||||||
'no-self-assign': ['error', { props: true }],
|
|
||||||
'no-self-compare': 'error',
|
|
||||||
'no-sequences': 'error',
|
|
||||||
'no-shadow-restricted-names': 'error',
|
|
||||||
'no-sparse-arrays': 'error',
|
|
||||||
'no-tabs': 'error',
|
|
||||||
'no-template-curly-in-string': 'error',
|
|
||||||
'no-this-before-super': 'error',
|
|
||||||
'no-throw-literal': 'error',
|
|
||||||
'no-trailing-spaces': 'error',
|
|
||||||
'no-undef': 'error',
|
|
||||||
'no-undef-init': 'error',
|
|
||||||
'no-unexpected-multiline': 'error',
|
|
||||||
'no-unmodified-loop-condition': 'error',
|
|
||||||
'no-unneeded-ternary': ['error', { defaultAssignment: false }],
|
|
||||||
'no-unreachable': 'error',
|
|
||||||
'no-unreachable-loop': 'error',
|
|
||||||
'no-unsafe-finally': 'error',
|
|
||||||
'no-unsafe-negation': 'error',
|
|
||||||
'no-unused-expressions': ['error', {
|
|
||||||
allowShortCircuit: true,
|
|
||||||
allowTernary: true,
|
|
||||||
allowTaggedTemplates: true,
|
|
||||||
}],
|
|
||||||
'no-unused-vars': ['error', {
|
|
||||||
args: 'none',
|
|
||||||
caughtErrors: 'none',
|
|
||||||
ignoreRestSiblings: true,
|
|
||||||
vars: 'all',
|
|
||||||
}],
|
|
||||||
'no-use-before-define': ['error', { functions: false, classes: false, variables: false }],
|
|
||||||
'no-useless-call': 'error',
|
|
||||||
'no-useless-computed-key': 'error',
|
|
||||||
'no-useless-constructor': 'error',
|
|
||||||
'no-useless-escape': 'error',
|
|
||||||
'no-useless-rename': 'error',
|
|
||||||
'no-useless-return': 'error',
|
|
||||||
'no-void': 'error',
|
|
||||||
'no-whitespace-before-property': 'error',
|
|
||||||
'no-with': 'error',
|
|
||||||
'object-curly-newline': ['error', { multiline: true, consistent: true }],
|
|
||||||
'object-curly-spacing': ['error', 'always'],
|
|
||||||
'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
|
|
||||||
'one-var': ['error', { initialized: 'never' }],
|
|
||||||
'operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before', '|>': 'before' } }],
|
|
||||||
'padded-blocks': ['error', { blocks: 'never', switches: 'never', classes: 'never' }],
|
|
||||||
'prefer-const': ['error', { destructuring: 'all' }],
|
|
||||||
'prefer-promise-reject-errors': 'error',
|
|
||||||
'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
|
|
||||||
'quote-props': ['error', 'as-needed'],
|
|
||||||
'quotes': ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }],
|
|
||||||
'rest-spread-spacing': ['error', 'never'],
|
|
||||||
'semi': ['error', 'never'],
|
|
||||||
'semi-spacing': ['error', { before: false, after: true }],
|
|
||||||
'space-before-blocks': ['error', 'always'],
|
|
||||||
'space-before-function-paren': ['error', 'always'],
|
|
||||||
'space-in-parens': ['error', 'never'],
|
|
||||||
'space-infix-ops': 'error',
|
|
||||||
'space-unary-ops': ['error', { words: true, nonwords: false }],
|
|
||||||
'spaced-comment': ['error', 'always', {
|
|
||||||
line: { markers: ['*package', '!', '/', ',', '='] },
|
|
||||||
block: { balanced: true, markers: ['*package', '!', ',', ':', '::', 'flow-include'], exceptions: ['*'] },
|
|
||||||
}],
|
|
||||||
'symbol-description': 'error',
|
|
||||||
'template-curly-spacing': ['error', 'never'],
|
|
||||||
'template-tag-spacing': ['error', 'never'],
|
|
||||||
'unicode-bom': ['error', 'never'],
|
|
||||||
'use-isnan': ['error', {
|
|
||||||
enforceForSwitchCase: true,
|
|
||||||
enforceForIndexOf: true,
|
|
||||||
}],
|
|
||||||
'valid-typeof': ['error', { requireStringLiterals: true }],
|
|
||||||
'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }],
|
|
||||||
'yield-star-spacing': ['error', 'both'],
|
|
||||||
'yoda': ['error', 'never'],
|
|
||||||
|
|
||||||
'import/export': 'error',
|
|
||||||
'import/first': 'error',
|
|
||||||
'import/no-absolute-path': ['error', { esmodule: true, commonjs: true, amd: false }],
|
|
||||||
'import/no-duplicates': 'error',
|
|
||||||
'import/no-named-default': 'error',
|
|
||||||
'import/no-webpack-loader-syntax': 'error',
|
|
||||||
|
|
||||||
'n/handle-callback-err': ['error', '^(err|error)$'],
|
|
||||||
'n/no-callback-literal': 'error',
|
|
||||||
'n/no-deprecated-api': 'error',
|
|
||||||
'n/no-exports-assign': 'error',
|
|
||||||
'n/no-new-require': 'error',
|
|
||||||
'n/no-path-concat': 'error',
|
|
||||||
'n/process-exit-as-throw': 'error',
|
|
||||||
|
|
||||||
'promise/param-names': 'error',
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,182 +0,0 @@
|
|||||||
const fs = require('node:fs')
|
|
||||||
const { join } = require('node:path')
|
|
||||||
const process = require('node:process')
|
|
||||||
const basic = require('@antfu/eslint-config-basic')
|
|
||||||
|
|
||||||
const tsconfig = process.env.ESLINT_TSCONFIG || 'tsconfig.eslint.json'
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
extends: [
|
|
||||||
'@antfu/eslint-config-basic',
|
|
||||||
'plugin:import/typescript',
|
|
||||||
'plugin:@typescript-eslint/recommended',
|
|
||||||
],
|
|
||||||
settings: {
|
|
||||||
'import/resolver': {
|
|
||||||
node: { extensions: ['.js', '.jsx', '.mjs', '.ts', '.tsx', '.d.ts'] },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
overrides: basic.overrides.concat(
|
|
||||||
!fs.existsSync(join(process.cwd(), tsconfig))
|
|
||||||
? []
|
|
||||||
: [{
|
|
||||||
parserOptions: {
|
|
||||||
tsconfigRootDir: process.cwd(),
|
|
||||||
project: [tsconfig],
|
|
||||||
},
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
excludedFiles: ['**/*.md/*.*'],
|
|
||||||
files: ['*.ts', '*.tsx', '*.mts', '*.cts'],
|
|
||||||
// https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended-requiring-type-checking.ts
|
|
||||||
rules: {
|
|
||||||
'no-throw-literal': 'off',
|
|
||||||
'@typescript-eslint/no-throw-literal': 'error',
|
|
||||||
'no-implied-eval': 'off',
|
|
||||||
'@typescript-eslint/no-implied-eval': 'error',
|
|
||||||
'dot-notation': 'off',
|
|
||||||
'@typescript-eslint/dot-notation': ['error', { allowKeywords: true }],
|
|
||||||
'@typescript-eslint/no-floating-promises': 'error',
|
|
||||||
'@typescript-eslint/no-misused-promises': 'error',
|
|
||||||
'@typescript-eslint/await-thenable': 'error',
|
|
||||||
'@typescript-eslint/no-for-in-array': 'error',
|
|
||||||
'@typescript-eslint/no-unnecessary-type-assertion': 'error',
|
|
||||||
'@typescript-eslint/no-unsafe-argument': 'error',
|
|
||||||
'@typescript-eslint/no-unsafe-assignment': 'error',
|
|
||||||
'@typescript-eslint/no-unsafe-call': 'error',
|
|
||||||
'@typescript-eslint/no-unsafe-member-access': 'error',
|
|
||||||
'@typescript-eslint/no-unsafe-return': 'error',
|
|
||||||
'require-await': 'off',
|
|
||||||
'@typescript-eslint/require-await': 'error',
|
|
||||||
'@typescript-eslint/restrict-plus-operands': 'error',
|
|
||||||
'@typescript-eslint/restrict-template-expressions': 'error',
|
|
||||||
'@typescript-eslint/unbound-method': 'error',
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
// https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/unbound-method.md
|
|
||||||
files: ['**/__tests__/**/*.ts', '**/*.spec.ts', '**/*.test.ts'],
|
|
||||||
plugins: ['jest'],
|
|
||||||
rules: {
|
|
||||||
// you should turn the original rule off *only* for test files
|
|
||||||
'@typescript-eslint/unbound-method': 'off',
|
|
||||||
'jest/unbound-method': 'error',
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
),
|
|
||||||
rules: {
|
|
||||||
'import/named': 'off',
|
|
||||||
|
|
||||||
// TS
|
|
||||||
'@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': 'allow-with-description' }],
|
|
||||||
'@typescript-eslint/member-delimiter-style': ['error', { multiline: { delimiter: 'none' } }],
|
|
||||||
'@typescript-eslint/type-annotation-spacing': ['error', {}],
|
|
||||||
'@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports', disallowTypeAnnotations: false }],
|
|
||||||
'@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
|
|
||||||
'@typescript-eslint/prefer-ts-expect-error': 'error',
|
|
||||||
'@typescript-eslint/no-require-imports': 'error',
|
|
||||||
// Override JS
|
|
||||||
'no-useless-constructor': 'off',
|
|
||||||
'indent': 'off',
|
|
||||||
'@typescript-eslint/indent': ['error', 2, {
|
|
||||||
SwitchCase: 1,
|
|
||||||
VariableDeclarator: 1,
|
|
||||||
outerIIFEBody: 1,
|
|
||||||
MemberExpression: 1,
|
|
||||||
FunctionDeclaration: { parameters: 1, body: 1 },
|
|
||||||
FunctionExpression: { parameters: 1, body: 1 },
|
|
||||||
CallExpression: { arguments: 1 },
|
|
||||||
ArrayExpression: 1,
|
|
||||||
ObjectExpression: 1,
|
|
||||||
ImportDeclaration: 1,
|
|
||||||
flatTernaryExpressions: false,
|
|
||||||
ignoreComments: false,
|
|
||||||
ignoredNodes: [
|
|
||||||
'TemplateLiteral *',
|
|
||||||
'JSXElement',
|
|
||||||
'JSXElement > *',
|
|
||||||
'JSXAttribute',
|
|
||||||
'JSXIdentifier',
|
|
||||||
'JSXNamespacedName',
|
|
||||||
'JSXMemberExpression',
|
|
||||||
'JSXSpreadAttribute',
|
|
||||||
'JSXExpressionContainer',
|
|
||||||
'JSXOpeningElement',
|
|
||||||
'JSXClosingElement',
|
|
||||||
'JSXFragment',
|
|
||||||
'JSXOpeningFragment',
|
|
||||||
'JSXClosingFragment',
|
|
||||||
'JSXText',
|
|
||||||
'JSXEmptyExpression',
|
|
||||||
'JSXSpreadChild',
|
|
||||||
'TSTypeParameterInstantiation',
|
|
||||||
'FunctionExpression > .params[decorators.length > 0]',
|
|
||||||
'FunctionExpression > .params > :matches(Decorator, :not(:first-child))',
|
|
||||||
'ClassBody.body > PropertyDefinition[decorators.length > 0] > .key',
|
|
||||||
],
|
|
||||||
offsetTernaryExpressions: true,
|
|
||||||
}],
|
|
||||||
'no-invalid-this': 'off',
|
|
||||||
'@typescript-eslint/no-invalid-this': 'error',
|
|
||||||
'no-redeclare': 'off',
|
|
||||||
'@typescript-eslint/no-redeclare': 'error',
|
|
||||||
'no-use-before-define': 'off',
|
|
||||||
'@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: false, variables: true }],
|
|
||||||
'brace-style': 'off',
|
|
||||||
'@typescript-eslint/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
|
|
||||||
'comma-dangle': 'off',
|
|
||||||
'@typescript-eslint/comma-dangle': ['error', 'always-multiline'],
|
|
||||||
'object-curly-spacing': 'off',
|
|
||||||
'@typescript-eslint/object-curly-spacing': ['error', 'always'],
|
|
||||||
'semi': 'off',
|
|
||||||
'@typescript-eslint/semi': ['error', 'never'],
|
|
||||||
'quotes': 'off',
|
|
||||||
'@typescript-eslint/quotes': ['error', 'single'],
|
|
||||||
'space-before-blocks': 'off',
|
|
||||||
'@typescript-eslint/space-before-blocks': ['error', 'always'],
|
|
||||||
'space-before-function-paren': 'off',
|
|
||||||
'@typescript-eslint/space-before-function-paren': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
anonymous: 'always',
|
|
||||||
named: 'never',
|
|
||||||
asyncArrow: 'always',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'space-infix-ops': 'off',
|
|
||||||
'@typescript-eslint/space-infix-ops': 'error',
|
|
||||||
'keyword-spacing': 'off',
|
|
||||||
'@typescript-eslint/keyword-spacing': ['error', { before: true, after: true }],
|
|
||||||
'comma-spacing': 'off',
|
|
||||||
'@typescript-eslint/comma-spacing': ['error', { before: false, after: true }],
|
|
||||||
'no-extra-parens': 'off',
|
|
||||||
'@typescript-eslint/no-extra-parens': ['error', 'functions'],
|
|
||||||
'no-dupe-class-members': 'off',
|
|
||||||
'@typescript-eslint/no-dupe-class-members': 'error',
|
|
||||||
'no-loss-of-precision': 'off',
|
|
||||||
'@typescript-eslint/no-loss-of-precision': 'error',
|
|
||||||
'lines-between-class-members': 'off',
|
|
||||||
'@typescript-eslint/lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }],
|
|
||||||
|
|
||||||
// antfu
|
|
||||||
'antfu/generic-spacing': 'error',
|
|
||||||
'antfu/no-cjs-exports': 'error',
|
|
||||||
'antfu/no-ts-export-equal': 'error',
|
|
||||||
'antfu/no-const-enum': 'error',
|
|
||||||
'antfu/named-tuple-spacing': 'error',
|
|
||||||
|
|
||||||
// off
|
|
||||||
'@typescript-eslint/consistent-indexed-object-style': 'off',
|
|
||||||
'@typescript-eslint/naming-convention': 'off',
|
|
||||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
||||||
'@typescript-eslint/explicit-member-accessibility': 'off',
|
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
|
||||||
'@typescript-eslint/parameter-properties': 'off',
|
|
||||||
'@typescript-eslint/no-empty-interface': 'off',
|
|
||||||
'@typescript-eslint/ban-ts-ignore': 'off',
|
|
||||||
'@typescript-eslint/no-empty-function': 'off',
|
|
||||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
||||||
'@typescript-eslint/triple-slash-reference': 'off',
|
|
||||||
// handled by unused-imports/no-unused-imports
|
|
||||||
'@typescript-eslint/no-unused-vars': 'off',
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,111 +0,0 @@
|
|||||||
const { isPackageExists } = require('local-pkg')
|
|
||||||
|
|
||||||
const TS = isPackageExists('typescript')
|
|
||||||
|
|
||||||
if (!TS)
|
|
||||||
console.warn('[@antfu/eslint-config] TypeScript is not installed, fallback to JS only.')
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: ['*.vue'],
|
|
||||||
parser: 'vue-eslint-parser',
|
|
||||||
parserOptions: {
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
'no-unused-vars': 'off',
|
|
||||||
'no-undef': 'off',
|
|
||||||
...(TS
|
|
||||||
? { '@typescript-eslint/no-unused-vars': 'off' }
|
|
||||||
: null),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
extends: [
|
|
||||||
'plugin:vue/vue3-recommended',
|
|
||||||
TS
|
|
||||||
? '@antfu/eslint-config-ts'
|
|
||||||
: '@antfu/eslint-config-basic',
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
'vue/max-attributes-per-line': 'off',
|
|
||||||
'vue/no-v-html': 'off',
|
|
||||||
'vue/require-prop-types': 'off',
|
|
||||||
'vue/require-default-prop': 'off',
|
|
||||||
'vue/multi-word-component-names': 'off',
|
|
||||||
'vue/prefer-import-from-vue': 'off',
|
|
||||||
'vue/no-v-text-v-html-on-component': 'off',
|
|
||||||
'vue/no-dupe-keys': 'off',
|
|
||||||
|
|
||||||
// reactivity transform
|
|
||||||
'vue/no-setup-props-destructure': 'off',
|
|
||||||
|
|
||||||
'vue/component-tags-order': ['error', {
|
|
||||||
order: ['script', 'template', 'style'],
|
|
||||||
}],
|
|
||||||
'vue/block-tag-newline': ['error', {
|
|
||||||
singleline: 'always',
|
|
||||||
multiline: 'always',
|
|
||||||
}],
|
|
||||||
'vue/component-name-in-template-casing': ['error', 'PascalCase'],
|
|
||||||
'vue/component-options-name-casing': ['error', 'PascalCase'],
|
|
||||||
'vue/custom-event-name-casing': ['error', 'camelCase'],
|
|
||||||
'vue/define-macros-order': ['error', {
|
|
||||||
order: ['defineOptions', 'defineProps', 'defineEmits', 'defineSlots'],
|
|
||||||
}],
|
|
||||||
'vue/html-comment-content-spacing': ['error', 'always', {
|
|
||||||
exceptions: ['-'],
|
|
||||||
}],
|
|
||||||
'vue/no-restricted-v-bind': ['error', '/^v-/'],
|
|
||||||
'vue/no-useless-v-bind': 'error',
|
|
||||||
'vue/no-unused-refs': 'error',
|
|
||||||
'vue/padding-line-between-blocks': ['error', 'always'],
|
|
||||||
'vue/prefer-separate-static-class': 'error',
|
|
||||||
|
|
||||||
// extensions
|
|
||||||
'vue/array-bracket-spacing': ['error', 'never'],
|
|
||||||
'vue/arrow-spacing': ['error', { before: true, after: true }],
|
|
||||||
'vue/block-spacing': ['error', 'always'],
|
|
||||||
'vue/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
|
|
||||||
'vue/comma-dangle': ['error', 'always-multiline'],
|
|
||||||
'vue/comma-spacing': ['error', { before: false, after: true }],
|
|
||||||
'vue/comma-style': ['error', 'last'],
|
|
||||||
'vue/dot-location': ['error', 'property'],
|
|
||||||
'vue/dot-notation': ['error', { allowKeywords: true }],
|
|
||||||
'vue/eqeqeq': ['error', 'smart'],
|
|
||||||
// 'vue/func-call-spacing': ['off', 'never'],
|
|
||||||
'vue/key-spacing': ['error', { beforeColon: false, afterColon: true }],
|
|
||||||
'vue/keyword-spacing': ['error', { before: true, after: true }],
|
|
||||||
'vue/no-constant-condition': 'warn',
|
|
||||||
'vue/no-empty-pattern': 'error',
|
|
||||||
'vue/no-extra-parens': ['error', 'functions'],
|
|
||||||
'vue/no-irregular-whitespace': 'error',
|
|
||||||
'vue/no-loss-of-precision': 'error',
|
|
||||||
'vue/no-restricted-syntax': [
|
|
||||||
'error',
|
|
||||||
'DebuggerStatement',
|
|
||||||
'LabeledStatement',
|
|
||||||
'WithStatement',
|
|
||||||
],
|
|
||||||
'vue/no-sparse-arrays': 'error',
|
|
||||||
'vue/object-curly-newline': ['error', { multiline: true, consistent: true }],
|
|
||||||
'vue/object-curly-spacing': ['error', 'always'],
|
|
||||||
'vue/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
|
|
||||||
'vue/object-shorthand': [
|
|
||||||
'error',
|
|
||||||
'always',
|
|
||||||
{
|
|
||||||
ignoreConstructors: false,
|
|
||||||
avoidQuotes: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'vue/operator-linebreak': ['error', 'before'],
|
|
||||||
'vue/prefer-template': 'error',
|
|
||||||
'vue/quote-props': ['error', 'consistent-as-needed'],
|
|
||||||
'vue/space-in-parens': ['error', 'never'],
|
|
||||||
'vue/space-infix-ops': 'error',
|
|
||||||
'vue/space-unary-ops': ['error', { words: true, nonwords: false }],
|
|
||||||
'vue/template-curly-spacing': 'error',
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@taoyaal/eslint-config",
|
|
||||||
"version": "0.40.11",
|
|
||||||
"description": "Anthony's ESLint config",
|
|
||||||
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
|
||||||
"license": "MIT",
|
|
||||||
"homepage": "https://git.taoya.art/taolin/eslint-config.git",
|
|
||||||
"keywords": [
|
|
||||||
"eslint-config"
|
|
||||||
],
|
|
||||||
"main": "index.js",
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"peerDependencies": {
|
|
||||||
"eslint": ">=7.4.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@antfu/eslint-config-vue": "workspace:*",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^6.2.1",
|
|
||||||
"@typescript-eslint/parser": "^6.2.1",
|
|
||||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
||||||
"eslint-plugin-html": "^7.1.0",
|
|
||||||
"eslint-plugin-import": "npm:eslint-plugin-i@2.28.0-2",
|
|
||||||
"eslint-plugin-jsonc": "^2.9.0",
|
|
||||||
"eslint-plugin-n": "^16.0.1",
|
|
||||||
"eslint-plugin-promise": "^6.1.1",
|
|
||||||
"eslint-plugin-unicorn": "^48.0.1",
|
|
||||||
"eslint-plugin-vue": "^9.16.1",
|
|
||||||
"eslint-plugin-yml": "^1.8.0",
|
|
||||||
"jsonc-eslint-parser": "^2.3.0",
|
|
||||||
"yaml-eslint-parser": "^1.2.2"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"eslint": "^8.46.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "@antfu",
|
|
||||||
"plugins": [
|
|
||||||
"antfu"
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
import { defineBuildConfig } from 'unbuild'
|
|
||||||
|
|
||||||
export default defineBuildConfig({
|
|
||||||
entries: [
|
|
||||||
'src/index',
|
|
||||||
],
|
|
||||||
declaration: false,
|
|
||||||
clean: true,
|
|
||||||
rollup: {
|
|
||||||
emitCJS: true,
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "eslint-plugin-antfu",
|
|
||||||
"version": "0.40.11",
|
|
||||||
"license": "MIT",
|
|
||||||
"homepage": "https://git.taoya.art/taolin/eslint-config.git",
|
|
||||||
"main": "./dist/index.cjs",
|
|
||||||
"module": "./dist/index.mjs",
|
|
||||||
"files": [
|
|
||||||
"dist"
|
|
||||||
],
|
|
||||||
"scripts": {
|
|
||||||
"build": "rimraf dist && unbuild",
|
|
||||||
"stub": "unbuild --stub",
|
|
||||||
"test": "vitest",
|
|
||||||
"prepublishOnly": "nr build"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@typescript-eslint/utils": "^6.2.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/node": "^20.4.8",
|
|
||||||
"@typescript-eslint/rule-tester": "^6.2.1",
|
|
||||||
"unbuild": "^1.2.1",
|
|
||||||
"vitest": "^0.34.1"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
import genericSpacing from './rules/generic-spacing'
|
|
||||||
import ifNewline from './rules/if-newline'
|
|
||||||
import importDedupe from './rules/import-dedupe'
|
|
||||||
import preferInlineTypeImport from './rules/prefer-inline-type-import'
|
|
||||||
import topLevelFunction from './rules/top-level-function'
|
|
||||||
import noImportNodeModulesByPath from './rules/no-import-node-modules-by-path'
|
|
||||||
import noTsExportEqual from './rules/no-ts-export-equal'
|
|
||||||
import noCjsExports from './rules/no-cjs-exports'
|
|
||||||
import noConstEnum from './rules/no-const-enum'
|
|
||||||
import namedTupleSpacing from './rules/named-tuple-spacing'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
rules: {
|
|
||||||
'if-newline': ifNewline,
|
|
||||||
'import-dedupe': importDedupe,
|
|
||||||
'prefer-inline-type-import': preferInlineTypeImport,
|
|
||||||
'generic-spacing': genericSpacing,
|
|
||||||
'top-level-function': topLevelFunction,
|
|
||||||
'no-import-node-modules-by-path': noImportNodeModulesByPath,
|
|
||||||
'no-cjs-exports': noCjsExports,
|
|
||||||
'no-ts-export-equal': noTsExportEqual,
|
|
||||||
'no-const-enum': noConstEnum,
|
|
||||||
'named-tuple-spacing': namedTupleSpacing,
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './generic-spacing'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'type Foo<T = true> = T',
|
|
||||||
'type Foo<T extends true = true> = T',
|
|
||||||
`
|
|
||||||
type Foo<
|
|
||||||
T = true,
|
|
||||||
K = false
|
|
||||||
> = T`,
|
|
||||||
`function foo<
|
|
||||||
T
|
|
||||||
>() {}`,
|
|
||||||
'const foo = <T>(name: T) => name',
|
|
||||||
`interface Log {
|
|
||||||
foo<T>(name: T): void
|
|
||||||
}`,
|
|
||||||
`interface Log {
|
|
||||||
<T>(name: T): void
|
|
||||||
}`,
|
|
||||||
`interface Foo {
|
|
||||||
foo?: <T>(name: T) => void
|
|
||||||
}`,
|
|
||||||
]
|
|
||||||
const invalids = [
|
|
||||||
['type Foo<T=true> = T', 'type Foo<T = true> = T'],
|
|
||||||
['type Foo<T,K> = T', 'type Foo<T, K> = T'],
|
|
||||||
['type Foo<T=false,K=1|2> = T', 'type Foo<T = false, K = 1|2> = T', 3],
|
|
||||||
['function foo <T>() {}', 'function foo<T>() {}'],
|
|
||||||
[`interface Log {
|
|
||||||
foo <T>(name: T): void
|
|
||||||
}`, `interface Log {
|
|
||||||
foo<T>(name: T): void
|
|
||||||
}`],
|
|
||||||
] as const
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i[0],
|
|
||||||
output: i[1].trim(),
|
|
||||||
errors: Array.from({ length: i[2] || 1 }, () => ({ messageId: 'genericSpacingMismatch' })),
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,87 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'generic-spacing'
|
|
||||||
export type MessageIds = 'genericSpacingMismatch'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'suggestion',
|
|
||||||
docs: {
|
|
||||||
description: 'Spaces around generic type parameters',
|
|
||||||
recommended: 'stylistic',
|
|
||||||
},
|
|
||||||
fixable: 'code',
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
genericSpacingMismatch: 'Generic spaces mismatch',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
const sourceCode = context.getSourceCode()
|
|
||||||
return {
|
|
||||||
TSTypeParameterDeclaration: (node) => {
|
|
||||||
if (!['TSCallSignatureDeclaration', 'ArrowFunctionExpression', 'TSFunctionType'].includes(node.parent.type)) {
|
|
||||||
const pre = sourceCode.text.slice(0, node.range[0])
|
|
||||||
const preSpace = pre.match(/(\s+)$/)?.[0]
|
|
||||||
// strip space before <T>
|
|
||||||
if (preSpace && preSpace.length) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'genericSpacingMismatch',
|
|
||||||
*fix(fixer) {
|
|
||||||
yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], '')
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add space between <T,K>
|
|
||||||
const params = node.params
|
|
||||||
for (let i = 1; i < params.length; i++) {
|
|
||||||
const prev = params[i - 1]
|
|
||||||
const current = params[i]
|
|
||||||
const from = prev.range[1]
|
|
||||||
const to = current.range[0]
|
|
||||||
const span = sourceCode.text.slice(from, to)
|
|
||||||
if (span !== ', ' && !span.match(/,\n/)) {
|
|
||||||
context.report({
|
|
||||||
*fix(fixer) {
|
|
||||||
yield fixer.replaceTextRange([from, to], ', ')
|
|
||||||
},
|
|
||||||
loc: {
|
|
||||||
start: prev.loc.end,
|
|
||||||
end: current.loc.start,
|
|
||||||
},
|
|
||||||
messageId: 'genericSpacingMismatch',
|
|
||||||
node,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// add space around = in type Foo<T = true>
|
|
||||||
TSTypeParameter: (node) => {
|
|
||||||
if (!node.default)
|
|
||||||
return
|
|
||||||
const endNode = node.constraint || node.name
|
|
||||||
const from = endNode.range[1]
|
|
||||||
const to = node.default.range[0]
|
|
||||||
if (sourceCode.text.slice(from, to) !== ' = ') {
|
|
||||||
context.report({
|
|
||||||
*fix(fixer) {
|
|
||||||
yield fixer.replaceTextRange([from, to], ' = ')
|
|
||||||
},
|
|
||||||
loc: {
|
|
||||||
start: endNode.loc.end,
|
|
||||||
end: node.default.loc.start,
|
|
||||||
},
|
|
||||||
messageId: 'genericSpacingMismatch',
|
|
||||||
node,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,27 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './if-newline'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
`if (true)
|
|
||||||
console.log('hello')
|
|
||||||
`,
|
|
||||||
`if (true) {
|
|
||||||
console.log('hello')
|
|
||||||
}`,
|
|
||||||
]
|
|
||||||
const invalids = [
|
|
||||||
['if (true) console.log(\'hello\')', 'if (true) \nconsole.log(\'hello\')'],
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i[0],
|
|
||||||
output: i[1],
|
|
||||||
errors: [{ messageId: 'missingIfNewline' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,45 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'if-newline'
|
|
||||||
export type MessageIds = 'missingIfNewline'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Newline after if',
|
|
||||||
recommended: 'stylistic',
|
|
||||||
},
|
|
||||||
fixable: 'code',
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
missingIfNewline: 'Expect newline after if',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
return {
|
|
||||||
IfStatement(node) {
|
|
||||||
if (!node.consequent)
|
|
||||||
return
|
|
||||||
if (node.consequent.type === 'BlockStatement')
|
|
||||||
return
|
|
||||||
if (node.test.loc.end.line === node.consequent.loc.start.line) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
loc: {
|
|
||||||
start: node.test.loc.end,
|
|
||||||
end: node.consequent.loc.start,
|
|
||||||
},
|
|
||||||
messageId: 'missingIfNewline',
|
|
||||||
fix(fixer) {
|
|
||||||
return fixer.replaceTextRange([node.consequent.range[0], node.consequent.range[0]], '\n')
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,25 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './import-dedupe'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'import { a } from \'foo\'',
|
|
||||||
]
|
|
||||||
const invalids = [
|
|
||||||
[
|
|
||||||
'import { a, b, a, a, c, a } from \'foo\'',
|
|
||||||
'import { a, b, c, } from \'foo\'',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i[0],
|
|
||||||
output: i[1],
|
|
||||||
errors: [{ messageId: 'importDedupe' }, { messageId: 'importDedupe' }, { messageId: 'importDedupe' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,55 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'import-dedupe'
|
|
||||||
export type MessageIds = 'importDedupe'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Fix duplication in imports',
|
|
||||||
recommended: 'strict',
|
|
||||||
},
|
|
||||||
fixable: 'code',
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
importDedupe: 'Expect no duplication in imports',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
return {
|
|
||||||
ImportDeclaration(node) {
|
|
||||||
if (node.specifiers.length <= 1)
|
|
||||||
return
|
|
||||||
|
|
||||||
const names = new Set<string>()
|
|
||||||
node.specifiers.forEach((n) => {
|
|
||||||
const id = n.local.name
|
|
||||||
if (names.has(id)) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
loc: {
|
|
||||||
start: n.loc.end,
|
|
||||||
end: n.loc.start,
|
|
||||||
},
|
|
||||||
messageId: 'importDedupe',
|
|
||||||
fix(fixer) {
|
|
||||||
const s = n.range[0]
|
|
||||||
let e = n.range[1]
|
|
||||||
if (context.getSourceCode().text[e] === ',')
|
|
||||||
e += 1
|
|
||||||
return fixer.removeRange([s, e])
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
names.add(id)
|
|
||||||
})
|
|
||||||
|
|
||||||
// console.log(node)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,98 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './named-tuple-spacing'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'type T = [i: number]',
|
|
||||||
'type T = [i?: number]',
|
|
||||||
'type T = [i: number, j: number]',
|
|
||||||
'type T = [i: number, j: () => string]',
|
|
||||||
`const emit = defineEmits<{
|
|
||||||
change: [id: number]
|
|
||||||
update: [value: string]
|
|
||||||
}>()`,
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: [
|
|
||||||
{
|
|
||||||
code: 'type T = [i:number]',
|
|
||||||
output: 'type T = [i: number]',
|
|
||||||
errors: [{ messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i: number]',
|
|
||||||
output: 'type T = [i: number]',
|
|
||||||
errors: [{ messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i?:number]',
|
|
||||||
output: 'type T = [i?: number]',
|
|
||||||
errors: [{ messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i? :number]',
|
|
||||||
output: 'type T = [i?: number]',
|
|
||||||
errors: [{ messageId: 'unexpectedSpaceBetween' }, { messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i : number]',
|
|
||||||
output: 'type T = [i: number]',
|
|
||||||
errors: [{ messageId: 'unexpectedSpaceBefore' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i : number]',
|
|
||||||
output: 'type T = [i: number]',
|
|
||||||
errors: [{ messageId: 'unexpectedSpaceBefore' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i ? : number]',
|
|
||||||
output: 'type T = [i?: number]',
|
|
||||||
errors: [{ messageId: 'unexpectedSpaceBetween' }, { messageId: 'unexpectedSpaceBefore' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i:number, j:number]',
|
|
||||||
output: 'type T = [i: number, j: number]',
|
|
||||||
errors: [{ messageId: 'expectedSpaceAfter' }, { messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: 'type T = [i:()=>void, j:number]',
|
|
||||||
output: 'type T = [i: ()=>void, j: number]',
|
|
||||||
errors: [{ messageId: 'expectedSpaceAfter' }, { messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: `
|
|
||||||
const emit = defineEmits<{
|
|
||||||
change: [id:number]
|
|
||||||
update: [value:string]
|
|
||||||
}>()
|
|
||||||
`,
|
|
||||||
output: `
|
|
||||||
const emit = defineEmits<{
|
|
||||||
change: [id: number]
|
|
||||||
update: [value: string]
|
|
||||||
}>()
|
|
||||||
`,
|
|
||||||
errors: [{ messageId: 'expectedSpaceAfter' }, { messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: `
|
|
||||||
const emit = defineEmits<{
|
|
||||||
change: [id? :number]
|
|
||||||
update: [value:string]
|
|
||||||
}>()
|
|
||||||
`,
|
|
||||||
output: `
|
|
||||||
const emit = defineEmits<{
|
|
||||||
change: [id?: number]
|
|
||||||
update: [value: string]
|
|
||||||
}>()
|
|
||||||
`,
|
|
||||||
errors: [{ messageId: 'unexpectedSpaceBetween' }, { messageId: 'expectedSpaceAfter' }, { messageId: 'expectedSpaceAfter' }],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
})
|
|
@ -1,83 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'named-tuple-spacing'
|
|
||||||
export type MessageIds = 'expectedSpaceAfter' | 'unexpectedSpaceBetween' | 'unexpectedSpaceBefore'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
const RE = /^([\w_$]+)(\s*)(\?\s*)?:(\s*)(.*)$/
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'suggestion',
|
|
||||||
docs: {
|
|
||||||
description: 'Expect space before type declaration in named tuple',
|
|
||||||
recommended: 'stylistic',
|
|
||||||
},
|
|
||||||
fixable: 'code',
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
expectedSpaceAfter: 'Expected a space after the \':\'.',
|
|
||||||
unexpectedSpaceBetween: 'Unexpected space between \'?\' and the \':\'.',
|
|
||||||
unexpectedSpaceBefore: 'Unexpected space before the \':\'.',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
const sourceCode = context.getSourceCode()
|
|
||||||
return {
|
|
||||||
TSNamedTupleMember: (node: any) => {
|
|
||||||
const code = sourceCode.text.slice(node.range[0], node.range[1])
|
|
||||||
|
|
||||||
const match = code.match(RE)
|
|
||||||
if (!match)
|
|
||||||
return
|
|
||||||
|
|
||||||
const labelName = node.label.name
|
|
||||||
const spaceBeforeColon = match[2]
|
|
||||||
const optionalMark = match[3]
|
|
||||||
const spacesAfterColon = match[4]
|
|
||||||
const elementType = match[5]
|
|
||||||
|
|
||||||
function getReplaceValue() {
|
|
||||||
let ret = labelName
|
|
||||||
if (node.optional)
|
|
||||||
ret += '?'
|
|
||||||
ret += ': '
|
|
||||||
ret += elementType
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
if (optionalMark?.length > 1) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'unexpectedSpaceBetween',
|
|
||||||
*fix(fixer) {
|
|
||||||
yield fixer.replaceTextRange(node.range, code.replace(RE, getReplaceValue()))
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spaceBeforeColon?.length) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'unexpectedSpaceBefore',
|
|
||||||
*fix(fixer) {
|
|
||||||
yield fixer.replaceTextRange(node.range, code.replace(RE, getReplaceValue()))
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spacesAfterColon != null && spacesAfterColon.length !== 1) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'expectedSpaceAfter',
|
|
||||||
*fix(fixer) {
|
|
||||||
yield fixer.replaceTextRange(node.range, code.replace(RE, getReplaceValue()))
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,25 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './no-cjs-exports'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
{ code: 'export = {}', filename: 'test.ts' },
|
|
||||||
{ code: 'exports.a = {}', filename: 'test.js' },
|
|
||||||
{ code: 'module.exports.a = {}', filename: 'test.js' },
|
|
||||||
]
|
|
||||||
|
|
||||||
const invalids = [
|
|
||||||
{ code: 'exports.a = {}', filename: 'test.ts' },
|
|
||||||
{ code: 'module.exports.a = {}', filename: 'test.ts' },
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
...i,
|
|
||||||
errors: [{ messageId: 'noCjsExports' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,40 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'no-cjs-exports'
|
|
||||||
export type MessageIds = 'noCjsExports'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Do not use CJS exports',
|
|
||||||
},
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
noCjsExports: 'Use ESM export instead',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
const extension = context.getFilename().split('.').pop()
|
|
||||||
if (!['ts', 'tsx', 'mts', 'cts'].includes(extension))
|
|
||||||
return {}
|
|
||||||
|
|
||||||
return {
|
|
||||||
'MemberExpression[object.name="exports"]': function (node) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'noCjsExports',
|
|
||||||
})
|
|
||||||
},
|
|
||||||
'MemberExpression[object.name="module"][property.name="exports"]': function (node) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'noCjsExports',
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,22 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './no-const-enum'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'enum E {}',
|
|
||||||
]
|
|
||||||
|
|
||||||
const invalids = [
|
|
||||||
'const enum E {}',
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i,
|
|
||||||
errors: [{ messageId: 'noConstEnum' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,33 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'no-const-enum'
|
|
||||||
export type MessageIds = 'noConstEnum'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Disallow using `const enum` expression',
|
|
||||||
recommended: 'recommended',
|
|
||||||
},
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
noConstEnum: 'Do not use `const enum` expression',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
return {
|
|
||||||
TSEnumDeclaration: (node) => {
|
|
||||||
if (node.const) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'noConstEnum',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,28 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './no-import-node-modules-by-path'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'import xxx from "a"',
|
|
||||||
'import "b"',
|
|
||||||
'const c = require("c")',
|
|
||||||
'require("d")',
|
|
||||||
]
|
|
||||||
|
|
||||||
const invalids = [
|
|
||||||
'import a from "../node_modules/a"',
|
|
||||||
'import "../node_modules/b"',
|
|
||||||
'const c = require("../node_modules/c")',
|
|
||||||
'require("../node_modules/d")',
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i,
|
|
||||||
errors: [{ messageId: 'noImportNodeModulesByPath' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,42 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'no-import-node-modules-by-path'
|
|
||||||
export type MessageIds = 'noImportNodeModulesByPath'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Prevent importing modules in `node_modules` folder by relative or absolute path',
|
|
||||||
recommended: 'recommended',
|
|
||||||
},
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
noImportNodeModulesByPath: 'Do not import modules in `node_modules` folder by path',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
return {
|
|
||||||
'ImportDeclaration': (node) => {
|
|
||||||
if (node.source.value.includes('/node_modules/')) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'noImportNodeModulesByPath',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'CallExpression[callee.name="require"]': (node: any) => {
|
|
||||||
const value = node.arguments[0]?.value
|
|
||||||
if (typeof value === 'string' && value.includes('/node_modules/')) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'noImportNodeModulesByPath',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,23 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './no-ts-export-equal'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
{ code: 'export default {}', filename: 'test.ts' },
|
|
||||||
{ code: 'export = {}', filename: 'test.js' },
|
|
||||||
]
|
|
||||||
|
|
||||||
const invalids = [
|
|
||||||
{ code: 'export = {}', filename: 'test.ts' },
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
...i,
|
|
||||||
errors: [{ messageId: 'noTsExportEqual' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,35 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'no-ts-export-equal'
|
|
||||||
export type MessageIds = 'noTsExportEqual'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Do not use `exports =`',
|
|
||||||
recommended: 'recommended',
|
|
||||||
},
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
noTsExportEqual: 'Use ESM `export default` instead',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
const extension = context.getFilename().split('.').pop()
|
|
||||||
if (!['ts', 'tsx', 'mts', 'cts'].includes(extension))
|
|
||||||
return {}
|
|
||||||
|
|
||||||
return {
|
|
||||||
TSExportAssignment(node) {
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
messageId: 'noTsExportEqual',
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,25 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './prefer-inline-type-import'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'import { type Foo } from \'foo\'',
|
|
||||||
'import type Foo from \'foo\'',
|
|
||||||
'import type * as Foo from \'foo\'',
|
|
||||||
'import type {} from \'foo\'',
|
|
||||||
]
|
|
||||||
const invalids = [
|
|
||||||
['import type { Foo } from \'foo\'', 'import { type Foo } from \'foo\''],
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i[0],
|
|
||||||
output: i[1].trim(),
|
|
||||||
errors: [{ messageId: 'preferInlineTypeImport' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,63 +0,0 @@
|
|||||||
// Ported from https://github.com/gajus/eslint-plugin-canonical/blob/master/src/rules/preferInlineTypeImport.js
|
|
||||||
// by Gajus Kuizinas https://github.com/gajus
|
|
||||||
import type { TSESTree } from '@typescript-eslint/utils'
|
|
||||||
import type { RuleFixer, SourceCode } from '@typescript-eslint/utils/ts-eslint'
|
|
||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'prefer-inline-type-import'
|
|
||||||
export type MessageIds = 'preferInlineTypeImport'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'suggestion',
|
|
||||||
docs: {
|
|
||||||
description: 'Inline type import',
|
|
||||||
},
|
|
||||||
fixable: 'code',
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
preferInlineTypeImport: 'Prefer inline type import',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
const sourceCode = context.getSourceCode()
|
|
||||||
return {
|
|
||||||
ImportDeclaration: (node) => {
|
|
||||||
// ignore bare type imports
|
|
||||||
if (node.specifiers.length === 1 && ['ImportNamespaceSpecifier', 'ImportDefaultSpecifier'].includes(node.specifiers[0].type))
|
|
||||||
return
|
|
||||||
if (node.importKind === 'type' && node.specifiers.length > 0) {
|
|
||||||
context.report({
|
|
||||||
*fix(fixer) {
|
|
||||||
yield * removeTypeSpecifier(fixer, sourceCode, node)
|
|
||||||
|
|
||||||
for (const specifier of node.specifiers)
|
|
||||||
yield fixer.insertTextBefore(specifier, 'type ')
|
|
||||||
},
|
|
||||||
loc: node.loc,
|
|
||||||
messageId: 'preferInlineTypeImport',
|
|
||||||
node,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
function * removeTypeSpecifier(fixer: RuleFixer, sourceCode: Readonly<SourceCode>, node: TSESTree.ImportDeclaration) {
|
|
||||||
const importKeyword = sourceCode.getFirstToken(node)
|
|
||||||
|
|
||||||
const typeIdentifier = sourceCode.getTokenAfter(importKeyword)
|
|
||||||
|
|
||||||
yield fixer.remove(typeIdentifier)
|
|
||||||
|
|
||||||
if (importKeyword.loc.end.column + 1 === typeIdentifier.loc.start.column) {
|
|
||||||
yield fixer.removeRange([
|
|
||||||
importKeyword.range[1],
|
|
||||||
importKeyword.range[1] + 1,
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
import { RuleTester } from '@typescript-eslint/rule-tester'
|
|
||||||
import rule, { RULE_NAME } from './top-level-function'
|
|
||||||
|
|
||||||
const valids = [
|
|
||||||
'function foo() {}',
|
|
||||||
// allow arrow function inside function
|
|
||||||
'function foo() { const bar = () => {} }',
|
|
||||||
// allow arrow function when type is specified
|
|
||||||
'const Foo: Bar = () => {}',
|
|
||||||
// allow let/var
|
|
||||||
'let foo = () => {}',
|
|
||||||
// allow arrow function in as
|
|
||||||
'const foo = (() => {}) as any',
|
|
||||||
// allow iife
|
|
||||||
';(() => {})()',
|
|
||||||
// allow export default
|
|
||||||
'export default () => {}',
|
|
||||||
'export default defineConfig(() => {})',
|
|
||||||
// allow one-line arrow function
|
|
||||||
'const foo = (x, y) => x + y',
|
|
||||||
'const foo = async (x, y) => x + y',
|
|
||||||
'const foo = () => String(123)',
|
|
||||||
'const foo = () => ({})',
|
|
||||||
]
|
|
||||||
|
|
||||||
const invalids = [
|
|
||||||
[
|
|
||||||
'const foo = (x, y) => \nx + y',
|
|
||||||
'function foo (x, y) {\n return x + y\n}',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'const foo = (as: string, bar: number) => { return as + bar }',
|
|
||||||
'function foo (as: string, bar: number) { return as + bar }',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'const foo = <K, T extends Boolean>(as: string, bar: number): Omit<T, K> => \nas + bar',
|
|
||||||
'function foo <K, T extends Boolean>(as: string, bar: number): Omit<T, K> {\n return as + bar\n}',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'export const foo = () => {}',
|
|
||||||
'export function foo () {}',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'export const foo = () => \n({})',
|
|
||||||
'export function foo () {\n return {}\n}',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'export const foo = async () => \n({})',
|
|
||||||
'export async function foo () {\n return {}\n}',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
const ruleTester: RuleTester = new RuleTester({
|
|
||||||
parser: require.resolve('@typescript-eslint/parser'),
|
|
||||||
})
|
|
||||||
|
|
||||||
ruleTester.run(RULE_NAME, rule as any, {
|
|
||||||
valid: valids,
|
|
||||||
invalid: invalids.map(i => ({
|
|
||||||
code: i[0],
|
|
||||||
output: i[1],
|
|
||||||
errors: [{ messageId: 'topLevelFunctionDeclaration' }],
|
|
||||||
})),
|
|
||||||
})
|
|
@ -1,88 +0,0 @@
|
|||||||
import { createEslintRule } from '../utils'
|
|
||||||
|
|
||||||
export const RULE_NAME = 'top-level-function'
|
|
||||||
export type MessageIds = 'topLevelFunctionDeclaration'
|
|
||||||
export type Options = []
|
|
||||||
|
|
||||||
export default createEslintRule<Options, MessageIds>({
|
|
||||||
name: RULE_NAME,
|
|
||||||
meta: {
|
|
||||||
type: 'problem',
|
|
||||||
docs: {
|
|
||||||
description: 'Enforce top-level functions to be declared with function keyword',
|
|
||||||
recommended: 'stylistic',
|
|
||||||
},
|
|
||||||
fixable: 'code',
|
|
||||||
schema: [],
|
|
||||||
messages: {
|
|
||||||
topLevelFunctionDeclaration: 'Top-level functions should be declared with function keyword',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultOptions: [],
|
|
||||||
create: (context) => {
|
|
||||||
return {
|
|
||||||
VariableDeclaration(node) {
|
|
||||||
if (node.parent.type !== 'Program' && node.parent.type !== 'ExportNamedDeclaration')
|
|
||||||
return
|
|
||||||
|
|
||||||
if (node.declarations.length !== 1)
|
|
||||||
return
|
|
||||||
if (node.kind !== 'const')
|
|
||||||
return
|
|
||||||
if (node.declare)
|
|
||||||
return
|
|
||||||
|
|
||||||
const declaration = node.declarations[0]
|
|
||||||
|
|
||||||
if (declaration.init?.type !== 'ArrowFunctionExpression')
|
|
||||||
return
|
|
||||||
if (declaration.id?.type !== 'Identifier')
|
|
||||||
return
|
|
||||||
if (declaration.id.typeAnnotation)
|
|
||||||
return
|
|
||||||
if (
|
|
||||||
declaration.init.body.type !== 'BlockStatement'
|
|
||||||
&& declaration.id?.loc.start.line === declaration.init?.body.loc.end.line
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
const arrowFn = declaration.init
|
|
||||||
const body = declaration.init.body
|
|
||||||
const id = declaration.id
|
|
||||||
|
|
||||||
context.report({
|
|
||||||
node,
|
|
||||||
loc: {
|
|
||||||
start: id.loc.start,
|
|
||||||
end: body.loc.start,
|
|
||||||
},
|
|
||||||
messageId: 'topLevelFunctionDeclaration',
|
|
||||||
fix(fixer) {
|
|
||||||
const code = context.getSourceCode().text
|
|
||||||
const textName = code.slice(id.range[0], id.range[1])
|
|
||||||
const textArgs = arrowFn.params.length
|
|
||||||
? code.slice(arrowFn.params[0].range[0], arrowFn.params[arrowFn.params.length - 1].range[1])
|
|
||||||
: ''
|
|
||||||
const textBody = body.type === 'BlockStatement'
|
|
||||||
? code.slice(body.range[0], body.range[1])
|
|
||||||
: `{\n return ${code.slice(body.range[0], body.range[1])}\n}`
|
|
||||||
const textGeneric = arrowFn.typeParameters
|
|
||||||
? code.slice(arrowFn.typeParameters.range[0], arrowFn.typeParameters.range[1])
|
|
||||||
: ''
|
|
||||||
const textTypeReturn = arrowFn.returnType
|
|
||||||
? code.slice(arrowFn.returnType.range[0], arrowFn.returnType.range[1])
|
|
||||||
: ''
|
|
||||||
const textAsync = arrowFn.async ? 'async ' : ''
|
|
||||||
|
|
||||||
const final = `${textAsync}function ${textName} ${textGeneric}(${textArgs})${textTypeReturn} ${textBody}`
|
|
||||||
// console.log({
|
|
||||||
// input: code.slice(node.range[0], node.range[1]),
|
|
||||||
// output: final,
|
|
||||||
// })
|
|
||||||
return fixer.replaceTextRange([node.range[0], node.range[1]], final)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,5 +0,0 @@
|
|||||||
import { ESLintUtils } from '@typescript-eslint/utils'
|
|
||||||
|
|
||||||
export const createEslintRule = ESLintUtils.RuleCreator(
|
|
||||||
ruleName => ruleName,
|
|
||||||
)
|
|
@ -1,7 +0,0 @@
|
|||||||
import { defineConfig } from 'vitest/config'
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
test: {
|
|
||||||
globals: true,
|
|
||||||
},
|
|
||||||
})
|
|
51
packages/react/CHANGELOG.md
Normal file
51
packages/react/CHANGELOG.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.4.1](https://github.com/antfu/eslint-config/compare/v0.4.0...v0.4.1) (2020-10-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-react
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.4](https://github.com/antfu/eslint-config/compare/v0.3.3...v0.3.4) (2020-10-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-react
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.3](https://github.com/antfu/eslint-config/compare/v0.3.2...v0.3.3) (2020-08-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-react
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.2](https://github.com/antfu/eslint-config/compare/v0.3.1...v0.3.2) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-react
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.1](https://github.com/antfu/eslint-config/compare/v0.3.0...v0.3.1) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-react
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.3.0](https://github.com/antfu/eslint-config/compare/v0.2.14...v0.3.0) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add react and all ([a7fbdca](https://github.com/antfu/eslint-config/commit/a7fbdcad4b20294e26e817fae468f468376e49cf))
|
@ -1,19 +1,12 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
extends: [
|
extends: [
|
||||||
'plugin:react/recommended',
|
'plugin:react/recommended',
|
||||||
'plugin:react-hooks/recommended',
|
|
||||||
'@antfu/eslint-config-ts',
|
'@antfu/eslint-config-ts',
|
||||||
],
|
],
|
||||||
settings: {
|
|
||||||
react: {
|
|
||||||
version: '17.0',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
rules: {
|
rules: {
|
||||||
'jsx-quotes': [
|
'jsx-quotes': [
|
||||||
'error',
|
'error',
|
||||||
'prefer-double',
|
'prefer-double',
|
||||||
],
|
],
|
||||||
'react/react-in-jsx-scope': 'off',
|
|
||||||
},
|
},
|
||||||
}
|
}
|
@ -1,31 +1,30 @@
|
|||||||
{
|
{
|
||||||
"name": "@antfu/eslint-config-react",
|
"name": "@antfu/eslint-config-react",
|
||||||
"version": "0.40.11",
|
"version": "0.4.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"keywords": [],
|
||||||
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"homepage": "https://git.taoya.art/taolin/eslint-config.git",
|
|
||||||
"keywords": [
|
|
||||||
"eslint-config"
|
|
||||||
],
|
|
||||||
"main": "index.js",
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint . --config=index.js"
|
"lint": "eslint . --config=index.js"
|
||||||
},
|
},
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": ">=7.4.0"
|
"eslint": ">=7.4.0"
|
||||||
},
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antfu/eslint-config-ts": "workspace:*",
|
"@antfu/eslint-config-ts": "^0.4.1",
|
||||||
"eslint-plugin-react": "^7.33.1",
|
"eslint-plugin-react": "^7.21.5"
|
||||||
"eslint-plugin-react-hooks": "^4.6.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.46.0",
|
"eslint": "^7.11.0",
|
||||||
"react": "^18.2.0",
|
"react": "^16.14.0",
|
||||||
"typescript": "^5.1.6"
|
"typescript": "^4.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
216
packages/typescript/CHANGELOG.md
Normal file
216
packages/typescript/CHANGELOG.md
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.4.1](https://github.com/antfu/eslint-config/compare/v0.4.0...v0.4.1) (2020-10-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-ts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.4](https://github.com/antfu/eslint-config/compare/v0.3.3...v0.3.4) (2020-10-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-ts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.3](https://github.com/antfu/eslint-config/compare/v0.3.2...v0.3.3) (2020-08-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-ts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.2](https://github.com/antfu/eslint-config/compare/v0.3.1...v0.3.2) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-ts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.1](https://github.com/antfu/eslint-config/compare/v0.3.0...v0.3.1) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* ref ([e53f3ec](https://github.com/antfu/eslint-config/commit/e53f3ec8dbc1cc3e32d57c08604b2b1d51661ca4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.3.0](https://github.com/antfu/eslint-config/compare/v0.2.14...v0.3.0) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([f82ee6f](https://github.com/antfu/eslint-config/commit/f82ee6fce9153f098c8fbbeef17f88261e08176f))
|
||||||
|
* **deps:** update all non-major dependencies ([2243bf6](https://github.com/antfu/eslint-config/commit/2243bf67fac0f75c1a4e35c604f49ebb2092d960))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.7.0 ([3a6b4ea](https://github.com/antfu/eslint-config/commit/3a6b4ea59ec8b9a4d75452ae1f6fd2c51d96b242))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add react and all ([a7fbdca](https://github.com/antfu/eslint-config/commit/a7fbdcad4b20294e26e817fae468f468376e49cf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.14](https://github.com/antfu/eslint-config/compare/v0.2.13...v0.2.14) (2020-07-18)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-ts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.13](https://github.com/antfu/eslint-config/compare/v0.2.12...v0.2.13) (2020-06-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.1.0 ([494d99c](https://github.com/antfu/eslint-config/commit/494d99c2bb52895a055cea7be9b50494a6a67358))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.12](https://github.com/antfu/eslint-config/compare/v0.2.11...v0.2.12) (2020-06-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([ae3acb4](https://github.com/antfu/eslint-config/commit/ae3acb40f34fa117bb0afe6f9959daa5c0f9a197))
|
||||||
|
* **deps:** update all non-major dependencies ([367c663](https://github.com/antfu/eslint-config/commit/367c663eb0eca976b2e932d5666b0e47f751a03c))
|
||||||
|
* **deps:** update all non-major dependencies ([d938b1d](https://github.com/antfu/eslint-config/commit/d938b1d714e429f4dd4cce56b8b2c4cdee0de242))
|
||||||
|
* **deps:** update all non-major dependencies ([8bda49a](https://github.com/antfu/eslint-config/commit/8bda49afb37d50c647995354cec4d11589eeef8f))
|
||||||
|
* **deps:** update all non-major dependencies ([cd48d47](https://github.com/antfu/eslint-config/commit/cd48d476bfe63623b66d9d5107b794f3b2e73129))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.21.0 ([ae238f2](https://github.com/antfu/eslint-config/commit/ae238f275c17c8959274da007b60cae2f029b7d0))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.23.0 ([ae8dee6](https://github.com/antfu/eslint-config/commit/ae8dee603589f80410cb19a009a4f50a7daf5472))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.25.0 ([da8bfed](https://github.com/antfu/eslint-config/commit/da8bfed5c582940ebef807cc396a4c28de7135dd))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.26.0 ([9c66671](https://github.com/antfu/eslint-config/commit/9c666715c2eef912e343649875441a564486d5ec))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.27.0 ([dc00c77](https://github.com/antfu/eslint-config/commit/dc00c77075c87f8e49b39b32d44ca4fde0590731))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.28.0 ([e42c576](https://github.com/antfu/eslint-config/commit/e42c5767f6f9a9013286354ee238977b36bbbee2))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.29.0 ([5e65853](https://github.com/antfu/eslint-config/commit/5e6585335d4f7b88355a7430911c9712bcd20115))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.30.0 ([cabb099](https://github.com/antfu/eslint-config/commit/cabb0999cd95d63fd35b50a0073c324f54a621e5))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.31.0 ([2fb8855](https://github.com/antfu/eslint-config/commit/2fb885521b80ba72511b1005ad919ed148c99428))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.33.0 ([d857537](https://github.com/antfu/eslint-config/commit/d8575375f6505bfee4165dc33b1cd924b63fb15e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v3.0.2 ([214c0be](https://github.com/antfu/eslint-config/commit/214c0be0292d8b95d57d1fe0272ee7af7a130b78))
|
||||||
|
* **deps:** update typescript-eslint monorepo to v3 ([ebb1820](https://github.com/antfu/eslint-config/commit/ebb18209d5c8417da41be7ca8b2b8658bd4ba1a5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.11](https://github.com/antfu/eslint-config/compare/v0.2.10...v0.2.11) (2020-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([faa9b11](https://github.com/antfu/eslint-config/commit/faa9b11d52d5d34a4c89917bb6b1aeaa8f7bbdb2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.10](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.10) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.9](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.9) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.8](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.8) (2019-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.1.0 ([99a5c38](https://github.com/antfu/eslint-config/commit/99a5c38))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.3.1 ([8c12e7e](https://github.com/antfu/eslint-config/commit/8c12e7e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.5.0 ([#11](https://github.com/antfu/eslint-config/issues/11)) ([d5341a2](https://github.com/antfu/eslint-config/commit/d5341a2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.7](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.7) (2019-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.1.0 ([99a5c38](https://github.com/antfu/eslint-config/commit/99a5c38))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.3.1 ([8c12e7e](https://github.com/antfu/eslint-config/commit/8c12e7e))
|
||||||
|
* **deps:** update dependency @typescript-eslint/eslint-plugin to v2.5.0 ([#11](https://github.com/antfu/eslint-config/issues/11)) ([d5341a2](https://github.com/antfu/eslint-config/commit/d5341a2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.6](https://github.com/antfu/eslint-config/compare/v0.2.5...v0.2.6) (2019-08-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update typescript-eslint monorepo to v2 ([1f4250e](https://github.com/antfu/eslint-config/commit/1f4250e))
|
||||||
|
* update ts config ([0a2b8cd](https://github.com/antfu/eslint-config/commit/0a2b8cd))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.2](https://github.com/antfu/eslint-config/compare/v0.2.1...v0.2.2) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* update ts rules ([5d507f1](https://github.com/antfu/eslint-config/commit/5d507f1))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.1](https://github.com/antfu/eslint-config/compare/v0.2.0...v0.2.1) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* extends order ([0b40222](https://github.com/antfu/eslint-config/commit/0b40222))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.2.0](https://github.com/antfu/eslint-config/compare/v0.1.5...v0.2.0) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add ts config ([b025b09](https://github.com/antfu/eslint-config/commit/b025b09))
|
38
packages/typescript/index.js
Normal file
38
packages/typescript/index.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
'@typescript-eslint',
|
||||||
|
],
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
extends: [
|
||||||
|
'@antfu/eslint-config-basic',
|
||||||
|
'plugin:@typescript-eslint/recommended',
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
// TS
|
||||||
|
'no-useless-constructor': 'off',
|
||||||
|
'@typescript-eslint/semi': ['error', 'never'],
|
||||||
|
'@typescript-eslint/indent': ['error', 2],
|
||||||
|
'@typescript-eslint/member-delimiter-style': ['error', { multiline: { delimiter: 'none' } }],
|
||||||
|
'@typescript-eslint/type-annotation-spacing': ['error', {}],
|
||||||
|
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'@typescript-eslint/no-unused-vars': [2, { args: 'none', ignoreRestSiblings: true }],
|
||||||
|
'no-redeclare': 'off',
|
||||||
|
'@typescript-eslint/no-redeclare': 'error',
|
||||||
|
|
||||||
|
|
||||||
|
// off
|
||||||
|
'@typescript-eslint/camelcase': 'off',
|
||||||
|
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||||
|
'@typescript-eslint/explicit-member-accessibility': 'off',
|
||||||
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
'@typescript-eslint/no-parameter-properties': 'off',
|
||||||
|
'@typescript-eslint/no-empty-interface': 'off',
|
||||||
|
'@typescript-eslint/ban-ts-ignore': 'off',
|
||||||
|
'@typescript-eslint/no-empty-function': 'off',
|
||||||
|
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||||
|
'@typescript-eslint/ban-ts-comment': 'off',
|
||||||
|
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||||
|
'@typescript-eslint/ban-types': 'off',
|
||||||
|
},
|
||||||
|
}
|
@ -1,28 +1,27 @@
|
|||||||
{
|
{
|
||||||
"name": "@antfu/eslint-config-ts",
|
"name": "@antfu/eslint-config-ts",
|
||||||
"version": "0.40.11",
|
"version": "0.4.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"keywords": [],
|
||||||
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"homepage": "https://git.taoya.art/taolin/eslint-config.git",
|
|
||||||
"keywords": [
|
|
||||||
"eslint-config"
|
|
||||||
],
|
|
||||||
"main": "index.js",
|
|
||||||
"files": [
|
"files": [
|
||||||
"index.js"
|
"index.js"
|
||||||
],
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": ">=7.4.0",
|
"eslint": ">=7.4.0",
|
||||||
"typescript": ">=3.9"
|
"typescript": ">=3.9"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antfu/eslint-config-basic": "workspace:*",
|
"@antfu/eslint-config-basic": "^0.4.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.2.1",
|
"@typescript-eslint/eslint-plugin": "^4.5.0",
|
||||||
"@typescript-eslint/parser": "^6.2.1",
|
"@typescript-eslint/parser": "^4.5.0"
|
||||||
"eslint-plugin-jest": "^27.2.3"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.46.0"
|
"eslint": "^7.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
209
packages/vue/CHANGELOG.md
Normal file
209
packages/vue/CHANGELOG.md
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.4.1](https://github.com/antfu/eslint-config/compare/v0.4.0...v0.4.1) (2020-10-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.4](https://github.com/antfu/eslint-config/compare/v0.3.3...v0.3.4) (2020-10-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.3](https://github.com/antfu/eslint-config/compare/v0.3.2...v0.3.3) (2020-08-21)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.2](https://github.com/antfu/eslint-config/compare/v0.3.1...v0.3.2) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.3.1](https://github.com/antfu/eslint-config/compare/v0.3.0...v0.3.1) (2020-08-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.3.0](https://github.com/antfu/eslint-config/compare/v0.2.14...v0.3.0) (2020-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([f82ee6f](https://github.com/antfu/eslint-config/commit/f82ee6fce9153f098c8fbbeef17f88261e08176f))
|
||||||
|
* **deps:** update all non-major dependencies ([2243bf6](https://github.com/antfu/eslint-config/commit/2243bf67fac0f75c1a4e35c604f49ebb2092d960))
|
||||||
|
* **deps:** update dependency eslint-plugin-vue to v7.0.0-beta.0 ([e0b59f2](https://github.com/antfu/eslint-config/commit/e0b59f271fa3c679e5c4a7d61b5af79cef37721f))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add react and all ([a7fbdca](https://github.com/antfu/eslint-config/commit/a7fbdcad4b20294e26e817fae468f468376e49cf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.14](https://github.com/antfu/eslint-config/compare/v0.2.13...v0.2.14) (2020-07-18)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.13](https://github.com/antfu/eslint-config/compare/v0.2.12...v0.2.13) (2020-06-09)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.12](https://github.com/antfu/eslint-config/compare/v0.2.11...v0.2.12) (2020-06-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([ae3acb4](https://github.com/antfu/eslint-config/commit/ae3acb40f34fa117bb0afe6f9959daa5c0f9a197))
|
||||||
|
* **deps:** update all non-major dependencies ([367c663](https://github.com/antfu/eslint-config/commit/367c663eb0eca976b2e932d5666b0e47f751a03c))
|
||||||
|
* **deps:** update all non-major dependencies ([d938b1d](https://github.com/antfu/eslint-config/commit/d938b1d714e429f4dd4cce56b8b2c4cdee0de242))
|
||||||
|
* **deps:** update all non-major dependencies ([8bda49a](https://github.com/antfu/eslint-config/commit/8bda49afb37d50c647995354cec4d11589eeef8f))
|
||||||
|
* **deps:** update all non-major dependencies ([cd48d47](https://github.com/antfu/eslint-config/commit/cd48d476bfe63623b66d9d5107b794f3b2e73129))
|
||||||
|
* **deps:** update dependency eslint-plugin-nuxt to v1 ([f5d6ebd](https://github.com/antfu/eslint-config/commit/f5d6ebda7cfa17ad8992e1ccc4fd9be020711375))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.11](https://github.com/antfu/eslint-config/compare/v0.2.10...v0.2.11) (2020-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([faa9b11](https://github.com/antfu/eslint-config/commit/faa9b11d52d5d34a4c89917bb6b1aeaa8f7bbdb2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.10](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.10) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
* **deps:** update dependency eslint-plugin-vue to v6 ([#13](https://github.com/antfu/eslint-config/issues/13)) ([5d0daca](https://github.com/antfu/eslint-config/commit/5d0dacae0af218e30868fcfb7b60afd6dbeda45b))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.9](https://github.com/antfu/eslint-config/compare/v0.2.8...v0.2.9) (2019-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([#12](https://github.com/antfu/eslint-config/issues/12)) ([e09cd41](https://github.com/antfu/eslint-config/commit/e09cd415f12fa1afe18430c50f6b72189700aa8c))
|
||||||
|
* **deps:** update all non-major dependencies ([#14](https://github.com/antfu/eslint-config/issues/14)) ([0583881](https://github.com/antfu/eslint-config/commit/05838817541d500e3aab0e215f879c1c7ceb7ced))
|
||||||
|
* **deps:** update dependency eslint-plugin-vue to v6 ([#13](https://github.com/antfu/eslint-config/issues/13)) ([5d0daca](https://github.com/antfu/eslint-config/commit/5d0dacae0af218e30868fcfb7b60afd6dbeda45b))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.8](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.8) (2019-10-29)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.7](https://github.com/antfu/eslint-config/compare/v0.2.6...v0.2.7) (2019-10-29)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.6](https://github.com/antfu/eslint-config/compare/v0.2.5...v0.2.6) (2019-08-22)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @antfu/eslint-config-vue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.5](https://github.com/antfu/eslint-config/compare/v0.2.4...v0.2.5) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* vue ([be4d232](https://github.com/antfu/eslint-config/commit/be4d232))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.4](https://github.com/antfu/eslint-config/compare/v0.2.3...v0.2.4) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* vue deps ([03b3d7a](https://github.com/antfu/eslint-config/commit/03b3d7a))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.3](https://github.com/antfu/eslint-config/compare/v0.2.2...v0.2.3) (2019-07-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* update vue config ([cbf7bca](https://github.com/antfu/eslint-config/commit/cbf7bca))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.1](https://github.com/antfu/eslint-config/compare/v0.2.0...v0.2.1) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* extends order ([0b40222](https://github.com/antfu/eslint-config/commit/0b40222))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.2.0](https://github.com/antfu/eslint-config/compare/v0.1.5...v0.2.0) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add ts config ([b025b09](https://github.com/antfu/eslint-config/commit/b025b09))
|
16
packages/vue/index.js
Normal file
16
packages/vue/index.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
module.exports = {
|
||||||
|
parser: 'vue-eslint-parser',
|
||||||
|
parserOptions: {
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'plugin:vue/vue3-recommended',
|
||||||
|
'@antfu/eslint-config-ts',
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
'vue',
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
'vue/max-attributes-per-line': ['warn', { singleline: 5 }],
|
||||||
|
},
|
||||||
|
}
|
@ -1,26 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "@antfu/eslint-config-vue",
|
"name": "@antfu/eslint-config-vue",
|
||||||
"version": "0.40.11",
|
"version": "0.4.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"keywords": [],
|
||||||
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
"author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"keywords": [
|
|
||||||
"eslint-config"
|
|
||||||
],
|
|
||||||
"main": "index.js",
|
|
||||||
"files": [
|
"files": [
|
||||||
"index.js"
|
"index.js"
|
||||||
],
|
],
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": ">=7.4.0"
|
"eslint": ">=7.4.0"
|
||||||
},
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antfu/eslint-config-basic": "workspace:*",
|
"@antfu/eslint-config-ts": "^0.4.1",
|
||||||
"@antfu/eslint-config-ts": "workspace:*",
|
"eslint-plugin-vue": "7.1.0"
|
||||||
"eslint-plugin-vue": "^9.16.1",
|
|
||||||
"local-pkg": "^0.4.3"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.46.0"
|
"eslint": "^7.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
9686
pnpm-lock.yaml
9686
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"baseUrl": ".",
|
|
||||||
"target": "es2020",
|
|
||||||
"module": "es2020",
|
|
||||||
"moduleResolution": "Bundler",
|
|
||||||
"esModuleInterop": true
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"./packages/**/*.ts"
|
|
||||||
],
|
|
||||||
"exclude": [
|
|
||||||
"./fixtures/**/*.*"
|
|
||||||
]
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user