@oinone/kunlun-meta 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/oinone-kunlun-meta.esm.js +496 -0
  2. package/dist/types/index.d.ts +1 -0
  3. package/dist/types/src/element/ActionElement.d.ts +15 -0
  4. package/dist/types/src/element/ApiElement.d.ts +21 -0
  5. package/dist/types/src/element/ClearElement.d.ts +9 -0
  6. package/dist/types/src/element/ConfigElement.d.ts +6 -0
  7. package/dist/types/src/element/ContextElement.d.ts +9 -0
  8. package/dist/types/src/element/CustomElement.d.ts +7 -0
  9. package/dist/types/src/element/FieldElement.d.ts +25 -0
  10. package/dist/types/src/element/IBaseElement.d.ts +5 -0
  11. package/dist/types/src/element/PropElement.d.ts +6 -0
  12. package/dist/types/src/element/RequestElement.d.ts +9 -0
  13. package/dist/types/src/element/ResponseElement.d.ts +9 -0
  14. package/dist/types/src/element/SubscribeElement.d.ts +9 -0
  15. package/dist/types/src/element/ValidationElement.d.ts +12 -0
  16. package/dist/types/src/element/ViewElement.d.ts +15 -0
  17. package/dist/types/src/element/WidgetElement.d.ts +23 -0
  18. package/dist/types/src/element/index.d.ts +14 -0
  19. package/dist/types/src/global-config/index.d.ts +2 -0
  20. package/dist/types/src/global-config/runtime-config.d.ts +14 -0
  21. package/dist/types/src/global-config/type.d.ts +26 -0
  22. package/dist/types/src/index.d.ts +5 -0
  23. package/dist/types/src/metadata/constant/config.d.ts +1 -0
  24. package/dist/types/src/metadata/constant/index.d.ts +2 -0
  25. package/dist/types/src/metadata/constant/module-name.d.ts +20 -0
  26. package/dist/types/src/metadata/fragment/action.d.ts +6 -0
  27. package/dist/types/src/metadata/fragment/field.d.ts +2 -0
  28. package/dist/types/src/metadata/fragment/func.d.ts +2 -0
  29. package/dist/types/src/metadata/fragment/index.d.ts +13 -0
  30. package/dist/types/src/metadata/fragment/menu.d.ts +2 -0
  31. package/dist/types/src/metadata/fragment/model.d.ts +2 -0
  32. package/dist/types/src/metadata/fragment/page.d.ts +2 -0
  33. package/dist/types/src/metadata/index.d.ts +4 -0
  34. package/dist/types/src/metadata/runtime-fragment/action.d.ts +8 -0
  35. package/dist/types/src/metadata/runtime-fragment/function.d.ts +3 -0
  36. package/dist/types/src/metadata/runtime-fragment/index.d.ts +20 -0
  37. package/dist/types/src/metadata/runtime-fragment/model.d.ts +2 -0
  38. package/dist/types/src/metadata/runtime-fragment/module.d.ts +2 -0
  39. package/dist/types/src/metadata/runtime-fragment/view.d.ts +6 -0
  40. package/dist/types/src/metadata/types/dsl-node.d.ts +12 -0
  41. package/dist/types/src/metadata/types/enumeration.d.ts +18 -0
  42. package/dist/types/src/metadata/types/index.d.ts +8 -0
  43. package/dist/types/src/metadata/types/layout.d.ts +4 -0
  44. package/dist/types/src/metadata/types/model.d.ts +573 -0
  45. package/dist/types/src/metadata/types/tag.d.ts +23 -0
  46. package/dist/types/src/metadata/types/user.d.ts +22 -0
  47. package/dist/types/src/metadata/types/value.d.ts +3 -0
  48. package/dist/types/src/metadata/types/view.d.ts +170 -0
  49. package/dist/types/src/plugin-loader/factory/PluginLoaderFactory.d.ts +4 -0
  50. package/dist/types/src/plugin-loader/factory/index.d.ts +1 -0
  51. package/dist/types/src/plugin-loader/index.d.ts +5 -0
  52. package/dist/types/src/plugin-loader/loader/CJSPluginLoader.d.ts +7 -0
  53. package/dist/types/src/plugin-loader/loader/CSSPluginLoader.d.ts +7 -0
  54. package/dist/types/src/plugin-loader/loader/ESMPluginLoader.d.ts +7 -0
  55. package/dist/types/src/plugin-loader/loader/IIFEPluginLoader.d.ts +7 -0
  56. package/dist/types/src/plugin-loader/loader/LoadedEvent.d.ts +4 -0
  57. package/dist/types/src/plugin-loader/loader/PluginLoader.d.ts +5 -0
  58. package/dist/types/src/plugin-loader/loader/RemotePluginLoader.d.ts +5 -0
  59. package/dist/types/src/plugin-loader/loader/UMDPluginLoader.d.ts +6 -0
  60. package/dist/types/src/plugin-loader/loader/index.d.ts +1 -0
  61. package/dist/types/src/plugin-loader/typing/index.d.ts +2 -0
  62. package/dist/types/src/plugin-loader/typing/load-option.d.ts +48 -0
  63. package/dist/types/src/plugin-loader/typing/loader-config.d.ts +38 -0
  64. package/dist/types/src/plugin-loader/util/PluginLoadHelper.d.ts +7 -0
  65. package/dist/types/src/plugin-loader/util/index.d.ts +1 -0
  66. package/dist/types/src/util/element.d.ts +16 -0
  67. package/dist/types/src/util/field.d.ts +7 -0
  68. package/dist/types/src/util/helper.d.ts +2 -0
  69. package/dist/types/src/util/index.d.ts +6 -0
  70. package/dist/types/src/util/ke-common.d.ts +6 -0
  71. package/dist/types/src/util/lang.d.ts +4 -0
  72. package/dist/types/src/util/validation-utils.d.ts +3 -0
  73. package/index.ts +1 -0
  74. package/package.json +17 -0
  75. package/rollup.config.js +4 -0
  76. package/src/element/ActionElement.ts +20 -0
  77. package/src/element/ApiElement.ts +22 -0
  78. package/src/element/ClearElement.ts +10 -0
  79. package/src/element/ConfigElement.ts +7 -0
  80. package/src/element/ContextElement.ts +10 -0
  81. package/src/element/CustomElement.ts +22 -0
  82. package/src/element/FieldElement.ts +41 -0
  83. package/src/element/IBaseElement.ts +5 -0
  84. package/src/element/PropElement.ts +7 -0
  85. package/src/element/RequestElement.ts +10 -0
  86. package/src/element/ResponseElement.ts +10 -0
  87. package/src/element/SubscribeElement.ts +10 -0
  88. package/src/element/ValidationElement.ts +17 -0
  89. package/src/element/ViewElement.ts +23 -0
  90. package/src/element/WidgetElement.ts +33 -0
  91. package/src/element/index.ts +14 -0
  92. package/src/global-config/index.ts +2 -0
  93. package/src/global-config/runtime-config.ts +83 -0
  94. package/src/global-config/type.ts +48 -0
  95. package/src/index.ts +5 -0
  96. package/src/metadata/constant/config.ts +1 -0
  97. package/src/metadata/constant/index.ts +2 -0
  98. package/src/metadata/constant/module-name.ts +21 -0
  99. package/src/metadata/fragment/action.ts +119 -0
  100. package/src/metadata/fragment/field.ts +42 -0
  101. package/src/metadata/fragment/func.ts +21 -0
  102. package/src/metadata/fragment/index.ts +20 -0
  103. package/src/metadata/fragment/menu.ts +35 -0
  104. package/src/metadata/fragment/model.ts +76 -0
  105. package/src/metadata/fragment/page.ts +17 -0
  106. package/src/metadata/index.ts +4 -0
  107. package/src/metadata/runtime-fragment/action.ts +159 -0
  108. package/src/metadata/runtime-fragment/function.ts +25 -0
  109. package/src/metadata/runtime-fragment/index.ts +36 -0
  110. package/src/metadata/runtime-fragment/model.ts +18 -0
  111. package/src/metadata/runtime-fragment/module.ts +11 -0
  112. package/src/metadata/runtime-fragment/view.ts +44 -0
  113. package/src/metadata/types/dsl-node.ts +14 -0
  114. package/src/metadata/types/enumeration.ts +19 -0
  115. package/src/metadata/types/index.ts +8 -0
  116. package/src/metadata/types/layout.ts +4 -0
  117. package/src/metadata/types/model.ts +823 -0
  118. package/src/metadata/types/tag.ts +24 -0
  119. package/src/metadata/types/user.ts +27 -0
  120. package/src/metadata/types/value.ts +3 -0
  121. package/src/metadata/types/view.ts +194 -0
  122. package/src/plugin-loader/factory/PluginLoaderFactory.ts +23 -0
  123. package/src/plugin-loader/factory/index.ts +1 -0
  124. package/src/plugin-loader/index.ts +33 -0
  125. package/src/plugin-loader/loader/CJSPluginLoader.ts +18 -0
  126. package/src/plugin-loader/loader/CSSPluginLoader.ts +29 -0
  127. package/src/plugin-loader/loader/ESMPluginLoader.ts +53 -0
  128. package/src/plugin-loader/loader/IIFEPluginLoader.ts +18 -0
  129. package/src/plugin-loader/loader/LoadedEvent.ts +24 -0
  130. package/src/plugin-loader/loader/PluginLoader.ts +12 -0
  131. package/src/plugin-loader/loader/RemotePluginLoader.ts +54 -0
  132. package/src/plugin-loader/loader/UMDPluginLoader.ts +50 -0
  133. package/src/plugin-loader/loader/index.ts +1 -0
  134. package/src/plugin-loader/typing/index.ts +2 -0
  135. package/src/plugin-loader/typing/load-option.ts +51 -0
  136. package/src/plugin-loader/typing/loader-config.ts +38 -0
  137. package/src/plugin-loader/util/PluginLoadHelper.ts +70 -0
  138. package/src/plugin-loader/util/index.ts +1 -0
  139. package/src/util/element.ts +154 -0
  140. package/src/util/field.ts +63 -0
  141. package/src/util/helper.ts +6 -0
  142. package/src/util/index.ts +6 -0
  143. package/src/util/ke-common.ts +25 -0
  144. package/src/util/lang.ts +8 -0
  145. package/src/util/validation-utils.ts +17 -0
