next-ssr-middleware 0.10.0-rc.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ReadMe.md +165 -137
- package/dist/API.d.ts +1 -1
- package/dist/API.js +3 -3
- package/dist/API.js.map +1 -1
- package/dist/SSR/middleware/local.d.ts +0 -2
- package/dist/SSR/middleware/local.js +0 -19
- package/dist/SSR/middleware/local.js.map +1 -1
- package/package.json +10 -17
- package/source/API.ts +1 -1
- package/source/SSR/middleware/local.ts +0 -17
package/ReadMe.md
CHANGED
|
@@ -1,137 +1,165 @@
|
|
|
1
|
-
# Next SSR middleware
|
|
2
|
-
|
|
3
|
-
[Koa][1]-like middlewares for [Next.js][2] **Server Side Rendering**
|
|
4
|
-
|
|
5
|
-
[][3]
|
|
6
|
-
[][4]
|
|
7
|
-
|
|
8
|
-
[][5]
|
|
9
|
-
|
|
10
|
-
## Versions
|
|
11
|
-
|
|
12
|
-
| SemVer | status | Next.js | MobX | [MobX i18n][6] |
|
|
13
|
-
| :----------: | :----------: | :-------: | :---------: | :------------: |
|
|
14
|
-
| `>=0
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} from 'next-ssr-middleware';
|
|
44
|
-
|
|
45
|
-
import
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
1
|
+
# Next SSR middleware
|
|
2
|
+
|
|
3
|
+
[Koa][1]-like middlewares for [Next.js][2] **Back-end API** & **Server Side Rendering**
|
|
4
|
+
|
|
5
|
+
[][3]
|
|
6
|
+
[][4]
|
|
7
|
+
|
|
8
|
+
[][5]
|
|
9
|
+
|
|
10
|
+
## Versions
|
|
11
|
+
|
|
12
|
+
| SemVer | status | Next.js | MobX | [MobX i18n][6] |
|
|
13
|
+
| :----------: | :----------: | :-------: | :---------: | :------------: |
|
|
14
|
+
| `>=1.0` | ✅developing | `>=15` | `>=6.11` | ❌ |
|
|
15
|
+
| `>=0.9` | ✅developing | `>=15` | `>=6.11` | `>=0.5` |
|
|
16
|
+
| `>=0.7 <0.9` | ❌deprecated | `>=9 <15` | `>=6.11` | `>=0.5` |
|
|
17
|
+
| `<0.7` | ❌deprecated | `>=9 <15` | `>=4 <6.11` | `<0.5` |
|
|
18
|
+
|
|
19
|
+
## Middlewares
|
|
20
|
+
|
|
21
|
+
1. Router
|
|
22
|
+
2. Error logger
|
|
23
|
+
3. JWT verifier
|
|
24
|
+
4. Props cache
|
|
25
|
+
5. ~~i18n loader~~ (use [MobX-i18n utility][7] directly)
|
|
26
|
+
6. OAuth 2 signer (with common providers)
|
|
27
|
+
1. GitHub
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
### Page router
|
|
32
|
+
|
|
33
|
+
#### `pages/user/[id].tsx`
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
import {
|
|
37
|
+
JWTProps,
|
|
38
|
+
RouterProps,
|
|
39
|
+
jwtVerifier,
|
|
40
|
+
cache,
|
|
41
|
+
errorLogger,
|
|
42
|
+
router
|
|
43
|
+
} from 'next-ssr-middleware';
|
|
44
|
+
|
|
45
|
+
import { User, UserModel } from '../../model/User';
|
|
46
|
+
|
|
47
|
+
type UserDetailPageProps = User & JWTProps & RouterProps;
|
|
48
|
+
|
|
49
|
+
export const getServerSideProps = compose<{ id: string }, UserDetailPageProps>(
|
|
50
|
+
jwtVerifier(), // set `JWT_SECRET` in `.env.local` first
|
|
51
|
+
cache(),
|
|
52
|
+
errorLogger,
|
|
53
|
+
router,
|
|
54
|
+
async ({ params }) => {
|
|
55
|
+
const props = await new UserModel().getOne(params!.id);
|
|
56
|
+
|
|
57
|
+
return { notFound: !props, props };
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
export default function UserDetailPage({
|
|
62
|
+
jwtPayload,
|
|
63
|
+
route,
|
|
64
|
+
name,
|
|
65
|
+
summary
|
|
66
|
+
}: UserDetailPageProps) {
|
|
67
|
+
return (
|
|
68
|
+
<>
|
|
69
|
+
<h1>
|
|
70
|
+
{name} - {route.params!.id}
|
|
71
|
+
</h1>
|
|
72
|
+
<p>{summary}</p>
|
|
73
|
+
</>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### App router
|
|
79
|
+
|
|
80
|
+
#### `middleware.ts`
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
84
|
+
import { parseHeaders } from 'next-ssr-middleware';
|
|
85
|
+
|
|
86
|
+
export const config = {
|
|
87
|
+
// Matcher ignoring `/_next/`, `/api/` & icons
|
|
88
|
+
matcher: [
|
|
89
|
+
'/((?!api|_next/static|_next/image|favicon.ico|apple-icon|icon).*)'
|
|
90
|
+
]
|
|
91
|
+
};
|
|
92
|
+
export const middleware = ({ headers }: NextRequest) =>
|
|
93
|
+
NextResponse.next({ headers: parseHeaders(headers) });
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### `app/page.tsx`
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
import { compose, withMiddleware, ServerProps } from 'next-ssr-middleware';
|
|
100
|
+
|
|
101
|
+
const getServerSideProps = compose(async () => {
|
|
102
|
+
const props = await (
|
|
103
|
+
await fetch('https://api.github.com/orgs/idea2app')
|
|
104
|
+
).json();
|
|
105
|
+
|
|
106
|
+
return { props };
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const HomePage = withMiddleware(getServerSideProps, Home);
|
|
110
|
+
|
|
111
|
+
export default HomePage;
|
|
112
|
+
|
|
113
|
+
async function Home({ params, searchParams, ...props }: ServerProps) {
|
|
114
|
+
return (
|
|
115
|
+
<>
|
|
116
|
+
<h1>Home</h1>
|
|
117
|
+
<pre>{JSON.stringify(props, null, 4)}</pre>
|
|
118
|
+
</>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### API router
|
|
124
|
+
|
|
125
|
+
Located in [`pages/api/` of a Next.js project][8] or [`api/` of a Vercel serverless project][9].
|
|
126
|
+
|
|
127
|
+
#### `pages/api/echo.ts`
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
import { createKoaRouter, withKoaRouter } from 'next-ssr-middleware';
|
|
131
|
+
|
|
132
|
+
export const config = { api: { bodyParser: false } };
|
|
133
|
+
|
|
134
|
+
const router = createKoaRouter(import.meta.url);
|
|
135
|
+
|
|
136
|
+
router
|
|
137
|
+
.get('/', async context => {
|
|
138
|
+
context.body = context.request.query;
|
|
139
|
+
})
|
|
140
|
+
.post('/', async context => {
|
|
141
|
+
context.status = 201;
|
|
142
|
+
context.body = Reflect.get(context.request, 'body');
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
export default withKoaRouter(router);
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Cases
|
|
149
|
+
|
|
150
|
+
1. https://github.com/idea2app/Next-Bootstrap-ts
|
|
151
|
+
2. https://github.com/idea2app/Lark-Next-Bootstrap-ts
|
|
152
|
+
3. https://github.com/FreeCodeCamp-Chengdu/FreeCodeCamp-Chengdu.github.io
|
|
153
|
+
4. https://github.com/kaiyuanshe/kaiyuanshe.github.io
|
|
154
|
+
5. https://github.com/kaiyuanshe/OpenHackathon-Web
|
|
155
|
+
6. https://github.com/kaiyuanshe/OSS-toolbox
|
|
156
|
+
|
|
157
|
+
[1]: https://koajs.com/
|
|
158
|
+
[2]: https://nextjs.org/
|
|
159
|
+
[3]: https://libraries.io/npm/next-ssr-middleware
|
|
160
|
+
[4]: https://github.com/idea2app/Next-SSR-middleware/actions/workflows/main.yml
|
|
161
|
+
[5]: https://nodei.co/npm/next-ssr-middleware/
|
|
162
|
+
[6]: https://github.com/idea2app/MobX-i18n
|
|
163
|
+
[7]: https://github.com/idea2app/MobX-i18n#server-side-rendering-nextjs-example
|
|
164
|
+
[8]: https://github.com/idea2app/Lark-Next-Bootstrap-ts/tree/main/pages/api
|
|
165
|
+
[9]: https://github.com/idea2app/Vercel-Node-serverless/tree/master/api
|
package/dist/API.d.ts
CHANGED
|
@@ -5,6 +5,6 @@ export type KoaCallback = ReturnType<(typeof Koa)['prototype']['callback']>;
|
|
|
5
5
|
export declare function withKoa<S, C>(...middlewares: Middleware<S, C>[]): KoaCallback;
|
|
6
6
|
export declare function withKoa<S, C>(option: KoaOption, ...middlewares: Middleware<S, C>[]): KoaCallback;
|
|
7
7
|
export declare const pageApiRouteOf: (path: string) => string;
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const createKoaRouter: <S, C extends RouterParamContext<S>>(moduleURI: string, option?: RouterOptions) => Router<S, C>;
|
|
9
9
|
export declare function withKoaRouter<S, C extends RouterParamContext<S>>(router: Router<S, C>, ...middlewares: Middleware<S, C>[]): KoaCallback;
|
|
10
10
|
export declare function withKoaRouter<S, C extends RouterParamContext<S>>(option: KoaOption, router: Router<S, C>, ...middlewares: Middleware<S, C>[]): KoaCallback;
|
package/dist/API.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createKoaRouter = exports.pageApiRouteOf = void 0;
|
|
4
4
|
exports.withKoa = withKoa;
|
|
5
5
|
exports.withKoaRouter = withKoaRouter;
|
|
6
6
|
var tslib_1 = require("tslib");
|
|
@@ -43,8 +43,8 @@ var pageApiRouteOf = function (path) {
|
|
|
43
43
|
.match(/pages(\/api\/.+)\.(j|t)s/)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.split('/[')[0]) === null || _c === void 0 ? void 0 : _c.replace(/\/index$/, '');
|
|
44
44
|
};
|
|
45
45
|
exports.pageApiRouteOf = pageApiRouteOf;
|
|
46
|
-
var
|
|
47
|
-
exports.
|
|
46
|
+
var createKoaRouter = function (moduleURI, option) { return new router_1.default(tslib_1.__assign(tslib_1.__assign({}, option), { prefix: (0, exports.pageApiRouteOf)(moduleURI) })); };
|
|
47
|
+
exports.createKoaRouter = createKoaRouter;
|
|
48
48
|
function withKoaRouter() {
|
|
49
49
|
var _a, _b;
|
|
50
50
|
var parameters = [];
|
package/dist/API.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"API.js","sourceRoot":"","sources":["../source/API.ts"],"names":[],"mappings":";;;AAaA,0BAcC;AAsBD,sCAiBC;;AAlED,uEAAyC;AACzC,+DAAwE;AACxE,oDAAsC;AAWtC,SAAgB,OAAO;;IAAO,oBAAoB;SAApB,UAAoB,EAApB,qBAAoB,EAApB,IAAoB;QAApB,+BAAoB;;IAC9C,IAAI,MAA6B,CAAC;IAClC,IAAI,WAAW,GAAuB,EAAE,CAAC;IAEzC,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,GAAG,SAAS,CAAC;QACnB,WAAW,GAAG,UAAU,CAAC;IAC7B,CAAC;;QAAM,KAAA,eAA2B,UAAU,CAAA,EAApC,MAAM,QAAA,EAAK,WAAW,cAAA,CAAe;IAE7C,IAAM,GAAG,GAAG,IAAI,aAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAA,oBAAU,GAAE,CAAC,CAAC;;QAE9C,KAAyB,IAAA,gBAAA,iBAAA,WAAW,CAAA,wCAAA;YAA/B,IAAM,UAAU,wBAAA;YAAiB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAAA;;;;;;;;;IAE1D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAEM,IAAM,cAAc,GAAG,UAAC,IAAY;;IACvC,OAAA,MAAA,MAAA,MAAA,SAAS,CAAC,IAAI,CAAC;SACV,KAAK,CAAC,0BAA0B,CAAC,0CAAG,CAAC,CAAC,0CACrC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,0CACd,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;CAAA,CAAC;AAJrB,QAAA,cAAc,kBAIO;AAE3B,IAAM,
|
|
1
|
+
{"version":3,"file":"API.js","sourceRoot":"","sources":["../source/API.ts"],"names":[],"mappings":";;;AAaA,0BAcC;AAsBD,sCAiBC;;AAlED,uEAAyC;AACzC,+DAAwE;AACxE,oDAAsC;AAWtC,SAAgB,OAAO;;IAAO,oBAAoB;SAApB,UAAoB,EAApB,qBAAoB,EAApB,IAAoB;QAApB,+BAAoB;;IAC9C,IAAI,MAA6B,CAAC;IAClC,IAAI,WAAW,GAAuB,EAAE,CAAC;IAEzC,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,GAAG,SAAS,CAAC;QACnB,WAAW,GAAG,UAAU,CAAC;IAC7B,CAAC;;QAAM,KAAA,eAA2B,UAAU,CAAA,EAApC,MAAM,QAAA,EAAK,WAAW,cAAA,CAAe;IAE7C,IAAM,GAAG,GAAG,IAAI,aAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAA,oBAAU,GAAE,CAAC,CAAC;;QAE9C,KAAyB,IAAA,gBAAA,iBAAA,WAAW,CAAA,wCAAA;YAA/B,IAAM,UAAU,wBAAA;YAAiB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAAA;;;;;;;;;IAE1D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAEM,IAAM,cAAc,GAAG,UAAC,IAAY;;IACvC,OAAA,MAAA,MAAA,MAAA,SAAS,CAAC,IAAI,CAAC;SACV,KAAK,CAAC,0BAA0B,CAAC,0CAAG,CAAC,CAAC,0CACrC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,0CACd,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;CAAA,CAAC;AAJrB,QAAA,cAAc,kBAIO;AAE3B,IAAM,eAAe,GAAG,UAC3B,SAAiB,EACjB,MAAsB,IACrB,OAAA,IAAI,gBAAM,uCAAY,MAAM,KAAE,MAAM,EAAE,IAAA,sBAAc,EAAC,SAAS,CAAC,IAAG,EAAlE,CAAkE,CAAC;AAH3D,QAAA,eAAe,mBAG4C;AAWxE,SAAgB,aAAa;;IACzB,oBAAoB;SAApB,UAAoB,EAApB,qBAAoB,EAApB,IAAoB;QAApB,+BAAoB;;IAEpB,IAAI,MAA6B,CAAC;IAClC,IAAI,MAAoB,CAAC;IACzB,IAAI,WAAW,GAAuB,EAAE,CAAC;IAEzC,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU;QACnC,KAAA,eAA2B,UAAU,CAAA,EAApC,MAAM,QAAA,EAAK,WAAW,cAAA,CAAe;;QACrC,KAAA,eAAmC,UAAU,CAAA,EAA5C,MAAM,QAAA,EAAE,MAAM,QAAA,EAAK,WAAW,cAAA,CAAe;IAEnD,OAAO,OAAO,sCACV,MAAM;QACN,MAAM,CAAC,MAAM,EAAE;QACf,MAAM,CAAC,cAAc,EAAE,kBACpB,WAAW,WAChB;AACN,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { JwtPayload, VerifyOptions } from 'jsonwebtoken';
|
|
2
|
-
import { TranslationModel } from 'mobx-i18n';
|
|
3
2
|
import { GetServerSidePropsContext, GetServerSidePropsResult } from 'next';
|
|
4
3
|
import { ParsedUrlQuery } from 'querystring';
|
|
5
4
|
import { DataObject, Middleware } from '../compose';
|
|
@@ -13,4 +12,3 @@ export interface JWTProps<T extends DataObject = {}> {
|
|
|
13
12
|
}
|
|
14
13
|
export declare function jwtVerifier<I extends DataObject, O extends DataObject = {}>(tokenKey?: string, secretKey?: string, options?: VerifyOptions): Middleware<I, O & JWTProps>;
|
|
15
14
|
export declare function cache<I extends DataObject, O extends DataObject = {}>(oneInterval?: number, allInterval?: number): Middleware<I, O>;
|
|
16
|
-
export declare function translator<I extends DataObject, O extends DataObject = {}>(i18n: TranslationModel<string, string>): Middleware<I, O>;
|
|
@@ -4,11 +4,9 @@ exports.errorLogger = errorLogger;
|
|
|
4
4
|
exports.router = router;
|
|
5
5
|
exports.jwtVerifier = jwtVerifier;
|
|
6
6
|
exports.cache = cache;
|
|
7
|
-
exports.translator = translator;
|
|
8
7
|
var tslib_1 = require("tslib");
|
|
9
8
|
var jsonwebtoken_1 = require("jsonwebtoken");
|
|
10
9
|
var koajax_1 = require("koajax");
|
|
11
|
-
var mobx_i18n_1 = require("mobx-i18n");
|
|
12
10
|
var web_utility_1 = require("web-utility");
|
|
13
11
|
function errorLogger(context, next) {
|
|
14
12
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
@@ -121,21 +119,4 @@ function cache(oneInterval, allInterval) {
|
|
|
121
119
|
});
|
|
122
120
|
}); });
|
|
123
121
|
}
|
|
124
|
-
function translator(i18n) {
|
|
125
|
-
var _this = this;
|
|
126
|
-
return function (_a, next_1) { return tslib_1.__awaiter(_this, [_a, next_1], void 0, function (_b, next) {
|
|
127
|
-
var _c, language, languages;
|
|
128
|
-
var _d = _b.req, headers = _d.headers, cookies = _d.cookies;
|
|
129
|
-
return tslib_1.__generator(this, function (_e) {
|
|
130
|
-
switch (_e.label) {
|
|
131
|
-
case 0:
|
|
132
|
-
_c = cookies.language, language = _c === void 0 ? '' : _c, languages = (0, mobx_i18n_1.parseLanguageHeader)(headers['accept-language'] || '');
|
|
133
|
-
return [4 /*yield*/, i18n.loadLanguages(tslib_1.__spreadArray([language], tslib_1.__read(languages), false).filter(Boolean))];
|
|
134
|
-
case 1:
|
|
135
|
-
_e.sent();
|
|
136
|
-
return [2 /*return*/, next()];
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}); };
|
|
140
|
-
}
|
|
141
122
|
//# sourceMappingURL=local.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../source/SSR/middleware/local.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../source/SSR/middleware/local.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-ssr-middleware",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"license": "LGPL-3.0-or-later",
|
|
5
5
|
"author": "shiy2008@gmail.com",
|
|
6
|
-
"description": "Koa-like middlewares for Next.js Server Side Rendering",
|
|
6
|
+
"description": "Koa-like middlewares for Next.js Back-end API & Server Side Rendering",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"koa",
|
|
9
9
|
"middleware",
|
|
@@ -22,37 +22,30 @@
|
|
|
22
22
|
"types": "dist/index.d.ts",
|
|
23
23
|
"main": "dist/index.js",
|
|
24
24
|
"dependencies": {
|
|
25
|
+
"@koa/bodyparser": "^5.1.1",
|
|
26
|
+
"@koa/router": "^13.1.0",
|
|
25
27
|
"@types/jsonwebtoken": "^9.0.9",
|
|
26
28
|
"@types/koa": "^2.15.0",
|
|
27
29
|
"@types/koa__router": "^12.0.4",
|
|
28
|
-
"@types/react": "
|
|
30
|
+
"@types/react": "^19.1.3",
|
|
31
|
+
"jsonwebtoken": "^9.0.2",
|
|
32
|
+
"koa": ">=2",
|
|
29
33
|
"tslib": "^2.8.1",
|
|
30
34
|
"web-utility": "^4.4.3"
|
|
31
35
|
},
|
|
32
36
|
"peerDependencies": {
|
|
33
|
-
"@koa/bodyparser": ">=5",
|
|
34
|
-
"@koa/router": ">=13",
|
|
35
|
-
"jsonwebtoken": ">=9",
|
|
36
|
-
"koa": ">=2",
|
|
37
|
-
"mobx-i18n": ">=0.5 <1",
|
|
38
37
|
"next": ">=9.3",
|
|
39
38
|
"react": ">=18"
|
|
40
39
|
},
|
|
41
40
|
"devDependencies": {
|
|
42
|
-
"@
|
|
43
|
-
"@koa/router": "^13.1.0",
|
|
44
|
-
"@types/node": "^22.15.2",
|
|
45
|
-
"@types/react": "^19.1.2",
|
|
41
|
+
"@types/node": "^22.15.14",
|
|
46
42
|
"husky": "^9.1.7",
|
|
47
|
-
"jsonwebtoken": "^9.0.2",
|
|
48
|
-
"koa": "^2.16.1",
|
|
49
43
|
"koajax": "^3.1.2",
|
|
50
|
-
"lint-staged": "^15.5.
|
|
51
|
-
"mobx-i18n": "^0.6.0",
|
|
44
|
+
"lint-staged": "^15.5.2",
|
|
52
45
|
"next": "^15.3.1",
|
|
53
46
|
"open-cli": "^8.0.0",
|
|
54
47
|
"prettier": "^3.5.3",
|
|
55
|
-
"typedoc": "^0.28.
|
|
48
|
+
"typedoc": "^0.28.4",
|
|
56
49
|
"typescript": "~5.8.3"
|
|
57
50
|
},
|
|
58
51
|
"prettier": {
|
package/source/API.ts
CHANGED
|
@@ -33,7 +33,7 @@ export const pageApiRouteOf = (path: string) =>
|
|
|
33
33
|
?.split('/[')[0]
|
|
34
34
|
?.replace(/\/index$/, '');
|
|
35
35
|
|
|
36
|
-
export const
|
|
36
|
+
export const createKoaRouter = <S, C extends RouterParamContext<S>>(
|
|
37
37
|
moduleURI: string,
|
|
38
38
|
option?: RouterOptions
|
|
39
39
|
) => new Router<S, C>({ ...option, prefix: pageApiRouteOf(moduleURI) });
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { JwtPayload, VerifyOptions, verify } from 'jsonwebtoken';
|
|
2
2
|
import { HTTPError } from 'koajax';
|
|
3
|
-
import { TranslationModel, parseLanguageHeader } from 'mobx-i18n';
|
|
4
3
|
import { GetServerSidePropsContext, GetServerSidePropsResult } from 'next';
|
|
5
4
|
import { ParsedUrlQuery } from 'querystring';
|
|
6
5
|
import { Day, Second } from 'web-utility';
|
|
@@ -126,19 +125,3 @@ export function cache<I extends DataObject, O extends DataObject = {}>(
|
|
|
126
125
|
return data || cache.buffer;
|
|
127
126
|
}) as Middleware<I, O>;
|
|
128
127
|
}
|
|
129
|
-
|
|
130
|
-
export function translator<I extends DataObject, O extends DataObject = {}>(
|
|
131
|
-
i18n: TranslationModel<string, string>
|
|
132
|
-
): Middleware<I, O> {
|
|
133
|
-
return async (
|
|
134
|
-
{ req: { headers, cookies } }: GetServerSidePropsContext<I>,
|
|
135
|
-
next: () => Promise<GetServerSidePropsResult<O>>
|
|
136
|
-
) => {
|
|
137
|
-
const { language = '' } = cookies,
|
|
138
|
-
languages = parseLanguageHeader(headers['accept-language'] || '');
|
|
139
|
-
|
|
140
|
-
await i18n.loadLanguages([language, ...languages].filter(Boolean));
|
|
141
|
-
|
|
142
|
-
return next();
|
|
143
|
-
};
|
|
144
|
-
}
|