generated from anchan828/nest-lerna-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4 from anchan828/release-first-version
feat: first version
- Loading branch information
Showing
40 changed files
with
10,455 additions
and
26,506 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: Major Release | ||
|
||
on: | ||
workflow_dispatch: | ||
|
||
jobs: | ||
publish: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 | ||
- name: Checkout master | ||
run: git checkout main | ||
- uses: actions/setup-node@v3 | ||
with: | ||
node-version: 20 | ||
cache: npm | ||
- name: Install npm packages | ||
run: npm ci | ||
- name: Build | ||
run: npm run build | ||
- name: Publish monorepo packages | ||
run: | | ||
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc | ||
git config --global user.name 'github-actions[bot]' | ||
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | ||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY | ||
npx lerna publish --yes major |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: Minor Release | ||
|
||
on: | ||
workflow_dispatch: | ||
|
||
jobs: | ||
publish: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 | ||
- name: Checkout master | ||
run: git checkout main | ||
- uses: actions/setup-node@v3 | ||
with: | ||
node-version: 20 | ||
cache: npm | ||
- name: Install npm packages | ||
run: npm ci | ||
- name: Build | ||
run: npm run build | ||
- name: Publish monorepo packages | ||
run: | | ||
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc | ||
git config --global user.name 'github-actions[bot]' | ||
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | ||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY | ||
npx lerna publish --yes minor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
name: Patch Release | ||
|
||
on: | ||
schedule: | ||
- cron: "0 4 * * 0" | ||
branches: | ||
- master | ||
workflow_dispatch: | ||
|
||
jobs: | ||
publish: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 | ||
- name: Checkout master | ||
run: git checkout main | ||
- uses: actions/setup-node@v3 | ||
with: | ||
node-version: 20 | ||
cache: npm | ||
- name: Install npm packages | ||
run: npm ci | ||
- name: Build | ||
run: npm run build | ||
- name: Publish monorepo packages | ||
run: | | ||
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc | ||
git config --global user.name 'github-actions[bot]' | ||
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | ||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY | ||
npx lerna publish --yes patch |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -63,6 +63,3 @@ typings/ | |
dist | ||
.idea | ||
.DS_Store | ||
packages/**/LICENSE | ||
packages/cache-dependency/README.md | ||
.turbo |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,155 @@ | ||
# @anchan828/nest-lerna-template | ||
# @anchan828/nest-kysely | ||
|
||
This repository is template for nestjs with lerna. | ||
![npm](https://img.shields.io/npm/v/@anchan828/nest-kysely.svg) | ||
|
||
This is a [Nest](https://github.com/nestjs/nest) implementation of the redlock algorithm for distributed redis locks. | ||
|
||
This package uses [node-redlock](https://github.com/mike-marcacci/node-redlock). | ||
|
||
## Installation | ||
|
||
```bash | ||
$ npm i --save @anchan828/nest-kysely ioredis | ||
``` | ||
|
||
## Quick Start | ||
|
||
### 1. Import module | ||
|
||
```ts | ||
import { RedlockModule } from "@anchan828/nest-kysely"; | ||
import Redis from "ioredis"; | ||
|
||
@Module({ | ||
imports: [ | ||
RedlockModule.register({ | ||
// See https://github.com/mike-marcacci/node-redlock#configuration | ||
clients: [new Redis({ host: "localhost" })], | ||
settings: { | ||
driftFactor: 0.01, | ||
retryCount: 10, | ||
retryDelay: 200, | ||
retryJitter: 200, | ||
automaticExtensionThreshold: 500, | ||
}, | ||
// Default duratiuon to use with Redlock decorator | ||
duration: 1000, | ||
}), | ||
], | ||
}) | ||
export class AppModule {} | ||
``` | ||
|
||
### 2. Add `Redlock` decorator | ||
|
||
```ts | ||
import { Redlock } from "@anchan828/nest-kysely"; | ||
|
||
@Injectable() | ||
export class ExampleService { | ||
@Redlock("lock-key") | ||
public async addComment(projectId: number, comment: string): Promise<void> {} | ||
} | ||
``` | ||
|
||
This is complete. redlock is working correctly! | ||
See [node-redlock](https://github.com/mike-marcacci/node-redlock) for more information on redlock. | ||
|
||
## Define complex resources (lock keys) | ||
|
||
Using constants causes the same lock key to be used for all calls. Let's reduce the scope a bit more. | ||
|
||
In this example, only certain projects are now locked. | ||
|
||
```ts | ||
import { Redlock } from "@anchan828/nest-kysely"; | ||
|
||
@Injectable() | ||
export class ExampleService { | ||
// The arguments define the class object to which the decorator is being added and the method arguments in order. | ||
@Redlock<ExampleService["addComment"]>( | ||
(target: ExampleService, projectId: number, comment: string) => `projects/${projectId}/comments`, | ||
) | ||
public async addComment(projectId: number, comment: string): Promise<void> {} | ||
} | ||
``` | ||
|
||
Of course, you can lock multiple keys. | ||
|
||
```ts | ||
@Injectable() | ||
export class ExampleService { | ||
@Redlock<ExampleService["updateComments"]>( | ||
(target: ExampleService, projectId: number, args: Array<{ commentId: number; comment: string }>) => | ||
args.map((arg) => `projects/${projectId}/comments/${arg.commentId}`), | ||
) | ||
public async updateComments(projectId: number, args: Array<{ commentId: number; comment: string }>): Promise<void> {} | ||
} | ||
``` | ||
|
||
## Using Redlock service | ||
|
||
If you want to use node-redlock as is, use RedlockService. | ||
|
||
```ts | ||
import { RedlockService } from "@anchan828/nest-kysely"; | ||
|
||
@Injectable() | ||
export class ExampleService { | ||
constructor(private readonly redlock: RedlockService) {} | ||
|
||
public async addComment(projectId: number, comment: string): Promise<void> { | ||
await this.redlock.using([`projects/${projectId}/comments`], 5000, (signal) => { | ||
// Do something... | ||
|
||
if (signal.aborted) { | ||
throw signal.error; | ||
} | ||
}); | ||
} | ||
} | ||
``` | ||
|
||
## Using fake RedlockService | ||
|
||
If you do not want to use Redis in your Unit tests, define the fake class as RedlockService. | ||
|
||
```ts | ||
const app = await Test.createTestingModule({ | ||
providers: [TestService, { provide: RedlockService, useClass: FakeRedlockService }], | ||
}).compile(); | ||
``` | ||
|
||
## Troubleshooting | ||
|
||
### Nest can't resolve dependencies of the XXX. Please make sure that the "@redlockService" property is available in the current context. | ||
|
||
This is the error output when using the Redlock decorator without importing the RedlockModule. | ||
|
||
```ts | ||
import { RedlockModule } from "@anchan828/nest-kysely"; | ||
import Redis from "ioredis"; | ||
|
||
@Module({ | ||
imports: [ | ||
RedlockModule.register({ | ||
clients: [new Redis({ host: "localhost" })], | ||
}), | ||
], | ||
}) | ||
export class AppModule {} | ||
``` | ||
|
||
#### What should I do with Unit tests, I don't want to use Redis. | ||
|
||
Use `FakeRedlockService` class. Register FakeRedlockService with the provider as RedlockService. | ||
|
||
```ts | ||
const app = await Test.createTestingModule({ | ||
providers: [TestService, { provide: RedlockService, useClass: FakeRedlockService }], | ||
}).compile(); | ||
``` | ||
|
||
## License | ||
|
||
[MIT](LICENSE) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
version: "3.4" | ||
|
||
services: | ||
mysql: | ||
image: mysql:8 | ||
ports: | ||
- "3306:3306" | ||
environment: | ||
MYSQL_ROOT_PASSWORD: root | ||
MYSQL_DATABASE: test | ||
command: | ||
[ | ||
"mysqld", | ||
"--character-set-server=utf8mb4", | ||
"--collation-server=utf8mb4_bin", | ||
"--default-authentication-plugin=mysql_native_password", | ||
"--sync-binlog=0", | ||
"--innodb-flush-log-at-trx-commit=2", | ||
"--innodb-use-native-aio=0", | ||
] | ||
postgres: | ||
image: postgres:16 | ||
ports: | ||
- "5432:5432" | ||
environment: | ||
POSTGRES_USER: root | ||
POSTGRES_PASSWORD: root | ||
POSTGRES_DB: test |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,14 @@ | ||
{ | ||
"packages": ["packages/*"], | ||
"packages": [ | ||
"packages/*" | ||
], | ||
"command": { | ||
"publish": { | ||
"ignoreChanges": ["**/dist/**/*"], | ||
"message": "chore: publish %s [ci skip]" | ||
"ignoreChanges": [ | ||
"dist/**/*" | ||
], | ||
"message": "chore(release): publish %s" | ||
} | ||
}, | ||
"version": "0.0.0" | ||
} | ||
} |
Oops, something went wrong.