Fast and type-safe full stack framework, for TypeScript

Overview

frourio

Fast and type-safe full stack framework, for TypeScript




Why frourio ?

Even if you write both the frontend and backend in TypeScript, you can't statically type-check the API's sparsity.

We are always forced to write "Two TypeScript".
We waste a lot of time on dynamic testing using the browser and server.

Why frourio ?


Frourio is a framework for developing web apps quickly and safely in "One TypeScript".

Architecture of create-frourio-app


Documents

https://frourio.io/docs

Table of Contents

Install

Make sure you have npx installed (npx is shipped by default since npm 5.2.0)

$ npx create-frourio-app

Or starting with npm v6.1 you can do:

$ npm init frourio-app

Or with yarn:

$ yarn create frourio-app

Controller

Case 1 - Define GET: /tasks?limit={number}

server/types/index.ts

export type Task = {
  id: number
  label: string
  done: boolean
}

server/api/tasks/index.ts

import { Task } from '$/types' // path alias $ -> server

export type Methods = {
  get: {
    query: {
      limit: number
    }

    resBody: Task[]
  }
}

server/api/tasks/controller.ts

import { defineController } from './$relay' // '$relay.ts' is automatically generated by frourio
import { getTasks } from '$/service/tasks'

export default defineController(() => ({
  get: async ({ query }) => ({
    status: 200,
    body: (await getTasks()).slice(0, query.limit)
  })
}))

Case 2 - Define POST: /tasks

server/api/tasks/index.ts

import { Task } from '$/types' // path alias $ -> server

export type Methods = {
  post: {
    reqBody: Pick<Task, 'label'>
    status: 201
    resBody: Task
  }
}

server/api/tasks/controller.ts

import { defineController } from './$relay' // '$relay.ts' is automatically generated by frourio
import { createTask } from '$/service/tasks'

export default defineController(() => ({
  post: async ({ body }) => {
    const task = await createTask(body.label)

    return { status: 201, body: task }
  }
}))

Case 3 - Define GET: /tasks/{taskId}

server/api/tasks/_taskId@number/index.ts

import { Task } from '$/types' // path alias $ -> server

export type Methods = {
  get: {
    resBody: Task
  }
}

server/api/tasks/_taskId@number/controller.ts

import { defineController } from './$relay' // '$relay.ts' is automatically generated by frourio
import { findTask } from '$/service/tasks'

export default defineController(() => ({
  get: async ({ params }) => {
    const task = await findTask(params.taskId)

    return task ? { status: 200, body: task } : { status: 404 }
  }
}))

Hooks

Frourio can use hooks of Fastify.
There are four types of hooks, onRequest / preParsing / preValidation / preHandler.

Lifecycle

Incoming Request
  │
  └─▶ Routing
        │
  404 ◀─┴─▶ onRequest Hook
              │
    4**/5** ◀─┴─▶ preParsing Hook
                    │
          4**/5** ◀─┴─▶ Parsing
                          │
                4**/5** ◀─┴─▶ preValidation Hook
                                │
                      4**/5** ◀─┴─▶ Validation
                                      │
                                400 ◀─┴─▶ preHandler Hook
                                            │
                                  4**/5** ◀─┴─▶ User Handler
                                                  │
                                        4**/5** ◀─┴─▶ Outgoing Response

Directory level hooks

Directory level hooks are called at the current and subordinate endpoints.

server/api/tasks/hooks.ts

import { defineHooks } from './$relay' // '$relay.ts' is automatically generated by frourio

export default defineHooks(() => ({
  onRequest: [
    (req, reply, done) => {
      console.log('Directory level onRequest first hook:', req.url)
      done()
    },
    (req, reply, done) => {
      console.log('Directory level onRequest second hook:', req.url)
      done()
    }
  ],
  preParsing: (req, reply, payload, done) => {
    console.log('Directory level preParsing single hook:', req.url)
    done()
  }
}))

Controller level hooks

Controller level hooks are called at the current endpoint after directory level hooks.

server/api/tasks/controller.ts

import { defineHooks, defineController } from './$relay' // '$relay.ts' is automatically generated by frourio
import { getTasks, createTask } from '$/service/tasks'

export const hooks = defineHooks(() => ({
  onRequest: (req, reply, done) => {
    console.log('Controller level onRequest single hook:', req.url)
    done()
  },
  preParsing: [
    (req, reply, payload, done) => {
      console.log('Controller level preParsing first hook:', req.url)
      done()
    },
    (req, reply, payload, done) => {
      console.log('Controller level preParsing second hook:', req.url)
      done()
    }
  ]
}))

export default defineController(() => ({
  get: async ({ query }) => ({
    status: 200,
    body: (await getTasks()).slice(0, query.limit)
  }),
  post: async ({ body }) => {
    const task = await createTask(body.label)

    return { status: 201, body: task }
  }
}))

Validation

Query, reqHeaders and reqBody are validated by specifying Class with class-validator.
The class needs to be exported from server/validators/index.ts.

server/validators/index.ts

import { MinLength, IsString } from 'class-validator'

export class LoginBody {
  @MinLength(5)
  id: string

  @MinLength(8)
  pass: string
}

export class TokenHeader {
  @IsString()
  @MinLength(10)
  token: string
}

server/api/token/index.ts

import { LoginBody, TokenHeader } from '$/validators'

export type Methods = {
  post: {
    reqBody: LoginBody
    resBody: {
      token: string
    }
  }

  delete: {
    reqHeaders: TokenHeader
  }
}
$ curl -X POST -H "Content-Type: application/json" -d '{"id":"correctId","pass":"correctPass"}' http://localhost:8080/api/token
{"token":"XXXXXXXXXX"}

$ curl -X POST -H "Content-Type: application/json" -d '{"id":"abc","pass":"12345"}' http://localhost:8080/api/token -i
HTTP/1.1 400 Bad Request

