Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Re-structure the repository as monorepo #363

Merged
merged 7 commits into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,22 @@ I appreciate your considering contributing `eslint-config-moneyforward`. This do
1. Fork this repository and clone it locally

```bash
git clone https://github.com/your-username/eslint-config-moneyforward.git
git clone https://github.com/your-username/frontend-tools.git
```

2. Move to the directory and install dependencies

```bash
cd eslint-config-moneyforward
npm install
cd frontend-tools
pnpm install
```

### Development

The main scripts used during development are:

- `npm run lint`: Runs lint on your code.
- `npm run test`: Runs unit tests.
- `pnpm lint`: Runs lint on your code.
- `pnpm test`: Runs unit tests.

## How to Contribute

Expand Down
8 changes: 6 additions & 2 deletions .github/actions/restore-node/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@ runs:
with:
node-version-file: ./.node-version

- name: Setup pnpm
uses: pnpm/action-setup@v4.0.0

- name: cache node_modules
uses: actions/cache@v4
with:
path: |
./node_modules
key: node-${{ hashFiles('package-lock.json') }}
./packages/*/node_modules
key: node-${{ hashFiles('**/pnpm-lock.yaml') }}

- name: install node_modules
shell: bash
run: npm install
run: pnpm install --frozen-lockfile
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
uses: ./.github/actions/restore-node

- name: Release
run: npm run release ${{ github.event.inputs.dry_run == 'true' && '-- --dry-run' || '' }}
run: pnpm -r --workspace-concurrency=1 release ${{ github.event.inputs.dry_run == 'true' && '--dry-run' || '' }}
env:
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
uses: ./.github/actions/restore-node

- name: Run Lint
run: npm run lint
run: pnpm -r lint

