Skip to content

Commit 6e16911

Browse files
authored
Merge pull request #66 from frouriojs/develop
chore(release): 0.25.0
2 parents 617d6bd + 6043c04 commit 6e16911

File tree

52 files changed

+870
-139
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+870
-139
lines changed

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dist

.vscode/settings.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
"editor.codeActionsOnSave": {
44
"source.fixAll.eslint": true
55
},
6+
"editor.defaultFormatter": "esbenp.prettier-vscode",
7+
"editor.formatOnSave": true,
68
"typescript.tsdk": "node_modules/typescript/lib"
79
}

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [0.25.0](https://github.com/frouriojs/frourio-express/compare/v0.24.1...v0.25.0) (2021-04-22)
6+
7+
8+
### Features
9+
10+
* add prettier-ignore comments ([b07fed1](https://github.com/frouriojs/frourio-express/commit/b07fed1bb268b8289fbf031fd19c46fa47fd0ca2))
11+
512
### [0.24.1](https://github.com/frouriojs/frourio-express/compare/v0.24.0...v0.24.1) (2021-03-10)
613

714

package.json

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "frourio-express",
3-
"version": "0.24.1",
3+
"version": "0.25.0",
44
"description": "Fast and type-safe full stack framework, for TypeScript",
55
"author": "Solufa <[email protected]>",
66
"license": "MIT",
@@ -31,7 +31,7 @@
3131
"release:major": "npm run release -- --release-as major",
3232
"release:minor": "npm run release -- --release-as minor",
3333
"release:patch": "npm run release -- --release-as patch",
34-
"lint": "eslint --ext .js,.ts --ignore-path .gitignore .",
34+
"lint": "eslint --ext .js,.ts --ignore-path .gitignore . && prettier --check \"./**/*.ts\"",
3535
"lint:fix": "npm run lint -- --fix",
3636
"test": "jest",
3737
"typecheck": "tsc --noEmit"
@@ -46,7 +46,6 @@
4646
"standard",
4747
"plugin:@typescript-eslint/recommended",
4848
"plugin:jest/recommended",
49-
"plugin:prettier/recommended",
5049
"prettier"
5150
],
5251
"parserOptions": {
@@ -83,40 +82,39 @@
8382
]
8483
},
8584
"dependencies": {
86-
"aspida": "^1.6.3",
87-
"fast-json-stringify": "^2.5.0",
85+
"aspida": "^1.7.0",
86+
"fast-json-stringify": "^2.6.0",
8887
"velona": "^0.7.0"
8988
},
9089
"devDependencies": {
91-
"@aspida/axios": "^1.6.3",
92-
"@aspida/node-fetch": "^1.6.3",
90+
"@aspida/axios": "^1.7.0",
91+
"@aspida/node-fetch": "^1.7.0",
9392
"@types/express": "^4.17.7",
94-
"@types/jest": "^26.0.20",
93+
"@types/jest": "^26.0.22",
9594
"@types/multer": "^1.4.5",
96-
"@types/node-fetch": "^2.5.8",
95+
"@types/node-fetch": "^2.5.10",
9796
"@types/rimraf": "^3.0.0",
98-
"@typescript-eslint/eslint-plugin": "^4.17.0",
99-
"@typescript-eslint/parser": "^4.17.0",
97+
"@typescript-eslint/eslint-plugin": "^4.22.0",
98+
"@typescript-eslint/parser": "^4.22.0",
10099
"axios": "^0.21.1",
101100
"class-validator": "^0.13.1",
102-
"eslint": "^7.21.0",
103-
"eslint-config-prettier": "^8.1.0",
101+
"eslint": "^7.24.0",
102+
"eslint-config-prettier": "^8.2.0",
104103
"eslint-config-standard": "^16.0.2",
105104
"eslint-plugin-import": "^2.22.1",
106-
"eslint-plugin-jest": "^24.2.0",
105+
"eslint-plugin-jest": "^24.3.5",
107106
"eslint-plugin-node": "^11.1.0",
108-
"eslint-plugin-prettier": "^3.3.1",
109-
"eslint-plugin-promise": "^4.3.1",
107+
"eslint-plugin-promise": "^5.1.0",
110108
"eslint-plugin-standard": "^5.0.0",
111109
"express": "^4.17.1",
112110
"jest": "^26.6.3",
113111
"multer": "^1.4.2",
114112
"node-fetch": "^2.6.1",
115113
"prettier": "^2.2.1",
116114
"rimraf": "^3.0.2",
117-
"standard-version": "^9.1.1",
118-
"ts-jest": "^26.5.3",
115+
"standard-version": "^9.2.0",
116+
"ts-jest": "^26.5.5",
119117
"ts-node": "^9.1.1",
120-
"typescript": "^4.2.3"
118+
"typescript": "^4.2.4"
121119
}
122120
}

