@alauda-fe/crd-form 0.0.8 → 1.0.1-alpha.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.
- package/README.md +7 -0
- package/fesm2022/alauda-fe-crd-form.mjs +3088 -0
- package/fesm2022/alauda-fe-crd-form.mjs.map +1 -0
- package/package.json +12 -14
- package/types/alauda-fe-crd-form.d.ts +934 -0
- package/esm2022/alauda-fe-crd-form.mjs +0 -5
- package/esm2022/lib/abstract/base-array.mjs +0 -117
- package/esm2022/lib/crd-form/component.mjs +0 -325
- package/esm2022/lib/crd-form/helper.mjs +0 -32
- package/esm2022/lib/crd-form.module.mjs +0 -115
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +0 -2
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +0 -58
- package/esm2022/lib/field-controls/form-item.component.mjs +0 -215
- package/esm2022/lib/field-controls/index.mjs +0 -8
- package/esm2022/lib/field-controls/module.mjs +0 -143
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +0 -80
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +0 -112
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +0 -88
- package/esm2022/lib/field-controls/operand-field.component.mjs +0 -877
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +0 -109
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +0 -116
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +0 -211
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +0 -2
- package/esm2022/lib/field-controls/widgets/index.mjs +0 -8
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +0 -169
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +0 -40
- package/esm2022/lib/field-controls/widgets/link/component.mjs +0 -68
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +0 -521
- package/esm2022/lib/field-controls/widgets/utils.mjs +0 -73
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +0 -94
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +0 -40
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +0 -240
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +0 -4
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +0 -54
- package/esm2022/lib/field-widgets/htpasswd/utils.mjs +0 -38
- package/esm2022/lib/field-widgets/index.mjs +0 -2
- package/esm2022/lib/remote-widgets/constants.mjs +0 -4
- package/esm2022/lib/remote-widgets/index.mjs +0 -4
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +0 -42
- package/esm2022/lib/remote-widgets/token.mjs +0 -7
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +0 -139
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +0 -189
- package/esm2022/lib/spec-descriptors/index.mjs +0 -4
- package/esm2022/lib/spec-descriptors/util.mjs +0 -13
- package/esm2022/lib/types/index.mjs +0 -89
- package/esm2022/lib/utils/capability.mjs +0 -306
- package/esm2022/lib/utils/constant.mjs +0 -22
- package/esm2022/lib/utils/helper.mjs +0 -196
- package/esm2022/lib/utils/index.mjs +0 -6
- package/esm2022/lib/utils/service-model.mjs +0 -12
- package/esm2022/lib/utils/util.mjs +0 -307
- package/esm2022/public-api.mjs +0 -13
- package/index.d.ts +0 -5
- package/lib/abstract/base-array.d.ts +0 -31
- package/lib/crd-form/component.d.ts +0 -58
- package/lib/crd-form/helper.d.ts +0 -7
- package/lib/crd-form.module.d.ts +0 -15
- package/lib/field-controls/expressions/expression-core.d.ts +0 -6
- package/lib/field-controls/expressions/props-expression.d.ts +0 -36
- package/lib/field-controls/form-item.component.d.ts +0 -19
- package/lib/field-controls/index.d.ts +0 -7
- package/lib/field-controls/module.d.ts +0 -23
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +0 -16
- package/lib/field-controls/operand-array-field-group.component.d.ts +0 -8
- package/lib/field-controls/operand-field-group.component.d.ts +0 -21
- package/lib/field-controls/operand-field.component.d.ts +0 -109
- package/lib/field-controls/widgets/array-table/component.d.ts +0 -8
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +0 -26
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +0 -45
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +0 -11
- package/lib/field-controls/widgets/index.d.ts +0 -7
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +0 -35
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +0 -3
- package/lib/field-controls/widgets/link/component.d.ts +0 -20
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +0 -85
- package/lib/field-controls/widgets/utils.d.ts +0 -17
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +0 -36
- package/lib/field-widgets/htpasswd/component.d.ts +0 -9
- package/lib/field-widgets/htpasswd/form.d.ts +0 -34
- package/lib/field-widgets/htpasswd/index.d.ts +0 -3
- package/lib/field-widgets/htpasswd/module.d.ts +0 -13
- package/lib/field-widgets/htpasswd/utils.d.ts +0 -15
- package/lib/field-widgets/index.d.ts +0 -1
- package/lib/remote-widgets/constants.d.ts +0 -3
- package/lib/remote-widgets/index.d.ts +0 -3
- package/lib/remote-widgets/remote-widget.service.d.ts +0 -28
- package/lib/remote-widgets/token.d.ts +0 -3
- package/lib/spec-descriptors/capability/capability.component.d.ts +0 -20
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +0 -34
- package/lib/spec-descriptors/index.d.ts +0 -3
- package/lib/spec-descriptors/util.d.ts +0 -4
- package/lib/types/index.d.ts +0 -136
- package/lib/utils/capability.d.ts +0 -62
- package/lib/utils/constant.d.ts +0 -12
- package/lib/utils/helper.d.ts +0 -58
- package/lib/utils/index.d.ts +0 -5
- package/lib/utils/service-model.d.ts +0 -44
- package/lib/utils/util.d.ts +0 -44
- package/public-api.d.ts +0 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alauda-fe-crd-form.mjs","sources":["../../../../libs/crd-form/src/lib/types/index.ts","../../../../libs/crd-form/src/lib/utils/service-model.ts","../../../../libs/crd-form/src/lib/utils/constant.ts","../../../../libs/crd-form/src/lib/utils/helper.ts","../../../../libs/crd-form/src/lib/utils/capability.ts","../../../../libs/crd-form/src/lib/utils/util.ts","../../../../libs/crd-form/src/lib/field-controls/expressions/props-expression.ts","../../../../libs/crd-form/src/lib/field-controls/form-item.component.ts","../../../../libs/crd-form/src/lib/field-controls/form-item.component.html","../../../../libs/crd-form/src/lib/field-controls/operand-array-field-group.component.ts","../../../../libs/crd-form/src/lib/field-controls/operand-array-field-group.component.html","../../../../libs/crd-form/src/lib/field-controls/operand-field-group.component.ts","../../../../libs/crd-form/src/lib/field-controls/operand-field-group.component.html","../../../../libs/crd-form/src/lib/field-controls/widgets/array-table/component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/array-table/template.html","../../../../libs/crd-form/src/lib/field-controls/widgets/basic-auth-secret/create/component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/basic-auth-secret/create/template.html","../../../../libs/crd-form/src/lib/field-controls/widgets/basic-auth-secret/component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/basic-auth-secret/template.html","../../../../libs/crd-form/src/lib/field-controls/widgets/k8s-resource-prefix/util.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/k8s-resource-prefix/component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/k8s-resource-prefix/template.html","../../../../libs/crd-form/src/lib/field-controls/widgets/link/component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/link/template.html","../../../../libs/crd-form/src/lib/field-controls/widgets/utils.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/resource-requirements/resource-requirements.component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/resource-requirements/resource-requirements.component.html","../../../../libs/crd-form/src/lib/field-controls/widgets/yaml-editor/yaml-editor.component.ts","../../../../libs/crd-form/src/lib/field-controls/widgets/yaml-editor/yaml-editor.component.html","../../../../libs/crd-form/src/lib/field-controls/operand-field.component.ts","../../../../libs/crd-form/src/lib/field-controls/operand-field.component.html","../../../../libs/crd-form/src/lib/field-controls/operand-advanced-field-group.component.ts","../../../../libs/crd-form/src/lib/field-controls/operand-advanced-field-group.component.html","../../../../libs/crd-form/src/lib/crd-form/helper.ts","../../../../libs/crd-form/src/lib/crd-form/component.ts","../../../../libs/crd-form/src/lib/crd-form/template.html","../../../../libs/crd-form/src/lib/abstract/base-array.ts","../../../../libs/crd-form/src/lib/field-controls/module.ts","../../../../libs/crd-form/src/lib/field-widgets/htpasswd/utils.ts","../../../../libs/crd-form/src/lib/field-widgets/htpasswd/form.ts","../../../../libs/crd-form/src/lib/field-widgets/htpasswd/component.ts","../../../../libs/crd-form/src/lib/field-widgets/htpasswd/module.ts","../../../../libs/crd-form/src/lib/spec-descriptors/util.ts","../../../../libs/crd-form/src/lib/spec-descriptors/capability/capability.component.ts","../../../../libs/crd-form/src/lib/spec-descriptors/capability/capability.component.html","../../../../libs/crd-form/src/lib/spec-descriptors/capability-list/capability-list.component.ts","../../../../libs/crd-form/src/lib/spec-descriptors/capability-list/capability-list.component.html","../../../../libs/crd-form/src/alauda-fe-crd-form.ts"],"sourcesContent":["import { JSONSchema6TypeName } from '@alauda-fe/dynamic-plugin-sdk';\nimport { ValidationErrors } from '@angular/forms';\nimport { Map } from 'immutable';\n\nexport enum Validations {\n maximum = 'maximum',\n minimum = 'minimum',\n maxLength = 'maxLength',\n minLength = 'minLength',\n pattern = 'pattern',\n required = 'required',\n}\n\nexport const SpecCapabilityUIPrefix = 'urn:alm:descriptor:com.tectonic.ui';\nexport const SpecCapabilityWidgetsPrefix = 'urn:alm:descriptor:widgets';\n\nexport enum SpecCapability {\n /**\n * 表单 UI 控件\n */\n\n // 基础 UI 控件\n text = 'urn:alm:descriptor:com.tectonic.ui:text',\n textarea = 'urn:alm:descriptor:com.tectonic.ui:textarea',\n yaml = 'urn:alm:descriptor:com.tectonic.ui:yaml',\n number = 'urn:alm:descriptor:com.tectonic.ui:number',\n podCount = 'urn:alm:descriptor:com.tectonic.ui:podCount',\n booleanSwitch = 'urn:alm:descriptor:com.tectonic.ui:booleanSwitch',\n radio = 'urn:alm:descriptor:com.tectonic.ui:radio:',\n tagsInput = 'urn:alm:descriptor:com.tectonic.ui:tagsInput',\n select = 'urn:alm:descriptor:com.tectonic.ui:select:',\n password = 'urn:alm:descriptor:com.tectonic.ui:password',\n confirmPassword = 'urn:alm:descriptor:com.tectonic.ui:password:confirm',\n externalPassword = 'urn:alm:descriptor:com.tectonic.ui:externalPassword',\n\n // 高级 UI 控件 widgets\n widgets = 'urn:alm:descriptor:widgets:',\n remote = 'urn:alm:descriptor:remote:',\n k8sResourcePrefix = 'urn:alm:descriptor:io.kubernetes:',\n basicAuthSecret = 'urn:alm:descriptor:com.tectonic.ui:basicAuthSecret',\n resourceRequirements = 'urn:alm:descriptor:com.tectonic.ui:resourceRequirements',\n arrayFieldGroup = 'urn:alm:descriptor:com.tectonic.ui:arrayFieldGroup:',\n arrayTable = 'urn:alm:descriptor:widgets:common:arrayTable',\n array = 'urn:alm:descriptor:com.tectonic.ui:array',\n /**\n * @deprecated\n */\n object = 'urn:alm:descriptor:com.tectonic.ui:object',\n\n /**\n * aui-form 表单元素\n */\n label = 'urn:alm:descriptor:label:',\n description = 'urn:alm:descriptor:description:',\n placeholder = 'urn:alm:descriptor:placeholder:',\n tooltip = 'urn:alm:descriptor:tooltip:',\n descriptionAsLink = 'urn:alm:descriptor:descriptionAsLink', // 存在为 true,不设置为 false\n docOption = 'urn:alm:descriptor:docOption:', // docOption:{product}:{path}\n docLink = 'urn:alm:descriptor:docLink:', // docOption:{link}\n validation = 'urn:alm:descriptor:com.tectonic.ui:validation:',\n copyable = 'urn:alm:descriptor:copyable',\n\n /**\n * 表单布局/控制能力\n */\n hidden = 'urn:alm:descriptor:com.tectonic.ui:hidden',\n defaultValue = 'urn:alm:descriptor:com.tectonic.default:',\n fieldGroup = 'urn:alm:descriptor:com.tectonic.ui:fieldGroup:',\n advanced = 'urn:alm:descriptor:com.tectonic.ui:advanced',\n fieldDependency = 'urn:alm:descriptor:com.tectonic.ui:fieldDependency:',\n oneOf = 'urn:alm:descriptor:oneOf:',\n\n /**\n * UI 控件特性扩展\n */\n expression = 'urn:alm:descriptor:expression:',\n // urn:alm:descriptor:yaml:actions:disabled:diffMode,recover\n yamlActionsDisabled = 'urn:alm:descriptor:yaml:actions:disabled:',\n // urn:alm:descriptor:yaml:result:json\n // urn:alm:descriptor:yaml:result:stringify\n yamlResult = 'urn:alm:descriptor:yaml:result:',\n\n // object 和 array 组件折叠, 默认为展开\n folded = 'urn:alm:descriptor:com.tectonic.ui:folded',\n // array 组件在没有 Value 的前提下支持不保留首项\n emptyArray = 'urn:alm:descriptor:com.tectonic.ui:emptyArray',\n\n // 用于支持复数场景,如 multiselect,tags-input 等\n multiple = 'urn:alm:descriptor:com.tectonic.ui:multiple',\n allowCreate = 'urn:alm:descriptor:com.tectonic.ui:allowCreate',\n creatable = 'urn:alm:descriptor:com.tectonic.ui:creatable',\n clearable = 'urn:alm:descriptor:com.tectonic.ui:clearable',\n disabled = 'urn:alm:descriptor:com.tectonic.ui:disabled',\n\n /**\n * 其他\n */\n // 用于做control唯一识别的依据,缺省情况下 path 将作为依据\n pathTag = 'urn:alm:descriptor:com.tectonic.ui:path.tag:',\n}\n\nexport interface Descriptor {\n path: string;\n displayName: string;\n description: string;\n 'x-descriptors': SpecCapability[];\n value?: any;\n}\n\nexport interface DescriptorProps {\n descriptor: Descriptor;\n value: any;\n namespace?: string;\n}\n\nexport interface OperandFieldValidation {\n [Validations.maximum]?: number;\n [Validations.minimum]?: number;\n [Validations.maxLength]?: number;\n [Validations.minLength]?: number;\n [Validations.pattern]?: string;\n [Validations.required]?: boolean;\n}\n\nexport interface OperandField {\n path?: string;\n type?: JSONSchema6TypeName;\n capabilities?: SpecCapability[]; // SpecCapability\n required?: boolean;\n displayName?: string;\n description?: string;\n validations?: OperandFieldValidation;\n value?: unknown;\n descriptor?: Descriptor;\n _dirty?: boolean;\n parent?: string;\n inParentIndex?: number;\n disabled?: boolean;\n}\n\nexport interface OperandFieldGroup extends OperandField {\n groupName: string;\n fieldList: OperandField[];\n}\n\nexport interface OperandArrayFieldGroup extends OperandField {\n groupName: string;\n fieldLists: OperandField[][];\n}\n\nexport type FormDataState = Map<string, any>;\n\nexport interface FieldValueChangeEvent {\n field: OperandField;\n data: unknown;\n errors: unknown;\n}\n\nexport interface FormErrors {\n [key: string]: ValidationErrors;\n}\n\nexport interface FormState {\n data: unknown;\n errors: FormErrors;\n}\n","export type K8sVerb =\n | 'create'\n | 'get'\n | 'list'\n | 'update'\n | 'patch'\n | 'delete'\n | 'deletecollection'\n | 'watch';\n\nexport interface MatchExpressionWithValues {\n key: string;\n operator: 'In' | 'NotIn' | 'Exists' | 'DoesNotExist';\n values: string[];\n}\nexport type MatchExpression =\n | { key: string; operator: 'Exists' | 'DoesNotExist' }\n | MatchExpressionWithValues;\n\nexport interface MatchLabels {\n [key: string]: string;\n}\n\nexport interface Selector {\n matchLabels?: MatchLabels;\n matchExpressions?: MatchExpression[];\n}\n\nexport interface K8sKind {\n abbr: string;\n kind: string;\n label: string;\n labelKey?: string;\n labelPlural: string;\n labelPluralKey?: string;\n plural: string;\n propagationPolicy?: 'Foreground' | 'Background';\n id?: string;\n crd?: boolean;\n apiVersion: string;\n apiGroup?: string;\n namespaced?: boolean;\n selector?: Selector;\n labels?: { [key: string]: string };\n annotations?: { [key: string]: string };\n verbs?: K8sVerb[];\n shortNames?: string[];\n color?: string;\n legacyPluralURL?: boolean;\n}\n\nexport const NodeModel: K8sKind = {\n apiVersion: 'v1',\n label: 'Node',\n\n labelKey: 'public~Node',\n plural: 'nodes',\n abbr: 'N',\n kind: 'Node',\n id: 'node',\n labelPlural: 'Nodes',\n\n labelPluralKey: 'public~Nodes',\n};\n","import { escapeRegExp } from 'lodash-es';\n\nimport { SpecCapability, Validations } from '../types';\n\nimport * as ServiceModels from './service-model';\n\nexport const MAX_DEPTH = 1;\nexport const SCHEMA_PATH = ['properties', 'spec'];\nexport const DESCRIPTOR_DEFINITION_KEY = 'x-descriptors';\n\nexport const NamespacedResourceKind = Object.values(ServiceModels)\n .filter(i => i.namespaced)\n .map(i => i.kind);\n\n// Regex for SpecCapability.arrayFieldGroup and SpecCapability.fieldGroup\nconst ARRAY_FIELD_GROUP_PATTERN = escapeRegExp(SpecCapability.arrayFieldGroup);\nconst FIELD_GROUP_PATTERN = escapeRegExp(SpecCapability.fieldGroup);\nexport const GROUP_PATTERN = new RegExp(\n `^(${FIELD_GROUP_PATTERN}|${ARRAY_FIELD_GROUP_PATTERN})(.*)$`,\n);\nexport const DEFAULT_VALUE_PATTERN = new RegExp(\n `^${escapeRegExp(SpecCapability.defaultValue)}(.*)$`,\n);\n\nexport const REGEXP_K8S_RESOURCE_CAPABILITY = escapeRegExp(\n SpecCapability.k8sResourcePrefix,\n);\n\nexport const REGEXP_CAPABILITY_VALIDATION = escapeRegExp(\n SpecCapability.validation,\n);\n\nexport const REGEXP_FIELD_DEPENDENCY_CAPABILITY = escapeRegExp(\n SpecCapability.fieldDependency,\n);\n\nexport const REGEXP_SELECT_CAPABILITY = escapeRegExp(SpecCapability.select);\n\nexport const REGEXP_K8S_RESOURCE_SUFFIX = new RegExp(\n `^${REGEXP_K8S_RESOURCE_CAPABILITY}(?:core[:~]v1[:~])?([^?]*)(?:\\\\?\\\\+)?([^?]*)?(?:\\\\?\\\\=)?([^?]*)?$`,\n);\nconst SupportValidation = Object.values(Validations).join('|');\n\nexport const REGEXP_VALIDATION_SUFFIX = new RegExp(\n `^${REGEXP_CAPABILITY_VALIDATION}(${SupportValidation})(?::(.+))?$`,\n);\n","import { cloneDeep, get, includes, map, reduce, some } from 'lodash-es';\n\nimport {\n OperandArrayFieldGroup,\n OperandField,\n OperandFieldGroup,\n SpecCapability,\n Validations,\n} from '../types';\n\nexport const isRequired = (field: OperandField) =>\n field?.required ||\n Object.keys(field?.validations || {})?.includes(Validations.required);\n\nexport const filterMapByKey = <T>(\n map: Map<string, T>,\n predicate: (input: string) => boolean,\n) => {\n const m = new Map();\n map.forEach((v, k) => {\n if (predicate(k)) {\n m.set(k, v);\n }\n });\n return m;\n};\n\nexport const getMatchArrayIndex = (arrPath: string) => {\n const matched = arrPath.match(/(^.*)\\[(\\d+)]$/);\n return +get(matched, '[2]', 0);\n};\n\nexport const isGroupField = (field: OperandField): field is OperandFieldGroup =>\n field.type === 'object';\n\nexport const isArrayField = (\n field: OperandField,\n): field is OperandArrayFieldGroup => field.type === 'array';\n\nexport const isRemoteField = (\n field: OperandField,\n): field is OperandArrayFieldGroup =>\n field.capabilities.some(c => c.startsWith(SpecCapability.remote));\n\nexport const isArrayFieldTable = (\n field: OperandField,\n): field is OperandArrayFieldGroup =>\n isArrayField(field) &&\n field.capabilities.some(c => c.startsWith(SpecCapability.arrayTable));\n\nexport const isCreatable = (field: OperandField) =>\n field.capabilities.some(c => c.startsWith(SpecCapability.creatable));\n\nexport const isMultiple = (field: OperandField) =>\n field.capabilities.some(c => c.startsWith(SpecCapability.multiple));\n\nexport const isAllowCreate = (field: OperandField) =>\n field.capabilities.some(c => c.startsWith(SpecCapability.allowCreate));\n\nexport const isClearable = (field: OperandField) =>\n field.capabilities.some(c => c.startsWith(SpecCapability.clearable));\n\nexport const isFolded = (field: OperandField) =>\n field.capabilities.some(c => c.startsWith(SpecCapability.folded));\n\nexport const isEmptyArray = (field: OperandField) =>\n field.capabilities.some(c => c.startsWith(SpecCapability.emptyArray));\n\nexport function hasDescriptor(\n field: OperandField,\n prefix: string,\n suffix: string = null,\n): boolean {\n return suffix\n ? includes(field.capabilities, `${prefix}${suffix}`)\n : some(field.capabilities, capability => capability.startsWith(prefix));\n}\n\n/*\n * Matches a path that contains an array index. Use Sting.match against an OperandField 'path'\n * property to determine if it contains an array index. It will parse the path into three parts,\n * [match, pathBeforeIndex, index, pathAfterIndex]. For example:\n *\n * const [match, pathBeforeIndex, index, pathAfterIndex] =\n * 'path.before[0].path.after'.match(ARRAY_INDEX_PATTERN);\n *\n * console.log(match);\n * > 'path.before[0].path.after'\n *\n * console.log(pathBeforeIndex);\n * > 'path.before'\n *\n * console.log(index)\n * > '0'\n *\n * console.log(pathAfterIndex)\n * > 'path.after'\n *\n */\n\nconst ARRAY_INDEX_PATTERN = /^(.*)\\[(\\d+)]\\.?(.*)$/;\n\nexport function parseArrayPath(path: string): {\n index?: number;\n match?: string;\n pathBeforeIndex?: string;\n pathAfterIndex?: string;\n} {\n const [match, pathBeforeIndex, index, pathAfterIndex] =\n ARRAY_INDEX_PATTERN.exec(path) || [];\n return match\n ? { index: parseInt(index, 10), match, pathBeforeIndex, pathAfterIndex }\n : { match };\n}\n\nexport function getArrayGroupName(field: OperandField) {\n if (hasDescriptor(field, SpecCapability.arrayFieldGroup)) {\n return field.capabilities\n .find(capability => capability.startsWith(SpecCapability.arrayFieldGroup))\n .slice(SpecCapability.arrayFieldGroup.length);\n }\n return '';\n}\n\nexport function getGroupName(field: OperandField) {\n if (hasDescriptor(field, SpecCapability.fieldGroup)) {\n return field.capabilities\n .find(capability => capability.startsWith(SpecCapability.fieldGroup))\n .slice(SpecCapability.fieldGroup.length);\n }\n\n return '';\n}\n\n/**\n * 递归修复树形结构中 数组类型的索引\n *\n * @export\n * @param {OperandField} field\n * @param {string} fromPath\n * @param {string} toPath\n * @returns\n *\n */\nexport const repairFieldChildPathByCorrectIndex = (\n field: OperandField,\n fromPath: string,\n toPath: string,\n) => {\n const targetField = cloneDeep(field);\n if (isGroupField(targetField)) {\n targetField.fieldList = map(targetField.fieldList, f => ({\n ...f,\n path: f.path.replace(fromPath, toPath),\n }));\n } else if (isArrayField(targetField)) {\n targetField.fieldLists = reduce(\n targetField.fieldLists,\n (t, c) => [\n ...t,\n map(c, f => repairFieldChildPathByCorrectIndex(f, fromPath, toPath)),\n ],\n [],\n );\n }\n return {\n ...targetField,\n path: targetField.path.replace(fromPath, toPath),\n };\n};\n\nexport const getRelatedFields = (normalFields: OperandField[]) =>\n map(normalFields, field => {\n if (getArrayGroupName(field)) {\n const { pathBeforeIndex, index } = parseArrayPath(field.path);\n return {\n ...field,\n parent: pathBeforeIndex,\n inParentIndex: index,\n };\n }\n if (getGroupName(field)) {\n const groupNameFromDefinition = `spec.${getGroupName(field)}`;\n const parent = field.path.slice(0, groupNameFromDefinition.length);\n return {\n ...field,\n parent,\n };\n }\n return field;\n });\n\nexport const getTreeFields = (\n rootFields: OperandField[],\n basicFields: OperandField[],\n) => {\n if (basicFields.length > 0) {\n return rootFields.reduce((acc, field) => {\n field._dirty = true;\n const children = basicFields.filter(f => f.parent === field.path);\n children.forEach(c => (c._dirty = true));\n if (isArrayField(field)) {\n field.fieldLists = children\n .reduce((acc, child) => {\n acc[child.inParentIndex] = [\n ...(acc[child.inParentIndex] || []),\n child,\n ];\n return acc;\n }, [])\n .map(m =>\n getTreeFields(\n m,\n basicFields.filter(f => !f._dirty),\n ),\n );\n } else if (isGroupField(field)) {\n field.fieldList = getTreeFields(\n children,\n basicFields.filter(f => !f._dirty),\n );\n }\n return [...acc, field];\n }, []);\n }\n return rootFields.map(f => {\n f._dirty = true;\n return f;\n });\n};\n\nexport const getMatchedCapabilityValue = (\n capabilities: SpecCapability[],\n descriptor: string,\n) =>\n capabilities\n .find(capability => capability.startsWith(descriptor))\n ?.slice(descriptor.length) || '';\n\nexport function evalInContext(stringExpression: string, context: any) {\n // replace eval, skip eslint & sonar safe check\n function evil(fn: string) {\n const Fn = Function;\n return new Fn(`return ${fn}`);\n }\n try {\n return evil(stringExpression).call(context);\n } catch {\n console.error('expression is invalid:', stringExpression);\n return stringExpression;\n }\n}\n\nexport function coerceBoolean(val: any): boolean {\n return val === 'true';\n}\n\nexport function coerceNumber(val: any, fallbackValue = 0): number {\n return _isNumberValue(val) ? Number(val) : fallbackValue;\n}\n\nexport function _isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return (\n !isNaN(typeof value === 'string' && parseFloat(value)) &&\n !isNaN(Number(value))\n );\n}\n\nexport function getOperandPath(field: OperandField) {\n const idField = field?.capabilities.find(c =>\n c.startsWith(SpecCapability.pathTag),\n );\n if (idField) {\n return `${field.path}@${idField.slice(SpecCapability.pathTag.length)}`;\n }\n return field.path;\n}\n\nexport function getPathFromTagPath(pathWithTag: string) {\n return pathWithTag.split('@')[0];\n}\n\n// 获取path下所有的filed,例如spec.a 能匹配到 spec.a.a1 spec.a.a2\nexport const getFieldsByPath = (path: string, fields: OperandField[]) =>\n fields.filter(field => getOperandPath(field).startsWith(path));\n","import {\n Dictionary,\n FALSE,\n JSONSchema6TypeName,\n parseJSONStream,\n StringMap,\n TRUE,\n parseJson,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport { isJsonObjectString } from '@alauda-fe/dynamic-plugin-shared';\nimport { find, identity, isEmpty, last, set } from 'lodash-es';\n\nimport {\n Descriptor,\n OperandArrayFieldGroup,\n OperandField,\n OperandFieldGroup,\n OperandFieldValidation,\n SpecCapability,\n Validations,\n} from '../types';\n\nimport {\n DEFAULT_VALUE_PATTERN,\n DESCRIPTOR_DEFINITION_KEY,\n NamespacedResourceKind,\n REGEXP_K8S_RESOURCE_SUFFIX,\n REGEXP_VALIDATION_SUFFIX,\n} from './constant';\nimport { coerceBoolean, coerceNumber } from './helper';\n\nexport function getBasicAuthSecretConfig(field: OperandField) {\n const configPrefix = `${SpecCapability.basicAuthSecret}:`;\n const capability = find(field.capabilities, descriptor =>\n descriptor.startsWith(configPrefix),\n );\n if (!capability) {\n return null;\n }\n const configStr = capability.slice(configPrefix.length);\n return parseJSONStream(configStr)[0];\n}\n\nexport function getRadioOptions(capabilities: SpecCapability[]) {\n const items = capabilities\n .filter(c => c.startsWith(SpecCapability.radio))\n .map(c => c.split(SpecCapability.radio)[1]);\n return items\n .filter(item => item.split(':').length === 1)\n .map(item => {\n const zhPrefix = `${item}:zh:`;\n const enPrefix = `${item}:en:`;\n const zhDescriptor = items.find(value => value.startsWith(zhPrefix));\n const enDescriptor = items.find(value => value.startsWith(enPrefix));\n return {\n value: item,\n display: {\n zh: zhDescriptor ? zhDescriptor.split(zhPrefix)[1] : item,\n en: enDescriptor ? enDescriptor.split(enPrefix)[1] : item,\n },\n };\n });\n}\n\nexport function setRadiosDefaultValue(descriptors: Descriptor[]) {\n // Set radio default selected item\n const defaultValueMap = (descriptors || [])\n .filter(d =>\n d[DESCRIPTOR_DEFINITION_KEY].some(item =>\n item.startsWith(SpecCapability.radio),\n ),\n )\n .map(item => ({\n path: item.path,\n value: item[DESCRIPTOR_DEFINITION_KEY].filter(c =>\n c.startsWith(SpecCapability.radio),\n )\n .map(c => c.split(SpecCapability.radio)[1])\n .find(c => c.split(':').length === 1),\n }))\n .reduce(\n (acc, cur) => ({\n ...set(acc, cur.path, cur.value),\n }),\n {},\n );\n return {\n spec: {\n ...defaultValueMap,\n },\n };\n}\n\nexport const getBooleanSwitchOptions = (capabilities: SpecCapability[]) => {\n const items = capabilities\n .filter(c => c.startsWith(SpecCapability.booleanSwitch))\n .map(c => c.split(SpecCapability.booleanSwitch)[1]);\n\n return [TRUE, FALSE].map(item => {\n const zhPrefix = `:${item}:zh:`;\n const enPrefix = `:${item}:en:`;\n const zhDescriptor = items.find(value => value.startsWith(zhPrefix));\n const enDescriptor = items.find(value => value.startsWith(enPrefix));\n return {\n value: item,\n display:\n zhDescriptor && enDescriptor\n ? {\n zh: zhDescriptor ? zhDescriptor.split(zhPrefix)[1] : item,\n en: enDescriptor ? enDescriptor.split(enPrefix)[1] : item,\n }\n : item === TRUE\n ? 'yes'\n : 'no',\n };\n });\n};\n\nexport const convertBooleanSwitchValue = (\n value: boolean,\n capabilities: SpecCapability[],\n) => {\n const options = getBooleanSwitchOptions(capabilities);\n return options.find(item => item.value === (value ? TRUE : FALSE))?.display;\n};\n\nexport function convertValue(value: string, type: JSONSchema6TypeName) {\n switch (type) {\n case 'number':\n case 'integer': {\n return coerceNumber(value);\n }\n case 'boolean': {\n return coerceBoolean(value);\n }\n default: {\n // 兼容 value 为 json 字符串的情况\n return isJsonObjectString(value)\n ? parseJson(value, value)\n : value || undefined;\n }\n }\n}\n\nexport function getDefaultValue(field: OperandField) {\n const defaultValueDescriptor = find(field.capabilities, descriptor =>\n descriptor.startsWith(SpecCapability.defaultValue),\n );\n if (defaultValueDescriptor) {\n const [, value] = DEFAULT_VALUE_PATTERN.exec(defaultValueDescriptor) || [];\n return convertValue(value, field.type);\n }\n}\n\nconst UI_FIELDS: Array<\n | SpecCapability\n | { spec: SpecCapability; refer?: SpecCapability; prefix?: boolean }\n> = [\n SpecCapability.text,\n {\n spec: `${SpecCapability.text}:link` as SpecCapability,\n refer: SpecCapability.text,\n },\n {\n spec: `${SpecCapability.text}:link:` as SpecCapability,\n prefix: true,\n },\n SpecCapability.password,\n SpecCapability.confirmPassword,\n SpecCapability.externalPassword,\n SpecCapability.number,\n SpecCapability.textarea,\n {\n spec: SpecCapability.podCount,\n refer: SpecCapability.number,\n },\n SpecCapability.booleanSwitch,\n {\n spec: SpecCapability.select,\n prefix: true,\n },\n SpecCapability.resourceRequirements,\n SpecCapability.yaml,\n SpecCapability.object,\n SpecCapability.array,\n {\n spec: SpecCapability.radio,\n prefix: true,\n },\n {\n spec: SpecCapability.k8sResourcePrefix,\n prefix: true,\n },\n {\n spec: SpecCapability.basicAuthSecret,\n prefix: true,\n },\n {\n spec: SpecCapability.widgets,\n prefix: true,\n },\n {\n spec: SpecCapability.remote,\n prefix: true,\n },\n {\n spec: SpecCapability.tagsInput,\n prefix: true,\n },\n];\n\nexport function getFieldType(field: OperandField): SpecCapability {\n const { capabilities } = field;\n const result = UI_FIELDS.find(specField => {\n if (typeof specField === 'string') {\n return capabilities.includes(specField);\n }\n return specField.prefix\n ? capabilities.some(c => c.startsWith(specField.spec))\n : capabilities.includes(specField.spec);\n });\n return typeof result === 'string' ? result : (result?.refer ?? result?.spec);\n}\n\nexport function getBasicCapabilityType(capabilities: string[]) {\n if (capabilities.includes(SpecCapability.text)) {\n return 'string';\n }\n if (\n capabilities.includes(SpecCapability.number) ||\n capabilities.includes(SpecCapability.podCount)\n ) {\n return 'number';\n }\n if (capabilities.includes(SpecCapability.booleanSwitch)) {\n return 'boolean';\n }\n if (capabilities.includes(SpecCapability.object)) {\n return 'object';\n }\n if (capabilities.includes(SpecCapability.array)) {\n return 'array';\n }\n}\n\nfunction getDisplayByCapability(\n capabilities: SpecCapability[],\n name: string,\n fallback?: string,\n) {\n const enDes = `${name}en:`;\n const zhDes = `${name}zh:`;\n const en = find(capabilities, descriptor =>\n descriptor.startsWith(enDes),\n )?.split(enDes)?.[1];\n const zh = find(capabilities, descriptor =>\n descriptor.startsWith(zhDes),\n )?.split(zhDes)?.[1];\n return en || zh\n ? { en: en || zh || fallback, zh: zh || en || fallback }\n : fallback\n ? { en: fallback, zh: fallback }\n : null;\n}\n\nexport function getFieldDisplayName(\n field: OperandField | OperandArrayFieldGroup | OperandFieldGroup,\n) {\n return getDisplayByCapability(\n field.capabilities,\n SpecCapability.label,\n field.displayName ?? '',\n );\n}\n\nexport function getFieldDescription(field: OperandField) {\n return getDisplayByCapability(\n field.capabilities,\n SpecCapability.description,\n field.description ?? '',\n );\n}\n\nexport function getFieldPlaceholder(field: OperandField) {\n return getDisplayByCapability(field.capabilities, SpecCapability.placeholder);\n}\n\nexport function getFieldTooltip(field: OperandField) {\n return getDisplayByCapability(field.capabilities, SpecCapability.tooltip);\n}\n\nexport function isFieldCopyable(field: OperandField) {\n return !!find(\n field.capabilities,\n descriptor => descriptor === SpecCapability.copyable,\n );\n}\n\nexport function isFieldDescriptionAsLink(field: OperandField) {\n return !!find(\n field.capabilities,\n descriptor => descriptor === SpecCapability.descriptionAsLink,\n );\n}\n\nexport function getFieldDocLink(field: OperandField) {\n const docLinkDescriptor = find(field.capabilities, descriptor =>\n descriptor.startsWith(SpecCapability.docLink),\n );\n if (docLinkDescriptor) {\n return docLinkDescriptor.split(SpecCapability.docLink)[1];\n }\n}\n\n// cspell:disable-next-line\n// k8s params should conform to urn:alm:descriptor:io.kubernetes:Secret?=isGlobal=true:labelSelector=plugins.cpaas.io%2Fvictoriametrics%3Dtrue\n// : is used by dividing meta params and queryParams,both should be url encoded(percent encoding)\nconst K8S_RESOURCE_META_PARAMS_DIVIDER = ':';\n\nexport function getK8sResourcePrefixOptions(field: OperandField) {\n const capability = find(field.capabilities, descriptor =>\n descriptor.startsWith(SpecCapability.k8sResourcePrefix),\n );\n const multiple = field.capabilities.some(descriptor =>\n descriptor.startsWith(SpecCapability.multiple),\n );\n const validations = getCapabilityValidations(field.capabilities);\n const [, resource, , qComponents] =\n capability.match(REGEXP_K8S_RESOURCE_SUFFIX) ?? [];\n const groupVersionKind = resource?.replace(/:/g, '~');\n const kind = last(groupVersionKind.split('~'));\n const [metaStr, queryParamsStr] = (qComponents ?? '').split(\n K8S_RESOURCE_META_PARAMS_DIVIDER,\n );\n const meta = resolveKVParams(metaStr);\n const queryParams = resolveKVParams(queryParamsStr);\n return {\n namespaced: NamespacedResourceKind.includes(kind),\n labelSelector: queryParams.labelSelector,\n isGlobal: !!meta.isGlobal,\n groupVersionKind, // 现有的 apiversion,apiGroup 皆由环境配置,可以暂时不用\n type: last(groupVersionKind.split('~')),\n multiple,\n validations,\n };\n}\n\n// resolve a=b&c=d 格式数据\nexport function resolveKVParams(str: string) {\n return (str || '')\n .split('&')\n .filter(i => !isEmpty(i))\n .reduce((acc, curr) => {\n const [k, v] = curr.split('=');\n acc[k] = decodeURIComponent(v);\n return acc;\n }, {} as StringMap);\n}\n\nexport function getCapabilityDisabled(capabilities: SpecCapability[]): boolean {\n return capabilities.includes(SpecCapability.disabled);\n}\n\nexport function getCapabilityValidations(\n capabilities: SpecCapability[],\n): OperandFieldValidation {\n const validations = capabilities?.filter(c =>\n c.startsWith(SpecCapability.validation),\n );\n return validations.reduce((acc, descriptor) => {\n const [, validation, param] =\n (descriptor.match(REGEXP_VALIDATION_SUFFIX) as [\n unknown,\n Validations,\n string,\n ]) ?? [];\n if (!validation) {\n return acc;\n }\n\n if (validation === Validations.pattern) {\n acc[validation] = param;\n } else if (validation === Validations.required) {\n acc[validation] = Boolean(param);\n } else {\n acc[validation] = +param;\n }\n\n return acc;\n }, {} as OperandFieldValidation);\n}\n\nexport function getOneOfMap(field: OperandField) {\n const map: Dictionary<string[]> = {};\n const capabilities = field.capabilities.filter(c =>\n c.startsWith(SpecCapability.oneOf),\n );\n capabilities.forEach(c => {\n const str = c.split(SpecCapability.oneOf)[1];\n // 这里 path 与后端约束直接支持 path@tag 模式\n const [value, ...path] = str.split(':');\n map[value] = [...path];\n });\n return map;\n}\n\nexport function fieldShouldReveal(field: OperandField) {\n return (\n !field.capabilities.includes(SpecCapability.hidden) &&\n identity(getFieldType(field))\n );\n}\n","import { OpenAPIV3SchemaObject, isEqual } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n find,\n flatMap,\n flatMapDepth,\n flatten,\n get,\n groupBy,\n isArray,\n map,\n parseInt,\n pick,\n reduce,\n sortBy,\n startCase,\n times,\n toPath,\n union,\n uniqWith,\n} from 'lodash-es';\n\nimport {\n Descriptor,\n FormDataState,\n OperandField,\n OperandFieldValidation,\n SpecCapability,\n SpecCapabilityUIPrefix,\n SpecCapabilityWidgetsPrefix,\n Validations,\n} from '../types';\n\nimport {\n fieldShouldReveal,\n getBasicCapabilityType,\n getCapabilityDisabled,\n getCapabilityValidations,\n} from './capability';\nimport {\n DESCRIPTOR_DEFINITION_KEY,\n GROUP_PATTERN,\n MAX_DEPTH,\n SCHEMA_PATH,\n} from './constant';\nimport {\n getRelatedFields,\n getTreeFields,\n hasDescriptor,\n parseArrayPath,\n} from './helper';\n\nexport interface FlattenNestedPropertiesAccumulator {\n currentCapabilities?: SpecCapability[];\n currentPath?: string[];\n fields?: OperandField[];\n required: boolean;\n}\n\nexport function getPropertyDepth(\n property: OpenAPIV3SchemaObject,\n depth = 0,\n): number {\n if (!property || !['object', 'array'].includes(property.type)) {\n return depth;\n }\n return Math.max(\n 0,\n ...Object.values(\n property.properties || property.items?.properties || {},\n ).map(nestedProperty => getPropertyDepth(nestedProperty, depth + 1)),\n );\n}\n\nexport function getFieldsFromDescriptor(\n {\n path,\n description,\n displayName,\n 'x-descriptors': capabilities = [],\n }: Descriptor,\n data: any,\n openApi: OpenAPIV3SchemaObject,\n _originDescriptors?: Descriptor[],\n): OperandField[] {\n const { match, pathBeforeIndex, pathAfterIndex } = parseArrayPath(path);\n const filedBasicType = getBasicCapabilityType(capabilities);\n const disabled = getCapabilityDisabled(capabilities);\n const validations = getCapabilityValidations(capabilities);\n if (match) {\n const n: number =\n get(data, toPath(`spec.${pathBeforeIndex}`), []).length || 1;\n const pathAfterIndexStr = `.${pathAfterIndex}`;\n let extra: Descriptor[] = [];\n if (_originDescriptors) {\n extra = flatten(\n _originDescriptors\n .filter(\n d => d.path.startsWith(`${pathBeforeIndex}[0]`) && d.path !== path,\n )\n .map(d =>\n times(n, index => {\n const oPath = d.path.replace(\n `${pathBeforeIndex}[0]`,\n `${pathBeforeIndex}[${index}]`,\n );\n return {\n ...d,\n path: oPath,\n };\n }).slice(1),\n ),\n );\n }\n\n return flatten([\n ...times(n, index => {\n const propertyPath = `spec.${pathBeforeIndex}[${index}]${\n pathAfterIndex && pathAfterIndexStr\n }`;\n const property = getOpenApiPropertyByPath(`spec.${path}`, openApi);\n\n return {\n path: propertyPath,\n value: get(data, propertyPath),\n description,\n displayName,\n capabilities,\n type: filedBasicType || property?.type,\n required: null,\n disabled,\n validations: {\n ...validations,\n ...(property?.required && { required: true }),\n },\n };\n }),\n ...extra.map(e => getFieldsFromDescriptor(e, data, openApi)),\n ]);\n }\n // 通过 descriptor 查找原始 CRD 节点,推导类型、validation 等信息\n const propertyPath = `spec.${path}`;\n const property = getOpenApiPropertyByPath(propertyPath, openApi);\n return [\n {\n path: propertyPath,\n description,\n displayName,\n capabilities,\n disabled,\n value: get(data, propertyPath),\n type: filedBasicType || property?.type,\n required: null,\n validations: {\n ...validations,\n ...(property?.required && { required: true }),\n },\n },\n ];\n}\n\nexport function getOpenApiPropertyByPath(\n descriptorPath: string,\n openApi: OpenAPIV3SchemaObject,\n) {\n const paths = descriptorPath.split('.');\n try {\n return paths.reduce((acc, path) => {\n acc = path.includes('[0]')\n ? acc.items.properties[path.split('[0]')[0]]\n : acc.properties[path];\n return acc;\n }, openApi);\n } catch {\n return null;\n }\n}\n\nexport function getFieldsFromOpenApiSchema(\n openApi: OpenAPIV3SchemaObject,\n descriptors: Descriptor[],\n data: unknown,\n openApiSchemaPath: string | string[] = SCHEMA_PATH,\n maxDepth = MAX_DEPTH,\n): OperandField[] {\n const path = isArray(openApiSchemaPath)\n ? openApiSchemaPath\n : openApiSchemaPath.split('.').filter(Boolean);\n const properties = get(openApi, [...path, 'properties'], {});\n const required = get(openApi, [...path, 'required'], []) as string[];\n\n return reduce(\n properties,\n (accumulator, _property, propertyName) => {\n const property = _property as OpenAPIV3SchemaObject;\n if (!property.type || getPropertyDepth(property) > maxDepth) {\n return accumulator;\n }\n\n return [\n ...accumulator,\n ...flattenNestedProperties(propertyName, property, descriptors, data, {\n required: required.includes(propertyName),\n }),\n ];\n },\n [],\n );\n}\n\nexport function flattenNestedProperties(\n propertyName: string,\n property: OpenAPIV3SchemaObject,\n descriptors: Descriptor[],\n data: any,\n {\n currentCapabilities = [],\n currentPath = [],\n required = false,\n }: FlattenNestedPropertiesAccumulator,\n) {\n if (!property) {\n return [];\n }\n\n const handleObjectProperty = (): OperandField[] =>\n flatMap(property.properties, (nestedProperty, nestedPropertyName) =>\n flattenNestedProperties(\n nestedPropertyName,\n nestedProperty,\n descriptors,\n data,\n {\n currentCapabilities: [\n ...currentCapabilities,\n `${SpecCapability.fieldGroup}${propertyName}` as SpecCapability,\n ],\n currentPath: [...currentPath, propertyName],\n required: (property.required || []).includes(nestedPropertyName),\n },\n ),\n );\n\n const handleArrayProperty = (): OperandField[] => {\n // Find the number of array elements that are already defined in the provided object\n const n: number =\n get(data, `spec.${currentPath.join('.')}${propertyName}`, []).length || 1;\n\n // Since _.times will return a multidimensional array of OperandFields (OperandField[][]), we\n // need to flatten one level deeper than _.flatMap provides.\n return flatMapDepth(\n property.items.properties,\n (nestedProperty, nestedPropertyName) =>\n // Repeat recursion (n) times so that the correct number of fields are created for\n // existing values in obj. This ensures that further nested fields also get created.\n times(n, index =>\n flattenNestedProperties(\n nestedPropertyName,\n nestedProperty,\n descriptors,\n data,\n {\n currentCapabilities: [\n ...currentCapabilities,\n `${SpecCapability.arrayFieldGroup}${propertyName}` as SpecCapability,\n ],\n currentPath: [...currentPath, `${propertyName}[${index}]`], // Array field paths must include an index\n required: (property?.required || []).includes(nestedPropertyName),\n },\n ),\n ),\n 2,\n );\n };\n\n const handleAtomicProperty = (): OperandField[] => {\n const path = [...currentPath, propertyName].join('.');\n const descriptor = descriptors.find(\n item => item.path === modifyArrayFieldPathIndex(path, () => 0),\n );\n const capabilities = union(\n descriptor?.[DESCRIPTOR_DEFINITION_KEY] || [],\n currentCapabilities,\n getCapabilitiesForOpenApiProperty(\n property,\n descriptor?.[DESCRIPTOR_DEFINITION_KEY],\n ),\n );\n const validations = getCapabilityValidations(capabilities);\n const fieldPath = `spec.${path}`;\n return [\n {\n path: fieldPath,\n type: property.type,\n required,\n capabilities,\n description: descriptor?.description || property.description,\n displayName: descriptor?.displayName || startCase(propertyName),\n validations: {\n ...(pick(\n property,\n Object.keys(Validations),\n ) as unknown as OperandFieldValidation),\n ...validations,\n },\n value: get(data, fieldPath),\n },\n ] as OperandField[];\n };\n\n switch (property.type) {\n case 'object': {\n return handleObjectProperty();\n }\n case 'array': {\n return handleArrayProperty();\n }\n default: {\n return handleAtomicProperty();\n }\n }\n}\n\n// Accepts an OpenAPI spec property and returns a corresponding SpecCapability[] array.\nexport function getCapabilitiesForOpenApiProperty(\n property: OpenAPIV3SchemaObject,\n capabilities: string[] = [],\n): SpecCapability[] {\n const formControlCapabilities = [\n SpecCapabilityUIPrefix,\n SpecCapabilityWidgetsPrefix,\n SpecCapability.k8sResourcePrefix,\n ];\n if (\n capabilities.some(i => formControlCapabilities.some(k => i.startsWith(k)))\n ) {\n return [];\n }\n if (property.enum) {\n return (property.enum || []).map(\n (option: string) => `${SpecCapability.select}${option}` as SpecCapability,\n );\n }\n switch (property.type) {\n case 'integer': {\n return [SpecCapability.number];\n }\n case 'boolean': {\n return [SpecCapability.booleanSwitch];\n }\n default: {\n return [SpecCapability.text];\n }\n }\n}\n\nexport function modifyArrayFieldPathIndex(\n path: string,\n operation: (index?: number) => string | number,\n): string {\n const { match, index, pathBeforeIndex, pathAfterIndex } =\n parseArrayPath(path);\n const pathAfterIndexStr = `.${pathAfterIndex}`;\n return match\n ? `${pathBeforeIndex}[${operation(index)}]${\n pathAfterIndex && pathAfterIndexStr\n }`\n : path;\n}\n\nexport function pathToArray(path: string): Array<string | number> {\n return map(toPath(path), subPath =>\n /^\\d+$/.test(subPath) ? parseInt(subPath, 10) : subPath,\n );\n}\n\nexport function parseGroupDescriptor(field: OperandField): {\n groupName?: string;\n groupType?: string;\n match?: string;\n} {\n const groupDescriptor = find(\n field.capabilities,\n descriptor =>\n descriptor.startsWith(SpecCapability.fieldGroup) ||\n descriptor.startsWith(SpecCapability.arrayFieldGroup),\n );\n const [match, groupType, groupName] =\n GROUP_PATTERN.exec(groupDescriptor) || [];\n return { match, groupName, groupType };\n}\n\nexport function normalizePath(path: string) {\n return path?.startsWith('spec.') ? path : `spec.${path}`;\n}\n\nexport function getFormData(\n formData: FormDataState,\n path: string,\n enableConvert = true, // enable convert undefined => null\n) {\n const value = formData.getIn(\n pathToArray(normalizePath(path)),\n ) as FormDataState;\n return enableConvert && value == null ? null : value;\n}\n\nexport function createCapabilityField(\n descriptors: Descriptor[] = [],\n openApiSchema: OpenAPIV3SchemaObject,\n data: unknown,\n openApiSchemaPath: string | string[],\n) {\n const openApiFields = getFieldsFromOpenApiSchema(\n openApiSchema,\n descriptors,\n data,\n openApiSchemaPath,\n );\n\n const descriptorFields: OperandField[] = uniqWith(\n reduce(\n descriptors,\n (accumulator, descriptor) =>\n openApiFields?.some(field => field.path === `spec.${descriptor.path}`)\n ? accumulator\n : [\n ...accumulator,\n ...getFieldsFromDescriptor(\n descriptor,\n data,\n openApiSchema,\n descriptors,\n ),\n ],\n [],\n ),\n isEqual,\n );\n const basicFields = [...openApiFields, ...descriptorFields];\n\n const relationFields = getRelatedFields(\n basicFields.filter(fieldShouldReveal),\n );\n\n const treeFields = [\n ...getTreeFields(\n relationFields.filter(f => !f.parent),\n relationFields.filter(f => !!f.parent),\n ),\n // 兼容老的数据结构\n ...relationFields.filter(f => !f._dirty),\n ] as OperandField[];\n\n // 保留,兼容老数据结构\n const [\n advancedFields = [],\n arrayFields = [],\n groupFields = [],\n normalFields = [],\n ] = reduce(\n treeFields,\n (\n [\n advancedFieldsAccumulator = [] as OperandField[],\n arrayFieldsAccumulator = [] as OperandField[],\n groupFieldsAccumulator = [] as OperandField[],\n normalFieldsAccumulator = [] as OperandField[],\n ],\n field: OperandField,\n ) => {\n const mappers = [\n { spec: SpecCapability.arrayFieldGroup, acc: arrayFieldsAccumulator },\n { spec: SpecCapability.fieldGroup, acc: groupFieldsAccumulator },\n { spec: SpecCapability.advanced, acc: advancedFieldsAccumulator },\n ];\n const acc = mappers.find(mapper =>\n hasDescriptor(field, mapper.spec),\n )?.acc;\n return [\n advancedFieldsAccumulator,\n arrayFieldsAccumulator,\n groupFieldsAccumulator,\n normalFieldsAccumulator,\n ].map(r => {\n if ((!acc && r === normalFieldsAccumulator) || r === acc) {\n return [...r, field];\n }\n return r;\n });\n },\n [],\n );\n\n return {\n normalFields: sortFields(normalFields, descriptors),\n fieldGroups: sortGroupFields(groupFields, descriptors, descriptorFields),\n arrayFieldGroups: getArrayFields(arrayFields, descriptorFields),\n advancedFields: sortFields(advancedFields, descriptors),\n descriptorFields,\n openApiFields,\n basicFields,\n treeFields,\n };\n}\n\nfunction getArrayFields(\n fields: OperandField[],\n descriptorFields: OperandField[],\n) {\n // array fields\n const groupedArrayFieldsByName = groupBy(fields, field => {\n const { groupName } = parseGroupDescriptor(field);\n return groupName;\n });\n\n // Map {groupName: string, fieldLists: OperandField[][]}, where OperandField is a nested array\n // of the appropriate fields, grouped by index.\n return map(groupedArrayFieldsByName, (fieldsInGroup, groupName: string) => ({\n groupName,\n displayName: startCase(groupName),\n capabilities:\n descriptorFields.find(field => field.path === `spec.${groupName}`)\n ?.capabilities ?? [],\n fieldLists: reduce(\n fieldsInGroup,\n (fieldListsAccumulator, field) => {\n const { index, match } = parseArrayPath(field.path);\n if (match) {\n fieldListsAccumulator[index] = [\n ...(fieldListsAccumulator[index] || []),\n field,\n ];\n }\n return fieldListsAccumulator;\n },\n [] as OperandField[][],\n ),\n _dirty: false,\n }));\n}\n\nfunction sortFields(fields: OperandField[], descriptors: Descriptor[]) {\n return sortBy(fields, field =>\n descriptors.findIndex(\n d => normalizePath(d.path) === normalizePath(field.path),\n ),\n );\n}\n\nfunction sortGroupFields(\n fields: OperandField[],\n descriptors: Descriptor[],\n descriptorFields: OperandField[],\n) {\n const groupedFieldsByName = groupBy(\n sortFields(fields, descriptors),\n field => {\n const { groupName } = parseGroupDescriptor(field);\n return groupName;\n },\n );\n return map(groupedFieldsByName, (fieldList, groupName) => ({\n groupName,\n displayName: startCase(groupName),\n capabilities:\n descriptorFields.find(field => field.path === `spec.${groupName}`)\n ?.capabilities ?? [],\n fieldList,\n }));\n}\n","import { isEqual } from '@alauda-fe/dynamic-plugin-sdk';\nimport { get } from 'lodash-es';\n\nimport { FormDataState, OperandField, SpecCapability } from '../../types';\nimport { getFormData, getMatchedCapabilityValue } from '../../utils';\n\nimport { FieldExpression } from './expression-core';\n\nexport const EXPRESSION_PROPS_PREFIX = `${SpecCapability.expression}props.`;\nexport const EXPRESSION_PROPS_OPTIONS_PREFIX = `${EXPRESSION_PROPS_PREFIX}options:`;\nexport const EXPRESSION_PROPS_DEFAULT_PREFIX = `${EXPRESSION_PROPS_PREFIX}default:`;\nexport const EXPRESSION_PROPS_HIDDEN_PREFIX = `${EXPRESSION_PROPS_PREFIX}hidden:`;\nexport const EXPRESSION_PROPS_ALLOW_CREATE_PREFIX = `${EXPRESSION_PROPS_PREFIX}allowCreate:`;\n\nexport interface PropsExpressions {\n /**\n * The form component options, such as select.\n */\n options?: OptionsExpressions;\n /**\n * The form component default value.\n */\n default?: string;\n hidden?: string;\n\n subscribedContextPaths: string[];\n subscribedFormDataPaths: string[];\n}\n\nexport interface OptionsExpressions {\n api: string;\n labelPath: string;\n valuePath: string;\n expression: string;\n}\n\nexport class PropsFieldExpression implements FieldExpression {\n expressions: PropsExpressions;\n\n constructor(field: OperandField) {\n this.expressions = this.evaluatePropsExpressions(field);\n }\n\n private evaluatePropsExpressions(field: OperandField): PropsExpressions {\n return {\n options: this.evaluateOptionsExpression(field),\n default: this.evaluateCommonPropsExpression(\n field,\n EXPRESSION_PROPS_DEFAULT_PREFIX,\n ),\n hidden: this.evaluateCommonPropsExpression(\n field,\n EXPRESSION_PROPS_HIDDEN_PREFIX,\n ),\n subscribedContextPaths: this.evaluateSubscribedContextPaths(field),\n subscribedFormDataPaths: this.evaluateSubscribedFormDataPaths(field),\n };\n }\n\n private evaluateOptionsExpression(field: OperandField): OptionsExpressions {\n const propsVisible = field.capabilities.some(c =>\n c.startsWith(EXPRESSION_PROPS_OPTIONS_PREFIX),\n );\n\n return propsVisible\n ? {\n api: getMatchedCapabilityValue(\n field.capabilities,\n `${EXPRESSION_PROPS_OPTIONS_PREFIX}api:`,\n ),\n labelPath: getMatchedCapabilityValue(\n field.capabilities,\n `${EXPRESSION_PROPS_OPTIONS_PREFIX}label:path:`,\n ),\n valuePath: getMatchedCapabilityValue(\n field.capabilities,\n `${EXPRESSION_PROPS_OPTIONS_PREFIX}value:path:`,\n ),\n expression: getMatchedCapabilityValue(\n field.capabilities,\n `${EXPRESSION_PROPS_OPTIONS_PREFIX}`,\n ),\n }\n : null;\n }\n\n private evaluateCommonPropsExpression(\n field: OperandField,\n prefix: string,\n ): string {\n return getMatchedCapabilityValue(field.capabilities, prefix);\n }\n\n private evaluateSubscribedContextPaths(field: OperandField) {\n return field.capabilities.reduce((p, c) => {\n const matched = c.match(/(?<=\\${context.)[^\\t\\n\\v\\f\\r{}]+(?=})/g) || [];\n return [...p, ...matched];\n }, []);\n }\n\n private evaluateSubscribedFormDataPaths(field: OperandField) {\n return field.capabilities.reduce((p, c) => {\n const matched = c.match(/(?<=\\${formData.)[^\\t\\n\\v\\f\\r{}]+(?=})/g) || [];\n return [...p, ...matched];\n }, []);\n }\n}\n\nexport const compareWithSubscribedPaths = (\n dynamicExpression: PropsExpressions,\n prev: [unknown, FormDataState],\n next: [unknown, FormDataState],\n) => {\n const [prevFormContext, prevFormDataState] = prev;\n const [nextFormContext, nextFormDataState] = next;\n return (\n !dynamicExpression.subscribedContextPaths.some(\n path => !isEqual(get(prevFormContext, path), get(nextFormContext, path)),\n ) &&\n !dynamicExpression.subscribedFormDataPaths.some(\n path =>\n !isEqual(\n getFormData(prevFormDataState, path),\n getFormData(nextFormDataState, path),\n ),\n )\n );\n};\n","import { FormModule, IconModule, TooltipModule } from '@alauda/ui';\nimport { PurePipe, TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ErrorsMapperComponent,\n HelpDocDirective,\n} from '@alauda-fe/dynamic-plugin-shared';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n forwardRef,\n inject,\n} from '@angular/core';\n\nimport { OperandField } from '../types';\nimport {\n getFieldDescription,\n getFieldDocLink,\n getFieldTooltip,\n isFieldCopyable,\n isFieldDescriptionAsLink,\n} from '../utils';\n\nimport { OperandFieldComponent } from './operand-field.component';\n\n@Component({\n selector: 'acl-crd-form-item',\n templateUrl: 'form-item.component.html',\n styleUrls: ['form-item.styles.scss'],\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- form status change\n changeDetection: ChangeDetectionStrategy.Default,\n standalone: true,\n imports: [\n PurePipe,\n TranslatePipe,\n FormModule,\n IconModule,\n TooltipModule,\n ErrorsMapperComponent,\n HelpDocDirective,\n ],\n})\nexport class FormItemComponent {\n @Input()\n plain: boolean;\n\n getFieldTooltip = getFieldTooltip;\n getFieldDescription = getFieldDescription;\n getFieldDocLink = getFieldDocLink;\n isFieldDescriptionAsLink = isFieldDescriptionAsLink;\n\n readonly fieldComponent = inject(forwardRef(() => OperandFieldComponent));\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // FIXME: 部分页面需要调用 markForCheck 才行, 需要确认为啥使用了 ChangeDetectionStrategy.Default 数据变更之后视图依旧不同步更新\n this.fieldComponent.crdForm.form.ngSubmit.subscribe(() =>\n this.cdr.markForCheck(),\n );\n }\n\n showFieldCopyable(field: OperandField, isDisabled: boolean) {\n return isFieldCopyable(field) && isDisabled;\n }\n}\n","@if (\n {\n label: fieldComponent.field | pure: fieldComponent.getFieldDisplayName,\n };\n as _\n) {\n <aui-form-item\n [emptyAddon]=\"false\"\n [plain]=\"plain\"\n [attr.data-test]=\"_.label ? 'AUI-FORM-ITEM/' + (_.label | translate) : null\"\n width=\"large\"\n >\n @if (_.label) {\n <label auiFormItemLabel>{{ _.label | translate }}</label>\n }\n <!-- for a required mark in aui-form-item label -->\n @if (!fieldComponent.isDisabled) {\n <ng-container\n auiFormItemControl\n [required]=\"fieldComponent.isRequired\"\n ></ng-container>\n }\n <ng-content></ng-content>\n @if (!fieldComponent.isDisabled) {\n <div auiFormItemHint>\n @if (\n (fieldComponent.crdForm.form.submitted ||\n fieldComponent.control.dirty) &&\n fieldComponent.control.invalid &&\n !fieldComponent.isCustomErrorsMapper\n ) {\n <acl-errors-mapper [errors]=\"fieldComponent.control.errors\">\n </acl-errors-mapper>\n }\n <div>\n @if (!(fieldComponent.field | pure: isFieldDescriptionAsLink)) {\n {{ fieldComponent.field | pure: getFieldDescription | translate }}\n }\n @if (fieldComponent.field | pure: getFieldDocLink; as link) {\n <a\n href=\"javascript:;\"\n [aclHelpDoc]=\"link\"\n aclHelpDocTarget=\"blank\"\n >\n @if (fieldComponent.field | pure: isFieldDescriptionAsLink) {\n {{\n fieldComponent.field | pure: getFieldDescription | translate\n }}\n }\n <aui-icon icon=\"jump\"></aui-icon>\n </a>\n }\n </div>\n </div>\n }\n @if (\n (fieldComponent.field | pure: getFieldTooltip) ||\n (fieldComponent.field\n | pure: showFieldCopyable : fieldComponent.isDisabled)\n ) {\n <div auiFormItemAddon>\n @if (\n fieldComponent.field\n | pure: showFieldCopyable : fieldComponent.isDisabled\n ) {\n <aui-icon\n icon=\"copy\"\n [auiTooltipCopy]=\"fieldComponent.control.value\"\n ></aui-icon>\n }\n @if (fieldComponent.field | pure: getFieldTooltip; as tooltip) {\n <aui-icon\n icon=\"question_circle\"\n [class]=\"\n (fieldComponent.field\n | pure: showFieldCopyable : fieldComponent.isDisabled)\n ? 'tw-ml-8'\n : ''\n \"\n [auiTooltip]=\"tooltipTmp\"\n ></aui-icon>\n <ng-template #tooltipTmp>\n <span style=\"white-space: pre-line\">\n {{ tooltip | translate }}</span\n >\n </ng-template>\n }\n </div>\n }\n </aui-form-item>\n}\n","import { ButtonModule, IconModule } from '@alauda/ui';\nimport { PurePipe, TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n forwardRef,\n} from '@angular/core';\nimport { get } from 'lodash-es';\n\nimport { BaseOperandFiledArrayComponent } from '../abstract/base-array';\nimport { isEmptyArray } from '../utils';\n\nimport { OperandFieldComponent } from './operand-field.component';\n\n@Component({\n selector: 'acl-operand-array-field-group',\n templateUrl: 'operand-array-field-group.component.html',\n styleUrls: ['operand-field-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n PurePipe,\n TranslatePipe,\n IconModule,\n ButtonModule,\n forwardRef(() => OperandFieldComponent),\n ],\n})\nexport class OperandArrayFieldGroupComponent\n extends BaseOperandFiledArrayComponent\n implements OnInit\n{\n ngOnInit() {\n // 如果 arrayFieldGroup 配置了 urn:alm:descriptor:com.tectonic.ui:emptyArray 并且没有 value 值,则不保留首项\n if (\n !get(this.arrayFieldGroup.value, 'length') &&\n isEmptyArray(this.arrayFieldGroup)\n ) {\n this.removeItem(0);\n }\n }\n}\n","<div\n [class.expanded]=\"expanded\"\n class=\"field-group\"\n>\n <div class=\"header\">\n <div\n class=\"title\"\n (click)=\"expanded = !expanded\"\n >\n @if (!expanded) {\n <aui-icon\n size=\"20px,20px\"\n icon=\"caret_down_s\"\n ></aui-icon>\n }\n @if (expanded) {\n <aui-icon\n size=\"20px,20px\"\n icon=\"caret_down_s\"\n ></aui-icon>\n }\n <span>{{ arrayFieldGroup | pure: getFieldDisplayName | translate }}</span>\n </div>\n <div class=\"description\"></div>\n </div>\n <div\n class=\"content\"\n [hidden]=\"!expanded\"\n >\n @for (list of arrayFieldGroup.fieldLists; track list; let i = $index) {\n <div class=\"array-item\">\n @if (!readonly) {\n <div class=\"array-item__remove\">\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"removeItem(i)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n <span>{{ 'remove' | translate }}</span>\n </button>\n </div>\n }\n @for (field of list; track field) {\n <div>\n <acl-operand-field\n [field]=\"field\"\n [fields]=\"fields\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n >\n </acl-operand-field>\n </div>\n }\n </div>\n }\n @if (!readonly) {\n <div class=\"array-item__add\">\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"addItem()\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n <span\n >{{ 'add' | translate }}\n {{ arrayFieldGroup | pure: getFieldDisplayName | translate }}</span\n >\n </button>\n </div>\n }\n </div>\n</div>\n","import { IconModule } from '@alauda/ui';\nimport { PurePipe, TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n forwardRef,\n} from '@angular/core';\n\nimport {\n FieldValueChangeEvent,\n FormDataState,\n FormErrors,\n OperandField,\n OperandFieldGroup,\n} from '../types';\nimport { getFieldDisplayName, isFolded } from '../utils';\n\nimport { OperandFieldComponent } from './operand-field.component';\n\n@Component({\n selector: 'acl-operand-field-group',\n templateUrl: 'operand-field-group.component.html',\n styleUrls: ['operand-field-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n PurePipe,\n TranslatePipe,\n IconModule,\n forwardRef(() => OperandFieldComponent),\n ],\n})\nexport class OperandFieldGroupComponent {\n @Input() fields: OperandField[];\n @Input() fieldGroup: OperandFieldGroup;\n @Input() formDataState: FormDataState;\n @Input() formErrors: FormErrors;\n @Input() readonly = false;\n @Output() valueChange = new EventEmitter<FieldValueChangeEvent>();\n\n private _expanded: boolean;\n\n get expanded() {\n return this._expanded ?? !isFolded(this.fieldGroup);\n }\n\n set expanded(expanded: boolean) {\n this._expanded = expanded;\n }\n\n fieldValueChange(e: FieldValueChangeEvent) {\n this.valueChange.emit(e);\n }\n\n getGroupName(field: OperandFieldGroup) {\n return getFieldDisplayName(field) || field.groupName;\n }\n}\n","<div\n class=\"field-group\"\n [class.expanded]=\"expanded\"\n>\n <div class=\"header\">\n <div\n class=\"title\"\n (click)=\"expanded = !expanded\"\n >\n @if (!expanded) {\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n }\n @if (expanded) {\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n }\n <span>{{ fieldGroup | pure: getGroupName | translate }}</span>\n </div>\n </div>\n <div\n class=\"content\"\n [hidden]=\"!expanded\"\n >\n @for (field of fieldGroup.fieldList; track field) {\n <acl-operand-field\n [field]=\"$any(field)\"\n [fields]=\"fields\"\n [readonly]=\"readonly\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n (valueChange)=\"fieldValueChange($event)\"\n >\n </acl-operand-field>\n }\n </div>\n</div>\n","import { FormModule } from '@alauda/ui';\nimport { PurePipe, TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport { ARRAY_FORM_TABLE_MODULE } from '@alauda-fe/dynamic-plugin-shared';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n forwardRef,\n} from '@angular/core';\nimport { get } from 'lodash-es';\n\nimport { BaseOperandFiledArrayComponent } from '../../../abstract/base-array';\nimport { OperandFieldComponent } from '../../operand-field.component';\n\n@Component({\n selector: 'acl-crd-array-table',\n templateUrl: './template.html',\n styleUrls: ['./styles.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FormModule,\n ARRAY_FORM_TABLE_MODULE,\n forwardRef(() => OperandFieldComponent),\n PurePipe,\n TranslatePipe,\n ],\n})\nexport class CrdFormArrayTableComponent\n extends BaseOperandFiledArrayComponent\n implements OnInit\n{\n ngOnInit() {\n // arrayField group 不需要默认保留一项\n if (!get(this.arrayFieldGroup.value, 'length')) {\n this.removeItem(0);\n }\n }\n}\n","<aui-form-item [emptyAddon]=\"false\">\n <label auiFormItemLabel>{{\n arrayFieldGroup | pure: getFieldDisplayName | translate\n }}</label>\n\n <acl-array-form-table\n style=\"flex: 1\"\n (remove)=\"removeItem($event)\"\n (add)=\"addItem()\"\n [rows]=\"arrayFieldGroup.fieldLists\"\n [readonly]=\"readonly\"\n class=\"form-table__flex-layout\"\n [resourceNameTranslated]=\"\n arrayFieldGroup | pure: getFieldDisplayName | translate\n \"\n >\n <ng-container *aclArrayFormTableHeader>\n @for (field of basicArrayFieldTemplate; track field) {\n @if (field | pure: fieldIsRequired) {\n <th required>\n {{ field | pure: getFieldDisplayName | translate }}\n </th>\n } @else {\n <th>{{ field | pure: getFieldDisplayName | translate }}</th>\n }\n }\n </ng-container>\n\n <!-- Input row -->\n <ng-container *aclArrayFormTableRow=\"let fieldList; let index = index\">\n @for (field of fieldList; track trackByFn(index); let index = $index) {\n <td>\n <acl-operand-field\n [field]=\"field\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n >\n </acl-operand-field>\n </td>\n }\n </ng-container>\n </acl-array-form-table>\n</aui-form-item>\n","import {\n DialogModule,\n DialogRef,\n DIALOG_DATA,\n MessageService,\n ButtonModule,\n FormModule,\n IconModule,\n InputModule,\n} from '@alauda/ui';\nimport {\n COMMON_RESOURCE_DEFINITIONS,\n K8sApiService,\n K8S_RESOURCE_NAME_BASE,\n SecretType,\n StringMap,\n TranslateService,\n TranslatePipe,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ErrorsMapperComponent,\n StrongPasswordDirective,\n} from '@alauda-fe/dynamic-plugin-shared';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n FormBuilder,\n FormGroupDirective,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { encode } from 'ab64';\nimport { finalize } from 'rxjs';\n\nimport { BasicAuthSecretConfig } from '../type';\n\n@Component({\n templateUrl: 'template.html',\n styleUrls: ['styles.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n FormModule,\n InputModule,\n ButtonModule,\n IconModule,\n DialogModule,\n ErrorsMapperComponent,\n StrongPasswordDirective,\n TranslatePipe,\n ],\n})\nexport class BasicAuthCreateSecretDialogComponent {\n @ViewChild(FormGroupDirective, { static: true })\n readonly form: FormGroupDirective;\n\n readonly dialogData = inject(DIALOG_DATA) as {\n cluster: string;\n namespace: string;\n config?: BasicAuthSecretConfig;\n };\n\n private readonly dialogRef = inject(DialogRef);\n private readonly fb = inject(FormBuilder);\n private readonly k8sApi = inject(K8sApiService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly message = inject(MessageService);\n private readonly translate = inject(TranslateService);\n\n submitting = false;\n\n K8S_RESOURCE_NAME_BASE = K8S_RESOURCE_NAME_BASE;\n\n usernameKey = this.dialogData.config?.usernameKey ?? 'username';\n passwordKey = this.dialogData.config?.passwordKey ?? 'password';\n usernameReadonly = !!this.dialogData.config?.usernameReadonly;\n strongPassword = !!this.dialogData.config?.strongPassword;\n password = !!this.dialogData.config?.password;\n showPassword = false;\n\n formGroup = this.fb.group({\n name: this.fb.control(this.dialogData.config?.secretName || '', [\n Validators.required,\n Validators.pattern(K8S_RESOURCE_NAME_BASE.pattern),\n Validators.maxLength(63),\n ]),\n username: this.fb.control(this.dialogData.config?.usernameDefault || ''),\n password: this.fb.control('', [Validators.required]),\n });\n\n confirm() {\n this.form.onSubmit(null);\n if (!this.form.valid) {\n return;\n }\n this.submitting = true;\n const value = this.form.value;\n const data: StringMap = {\n [this.passwordKey]: encode(value.password),\n };\n if (value.username) {\n data[this.usernameKey] = encode(value.username);\n }\n const resource = {\n kind: 'Secret',\n apiVersion: 'v1',\n metadata: {\n name: value.name,\n namespace: this.dialogData.namespace,\n },\n type: SecretType.Opaque,\n data,\n };\n this.k8sApi\n .postResource({\n definition: COMMON_RESOURCE_DEFINITIONS.SECRET,\n cluster: this.dialogData.cluster,\n namespace: this.dialogData.namespace,\n resource,\n })\n .pipe(\n finalize(() => {\n this.submitting = false;\n this.cdr.markForCheck();\n }),\n )\n .subscribe(res => {\n this.dialogRef.close(res);\n this.message.success(this.translate.get('create_success'));\n });\n }\n\n toggleShowPassword() {\n this.showPassword = !this.showPassword;\n }\n}\n","<aui-dialog-header>\n {{ 'create_secret' | translate }}\n</aui-dialog-header>\n\n<aui-dialog-content>\n <form\n auiForm\n [formGroup]=\"formGroup\"\n >\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n <input\n type=\"text\"\n required\n aui-input\n auiFormItemControl\n formControlName=\"name\"\n />\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"formGroup.get('name').errors\"\n [errorsMapper]=\"{\n pattern: K8S_RESOURCE_NAME_BASE.tip | translate,\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n <aui-form-item>\n <label auiFormItemLabel>{{ 'config' | translate }}</label>\n <div class=\"form-table__flex-layout tw-flex-1\">\n <table class=\"acl-array-form-table\">\n <thead>\n <tr>\n <th>{{ 'key' | translate }}</th>\n <th>{{ 'value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n <input\n type=\"text\"\n required\n aui-input\n readonly\n [ngModel]=\"usernameKey\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n </td>\n <td>\n <input\n type=\"text\"\n aui-input\n auiFormItemControl\n formControlName=\"username\"\n [readonly]=\"usernameReadonly\"\n />\n </td>\n </tr>\n <tr>\n <td>\n <input\n type=\"text\"\n required\n aui-input\n readonly\n [ngModel]=\"passwordKey\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n </td>\n <td>\n @if (strongPassword && !password) {\n <input\n type=\"password\"\n required\n aui-input\n auiFormItemControl\n formControlName=\"password\"\n aclStrongPassword\n />\n }\n @if (!strongPassword && !password) {\n <input\n type=\"text\"\n required\n aui-input\n auiFormItemControl\n formControlName=\"password\"\n />\n }\n @if (password && !strongPassword) {\n <aui-input-group\n auiFormItemControl\n required\n >\n <input\n auiFormItemControl\n aui-input\n required\n formControlName=\"password\"\n [type]=\"showPassword ? 'text' : 'password'\"\n />\n <div\n auiInputSuffix\n class=\"password__suffix\"\n (click)=\"toggleShowPassword()\"\n >\n <aui-icon\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n ></aui-icon>\n </div>\n </aui-input-group>\n }\n\n @if (formGroup.get('password').dirty || form?.submitted) {\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"formGroup.get('password').errors\"\n ></acl-errors-mapper>\n }\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </aui-form-item>\n </form>\n</aui-dialog-content>\n\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n (click)=\"confirm()\"\n [loading]=\"submitting\"\n [disabled]=\"submitting\"\n >\n {{ 'create' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n","import {\n DialogService,\n DialogSize,\n ButtonModule,\n SelectModule,\n} from '@alauda/ui';\nimport {\n COMMON_RESOURCE_DEFINITIONS,\n K8S_UTIL_PIPES_MODULE,\n K8sApiService,\n K8sUtilService,\n KubernetesResource,\n ObservableInput,\n publishRef,\n Secret,\n SecretType,\n skipError,\n TranslatePipe,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Input,\n inject,\n} from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { BaseResourceFormComponent } from 'ng-resource-form-util';\nimport {\n combineLatest,\n filter,\n map,\n Observable,\n startWith,\n Subject,\n switchMap,\n takeUntil,\n} from 'rxjs';\n\nimport { CrdFormComponent } from '../../../crd-form/component';\nimport { OperandField } from '../../../types';\nimport { getBasicAuthSecretConfig } from '../../../utils';\n\nimport { BasicAuthCreateSecretDialogComponent } from './create/component';\nimport { BasicAuthSecretConfig } from './type';\n\n@Component({\n selector: 'acl-crd-basic-auth-secret',\n styles: [\n `\n :host {\n display: flex;\n }\n `,\n ],\n templateUrl: 'template.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SelectModule,\n ButtonModule,\n TranslatePipe,\n K8S_UTIL_PIPES_MODULE,\n ],\n})\nexport class BasicAuthSecretComponent extends BaseResourceFormComponent<string> {\n @Input()\n required: boolean;\n\n @Input()\n field: OperandField;\n\n @ObservableInput()\n field$!: Observable<OperandField>;\n\n private readonly k8sApi = inject(K8sApiService);\n private readonly crdForm = inject(CrdFormComponent);\n private readonly dialog = inject(DialogService);\n private readonly k8sUtil = inject(K8sUtilService);\n\n config$: Observable<BasicAuthSecretConfig> = this.field$.pipe(\n filter(field => !!field),\n map(field => getBasicAuthSecretConfig(field)),\n publishRef(),\n );\n\n reload$ = new Subject<void>();\n resources$ = combineLatest([\n this.crdForm.formContext$,\n this.config$,\n this.reload$.pipe(startWith(null)),\n ]).pipe(\n switchMap(([{ cluster, namespace }, config]) =>\n this.k8sApi\n .getResourceList<Secret>({\n definition: COMMON_RESOURCE_DEFINITIONS.SECRET,\n namespace: config?.namespace ?? namespace,\n cluster: config?.cluster ?? cluster,\n })\n .pipe(\n map(res => res.items),\n skipError([] as Secret[]),\n map(items =>\n items.filter(item =>\n [SecretType.Opaque, SecretType.BasicAuth].includes(item.type),\n ),\n ),\n ),\n ),\n publishRef(),\n );\n\n constructor() {\n super(inject(Injector));\n\n this.resources$.pipe(takeUntil(this.destroy$)).subscribe(items => {\n if (\n this.form.value &&\n !items.some(item => this.k8sUtil.getName(item) === this.form.value)\n ) {\n this.form.reset();\n }\n });\n }\n\n createForm() {\n // 使用 control 的 validators 而非 required 指令目地是后者会导致 control 实例化后 dirty\n return this.fb.control(null, this.required ? Validators.required : null);\n }\n\n create() {\n this.config$.subscribe(config => {\n const dialogRef = this.dialog.open(BasicAuthCreateSecretDialogComponent, {\n size: DialogSize.Big,\n data: {\n cluster: config?.cluster ?? this.crdForm.formContext.cluster,\n namespace: config?.namespace ?? this.crdForm.formContext.namespace,\n config,\n },\n });\n return dialogRef.afterClosed().subscribe((res: KubernetesResource) => {\n if (res) {\n this.reload$.next();\n this.form.setValue(res.metadata.name);\n }\n });\n });\n }\n}\n","<aui-select\n class=\"tw-flex-1 tw-mr-[4px]\"\n [formControl]=\"form\"\n>\n @for (item of resources$ | async; track item) {\n <aui-option\n [value]=\"item | aclName\"\n [label]=\"item | aclName\"\n >\n {{ item | aclName }}\n </aui-option>\n }\n <aui-option-placeholder>{{ 'no_data' | translate }}</aui-option-placeholder>\n</aui-select>\n<button\n aui-button=\"default\"\n type=\"button\"\n (click)=\"create()\"\n>\n {{ 'create' | translate }}\n</button>\n","import { K8sResourceDefinitions } from '@alauda-fe/dynamic-plugin-sdk';\n\nexport function findResourceType(\n type: string,\n definitions: K8sResourceDefinitions,\n) {\n type = plural(type.toLowerCase());\n return Object.entries(definitions).find(([_k, v]) => v.type === type)?.[0];\n}\n\nexport function plural(word: string): string {\n const plural: { [key: string]: string } = {\n '(quiz)$': '$1zes',\n '^(ox)$': '$1en',\n '([m|l])ouse$': '$1ice',\n // cspell:disable-next-line\n '(matr|vert|ind)ix|ex$': '$1ices',\n '(x|ch|ss|sh)$': '$1es',\n // cspell:disable-next-line\n '([^aeiouy]|qu)y$': '$1ies',\n '(hive)$': '$1s',\n '(?:([^f])fe|([lr])f)$': '$1$2ves',\n // cspell:disable-next-line\n '(shea|lea|loa|thie)f$': '$1ves',\n sis$: 'ses',\n '([ti])um$': '$1a',\n // cspell:disable-next-line\n '(tomat|potat|ech|her|vet)o$': '$1oes',\n '(bu)s$': '$1ses',\n '(alias)$': '$1es',\n // cspell:disable-next-line\n '(octop)us$': '$1i',\n '(ax|test)is$': '$1es',\n '(us)$': '$1es',\n '([^s]+)$': '$1s',\n };\n // check for matches using regular expressions\n Object.keys(plural).forEach(reg => {\n const pattern = new RegExp(reg, 'i');\n if (pattern.test(word)) {\n word = word.replace(pattern, plural[reg]);\n }\n });\n return word;\n}\n","import { SelectModule, TagModule, TooltipModule } from '@alauda/ui';\nimport {\n K8sApiService,\n K8sResourceDefinitions,\n ObservableInput,\n skipError,\n TOKEN_RESOURCE_DEFINITIONS,\n ValueHook,\n K8S_UTIL_PIPES_MODULE,\n TranslatePipe,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Input,\n inject,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { isEmpty } from 'lodash-es';\nimport { BaseResourceFormComponent } from 'ng-resource-form-util';\nimport { BehaviorSubject, map, Observable, pluck, switchMap, tap } from 'rxjs';\n\nimport { CrdFormComponent } from '../../../crd-form/component';\nimport { FormErrors, OperandField } from '../../../types';\nimport { getK8sResourcePrefixOptions } from '../../../utils';\n\nimport { findResourceType } from './util';\n\n@Component({\n selector: 'acl-crd-resource-prefix',\n templateUrl: './template.html',\n styleUrls: ['./style.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SelectModule,\n TagModule,\n TooltipModule,\n TranslatePipe,\n K8S_UTIL_PIPES_MODULE,\n ],\n})\nexport class K8sResourcePrefixComponent extends BaseResourceFormComponent {\n private readonly k8sApi = inject(K8sApiService);\n private readonly crdForm = inject(CrdFormComponent);\n private readonly resourceDefinitions = inject<K8sResourceDefinitions>(\n TOKEN_RESOURCE_DEFINITIONS,\n );\n\n constructor() {\n super(inject(Injector));\n }\n\n init$$ = new BehaviorSubject(false);\n\n @Input()\n field: OperandField;\n\n @ObservableInput()\n field$!: Observable<OperandField>;\n\n @Input()\n readonly = false;\n\n /**\n * crd-form 的 errorState 是由全局的 FormError 对象建立的,为满足单一数据源的设计,自定义 widget 的 error 可以由外部传入,\n * 所有的 validation 在 field 级别校验,widget 只需要在关心校验失败时进行合理展示\n */\n @ValueHook(function (formErrors: FormErrors) {\n this.form?.setErrors(isEmpty(formErrors) ? null : formErrors);\n })\n @Input()\n formErrors: FormErrors;\n\n options$ = this.field$.pipe(map(field => getK8sResourcePrefixOptions(field)));\n\n resources$ = this.options$.pipe(\n switchMap(option =>\n this.k8sApi[\n option.isGlobal ? 'getGlobalResourceList' : 'getResourceList'\n ]({\n type: findResourceType(option.type, this.resourceDefinitions),\n ...(option.namespaced\n ? option.isGlobal\n ? { namespaced: true }\n : { namespace: this.crdForm?.formContext?.namespace }\n : null),\n ...(!option.isGlobal && {\n cluster: this.crdForm?.formContext?.cluster,\n }),\n ...(option.labelSelector && {\n queryParams: { labelSelector: option.labelSelector },\n }),\n }).pipe(pluck('items')),\n ),\n skipError(),\n tap(() => this.init$$.next(true)),\n );\n\n createForm() {\n return this.fb.control(null);\n }\n}\n","@if ((options$ | async)?.multiple) {\n <aui-multi-select\n class=\"select\"\n [formControl]=\"form\"\n [hidden]=\"readonly || !(init$$ | async)\"\n [maxRowCount]=\"3\"\n >\n @for (item of resources$ | async; track item) {\n <aui-option\n [value]=\"item | aclName\"\n [label]=\"item | aclName\"\n >\n {{ item | aclName }}\n </aui-option>\n }\n </aui-multi-select>\n @if (readonly) {\n @for (tag of $any(form.value); track tag; let ind = $index) {\n <aui-tag\n type=\"info\"\n size=\"mini\"\n [border]=\"true\"\n [auiTooltip]=\"tag\"\n >\n {{ tag }}\n </aui-tag>\n }\n }\n} @else {\n <aui-select\n [formControl]=\"form\"\n class=\"select\"\n [hidden]=\"readonly\"\n >\n @for (item of resources$ | async; track item) {\n <aui-option\n [value]=\"item | aclName\"\n [label]=\"item | aclName\"\n >\n {{ item | aclName }}\n </aui-option>\n }\n <aui-option-placeholder>{{ 'no_data' | translate }}</aui-option-placeholder>\n </aui-select>\n @if (readonly) {\n <span>{{ form.value }}</span>\n }\n}\n","import { IconModule } from '@alauda/ui';\nimport { SanitizePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport { createNestedFormControl } from '@alauda-fe/dynamic-plugin-shared';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n forwardRef,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { OperandField, SpecCapability } from '../../../types';\n\ninterface LinkOptions {\n target?: string; // default \"_blank\"\n}\n\nexport function isLink(field: OperandField) {\n const { capabilities } = field;\n return capabilities.some(c => c.startsWith(`${SpecCapability.text}:link`));\n}\n\n/**\n * 获取链接参数\n *\n * @see https://jira.alauda.cn/browse/ACP-32703\n */\nexport function resolveLinkOptions(field: OperandField) {\n const linkCapability = field.capabilities.find(capability =>\n capability.startsWith(SpecCapability.text),\n );\n const target = linkCapability?.split(`${SpecCapability.text}:link:`)?.[1];\n\n return { target: target || '_blank' } as LinkOptions;\n}\n\n@Component({\n standalone: true,\n selector: 'acl-crd-link',\n templateUrl: 'template.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => LinkComponent),\n multi: true,\n },\n ],\n imports: [IconModule, SanitizePipe],\n styles: [\n `\n :host {\n flex: none !important;\n }\n `,\n ],\n})\nexport class LinkComponent extends createNestedFormControl<string>({\n autoEmitChange: true,\n}) {\n @Input()\n field: OperandField;\n\n get options() {\n return resolveLinkOptions(this.field);\n }\n}\n","<a\n [href]=\"model | aclSanitize: 'url'\"\n [target]=\"options.target\"\n>\n <span>{{ model }}</span>\n @if (options.target === '_blank') {\n <aui-icon\n icon=\"jump\"\n margin=\"left\"\n >\n </aui-icon>\n }\n</a>\n","import { parseJson } from '@alauda-fe/dynamic-plugin-sdk';\nimport { escapeRegExp } from 'lodash-es';\n\nimport { OperandField, SpecCapability } from '../../types';\n\nfunction getConfigurations(specCapability: string, part: string) {\n const regExp = new RegExp(`^${escapeRegExp(part)}(.*)$`);\n const [_, config] = regExp.exec(specCapability) || [];\n return config;\n}\n\n// urn:alm:descriptor:com.tectonic.ui:resourceRequirements:required\n// urn:alm:descriptor:com.tectonic.ui:resourceRequirements:required:limit-memory&limit-cpu&request-memory&request-cpu\n// urn:alm:descriptor:com.tectonic.ui:resourceRequirements:required:limit&request-memory\nexport function resolveRequirementsRequiredOptions(field: OperandField) {\n if (!field) {\n return null;\n }\n const options = field.capabilities.filter(descriptor =>\n descriptor.startsWith(SpecCapability.resourceRequirements),\n ) as string[];\n const allRequired = options.includes(\n `${SpecCapability.resourceRequirements}:required`,\n );\n if (allRequired) {\n return {\n required: {\n limit: ['cpu', 'memory'],\n request: ['cpu', 'memory'],\n },\n };\n }\n const requiredMap = options.reduce(\n (prev, curr) => {\n const partsStr = curr.split(\n `${SpecCapability.resourceRequirements}:required:`,\n )?.[1];\n partsStr?.split('&')?.forEach(optionStr => {\n const options = optionStr?.split('-');\n if (options.length === 1) {\n prev[options[0] as 'limit' | 'request'].add('memory').add('cpu');\n }\n if (options.length > 1) {\n prev[options[0] as 'limit' | 'request'].add(options[1]);\n }\n });\n return prev;\n },\n {\n limit: new Set<string>(),\n request: new Set<string>(),\n },\n );\n\n return {\n required: {\n limit: Array.from(requiredMap.limit),\n request: Array.from(requiredMap.request),\n },\n };\n}\n\n// urn:alm:descriptor:com.tectonic.ui:resourceRequirements:min:{\"limits\": {\"cpu\":\"2c\", \"memory\":\"500Mi\"}, \"requests\":{\"cpu\":\"100m\", \"memory\":\"250Mi\"}}\n// urn:alm:descriptor:com.tectonic.ui:resourceRequirements:max:{\"limits\": {\"cpu\":\"4c\", \"memory\":\"500Mi\"}, \"requests\":{\"cpu\":\"4c\", \"memory\":\"500Mi\"}}\nexport function resolveRequirementsMinOrMaxOptions(field: OperandField) {\n if (!field) {\n return null;\n }\n\n const options = field.capabilities.filter(descriptor =>\n descriptor.startsWith(SpecCapability.resourceRequirements),\n ) as string[];\n\n const getConfigurationMap = (option: string, capability: string) => {\n const configuration = getConfigurations(option, capability);\n const { limits, requests } = parseJson<{\n limits: { cpu: string; memory: string };\n requests: { cpu: string; memory: string };\n }>(configuration, {\n limits: { cpu: null, memory: null },\n requests: { cpu: null, memory: null },\n });\n\n return { limits, requests };\n };\n\n const getResourceMinOrMaxMap = (suffix: string) => {\n const option = options.find(option =>\n option.includes(`${SpecCapability.resourceRequirements}:${suffix}:`),\n );\n return getConfigurationMap(\n option,\n `${SpecCapability.resourceRequirements}:${suffix}:`,\n );\n };\n\n return {\n min: getResourceMinOrMaxMap('min'),\n max: getResourceMinOrMaxMap('max'),\n };\n}\n","import { FormModule, IconModule, InputModule, SelectModule } from '@alauda/ui';\nimport {\n bind,\n FieldNotAvailablePipe,\n PurePipe,\n TranslatePipe,\n TranslateService,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ErrorsMapperComponent,\n RESOURCE_MAC_TYPES,\n ResourceRequirementFormModal,\n ResourceRequirementStrict,\n formatCPU,\n formatMemory,\n getResourceValue,\n getResourceViewModel,\n initGreaterValidator,\n resourceUnits,\n transferResource,\n} from '@alauda-fe/dynamic-plugin-shared';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Input,\n OnInit,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormControl,\n FormGroup,\n ValidationErrors,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { merge, omit, isEmpty } from 'lodash-es';\nimport { BaseResourceFormGroupComponent } from 'ng-resource-form-util';\n\nimport { OperandField } from '../../../types';\nimport { OperandFieldComponent } from '../../operand-field.component';\nimport {\n resolveRequirementsRequiredOptions,\n resolveRequirementsMinOrMaxOptions,\n} from '../utils';\n\ntype AvailableResourceType = (typeof RESOURCE_MAC_TYPES)[number];\ntype ResourceKind = keyof ResourceRequirementFormModal;\n\ninterface ResourceControl {\n value: string;\n unit: string;\n}\n\nfunction handleValidationErrors(\n valueCtrl: AbstractControl,\n errors: ValidationErrors,\n): ValidationErrors | null {\n // 这里避免覆盖其它 errors\n const combinedErrors = { ...valueCtrl.errors, ...errors };\n valueCtrl.setErrors(combinedErrors);\n return combinedErrors;\n}\n\nfunction valueFormat(type: 'cpu' | 'memory', value: string) {\n return type === 'cpu' ? formatCPU(value) : formatMemory(value);\n}\n\nfunction getCurrentValue(\n group: FormGroup<{\n value: FormControl<string>;\n unit: FormControl<string>;\n }>,\n type: 'cpu' | 'memory',\n): number {\n const valueCtrl = group.get('value');\n const value = valueCtrl.value;\n const unit = group.get('unit').value;\n return valueFormat(type, (value || 0) + unit);\n}\n\n@Component({\n selector: 'acl-crd-resource-requirements',\n templateUrl: 'resource-requirements.component.html',\n styleUrls: ['resource-requirements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormModule,\n InputModule,\n SelectModule,\n IconModule,\n ErrorsMapperComponent,\n TranslatePipe,\n PurePipe,\n FieldNotAvailablePipe,\n ],\n})\nexport class ResourceRequirementsComponent\n extends BaseResourceFormGroupComponent<\n ResourceRequirementStrict,\n ResourceRequirementFormModal\n >\n implements OnInit\n{\n @Input()\n readOnly: boolean;\n\n @Input()\n field: OperandField;\n\n get requiredOptions() {\n return resolveRequirementsRequiredOptions(this.fieldComponent?.field);\n }\n\n get limitMemoryRequired() {\n return this.requiredOptions.required?.limit?.includes('memory');\n }\n\n get limitCpuRequired() {\n return this.requiredOptions.required?.limit?.includes('cpu');\n }\n\n get requestMemoryRequired() {\n return this.requiredOptions.required?.request?.includes('memory');\n }\n\n get requestCpuRequired() {\n return this.requiredOptions.required?.request?.includes('cpu');\n }\n\n get minMaxOptions() {\n return resolveRequirementsMinOrMaxOptions(this.fieldComponent?.field);\n }\n\n get limitMemoryMin() {\n return this.minMaxOptions.min.limits?.memory;\n }\n\n get limitCpuMin() {\n return this.minMaxOptions.min.limits?.cpu;\n }\n\n get requestMemoryMin() {\n return this.minMaxOptions.min.requests?.memory;\n }\n\n get requestCpuMin() {\n return this.minMaxOptions.min.requests?.cpu;\n }\n\n get limitMemoryMax() {\n return this.minMaxOptions.max.limits?.memory;\n }\n\n get limitCpuMax() {\n return this.minMaxOptions.max.limits?.cpu;\n }\n\n get requestMemoryMax() {\n return this.minMaxOptions.max.requests?.memory;\n }\n\n get requestCpuMax() {\n return this.minMaxOptions.max.requests?.cpu;\n }\n\n resourceUnits = resourceUnits;\n getResourceValue = getResourceValue;\n getResourceViewModel = getResourceViewModel;\n\n private readonly fieldComponent = inject(\n forwardRef(() => OperandFieldComponent),\n {\n optional: true,\n },\n );\n\n readonly controlContainer = inject(ControlContainer, {\n optional: true,\n });\n\n readonly translate = inject(TranslateService);\n\n constructor() {\n super(inject(Injector));\n }\n\n override ngOnInit() {\n super.ngOnInit();\n const greaterValidatorSubscriptions = [\n initGreaterValidator('cpu', this.form),\n initGreaterValidator('memory', this.form),\n ];\n this.destroy$.subscribe(() => {\n greaterValidatorSubscriptions.forEach(sub => sub.unsubscribe());\n });\n }\n\n createForm() {\n return this.fb.group({\n limits: this.fb.group({\n cpu: this.fb.group(\n {\n value: '',\n unit: 'c',\n },\n {\n validators: [\n this.minValidator(this.limitCpuMin, 'cpu'),\n this.maxValidator(this.limitCpuMax, 'cpu'),\n ],\n },\n ),\n memory: this.fb.group(\n {\n value: '',\n unit: 'Mi',\n },\n {\n validators: [\n this.minValidator(this.limitMemoryMin, 'memory'),\n this.maxValidator(this.limitMemoryMax, 'memory'),\n ],\n },\n ),\n }),\n requests: this.fb.group({\n cpu: this.fb.group(\n {\n value: '',\n unit: 'c',\n },\n {\n validators: [\n this.minValidator(this.requestCpuMin, 'cpu'),\n this.maxValidator(this.requestCpuMax, 'cpu'),\n ],\n },\n ),\n memory: this.fb.group(\n {\n value: '',\n unit: 'Mi',\n },\n {\n validators: [\n this.minValidator(this.requestMemoryMin, 'memory'),\n this.maxValidator(this.requestMemoryMax, 'memory'),\n ],\n },\n ),\n }),\n });\n }\n\n override getDefaultFormModel(): ResourceRequirementFormModal {\n return {\n limits: {\n cpu: {\n value: '',\n unit: 'c',\n },\n memory: {\n value: '',\n unit: 'Mi',\n },\n },\n requests: {\n cpu: {\n value: '',\n unit: 'c',\n },\n memory: {\n value: '',\n unit: 'Mi',\n },\n },\n };\n }\n\n override adaptFormModel(\n formModel: ResourceRequirementFormModal,\n ): ResourceRequirementStrict {\n this.formatFormModel(formModel);\n return {\n requests: transferResource(formModel.requests),\n limits: transferResource(formModel.limits),\n };\n }\n\n @bind\n private minValidator(min: string, type: 'cpu' | 'memory') {\n return (\n group: FormGroup<{\n value: FormControl<string>;\n unit: FormControl<string>;\n }>,\n ): ValidationErrors => {\n if (!min) {\n return null;\n }\n\n const valueCtrl = group.get('value');\n const currentValue = getCurrentValue(group, type);\n const minThreshold = valueFormat(type, min);\n\n if (currentValue < minThreshold) {\n return handleValidationErrors(valueCtrl, { min: true });\n }\n const errors = omit(valueCtrl.errors, 'min');\n valueCtrl.setErrors(isEmpty(errors) ? null : errors);\n return null;\n };\n }\n\n @bind\n private maxValidator(max: string, type: 'cpu' | 'memory') {\n return (\n group: FormGroup<{\n value: FormControl<string>;\n unit: FormControl<string>;\n }>,\n ): ValidationErrors => {\n if (!max) {\n return null;\n }\n\n const valueCtrl = group.get('value');\n const currentValue = getCurrentValue(group, type);\n const maxThreshold = valueFormat(type, max);\n\n if (currentValue > maxThreshold) {\n return handleValidationErrors(valueCtrl, { max: true });\n }\n\n const errors = omit(valueCtrl.errors, 'max');\n valueCtrl.setErrors(isEmpty(errors) ? null : errors);\n return null;\n };\n }\n\n formatFormModel(formModel: ResourceRequirementFormModal) {\n Object.values(formModel).forEach(modelValue => {\n Object.values(modelValue).forEach(v => {\n v.value = `${v.value}`;\n });\n });\n }\n\n getCpuUnitLabel(value: 'm' | 'c') {\n return value === 'm'\n ? ''\n : resourceUnits.cpu.find(unit => unit.value === value).label;\n }\n\n override adaptResourceModel(\n resources: ResourceRequirementStrict,\n ): ResourceRequirementFormModal {\n const resourcesModel = {} as ResourceRequirementFormModal;\n if (resources) {\n Object.keys(resources).forEach(kind => {\n const resourceKind = kind as ResourceKind;\n resourcesModel[resourceKind] = Object.keys(resources[resourceKind])\n .filter(key =>\n RESOURCE_MAC_TYPES.includes(key as AvailableResourceType),\n )\n .reduce(\n (item, type) => {\n const resourceType = type as AvailableResourceType;\n item[resourceType] = getResourceViewModel(\n resources[resourceKind][resourceType],\n resourceType,\n );\n return item;\n },\n {} as Record<AvailableResourceType, ResourceControl>,\n );\n });\n }\n return merge(this.getDefaultFormModel(), resourcesModel);\n }\n\n @bind\n getMinOrMaxErrorsMapper(\n value: string,\n kind: 'min' | 'max',\n type: 'cpu' | 'memory',\n _locale: string,\n ) {\n const resourceCtrl = getResourceViewModel(value, type);\n return this.translate.get(`warning_${kind}`, {\n value: resourceCtrl.value + this.translate.get(resourceCtrl.unit),\n });\n }\n}\n","@if (!readOnly) {\n <form [formGroup]=\"form\">\n <div class=\"resource_requirements\">\n <div class=\"input-group-label\">\n {{ 'resource_requirements_requests' | translate }}\n </div>\n <div\n class=\"input-group-wrapper tw-items-start\"\n formGroupName=\"requests\"\n >\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper cpu\"\n formGroupName=\"cpu\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': requestCpuRequired,\n }\"\n >\n CPU\n </div>\n <input\n aui-input\n type=\"number\"\n [required]=\"requestCpuRequired\"\n auiFormItemControl\n formControlName=\"value\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n @for (unit of resourceUnits['cpu']; track unit) {\n <aui-option\n [value]=\"unit.value\"\n [label]=\"unit.label | translate\"\n >\n {{ unit.label | translate }}\n </aui-option>\n }\n </aui-select>\n </aui-input-group>\n </div>\n @if (\n form.get('requests.cpu.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n ) {\n <acl-errors-mapper\n [errors]=\"form.get('requests.cpu.value').errors\"\n [errorsMapper]=\"{\n min:\n requestCpuMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'cpu'\n : translate.locale,\n max:\n requestCpuMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'cpu'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n }\n </div>\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper memory\"\n [formGroupName]=\"'memory'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': requestMemoryRequired,\n }\"\n >\n {{ 'memory' | translate }}\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"requestMemoryRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n @for (unit of resourceUnits['memory']; track unit) {\n <aui-option [value]=\"unit\">\n {{ unit }}\n </aui-option>\n }\n </aui-select>\n </aui-input-group>\n </div>\n @if (\n form.get('requests.memory.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n ) {\n <acl-errors-mapper\n [errors]=\"form.get('requests.memory.value').errors\"\n [errorsMapper]=\"{\n min:\n requestMemoryMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'memory'\n : translate.locale,\n max:\n requestMemoryMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'memory'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n }\n </div>\n </div>\n </div>\n <div class=\"resource_requirements\">\n <div class=\"input-group-label\">\n {{ 'resource_requirements_limits' | translate }}\n </div>\n <div\n class=\"input-group-wrapper tw-items-start\"\n formGroupName=\"limits\"\n >\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper cpu\"\n [formGroupName]=\"'cpu'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': limitCpuRequired,\n }\"\n >\n CPU\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"limitCpuRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n @for (unit of resourceUnits['cpu']; track unit) {\n <aui-option\n [value]=\"unit.value\"\n [label]=\"unit.label | translate\"\n >\n {{ unit.label | translate }}\n </aui-option>\n }\n </aui-select>\n </aui-input-group>\n </div>\n @if (\n form.get('limits.cpu.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n ) {\n <acl-errors-mapper\n [errors]=\"form.get('limits.cpu.value').errors\"\n [errorsMapper]=\"{\n cpu_max: 'request_greater_than_limits_error' | translate,\n min:\n limitCpuMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'cpu'\n : translate.locale,\n max:\n limitCpuMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'cpu'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n }\n </div>\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper memory\"\n [formGroupName]=\"'memory'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': limitMemoryRequired,\n }\"\n >\n {{ 'memory' | translate }}\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"limitMemoryRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n @for (unit of resourceUnits['memory']; track unit) {\n <aui-option [value]=\"unit\">\n {{ unit }}\n </aui-option>\n }\n </aui-select>\n </aui-input-group>\n </div>\n @if (\n form.get('limits.memory.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n ) {\n <acl-errors-mapper\n [errors]=\"form.get('limits.memory.value').errors\"\n [errorsMapper]=\"{\n memory_max: 'request_greater_than_limits_error' | translate,\n min:\n limitMemoryMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'memory'\n : translate.locale,\n max:\n limitMemoryMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'memory'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n }\n </div>\n </div>\n </div>\n </form>\n} @else {\n <div class=\"resource_requirements-display\">\n <div class=\"resource_requirements-display-item\">\n <label class=\"resource_requirements-display-item__label\">{{\n 'resource_requirements_requests' | translate\n }}</label>\n <aui-icon\n icon=\"prod:cpu\"\n size=\"16px\"\n color=\"#6359b4\"\n margin=\"right\"\n [title]=\"'cpu' | translate\"\n ></aui-icon\n ><span class=\"tw-mr-16\"\n >{{\n form.get('requests').get('cpu').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}{{\n form.get('requests').get('cpu.unit').value\n | pure: getCpuUnitLabel\n | translate\n }}\n </span>\n <aui-icon\n icon=\"prod:memory\"\n size=\"16px\"\n color=\"#007cb5\"\n margin=\"right\"\n [title]=\"'memory' | translate\"\n ></aui-icon\n >{{\n form.get('requests').get('memory').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}\n </div>\n <div class=\"resource_requirements-display-item\">\n <label class=\"resource_requirements-display-item__label\">{{\n 'resource_requirements_limits' | translate\n }}</label>\n <aui-icon\n icon=\"prod:cpu\"\n size=\"16px\"\n color=\"#6359b4\"\n margin=\"right\"\n [title]=\"'cpu' | translate\"\n ></aui-icon\n ><span class=\"tw-mr-16\"\n >{{\n form.get('limits').get('cpu').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}{{\n form.get('limits').get('cpu.unit').value\n | pure: getCpuUnitLabel\n | translate\n }}\n </span>\n <aui-icon\n icon=\"prod:memory\"\n size=\"16px\"\n color=\"#007cb5\"\n margin=\"right\"\n [title]=\"'memory' | translate\"\n ></aui-icon\n >{{\n form.get('limits').get('memory').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}\n </div>\n </div>\n}\n","import {\n CodeEditorActionsConfig,\n CodeEditorComponent,\n MonacoEditorOptions,\n} from '@alauda/code-editor';\nimport { FormModule } from '@alauda/ui';\nimport { stringify, parse, PurePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Input,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { BaseResourceFormGroupComponent } from 'ng-resource-form-util';\n\nimport { OperandField, SpecCapability } from '../../../types';\nimport { OperandFieldComponent } from '../../operand-field.component';\n\nexport interface YamlEditorFormModel {\n yaml: string;\n}\n\n@Component({\n selector: 'acl-crd-yaml-editor',\n templateUrl: './yaml-editor.component.html',\n styleUrls: ['./yaml-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ReactiveFormsModule, FormModule, CodeEditorComponent, PurePipe],\n})\nexport class YamlEditorComponent extends BaseResourceFormGroupComponent<\n unknown,\n YamlEditorFormModel\n> {\n @Input()\n actionsConfig: CodeEditorActionsConfig;\n\n @Input()\n options: MonacoEditorOptions;\n\n disabledActionsConfig: CodeEditorActionsConfig = {};\n resultFormat = 'json';\n\n private readonly fieldComponent = inject(\n forwardRef(() => OperandFieldComponent),\n );\n\n constructor() {\n super(inject(Injector));\n this.disabledActionsConfig = this.getDisabledActionsConfig(\n this.fieldComponent?.field,\n );\n this.resultFormat = this.getResultFormat(this.fieldComponent?.field);\n }\n\n private getResultFormat(field: OperandField) {\n return (\n field?.capabilities\n .find(c => c.startsWith(SpecCapability.yamlResult))\n ?.split(SpecCapability.yamlResult)?.[1] || 'json'\n );\n }\n\n createForm() {\n return this.fb.group({\n yaml: null,\n });\n }\n\n private getDisabledActionsConfig(\n field: OperandField,\n ): CodeEditorActionsConfig {\n const disabledActions =\n field?.capabilities\n .find(c => c.startsWith(SpecCapability.yamlActionsDisabled))\n ?.split(SpecCapability.yamlActionsDisabled)?.[1]\n ?.split(',') || [];\n return disabledActions.reduce((acc, cur) => ({ ...acc, [cur]: false }), {});\n }\n\n override adaptResourceModel(resource: unknown): YamlEditorFormModel {\n try {\n return {\n yaml: resource\n ? stringify(\n this.resultFormat === 'json'\n ? resource\n : JSON.parse(resource as string),\n )\n : '',\n };\n } catch (e) {\n console.error(e);\n return {\n yaml: '',\n };\n }\n }\n\n override adaptFormModel(formModel: YamlEditorFormModel) {\n try {\n const parsedYaml = parse<YamlEditorFormModel>(formModel.yaml);\n return this.resultFormat === 'json'\n ? parsedYaml\n : parsedYaml\n ? JSON.stringify(parsedYaml)\n : '';\n } catch {}\n return null;\n }\n\n getActionsConfig(\n defaultActions: CodeEditorActionsConfig,\n disabledActions: CodeEditorActionsConfig,\n ) {\n return {\n ...defaultActions,\n ...disabledActions,\n };\n }\n}\n","<form\n aui-form\n [formGroup]=\"form\"\n>\n <aui-code-editor\n auiFormItemControl\n formControlName=\"yaml\"\n [actionsConfig]=\"\n actionsConfig | pure: getActionsConfig : disabledActionsConfig\n \"\n [options]=\"options\"\n ></aui-code-editor>\n</form>\n","import {\n createActions,\n viewActions,\n yamlReadOptions,\n yamlWriteOptions,\n} from '@alauda/code-editor';\nimport {\n ButtonModule,\n FormModule,\n IconModule,\n InputModule,\n RadioModule,\n SelectModule,\n SwitchModule,\n TagModule,\n TooltipModule,\n} from '@alauda/ui';\nimport {\n API_GATEWAY,\n isEqual,\n KubernetesResource,\n ObservableInput,\n PurePipe,\n publishRef,\n skipError,\n startWithCondition,\n StringMap,\n Translation,\n TranslatePipe,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n Encoding,\n ParseJsonTranslatePipe,\n PasswordInputComponent,\n ReadonlyFieldDirective,\n} from '@alauda-fe/dynamic-plugin-shared';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n FormControl,\n FormsModule,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { decode, encode } from 'ab64';\nimport { isImmutable } from 'immutable';\nimport { get, identity, map as $map, template } from 'lodash-es';\nimport {\n combineLatest,\n map,\n filter,\n Observable,\n Subject,\n debounceTime,\n distinctUntilChanged,\n takeUntil,\n BehaviorSubject,\n switchMap,\n of,\n finalize,\n isObservable,\n take,\n tap,\n} from 'rxjs';\n\nimport { CrdFormComponent } from '../crd-form/component';\nimport {\n FieldValueChangeEvent,\n FormDataState,\n FormErrors,\n OperandField,\n SpecCapability,\n Validations,\n} from '../types';\nimport {\n convertBooleanSwitchValue,\n convertValue,\n getDefaultValue,\n getFieldDescription,\n getFieldDisplayName,\n getFieldPlaceholder,\n getFieldType,\n getFormData,\n getRadioOptions,\n normalizePath,\n} from '../utils';\nimport {\n isArrayField,\n isArrayFieldTable,\n isClearable,\n isCreatable,\n isGroupField,\n isMultiple,\n isAllowCreate,\n isRequired,\n evalInContext,\n getOperandPath,\n} from '../utils/helper';\n\nimport {\n compareWithSubscribedPaths,\n PropsFieldExpression,\n} from './expressions/props-expression';\nimport { FormItemComponent } from './form-item.component';\nimport { OperandArrayFieldGroupComponent } from './operand-array-field-group.component';\nimport { OperandFieldGroupComponent } from './operand-field-group.component';\nimport { CrdFormArrayTableComponent } from './widgets/array-table/component';\nimport { BasicAuthSecretComponent } from './widgets/basic-auth-secret/component';\nimport { K8sResourcePrefixComponent } from './widgets/k8s-resource-prefix/component';\nimport { isLink, LinkComponent } from './widgets/link/component';\nimport { ResourceRequirementsComponent } from './widgets/resource-requirements/resource-requirements.component';\nimport { YamlEditorComponent } from './widgets/yaml-editor/yaml-editor.component';\n\nexport const PASSWORD_REVEAL = '******';\n\nconst ENCODING_MAPPER: Record<string, Encoding> = {\n base64: {\n decode,\n encode,\n },\n};\n\n@Component({\n selector: 'acl-operand-field',\n templateUrl: 'operand-field.component.html',\n styleUrls: ['operand-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n FormModule,\n InputModule,\n SelectModule,\n RadioModule,\n SwitchModule,\n TagModule,\n IconModule,\n ButtonModule,\n TooltipModule,\n forwardRef(() => FormItemComponent),\n forwardRef(() => OperandFieldGroupComponent),\n forwardRef(() => OperandArrayFieldGroupComponent),\n forwardRef(() => CrdFormArrayTableComponent),\n forwardRef(() => ResourceRequirementsComponent),\n forwardRef(() => YamlEditorComponent),\n K8sResourcePrefixComponent,\n BasicAuthSecretComponent,\n LinkComponent,\n PasswordInputComponent,\n ReadonlyFieldDirective,\n ParseJsonTranslatePipe,\n PurePipe,\n TranslatePipe,\n ],\n})\nexport class OperandFieldComponent\n implements OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n @Input()\n field: OperandField;\n\n @ObservableInput()\n field$!: Observable<OperandField>;\n\n @Input()\n readonly = false;\n\n get isDisabled() {\n return this.readonly || this.field?.disabled;\n }\n\n get effectControlDefaultValue() {\n return this.crdForm.effectControlDefaultValue;\n }\n\n get isRequired() {\n return isRequired(this.field);\n }\n\n get isCreatable() {\n return isCreatable(this.field);\n }\n\n get isMultiple() {\n return isMultiple(this.field);\n }\n\n get isAllowCreate() {\n return isAllowCreate(this.field);\n }\n\n get isClearable() {\n return isClearable(this.field);\n }\n\n @Input() fields: OperandField[];\n @Input() formDataState: FormDataState;\n @ObservableInput()\n formDataState$!: Observable<FormDataState>;\n\n @Input() formErrors: FormErrors;\n\n @Output() valueChange = new EventEmitter<FieldValueChangeEvent>();\n @Output() itemRemove = new EventEmitter();\n\n // 通过hidden属性隐藏不必要的元素,和 aclScrollToFirstInvalid 指令过滤隐藏元素保持一致\n @HostBinding('hidden')\n get isHidden() {\n return (\n (this.hasFieldDependency() && !this.checkFieldDependency(this.field)) ||\n this._hidden\n );\n }\n\n set isHidden(hidden) {\n this._hidden = hidden;\n this.cdr.markForCheck();\n }\n\n private _hidden: boolean;\n control = new FormControl();\n onDestroy$ = new Subject<void>();\n\n getFieldType = getFieldType;\n isLink = isLink;\n\n SpecCapability = SpecCapability;\n\n getFieldDisplayName = getFieldDisplayName;\n getFieldDescription = getFieldDescription;\n getFieldPlaceholder = getFieldPlaceholder;\n getRadioOptions = getRadioOptions;\n\n editorOptions = yamlWriteOptions;\n editorActions = createActions;\n\n isGroupField = isGroupField;\n isArrayField = isArrayField;\n isArrayFieldTable = isArrayFieldTable;\n convertBooleanSwitchValue = convertBooleanSwitchValue;\n loading$ = new BehaviorSubject(false);\n\n get isCustomErrorsMapper() {\n return getFieldType(this.field) === SpecCapability.resourceRequirements;\n }\n\n PASSWORD_REVEAL = PASSWORD_REVEAL;\n\n isBasicTypeField = (filed: OperandField) =>\n ![\n SpecCapability.object,\n SpecCapability.array,\n SpecCapability.password,\n SpecCapability.confirmPassword,\n SpecCapability.externalPassword,\n ].includes(getFieldType(filed));\n\n viewActions = viewActions;\n viewOptions = yamlReadOptions;\n\n private _validators: ValidatorFn[];\n\n readonly crdForm = inject(CrdFormComponent);\n private readonly http = inject(HttpClient);\n private readonly cdr = inject(ChangeDetectorRef);\n\n registerControl() {\n this.crdForm.controlMap.set(getOperandPath(this.field), this.control);\n }\n\n unRegisterControl() {\n this.crdForm.controlMap.delete(getOperandPath(this.field));\n }\n\n getWidgets = (capabilities: SpecCapability[]) => {\n const descriptor = capabilities.find(c =>\n c.startsWith(SpecCapability.widgets),\n );\n return descriptor\n ? this.crdForm.widgets?.find(\n w => w.descriptor === descriptor.split('?=')[0],\n )\n : null;\n };\n\n ngOnInit() {\n this.dynamicHiddenValue$.subscribe(value => {\n this.isHidden = value;\n });\n this.registerControl();\n if (this.field.validations) {\n const validators = $map(this.field.validations, (val, rule) => {\n switch (rule) {\n case Validations.maximum: {\n return Validators.max(val as number);\n }\n case Validations.minimum: {\n return Validators.min(val as number);\n }\n case Validations.required: {\n return Validators.required;\n }\n case Validations.maxLength: {\n return Validators.maxLength(val as number);\n }\n case Validations.minLength: {\n return Validators.minLength(val as number);\n }\n case Validations.pattern: {\n return Validators.pattern(val as string);\n }\n default: {\n return null;\n }\n }\n }).filter(v => !!v);\n if (validators.length) {\n this.control.addValidators((this._validators = validators));\n }\n }\n }\n\n // 将 valueChanges 的逻辑移动到 ngAfterViewInit 中,主要是为了避免全局 ValidatorsDirective带来的影响,需要等到ValidatorsDirective的ngAfterViewInit之后再订阅control的valueChanges\n ngAfterViewInit() {\n this.control.valueChanges\n .pipe(\n startWithCondition(this.effectControlDefaultValue, this.control.value),\n debounceTime(50),\n distinctUntilChanged(),\n takeUntil(this.onDestroy$),\n filter(v =>\n // FIXME: This is hack. yaml value will only be null if format error(because try-catch), the data flow now is from control => formDataState => control(will judge equality),this will make control be empty\n getFieldType(this.field) === SpecCapability.yaml ? v !== null : true,\n ),\n )\n .subscribe(value => {\n this.valueChange.emit({\n field: this.field,\n data: value,\n errors: this.control.errors,\n });\n });\n }\n\n ngOnDestroy() {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n this.unRegisterControl();\n if (this._validators?.length) {\n this.control.removeValidators(this._validators);\n }\n }\n\n ngOnChanges({ formDataState }: SimpleChanges) {\n if (this.field && formDataState?.firstChange) {\n this.staticDefaultValue$\n .pipe(\n take(1),\n filter(({ value }) => value !== undefined),\n )\n .subscribe(({ value, isDynamic }) => {\n this.control.setValue(value, { emitEvent: isDynamic });\n });\n } else if (formDataState?.currentValue) {\n const currentValue = getFormData(\n formDataState.currentValue as FormDataState,\n this.field.path,\n false,\n );\n const prevValue = getFormData(\n formDataState.previousValue as FormDataState,\n this.field.path,\n false,\n );\n const rawValue = isImmutable(currentValue)\n ? currentValue.toJS()\n : currentValue;\n if (\n !isEqual(rawValue, prevValue) &&\n !isEqual(rawValue, this.control.value)\n ) {\n this.control.setValue(rawValue);\n }\n }\n }\n\n getFieldCurrentValue() {\n let value = getFormData(this.formDataState, this.field.path, false);\n\n // 如果值是 Immutable object 类型,需要转成原始 JS Object\n if (isImmutable(value)) {\n value = value.toJS() as FormDataState;\n }\n return value;\n }\n\n getFieldValue(useDefault = true) {\n const currentValue = this.getFieldCurrentValue();\n\n if (currentValue === undefined && useDefault) {\n return getDefaultValue(this.field);\n }\n return currentValue;\n }\n\n getOptionDisplay(\n value: string,\n options: Array<{ value: string; display: Translation }>,\n ) {\n return options.find(item => item.value === value)?.display;\n }\n\n getSelectOptions(field: OperandField) {\n return field.capabilities\n .filter(c => c.startsWith(SpecCapability.select))\n .map(c => c.split(SpecCapability.select)?.[1]);\n }\n\n getEncoding(field: OperandField, type: string) {\n const prefix = `urn:alm:descriptor:${type}:encoding:`;\n const capability = field.capabilities.find(it => it.startsWith(prefix));\n let encoding: Encoding;\n if (capability) {\n encoding = ENCODING_MAPPER[capability.slice(prefix.length)];\n }\n return (\n encoding || {\n encode: identity,\n decode: identity,\n }\n );\n }\n\n private hasFieldDependency() {\n return this.field.capabilities.some(c =>\n c.startsWith(SpecCapability.fieldDependency),\n );\n }\n\n private checkFieldDependency(field: OperandField): boolean {\n try {\n const dependencies = field?.capabilities\n .filter(c => c.startsWith(SpecCapability.fieldDependency))\n .map(i => i.split(SpecCapability.fieldDependency)[1]);\n if (!dependencies?.length) {\n return true;\n }\n const parentPaths = dependencies.map(d => d.split(':'));\n const state = parentPaths.every(([path, ...values]) => {\n // Support depend one of values\n const dependencyField = this.fields.find(\n f => f.path === normalizePath(path),\n );\n const dependencyDefaultValue = getDefaultValue(dependencyField);\n const formStateValue = getFormData(this.formDataState, path);\n const currentValue =\n formStateValue === null || formStateValue === undefined\n ? dependencyDefaultValue\n : formStateValue;\n return values.some(\n val => convertValue(val, dependencyField.type) === currentValue,\n );\n });\n\n /**\n * 父 field dependency 不满足时,即隐藏时,本 field 也应当隐藏。\n * 因为在大部分情形下,fieldDependency 与 oneOf 搭配来描述一组关联关系,很少只有 b 仅依赖于 a,当 a 隐藏后,还要根据 a 的默认值要求显示 b 的情况,\n * 对于该情况,可以多加一个配备了额外 fieldDependency 的 Descriptor 来描述 b\n */\n return (\n parentPaths.every(([path]) =>\n this.checkFieldDependency(this.fields.find(i => i.path === path)),\n ) && state\n );\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n\n dynamicOptionRefresh$$ = new BehaviorSubject<void>(null);\n dynamicOptionRefreshDisabled$$ = new BehaviorSubject<boolean>(false);\n dynamicOptionLoading$$ = new Subject<boolean>();\n\n dynamicExpression$: Observable<any> = this.field$.pipe(\n map(field => {\n return new PropsFieldExpression(field).expressions;\n }),\n publishRef(),\n );\n\n dynamicOptions$: Observable<any> = this.field$.pipe(\n switchMap(field => {\n const dynamicExpression = new PropsFieldExpression(field).expressions;\n if (!dynamicExpression.options) {\n return of(\n this.getSelectOptions(field).map(value => ({\n label: value,\n value,\n })),\n );\n }\n return combineLatest([\n this.dynamicOptionRefresh$$,\n combineLatest([this.crdForm.formContext$, this.formDataState$]).pipe(\n debounceTime(100),\n distinctUntilChanged((p, n) =>\n compareWithSubscribedPaths(dynamicExpression, p, n),\n ),\n tap(([formContext, formDataState]) => {\n if (this.crdForm.debug) {\n /* eslint-disable no-console */\n console.log(\n 'field: ',\n field,\n 'formContext: ',\n formContext,\n 'formDataState: ',\n formDataState.toJS(),\n );\n }\n }),\n ),\n ]).pipe(\n map(([, [formContext, formDataState]]) => [formContext, formDataState]),\n tap(() => {\n this.dynamicOptionLoading$$.next(true);\n }),\n switchMap(([formContext, formDataState]) => {\n let result = [];\n const { api, labelPath, valuePath, expression } =\n dynamicExpression.options;\n const stringExpressionContext = this.getStringExpressionContext(\n formContext,\n formDataState,\n );\n // console.log('api: ', api);\n const url = template(api)(stringExpressionContext);\n this.dynamicOptionRefreshDisabled$$.next(url.includes('//'));\n if (!api && expression) {\n result = evalInContext(expression, stringExpressionContext);\n } else {\n return stringExpressionContext.fetchResourceList(\n url,\n (item: StringMap) => {\n const value = get(item, valuePath, '');\n return {\n label: get(item, labelPath, value),\n value,\n };\n },\n );\n }\n\n return isObservable(result) ? result : of(result);\n }),\n tap(() => {\n this.dynamicOptionLoading$$.next(false);\n }),\n );\n }),\n publishRef(),\n );\n\n staticDefaultValue$ = this.field$.pipe(\n switchMap(field => {\n const defaultValueExpression = new PropsFieldExpression(field)\n .expressions;\n if (\n !defaultValueExpression.default ||\n this.getFieldCurrentValue() !== undefined\n ) {\n return of({\n value: this.getFieldValue(),\n isDynamic: false,\n });\n }\n return combineLatest([\n this.crdForm.formContext$,\n this.formDataState$,\n ]).pipe(\n distinctUntilChanged((p, n) =>\n compareWithSubscribedPaths(defaultValueExpression, p, n),\n ),\n map(([formContext, formDataState]) =>\n template(defaultValueExpression.default)(\n this.getStringExpressionContext(formContext, formDataState),\n ),\n ),\n map(value => ({\n value,\n isDynamic: true,\n })),\n );\n }),\n publishRef(),\n );\n\n dynamicHiddenValue$ = this.field$.pipe(\n switchMap(field => {\n const { expressions } = new PropsFieldExpression(field);\n if (!expressions.hidden) {\n return of(false);\n }\n return combineLatest([\n this.crdForm.formContext$,\n this.formDataState$,\n ]).pipe(\n distinctUntilChanged((p, n) =>\n compareWithSubscribedPaths(expressions, p, n),\n ),\n map(\n ([formContext, formDataState]) =>\n template(expressions.hidden)(\n this.getStringExpressionContext(formContext, formDataState),\n ) === 'true',\n ),\n );\n }),\n );\n\n getStringExpressionContext = (\n formContext: any,\n formDataState: FormDataState,\n ) => ({\n fetchResourceList: this.fetchResourceList,\n context: formContext || {},\n formData: formDataState.toJS()?.spec || {},\n });\n\n fetchResourceList = (\n url: string,\n callback: (resource: KubernetesResource) => void,\n ) => {\n // 例如 '/kubernetes/global/api/v1/namespaces//secrets' 表示 formData.namespace 没有插值\n if (url.includes('//')) {\n return of([]);\n }\n this.loading$.next(true);\n return this.http\n .get<{ items: KubernetesResource[] }>(`${API_GATEWAY}${url}`)\n .pipe(\n map(res => res.items.map(item => callback.call(this, item))),\n skipError([]),\n finalize(() => {\n this.loading$.next(false);\n }),\n );\n };\n}\n","<ng-container *ngIf=\"field\">\n <ng-container\n *ngIf=\"{\n fieldType: field | pure: getFieldType,\n isBasicTypeField: field | pure: isBasicTypeField,\n } as meta\"\n >\n <ng-container *ngIf=\"meta.isBasicTypeField; else advancedFiled\">\n <acl-crd-form-item\n *ngIf=\"!(field.capabilities | pure: getWidgets)\"\n [ngSwitch]=\"meta.fieldType\"\n >\n <input\n *ngSwitchCase=\"SpecCapability.number\"\n type=\"number\"\n aui-input\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n />\n <ng-container *ngSwitchCase=\"SpecCapability.booleanSwitch\">\n <aui-switch\n auiFormItemControl\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"switchReadonly\"\n [formControl]=\"control\"\n ></aui-switch>\n <ng-template #switchReadonly>{{\n control.value\n | pure: convertBooleanSwitchValue : field.capabilities\n | translate\n }}</ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.select\">\n <aui-multi-select\n *ngIf=\"isMultiple\"\n [maxRowCount]=\"3\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n >\n {{ option.label }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-multi-select>\n\n <aui-select\n *ngIf=\"!isMultiple\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label | aclParseJsonTranslate\"\n >\n {{ option.label | aclParseJsonTranslate }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-select>\n\n <button\n *ngIf=\"(dynamicExpression$ | async).options\"\n style=\"margin-left: 4px\"\n aui-button\n type=\"button\"\n [square]=\"true\"\n [disabled]=\"\n (dynamicOptionRefreshDisabled$$ | async) ||\n (dynamicOptionLoading$$ | async)\n \"\n [loading]=\"dynamicOptionLoading$$ | async\"\n (click)=\"dynamicOptionRefresh$$.next()\"\n >\n <aui-icon icon=\"rotate_right\"></aui-icon>\n </button>\n </ng-container>\n <aui-radio-group\n *ngSwitchCase=\"SpecCapability.radio\"\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"radioLabel\"\n >\n <ng-container>\n <aui-radio-button\n *ngFor=\"let option of field.capabilities | pure: getRadioOptions\"\n [value]=\"option.value\"\n >\n {{ option.display | translate }}\n </aui-radio-button>\n <ng-template #radioLabel>\n {{\n control.value\n | pure\n : getOptionDisplay\n : (field.capabilities | pure: getRadioOptions)\n | translate\n }}\n </ng-template>\n </ng-container>\n </aui-radio-group>\n <ng-container *ngSwitchCase=\"SpecCapability.resourceRequirements\">\n <acl-crd-resource-requirements\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourceRequirementsReadonly\"\n ></acl-crd-resource-requirements>\n <ng-template #resourceRequirementsReadonly>\n <acl-crd-resource-requirements\n auiFormItemControl\n [ngModel]=\"control.value\"\n [readOnly]=\"true\"\n ></acl-crd-resource-requirements>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.yaml\">\n <acl-crd-yaml-editor\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [actionsConfig]=\"editorActions\"\n [options]=\"editorOptions\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"yamlReadonly\"\n ></acl-crd-yaml-editor>\n <ng-template #yamlReadonly>\n <acl-crd-yaml-editor\n auiFormItemControl\n [ngModel]=\"control.value\"\n [actionsConfig]=\"viewActions\"\n [options]=\"viewOptions\"\n ></acl-crd-yaml-editor>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.k8sResourcePrefix\">\n <acl-crd-resource-prefix\n auiFormItemControl\n [formErrors]=\"control.errors\"\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourcePrefixReadonly\"\n ></acl-crd-resource-prefix>\n <ng-template #resourcePrefixReadonly>\n <acl-crd-resource-prefix\n auiFormItemControl\n [field]=\"field\"\n [ngModel]=\"control.value\"\n [readonly]=\"true\"\n ></acl-crd-resource-prefix>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.basicAuthSecret\">\n <acl-crd-basic-auth-secret\n auiFormItemControl\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n ></acl-crd-basic-auth-secret>\n </ng-container>\n <textarea\n *ngSwitchCase=\"SpecCapability.textarea\"\n auiFormItemControl\n aui-input\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n ></textarea>\n <aui-tags-input\n *ngSwitchCase=\"SpecCapability.tagsInput\"\n auiFormItemControl\n class=\"tw-flex-1\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n [aclReadonlyField]=\"isDisabled\"\n [clearable]=\"isClearable\"\n ></aui-tags-input>\n <ng-container *ngSwitchDefault>\n <acl-crd-link\n *ngIf=\"(field | pure: isLink) && isDisabled; else textField\"\n auiFormItemControl\n [field]=\"field\"\n [formControl]=\"control\"\n ></acl-crd-link>\n </ng-container>\n <ng-template #textField>\n <input\n type=\"text\"\n auiFormItemControl\n [required]=\"isRequired\"\n aui-input\n [formControl]=\"control\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n [aclReadonlyField]=\"isDisabled\"\n />\n </ng-template>\n </acl-crd-form-item>\n <div\n class=\"tw-flex tw-w-full tw-flex-col\"\n *ngIf=\"field.capabilities | pure: getWidgets as widget\"\n >\n <ng-container *ngComponentOutlet=\"widget.component\"></ng-container>\n </div>\n </ng-container>\n <ng-template #advancedFiled>\n <ng-container\n *ngIf=\"\n meta.fieldType === SpecCapability.password ||\n meta.fieldType === SpecCapability.confirmPassword ||\n meta.fieldType === SpecCapability.externalPassword\n \"\n >\n <acl-crd-form-item\n *ngIf=\"isDisabled\"\n [plain]=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"passwordView\"></ng-container>\n </acl-crd-form-item>\n <acl-password-input\n *ngIf=\"!isDisabled\"\n [initPassword]=\"control.value\"\n [label]=\"field | pure: getFieldDisplayName | translate\"\n [hint]=\"field | pure: getFieldDescription | translate\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [readonly]=\"crdForm.readonly\"\n [isUpdate]=\"!!control.value && !control.dirty\"\n [strongPassword]=\"meta.fieldType !== SpecCapability.externalPassword\"\n [enableConfirm]=\"meta.fieldType === SpecCapability.confirmPassword\"\n width=\"large\"\n [encoding]=\"field | pure: getEncoding : 'password'\"\n [pattern]=\"field.validations?.pattern\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n ></acl-password-input>\n </ng-container>\n <!-- group field -->\n <ng-container *ngIf=\"isGroupField(field) && field.fieldList?.length > 0\">\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-field-group>\n </ng-container>\n <!-- array field groups -->\n <!-- array field table -->\n <ng-container *ngIf=\"isArrayField(field)\">\n <acl-crd-array-table\n *ngIf=\"field | pure: isArrayFieldTable; else defaultArrayFiled\"\n [arrayFieldGroup]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"isDisabled\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-crd-array-table>\n <ng-template #defaultArrayFiled>\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"field\"\n [fields]=\"fields\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-array-field-group>\n </ng-template>\n </ng-container>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #passwordView>\n {{ PASSWORD_REVEAL }}\n</ng-template>\n","import { IconModule } from '@alauda/ui';\nimport { TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n forwardRef,\n} from '@angular/core';\nimport { startCase } from 'lodash-es';\n\nimport {\n FieldValueChangeEvent,\n FormDataState,\n FormErrors,\n OperandField,\n} from '../types';\n\nimport { OperandFieldComponent } from './operand-field.component';\n\n@Component({\n selector: 'acl-operand-advanced-field-group',\n templateUrl: 'operand-advanced-field-group.component.html',\n styleUrls: ['operand-field-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [TranslatePipe, IconModule, forwardRef(() => OperandFieldComponent)],\n})\nexport class OperandAdvancedFieldGroupComponent {\n @Input() fields: OperandField[];\n @Input() fieldList: OperandField[];\n @Input() formDataState: FormDataState;\n @Input() formErrors: FormErrors;\n @Input() readonly = false;\n @Output() valueChange = new EventEmitter<FieldValueChangeEvent>();\n\n expanded = false;\n startCase = startCase;\n\n fieldValueChange(e: FieldValueChangeEvent) {\n this.valueChange.emit(e);\n }\n}\n","<div\n [class.expanded]=\"expanded\"\n class=\"field-group\"\n>\n <div class=\"header\">\n <div\n class=\"title\"\n (click)=\"expanded = !expanded\"\n >\n @if (!expanded) {\n <aui-icon\n size=\"20px,20px\"\n icon=\"caret_down_s\"\n ></aui-icon>\n }\n @if (expanded) {\n <aui-icon\n size=\"20px,20px\"\n icon=\"caret_down_s\"\n ></aui-icon>\n }\n <span>{{ 'advanced_fields' | translate }}</span>\n </div>\n </div>\n <div\n class=\"content\"\n [hidden]=\"!expanded\"\n >\n @for (field of fieldList; track field) {\n <acl-operand-field\n [field]=\"field\"\n [fields]=\"fields\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n >\n </acl-operand-field>\n }\n </div>\n</div>\n","import { differenceBy } from 'lodash-es';\n\nimport { OperandField } from '../types';\nimport {\n convertValue,\n getOneOfMap,\n getOperandPath,\n getPathFromTagPath,\n normalizePath,\n} from '../utils';\n\n// 去除 others 和 paths 中主 path 相同的部分\nexport function differPathsTag(paths: string[], others: string[]) {\n return differenceBy(paths, others, pathWithTag =>\n getPathFromTagPath(pathWithTag),\n );\n}\n\nexport function getAllOtherTagPath(fields: OperandField[], paths: string[]) {\n return fields\n .map(path => getOperandPath(path))\n .filter(path => !paths.includes(path));\n}\n\nexport function matchValueAgainstOneOf(field: OperandField, currentValue: any) {\n // oneOfMap 里应当为 tagged path\n const oneOfMap = getOneOfMap(field);\n // 使用两个 set 处理多条 OneOf 中存在公共 path 的情形\n const dirtyPathSet = new Set<string>();\n const validPathSet = new Set<string>();\n Object.entries(oneOfMap).forEach(([value, paths]) => {\n (paths as string[]).forEach(path => {\n (convertValue(value, field.type) === currentValue\n ? validPathSet\n : dirtyPathSet\n ).add(path);\n });\n });\n return {\n dirtyPaths: Array.from(dirtyPathSet)\n .filter(i => !validPathSet.has(i))\n .map(path => normalizePath(path)),\n validPaths: Array.from(validPathSet).map(path => normalizePath(path)),\n };\n}\n","import { LabelPosition, FormModule } from '@alauda/ui';\nimport {\n Dictionary,\n ObservableInput,\n OpenAPIV3SchemaObject,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport { ScrollToFirstInvalidDirective } from '@alauda-fe/dynamic-plugin-shared';\nimport { ComponentType } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { AbstractControl, FormsModule, NgForm } from '@angular/forms';\nimport { List, Map as $Map, fromJS } from 'immutable';\nimport { flattenDeep, fromPairs, isEmpty, uniq } from 'lodash-es';\nimport { Observable } from 'rxjs';\n\nimport { OperandAdvancedFieldGroupComponent } from '../field-controls/operand-advanced-field-group.component';\nimport { OperandArrayFieldGroupComponent } from '../field-controls/operand-array-field-group.component';\nimport { OperandFieldGroupComponent } from '../field-controls/operand-field-group.component';\nimport { OperandFieldComponent } from '../field-controls/operand-field.component';\nimport {\n Descriptor,\n FieldValueChangeEvent,\n FormDataState,\n FormErrors,\n FormState,\n OperandArrayFieldGroup,\n OperandField,\n OperandFieldGroup,\n SpecCapability,\n} from '../types';\nimport {\n parseArrayPath,\n SCHEMA_PATH,\n createCapabilityField,\n normalizePath,\n pathToArray,\n getOperandPath,\n getPathFromTagPath,\n getFieldsByPath,\n fieldShouldReveal,\n getDefaultValue,\n} from '../utils';\n\nimport {\n differPathsTag,\n getAllOtherTagPath,\n matchValueAgainstOneOf,\n} from './helper';\n\n@Component({\n selector: 'acl-crd-form',\n templateUrl: 'template.html',\n styleUrls: ['styles.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FormsModule,\n FormModule,\n forwardRef(() => OperandFieldComponent),\n forwardRef(() => OperandFieldGroupComponent),\n forwardRef(() => OperandArrayFieldGroupComponent),\n forwardRef(() => OperandAdvancedFieldGroupComponent),\n ScrollToFirstInvalidDirective,\n ],\n})\nexport class CrdFormComponent implements OnChanges {\n @Input() openApiSchema: OpenAPIV3SchemaObject;\n @Input() descriptors: Descriptor[];\n @Input() data: unknown;\n @Input() debug = false;\n @Input() openApiSchemaPath: string | string[] = SCHEMA_PATH;\n @Input() readonly = false;\n @Input() labelWidth: string;\n @Input() labelPosition: LabelPosition = LabelPosition.Right;\n\n @Input() cluster?: string;\n @Input() namespace?: string;\n\n @Input() formContext: any;\n @ObservableInput() formContext$: Observable<any>;\n\n @Input() keepEmptyPath: boolean;\n\n @Input() effectControlDefaultValue: boolean;\n\n @Input() uiContext?: Record<string, any>;\n\n @Output() formStateChange = new EventEmitter<FormState>();\n\n @Output() formSchemaChange = new EventEmitter<any>();\n\n @ViewChild('form', { static: true })\n form: NgForm;\n\n @Input()\n widgets: Array<{\n descriptor: string;\n component: ComponentType<any>;\n }>;\n\n formDataState: FormDataState;\n formErrors: FormErrors = {};\n\n fields: OperandField[];\n normalFields: OperandField[];\n fieldGroups: OperandFieldGroup[];\n arrayFieldGroups: OperandArrayFieldGroup[];\n advancedFields: OperandField[];\n private _lastUpdateField: OperandField;\n\n // 一个全局的 controlMap,方便控制 field 主动校验。\n // 该 controlMap 以及所有 field 里的 control 实例,都是为了数据追踪与错误同步(control.error -> crdForm error),本身不影响提交,由 crd-form 的 error 去阻塞提交。\n controlMap = new Map<string, AbstractControl>();\n\n ngOnChanges({ openApiSchema, descriptors, data }: SimpleChanges) {\n if (openApiSchema?.currentValue || descriptors?.currentValue) {\n this.setUpForm();\n } else if (data?.currentValue) {\n this.formDataState = fromJS(data.currentValue) as FormDataState;\n }\n }\n\n private setUpForm() {\n this.formDataState = fromJS(this.data || {}) as FormDataState;\n\n const {\n normalFields,\n fieldGroups,\n arrayFieldGroups,\n advancedFields,\n descriptorFields,\n openApiFields,\n basicFields,\n treeFields,\n } = createCapabilityField(\n this.descriptors || [],\n this.openApiSchema || ({} as OpenAPIV3SchemaObject),\n this.data,\n this.openApiSchemaPath,\n );\n\n this.fields = basicFields.filter(fieldShouldReveal);\n if (this.debug) {\n /* eslint-disable no-console */\n console.info('openApiFields:', openApiFields);\n console.info('descriptorFields:', descriptorFields);\n console.info('basicFields:', basicFields);\n\n console.info('normalFields', normalFields);\n\n console.info('fieldGroups:', fieldGroups);\n console.info('arrayFieldGroups:', arrayFieldGroups);\n console.info('advancedFields:', advancedFields);\n console.info('treeFields:', treeFields);\n /* eslint-enable no-console */\n }\n\n this.normalFields = normalFields;\n this.fieldGroups = fieldGroups;\n this.arrayFieldGroups = arrayFieldGroups;\n this.advancedFields = advancedFields;\n\n this.formSchemaChange.emit({\n openApiFields,\n descriptorFields,\n });\n }\n\n // 被隐藏起来的表单的路径集合\n dirtyPathsSet = new Set<string>();\n\n fieldValueChange(event: FieldValueChangeEvent) {\n let onceDirtyPathsSet = new Set<string>();\n\n // TODO: 待review确认后移除该开关\n if ((this.formContext?.gates as string[])?.includes('onceDirtyPathsSet')) {\n const operandPath = getOperandPath(event.field);\n // 如果表单被隐藏且这次change是因为直接改变了包含该路径的父路径的值(例如编辑yaml)\n // 那就阻止此子路径值的change逻辑\n if (\n this.dirtyPathsSet.has(operandPath) &&\n this._lastUpdateField?.path &&\n operandPath.startsWith(`${this._lastUpdateField.path}.`)\n ) {\n return;\n }\n } else {\n onceDirtyPathsSet = this.dirtyPathsSet;\n }\n\n const eventData = event.data;\n if (\n event.field.capabilities.some(c => c.startsWith(SpecCapability.oneOf))\n ) {\n const { dirtyPaths, validPaths } = this.resolveExpiredPath(\n event.field,\n eventData,\n );\n\n dirtyPaths.forEach(path => {\n this.dirtyPathsSet.add(normalizePath(path));\n onceDirtyPathsSet.add(normalizePath(path));\n });\n\n validPaths.forEach(path => {\n this.updateValidPathValue(path);\n });\n }\n const allOtherPaths = getAllOtherTagPath(\n this.fields,\n Array.from(onceDirtyPathsSet),\n );\n const removedPaths = uniq(\n // 同一 path 可能有多个 tag,假设某个 tagged path 有效,则其对应 path 数据不应该删除\n differPathsTag(Array.from(onceDirtyPathsSet), allOtherPaths).map(path =>\n getPathFromTagPath(path),\n ),\n ).filter(\n // 只清空叶子结点,以适配 yaml 情况\n path =>\n !this.fields.some(field => {\n const isParentPath = field.path.startsWith(`${path}.`);\n if (isParentPath) {\n // 该 field 亦为 dirty,不以为依据\n return !onceDirtyPathsSet.has(field.path);\n }\n return false;\n }),\n );\n if (eventData == null && !this.keepEmptyPath) {\n if (!onceDirtyPathsSet.has(getOperandPath(event.field))) {\n this.deleteFormData(event.field.path);\n }\n } else {\n this.updateFormData(event.field, eventData);\n }\n\n removedPaths.forEach(path => {\n this.deleteFormData(path);\n });\n this.refreshValidation();\n this.formStateChange.emit({\n data: this.formDataState.toJS(),\n errors: this.formErrors,\n });\n }\n\n deleteFormData(path: string) {\n this.formDataState = this.formDataState.deleteIn(pathToArray(path));\n this.controlMap.get(path)?.setValue(null);\n\n this.formStateChange.emit({\n data: this.formDataState.toJS(),\n errors: this.formErrors,\n });\n }\n\n private updateValidPathValue(path: string) {\n // 如果有效路径是上一次的无效路径,则意味着该路径的值在上次被重置了,所以当该路径又需要显示给用户时应该使用默认值\n const useDefault = this.dirtyPathsSet.has(normalizePath(path));\n this.dirtyPathsSet.delete(normalizePath(path));\n // 如果对一组表单都有依赖,那路径可能是这组表单的父路径,所以需要把所有子孙都找出来\n const fields = getFieldsByPath(path, [\n ...this.normalFields,\n ...flattenDeep(this.fieldGroups.map(group => group.fieldList)),\n ...flattenDeep(\n this.arrayFieldGroups.map(arrayGroup => arrayGroup.fieldLists),\n ),\n ...this.advancedFields,\n ]);\n fields.forEach(field => {\n // 理论上 oneof 只影响视图,但实际还会影响 formDataState,所以需要同步更新 formDataState\n let value = this.controlMap.get(getOperandPath(field)).value;\n if (!value && useDefault) {\n value = getDefaultValue(field);\n }\n this.updateFormData(field, value);\n });\n }\n\n private updateFormData(field: OperandField, data: unknown) {\n if (!field) return;\n const { match, index, pathBeforeIndex, pathAfterIndex } = parseArrayPath(\n field.path,\n );\n if (match && index === 0) {\n this.formDataState = this.initializeFormDataArrayProperty(\n this.formDataState,\n pathBeforeIndex,\n pathAfterIndex,\n data,\n );\n }\n this.formDataState = this.formDataState.setIn(\n pathToArray(field.path),\n data,\n );\n this._lastUpdateField = field;\n }\n\n refreshValidation() {\n const errors = Array.from(this.controlMap).reduce(\n (acc, [pathWithTag, control]) => {\n if (this.dirtyPathsSet.has(pathWithTag)) {\n return acc;\n }\n const path = getPathFromTagPath(pathWithTag);\n acc[path] = isEmpty(control.errors) ? null : control.errors;\n return acc;\n },\n {} as Dictionary<FormErrors>,\n );\n const result = fromPairs(\n Object.entries(errors ?? {}).filter(([_k, v]) => !!v),\n );\n\n this.formErrors = isEmpty(result) ? null : result;\n }\n\n // 当某个 field 发生数据变化,返回其相关 oneOf path 是否应该移除\n // 仅当当前 field 中 oneOf 条件与当前数据不匹配,\n private resolveExpiredPath(field: OperandField, currentValue: any) {\n const { dirtyPaths, validPaths } = matchValueAgainstOneOf(\n field,\n currentValue,\n );\n const otherFieldStatus = this.fields\n .filter(i => getOperandPath(i) !== getOperandPath(field))\n .map(field => ({\n path: getOperandPath(field),\n result: matchValueAgainstOneOf(\n field,\n this.controlMap.get(getOperandPath(field))?.value,\n ),\n }));\n\n const newDirtyPaths = validPaths.filter(path => {\n // 当前 valid path 在其他 field 中为 dirty,若该 field 本身也为 dirty 则忽略该影响,仍然判定为 valid,否则(该 field 有效)认定为 dirty\n const fieldCandidates = otherFieldStatus.filter(status =>\n status.result.dirtyPaths.includes(path),\n );\n return fieldCandidates.some(\n ({ path }) =>\n !otherFieldStatus.some(status =>\n status.result.dirtyPaths.includes(path),\n ),\n );\n });\n return {\n dirtyPaths: [...dirtyPaths, ...newDirtyPaths],\n validPaths: validPaths.filter(path => !newDirtyPaths.includes(path)),\n };\n }\n\n private initializeFormDataArrayProperty(\n state: FormDataState,\n pathBeforeIndex: string,\n pathAfterIndex: string,\n value: any,\n ) {\n if (state.getIn([...pathToArray(pathBeforeIndex), 0])) {\n return state;\n }\n const item = $Map({}).setIn(pathToArray(pathAfterIndex), value);\n const list = List([item]);\n return state.setIn(pathToArray(pathBeforeIndex), list);\n }\n\n submit() {\n this.refreshValidation();\n this.form.onSubmit(null);\n }\n}\n","<form\n auiForm\n [aclScrollToFirstInvalid]=\"!!formErrors\"\n #form=\"ngForm\"\n [auiFormLabelPosition]=\"labelPosition\"\n [auiFormLabelWidth]=\"labelWidth\"\n>\n <!-- normal fields -->\n @for (field of normalFields; track field) {\n <acl-operand-field\n [fields]=\"fields\"\n [field]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n >\n </acl-operand-field>\n }\n\n <!-- field groups 兼容,需要保留-->\n @for (group of fieldGroups; track group) {\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"group\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n >\n </acl-operand-field-group>\n }\n\n <!-- array field groups 兼容,需要保留 -->\n @for (group of arrayFieldGroups; track group) {\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"group\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n (itemRemove)=\"deleteFormData($event)\"\n >\n </acl-operand-array-field-group>\n }\n\n <!-- advanced fields -->\n @if (advancedFields?.length) {\n <acl-operand-advanced-field-group\n [fields]=\"fields\"\n [fieldList]=\"advancedFields\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n ></acl-operand-advanced-field-group>\n }\n</form>\n","import {\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { last } from 'lodash-es';\n\nimport { CrdFormComponent } from '../crd-form/component';\nimport {\n FieldValueChangeEvent,\n FormDataState,\n FormErrors,\n OperandArrayFieldGroup,\n OperandField,\n Validations,\n} from '../types';\nimport {\n getFieldDisplayName,\n getFormData,\n modifyArrayFieldPathIndex,\n} from '../utils';\nimport { isFolded, repairFieldChildPathByCorrectIndex } from '../utils/helper';\n\n@Directive()\nexport class BaseOperandFiledArrayComponent implements OnChanges {\n @Input() arrayFieldGroup: OperandArrayFieldGroup;\n @Input() formDataState: FormDataState;\n @Input() formErrors: FormErrors;\n @Input() isArrayTable: boolean;\n @Input() readonly = false;\n @Input() fields: OperandField[];\n\n @Output() valueChange = new EventEmitter();\n @Output() itemRemove = new EventEmitter();\n\n private _expanded: boolean;\n\n get expanded() {\n return this._expanded ?? !isFolded(this.arrayFieldGroup);\n }\n\n set expanded(expanded: boolean) {\n this._expanded = expanded;\n }\n\n basicArrayFieldTemplate: OperandField[];\n\n getFieldDisplayName = getFieldDisplayName;\n\n readonly crdForm = inject(CrdFormComponent);\n\n ngOnChanges({ arrayFieldGroup, formDataState }: SimpleChanges) {\n if (\n !this.basicArrayFieldTemplate &&\n arrayFieldGroup.currentValue?.fieldLists?.length > 0\n ) {\n this.basicArrayFieldTemplate = last(\n arrayFieldGroup.currentValue.fieldLists,\n );\n }\n if (formDataState?.currentValue && formDataState?.previousValue) {\n const currValue = getFormData(\n formDataState.currentValue,\n this.arrayFieldGroup.path,\n );\n const arrayFieldLength = this.arrayFieldGroup.fieldLists?.length;\n if (currValue?.size > arrayFieldLength) {\n Array.from({ length: currValue.size - arrayFieldLength }).forEach(\n () => {\n this.addItem();\n },\n );\n }\n }\n }\n\n fieldValueChange(e: FieldValueChangeEvent) {\n this.valueChange.emit(e);\n }\n\n addItem() {\n const newFields = this.basicArrayFieldTemplate.map(field => {\n const toPath = modifyArrayFieldPathIndex(\n field.path,\n () => this.arrayFieldGroup.fieldLists.length,\n );\n return {\n ...repairFieldChildPathByCorrectIndex(field, field.path, toPath),\n } as OperandField;\n });\n this.arrayFieldGroup.fieldLists = [\n ...this.arrayFieldGroup.fieldLists,\n newFields,\n ];\n }\n\n removeItem(index: number) {\n const groupToRemove = this.arrayFieldGroup.fieldLists[index];\n const groupUntouched = this.arrayFieldGroup.fieldLists.filter(\n (_, idx) => idx < index,\n );\n const groupToLeftShift = this.arrayFieldGroup.fieldLists.filter(\n (_, idx) => idx > index,\n );\n\n const leftShiftedGroups = groupToLeftShift.map(group =>\n group.map(field => {\n const toPath = modifyArrayFieldPathIndex(field.path, idx => idx - 1);\n return {\n ...repairFieldChildPathByCorrectIndex(field, field.path, toPath),\n } as OperandField;\n }),\n );\n\n this.arrayFieldGroup.fieldLists = [...groupUntouched, ...leftShiftedGroups];\n\n const [match, formDataPathToRemove] =\n /^(.*\\[\\d+]).*$/.exec(groupToRemove?.[0].path) || [];\n if (match) {\n this.itemRemove.next(formDataPathToRemove);\n }\n\n this.crdForm.controlMap.forEach((_, key) => {\n if (\n key.startsWith(\n `${this.arrayFieldGroup.path}[${this.arrayFieldGroup.fieldLists.length}]`,\n )\n ) {\n this.crdForm.controlMap.delete(key);\n }\n });\n this.crdForm.refreshValidation();\n\n this.deleteFormData(`${this.arrayFieldGroup.path}[${index}]`);\n }\n\n private deleteFormData(path: string) {\n this.valueChange.next({\n field: {\n ...this.arrayFieldGroup,\n path,\n },\n data: null,\n });\n }\n\n fieldIsRequired(field: OperandField) {\n return (\n field?.required ||\n Object.keys(field?.validations || {})?.includes(Validations.required)\n );\n }\n\n get columnFields() {\n return this.basicArrayFieldTemplate;\n }\n\n trackByFn(index: number) {\n return index;\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FormItemComponent } from './form-item.component';\nimport { OperandAdvancedFieldGroupComponent } from './operand-advanced-field-group.component';\nimport { OperandArrayFieldGroupComponent } from './operand-array-field-group.component';\nimport { OperandFieldGroupComponent } from './operand-field-group.component';\nimport { OperandFieldComponent } from './operand-field.component';\nimport {\n CrdFormArrayTableComponent,\n K8sResourcePrefixComponent,\n ResourceRequirementsComponent,\n YamlEditorComponent,\n} from './widgets';\nimport { BasicAuthSecretComponent } from './widgets/basic-auth-secret/component';\nimport { BasicAuthCreateSecretDialogComponent } from './widgets/basic-auth-secret/create/component';\n\nconst WIDGETS = [\n CrdFormArrayTableComponent,\n K8sResourcePrefixComponent,\n ResourceRequirementsComponent,\n YamlEditorComponent,\n BasicAuthSecretComponent,\n BasicAuthCreateSecretDialogComponent,\n];\n\nconst EXPORTABLES = [\n FormItemComponent,\n OperandAdvancedFieldGroupComponent,\n OperandArrayFieldGroupComponent,\n OperandFieldGroupComponent,\n OperandFieldComponent,\n\n ...WIDGETS,\n];\n\n@NgModule({\n imports: [...EXPORTABLES],\n exports: EXPORTABLES,\n})\nexport class FieldControlsModule {}\n","import { OperandField } from '../../types';\n\nfunction getFieldCapability(\n field: OperandField,\n type: 'username' | 'password',\n capabilityKey: string,\n language?: 'en' | 'zh',\n) {\n const capabilities = field.capabilities;\n let prefix = `urn:alm:descriptor:${type}:${capabilityKey}`;\n if (language) {\n prefix += `:${language}:`;\n } else {\n prefix += ':';\n }\n const capability = capabilities?.find(c => c.startsWith(prefix));\n return capability?.slice(prefix.length);\n}\n\nexport function getFieldLabel(\n field: OperandField,\n type: 'username' | 'password',\n) {\n return {\n en: getFieldCapability(field, type, 'label', 'en'),\n zh: getFieldCapability(field, type, 'label', 'zh'),\n };\n}\n\nexport function getFieldDescription(\n field: OperandField,\n type: 'username' | 'password',\n) {\n return {\n en: getFieldCapability(field, type, 'description', 'en'),\n zh: getFieldCapability(field, type, 'description', 'zh'),\n };\n}\n\nexport function getFieldPlaceholder(\n field: OperandField,\n type: 'username' | 'password',\n) {\n return {\n en: getFieldCapability(field, type, 'placeholder', 'en'),\n zh: getFieldCapability(field, type, 'placeholder', 'zh'),\n };\n}\n\nexport function getUsernameDefaultValue(field: OperandField) {\n return getFieldCapability(field, 'username', 'default');\n}\n\nexport function isFieldDisabled(\n field: OperandField,\n type: 'username' | 'password',\n) {\n const capabilities = field.capabilities;\n return !!capabilities?.find(c => c === `urn:alm:descriptor:${type}:disabled`);\n}\n","import { FormModule, InputModule } from '@alauda/ui';\nimport { PurePipe, TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport {\n ErrorsMapperDirective,\n ReadonlyFieldDirective,\n StrongPasswordDirective,\n} from '@alauda-fe/dynamic-plugin-shared';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { hashSync } from 'bcryptjs';\nimport { BaseResourceFormComponent } from 'ng-resource-form-util';\n\nimport { OperandField } from '../../types';\n\nimport {\n getFieldDescription,\n getFieldLabel,\n getFieldPlaceholder,\n isFieldDisabled,\n} from './utils';\n\n@Component({\n selector: 'acl-htpasswd-form',\n template: `<ng-container [formGroup]=\"form\">\n @if (\n (field | pure: getFieldLabel : 'username' | translate) || 'username'\n | translate;\n as label\n ) {\n <aui-form-item width=\"large\">\n <label auiFormItemLabel>{{ label }}</label>\n <input\n aui-input\n auiFormItemControl\n formControlName=\"username\"\n [required]=\"required\"\n aclErrorsMapper\n [aclErrorsMapperOutlet]=\"usernameError\"\n [aclReadonlyField]=\"\n isDisabled || (field | pure: isFieldDisabled : 'username')\n \"\n [placeholder]=\"\n field | pure: getFieldPlaceholder : 'username' | translate\n \"\n />\n <div\n #usernameError\n auiFormItemError\n ></div>\n @if (\n field | pure: getFieldDescription : 'username' | translate;\n as description\n ) {\n <div auiFormItemHint>\n {{ description }}\n </div>\n }\n </aui-form-item>\n }\n @if (\n (field | pure: getFieldLabel : 'password' | translate) || 'password'\n | translate;\n as label\n ) {\n <aui-form-item width=\"large\">\n <label auiFormItemLabel>{{ label }}</label>\n <input\n aui-input\n type=\"password\"\n auiFormItemControl\n formControlName=\"password\"\n aclStrongPassword\n [required]=\"\n (!isUpdate || originalUsername !== form.get('username').value) &&\n required\n \"\n aclErrorsMapper\n [aclErrorsMapperOutlet]=\"passwordError\"\n [aclReadonlyField]=\"\n isDisabled || (field | pure: isFieldDisabled : 'password')\n \"\n [aclReadonlyFieldTemplate]=\"passwordTemplate\"\n [placeholder]=\"\n field | pure: getFieldPlaceholder : 'password' | translate\n \"\n />\n <div\n #passwordError\n auiFormItemError\n ></div>\n @if (\n field | pure: getFieldDescription : 'password' | translate;\n as description\n ) {\n <div auiFormItemHint>\n {{ description }}\n </div>\n }\n </aui-form-item>\n }\n <ng-template #passwordTemplate> ****** </ng-template>\n </ng-container>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n ReactiveFormsModule,\n FormModule,\n InputModule,\n ErrorsMapperDirective,\n ReadonlyFieldDirective,\n StrongPasswordDirective,\n PurePipe,\n TranslatePipe,\n ],\n})\nexport class HtpasswdFormComponent extends BaseResourceFormComponent<\n string,\n { username: string; password: string },\n FormGroup\n> {\n @Input()\n field: OperandField;\n\n @Input()\n required: boolean;\n\n @Input()\n isUpdate: boolean;\n\n @Input()\n isDisabled = false;\n\n originalUsername: string;\n // `null` is required because the default value is `null`,\n // if it is `undefined` here, it will cause form value change event unexpectedly...\n originalResource: string = null;\n\n getFieldDescription = getFieldDescription;\n isFieldDisabled = isFieldDisabled;\n getFieldPlaceholder = getFieldPlaceholder;\n getFieldLabel = getFieldLabel;\n\n createForm() {\n return this.fb.group({\n username: '',\n password: '',\n });\n }\n\n override adaptResourceModel(resource: string): {\n username: string;\n password: string;\n } {\n let username = '';\n if (resource) {\n const parts = resource.split(':');\n parts.pop();\n username = parts.join(':');\n if (!this.originalUsername) {\n this.originalUsername = username;\n this.originalResource = resource;\n }\n }\n\n return {\n username,\n password: '',\n };\n }\n\n override adaptFormModel({\n username,\n password,\n }: {\n username: string;\n password: string;\n }): string {\n if (!username || !password || !this.form.get('password').dirty) {\n return this.originalResource;\n }\n\n return [username, hashSync(password)].join(':');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { OperandFieldComponent } from '../../field-controls';\n\nimport { HtpasswdFormComponent } from './form';\nimport { getUsernameDefaultValue } from './utils';\n\n@Component({\n template: `<acl-htpasswd-form\n [isDisabled]=\"fieldComponent.isDisabled\"\n [formControl]=\"fieldComponent.control\"\n [field]=\"fieldComponent.field\"\n [required]=\"fieldComponent.isRequired\"\n [isUpdate]=\"isUpdate\"\n ></acl-htpasswd-form>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [HtpasswdFormComponent, ReactiveFormsModule],\n})\nexport class HtpasswdComponent {\n isUpdate: boolean;\n\n readonly fieldComponent = inject(forwardRef(() => OperandFieldComponent));\n\n constructor() {\n this.isUpdate =\n !!this.fieldComponent.control.value && !this.fieldComponent.control.dirty;\n\n const defaultUsername = getUsernameDefaultValue(this.fieldComponent.field);\n\n if (defaultUsername && !this.isUpdate) {\n this.fieldComponent.control.setValue(`${defaultUsername}:`);\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { HtpasswdComponent } from './component';\nimport { HtpasswdFormComponent } from './form';\n\nconst COMPONENTS = [HtpasswdComponent, HtpasswdFormComponent];\n\n@NgModule({\n imports: [...COMPONENTS],\n exports: COMPONENTS,\n})\nexport class HtpasswdModule {}\n","import { Map } from 'immutable';\nimport { isEmpty } from 'lodash-es';\n\nimport { SpecCapability } from '../types';\n\nexport const capabilityComponents = Map<SpecCapability, SpecCapability>()\n .set(SpecCapability.resourceRequirements, SpecCapability.resourceRequirements)\n .set(SpecCapability.select, SpecCapability.resourceRequirements);\n\nexport const capabilityFor = (\n specCapability: SpecCapability,\n): SpecCapability => {\n if (isEmpty(specCapability)) {\n return SpecCapability.text;\n }\n return specCapability;\n};\n","import { viewActions, yamlReadOptions } from '@alauda/code-editor';\nimport { PurePipe, TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get, toString } from 'lodash-es';\n\nimport { ResourceRequirementsComponent } from '../../field-controls/widgets/resource-requirements/resource-requirements.component';\nimport { YamlEditorComponent } from '../../field-controls/widgets/yaml-editor/yaml-editor.component';\nimport { OperandField, SpecCapability } from '../../types';\nimport {\n convertValue,\n getDefaultValue,\n getFieldDescription,\n getFieldDisplayName,\n normalizePath,\n} from '../../utils';\nimport { isArrayField } from '../../utils/helper';\nimport { capabilityFor } from '../util';\n\n@Component({\n selector: 'acl-spec-descriptor-capability',\n templateUrl: './capability.component.html',\n styleUrls: ['./capability.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n PurePipe,\n TranslatePipe,\n ResourceRequirementsComponent,\n YamlEditorComponent,\n ],\n})\nexport class SpecCapabilityComponent {\n @Input()\n field: OperandField;\n\n @Input()\n fields: OperandField[] = [];\n\n @Input()\n data: unknown;\n\n @HostBinding('class.hidden')\n get isHidden() {\n return this.shouldBeHidden();\n }\n\n SpecCapability = SpecCapability;\n getFieldDisplayName = getFieldDisplayName;\n getFieldDescription = getFieldDescription;\n yamlReadOptions = yamlReadOptions;\n viewActions = viewActions;\n isArrayField = isArrayField;\n\n getCapability(capabilities: SpecCapability[]): SpecCapability {\n const capability = capabilities.find(\n c =>\n c.startsWith(SpecCapability.resourceRequirements) ||\n c.startsWith(SpecCapability.booleanSwitch) ||\n c.startsWith(SpecCapability.yaml) ||\n c.startsWith(SpecCapability.object) ||\n c.startsWith(SpecCapability.array),\n );\n return capabilityFor(capability);\n }\n\n toDefault(input: unknown) {\n return input ? toString(input) : '-';\n }\n\n shouldBeHidden() {\n if (\n this.field.capabilities.some(c =>\n c.startsWith(SpecCapability.fieldDependency),\n )\n ) {\n const dependency = this.field.capabilities\n .find(c => c.startsWith(SpecCapability.fieldDependency))\n .split(SpecCapability.fieldDependency)[1];\n const [path, value] = dependency.split(':');\n const dependencyField = this.fields.find(\n f => f.path === normalizePath(path),\n );\n const dependencyDefaultValue = getDefaultValue(dependencyField);\n\n return (\n (get(this.data, dependencyField.path) ?? dependencyDefaultValue) !==\n convertValue(value, dependencyField.type)\n );\n }\n return false;\n }\n}\n","<ng-container *ngIf=\"field?.capabilities | pure: getCapability as type\">\n <div class=\"field-set-item__label\">\n {{ field | pure: getFieldDisplayName | translate }}\n </div>\n\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"SpecCapability.resourceRequirements\">\n <acl-crd-resource-requirements\n [ngModel]=\"field?.value\"\n [field]=\"field\"\n [readOnly]=\"true\"\n >\n </acl-crd-resource-requirements>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"SpecCapability.booleanSwitch\">\n {{ (field.value ? 'switch_open' : 'switch_close') | translate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"SpecCapability.yaml\">\n <acl-crd-yaml-editor\n [ngModel]=\"field?.value\"\n [actionsConfig]=\"viewActions\"\n [options]=\"yamlReadOptions\"\n >\n </acl-crd-yaml-editor>\n </ng-container>\n\n <ng-container>\n <div\n *ngSwitchDefault\n class=\"field-set-item__value field-set-item__value__overflow field-set-item__value__wrap\"\n >\n {{ field?.value | pure: toDefault }}\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n","import {\n OpenAPIV3SchemaObject,\n PurePipe,\n TranslatePipe,\n} from '@alauda-fe/dynamic-plugin-sdk';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport {\n Descriptor,\n OperandArrayFieldGroup,\n OperandField,\n OperandFieldGroup,\n} from '../../types';\nimport { SCHEMA_PATH, createCapabilityField, getFieldType } from '../../utils';\nimport { SpecCapabilityComponent } from '../capability/capability.component';\n\n@Component({\n selector: 'acl-spec-descriptor-capability-list',\n templateUrl: './capability-list.component.html',\n styleUrls: ['./capability-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [PurePipe, TranslatePipe, SpecCapabilityComponent],\n})\nexport class SpecCapabilityListComponent {\n @Input() descriptors: Descriptor[];\n @Input() debug: boolean;\n @Input() data: unknown;\n @Input() openApiSchema: OpenAPIV3SchemaObject;\n @Input() openApiSchemaPath: string | string[] = SCHEMA_PATH;\n\n createCapabilityField = createCapabilityField;\n\n // TODO: Need Correct Ux For Deep Object & Array Type\n excludes = (fields: OperandField[]) =>\n fields.filter(\n field => !['object', 'array'].includes(getFieldType(field) || field.type),\n );\n\n debugLog = (fields: {\n normalFields: OperandField[];\n fieldGroups: OperandFieldGroup[];\n arrayFieldGroups: OperandArrayFieldGroup[];\n advancedFields: OperandField[];\n descriptorFields: OperandField[];\n openApiFields: OperandField[];\n basicFields: OperandField[];\n treeFields: OperandField[];\n }) => {\n /* eslint-disable no-console */\n if (this.debug) {\n console.log('treeFields:', fields.treeFields);\n console.log('openApiFields:', fields.openApiFields);\n console.log('descriptorFields:', fields.descriptorFields);\n console.log('basicFields:', fields.basicFields);\n\n console.log('normalFields', fields.normalFields);\n\n console.log('fieldGroups:', fields.fieldGroups);\n console.log('arrayFieldGroups:', fields.arrayFieldGroups);\n console.log('advancedFields:', fields.advancedFields);\n }\n /* eslint-enable no-console */\n return fields;\n };\n}\n","@if (\n descriptors\n | pure: createCapabilityField : openApiSchema : data : openApiSchemaPath\n | pure: debugLog;\n as fields\n) {\n @for (field of fields.normalFields | pure: excludes; track field) {\n <acl-spec-descriptor-capability\n [field]=\"field\"\n [fields]=\"fields.basicFields\"\n [data]=\"data\"\n ></acl-spec-descriptor-capability>\n }\n @if (fields.fieldGroups; as groups) {\n @for (group of groups; track group) {\n <div class=\"group-field-capability\">\n <div class=\"group-field-capability--header\">{{ group.groupName }}</div>\n <div class=\"group-field-capability--content\">\n @for (field of group.fieldList | pure: excludes; track field) {\n <acl-spec-descriptor-capability\n [field]=\"$any(field)\"\n [fields]=\"fields.basicFields\"\n [data]=\"data\"\n ></acl-spec-descriptor-capability>\n }\n </div>\n </div>\n }\n }\n @if (fields.advancedFields; as advanced) {\n @if (advanced.length > 0) {\n <div class=\"group-field-capability\">\n <div class=\"group-field-capability--header\">\n {{ 'advanced_fields' | translate }}\n </div>\n <div class=\"group-field-capability--content\">\n @for (field of advanced | pure: excludes; track field) {\n <acl-spec-descriptor-capability\n [field]=\"field\"\n [fields]=\"fields.basicFields\"\n [data]=\"data\"\n ></acl-spec-descriptor-capability>\n }\n </div>\n </div>\n }\n }\n @if (fields.arrayFieldGroups; as arrayGroups) {\n <div class=\"array-group-field-capability\">\n @for (groups of arrayGroups; track groups) {\n <div class=\"group-field-capability\">\n <div class=\"group-field-capability--header\">\n {{ groups.groupName | translate }}\n </div>\n @for (fieldList of groups.fieldLists; track fieldList) {\n <div class=\"group-field-capability--content\">\n @for (field of fieldList | pure: excludes; track field) {\n <acl-spec-descriptor-capability\n [field]=\"field\"\n [fields]=\"fields.basicFields\"\n [data]=\"data\"\n ></acl-spec-descriptor-capability>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getFieldDescription","getFieldPlaceholder","parseInt","i1","map","i3","i2","$map","$Map","Map"],"mappings":"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"}
|