xshell 1.0.7 → 1.0.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xshell",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "bin": {
@@ -70,7 +70,8 @@
70
70
  "fs-monkey": "^1.0.3",
71
71
  "gulp-sort": "^2.0.0",
72
72
  "hash-string": "^1.0.0",
73
- "i18next": "^22.4.9",
73
+ "http-cookie-agent": "^5.0.2",
74
+ "i18next": "^22.4.10",
74
75
  "i18next-scanner": "^4.1.1",
75
76
  "iconv-lite": "^0.6.3",
76
77
  "js-cookie": "^3.0.1",
@@ -81,12 +82,9 @@
81
82
  "map-stream": "0.0.7",
82
83
  "memfs": "^3.4.13",
83
84
  "ora": "^6.1.2",
84
- "promise-retry": "^2.0.1",
85
85
  "qs": "^6.11.0",
86
86
  "react": "^18.2.0",
87
87
  "react-i18next": "^12.1.5",
88
- "request": "^2.88.2",
89
- "request-promise-native": "^1.0.9",
90
88
  "resolve-path": "^1.4.0",
91
89
  "stream-buffers": "^3.0.2",
92
90
  "strip-ansi": "^7.0.1",
@@ -94,10 +92,11 @@
94
92
  "tough-cookie": "^4.1.2",
95
93
  "tslib": "^2.5.0",
96
94
  "typescript": "^4.9.5",
95
+ "undici": "^5.20.0",
97
96
  "upath": "^2.0.1",
98
97
  "vinyl": "^3.0.0",
99
98
  "vinyl-fs": "^3.0.3",
100
- "ws": "^8.12.0"
99
+ "ws": "^8.12.1"
101
100
  },