servers/all/$server.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,73 @@
11
/* eslint-disable */
2+
// prettier-ignore
23
import path from 'path'
4+
// prettier-ignore
35
import express, { Express, RequestHandler, Request } from 'express'
6+
// prettier-ignore
47
import multer, { Options } from 'multer'
8+
// prettier-ignore
59
import { validateOrReject, ValidatorOptions } from 'class-validator'
10+
// prettier-ignore
611
import fastJson, { Schema } from 'fast-json-stringify'
12+
// prettier-ignore
713
import * as Validators from './validators'
14+
// prettier-ignore
815
import hooksFn0 from './api/hooks'
16+
// prettier-ignore
917
import hooksFn1 from './api/empty/hooks'
18+
// prettier-ignore
1019
import hooksFn2 from './api/users/hooks'
20+
// prettier-ignore
1121
import hooksFn3 from './api/users/_userId@number/_name/hooks'
22+
// prettier-ignore
1223
import controllerFn0, { hooks as ctrlHooksFn0, responseSchema as responseSchemaFn0 } from './api/controller'
24+
// prettier-ignore
1325
import controllerFn1 from './api/500/controller'
26+
// prettier-ignore
1427
import controllerFn2 from './api/empty/noEmpty/controller'
28+
// prettier-ignore
1529
import controllerFn3 from './api/multiForm/controller'
30+
// prettier-ignore
1631
import controllerFn4 from './api/texts/controller'
32+
// prettier-ignore
1733
import controllerFn5 from './api/texts/sample/controller'
34+
// prettier-ignore
1835
import controllerFn6 from './api/texts/_label@string/controller'
36+
// prettier-ignore
1937
import controllerFn7, { hooks as ctrlHooksFn1 } from './api/users/controller'
38+
// prettier-ignore
2039
import controllerFn8 from './api/users/_userId@number/controller'
40+
// prettier-ignore
2141
import controllerFn9 from './api/users/_userId@number/_name/controller'
42+
// prettier-ignore
2243
import type { ReadStream } from 'fs'
44+
// prettier-ignore
2345
import type { LowerHttpMethod, AspidaMethods, HttpStatusOk, AspidaMethodParams } from 'aspida'
2446

47+
// prettier-ignore
2548
export type FrourioOptions = {
2649
basePath?: string
2750
validator?: ValidatorOptions
2851
multer?: Options
2952
}
3053

54+
// prettier-ignore
3155
export type MulterFile = Express.Multer.File
3256

57+
// prettier-ignore
3358
type HttpStatusNoOk = 301 | 302 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 409 | 500 | 501 | 502 | 503 | 504 | 505
3459

60+
// prettier-ignore
3561
type PartiallyPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
3662

63+
// prettier-ignore
3764
type BaseResponse<T, U, V> = {
3865
status: V extends number ? V : HttpStatusOk
3966
body: T
4067
headers: U
4168
}
4269

70+
// prettier-ignore
4371
type ServerResponse<K extends AspidaMethodParams> =
4472
| (K extends { resBody: K['resBody']; resHeaders: K['resHeaders'] }
4573
? BaseResponse<K['resBody'], K['resHeaders'], K['status']>
@@ -53,6 +81,7 @@ type ServerResponse<K extends AspidaMethodParams> =
5381
>)
5482
| PartiallyPartial<BaseResponse<any, any, HttpStatusNoOk>, 'body' | 'headers'>
5583

