From e3891ef470dcedd0a757fe9144f1b07f2ef7d491 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 21 Jul 2021 16:20:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20FakeServer=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- FakeServer/FakeServer.drawio | 51 +++++++++++++ FakeServer/package.json | 15 ++++ FakeServer/parseURL.js | 73 +++++++++++++++++++ FakeServer/pnpm-lock.yaml | 13 ++++ FakeServer/router.js | 31 ++++++++ src/index.js | 2 +- {src/tools => tools}/Mock/Mock.js | 0 {src/tools => tools}/Mock/Server/excel.js | 0 {src/tools => tools}/Mock/Server/index.js | 0 {src/tools => tools}/UI/index.js | 0 {src/tools => tools}/UI/ui.html | 0 .../tools => tools}/analysis/Observer/hook.js | 0 .../analysis/Observer/hook/asyncApply.js | 0 .../analysis/Observer/hook/createProperty.js | 0 .../analysis/Observer/hook/syncApply.js | 0 .../analysis/Observer/watch.js | 0 .../analysis/Search/GlobalVars.js | 0 .../tools => tools}/analysis/Search/Search.js | 0 .../analysis/Search/searchObj.js | 0 .../analysis/Search/window-default.json | 0 {src/tools => tools}/analysis/antiDebugger.js | 0 {src/tools => tools}/analysis/copy.js | 0 {src/tools => tools}/analysis/index.js | 0 {src/tools => tools}/index.js | 1 + {src/tools => tools}/loader/jsDelivr.js | 0 {src/tools => tools}/loader/loader.js | 0 {src/tools => tools}/loader/loaderFunction.js | 0 {src/tools => tools}/loader/scriptStore.js | 0 29 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 FakeServer/FakeServer.drawio create mode 100644 FakeServer/package.json create mode 100644 FakeServer/parseURL.js create mode 100644 FakeServer/pnpm-lock.yaml create mode 100644 FakeServer/router.js rename {src/tools => tools}/Mock/Mock.js (100%) rename {src/tools => tools}/Mock/Server/excel.js (100%) rename {src/tools => tools}/Mock/Server/index.js (100%) rename {src/tools => tools}/UI/index.js (100%) rename {src/tools => tools}/UI/ui.html (100%) rename {src/tools => tools}/analysis/Observer/hook.js (100%) rename {src/tools => tools}/analysis/Observer/hook/asyncApply.js (100%) rename {src/tools => tools}/analysis/Observer/hook/createProperty.js (100%) rename {src/tools => tools}/analysis/Observer/hook/syncApply.js (100%) rename {src/tools => tools}/analysis/Observer/watch.js (100%) rename {src/tools => tools}/analysis/Search/GlobalVars.js (100%) rename {src/tools => tools}/analysis/Search/Search.js (100%) rename {src/tools => tools}/analysis/Search/searchObj.js (100%) rename {src/tools => tools}/analysis/Search/window-default.json (100%) rename {src/tools => tools}/analysis/antiDebugger.js (100%) rename {src/tools => tools}/analysis/copy.js (100%) rename {src/tools => tools}/analysis/index.js (100%) rename {src/tools => tools}/index.js (84%) rename {src/tools => tools}/loader/jsDelivr.js (100%) rename {src/tools => tools}/loader/loader.js (100%) rename {src/tools => tools}/loader/loaderFunction.js (100%) rename {src/tools => tools}/loader/scriptStore.js (100%) diff --git a/.gitignore b/.gitignore index 0b4dd54..63da60c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ bin-debug/ bin-release/ [Oo]bj/ [Bb]in/ -node_modules/* +**/node_modules/* # Other files and folders .settings/ localFile/ diff --git a/FakeServer/FakeServer.drawio b/FakeServer/FakeServer.drawio new file mode 100644 index 0000000..5acf9b4 --- /dev/null +++ b/FakeServer/FakeServer.drawio @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FakeServer/package.json b/FakeServer/package.json new file mode 100644 index 0000000..15ed119 --- /dev/null +++ b/FakeServer/package.json @@ -0,0 +1,15 @@ +{ + "name": "@konghayao/fake-server", + "version": "0.0.1", + "description": "", + "main": "parseURL.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "MIT", + "dependencies": { + "path-to-regexp": "^6.2.0" + } +} diff --git a/FakeServer/parseURL.js b/FakeServer/parseURL.js new file mode 100644 index 0000000..d9104bd --- /dev/null +++ b/FakeServer/parseURL.js @@ -0,0 +1,73 @@ +/* + * @license + * Copyright 2021 KonghaYao 江夏尧 + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * The Regexps were copied from Purl (A JavaScript URL parser) v2.3.1 + * which developed and maintained by Mark Perkins, mark@allmarkedup.com + * Source repository: https://github.com/allmarkedup/jQuery-URL-Parser + * Licensed under an MIT-style license. + */ +const key = [ + "source", + "protocol", + "authority", + "userInfo", + "user", + "password", + "host", + "port", + "relative", + "path", + "directory", + "file", + "query", + "hash", +]; // keys available to query +const parser = { + //less intuitive, more accurate to the specs + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + // more intuitive, fails on relative paths and deviates from specs + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/, +}; + +function parseUri(url, strictMode = false) { + const res = parser[strictMode ? "strict" : "loose"].exec(decodeURI(url)); + + const uri = key.reduce((col, keyName, index) => { + col[keyName] = res[index] || ""; + return col; + }, {}); + + // build query and hash parameters + uri.queryParams = parseString(uri.query); + + // compile a 'base' domain attribute + uri["base"] = uri.host + ? (uri.protocol ? uri.protocol + "://" + uri.host : uri.host) + + (uri.port ? ":" + uri.port : "") + : ""; + + return uri; +} + +function parseString(queryString) { + return String(queryString) + .split(/&|;/) + .reduce(function (collection, pair) { + try { + pair = decodeURIComponent(pair.replace(/\+/g, " ")); + } catch (e) { + // ignore + } + let [key, value] = pair.split(/=/g); + collection[key] = value; + return collection; + }, {}); +} + +export function parseURL(url, strictMode = false) { + return parseUri(url, strictMode); +} diff --git a/FakeServer/pnpm-lock.yaml b/FakeServer/pnpm-lock.yaml new file mode 100644 index 0000000..9320af7 --- /dev/null +++ b/FakeServer/pnpm-lock.yaml @@ -0,0 +1,13 @@ +lockfileVersion: 5.3 + +specifiers: + path-to-regexp: ^6.2.0 + +dependencies: + path-to-regexp: 6.2.0 + +packages: + + /path-to-regexp/6.2.0: + resolution: {integrity: sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==} + dev: false diff --git a/FakeServer/router.js b/FakeServer/router.js new file mode 100644 index 0000000..d892e20 --- /dev/null +++ b/FakeServer/router.js @@ -0,0 +1,31 @@ +import { map } from 'rxjs/operators'; +import { of } from 'rxjs'; +import { pathToRegexp } from 'path-to-regexp'; +function normalizeRouters(Routers) { + return Object.entries(Routers); +} +function createRegexp(path, config = {}) { + return pathToRegexp(path, [], config); +} +class Route { + constructor(path, cb) {} + use(plugin) {} +} +class Router { + constructor(Routers) { + this.#RouterMap = new Map(normalizeRouters(Routers)); + } + #RouterMap; + #RouteMatchers = []; + addRoute(path, mainCallback) { + const route = new Route(path, mainCallback); + const pathRegexp = createRegexp(path); + this.#RouterMap.set(pathRegexp, route); + this.#RouteMatchers.push(pathRegexp); + return route; + } + deleteRouter() {} + enableRouter() {} + disableRouter() {} + receiveMessage(path, message) {} +} diff --git a/src/index.js b/src/index.js index 5d7c832..884acf6 100644 --- a/src/index.js +++ b/src/index.js @@ -5,7 +5,7 @@ */ import { Spider } from './Spider/index'; import * as plugins from '../plugins/index.js'; -import * as tools from './tools/index.js'; // 工具都是 $ 开头的函数 +import * as tools from '../tools/index.js'; // 工具都是 $ 开头的函数 import { Plugin } from './Pipeline/PluginSystem'; import { Task, TaskGroup } from './TaskSystem/index'; export default Object.assign(Spider, tools, { diff --git a/src/tools/Mock/Mock.js b/tools/Mock/Mock.js similarity index 100% rename from src/tools/Mock/Mock.js rename to tools/Mock/Mock.js diff --git a/src/tools/Mock/Server/excel.js b/tools/Mock/Server/excel.js similarity index 100% rename from src/tools/Mock/Server/excel.js rename to tools/Mock/Server/excel.js diff --git a/src/tools/Mock/Server/index.js b/tools/Mock/Server/index.js similarity index 100% rename from src/tools/Mock/Server/index.js rename to tools/Mock/Server/index.js diff --git a/src/tools/UI/index.js b/tools/UI/index.js similarity index 100% rename from src/tools/UI/index.js rename to tools/UI/index.js diff --git a/src/tools/UI/ui.html b/tools/UI/ui.html similarity index 100% rename from src/tools/UI/ui.html rename to tools/UI/ui.html diff --git a/src/tools/analysis/Observer/hook.js b/tools/analysis/Observer/hook.js similarity index 100% rename from src/tools/analysis/Observer/hook.js rename to tools/analysis/Observer/hook.js diff --git a/src/tools/analysis/Observer/hook/asyncApply.js b/tools/analysis/Observer/hook/asyncApply.js similarity index 100% rename from src/tools/analysis/Observer/hook/asyncApply.js rename to tools/analysis/Observer/hook/asyncApply.js diff --git a/src/tools/analysis/Observer/hook/createProperty.js b/tools/analysis/Observer/hook/createProperty.js similarity index 100% rename from src/tools/analysis/Observer/hook/createProperty.js rename to tools/analysis/Observer/hook/createProperty.js diff --git a/src/tools/analysis/Observer/hook/syncApply.js b/tools/analysis/Observer/hook/syncApply.js similarity index 100% rename from src/tools/analysis/Observer/hook/syncApply.js rename to tools/analysis/Observer/hook/syncApply.js diff --git a/src/tools/analysis/Observer/watch.js b/tools/analysis/Observer/watch.js similarity index 100% rename from src/tools/analysis/Observer/watch.js rename to tools/analysis/Observer/watch.js diff --git a/src/tools/analysis/Search/GlobalVars.js b/tools/analysis/Search/GlobalVars.js similarity index 100% rename from src/tools/analysis/Search/GlobalVars.js rename to tools/analysis/Search/GlobalVars.js diff --git a/src/tools/analysis/Search/Search.js b/tools/analysis/Search/Search.js similarity index 100% rename from src/tools/analysis/Search/Search.js rename to tools/analysis/Search/Search.js diff --git a/src/tools/analysis/Search/searchObj.js b/tools/analysis/Search/searchObj.js similarity index 100% rename from src/tools/analysis/Search/searchObj.js rename to tools/analysis/Search/searchObj.js diff --git a/src/tools/analysis/Search/window-default.json b/tools/analysis/Search/window-default.json similarity index 100% rename from src/tools/analysis/Search/window-default.json rename to tools/analysis/Search/window-default.json diff --git a/src/tools/analysis/antiDebugger.js b/tools/analysis/antiDebugger.js similarity index 100% rename from src/tools/analysis/antiDebugger.js rename to tools/analysis/antiDebugger.js diff --git a/src/tools/analysis/copy.js b/tools/analysis/copy.js similarity index 100% rename from src/tools/analysis/copy.js rename to tools/analysis/copy.js diff --git a/src/tools/analysis/index.js b/tools/analysis/index.js similarity index 100% rename from src/tools/analysis/index.js rename to tools/analysis/index.js diff --git a/src/tools/index.js b/tools/index.js similarity index 84% rename from src/tools/index.js rename to tools/index.js index 2d3c0b6..d831f8a 100644 --- a/src/tools/index.js +++ b/tools/index.js @@ -6,3 +6,4 @@ export * from './analysis/index.js'; export * from './loader/loader.js'; export * from './Mock/Mock.js'; +export * from '../FakeServer/parseURL.js'; diff --git a/src/tools/loader/jsDelivr.js b/tools/loader/jsDelivr.js similarity index 100% rename from src/tools/loader/jsDelivr.js rename to tools/loader/jsDelivr.js diff --git a/src/tools/loader/loader.js b/tools/loader/loader.js similarity index 100% rename from src/tools/loader/loader.js rename to tools/loader/loader.js diff --git a/src/tools/loader/loaderFunction.js b/tools/loader/loaderFunction.js similarity index 100% rename from src/tools/loader/loaderFunction.js rename to tools/loader/loaderFunction.js diff --git a/src/tools/loader/scriptStore.js b/tools/loader/scriptStore.js similarity index 100% rename from src/tools/loader/scriptStore.js rename to tools/loader/scriptStore.js