$ curl -X POST -H "Content-Type: application/json" -d '{"id":"incorrectId","pass":"incorrectPass"}' http://localhost:8080/api/token -i
HTTP/1.1 401 Unauthorized

Deployment

Frourio is complete in one directory, but not monolithic.
Client and server are just statically connected by a type and are separate projects.
So they can be deployed in different environments.

Client

$ npm run build:client
$ npm run start:client

Server

$ npm run build:server
$ npm run start:server

or

$ cd server
$ npm run build
$ npm run start

Dependency Injection

Frourio use frouriojs/velona for dependency injection.

server/api/tasks/index.ts

import { Task } from '$/types'

export type Methods = {
  get: {
    query?: {
      limit?: number
      message?: string
    }

    resBody: Task[]
  }
}

server/service/tasks.ts

import { PrismaClient } from '@prisma/client'
import { depend } from 'velona' // dependency of frourio
import { Task } from '$/types'

const prisma = new PrismaClient()

export const getTasks = depend(
  { prisma: prisma as { task: { findMany(): Promise<Task[]> } } }, // inject prisma
  async ({ prisma }, limit?: number) => // prisma is injected object
    (await prisma.task.findMany()).slice(0, limit)
)

server/api/tasks/controller.ts

import { defineController } from './$relay'
import { getTasks } from '$/service/tasks'

const print = (text: string) => console.log(text)

export default defineController(
  { getTasks, print }, // inject functions
  ({ getTasks, print }) => ({ // getTasks and print are injected function
    get: async ({ query }) => {
      if (query?.message) print(query.message)

      return { status: 200, body: await getTasks(query?.limit) }
    }
  })
)

server/test/server.test.ts

import fastify from 'fastify'
import controller from '$/api/tasks/controller'

test('dependency injection into controller', async () => {
  let printedMessage = ''

  const injectedController = controller.inject((deps) => ({
    getTasks: deps.getTasks.inject({
      prisma: {
        task: {
          findMany: () =>
            Promise.resolve([
              { id: 0, label: 'task1', done: false },
              { id: 1, label: 'task2', done: false },
              { id: 2, label: 'task3', done: true },
              { id: 3, label: 'task4', done: true },
              { id: 4, label: 'task5', done: false }
            ])
        }
      }
    }),
    print: (text: string) => {
      printedMessage = text
    }
  }))(fastify())

  const limit = 3
  const message = 'test message'
  const res = await injectedController.get({
    query: { limit, message }
  })

  expect(res.body).toHaveLength(limit)
  expect(printedMessage).toBe(message)
})
$ npm test