84+
// prettier-ignore
5685
type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
5786
? {
5887
[P in keyof T['reqBody']]: Required<T['reqBody']>[P] extends Blob | ReadStream
@@ -63,6 +92,7 @@ type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
6392
}
6493
: T['reqBody']
6594

95+
// prettier-ignore
6696
type RequestParams<T extends AspidaMethodParams> = Pick<{
6797
query: T['query']
6898
body: BlobToFile<T>
@@ -73,12 +103,14 @@ type RequestParams<T extends AspidaMethodParams> = Pick<{
73103
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
74104
}['query' | 'body' | 'headers']>
75105

106+
// prettier-ignore
76107
export type ServerMethods<T extends AspidaMethods, U extends Record<string, any> = {}> = {
77108
[K in keyof T]: (
78109
req: RequestParams<T[K]> & U
79110
) => ServerResponse<T[K]> | Promise<ServerResponse<T[K]>>
80111
}
81112

113+
// prettier-ignore
82114
const parseNumberTypeQueryParams = (numberTypeParams: [string, boolean, boolean][]): RequestHandler => ({ query }, res, next) => {
83115
for (const [key, isOptional, isArray] of numberTypeParams) {
84116
const param = query[key]
@@ -107,6 +139,7 @@ const parseNumberTypeQueryParams = (numberTypeParams: [string, boolean, boolean]
107139
next()
108140
}
109141

142+
// prettier-ignore
110143
const parseBooleanTypeQueryParams = (booleanTypeParams: [string, boolean, boolean][]): RequestHandler => ({ query }, res, next) => {
111144
for (const [key, isOptional, isArray] of booleanTypeParams) {
112145
const param = query[key]
@@ -135,9 +168,11 @@ const parseBooleanTypeQueryParams = (booleanTypeParams: [string, boolean, boolea
135168
next()
136169
}
137170

171+
// prettier-ignore
138172
const callParserIfExistsQuery = (parser: RequestHandler): RequestHandler => (req, res, next) =>
139173
Object.keys(req.query).length ? parser(req, res, next) : next()
140174

175+
// prettier-ignore
141176
const parseJSONBoby: RequestHandler = (req, res, next) => {
142177
express.json()(req, res, err => {
143178
if (err) return res.sendStatus(400)
@@ -146,6 +181,7 @@ const parseJSONBoby: RequestHandler = (req, res, next) => {
146181
})
147182
}
148183

184+
// prettier-ignore
149185
const createTypedParamsHandler = (numberTypeParams: string[]): RequestHandler => (req, res, next) => {
150186
const params: Record<string, string | number> = req.params
151187

@@ -160,9 +196,11 @@ const createTypedParamsHandler = (numberTypeParams: string[]): RequestHandler =>
160196
next()
161197
}
162198

199+
// prettier-ignore
163200
const createValidateHandler = (validators: (req: Request) => (Promise<void> | null)[]): RequestHandler =>
164201
(req, res, next) => Promise.all(validators(req)).then(() => next()).catch(err => res.status(400).send(err))
165202

203+
// prettier-ignore
166204
const formatMulterData = (arrayTypeKeys: [string, boolean][]): RequestHandler => ({ body, files }, _res, next) => {
167205
for (const [key] of arrayTypeKeys) {
168206
if (body[key] === undefined) body[key] = []
@@ -186,6 +224,7 @@ const formatMulterData = (arrayTypeKeys: [string, boolean][]): RequestHandler =>
186224
next()
187225
}
188226

227+
// prettier-ignore
189228
const methodToHandler = (
190229
methodCallback: ServerMethods<any, any>[LowerHttpMethod]
191230
): RequestHandler => (req, res, next) => {
@@ -204,6 +243,7 @@ const methodToHandler = (
204243
}
205244
}
206245

246+
// prettier-ignore
207247
const asyncMethodToHandler = (
208248
methodCallback: ServerMethods<any, any>[LowerHttpMethod]
209249
): RequestHandler => async (req, res, next) => {
@@ -222,6 +262,7 @@ const asyncMethodToHandler = (
222262
}
223263
}
224264

265+
// prettier-ignore
225266
const asyncMethodToHandlerWithSchema = (
226267
methodCallback: ServerMethods<any, any>[LowerHttpMethod],
227268
schema: { [K in HttpStatusOk]?: Schema }
@@ -261,6 +302,7 @@ const asyncMethodToHandlerWithSchema = (
261302
}
262303
}
263304

305+
// prettier-ignore
264306
export default (app: Express, options: FrourioOptions = {}) => {
265307
const basePath = options.basePath ?? ''
266308
const validatorOptions: ValidatorOptions = { validationError: { target: false }, ...options.validator }

servers/all/api/$api.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
/* eslint-disable */
2+
// prettier-ignore
23
import { AspidaClient, BasicHeaders, dataToURLString } from 'aspida'
4+
// prettier-ignore
35
import { Methods as Methods0 } from '.'
6+
// prettier-ignore
47
import { Methods as Methods1 } from './500'
8+
// prettier-ignore
59
import { Methods as Methods2 } from './empty/noEmpty'
10+
// prettier-ignore
611
import { Methods as Methods3 } from './multiForm'
12+
// prettier-ignore
713
import { Methods as Methods4 } from './texts'
14+
// prettier-ignore
815
import { Methods as Methods5 } from './texts/_label@string'
16+
// prettier-ignore
917
import { Methods as Methods6 } from './texts/sample'
18+
// prettier-ignore
1019
import { Methods as Methods7 } from './users'
20+
// prettier-ignore
1121
import { Methods as Methods8 } from './users/_userId@number'
22+
// prettier-ignore
1223
import { Methods as Methods9 } from './users/_userId@number/_name'
1324

25+
// prettier-ignore
1426
const api = <T>({ baseURL, fetch }: AspidaClient<T>) => {
1527
const prefix = (baseURL === undefined ? '' : baseURL).replace(/\/$/, '')
1628
const PATH0 = '/500'
@@ -123,5 +135,7 @@ const api = <T>({ baseURL, fetch }: AspidaClient<T>) => {
123135
}
124136
}
125137

138+
// prettier-ignore
126139
export type ApiInstance = ReturnType<typeof api>
140+
// prettier-ignore
127141
export default api

servers/all/api/$relay.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,46 @@
11
/* eslint-disable */
2+
// prettier-ignore
23
import { Injectable, depend } from 'velona'
4+
// prettier-ignore
35
import type { Express, RequestHandler } from 'express'
6+
// prettier-ignore
47
import type { Schema } from 'fast-json-stringify'
8+
// prettier-ignore
59
import type { HttpStatusOk } from 'aspida'
10+
// prettier-ignore
611
import type { ServerMethods } from '../$server'
12+
// prettier-ignore
713
import type { Methods } from './'
814

15+
// prettier-ignore
916
type Hooks = {
1017
onRequest?: RequestHandler | RequestHandler[]
1118
preParsing?: RequestHandler | RequestHandler[]
1219
preValidation?: RequestHandler | RequestHandler[]
1320
preHandler?: RequestHandler | RequestHandler[]
1421
}
22+
// prettier-ignore
1523
type ControllerMethods = ServerMethods<Methods>
1624

25+
// prettier-ignore
1726
export function defineResponseSchema<T extends { [U in keyof ControllerMethods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1827
return methods
1928
}
2029

30+
// prettier-ignore
2131
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
32+
// prettier-ignore
2233
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
34+
// prettier-ignore
2335
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: (deps: T, app: Express) => Hooks) {
2436
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2537
}
2638

39+
// prettier-ignore
2740
export function defineController(methods: (app: Express) => ControllerMethods): (app: Express) => ControllerMethods
41+
// prettier-ignore
2842
export function defineController<T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => ControllerMethods): Injectable<T, [Express], ControllerMethods>
43+
// prettier-ignore
2944
export function defineController<T extends Record<string, any>>(methods: (app: Express) => ControllerMethods | T, cb?: (deps: T, app: Express) => ControllerMethods) {
3045
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3146
}

0 commit comments

Comments
 (0)