102
101
  "devDependencies": {
103
102
  "@babel/types": "^7.20.7",
@@ -107,22 +106,19 @@
107
106
  "@types/cheerio": "^0.22.31",
108
107
  "@types/fs-extra": "^11.0.1",
109
108
  "@types/gulp-sort": "2.0.0",
110
- "@types/js-cookie": "^3.0.2",
109
+ "@types/js-cookie": "^3.0.3",
111
110
  "@types/koa": "^2.13.5",
112
111
  "@types/koa-compress": "^4.0.3",
113
112
  "@types/lodash": "^4.14.191",
114
- "@types/node": "^18.13.0",
115
- "@types/promise-retry": "^1.1.3",
113
+ "@types/node": "^18.14.0",
116
114
  "@types/qs": "^6.9.7",
117
- "@types/react": "^18.0.27",
118
- "@types/request": "^2.48.8",
119
- "@types/request-promise-native": "^1.0.18",
115
+ "@types/react": "^18.0.28",
120
116
  "@types/stream-buffers": "^3.0.4",
121
117
  "@types/tampermonkey": "^4.0.10",
122
118
  "@types/through2": "^2.0.38",
123
119
  "@types/tough-cookie": "^4.0.2",
124
120
  "@types/vinyl-fs": "^3.0.1",
125
- "@types/vscode": "^1.75.0",
121
+ "@types/vscode": "^1.75.1",
126
122
  "@types/ws": "^8.5.4",
127
123
  "source-map-loader": "^4.0.1",
128
124
  "ts-loader": "^9.4.2"
@@ -0,0 +1,91 @@
1
+ # 去掉 deasync 依赖,不需要 async cookie store
2
+ # 避免 require('deasync') 被 webpack 作为依赖打包
3
+
4
+ diff --git a/dist/utils/create_cookie_header_value.js b/dist/utils/create_cookie_header_value.js
5
+ index 1e7181f70328be83d4cfde384e929e41e568a225..05a64e7c45e3ab530e68b8ecdc95e2bef234de8a 100644
6
+ --- a/dist/utils/create_cookie_header_value.js
7
+ +++ b/dist/utils/create_cookie_header_value.js
8
+ @@ -14,9 +14,7 @@ function createCookieHeaderValue({
9
+ async_UNSTABLE = false,
10
+ jar
11
+ } = cookieOptions;
12
+ - const getCookiesSync = async_UNSTABLE ?
13
+ - // eslint-disable-next-line @typescript-eslint/no-var-requires
14
+ - require('deasync')(jar.getCookies.bind(jar)) : jar.getCookiesSync.bind(jar);
15
+ + const getCookiesSync = jar.getCookiesSync.bind(jar)
16
+ const cookies = getCookiesSync(requestUrl);
17
+ const cookiesMap = new Map(cookies.map(cookie => [cookie.key, cookie]));
18
+ for (const passedValue of passedValues) {
19
+ diff --git a/dist/utils/save_cookies_from_header.js b/dist/utils/save_cookies_from_header.js
20
+ index 1b13ef328e71f6fc1969309e15863592c1a1a244..9189d82004863dc28fecb23f2158980fc4944fa0 100644
21
+ --- a/dist/utils/save_cookies_from_header.js
22
+ +++ b/dist/utils/save_cookies_from_header.js
23
+ @@ -13,9 +13,7 @@ function saveCookiesFromHeader({
24
+ async_UNSTABLE = false,
25
+ jar
26
+ } = cookieOptions;
27
+ - const setCookieSync = async_UNSTABLE ?
28
+ - // eslint-disable-next-line @typescript-eslint/no-var-requires
29
+ - require('deasync')(jar.setCookie.bind(jar)) : jar.setCookieSync.bind(jar);
30
+ + const setCookieSync = jar.setCookieSync.bind(jar)
31
+ for (const cookie of [cookies].flat()) {
32
+ if (cookie == null) {
33
+ continue;
34
+ diff --git a/dist/utils/validate_cookie_options.js b/dist/utils/validate_cookie_options.js
35
+ index ef66ca0b24c063f799c0305e5714d7f288bf1e0a..ec0c3e8e7c1f725ec681200fef92fa3e8999d30a 100644
36
+ --- a/dist/utils/validate_cookie_options.js
37
+ +++ b/dist/utils/validate_cookie_options.js
38
+ @@ -10,15 +10,7 @@ opts, resolver = require.resolve) {
39
+ if (!('jar' in opts)) {
40
+ throw new TypeError('invalid cookies.jar');
41
+ }
42
+ - if (opts.async_UNSTABLE) {
43
+ - try {
44
+ - resolver('deasync');
45
+ - } catch (_err) {
46
+ - throw new Error('you should install deasync library when cookies.async_UNSTABLE is true.');
47
+ - }
48
+ - } else {
49
+ - if (!opts.jar.store.synchronous) {
50
+ - throw new TypeError('you should set cookies.async_UNSTABLE to true for using the asynchronous cookie store.');
51
+ - }
52
+ + if (!opts.jar.store.synchronous) {
53
+ + throw new TypeError('you should set cookies.async_UNSTABLE to true for using the asynchronous cookie store.');
54
+ }
55
+ }
56
+
57
+ diff --git a/package.json b/package.json
58
+ index 36a43d1d90ce2ef7dcbefcfe68344f40b012f386..cd8af28b7f3012b1d473f2c5b3e9e3abd25266be 100644
59
+ --- a/package.json
60
+ +++ b/package.json
61
+ @@ -76,7 +76,6 @@
62
+ "@hapi/wreck": "18.0.0",
63
+ "@semantic-release/changelog": "6.0.2",
64
+ "@semantic-release/git": "10.0.1",
65
+ - "@types/deasync": "0.1.2",
66
+ "@types/needle": "3.2.0",
67
+ "@types/node": "14.18.36",
68
+ "@types/request": "2.48.8",
69
+ @@ -86,7 +85,6 @@
70
+ "agentkeepalive": "4.2.1",
71
+ "ava": "5.1.0",
72
+ "axios": "1.2.1",
73
+ - "deasync": "0.1.28",
74
+ "got": "12.5.3",
75
+ "http-proxy-agent": "5.0.0",
76
+ "needle": "3.2.0",
77
+ @@ -106,14 +104,10 @@
78
+ "urllib": "3.10.0"
79
+ },
80
+ "peerDependencies": {
81
+ - "deasync": "^0.1.26",
82
+ "tough-cookie": "^4.0.0",
83
+ "undici": "^5.11.0"
84
+ },
85
+ "peerDependenciesMeta": {
86
+ - "deasync": {
87
+ - "optional": true
88
+ - },
89
+ "undici": {
90
+ "optional": true
91
+ }
package/repl.js CHANGED
@@ -137,7 +137,7 @@ function get_expr_of_stmt(statement) {
137
137
  return name;
138
138
  else // const { a, b } = c
139
139
  return factory.createObjectLiteralExpression(name.elements
140
- .filter(({ name }) => isIdentifier(name))
140
+ .filter(({ name }) => name && isIdentifier(name))
141
141
  .map(({ name }) => factory.createShorthandPropertyAssignment(name)));
142
142
  })()
143
143
  :
package/repl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["repl.ts"],"names":[],"mappings":"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","sourcesContent":["import nvm from 'vm'\nimport repl from 'repl'\nimport process from 'process'\nimport { fileURLToPath } from 'url'\n\n\nimport path from 'upath'\n\nimport ts from 'typescript'\nimport type {\n SourceFile, Node, Statement, Modifier, Identifier, StringLiteral,\n ExpressionStatement, ObjectBindingPattern, BindingElement,\n SyntaxKind as TSyntaxKind\n} from 'typescript'\nconst {\n factory, createPrinter,\n \n SyntaxKind, NodeFlags, ModifierFlags,\n \n isIdentifier, isNamedImports, isImportDeclaration, isAwaitExpression,\n isExpressionStatement, isVariableStatement,\n isNamespaceImport, isClassDeclaration, isCallExpression, isReturnStatement,\n isBinaryExpression, isFunctionDeclaration,\n} = ts\n\nimport type { Context } from 'koa'\n\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\nimport { log_section, log_line, delay, inspect, set_inspect_options, Timer } from './utils.js'\nimport { fread, fwrite, fwatchers } from './file.js'\nimport { Remote } from './net.js'\n\n\ndeclare global {\n var __: any\n \n var started_at: Date\n \n var repl_router: (ctx: Context) => Promise<boolean>\n}\n\n\n\nset_inspect_options()\n\n\n\nlet server: import('./server.js').Server\n\nlet inspection_limit = 10000\nlet printing_compiled_js = false\n\n\n/** 谨慎使用,webpack 打包后可能会变成 /d:/1/mod/node_modules/xshell/ 这样的编译期路径 */\nexport const fpd_root = path.dirname(fileURLToPath(import.meta.url)) + '/'\n\n\nexport function set_inspection_limit (limit: number = 10000) {\n if (limit === -1)\n limit = 50 * 10**4\n inspection_limit = limit\n}\n\n\nexport function set_printing_compiled_js (enabled: boolean) {\n printing_compiled_js = enabled\n}\n\n\n// ------------------------------------ Code Compilers, Transformers\nfunction resolve_kind (kind: TSyntaxKind) {\n return kind === SyntaxKind.VariableStatement ? 'VariableStatement' : SyntaxKind[kind]\n}\n\n\nfunction print_ast (nodes: Node[] | Node, sourceFile: SourceFile) {\n function print_node (node: Node) {\n console.log(`${ resolve_kind(node.kind) }: ${ node.getText(sourceFile) }`)\n }\n if (Array.isArray(nodes))\n nodes.forEach( node => { print_node(node) })\n else\n print_node(nodes)\n}\n\n\nexport function parse_code (code: string) {\n return ts.createSourceFile('repl.ts', code, ts.ScriptTarget.ESNext)\n}\n\n\nexport function generate_code (stmts: Statement[]) {\n return createPrinter({ omitTrailingSemicolon: true, removeComments: false, newLine: ts.NewLineKind.LineFeed })\n .printFile(\n factory.updateSourceFile(\n ts.createSourceFile('output.ts', '', ts.ScriptTarget.ESNext),\n stmts\n )\n )\n}\n\n\n\nfunction trans_import_2_require (import_decl: Statement) {\n if (!isImportDeclaration(import_decl))\n return import_decl\n \n const { importClause: import_clause, moduleSpecifier: module_specifier } = import_decl\n \n // require('module_specifier')\n const require_module_stmt = factory.createCallExpression( factory.createIdentifier('require'), [ ], [ module_specifier ])\n \n // aaa, bbb as ccc, default as ddd, ...\n // (import_clause.namedBindings as NamedImports).elements\n \n return [\n // import mod from 'mod'\n // global.mod = __importDefault(require(\"mod\")).default\n ... import_clause.name ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.name),\n factory.createPropertyAccessExpression( factory.createCallExpression( factory.createIdentifier('__importDefault'), [ ], [ require_module_stmt ]), 'default'),\n )\n ) ] : [ ],\n \n // import * as mod from 'mod'\n // global.mod = __importStar(require(\"mod\"))\n ... import_clause.namedBindings && isNamespaceImport(import_clause.namedBindings) ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.namedBindings.name),\n factory.createCallExpression( factory.createIdentifier('__importStar'), [ ], [ require_module_stmt ])\n ))\n ] : [ ],\n \n \n // import { element2 as element2_, element3 as element3_, other, default as mod2 } from 'mod2'\n ... import_clause.namedBindings && isNamedImports(import_clause.namedBindings) ? [\n // var { element2: element2_, element3 } = __importDefault(require(\"mod\"))\n factory.createVariableStatement([ ], [ factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n import_clause.namedBindings.elements.map( import_specifier => \n factory.createBindingElement(\n undefined, \n import_specifier.propertyName, \n import_specifier.name, \n import_specifier.propertyName?.text === 'default' ? require_module_stmt : undefined\n ))),\n undefined,\n undefined,\n require_module_stmt\n ) ]),\n \n // Object.assign(global, { element2_, element3 })\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n [ factory.createIdentifier('global'), factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false) ]\n )),\n \n factory.createExpressionStatement(\n import_clause.namedBindings.elements.length === 1 ? \n // (a)\n factory.createParenthesizedExpression(import_clause.namedBindings.elements[0].name)\n : // ({ a: xxx, b: xxx })\n factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false)\n )\n ] : [ ],\n ]\n}\n\n\n/** export function foo () { } */\nfunction trans_export_stmt (stmt: Statement) {\n if (ts.isExportAssignment(stmt))\n return factory.createExpressionStatement(stmt.expression)\n \n function is_export_modifier (modifier: Modifier) {\n return modifier.flags & ModifierFlags.Export || modifier.flags & ModifierFlags.ExportDefault || modifier.kind === SyntaxKind.ExportKeyword\n }\n \n // @ts-ignore\n if (stmt.modifiers?.some( modifier => is_export_modifier(modifier) )) {\n // @ts-ignore\n stmt.modifiers = factory.createNodeArray<Modifier>(\n // @ts-ignore\n stmt.modifiers.filter( modifier => !is_export_modifier(modifier) )\n )\n return stmt\n }\n \n return stmt\n}\n\n\nfunction trans_require_2_import (stmt: Statement, source_file: SourceFile) {\n if (!isVariableStatement(stmt))\n return stmt\n \n const { name, initializer: require_call } = stmt.declarationList.declarations[0]\n \n if (\n !isCallExpression(require_call) ||\n require_call.expression.getText(source_file) !== 'require'\n )\n return stmt\n \n const modpath = require_call.arguments[0] as StringLiteral\n \n // createNamedImports(createImportSpecifier())\n \n return factory.createImportDeclaration(\n undefined, \n undefined,\n factory.createImportClause(false, name as Identifier, undefined),\n modpath\n )\n}\n\n\n/** const a = 123, b = 234, { c, d: e } = obj */\nfunction trans_variable_decl_2_var (var_decl: Statement) {\n if (!isVariableStatement(var_decl)) return var_decl\n // @ts-ignore\n var_decl.declarationList.flags = NodeFlags.None\n return var_decl\n}\n\n\nfunction trans_class_decl_2_expr (class_decl: Statement) {\n if (!isClassDeclaration(class_decl)) return class_decl\n \n // export class C { } 这样的语句已经在 trans_export_stmt 中被去掉了 export modifier\n \n return factory.createVariableStatement(\n [ ],\n factory.createVariableDeclarationList([\n factory.createVariableDeclaration(\n class_decl.name, \n undefined, \n undefined, \n factory.createClassExpression(undefined, undefined, class_decl.name, undefined, undefined, class_decl.members)\n )\n ]))\n}\n\n\nfunction get_expr_of_stmt (statement: Statement): ExpressionStatement | Statement {\n if (isExpressionStatement(statement))\n return statement\n \n if (isVariableStatement(statement)) {\n const { declarations } = statement.declarationList\n return factory.createExpressionStatement(\n declarations.length === 1 ?\n (() => {\n const { name } = declarations[0]\n if (isIdentifier(name)) // const a = c\n return name\n else // const { a, b } = c\n return factory.createObjectLiteralExpression(\n name.elements\n .filter(({ name }: BindingElement) => \n isIdentifier(name))\n .map(({ name }: BindingElement) => \n factory.createShorthandPropertyAssignment(name as Identifier))\n )\n })()\n :\n factory.createObjectLiteralExpression(\n declarations.map( var_decl => \n factory.createShorthandPropertyAssignment(var_decl.name as Identifier)),\n true)\n )\n }\n \n if (isFunctionDeclaration(statement))\n return factory.createExpressionStatement(statement.name)\n \n return statement\n}\n\nfunction trans_return_2_expr (stmt: Statement): Statement {\n if (!isReturnStatement(stmt)) return stmt\n return factory.createExpressionStatement(stmt.expression)\n}\n\n\nfunction assign_var_decl (var_decl: Statement, destination: string = 'global') {\n if (!isVariableStatement(var_decl))\n return [var_decl]\n \n // VariableDeclaration[] -> ObjectLiteral[]\n // const a = 123, b = 234, { c, d: e } = obj\n const obj_literal =\n factory.createObjectLiteralExpression(\n var_decl.declarationList.declarations.map( declaration => \n isIdentifier(declaration.name) ?\n [ factory.createShorthandPropertyAssignment(declaration.name) ]\n : // ObjectBindingPattern\n (declaration.name as ObjectBindingPattern).elements.map( (element: BindingElement) => factory.createShorthandPropertyAssignment(element.name as Identifier))\n ).flat()\n , true\n )\n \n \n return [\n var_decl,\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n [ factory.createIdentifier(destination), obj_literal ]\n )),\n factory.createExpressionStatement(obj_literal)\n ]\n}\n\n\nfunction return_last_expr (statements: Statement[]) {\n if (!statements.length) return statements\n \n const last_expr = get_expr_of_stmt(statements.last)\n if (isExpressionStatement(last_expr))\n return [ ...statements.slice(0, -1), factory.createReturnStatement(last_expr.expression) ]\n else\n return statements\n}\n\n\nfunction wrap_await_stmt (statements: Statement[], code: string) {\n function wrap (stmts: Statement[]) {\n return [\n factory.createExpressionStatement(\n factory.createCallExpression(\n factory.createFunctionExpression(\n [ factory.createModifier(SyntaxKind.AsyncKeyword) ],\n undefined,\n 'async_wrapper',\n [ ],\n [ ],\n undefined,\n factory.createBlock(\n return_last_expr(\n stmts.map(statement => assign_var_decl(statement)).flat()\n )\n , true)\n ),\n [ ],\n [ ]\n )\n ),\n ]\n }\n \n if (!code.includes('await')) return statements\n \n if (code.includes('await') && !code.includes('async ')) return wrap(statements)\n \n if (statements.some( stmt => (\n isExpressionStatement(stmt) && isAwaitExpression(stmt.expression) ||\n isVariableStatement(stmt) && stmt.declarationList.declarations.some( var_decl => \n var_decl.initializer && isAwaitExpression(var_decl.initializer)\n ) ||\n isExpressionStatement(stmt) && isCallExpression(stmt.expression) && stmt.expression.arguments.some( expr => isAwaitExpression(expr)) ||\n isExpressionStatement(stmt) && isBinaryExpression(stmt.expression) && isAwaitExpression(stmt.expression.right)\n )))\n return wrap(statements)\n \n return statements\n}\n\n\nexport async function compile_ts ({\n fp, \n code, \n print = printing_compiled_js, \n save = false,\n}: {\n fp?: string\n code?: string\n print?: boolean\n save?: boolean\n} = { }): Promise<string> {\n if (!code && fp)\n code = await fread(fp)\n \n const source_file = parse_code(code)\n \n let statements: Statement[] = [...source_file.statements]\n statements = statements.map(trans_import_2_require).flat()\n statements = statements.map(trans_export_stmt)\n statements = statements.map(trans_class_decl_2_expr)\n statements = wrap_await_stmt(statements, code)\n statements = statements.map(trans_variable_decl_2_var)\n statements = statements.map(trans_return_2_expr)\n \n if (statements.length) {\n const last_stmt = statements[statements.length - 1]\n const last_expr = get_expr_of_stmt(last_stmt)\n if (last_expr !== last_stmt)\n statements = [...statements, last_expr]\n }\n \n \n code = generate_code(statements)\n \n let { diagnostics, outputText: output_text } = ts.transpileModule(code, { compilerOptions: ts_options_commonjs_repl })\n \n if (diagnostics.length) {\n console.log(diagnostics.join('\\n\\n\\n'))\n log_line()\n }\n \n if (print) {\n console.log(output_text)\n log_line()\n }\n \n if (fp && save)\n await fwrite(fp.replace(/\\.ts(x?)$/, '.js$1'), output_text)\n \n return output_text\n}\n\n\n/** tsconfig.compilerOptions */\nexport let ts_options: any\nexport let ts_options_commonjs: any\nexport let ts_options_commonjs_repl: any\n\nexport async function load_tsconfig () {\n const fp = `${fpd_root}tsconfig.json`\n ;({ config: { compilerOptions: ts_options } } = ts.parseConfigFileTextToJson(\n fp, \n await fread(fp, { print: false })\n ))\n \n ts_options_commonjs = {\n ...ts_options,\n \n module: 'CommonJS',\n incremental: false,\n \n // determine CommonJS module require method\n esModuleInterop: true,\n }\n \n ts_options_commonjs_repl = {\n ...ts_options,\n \n module: 'CommonJS',\n esModuleInterop: true,\n \n // nvm.runInThisContext doesn't support inline source map\n sourceMap: false,\n }\n}\n\n\nlet eval_id = 0\n\nexport async function eval_ts (code: string) {\n return nvm.runInThisContext(\n await compile_ts({ code }),\n `repl/${eval_id++}.ts`\n )\n}\n\n\n// ------------------------------------ repl\nexport async function repl_ts (code: string) {\n console.log() // 离之前的输出有一个空行\n \n const timer = new Timer()\n const __ = global.__ = await eval_ts(code)\n timer.stop()\n \n console.log(inspect(__, { limit: inspection_limit }))\n if (timer.get() >= 50)\n timer.print()\n \n return __\n}\n\n\nexport async function start_repl () {\n // ------------ load library\n log_section(t('xshell 开始启动'), { color: 'green', time: true })\n \n // --- prevent from exiting\n process.on('uncaughtException', error => {\n console.error(error)\n })\n \n // --- start nodejs repl\n repl.start({\n prompt: '',\n replMode: repl.REPL_MODE_SLOPPY,\n useGlobal: true,\n useColors: true,\n terminal: true,\n })\n \n log_section(t('nodejs.repl 启动成功'), { color: 'yellow', time: true })\n \n process.title = 'xshell'\n \n await Promise.all([\n pollute_global(),\n \n load_tsconfig(),\n \n (async () => {\n // --- http server\n let { Server } = await import('./server.js')\n server = new Server(8421, {\n remote: new Remote({\n funcs: {\n echo ({ data: [data] }) {\n console.log('echo:', data)\n return [data]\n },\n \n async repl_ts ({ data: [code] }) {\n return [await repl_ts(code)]\n }\n }\n })\n })\n await server.start()\n log_section(t('server 启动成功'), { color: 'green', time: true })\n })(),\n ])\n \n console.log('-'.repeat(30).red)\n log_section(t('xshell 启动成功'), { color: 'red', time: true })\n console.log('-'.repeat(30).red)\n \n console.log((t('xshell 正在监听: ') + 'http://localhost:8421').green)\n}\n\n\nexport async function stop () {\n log_section(t('xshell 正在退出'), { color: 'red' })\n \n for (const key in fwatchers)\n fwatchers[key].close()\n \n server.stop()\n}\n\nexport async function exit () {\n await stop()\n await delay(100)\n process.exit()\n}\n\n\nexport async function pollute_global () {\n Object.assign(global, {\n __importDefault: (mod: any) => ((mod?.__esModule) ? mod : { default: mod }),\n __importStar: (mod: any) => {\n if (mod?.__esModule) return mod\n let result: { default?: any } = { }\n if (mod != null)\n for (let k in mod)\n if (Object.hasOwnProperty.call(mod, k))\n result[k] = mod[k]\n result.default = mod\n return result\n },\n exports: global\n })\n \n await Promise.all([\n pollute_module_default_export('upath', 'path'),\n pollute_module_default_export('cheerio', 'cheerio'),\n \n pollute_module_default_export('lodash/omit.js', 'omit'),\n pollute_module_default_export('lodash/sortBy.js', 'sort_by'),\n pollute_module_default_export('lodash/groupBy.js', 'group_by'),\n \n pollute_module_default_export('qs', 'qs'),\n \n pollute_module_exports('./prototype.js'),\n pollute_module_exports('./utils.js'),\n pollute_module_exports('./process.js'),\n pollute_module_exports('./file.js'),\n pollute_module_exports('./net.js'),\n pollute_module_exports('./server.js'),\n pollute_module_exports('./repl.js'),\n ])\n \n log_section(t('所有模块加载成功'), { color: 'green', time: true })\n}\n\n\nexport async function pollute_module_exports (fp_mod: string) {\n Object.assign(\n global,\n await import(fp_mod)\n )\n}\n\nexport async function pollute_module_default_export (fp_mod: string, name: string) {\n global[name] = (\n await import(fp_mod)\n ).default\n}\n\n"]}
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["repl.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,IAAI,CAAA;AACpB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAGnC,OAAO,IAAI,MAAM,OAAO,CAAA;AAExB,OAAO,EAAE,MAAM,YAAY,CAAA;AAM3B,MAAM,EACF,OAAO,EAAE,aAAa,EAEtB,UAAU,EAAE,SAAS,EAAE,aAAa,EAEpC,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EACpE,qBAAqB,EAAE,mBAAmB,EAC1C,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAC1E,kBAAkB,EAAE,qBAAqB,GAC5C,GAAG,EAAE,CAAA;AAKN,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AACtC,OAAO,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAajC,mBAAmB,EAAE,CAAA;AAIrB,IAAI,MAAoC,CAAA;AAExC,IAAI,gBAAgB,GAAM,KAAK,CAAA;AAC/B,IAAI,oBAAoB,GAAG,KAAK,CAAA;AAGhC,oEAAoE;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;AAG1E,MAAM,UAAU,oBAAoB,CAAE,QAAgB,KAAK;IACvD,IAAI,KAAK,KAAK,CAAC,CAAC;QACZ,KAAK,GAAG,EAAE,GAAG,EAAE,IAAE,CAAC,CAAA;IACtB,gBAAgB,GAAG,KAAK,CAAA;AAC5B,CAAC;AAGD,MAAM,UAAU,wBAAwB,CAAE,OAAgB;IACtD,oBAAoB,GAAG,OAAO,CAAA;AAClC,CAAC;AAGD,oEAAoE;AACpE,SAAS,YAAY,CAAE,IAAiB;IACpC,OAAO,IAAI,KAAK,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACzF,CAAC;AAGD,SAAS,SAAS,CAAE,KAAoB,EAAE,UAAsB;IAC5D,SAAS,UAAU,CAAE,IAAU;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAE,KAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAE,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;;QAE5C,UAAU,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC;AAGD,MAAM,UAAU,UAAU,CAAE,IAAY;IACpC,OAAO,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;AACvE,CAAC;AAGD,MAAM,UAAU,aAAa,CAAE,KAAkB;IAC7C,OAAO,aAAa,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;SACzG,SAAS,CACN,OAAO,CAAC,gBAAgB,CACpB,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAC5D,KAAK,CACR,CACR,CAAA;AACL,CAAC;AAID,SAAS,sBAAsB,CAAE,WAAsB;IACnD,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;QACjC,OAAO,WAAW,CAAA;IAEtB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAAA;IAEtF,8BAA8B;IAC9B,MAAM,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAE,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,EAAG,EAAE,CAAE,gBAAgB,CAAE,CAAC,CAAA;IAEzH,uCAAuC;IACvC,yDAAyD;IAEzD,OAAO;QACH,wBAAwB;QACxB,uDAAuD;QACvD,GAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,yBAAyB,CAAE,OAAO,CAAC,gBAAgB,CACvD,OAAO,CAAC,8BAA8B,CAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,EAC/F,OAAO,CAAC,8BAA8B,CAAE,OAAO,CAAC,oBAAoB,CAAE,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,EAAG,EAAE,CAAE,mBAAmB,CAAE,CAAC,EAAE,SAAS,CAAC,CAC/J,CACJ;SAAE,CAAC,CAAC,CAAC,EAAG;QAEb,6BAA6B;QAC7B,4CAA4C;QAC5C,GAAI,aAAa,CAAC,aAAa,IAAI,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,yBAAyB,CAAE,OAAO,CAAC,gBAAgB,CACvD,OAAO,CAAC,8BAA8B,CAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAC7G,OAAO,CAAC,oBAAoB,CAAE,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,EAAG,EAAE,CAAE,mBAAmB,CAAE,CAAC,CACxG,CAAC;SACL,CAAC,CAAC,CAAC,EAAG;QAGX,8FAA8F;QAC9F,GAAI,aAAa,CAAC,aAAa,IAAI,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACzE,0EAA0E;YAC1E,OAAO,CAAC,uBAAuB,CAAC,EAAG,EAAE,CAAE,OAAO,CAAC,yBAAyB,CACpE,OAAO,CAAC,0BAA0B;gBAC9B,6DAA6D;gBAC7D,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAE,gBAAgB,CAAC,EAAE,CACzD,OAAO,CAAC,oBAAoB,CACxB,SAAS,EACT,gBAAgB,CAAC,YAAY,EAC7B,gBAAgB,CAAC,IAAI,EACrB,gBAAgB,CAAC,YAAY,EAAE,IAAI,KAAK,SAAS,CAAE,CAAC,CAAE,mBAAmB,CAAE,CAAC,CAAE,SAAS,CAC1F,CAAC,CAAC,EACX,SAAS,EACT,SAAS,EACT,mBAAmB,CACtB,CAAE,CAAC;YAEJ,iDAAiD;YACjD,OAAO,CAAC,yBAAyB,CAAE,OAAO,CAAC,oBAAoB,CAC3D,OAAO,CAAC,8BAA8B,CAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EACrF,EAAG;YACH,6DAA6D;YAC7D,CAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,6BAA6B,CAAE,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAE,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAE,EAAE,KAAK,CAAC,CAAE,CAC1N,CAAC;YAEF,OAAO,CAAC,yBAAyB,CAC7B,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;gBAC/C,MAAM;gBACN,OAAO,CAAC,6BAA6B,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvF,CAAC,CAAG,uBAAuB;oBACvB,OAAO,CAAC,6BAA6B,CAAE,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAE,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAE,EAAE,KAAK,CAAC,CACtL;SACJ,CAAC,CAAC,CAAC,EAAG;KACd,CAAA;AACL,CAAC;AAGD,iCAAiC;AACjC,SAAS,iBAAiB,CAAE,IAAe;IACvC,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC3B,OAAO,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAE7D,SAAS,kBAAkB,CAAE,QAAkB;QAC3C,OAAO,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,aAAa,CAAA;IAC9I,CAAC;IAED,aAAa;IACb,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAE,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAE,EAAE;QAClE,aAAa;QACb,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,eAAe;QACpC,aAAa;QACb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAE,CACrE,CAAA;QACD,OAAO,IAAI,CAAA;KACd;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAGD,SAAS,sBAAsB,CAAE,IAAe,EAAE,WAAuB;IACrE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAA;IAEf,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAEhF,IACI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QAC/B,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,SAAS;QAE1D,OAAO,IAAI,CAAA;IAEf,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAkB,CAAA;IAE1D,8CAA8C;IAE9C,OAAO,OAAO,CAAC,uBAAuB,CAClC,SAAS,EACT,SAAS,EACT,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAkB,EAAE,SAAS,CAAC,EAChE,OAAO,CACV,CAAA;AACL,CAAC;AAGD,gDAAgD;AAChD,SAAS,yBAAyB,CAAE,QAAmB;IACnD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IACnD,aAAa;IACb,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAA;IAC/C,OAAO,QAAQ,CAAA;AACnB,CAAC;AAGD,SAAS,uBAAuB,CAAE,UAAqB;IACnD,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAA;IAEtD,sEAAsE;IAEtE,OAAO,OAAO,CAAC,uBAAuB,CAClC,EAAG,EACH,OAAO,CAAC,6BAA6B,CAAC;QAClC,OAAO,CAAC,yBAAyB,CAC7B,UAAU,CAAC,IAAI,EACf,SAAS,EACT,SAAS,EACT,OAAO,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CACjH;KACJ,CAAC,CAAC,CAAA;AACX,CAAC;AAGD,SAAS,gBAAgB,CAAE,SAAoB;IAC3C,IAAI,qBAAqB,CAAC,SAAS,CAAC;QAChC,OAAO,SAAS,CAAA;IAEpB,IAAI,mBAAmB,CAAC,SAAS,CAAC,EAAE;QAChC,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,eAAe,CAAA;QAClD,OAAO,OAAO,CAAC,yBAAyB,CACpC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YACvB,CAAC,GAAG,EAAE;gBACF,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAG,cAAc;oBACnC,OAAO,IAAI,CAAA;qBACT,qBAAqB;oBACvB,OAAO,OAAO,CAAC,6BAA6B,CACxC,IAAI,CAAC,QAAQ;yBACR,MAAM,CAAC,CAAC,EAAE,IAAI,EAAkB,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;yBAChE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAkB,EAAE,EAAE,CAC9B,OAAO,CAAC,iCAAiC,CAAC,IAAkB,CAAC,CAAC,CACzE,CAAA;YACT,CAAC,CAAC,EAAE;YACR,CAAC;gBACG,OAAO,CAAC,6BAA6B,CACjC,YAAY,CAAC,GAAG,CAAE,QAAQ,CAAC,EAAE,CACzB,OAAO,CAAC,iCAAiC,CAAC,QAAQ,CAAC,IAAkB,CAAC,CAAC,EAC3E,IAAI,CAAC,CAChB,CAAA;KACJ;IAED,IAAI,qBAAqB,CAAC,SAAS,CAAC;QAChC,OAAO,OAAO,CAAC,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAE5D,OAAO,SAAS,CAAA;AACpB,CAAC;AAED,SAAS,mBAAmB,CAAE,IAAe;IACzC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,OAAO,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAC7D,CAAC;AAGD,SAAS,eAAe,CAAE,QAAmB,EAAE,cAAsB,QAAQ;IACzE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,CAAA;IAErB,2CAA2C;IAC3C,4CAA4C;IAC5C,MAAM,WAAW,GACb,OAAO,CAAC,6BAA6B,CACjC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAE,WAAW,CAAC,EAAE,CACrD,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5B,CAAE,OAAO,CAAC,iCAAiC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAE;QACnE,CAAC,CAAE,uBAAuB;YACrB,WAAW,CAAC,IAA6B,CAAC,QAAQ,CAAC,GAAG,CAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,OAAO,CAAC,IAAkB,CAAC,CAAC,CACnK,CAAC,IAAI,EAAE,EACN,IAAI,CACT,CAAA;IAGL,OAAO;QACH,QAAQ;QACR,OAAO,CAAC,yBAAyB,CAAE,OAAO,CAAC,oBAAoB,CAC3D,OAAO,CAAC,8BAA8B,CAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EACrF,EAAG,EACH,CAAE,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,CAAE,CACzD,CAAC;QACF,OAAO,CAAC,yBAAyB,CAAC,WAAW,CAAC;KACjD,CAAA;AACL,CAAC;AAGD,SAAS,gBAAgB,CAAE,UAAuB;IAC9C,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,OAAO,UAAU,CAAA;IAEzC,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACnD,IAAI,qBAAqB,CAAC,SAAS,CAAC;QAChC,OAAO,CAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAE,CAAA;;QAE1F,OAAO,UAAU,CAAA;AACzB,CAAC;AAGD,SAAS,eAAe,CAAE,UAAuB,EAAE,IAAY;IAC3D,SAAS,IAAI,CAAE,KAAkB;QAC7B,OAAO;YACH,OAAO,CAAC,yBAAyB,CAC7B,OAAO,CAAC,oBAAoB,CACxB,OAAO,CAAC,wBAAwB,CAC5B,CAAE,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAE,EACnD,SAAS,EACT,eAAe,EACf,EAAG,EACH,EAAG,EACH,SAAS,EACT,OAAO,CAAC,WAAW,CACf,gBAAgB,CACZ,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAC5D,EACH,IAAI,CAAC,CACV,EACD,EAAG,EACH,EAAG,CACN,CACJ;SACJ,CAAA;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAA;IAE9C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;IAE/E,IAAI,UAAU,CAAC,IAAI,CAAE,IAAI,CAAC,EAAE,CAAC,CACzB,qBAAqB,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACjE,mBAAmB,CAAC,IAAI,CAAC,IAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAE,QAAQ,CAAC,EAAE,CAC9E,QAAQ,CAAC,WAAW,IAAI,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAClE;QACD,qBAAqB,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpI,qBAAqB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CACjH,CAAC;QACE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;IAE3B,OAAO,UAAU,CAAA;AACrB,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,EAC9B,EAAE,EACF,IAAI,EACJ,KAAK,GAAG,oBAAoB,EAC5B,IAAI,GAAG,KAAK,MAMZ,EAAG;IACH,IAAI,CAAC,IAAI,IAAI,EAAE;QACX,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;IAE1B,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAEpC,IAAI,UAAU,GAAgB,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACzD,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1D,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC9C,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpD,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAC9C,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IACtD,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAEhD,IAAI,UAAU,CAAC,MAAM,EAAE;QACnB,MAAM,SAAS,GAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,SAAS,KAAK,SAAS;YACvB,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,CAAC,CAAA;KAC9C;IAGD,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAEhC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAEtH,IAAI,WAAW,CAAC,MAAM,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QACvC,QAAQ,EAAE,CAAA;KACb;IAED,IAAI,KAAK,EAAE;QACP,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACxB,QAAQ,EAAE,CAAA;KACb;IAED,IAAI,EAAE,IAAI,IAAI;QACV,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAA;IAE/D,OAAO,WAAW,CAAA;AACtB,CAAC;AAGD,+BAA+B;AAC/B,MAAM,CAAC,IAAI,UAAe,CAAA;AAC1B,MAAM,CAAC,IAAI,mBAAwB,CAAA;AACnC,MAAM,CAAC,IAAI,wBAA6B,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,EAAE,GAAG,GAAG,QAAQ,eAAe,CACpC;IAAA,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,yBAAyB,CACxE,EAAE,EACF,MAAM,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACpC,CAAC,CAAA;IAEF,mBAAmB,GAAG;QAClB,GAAG,UAAU;QAEb,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,KAAK;QAElB,2CAA2C;QAC3C,eAAe,EAAE,IAAI;KACxB,CAAA;IAED,wBAAwB,GAAG;QACvB,GAAG,UAAU;QAEb,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,IAAI;QAErB,yDAAyD;QACzD,SAAS,EAAE,KAAK;KACnB,CAAA;AACL,CAAC;AAGD,IAAI,OAAO,GAAG,CAAC,CAAA;AAEf,MAAM,CAAC,KAAK,UAAU,OAAO,CAAE,IAAY;IACvC,OAAO,GAAG,CAAC,gBAAgB,CACvB,MAAM,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,EAC1B,QAAQ,OAAO,EAAE,KAAK,CACzB,CAAA;AACL,CAAC;AAGD,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAE,IAAY;IACvC,OAAO,CAAC,GAAG,EAAE,CAAA,CAAE,cAAc;IAE7B,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACzB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,KAAK,CAAC,IAAI,EAAE,CAAA;IAEZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACrD,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QACjB,KAAK,CAAC,KAAK,EAAE,CAAA;IAEjB,OAAO,EAAE,CAAA;AACb,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,4BAA4B;IAC5B,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7D,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,wBAAwB;IACxB,IAAI,CAAC,KAAK,CAAC;QACP,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI,CAAC,gBAAgB;QAC/B,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;KACjB,CAAC,CAAA;IAEF,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnE,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAA;IAExB,MAAM,OAAO,CAAC,GAAG,CAAC;QACd,cAAc,EAAE;QAEhB,aAAa,EAAE;QAEf,CAAC,KAAK,IAAI,EAAE;YACR,kBAAkB;YAClB,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YAC5C,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE;gBACtB,MAAM,EAAE,IAAI,MAAM,CAAC;oBACf,KAAK,EAAE;wBACH,IAAI,CAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;4BAClB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;4BAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;wBACjB,CAAC;wBAED,KAAK,CAAC,OAAO,CAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;4BAC3B,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;wBAChC,CAAC;qBACJ;iBACJ,CAAC;aACL,CAAC,CAAA;YACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC,CAAC,EAAE;KACP,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IAC/B,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IAE/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,IAAI;IACtB,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,SAAS;QACvB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;IAE1B,MAAM,CAAC,IAAI,EAAE,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACtB,MAAM,IAAI,EAAE,CAAA;IACZ,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,EAAE,CAAA;AAClB,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,cAAc;IAChC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC3E,YAAY,EAAE,CAAC,GAAQ,EAAE,EAAE;YACvB,IAAI,GAAG,EAAE,UAAU;gBAAE,OAAO,GAAG,CAAA;YAC/B,IAAI,MAAM,GAAsB,EAAG,CAAA;YACnC,IAAI,GAAG,IAAI,IAAI;gBACX,KAAK,IAAI,CAAC,IAAI,GAAG;oBACb,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;wBAClC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,CAAC,OAAO,GAAG,GAAG,CAAA;YACpB,OAAO,MAAM,CAAA;QACjB,CAAC;QACD,OAAO,EAAE,MAAM;KAClB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC;QACd,6BAA6B,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9C,6BAA6B,CAAC,SAAS,EAAE,SAAS,CAAC;QAEnD,6BAA6B,CAAC,gBAAgB,EAAM,MAAM,CAAC;QAC3D,6BAA6B,CAAC,kBAAkB,EAAI,SAAS,CAAC;QAC9D,6BAA6B,CAAC,mBAAmB,EAAG,UAAU,CAAC;QAE/D,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC;QAEzC,sBAAsB,CAAC,gBAAgB,CAAC;QACxC,sBAAsB,CAAC,YAAY,CAAC;QACpC,sBAAsB,CAAC,cAAc,CAAC;QACtC,sBAAsB,CAAC,WAAW,CAAC;QACnC,sBAAsB,CAAC,UAAU,CAAC;QAClC,sBAAsB,CAAC,aAAa,CAAC;QACrC,sBAAsB,CAAC,WAAW,CAAC;KACtC,CAAC,CAAA;IAEF,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9D,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAE,MAAc;IACxD,MAAM,CAAC,MAAM,CACT,MAAM,EACN,MAAM,MAAM,CAAC,MAAM,CAAC,CACvB,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAE,MAAc,EAAE,IAAY;IAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,CACX,MAAM,MAAM,CAAC,MAAM,CAAC,CACvB,CAAC,OAAO,CAAA;AACb,CAAC","sourcesContent":["import nvm from 'vm'\nimport repl from 'repl'\nimport process from 'process'\nimport { fileURLToPath } from 'url'\n\n\nimport path from 'upath'\n\nimport ts from 'typescript'\nimport type {\n SourceFile, Node, Statement, Modifier, Identifier, StringLiteral,\n ExpressionStatement, ObjectBindingPattern, BindingElement,\n SyntaxKind as TSyntaxKind\n} from 'typescript'\nconst {\n factory, createPrinter,\n \n SyntaxKind, NodeFlags, ModifierFlags,\n \n isIdentifier, isNamedImports, isImportDeclaration, isAwaitExpression,\n isExpressionStatement, isVariableStatement,\n isNamespaceImport, isClassDeclaration, isCallExpression, isReturnStatement,\n isBinaryExpression, isFunctionDeclaration,\n} = ts\n\nimport type { Context } from 'koa'\n\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\nimport { log_section, log_line, delay, inspect, set_inspect_options, Timer } from './utils.js'\nimport { fread, fwrite, fwatchers } from './file.js'\nimport { Remote } from './net.js'\n\n\ndeclare global {\n var __: any\n \n var started_at: Date\n \n var repl_router: (ctx: Context) => Promise<boolean>\n}\n\n\n\nset_inspect_options()\n\n\n\nlet server: import('./server.js').Server\n\nlet inspection_limit = 10000\nlet printing_compiled_js = false\n\n\n/** 谨慎使用,webpack 打包后可能会变成 /d:/1/mod/node_modules/xshell/ 这样的编译期路径 */\nexport const fpd_root = path.dirname(fileURLToPath(import.meta.url)) + '/'\n\n\nexport function set_inspection_limit (limit: number = 10000) {\n if (limit === -1)\n limit = 50 * 10**4\n inspection_limit = limit\n}\n\n\nexport function set_printing_compiled_js (enabled: boolean) {\n printing_compiled_js = enabled\n}\n\n\n// ------------------------------------ Code Compilers, Transformers\nfunction resolve_kind (kind: TSyntaxKind) {\n return kind === SyntaxKind.VariableStatement ? 'VariableStatement' : SyntaxKind[kind]\n}\n\n\nfunction print_ast (nodes: Node[] | Node, sourceFile: SourceFile) {\n function print_node (node: Node) {\n console.log(`${ resolve_kind(node.kind) }: ${ node.getText(sourceFile) }`)\n }\n if (Array.isArray(nodes))\n nodes.forEach( node => { print_node(node) })\n else\n print_node(nodes)\n}\n\n\nexport function parse_code (code: string) {\n return ts.createSourceFile('repl.ts', code, ts.ScriptTarget.ESNext)\n}\n\n\nexport function generate_code (stmts: Statement[]) {\n return createPrinter({ omitTrailingSemicolon: true, removeComments: false, newLine: ts.NewLineKind.LineFeed })\n .printFile(\n factory.updateSourceFile(\n ts.createSourceFile('output.ts', '', ts.ScriptTarget.ESNext),\n stmts\n )\n )\n}\n\n\n\nfunction trans_import_2_require (import_decl: Statement) {\n if (!isImportDeclaration(import_decl))\n return import_decl\n \n const { importClause: import_clause, moduleSpecifier: module_specifier } = import_decl\n \n // require('module_specifier')\n const require_module_stmt = factory.createCallExpression( factory.createIdentifier('require'), [ ], [ module_specifier ])\n \n // aaa, bbb as ccc, default as ddd, ...\n // (import_clause.namedBindings as NamedImports).elements\n \n return [\n // import mod from 'mod'\n // global.mod = __importDefault(require(\"mod\")).default\n ... import_clause.name ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.name),\n factory.createPropertyAccessExpression( factory.createCallExpression( factory.createIdentifier('__importDefault'), [ ], [ require_module_stmt ]), 'default'),\n )\n ) ] : [ ],\n \n // import * as mod from 'mod'\n // global.mod = __importStar(require(\"mod\"))\n ... import_clause.namedBindings && isNamespaceImport(import_clause.namedBindings) ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.namedBindings.name),\n factory.createCallExpression( factory.createIdentifier('__importStar'), [ ], [ require_module_stmt ])\n ))\n ] : [ ],\n \n \n // import { element2 as element2_, element3 as element3_, other, default as mod2 } from 'mod2'\n ... import_clause.namedBindings && isNamedImports(import_clause.namedBindings) ? [\n // var { element2: element2_, element3 } = __importDefault(require(\"mod\"))\n factory.createVariableStatement([ ], [ factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n import_clause.namedBindings.elements.map( import_specifier => \n factory.createBindingElement(\n undefined, \n import_specifier.propertyName, \n import_specifier.name, \n import_specifier.propertyName?.text === 'default' ? require_module_stmt : undefined\n ))),\n undefined,\n undefined,\n require_module_stmt\n ) ]),\n \n // Object.assign(global, { element2_, element3 })\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n [ factory.createIdentifier('global'), factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false) ]\n )),\n \n factory.createExpressionStatement(\n import_clause.namedBindings.elements.length === 1 ? \n // (a)\n factory.createParenthesizedExpression(import_clause.namedBindings.elements[0].name)\n : // ({ a: xxx, b: xxx })\n factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false)\n )\n ] : [ ],\n ]\n}\n\n\n/** export function foo () { } */\nfunction trans_export_stmt (stmt: Statement) {\n if (ts.isExportAssignment(stmt))\n return factory.createExpressionStatement(stmt.expression)\n \n function is_export_modifier (modifier: Modifier) {\n return modifier.flags & ModifierFlags.Export || modifier.flags & ModifierFlags.ExportDefault || modifier.kind === SyntaxKind.ExportKeyword\n }\n \n // @ts-ignore\n if (stmt.modifiers?.some( modifier => is_export_modifier(modifier) )) {\n // @ts-ignore\n stmt.modifiers = factory.createNodeArray<Modifier>(\n // @ts-ignore\n stmt.modifiers.filter( modifier => !is_export_modifier(modifier) )\n )\n return stmt\n }\n \n return stmt\n}\n\n\nfunction trans_require_2_import (stmt: Statement, source_file: SourceFile) {\n if (!isVariableStatement(stmt))\n return stmt\n \n const { name, initializer: require_call } = stmt.declarationList.declarations[0]\n \n if (\n !isCallExpression(require_call) ||\n require_call.expression.getText(source_file) !== 'require'\n )\n return stmt\n \n const modpath = require_call.arguments[0] as StringLiteral\n \n // createNamedImports(createImportSpecifier())\n \n return factory.createImportDeclaration(\n undefined, \n undefined,\n factory.createImportClause(false, name as Identifier, undefined),\n modpath\n )\n}\n\n\n/** const a = 123, b = 234, { c, d: e } = obj */\nfunction trans_variable_decl_2_var (var_decl: Statement) {\n if (!isVariableStatement(var_decl)) return var_decl\n // @ts-ignore\n var_decl.declarationList.flags = NodeFlags.None\n return var_decl\n}\n\n\nfunction trans_class_decl_2_expr (class_decl: Statement) {\n if (!isClassDeclaration(class_decl)) return class_decl\n \n // export class C { } 这样的语句已经在 trans_export_stmt 中被去掉了 export modifier\n \n return factory.createVariableStatement(\n [ ],\n factory.createVariableDeclarationList([\n factory.createVariableDeclaration(\n class_decl.name, \n undefined, \n undefined, \n factory.createClassExpression(undefined, undefined, class_decl.name, undefined, undefined, class_decl.members)\n )\n ]))\n}\n\n\nfunction get_expr_of_stmt (statement: Statement): ExpressionStatement | Statement {\n if (isExpressionStatement(statement))\n return statement\n \n if (isVariableStatement(statement)) {\n const { declarations } = statement.declarationList\n return factory.createExpressionStatement(\n declarations.length === 1 ?\n (() => {\n const { name } = declarations[0]\n if (isIdentifier(name)) // const a = c\n return name\n else // const { a, b } = c\n return factory.createObjectLiteralExpression(\n name.elements\n .filter(({ name }: BindingElement) => name && isIdentifier(name))\n .map(({ name }: BindingElement) => \n factory.createShorthandPropertyAssignment(name as Identifier))\n )\n })()\n :\n factory.createObjectLiteralExpression(\n declarations.map( var_decl => \n factory.createShorthandPropertyAssignment(var_decl.name as Identifier)),\n true)\n )\n }\n \n if (isFunctionDeclaration(statement))\n return factory.createExpressionStatement(statement.name)\n \n return statement\n}\n\nfunction trans_return_2_expr (stmt: Statement): Statement {\n if (!isReturnStatement(stmt)) return stmt\n return factory.createExpressionStatement(stmt.expression)\n}\n\n\nfunction assign_var_decl (var_decl: Statement, destination: string = 'global') {\n if (!isVariableStatement(var_decl))\n return [var_decl]\n \n // VariableDeclaration[] -> ObjectLiteral[]\n // const a = 123, b = 234, { c, d: e } = obj\n const obj_literal =\n factory.createObjectLiteralExpression(\n var_decl.declarationList.declarations.map( declaration => \n isIdentifier(declaration.name) ?\n [ factory.createShorthandPropertyAssignment(declaration.name) ]\n : // ObjectBindingPattern\n (declaration.name as ObjectBindingPattern).elements.map( (element: BindingElement) => factory.createShorthandPropertyAssignment(element.name as Identifier))\n ).flat()\n , true\n )\n \n \n return [\n var_decl,\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n [ factory.createIdentifier(destination), obj_literal ]\n )),\n factory.createExpressionStatement(obj_literal)\n ]\n}\n\n\nfunction return_last_expr (statements: Statement[]) {\n if (!statements.length) return statements\n \n const last_expr = get_expr_of_stmt(statements.last)\n if (isExpressionStatement(last_expr))\n return [ ...statements.slice(0, -1), factory.createReturnStatement(last_expr.expression) ]\n else\n return statements\n}\n\n\nfunction wrap_await_stmt (statements: Statement[], code: string) {\n function wrap (stmts: Statement[]) {\n return [\n factory.createExpressionStatement(\n factory.createCallExpression(\n factory.createFunctionExpression(\n [ factory.createModifier(SyntaxKind.AsyncKeyword) ],\n undefined,\n 'async_wrapper',\n [ ],\n [ ],\n undefined,\n factory.createBlock(\n return_last_expr(\n stmts.map(statement => assign_var_decl(statement)).flat()\n )\n , true)\n ),\n [ ],\n [ ]\n )\n ),\n ]\n }\n \n if (!code.includes('await')) return statements\n \n if (code.includes('await') && !code.includes('async ')) return wrap(statements)\n \n if (statements.some( stmt => (\n isExpressionStatement(stmt) && isAwaitExpression(stmt.expression) ||\n isVariableStatement(stmt) && stmt.declarationList.declarations.some( var_decl => \n var_decl.initializer && isAwaitExpression(var_decl.initializer)\n ) ||\n isExpressionStatement(stmt) && isCallExpression(stmt.expression) && stmt.expression.arguments.some( expr => isAwaitExpression(expr)) ||\n isExpressionStatement(stmt) && isBinaryExpression(stmt.expression) && isAwaitExpression(stmt.expression.right)\n )))\n return wrap(statements)\n \n return statements\n}\n\n\nexport async function compile_ts ({\n fp, \n code, \n print = printing_compiled_js, \n save = false,\n}: {\n fp?: string\n code?: string\n print?: boolean\n save?: boolean\n} = { }): Promise<string> {\n if (!code && fp)\n code = await fread(fp)\n \n const source_file = parse_code(code)\n \n let statements: Statement[] = [...source_file.statements]\n statements = statements.map(trans_import_2_require).flat()\n statements = statements.map(trans_export_stmt)\n statements = statements.map(trans_class_decl_2_expr)\n statements = wrap_await_stmt(statements, code)\n statements = statements.map(trans_variable_decl_2_var)\n statements = statements.map(trans_return_2_expr)\n \n if (statements.length) {\n const last_stmt = statements[statements.length - 1]\n const last_expr = get_expr_of_stmt(last_stmt)\n if (last_expr !== last_stmt)\n statements = [...statements, last_expr]\n }\n \n \n code = generate_code(statements)\n \n let { diagnostics, outputText: output_text } = ts.transpileModule(code, { compilerOptions: ts_options_commonjs_repl })\n \n if (diagnostics.length) {\n console.log(diagnostics.join('\\n\\n\\n'))\n log_line()\n }\n \n if (print) {\n console.log(output_text)\n log_line()\n }\n \n if (fp && save)\n await fwrite(fp.replace(/\\.ts(x?)$/, '.js$1'), output_text)\n \n return output_text\n}\n\n\n/** tsconfig.compilerOptions */\nexport let ts_options: any\nexport let ts_options_commonjs: any\nexport let ts_options_commonjs_repl: any\n\nexport async function load_tsconfig () {\n const fp = `${fpd_root}tsconfig.json`\n ;({ config: { compilerOptions: ts_options } } = ts.parseConfigFileTextToJson(\n fp, \n await fread(fp, { print: false })\n ))\n \n ts_options_commonjs = {\n ...ts_options,\n \n module: 'CommonJS',\n incremental: false,\n \n // determine CommonJS module require method\n esModuleInterop: true,\n }\n \n ts_options_commonjs_repl = {\n ...ts_options,\n \n module: 'CommonJS',\n esModuleInterop: true,\n \n // nvm.runInThisContext doesn't support inline source map\n sourceMap: false,\n }\n}\n\n\nlet eval_id = 0\n\nexport async function eval_ts (code: string) {\n return nvm.runInThisContext(\n await compile_ts({ code }),\n `repl/${eval_id++}.ts`\n )\n}\n\n\n// ------------------------------------ repl\nexport async function repl_ts (code: string) {\n console.log() // 离之前的输出有一个空行\n \n const timer = new Timer()\n const __ = global.__ = await eval_ts(code)\n timer.stop()\n \n console.log(inspect(__, { limit: inspection_limit }))\n if (timer.get() >= 50)\n timer.print()\n \n return __\n}\n\n\nexport async function start_repl () {\n // ------------ load library\n log_section(t('xshell 开始启动'), { color: 'green', time: true })\n \n // --- prevent from exiting\n process.on('uncaughtException', error => {\n console.error(error)\n })\n \n // --- start nodejs repl\n repl.start({\n prompt: '',\n replMode: repl.REPL_MODE_SLOPPY,\n useGlobal: true,\n useColors: true,\n terminal: true,\n })\n \n log_section(t('nodejs.repl 启动成功'), { color: 'yellow', time: true })\n \n process.title = 'xshell'\n \n await Promise.all([\n pollute_global(),\n \n load_tsconfig(),\n \n (async () => {\n // --- http server\n let { Server } = await import('./server.js')\n server = new Server(8421, {\n remote: new Remote({\n funcs: {\n echo ({ data: [data] }) {\n console.log('echo:', data)\n return [data]\n },\n \n async repl_ts ({ data: [code] }) {\n return [await repl_ts(code)]\n }\n }\n })\n })\n await server.start()\n log_section(t('server 启动成功'), { color: 'green', time: true })\n })(),\n ])\n \n console.log('-'.repeat(30).red)\n log_section(t('xshell 启动成功'), { color: 'red', time: true })\n console.log('-'.repeat(30).red)\n \n console.log((t('xshell 正在监听: ') + 'http://localhost:8421').green)\n}\n\n\nexport async function stop () {\n log_section(t('xshell 正在退出'), { color: 'red' })\n \n for (const key in fwatchers)\n fwatchers[key].close()\n \n server.stop()\n}\n\nexport async function exit () {\n await stop()\n await delay(100)\n process.exit()\n}\n\n\nexport async function pollute_global () {\n Object.assign(global, {\n __importDefault: (mod: any) => ((mod?.__esModule) ? mod : { default: mod }),\n __importStar: (mod: any) => {\n if (mod?.__esModule) return mod\n let result: { default?: any } = { }\n if (mod != null)\n for (let k in mod)\n if (Object.hasOwnProperty.call(mod, k))\n result[k] = mod[k]\n result.default = mod\n return result\n },\n exports: global\n })\n \n await Promise.all([\n pollute_module_default_export('upath', 'path'),\n pollute_module_default_export('cheerio', 'cheerio'),\n \n pollute_module_default_export('lodash/omit.js', 'omit'),\n pollute_module_default_export('lodash/sortBy.js', 'sort_by'),\n pollute_module_default_export('lodash/groupBy.js', 'group_by'),\n \n pollute_module_default_export('qs', 'qs'),\n \n pollute_module_exports('./prototype.js'),\n pollute_module_exports('./utils.js'),\n pollute_module_exports('./process.js'),\n pollute_module_exports('./file.js'),\n pollute_module_exports('./net.js'),\n pollute_module_exports('./server.js'),\n pollute_module_exports('./repl.js'),\n ])\n \n log_section(t('所有模块加载成功'), { color: 'green', time: true })\n}\n\n\nexport async function pollute_module_exports (fp_mod: string) {\n Object.assign(\n global,\n await import(fp_mod)\n )\n}\n\nexport async function pollute_module_default_export (fp_mod: string, name: string) {\n global[name] = (\n await import(fp_mod)\n ).default\n}\n\n"]}
package/server.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAA6B,MAAM,MAAM,CAAA;AACpF,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAc,MAAM,IAAI,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEhC,gBAAgB;AAChB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,cAAc,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAEpC,2BAA2B;AAC3B,OAAO,EAAE,OAAO,IAAI,GAAG,EAA2B,MAAM,KAAK,CAAA;AAE7D,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,IAAI,YAAY,EAAyB,MAAM,eAAe,CAAA;AAmBhF,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAcpE,yBAAyB;AACzB,MAAM,OAAO,MAAM;IACf,GAAG,CAAK;IAER,OAAO,CAA6B;IAEpC,IAAI,CAAQ;IAEZ,WAAW,CAAY;IAEvB,SAAS,CAAkB;IAE3B,MAAM,CAAS;IAGf,YAAa,IAAY,EAAE,EAAE,MAAM,KAA0B,EAAG;QAC5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,MAAM;YACN,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IAC5B,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,KAAK;QACP,mBAAmB;QACnB,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QAEnB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE9B,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;YAChB,EAAE,EAAE;gBACA,SAAS,EAAE,EAAE,GAAG,IAAI;gBAEpB,4DAA4D;gBAC5D,MAAM,EAAE;oBACJ,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB;oBACnE,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAE,yDAAyD;iBACtG;aACJ;YACD,SAAS,EAAE,GAAG;SACjB,CAAC,CAAC,CAAA;QAEH,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAErB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAElC,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAGnD,gBAAgB;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC;gBACjC,QAAQ,EAAE,IAAI;gBACd,kBAAkB,EAAE,IAAI;gBACxB,iBAAiB,EAAE,IAAI;aAC1B,CAAC,CAAA;YAEF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAa,EAAE,OAAO,EAAE,EAAE;gBACvD,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;oBACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;gBAC7C,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;YAEF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;gBACrD,aAAa;gBACb,MAAM,EACF,GAAG,EACH,OAAO,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAC3C,GAAG,OAAO,CAAA;gBAEX,MAAM,EAAE,GAAI,OAAO,CAAC,MAAM,CAAC,aAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;gBAE3E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;gBAElM,QAAQ,GAAG,EAAE;oBACT,KAAK,GAAG;wBACJ,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE;4BACrD,EAAE,CAAC,UAAU,GAAG,aAAa,CAAA;4BAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;wBAClD,CAAC,CAAC,CAAA;wBACF,OAAM;oBAEV;wBACI,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;wBAC3D,MAAM,CAAC,OAAO,EAAE,CAAA;iBACvB;YACL,CAAC,CAAC,CAAA;SACL;QAGD,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;IAGD,IAAI;QACA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAGD,KAAK,CAAC,KAAK,CAAE,GAAY,EAAE,IAAU;QACjC,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;QAEtB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAErB,oBAAoB;QACpB,IAAI;YACA,MAAM,IAAI,EAAE,CAAA;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACxB,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAA;YACrC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACjD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAA;SAC/B;IACL,CAAC;IAGD;;;MAGE;IACF,KAAK,CAAC,KAAK,CAAE,GAAY;QACrB,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;QAE1B,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,GAAG,CAAC,MAAM;YACV,GAAG,CAAC,IAAI,GAAG,GAAG,CAAA;QAElB,uBAAuB;QACvB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAW,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QAG3F,iBAAiB;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI;YACT,OAAM;QAEV,IAAI,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC;YAClD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CACtB,CAAA;aACA,IAAI,GAAG,CAAC,EAAE,CAAC,mCAAmC,CAAC;YAChD,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,CACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CACtB,CAAA;aACA,IAAI,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;SAC1D;;YACG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IAC/B,CAAC;IAGD,KAAK,CAAC,OAAO,CAAE,GAAY,EAAE,IAAU;QACnC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE;YACnC,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAA;QAEF,mBAAmB;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAEhB,gCAAgC;QAChC,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;YAC/B,OAAM;QAEV,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YACtB,OAAM;QAEV,MAAM,IAAI,EAAE,EAAE,CAAA;IAClB,CAAC;IAGD,KAAK,CAAC,MAAM,CAAE,GAAY;QACtB,OAAO,KAAK,CAAA;IAChB,CAAC;IAGD,MAAM,CAAE,GAAY;QAChB,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;QACvB,MAAM,EACF,KAAK,EACL,IAAI,EACJ,IAAI,EAAE,KAAK,EACX,QAAQ,EACR,IAAI,EACJ,GAAG,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,EAClC,EAAE,GACL,GAAG,OAAO,CAAA;QAEX,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAExB,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAA;QAGxB,IAAI,CAAC,GAAG,EAAE,CAAA;QAEV,WAAW;QACX,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAA;QAGtC,SAAS;QACT,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;QAG9B,SAAS;QACT,CAAC,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,CAAC,GAAG,EAAE,CAAA;YACV,IAAI,EAAE,CAAC,QAAQ;gBACX,CAAC,IAAI,QAAQ,CAAA;YACjB,IAAI,EAAE,CAAC,SAAS;gBACZ,CAAC,IAAI,SAAS,CAAA;YAClB,IAAI,EAAE,CAAC,KAAK;gBACR,CAAC,IAAI,GAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBACzD,CAAC,IAAI,GAAG,GAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YACrE,IAAI,EAAE,CAAC,EAAE,KAAW,SAAS,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS;gBACtD,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAA;YAClC,IAAI,EAAE,CAAC,OAAO,KAAM,SAAS;gBACzB,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;YACvC,IAAI,EAAE,CAAC,QAAQ;gBACX,CAAC,IAAI,SAAS,CAAA;YAClB,IAAI,EAAE,CAAC,OAAO,KAAM,SAAS;gBACzB,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1D,OAAO,CAAC,CAAA;QACZ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;QAGnB,gBAAgB;QAChB,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAA;QAG1D,aAAa;QACb,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QAC7B,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAA;QAG9D,WAAW;QACX,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA;QAGxB,WAAW;QACX,CAAC,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;gBAC1C,OAAO,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,EAAE,CAAA;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACnB,OAAO,IAAI,CAAC,MAAM,CAAA;YACtB,OAAO,IAAI,CAAA;QACf,CAAC,CAAC,EAAE,CAAA;QAGJ,YAAY;QACZ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBACpC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAA;YAE7C,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAEtB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;YAEjD,CAAC,IAAI,CAAC,CAAA;SACT;QAGD,WAAW;QACX,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;YAChC,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAA;QAGtE,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;IAGD,KAAK,CAAC,QAAQ,CACV,GAAY,EACZ,EAAU,EACV,EACI,EAAE,EACF,IAAI,EACJ,OAAO,GAKd;QACG,MAAM,EACF,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAChC,QAAQ,GACX,GAAG,GAAG,CAAA;QAEP,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAClE,OAAO,IAAI,CAAA;QAEf,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;YACrC,OAAO,KAAK,CAAA;QAEhB,SAAS,QAAQ;YACb,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,EAAE,CAAA;YACnE,IAAI,KAAK,KAAK,IAAI;gBACd,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;YAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAED,IAAI;YACA,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;YACvC,OAAO,IAAI,CAAA;SACd;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;gBACpB,MAAM,KAAK,CAAA;YACf,IAAI,OAAO;gBACP,QAAQ,EAAE,CAAA;YACd,OAAO,KAAK,CAAA;SACf;IACL,CAAC;IAGD,sEAAsE;IACtE,KAAK,CAAC,KAAK,CACP,GAAY,EACZ,IAAY,EACZ,EACI,EAAE,GAAG,MAAM,EACX,IAAI,EACJ,QAAQ,KAUR,EAAU;QAEd,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;QAEtC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI;YAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAEtD,IAAI,QAAQ;YACR,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;aACzB;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAElC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAExB,IAAI;gBACA,IAAI,GAAG,KAAK,CAAC,SAAS,CAClB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAC7B,CAAA;aACJ;YAAC,OAAO,KAAK,EAAE;gBACZ,KAAK,CAAC,OAAO,IAAI,WAAW,IAAI,EAAE,CAAA;gBAClC,MAAM,KAAK,CAAA;aACd;SACJ;QAGD,OAAO;QACP,IAAI,KAAY,CAAA;QAChB,IAAI;YACA,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;SACzC;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC5D,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;gBAClB,MAAM,KAAK,CAAA;aACd;YAED,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;YAClB,KAAK,CAAC,OAAO,GAAG,eAAe,KAAK,CAAC,OAAO,EAAE,CAAA;YAC9C,MAAM,KAAK,CAAA;SACd;QAGD,aAAa;QACb,mCAAmC;QACnC,qDAAqD;QACrD,mCAAmC;QACnC,kBAAkB;QAClB,IAAI;QAGJ,0EAA0E;QAC1E,+CAA+C;QAC/C,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QAEtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,4BAA4B,CAAC,CAAA;QAE/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;QAE5E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAEtB,IAAI,CAAC,QAAQ,CAAC,IAAI;YACd,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;QAExB,IAAI,IAAI,KAAK,MAAM;YACf,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,yBAAyB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEnG,IAAI,OAAO,CAAC,KAAK,EAAE;YACf,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;YACrB,+BAA+B;YAC/B,OAAO,IAAI,CAAA;SACd;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK;YACrB,IAAI;gBACA,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAA;gBAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;gBAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAErD,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBACrD,IAAI,GAAG,GAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;gBAE1D,IAAI,OAAO,KAAK,IAAI,WAAW,EAAE;oBAC7B,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA;oBAC1B,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;iBACzB;gBAED,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAA;gBAEnC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;gBACrB,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;gBACjD,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;gBACpE,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;aAC5D;YAAC,OAAO,GAAG,EAAE;gBACV,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;gBACrB,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBAClD,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;gBACtD,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;aAC5C;aACA;YACD,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YAClD,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;SAC5C;QAED,OAAO,IAAI,CAAA;IACf,CAAC;CACJ","sourcesContent":["import { createServer as http_create_server, type Server as HttpServer } from 'http'\nimport zlib from 'zlib'\nimport { default as nodefs, type Stats } from 'fs'\nimport { promisify } from 'util'\n\n// --- 3rd party\nimport upath from 'upath'\nimport qs from 'qs'\nimport resolve_safely from 'resolve-path'\nimport { WebSocketServer } from 'ws'\n\n// --- koa & koa middleware\nimport { default as Koa, type Context, type Next } from 'koa'\n\nimport KoaCors from '@koa/cors'\nimport KoaCompress from 'koa-compress'\nimport { userAgent as KoaUserAgent, type UserAgentContext } from 'koa-useragent'\n\n\ndeclare module 'koa' {\n interface Request {\n /** 经过 decodeURIComponent 后,在路径重写之前的路径 */\n _path: string\n \n body: any\n }\n \n interface Context {\n compress: boolean\n userAgent: UserAgentContext['userAgent'] & { isWechat: boolean }\n }\n}\n\n// --- my libs\nimport { request as _request, type Remote } from './net.js'\nimport { stream_to_buffer, inspect, output_width } from './utils.js'\nimport { type UFS } from './file.js'\n\n\ndeclare module 'http' {\n interface IncomingMessage {\n body?: Buffer\n }\n \n interface ServerResponse {\n body?: Buffer\n }\n}\n\n// ------------ my server\nexport class Server {\n app: Koa\n \n handler: ReturnType<Koa['callback']>\n \n port: number\n \n server_http: HttpServer\n \n server_ws?: WebSocketServer\n \n remote?: Remote\n \n \n constructor (port: number, { remote }: { remote?: Remote } = { }) {\n this.port = port\n if (remote)\n this.remote = remote\n }\n \n /** start http server and listen */\n async start () {\n // --- init koa app\n let app = new Koa()\n \n app.on('error', (error, ctx) => {\n console.error(error)\n console.log(ctx)\n })\n \n app.use(this.entry.bind(this))\n \n app.use(KoaCompress({\n br: {\n chunkSize: 64 * 1024,\n \n // https://nodejs.org/api/zlib.html#zlib_class_brotlioptions\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 3 // 默认为 11 (最大压缩),会导致 news/get 生成的 14 mb 的 json 压缩时长高达 24s\n },\n },\n threshold: 512\n }))\n \n app.use(KoaCors({ credentials: true }))\n app.use(KoaUserAgent)\n \n app.use(this._router.bind(this))\n \n this.app = app\n \n this.handler = this.app.callback()\n \n this.server_http = http_create_server(this.handler)\n \n \n // websocket rpc\n if (this.remote) {\n this.server_ws = new WebSocketServer({\n noServer: true,\n skipUTF8Validation: true,\n perMessageDeflate: true\n })\n \n this.server_ws.on('connection', (ws: WebSocket, request) => {\n ws.addEventListener('message', event => {\n this.remote.handle(event.data, ws as any)\n })\n })\n \n this.server_http.on('upgrade', (request, socket, head) => {\n // url 只有路径部分\n const {\n url, \n headers: { host = '', 'user-agent': ua },\n } = request\n \n const ip = (request.socket.remoteAddress as string).replace(/^::ffff:/, '')\n \n console.log(`${new Date().to_time_str()} ${(ip || '').pad(40)} ${(ua || '').limit(40)} ${'websocket'.pad(10).magenta} ${'connect'.pad(10).magenta}${host.pad(20)} ${url.pad(60).yellow}`)\n \n switch (url) {\n case '/':\n this.server_ws.handleUpgrade(request, socket, head, ws => {\n ws.binaryType = 'arraybuffer'\n this.server_ws.emit('connection', ws, request)\n })\n return\n \n default:\n console.log(`${' '.repeat(13)} connect 404: ${url}`.red)\n socket.destroy()\n }\n })\n }\n \n \n await new Promise<void>(resolve => {\n this.server_http.listen(this.port, resolve)\n })\n }\n \n \n stop () {\n this.server_http.close()\n }\n \n \n async entry (ctx: Context, next: Next) {\n let { response } = ctx\n \n await this.parse(ctx)\n \n // ------------ next\n try {\n await next()\n } catch (error) {\n if (error.status !== 404)\n console.error(error)\n response.status = error.status || 500\n response.body = inspect(error, { colors: false })\n response.type = 'text/plain'\n }\n }\n \n \n /** \n parse req.body to request.body \n process request.ip\n */\n async parse (ctx: Context) {\n let { req, request } = ctx\n \n const buf = await stream_to_buffer(req)\n if (buf.length)\n req.body = buf\n \n // --- parse request.ip\n request.ip = (request.headers['x-real-ip'] as string || request.ip).replace(/^::ffff:/, '')\n \n \n // --- parse body\n if (!req.body)\n return\n \n if (ctx.is('application/json') || ctx.is('text/plain'))\n request.body = JSON.parse(\n req.body.toString()\n )\n else if (ctx.is('application/x-www-form-urlencoded'))\n request.body = qs.parse(\n req.body.toString()\n )\n else if (ctx.is('multipart/form-data')) {\n throw new Error('multipart/form-data is not supported')\n } else\n request.body = req.body\n }\n \n \n async _router (ctx: Context, next: Next) {\n let { request } = ctx\n const _path = request._path = decodeURIComponent(request.path)\n Object.defineProperty(request, 'path', {\n value: _path,\n configurable: true,\n enumerable: true,\n writable: true\n })\n \n // ------------ log\n this.logger(ctx)\n \n // ------------ repl_router hook\n if (await global.repl_router?.(ctx))\n return\n \n if (await this.router(ctx))\n return\n \n await next?.()\n }\n \n \n async router (ctx: Context): Promise<boolean> {\n return false\n }\n \n \n logger (ctx: Context) {\n const { request } = ctx\n const {\n query, \n body, \n path, _path, \n protocol,\n host,\n req: { httpVersion: http_version },\n ip,\n } = request\n \n let { method } = request\n \n const ua = ctx.userAgent\n \n \n let s = ''\n \n // --- time\n s += `${new Date().to_time_str()} `\n \n \n // --- ip\n s += (ip || '').pad(40) + ' '\n \n \n // --- ua\n s += (() => {\n let t = ''\n if (ua.isMobile)\n t += 'mobile'\n if (ua.isDesktop)\n t += 'desktop'\n if (ua.isBot)\n t += `${ t ? ' ' : '' }${'robot'.blue}`\n if (ua.platform !== 'unknown' && !ua.os.startsWith('Windows'))\n t += '/' + ua.platform.toLowerCase().replace('apple mac', 'mac')\n if (ua.os !== 'unknown' && ua.platform !== 'Android')\n t += '/' + ua.os.toLowerCase()\n if (ua.browser !== 'unknown')\n t += '/' + ua.browser.toLowerCase()\n if (ua.isWechat)\n t += '/weixin'\n if (ua.version !== 'unknown')\n t += '/' + ua.version.split('.').slice(0, 2).join('.')\n return t\n })().pad(40) + ' '\n \n \n // --- https/2.0\n s += `${`${protocol.pad(5)}/${http_version}`.pad(10)} `\n \n \n // --- method\n method = method.toLowerCase()\n s += method === 'get' ? method.pad(10) : method.pad(10).yellow\n \n \n // --- host\n s += `${host.pad(20)} `\n \n \n // --- path\n s += (() => {\n if (path.toLowerCase() !== _path.toLowerCase())\n return `${_path.blue} → ${path}`\n if (!path.includes('.'))\n return path.yellow\n return path\n })()\n \n \n // --- query\n if (Object.keys(query).length) {\n let t = inspect(query, { compact: true })\n .replace('[Object: null prototype] ', '')\n \n if (t.endsWith('\\n'))\n t = t.slice(0, -1)\n \n s += (s + t).width > output_width ? '\\n' : ' '\n \n s += t\n }\n \n \n // --- body\n if (body && Object.keys(body).length)\n s += '\\n' + inspect(body).replace('[Object: null prototype] ', '')\n \n \n // --- print log\n console.log(s)\n }\n \n \n async try_send (\n ctx: Context, \n fp: string,\n {\n fs,\n root,\n log_404,\n }: {\n fs?: (typeof nodefs) | UFS\n root: string\n log_404?: boolean\n }) {\n const {\n request: { _path, path, method },\n response,\n } = ctx\n \n if (!(typeof response.body === 'undefined') || response.status !== 404)\n return true\n \n if (method !== 'HEAD' && method !== 'GET')\n return false\n \n function _log_404 () {\n let s = `${' '.repeat(13)} ${method.toLowerCase()} 404: ${path}`\n if (_path !== path)\n s += ` ${_path.bracket()}`\n console.log(s.red)\n }\n \n try {\n await this.fsend(ctx, fp, { fs, root })\n return true\n } catch (error) {\n if (error.status !== 404)\n throw error\n if (log_404)\n _log_404()\n return false\n }\n }\n \n \n /** send file at `path` with the given `options` to the koa `ctx`. */\n async fsend (\n ctx: Context,\n path: string,\n {\n fs = nodefs,\n root,\n absolute\n }: {\n /** `fs` */\n fs?: (typeof nodefs) | UFS\n \n root?: string\n \n /** `false` */\n absolute?: boolean\n \n } = { } as any\n ) {\n const { request, response, req } = ctx\n \n if (!absolute && !root)\n throw new Error('fsend with `!absolute && !root`')\n \n if (absolute)\n path = upath.resolve(path)\n else {\n if (path.startsWith(root))\n path = path.slice(root.length)\n \n if (path.startsWith('/'))\n path = path.slice(1)\n \n try {\n path = upath.normalize(\n resolve_safely(root, path)\n )\n } catch (error) {\n error.message += `, path: ${path}`\n throw error\n }\n }\n \n \n // stat\n let stats: Stats\n try {\n stats = await promisify(fs.stat)(path)\n } catch (error) {\n if (['ENOENT', 'ENAMETOOLONG', 'ENOTDIR'].includes(error.code)) {\n error.status = 404\n throw error\n }\n \n error.status = 500\n error.message = `fs.stat 出错: ${error.message}`\n throw error\n }\n \n \n // size limit\n // if (stats.size >= 100 * 2**20) {\n // let error = new Error('body.length >= 100 mb')\n // ;(error as any).status = 500\n // throw error\n // }\n \n \n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges\n // advertise server support of partial requests\n response.set('accept-ranges', 'bytes')\n \n if (!response.get('cache-control'))\n response.set('cache-control', 'max-age=0, must-revalidate')\n \n if (!response.get('last-modified'))\n response.set('last-modified', (stats.mtime || new Date()).toUTCString())\n \n const fext = path.fext\n \n if (!response.type)\n response.type = fext\n \n if (fext === '.pdf')\n response.set('content-disposition', `attachment; filename=\"${encodeURIComponent(path.fname)}\"`)\n \n if (request.fresh) {\n response.status = 304\n // 以上会自动设置 response.body = null\n return path\n }\n \n if (request.headers.range)\n try {\n const range_header = request.headers.range\n const range_value = /=(.*)$/.exec(range_header)[1]\n const range = /^[\\w]*?(\\d*)-(\\d*)$/.exec(range_value)\n \n let start = range[1] ? parseInt(range[1]) : undefined\n let end = range[2] ? parseInt(range[2]) : stats.size - 1\n \n if (typeof start == 'undefined') {\n start = (stats.size - end)\n end = (stats.size - 1)\n }\n \n const chunksize = (end - start + 1)\n \n response.status = 206\n response.set('content-length', String(chunksize))\n response.set('content-range', `bytes ${start}-${end}/${stats.size}`)\n response.body = fs.createReadStream(path, { start, end })\n } catch (err) {\n response.status = 416\n response.set('content-length', String(stats.size))\n response.set('content-range', `bytes */${stats.size}`)\n response.body = fs.createReadStream(path)\n }\n else {\n response.set('content-length', String(stats.size))\n response.body = fs.createReadStream(path)\n }\n \n return path\n }\n}\n\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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","sourcesContent":["import { createServer as http_create_server, type Server as HttpServer } from 'http'\nimport zlib from 'zlib'\nimport { default as nodefs, type Stats } from 'fs'\nimport { promisify } from 'util'\n\n// --- 3rd party\nimport upath from 'upath'\nimport qs from 'qs'\nimport resolve_safely from 'resolve-path'\nimport { WebSocketServer } from 'ws'\n\n// --- koa & koa middleware\nimport { default as Koa, type Context, type Next } from 'koa'\n\nimport KoaCors from '@koa/cors'\nimport KoaCompress from 'koa-compress'\nimport { userAgent as KoaUserAgent, type UserAgentContext } from 'koa-useragent'\n\n\ndeclare module 'koa' {\n interface Request {\n /** 经过 decodeURIComponent 后,在路径重写之前的路径 */\n _path: string\n \n body: any\n }\n \n interface Context {\n compress: boolean\n userAgent: UserAgentContext['userAgent'] & { isWechat: boolean }\n }\n}\n\n// --- my libs\nimport { request as _request, type Remote } from './net.js'\nimport { stream_to_buffer, inspect, output_width } from './utils.js'\nimport { type UFS } from './file.js'\n\n\ndeclare module 'http' {\n interface IncomingMessage {\n body?: Buffer\n }\n \n interface ServerResponse {\n body?: Buffer\n }\n}\n\n\n// ------------ my server\nexport class Server {\n app: Koa\n \n handler: ReturnType<Koa['callback']>\n \n port: number\n \n server_http: HttpServer\n \n server_ws?: WebSocketServer\n \n remote?: Remote\n \n \n constructor (port: number, { remote }: { remote?: Remote } = { }) {\n this.port = port\n \n if (remote)\n this.remote = remote\n }\n \n \n /** start http server and listen */\n async start () {\n // --- init koa app\n let app = new Koa()\n \n app.on('error', (error, ctx) => {\n console.error(error)\n console.log(ctx)\n })\n \n app.use(this.entry.bind(this))\n \n app.use(KoaCompress({\n br: {\n chunkSize: 64 * 1024,\n \n // https://nodejs.org/api/zlib.html#zlib_class_brotlioptions\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 3 // 默认为 11 (最大压缩),会导致 news/get 生成的 14 mb 的 json 压缩时长高达 24s\n },\n },\n threshold: 512\n }))\n \n app.use(KoaCors({ credentials: true }))\n app.use(KoaUserAgent)\n \n app.use(this._router.bind(this))\n \n this.app = app\n \n this.handler = this.app.callback()\n \n this.server_http = http_create_server(this.handler)\n \n \n // websocket rpc\n if (this.remote) {\n this.server_ws = new WebSocketServer({\n noServer: true,\n skipUTF8Validation: true,\n perMessageDeflate: true\n })\n \n this.server_ws.on('connection', (ws: WebSocket, request) => {\n ws.addEventListener('message', event => {\n this.remote.handle(event.data, ws as any)\n })\n })\n \n this.server_http.on('upgrade', (request, socket, head) => {\n // url 只有路径部分\n const {\n url, \n headers: { host = '', 'user-agent': ua },\n } = request\n \n const ip = (request.socket.remoteAddress as string).replace(/^::ffff:/, '')\n \n console.log(`${new Date().to_time_str()} ${(ip || '').pad(40)} ${(ua || '').limit(40)} ${'websocket'.pad(10).magenta} ${'connect'.pad(10).magenta}${host.pad(20)} ${url.pad(60).yellow}`)\n \n switch (url) {\n case '/':\n this.server_ws.handleUpgrade(request, socket, head, ws => {\n ws.binaryType = 'arraybuffer'\n this.server_ws.emit('connection', ws, request)\n })\n return\n \n default:\n console.log(`${' '.repeat(13)} connect 404: ${url}`.red)\n socket.destroy()\n }\n })\n }\n \n \n await new Promise<void>(resolve => {\n this.server_http.listen(this.port, resolve)\n })\n }\n \n \n stop () {\n this.server_http.close()\n }\n \n \n async entry (ctx: Context, next: Next) {\n let { response } = ctx\n \n await this.parse(ctx)\n \n // ------------ next\n try {\n await next()\n } catch (error) {\n if (error.status !== 404)\n console.error(error)\n response.status = error.status || 500\n response.body = inspect(error, { colors: false })\n response.type = 'text/plain'\n }\n }\n \n \n /** \n parse req.body to request.body \n process request.ip\n */\n async parse (ctx: Context) {\n let { req, request } = ctx\n \n const buf = await stream_to_buffer(req)\n if (buf.length)\n req.body = buf\n \n // --- parse request.ip\n request.ip = (request.headers['x-real-ip'] as string || request.ip).replace(/^::ffff:/, '')\n \n \n // --- parse body\n if (!req.body)\n return\n \n if (ctx.is('application/json') || ctx.is('text/plain'))\n request.body = JSON.parse(\n req.body.toString()\n )\n else if (ctx.is('application/x-www-form-urlencoded'))\n request.body = qs.parse(\n req.body.toString()\n )\n else if (ctx.is('multipart/form-data')) {\n throw new Error('multipart/form-data is not supported')\n } else\n request.body = req.body\n }\n \n \n async _router (ctx: Context, next: Next) {\n let { request } = ctx\n const _path = request._path = decodeURIComponent(request.path)\n Object.defineProperty(request, 'path', {\n value: _path,\n configurable: true,\n enumerable: true,\n writable: true\n })\n \n // ------------ log\n this.logger(ctx)\n \n // ------------ repl_router hook\n if (await global.repl_router?.(ctx))\n return\n \n if (await this.router(ctx))\n return\n \n await next?.()\n }\n \n \n async router (ctx: Context): Promise<boolean> {\n return false\n }\n \n \n logger (ctx: Context) {\n const { request } = ctx\n const {\n query, \n body, \n path, _path, \n protocol,\n host,\n req: { httpVersion: http_version },\n ip,\n } = request\n \n let { method } = request\n \n const ua = ctx.userAgent\n \n \n let s = ''\n \n // --- time\n s += `${new Date().to_time_str()} `\n \n \n // --- ip\n s += (ip || '').pad(40) + ' '\n \n \n // --- ua\n s += (() => {\n let t = ''\n if (ua.isMobile)\n t += 'mobile'\n if (ua.isDesktop)\n t += 'desktop'\n if (ua.isBot)\n t += `${ t ? ' ' : '' }${'robot'.blue}`\n if (ua.platform !== 'unknown' && !ua.os.startsWith('Windows'))\n t += '/' + ua.platform.toLowerCase().replace('apple mac', 'mac')\n if (ua.os !== 'unknown' && ua.platform !== 'Android')\n t += '/' + ua.os.toLowerCase()\n if (ua.browser !== 'unknown')\n t += '/' + ua.browser.toLowerCase()\n if (ua.isWechat)\n t += '/weixin'\n if (ua.version !== 'unknown')\n t += '/' + ua.version.split('.').slice(0, 2).join('.')\n return t\n })().pad(40) + ' '\n \n \n // --- https/2.0\n s += `${`${protocol.pad(5)}/${http_version}`.pad(10)} `\n \n \n // --- method\n method = method.toLowerCase()\n s += method === 'get' ? method.pad(10) : method.pad(10).yellow\n \n \n // --- host\n s += `${host.pad(20)} `\n \n \n // --- path\n s += (() => {\n if (path.toLowerCase() !== _path.toLowerCase())\n return `${_path.blue} → ${path}`\n if (!path.includes('.'))\n return path.yellow\n return path\n })()\n \n \n // --- query\n if (Object.keys(query).length) {\n let t = inspect(query, { compact: true })\n .replace('[Object: null prototype] ', '')\n \n if (t.endsWith('\\n'))\n t = t.slice(0, -1)\n \n s += (s + t).width > output_width ? '\\n' : ' '\n \n s += t\n }\n \n \n // --- body\n if (body && Object.keys(body).length)\n s += '\\n' + inspect(body).replace('[Object: null prototype] ', '')\n \n \n // --- print log\n console.log(s)\n }\n \n \n async try_send (\n ctx: Context, \n fp: string,\n {\n fs,\n root,\n log_404,\n }: {\n fs?: (typeof nodefs) | UFS\n root: string\n log_404?: boolean\n }) {\n const {\n request: { _path, path, method },\n response,\n } = ctx\n \n if (!(typeof response.body === 'undefined') || response.status !== 404)\n return true\n \n if (method !== 'HEAD' && method !== 'GET')\n return false\n \n function _log_404 () {\n let s = `${' '.repeat(13)} ${method.toLowerCase()} 404: ${path}`\n if (_path !== path)\n s += ` ${_path.bracket()}`\n console.log(s.red)\n }\n \n try {\n await this.fsend(ctx, fp, { fs, root })\n return true\n } catch (error) {\n if (error.status !== 404)\n throw error\n if (log_404)\n _log_404()\n return false\n }\n }\n \n \n /** send file at `path` with the given `options` to the koa `ctx`. */\n async fsend (\n ctx: Context,\n path: string,\n {\n fs = nodefs,\n root,\n absolute\n }: {\n /** `fs` */\n fs?: (typeof nodefs) | UFS\n \n root?: string\n \n /** `false` */\n absolute?: boolean\n \n } = { } as any\n ) {\n const { request, response, req } = ctx\n \n if (!absolute && !root)\n throw new Error('fsend with `!absolute && !root`')\n \n if (absolute)\n path = upath.resolve(path)\n else {\n if (path.startsWith(root))\n path = path.slice(root.length)\n \n if (path.startsWith('/'))\n path = path.slice(1)\n \n try {\n path = upath.normalize(\n resolve_safely(root, path)\n )\n } catch (error) {\n error.message += `, path: ${path}`\n throw error\n }\n }\n \n \n // stat\n let stats: Stats\n try {\n stats = await promisify(fs.stat)(path)\n } catch (error) {\n if (['ENOENT', 'ENAMETOOLONG', 'ENOTDIR'].includes(error.code)) {\n error.status = 404\n throw error\n }\n \n error.status = 500\n error.message = `fs.stat 出错: ${error.message}`\n throw error\n }\n \n \n // size limit\n // if (stats.size >= 100 * 2**20) {\n // let error = new Error('body.length >= 100 mb')\n // ;(error as any).status = 500\n // throw error\n // }\n \n \n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges\n // advertise server support of partial requests\n response.set('accept-ranges', 'bytes')\n \n if (!response.get('cache-control'))\n response.set('cache-control', 'max-age=0, must-revalidate')\n \n if (!response.get('last-modified'))\n response.set('last-modified', (stats.mtime || new Date()).toUTCString())\n \n const fext = path.fext\n \n if (!response.type)\n response.type = fext\n \n if (fext === '.pdf')\n response.set('content-disposition', `attachment; filename=\"${encodeURIComponent(path.fname)}\"`)\n \n if (request.fresh) {\n response.status = 304\n // 以上会自动设置 response.body = null\n return path\n }\n \n if (request.headers.range)\n try {\n const range_header = request.headers.range\n const range_value = /=(.*)$/.exec(range_header)[1]\n const range = /^[\\w]*?(\\d*)-(\\d*)$/.exec(range_value)\n \n let start = range[1] ? parseInt(range[1]) : undefined\n let end = range[2] ? parseInt(range[2]) : stats.size - 1\n \n if (typeof start == 'undefined') {\n start = (stats.size - end)\n end = (stats.size - 1)\n }\n \n const chunksize = (end - start + 1)\n \n response.status = 206\n response.set('content-length', String(chunksize))\n response.set('content-range', `bytes ${start}-${end}/${stats.size}`)\n response.body = fs.createReadStream(path, { start, end })\n } catch (err) {\n response.status = 416\n response.set('content-length', String(stats.size))\n response.set('content-range', `bytes */${stats.size}`)\n response.body = fs.createReadStream(path)\n }\n else {\n response.set('content-length', String(stats.size))\n response.body = fs.createReadStream(path)\n }\n \n return path\n }\n}\n\n"]}
package/tsconfig.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "importHelpers": true,
19
19
  // "watch": false
20
20
  "incremental": true,
21
- "tsBuildInfoFile": "./node_modules/.tsbuildinfo",
21
+ "tsBuildInfoFile": "./node_modules/.tsbuildinfo.json",
22
22
 
23
23
 
24
24
  // --- emit
@@ -2,7 +2,7 @@ export declare function assert(assertion: any, message?: string): never | void;
2
2
  export declare function delay(milliseconds: number): Promise<void>;
3
3
  export declare function debug(milliseconds?: number): Promise<void>;
4
4
  /** 字符串字典序比较 */
5
- export declare function strcmp(l: string, r: string): 1 | 0 | -1;
5
+ export declare function strcmp(l: string, r: string): 0 | 1 | -1;
6
6
  /** 拼接 TypedArrays 生成一个完整的 Uint8Array */
7
7
  export declare function concat(arrays: ArrayBufferView[]): Uint8Array;
8
8
  /** 时间间隔 (milliseconds) 格式化 */
package/utils.d.ts CHANGED
@@ -17,7 +17,7 @@ export declare function unique<T>(iterable: T[] | Iterable<T>, selector?: string
17
17
  /** 排序对象中 key 的顺序,返回新的对象 */
18
18
  export declare function sort_keys<T>(obj: T): T;
19
19
  /** 字符串字典序比较 */
20
- export declare function strcmp(l: string, r: string): 1 | 0 | -1;
20
+ export declare function strcmp(l: string, r: string): 0 | 1 | -1;
21
21
  /** 拼接 TypedArrays 生成一个完整的 Uint8Array */
22
22
  export declare function concat(arrays: ArrayBufferView[]): Uint8Array;
23
23
  export declare function typed_array_to_buffer(view: ArrayBufferView): Buffer;
package/LICENSE DELETED
@@ -1,7 +0,0 @@
1
- Copyright 2021 ShenHongFei
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
-
5
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
-
7
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.