@lcap/nasl 3.6.0-alpha.1 → 3.6.0-alpha.2

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.
Files changed (245) hide show
  1. package/out/bak/translator.js +119 -39
  2. package/out/bak/translator.js.map +1 -1
  3. package/out/breakpoint/generator/BreakpointNode.d.ts +3 -0
  4. package/out/breakpoint/generator/BreakpointNode.js +9 -0
  5. package/out/breakpoint/generator/BreakpointNode.js.map +1 -1
  6. package/out/breakpoint/shared/constants.js +1 -0
  7. package/out/breakpoint/shared/constants.js.map +1 -1
  8. package/out/breakpoint/shared/utils.js +12 -6
  9. package/out/breakpoint/shared/utils.js.map +1 -1
  10. package/out/breakpoint/store/core.js +1 -1
  11. package/out/breakpoint/store/core.js.map +1 -1
  12. package/out/common/BaseNode.d.ts +1 -4
  13. package/out/common/BaseNode.js +23 -37
  14. package/out/common/BaseNode.js.map +1 -1
  15. package/out/concepts/AnonymousFunction__.d.ts +6 -1
  16. package/out/concepts/AnonymousFunction__.js +34 -16
  17. package/out/concepts/AnonymousFunction__.js.map +1 -1
  18. package/out/concepts/App__.d.ts +55 -51
  19. package/out/concepts/App__.js +76 -80
  20. package/out/concepts/App__.js.map +1 -1
  21. package/out/concepts/BackendVariable__.js +10 -2
  22. package/out/concepts/BackendVariable__.js.map +1 -1
  23. package/out/concepts/BindAttribute__.js +16 -6
  24. package/out/concepts/BindAttribute__.js.map +1 -1
  25. package/out/concepts/BindDirective__.d.ts +1 -0
  26. package/out/concepts/BindDirective__.js +19 -4
  27. package/out/concepts/BindDirective__.js.map +1 -1
  28. package/out/concepts/BindEvent__.d.ts +3 -1
  29. package/out/concepts/BindEvent__.js +39 -14
  30. package/out/concepts/BindEvent__.js.map +1 -1
  31. package/out/concepts/BusinessComponent__.d.ts +641 -0
  32. package/out/concepts/BusinessComponent__.js +1921 -0
  33. package/out/concepts/BusinessComponent__.js.map +1 -0
  34. package/out/concepts/BusinessLogic__.d.ts +38 -0
  35. package/out/concepts/BusinessLogic__.js +358 -0
  36. package/out/concepts/BusinessLogic__.js.map +1 -0
  37. package/out/concepts/CallEvent__.d.ts +101 -0
  38. package/out/concepts/CallEvent__.js +280 -0
  39. package/out/concepts/CallEvent__.js.map +1 -0
  40. package/out/concepts/CallFunction__.d.ts +0 -1
  41. package/out/concepts/CallFunction__.js +10 -10
  42. package/out/concepts/CallFunction__.js.map +1 -1
  43. package/out/concepts/CallLogic__.d.ts +2 -0
  44. package/out/concepts/CallLogic__.js +38 -27
  45. package/out/concepts/CallLogic__.js.map +1 -1
  46. package/out/concepts/Constant__.js +7 -6
  47. package/out/concepts/Constant__.js.map +1 -1
  48. package/out/concepts/Destination__.d.ts +1 -1
  49. package/out/concepts/Destination__.js +7 -5
  50. package/out/concepts/Destination__.js.map +1 -1
  51. package/out/concepts/End__.js +2 -1
  52. package/out/concepts/End__.js.map +1 -1
  53. package/out/concepts/Event__.d.ts +14 -0
  54. package/out/concepts/Event__.js +61 -0
  55. package/out/concepts/Event__.js.map +1 -1
  56. package/out/concepts/FrontendType__.d.ts +308 -0
  57. package/out/concepts/FrontendType__.js +605 -0
  58. package/out/concepts/FrontendType__.js.map +1 -0
  59. package/out/concepts/Frontend__.d.ts +0 -88
  60. package/out/concepts/Frontend__.js +1 -143
  61. package/out/concepts/Frontend__.js.map +1 -1
  62. package/out/concepts/Identifier__.d.ts +5 -0
  63. package/out/concepts/Identifier__.js +19 -9
  64. package/out/concepts/Identifier__.js.map +1 -1
  65. package/out/concepts/LogicItem__.d.ts +1 -1
  66. package/out/concepts/LogicItem__.js.map +1 -1
  67. package/out/concepts/Logic__.d.ts +3 -1
  68. package/out/concepts/Logic__.js +31 -21
  69. package/out/concepts/Logic__.js.map +1 -1
  70. package/out/concepts/Match__.d.ts +1 -1
  71. package/out/concepts/MemberExpression__.d.ts +1 -1
  72. package/out/concepts/MemberExpression__.js +3 -3
  73. package/out/concepts/MemberExpression__.js.map +1 -1
  74. package/out/concepts/NewComposite__.js.map +1 -1
  75. package/out/concepts/ParamWithGroup__.d.ts +39 -0
  76. package/out/concepts/ParamWithGroup__.js +85 -0
  77. package/out/concepts/ParamWithGroup__.js.map +1 -0
  78. package/out/concepts/Param__.js +11 -3
  79. package/out/concepts/Param__.js.map +1 -1
  80. package/out/concepts/ProcessElement__.js +9 -1
  81. package/out/concepts/ProcessElement__.js.map +1 -1
  82. package/out/concepts/Return__.js +17 -9
  83. package/out/concepts/Return__.js.map +1 -1
  84. package/out/concepts/ValidationRule__.js +2 -1
  85. package/out/concepts/ValidationRule__.js.map +1 -1
  86. package/out/concepts/Variable__.js +17 -8
  87. package/out/concepts/Variable__.js.map +1 -1
  88. package/out/concepts/ViewElement__.d.ts +17 -1
  89. package/out/concepts/ViewElement__.js +145 -16
  90. package/out/concepts/ViewElement__.js.map +1 -1
  91. package/out/concepts/View__.js +21 -20
  92. package/out/concepts/View__.js.map +1 -1
  93. package/out/concepts/index__.d.ts +5 -0
  94. package/out/concepts/index__.js +5 -0
  95. package/out/concepts/index__.js.map +1 -1
  96. package/out/concepts/utils/asserts.d.ts +258 -3
  97. package/out/concepts/utils/asserts.js +351 -13
  98. package/out/concepts/utils/asserts.js.map +1 -1
  99. package/out/concepts/utils/types.d.ts +20 -3
  100. package/out/generator/genBundleFiles.js +25 -11
  101. package/out/generator/genBundleFiles.js.map +1 -1
  102. package/out/generator/genReleaseBody.js +12 -3
  103. package/out/generator/genReleaseBody.js.map +1 -1
  104. package/out/generator/permission.js +3 -3
  105. package/out/generator/permission.js.map +1 -1
  106. package/out/natural/transformTSCode.js +1 -1
  107. package/out/natural/transformTSCode.js.map +1 -1
  108. package/out/server/extendBaseNode.js +6 -4
  109. package/out/server/extendBaseNode.js.map +1 -1
  110. package/out/server/getLogics.js +62 -27
  111. package/out/server/getLogics.js.map +1 -1
  112. package/out/server/getMemberIdentifier.js +6 -1
  113. package/out/server/getMemberIdentifier.js.map +1 -1
  114. package/out/server/getProcesses.js +3 -3
  115. package/out/server/getProcesses.js.map +1 -1
  116. package/out/server/naslServer.js +40 -19
  117. package/out/server/naslServer.js.map +1 -1
  118. package/out/server/translator.js +6 -1
  119. package/out/server/translator.js.map +1 -1
  120. package/out/service/storage/init.js +1 -2
  121. package/out/service/storage/init.js.map +1 -1
  122. package/out/templator/genCreateBlock.js +6 -6
  123. package/out/templator/genCreateBlock.js.map +1 -1
  124. package/out/templator/genCurdEditMultipleKeyBlock.js +16 -16
  125. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  126. package/out/templator/genCurdMultipleKeyBlock.js +36 -36
  127. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  128. package/out/templator/genGetBlock.js +6 -5
  129. package/out/templator/genGetBlock.js.map +1 -1
  130. package/out/templator/genGridViewBlock.js +12 -12
  131. package/out/templator/genGridViewBlock.js.map +1 -1
  132. package/out/templator/genListViewBlock.js +4 -4
  133. package/out/templator/genListViewBlock.js.map +1 -1
  134. package/out/templator/genSelectBlock.js +3 -3
  135. package/out/templator/genSelectBlock.js.map +1 -1
  136. package/out/templator/genTableBlock.js +10 -10
  137. package/out/templator/genTableBlock.js.map +1 -1
  138. package/out/templator/genUpdateBlock.js +10 -9
  139. package/out/templator/genUpdateBlock.js.map +1 -1
  140. package/out/templator/utils.d.ts +2 -2
  141. package/out/templator/utils.js.map +1 -1
  142. package/out/translator/utils.js +12 -1
  143. package/out/translator/utils.js.map +1 -1
  144. package/out/utils/i18nInfo.js +7 -2
  145. package/out/utils/i18nInfo.js.map +1 -1
  146. package/out/utils/index.d.ts +17 -0
  147. package/out/utils/index.js +184 -1
  148. package/out/utils/index.js.map +1 -1
  149. package/package.json +2 -2
  150. package/src/bak/translator.js +121 -43
  151. package/src/breakpoint/generator/BreakpointNode.ts +12 -0
  152. package/src/breakpoint/shared/constants.ts +1 -0
  153. package/src/breakpoint/shared/utils.ts +13 -8
  154. package/src/breakpoint/store/core.ts +1 -1
  155. package/src/common/BaseNode.ts +22 -41
  156. package/src/concepts/AnonymousFunction__.ts +36 -18
  157. package/src/concepts/App__.ts +129 -130
  158. package/src/concepts/BackendVariable__.ts +10 -2
  159. package/src/concepts/BindAttribute__.ts +14 -6
  160. package/src/concepts/BindDirective__.ts +19 -4
  161. package/src/concepts/BindEvent__.ts +41 -13
  162. package/src/concepts/BusinessComponent__.ts +2693 -0
  163. package/src/concepts/BusinessLogic__.ts +376 -0
  164. package/src/concepts/CallEvent__.ts +351 -0
  165. package/src/concepts/CallFunction__.ts +10 -13
  166. package/src/concepts/CallLogic__.ts +45 -32
  167. package/src/concepts/Constant__.ts +5 -7
  168. package/src/concepts/Destination__.ts +7 -5
  169. package/src/concepts/End__.ts +1 -0
  170. package/src/concepts/Event__.ts +70 -0
  171. package/src/concepts/FrontendType__.ts +919 -0
  172. package/src/concepts/Frontend__.ts +3 -251
  173. package/src/concepts/Identifier__.ts +29 -13
  174. package/src/concepts/LogicItem__.ts +1 -0
  175. package/src/concepts/Logic__.ts +36 -23
  176. package/src/concepts/MemberExpression__.ts +3 -3
  177. package/src/concepts/NewComposite__.ts +4 -6
  178. package/src/concepts/ParamWithGroup__.ts +101 -0
  179. package/src/concepts/Param__.ts +11 -3
  180. package/src/concepts/ProcessElement__.ts +8 -1
  181. package/src/concepts/Return__.ts +15 -12
  182. package/src/concepts/ValidationRule__.ts +6 -1
  183. package/src/concepts/Variable__.ts +17 -9
  184. package/src/concepts/ViewElement__.ts +168 -33
  185. package/src/concepts/View__.ts +23 -20
  186. package/src/concepts/index__.ts +5 -0
  187. package/src/concepts/utils/asserts.ts +367 -4
  188. package/src/concepts/utils/types.ts +28 -0
  189. package/src/generator/genBundleFiles.ts +33 -15
  190. package/src/generator/genReleaseBody.ts +14 -3
  191. package/src/generator/permission.ts +8 -6
  192. package/src/natural/transformTSCode.ts +1 -1
  193. package/src/server/extendBaseNode.ts +22 -20
  194. package/src/server/getLogics.ts +79 -41
  195. package/src/server/getMemberIdentifier.ts +7 -1
  196. package/src/server/getProcesses.ts +3 -3
  197. package/src/server/naslServer.ts +44 -20
  198. package/src/server/translator.ts +7 -1
  199. package/src/service/storage/init.ts +1 -2
  200. package/src/templator/genCreateBlock.ts +6 -6
  201. package/src/templator/genCurdEditMultipleKeyBlock.ts +16 -16
  202. package/src/templator/genCurdMultipleKeyBlock.ts +36 -36
  203. package/src/templator/genGetBlock.ts +6 -5
  204. package/src/templator/genGridViewBlock.ts +12 -12
  205. package/src/templator/genListViewBlock.ts +4 -4
  206. package/src/templator/genSelectBlock.ts +3 -3
  207. package/src/templator/genTableBlock.ts +10 -10
  208. package/src/templator/genUpdateBlock.ts +10 -9
  209. package/src/templator/utils.ts +2 -2
  210. package/src/translator/utils.ts +12 -1
  211. package/src/utils/i18nInfo.ts +7 -2
  212. package/src/utils/index.ts +211 -1
  213. package/test/concepts/call-function/fixtures/from-string.json +68 -59
  214. package/test/concepts/call-function/fixtures/to-string-global-tz.json +67 -58
  215. package/test/concepts/call-function/fixtures/to-string-no-tz.json +57 -48
  216. package/test/concepts/call-function/fixtures/to-string-user-tz.json +69 -60
  217. package/test/concepts/call-function/fixtures/to-string-utc-tz.json +69 -60
  218. package/test/concepts/call-interface/fixtures/only-interface.json +81 -72
  219. package/test/concepts/call-interface/fixtures/with-body-complex-argument.json +223 -214
  220. package/test/concepts/call-interface/fixtures/with-body-no-argument.json +85 -76
  221. package/test/concepts/call-interface/fixtures/with-body-simple-argument.json +100 -91
  222. package/test/concepts/call-interface/fixtures/with-headers-no-argument.json +88 -79
  223. package/test/concepts/call-interface/fixtures/with-headers.json +90 -81
  224. package/test/concepts/call-interface/fixtures/with-query-no-argument.json +88 -79
  225. package/test/concepts/call-interface/fixtures/with-query.json +90 -81
  226. package/test/concepts/call-logic/__snapshots__/getQuickInfoOffset.spec.ts.snap +4 -2
  227. package/test/concepts/call-logic/fixtures/entries-get-with-arguments.json +104 -95
  228. package/test/concepts/call-logic/fixtures/entries-update-with-arguments.json +209 -200
  229. package/test/concepts/call-logic/fixtures/global-logic-argument-no-expression.json +97 -88
  230. package/test/concepts/call-logic/fixtures/global-logic-argument-some-expression.json +124 -115
  231. package/test/concepts/call-logic/fixtures/json-deserialize.json +120 -111
  232. package/test/concepts/call-logic/fixtures/json-serialize-with-string.json +124 -115
  233. package/test/concepts/call-logic/fixtures/json-serialize.json +124 -115
  234. package/test/concepts/call-logic/fixtures/view-buildin-logic-with-argument.json +91 -82
  235. package/test/concepts/call-logic/fixtures/view-component-logic-no-argument.json +88 -79
  236. package/test/concepts/call-logic/fixtures/view-component-with-validation.json +144 -135
  237. package/test/concepts/identifier/fixtures/view-variable.json +145 -136
  238. package/test/concepts/view-element/__snapshots__/toVue.spec.ts.snap +1 -1
  239. package/test/concepts/view-element/fixtures/default-login.json +221 -212
  240. package/test/concepts/view-element/fixtures/default-not-found.json +183 -174
  241. package/test/concepts/view-element/fixtures/with-role-auth.json +91 -82
  242. package/test/concepts/view-element/fixtures/with-table.json +1894 -1885
  243. package/test/concepts/view-element/toVue.spec.ts +1 -0
  244. package/ts-worker/package.json +1 -1
  245. package/ts-worker/src/index.js +1 -0
