remult 0.14.28 → 0.14.31
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/esm/remult-express.d.ts +2 -2
- package/esm/remult-fastify.d.ts +2 -2
- package/esm/remult-fastify.js +1 -1
- package/esm/remult-fresh.d.ts +22 -0
- package/esm/remult-fresh.js +43 -0
- package/esm/remult-middleware.d.ts +4 -3
- package/esm/remult-middleware.js +2 -1
- package/esm/server/expressBridge.d.ts +11 -13
- package/esm/server/expressBridge.js +13 -8
- package/esm/src/backend-tests/test-http-server.backend-spec.js +8 -8
- package/esm/src/context.d.ts +1 -6
- package/package.json +5 -1
- package/readme.md +2 -2
- package/remult-express.d.ts +2 -2
- package/remult-fastify.d.ts +2 -2
- package/remult-fastify.js +1 -1
- package/remult-fresh.d.ts +22 -0
- package/remult-fresh.js +63 -0
- package/remult-middleware.d.ts +4 -3
- package/remult-middleware.js +3 -2
- package/server/expressBridge.d.ts +11 -13
- package/server/expressBridge.js +24 -14
- package/src/backend-tests/test-http-server.backend-spec.js +8 -8
- package/src/context.d.ts +1 -6
package/esm/remult-express.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function remultExpress(options?:
|
|
1
|
+
import { RemultServerOptions } from './server/expressBridge';
|
|
2
|
+
export declare function remultExpress(options?: RemultServerOptions & {
|
|
3
3
|
bodyParser?: boolean;
|
|
4
4
|
bodySizeLimit?: string;
|
|
5
5
|
}): import("express-serve-static-core").Router & {
|
package/esm/remult-fastify.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { FastifyPluginCallback } from 'fastify';
|
|
2
|
-
import { RemultServer,
|
|
3
|
-
export declare function remultFastify(options:
|
|
2
|
+
import { RemultServer, RemultServerOptions } from './server/expressBridge';
|
|
3
|
+
export declare function remultFastify(options: RemultServerOptions): FastifyPluginCallback & RemultServer;
|
package/esm/remult-fastify.js
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RemultServerOptions, RemultServer } from "./server/expressBridge";
|
|
2
|
+
import { Remult } from "./src/context";
|
|
3
|
+
export declare function remultFresh(options: RemultServerOptions, response: FreshResponse): RemultFresh;
|
|
4
|
+
export interface RemultFresh extends RemultServer {
|
|
5
|
+
handle(req: FreshRequest, ctx: FreshContext): Promise<FreshResponse>;
|
|
6
|
+
}
|
|
7
|
+
export interface FreshRequest {
|
|
8
|
+
url: string;
|
|
9
|
+
method: string;
|
|
10
|
+
json: () => Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
export interface FreshContext {
|
|
13
|
+
next: () => Promise<any>;
|
|
14
|
+
state: FreshRemultState;
|
|
15
|
+
}
|
|
16
|
+
export interface FreshResponse {
|
|
17
|
+
new (body?: any | undefined, init?: ResponseInit): any;
|
|
18
|
+
json(data: unknown, init?: ResponseInit): any;
|
|
19
|
+
}
|
|
20
|
+
export interface FreshRemultState {
|
|
21
|
+
remult: Remult;
|
|
22
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { remultMiddleware } from "./remult-middleware";
|
|
2
|
+
export function remultFresh(options, response) {
|
|
3
|
+
const mw = remultMiddleware(options);
|
|
4
|
+
const orig = mw.handle;
|
|
5
|
+
return {
|
|
6
|
+
...mw,
|
|
7
|
+
...{
|
|
8
|
+
handle: async (req, ctx) => {
|
|
9
|
+
const theReq = {
|
|
10
|
+
method: req.method,
|
|
11
|
+
url: req.url,
|
|
12
|
+
body: undefined
|
|
13
|
+
};
|
|
14
|
+
switch (req.method.toLocaleLowerCase()) {
|
|
15
|
+
case "put":
|
|
16
|
+
case "post":
|
|
17
|
+
console.log(req);
|
|
18
|
+
theReq.body = await req.json();
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
let init = {};
|
|
22
|
+
const res = await orig(theReq);
|
|
23
|
+
if (res) {
|
|
24
|
+
if (res.statusCode)
|
|
25
|
+
init.status = res.statusCode;
|
|
26
|
+
if (res.data) {
|
|
27
|
+
console.log({ init, res });
|
|
28
|
+
return response.json(res.data, init);
|
|
29
|
+
}
|
|
30
|
+
else
|
|
31
|
+
return new response(undefined, init);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const remult = await mw.getRemult(req);
|
|
35
|
+
ctx.state.remult = remult;
|
|
36
|
+
return ctx.next();
|
|
37
|
+
}
|
|
38
|
+
;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { GenericRequest,
|
|
2
|
-
export declare function remultMiddleware(options?:
|
|
3
|
-
export interface RemultMiddleware extends
|
|
1
|
+
import { GenericRequest, GenericMiddleware, GenericResponse, GenericRouter, buildRemultServer, RemultServerOptions, SpecificRoute, RemultServer } from './server/expressBridge';
|
|
2
|
+
export declare function remultMiddleware(options?: RemultServerOptions): RemultMiddleware;
|
|
3
|
+
export interface RemultMiddleware extends GenericMiddleware, RemultServer {
|
|
4
4
|
handle(req: GenericRequest, gRes?: GenericResponse): Promise<MiddlewareResponse>;
|
|
5
5
|
}
|
|
6
6
|
export interface MiddlewareResponse {
|
|
7
7
|
data?: any;
|
|
8
8
|
statusCode?: number;
|
|
9
9
|
}
|
|
10
|
+
export { GenericRequest, GenericMiddleware as GenericRequestHandler, GenericResponse, GenericRouter, buildRemultServer, RemultServerOptions as RemultMiddlewareOptions, SpecificRoute, RemultServer };
|
package/esm/remult-middleware.js
CHANGED
|
@@ -6,7 +6,7 @@ export function remultMiddleware(options) {
|
|
|
6
6
|
getRemult: (req) => server.getRemult(req),
|
|
7
7
|
openApiDoc: (options) => server.openApiDoc(options),
|
|
8
8
|
addArea: x => server.addArea(x),
|
|
9
|
-
handle: req => m.handle(req)
|
|
9
|
+
handle: (req, res) => m.handle(req, res)
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
12
|
class middleware {
|
|
@@ -114,3 +114,4 @@ class middleware {
|
|
|
114
114
|
next();
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
export { buildRemultServer };
|
|
@@ -5,7 +5,7 @@ import { AllowedForInstance, Remult, UserInfo } from '../src/context';
|
|
|
5
5
|
import { ClassType } from '../classType';
|
|
6
6
|
import { Repository } from '../src/remult3';
|
|
7
7
|
import { IdEntity } from '../src/id-entity';
|
|
8
|
-
export declare type
|
|
8
|
+
export declare type RemultServerOptions = {
|
|
9
9
|
/** Sets a database connection for Remult.
|
|
10
10
|
*
|
|
11
11
|
* @see [Connecting to a Database](https://remult.dev/docs/databases.html).
|
|
@@ -14,17 +14,17 @@ export declare type RemultMiddlewareOptions = {
|
|
|
14
14
|
disableAutoApi?: boolean;
|
|
15
15
|
queueStorage?: QueueStorage;
|
|
16
16
|
initRequest?: (remult: Remult, origReq: GenericRequest) => Promise<void>;
|
|
17
|
+
getUser?: (request: GenericRequest) => Promise<UserInfo>;
|
|
17
18
|
initApi?: (remult: Remult) => void | Promise<void>;
|
|
18
19
|
logApiEndPoints?: boolean;
|
|
19
20
|
defaultGetLimit?: number;
|
|
20
21
|
entities?: ClassType<any>[];
|
|
21
22
|
controllers?: ClassType<any>[];
|
|
22
|
-
bodyParser?: boolean;
|
|
23
23
|
rootPath?: string;
|
|
24
24
|
};
|
|
25
|
-
export declare function buildRemultServer(app: GenericRouter, options:
|
|
26
|
-
export declare type
|
|
27
|
-
export interface RemultExpressBridge extends
|
|
25
|
+
export declare function buildRemultServer(app: GenericRouter, options: RemultServerOptions): RemultServer;
|
|
26
|
+
export declare type GenericMiddleware = (req: GenericRequest, res: GenericResponse, next: VoidFunction) => void;
|
|
27
|
+
export interface RemultExpressBridge extends GenericMiddleware, RemultServer {
|
|
28
28
|
}
|
|
29
29
|
export interface RemultServer {
|
|
30
30
|
getRemult(req: GenericRequest): Promise<Remult>;
|
|
@@ -37,10 +37,10 @@ export declare type GenericRouter = {
|
|
|
37
37
|
route(path: string): SpecificRoute;
|
|
38
38
|
};
|
|
39
39
|
export declare type SpecificRoute = {
|
|
40
|
-
get(handler:
|
|
41
|
-
put(handler:
|
|
42
|
-
post(handler:
|
|
43
|
-
delete(handler:
|
|
40
|
+
get(handler: GenericMiddleware): SpecificRoute;
|
|
41
|
+
put(handler: GenericMiddleware): SpecificRoute;
|
|
42
|
+
post(handler: GenericMiddleware): SpecificRoute;
|
|
43
|
+
delete(handler: GenericMiddleware): SpecificRoute;
|
|
44
44
|
};
|
|
45
45
|
export interface GenericRequest {
|
|
46
46
|
url?: string;
|
|
@@ -48,8 +48,6 @@ export interface GenericRequest {
|
|
|
48
48
|
body?: any;
|
|
49
49
|
query?: any;
|
|
50
50
|
params?: any;
|
|
51
|
-
user?: UserInfo;
|
|
52
|
-
auth?: UserInfo;
|
|
53
51
|
}
|
|
54
52
|
export interface GenericResponse {
|
|
55
53
|
json(data: any): any;
|
|
@@ -60,7 +58,7 @@ export interface GenericResponse {
|
|
|
60
58
|
declare class ExpressBridge {
|
|
61
59
|
private app;
|
|
62
60
|
queue: inProcessQueueHandler;
|
|
63
|
-
|
|
61
|
+
options: RemultServerOptions;
|
|
64
62
|
dataProvider: DataProvider | Promise<DataProvider>;
|
|
65
63
|
openApiDoc(options: {
|
|
66
64
|
title: string;
|
|
@@ -71,7 +69,7 @@ declare class ExpressBridge {
|
|
|
71
69
|
allowed: AllowedForInstance<any>;
|
|
72
70
|
tag: string;
|
|
73
71
|
}[];
|
|
74
|
-
constructor(app: GenericRouter, queue: inProcessQueueHandler,
|
|
72
|
+
constructor(app: GenericRouter, queue: inProcessQueueHandler, options: RemultServerOptions, dataProvider: DataProvider | Promise<DataProvider>);
|
|
75
73
|
logApiEndPoints: boolean;
|
|
76
74
|
private firstArea;
|
|
77
75
|
addArea(rootUrl: string): SiteArea;
|
|
@@ -37,7 +37,7 @@ export function buildRemultServer(app, options) {
|
|
|
37
37
|
return dp;
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
let bridge = new ExpressBridge(app, new inProcessQueueHandler(options.queueStorage), options
|
|
40
|
+
let bridge = new ExpressBridge(app, new inProcessQueueHandler(options.queueStorage), options, dataProvider);
|
|
41
41
|
if (options.logApiEndPoints !== undefined)
|
|
42
42
|
bridge.logApiEndPoints = options.logApiEndPoints;
|
|
43
43
|
if (options.rootPath === undefined)
|
|
@@ -56,10 +56,10 @@ export function buildRemultServer(app, options) {
|
|
|
56
56
|
}
|
|
57
57
|
;
|
|
58
58
|
class ExpressBridge {
|
|
59
|
-
constructor(app, queue,
|
|
59
|
+
constructor(app, queue, options, dataProvider) {
|
|
60
60
|
this.app = app;
|
|
61
61
|
this.queue = queue;
|
|
62
|
-
this.
|
|
62
|
+
this.options = options;
|
|
63
63
|
this.dataProvider = dataProvider;
|
|
64
64
|
/* internal */
|
|
65
65
|
this.backendMethodsOpenApi = [];
|
|
@@ -393,14 +393,19 @@ export class SiteArea {
|
|
|
393
393
|
let remult = new Remult();
|
|
394
394
|
remult.setDataProvider(await this.bridge.dataProvider);
|
|
395
395
|
if (req) {
|
|
396
|
-
let user
|
|
397
|
-
if (
|
|
398
|
-
user = req
|
|
396
|
+
let user;
|
|
397
|
+
if (this.bridge.options.getUser)
|
|
398
|
+
user = await this.bridge.options.getUser(req);
|
|
399
|
+
else {
|
|
400
|
+
user = req['user'];
|
|
401
|
+
if (!user)
|
|
402
|
+
user = req['auth'];
|
|
403
|
+
}
|
|
399
404
|
if (user)
|
|
400
405
|
remult.setUser(user);
|
|
401
406
|
}
|
|
402
|
-
if (this.bridge.initRequest) {
|
|
403
|
-
await this.bridge.initRequest(remult, req);
|
|
407
|
+
if (this.bridge.options.initRequest) {
|
|
408
|
+
await this.bridge.options.initRequest(remult, req);
|
|
404
409
|
}
|
|
405
410
|
what(remult, myReq, myRes, req);
|
|
406
411
|
};
|
|
@@ -6,14 +6,14 @@ import { Action, BackendMethod } from '../server-action';
|
|
|
6
6
|
Remult.apiBaseUrl = 'http://localhost:3003/api';
|
|
7
7
|
let path = Remult.apiBaseUrl + '/tasks';
|
|
8
8
|
const environments = [
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
// ["next", 3000],
|
|
10
|
+
// ["nest", 3001],
|
|
11
|
+
// ["koa", 3002],
|
|
12
|
+
// ["fastify", 3003],
|
|
13
|
+
// ["express", 3004],
|
|
14
|
+
// ["middleware", 3005],
|
|
15
|
+
// ["optine", 3006],
|
|
16
|
+
// ["fresh", 8000],
|
|
17
17
|
];
|
|
18
18
|
function test(name, test) {
|
|
19
19
|
for (const [env, port] of environments) {
|
package/esm/src/context.d.ts
CHANGED
|
@@ -40,12 +40,7 @@ export declare class Remult {
|
|
|
40
40
|
/** Returns the current user's info */
|
|
41
41
|
get user(): UserInfo;
|
|
42
42
|
/** Set's the current user info */
|
|
43
|
-
setUser(info: UserInfo
|
|
44
|
-
sub?: string;
|
|
45
|
-
name?: string;
|
|
46
|
-
permissions?: string[];
|
|
47
|
-
username?: string;
|
|
48
|
-
}): Promise<void>;
|
|
43
|
+
setUser(info: UserInfo): Promise<void>;
|
|
49
44
|
private _user;
|
|
50
45
|
private _userChangeEvent;
|
|
51
46
|
/** Checks if a user was authenticated */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remult",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.31",
|
|
4
4
|
"description": "A CRUD framework for full-stack TypeScript",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -36,6 +36,10 @@
|
|
|
36
36
|
"require": "./remult-fastify.js",
|
|
37
37
|
"import": "./esm/remult-fastify.js"
|
|
38
38
|
},
|
|
39
|
+
"./remult-fresh": {
|
|
40
|
+
"require": "./remult-fresh.js",
|
|
41
|
+
"import": "./esm/remult-fresh.js"
|
|
42
|
+
},
|
|
39
43
|
"./postgres": {
|
|
40
44
|
"require": "./postgres/index.js",
|
|
41
45
|
"import": "./esm/postgres/index.js"
|
package/readme.md
CHANGED
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
|
|
36
36
|
### Status
|
|
37
37
|
|
|
38
|
-
Remult is **production-ready** and, in fact, used in production apps since
|
|
38
|
+
Remult is **production-ready** and, in fact, used in production apps since 2018. However, we’re keeping the major version at zero so we can use community feedback to finalize the v1 API.
|
|
39
39
|
|
|
40
40
|
## Motivation
|
|
41
41
|
|
|
42
42
|
Full-stack web development is (still) too complicated. **Simple CRUD, a common requirement of any business application, should be simple to build, maintain, and extend** when the need arises.
|
|
43
43
|
|
|
44
|
-
Remult abstracts away repetitive, boilerplate, error-prone, and poorly designed code on the one hand, and enables total flexibility and control on the other. **Remult
|
|
44
|
+
Remult abstracts away repetitive, boilerplate, error-prone, and poorly designed code on the one hand, and enables total flexibility and control on the other. **Remult helps building fullstack apps using only TypeScript code you can easily follow and safely refactor**, and fits nicely into any existing or new project by being minimalistic and completely unopinionated regarding the developer’s choice of other frameworks and tools.
|
|
45
45
|
|
|
46
46
|
Other frameworks tend to fall into either too much abstraction (no-code, low-code, BaaS) or partial abstraction (MVC frameworks, GraphQL, ORMs, API generators, code generators), and tend to be opinionated regarding the development tool-chain, deployment environment, configuration/conventions or DSL. Remult attempts to strike a better balance.
|
|
47
47
|
|
package/remult-express.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function remultExpress(options?:
|
|
1
|
+
import { RemultServerOptions } from './server/expressBridge';
|
|
2
|
+
export declare function remultExpress(options?: RemultServerOptions & {
|
|
3
3
|
bodyParser?: boolean;
|
|
4
4
|
bodySizeLimit?: string;
|
|
5
5
|
}): import("express-serve-static-core").Router & {
|
package/remult-fastify.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { FastifyPluginCallback } from 'fastify';
|
|
2
|
-
import { RemultServer,
|
|
3
|
-
export declare function remultFastify(options:
|
|
2
|
+
import { RemultServer, RemultServerOptions } from './server/expressBridge';
|
|
3
|
+
export declare function remultFastify(options: RemultServerOptions): FastifyPluginCallback & RemultServer;
|
package/remult-fastify.js
CHANGED
|
@@ -24,7 +24,7 @@ function remultFastify(options) {
|
|
|
24
24
|
return response;
|
|
25
25
|
}
|
|
26
26
|
var api;
|
|
27
|
-
var pluginFunction = function (instance,
|
|
27
|
+
var pluginFunction = function (instance, op) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
28
28
|
var fastifyRouter;
|
|
29
29
|
return tslib_1.__generator(this, function (_a) {
|
|
30
30
|
fastifyRouter = {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RemultServerOptions, RemultServer } from "./server/expressBridge";
|
|
2
|
+
import { Remult } from "./src/context";
|
|
3
|
+
export declare function remultFresh(options: RemultServerOptions, response: FreshResponse): RemultFresh;
|
|
4
|
+
export interface RemultFresh extends RemultServer {
|
|
5
|
+
handle(req: FreshRequest, ctx: FreshContext): Promise<FreshResponse>;
|
|
6
|
+
}
|
|
7
|
+
export interface FreshRequest {
|
|
8
|
+
url: string;
|
|
9
|
+
method: string;
|
|
10
|
+
json: () => Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
export interface FreshContext {
|
|
13
|
+
next: () => Promise<any>;
|
|
14
|
+
state: FreshRemultState;
|
|
15
|
+
}
|
|
16
|
+
export interface FreshResponse {
|
|
17
|
+
new (body?: any | undefined, init?: ResponseInit): any;
|
|
18
|
+
json(data: unknown, init?: ResponseInit): any;
|
|
19
|
+
}
|
|
20
|
+
export interface FreshRemultState {
|
|
21
|
+
remult: Remult;
|
|
22
|
+
}
|
package/remult-fresh.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.remultFresh = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var remult_middleware_1 = require("./remult-middleware");
|
|
6
|
+
function remultFresh(options, response) {
|
|
7
|
+
var _this = this;
|
|
8
|
+
var mw = remult_middleware_1.remultMiddleware(options);
|
|
9
|
+
var orig = mw.handle;
|
|
10
|
+
return tslib_1.__assign(tslib_1.__assign({}, mw), {
|
|
11
|
+
handle: function (req, ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
12
|
+
var theReq, _a, _b, init, res, remult;
|
|
13
|
+
return tslib_1.__generator(this, function (_c) {
|
|
14
|
+
switch (_c.label) {
|
|
15
|
+
case 0:
|
|
16
|
+
theReq = {
|
|
17
|
+
method: req.method,
|
|
18
|
+
url: req.url,
|
|
19
|
+
body: undefined
|
|
20
|
+
};
|
|
21
|
+
_a = req.method.toLocaleLowerCase();
|
|
22
|
+
switch (_a) {
|
|
23
|
+
case "put": return [3 /*break*/, 1];
|
|
24
|
+
case "post": return [3 /*break*/, 1];
|
|
25
|
+
}
|
|
26
|
+
return [3 /*break*/, 3];
|
|
27
|
+
case 1:
|
|
28
|
+
console.log(req);
|
|
29
|
+
_b = theReq;
|
|
30
|
+
return [4 /*yield*/, req.json()];
|
|
31
|
+
case 2:
|
|
32
|
+
_b.body = _c.sent();
|
|
33
|
+
return [3 /*break*/, 3];
|
|
34
|
+
case 3:
|
|
35
|
+
init = {};
|
|
36
|
+
return [4 /*yield*/, orig(theReq)];
|
|
37
|
+
case 4:
|
|
38
|
+
res = _c.sent();
|
|
39
|
+
if (!res) return [3 /*break*/, 5];
|
|
40
|
+
if (res.statusCode)
|
|
41
|
+
init.status = res.statusCode;
|
|
42
|
+
if (res.data) {
|
|
43
|
+
console.log({ init: init, res: res });
|
|
44
|
+
return [2 /*return*/, response.json(res.data, init)];
|
|
45
|
+
}
|
|
46
|
+
else
|
|
47
|
+
return [2 /*return*/, new response(undefined, init)];
|
|
48
|
+
return [3 /*break*/, 7];
|
|
49
|
+
case 5: return [4 /*yield*/, mw.getRemult(req)];
|
|
50
|
+
case 6:
|
|
51
|
+
remult = _c.sent();
|
|
52
|
+
ctx.state.remult = remult;
|
|
53
|
+
return [2 /*return*/, ctx.next()];
|
|
54
|
+
case 7:
|
|
55
|
+
;
|
|
56
|
+
return [2 /*return*/];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}); }
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
exports.remultFresh = remultFresh;
|
|
63
|
+
;
|
package/remult-middleware.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { GenericRequest,
|
|
2
|
-
export declare function remultMiddleware(options?:
|
|
3
|
-
export interface RemultMiddleware extends
|
|
1
|
+
import { GenericRequest, GenericMiddleware, GenericResponse, GenericRouter, buildRemultServer, RemultServerOptions, SpecificRoute, RemultServer } from './server/expressBridge';
|
|
2
|
+
export declare function remultMiddleware(options?: RemultServerOptions): RemultMiddleware;
|
|
3
|
+
export interface RemultMiddleware extends GenericMiddleware, RemultServer {
|
|
4
4
|
handle(req: GenericRequest, gRes?: GenericResponse): Promise<MiddlewareResponse>;
|
|
5
5
|
}
|
|
6
6
|
export interface MiddlewareResponse {
|
|
7
7
|
data?: any;
|
|
8
8
|
statusCode?: number;
|
|
9
9
|
}
|
|
10
|
+
export { GenericRequest, GenericMiddleware as GenericRequestHandler, GenericResponse, GenericRouter, buildRemultServer, RemultServerOptions as RemultMiddlewareOptions, SpecificRoute, RemultServer };
|
package/remult-middleware.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.remultMiddleware = void 0;
|
|
3
|
+
exports.buildRemultServer = exports.remultMiddleware = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var expressBridge_1 = require("./server/expressBridge");
|
|
6
|
+
Object.defineProperty(exports, "buildRemultServer", { enumerable: true, get: function () { return expressBridge_1.buildRemultServer; } });
|
|
6
7
|
function remultMiddleware(options) {
|
|
7
8
|
var m = new middleware();
|
|
8
9
|
var server = expressBridge_1.buildRemultServer(m, options);
|
|
@@ -10,7 +11,7 @@ function remultMiddleware(options) {
|
|
|
10
11
|
getRemult: function (req) { return server.getRemult(req); },
|
|
11
12
|
openApiDoc: function (options) { return server.openApiDoc(options); },
|
|
12
13
|
addArea: function (x) { return server.addArea(x); },
|
|
13
|
-
handle: function (req) { return m.handle(req); }
|
|
14
|
+
handle: function (req, res) { return m.handle(req, res); }
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
17
|
exports.remultMiddleware = remultMiddleware;
|
|
@@ -5,7 +5,7 @@ import { AllowedForInstance, Remult, UserInfo } from '../src/context';
|
|
|
5
5
|
import { ClassType } from '../classType';
|
|
6
6
|
import { Repository } from '../src/remult3';
|
|
7
7
|
import { IdEntity } from '../src/id-entity';
|
|
8
|
-
export declare type
|
|
8
|
+
export declare type RemultServerOptions = {
|
|
9
9
|
/** Sets a database connection for Remult.
|
|
10
10
|
*
|
|
11
11
|
* @see [Connecting to a Database](https://remult.dev/docs/databases.html).
|
|
@@ -14,17 +14,17 @@ export declare type RemultMiddlewareOptions = {
|
|
|
14
14
|
disableAutoApi?: boolean;
|
|
15
15
|
queueStorage?: QueueStorage;
|
|
16
16
|
initRequest?: (remult: Remult, origReq: GenericRequest) => Promise<void>;
|
|
17
|
+
getUser?: (request: GenericRequest) => Promise<UserInfo>;
|
|
17
18
|
initApi?: (remult: Remult) => void | Promise<void>;
|
|
18
19
|
logApiEndPoints?: boolean;
|
|
19
20
|
defaultGetLimit?: number;
|
|
20
21
|
entities?: ClassType<any>[];
|
|
21
22
|
controllers?: ClassType<any>[];
|
|
22
|
-
bodyParser?: boolean;
|
|
23
23
|
rootPath?: string;
|
|
24
24
|
};
|
|
25
|
-
export declare function buildRemultServer(app: GenericRouter, options:
|
|
26
|
-
export declare type
|
|
27
|
-
export interface RemultExpressBridge extends
|
|
25
|
+
export declare function buildRemultServer(app: GenericRouter, options: RemultServerOptions): RemultServer;
|
|
26
|
+
export declare type GenericMiddleware = (req: GenericRequest, res: GenericResponse, next: VoidFunction) => void;
|
|
27
|
+
export interface RemultExpressBridge extends GenericMiddleware, RemultServer {
|
|
28
28
|
}
|
|
29
29
|
export interface RemultServer {
|
|
30
30
|
getRemult(req: GenericRequest): Promise<Remult>;
|
|
@@ -37,10 +37,10 @@ export declare type GenericRouter = {
|
|
|
37
37
|
route(path: string): SpecificRoute;
|
|
38
38
|
};
|
|
39
39
|
export declare type SpecificRoute = {
|
|
40
|
-
get(handler:
|
|
41
|
-
put(handler:
|
|
42
|
-
post(handler:
|
|
43
|
-
delete(handler:
|
|
40
|
+
get(handler: GenericMiddleware): SpecificRoute;
|
|
41
|
+
put(handler: GenericMiddleware): SpecificRoute;
|
|
42
|
+
post(handler: GenericMiddleware): SpecificRoute;
|
|
43
|
+
delete(handler: GenericMiddleware): SpecificRoute;
|
|
44
44
|
};
|
|
45
45
|
export interface GenericRequest {
|
|
46
46
|
url?: string;
|
|
@@ -48,8 +48,6 @@ export interface GenericRequest {
|
|
|
48
48
|
body?: any;
|
|
49
49
|
query?: any;
|
|
50
50
|
params?: any;
|
|
51
|
-
user?: UserInfo;
|
|
52
|
-
auth?: UserInfo;
|
|
53
51
|
}
|
|
54
52
|
export interface GenericResponse {
|
|
55
53
|
json(data: any): any;
|
|
@@ -60,7 +58,7 @@ export interface GenericResponse {
|
|
|
60
58
|
declare class ExpressBridge {
|
|
61
59
|
private app;
|
|
62
60
|
queue: inProcessQueueHandler;
|
|
63
|
-
|
|
61
|
+
options: RemultServerOptions;
|
|
64
62
|
dataProvider: DataProvider | Promise<DataProvider>;
|
|
65
63
|
openApiDoc(options: {
|
|
66
64
|
title: string;
|
|
@@ -71,7 +69,7 @@ declare class ExpressBridge {
|
|
|
71
69
|
allowed: AllowedForInstance<any>;
|
|
72
70
|
tag: string;
|
|
73
71
|
}[];
|
|
74
|
-
constructor(app: GenericRouter, queue: inProcessQueueHandler,
|
|
72
|
+
constructor(app: GenericRouter, queue: inProcessQueueHandler, options: RemultServerOptions, dataProvider: DataProvider | Promise<DataProvider>);
|
|
75
73
|
logApiEndPoints: boolean;
|
|
76
74
|
private firstArea;
|
|
77
75
|
addArea(rootUrl: string): SiteArea;
|
package/server/expressBridge.js
CHANGED
|
@@ -49,7 +49,7 @@ function buildRemultServer(app, options) {
|
|
|
49
49
|
});
|
|
50
50
|
}); });
|
|
51
51
|
}
|
|
52
|
-
var bridge = new ExpressBridge(app, new inProcessQueueHandler(options.queueStorage), options
|
|
52
|
+
var bridge = new ExpressBridge(app, new inProcessQueueHandler(options.queueStorage), options, dataProvider);
|
|
53
53
|
if (options.logApiEndPoints !== undefined)
|
|
54
54
|
bridge.logApiEndPoints = options.logApiEndPoints;
|
|
55
55
|
if (options.rootPath === undefined)
|
|
@@ -69,10 +69,10 @@ function buildRemultServer(app, options) {
|
|
|
69
69
|
exports.buildRemultServer = buildRemultServer;
|
|
70
70
|
;
|
|
71
71
|
var ExpressBridge = /** @class */ (function () {
|
|
72
|
-
function ExpressBridge(app, queue,
|
|
72
|
+
function ExpressBridge(app, queue, options, dataProvider) {
|
|
73
73
|
this.app = app;
|
|
74
74
|
this.queue = queue;
|
|
75
|
-
this.
|
|
75
|
+
this.options = options;
|
|
76
76
|
this.dataProvider = dataProvider;
|
|
77
77
|
/* internal */
|
|
78
78
|
this.backendMethodsOpenApi = [];
|
|
@@ -449,19 +449,29 @@ var SiteArea = /** @class */ (function () {
|
|
|
449
449
|
return [4 /*yield*/, this.bridge.dataProvider];
|
|
450
450
|
case 1:
|
|
451
451
|
_b.apply(_a, [_c.sent()]);
|
|
452
|
-
if (req)
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
if (user)
|
|
457
|
-
remult.setUser(user);
|
|
458
|
-
}
|
|
459
|
-
if (!this.bridge.initRequest) return [3 /*break*/, 3];
|
|
460
|
-
return [4 /*yield*/, this.bridge.initRequest(remult, req)];
|
|
452
|
+
if (!req) return [3 /*break*/, 5];
|
|
453
|
+
user = void 0;
|
|
454
|
+
if (!this.bridge.options.getUser) return [3 /*break*/, 3];
|
|
455
|
+
return [4 /*yield*/, this.bridge.options.getUser(req)];
|
|
461
456
|
case 2:
|
|
462
|
-
_c.sent();
|
|
463
|
-
|
|
457
|
+
user = _c.sent();
|
|
458
|
+
return [3 /*break*/, 4];
|
|
464
459
|
case 3:
|
|
460
|
+
user = req['user'];
|
|
461
|
+
if (!user)
|
|
462
|
+
user = req['auth'];
|
|
463
|
+
_c.label = 4;
|
|
464
|
+
case 4:
|
|
465
|
+
if (user)
|
|
466
|
+
remult.setUser(user);
|
|
467
|
+
_c.label = 5;
|
|
468
|
+
case 5:
|
|
469
|
+
if (!this.bridge.options.initRequest) return [3 /*break*/, 7];
|
|
470
|
+
return [4 /*yield*/, this.bridge.options.initRequest(remult, req)];
|
|
471
|
+
case 6:
|
|
472
|
+
_c.sent();
|
|
473
|
+
_c.label = 7;
|
|
474
|
+
case 7:
|
|
465
475
|
what(remult, myReq, myRes, req);
|
|
466
476
|
return [2 /*return*/];
|
|
467
477
|
}
|
|
@@ -9,14 +9,14 @@ var server_action_1 = require("../server-action");
|
|
|
9
9
|
context_1.Remult.apiBaseUrl = 'http://localhost:3003/api';
|
|
10
10
|
var path = context_1.Remult.apiBaseUrl + '/tasks';
|
|
11
11
|
var environments = [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
// ["next", 3000],
|
|
13
|
+
// ["nest", 3001],
|
|
14
|
+
// ["koa", 3002],
|
|
15
|
+
// ["fastify", 3003],
|
|
16
|
+
// ["express", 3004],
|
|
17
|
+
// ["middleware", 3005],
|
|
18
|
+
// ["optine", 3006],
|
|
19
|
+
// ["fresh", 8000],
|
|
20
20
|
];
|
|
21
21
|
function test(name, test) {
|
|
22
22
|
var e_1, _a;
|
package/src/context.d.ts
CHANGED
|
@@ -40,12 +40,7 @@ export declare class Remult {
|
|
|
40
40
|
/** Returns the current user's info */
|
|
41
41
|
get user(): UserInfo;
|
|
42
42
|
/** Set's the current user info */
|
|
43
|
-
setUser(info: UserInfo
|
|
44
|
-
sub?: string;
|
|
45
|
-
name?: string;
|
|
46
|
-
permissions?: string[];
|
|
47
|
-
username?: string;
|
|
48
|
-
}): Promise<void>;
|
|
43
|
+
setUser(info: UserInfo): Promise<void>;
|
|
49
44
|
private _user;
|
|
50
45
|
private _userChangeEvent;
|
|
51
46
|
/** Checks if a user was authenticated */
|