123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import { Global } from './config';
- import { warn, err } from './warn';
- const nodeURL = require('query-string');
- class ParseQuery {
- get queryName() {
- return nodeURL;
- }
-
- isDepthObject(obj) {
- const str = JSON.stringify(obj);
- return str.match(/}/g).length > 1;
- }
-
- extract(url) {
- return nodeURL.extract(url);
- }
-
- parse(strQuery) {
- return nodeURL.parse(strQuery);
- }
-
- stringify(ObjQuery, intact = true) {
- const strQuery = nodeURL.stringify(ObjQuery);
- if (intact) {
- return `?${strQuery}`;
- }
- return strQuery;
- }
-
- encode(query, intact = true) {
- let [strQuery, formatQuery] = ['', ''];
- if (query == null) {
- warn('加密参数没有传递,你知道?', true);
- return '';
- }
- if (query.constructor === String) {
- strQuery = JSON.stringify(this.parse(query));
- } else if (query.constructor === Object) {
- if (Object.keys(query).length === 0) {
- warn('当前参数不满足加密规范!');
- return '';
- }
- strQuery = JSON.stringify(query);
- }
- if (intact) {
- formatQuery = '?';
- }
- formatQuery += `query=${encodeURIComponent(strQuery)}`;
- return formatQuery;
- }
-
- decode(strQuery) {
- if (strQuery == null) {
- warn('解密参数没有传递,你知道?', true);
- return {};
- }
- let jsonQuery = strQuery;
- if (strQuery.constructor === Object) {
- jsonQuery = strQuery.query;
- if (jsonQuery == null) {
- warn('当前解密参数不满足编码规则');
- return {};
- }
- jsonQuery = `query=${jsonQuery}`;
- }
- let decode = {};
-
- const decodeStr = decodeURIComponent(jsonQuery);
- const { query } = this.parse(decodeStr);
- if (query == null) {
- warn('当前解密参数不满足编码规则');
- } else {
- try {
- decode = JSON.parse(query);
- } catch (error) {
- warn('当前解密参数不满足编码规则');
- }
- }
- return decode;
- }
- queryGet(query) {
- const { encodeURI } = Global.Router.CONFIG;
- let [decode, historyObj, strQuery] = [query, query, ''];
- switch (encodeURI) {
- case true: {
- decode = this.decode(query);
- strQuery = this.encode(decode);
- historyObj = {
- query: encodeURIComponent(JSON.stringify(decode)),
- };
- break;
- }
- case false: {
- strQuery = this.stringify(query);
- break;
- }
- default: {
- err('未知参数模式,请检查 \'encodeURI\'', true);
- }
- }
- return { strQuery, historyObj, decode };
- }
-
- transfer(query = {}) {
- const { encodeURI } = Global.Router.CONFIG;
- switch (encodeURI) {
- case true: {
-
- return this.encode(query, false);
- }
- case false: {
-
- return this.stringify(query);
- }
- default: {
- err('未知参数模式,请检查 \'encodeURI\' ', true);
- }
- }
- }
- }
- export default ParseQuery;
|