@@ -9,7 +9,6 @@ import {
9
9
  withGenerator,
10
10
  TranslatorGenerator,
11
11
  } from '../translator';
12
- import { AssetsInfo } from './App__';
13
12
  import type Namespace from './Namespace__';
14
13
  import { languageList } from '../utils/i18nInfo';
15
14
 
@@ -29,7 +28,6 @@ import type BindEvent from './BindEvent__';
29
28
  import type View from './View__';
30
29
  import type FrontendVariable from './FrontendVariable__';
31
30
  import Theme from './Theme__';
32
- import type Module from './Module__';
33
31
  import type I18nInfo from './I18nInfo__';
34
32
  import type App from './App__';
35
33
  import type Variable from './Variable__';
@@ -126,16 +124,6 @@ export class Frontend extends BaseNode {
126
124
  })
127
125
  theme: Theme = new Theme();
128
126
 
129
- /**
130
- * 扩展组件列表(兼容老版)
131
- */
132
- @property({
133
- objectRef: 'Module',
134
- isArray: true,
135
- defaultValue: [],
136
- })
137
- componentDependencies: Array<Module> = [];
138
-
139
127
  /**
140
128
  * 全局缩放开关
141
129
  */
@@ -736,162 +724,6 @@ export class Frontend extends BaseNode {
736
724
  return node;
737
725
  }
