1 | import { parse, parseToData, getData } from 'MATCH/parse';
|
2 | import {
|
3 | isFun,
|
4 | isObj,
|
5 | isArray
|
6 | } from 'LIB/util';
|
7 | import { pushStack, removeStack, cleanStack, updateStack } from 'MATCH/stack';
|
8 | import { filter, filterEmpty } from 'MATCH/filter';
|
9 | import autoComplete from 'MATCH/auto-complete';
|
10 | import config , { extendConfig , extendTmpConfig , restoreConfig, changeFilterDefaultObject , filterDefaultObject } from 'MATCH/config';
|
11 | import 'LIB/polyfill';
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | export const matchObject = function (
|
18 | data: any,
|
19 | obj: object
|
20 | ) {
|
21 | let exp;
|
22 | let result = {};
|
23 |
|
24 | for (let i in obj) {
|
25 | exp = parse(obj[i], i);
|
26 | result[i] = parseToData(exp, data, result);
|
27 | filter(i, result);
|
28 | changeFilterDefaultObject(false);
|
29 | }
|
30 |
|
31 | return filterEmpty(result);
|
32 | };
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | export const matchArray = function (
|
38 | data: any,
|
39 | arr: Array
|
40 | ) {
|
41 | let exp;
|
42 | let result = [];
|
43 |
|
44 | try {
|
45 | if (arr.length === 1) {
|
46 |
|
47 | for (let i = 0; i < data.length; i++) {
|
48 | result[i] = matchObject(data[i], arr[0]);
|
49 | }
|
50 | }
|
51 |
|
52 | if (arr.length === 2) {
|
53 |
|
54 | data = getData(data, arr[0]);
|
55 |
|
56 | for (let i = 0; i < data.length; i++) {
|
57 | result[i] = matchObject(data[i], arr[1]);
|
58 | }
|
59 | }
|
60 | } catch (e) {
|
61 | if (config.filterDefaultArray) return;
|
62 | }
|
63 |
|
64 | return result;
|
65 | };
|
66 |
|
67 | const match = {
|
68 | parse: (
|
69 | combineData: object | Array,
|
70 | keyData: object | Array
|
71 | ) => {
|
72 | let matchData = {};
|
73 | let result;
|
74 |
|
75 | if (isObj(keyData)) {
|
76 | result = matchObject(combineData, keyData);
|
77 | }
|
78 |
|
79 | if (isArray(keyData)) {
|
80 | result = matchArray(combineData, keyData);
|
81 | }
|
82 |
|
83 | autoComplete(result, combineData);
|
84 |
|
85 | restoreConfig();
|
86 |
|
87 | return result;
|
88 | },
|
89 | parseConfig (
|
90 | combineData: object | Array,
|
91 | keyData: object | Array,
|
92 | configTmp: object
|
93 | ) {
|
94 |
|
95 | const configCache = Object.assign({}, config);
|
96 | let data;
|
97 |
|
98 | extendConfig(configTmp);
|
99 | data = this.parse(combineData, keyData);
|
100 | extendConfig(configCache);
|
101 |
|
102 | return data;
|
103 | },
|
104 | tmpConfig (
|
105 | configTmp: object
|
106 | ) {
|
107 | extendTmpConfig(configTmp);
|
108 |
|
109 | return this;
|
110 | },
|
111 | register: (
|
112 | obj: object | Array,
|
113 | name: string
|
114 | ) => {
|
115 | pushStack({
|
116 | value: obj,
|
117 | name: name
|
118 | });
|
119 | },
|
120 | update: (
|
121 | obj: object | Array,
|
122 | name: string
|
123 | ) => {
|
124 | updateStack(obj, name);
|
125 | return this;
|
126 | },
|
127 |
|
128 | remove: (
|
129 | name: string
|
130 | ) => {
|
131 | removeStack(name);
|
132 | return this;
|
133 | },
|
134 | removeAll: (
|
135 | ) => {
|
136 | cleanStack();
|
137 |
|
138 | return this;
|
139 | },
|
140 | config: (
|
141 | obj: object
|
142 | ) => {
|
143 | extendConfig(obj);
|
144 |
|
145 | return this;
|
146 | }
|
147 | };
|
148 |
|
149 | export default match;
|