@@ -0,0 +1,70 @@
1
+ import { PluginLoader as InternalPluginLoader } from '../loader';
2
+ import { CSSPlugin, JavascriptPlugin, PluginLoadDependencies, PluginLoadDependency, PluginLoadOption } from '../typing';
3
+
4
+ let counter = 1;
5
+
6
+ function isPluginLoadOption(plugin: unknown): plugin is PluginLoadOption {
7
+ return !!plugin;
8
+ }
9
+
10
+ export class PluginLoadHelper {
11
+ private constructor() {
12
+ // reject create object
13
+ }
14
+
15
+ public static async loadDependencies(dependencies: PluginLoadDependencies): Promise<void> {
16
+ let readyLoadDependencies: PluginLoadDependency[];
17
+ if (Array.isArray(dependencies)) {
18
+ readyLoadDependencies = dependencies;
19
+ } else {
20
+ readyLoadDependencies = [
21
+ {
22
+ type: 'umd',
23
+ dependencies
24
+ }
25
+ ];
26
+ }
27
+ await Promise.allSettled(
28
+ readyLoadDependencies.map((dependency) =>
29
+ InternalPluginLoader.loadDependencies(dependency.type, dependency.dependencies)
30
+ )
31
+ );
32
+ }
33
+
34
+ public static loadJavascript(plugins: JavascriptPlugin[]): Promise<void> {
35
+ return InternalPluginLoader.load(
36
+ plugins
37
+ .map((plugin): PluginLoadOption | undefined => {
38
+ if (typeof plugin === 'string') {
39
+ return {
40
+ id: `plugin-${counter++}`,
41
+ type: 'umd',
42
+ path: plugin
43
+ };
44
+ }
45
+ if (plugin.path) {
46
+ return {
47
+ id: `plugin-${counter++}`,
48
+ type: plugin.type || 'umd',
49
+ path: plugin.path
50
+ };
51
+ }
52
+ console.error('Invalid javascript plugin.', plugin);
53
+ return undefined;
54
+ })
55
+ .filter(isPluginLoadOption)
56
+ );
57
+ }
58
+
59
+ public static loadCSS(paths: CSSPlugin[]): Promise<void> {
60
+ return InternalPluginLoader.load(
61
+ paths.map((path): PluginLoadOption => {
62
+ return {
63
+ id: `plugin-css-${counter++}`,
64
+ type: 'css',
65
+ path
66
+ };
67
+ })
68
+ );
69
+ }
70
+ }
@@ -0,0 +1 @@
1
+ export * from './PluginLoadHelper';
@@ -0,0 +1,154 @@
1
+ import {
2
+ ActionElement,
3
+ ApiElement,
4
+ ClearElement,
5
+ ContextElement,
6
+ FieldElement,
7
+ PropElement,
8
+ RequestElement,
9
+ ResponseElement,
10
+ ViewElement
11
+ } from '../element';
12
+
13
+ import { IModelField, ElementType, IDslNode } from '../metadata';
14
+ import { deepClone } from './helper';
15
+
16
+ const createViewElement = (dslNode: IDslNode | undefined): ViewElement | null => {
17
+ if (!dslNode) {
18
+ return {} as ViewElement;
19
+ }
20
+ return !Array.isArray(dslNode) ? (deepClone(dslNode) as ViewElement) : null;
21
+ };
22
+
23
+ const createPropElements = (parentNode: IDslNode | undefined): PropElement[] => {
24
+ if (!parentNode || !parentNode.children) {
25
+ return [] as FieldElement[];
26
+ }
27
+ return parentNode.children
28
+ .filter((a) => a.tagName === ElementType.PROP)
29
+ .map((node) => {
30
+ return {
31
+ name: node.name,
32
+ textContent: node.textContent
33
+ } as FieldElement;
34
+ });
35
+ };
36
+
37
+ const createFieldElement = (fieldNode: IDslNode | undefined): FieldElement => {
38
+ if (!fieldNode) {
39
+ return {} as FieldElement;
40
+ }
41
+ return deepClone(fieldNode) as FieldElement;
42
+ };
43
+
44
+ const createFieldElements = (parentNode: IDslNode | undefined): FieldElement[] => {
45
+ if (!parentNode || !parentNode.children) {
46
+ return [] as FieldElement[];
47
+ }
48
+ return parentNode.children
49
+ .filter((a) => a.tagName === ElementType.FIELD)
50
+ .map((node) => {
51
+ return {
52
+ name: node.name,
53
+ textContent: node.textContent,
54
+ children: createFieldElements(node)
55
+ } as FieldElement;
56
+ });
57
+ };
58
+
59
+ /**
60
+ * 创建action元素
61
+ * @param actionNode
62
+ * @param parentDslNode actionNode所在的父节点
63
+ */
64
+ const createActionElement = (actionNode: IDslNode, parentDslNode: IDslNode): ActionElement => {
65
+ if (!parentDslNode) {
66
+ return {} as ActionElement;
67
+ }
68
+ const actionEle = deepClone(actionNode) as ActionElement;
69
+ const apiNode =
70
+ (parentDslNode.children &&
71
+ parentDslNode.children.find((d) => d.tagName === ElementType.API && d.name === actionEle.submitApi)) ||
72
+ null;
73
+ if (apiNode) {
74
+ const apiEle = createApiElement(parentDslNode, actionEle.submitApi);
75
+ if (!apiEle) {
76
+ return {} as ActionElement;
77
+ }
78
+ actionEle.api = apiEle;
79
+ }
80
+ return actionEle;
81
+ };
82
+
83
+ const createApiElement = (parentDslNode: IDslNode, apiName: string, dslFields?: IModelField[]) => {
84
+ const apiNode =
85
+ (parentDslNode.children &&
86
+ parentDslNode.children.find((d) => d.tagName === ElementType.API && d.name === apiName)) ||
87
+ null;
88
+ if (!apiNode) {
89
+ console.warn(`api not fund: ${apiName}`, parentDslNode);
90
+ return null;
91
+ }
92
+ const apiElement = deepClone(apiNode) as ApiElement;
93
+ if (!apiElement.fun) {
94
+ console.warn(`api fun not fund: ${apiName}`, parentDslNode);
95
+ }
96
+ if (!apiElement.type) {
97
+ console.warn(`api type not fund: ${apiName}`, parentDslNode);
98
+ }
99
+ apiElement.context = {
100
+ props: createPropElements(apiNode!.children.find((d) => d.tagName === ElementType.CONTEXT))
101
+ } as ContextElement;
102
+ apiElement.request = {
103
+ fields: mergeFields(
104
+ createFieldElements(apiNode!.children.find((d) => d.tagName === ElementType.REQUEST)),
105
+ dslFields
106
+ )
107
+ } as RequestElement;
108
+ apiElement.response = {
109
+ fields: mergeFields(
110
+ createFieldElements(apiNode!.children.find((d) => d.tagName === ElementType.RESPONSE)),
111
+ dslFields
112
+ )
113
+ } as ResponseElement;
114
+ apiElement.clear = {
115
+ fields: createFieldElements(apiNode!.children.find((d) => d.tagName === ElementType.CLEAR))
116
+ } as ClearElement;
117
+ return apiElement;
118
+ };
119
+
120
+ function mergeFields(fieldElements: FieldElement[], dslFields?: IModelField[]) {
121
+ return fieldElements && fieldElements.length
122
+ ? fieldElements
123
+ : (dslFields || []).map((a) => modelField2fieldElement(a));
124
+ }
125
+
126
+ const fieldElement2ModelField = (fieldElement: FieldElement): IModelField => {
127
+ return {
128
+ name: fieldElement.data,
129
+ ttype: fieldElement.ttype,
130
+ references: fieldElement.references!,
131
+ relatedTtype: fieldElement.relatedTtype
132
+ } as IModelField;
133
+ };
134
+
135
+ const modelField2fieldElement = (modelField: IModelField): FieldElement => {
136
+ return {
137
+ data: modelField.name,
138
+ name: modelField.name,
139
+ ttype: modelField.ttype,
140
+ references: modelField.references,
141
+ relatedTtype: modelField.relatedTtype
142
+ } as FieldElement;
143
+ };
144
+
145
+ export {
146
+ createViewElement,
147
+ createApiElement,
148
+ createPropElements,
149
+ createFieldElements,
150
+ createActionElement,
151
+ createFieldElement,
152
+ fieldElement2ModelField,
153
+ modelField2fieldElement
154
+ };
@@ -0,0 +1,63 @@
1
+ import { IModelField, ModelFieldType } from '../metadata/types';
2
+
3
+ const isSimpleField = (field: IModelField): boolean => {
4
+ switch (field.ttype) {
5
+ case ModelFieldType.Boolean:
6
+ case ModelFieldType.Integer:
7
+ case ModelFieldType.Long:
8
+ case ModelFieldType.Float:
9
+ case ModelFieldType.Currency:
10
+ case ModelFieldType.String:
11
+ case ModelFieldType.Email:
12
+ case ModelFieldType.Phone:
13
+ case ModelFieldType.ID:
14
+ case ModelFieldType.Date:
15
+ case ModelFieldType.DateTime:
16
+ case ModelFieldType.Time:
17
+ case ModelFieldType.Year:
18
+ case ModelFieldType.Enum:
19
+ case ModelFieldType.MultiEnum:
20
+ case ModelFieldType.HTML:
21
+ case ModelFieldType.Map:
22
+ case ModelFieldType.Text: {
23
+ return true;
24
+ }
25
+ default: {
26
+ return false;
27
+ }
28
+ }
29
+ };
30
+
31
+ const isComplexTtype = (ttype: ModelFieldType): boolean => {
32
+ return [
33
+ ModelFieldType.OneToOne,
34
+ ModelFieldType.OneToMany,
35
+ ModelFieldType.ManyToOne,
36
+ ModelFieldType.ManyToMany
37
+ ].includes(ttype);
38
+ };
39
+
40
+ const isDateTtype = (ttype: ModelFieldType): boolean => {
41
+ return [ModelFieldType.Date, ModelFieldType.DateTime, ModelFieldType.Year, ModelFieldType.Time].includes(ttype);
42
+ };
43
+ const isNumberTtype = (ttype: ModelFieldType): boolean => {
44
+ return [
45
+ ModelFieldType.ID,
46
+ ModelFieldType.UID,
47
+ ModelFieldType.Integer,
48
+ ModelFieldType.Long,
49
+ ModelFieldType.Float,
50
+ ModelFieldType.Currency
51
+ ].includes(ttype);
52
+ };
53
+
54
+ const isStringTtype = (ttype: ModelFieldType) => {
55
+ return [
56
+ ModelFieldType.String,
57
+ ModelFieldType.Text,
58
+ ModelFieldType.HTML,
59
+ ModelFieldType.Phone,
60
+ ModelFieldType.Email
61
+ ].includes(ttype);
62
+ };
63
+ export { isSimpleField, isComplexTtype, isDateTtype, isNumberTtype, isStringTtype };
@@ -0,0 +1,6 @@
1
+ function deepClone(obj) {
2
+ return obj == null ? obj : JSON.parse(JSON.stringify(obj));
3
+ }
4
+ export {
5
+ deepClone
6
+ };
@@ -0,0 +1,6 @@
1
+ export * from './element';
2
+ export * from './lang';
3
+ export * from './field';
4
+ export * from './helper';
5
+ export * from './ke-common';
6
+ export * from './validation-utils';
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 判断对象(特指除下划线外的属性的对象,所以取名为keObject)是否为空
3
+ * @param value
4
+ */
5
+ const isEmptyKeObject = (value: any): boolean => {
6
+ if (value === false || value === 0) {
7
+ return false;
8
+ }
9
+ if (!value) {
10
+ return true;
11
+ }
12
+ if (value instanceof Object) {
13
+ if (Object.keys((value as Record<string, unknown>) || {}).length === 0) {
14
+ return true;
15
+ }
16
+ // 老版本的代码这样判断的,猜测是 _ 开头的属于前端定义有特殊意义的属性,所以不算是业务对象的属性
17
+ const keys = Object.keys((value as Record<string, unknown>) || {}).filter((name) => !name.startsWith('_'));
18
+ return keys.length === 0;
19
+ }
20
+ if (Array.isArray(value) && value.length === 0) {
21
+ return true;
22
+ }
23
+ return false;
24
+ };
25
+ export { isEmptyKeObject };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Determine if the argument is shaped like a Promise
3
+ */
4
+ export function isPromise<T = unknown>(obj: unknown): obj is Promise<T> {
5
+ // allow any Promise/A+ compliant thenable.
6
+ // It's up to the caller to ensure that obj.then conforms to the spec
7
+ return !!obj && typeof (obj as { then: unknown }).then === 'function';
8
+ }
@@ -0,0 +1,17 @@
1
+ import { isEmptyKeObject } from './ke-common';
2
+
3
+ const isValidateEmpty = (value: any): boolean => {
4
+ return isEmptyKeObject(value) || (Array.isArray(value) && value.length === 0);
5
+ };
6
+
7
+ const isEmptyValue = (value: any): value is null => {
8
+ return (
9
+ value === undefined ||
10
+ value === null ||
11
+ value === '' ||
12
+ (Array.isArray(value) && value.length === 0) ||
13
+ (typeof value === 'object' && Object.keys(value).length === 0)
14
+ );
15
+ };
16
+
17
+ export { isValidateEmpty, isEmptyValue };