738
726
 
739
- getModuleExistingNames(excludedList: Array<Module> = []) {
740
- const excludedSet = new Set(excludedList);
741
- return ((this.componentDependencies as Module[]) || [])
742
- .filter((item) => !excludedSet.has(item))
743
- .map((item) => item?.name);
744
- }
745
- getModuleUniqueName(name = 'module1') {
746
- return utils.unique(name, this.getModuleExistingNames(), undefined, false);
747
- }
748
-
749
- /**
750
- * 插入模块
751
- * @internal
752
- * @param name 模块名称,如果不填会自动生成一个唯一名称
753
- */
754
- _insertModuleAt(name: string, index: number): Module;
755
-
756
- /**
757
- * 插入模块
758
- * @internal
759
- * @param moduleOptions 模块参数
760
- */
761
- _insertModuleAt(moduleOptions: Partial<Module>, index: number): Module;
762
-
763
- /**
764
- * 插入模块
765
- * @internal
766
- * @param module 已有的模块实例
767
- */
768
- _insertModuleAt(module: Module, index: number): Module;
769
-
770
- _insertModuleAt(options: string | Partial<Module> | Module, index: number) {
771
- const moduleOptions: any = {};
772
- const relationOptions = { parentNode: this, parentKey: 'componentDependencies' };
773
- const Module = getConceptConstructor('Module');
774
- let module: Module;
775
- if (!options) {
776
- module = Module.from(
777
- {
778
- ...moduleOptions,
779
- name: this.getModuleUniqueName(),
780
- },
781
- this,
782
- 'componentDependencies',
783
- );
784
- } else if (typeof options === 'string') {
785
- module = Module.from(
786
- {
787
- ...moduleOptions,
788
- name: options,
789
- },
790
- this,
791
- 'componentDependencies',
792
- );
793
- } else if (asserts.isModule(options)) {
794
- options.ensureDelete(); // 同一实例不支持多处存在
795
- module = options;
796
- Object.assign(module, relationOptions);
797
- } else {
798
- module = Module.from(
799
- {
800
- ...moduleOptions,
801
- ...options,
802
- },
803
- this,
804
- 'componentDependencies',
805
- );
806
- }
807
- this.componentDependencies.splice(index, 0, module);
808
- return module;
809
- }
810
-
811
- /**
812
- * 插入模块
813
- * @param name 模块名称,如果不填会自动生成一个唯一名称
814
- */
815
- insertModuleAt(name: string, index: number): Module;
816
-
817
- /**
818
- * 插入模块
819
- * @param moduleOptions 模块参数
820
- */
821
- insertModuleAt(moduleOptions: Partial<Module>, index: number): Module;
822
-
823
- /**
824
- * 插入模块
825
- * @param module 已有的模块实例
826
- */
827
- insertModuleAt(module: Module, index: number): Module;
828
-
829
- insertModuleAt(options: string | Partial<Module> | Module, index: number) {
830
- const node = this._insertModuleAt(options as any, index);
831
- node.create({
832
- index,
833
- parentNode: this,
834
- parentKey: 'componentDependencies',
835
- });
836
- return node;
837
- }
838
-
839
- /**
840
- * 添加模块
841
- * @internal
842
- * @param name 模块名称,如果不填会自动生成一个唯一名称
843
- */
844
- _addModule(name?: string): Module;
845
-
846
- /**
847
- * 添加模块
848
- * @internal
849
- * @param moduleOptions 模块参数
850
- */
851
- _addModule(moduleOptions: Partial<Module>): Module;
852
-
853
- /**
854
- * 添加模块
855
- * @internal
856
- * @param module 已有的模块实例
857
- */
858
- _addModule(module: Module): Module;
859
-
860
- _addModule(options?: string | Partial<Module> | Module) {
861
- const index = this.componentDependencies.length;
862
- return this._insertModuleAt(options as any, index);
863
- }
864
-
865
- /**
866
- * 添加模块
867
- * @internal
868
- * @param name 模块名称,如果不填会自动生成一个唯一名称
869
- */
870
- addModule(name?: string): Module;
871
-
872
- /**
873
- * 添加模块
874
- * @param moduleOptions 模块参数
875
- */
876
- addModule(moduleOptions: Partial<Module>): Module;
877
-
878
- /**
879
- * 添加模块
880
- * @param module 已有的模块实例
881
- */
882
- addModule(module: Module): Module;
883
-
884
- addModule(options?: string | Partial<Module> | Module) {
885
- const node = this._addModule(options as any);
886
- const index = this.componentDependencies.indexOf(node);
887
- node.create({
888
- index,
889
- parentNode: this,
890
- parentKey: 'componentDependencies',
891
- });
892
- return node;
893
- }
894
-
895
727
  /**
896
728
  * 删除元素绑定事件
897
729
  * @param name 元素绑定事件名称
@@ -1116,62 +948,6 @@ export class Frontend extends BaseNode {
1116
948
  return params;
1117
949
  }
1118
950
 
1119
- /**
1120
- * 删除模块
1121
- * @param name 模块名称
1122
- */
1123
- removeModule(name: string): void;
1124
-
1125
- /**
1126
- * 删除模块
1127
- * @param module 已有的模块实例
1128
- */
1129
- removeModule(module: Module): void;
1130
-
1131
- removeModule(options: string | Module) {
1132
- let module: Module;
1133
- if (typeof options === 'string') {
1134
- module = (this.componentDependencies as Module[]).find((item) => item.name === options);
1135
- if (!module) {
1136
- throw new Error('找不到模块 ' + options);
1137
- }
1138
- } else {
1139
- module = options;
1140
- }
1141
- return module.delete();
1142
- }
1143
-
1144
- __removeModule(module: Module) {
1145
- const parentKey = module.parentKey;
1146
- const params: Params = {
1147
- parentNode: this,
1148
- parentKey,
1149
- index: -1,
1150
- object: null,
1151
- oldObject: module,
1152
- };
1153
- if (parentKey) {
1154
- params.parentKey = parentKey;
1155
- // @ts-ignore
1156
- const t = this.__v_raw || this;
1157
- // @ts-ignore
1158
- const n = module.__v_raw || module;
1159
- if (Array.isArray((t as any)[parentKey])) {
1160
- // @ts-ignore
1161
- const index = (t as any)[parentKey].findIndex((el) => (el.__v_raw || el) === n);
1162
- ~index && (this as any)[parentKey].splice(index, 1);
1163
- params.index = index;
1164
- } else {
1165
- const q = (t as any)[parentKey];
1166
- if ((q.__v_raw || q) === n) {
1167
- params.index = 0;
1168
- (this as any)[parentKey] = undefined;
1169
- }
1170
- }
1171
- }
1172
- return params;
1173
- }
1174
-
1175
951
  /**
1176
952
  * 删除国际化信息
1177
953
  * @param name 国际化信息名称
@@ -1233,10 +1009,6 @@ export class Frontend extends BaseNode {
1233
1009
  // 自动生成的代码已结束。下面可以手动编写。
1234
1010
  //================================================================================
1235
1011
 
1236
- findComponentDependencyByName(name: string) {
1237
- return this.componentDependencies.find((componentDependency) => componentDependency.name === name);
1238
- }
1239
-
1240
1012
  /**
1241
1013
  * @param path 路径
1242
1014
  * path 为要查找路径:如 /dashboard/student/list、/dashboard/student/list
@@ -1300,7 +1072,9 @@ export class Frontend extends BaseNode {
1300
1072
  * @param name 一般不用传,用于 rename
1301
1073
  */
