diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..143f188 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 DESIGN4 ᴾ ᴿ ᴼ + +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. diff --git a/README.md b/README.md index 8ffb2fc..0f6279f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,108 @@ -# AngularJss +# Angular JSS + + + +> [JSS](https://cssinjs.org/) integration with Angular + +[![Version](https://img.shields.io/npm/v/@design4pro/angular-jss.svg?style=flat-square)](https://npmjs.org/package/@design4pro/angular-jss) +[![License](https://img.shields.io/npm/l/@design4pro/angular-jss.svg?style=flat-square)](https://github.com/design4pro/angular-jss/jss/blob/master/LICENSE.md) +[![Downloads](https://img.shields.io/npm/dm/@design4pro/angular-jss.svg?style=flat-square)](https://npmjs.org/package/@design4pro/angular-jss) +[![Size](https://img.shields.io/bundlephobia/minzip/@design4pro/angular-jss.svg?style=flat-square)](https://npmjs.org/package/@design4pro/angular-jss) +[![design4pro](https://img.shields.io/badge/@-design4pro-383636?style=flat-square&labelColor=8f68d4)](https://github.com/design4pro/) + +## Features + +## Table of Contents + +- [Installation](#installation) +- [Usage](#usage) + +## Installation + +Using `npm`: + +```sh +npm install @design4pro/angular-jss +``` + +or using `yarn`: + +```sh +yarn add @design4pro/angular-jss +``` + +## Usage + +Inject the `AngularJssModule` module into your root module: + +```ts +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { AngularJssModule } from '@design4pro/angular-jss'; +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, AngularJssModule.forRoot()], + providers: [], + bootstrap: [AppComponent], +}) +export class AppModule {} +``` + +Use class decorator `Styled` to add styles to your component: + +```ts +import { Component } from '@angular/core'; +import { Styled, StyledProp, Theme } from '@design4pro/angular-jss'; + +@Component({ + selector: 'angular-jss-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'], +}) +@Styled(({ css, injectGlobal }) => { + // global styles + injectGlobal({ + '@global': { + ':root': { + '--background-color': (data: { backgroundColor: string }) => data.backgroundColor, + }, + }, + }); + + // element styles + return css( + (theme: Theme) => ({ + root: { + color: '#fff', + backgroundColor: 'var(--background-color)', + padding: '20px', + direction: theme.direction, + }, + }), + { name: 'first' } + ); +}) +export class AppComponent { + classes: any; // required to use `[ngClass]="classes.root"` in html template + + @StyledProp() // mark property as styled property + backgroundColor = 'red'; + + click() { + this.backgroundColor = this.backgroundColor === 'red' ? 'green' : 'red'; + } +} +``` + +```html +
+``` + +## Config options + +## License + +[MIT](https://github.com/design4pro/angular-jss/blob/master/LICENSE.md) © DESIGN4 ᴾ ᴿ ᴼ diff --git a/apps/webpage/src/app/app.component.html b/apps/webpage/src/app/app.component.html index 8fd0fd3..bb11e48 100644 --- a/apps/webpage/src/app/app.component.html +++ b/apps/webpage/src/app/app.component.html @@ -1 +1,3 @@ - +
+ + \ No newline at end of file diff --git a/apps/webpage/src/app/app.component.spec.ts b/apps/webpage/src/app/app.component.spec.ts index 3b947c7..059bb54 100644 --- a/apps/webpage/src/app/app.component.spec.ts +++ b/apps/webpage/src/app/app.component.spec.ts @@ -1,11 +1,10 @@ import { TestBed } from '@angular/core/testing'; import { AppComponent } from './app.component'; -import { NxWelcomeComponent } from './nx-welcome.component'; describe('AppComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [AppComponent, NxWelcomeComponent], + declarations: [AppComponent], }).compileComponents(); }); @@ -14,19 +13,4 @@ describe('AppComponent', () => { const app = fixture.componentInstance; expect(app).toBeTruthy(); }); - - it(`should have as title 'angular-jss'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('angular-jss'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('h1')?.textContent).toContain( - 'Welcome angular-jss' - ); - }); }); diff --git a/apps/webpage/src/app/app.component.ts b/apps/webpage/src/app/app.component.ts index 16b0cf3..b27fefe 100644 --- a/apps/webpage/src/app/app.component.ts +++ b/apps/webpage/src/app/app.component.ts @@ -1,10 +1,42 @@ import { Component } from '@angular/core'; +import { Styled, StyledProp, Theme } from '@design4pro/angular-jss'; @Component({ selector: 'angular-jss-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], }) +@Styled(({ css, injectGlobal }) => { + injectGlobal({ + '@global': { + ':root': { + '--background-color': (data: { color: string }) => data.color, + }, + }, + }); + + return css( + (theme: Theme) => ({ + root: { + color: '#fff', + backgroundColor: 'var(--background-color)', + padding: '20px', + direction: theme.direction, + }, + }), + { name: 'first' } + ); +}) export class AppComponent { title = 'angular-jss'; + classes: any; + name?: string; + + @StyledProp() + color = 'red'; + + click() { + this.color = this.color === 'red' ? 'green' : 'red'; + this.name = this.color; + } } diff --git a/apps/webpage/src/app/app.module.ts b/apps/webpage/src/app/app.module.ts index ca4cff2..2589d19 100644 --- a/apps/webpage/src/app/app.module.ts +++ b/apps/webpage/src/app/app.module.ts @@ -1,12 +1,11 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; - +import { AngularJssModule } from '@design4pro/angular-jss'; import { AppComponent } from './app.component'; -import { NxWelcomeComponent } from './nx-welcome.component'; @NgModule({ - declarations: [AppComponent, NxWelcomeComponent], - imports: [BrowserModule], + declarations: [AppComponent], + imports: [BrowserModule, AngularJssModule.forRoot()], providers: [], bootstrap: [AppComponent], }) diff --git a/apps/webpage/src/app/nx-welcome.component.ts b/apps/webpage/src/app/nx-welcome.component.ts deleted file mode 100644 index 9ca18ab..0000000 --- a/apps/webpage/src/app/nx-welcome.component.ts +++ /dev/null @@ -1,849 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; - -/* eslint-disable */ - -@Component({ - selector: 'angular-jss-nx-welcome', - template: ` - - -
-
- -
-

- Hello there, - Welcome angular-jss 👋 -

-
- - -
-
-

- - - - You're up and running -

- What's next? -
-
- - - -
-
- - - - - -
-

Next steps

-

Here are some things you can do with Nx:

-
- - - - - Add UI library - -
# Generate UI lib
-nx g @nrwl/angular:lib ui
-
-# Add a component
-nx g @nrwl/angular:component button --project ui
-
-
- - - - - View interactive project graph - -
nx graph
-
-
- - - - - Run affected commands - -
# see what's been affected by changes
-nx affected:graph
-
-# run tests for current changes
-nx affected:test
-
-# run e2e tests for current changes
-nx affected:e2e
-
-
- -

- Carefully crafted with - - - -

-
-
- `, - encapsulation: ViewEncapsulation.None, -}) -export class NxWelcomeComponent implements OnInit { - constructor() {} - - ngOnInit(): void {} -} diff --git a/apps/webpage/tsconfig.spec.json b/apps/webpage/tsconfig.spec.json index e70b1ea..447e0e6 100644 --- a/apps/webpage/tsconfig.spec.json +++ b/apps/webpage/tsconfig.spec.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node", "memoize-one"] }, "files": ["src/test-setup.ts"], "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] diff --git a/libs/angular-jss/CHANGELOG.md b/libs/angular-jss/CHANGELOG.md index 48e3460..2d16cca 100644 --- a/libs/angular-jss/CHANGELOG.md +++ b/libs/angular-jss/CHANGELOG.md @@ -1,3 +1,19 @@ +## [1.0.1](https://github.com/design4pro/angular-jss/compare/angular-jss/v1.0.0...angular-jss/v1.0.1) (2022-03-04) + +### Bug Fixes + +- **angular-jss:** imports and types ([0ed3d7f](https://github.com/design4pro/angular-jss/commit/0ed3d7fd8e014faa80e326cf6435b1a7b9a200cd)) + +### Miscellaneous + +- Merge pull request #18 from design4pro/develop ([6900d82](https://github.com/design4pro/angular-jss/commit/6900d82562f202dd999717acf99d272f536c063b)), closes [#18](https://github.com/design4pro/angular-jss/issues/18) +- Merge pull request #12 from design4pro/dependabot/npm_and_yarn/ts-jest-27.1.3 ([8600702](https://github.com/design4pro/angular-jss/commit/8600702694e29d3ea09876c5b04686797472fec2)), closes [#12](https://github.com/design4pro/angular-jss/issues/12) +- Merge pull request #11 from design4pro/dependabot/npm_and_yarn/angular-eslint/eslint-plugin-13.1.0 ([9d68836](https://github.com/design4pro/angular-jss/commit/9d688365bdd04e5b081f94e0aad6c207ce868fc8)), closes [#11](https://github.com/design4pro/angular-jss/issues/11) +- Merge pull request #10 from design4pro/dependabot/npm_and_yarn/types/node-17.0.21 ([8cdda9c](https://github.com/design4pro/angular-jss/commit/8cdda9cd0475b450f2156e9a54cabe4cafe3489e)), closes [#10](https://github.com/design4pro/angular-jss/issues/10) +- Merge pull request #9 from design4pro/dependabot/npm_and_yarn/eslint-8.10.0 ([d97f886](https://github.com/design4pro/angular-jss/commit/d97f886aa621fb29708388df59b50bfc304025c4)), closes [#9](https://github.com/design4pro/angular-jss/issues/9) +- Merge branch 'main' into dependabot/npm_and_yarn/eslint-8.10.0 ([d17e20e](https://github.com/design4pro/angular-jss/commit/d17e20edd7dbcbf882b745da918fd33a4ee2b339)) +- Merge pull request #8 from design4pro/dependabot/npm_and_yarn/eslint-config-prettier-8.4.0 ([8e1e915](https://github.com/design4pro/angular-jss/commit/8e1e91541f4c13125a881727a4d26f0220d7672e)), closes [#8](https://github.com/design4pro/angular-jss/issues/8) + # 1.0.0 (2022-03-02) ### Bug Fixes diff --git a/libs/angular-jss/README.md b/libs/angular-jss/README.md index 6083edc..0f6279f 100644 --- a/libs/angular-jss/README.md +++ b/libs/angular-jss/README.md @@ -1,7 +1,108 @@ -# angular-jss -This library was generated with [Nx](https://nx.dev). +# Angular JSS -## Running unit tests + -Run `nx test angular-jss` to execute the unit tests. +> [JSS](https://cssinjs.org/) integration with Angular + +[![Version](https://img.shields.io/npm/v/@design4pro/angular-jss.svg?style=flat-square)](https://npmjs.org/package/@design4pro/angular-jss) +[![License](https://img.shields.io/npm/l/@design4pro/angular-jss.svg?style=flat-square)](https://github.com/design4pro/angular-jss/jss/blob/master/LICENSE.md) +[![Downloads](https://img.shields.io/npm/dm/@design4pro/angular-jss.svg?style=flat-square)](https://npmjs.org/package/@design4pro/angular-jss) +[![Size](https://img.shields.io/bundlephobia/minzip/@design4pro/angular-jss.svg?style=flat-square)](https://npmjs.org/package/@design4pro/angular-jss) +[![design4pro](https://img.shields.io/badge/@-design4pro-383636?style=flat-square&labelColor=8f68d4)](https://github.com/design4pro/) + +## Features + +## Table of Contents + +- [Installation](#installation) +- [Usage](#usage) + +## Installation + +Using `npm`: + +```sh +npm install @design4pro/angular-jss +``` + +or using `yarn`: + +```sh +yarn add @design4pro/angular-jss +``` + +## Usage + +Inject the `AngularJssModule` module into your root module: + +```ts +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { AngularJssModule } from '@design4pro/angular-jss'; +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, AngularJssModule.forRoot()], + providers: [], + bootstrap: [AppComponent], +}) +export class AppModule {} +``` + +Use class decorator `Styled` to add styles to your component: + +```ts +import { Component } from '@angular/core'; +import { Styled, StyledProp, Theme } from '@design4pro/angular-jss'; + +@Component({ + selector: 'angular-jss-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'], +}) +@Styled(({ css, injectGlobal }) => { + // global styles + injectGlobal({ + '@global': { + ':root': { + '--background-color': (data: { backgroundColor: string }) => data.backgroundColor, + }, + }, + }); + + // element styles + return css( + (theme: Theme) => ({ + root: { + color: '#fff', + backgroundColor: 'var(--background-color)', + padding: '20px', + direction: theme.direction, + }, + }), + { name: 'first' } + ); +}) +export class AppComponent { + classes: any; // required to use `[ngClass]="classes.root"` in html template + + @StyledProp() // mark property as styled property + backgroundColor = 'red'; + + click() { + this.backgroundColor = this.backgroundColor === 'red' ? 'green' : 'red'; + } +} +``` + +```html +
+``` + +## Config options + +## License + +[MIT](https://github.com/design4pro/angular-jss/blob/master/LICENSE.md) © DESIGN4 ᴾ ᴿ ᴼ diff --git a/libs/angular-jss/logo.svg b/libs/angular-jss/logo.svg new file mode 100644 index 0000000..dc4238c --- /dev/null +++ b/libs/angular-jss/logo.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/libs/angular-jss/package.json b/libs/angular-jss/package.json index 1422c39..ee6c9ad 100644 --- a/libs/angular-jss/package.json +++ b/libs/angular-jss/package.json @@ -1,6 +1,8 @@ { "name": "@design4pro/angular-jss", "version": "0.0.1", + "description": "Angular for JSS", + "license": "MIT", "keywords": [ "angular", "ng", @@ -24,9 +26,9 @@ "@angular/common": "^13.2.0", "@angular/core": "^13.2.0", "jss": "^10.9.0", + "jss-plugin-camel-case": "^10.9.0", "jss-plugin-global": "^10.9.0", - "jss-plugin-rule-value-function": "^10.9.0", - "memoize-one": "^6.0.0" + "jss-plugin-rule-value-function": "^10.9.0" }, "dependencies": { "tslib": "^2.3.0" diff --git a/libs/angular-jss/src/index.ts b/libs/angular-jss/src/index.ts index 68a173c..f34ea2f 100644 --- a/libs/angular-jss/src/index.ts +++ b/libs/angular-jss/src/index.ts @@ -1 +1,6 @@ +export { createGenerateId, SheetsRegistry } from 'jss'; export * from './lib/angular-jss.module'; +export * from './lib/angular-jss.service'; +export * from './lib/angular-jss.types'; +export * from './lib/ssr'; +export * from './lib/styled'; diff --git a/libs/angular-jss/src/lib/hooks/use-memo.ts b/libs/angular-jss/src/lib/hooks/use-memo.ts index 9270b5b..c84461c 100644 --- a/libs/angular-jss/src/lib/hooks/use-memo.ts +++ b/libs/angular-jss/src/lib/hooks/use-memo.ts @@ -1,11 +1,35 @@ -import memoizeOne from 'memoize-one'; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function weakMemoize(fn: any, resolver?: any) { + const cache = new WeakMap(); + // instead of returning the function right away, store it in a variable... + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const memoized = function (...args: any) { + // eslint-disable-next-line prefer-spread + const key = resolver ? resolver.apply(null, args) : args[0]; + + if (cache.has(key)) { + return cache.get(key); + } else { + // eslint-disable-next-line prefer-spread + const result = fn.apply(null, args); + + cache.set(key, result); + + return result; + } + }; + // add a method to it to get the cache + memoized.getCache = () => cache; + // now return the function + return memoized; +} // eslint-disable-next-line @typescript-eslint/no-explicit-any export function useMemo(create: () => T, ...args: any): T { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const memoized: any = memoizeOne(create); + const memoized: any = weakMemoize(create); return memoized(args); } -export default useMemo; \ No newline at end of file +export default useMemo; diff --git a/libs/angular-jss/src/lib/jss/plugins.ts b/libs/angular-jss/src/lib/jss/plugins.ts index 9fad236..843fb37 100644 --- a/libs/angular-jss/src/lib/jss/plugins.ts +++ b/libs/angular-jss/src/lib/jss/plugins.ts @@ -1,5 +1,6 @@ import { Plugin } from 'jss'; import global from 'jss-plugin-global'; import functions from 'jss-plugin-rule-value-function'; +import camelCase from 'jss-plugin-camel-case'; -export default (): Plugin[] => [functions(), global()]; +export default (): Plugin[] => [functions(), global(), camelCase()]; diff --git a/libs/angular-jss/src/lib/jss/utils/sheets.ts b/libs/angular-jss/src/lib/jss/utils/sheets.ts index 5c39e6b..aabadf1 100644 --- a/libs/angular-jss/src/lib/jss/utils/sheets.ts +++ b/libs/angular-jss/src/lib/jss/utils/sheets.ts @@ -1,8 +1,7 @@ import { getDynamicStyles, StyleSheet, StyleSheetFactoryOptions } from 'jss'; -import warning from 'tiny-warning'; +import { Theme } from '../../angular-jss.types'; import { StyledProps } from '../../styled/styled.interface'; import { ThemeContext } from '../../theme/theme-context'; -import { Theme } from '../../angular-jss.types'; import { JssContext } from '../context'; import { getManager } from '../managers'; import { jss as defaultJss } from '../setup'; @@ -35,12 +34,13 @@ export const getStyles = (options: Options) => { return styles; } - warning( - styles.length !== 0, - `[JSS] <${ - options.name || 'Hook' - } />'s styles function doesn't rely on the "theme" argument. We recommend declaring styles as an object instead.` - ); + if (styles.length !== 0) { + console.warn( + `[JSS] <${ + options.name || 'Hook' + } />'s styles function doesn't rely on the "theme" argument. We recommend declaring styles as an object instead.` + ); + } return styles(options.theme); }; diff --git a/libs/angular-jss/src/lib/ssr/express.ts b/libs/angular-jss/src/lib/ssr/express.ts index 5886745..31b2e70 100644 --- a/libs/angular-jss/src/lib/ssr/express.ts +++ b/libs/angular-jss/src/lib/ssr/express.ts @@ -1,5 +1,5 @@ import { NextFunction, Request, Response } from 'express'; -import { Jss } from '../angular-jss.service'; +import { AngularJss } from '../angular-jss.service'; export function jssSSR(name = 'jss-ssr') { return function (req: Request, res: Response, next: NextFunction) { @@ -7,7 +7,7 @@ export function jssSSR(name = 'jss-ssr') { res.send = function (string: Buffer | string) { // JSS SSR - const sheet = Jss.sheetRegistry()?.toString({ format: false }); + const sheet = AngularJss.sheetRegistry()?.toString({ format: false }); const css = ``; let body = string instanceof Buffer ? string.toString() : string; diff --git a/libs/angular-jss/src/lib/styled/internals.ts b/libs/angular-jss/src/lib/styled/internals.ts index f768255..f1b9148 100644 --- a/libs/angular-jss/src/lib/styled/internals.ts +++ b/libs/angular-jss/src/lib/styled/internals.ts @@ -34,6 +34,8 @@ export function markAsDecorated( } export function generateStyles( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this: any, styleFn: StyledProps, doCheck: BehaviorSubject, onDestroy: Subject diff --git a/libs/angular-jss/src/lib/styled/styled.decorator.ts b/libs/angular-jss/src/lib/styled/styled.decorator.ts index dbef589..ee389f4 100644 --- a/libs/angular-jss/src/lib/styled/styled.decorator.ts +++ b/libs/angular-jss/src/lib/styled/styled.decorator.ts @@ -40,7 +40,8 @@ function decorateNgOnCheck( props: StyledProps, initialized: boolean ) { - return function () { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (this: any) { // Redecorate ngOnDestroy if it was complied if (this._onDestroy$.isStopped) { this._doCheck$ = new BehaviorSubject({} as StyledProps); @@ -70,7 +71,9 @@ function decorateNgOnCheck( } function decorateNgOnDestroy(ngOnDestroy: (() => void) | null | undefined) { - return function () { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (this: any) { + // Invoke the original `ngOnDestroy` if it exists if (ngOnDestroy) { ngOnDestroy.call(this); diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..dc4238c --- /dev/null +++ b/logo.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index f05a80f..b47e3da 100644 --- a/package.json +++ b/package.json @@ -43,16 +43,16 @@ "@angular/router": "~13.2.0", "@nrwl/angular": "13.8.3", "jss": "^10.9.0", + "jss-plugin-camel-case": "^10.9.0", "jss-plugin-global": "^10.9.0", "jss-plugin-rule-value-function": "^10.9.0", - "memoize-one": "^6.0.0", "rxjs": "~7.4.0", "tslib": "^2.0.0", "zone.js": "~0.11.4" }, "devDependencies": { "@angular-devkit/build-angular": "~13.2.0", - "@angular-eslint/eslint-plugin": "~13.0.1", + "@angular-eslint/eslint-plugin": "~13.1.0", "@angular-eslint/eslint-plugin-template": "~13.0.1", "@angular-eslint/template-parser": "~13.0.1", "@angular/cli": "~13.2.0", @@ -74,12 +74,12 @@ "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@types/jest": "27.0.2", - "@types/node": "16.11.7", + "@types/node": "17.0.21", "@typescript-eslint/eslint-plugin": "~5.10.0", "@typescript-eslint/parser": "~5.10.0", "cypress": "^9.1.0", - "eslint": "~8.7.0", - "eslint-config-prettier": "8.1.0", + "eslint": "~8.10.0", + "eslint-config-prettier": "8.4.0", "eslint-plugin-cypress": "^2.10.3", "hasky": "^3.0.2", "jest": "27.2.3", @@ -92,7 +92,7 @@ "postcss-url": "^10.1.1", "prettier": "^2.5.1", "semantic-release": "^19.0.2", - "ts-jest": "27.0.5", + "ts-jest": "27.1.3", "typescript": "~4.5.2" }, "lint-staged": {