PASS server/test/server.test.ts
  ✓ dependency injection into controller (4 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.67 s, estimated 8 s
Ran all test suites.

License

Frourio is licensed under a MIT License.

Comments
  • remove managed files when the routed path is removed

    remove managed files when the routed path is removed

    Types of changes

    What kind of change does this PR introduce? (check at least one)

    • [ ] Breaking change
    • [ ] Bugfix
    • [x] Feature
    • [ ] Code style update
    • [ ] Refactoring
    • [ ] Build related changes
    • [ ] CI related changes
    • [ ] Documentation content changes
    • [ ] Other... Please describe:

    Description

    多分 feat ですかね。

    Issue Number: resolves https://github.com/frouriojs/frourio/issues/184

    • $*.ts のみが残っていたら、$ から始まるファイルは自動生成されるとして、事前に削除
    • stale チェック中に生成してしまわないようにすべて sync で処理。 (frourio dev 二重起動には耐えられない)
    • すぐにディレクトリごと削除はせずに $*.ts のみの削除をしてディレクトリがから出ない場合に失敗する、rmdirSync を実行する
      • $*.ts が自動生成である限り、タイミングが悪いなどの事故は起きない
    • $a.ts/ のようなディレクトリがあるかもしれないので、ディレクトリチェックを入れている
    • $*.ts の他に、mts, cts, js, mjs, cjs を自動生成としてみなす対象としている
      • $* でもいいかもしれない

    screencast

    opened by LumaKernel 7
  • Directory Level HookのpreHandrer関数内でawaitするとcontrollerが2回呼ばれる

    Directory Level HookのpreHandrer関数内でawaitするとcontrollerが2回呼ばれる

    Description

    Directory Level HookのpreHandrer関数内でawaitするとcontrollerが2回呼ばれてしまいます。 awaitを消すと直りますが、reqに値をセットできないので困っています。

    Environment

    • Package version:

      v0.27.1

    • OS:
      • [ ] Linux
      • [ ] Windows
      • [x] macOS
    • Node.js version:

      v14.18.1

    Additional context

    firebaseAuthのセッションクッキー検証の際に見つけました。

    export default defineHooks(() => ({
      preHandler: async (req, res, done) => {
        console.log(req.url) // ここの時点で2回呼ばれる
        try {
          const sessionId = req.cookies.session
          const user = await firebaseAuth.verifySessionCookie(sessionId, true) // この行消すと直る
          if (user) {
            console.log('user:', user.uid)
            req.authUser = {
              userId: user.uid
            }
          } 
        } catch (err) {
            res.status(401).send()
        }finally{
           done() // 記載漏れ追記
        }
      }
    }))
    
    
    
    opened by humiyan02 5
  • Feature Request: Global Hook ( or Request Properties ) Definition Support

    Feature Request: Global Hook ( or Request Properties ) Definition Support

    Description

    I understand each request object passed to endpoints is actually Fastify's Request. And we can append some properties with hooks.ts with defining exported types. It may not be about the hooks feature itself. I'm new in Fastify, sorry.

    For example, do authentication for all routes under api/... and adding req.user property if authenticated or undefined otherwise. This property may not only depending headers, but also cookies, sessions, ... and some they are not currently provided by req for api endpoints (in type level).

    Now, it seems we should write the definition for all endpoints.

    I'm using the workaround to define the utility getUser(req: {params: unknown}) => UserProfile | undefined for now.

    Describe the solution you'd like / Describe alternatives you've considered

    My ideas are...

    1. Use like the files server/api/global-hooks.ts ( or **.d.ts ) for defining global hooks ( or types only ).
    2. servere/api/some/cascading-hooks.ts for all sub-directories.
    3. Make req type definition intersected with Request.
    4. Change req type to an interface as extensible definition ( I'm wondering it would be really working well or not... )
    5. Providing the way to access raw req officially.

    Additional context

    Descriptions example is almost my real case.

    (off-topic: I appreciate this project... I had made a similar type generator for my private project, so I fell in love with this project.. And I want to celebrate for the Fastify version release. )

    ( Ah, I'm sorry if it is aspida issue... )

    opened by LumaKernel 4
  • feat(validation): allow user to specify custom plainToInstance and validateOrReject

    feat(validation): allow user to specify custom plainToInstance and validateOrReject

    Types of changes

    What kind of change does this PR introduce? (check at least one)

    • [ ] Breaking change
    • [ ] Bugfix
    • [x] Feature
    • [ ] Code style update
    • [ ] Refactoring
    • [ ] Build related changes
    • [ ] CI related changes
    • [ ] Documentation content changes
    • [ ] Other... Please describe:

    Description

    Issue Number: N/A

    plainToInstance及びvalidateOrRejectをユーザがカスタマイズできるようにします

    これにより、旧来( #188 より前)の動作に戻したり、あるいは下記のようなコードで変換を高速化できます (class-transformerclass-transformer/esm2015に解決するようなビルド設定やclass-transformer/esm2015以下の型定義が必要です)

    このコードは現在私のプロジェクトで使用していますが、標準で載せるほどの信頼性が担保できないのでこのような形のPRとしました ただ、これはどちらかというとclass-transformer自体の問題(オブジェクトに対して問答無用で再帰的に変換をかけてしまう)に近いので、スコープ外でしたら閉じちゃってください

    // licensed under CC0 1.0
    
    import {
      TransformationType,
      TypeMetadata,
      plainToInstance,
    } from 'class-transformer';
    import { plainToInstance as esm2015PlainToInstance } from 'class-transformer/esm2015';
    import { TransformOperationExecutor as esm2015TransformOperationExecutor } from 'class-transformer/esm2015/TransformOperationExecutor';
    import { defaultOptions } from 'class-transformer/esm2015/constants/default-options.constant';
    
    const TransformOperationExecutor =
      plainToInstance === esm2015PlainToInstance
        ? esm2015TransformOperationExecutor
        : null;
    if (!TransformOperationExecutor) {
      throw new Error('Unsupported class-transformer variant');
    }
    
    /**
     * a transformer which keeps class instances as is
     */
    class FastTransformOperationExecutor extends TransformOperationExecutor {
      override transform(
        source: any,
        value: any,
        targetType: Function | TypeMetadata,
        arrayType: Function,
        isMap: boolean,
        level?: number
      ): any {
        if (value == null) {
          return value;
        }
        if (typeof value === 'object' && !Array.isArray(value)) {
          const constructorName = Object.getPrototypeOf(value)?.constructor?.name;
          if (constructorName != null && constructorName !== 'Object') {
            // an instance
            return value;
          }
        } else if (typeof value === 'function') {
          // a function
          return value;
        }
        // plain value or object
        return super.transform.call(
          this,
          source,
          value,
          targetType,
          arrayType,
          isMap,
          level
        );
      }
    }
    
    export const fastPlainToInstance: typeof plainToInstance = (
      cls,
      plain,
      options
    ): any => {
      const executor = new FastTransformOperationExecutor(
        TransformationType.PLAIN_TO_CLASS,
        {
          ...defaultOptions,
          ...options,
        }
      );
      const result = executor.transform(
        undefined,
        plain,
        cls,
        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
        undefined!,
        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
        undefined!,
        undefined
      );
      return result;
    };
    
    feature 
    opened by SegaraRai 3
  • $server.tsでTS2684: The 'this' context of type 'void' is not assignable to method's 'this' of type 'FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>'.

    $server.tsでTS2684: The 'this' context of type 'void' is not assignable to method's 'this' of type 'FastifyInstance'.

    概要

    素晴らしいプロダクトをありがとうございます。 ちょこちょこ触ってみてたのですが(先日のオンラインイベントにも参加させて頂きました)、昨日本格的に実戦投入しようと開始しまして、最高の使い勝手に感動しています。

    昨日next.jsで使ってみて、今日nuxt.jsでインストールしてみたところ、同じ環境なのに、なぜかnuxtだとバックエンドの$server.tsがWebPackのコンパイルでエラーがでるようです。 nextの時とこの部分のコードは同じようですが、何か違うのでしょうか。

    環境

    node v14.15.5 webpack 5.41.1

    エラーメッセージ

    [tsl] ERROR in /root/kokolab2/server/$server.ts(129,42) TS2684: The 'this' context of type 'void' is not assignable to method's 'this' of type 'FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>'.

    型 'void' の 'this' コンテキストを型 'FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>' のメソッドの 'this' に割り当てることはできません。ts(2684)

    const callParserIfExistsQuery = (parser: preValidationHookHandler): preValidationHookHandler => (req, reply, done) =>
      Object.keys(req.query as any).length ? parser(req, reply, done) : done()
    
    opened by sutefu23 3
  • Should we use eslint-plugin-prettier?

    Should we use eslint-plugin-prettier?

    Description

    Prettier is no longer officially recommending the use of eslint-plugin-prettier.

    https://prettier.io/docs/en/integrating-with-linters.html

    Frourio is using eslint-plugin-prettier. What are the future plans for this project?

    Describe the solution you'd like

    ESLint and Prettier may need to be run in separate npm scripts.

    Describe alternatives you've considered

    Additional context

    opened by yantene 3
  • Cannot find module 'fastify-multipart' or its corresponding type declarations

    Cannot find module 'fastify-multipart' or its corresponding type declarations

    fastify-multipartがdeprecatedとなっていたので、@fastify/multipartに変えたところ$server.tsにて

    Cannot find module 'fastify-multipart' or its corresponding type declarations
    

    https://www.npmjs.com/package/fastify-multipart https://www.npmjs.com/package/@fastify/multipart

    buildServerFile.tsにてfastify-multipartがハードコーディングされているのが原因っぽい?fastify-multipart@fastify/multipart https://github.com/frouriojs/frourio/blob/main/src/buildServerFile.ts#L46

    とりあえず

        "fastify-multipart": "5.3.1",
        "@fastify/multipart": "^6.0.0",
    

    を共存させて回避しています。

    priority/0 
    opened by humiyan02 2
  • 一つのディレクトリに複数の動的ルーティングが置かれたらエラーを出す

    一つのディレクトリに複数の動的ルーティングが置かれたらエラーを出す

    Description

    hoge/
      _userId@number/...
      _userName@string/...
    

    のとき、片方のコントローラが無効になって初心者が混乱すると思われる

    $server.ts 生成時に気付けるはずなのでエラー出してあげたい

    Describe the solution you'd like

    Describe alternatives you've considered

    Additional context

    opened by solufa 2
  • chore(deps-dev): bump standard-version from 9.3.0 to 9.3.2

    chore(deps-dev): bump standard-version from 9.3.0 to 9.3.2

    Bumps standard-version from 9.3.0 to 9.3.2.

    Release notes

    Sourced from standard-version's releases.

    standard-version v9.3.2

    Bug Fixes

    • deps: update dependency conventional-changelog-conventionalcommits to v4.6.1 (#752) (bb8869d)

    standard-version v9.3.1

    Bug Fixes

    • updater: npm7 package lock's inner version not being updated (#713) (a316dd0)
    Changelog

    Sourced from standard-version's changelog.

    9.3.2 (2021-10-17)

    Bug Fixes

    • deps: update dependency conventional-changelog-conventionalcommits to v4.6.1 (#752) (bb8869d)

    9.3.1 (2021-07-14)

    Bug Fixes

    • updater: npm7 package lock's inner version not being updated (#713) (a316dd0)
    Commits
    • a61d8cf chore: release 9.3.2 (#836)
    • bb8869d fix(deps): update dependency conventional-changelog-conventionalcommits to v4...
    • 4b0b549 chore(deps): update codecov/codecov-action action to v2 (#784)
    • ca5ab8f chore: release 9.3.1 (#781)
    • a316dd0 fix(updater): npm7 package lock's inner version not being updated (#713)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies chore 
    opened by dependabot[bot] 2
  • eslint-disableとprettier-ignoreは必要か。

    eslint-disableとprettier-ignoreは必要か。

    私は必要ないと思っています。 まず、基本的に eslint-plugin-eslint-comments を私は入れているので、 $*.ts を ignore 指定していなければどちらにせよエラーになります。

    そして、自動生成ファイルは、(1)gitignoreする人と(2)管理する人、それぞれいると思いますが、それぞれについて、(1)eslintignore/prettierignoreするので必要ない、(2)GitHub上などで見たとき prettier-ignore が挟み込んで (eslintignore/prettierignoreする・しないに関わらず)見にくい、のではないかと思います。

    priority/0 
    opened by LumaKernel 2
  • TypeORMの挙動が開発環境と本番環境で違う挙動になる

    TypeORMの挙動が開発環境と本番環境で違う挙動になる

    Description

    TypeORMを用いている環境で yarn build してからサーバーを実行する( yarn start )と、以下のようなエラーが発生します。

    ※ 開発環境( yarn dev )では動くことを前提としています。

    QueryFailedError: ER_NO_SUCH_TABLE: Table 'sample_database.a' doesn't exist
    ...
    

    Environment

    • Package version:

      v0.24.1

    • OS:
      • [x] Linux
      • [ ] Windows
      • [ ] macOS
    • Node.js version:

      v12.18.4

    • npm version:

      v6.14.6

    Additional context

    原因

    今回の問題は、webpackがエンティティのクラス名まで圧縮してしまって、エンティティ名が変更されたままTypeORMに渡されている事が原因となっているようです。

    解決策

    https://scrapbox.io/dojineko/TypeORM_と_Webpack_を併用する場合の注意点

    上記の記事を参考に、webpackの minimize オプションを false にする事で解決します。

    // server/webpack.config.js
    
    const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin')
    const nodeExternals = require('webpack-node-externals')
    const NodemonPlugin = require('nodemon-webpack-plugin')
    
    module.exports = {
      entry: './index.ts',
      target: 'node',
    
      // 以下の部分を追加
      optimization: {
        minimize: false
      },
    
      node: {
        __dirname: false
      },
      output: {
        filename: 'index.js',
        path: __dirname
      },
      module: {
        rules: [{ test: /\.ts$/, loader: 'ts-loader' }]
      },
      plugins: [new NodemonPlugin()],
      resolve: {
        extensions: ['.ts', '.js'],
        plugins: [new TsconfigPathsPlugin()]
      },
      externals: [nodeExternals()]
    }
    
    opened by uttk 2
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin from 5.42.1 to 5.45.0

    chore(deps-dev): bump @typescript-eslint/eslint-plugin from 5.42.1 to 5.45.0

    Bumps @typescript-eslint/eslint-plugin from 5.42.1 to 5.45.0.

    Release notes

    Sourced from @​typescript-eslint/eslint-plugin's releases.

    v5.45.0

    5.45.0 (2022-11-28)

    Bug Fixes

    • eslint-plugin: [array-type] --fix flag removes parentheses from type (#5997) (42b33af)
    • eslint-plugin: [keyword-spacing] prevent crash on no options (#6073) (1f19998)
    • eslint-plugin: [member-ordering] support private fields (#5859) (f02761a)
    • eslint-plugin: [prefer-readonly] report if a member's property is reassigned (#6043) (6e079eb)
    • scope-manager: add support for TS4.9 satisfies expression (#6059) (44027db)
    • typescript-estree: stub out ts.SatisfiesExpression on old TS versions (#6076) (1302b30)

    Features

    • eslint-plugin: [member-ordering] add a required option for required vs. optional member ordering (#5965) (2abadc6)
    • support Auto Accessor syntax (#5926) (becd1f8)

    v5.44.0

    5.44.0 (2022-11-21)

    Bug Fixes

    • eslint-plugin: [no-empty-interface] disable autofix for declaration merging with class (#5920) (a4f85b8)
    • eslint-plugin: [no-unnecessary-condition] handle index signature type (#5912) (5baad08)
    • eslint-plugin: [prefer-optional-chain] handle binary expressions in negated or (#5992) (2778ff0)
    • typescript-estree: don't consider a cached program unless it's specified in the current parserOptions.project config (#5999) (530e0e6)

    Features

    • eslint-plugin: [adjacent-overload-signatures] check BlockStatement nodes (#5998) (97d3e56)
    • eslint-plugin: [keyword-spacing] Support spacing in import-type syntax (#5977) (6a735e1)
    • support parsing satisfies operators (#5717) (20d7cae)
    • update to TypeScript 4.9 (#5716) (4d744ea)

    v5.43.0

    5.43.0 (2022-11-14)

    Bug Fixes

    • eslint-plugin: [no-shadow] handle false positives on generics and parameters (#5902) (769e8c8)
    • eslint-plugin: [promise-function-async] handle keyword token (#5907) (f25a94f)

    Features

    ... (truncated)

    Changelog

    Sourced from @​typescript-eslint/eslint-plugin's changelog.

    5.45.0 (2022-11-28)

    Bug Fixes

    • eslint-plugin: [array-type] --fix flag removes parentheses from type (#5997) (42b33af)
    • eslint-plugin: [keyword-spacing] prevent crash on no options (#6073) (1f19998)
    • eslint-plugin: [member-ordering] support private fields (#5859) (f02761a)
    • eslint-plugin: [prefer-readonly] report if a member's property is reassigned (#6043) (6e079eb)

    Features

    • eslint-plugin: [member-ordering] add a required option for required vs. optional member ordering (#5965) (2abadc6)

    5.44.0 (2022-11-21)

    Bug Fixes

    • eslint-plugin: [no-empty-interface] disable autofix for declaration merging with class (#5920) (a4f85b8)
    • eslint-plugin: [no-unnecessary-condition] handle index signature type (#5912) (5baad08)
    • eslint-plugin: [prefer-optional-chain] handle binary expressions in negated or (#5992) (2778ff0)
    • typescript-estree: don't consider a cached program unless it's specified in the current parserOptions.project config (#5999) (530e0e6)

    Features

    • eslint-plugin: [adjacent-overload-signatures] check BlockStatement nodes (#5998) (97d3e56)
    • eslint-plugin: [keyword-spacing] Support spacing in import-type syntax (#5977) (6a735e1)

    5.43.0 (2022-11-14)

    Bug Fixes

    • eslint-plugin: [no-shadow] handle false positives on generics and parameters (#5902) (769e8c8)
    • eslint-plugin: [promise-function-async] handle keyword token (#5907) (f25a94f)

    Features

    • eslint-plugin: [consistent-type-imports] support fixing to inline types (#5050) (75dcdf1)
    • eslint-plugin: [naming-convention] add support for "override" and "async" modifiers (#5310) (#5610) (c759da1)
    • eslint-plugin: [prefer-optional-chain] support suggesting !foo || !foo.bar as a valid match for the rule (#5594) (923d486)
    Commits
    • 267da4e chore: publish v5.45.0
    • 2abadc6 feat(eslint-plugin): [member-ordering] add a required option for required vs....
    • 6e079eb fix(eslint-plugin): [prefer-readonly] report if a member's property is reassi...
    • f02761a fix(eslint-plugin): [member-ordering] support private fields (#5859)
    • ee62b0b chore: use no-restricted-syntax to enforce created options in rules (#6074)
    • 1f19998 fix(eslint-plugin): [keyword-spacing] prevent crash on no options (#6073)
    • 42b33af fix(eslint-plugin): [array-type] --fix flag removes parentheses from type (#5...
    • 01159d2 chore: publish v5.44.0
    • 426c2f9 chore: remove unnecessary project names from nx commands (#6054)
    • e2d1263 chore: switched repo lint to use nx run-many (#6038)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies chore 
    opened by dependabot[bot] 0
  • chore(deps-dev): bump eslint from 8.27.0 to 8.28.0

    chore(deps-dev): bump eslint from 8.27.0 to 8.28.0

    Bumps eslint from 8.27.0 to 8.28.0.

    Release notes

    Sourced from eslint's releases.

    v8.28.0

    Features

    • 63bce44 feat: add ignoreClassFieldInitialValues option to no-magic-numbers (#16539) (Milos Djermanovic)
    • 8385ecd feat: multiline properties in rule key-spacing with option align (#16532) (Francesco Trotta)
    • a4e89db feat: no-obj-calls support Intl (#16543) (Sosuke Suzuki)

    Bug Fixes

    • c50ae4f fix: Ensure that dot files are found with globs. (#16550) (Nicholas C. Zakas)
    • 9432b67 fix: throw error for first unmatched pattern (#16533) (Milos Djermanovic)
    • e76c382 fix: allow * 1 when followed by / in no-implicit-coercion (#16522) (Milos Djermanovic)

    Documentation

    • 34c05a7 docs: Language Options page intro and tweaks (#16511) (Ben Perlmutter)
    • 3e66387 docs: add intro and edit ignoring files page (#16510) (Ben Perlmutter)
    • 436f712 docs: fix Header UI inconsistency (#16464) (Tanuj Kanti)
    • f743816 docs: switch to wrench emoji for auto-fixable rules (#16545) (Bryan Mishkin)
    • bc0547e docs: improve styles for versions and languages page (#16553) (Nitin Kumar)
    • 6070f58 docs: clarify esquery issue workaround (#16556) (Milos Djermanovic)
    • b48e4f8 docs: Command Line Interface intro and tweaks (#16535) (Ben Perlmutter)
    • b92b30f docs: Add Rules page intro and content tweaks (#16523) (Ben Perlmutter)
    • 1769b42 docs: Integrations page introduction (#16548) (Ben Perlmutter)
    • a8d0a57 docs: make table of contents sticky on desktop (#16506) (Sam Chen)
    • a01315a docs: fix route of japanese translation site (#16542) (Tanuj Kanti)
    • 0515628 docs: use emoji instead of svg for deprecated rule (#16536) (Bryan Mishkin)
    • 68f1288 docs: set default layouts (#16484) (Percy Ma)
    • 776827a docs: init config about specifying shared configs (#16483) (Percy Ma)
    • 5c39425 docs: fix broken link to plugins (#16520) (Ádám T. Nagy)
    • c97c789 docs: Add missing no-new-native-nonconstructor docs code fence (#16503) (Brandon Mills)

    Chores

    • e94a4a9 chore: Add tests to verify #16038 is fixed (#16538) (Nicholas C. Zakas)
    • e13f194 chore: stricter validation of meta.docs.description in core rules (#16529) (Milos Djermanovic)
    • 72dbfbc chore: use pkg parameter in getNpmPackageVersion (#16525) (webxmsj)
    Changelog

    Sourced from eslint's changelog.

    v8.28.0 - November 18, 2022

    • 34c05a7 docs: Language Options page intro and tweaks (#16511) (Ben Perlmutter)
    • 3e66387 docs: add intro and edit ignoring files page (#16510) (Ben Perlmutter)
    • 436f712 docs: fix Header UI inconsistency (#16464) (Tanuj Kanti)
    • f743816 docs: switch to wrench emoji for auto-fixable rules (#16545) (Bryan Mishkin)
    • bc0547e docs: improve styles for versions and languages page (#16553) (Nitin Kumar)
    • 6070f58 docs: clarify esquery issue workaround (#16556) (Milos Djermanovic)
    • b48e4f8 docs: Command Line Interface intro and tweaks (#16535) (Ben Perlmutter)
    • b92b30f docs: Add Rules page intro and content tweaks (#16523) (Ben Perlmutter)
    • 1769b42 docs: Integrations page introduction (#16548) (Ben Perlmutter)
    • 63bce44 feat: add ignoreClassFieldInitialValues option to no-magic-numbers (#16539) (Milos Djermanovic)
    • c50ae4f fix: Ensure that dot files are found with globs. (#16550) (Nicholas C. Zakas)
    • a8d0a57 docs: make table of contents sticky on desktop (#16506) (Sam Chen)
    • 9432b67 fix: throw error for first unmatched pattern (#16533) (Milos Djermanovic)
    • 8385ecd feat: multiline properties in rule key-spacing with option align (#16532) (Francesco Trotta)
    • a4e89db feat: no-obj-calls support Intl (#16543) (Sosuke Suzuki)
    • a01315a docs: fix route of japanese translation site (#16542) (Tanuj Kanti)
    • e94a4a9 chore: Add tests to verify #16038 is fixed (#16538) (Nicholas C. Zakas)
    • 0515628 docs: use emoji instead of svg for deprecated rule (#16536) (Bryan Mishkin)
    • e76c382 fix: allow * 1 when followed by / in no-implicit-coercion (#16522) (Milos Djermanovic)
    • 68f1288 docs: set default layouts (#16484) (Percy Ma)
    • e13f194 chore: stricter validation of meta.docs.description in core rules (#16529) (Milos Djermanovic)
    • 776827a docs: init config about specifying shared configs (#16483) (Percy Ma)
    • 72dbfbc chore: use pkg parameter in getNpmPackageVersion (#16525) (webxmsj)
    • 5c39425 docs: fix broken link to plugins (#16520) (Ádám T. Nagy)
    • c97c789 docs: Add missing no-new-native-nonconstructor docs code fence (#16503) (Brandon Mills)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies chore 
    opened by dependabot[bot] 0
  • chore(deps-dev): bump prettier from 2.7.1 to 2.8.0

    chore(deps-dev): bump prettier from 2.7.1 to 2.8.0

    Bumps prettier from 2.7.1 to 2.8.0.

    Release notes

    Sourced from prettier's releases.

    2.8.0

    diff

    🔗 Release note

    Changelog

    Sourced from prettier's changelog.

    2.8.0

    diff

    🔗 Release Notes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies chore 
    opened by dependabot[bot] 0
  • chore(deps-dev): bump eslint-plugin-import from 2.25.4 to 2.26.0

    chore(deps-dev): bump eslint-plugin-import from 2.25.4 to 2.26.0

    Bumps eslint-plugin-import from 2.25.4 to 2.26.0.

    Changelog

    Sourced from eslint-plugin-import's changelog.

    [2.26.0] - 2022-04-05

    Added

    • [no-named-default, no-default-export, prefer-default-export, no-named-export, export, named, namespace, no-unused-modules]: support arbitrary module namespace names (#2358, thanks [@​sosukesuzuki])
    • [no-dynamic-require]: support dynamic import with espree (#2371, thanks [@​sosukesuzuki])
    • [no-relative-packages]: add fixer (#2381, thanks [@​forivall])

    Fixed

    • [default]: typescript-eslint-parser: avoid a crash on exporting as namespace (thanks [@​ljharb])
    • [export]/TypeScript: false positive for typescript namespace merging (#1964, thanks [@​magarcia])
    • [no-duplicates]: ignore duplicate modules in different TypeScript module declarations (#2378, thanks [@​remcohaszing])
    • [no-unused-modules]: avoid a crash when processing re-exports (#2388, thanks [@​ljharb])

    Changed

    • [Tests] no-nodejs-modules: add tests for node protocol URL (#2367, thanks [@​sosukesuzuki])
    • [Tests] default, no-anonymous-default-export, no-mutable-exports, no-named-as-default-member, no-named-as-default: add tests for arbitrary module namespace names (#2358, thanks [@​sosukesuzuki])
    • [Docs] [no-unresolved]: Fix RegExp escaping in readme (#2332, thanks [@​stephtr])
    • [Refactor] namespace: try to improve performance (#2340, thanks [@​ljharb])
    • [Docs] make rule doc titles consistent (#2393, thanks [@​TheJaredWilcurt])
    • [Docs] order: TS code examples should use TS code blocks (#2411, thanks [@​MM25Zamanian])
    • [Docs] no-unresolved: fix link (#2417, thanks [@​kylemh])
    Commits
    • d160285 Bump to 2.26.0
    • 0e80ee3 [Deps] update tsconfig-paths
    • d8633c3 [Docs] no-unresolved: fix link
    • 98bbb2c [Docs] order: TS code examples should use TS code blocks
    • 21304bd [Deps] update tsconfig-paths
    • 8b7000e [Fix] no-unused-modules: avoid a crash when processing re-exports
    • 747d6dc [Docs] make rule doc titles consistent
    • b0e6f7f [Refactor] namespace: try to improve performance
    • 00a4ede [Deps] update minimatch
    • 35bd3a5 [Dev Deps] update @angular-eslint/template-parser, chai
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies chore 
    opened by dependabot[bot] 0
  • chore(deps-dev): bump axios from 0.26.0 to 1.2.0

    chore(deps-dev): bump axios from 0.26.0 to 1.2.0

    Bumps axios from 0.26.0 to 1.2.0.

    Release notes

    Sourced from axios's releases.

    v1.2.0

    [1.2.0] - 2022-11-10

    Changed

    • changed: refactored module exports #5162
    • change: re-added support for loading Axios with require('axios').default #5225

    Fixed

    • fix: improve AxiosHeaders class #5224
    • fix: TypeScript type definitions for commonjs #5196
    • fix: type definition of use method on AxiosInterceptorManager to match the the README #5071
    • fix: __dirname is not defined in the sandbox #5269
    • fix: AxiosError.toJSON method to avoid circular references #5247
    • fix: Z_BUF_ERROR when content-encoding is set but the response body is empty #5250

    Refactors

    • refactor: allowing adapters to be loaded by name #5277

    Chores

    • chore: force CI restart #5243
    • chore: update ECOSYSTEM.md #5077
    • chore: update get/index.html #5116
    • chore: update Sandbox UI/UX #5205
    • chore:(actions): remove git credentials after checkout #5235
    • chore(actions): bump actions/dependency-review-action from 2 to 3 #5266
    • chore(packages): bump loader-utils from 1.4.1 to 1.4.2 #5295
    • chore(packages): bump engine.io from 6.2.0 to 6.2.1 #5294
    • chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 #5241
    • chore(packages): bump loader-utils from 1.4.0 to 1.4.1 #5245
    • chore(docs): update Resources links in README #5119
    • chore(docs): update the link for JSON url #5265
    • chore(docs): fix broken links #5218
    • chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md #5170
    • chore(docs): typo fix line #856 and #920 #5194
    • chore(docs): typo fix #800 #5193
    • chore(docs): fix typos #5184
    • chore(docs): fix punctuation in README.md #5197
    • chore(docs): update readme in the Handling Errors section - issue reference #5260 #5261
    • chore: remove \b from filename #5207
    • chore(docs): update CHANGELOG.md #5137
    • chore: add sideEffects false to package.json #5025

    Contributors to this release

    ... (truncated)

    Changelog

    Sourced from axios's changelog.

    [1.2.0] - 2022-11-10

    Changed

    • changed: refactored module exports #5162
    • change: re-added support for loading Axios with require('axios').default #5225

    Fixed

    • fix: improve AxiosHeaders class #5224
    • fix: TypeScript type definitions for commonjs #5196
    • fix: type definition of use method on AxiosInterceptorManager to match the the README #5071
    • fix: __dirname is not defined in the sandbox #5269
    • fix: AxiosError.toJSON method to avoid circular references #5247
    • fix: Z_BUF_ERROR when content-encoding is set but the response body is empty #5250

    Refactors

    • refactor: allowing adapters to be loaded by name #5277

    Chores

    • chore: force CI restart #5243
    • chore: update ECOSYSTEM.md #5077
    • chore: update get/index.html #5116
    • chore: update Sandbox UI/UX #5205
    • chore:(actions): remove git credentials after checkout #5235
    • chore(actions): bump actions/dependency-review-action from 2 to 3 #5266
    • chore(packages): bump loader-utils from 1.4.1 to 1.4.2 #5295
    • chore(packages): bump engine.io from 6.2.0 to 6.2.1 #5294
    • chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 #5241
    • chore(packages): bump loader-utils from 1.4.0 to 1.4.1 #5245
    • chore(docs): update Resources links in README #5119
    • chore(docs): update the link for JSON url #5265
    • chore(docs): fix broken links #5218
    • chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md #5170
    • chore(docs): typo fix line #856 and #920 #5194
    • chore(docs): typo fix #800 #5193
    • chore(docs): fix typos #5184
    • chore(docs): fix punctuation in README.md #5197
    • chore(docs): update readme in the Handling Errors section - issue reference #5260 #5261
    • chore: remove \b from filename #5207
    • chore(docs): update CHANGELOG.md #5137
    • chore: add sideEffects false to package.json #5025

    Contributors to this release

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies chore 
    opened by dependabot[bot] 0
  • feat: upgrade aspida and use DefineMethods helper for template

    feat: upgrade aspida and use DefineMethods helper for template

    Types of changes

    • [ ] Bug fixes
      • resolves #
    • [ ] Features
      • resolves #
    • [ ] Maintenance
    • [ ] Documentation

    Changes

    • ...

    Additional context

    Community note

    Please upvote with reacting as :+1: to express your agreement.

    feature 
    opened by LumaKernel 1
Releases(v0.31.1)
Full stack CQRS, DDD, Event Sourcing framework for Node.js

reSolve is a full stack functional JavaScript framework. CQRS - independent Command and Query sides. DDD Aggregate support. Event sourcing - using eve

ReImagined 709 Dec 27, 2022
This is MERN Stack Ecommerce Project Made to Teach MERN Stack on YouTube

MERN E-COMMERCE TUTORIAL Hi! My name is Abhishek Singh, I have created this tutorial to teach MERN Stack for free on YouTube. Prerequisite Must have b

Abhishek Singh 558 Jan 5, 2023
Modern framework for fast, powerful React apps

FUSION.JS Modern framework for fast, powerful React apps What is it? fu·sion — noun The process or result of joining two or more things together to fo

Fusion.js 1.5k Dec 30, 2022
🦄 0-legacy, tiny & fast web framework as a replacement of Express

tinyhttp ⚡ Tiny web framework as a replacement of Express ?? tinyhttp now has a Deno port (work in progress) tinyhttp is a modern Express-like web fra

v 1 r t l 2.4k Jan 3, 2023
wolkenkit is an open-source CQRS and event-sourcing framework based on Node.js, and it supports JavaScript and TypeScript.

wolkenkit wolkenkit is a CQRS and event-sourcing framework based on Node.js. It empowers you to build and run scalable distributed web and cloud servi

the native web 1.1k Dec 26, 2022
Elegant and all-inclusive Node.Js web framework based on TypeScript. :rocket:.

https://foalts.org What is Foal? Foal (or FoalTS) is a Node.JS framework for creating web applications. It provides a set of ready-to-use components s

FoalTS 1.7k Jan 4, 2023
A nodejs module for local and remote Inter Process Communication with full support for Linux, Mac and Windows

A nodejs module for local and remote Inter Process Communication with full support for Linux, Mac and Windows

Rifa Achrinza 15 Sep 28, 2022
A Programming Environment for TypeScript & Node.js built on top of VS Code

Programming Environment for TypeScript & Node.js A battery-included TypeScript framework built on top of Visual Studio Code Website Kretes is a progra

Kretes 677 Dec 11, 2022
Clock and task scheduler for node.js applications, providing extensive control of time and callback scheduling in prod and test code

#zeit A node.js clock and scheduler, intended to take place of the global V8 object for manipulation of time and task scheduling which would be handle

David Denton 12 Dec 21, 2021
The most powerful headless CMS for Node.js — built with GraphQL and React

A scalable platform and CMS to build Node.js applications. schema => ({ GraphQL, AdminUI }) Keystone Next is a preview of the next major release of Ke

KeystoneJS 7.3k Jan 4, 2023
:desktop_computer: Simple and powerful server for Node.js

server.js for Node.js Powerful server for Node.js that just works so you can focus on your awesome project: // Include it and extract some methods for

Francisco Presencia 3.5k Dec 31, 2022
Actionhero is a realtime multi-transport nodejs API Server with integrated cluster capabilities and delayed tasks

Actionhero The reusable, scalable, and quick node.js API server for stateless and stateful applications NPM | Web Site | Latest Docs | GitHub | Slack

Actionhero 2.3k Dec 29, 2022
:zap: RAN! React . GraphQL . Next.js Toolkit :zap: - SEO-Ready, Production-Ready, SSR, Hot-Reload, CSS-in-JS, Caching, CLI commands and more...

RAN : React . GraphQL . Next.js Toolkit New version is coming... Follow up here: https://github.com/Sly777/ran/issues/677 Features Hot-Reload Ready fo

Ilker Guller 2.2k Jan 3, 2023
A tool to develop and improve a student’s programming skills by introducing the earliest lessons of coding.

teachcode A tool to develop and improve a student’s programming skills by introducing the earliest lessons of coding. Chat: Telegram Donate: PayPal, P

madlabsinc 346 Oct 25, 2022
💻 Simple and flexible CLI Tool for your daily JIRA activity (supported on all OSes)

jirax ⭐ If you are using this tool or you like it, Star on GitHub — it helps! A CLI tool for JIRA for day to day usage with JIRA.Speed up your JIRA ac

জুনিপ 56 Oct 4, 2022
Framework agnostic CLI tool for routes parsing and generation of a type-safe helper for safe route usage. 🗺️ Remix driver included. 🤟

About routes-gen is a framework agnostic CLI tool for routes parsing and generation of a type-safe helper for safe route usage. Think of it as Prisma,

Stratulat Alexandru 192 Jan 2, 2023
This is a full-stack exercise tracker web application built using the MERN (MongoDB, ExpressJS, ReactJS, NodeJS) stack. You can easily track your exercises with this Full-Stack Web Application.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

WMouton 2 Dec 25, 2021
100% type-safe query builder for node-postgres :: Generated types, call any function, tree-shakable, implicit type casts, and more

⚠️ This library is currently in alpha. Contributors wanted! tusken Postgres client from a galaxy far, far away. your database is the source-of-truth f

alloc 54 Dec 29, 2022
Full type-safe Redis PubSub with Zod

redis-pubsub Full type-safe Redis PubSub system with async iterators Features Type-safety with Zod Out-of-the-box support for Date/Map/Set/BigInt seri

null 12 Dec 21, 2022