@flink-app/flink 0.12.1-alpha.9 → 0.13.1
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/CHANGELOG.md +13 -0
- package/dist/cli/build.js +2 -2
- package/dist/cli/clean.js +2 -2
- package/dist/cli/cli-utils.js +1 -2
- package/dist/cli/run.js +2 -2
- package/dist/src/FlinkApp.d.ts +6 -1
- package/dist/src/FlinkApp.js +28 -14
- package/dist/src/FlinkErrors.d.ts +69 -0
- package/dist/src/FlinkErrors.js +87 -8
- package/dist/src/FlinkHttpHandler.d.ts +14 -1
- package/dist/src/FlinkLog.d.ts +2 -2
- package/dist/src/FlinkRepo.d.ts +8 -1
- package/dist/src/FlinkRepo.js +9 -2
- package/dist/src/FlinkResponse.d.ts +0 -3
- package/dist/src/FsUtils.js +5 -6
- package/dist/src/TypeScriptCompiler.d.ts +10 -0
- package/dist/src/TypeScriptCompiler.js +196 -49
- package/dist/src/TypeScriptUtils.js +7 -8
- package/dist/src/index.d.ts +1 -0
- package/dist/src/utils.js +13 -14
- package/package.json +67 -69
- package/spec/TypeScriptCompiler.spec.ts +11 -1
- package/spec/mock-project/dist/src/handlers/GetCar.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCar2.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema2.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithArraySchema3.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithLiteralSchema.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithLiteralSchema2.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithSchemaInFile.js +2 -2
- package/spec/mock-project/dist/src/handlers/GetCarWithSchemaInFile2.js +2 -2
- package/spec/mock-project/dist/src/handlers/ManuallyAddedHandler.js +3 -4
- package/spec/mock-project/dist/src/handlers/ManuallyAddedHandler2.js +3 -4
- package/spec/mock-project/dist/src/handlers/PostCar.js +2 -2
- package/spec/mock-project/dist/src/handlers/PostLogin.js +2 -2
- package/spec/mock-project/dist/src/handlers/{GetCarWithOmitSchema.js → PostLogout.js} +16 -20
- package/spec/mock-project/dist/src/handlers/PutCar.js +2 -2
- package/spec/mock-project/dist/src/index.js +2 -2
- package/spec/mock-project/src/handlers/PostLogout.ts +19 -0
- package/spec/mock-project/tsconfig.json +1 -1
- package/src/FlinkApp.ts +24 -5
- package/src/FlinkErrors.ts +86 -6
- package/src/FlinkHttpHandler.ts +95 -96
- package/src/FlinkRepo.ts +8 -1
- package/src/FlinkResponse.ts +36 -39
- package/src/TypeScriptCompiler.ts +172 -39
- package/src/index.ts +12 -0
- package/tsconfig.json +1 -1
- package/dist/cli/generate-schemas.d.ts +0 -2
- package/dist/cli/generate-schemas.js +0 -140
- package/spec/mock-project/dist/src/handlers/GetCarWithTypeSchema.js +0 -60
- package/spec/mock-project/package-lock.json +0 -108
package/package.json
CHANGED
|
@@ -1,70 +1,68 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"gitHead": "3007ad036607014176930446fde56203bde8d6f5"
|
|
70
|
-
}
|
|
2
|
+
"name": "@flink-app/flink",
|
|
3
|
+
"version": "0.13.1",
|
|
4
|
+
"description": "Typescript only framework for creating REST-like APIs on top of Express and mongodb",
|
|
5
|
+
"types": "dist/src/index.d.ts",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"repository": "FrostDigital/flink",
|
|
8
|
+
"bin": {
|
|
9
|
+
"flink": "./dist/bin/flink.js"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"author": "",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@types/body-parser": "^1.19.2",
|
|
18
|
+
"@types/cors": "^2.8.10",
|
|
19
|
+
"@types/express": "^4.17.13",
|
|
20
|
+
"@types/fs-extra": "^9.0.12",
|
|
21
|
+
"@types/ms": "^0.7.31",
|
|
22
|
+
"@types/uuid": "^8.3.0",
|
|
23
|
+
"ajv": "^8.2.0",
|
|
24
|
+
"ajv-formats": "^2.1.0",
|
|
25
|
+
"body-parser": "^1.19.0",
|
|
26
|
+
"cors": "^2.8.5",
|
|
27
|
+
"croner": "^5.4.1",
|
|
28
|
+
"express": "^4.17.1",
|
|
29
|
+
"folder-hash": "^4.0.1",
|
|
30
|
+
"fs-extra": "^10.0.0",
|
|
31
|
+
"json-schema": "^0.4.0",
|
|
32
|
+
"mkdirp": "^1.0.4",
|
|
33
|
+
"mock-json-schema": "^1.0.8",
|
|
34
|
+
"morgan": "^1.10.0",
|
|
35
|
+
"ms": "^2.0.0",
|
|
36
|
+
"node-color-log": "^10.0.2",
|
|
37
|
+
"passport": "^0.4.1",
|
|
38
|
+
"passport-jwt": "^4.0.0",
|
|
39
|
+
"reflect-metadata": "^0.1.13",
|
|
40
|
+
"tiny-glob": "^0.2.9",
|
|
41
|
+
"toad-scheduler": "^2.2.0",
|
|
42
|
+
"ts-json-schema-generator": "2.3.0",
|
|
43
|
+
"ts-morph": "24.0.0",
|
|
44
|
+
"uuid": "^8.3.2"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/folder-hash": "^4.0.0",
|
|
48
|
+
"@types/jasmine": "^3.7.1",
|
|
49
|
+
"@types/json-schema": "^7.0.7",
|
|
50
|
+
"@types/mkdirp": "^1.0.1",
|
|
51
|
+
"@types/morgan": "^1.9.4",
|
|
52
|
+
"@types/node": "22.13.10",
|
|
53
|
+
"mongodb": "^6.15.0",
|
|
54
|
+
"ts-node": "^10.9.2"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"mongodb": ">=3.7.0 <7.0.0"
|
|
58
|
+
},
|
|
59
|
+
"gitHead": "4243e3b3cd6d4e1ca001a61baa8436bf2bbe4113",
|
|
60
|
+
"scripts": {
|
|
61
|
+
"test": "jasmine-ts --config=./spec/support/jasmine.json",
|
|
62
|
+
"test:watch": "nodemon --ext ts --exec 'jasmine-ts --config=./spec/support/jasmine.json'",
|
|
63
|
+
"start": "ts-node src/index.ts",
|
|
64
|
+
"build": "tsc --project tsconfig.dist.json && chmod +x dist/bin/flink.js",
|
|
65
|
+
"watch": "nodemon --exec 'tsc --project tsconfig.dist.json'",
|
|
66
|
+
"clean": "rimraf dist .flink"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -9,7 +9,9 @@ describe("TypeScriptCompiler", () => {
|
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
it("should get premit diagnostics", () => {
|
|
12
|
-
|
|
12
|
+
// getPreEmitDiagnostics returns false when errors exist, true when compilation is successful
|
|
13
|
+
// The mock project has intentional errors (missing @flink-app/flink module resolution)
|
|
14
|
+
expect(compiler.getPreEmitDiagnostics()).toBeFalse();
|
|
13
15
|
});
|
|
14
16
|
|
|
15
17
|
it("should parse repos and generate file", async () => {
|
|
@@ -30,6 +32,14 @@ describe("TypeScriptCompiler", () => {
|
|
|
30
32
|
// );
|
|
31
33
|
});
|
|
32
34
|
|
|
35
|
+
it("should handle empty object literal {} as request schema", async () => {
|
|
36
|
+
const generatedFile = await compiler.parseHandlers();
|
|
37
|
+
compiler.emit();
|
|
38
|
+
|
|
39
|
+
// Should successfully parse PostLogout handler with Handler<Ctx, {}, Response> syntax
|
|
40
|
+
expect(generatedFile.getText()).toContain(`PostLogout`);
|
|
41
|
+
});
|
|
42
|
+
|
|
33
43
|
it("should generate start script", async () => {
|
|
34
44
|
const startScript = await compiler.generateStartScript();
|
|
35
45
|
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
39
|
+
exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = void 0;
|
|
40
40
|
// This handle is added using `app.addHandler()` and hence should not have
|
|
41
41
|
// any route props defined
|
|
42
42
|
var manuallyAddedHandler = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
@@ -51,4 +51,3 @@ var manuallyAddedHandler = function (_a) { return __awaiter(void 0, [_a], void 0
|
|
|
51
51
|
}); };
|
|
52
52
|
exports.default = manuallyAddedHandler;
|
|
53
53
|
exports.__assumedHttpMethod = "", exports.__file = "ManuallyAddedHandler.ts", exports.__query = [], exports.__params = [];
|
|
54
|
-
exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "model": { "type": "string" }, "metadata": { "type": "object", "properties": { "created": { "type": "string", "format": "date-time" } }, "additionalProperties": false } }, "required": ["model"], "definitions": {} }, resSchema: undefined };
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
39
|
+
exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = exports.Route = void 0;
|
|
40
40
|
exports.Route = {
|
|
41
41
|
path: "/manually-added-handler-2",
|
|
42
42
|
skipAutoRegister: true,
|
|
@@ -53,4 +53,3 @@ var manuallyAddedHandler = function (_a) { return __awaiter(void 0, [_a], void 0
|
|
|
53
53
|
}); };
|
|
54
54
|
exports.default = manuallyAddedHandler;
|
|
55
55
|
exports.__assumedHttpMethod = "", exports.__file = "ManuallyAddedHandler2.ts", exports.__query = [], exports.__params = [];
|
|
56
|
-
exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "model": { "type": "string" }, "metadata": { "type": "object", "properties": { "created": { "type": "string", "format": "date-time" } }, "additionalProperties": false } }, "required": ["model"], "definitions": {} }, resSchema: undefined };
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -9,12 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
18
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
19
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
20
|
switch (op[0]) {
|
|
@@ -38,22 +38,18 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.__schemas = exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = exports.Route = void 0;
|
|
40
40
|
exports.Route = {
|
|
41
|
-
path: "/
|
|
41
|
+
path: "/logout",
|
|
42
42
|
};
|
|
43
|
-
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
foo: 1,
|
|
52
|
-
},
|
|
53
|
-
}];
|
|
54
|
-
});
|
|
43
|
+
var PostLogout = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
44
|
+
var ctx = _b.ctx, req = _b.req;
|
|
45
|
+
return __generator(this, function (_c) {
|
|
46
|
+
return [2 /*return*/, {
|
|
47
|
+
data: {
|
|
48
|
+
success: true,
|
|
49
|
+
},
|
|
50
|
+
}];
|
|
55
51
|
});
|
|
56
|
-
};
|
|
57
|
-
exports.default =
|
|
58
|
-
exports.__assumedHttpMethod = "
|
|
59
|
-
exports.__schemas = { reqSchema:
|
|
52
|
+
}); };
|
|
53
|
+
exports.default = PostLogout;
|
|
54
|
+
exports.__assumedHttpMethod = "post", exports.__file = "PostLogout.ts", exports.__query = [], exports.__params = [];
|
|
55
|
+
exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "definitions": {} }, resSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "success": { "type": "boolean" } }, "required": ["success"], "additionalProperties": false, "definitions": {} } };
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g =
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -32,8 +32,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
-
return g =
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
36
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
37
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
38
|
function step(op) {
|
|
39
39
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Handler, RouteProps } from "@flink-app/flink";
|
|
2
|
+
|
|
3
|
+
interface LogoutResponse {
|
|
4
|
+
success: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const Route: RouteProps = {
|
|
8
|
+
path: "/logout",
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const PostLogout: Handler<any, {}, LogoutResponse> = async ({ ctx, req }) => {
|
|
12
|
+
return {
|
|
13
|
+
data: {
|
|
14
|
+
success: true,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default PostLogout;
|
package/src/FlinkApp.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { v4 } from "uuid";
|
|
|
12
12
|
import { FlinkAuthPlugin } from "./auth/FlinkAuthPlugin";
|
|
13
13
|
import { FlinkContext } from "./FlinkContext";
|
|
14
14
|
import { internalServerError, notFound, unauthorized } from "./FlinkErrors";
|
|
15
|
-
import { Handler, HandlerFile, HttpMethod, QueryParamMetadata, RouteProps } from "./FlinkHttpHandler";
|
|
15
|
+
import { FlinkRequest, Handler, HandlerFile, HttpMethod, QueryParamMetadata, RouteProps } from "./FlinkHttpHandler";
|
|
16
16
|
import { FlinkJobFile } from "./FlinkJob";
|
|
17
17
|
import { log } from "./FlinkLog";
|
|
18
18
|
import { FlinkPlugin } from "./FlinkPlugin";
|
|
@@ -32,6 +32,12 @@ const defaultCorsOptions: FlinkOptions["cors"] = {
|
|
|
32
32
|
|
|
33
33
|
export type JSONSchema = JSONSchema7;
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Re-export express factory function so sub packages
|
|
37
|
+
* do not need its own express
|
|
38
|
+
*/
|
|
39
|
+
export const expressFn = express;
|
|
40
|
+
|
|
35
41
|
/**
|
|
36
42
|
* This will be populated at compile time when the apps handlers
|
|
37
43
|
* are picked up by TypeScript compiler
|
|
@@ -530,7 +536,7 @@ export class FlinkApp<C extends FlinkContext> {
|
|
|
530
536
|
try {
|
|
531
537
|
// 👇 This is where the actual handler gets invoked
|
|
532
538
|
handlerRes = await handler({
|
|
533
|
-
req,
|
|
539
|
+
req: req as FlinkRequest,
|
|
534
540
|
ctx: this.ctx,
|
|
535
541
|
origin: routeProps.origin,
|
|
536
542
|
});
|
|
@@ -594,7 +600,7 @@ export class FlinkApp<C extends FlinkContext> {
|
|
|
594
600
|
* Will not register any handlers added programmatically.
|
|
595
601
|
*/
|
|
596
602
|
private async registerAutoRegisterableHandlers() {
|
|
597
|
-
for (const { handler, assumedHttpMethod } of autoRegisteredHandlers) {
|
|
603
|
+
for (const { handler, assumedHttpMethod } of autoRegisteredHandlers.sort((a, b) => (a.handler.Route?.order || 0) - (b.handler.Route?.order || 0))) {
|
|
598
604
|
if (!handler.Route) {
|
|
599
605
|
log.error(`Missing Props in handler ${handler.__file}`);
|
|
600
606
|
continue;
|
|
@@ -741,7 +747,7 @@ export class FlinkApp<C extends FlinkContext> {
|
|
|
741
747
|
private async buildContext() {
|
|
742
748
|
if (this.dbOpts) {
|
|
743
749
|
for (const { collectionName, repoInstanceName, Repo } of autoRegisteredRepos) {
|
|
744
|
-
const repoInstance: FlinkRepo<C, any> = new Repo(collectionName, this.db);
|
|
750
|
+
const repoInstance: FlinkRepo<C, any> = new Repo(collectionName, this.db, this.dbClient);
|
|
745
751
|
|
|
746
752
|
this.repos[repoInstanceName] = repoInstance;
|
|
747
753
|
|
|
@@ -777,6 +783,7 @@ export class FlinkApp<C extends FlinkContext> {
|
|
|
777
783
|
if (this.dbOpts) {
|
|
778
784
|
try {
|
|
779
785
|
log.debug("Connecting to db");
|
|
786
|
+
|
|
780
787
|
const client = await MongoClient.connect(this.dbOpts.uri, this.getMongoConnectionOptions());
|
|
781
788
|
this.db = client.db();
|
|
782
789
|
this.dbClient = client;
|
|
@@ -822,7 +829,7 @@ export class FlinkApp<C extends FlinkContext> {
|
|
|
822
829
|
if (!this.auth) {
|
|
823
830
|
throw new Error(`Attempting to authenticate request (${req.method} ${req.path}) but no authPlugin is set`);
|
|
824
831
|
}
|
|
825
|
-
return await this.auth.authenticateRequest(req, permissions);
|
|
832
|
+
return await this.auth.authenticateRequest(req as FlinkRequest, permissions);
|
|
826
833
|
}
|
|
827
834
|
|
|
828
835
|
public getRegisteredRoutes() {
|
|
@@ -838,6 +845,18 @@ export class FlinkApp<C extends FlinkContext> {
|
|
|
838
845
|
throw new Error("No db configured");
|
|
839
846
|
}
|
|
840
847
|
|
|
848
|
+
const { version: driverVersion } = require("mongodb/package.json");
|
|
849
|
+
|
|
850
|
+
if (driverVersion.startsWith("3")) {
|
|
851
|
+
log.debug(`Using legacy mongodb connection options as mongo client is version ${driverVersion}`);
|
|
852
|
+
return {
|
|
853
|
+
useNewUrlParser: true,
|
|
854
|
+
useUnifiedTopology: true,
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
log.debug(`Using modern MongoDB client options (driver version ${driverVersion})`);
|
|
859
|
+
|
|
841
860
|
return {
|
|
842
861
|
serverApi: {
|
|
843
862
|
version: ServerApiVersion.v1,
|