@certd/basic 1.25.8 → 1.26.0

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.
@@ -0,0 +1,39 @@
1
+ export * from './util.request.js';
2
+ export * from './util.log.js';
3
+ export * from './util.file.js';
4
+ export * from './util.sp.js';
5
+ export * from './util.promise.js';
6
+ export * from './util.hash.js';
7
+ export * from './util.merge.js';
8
+ export * from './util.cache.js';
9
+ import sleep from './util.sleep.js';
10
+ import { nanoid } from 'nanoid';
11
+ import * as _ from 'lodash-es';
12
+ import dayjs from 'dayjs';
13
+ export declare const utils: {
14
+ sleep: typeof sleep;
15
+ http: import("./util.request.js").HttpClient;
16
+ sp: {
17
+ spawn: (opts: import("./util.sp.js").SpawnOption) => Promise<string>;
18
+ exec: (opts: import("./util.sp.js").ExecOption) => Promise<string>;
19
+ };
20
+ hash: {
21
+ md5: (data: string) => string;
22
+ };
23
+ promises: {
24
+ TimeoutPromise: typeof import("./util.promise.js").TimeoutPromise;
25
+ safePromise: typeof import("./util.promise.js").safePromise;
26
+ promisify: typeof import("./util.promise.js").promisify;
27
+ };
28
+ file: {
29
+ getFileRootDir: (rootDir?: string | undefined) => string;
30
+ };
31
+ _: typeof _;
32
+ mergeUtils: {
33
+ merge: (target: any, ...sources: any) => any;
34
+ cloneDeep: (target: any) => any;
35
+ };
36
+ cache: import("lru-cache").LRUCache<string, any, unknown>;
37
+ nanoid: typeof nanoid;
38
+ dayjs: typeof dayjs;
39
+ };
@@ -0,0 +1,33 @@
1
+ export * from './util.request.js';
2
+ export * from './util.log.js';
3
+ export * from './util.file.js';
4
+ export * from './util.sp.js';
5
+ export * from './util.promise.js';
6
+ export * from './util.hash.js';
7
+ export * from './util.merge.js';
8
+ export * from './util.cache.js';
9
+ import sleep from './util.sleep.js';
10
+ import { http } from './util.request.js';
11
+ import { nanoid } from 'nanoid';
12
+ import { mergeUtils } from './util.merge.js';
13
+ import { sp } from './util.sp.js';
14
+ import { hashUtils } from './util.hash.js';
15
+ import { promises } from './util.promise.js';
16
+ import { fileUtils } from './util.file.js';
17
+ import * as _ from 'lodash-es';
18
+ import { cache } from './util.cache.js';
19
+ import dayjs from 'dayjs';
20
+ export const utils = {
21
+ sleep,
22
+ http,
23
+ sp,
24
+ hash: hashUtils,
25
+ promises,
26
+ file: fileUtils,
27
+ _,
28
+ mergeUtils,
29
+ cache,
30
+ nanoid,
31
+ dayjs,
32
+ };
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFDbkIsS0FBSztJQUNMLElBQUk7SUFDSixFQUFFO0lBQ0YsSUFBSSxFQUFFLFNBQVM7SUFDZixRQUFRO0lBQ1IsSUFBSSxFQUFFLFNBQVM7SUFDZixDQUFDO0lBQ0QsVUFBVTtJQUNWLEtBQUs7SUFDTCxNQUFNO0lBQ04sS0FBSztDQUNOLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ import { LRUCache } from "lru-cache";
2
+ export declare const cache: LRUCache<string, any, unknown>;
@@ -0,0 +1,7 @@
1
+ // LRUCache
2
+ import { LRUCache } from "lru-cache";
3
+ export const cache = new LRUCache({
4
+ max: 1000,
5
+ ttl: 1000 * 60 * 10,
6
+ });
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlsLmNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVc7QUFFWCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBYztJQUM3QyxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,5 @@
1
+ declare function getFileRootDir(rootDir?: string): string;
2
+ export declare const fileUtils: {
3
+ getFileRootDir: typeof getFileRootDir;
4
+ };
5
+ export {};
@@ -0,0 +1,15 @@
1
+ import fs from "fs";
2
+ function getFileRootDir(rootDir) {
3
+ if (rootDir == null) {
4
+ const userHome = process.env.HOME || process.env.USERPROFILE;
5
+ rootDir = userHome + "/.certd/storage/";
6
+ }
7
+ if (!fs.existsSync(rootDir)) {
8
+ fs.mkdirSync(rootDir, { recursive: true });
9
+ }
10
+ return rootDir;
11
+ }
12
+ export const fileUtils = {
13
+ getFileRootDir,
14
+ };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3V0aWwuZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsU0FBUyxjQUFjLENBQUMsT0FBZ0I7SUFDdEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDN0QsT0FBTyxHQUFHLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM1QixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCLGNBQWM7Q0FDZixDQUFDIn0=
@@ -0,0 +1,5 @@
1
+ declare function md5(data: string): string;
2
+ export declare const hashUtils: {
3
+ md5: typeof md5;
4
+ };
5
+ export {};
@@ -0,0 +1,8 @@
1
+ import crypto from "crypto";
2
+ function md5(data) {
3
+ return crypto.createHash("md5").update(data).digest("hex");
4
+ }
5
+ export const hashUtils = {
6
+ md5,
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5oYXNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3V0aWwuaGFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsU0FBUyxHQUFHLENBQUMsSUFBWTtJQUN2QixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCLEdBQUc7Q0FDSixDQUFDIn0=
@@ -0,0 +1,4 @@
1
+ import log4js, { Logger } from "log4js";
2
+ export declare const logger: log4js.Logger;
3
+ export declare function buildLogger(write: (text: string) => void): log4js.Logger;
4
+ export type ILogger = Logger;
@@ -0,0 +1,32 @@
1
+ import log4js from "log4js";
2
+ const OutputAppender = {
3
+ configure: (config, layouts, findAppender, levels) => {
4
+ let layout = layouts.basicLayout;
5
+ if (config.layout) {
6
+ layout = layouts.layout(config.layout.type, config.layout);
7
+ }
8
+ function customAppender(layout, timezoneOffset) {
9
+ return (loggingEvent) => {
10
+ if (loggingEvent.context.outputHandler?.write) {
11
+ const text = `${layout(loggingEvent, timezoneOffset)}\n`;
12
+ loggingEvent.context.outputHandler.write(text);
13
+ }
14
+ };
15
+ }
16
+ return customAppender(layout, config.timezoneOffset);
17
+ },
18
+ };
19
+ // @ts-ignore
20
+ log4js.configure({
21
+ appenders: { std: { type: "stdout" }, output: { type: OutputAppender } },
22
+ categories: { default: { appenders: ["std"], level: "info" }, pipeline: { appenders: ["std", "output"], level: "info" } },
23
+ });
24
+ export const logger = log4js.getLogger("default");
25
+ export function buildLogger(write) {
26
+ const logger = log4js.getLogger("pipeline");
27
+ logger.addContext("outputHandler", {
28
+ write,
29
+ });
30
+ return logger;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5sb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXRpbC5sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFnQyxNQUFNLFFBQVEsQ0FBQztBQUV0RCxNQUFNLGNBQWMsR0FBRztJQUNyQixTQUFTLEVBQUUsQ0FBQyxNQUFXLEVBQUUsT0FBWSxFQUFFLFlBQWlCLEVBQUUsTUFBVyxFQUFFLEVBQUU7UUFDdkUsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELFNBQVMsY0FBYyxDQUFDLE1BQVcsRUFBRSxjQUFtQjtZQUN0RCxPQUFPLENBQUMsWUFBMEIsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO29CQUM5QyxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDekQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGLENBQUM7QUFFRixhQUFhO0FBQ2IsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNmLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDeEUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7Q0FDMUgsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFbEQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUE2QjtJQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFO1FBQ2pDLEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIn0=
@@ -0,0 +1,11 @@
1
+ declare function merge(target: any, ...sources: any): any;
2
+ declare function cloneDeep(target: any): any;
3
+ export declare class UnMergeable {
4
+ cloneable: boolean;
5
+ setCloneable(cloneable: any): void;
6
+ }
7
+ export declare const mergeUtils: {
8
+ merge: typeof merge;
9
+ cloneDeep: typeof cloneDeep;
10
+ };
11
+ export {};
@@ -0,0 +1,59 @@
1
+ import _ from "lodash-es";
2
+ function isUnMergeable(srcValue) {
3
+ return srcValue != null && srcValue instanceof UnMergeable;
4
+ }
5
+ function isUnCloneable(value) {
6
+ return isUnMergeable(value) && !value.cloneable;
7
+ }
8
+ function merge(target, ...sources) {
9
+ /**
10
+ * 如果目标为不可合并对象,比如array、unMergeable、ref,则直接覆盖不合并
11
+ * @param objValue 被合并对象
12
+ * @param srcValue 来源对象
13
+ */
14
+ function customizer(objValue, srcValue) {
15
+ if (srcValue == null) {
16
+ return;
17
+ }
18
+ // 如果被合并对象为数组,则直接被覆盖对象覆盖,只要覆盖对象不为空
19
+ if (_.isArray(objValue)) {
20
+ //原对象如果是数组
21
+ return srcValue; //来源对象
22
+ }
23
+ if (isUnMergeable(srcValue)) {
24
+ return srcValue;
25
+ }
26
+ }
27
+ let found = null;
28
+ for (const item of sources) {
29
+ if (isUnMergeable(item)) {
30
+ found = item;
31
+ }
32
+ }
33
+ if (found) {
34
+ return found;
35
+ }
36
+ return _.mergeWith(target, ...sources, customizer);
37
+ }
38
+ function cloneDeep(target) {
39
+ if (isUnCloneable(target)) {
40
+ return target;
41
+ }
42
+ function customizer(value) {
43
+ if (isUnCloneable(value)) {
44
+ return value;
45
+ }
46
+ }
47
+ return _.cloneDeepWith(target, customizer);
48
+ }
49
+ export class UnMergeable {
50
+ cloneable = false;
51
+ setCloneable(cloneable) {
52
+ this.cloneable = cloneable;
53
+ }
54
+ }
55
+ export const mergeUtils = {
56
+ merge,
57
+ cloneDeep,
58
+ };
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5tZXJnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlsLm1lcmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQUMxQixTQUFTLGFBQWEsQ0FBQyxRQUFhO0lBQ2xDLE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLFlBQVksV0FBVyxDQUFDO0FBQzdELENBQUM7QUFDRCxTQUFTLGFBQWEsQ0FBQyxLQUFVO0lBQy9CLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNsRCxDQUFDO0FBQ0QsU0FBUyxLQUFLLENBQUMsTUFBVyxFQUFFLEdBQUcsT0FBWTtJQUN6Qzs7OztPQUlHO0lBQ0gsU0FBUyxVQUFVLENBQUMsUUFBYSxFQUFFLFFBQWE7UUFDOUMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEIsVUFBVTtZQUNWLE9BQU8sUUFBUSxDQUFDLENBQUMsTUFBTTtRQUN6QixDQUFDO1FBRUQsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksS0FBSyxHQUFRLElBQUksQ0FBQztJQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE1BQVc7SUFDNUIsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsU0FBUyxVQUFVLENBQUMsS0FBVTtRQUM1QixJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRCxNQUFNLE9BQU8sV0FBVztJQUN0QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLFlBQVksQ0FBQyxTQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixLQUFLO0lBQ0wsU0FBUztDQUNWLENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ export declare function TimeoutPromise(callback: () => Promise<void>, ms?: number): Promise<unknown>;
2
+ export declare function safePromise<T>(callback: (resolve: (ret: T) => void, reject: (ret: any) => void) => void): Promise<T>;
3
+ export declare function promisify(func: any): (...args: any) => Promise<unknown>;
4
+ export declare const promises: {
5
+ TimeoutPromise: typeof TimeoutPromise;
6
+ safePromise: typeof safePromise;
7
+ promisify: typeof promisify;
8
+ };
@@ -0,0 +1,50 @@
1
+ import { logger } from "./util.log.js";
2
+ export function TimeoutPromise(callback, ms = 30 * 1000) {
3
+ let timeout;
4
+ return Promise.race([
5
+ callback(),
6
+ new Promise((resolve, reject) => {
7
+ timeout = setTimeout(() => {
8
+ reject(new Error(`Task timeout in ${ms} ms`));
9
+ }, ms);
10
+ }),
11
+ ]).finally(() => {
12
+ clearTimeout(timeout);
13
+ });
14
+ }
15
+ export function safePromise(callback) {
16
+ return new Promise((resolve, reject) => {
17
+ try {
18
+ callback(resolve, reject);
19
+ }
20
+ catch (e) {
21
+ logger.error(e);
22
+ reject(e);
23
+ }
24
+ });
25
+ }
26
+ export function promisify(func) {
27
+ return function (...args) {
28
+ return new Promise((resolve, reject) => {
29
+ try {
30
+ func(...args, (err, data) => {
31
+ if (err) {
32
+ reject(err);
33
+ }
34
+ else {
35
+ resolve(data);
36
+ }
37
+ });
38
+ }
39
+ catch (e) {
40
+ reject(e);
41
+ }
42
+ });
43
+ };
44
+ }
45
+ export const promises = {
46
+ TimeoutPromise,
47
+ safePromise,
48
+ promisify,
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5wcm9taXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3V0aWwucHJvbWlzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBNkIsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDMUUsSUFBSSxPQUFZLENBQUM7SUFDakIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2xCLFFBQVEsRUFBRTtRQUNWLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzlCLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN4QixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUM7S0FDSCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNkLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFJLFFBQXlFO0lBQ3RHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDO1lBQ0gsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBUztJQUNqQyxPQUFPLFVBQVUsR0FBRyxJQUFTO1FBQzNCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxJQUFTLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDUixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2QsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsY0FBYztJQUNkLFdBQVc7SUFDWCxTQUFTO0NBQ1YsQ0FBQyJ9
@@ -0,0 +1,44 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { AxiosRequestConfig } from 'axios';
4
+ import { Logger } from 'log4js';
5
+ import { HttpsProxyAgent } from 'https-proxy-agent';
6
+ import nodeHttp from 'http';
7
+ import * as https from 'node:https';
8
+ export declare class HttpError extends Error {
9
+ status?: number;
10
+ statusText?: string;
11
+ code?: string;
12
+ request?: {
13
+ baseURL: string;
14
+ url: string;
15
+ method: string;
16
+ params?: any;
17
+ data?: any;
18
+ };
19
+ response?: {
20
+ data: any;
21
+ };
22
+ cause?: any;
23
+ constructor(error: any);
24
+ }
25
+ export declare const HttpCommonError: typeof HttpError;
26
+ /**
27
+ * @description 创建请求实例
28
+ */
29
+ export declare function createAxiosService({ logger }: {
30
+ logger: Logger;
31
+ }): import("axios").AxiosInstance;
32
+ export declare const http: HttpClient;
33
+ export type HttpClientResponse<R> = any;
34
+ export type HttpRequestConfig<D> = {
35
+ skipSslVerify?: boolean;
36
+ skipCheckRes?: boolean;
37
+ } & AxiosRequestConfig<D>;
38
+ export type HttpClient = {
39
+ request<D = any, R = any>(config: HttpRequestConfig<D>): Promise<HttpClientResponse<R>>;
40
+ };
41
+ export declare function createAgent(opts?: nodeHttp.AgentOptions): {
42
+ httpAgent: nodeHttp.Agent;
43
+ httpsAgent: HttpsProxyAgent<string> | https.Agent;
44
+ };
@@ -0,0 +1,152 @@
1
+ import axios from 'axios';
2
+ import { logger } from './util.log.js';
3
+ import { HttpProxyAgent } from 'http-proxy-agent';
4
+ import { HttpsProxyAgent } from 'https-proxy-agent';
5
+ import nodeHttp from 'http';
6
+ import * as https from 'node:https';
7
+ export class HttpError extends Error {
8
+ status;
9
+ statusText;
10
+ code;
11
+ request;
12
+ response;
13
+ cause;
14
+ constructor(error) {
15
+ if (!error) {
16
+ return;
17
+ }
18
+ super(error.message);
19
+ if (error?.message?.indexOf('ssl3_get_record:wrong version number') >= 0) {
20
+ this.message = 'http协议错误,服务端要求http协议,请检查是否使用了https请求';
21
+ }
22
+ this.name = error.name;
23
+ this.code = error.code;
24
+ this.cause = error.cause;
25
+ this.status = error.response?.status;
26
+ this.statusText = error.response?.statusText;
27
+ this.request = {
28
+ baseURL: error.config?.baseURL,
29
+ url: error.config?.url,
30
+ method: error.config?.method,
31
+ params: error.config?.params,
32
+ data: error.config?.data,
33
+ };
34
+ this.response = {
35
+ data: error.response?.data,
36
+ };
37
+ delete error.response;
38
+ delete error.config;
39
+ delete error.request;
40
+ // logger.error(error);
41
+ }
42
+ }
43
+ export const HttpCommonError = HttpError;
44
+ /**
45
+ * @description 创建请求实例
46
+ */
47
+ export function createAxiosService({ logger }) {
48
+ // 创建一个 axios 实例
49
+ const service = axios.create();
50
+ const defaultAgents = createAgent();
51
+ // 请求拦截
52
+ service.interceptors.request.use((config) => {
53
+ logger.info(`http request:${config.url},method:${config.method},params:${JSON.stringify(config.params)}`);
54
+ if (config.timeout == null) {
55
+ config.timeout = 15000;
56
+ }
57
+ let agents = defaultAgents;
58
+ if (config.skipSslVerify) {
59
+ logger.info('跳过SSL验证');
60
+ agents = createAgent({ rejectUnauthorized: false });
61
+ }
62
+ delete config.skipSslVerify;
63
+ config.httpsAgent = agents.httpsAgent;
64
+ config.httpAgent = agents.httpAgent;
65
+ config.proxy = false; //必须 否则还会走一层代理,
66
+ return config;
67
+ }, (error) => {
68
+ // 发送失败
69
+ logger.error('接口请求失败:', error);
70
+ return Promise.reject(error);
71
+ });
72
+ // 响应拦截
73
+ service.interceptors.response.use((response) => {
74
+ logger.info('http response:', JSON.stringify(response?.data));
75
+ return response.data;
76
+ }, (error) => {
77
+ const status = error.response?.status;
78
+ switch (status) {
79
+ case 400:
80
+ error.message = '请求错误';
81
+ break;
82
+ case 401:
83
+ error.message = '未授权,请登录';
84
+ break;
85
+ case 403:
86
+ error.message = '拒绝访问';
87
+ break;
88
+ case 404:
89
+ error.message = `请求地址出错: ${error.response.config.url}`;
90
+ break;
91
+ case 408:
92
+ error.message = '请求超时';
93
+ break;
94
+ case 500:
95
+ error.message = '服务器内部错误';
96
+ break;
97
+ case 501:
98
+ error.message = '服务未实现';
99
+ break;
100
+ case 502:
101
+ error.message = '网关错误';
102
+ break;
103
+ case 503:
104
+ error.message = '服务不可用';
105
+ break;
106
+ case 504:
107
+ error.message = '网关超时';
108
+ break;
109
+ case 505:
110
+ error.message = 'HTTP版本不受支持';
111
+ break;
112
+ default:
113
+ break;
114
+ }
115
+ logger.error(`请求出错:status:${error.response?.status},statusText:${error.response?.statusText},url:${error.config?.url},method:${error.config?.method}。`);
116
+ logger.error('返回数据:', JSON.stringify(error.response?.data));
117
+ if (error.response?.data) {
118
+ error.message = error.response.data.message || error.response.data.msg || error.response.data.error || error.response.data;
119
+ }
120
+ if (error instanceof AggregateError) {
121
+ logger.error('AggregateError', error);
122
+ }
123
+ const err = new HttpError(error);
124
+ return Promise.reject(err);
125
+ });
126
+ return service;
127
+ }
128
+ export const http = createAxiosService({ logger });
129
+ export function createAgent(opts = {}) {
130
+ let httpAgent, httpsAgent;
131
+ const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;
132
+ if (httpProxy) {
133
+ logger.info('use httpProxy:', httpProxy);
134
+ httpAgent = new HttpProxyAgent(httpProxy, opts);
135
+ }
136
+ else {
137
+ httpAgent = new nodeHttp.Agent(opts);
138
+ }
139
+ const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;
140
+ if (httpsProxy) {
141
+ logger.info('use httpsProxy:', httpsProxy);
142
+ httpsAgent = new HttpsProxyAgent(httpsProxy, opts);
143
+ }
144
+ else {
145
+ httpsAgent = new https.Agent(opts);
146
+ }
147
+ return {
148
+ httpAgent,
149
+ httpsAgent,
150
+ };
151
+ }
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3V0aWwucmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQTZCLE1BQU0sT0FBTyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLFFBQVEsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDcEMsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0lBQ2xDLE1BQU0sQ0FBVTtJQUNoQixVQUFVLENBQVU7SUFDcEIsSUFBSSxDQUFVO0lBQ2QsT0FBTyxDQUE4RTtJQUNyRixRQUFRLENBQWlCO0lBQ3pCLEtBQUssQ0FBTztJQUNaLFlBQVksS0FBVTtRQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckIsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsc0NBQXNDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFD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
@@ -0,0 +1 @@
1
+ export default function (timeout: number): Promise<unknown>;
@@ -0,0 +1,8 @@
1
+ export default function (timeout) {
2
+ return new Promise((resolve) => {
3
+ setTimeout(() => {
4
+ resolve({});
5
+ }, timeout);
6
+ });
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zbGVlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlsLnNsZWVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxPQUFPLFdBQVcsT0FBZTtJQUN0QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -0,0 +1,22 @@
1
+ import { ILogger } from "./util.log.js";
2
+ export type ExecOption = {
3
+ cmd: string | string[];
4
+ env: any;
5
+ logger?: ILogger;
6
+ options?: any;
7
+ };
8
+ declare function exec(opts: ExecOption): Promise<string>;
9
+ export type SpawnOption = {
10
+ cmd: string | string[];
11
+ onStdout?: (data: string) => void;
12
+ onStderr?: (data: string) => void;
13
+ env?: any;
14
+ logger?: ILogger;
15
+ options?: any;
16
+ };
17
+ declare function spawn(opts: SpawnOption): Promise<string>;
18
+ export declare const sp: {
19
+ spawn: typeof spawn;
20
+ exec: typeof exec;
21
+ };
22
+ export {};
@@ -0,0 +1,94 @@
1
+ //转换为import
2
+ import childProcess from "child_process";
3
+ import { safePromise } from "./util.promise.js";
4
+ import { logger } from "./util.log.js";
5
+ async function exec(opts) {
6
+ let cmd = "";
7
+ const log = opts.logger || logger;
8
+ if (opts.cmd instanceof Array) {
9
+ for (const item of opts.cmd) {
10
+ if (cmd) {
11
+ cmd += " && " + item;
12
+ }
13
+ else {
14
+ cmd = item;
15
+ }
16
+ }
17
+ }
18
+ log.info(`执行命令: ${cmd}`);
19
+ return safePromise((resolve, reject) => {
20
+ childProcess.exec(cmd, {
21
+ env: {
22
+ ...process.env,
23
+ ...opts.env,
24
+ },
25
+ ...opts.options,
26
+ }, (error, stdout, stderr) => {
27
+ if (error) {
28
+ log.error(`exec error: ${error}`);
29
+ reject(error);
30
+ }
31
+ else {
32
+ const res = stdout.toString("utf-8");
33
+ log.info(`stdout: ${res}`);
34
+ resolve(res);
35
+ }
36
+ });
37
+ });
38
+ }
39
+ async function spawn(opts) {
40
+ let cmd = "";
41
+ const log = opts.logger || logger;
42
+ if (opts.cmd instanceof Array) {
43
+ for (const item of opts.cmd) {
44
+ if (cmd) {
45
+ cmd += " && " + item;
46
+ }
47
+ else {
48
+ cmd = item;
49
+ }
50
+ }
51
+ }
52
+ else {
53
+ cmd = opts.cmd;
54
+ }
55
+ log.info(`执行命令: ${cmd}`);
56
+ let stdout = "";
57
+ let stderr = "";
58
+ return safePromise((resolve, reject) => {
59
+ const ls = childProcess.spawn(cmd, {
60
+ shell: true,
61
+ env: {
62
+ ...process.env,
63
+ ...opts.env,
64
+ },
65
+ ...opts.options,
66
+ });
67
+ ls.stdout.on("data", (data) => {
68
+ log.info(`stdout: ${data}`);
69
+ stdout += data;
70
+ });
71
+ ls.stderr.on("data", (data) => {
72
+ log.error(`stderr: ${data}`);
73
+ stderr += data;
74
+ });
75
+ ls.on("error", (error) => {
76
+ log.error(`child process error: ${error}`);
77
+ reject(error);
78
+ });
79
+ ls.on("close", (code) => {
80
+ if (code !== 0) {
81
+ log.error(`child process exited with code ${code}`);
82
+ reject(new Error(stderr));
83
+ }
84
+ else {
85
+ resolve(stdout);
86
+ }
87
+ });
88
+ });
89
+ }
90
+ export const sp = {
91
+ spawn,
92
+ exec,
93
+ };
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlsLnNwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVc7QUFDWCxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBVyxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTaEQsS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFnQjtJQUNsQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztJQUNsQyxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixHQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxHQUFHLElBQUksQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQ2YsR0FBRyxFQUNIO1lBQ0UsR0FBRyxFQUFFO2dCQUNILEdBQUcsT0FBTyxDQUFDLEdBQUc7Z0JBQ2QsR0FBRyxJQUFJLENBQUMsR0FBRzthQUNaO1lBQ0QsR0FBRyxJQUFJLENBQUMsT0FBTztTQUNoQixFQUNELENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN4QixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFVRCxLQUFLLFVBQVUsS0FBSyxDQUFDLElBQWlCO0lBQ3BDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDO0lBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLEdBQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLE9BQU8sV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pDLEtBQUssRUFBRSxJQUFJO1lBQ1gsR0FBRyxFQUFFO2dCQUNILEdBQUcsT0FBTyxDQUFDLEdBQUc7Z0JBQ2QsR0FBRyxJQUFJLENBQUMsR0FBRzthQUNaO1lBQ0QsR0FBRyxJQUFJLENBQUMsT0FBTztTQUNoQixDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1QixNQUFNLElBQUksSUFBSSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0IsTUFBTSxJQUFJLElBQUksQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1lBQzlCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHO0lBQ2hCLEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyJ9