@lcap/nasl 2.21.0-beta.2 → 2.21.0-beta.3
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/out/automate/engine/operators.d.ts +2 -2
- package/out/automate/engine/operators.js +14 -5
- package/out/automate/engine/operators.js.map +1 -1
- package/out/common/BaseNode.d.ts +6 -0
- package/out/common/BaseNode.js +45 -8
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/Abort__.d.ts +1 -1
- package/out/concepts/Abort__.js +3 -3
- package/out/concepts/Abort__.js.map +1 -1
- package/out/concepts/App__.d.ts +0 -2
- package/out/concepts/App__.js +0 -42
- package/out/concepts/App__.js.map +1 -1
- package/out/concepts/BindAttribute__.js +18 -0
- package/out/concepts/BindAttribute__.js.map +1 -1
- package/out/concepts/BindEvent__.js +21 -22
- package/out/concepts/BindEvent__.js.map +1 -1
- package/out/concepts/CallFunction__.js.map +1 -1
- package/out/concepts/CallQueryComponent__.js +16 -16
- package/out/concepts/CallQueryComponent__.js.map +1 -1
- package/out/concepts/ConfigPropertyValue__.js.map +1 -1
- package/out/concepts/DataSource__.d.ts +0 -1
- package/out/concepts/DataSource__.js +0 -3
- package/out/concepts/DataSource__.js.map +1 -1
- package/out/concepts/EntityProperty__.d.ts +0 -23
- package/out/concepts/EntityProperty__.js +0 -121
- package/out/concepts/EntityProperty__.js.map +1 -1
- package/out/concepts/InterfaceParam__.d.ts +0 -3
- package/out/concepts/InterfaceParam__.js +0 -64
- package/out/concepts/InterfaceParam__.js.map +1 -1
- package/out/concepts/Interface__.d.ts +0 -3
- package/out/concepts/Interface__.js +4 -8
- package/out/concepts/Interface__.js.map +1 -1
- package/out/concepts/Logic__.d.ts +1 -1
- package/out/concepts/Logic__.js +22 -42
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/MatchCase__.js +1 -1
- package/out/concepts/MatchCase__.js.map +1 -1
- package/out/concepts/MemberExpression__.js +1 -1
- package/out/concepts/MemberExpression__.js.map +1 -1
- package/out/concepts/Module__.d.ts +0 -12
- package/out/concepts/Module__.js +0 -7
- package/out/concepts/Module__.js.map +1 -1
- package/out/concepts/NewMap__.js +5 -1
- package/out/concepts/NewMap__.js.map +1 -1
- package/out/concepts/NumericLiteral__.js +9 -3
- package/out/concepts/NumericLiteral__.js.map +1 -1
- package/out/concepts/OqlQueryComponent__.d.ts +0 -1
- package/out/concepts/OqlQueryComponent__.js +0 -46
- package/out/concepts/OqlQueryComponent__.js.map +1 -1
- package/out/concepts/Param__.d.ts +0 -3
- package/out/concepts/Param__.js +1 -67
- package/out/concepts/Param__.js.map +1 -1
- package/out/concepts/Rect__.js.map +1 -1
- package/out/concepts/Return__.d.ts +0 -3
- package/out/concepts/Return__.js +1 -67
- package/out/concepts/Return__.js.map +1 -1
- package/out/concepts/SqlQueryComponent__.d.ts +0 -1
- package/out/concepts/SqlQueryComponent__.js +0 -46
- package/out/concepts/SqlQueryComponent__.js.map +1 -1
- package/out/concepts/StructureProperty__.d.ts +0 -3
- package/out/concepts/StructureProperty__.js +0 -65
- package/out/concepts/StructureProperty__.js.map +1 -1
- package/out/concepts/TypeAnnotation__.d.ts +1 -3
- package/out/concepts/TypeAnnotation__.js +12 -31
- package/out/concepts/TypeAnnotation__.js.map +1 -1
- package/out/concepts/Variable__.d.ts +0 -3
- package/out/concepts/Variable__.js +1 -67
- package/out/concepts/Variable__.js.map +1 -1
- package/out/concepts/ViewComponent__.d.ts +7 -0
- package/out/concepts/ViewComponent__.js +7 -0
- package/out/concepts/ViewComponent__.js.map +1 -1
- package/out/concepts/ViewElement__.js +1 -1
- package/out/concepts/ViewElement__.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.collection.js +2 -2
- package/out/concepts/basics/stdlib/nasl.collection.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.core.js +3 -3
- package/out/concepts/basics/stdlib/nasl.core.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.interface.js +1 -1
- package/out/concepts/basics/stdlib/nasl.interface.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.process.js +6 -6
- package/out/concepts/basics/stdlib/nasl.process.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.ui.js +43 -43
- package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.util.js +19 -46
- package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.validation.js +13 -13
- package/out/concepts/basics/stdlib/nasl.validation.js.map +1 -1
- package/out/concepts/basics/types/coreTypeList.js +5 -1
- package/out/concepts/basics/types/coreTypeList.js.map +1 -1
- package/out/concepts/index__.d.ts +0 -1
- package/out/concepts/index__.js +0 -1
- package/out/concepts/index__.js.map +1 -1
- package/out/generator/genReleaseBody.js +0 -3
- package/out/generator/genReleaseBody.js.map +1 -1
- package/out/sentry/index.d.ts +28 -0
- package/out/sentry/index.js +104 -0
- package/out/sentry/index.js.map +1 -0
- package/out/server/entity2LogicNamespace.js +1 -1
- package/out/server/entity2LogicNamespace.js.map +1 -1
- package/out/server/extendBaseNode.js +65 -0
- package/out/server/extendBaseNode.js.map +1 -1
- package/out/server/formatTsUtils.js +5 -5
- package/out/server/formatTsUtils.js.map +1 -1
- package/out/server/getLogics.js +9 -7
- package/out/server/getLogics.js.map +1 -1
- package/out/server/naslServer.d.ts +2 -2
- package/out/server/naslServer.js +120 -51
- package/out/server/naslServer.js.map +1 -1
- package/out/server/translator.js +3 -2
- package/out/server/translator.js.map +1 -1
- package/out/service/creator/errHandles.js +5 -0
- package/out/service/creator/errHandles.js.map +1 -1
- package/out/service/storage/init.js +6 -8
- package/out/service/storage/init.js.map +1 -1
- package/out/templator/genQueryComponent.js +2 -2
- package/out/templator/genQueryComponent.js.map +1 -1
- package/out/templator/genSelectBlock.js +9 -1
- package/out/templator/genSelectBlock.js.map +1 -1
- package/out/templator/utils.d.ts +32 -0
- package/out/templator/utils.js +7 -7
- package/out/templator/utils.js.map +1 -1
- package/package.json +2 -2
- package/sandbox/stdlib/nasl.auth.ts +3 -1
- package/sandbox/stdlib/nasl.browser.ts +1 -1
- package/sandbox/stdlib/nasl.collection.ts +9 -9
- package/sandbox/stdlib/nasl.core.ts +100 -38
- package/sandbox/stdlib/nasl.interface.ts +1 -1
- package/sandbox/stdlib/nasl.langUtil.ts +4 -4
- package/sandbox/stdlib/nasl.oql.ts +156 -156
- package/sandbox/stdlib/nasl.process.ts +6 -6
- package/sandbox/stdlib/nasl.ui.ts +42 -42
- package/sandbox/stdlib/nasl.util.ts +45 -44
- package/sandbox/stdlib/nasl.validation.ts +8 -8
- package/src/automate/engine/operators.js +13 -5
- package/src/automate/upgrader/2.20.js +1 -0
- package/src/common/BaseNode.ts +32 -1
- package/src/concepts/Abort__.ts +4 -3
- package/src/concepts/App__.ts +2 -38
- package/src/concepts/BindAttribute__.ts +17 -1
- package/src/concepts/BindEvent__.ts +21 -21
- package/src/concepts/CallFunction__.ts +0 -1
- package/src/concepts/CallQueryComponent__.ts +16 -74
- package/src/concepts/ConfigPropertyValue__.ts +0 -4
- package/src/concepts/DataSource__.ts +0 -4
- package/src/concepts/EntityProperty__.ts +0 -129
- package/src/concepts/InterfaceParam__.ts +0 -55
- package/src/concepts/Interface__.ts +4 -4
- package/src/concepts/Logic__.ts +31 -47
- package/src/concepts/MatchCase__.ts +1 -1
- package/src/concepts/MemberExpression__.ts +1 -1
- package/src/concepts/Module__.ts +0 -6
- package/src/concepts/NewMap__.ts +5 -1
- package/src/concepts/NumericLiteral__.ts +9 -4
- package/src/concepts/OqlQueryComponent__.ts +0 -40
- package/src/concepts/Param__.ts +3 -59
- package/src/concepts/Rect__.ts +0 -8
- package/src/concepts/Return__.ts +1 -58
- package/src/concepts/SqlQueryComponent__.ts +0 -40
- package/src/concepts/StructureProperty__.ts +0 -57
- package/src/concepts/TypeAnnotation__.ts +12 -72
- package/src/concepts/Variable__.ts +1 -58
- package/src/concepts/ViewComponent__.ts +6 -0
- package/src/concepts/ViewElement__.ts +7 -7
- package/src/concepts/basics/stdlib/nasl.collection.ts +2 -2
- package/src/concepts/basics/stdlib/nasl.core.ts +3 -3
- package/src/concepts/basics/stdlib/nasl.interface.ts +1 -1
- package/src/concepts/basics/stdlib/nasl.process.ts +6 -6
- package/src/concepts/basics/stdlib/nasl.ui.ts +43 -43
- package/src/concepts/basics/stdlib/nasl.util.ts +19 -46
- package/src/concepts/basics/stdlib/nasl.validation.ts +13 -13
- package/src/concepts/basics/types/coreTypeList.ts +5 -1
- package/src/concepts/index__.ts +0 -1
- package/src/generator/genReleaseBody.ts +0 -2
- package/src/sentry/index.ts +134 -0
- package/src/server/entity2LogicNamespace.ts +1 -1
- package/src/server/extendBaseNode.ts +61 -1
- package/src/server/formatTsUtils.ts +5 -5
- package/src/server/getLogics.ts +8 -7
- package/src/server/naslServer.ts +120 -53
- package/src/server/translator.ts +3 -2
- package/src/service/creator/errHandles.js +6 -0
- package/src/service/storage/init.ts +6 -8
- package/src/templator/genQueryComponent.ts +5 -5
- package/src/templator/genSelectBlock.ts +9 -1
- package/src/templator/utils.ts +7 -7
- package/ts-worker/lib/Messager.js +0 -3
- package/ts-worker/src/index.js +0 -1
- package/src/concepts/DatabaseTypeAnnotation__.ts +0 -88
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
declare namespace nasl.util {
|
|
2
2
|
export function Convert(value: null): <T extends never>() => T;
|
|
3
|
-
export function Convert(value: nasl.core.
|
|
4
|
-
export function Convert(value: nasl.core.
|
|
3
|
+
export function Convert(value: nasl.core.Integer): <T extends nasl.core.Decimal | nasl.core.Boolean | nasl.core.Double | nasl.core.Long | nasl.core.String>() => T;
|
|
4
|
+
export function Convert(value: nasl.core.Long): <T extends nasl.core.Decimal | nasl.core.Integer | nasl.core.String | nasl.core.Boolean | nasl.core.DateTime>() => T;
|
|
5
|
+
export function Convert(value: nasl.core.Double): <T extends nasl.core.Decimal | nasl.core.Boolean | nasl.core.Integer | nasl.core.Long | nasl.core.String>() => T;
|
|
6
|
+
export function Convert(value: nasl.core.Decimal): <T extends nasl.core.String | nasl.core.Boolean | nasl.core.Integer | nasl.core.Long | nasl.core.Double>() => T;
|
|
7
|
+
export function Convert(value: nasl.core.Email): <T extends nasl.core.String>() => T;
|
|
5
8
|
export function Convert(value: nasl.core.Binary): <T extends nasl.core.String>() => T;
|
|
6
|
-
export function Convert(value: nasl.core.String): <T extends nasl.core.Decimal | nasl.core.Date | nasl.core.Time | nasl.core.DateTime
|
|
9
|
+
export function Convert(value: nasl.core.String): <T extends nasl.core.Decimal | nasl.core.Date | nasl.core.Time | nasl.core.DateTime | nasl.core.Double | nasl.core.Integer | nasl.core.Long | nasl.core.Boolean>() => T;
|
|
7
10
|
export function Convert(value: nasl.core.Date): <T extends nasl.core.DateTime | nasl.core.String>() => T;
|
|
8
11
|
export function Convert(value: nasl.core.Time): <T extends nasl.core.String>() => T;
|
|
9
12
|
export function Convert(value: nasl.core.DateTime): <T extends nasl.core.Date | nasl.core.Time | nasl.core.String | nasl.core.Long>() => T;
|
|
10
|
-
export function Convert(value: nasl.core.Boolean): <T extends nasl.core.String | nasl.core.
|
|
13
|
+
export function Convert(value: nasl.core.Boolean): <T extends nasl.core.String | nasl.core.Integer | nasl.core.Decimal>() => T;
|
|
11
14
|
export function Convert(value: nasl.core.Any): <T extends nasl.core.String>() => T;
|
|
12
15
|
|
|
13
16
|
export function ToString<T extends nasl.core.Any>(value: T): nasl.core.String;
|
|
14
|
-
export function FromString(value: nasl.core.String): <T extends nasl.core.Decimal | nasl.core.Date | nasl.core.Time | nasl.core.DateTime | nasl.core.
|
|
17
|
+
export function FromString(value: nasl.core.String): <T extends nasl.core.Decimal | nasl.core.Date | nasl.core.Time | nasl.core.DateTime | nasl.core.Double | nasl.core.Integer | nasl.core.Long | nasl.core.Boolean>() => T;
|
|
15
18
|
export function EnumToList<T extends nasl.core.Enums>(): nasl.collection.List<{ text: nasl.core.String, value: nasl.core.String }>;
|
|
16
19
|
export function EnumValueToText<T extends nasl.core.Enums>(value: nasl.core.Enums): nasl.core.String;
|
|
17
20
|
export function StringToEnumValue<T extends nasl.core.Enums>(value: nasl.core.String): T;
|
|
@@ -20,44 +23,44 @@ declare namespace nasl.util {
|
|
|
20
23
|
export function Join(list: nasl.collection.List<nasl.core.Any>, seperator: nasl.core.String): nasl.core.String;
|
|
21
24
|
// export function Concat(str1: nasl.core.Any, str2: nasl.core.Any): nasl.core.String;
|
|
22
25
|
export function Concat(...args: nasl.core.Any): nasl.core.String;
|
|
23
|
-
export function Length(str1: nasl.core.String): nasl.core.
|
|
24
|
-
export function Length<K, V>(str1: nasl.collection.Map<K, V>): nasl.core.
|
|
25
|
-
export function Length<T>(str1: nasl.collection.List<T>): nasl.core.
|
|
26
|
-
export function IndexOf(str: nasl.core.String, search: nasl.core.String, formIndex: nasl.core.
|
|
27
|
-
export function LastIndexOf(str: nasl.core.String, search: nasl.core.String, ignoreCase: nasl.core.Boolean): nasl.core.
|
|
26
|
+
export function Length(str1: nasl.core.String): nasl.core.Integer;
|
|
27
|
+
export function Length<K, V>(str1: nasl.collection.Map<K, V>): nasl.core.Integer;
|
|
28
|
+
export function Length<T>(str1: nasl.collection.List<T>): nasl.core.Integer;
|
|
29
|
+
export function IndexOf(str: nasl.core.String, search: nasl.core.String, formIndex: nasl.core.Integer, ignoreCase: nasl.core.Boolean): nasl.core.Integer;
|
|
30
|
+
export function LastIndexOf(str: nasl.core.String, search: nasl.core.String, ignoreCase: nasl.core.Boolean): nasl.core.Integer;
|
|
28
31
|
export function Replace(str: nasl.core.String, search: nasl.core.String, replace: nasl.core.String): nasl.core.String;
|
|
29
|
-
export function SubString(str: nasl.core.String, start: nasl.core.
|
|
32
|
+
export function SubString(str: nasl.core.String, start: nasl.core.Integer, length?: nasl.core.Integer): nasl.core.String;
|
|
30
33
|
export function ToLower(str1: nasl.core.String): nasl.core.String;
|
|
31
34
|
export function ToUpper(str1: nasl.core.String): nasl.core.String;
|
|
32
35
|
export function Trim(str1: nasl.core.String): nasl.core.String;
|
|
33
36
|
|
|
34
|
-
export function Get<T>(list: nasl.collection.List<T>, index: nasl.core.
|
|
35
|
-
export function Set<T, K extends T>(list: nasl.collection.List<T>, index: nasl.core.
|
|
37
|
+
export function Get<T>(list: nasl.collection.List<T>, index: nasl.core.Integer): T;
|
|
38
|
+
export function Set<T, K extends T>(list: nasl.collection.List<T>, index: nasl.core.Integer, item: K): T;
|
|
36
39
|
export function Contains<T, K extends T>(list: nasl.collection.List<T>, item: K): nasl.core.Boolean;
|
|
37
40
|
export function Add<T, K extends T>(list: nasl.collection.List<T>, item: K): void;
|
|
38
|
-
export function AddAll<T>(list: nasl.collection.List<T>, addList: nasl.collection.List<T>): nasl.core.
|
|
39
|
-
export function Insert<T, K extends T>(list: nasl.collection.List<T>, index: nasl.core.
|
|
41
|
+
export function AddAll<T>(list: nasl.collection.List<T>, addList: nasl.collection.List<T>): nasl.core.Integer;
|
|
42
|
+
export function Insert<T, K extends T>(list: nasl.collection.List<T>, index: nasl.core.Integer, item: K): void;
|
|
40
43
|
export function Remove<T, K extends T>(list: nasl.collection.List<T>, item: K): void;
|
|
41
|
-
export function RemoveAt<T>(list: nasl.collection.List<T>, index: nasl.core.
|
|
44
|
+
export function RemoveAt<T>(list: nasl.collection.List<T>, index: nasl.core.Integer): T;
|
|
42
45
|
|
|
43
46
|
export function ListHead<T>(list: nasl.collection.List<T>): T;
|
|
44
47
|
export function ListLast<T>(list: nasl.collection.List<T>): T;
|
|
45
48
|
export function ListFlatten<T>(list: nasl.collection.List<nasl.collection.List<T>>): nasl.collection.List<T>;
|
|
46
49
|
export function ListTransform<T0, T>(list: nasl.collection.List<T0>, by: (elem: T0) => T): nasl.collection.List<T>;
|
|
47
|
-
export function ListToMap<T, K extends nasl.core.Boolean | nasl.core.Long | nasl.core.Decimal | nasl.core.String, V>(map: nasl.collection.List<T>, byKey: (elem: T) => K, byVal: (elem: T) => V): nasl.collection.Map<K, V>;
|
|
48
|
-
export function ListGroupBy<A, K extends nasl.core.Boolean | nasl.core.Long | nasl.core.Decimal | nasl.core.String>(list: nasl.collection.List<A>, by: (elem: A) => K): nasl.collection.Map<K, nasl.collection.List<A>>;
|
|
50
|
+
export function ListToMap<T, K extends nasl.core.Boolean | nasl.core.Integer | nasl.core.Long | nasl.core.Decimal | nasl.core.String, V>(map: nasl.collection.List<T>, byKey: (elem: T) => K, byVal: (elem: T) => V): nasl.collection.Map<K, V>;
|
|
51
|
+
export function ListGroupBy<A, K extends nasl.core.Boolean | nasl.core.Integer | nasl.core.Long | nasl.core.Decimal | nasl.core.String>(list: nasl.collection.List<A>, by: (elem: A) => K): nasl.collection.Map<K, nasl.collection.List<A>>;
|
|
49
52
|
|
|
50
|
-
export function ListSum<T extends nasl.core.Long | nasl.core.Decimal>(list: nasl.collection.List<T>): T;
|
|
51
|
-
export function ListProduct<T extends nasl.core.Long | nasl.core.Decimal>(list: nasl.collection.List<T>): T;
|
|
52
|
-
export function ListMax<T extends nasl.core.Long | nasl.core.Decimal | nasl.core.String>(list: nasl.collection.List<T>): T;
|
|
53
|
-
export function ListMin<T extends nasl.core.Long | nasl.core.Decimal | nasl.core.String>(list: nasl.collection.List<T>): T;
|
|
53
|
+
export function ListSum<T extends nasl.core.Integer | nasl.core.Long | nasl.core.Double | nasl.core.Decimal>(list: nasl.collection.List<T>): T;
|
|
54
|
+
export function ListProduct<T extends nasl.core.Integer | nasl.core.Long | nasl.core.Double | nasl.core.Decimal>(list: nasl.collection.List<T>): T;
|
|
55
|
+
export function ListMax<T extends nasl.core.Integer | nasl.core.Long | nasl.core.Double | nasl.core.Decimal | nasl.core.String>(list: nasl.collection.List<T>): T;
|
|
56
|
+
export function ListMin<T extends nasl.core.Integer | nasl.core.Long | nasl.core.Double | nasl.core.Decimal | nasl.core.String>(list: nasl.collection.List<T>): T;
|
|
54
57
|
|
|
55
|
-
export function ListAverage<T extends nasl.core.Long | nasl.core.
|
|
58
|
+
export function ListAverage<T extends nasl.core.Integer | nasl.core.Long | nasl.core.Double>(list: nasl.collection.List<T>): nasl.core.Double;
|
|
56
59
|
export function ListAverage(list: nasl.collection.List<nasl.core.Decimal>): nasl.core.Decimal;
|
|
57
60
|
|
|
58
61
|
export function ListSort<T>(list: nasl.collection.List<T>, by: (item: T) => any, sort: nasl.core.Boolean): void;
|
|
59
62
|
export function ListFind<T>(list: nasl.collection.List<T>, by: (item: T) => nasl.core.Boolean): T;
|
|
60
|
-
export function ListFindIndex<T>(list: nasl.collection.List<T>, by: (item: T) => nasl.core.Boolean): nasl.core.
|
|
63
|
+
export function ListFindIndex<T>(list: nasl.collection.List<T>, by: (item: T) => nasl.core.Boolean): nasl.core.Integer;
|
|
61
64
|
|
|
62
65
|
export function ListFindAll<T>(list: nasl.collection.List<T>, by: (item: T) => nasl.core.Boolean): nasl.collection.List<T>;
|
|
63
66
|
export function ListFilter<T>(list: nasl.collection.List<T>, by: (item: T) => nasl.core.Boolean): nasl.collection.List<T>;
|
|
@@ -65,8 +68,8 @@ declare namespace nasl.util {
|
|
|
65
68
|
export function ListReverse<T>(list: nasl.collection.List<T>): void;
|
|
66
69
|
export function ListDistinct<T>(list: nasl.collection.List<T>): void;
|
|
67
70
|
export function ListDistinctBy<A, B>(list: nasl.collection.List<A>, by: (elem: A) => B): nasl.collection.List<A>;
|
|
68
|
-
export function ListSlice<T>(list: nasl.collection.List<T>, start: nasl.core.
|
|
69
|
-
export function SliceToListPage<T>(list: nasl.collection.List<T>, page: nasl.core.
|
|
71
|
+
export function ListSlice<T>(list: nasl.collection.List<T>, start: nasl.core.Integer, end: nasl.core.Integer): nasl.collection.List<T>;
|
|
72
|
+
export function SliceToListPage<T>(list: nasl.collection.List<T>, page: nasl.core.Integer, size: nasl.core.Integer): { list: nasl.collection.List<T>, total: nasl.core.Integer };
|
|
70
73
|
|
|
71
74
|
export function MapGet<K, V>(map: nasl.collection.Map<K, V>, key: K): V;
|
|
72
75
|
export function MapPut<K, V>(map: nasl.collection.Map<K, V>, key: K, value: V): void;
|
|
@@ -76,32 +79,32 @@ declare namespace nasl.util {
|
|
|
76
79
|
export function MapValues<K, V>(map: nasl.collection.Map<K, V>): nasl.collection.List<V>;
|
|
77
80
|
export function MapFilter<K, V>(map: nasl.collection.Map<K, V>, by: (key: K, value: V) => nasl.core.Boolean): nasl.collection.Map<K, V>;
|
|
78
81
|
// 将元素类型为 K0, V0 的 Map 映射为元素类型为 K, V 的 Map
|
|
79
|
-
export function MapTransform<K0, V0, K extends nasl.core.Boolean | nasl.core.Long | nasl.core.Decimal | nasl.core.String, V>(map: nasl.collection.Map<K0, V0>, byKey: (key: K0, value: V0) => K, byVal: (key: K0, value: V0) => V): nasl.collection.Map<K, V>;
|
|
82
|
+
export function MapTransform<K0, V0, K extends nasl.core.Boolean | nasl.core.Integer | nasl.core.Long | nasl.core.Decimal | nasl.core.String, V>(map: nasl.collection.Map<K0, V0>, byKey: (key: K0, value: V0) => K, byVal: (key: K0, value: V0) => V): nasl.collection.Map<K, V>;
|
|
80
83
|
|
|
81
84
|
export function CurrDate(): nasl.core.Date;
|
|
82
85
|
export function CurrTime(): nasl.core.Time;
|
|
83
86
|
export function CurrDateTime(): nasl.core.DateTime;
|
|
84
87
|
export function FormatDate(date: nasl.core.Date, formatter: nasl.core.String): nasl.core.String;
|
|
85
88
|
export function FormatDateTime(dateTime: nasl.core.DateTime, formatter: nasl.core.String): nasl.core.String;
|
|
86
|
-
export function FormatNumber(doubleValue: nasl.core.Decimal | nasl.core.Long, digits: nasl.core.
|
|
87
|
-
export function AddDays(dateTime: nasl.core.Date, amount: nasl.core.
|
|
88
|
-
export function AddDays(dateTime: nasl.core.DateTime, amount: nasl.core.
|
|
89
|
-
export function AddMonths(dateTime: nasl.core.Date, amount: nasl.core.
|
|
90
|
-
export function AddMonths(dateTime: nasl.core.DateTime, amount: nasl.core.
|
|
91
|
-
export function DateDiff<T extends nasl.core.Date | nasl.core.Time | nasl.core.DateTime>(dateTime1: T, dateTime2: T, calcType: nasl.core.String): nasl.core.
|
|
89
|
+
export function FormatNumber(doubleValue: nasl.core.Decimal | nasl.core.Double | nasl.core.Integer | nasl.core.Long, digits: nasl.core.Integer, showGroups: nasl.core.Boolean): nasl.core.String;
|
|
90
|
+
export function AddDays(dateTime: nasl.core.Date, amount: nasl.core.Integer): nasl.core.Date;
|
|
91
|
+
export function AddDays(dateTime: nasl.core.DateTime, amount: nasl.core.Integer): nasl.core.DateTime;
|
|
92
|
+
export function AddMonths(dateTime: nasl.core.Date, amount: nasl.core.Integer): nasl.core.Date;
|
|
93
|
+
export function AddMonths(dateTime: nasl.core.DateTime, amount: nasl.core.Integer): nasl.core.DateTime;
|
|
94
|
+
export function DateDiff<T extends nasl.core.Date | nasl.core.Time | nasl.core.DateTime>(dateTime1: T, dateTime2: T, calcType: nasl.core.String): nasl.core.Integer;
|
|
92
95
|
export function Clone<T>(struct: T): T;
|
|
93
96
|
export function Clear<T>(struct: T): T;
|
|
94
|
-
export function RandomInt(start: nasl.core.
|
|
97
|
+
export function RandomInt(start: nasl.core.Integer, end: nasl.core.Integer): nasl.core.Integer;
|
|
95
98
|
export function New<T>(): T;
|
|
96
99
|
export function NewList<T>(...args: T[]): nasl.collection.List<T>;
|
|
97
|
-
export function NewMap<K
|
|
98
|
-
export function
|
|
99
|
-
export function
|
|
100
|
-
export function
|
|
101
|
-
export function
|
|
102
|
-
export function
|
|
103
|
-
|
|
104
|
-
export function CreateListPage<T>(list: nasl.collection.List<T>, total: nasl.core.
|
|
100
|
+
export function NewMap<K, T>(key: K, ...args: T[]): nasl.collection.Map<K, T>;
|
|
101
|
+
export function ValidMapKey<K extends nasl.core.String>(key: K): K;
|
|
102
|
+
export function ValidMapKey<K extends nasl.core.Integer>(key: K): K;
|
|
103
|
+
export function ValidMapKey<K extends nasl.core.Boolean>(key: K): K;
|
|
104
|
+
export function ValidMapKey<K extends nasl.core.Long>(key: K): K;
|
|
105
|
+
export function ValidMapKey<K extends nasl.core.Decimal>(key: K): K;
|
|
106
|
+
export function ValidMapKey<K extends nasl.core.None>(key: K): K;
|
|
107
|
+
export function CreateListPage<T>(list: nasl.collection.List<T>, total: nasl.core.Integer): { list: nasl.collection.List<T>, total: nasl.core.Integer };
|
|
105
108
|
|
|
106
109
|
export function consoleLog(arg: nasl.core.Any): void;
|
|
107
110
|
export function jsonSerialize(arg: nasl.core.Any): nasl.core.String;
|
|
@@ -112,8 +115,6 @@ declare namespace nasl.util {
|
|
|
112
115
|
|
|
113
116
|
// 处理携带了error的类型,去除掉error然后返回
|
|
114
117
|
export function autoHandleError<T>(value: T): Exclude<T, nasl.ui.Error>;
|
|
115
|
-
export function Round(value: nasl.core.Decimal, moda: nasl.core.String): nasl.core.Long;
|
|
116
|
-
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
declare namespace nasl.validation {
|
|
2
|
-
export function minLength(min: nasl.core.
|
|
3
|
-
export function maxLength(min: nasl.core.
|
|
4
|
-
export function rangeLength(min: nasl.core.
|
|
5
|
-
export function min(min: nasl.core.Decimal | nasl.core.String | nasl.core.Date | nasl.core.DateTime): nasl.core.Boolean;
|
|
6
|
-
export function max(min: nasl.core.Decimal | nasl.core.String | nasl.core.Date | nasl.core.DateTime): nasl.core.Boolean;
|
|
7
|
-
export function range(min: nasl.core.Decimal | nasl.core.String | nasl.core.Date | nasl.core.DateTime, max: nasl.core.Decimal | nasl.core.String | nasl.core.Date | nasl.core.DateTime): nasl.core.Boolean;
|
|
2
|
+
export function minLength(min: nasl.core.Integer): nasl.core.Boolean;
|
|
3
|
+
export function maxLength(min: nasl.core.Integer): nasl.core.Boolean;
|
|
4
|
+
export function rangeLength(min: nasl.core.Integer, max: nasl.core.Integer): nasl.core.Boolean;
|
|
5
|
+
export function min(min: nasl.core.Decimal | nasl.core.Double | nasl.core.String | nasl.core.Date | nasl.core.DateTime): nasl.core.Boolean;
|
|
6
|
+
export function max(min: nasl.core.Decimal | nasl.core.Double | nasl.core.String | nasl.core.Date | nasl.core.DateTime): nasl.core.Boolean;
|
|
7
|
+
export function range(min: nasl.core.Decimal | nasl.core.Double | nasl.core.String | nasl.core.Date | nasl.core.DateTime, max: nasl.core.Decimal | nasl.core.Double | nasl.core.String | nasl.core.Date | nasl.core.DateTime): nasl.core.Boolean;
|
|
8
8
|
export function pattern(re: nasl.core.String | RegExp): nasl.core.Boolean;
|
|
9
9
|
export function is(arg: nasl.core.Any): nasl.core.Boolean;
|
|
10
10
|
export function isNot(arg: nasl.core.Any): nasl.core.Boolean;
|
|
@@ -21,8 +21,8 @@ declare namespace nasl.validation {
|
|
|
21
21
|
export function decimal(force?: nasl.core.Boolean, digits?: nasl.core.String): nasl.core.Boolean;
|
|
22
22
|
export function ip(version: nasl.core.Decimal): nasl.core.Boolean;
|
|
23
23
|
export function ipRange(version: nasl.core.Decimal): nasl.core.Boolean;
|
|
24
|
-
export function byteLength(min: nasl.core.
|
|
25
|
-
export function divisibleBy(divisor: nasl.core.Long | nasl.core.Decimal): nasl.core.Boolean;
|
|
24
|
+
export function byteLength(min: nasl.core.Integer, max: nasl.core.Integer): nasl.core.Boolean;
|
|
25
|
+
export function divisibleBy(divisor: nasl.core.Integer | nasl.core.Long | nasl.core.Double | nasl.core.Decimal): nasl.core.Boolean;
|
|
26
26
|
export function hash(algorithm?: nasl.core.String): nasl.core.Boolean;
|
|
27
27
|
export function isbn(version: nasl.core.String): nasl.core.Boolean;
|
|
28
28
|
export function iso8601(strict: nasl.core.Boolean): nasl.core.Boolean;
|
|
@@ -162,7 +162,7 @@ export const ops = {
|
|
|
162
162
|
}
|
|
163
163
|
return item;
|
|
164
164
|
},
|
|
165
|
-
_addModule(app, name, belongs, data) {
|
|
165
|
+
_addModule(app, frontend, name, belongs, data) {
|
|
166
166
|
// const ms = app[belongs];
|
|
167
167
|
// const exist = ms.find((m) => m.name === name);
|
|
168
168
|
// if (!exist) {
|
|
@@ -172,10 +172,18 @@ export const ops = {
|
|
|
172
172
|
if (app[method])
|
|
173
173
|
app[method](data);
|
|
174
174
|
else {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
if (frontend && belongs === 'componentDependencies') {
|
|
176
|
+
const ms = frontend[belongs];
|
|
177
|
+
const exist = ms.find((m) => m.name === name);
|
|
178
|
+
if (!exist) {
|
|
179
|
+
frontend.addModule(data);
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
const ms = app[belongs];
|
|
183
|
+
const exist = ms.find((m) => m.name === name);
|
|
184
|
+
if (!exist) {
|
|
185
|
+
app['addModuleIn' + firstUpperCase(belongs)](data);
|
|
186
|
+
}
|
|
179
187
|
}
|
|
180
188
|
}
|
|
181
189
|
},
|
|
@@ -21,6 +21,7 @@ const excludedKeySet = new Set([
|
|
|
21
21
|
export function replace(script) {
|
|
22
22
|
script = script.replace('execTemplate = function(app,', 'execTemplate = function(app, frontend, ');
|
|
23
23
|
script = script.replace('_uniqueName.initAppUniqueNames(app);', '_uniqueName.initAppUniqueNames(app, frontend);');
|
|
24
|
+
script = script.replace('_addModule(app', '_addModule(app, frontend');
|
|
24
25
|
return script;
|
|
25
26
|
}
|
|
26
27
|
|
package/src/common/BaseNode.ts
CHANGED
|
@@ -15,10 +15,13 @@ import { Diagnostic } from '../manager/diagnostic';
|
|
|
15
15
|
import { ViewElement, App, TypeAnnotation } from '..';
|
|
16
16
|
import * as jsoner from '../service/storage/jsoner';
|
|
17
17
|
|
|
18
|
+
import { sentryMonitorNaslNode } from '../sentry';
|
|
19
|
+
|
|
18
20
|
/**
|
|
19
21
|
* 顶点类
|
|
20
22
|
* 属性均为只读,仅在初始化和 load 的情况下可以修改
|
|
21
23
|
*/
|
|
24
|
+
@sentryMonitorNaslNode
|
|
22
25
|
export class BaseNode extends EventEmitter {
|
|
23
26
|
/**
|
|
24
27
|
* 可修改标志,内部属性
|
|
@@ -810,7 +813,13 @@ export class BaseNode extends EventEmitter {
|
|
|
810
813
|
async getCurrentTypeAnnotation(): Promise<any> {
|
|
811
814
|
/* override */
|
|
812
815
|
}
|
|
813
|
-
|
|
816
|
+
/**
|
|
817
|
+
* 获取当前节点的下一级内容
|
|
818
|
+
*/
|
|
819
|
+
@action('获取当前节点的下一级内容')
|
|
820
|
+
getSelectRef(newTypeAnnotation: TypeAnnotation, needNewStructure = false): any {
|
|
821
|
+
/* override */
|
|
822
|
+
}
|
|
814
823
|
/**
|
|
815
824
|
* 销毁
|
|
816
825
|
* 从 Map 中删除点和子节点
|
|
@@ -1026,6 +1035,28 @@ export class BaseNode extends EventEmitter {
|
|
|
1026
1035
|
});
|
|
1027
1036
|
return arr;
|
|
1028
1037
|
}
|
|
1038
|
+
get isTreeLeaf() {
|
|
1039
|
+
if (this.concept === 'EntityProperty' || this.concept === 'InterfaceParam' || this.concept === 'Param'
|
|
1040
|
+
|| this.concept === 'Return' || this.concept === 'StructureProperty' || this.concept === 'Variable') {
|
|
1041
|
+
return !this.hasChildren;
|
|
1042
|
+
}
|
|
1043
|
+
return false;
|
|
1044
|
+
}
|
|
1045
|
+
get hasChildren() {
|
|
1046
|
+
const typeAnnotation = (this as any).typeAnnotation || this.__TypeAnnotation;
|
|
1047
|
+
if (typeAnnotation) {
|
|
1048
|
+
const { typeKind, typeNamespace, typeName } = typeAnnotation;
|
|
1049
|
+
if (typeKind === 'reference' || typeKind === 'generic') {
|
|
1050
|
+
if (typeNamespace.endsWith('.enums'))
|
|
1051
|
+
return null;
|
|
1052
|
+
return [{}];
|
|
1053
|
+
} else if (typeNamespace === 'nasl.core' && ['String', 'Text', 'Email'].includes(typeName)) {
|
|
1054
|
+
return [{}];
|
|
1055
|
+
}
|
|
1056
|
+
return null;
|
|
1057
|
+
}
|
|
1058
|
+
return null;
|
|
1059
|
+
}
|
|
1029
1060
|
}
|
|
1030
1061
|
|
|
1031
1062
|
export default BaseNode;
|
package/src/concepts/Abort__.ts
CHANGED
|
@@ -39,9 +39,6 @@ export class Abort extends LogicItem {
|
|
|
39
39
|
super(source);
|
|
40
40
|
super.subConstructor(source);
|
|
41
41
|
}
|
|
42
|
-
getClassName() {
|
|
43
|
-
return 'Abort';
|
|
44
|
-
}
|
|
45
42
|
|
|
46
43
|
static from(source: any, parentNode?: any, parentKey?: string): Abort {
|
|
47
44
|
return super.from(source, parentNode, parentKey) as Abort;
|
|
@@ -58,6 +55,10 @@ export class Abort extends LogicItem {
|
|
|
58
55
|
// ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
|
|
59
56
|
// 自动生成的代码已结束。下面可以手动编写。
|
|
60
57
|
//================================================================================
|
|
58
|
+
toUI(): string {
|
|
59
|
+
return '中止';
|
|
60
|
+
}
|
|
61
|
+
|
|
61
62
|
toJS(state?: TranslatorState): string {
|
|
62
63
|
const code = `throw Error('程序中止');`;
|
|
63
64
|
return code;
|
package/src/concepts/App__.ts
CHANGED
|
@@ -6,6 +6,7 @@ export interface AssetsInfo {
|
|
|
6
6
|
|
|
7
7
|
import { queryNodeByPath } from '../service/storage/jsoner';
|
|
8
8
|
import { getNaslNodeByNodeCallee, getNodeByNodeCallee } from '../automate/engine/utils';
|
|
9
|
+
import ConfigProperty from './ConfigProperty__';
|
|
9
10
|
import TypeAnnotation from './TypeAnnotation__';
|
|
10
11
|
import View from './View__';
|
|
11
12
|
interface MessageData {
|
|
@@ -16,7 +17,7 @@ interface MessageData {
|
|
|
16
17
|
type: number
|
|
17
18
|
resultName?: string,
|
|
18
19
|
}
|
|
19
|
-
import
|
|
20
|
+
// import CallLogic from './CallLogic__';
|
|
20
21
|
|
|
21
22
|
//================================================================================
|
|
22
23
|
// 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
|
|
@@ -2459,43 +2460,6 @@ export class App extends BaseNode {
|
|
|
2459
2460
|
this.emit('collect:end');
|
|
2460
2461
|
}
|
|
2461
2462
|
|
|
2462
|
-
getSelectRef(newTypeAnnotation: TypeAnnotation) {
|
|
2463
|
-
try {
|
|
2464
|
-
const { typeName, typeKind, typeNamespace, typeArguments } = newTypeAnnotation;
|
|
2465
|
-
let completionChildren;
|
|
2466
|
-
if (typeKind === 'reference') {
|
|
2467
|
-
if (typeNamespace === 'nasl.ui' || typeNamespace === 'nasl.process' || typeNamespace === 'nasl.auth') {
|
|
2468
|
-
const node = getNaslNodeByNodeCallee(typeNamespace, typeName);
|
|
2469
|
-
const properties = (node as Structure)?.properties || [];
|
|
2470
|
-
completionChildren = properties;
|
|
2471
|
-
} else if (typeNamespace.endsWith('.enums')) {
|
|
2472
|
-
completionChildren = [];
|
|
2473
|
-
} else {
|
|
2474
|
-
const node = getNodeByNodeCallee(this, typeNamespace + '.' + typeName);
|
|
2475
|
-
const properties = node?.properties || [];
|
|
2476
|
-
completionChildren = properties;
|
|
2477
|
-
}
|
|
2478
|
-
} else if (typeKind === 'generic') {
|
|
2479
|
-
const node = getNaslNodeByNodeCallee(typeNamespace, typeName);
|
|
2480
|
-
const properties = ((node as Structure)?.properties && [...(node as Structure)?.properties]) || [];
|
|
2481
|
-
for (let i = 0; i < properties.length; i++) {
|
|
2482
|
-
const item = properties[i];
|
|
2483
|
-
if (item?.typeAnnotation?.typeKind === 'typeParam') {
|
|
2484
|
-
const newItem: any = BaseNode.from(item.toJSON());
|
|
2485
|
-
newItem.typeAnnotation = typeArguments[0];
|
|
2486
|
-
newItem.parentNode = this;
|
|
2487
|
-
properties[i] = newItem;
|
|
2488
|
-
}
|
|
2489
|
-
}
|
|
2490
|
-
completionChildren = properties;
|
|
2491
|
-
} else {
|
|
2492
|
-
completionChildren = [];
|
|
2493
|
-
}
|
|
2494
|
-
return completionChildren;
|
|
2495
|
-
} catch (err) {
|
|
2496
|
-
console.log(err);
|
|
2497
|
-
}
|
|
2498
|
-
}
|
|
2499
2463
|
/* 判断接口是否有误,需要重新导出 */
|
|
2500
2464
|
|
|
2501
2465
|
getQualifiedInterface(interfaces: Interface[] = this.interfaces): MessageData[] {
|
|
@@ -942,7 +942,7 @@ export class BindAttribute extends BaseNode {
|
|
|
942
942
|
} else {
|
|
943
943
|
value = this.expression?.toVue(options) || '';
|
|
944
944
|
}
|
|
945
|
-
} else if (this.type === 'string') {
|
|
945
|
+
} else if (this.type === 'string') {
|
|
946
946
|
if (
|
|
947
947
|
(
|
|
948
948
|
this.name === 'destination' || (this.name === 'href' && value.startsWith('/'))
|
|
@@ -955,6 +955,22 @@ export class BindAttribute extends BaseNode {
|
|
|
955
955
|
&& this.app?.sysPrefixPath
|
|
956
956
|
) {
|
|
957
957
|
value = `${this.app?.sysPrefixPath}${value}`;
|
|
958
|
+
} else {
|
|
959
|
+
let code = '';
|
|
960
|
+
if (typeof value === 'string') {
|
|
961
|
+
code = value;
|
|
962
|
+
if (options?.finalCode !== false) {
|
|
963
|
+
code = value.replace(/['"`\\]/g, (m) => {
|
|
964
|
+
const escape = '\\';
|
|
965
|
+
if (m === '\\') {
|
|
966
|
+
return `${escape}${escape}`;
|
|
967
|
+
} else {
|
|
968
|
+
return `${escape}${m}`;
|
|
969
|
+
}
|
|
970
|
+
});
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
value = code;
|
|
958
974
|
}
|
|
959
975
|
}
|
|
960
976
|
if (value !== undefined && value !== null && typeof value === 'string') {
|
|
@@ -748,39 +748,39 @@ export class BindEvent extends BaseNode {
|
|
|
748
748
|
// 获取bindEvent上的logic的参数从上文获取
|
|
749
749
|
getContextRenderLogicParams(logic: Logic) {
|
|
750
750
|
const argsList: Param[] = [];
|
|
751
|
+
const virtualParams = logic.virtualParams;
|
|
751
752
|
if (this.logics?.length) {
|
|
752
753
|
let parent = this.parentNode;
|
|
753
754
|
let index = 0;
|
|
754
|
-
const event = Param.from({ name: 'event' }, logic, 'virtualParams');
|
|
755
|
-
const typeString = this.getEventTypeString();
|
|
756
|
-
if (!typeString)
|
|
757
|
-
return argsList;
|
|
758
|
-
if (typeString && typeString.includes('nasl.ui')) {
|
|
759
|
-
const last = typeString.lastIndexOf('.');
|
|
760
|
-
event.typeAnnotation = TypeAnnotation.createReference(typeString.substring(last + 1, typeString.length), {
|
|
761
|
-
typeNamespace: 'nasl.ui',
|
|
762
|
-
});
|
|
763
|
-
} else {
|
|
764
|
-
const last = typeString.lastIndexOf('.');
|
|
765
|
-
event.typeAnnotation = TypeAnnotation.createPrimitive(typeString.substring(last + 1, typeString.length), {
|
|
766
|
-
typeNamespace: 'nasl.core',
|
|
767
|
-
});
|
|
768
|
-
}
|
|
755
|
+
const event = Param.from({ name: 'event', typeAnnotation: null }, logic, 'virtualParams');
|
|
769
756
|
argsList.push(event);
|
|
770
|
-
|
|
771
757
|
while (parent && parent.concept !== 'View') {
|
|
772
758
|
if ((parent as ViewElement).slotScope) {
|
|
773
|
-
const param = Param.from({ name: index === 0 ? 'current' : 'current' + index }, logic, 'virtualParams');
|
|
774
|
-
param.typeAnnotation = TypeAnnotation.createGeneric('Current', {
|
|
775
|
-
typeNamespace: 'nasl.ui',
|
|
776
|
-
typeArguments: [],
|
|
777
|
-
});
|
|
759
|
+
const param = Param.from({ name: index === 0 ? 'current' : 'current' + index, typeAnnotation: null }, logic, 'virtualParams');
|
|
778
760
|
argsList.push(param);
|
|
779
761
|
index++;
|
|
780
762
|
}
|
|
781
763
|
parent = parent.parentNode;
|
|
782
764
|
}
|
|
783
765
|
}
|
|
766
|
+
let haveDifference = false;
|
|
767
|
+
// 如果长度一样
|
|
768
|
+
if (virtualParams.length === argsList.length) {
|
|
769
|
+
// 那就看一下每一项的名字是不是变了
|
|
770
|
+
for (let i = 0; i < virtualParams.length; i++) {
|
|
771
|
+
if (virtualParams[i].name !== argsList[i].name) {
|
|
772
|
+
haveDifference = true;
|
|
773
|
+
break;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
// 如果变了, 输出新的
|
|
777
|
+
if (haveDifference) {
|
|
778
|
+
return argsList;
|
|
779
|
+
}
|
|
780
|
+
// 如果没变,输出旧的不让树组件刷新
|
|
781
|
+
return virtualParams;
|
|
782
|
+
}
|
|
783
|
+
// 长度啥的都不一样,就输出新的
|
|
784
784
|
return argsList;
|
|
785
785
|
}
|
|
786
786
|
|