1302
1074
  getEmbeddedFilePath(name = this.name) {
1303
- return `/embedded/${this.rootNode?.name || this.parentNode.name}/frontends/${name}.ts`;
1075
+ return `/embedded/${this.getAncestor('App')?.name}/frontendTypes/${
1076
+ this.getAncestor('FrontendType')?.name
1077
+ }/frontends/${name}.ts`;
1304
1078
  }
1305
1079
 
1306
1080
  @withSourceMapGenerator
@@ -1358,28 +1132,6 @@ export class Frontend extends BaseNode {
1358
1132
  return basePath;
1359
1133
  }
1360
1134
 
1361
- genCustomAssetsInfo(prefix: string) {
1362
- const custom: AssetsInfo = {
1363
- js: [],
1364
- css: [],
1365
- names: [],
1366
- };
1367
- const existingSet = new Set();
1368
- this.componentDependencies.forEach((dep) => {
1369
- const { name, version } = dep;
1370
- const jsName = `${prefix}/packages/${name}@${version}/dist-theme/index.js`;
1371
- if (!existingSet.has(jsName)) {
1372
- existingSet.add(jsName);
1373
- custom.js.push(jsName);
1374
- if (utils.shouldLoadCss(name, version)) {
1375
- custom.css.push(`${prefix}/packages/${name}@${version}/dist-theme/index.css`);
1376
- }
1377
- custom.names.push(name);
1378
- }
1379
- });
1380
- return custom;
1381
- }
1382
-
1383
1135
  getExtensionsCallbackLogics() {
1384
1136
  let resultLogics: string[] = [];
1385
1137
  this.views.forEach((item: View) => {
@@ -10,6 +10,9 @@ import {
10
10
  import { BindAttribute, CallLogic, TypeAnnotation } from '..';
11
11
  import { ElementToVueOptions } from './ViewElement__';
12
12
  import { findConceptKeyWordByNamespace } from '../utils';
13
+ import type View from './View__';
14
+ import BusinessComponent from './BusinessComponent__';
15
+ import FrontendType from './FrontendType__';
13
16
 
14
17
  //================================================================================
15
18
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
@@ -78,15 +81,20 @@ export class Identifier extends LogicItem {
78
81
  globalDataMap: {
79
82
  [name: string]: boolean;
80
83
  } = {
81
- $route: true,
82
- $global: true,
83
- $refs: true,
84
- };
84
+ $route: true,
85
+ $global: true,
86
+ $refs: true,
87
+ };
85
88
 
86
89
  isEnum() {
87
90
  return findConceptKeyWordByNamespace(this.namespace) === 'enums';
88
91
  }
89
92
 
93
+ get isFrontendVariables() {
94
+ const frontendType = this.getAncestor('FrontendType') as FrontendType;
95
+ return this.namespace?.startsWith(`app.frontendTypes.${frontendType?.kind}.frontends`) && this.namespace?.endsWith('variables');
96
+ }
97
+
90
98
  toVue(options?: ElementToVueOptions): string {
91
99
  let { name } = this;
92
100
  const { namespace } = this;
@@ -98,7 +106,7 @@ export class Identifier extends LogicItem {
98
106
  this.namespace.endsWith('nasl.process')
99
107
  ) {
100
108
  name = `$global.${this.name}`;
101
- } else if (this.namespace.startsWith('app.frontends') && this.namespace.endsWith('variables')) {
109
+ } else if (this.isFrontendVariables) {
102
110
  name = `$global.frontendVariables.${this.name}`;
103
111
  } else if (this.isEnum()) {
104
112
  let enumName = this.name;
@@ -119,7 +127,7 @@ export class Identifier extends LogicItem {
119
127
  if (namespace) {
120
128
  if (namespace.startsWith('nasl.')) {
121
129
  name = `${namespace}.${this.name}`;
122
- } else if (namespace.startsWith('app.frontends') && namespace.endsWith('variables')) {
130
+ } else if (this.isFrontendVariables) {
123
131
  name = `nasl.frontendVariables.${this.name}`;
124
132
  } else if (this.isEnum()) {
125
133
  let enumName = this.name;
@@ -144,7 +152,7 @@ export class Identifier extends LogicItem {
144
152
  this.namespace.endsWith('nasl.process')
145
153
  ) {
146
154
  name = `$global.${this.name}`;
147
- } else if (namespace.startsWith('app.frontends') && namespace.endsWith('variables')) {
155
+ } else if (this.isFrontendVariables) {
148
156
  name = `$global.frontendVariables.${this.name}`;
149
157
  } else if (this.isEnum()) {
150
158
  let enumName = this.name;
@@ -167,19 +175,23 @@ export class Identifier extends LogicItem {
167
175
  return this.isViewOrGlobalDataVariable() ? `this.${name}` : name;
168
176
  }
169
177
 
178
+ get likeComponent(): View | BusinessComponent {
179
+ return this.view || (this?.getAncestor('BusinessComponent') as BusinessComponent);
180
+ }
181
+
170
182
  // 页面/全局 级别的变量
171
183
  isViewOrGlobalDataVariable() {
172
184
  const dataMap: {
173
185
  [name: string]: boolean;
174
186
  } = {};
175
- this.view?.params?.forEach((param) => {
187
+ this.likeComponent?.params?.forEach((param) => {
176
188
  dataMap[param.name] = true;
177
189
  });
178
- this.view?.variables?.forEach((variable) => {
190
+ this.likeComponent?.variables?.forEach((variable) => {
179
191
  dataMap[variable.name] = true;
180
192
  });
181
193
  // 目前前端逻辑也会被当成可选变量(以datasource为典型)
182
- this.view?.logics?.forEach((logics) => {
194
+ this.likeComponent?.logics?.forEach((logics) => {
183
195
  dataMap[logics.name] = true;
184
196
  });
185
197
  const { parentNode, namespace, jsName: name } = this;
@@ -195,7 +207,7 @@ export class Identifier extends LogicItem {
195
207
  namespace?.endsWith('nasl.auth') ||
196
208
  namespace?.endsWith('nasl.configuration') ||
197
209
  namespace?.endsWith('nasl.process') ||
198
- (namespace?.startsWith('app.frontends') && namespace?.endsWith('variables')) ||
210
+ (this.isFrontendVariables) ||
199
211
  this.isEnum()) &&
200
212
  !isMemberExpressionProperty
201
213
  );
@@ -205,6 +217,10 @@ export class Identifier extends LogicItem {
205
217
  return this.name || '-';
206
218
  }
207
219
 
220
+ get businessComponent() {
221
+ return this.getAncestor('BusinessComponent') as BusinessComponent;
222
+ }
223
+
208
224
  @withSourceMapGenerator
209
225
  *toEmbeddedTS(state = createCompilerState(), options?: any): TranslatorGenerator {
210
226
  const self = this;
@@ -214,7 +230,7 @@ export class Identifier extends LogicItem {
214
230
  }
215
231
  // 只有data-source可以是函数 ,也可能是属性
216
232
  if (asserts.isBindAttribute(self.parentNode) && self.parentNode.name === 'data-source') {
217
- const { view } = self;
233
+ const view = self.view || self.getAncestor('BusinessComponent') as BusinessComponent;
218
234
  const viewLogics = view.logics;
219
235
  const findLogic = viewLogics.find((item) => item.name === self.name);
220
236
  if (findLogic) {
@@ -222,7 +238,7 @@ export class Identifier extends LogicItem {
222
238
  }
223
239
  }
224
240
  // 全局变量在不是页面的地方放置,就会报错
225
- if (self.namespace?.startsWith('app.frontends') && self.namespace?.endsWith('variables') && !self.frontend) {
241
+ if (self.isFrontendVariables && !self.frontend) {
226
242
  return '__FRONTENDVARIABLES__';
227
243
  }
228
244
  // 如果是nasl.util.Enum 的子集里的 Identifier > MemberExpression > Argument > callfunction
@@ -66,6 +66,7 @@ export class LogicItem extends BaseNode {
66
66
  | 'Comment'
67
67
  | 'CallLogic'
68
68
  | 'CallConnector'
69
+ | 'CallEvent'
69
70
  | 'CallFunction'
70
71
  | 'CallInterface'
71
72
  | 'CallAuthInterface'
@@ -33,6 +33,7 @@ import type CallInterface from './CallInterface__';
33
33
  import type CallLogic from './CallLogic__';
34
34
  import { CUSTOM_CONNECTOR_EDITABLE_SUFFIX } from './basics/constants';
35
35
  import type Interface from './Interface__';
36
+ import type BusinessComponent from './BusinessComponent__';
36
37
 
37
38
  //================================================================================
38
39
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
@@ -76,7 +77,7 @@ export class Logic extends BaseNode {
76
77
  */
77
78
  @property('concept')
78
79
  // @ts-ignore
79
- readonly concept!: 'Logic' | 'AuthLogic' | 'AuthLogicForCallInterface';
80
+ readonly concept!: 'Logic' | 'AuthLogic' | 'AuthLogicForCallInterface' | 'BusinessLogic';
80
81
 
81
82
  /**
82
83
  * 逻辑名称
@@ -1545,26 +1546,32 @@ export class Logic extends BaseNode {
1545
1546
  if (Array.isArray(this.variables)) {
1546
1547
  varList.push(...this.variables);
1547
1548
  }
1548
- if (this.view) {
1549
- // 页面下,变量名不可以跟逻辑名相同,会有js 翻译问题
1549
+ if (this.likeComponent) {
1550
+ // 页面/业务组件下,变量名不可以跟逻辑名相同,会有js 翻译问题
1550
1551
  varList.push(this);
1551
1552
 
1552
- if (Array.isArray(this.view.params)) {
1553
- varList.push(...this.view.params);
1553
+ if (Array.isArray(this.likeComponent.params)) {
1554
+ varList.push(...this.likeComponent.params);
1554
1555
  }
1555
- if (Array.isArray(this.view.variables)) {
1556
- varList.push(...this.view.variables);
1556
+ if (Array.isArray(this.likeComponent.variables)) {
1557
+ varList.push(...this.likeComponent.variables);
1557
1558
  }
1558
1559
  }
1559
-
1560
- this.traverseChildren((el) => {
1561
- if (el?.concept === 'ForEachStatement') {
1562
- if ((el as ForEachStatement)?.item) {
1563
- varList.push((el as ForEachStatement)?.item);
1564
- }
1565
- if ((el as ForEachStatement)?.index) {
1566
- varList.push((el as ForEachStatement)?.index);
1567
- }
1560
+ this.traverseChildren((node) => {
1561
+ switch (node?.concept) {
1562
+ case 'ForEachStatement':
1563
+ if (node.item) {
1564
+ varList.push(node?.item);
1565
+ }
1566
+ if (node.index) {
1567
+ varList.push(node?.index);
1568
+ }
1569
+ break;
1570
+ case 'AnonymousFunction':
1571
+ node.params?.forEach((param: Param) => {
1572
+ varList.push(param);
1573
+ });
1574
+ break;
1568
1575
  }
1569
1576
  });
1570
1577
  return varList.filter((item) => !excludedSet.has(item)).map((item) => item?.name);
@@ -1805,11 +1812,11 @@ export class Logic extends BaseNode {
1805
1812
  const IDENTIFIERMAP = new Set<Variable | Return>();
1806
1813
 
1807
1814
  if (!prefix) {
1808
- code += `export function ${self.name}`;
1815
+ code += `export function ${self.tsName}`;
1809
1816
  } else if (prefix === 'noExport') {
1810
- code += `function ${self.name}`;
1817
+ code += `function ${self.tsName}`;
1811
1818
  } else if (prefix === 'inObject') {
1812
- code += `${self.name}`;
1819
+ code += `${self.tsName}`;
1813
1820
  }
1814
1821
  if (self.typeParams?.length) {
1815
1822
  code += '<';
@@ -2369,10 +2376,12 @@ ${indent(state.tabSize)} */\n`;
2369
2376
  }
2370
2377
  if (asserts.isFrontendLibrary(this.parentNode)) {
2371
2378
  _path += `/frontends/${this.parentNode.type}`;
2372
- } else if (this.parentNode.concept === 'BindEvent' && this.parentNode?.parentNode.concept === 'Frontend') {
2373
- _path += `/frontends/${this.parentNode.parentNode.name}/bindEvents/${name}.ts`;
2379
+ } else if (this.parentNode.concept === 'BindEvent' && this.getAncestor('Frontend')) {
2380
+ _path += `/frontendTypes/${this.getAncestor('FrontendType')?.name}/frontends/${
2381
+ this.getAncestor('Frontend')?.name
2382
+ }/bindEvents/${name}.ts`;
2374
2383
  }
2375
- return `/embedded/${this.app.name}${_path}/logics/${name}.ts`;
2384
+ return `/embedded/${this.getAncestor('App')?.name}${_path}/logics/${name}.ts`;
2376
2385
  }
2377
2386
 
2378
2387
  *toEmbeddedTSFile(): EmbeddedTSFileGenerator {
@@ -2490,7 +2499,7 @@ ${indent(state.tabSize)} */\n`;
2490
2499
  }
2491
2500
 
2492
2501
  get pathName(): string {
2493
- if (this.view) {
2502
+ if (this.likeComponent) {
2494
2503
  return this.getEventLogicName('chinese');
2495
2504
  }
2496
2505
 
@@ -2580,6 +2589,10 @@ ${indent(state.tabSize)} */\n`;
2580
2589
  return this.getAncestor('Integration');
2581
2590
  }
2582
2591
 
2592
+ get likeComponent(): View | BusinessComponent {
2593
+ return this.view || (this?.getAncestor('BusinessComponent') as BusinessComponent);
2594
+ }
2595
+
2583
2596
  //================================================================================
2584
2597
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
2585
2598
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
@@ -276,7 +276,7 @@ export class MemberExpression extends LogicItem {
276
276
  (this.object as Identifier)?.isEnum() &&
277
277
  this.property?.concept === 'Identifier'
278
278
  ) {
279
- return this.isDefaultValueExpression() ? this.property?.name : `"${this.property?.name}"`;
279
+ return this.isDefaultValueExpression(!!state?.getVuePrototype) ? this.property?.name : `"${this.property?.name}"`;
280
280
  }
281
281
  if (
282
282
  this.object?.__TypeAnnotation?.sortedTypeKey?.startsWith('nasl.collection.Map') &&
@@ -379,8 +379,8 @@ export class MemberExpression extends LogicItem {
379
379
  return (this.object as Identifier)?.isEnum?.();
380
380
  }
381
381
 
382
- isDefaultValueExpression() {
383
- return this.parentNode instanceof DefaultValue;
382
+ isDefaultValueExpression(getVuePrototype: boolean) {
383
+ return this.parentNode instanceof DefaultValue && getVuePrototype;
384
384
  }
385
385
 
386
386
  // 方便快速取值,遍历获取value
@@ -1179,13 +1179,11 @@ export class NewComposite extends LogicItem {
1179
1179
  } else if (typeAnnotation.typeKind !== 'anonymousStructure') {
1180
1180
  // 实体、数据结构默认值使用new时需要改成vue.prototype才能获取到方法
1181
1181
  if (state?.getVuePrototype) {
1182
- code += `const obj = Vue.prototype.$genInitFromSchema('${
1183
- typeAnnotation.sortedTypeKey
1184
- }', Vue.prototype.$utils['New'](${typeAnnotation.toJS(state)}));\n`;
1182
+ code += `const obj = Vue.prototype.$genInitFromSchema('${typeAnnotation.sortedTypeKey
1183
+ }', Vue.prototype.$utils['New'](${typeAnnotation.toJS(state)}));\n`;
1185
1184
  } else {
1186
- code += `const obj = this.$genInitFromSchema('${
1187
- typeAnnotation.sortedTypeKey
1188
- }', this.$utils['New'](${typeAnnotation.toJS(state)}));\n`;
1185
+ code += `const obj = this.$genInitFromSchema('${typeAnnotation.sortedTypeKey
1186
+ }', this.$utils['New'](${typeAnnotation.toJS(state)}));\n`;
1189
1187
  }
1190
1188
  const rightMap = new Map();
1191
1189
  this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
@@ -0,0 +1,101 @@
1
+ //================================================================================
2
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
3
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
4
+ //================================================================================
5
+ import { EventPayload, Params } from '../common/EventEmitter';
6
+ import { concept, excludedInJSON, property, getConceptConstructor, getBaseNode } from '../decorators';
7
+
8
+ import * as utils from '../utils';
9
+ import * as types from './utils/types';
10
+ import * as asserts from './utils/asserts';
11
+ import { v4 as uuidv4 } from 'uuid';
12
+ import Param from './Param__';
13
+
14
+ /**
15
+ * 参数分组
16
+ */
17
+ @concept('参数分组')
18
+ export class ParamWithGroup extends Param {
19
+ /** 类名 */
20
+ static readonly ConceptName: string = 'ParamWithGroup';
21
+
22
+ /** 继承链 */
23
+ static readonly inheritanceChain: string[] = ['Param', 'BaseNode'];
24
+
25
+ /**
26
+ * 产品概念
27
+ */
28
+ @property('concept')
29
+ // @ts-ignore
30
+ readonly concept!: 'ParamWithGroup';
31
+
32
+ /**
33
+ * 参数分组标题
34
+ */
35
+ @property()
36
+ title!: string;
37
+
38
+ /**
39
+ * 类别
40
+ */
41
+ @property()
42
+ group!: string;
43
+
44
+ /**
45
+ * @param source 需要合并的部分参数
46
+ */
47
+ constructor(source?: Partial<any>) {
48
+ source = Object.assign({}, ParamWithGroup.getDefaultOptions(), source);
49
+ super(source);
50
+ super.subConstructor(source);
51
+ }
52
+
53
+ static from(source: any, parentNode?: any, parentKey?: string): any {
54
+ return super.from(source, parentNode, parentKey) as any;
55
+ }
56
+
57
+ /**
58
+ * 设置参数分组标题
59
+ */
60
+ setTitle(title: string) {
61
+ const object = {
62
+ title,
63
+ };
64
+ this.update({
65
+ ...object,
66
+ });
67
+ }
68
+
69
+ /**
70
+ * 设置类别
71
+ */
72
+ setGroup(group: string) {
73
+ const object = {
74
+ group,
75
+ };
76
+ this.update({
77
+ ...object,
78
+ });
79
+ }
80
+
81
+ //================================================================================
82
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
83
+ // 自动生成的代码已结束。下面可以手动编写。
84
+ //================================================================================
85
+ static getDefaultOptions() {
86
+ return {
87
+ group: '主要属性',
88
+ };
89
+ }
90
+
91
+ //================================================================================
92
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
93
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
94
+ //================================================================================
95
+ }
96
+
97
+ export default ParamWithGroup;
98
+ //================================================================================
99
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
100
+ // 自动生成的代码已结束。下面可以手动编写。
101
+ //================================================================================