@next-shared/form 0.7.8 → 0.7.10
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/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces.js +6 -0
- package/dist/cjs/interfaces.js.map +1 -0
- package/dist/cjs/pickFormItemProps.js +18 -0
- package/dist/cjs/pickFormItemProps.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces.js +2 -0
- package/dist/esm/interfaces.js.map +1 -0
- package/dist/esm/pickFormItemProps.js +11 -0
- package/dist/esm/pickFormItemProps.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/interfaces.d.ts +40 -0
- package/dist/types/pickFormItemProps.d.ts +2 -0
- package/package.json +7 -6
package/dist/cjs/index.js
CHANGED
|
@@ -36,4 +36,26 @@ Object.keys(_FormStore).forEach(function (key) {
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
+
var _interfaces = require("./interfaces.js");
|
|
40
|
+
Object.keys(_interfaces).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _interfaces[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _interfaces[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
var _pickFormItemProps = require("./pickFormItemProps.js");
|
|
51
|
+
Object.keys(_pickFormItemProps).forEach(function (key) {
|
|
52
|
+
if (key === "default" || key === "__esModule") return;
|
|
53
|
+
if (key in exports && exports[key] === _pickFormItemProps[key]) return;
|
|
54
|
+
Object.defineProperty(exports, key, {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _pickFormItemProps[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
39
61
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_Form","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_FormItemElement","_FormStore"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./Form.js\";\nexport * from \"./FormItemElement.js\";\nexport * from \"./FormStore.js\";\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,gBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,gBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,gBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,UAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,UAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,UAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAN,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_Form","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_FormItemElement","_FormStore","_interfaces","_pickFormItemProps"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./Form.js\";\nexport * from \"./FormItemElement.js\";\nexport * from \"./FormStore.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./pickFormItemProps.js\";\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,gBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,gBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,gBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,UAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,UAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,UAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,WAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,WAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,WAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,WAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,kBAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,kBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,kBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,kBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","names":[],"sources":["../../src/interfaces.ts"],"sourcesContent":["import { UseSingleBrickConf } from \"@next-core/types\";\nimport type { AbstractForm, ColProps } from \"./Form\";\nimport type { MessageBody } from \"./FormStore\";\n\ntype ComponentSize = \"large\" | \"medium\" | \"small\" | \"xs\";\n\ntype Layout = \"horizontal\" | \"vertical\" | \"inline\";\n\ntype FormItemElement = HTMLElement & {\n size?: ComponentSize;\n validateState?: MessageBody | string;\n [key: string]: any;\n};\n\nexport interface FormItemProps {\n formElement?: AbstractForm | null;\n curElement?: FormItemElement;\n name?: string;\n label?: string;\n current?: HTMLElement;\n required?: boolean;\n pattern?: string;\n type?: string;\n min?: number;\n max?: number;\n labelCol?: ColProps;\n wrapperCol?: ColProps;\n message?: Record<string, string>;\n layout?: Layout;\n size?: ComponentSize;\n trigger?: string;\n valuePropsName?: string;\n notRender?: boolean;\n helpBrick?: {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n placement?: \"right\" | \"bottom\";\n };\n labelBrick?: { useBrick: UseSingleBrickConf | UseSingleBrickConf[] };\n needValidate?: boolean;\n validator?: (value: any) => MessageBody | string;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pickFormItemProps = pickFormItemProps;
|
|
7
|
+
var _lodash = require("lodash");
|
|
8
|
+
// istanbul ignore file
|
|
9
|
+
|
|
10
|
+
const FORM_ITEM_PROP_NAMES = ["formElement", "curElement", "name", "label", "current", "required", "pattern", "type", "min", "max", "labelCol", "wrapperCol", "message", "layout", "size", "trigger", "valuePropsName", "notRender", "helpBrick", "labelBrick", "needValidate", "validator"];
|
|
11
|
+
function pickFormItemProps(props) {
|
|
12
|
+
return (0, _lodash.pick)(props, FORM_ITEM_PROP_NAMES);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* ====== Type checks ====== */
|
|
16
|
+
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
//# sourceMappingURL=pickFormItemProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickFormItemProps.js","names":["_lodash","require","FORM_ITEM_PROP_NAMES","pickFormItemProps","props","pick"],"sources":["../../src/pickFormItemProps.ts"],"sourcesContent":["// istanbul ignore file\nimport { pick } from \"lodash\";\nimport type { FormItemProps } from \"./interfaces\";\n\nconst FORM_ITEM_PROP_NAMES = [\n \"formElement\",\n \"curElement\",\n \"name\",\n \"label\",\n \"current\",\n \"required\",\n \"pattern\",\n \"type\",\n \"min\",\n \"max\",\n \"labelCol\",\n \"wrapperCol\",\n \"message\",\n \"layout\",\n \"size\",\n \"trigger\",\n \"valuePropsName\",\n \"notRender\",\n \"helpBrick\",\n \"labelBrick\",\n \"needValidate\",\n \"validator\",\n] as const;\n\nexport function pickFormItemProps<T extends FormItemProps>(\n props: T\n): FormItemProps {\n return pick(props, FORM_ITEM_PROP_NAMES);\n}\n\n/* ====== Type checks ====== */\ntype Equal<X, Y> =\n (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2\n ? true\n : false;\ntype Expect<T extends true> = T;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype cases = [\n Expect<Equal<keyof FormItemProps, (typeof FORM_ITEM_PROP_NAMES)[number]>>,\n];\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AADA;;AAIA,MAAMC,oBAAoB,GAAG,CAC3B,aAAa,EACb,YAAY,EACZ,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,CACH;AAEH,SAASC,iBAAiBA,CAC/BC,KAAQ,EACO;EACf,OAAO,IAAAC,YAAI,EAACD,KAAK,EAAEF,oBAAoB,CAAC;AAC1C;;AAEA;;AAOA","ignoreList":[]}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./Form.js\";\nexport * from \"./FormItemElement.js\";\nexport * from \"./FormStore.js\";\n"],"mappings":"AAAA,cAAc,WAAW;AACzB,cAAc,sBAAsB;AACpC,cAAc,gBAAgB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./Form.js\";\nexport * from \"./FormItemElement.js\";\nexport * from \"./FormStore.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./pickFormItemProps.js\";\n"],"mappings":"AAAA,cAAc,WAAW;AACzB,cAAc,sBAAsB;AACpC,cAAc,gBAAgB;AAC9B,cAAc,iBAAiB;AAC/B,cAAc,wBAAwB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","names":[],"sources":["../../src/interfaces.ts"],"sourcesContent":["import { UseSingleBrickConf } from \"@next-core/types\";\nimport type { AbstractForm, ColProps } from \"./Form\";\nimport type { MessageBody } from \"./FormStore\";\n\ntype ComponentSize = \"large\" | \"medium\" | \"small\" | \"xs\";\n\ntype Layout = \"horizontal\" | \"vertical\" | \"inline\";\n\ntype FormItemElement = HTMLElement & {\n size?: ComponentSize;\n validateState?: MessageBody | string;\n [key: string]: any;\n};\n\nexport interface FormItemProps {\n formElement?: AbstractForm | null;\n curElement?: FormItemElement;\n name?: string;\n label?: string;\n current?: HTMLElement;\n required?: boolean;\n pattern?: string;\n type?: string;\n min?: number;\n max?: number;\n labelCol?: ColProps;\n wrapperCol?: ColProps;\n message?: Record<string, string>;\n layout?: Layout;\n size?: ComponentSize;\n trigger?: string;\n valuePropsName?: string;\n notRender?: boolean;\n helpBrick?: {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n placement?: \"right\" | \"bottom\";\n };\n labelBrick?: { useBrick: UseSingleBrickConf | UseSingleBrickConf[] };\n needValidate?: boolean;\n validator?: (value: any) => MessageBody | string;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// istanbul ignore file
|
|
2
|
+
import { pick } from "lodash";
|
|
3
|
+
const FORM_ITEM_PROP_NAMES = ["formElement", "curElement", "name", "label", "current", "required", "pattern", "type", "min", "max", "labelCol", "wrapperCol", "message", "layout", "size", "trigger", "valuePropsName", "notRender", "helpBrick", "labelBrick", "needValidate", "validator"];
|
|
4
|
+
export function pickFormItemProps(props) {
|
|
5
|
+
return pick(props, FORM_ITEM_PROP_NAMES);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* ====== Type checks ====== */
|
|
9
|
+
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
11
|
+
//# sourceMappingURL=pickFormItemProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickFormItemProps.js","names":["pick","FORM_ITEM_PROP_NAMES","pickFormItemProps","props"],"sources":["../../src/pickFormItemProps.ts"],"sourcesContent":["// istanbul ignore file\nimport { pick } from \"lodash\";\nimport type { FormItemProps } from \"./interfaces\";\n\nconst FORM_ITEM_PROP_NAMES = [\n \"formElement\",\n \"curElement\",\n \"name\",\n \"label\",\n \"current\",\n \"required\",\n \"pattern\",\n \"type\",\n \"min\",\n \"max\",\n \"labelCol\",\n \"wrapperCol\",\n \"message\",\n \"layout\",\n \"size\",\n \"trigger\",\n \"valuePropsName\",\n \"notRender\",\n \"helpBrick\",\n \"labelBrick\",\n \"needValidate\",\n \"validator\",\n] as const;\n\nexport function pickFormItemProps<T extends FormItemProps>(\n props: T\n): FormItemProps {\n return pick(props, FORM_ITEM_PROP_NAMES);\n}\n\n/* ====== Type checks ====== */\ntype Equal<X, Y> =\n (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2\n ? true\n : false;\ntype Expect<T extends true> = T;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype cases = [\n Expect<Equal<keyof FormItemProps, (typeof FORM_ITEM_PROP_NAMES)[number]>>,\n];\n"],"mappings":"AAAA;AACA,SAASA,IAAI,QAAQ,QAAQ;AAG7B,MAAMC,oBAAoB,GAAG,CAC3B,aAAa,EACb,YAAY,EACZ,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,CACH;AAEV,OAAO,SAASC,iBAAiBA,CAC/BC,KAAQ,EACO;EACf,OAAOH,IAAI,CAACG,KAAK,EAAEF,oBAAoB,CAAC;AAC1C;;AAEA;;AAOA","ignoreList":[]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { UseSingleBrickConf } from "@next-core/types";
|
|
2
|
+
import type { AbstractForm, ColProps } from "./Form";
|
|
3
|
+
import type { MessageBody } from "./FormStore";
|
|
4
|
+
type ComponentSize = "large" | "medium" | "small" | "xs";
|
|
5
|
+
type Layout = "horizontal" | "vertical" | "inline";
|
|
6
|
+
type FormItemElement = HTMLElement & {
|
|
7
|
+
size?: ComponentSize;
|
|
8
|
+
validateState?: MessageBody | string;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
export interface FormItemProps {
|
|
12
|
+
formElement?: AbstractForm | null;
|
|
13
|
+
curElement?: FormItemElement;
|
|
14
|
+
name?: string;
|
|
15
|
+
label?: string;
|
|
16
|
+
current?: HTMLElement;
|
|
17
|
+
required?: boolean;
|
|
18
|
+
pattern?: string;
|
|
19
|
+
type?: string;
|
|
20
|
+
min?: number;
|
|
21
|
+
max?: number;
|
|
22
|
+
labelCol?: ColProps;
|
|
23
|
+
wrapperCol?: ColProps;
|
|
24
|
+
message?: Record<string, string>;
|
|
25
|
+
layout?: Layout;
|
|
26
|
+
size?: ComponentSize;
|
|
27
|
+
trigger?: string;
|
|
28
|
+
valuePropsName?: string;
|
|
29
|
+
notRender?: boolean;
|
|
30
|
+
helpBrick?: {
|
|
31
|
+
useBrick: UseSingleBrickConf | UseSingleBrickConf[];
|
|
32
|
+
placement?: "right" | "bottom";
|
|
33
|
+
};
|
|
34
|
+
labelBrick?: {
|
|
35
|
+
useBrick: UseSingleBrickConf | UseSingleBrickConf[];
|
|
36
|
+
};
|
|
37
|
+
needValidate?: boolean;
|
|
38
|
+
validator?: (value: any) => MessageBody | string;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-shared/form",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.10",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-advanced-bricks/tree/master/shared/form",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,14 +35,15 @@
|
|
|
35
35
|
"test:ci": "cross-env NODE_ENV='test' CI=true test-next"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@next-core/element": "^1.2.
|
|
39
|
-
"@next-core/react-element": "^1.0.
|
|
38
|
+
"@next-core/element": "^1.2.17",
|
|
39
|
+
"@next-core/react-element": "^1.0.36",
|
|
40
|
+
"@next-core/types": "^1.14.0",
|
|
40
41
|
"lodash": "^4.17.21"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
|
-
"@next-core/build-next-libs": "^1.0.
|
|
44
|
-
"@next-core/test-next": "^1.1.
|
|
44
|
+
"@next-core/build-next-libs": "^1.0.24",
|
|
45
|
+
"@next-core/test-next": "^1.1.9",
|
|
45
46
|
"concurrently": "^9.1.0"
|
|
46
47
|
},
|
|
47
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "0aa0f91552094a6b73c5879eac6d2b21c86973b8"
|
|
48
49
|
}
|