Skip to content

Commit

Permalink
chore: Re-structure the repository as monorepo (#363)
Browse files Browse the repository at this point in the history
* docs: update contributing guide

* ci: update github action code

* introduce pnpm

introduce pnpm

* update pretteir configuration

* implement release-config workspace

* move eslint-config into pnpm-workspace

* fix dependency packages
  • Loading branch information
wakamsha authored Feb 10, 2025
1 parent fbff583 commit a06a1bb
Show file tree
Hide file tree
Showing 91 changed files with 7,481 additions and 14,546 deletions.
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

0 comments on commit a06a1bb

Please sign in to comment.