k99 0.2.0 → 0.3.0-beta.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/LICENSE +1 -1
- package/README.md +8 -0
- package/README.zh.md +8 -0
- package/browser/package.json +8 -0
- package/browser/types.d.ts +20 -0
- package/cli/command/create.js +1 -2
- package/cli/command/index.js +1 -2
- package/cli/command/init.js +3 -5
- package/cli/command/start.js +9 -10
- package/cli/index.js +3 -4
- package/cli/opt/bind.js +1 -2
- package/cli/opt/index.js +1 -2
- package/cli/opt/listen.js +1 -2
- package/cli/opt/path.js +1 -2
- package/cli/opt/port.js +1 -2
- package/cli/opt/show-router.js +1 -2
- package/dist/k99.browser.js +3110 -0
- package/dist/k99.browser.min.js +6 -0
- package/dist/k99.esm.js +3082 -0
- package/dist/k99.esm.min.js +6 -0
- package/dist/k99.js +3104 -0
- package/dist/k99.mjs +3082 -0
- package/dist/k99Browser.browser.js +490 -0
- package/dist/k99Browser.browser.min.js +6 -0
- package/dist/k99Browser.esm.js +475 -0
- package/dist/k99Browser.esm.min.js +6 -0
- package/dist/k99Browser.js +484 -0
- package/dist/k99Browser.mjs +475 -0
- package/dist/k99Services.browser.js +145 -0
- package/dist/k99Services.browser.min.js +6 -0
- package/dist/k99Services.esm.js +136 -0
- package/dist/k99Services.esm.min.js +6 -0
- package/dist/k99Services.js +141 -0
- package/dist/k99Services.mjs +136 -0
- package/node/index.js +1386 -0
- package/node/index.mjs +1350 -0
- package/node/package.json +5 -0
- package/node/types.d.ts +166 -0
- package/package.json +77 -11
- package/services/package.json +8 -0
- package/services/types.d.ts +22 -0
- package/starter.js +0 -1
- package/types.d.ts +748 -0
- package/Container.d.ts +0 -92
- package/Container.js +0 -242
- package/Container.js.map +0 -1
- package/Controller/index.d.ts +0 -178
- package/Controller/index.js +0 -576
- package/Controller/index.js.map +0 -1
- package/Controller/patch/cookie.d.ts +0 -33
- package/Controller/patch/cookie.js +0 -168
- package/Controller/patch/cookie.js.map +0 -1
- package/Controller/patch/index.d.ts +0 -7
- package/Controller/patch/index.js +0 -26
- package/Controller/patch/index.js.map +0 -1
- package/Controller/patch/render.d.ts +0 -5
- package/Controller/patch/render.js +0 -24
- package/Controller/patch/render.js.map +0 -1
- package/ExitSignal.d.ts +0 -14
- package/ExitSignal.js +0 -29
- package/ExitSignal.js.map +0 -1
- package/Extension.d.ts +0 -56
- package/Extension.js +0 -93
- package/Extension.js.map +0 -1
- package/ExtensionContainer.d.ts +0 -55
- package/ExtensionContainer.js +0 -105
- package/ExtensionContainer.js.map +0 -1
- package/Plugin.d.ts +0 -52
- package/Plugin.js +0 -278
- package/Plugin.js.map +0 -1
- package/Preprocessor.d.ts +0 -86
- package/Preprocessor.js +0 -135
- package/Preprocessor.js.map +0 -1
- package/Router/assets.d.ts +0 -33
- package/Router/assets.js +0 -106
- package/Router/assets.js.map +0 -1
- package/Router/callback.d.ts +0 -9
- package/Router/callback.js +0 -152
- package/Router/callback.js.map +0 -1
- package/Router/extendsInterface.d.ts +0 -8
- package/Router/extendsInterface.js +0 -43
- package/Router/extendsInterface.js.map +0 -1
- package/Router/index.d.ts +0 -184
- package/Router/index.js +0 -615
- package/Router/index.js.map +0 -1
- package/Router/log.d.ts +0 -23
- package/Router/log.js +0 -120
- package/Router/log.js.map +0 -1
- package/Router/order.d.ts +0 -14
- package/Router/order.js +0 -71
- package/Router/order.js.map +0 -1
- package/Router/register.d.ts +0 -9
- package/Router/register.js +0 -252
- package/Router/register.js.map +0 -1
- package/Router/registerManager.d.ts +0 -22
- package/Router/registerManager.js +0 -102
- package/Router/registerManager.js.map +0 -1
- package/Router/scan.d.ts +0 -2
- package/Router/scan.js +0 -72
- package/Router/scan.js.map +0 -1
- package/Router/setHandleItem.d.ts +0 -3
- package/Router/setHandleItem.js +0 -94
- package/Router/setHandleItem.js.map +0 -1
- package/Router/settings.d.ts +0 -12
- package/Router/settings.js +0 -74
- package/Router/settings.js.map +0 -1
- package/Router/start.d.ts +0 -3
- package/Router/start.js +0 -270
- package/Router/start.js.map +0 -1
- package/Router/vars.d.ts +0 -10
- package/Router/vars.js +0 -40
- package/Router/vars.js.map +0 -1
- package/Service.d.ts +0 -12
- package/Service.js +0 -20
- package/Service.js.map +0 -1
- package/cli/command/create.d.ts +0 -7
- package/cli/command/create.js.map +0 -1
- package/cli/command/index.d.ts +0 -7
- package/cli/command/index.js.map +0 -1
- package/cli/command/init.d.ts +0 -6
- package/cli/command/init.js.map +0 -1
- package/cli/command/start.d.ts +0 -6
- package/cli/command/start.js.map +0 -1
- package/cli/index.d.ts +0 -2
- package/cli/index.js.map +0 -1
- package/cli/opt/bind.d.ts +0 -3
- package/cli/opt/bind.js.map +0 -1
- package/cli/opt/index.d.ts +0 -16
- package/cli/opt/index.js.map +0 -1
- package/cli/opt/listen.d.ts +0 -3
- package/cli/opt/listen.js.map +0 -1
- package/cli/opt/path.d.ts +0 -3
- package/cli/opt/path.js.map +0 -1
- package/cli/opt/port.d.ts +0 -3
- package/cli/opt/port.js.map +0 -1
- package/cli/opt/show-router.d.ts +0 -3
- package/cli/opt/show-router.js.map +0 -1
- package/index.d.ts +0 -354
- package/index.js +0 -155
- package/index.js.map +0 -1
- package/setOptions.d.ts +0 -12
- package/setOptions.js +0 -60
- package/setOptions.js.map +0 -1
- package/starter.d.ts +0 -2
- package/starter.js.map +0 -1
- package/symbols.d.ts +0 -13
- package/symbols.js +0 -31
- package/symbols.js.map +0 -1
- package/util/index.d.ts +0 -5
- package/util/index.js +0 -92
- package/util/index.js.map +0 -1
- package/util/stream.d.ts +0 -19
- package/util/stream.js +0 -66
- package/util/stream.js.map +0 -1
package/Router/scan.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = scan;
|
|
7
|
-
|
|
8
|
-
var fsFn = _interopRequireWildcard(require("fs"));
|
|
9
|
-
|
|
10
|
-
var pathFn = _interopRequireWildcard(require("path"));
|
|
11
|
-
|
|
12
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
13
|
-
|
|
14
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
-
|
|
16
|
-
async function readdir(path) {
|
|
17
|
-
return new Promise(resolve => fsFn.readdir(path, {
|
|
18
|
-
encoding: 'utf-8'
|
|
19
|
-
}, (err, files) => err ? resolve([]) : resolve(files)));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async function stat(path) {
|
|
23
|
-
return new Promise(resolve => fsFn.stat(path, (err, stat) => err ? resolve() : resolve(stat)));
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async function isFile(path) {
|
|
27
|
-
const s = await stat(path);
|
|
28
|
-
return s && s.isFile();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async function isDir(path) {
|
|
32
|
-
const s = await stat(path);
|
|
33
|
-
return s && s.isDirectory();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async function* scanFile(root, path = '/') {
|
|
37
|
-
for (let name of await readdir(pathFn.join(root, path))) {
|
|
38
|
-
if (/^[:$]?[a-zA-Z0-9_-]+(?:\${0,3}|[?*+])$/.test(name)) {
|
|
39
|
-
const newPath = pathFn.join(path, name);
|
|
40
|
-
|
|
41
|
-
if (isDir(pathFn.join(root, newPath))) {
|
|
42
|
-
yield* scanFile(root, newPath);
|
|
43
|
-
}
|
|
44
|
-
} else if (/^[:$]?[a-zA-Z0-9_-]+(?:\${0,3}|[?*+])(?:\.[a-z]+)?\.[a-z]+$/.test(name)) {
|
|
45
|
-
const newPath = pathFn.join(path, name);
|
|
46
|
-
|
|
47
|
-
if (isFile(pathFn.join(root, newPath))) {
|
|
48
|
-
yield newPath;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async function* scan(root) {
|
|
55
|
-
root = pathFn.resolve(root);
|
|
56
|
-
|
|
57
|
-
for await (const path of scanFile(root)) {
|
|
58
|
-
const pathInfo = path.split('.');
|
|
59
|
-
const paths = pathInfo[0].split(/[\\/]/).map(it => it === '-' ? it : it.replace(/^\$/, ':').replace(/\${3}$/, '+').replace(/\${2}$/, '*').replace(/\${1}$/, '?').toLowerCase()).filter(Boolean);
|
|
60
|
-
const filename = paths[paths.length - 1];
|
|
61
|
-
const extname = pathInfo.pop();
|
|
62
|
-
yield {
|
|
63
|
-
extname,
|
|
64
|
-
root,
|
|
65
|
-
path,
|
|
66
|
-
type: pathInfo[1] || '',
|
|
67
|
-
scope: (filename === 'index' ? paths.slice(0, -1) : paths).join('/'),
|
|
68
|
-
name: /^:?[a-zA-Z][a-zA-Z0-9]*(?:-_[a-zA-Z][a-zA-Z0-9]*)*[+*?]?$/.test(filename) ? filename.replace(/^:?[a-z]|-[a-z]/g, a => a.toUpperCase()).replace(/[^a-zA-Z0-9]/g, '') : ''
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=scan.js.map
|
package/Router/scan.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/k99/Router/scan.ts"],"names":["readdir","path","Promise","resolve","fsFn","encoding","err","files","stat","isFile","s","isDir","isDirectory","scanFile","root","name","pathFn","join","test","newPath","scan","pathInfo","split","paths","map","it","replace","toLowerCase","filter","Boolean","filename","length","extname","pop","type","scope","slice","a","toUpperCase"],"mappings":"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","sourcesContent":["import * as fsFn from 'fs';\nimport * as pathFn from 'path';\nimport { FileItem } from '../index';\n\nasync function readdir(path: string): Promise<string[]> {\n\treturn new Promise(resolve => fsFn.readdir(path, {encoding: 'utf-8'}, (err, files) => err ? resolve([]) : resolve(files)));\n}\nasync function stat(path: string): Promise<fsFn.Stats | undefined> {\n\treturn new Promise(resolve => fsFn.stat(path, (err, stat) => err ? resolve() : resolve(stat)));\n}\nasync function isFile(path: string) {\n\tconst s = await stat(path);\n\treturn s && s.isFile();\n}\nasync function isDir(path: string) {\n\tconst s = await stat(path);\n\treturn s && s.isDirectory();\n}\nasync function *scanFile(root: string, path: string = '/'): AsyncIterableIterator<string> {\n\tfor (let name of await readdir(pathFn.join(root, path))) {\n\t\tif (/^[:$]?[a-zA-Z0-9_-]+(?:\\${0,3}|[?*+])$/.test(name)) {\n\t\t\tconst newPath = pathFn.join(path, name);\n\t\t\tif (isDir(pathFn.join(root, newPath))) {\n\t\t\t\tyield *scanFile(root, newPath);\n\t\t\t}\n\t\t} else if (/^[:$]?[a-zA-Z0-9_-]+(?:\\${0,3}|[?*+])(?:\\.[a-z]+)?\\.[a-z]+$/.test(name)) {\n\t\t\tconst newPath = pathFn.join(path, name);\n\t\t\tif (isFile(pathFn.join(root, newPath))) {\n\t\t\t\tyield newPath;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default async function *scan(root: string): AsyncIterableIterator<FileItem> {\n\troot = pathFn.resolve(root);\n\tfor await (const path of scanFile(root)) {\n\t\tconst pathInfo = path.split('.');\n\t\tconst paths = pathInfo[0]\n\t\t\t.split(/[\\\\/]/).map(it => it === '-' ? it : it\n\t\t\t\t.replace(/^\\$/, ':')\n\t\t\t\t.replace(/\\${3}$/, '+')\n\t\t\t\t.replace(/\\${2}$/, '*')\n\t\t\t\t.replace(/\\${1}$/, '?')\n\t\t\t\t.toLowerCase())\n\t\t\t.filter(Boolean);\n\t\tconst filename = paths[paths.length - 1];\n\t\tconst extname = pathInfo.pop()!;\n\t\tyield {\n\t\t\textname, root, path, type: pathInfo[1] || '',\n\t\t\tscope: (filename === 'index' ? paths.slice(0, -1) : paths).join('/'),\n\t\t\tname: /^:?[a-zA-Z][a-zA-Z0-9]*(?:-_[a-zA-Z][a-zA-Z0-9]*)*[+*?]?$/.test(filename) ? filename.replace(/^:?[a-z]|-[a-z]/g, a => a.toUpperCase()).replace(/[^a-zA-Z0-9]/g, '') : '',\n\t\t};\n\t}\n}\n"],"file":"scan.js"}
|
package/Router/setHandleItem.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = setHandleItem;
|
|
7
|
-
|
|
8
|
-
var symbols = _interopRequireWildcard(require("../symbols"));
|
|
9
|
-
|
|
10
|
-
var _vars = require("./vars");
|
|
11
|
-
|
|
12
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
13
|
-
|
|
14
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
-
|
|
16
|
-
function setHandleItem(router, path, item, opt, name = '') {
|
|
17
|
-
if (!item) {
|
|
18
|
-
return [];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const removeList = [];
|
|
22
|
-
let order = item[symbols.order];
|
|
23
|
-
order = typeof order === 'number' && isFinite(order) ? order : opt.order;
|
|
24
|
-
const config = { ...opt.config,
|
|
25
|
-
...item[symbols.config]
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
if (typeof item === 'function') {
|
|
29
|
-
let methods = item[symbols.methods];
|
|
30
|
-
|
|
31
|
-
if (typeof methods === 'string') {
|
|
32
|
-
methods = [methods];
|
|
33
|
-
} else if (!Array.isArray(methods)) {
|
|
34
|
-
methods = ['GET', 'POST', 'PUT', 'DELETE'];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const remove = router.verb(path, item, { ...opt,
|
|
38
|
-
config,
|
|
39
|
-
test: item[symbols.test],
|
|
40
|
-
order,
|
|
41
|
-
methods
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
if (remove) {
|
|
45
|
-
removeList.push(remove);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (!methods.includes('OPTIONS')) {
|
|
49
|
-
const remove = router.verb(path, function (data, ...any) {
|
|
50
|
-
return this[symbols.options](data, ...any);
|
|
51
|
-
}, { ...opt,
|
|
52
|
-
config,
|
|
53
|
-
order,
|
|
54
|
-
methods: ['OPTIONS'],
|
|
55
|
-
name: `${name}:OPTIONS`
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
if (remove) {
|
|
59
|
-
removeList.push(remove);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return removeList;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (typeof item !== 'object') {
|
|
67
|
-
return removeList;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
for (const method of _vars.methods) {
|
|
71
|
-
const f = item[method];
|
|
72
|
-
|
|
73
|
-
if (typeof f !== 'function') {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const remove = router.verb(path, f, { ...opt,
|
|
78
|
-
config: { ...config,
|
|
79
|
-
...f[symbols.config]
|
|
80
|
-
},
|
|
81
|
-
test: f[symbols.test] || item[symbols.test],
|
|
82
|
-
order,
|
|
83
|
-
methods: [method],
|
|
84
|
-
name: name || method
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
if (remove) {
|
|
88
|
-
removeList.push(remove);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return removeList;
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=setHandleItem.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/k99/Router/setHandleItem.ts"],"names":["setHandleItem","router","path","item","opt","name","removeList","order","symbols","isFinite","config","methods","Array","isArray","remove","verb","test","push","includes","data","any","options","method","f"],"mappings":"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","sourcesContent":["import * as symbols from '../symbols';\nimport Router from '.';\nimport { Handle, Handles, HandleOption } from '..';\nimport { methods } from './vars';\n\nexport default function setHandleItem(router: Router, path: string, item: Handle | Handles, opt: Omit<HandleOption, 'test' | 'methods'>, name: string = ''): (() => void)[] {\n\tif (!item) { return []; }\n\tconst removeList: (() => void)[] = [];\n\tlet order = item[symbols.order];\n\torder = typeof order === 'number' && isFinite(order) ? order : opt.order;\n\tconst config = { ...opt.config, ...item[symbols.config] };\n\tif (typeof item === 'function') {\n\t\tlet methods = item[symbols.methods];\n\t\tif (typeof methods === 'string') {\n\t\t\tmethods = [methods];\n\t\t} else if (!Array.isArray(methods)) {\n\t\t\tmethods = ['GET', 'POST', 'PUT', 'DELETE'];\n\t\t}\n\t\tconst remove = router.verb(path, item, {...opt, config, test: item[symbols.test], order, methods });\n\t\tif (remove) { removeList.push(remove); }\n\t\tif (!methods.includes('OPTIONS')) {\n\t\t\tconst remove = router.verb(\n\t\t\t\tpath,\n\t\t\t\tfunction(data, ...any) { return this[symbols.options](data, ...any); },\n\t\t\t\t{...opt, config, order, methods: ['OPTIONS'], name: `${ name }:OPTIONS` }\n\t\t\t)\n\t\t\tif (remove) { removeList.push(remove); }\n\t\t}\n\t\treturn removeList;\n\t}\n\tif (typeof item !== 'object') { return removeList; }\n\tfor (const method of methods) {\n\t\tconst f = item[method];\n\t\tif (typeof f !== 'function') { continue; }\n\t\tconst remove = router.verb(path, f, {...opt, config: {...config, ...f[symbols.config]}, test: f[symbols.test] || item[symbols.test], order, methods: [method], name: name || method });\n\t\tif (remove) { removeList.push(remove); }\n\t}\n\treturn removeList;\n}\n"],"file":"setHandleItem.js"}
|
package/Router/settings.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import extendsInterface from './extendsInterface';
|
|
2
|
-
import Router from './index';
|
|
3
|
-
interface ISettings {
|
|
4
|
-
/** 读取配置 */
|
|
5
|
-
read(path: string): Promise<object | null | undefined>;
|
|
6
|
-
/** 写入配置 */
|
|
7
|
-
write(path: string, cfg?: object | null | undefined): Promise<boolean>;
|
|
8
|
-
}
|
|
9
|
-
interface Settings extends ISettings, extendsInterface {
|
|
10
|
-
}
|
|
11
|
-
declare function Settings(router: Router): Settings;
|
|
12
|
-
export default Settings;
|
package/Router/settings.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var fsFn = _interopRequireWildcard(require("fs"));
|
|
9
|
-
|
|
10
|
-
var pathFn = _interopRequireWildcard(require("path"));
|
|
11
|
-
|
|
12
|
-
var _extendsInterface = _interopRequireDefault(require("./extendsInterface"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
17
|
-
|
|
18
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
-
|
|
20
|
-
/** 获取查询路径 */
|
|
21
|
-
function* getPaths(router, path, usePlugin) {
|
|
22
|
-
path = `${pathFn.join('.', path, '.')}.json`;
|
|
23
|
-
yield pathFn.resolve(router.runtime.path, router.runtime.settings, path);
|
|
24
|
-
|
|
25
|
-
if (!usePlugin) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const r = /^\/group\/([a-zA-Z][a-zA-Z0-9_-]*(?:\.[a-zA-Z][a-zA-Z0-9_-]*)*)(\/.*)$/.exec(path);
|
|
30
|
-
|
|
31
|
-
if (!r) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const plugin = router.plugin(r[1]);
|
|
36
|
-
|
|
37
|
-
if (!plugin) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
yield pathFn.join(plugin.path, r[2]);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function Settings(router) {
|
|
45
|
-
return (0, _extendsInterface.default)(router, {
|
|
46
|
-
async read(path) {
|
|
47
|
-
for (const p of getPaths(this, path, true)) {
|
|
48
|
-
try {
|
|
49
|
-
return JSON.parse((await new Promise((resolve, reject) => fsFn.readFile(p, 'utf-8', (e, d) => e ? reject(e) : resolve(d)))));
|
|
50
|
-
} catch {}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
async write(path, cfg) {
|
|
55
|
-
for (const p of getPaths(this, path, true)) {
|
|
56
|
-
if (cfg === undefined) {
|
|
57
|
-
return new Promise(resolve => fsFn.unlink(p, e => resolve(!e)));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
await new Promise(r => fsFn.mkdir(pathFn.dirname(p), {
|
|
61
|
-
recursive: true
|
|
62
|
-
}, () => r()));
|
|
63
|
-
return new Promise(resolve => fsFn.writeFile(p, JSON.stringify(cfg), e => resolve(!e)));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}, {});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
var _default = Settings;
|
|
73
|
-
exports.default = _default;
|
|
74
|
-
//# sourceMappingURL=settings.js.map
|
package/Router/settings.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/k99/Router/settings.ts"],"names":["getPaths","router","path","usePlugin","pathFn","join","resolve","runtime","settings","r","exec","plugin","Settings","read","p","JSON","parse","Promise","reject","fsFn","readFile","e","d","write","cfg","undefined","unlink","mkdir","dirname","recursive","writeFile","stringify"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAUA;AACA,UAAUA,QAAV,CAAmBC,MAAnB,EAAmCC,IAAnC,EAAiDC,SAAjD,EAAsE;AACrED,EAAAA,IAAI,GAAK,GAAGE,MAAM,CAACC,IAAP,CAAY,GAAZ,EAAkBH,IAAlB,EAAwB,GAAxB,CAA8B,OAA1C;AACA,QAAME,MAAM,CAACE,OAAP,CAAeL,MAAM,CAACM,OAAP,CAAeL,IAA9B,EAAoCD,MAAM,CAACM,OAAP,CAAeC,QAAnD,EAA6DN,IAA7D,CAAN;;AACA,MAAI,CAACC,SAAL,EAAgB;AAAE;AAAS;;AAC3B,QAAMM,CAAC,GAAG,yEAAyEC,IAAzE,CAA8ER,IAA9E,CAAV;;AACA,MAAI,CAACO,CAAL,EAAQ;AAAE;AAAS;;AACnB,QAAME,MAAM,GAAGV,MAAM,CAACU,MAAP,CAAcF,CAAC,CAAC,CAAD,CAAf,CAAf;;AACA,MAAI,CAACE,MAAL,EAAa;AAAE;AAAS;;AACxB,QAAMP,MAAM,CAACC,IAAP,CAAYM,MAAM,CAACT,IAAnB,EAAyBO,CAAC,CAAC,CAAD,CAA1B,CAAN;AACA;;AAED,SAASG,QAAT,CAAkBX,MAAlB,EAAkC;AACjC,SAAO,+BAA0CA,MAA1C,EAAkD;AACxD,UAAMY,IAAN,CAAyBX,IAAzB,EAAuC;AACtC,WAAK,MAAMY,CAAX,IAAgBd,QAAQ,CAAC,IAAD,EAAOE,IAAP,EAAa,IAAb,CAAxB,EAA4C;AAC3C,YAAI;AACH,iBAAOa,IAAI,CAACC,KAAL,EAAW,MAAM,IAAIC,OAAJ,CAAY,CAACX,OAAD,EAAUY,MAAV,KAAqBC,IAAI,CAACC,QAAL,CAAcN,CAAd,EAAiB,OAAjB,EAA0B,CAACO,CAAD,EAAIC,CAAJ,KAAUD,CAAC,GAAGH,MAAM,CAACG,CAAD,CAAT,GAAef,OAAO,CAACgB,CAAD,CAA3D,CAAjC,CAAjB,EAAP;AACA,SAFD,CAEE,MAAM,CAAE;AACV;AACD,KAPuD;;AAQxD,UAAMC,KAAN,CAA0BrB,IAA1B,EAAwCsB,GAAxC,EAAyE;AACxE,WAAK,MAAMV,CAAX,IAAgBd,QAAQ,CAAC,IAAD,EAAOE,IAAP,EAAa,IAAb,CAAxB,EAA4C;AAC3C,YAAIsB,GAAG,KAAKC,SAAZ,EAAuB;AACtB,iBAAO,IAAIR,OAAJ,CAAqBX,OAAO,IAAIa,IAAI,CAACO,MAAL,CAAYZ,CAAZ,EAAeO,CAAC,IAAEf,OAAO,CAAC,CAACe,CAAF,CAAzB,CAAhC,CAAP;AACA;;AACD,cAAM,IAAIJ,OAAJ,CAAYR,CAAC,IAAIU,IAAI,CAACQ,KAAL,CAAWvB,MAAM,CAACwB,OAAP,CAAed,CAAf,CAAX,EAA8B;AAAEe,UAAAA,SAAS,EAAE;AAAb,SAA9B,EAAmD,MAAMpB,CAAC,EAA1D,CAAjB,CAAN;AACA,eAAO,IAAIQ,OAAJ,CAAYX,OAAO,IAAIa,IAAI,CAACW,SAAL,CAAehB,CAAf,EAAkBC,IAAI,CAACgB,SAAL,CAAeP,GAAf,CAAlB,EAAuCH,CAAC,IAAIf,OAAO,CAAC,CAACe,CAAF,CAAnD,CAAvB,CAAP;AACA;;AACD,aAAO,KAAP;AACA;;AAjBuD,GAAlD,EAkBJ,EAlBI,CAAP;AAmBA;;eAEcT,Q","sourcesContent":["import * as fsFn from 'fs';\nimport * as pathFn from 'path';\nimport extendsInterface from './extendsInterface';\nimport Router from './index';\ninterface ISettings {\n\t/** 读取配置 */\n\tread(path: string): Promise<object | null | undefined>;\n\t/** 写入配置 */\n\twrite(path: string, cfg?: object | null | undefined): Promise<boolean>;\n\t// todo: watch, unwatch\n}\ninterface Settings extends ISettings, extendsInterface {}\n/** 获取查询路径 */\nfunction *getPaths(router: Router, path: string, usePlugin?: boolean) {\n\tpath = `${ pathFn.join('.', path, '.') }.json`;\n\tyield pathFn.resolve(router.runtime.path, router.runtime.settings, path);\n\tif (!usePlugin) { return; }\n\tconst r = /^\\/group\\/([a-zA-Z][a-zA-Z0-9_-]*(?:\\.[a-zA-Z][a-zA-Z0-9_-]*)*)(\\/.*)$/.exec(path);\n\tif (!r) { return; }\n\tconst plugin = router.plugin(r[1]);\n\tif (!plugin) { return; }\n\tyield pathFn.join(plugin.path, r[2]);\n}\n\nfunction Settings(router: Router) {\n\treturn extendsInterface<ISettings, {}, Settings>(router, {\n\t\tasync read(this: Router, path: string) {\n\t\t\tfor (const p of getPaths(this, path, true)) {\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(await new Promise((resolve, reject) => fsFn.readFile(p, 'utf-8', (e, d) => e ? reject(e) : resolve(d))));\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t},\n\t\tasync write(this: Router, path: string, cfg?: object | null | undefined) {\n\t\t\tfor (const p of getPaths(this, path, true)) {\n\t\t\t\tif (cfg === undefined) {\n\t\t\t\t\treturn new Promise<boolean>(resolve => fsFn.unlink(p, e=>resolve(!e)));\n\t\t\t\t}\n\t\t\t\tawait new Promise(r => fsFn.mkdir(pathFn.dirname(p), { recursive: true }, () => r()));\n\t\t\t\treturn new Promise(resolve => fsFn.writeFile(p, JSON.stringify(cfg), e => resolve(!e)));\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t}, {});\n}\n\nexport default Settings;\n"],"file":"settings.js"}
|
package/Router/start.d.ts
DELETED
package/Router/start.js
DELETED
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = start;
|
|
7
|
-
|
|
8
|
-
var fsFn = _interopRequireWildcard(require("fs"));
|
|
9
|
-
|
|
10
|
-
var pathFn = _interopRequireWildcard(require("path"));
|
|
11
|
-
|
|
12
|
-
var _Plugin = _interopRequireWildcard(require("../Plugin"));
|
|
13
|
-
|
|
14
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
15
|
-
|
|
16
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* 将插件添加到系统
|
|
20
|
-
*/
|
|
21
|
-
async function addPlugin(plugins, router, name, added) {
|
|
22
|
-
if (added.has(name)) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
added.add(name);
|
|
27
|
-
const plugin = plugins[name];
|
|
28
|
-
|
|
29
|
-
if (!plugin) {
|
|
30
|
-
throw new Error(`don't find the plugin '${name}'`);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
for (const p of plugin.dependencies) {
|
|
34
|
-
await addPlugin(plugins, router, p, added);
|
|
35
|
-
} // await plugin.callHook('');
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
router.plugin(plugin);
|
|
39
|
-
|
|
40
|
-
for (const {
|
|
41
|
-
type,
|
|
42
|
-
path = '',
|
|
43
|
-
scope
|
|
44
|
-
} of plugin.resources) {
|
|
45
|
-
switch (type) {
|
|
46
|
-
case 'app':
|
|
47
|
-
await router.scan(pathFn.join(plugin.path, path), {
|
|
48
|
-
group: plugin.name,
|
|
49
|
-
scope
|
|
50
|
-
});
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/** 判断是否为文件 */
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
async function isFile(path) {
|
|
59
|
-
return new Promise((resolve, reject) => fsFn.stat(path, (err, stats) => err ? reject(err) : resolve(stats))).then(s => s.isFile()).catch(() => false);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* 设置配置
|
|
63
|
-
* @param pluginPath 插件路径
|
|
64
|
-
* @param config 配置
|
|
65
|
-
* @param hasParent 是否存在父配置
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
function set(plugins, pluginPath, baseConfig, hasParent) {
|
|
70
|
-
let plugin = plugins[pluginPath];
|
|
71
|
-
|
|
72
|
-
if (plugin) {
|
|
73
|
-
return plugin;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
let {
|
|
77
|
-
name
|
|
78
|
-
} = baseConfig || {};
|
|
79
|
-
name = typeof name === 'string' && _Plugin.nameRegex.test(name) && name || '';
|
|
80
|
-
plugin = plugins[name];
|
|
81
|
-
|
|
82
|
-
if (plugin) {
|
|
83
|
-
return plugin;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (hasParent && !name) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
plugin = new _Plugin.default(name, pluginPath, baseConfig);
|
|
91
|
-
plugins[name] = plugin;
|
|
92
|
-
plugins[pluginPath] = plugin;
|
|
93
|
-
return plugin;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* 获取配置
|
|
97
|
-
* @param path 插件路径
|
|
98
|
-
* @param configName 配置文件名
|
|
99
|
-
* @param hasParent 是否存在父配置
|
|
100
|
-
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
async function readConfig(plugins, path, configName, hasParent) {
|
|
104
|
-
try {
|
|
105
|
-
return set(plugins, path, (await Promise.resolve().then(() => _interopRequireWildcard(require(`${pathFn.resolve(path, configName)}`)))), hasParent);
|
|
106
|
-
} catch (e) {
|
|
107
|
-
console.error(e);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return hasParent ? undefined : set(plugins, path, {});
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 从 npm 包目录中查找
|
|
114
|
-
* @param id 相对 node_modules 的路径
|
|
115
|
-
* @param parent 父配置
|
|
116
|
-
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
async function find(plugins, id, parent) {
|
|
120
|
-
let {
|
|
121
|
-
path
|
|
122
|
-
} = parent;
|
|
123
|
-
|
|
124
|
-
for (;;) {
|
|
125
|
-
for (let f of _Plugin.default.configFileNames) {
|
|
126
|
-
const p = pathFn.join(path, 'node_modules', id, f);
|
|
127
|
-
|
|
128
|
-
if (!(await isFile(p))) {
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const resPath = pathFn.join(path, 'node_modules', id);
|
|
133
|
-
return plugins[resPath] || readConfig(plugins, resPath, f, true);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const p = pathFn.dirname(path);
|
|
137
|
-
|
|
138
|
-
if (p === path) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
path = p;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* 从目录读取插件信息
|
|
147
|
-
* @param path 目录
|
|
148
|
-
* @param hasParent 是否存在父配置
|
|
149
|
-
*/
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
async function read(plugins, path, parent) {
|
|
153
|
-
if (parent) {
|
|
154
|
-
path = pathFn.resolve(parent.path, path);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
for (let f of _Plugin.default.configFileNames) {
|
|
158
|
-
const p = pathFn.resolve(path, f);
|
|
159
|
-
|
|
160
|
-
if (!(await isFile(p))) {
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return readConfig(plugins, path, f, Boolean(parent));
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (parent) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
const plugin = new _Plugin.default('', path);
|
|
172
|
-
plugins[path] = plugin;
|
|
173
|
-
plugins[''] = plugin;
|
|
174
|
-
return plugin;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
async function start(router, {
|
|
178
|
-
showRouter
|
|
179
|
-
} = {}) {
|
|
180
|
-
/** 插件映射 */
|
|
181
|
-
const plugins = Object.create(null);
|
|
182
|
-
/** 入口模块 */
|
|
183
|
-
|
|
184
|
-
const main = await read(plugins, process.cwd());
|
|
185
|
-
/** 插件集合 */
|
|
186
|
-
|
|
187
|
-
const pluginSet = new Set([main]); // 查找插件
|
|
188
|
-
|
|
189
|
-
for (const path of main.plugins) {
|
|
190
|
-
const item = await read(plugins, path, main);
|
|
191
|
-
|
|
192
|
-
if (!item) {
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (pluginSet.has(item)) {
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
pluginSet.add(item);
|
|
201
|
-
} // 扫描目录
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (main.scan) {
|
|
205
|
-
const path = pathFn.join(process.cwd(), main.scan);
|
|
206
|
-
const list = await new Promise(resolve => fsFn.readdir(path, {
|
|
207
|
-
encoding: 'utf-8'
|
|
208
|
-
}, (err, files) => err ? resolve([]) : resolve(files)));
|
|
209
|
-
|
|
210
|
-
for (let p of list) {
|
|
211
|
-
const item = await read(plugins, pathFn.join(path, p), main);
|
|
212
|
-
|
|
213
|
-
if (!item) {
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
if (pluginSet.has(item)) {
|
|
218
|
-
continue;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
pluginSet.add(item);
|
|
222
|
-
}
|
|
223
|
-
} // 递归 npm 包插件
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
for (let pluginlist = [...pluginSet], plugin = pluginlist.shift(); plugin; plugin = pluginlist.shift()) {
|
|
227
|
-
for (let p of plugin.packages) {
|
|
228
|
-
const item = await find(plugins, p, plugin);
|
|
229
|
-
|
|
230
|
-
if (!item) {
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (pluginSet.has(item)) {
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
pluginSet.add(item);
|
|
239
|
-
pluginlist.push(item);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
for (let p of pluginSet) {
|
|
244
|
-
await p.callHook('inited').catch(() => {});
|
|
245
|
-
} // 添加插件
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
const added = new Set();
|
|
249
|
-
|
|
250
|
-
for (let t of [...pluginSet].map(p => p.name)) {
|
|
251
|
-
await addPlugin(plugins, router, t, added);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if (showRouter) {
|
|
255
|
-
console.table([...router].map(({
|
|
256
|
-
methods,
|
|
257
|
-
path,
|
|
258
|
-
name,
|
|
259
|
-
group
|
|
260
|
-
}) => ({
|
|
261
|
-
methods: methods.join(' '),
|
|
262
|
-
path,
|
|
263
|
-
name,
|
|
264
|
-
group
|
|
265
|
-
})));
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return router;
|
|
269
|
-
}
|
|
270
|
-
//# sourceMappingURL=start.js.map
|
package/Router/start.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/k99/Router/start.ts"],"names":["addPlugin","plugins","router","name","added","has","add","plugin","Error","p","dependencies","type","path","scope","resources","scan","pathFn","join","group","isFile","Promise","resolve","reject","fsFn","stat","err","stats","then","s","catch","set","pluginPath","baseConfig","hasParent","nameRegex","test","Plugin","readConfig","configName","e","console","error","undefined","find","id","parent","f","configFileNames","resPath","dirname","read","Boolean","start","showRouter","Object","create","main","process","cwd","pluginSet","Set","item","list","readdir","encoding","files","pluginlist","shift","packages","push","callHook","t","map","table","methods"],"mappings":"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","sourcesContent":["import * as fsFn from 'fs';\nimport * as pathFn from 'path';\n\nimport { StartOption, PluginConfig } from '../index';\nimport Plugin, { nameRegex } from '../Plugin';\nimport Router from './index';\n\ninterface Plugins {\n\t[k: string]: Plugin;\n}\n/**\n * 将插件添加到系统\n */\nasync function addPlugin(plugins: Plugins, router: Router, name: string, added: Set<string>) {\n\tif (added.has(name)) { return; }\n\tadded.add(name);\n\tconst plugin = plugins[name];\n\tif (!plugin) {\n\t\tthrow new Error(`don't find the plugin '${ name }'`);\n\t}\n\tfor (const p of plugin.dependencies) {\n\t\tawait addPlugin(plugins, router, p, added);\n\t}\n\t// await plugin.callHook('');\n\trouter.plugin(plugin);\n\tfor (const {type, path = '', scope} of plugin.resources) {\n\t\tswitch (type) {\n\t\t\tcase 'app':\n\t\t\t\tawait router.scan(pathFn.join(plugin.path, path), { group: plugin.name, scope });\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n/** 判断是否为文件 */\nasync function isFile(path: string): Promise<Boolean> {\n\treturn new Promise<fsFn.Stats>((resolve, reject) => fsFn.stat(path, (err, stats) => err ? reject(err) : resolve(stats)))\n\t\t.then(s => s.isFile()).catch(() => false);\n}\n\n/**\n * 设置配置\n * @param pluginPath 插件路径\n * @param config 配置\n * @param hasParent 是否存在父配置\n */\nfunction set(plugins: Plugins, pluginPath: string, baseConfig: PluginConfig, hasParent?: false): Plugin;\nfunction set(plugins: Plugins, pluginPath: string, baseConfig: PluginConfig, hasParent?: boolean): Plugin | undefined;\nfunction set(plugins: Plugins, pluginPath: string, baseConfig: PluginConfig, hasParent?: boolean): Plugin | undefined {\n\tlet plugin = plugins[pluginPath];\n\tif (plugin) { return plugin; }\n\tlet { name } = baseConfig || {};\n\tname = typeof name === 'string' && nameRegex.test(name) && name || '';\n\tplugin = plugins[name];\n\tif (plugin) { return plugin; }\n\tif (hasParent && !name) { return; }\n\tplugin = new Plugin(name, pluginPath, baseConfig);\n\tplugins[name] = plugin;\n\tplugins[pluginPath] = plugin;\n\treturn plugin;\n}\n/**\n * 获取配置\n * @param path 插件路径\n * @param configName 配置文件名\n * @param hasParent 是否存在父配置\n */\nasync function readConfig(plugins: Plugins, path: string, configName: string, hasParent: boolean): Promise<Plugin | undefined> {\n\ttry {\n\t\treturn set(plugins, path, await import(pathFn.resolve(path, configName)), hasParent);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n\treturn hasParent ? undefined : set(plugins, path, {});\n}\n/**\n * 从 npm 包目录中查找\n * @param id 相对 node_modules 的路径\n * @param parent 父配置\n */\nasync function find(plugins: Plugins, id: string, parent: Plugin): Promise<Plugin | undefined> {\n\tlet { path } = parent;\n\tfor (;;) {\n\t\tfor (let f of Plugin.configFileNames) {\n\t\t\tconst p = pathFn.join(path, 'node_modules', id, f);\n\t\t\tif (!await isFile(p)) { continue; }\n\t\t\tconst resPath = pathFn.join(path, 'node_modules', id);\n\t\t\treturn plugins[resPath] || readConfig(plugins, resPath, f, true);\n\t\t}\n\t\tconst p = pathFn.dirname(path);\n\t\tif (p === path) { return; }\n\t\tpath = p;\n\t}\n}\n/**\n * 从目录读取插件信息\n * @param path 目录\n * @param hasParent 是否存在父配置\n */\nasync function read(plugins: Plugins, path: string): Promise<Plugin>;\nasync function read(plugins: Plugins, path: string, parent: Plugin): Promise<Plugin | undefined>;\nasync function read(plugins: Plugins, path: string, parent?: Plugin): Promise<Plugin | undefined> {\n\tif (parent) { path = pathFn.resolve(parent.path, path); }\n\tfor (let f of Plugin.configFileNames) {\n\t\tconst p = pathFn.resolve(path, f);\n\t\tif (!await isFile(p)) { continue; }\n\t\treturn readConfig(plugins, path, f, Boolean(parent));\n\t}\n\tif (parent) { return; }\n\tconst plugin = new Plugin('', path);\n\tplugins[path] = plugin;\n\tplugins[''] = plugin;\n\treturn plugin;\n}\n\nexport default async function start(router: Router, {showRouter}: StartOption = {}): Promise<Router> {\n\t/** 插件映射 */\n\tconst plugins: Plugins = Object.create(null);\n\t/** 入口模块 */\n\tconst main = await read(plugins, process.cwd());\n\t/** 插件集合 */\n\tconst pluginSet = new Set<Plugin>([main]);\n\t// 查找插件\n\tfor (const path of main.plugins) {\n\t\tconst item = await read(plugins, path, main);\n\t\tif (!item) { continue; }\n\t\tif (pluginSet.has(item)) { continue; }\n\t\tpluginSet.add(item);\n\t}\n\t// 扫描目录\n\tif (main.scan) {\n\t\tconst path = pathFn.join(process.cwd(), main.scan);\n\t\tconst list: string[] = await new Promise(resolve => fsFn.readdir(path, {encoding: 'utf-8'}, (err, files) => err ? resolve([]) : resolve(files)));\n\t\tfor (let p of list) {\n\t\t\tconst item = await read(plugins, pathFn.join(path, p), main);\n\t\t\tif (!item) { continue; }\n\t\t\tif (pluginSet.has(item)) { continue; }\n\t\t\tpluginSet.add(item);\n\t\t}\n\t}\n\n\t// 递归 npm 包插件\n\tfor (let pluginlist = [...pluginSet], plugin = pluginlist.shift(); plugin; plugin = pluginlist.shift()) {\n\t\tfor (let p of plugin.packages) {\n\t\t\tconst item = await find(plugins, p, plugin);\n\t\t\tif (!item) { continue; }\n\t\t\tif (pluginSet.has(item)) { continue; }\n\t\t\tpluginSet.add(item);\n\t\t\tpluginlist.push(item);\n\t\t}\n\t}\n\tfor (let p of pluginSet) {\n\t\tawait p.callHook('inited').catch(() => {});\n\t}\n\t// 添加插件\n\tconst added = new Set<string>();\n\tfor (let t of [...pluginSet].map(p => p.name)) {\n\t\tawait addPlugin(plugins, router, t, added);\n\t}\n\tif (showRouter) {\n\t\tconsole.table([...router].map(({methods, path, name, group}) => ({methods: methods.join(' '), path, name, group})));\n\t}\n\treturn router;\n}\n"],"file":"start.js"}
|
package/Router/vars.d.ts
DELETED
package/Router/vars.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.resourceHandleMap = exports.methods = void 0;
|
|
7
|
-
|
|
8
|
-
/** 方法列表 */
|
|
9
|
-
const methods = new Set(['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS']);
|
|
10
|
-
/** 资源的处理函数配置 */
|
|
11
|
-
|
|
12
|
-
exports.methods = methods;
|
|
13
|
-
const resourceHandleMap = {
|
|
14
|
-
index: {
|
|
15
|
-
methods: ['GET'],
|
|
16
|
-
path: ''
|
|
17
|
-
},
|
|
18
|
-
create: {
|
|
19
|
-
methods: ['POST'],
|
|
20
|
-
path: ''
|
|
21
|
-
},
|
|
22
|
-
new: {
|
|
23
|
-
methods: ['GET'],
|
|
24
|
-
path: '/new'
|
|
25
|
-
},
|
|
26
|
-
show: {
|
|
27
|
-
methods: ['GET'],
|
|
28
|
-
path: '/:id'
|
|
29
|
-
},
|
|
30
|
-
update: {
|
|
31
|
-
methods: ['PUT'],
|
|
32
|
-
path: '/:id'
|
|
33
|
-
},
|
|
34
|
-
destroy: {
|
|
35
|
-
methods: ['DELETE'],
|
|
36
|
-
path: '/:id'
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
exports.resourceHandleMap = resourceHandleMap;
|
|
40
|
-
//# sourceMappingURL=vars.js.map
|
package/Router/vars.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/k99/Router/vars.ts"],"names":["methods","Set","resourceHandleMap","index","path","create","new","show","update","destroy"],"mappings":";;;;;;;AAEA;AACO,MAAMA,OAAO,GAAG,IAAIC,GAAJ,CAAgB,CAAC,KAAD,EAAQ,MAAR,EAAgB,KAAhB,EAAuB,QAAvB,EAAiC,MAAjC,EAAyC,SAAzC,CAAhB,CAAhB;AAEP;;;AACO,MAAMC,iBAAoE,GAAG;AACnFC,EAAAA,KAAK,EAAI;AAAEH,IAAAA,OAAO,EAAE,CAAC,KAAD,CAAX;AAAuBI,IAAAA,IAAI,EAAE;AAA7B,GAD0E;AAEnFC,EAAAA,MAAM,EAAG;AAAEL,IAAAA,OAAO,EAAE,CAAC,MAAD,CAAX;AAAuBI,IAAAA,IAAI,EAAE;AAA7B,GAF0E;AAGnFE,EAAAA,GAAG,EAAM;AAAEN,IAAAA,OAAO,EAAE,CAAC,KAAD,CAAX;AAAuBI,IAAAA,IAAI,EAAE;AAA7B,GAH0E;AAInFG,EAAAA,IAAI,EAAK;AAAEP,IAAAA,OAAO,EAAE,CAAC,KAAD,CAAX;AAAuBI,IAAAA,IAAI,EAAE;AAA7B,GAJ0E;AAKnFI,EAAAA,MAAM,EAAG;AAAER,IAAAA,OAAO,EAAE,CAAC,KAAD,CAAX;AAAuBI,IAAAA,IAAI,EAAE;AAA7B,GAL0E;AAMnFK,EAAAA,OAAO,EAAE;AAAET,IAAAA,OAAO,EAAE,CAAC,QAAD,CAAX;AAAuBI,IAAAA,IAAI,EAAE;AAA7B;AAN0E,CAA7E","sourcesContent":["import { Method } from '..';\n\n/** 方法列表 */\nexport const methods = new Set<Method>(['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS']);\n\n/** 资源的处理函数配置 */\nexport const resourceHandleMap: {[key: string]:{methods: Method[], path: string}} = {\n\tindex: { methods: ['GET' ], path: '' },\n\tcreate: { methods: ['POST' ], path: '' },\n\tnew: { methods: ['GET' ], path: '/new' },\n\tshow: { methods: ['GET' ], path: '/:id' },\n\tupdate: { methods: ['PUT' ], path: '/:id' },\n\tdestroy: { methods: ['DELETE'], path: '/:id' },\n};\n"],"file":"vars.js"}
|