- name: Run Test
run: npm run test
run: pnpm -r test
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
access=public
engine-strict=true
1 change: 1 addition & 0 deletions .nvmrc
3 changes: 2 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
CHANGELOG.md
**/CHANGELOG.md
**/*.snap
7 changes: 0 additions & 7 deletions .prettierrc.js

This file was deleted.

188 changes: 2 additions & 186 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,187 +1,3 @@
# eslint-config-moneyforward
# frontend-tools

[![Version](https://img.shields.io/npm/v/eslint-config-moneyforward.svg?style=flat-square)](https://www.npmjs.com/package/eslint-config-moneyforward?activeTab=versions)
[![License](https://img.shields.io/github/license/moneyforward/eslint-config-moneyforward.svg?style=flat-square)](https://github.com/moneyforward/eslint-config-moneyforward/blob/main/LICENSE)

This package provides moneyforward's `.eslintrc` as an extensible shared config.

## Usage

### 1. Install dependencies (and peer dependencies)

```bash
npm install --save-dev eslint-config-moneyforward eslint
```

### 2. Configure ESLint

#### 2a. for Flat Config

Within your ESLint config file (`eslint.config.js`):

```js
import { essentials } from 'eslint-config-moneyforward/flat';

export default [...essentials];
```

If you need TypeScript Support:

```diff
-import { essentials } from 'eslint-config-moneyforward/flat';
+import { essentials, typescript } from 'eslint-config-moneyforward/flat';

export default [
...essentials,
+ ...typescript,
];
```

Must be added after `essentials`.

We also provide various other rule sets that you can configure to suit your project.

```js
import {
essentials,
jsdoc,
next,
node,
react,
storybook,
test,
typescript,
} from 'eslint-config-moneyforward/flat';

export default [
...essentials,
...jsdoc,
...next,
...node,
...react,
...storybook,
...test.react,
...typescript,
];
```

#### 2b. for eslintrc format

Within your ESLint config file:

```json
{
"extends": ["moneyforward/essentials"]
}
```

If you need React Support:

```diff
{
"extends": [
"moneyforward/essentials",
+ "moneyforward/react",
]
}
```

Must be added after `essentials`.

We also provide various other rule sets that you can configure to suit your project.

```json
{
"extends": [
"moneyforward/essentials",
"moneyforward/jsdoc",
"moneyforward/next",
"moneyforward/node",
"moneyforward/react",
"moneyforward/storybook",
"moneyforward/test/react",
"moneyforward/typescript"
]
}
```

| Rule set | Summary | Dependencies |
| -----------: | :---------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `essentials` | Contains basic, import, and promise recommended rules | [`eslint`](https://eslint.org/) <br> [`eslint-plugin-promise`](https://github.com/eslint-community/eslint-plugin-promise) <br> [`eslint-plugin-import`](https://github.com/import-js/eslint-plugin-import) <br> [`eslint-plugin-unicorn`](https://github.com/sindresorhus/eslint-plugin-unicorn) |
| `jsdoc` | Contains JSDoc recommended rules | [`eslint-plugin-jsdoc`](https://github.com/gajus/eslint-plugin-jsdoc) |
| `next` | Contains Next.js recommended rules | [`@next/eslint-plugin-next`](https://github.com/vercel/next.js/tree/canary/packages/eslint-plugin-next) |
| `node` | Contains Node.js recommended rules | [`eslint-plugin-n`](https://github.com/eslint-community/eslint-plugin-n) |
| `react` | Contains React recommended rules | [`eslint-plugin-jsx-a11y`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) <br> [`eslint-plugin-react-hooks`](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks) <br> [`eslint-plugin-react`](https://github.com/jsx-eslint/eslint-plugin-react) |
| `storybook` | Contains Storybook recommended rules | [`eslint-plugin-storybook`](https://github.com/storybookjs/eslint-plugin-storybook) |
| `test/react` | Contains Jest and React Testing Library rules | [`eslint-plugin-jest`](https://github.com/jest-community/eslint-plugin-jest) <br> [`eslint-plugin-jest-dom`](https://github.com/testing-library/eslint-plugin-jest-dom) <br> [`eslint-plugin-testing-library`](https://github.com/testing-library/eslint-plugin-testing-library) |
| `typescript` | Contains TypeScript recommended rules | [`@eslint-typescript/eslint-plugin`](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/eslint-plugin) <br> [`@eslint-typescript/parser`](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser) |

## Using Prettier

If you use [Prettier](https://prettier.io/) to format your code, you must disable any rules in `moneyforward/essentials` that conflict with Prettier.

### 1. Install dependencies

```bash
npm install --save-dev eslint-config-prettier
```

### 2. Configure ESLint

Within your ESLint config file:

```diff
// eslint.config.js

import { essentials, react } from 'eslint-config-moneyforward/flat';
+import prettier from 'eslint-config-prettier';

export default [
...essentials,
...react,
+ prettier,
],
```

```diff
// .eslintrc.js

{
"extends": [
"moneyforward/essentials",
"moneyforward/react",
+ "prettier"
]
}
```

By adding the `prettier` configuration to `extends` in the ESLint configuration, you can disable all rules in `...essentials` (or `moneyforward/essentials`) that conflict with Prettier.

## Migrate from an existing configuration

eslint-config-moneyforward contains various plugins related to different rule sets. Therefore, users don't need to install them separately. If you have installed them in your existing configuration, we recommend uninstalling them.

```bash
npm uninstall eslint-plugin-promise eslint-plugin-import eslint-plugin-unicorn \
eslint-plugin-jsdoc \
@next/eslint-plugin-next \
eslint-plugin-n \
eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks \
eslint-plugin-storybook \
eslint-plugin-jest eslint-plugin-testing-library \
@eslint-typescript/eslint-plugin @eslint-typescript/parser
```

## Versioning

- Increment major version: Changed **error** rules.
- Increment minor version: Changed **warn** rules.
- Increment patch version: Not changed **error** and **warn** rules.

## Troubleshooting

- [ESLint Configuration Issue with Non-Standard TSConfig Filenames in Flat Config](https://github.com/moneyforward/eslint-config-moneyforward/blob/main/docs/troubleshooting/eslint-configuration-issue-with-non-standard-tsconfig-filenames-in-flat-config.md)

## License

Open source [licensed as MIT](https://github.com/moneyforward/eslint-config-moneyforward/blob/main/LICENSE).
Money Forward's frontend tools as an extensible shared config.
Loading