tfose5-xlsx 3.2.2 → 3.2.4
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/README.md +1 -1
- package/dist/cell-parser-base.d.ts +9 -0
- package/dist/cell-parser-base.js +20 -0
- package/dist/cell-parser-parse-option.d.ts +16 -0
- package/dist/cell-parser-parse-option.js +2 -0
- package/dist/cell-to-array-parser.d.ts +8 -0
- package/dist/cell-to-array-parser.js +22 -0
- package/dist/cell-to-bool-parser.d.ts +5 -0
- package/dist/cell-to-bool-parser.js +13 -0
- package/dist/cell-to-enum-parser.d.ts +5 -0
- package/dist/cell-to-enum-parser.js +16 -0
- package/dist/cell-to-json-parser.d.ts +5 -0
- package/dist/cell-to-json-parser.js +9 -0
- package/dist/cell-to-number-parser.d.ts +5 -0
- package/dist/cell-to-number-parser.js +9 -0
- package/dist/cell-to-rewards-parser.d.ts +11 -0
- package/dist/cell-to-rewards-parser.js +38 -0
- package/dist/cell-to-string-parser.d.ts +5 -0
- package/dist/cell-to-string-parser.js +9 -0
- package/dist/cell-to-unix-parser.d.ts +5 -0
- package/dist/cell-to-unix-parser.js +18 -0
- package/dist/cell-to-value-conditions-parser.d.ts +11 -0
- package/dist/cell-to-value-conditions-parser.js +38 -0
- package/dist/cell-to-value-parser.d.ts +10 -0
- package/dist/cell-to-value-parser.js +25 -0
- package/dist/enum-item.d.ts +6 -0
- package/dist/enum-item.js +2 -0
- package/dist/enum-sheet-parser-base.d.ts +6 -0
- package/dist/enum-sheet-parser-base.js +6 -0
- package/dist/enum-sheet-parser-parse-option.d.ts +7 -0
- package/dist/enum-sheet-parser-parse-option.js +2 -0
- package/dist/enum-sheet-parser.d.ts +12 -0
- package/dist/enum-sheet-parser.js +142 -0
- package/dist/file-parser-base.d.ts +5 -0
- package/dist/file-parser-base.js +6 -0
- package/dist/file-parser-parse-result.d.ts +7 -0
- package/dist/file-parser-parse-result.js +2 -0
- package/dist/file-parser.d.ts +10 -0
- package/dist/file-parser.js +22 -0
- package/dist/i-parser.d.ts +3 -0
- package/dist/i-parser.js +2 -0
- package/dist/mock.d.ts +12 -0
- package/dist/mock.js +59 -0
- package/dist/parse-to-enum-json.js +10 -6
- package/dist/parser-factory.d.ts +7 -0
- package/dist/parser-factory.js +15 -0
- package/dist/to-rewards-converter.d.ts +2 -3
- package/dist/to-rewards-converter.js +4 -7
- package/dist/to-value-conditions-converter.d.ts +2 -3
- package/dist/to-value-conditions-converter.js +3 -6
- package/dist/to-value-converter.d.ts +3 -4
- package/dist/to-value-converter.js +3 -3
- package/dist/work-book-parser-base.d.ts +6 -0
- package/dist/work-book-parser-base.js +6 -0
- package/dist/work-book-parser-parse-result.d.ts +7 -0
- package/dist/work-book-parser-parse-result.js +2 -0
- package/dist/work-book-parser.d.ts +11 -0
- package/dist/work-book-parser.js +21 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
# 
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
2
|
+
import { EnumItem } from './enum-item';
|
|
3
|
+
import { IXlsxParser } from './i-parser';
|
|
4
|
+
export declare abstract class XlsxCellParserBase<T> implements IXlsxParser<XlsxCellParserParseOption, T> {
|
|
5
|
+
abstract parse(opt: XlsxCellParserParseOption): T;
|
|
6
|
+
protected getEnumFieldIndexDoc(enumName: string, opt: XlsxCellParserParseOption, field?: keyof EnumItem): {
|
|
7
|
+
[fieldValue: string]: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellParserBase = void 0;
|
|
4
|
+
class XlsxCellParserBase {
|
|
5
|
+
getEnumFieldIndexDoc(enumName, opt, field = 'text') {
|
|
6
|
+
var _a, _b, _c;
|
|
7
|
+
var _d;
|
|
8
|
+
(_a = opt.allEnumIndexDoc) !== null && _a !== void 0 ? _a : (opt.allEnumIndexDoc = {});
|
|
9
|
+
const allIndexDoc = (_b = (_d = opt.allEnumIndexDoc)[enumName]) !== null && _b !== void 0 ? _b : (_d[enumName] = {});
|
|
10
|
+
if (!allIndexDoc[field]) {
|
|
11
|
+
allIndexDoc[field] = {};
|
|
12
|
+
const allItem = (_c = opt.allEnumItem[enumName]) !== null && _c !== void 0 ? _c : new Map();
|
|
13
|
+
allItem.forEach(r => {
|
|
14
|
+
allIndexDoc[field][r[field]] = r.value;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return allIndexDoc[field];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.XlsxCellParserBase = XlsxCellParserBase;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EnumItem } from './enum-item';
|
|
2
|
+
export type XlsxCellParserParseOption = {
|
|
3
|
+
ext: string;
|
|
4
|
+
field: string;
|
|
5
|
+
value: any;
|
|
6
|
+
allEnumItem: {
|
|
7
|
+
[enumName: string]: Map<number, EnumItem>;
|
|
8
|
+
};
|
|
9
|
+
allEnumIndexDoc?: {
|
|
10
|
+
[enumName: string]: {
|
|
11
|
+
[field: string]: {
|
|
12
|
+
[fieldValue: string]: number;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
2
|
+
import { XlsxEnumSheetParser } from './enum-sheet-parser';
|
|
3
|
+
import { IXlsxParser } from './i-parser';
|
|
4
|
+
export declare class XlsxCellToArrayParser implements IXlsxParser<XlsxCellParserParseOption, unknown[]> {
|
|
5
|
+
private m_EnumSheetParser;
|
|
6
|
+
constructor(m_EnumSheetParser: XlsxEnumSheetParser);
|
|
7
|
+
parse(opt: XlsxCellParserParseOption): unknown[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToArrayParser = void 0;
|
|
4
|
+
class XlsxCellToArrayParser {
|
|
5
|
+
constructor(m_EnumSheetParser) {
|
|
6
|
+
this.m_EnumSheetParser = m_EnumSheetParser;
|
|
7
|
+
}
|
|
8
|
+
parse(opt) {
|
|
9
|
+
var _a;
|
|
10
|
+
if (typeof opt.value != 'string')
|
|
11
|
+
return [];
|
|
12
|
+
const [type, ...others] = opt.ext.split('.');
|
|
13
|
+
const lines = opt.value.split(((_a = others[0]) === null || _a === void 0 ? void 0 : _a.startsWith('\\')) ? new RegExp(others.shift(), 'g') : /\r\n|\n|\r/g);
|
|
14
|
+
const res = [];
|
|
15
|
+
const otherExt = others.join('.');
|
|
16
|
+
for (const r of lines) {
|
|
17
|
+
res.push(this.m_EnumSheetParser.getCellParser(type).parse(Object.assign(Object.assign({}, opt), { ext: otherExt, value: r })));
|
|
18
|
+
}
|
|
19
|
+
return res;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.XlsxCellToArrayParser = XlsxCellToArrayParser;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
2
|
+
import { IXlsxParser } from './i-parser';
|
|
3
|
+
export declare class XlsxCellToBoolParser implements IXlsxParser<XlsxCellParserParseOption, boolean> {
|
|
4
|
+
parse(opt: XlsxCellParserParseOption): boolean;
|
|
5
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToBoolParser = void 0;
|
|
4
|
+
class XlsxCellToBoolParser {
|
|
5
|
+
parse(opt) {
|
|
6
|
+
if (typeof opt.value == 'boolean')
|
|
7
|
+
return opt.value;
|
|
8
|
+
if (typeof opt.value == 'string')
|
|
9
|
+
return opt.value.toLocaleLowerCase() == 'true';
|
|
10
|
+
return !!opt.value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.XlsxCellToBoolParser = XlsxCellToBoolParser;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToEnumParser = void 0;
|
|
4
|
+
const tfose5_error_1 = require("tfose5-error");
|
|
5
|
+
const cell_parser_base_1 = require("./cell-parser-base");
|
|
6
|
+
class XlsxCellToEnumParser extends cell_parser_base_1.XlsxCellParserBase {
|
|
7
|
+
parse(opt) {
|
|
8
|
+
const [_, enumName, field] = opt.ext.split('.');
|
|
9
|
+
const indexDoc = this.getEnumFieldIndexDoc(enumName, opt, field);
|
|
10
|
+
const no = indexDoc[opt.value];
|
|
11
|
+
if (!no)
|
|
12
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${XlsxCellToEnumParser.name}.parse: 无效${enumName}[${opt.value}]`);
|
|
13
|
+
return no;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.XlsxCellToEnumParser = XlsxCellToEnumParser;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToJsonParser = void 0;
|
|
4
|
+
class XlsxCellToJsonParser {
|
|
5
|
+
parse(opt) {
|
|
6
|
+
return typeof opt.value == 'string' ? JSON.parse(opt.value) : opt.value;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.XlsxCellToJsonParser = XlsxCellToJsonParser;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
2
|
+
import { IXlsxParser } from './i-parser';
|
|
3
|
+
export declare class XlsxCellToNumberParser implements IXlsxParser<XlsxCellParserParseOption, number> {
|
|
4
|
+
parse(opt: XlsxCellParserParseOption): number;
|
|
5
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToNumberParser = void 0;
|
|
4
|
+
class XlsxCellToNumberParser {
|
|
5
|
+
parse(opt) {
|
|
6
|
+
return Number(opt.value);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.XlsxCellToNumberParser = XlsxCellToNumberParser;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { XlsxCellParserBase } from './cell-parser-base';
|
|
2
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
3
|
+
import { Value } from './value';
|
|
4
|
+
type Reward = Value & {
|
|
5
|
+
weight?: number;
|
|
6
|
+
};
|
|
7
|
+
export declare class XlsxCellToRewardsParser extends XlsxCellParserBase<Reward[][]> {
|
|
8
|
+
static reg: RegExp;
|
|
9
|
+
parse(opt: XlsxCellParserParseOption): Reward[][];
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToRewardsParser = void 0;
|
|
4
|
+
const tfose5_error_1 = require("tfose5-error");
|
|
5
|
+
const cell_parser_base_1 = require("./cell-parser-base");
|
|
6
|
+
class XlsxCellToRewardsParser extends cell_parser_base_1.XlsxCellParserBase {
|
|
7
|
+
parse(opt) {
|
|
8
|
+
if (typeof opt.value != 'string')
|
|
9
|
+
return [];
|
|
10
|
+
const lines = opt.value.split(/\r\n|\n|\r/g);
|
|
11
|
+
const res = [[]];
|
|
12
|
+
const valueTypeTextOfValue = this.getEnumFieldIndexDoc('ValueTypeData', opt);
|
|
13
|
+
for (const r of lines) {
|
|
14
|
+
const match = r.match(XlsxCellToRewardsParser.reg);
|
|
15
|
+
if (!match) {
|
|
16
|
+
if (res[res.length - 1].length) {
|
|
17
|
+
res.push([]);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效奖励格式[${r}]`);
|
|
21
|
+
}
|
|
22
|
+
const valueType = valueTypeTextOfValue[match[1]];
|
|
23
|
+
if (!valueType)
|
|
24
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效奖励名[${r}]`);
|
|
25
|
+
const count = Number(match[2]);
|
|
26
|
+
if (isNaN(count))
|
|
27
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效奖励数量[${r}]`);
|
|
28
|
+
res[res.length - 1].push({
|
|
29
|
+
count,
|
|
30
|
+
valueType,
|
|
31
|
+
weight: match[3] && Number(match[3].slice(1)) || 0,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return res;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.XlsxCellToRewardsParser = XlsxCellToRewardsParser;
|
|
38
|
+
XlsxCellToRewardsParser.reg = /^([^*]+)\*(-?[\deE+\.]+)(\*?(\d+))?$/;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToStringParser = void 0;
|
|
4
|
+
class XlsxCellToStringParser {
|
|
5
|
+
parse(opt) {
|
|
6
|
+
return (typeof opt.value == 'string' ? opt.value : opt.value.toString()).trim();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.XlsxCellToStringParser = XlsxCellToStringParser;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
2
|
+
import { IXlsxParser } from './i-parser';
|
|
3
|
+
export declare class XlsxCellToUnixParser implements IXlsxParser<XlsxCellParserParseOption, number> {
|
|
4
|
+
parse(opt: XlsxCellParserParseOption): number;
|
|
5
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.XlsxCellToUnixParser = void 0;
|
|
7
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
8
|
+
class XlsxCellToUnixParser {
|
|
9
|
+
parse(opt) {
|
|
10
|
+
try {
|
|
11
|
+
return (0, dayjs_1.default)(opt.value.toString()).unix();
|
|
12
|
+
}
|
|
13
|
+
catch (_a) {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.XlsxCellToUnixParser = XlsxCellToUnixParser;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { XlsxCellParserBase } from './cell-parser-base';
|
|
2
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
3
|
+
import { Value } from './value';
|
|
4
|
+
type ValueCondition = Value & {
|
|
5
|
+
op: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class XlsxCellToValueConditionsParser extends XlsxCellParserBase<ValueCondition[][]> {
|
|
8
|
+
static reg: RegExp;
|
|
9
|
+
parse(opt: XlsxCellParserParseOption): ValueCondition[][];
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToValueConditionsParser = void 0;
|
|
4
|
+
const tfose5_error_1 = require("tfose5-error");
|
|
5
|
+
const cell_parser_base_1 = require("./cell-parser-base");
|
|
6
|
+
class XlsxCellToValueConditionsParser extends cell_parser_base_1.XlsxCellParserBase {
|
|
7
|
+
parse(opt) {
|
|
8
|
+
if (typeof opt.value != 'string')
|
|
9
|
+
return [];
|
|
10
|
+
const lines = opt.value.split(/\r\n|\n|\r/g);
|
|
11
|
+
let res = [[]];
|
|
12
|
+
const valueTypeTextOfValue = this.getEnumFieldIndexDoc('ValueTypeData', opt);
|
|
13
|
+
for (const r of lines) {
|
|
14
|
+
const match = r.match(XlsxCellToValueConditionsParser.reg);
|
|
15
|
+
if (!match) {
|
|
16
|
+
if (res[res.length - 1].length) {
|
|
17
|
+
res.push([]);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效数值条件格式[${r}]`);
|
|
21
|
+
}
|
|
22
|
+
const valueType = valueTypeTextOfValue[match[1]];
|
|
23
|
+
if (!valueType)
|
|
24
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效数值条件名[${r}]`);
|
|
25
|
+
const count = Number(match[4]);
|
|
26
|
+
if (isNaN(count))
|
|
27
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效数值条件数量[${r}]`);
|
|
28
|
+
res[res.length - 1].push({
|
|
29
|
+
count,
|
|
30
|
+
op: match[2] && match[2] + match[3] || match[3],
|
|
31
|
+
valueType,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return res;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.XlsxCellToValueConditionsParser = XlsxCellToValueConditionsParser;
|
|
38
|
+
XlsxCellToValueConditionsParser.reg = /^([\u4e00-\u9fff]+)(%|&|now-day|now-diff|own)*([=><]+)(-?\d+([\.eE+\d]+)?)$/;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { XlsxCellParserBase } from './cell-parser-base';
|
|
2
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
3
|
+
import { Value } from './value';
|
|
4
|
+
export declare class XlsxCellToValueParser extends XlsxCellParserBase<Value> {
|
|
5
|
+
static reg: RegExp;
|
|
6
|
+
parse(opt: XlsxCellParserParseOption): {
|
|
7
|
+
count: number;
|
|
8
|
+
valueType: number;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxCellToValueParser = void 0;
|
|
4
|
+
const tfose5_error_1 = require("tfose5-error");
|
|
5
|
+
const cell_parser_base_1 = require("./cell-parser-base");
|
|
6
|
+
class XlsxCellToValueParser extends cell_parser_base_1.XlsxCellParserBase {
|
|
7
|
+
parse(opt) {
|
|
8
|
+
const match = opt.value.toString().match(XlsxCellToValueParser.reg);
|
|
9
|
+
if (!match)
|
|
10
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效数值格式[${opt.value}]`);
|
|
11
|
+
const valueTypeTextOfValue = this.getEnumFieldIndexDoc('ValueTypeData', opt);
|
|
12
|
+
const valueType = valueTypeTextOfValue[match[1]];
|
|
13
|
+
if (!valueType)
|
|
14
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效数值名[${opt.value}]`);
|
|
15
|
+
const count = Number(match[2]);
|
|
16
|
+
if (isNaN(count))
|
|
17
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.parse: 无效数值数量[${opt.value}]`);
|
|
18
|
+
return {
|
|
19
|
+
count,
|
|
20
|
+
valueType,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.XlsxCellToValueParser = XlsxCellToValueParser;
|
|
25
|
+
XlsxCellToValueParser.reg = /^(.+)\*(-?[\.eE+\d]+)$/;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EnumItem } from './enum-item';
|
|
2
|
+
import { XlsxEnumSheetParserParseOption } from './enum-sheet-parser-parse-option';
|
|
3
|
+
import { IXlsxParser } from './i-parser';
|
|
4
|
+
export declare abstract class XlsxEnumSheetParserBase implements IXlsxParser<XlsxEnumSheetParserParseOption, EnumItem[]> {
|
|
5
|
+
abstract parse(input: XlsxEnumSheetParserParseOption): EnumItem[];
|
|
6
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EnumItem } from './enum-item';
|
|
2
|
+
import { XlsxWorkBookParserParseResult } from './work-book-parser-parse-result';
|
|
3
|
+
export type XlsxEnumSheetParserParseOption = XlsxWorkBookParserParseResult & {
|
|
4
|
+
allEnumItem: {
|
|
5
|
+
[enumName: string]: Map<number, EnumItem>;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { XlsxCellParserParseOption } from './cell-parser-parse-option';
|
|
2
|
+
import { XlsxEnumSheetParserBase } from './enum-sheet-parser-base';
|
|
3
|
+
import { XlsxEnumSheetParserParseOption } from './enum-sheet-parser-parse-option';
|
|
4
|
+
import { IXlsxParser } from './i-parser';
|
|
5
|
+
export declare class XlsxEnumSheetParser extends XlsxEnumSheetParserBase {
|
|
6
|
+
private m_AllCellParser?;
|
|
7
|
+
protected get allCellParser(): {
|
|
8
|
+
[type: string]: IXlsxParser<XlsxCellParserParseOption, unknown>;
|
|
9
|
+
};
|
|
10
|
+
getCellParser(type: string): IXlsxParser<XlsxCellParserParseOption, unknown>;
|
|
11
|
+
parse(opt: XlsxEnumSheetParserParseOption): any;
|
|
12
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxEnumSheetParser = void 0;
|
|
4
|
+
const tfose5_error_1 = require("tfose5-error");
|
|
5
|
+
const cell_to_array_parser_1 = require("./cell-to-array-parser");
|
|
6
|
+
const cell_to_bool_parser_1 = require("./cell-to-bool-parser");
|
|
7
|
+
const cell_to_enum_parser_1 = require("./cell-to-enum-parser");
|
|
8
|
+
const cell_to_json_parser_1 = require("./cell-to-json-parser");
|
|
9
|
+
const cell_to_number_parser_1 = require("./cell-to-number-parser");
|
|
10
|
+
const cell_to_rewards_parser_1 = require("./cell-to-rewards-parser");
|
|
11
|
+
const cell_to_string_parser_1 = require("./cell-to-string-parser");
|
|
12
|
+
const cell_to_unix_parser_1 = require("./cell-to-unix-parser");
|
|
13
|
+
const cell_to_value_parser_1 = require("./cell-to-value-parser");
|
|
14
|
+
const cell_to_value_conditions_parser_1 = require("./cell-to-value-conditions-parser");
|
|
15
|
+
const enum_sheet_parser_base_1 = require("./enum-sheet-parser-base");
|
|
16
|
+
const numReg = /^\d+$/;
|
|
17
|
+
class XlsxEnumSheetParser extends enum_sheet_parser_base_1.XlsxEnumSheetParserBase {
|
|
18
|
+
get allCellParser() {
|
|
19
|
+
var _a;
|
|
20
|
+
(_a = this.m_AllCellParser) !== null && _a !== void 0 ? _a : (this.m_AllCellParser = {
|
|
21
|
+
array: new cell_to_array_parser_1.XlsxCellToArrayParser(this),
|
|
22
|
+
bool: new cell_to_bool_parser_1.XlsxCellToBoolParser(),
|
|
23
|
+
enum: new cell_to_enum_parser_1.XlsxCellToEnumParser(),
|
|
24
|
+
json: new cell_to_json_parser_1.XlsxCellToJsonParser(),
|
|
25
|
+
number: new cell_to_number_parser_1.XlsxCellToNumberParser(),
|
|
26
|
+
rewards: new cell_to_rewards_parser_1.XlsxCellToRewardsParser(),
|
|
27
|
+
string: new cell_to_string_parser_1.XlsxCellToStringParser(),
|
|
28
|
+
unix: new cell_to_unix_parser_1.XlsxCellToUnixParser(),
|
|
29
|
+
value: new cell_to_value_parser_1.XlsxCellToValueParser(),
|
|
30
|
+
valueConditions: new cell_to_value_conditions_parser_1.XlsxCellToValueConditionsParser(),
|
|
31
|
+
});
|
|
32
|
+
return this.m_AllCellParser;
|
|
33
|
+
}
|
|
34
|
+
getCellParser(type) {
|
|
35
|
+
const parser = this.allCellParser[type];
|
|
36
|
+
if (!parser)
|
|
37
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, `${this.constructor.name}.getCellParser: 无效解析器[${type}]`);
|
|
38
|
+
return parser;
|
|
39
|
+
}
|
|
40
|
+
parse(opt) {
|
|
41
|
+
var _a, _b, _c, _d;
|
|
42
|
+
const allTable = {};
|
|
43
|
+
for (const r of opt.sheets) {
|
|
44
|
+
const rows = [];
|
|
45
|
+
const tempRows = [];
|
|
46
|
+
for (let i = 1; i < r.rows.length; i++) {
|
|
47
|
+
let row = {};
|
|
48
|
+
let tempRow = {};
|
|
49
|
+
const sheetRow = r.rows[i];
|
|
50
|
+
let isFirstField = true;
|
|
51
|
+
for (const k in sheetRow) {
|
|
52
|
+
const [field, type, ext] = k.split(':');
|
|
53
|
+
if (!type)
|
|
54
|
+
continue;
|
|
55
|
+
let fieldValue;
|
|
56
|
+
if (type == '#') {
|
|
57
|
+
let [associateTable, associateField] = ext.split('.');
|
|
58
|
+
fieldValue = allTable[associateTable];
|
|
59
|
+
if (!fieldValue)
|
|
60
|
+
continue;
|
|
61
|
+
associateField !== null && associateField !== void 0 ? associateField : (associateField = associateTable);
|
|
62
|
+
let cellValue = sheetRow[k];
|
|
63
|
+
for (const ck in sheetRow) {
|
|
64
|
+
if (ck.split(':')[0] == associateField) {
|
|
65
|
+
cellValue = sheetRow[ck];
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (cellValue != undefined) {
|
|
70
|
+
fieldValue = fieldValue.filter(cr => {
|
|
71
|
+
return cr[associateField] == cellValue;
|
|
72
|
+
}).map(cr => {
|
|
73
|
+
cr = structuredClone(cr);
|
|
74
|
+
delete cr.value;
|
|
75
|
+
delete cr[associateField];
|
|
76
|
+
return cr;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const parser = this.allCellParser[type];
|
|
82
|
+
if (!parser)
|
|
83
|
+
continue;
|
|
84
|
+
try {
|
|
85
|
+
fieldValue = parser.parse({
|
|
86
|
+
allEnumItem: opt.allEnumItem,
|
|
87
|
+
ext,
|
|
88
|
+
field,
|
|
89
|
+
value: sheetRow[k],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (ex) {
|
|
93
|
+
throw new tfose5_error_1.CustomError(tfose5_error_1.ErrorCode.warning, JSON.stringify({
|
|
94
|
+
field: k,
|
|
95
|
+
row: i + 2,
|
|
96
|
+
sheet: r.name,
|
|
97
|
+
text: ex.data,
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (isFirstField) {
|
|
102
|
+
const rowIndex = rows.findIndex(cr => cr[field] == fieldValue);
|
|
103
|
+
if (rowIndex == -1) {
|
|
104
|
+
rows.push(row);
|
|
105
|
+
tempRows.push(tempRow);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
row = rows[rowIndex];
|
|
109
|
+
tempRow = tempRows[rowIndex];
|
|
110
|
+
}
|
|
111
|
+
isFirstField = false;
|
|
112
|
+
}
|
|
113
|
+
const fieldParts = field.split('.');
|
|
114
|
+
if (fieldParts.length > 1) {
|
|
115
|
+
let obj = row;
|
|
116
|
+
while (fieldParts.length) {
|
|
117
|
+
let name = fieldParts.shift();
|
|
118
|
+
if (name in tempRow && typeof tempRow[name] != 'object')
|
|
119
|
+
name = tempRow[name];
|
|
120
|
+
if (fieldParts.length) {
|
|
121
|
+
(_a = obj[name]) !== null && _a !== void 0 ? _a : (obj[name] = numReg.test(fieldParts[0]) ? [] : {});
|
|
122
|
+
obj = obj[name];
|
|
123
|
+
}
|
|
124
|
+
else if ((_b = name.startsWith) === null || _b === void 0 ? void 0 : _b.call(name, '[')) {
|
|
125
|
+
tempRow[name.substring(1, name.length - 1)] = fieldValue;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
obj[name] = fieldValue;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (!field.startsWith('_')) {
|
|
133
|
+
(_c = row[field]) !== null && _c !== void 0 ? _c : (row[field] = fieldValue);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
allTable[r.name] = rows;
|
|
138
|
+
}
|
|
139
|
+
return (_d = allTable[opt.enumName]) !== null && _d !== void 0 ? _d : [];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.XlsxEnumSheetParser = XlsxEnumSheetParser;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { XlsxFileParserParseResult } from './file-parser-parse-result';
|
|
2
|
+
import { IXlsxParser } from './i-parser';
|
|
3
|
+
export declare abstract class XlsxFileParserBase implements IXlsxParser<string, XlsxFileParserParseResult> {
|
|
4
|
+
abstract parse(path: string): XlsxFileParserParseResult;
|
|
5
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxFileParser = void 0;
|
|
4
|
+
const xlsx_1 = require("xlsx");
|
|
5
|
+
const file_parser_base_1 = require("./file-parser-base");
|
|
6
|
+
class XlsxFileParser extends file_parser_base_1.XlsxFileParserBase {
|
|
7
|
+
parse(path) {
|
|
8
|
+
const wb = (0, xlsx_1.readFile)(path);
|
|
9
|
+
return {
|
|
10
|
+
sheets: wb.SheetNames.filter(r => {
|
|
11
|
+
return !r.includes('_');
|
|
12
|
+
}).map(r => {
|
|
13
|
+
return {
|
|
14
|
+
name: r,
|
|
15
|
+
rows: xlsx_1.utils.sheet_to_json(wb.Sheets[r]),
|
|
16
|
+
};
|
|
17
|
+
}).reverse(),
|
|
18
|
+
enumName: wb.SheetNames[0],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.XlsxFileParser = XlsxFileParser;
|
package/dist/i-parser.js
ADDED
package/dist/mock.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const mockAny: any;
|
|
2
|
+
export declare class Mock<T> {
|
|
3
|
+
private m_Target;
|
|
4
|
+
private m_CurrentKey;
|
|
5
|
+
private m_Records;
|
|
6
|
+
private m_Actutal;
|
|
7
|
+
get actual(): T;
|
|
8
|
+
private m_Expected;
|
|
9
|
+
get expected(): T;
|
|
10
|
+
constructor(m_Target?: {});
|
|
11
|
+
expectReturn(action: (target: T) => any, returnValue: any): void;
|
|
12
|
+
}
|
package/dist/mock.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Mock = exports.mockAny = void 0;
|
|
4
|
+
const assert_1 = require("assert");
|
|
5
|
+
class Record {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.args = [];
|
|
8
|
+
this.returnValues = [];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.mockAny = new Object();
|
|
12
|
+
class Mock {
|
|
13
|
+
get actual() {
|
|
14
|
+
if (!this.m_Actutal) {
|
|
15
|
+
this.m_Actutal = new Proxy(this.m_Target, {
|
|
16
|
+
get: (target, key) => {
|
|
17
|
+
if (key in target)
|
|
18
|
+
return target[key];
|
|
19
|
+
if (key == 'then' || key == 'catch')
|
|
20
|
+
return this.m_Actutal;
|
|
21
|
+
return (...args) => {
|
|
22
|
+
const record = this.m_Records[key];
|
|
23
|
+
if (!(record && record.args.length))
|
|
24
|
+
throw new Error(`${key}未被调用`);
|
|
25
|
+
const recordArgs = record.args.shift();
|
|
26
|
+
(0, assert_1.deepStrictEqual)(args.map((r, i) => {
|
|
27
|
+
return recordArgs[i] == exports.mockAny ? exports.mockAny : r;
|
|
28
|
+
}), recordArgs);
|
|
29
|
+
return record.returnValues.shift();
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return this.m_Actutal;
|
|
35
|
+
}
|
|
36
|
+
get expected() {
|
|
37
|
+
return this.m_Expected;
|
|
38
|
+
}
|
|
39
|
+
constructor(m_Target = {}) {
|
|
40
|
+
this.m_Target = m_Target;
|
|
41
|
+
this.m_Records = {};
|
|
42
|
+
this.m_Actutal = null;
|
|
43
|
+
this.m_Expected = new Proxy({}, {
|
|
44
|
+
get: (_, key) => {
|
|
45
|
+
this.m_CurrentKey = key;
|
|
46
|
+
if (!this.m_Records[key])
|
|
47
|
+
this.m_Records[key] = new Record();
|
|
48
|
+
return (...args) => {
|
|
49
|
+
this.m_Records[key].args.push(args);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
expectReturn(action, returnValue) {
|
|
55
|
+
action(this.expected);
|
|
56
|
+
this.m_Records[this.m_CurrentKey].returnValues.push(returnValue);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.Mock = Mock;
|
|
@@ -20,21 +20,22 @@ const to_json_converter_1 = require("./to-json-converter");
|
|
|
20
20
|
const to_number_converter_1 = require("./to-number-converter");
|
|
21
21
|
const to_rewards_converter_1 = require("./to-rewards-converter");
|
|
22
22
|
const to_unix_converter_1 = require("./to-unix-converter");
|
|
23
|
-
const to_value_converter_1 = require("./to-value-converter");
|
|
24
23
|
const to_value_conditions_converter_1 = require("./to-value-conditions-converter");
|
|
24
|
+
const to_value_converter_1 = require("./to-value-converter");
|
|
25
25
|
const allEnumTextNo = {};
|
|
26
26
|
let converterFactory;
|
|
27
27
|
function parseXlsxToEnumJson(fsFactory_1, dstDirPath_1, srcDirPath_1) {
|
|
28
28
|
return __awaiter(this, arguments, void 0, function* (fsFactory, dstDirPath, srcDirPath, topEnums = ['ValueEnum']) {
|
|
29
29
|
var _a;
|
|
30
|
-
|
|
30
|
+
const toEnumNoConverter = new to_enum_no_converter_1.ToEnumNoConverter(allEnumTextNo);
|
|
31
|
+
converterFactory = new converter_factory_1.ConverterFactory(toEnumNoConverter, {
|
|
31
32
|
bool: new to_bool_converter_1.ToBoolConverter(),
|
|
32
|
-
conditions: new to_value_conditions_converter_1.ToValueConditionsConverter(
|
|
33
|
+
conditions: new to_value_conditions_converter_1.ToValueConditionsConverter(toEnumNoConverter, topEnums[topEnums.length - 1]),
|
|
33
34
|
json: new to_json_converter_1.ToJsonConverter(),
|
|
34
35
|
number: new to_number_converter_1.ToNumberConverter(),
|
|
35
|
-
rewards: new to_rewards_converter_1.ToRewardsConverter(
|
|
36
|
+
rewards: new to_rewards_converter_1.ToRewardsConverter(toEnumNoConverter, topEnums[topEnums.length - 1]),
|
|
36
37
|
unit: new to_unix_converter_1.ToUnixConverter(),
|
|
37
|
-
value: new to_value_converter_1.ToValueConverter(
|
|
38
|
+
value: new to_value_converter_1.ToValueConverter(toEnumNoConverter, topEnums[topEnums.length - 1]),
|
|
38
39
|
});
|
|
39
40
|
const filePaths = [];
|
|
40
41
|
yield fsFactory.build(tfose5_fs_1.FsScanBase).scan({
|
|
@@ -56,12 +57,15 @@ function parseXlsxToEnumJson(fsFactory_1, dstDirPath_1, srcDirPath_1) {
|
|
|
56
57
|
continue;
|
|
57
58
|
const sheets = (0, xlsx_1.readFile)(r).Sheets;
|
|
58
59
|
const enumName = (0, path_1.basename)(r).replace('.xlsx', '');
|
|
60
|
+
console.log(`xlsx: ${enumName}`);
|
|
59
61
|
const allOtherSheetRows = {};
|
|
60
62
|
for (const k in sheets) {
|
|
61
63
|
if (k == enumName)
|
|
62
64
|
continue;
|
|
65
|
+
console.log(` sheet: ${k}`);
|
|
63
66
|
allOtherSheetRows[k] = parseSheet(sheets[k]);
|
|
64
67
|
}
|
|
68
|
+
console.log(` sheet: ${enumName}`);
|
|
65
69
|
const enumItems = parseSheet(sheets[enumName], allOtherSheetRows);
|
|
66
70
|
if ((_a = enumItems[0]) === null || _a === void 0 ? void 0 : _a.text) {
|
|
67
71
|
allEnumTextNo[enumName] = enumItems.reduce((memo, r) => {
|
|
@@ -96,7 +100,7 @@ function parseSheet(sheet, allOtherSheetRows) {
|
|
|
96
100
|
});
|
|
97
101
|
}
|
|
98
102
|
else if (type == 'array') {
|
|
99
|
-
fieldValue = cr[1].split(
|
|
103
|
+
fieldValue = cr[1].toString().split(/\r\n|\n|\r/g).map(sr => {
|
|
100
104
|
return converterFactory.build(ext).convert(sr, ext);
|
|
101
105
|
});
|
|
102
106
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { XlsxEnumSheetParserBase } from './enum-sheet-parser-base';
|
|
2
|
+
import { XlsxWorkBookParserBase } from './work-book-parser-base';
|
|
3
|
+
export declare class XlsxParserFactory {
|
|
4
|
+
static ctor: string;
|
|
5
|
+
build(typer: typeof XlsxEnumSheetParserBase): XlsxEnumSheetParserBase;
|
|
6
|
+
build(typer: typeof XlsxWorkBookParserBase): XlsxWorkBookParserBase;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxParserFactory = void 0;
|
|
4
|
+
const enum_sheet_parser_1 = require("./enum-sheet-parser");
|
|
5
|
+
const enum_sheet_parser_base_1 = require("./enum-sheet-parser-base");
|
|
6
|
+
const work_book_parser_1 = require("./work-book-parser");
|
|
7
|
+
const work_book_parser_base_1 = require("./work-book-parser-base");
|
|
8
|
+
class XlsxParserFactory {
|
|
9
|
+
build(typer) {
|
|
10
|
+
return typer == enum_sheet_parser_base_1.XlsxEnumSheetParserBase && new enum_sheet_parser_1.XlsxEnumSheetParser()
|
|
11
|
+
|| typer == work_book_parser_base_1.XlsxWorkBookParserBase && new work_book_parser_1.XlsxWorkBookParser();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.XlsxParserFactory = XlsxParserFactory;
|
|
15
|
+
XlsxParserFactory.ctor = 'XlsxParserFactory';
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { AllEnumTextNo } from './all-enum-text-no';
|
|
2
1
|
import { IConverter } from './i-converter';
|
|
3
2
|
import { Value } from './value';
|
|
4
3
|
type Reward = Value & {
|
|
5
4
|
weight: number;
|
|
6
5
|
};
|
|
7
6
|
export declare class ToRewardsConverter implements IConverter {
|
|
8
|
-
private
|
|
7
|
+
private m_ToEnumNoConverter;
|
|
9
8
|
private m_EnumName;
|
|
10
|
-
constructor(
|
|
9
|
+
constructor(m_ToEnumNoConverter: IConverter, m_EnumName: string);
|
|
11
10
|
convert(s: string): Reward[][];
|
|
12
11
|
}
|
|
13
12
|
export {};
|
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ToRewardsConverter = void 0;
|
|
4
4
|
const reg = /^([^*]+)\*(-?[\deE+\.]+)(\*?(\d+))?$/;
|
|
5
5
|
class ToRewardsConverter {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
6
|
+
constructor(m_ToEnumNoConverter, m_EnumName) {
|
|
7
|
+
this.m_ToEnumNoConverter = m_ToEnumNoConverter;
|
|
8
8
|
this.m_EnumName = m_EnumName;
|
|
9
9
|
}
|
|
10
10
|
convert(s) {
|
|
11
|
-
return s.split(
|
|
11
|
+
return s.split(/\r\n|\n|\r/g).reduce((memo, r) => {
|
|
12
12
|
const match = r.match(reg);
|
|
13
13
|
if (!match) {
|
|
14
14
|
if (memo[memo.length - 1].length) {
|
|
@@ -17,15 +17,12 @@ class ToRewardsConverter {
|
|
|
17
17
|
}
|
|
18
18
|
throw new Error(`${this.constructor.name}: 无效格式[${r}]`);
|
|
19
19
|
}
|
|
20
|
-
const valueNo = this.m_AllEnumTextNo[this.m_EnumName][match[1]];
|
|
21
|
-
if (!valueNo)
|
|
22
|
-
throw new Error(`${this.constructor.name}: 无效数值名[${r}]`);
|
|
23
20
|
const count = Number(match[2]);
|
|
24
21
|
if (isNaN(count))
|
|
25
22
|
throw new Error(`${this.constructor.name}: 无效数量[${r}]`);
|
|
26
23
|
memo[memo.length - 1].push({
|
|
27
24
|
count,
|
|
28
|
-
no:
|
|
25
|
+
no: this.m_ToEnumNoConverter.convert(match[1], this.m_EnumName),
|
|
29
26
|
weight: match[3] && Number(match[3].slice(1)) || 0,
|
|
30
27
|
});
|
|
31
28
|
return memo;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { AllEnumTextNo } from './all-enum-text-no';
|
|
2
1
|
import { IConverter } from './i-converter';
|
|
3
2
|
import { Value } from './value';
|
|
4
3
|
type ValueCondition = Value & {
|
|
5
4
|
op: string;
|
|
6
5
|
};
|
|
7
6
|
export declare class ToValueConditionsConverter implements IConverter {
|
|
8
|
-
private
|
|
7
|
+
private m_ToEnumNoConverter;
|
|
9
8
|
private m_Enum;
|
|
10
|
-
constructor(
|
|
9
|
+
constructor(m_ToEnumNoConverter: IConverter, m_Enum: string);
|
|
11
10
|
convert(s: string): ValueCondition[][];
|
|
12
11
|
}
|
|
13
12
|
export {};
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ToValueConditionsConverter = void 0;
|
|
4
4
|
const reg = /^([\u4e00-\u9fff]+)(%|&|now-day|now-diff|own)*([=><]+)(-?\d+([\.eE+\d]+)?)$/;
|
|
5
5
|
class ToValueConditionsConverter {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
6
|
+
constructor(m_ToEnumNoConverter, m_Enum) {
|
|
7
|
+
this.m_ToEnumNoConverter = m_ToEnumNoConverter;
|
|
8
8
|
this.m_Enum = m_Enum;
|
|
9
9
|
}
|
|
10
10
|
convert(s) {
|
|
@@ -21,15 +21,12 @@ class ToValueConditionsConverter {
|
|
|
21
21
|
}
|
|
22
22
|
throw new Error(`${this.constructor.name}: 无效数值条件格式[${r}]`);
|
|
23
23
|
}
|
|
24
|
-
const valueNo = this.m_AllEnumTextNo[this.m_Enum][match[1]];
|
|
25
|
-
if (!valueNo)
|
|
26
|
-
throw new Error(`${this.constructor.name}: 无效数值条件名[${r}]`);
|
|
27
24
|
const count = Number(match[4]);
|
|
28
25
|
if (isNaN(count))
|
|
29
26
|
throw new Error(`${this.constructor.name}: 无效数值条件数量[${r}]`);
|
|
30
27
|
res[res.length - 1].push({
|
|
31
28
|
count,
|
|
32
|
-
no:
|
|
29
|
+
no: this.m_ToEnumNoConverter.convert(match[1], this.m_Enum),
|
|
33
30
|
op: match[2] && match[2] + match[3] || match[3],
|
|
34
31
|
});
|
|
35
32
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { AllEnumTextNo } from './all-enum-text-no';
|
|
2
1
|
import { IConverter } from './i-converter';
|
|
3
2
|
export declare class ToValueConverter implements IConverter {
|
|
4
|
-
private
|
|
3
|
+
private m_ToEnumNoConverter;
|
|
5
4
|
private m_Enum;
|
|
6
|
-
constructor(
|
|
5
|
+
constructor(m_ToEnumNoConverter: IConverter, m_Enum: string);
|
|
7
6
|
convert(s: string): {
|
|
8
7
|
count: number;
|
|
9
|
-
no:
|
|
8
|
+
no: unknown;
|
|
10
9
|
};
|
|
11
10
|
}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ToValueConverter = void 0;
|
|
4
4
|
class ToValueConverter {
|
|
5
|
-
constructor(
|
|
6
|
-
this.
|
|
5
|
+
constructor(m_ToEnumNoConverter, m_Enum) {
|
|
6
|
+
this.m_ToEnumNoConverter = m_ToEnumNoConverter;
|
|
7
7
|
this.m_Enum = m_Enum;
|
|
8
8
|
}
|
|
9
9
|
convert(s) {
|
|
10
10
|
const [text, count] = s.split('*');
|
|
11
11
|
return {
|
|
12
12
|
count: Number(count),
|
|
13
|
-
no: this.
|
|
13
|
+
no: this.m_ToEnumNoConverter.convert(text, this.m_Enum),
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { WorkBook } from 'xlsx';
|
|
2
|
+
import { XlsxWorkBookParserParseResult } from './work-book-parser-parse-result';
|
|
3
|
+
import { IXlsxParser } from './i-parser';
|
|
4
|
+
export declare abstract class XlsxWorkBookParserBase implements IXlsxParser<WorkBook, XlsxWorkBookParserParseResult> {
|
|
5
|
+
abstract parse(wb: WorkBook): XlsxWorkBookParserParseResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WorkBook } from 'xlsx';
|
|
2
|
+
import { XlsxWorkBookParserBase } from './work-book-parser-base';
|
|
3
|
+
export declare class XlsxWorkBookParser extends XlsxWorkBookParserBase {
|
|
4
|
+
parse(wb: WorkBook): {
|
|
5
|
+
enumName: string;
|
|
6
|
+
sheets: {
|
|
7
|
+
name: string;
|
|
8
|
+
rows: object[];
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XlsxWorkBookParser = void 0;
|
|
4
|
+
const xlsx_1 = require("xlsx");
|
|
5
|
+
const work_book_parser_base_1 = require("./work-book-parser-base");
|
|
6
|
+
class XlsxWorkBookParser extends work_book_parser_base_1.XlsxWorkBookParserBase {
|
|
7
|
+
parse(wb) {
|
|
8
|
+
return {
|
|
9
|
+
enumName: wb.SheetNames[0],
|
|
10
|
+
sheets: wb.SheetNames.filter(r => {
|
|
11
|
+
return !r.includes('_');
|
|
12
|
+
}).map(r => {
|
|
13
|
+
return {
|
|
14
|
+
name: r,
|
|
15
|
+
rows: xlsx_1.utils.sheet_to_json(wb.Sheets[r]),
|
|
16
|
+
};
|
|
17
|
+
}).reverse(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.XlsxWorkBookParser = XlsxWorkBookParser;
|
package/package.json
CHANGED