@alauda-fe/crd-form 0.0.1
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/esm2022/alauda-fe-crd-form.mjs +5 -0
- package/esm2022/lib/abstract/base-array.mjs +117 -0
- package/esm2022/lib/crd-form/component.mjs +334 -0
- package/esm2022/lib/crd-form/helper.mjs +32 -0
- package/esm2022/lib/crd-form.module.mjs +117 -0
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +2 -0
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +58 -0
- package/esm2022/lib/field-controls/form-item.component.mjs +121 -0
- package/esm2022/lib/field-controls/index.mjs +8 -0
- package/esm2022/lib/field-controls/module.mjs +141 -0
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +80 -0
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +112 -0
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +98 -0
- package/esm2022/lib/field-controls/operand-field.component.mjs +870 -0
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +109 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +116 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +211 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +2 -0
- package/esm2022/lib/field-controls/widgets/index.mjs +8 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +169 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +40 -0
- package/esm2022/lib/field-controls/widgets/link/component.mjs +68 -0
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +524 -0
- package/esm2022/lib/field-controls/widgets/utils.mjs +73 -0
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +94 -0
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +35 -0
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +171 -0
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +4 -0
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +54 -0
- package/esm2022/lib/field-widgets/index.mjs +2 -0
- package/esm2022/lib/remote-widgets/constants.mjs +4 -0
- package/esm2022/lib/remote-widgets/index.mjs +4 -0
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +42 -0
- package/esm2022/lib/remote-widgets/token.mjs +7 -0
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +139 -0
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +189 -0
- package/esm2022/lib/spec-descriptors/index.mjs +4 -0
- package/esm2022/lib/spec-descriptors/util.mjs +13 -0
- package/esm2022/lib/types/index.mjs +73 -0
- package/esm2022/lib/utils/capability.mjs +295 -0
- package/esm2022/lib/utils/constant.mjs +22 -0
- package/esm2022/lib/utils/directives.mjs +19 -0
- package/esm2022/lib/utils/helper.mjs +201 -0
- package/esm2022/lib/utils/index.mjs +7 -0
- package/esm2022/lib/utils/service-model.mjs +12 -0
- package/esm2022/lib/utils/util.mjs +310 -0
- package/esm2022/public-api.mjs +13 -0
- package/index.d.ts +5 -0
- package/lib/abstract/base-array.d.ts +31 -0
- package/lib/crd-form/component.d.ts +61 -0
- package/lib/crd-form/helper.d.ts +7 -0
- package/lib/crd-form.module.d.ts +16 -0
- package/lib/field-controls/expressions/expression-core.d.ts +6 -0
- package/lib/field-controls/expressions/props-expression.d.ts +36 -0
- package/lib/field-controls/form-item.component.d.ts +11 -0
- package/lib/field-controls/index.d.ts +7 -0
- package/lib/field-controls/module.d.ts +23 -0
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +16 -0
- package/lib/field-controls/operand-array-field-group.component.d.ts +8 -0
- package/lib/field-controls/operand-field-group.component.d.ts +24 -0
- package/lib/field-controls/operand-field.component.d.ts +110 -0
- package/lib/field-controls/widgets/array-table/component.d.ts +8 -0
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +26 -0
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +45 -0
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +11 -0
- package/lib/field-controls/widgets/index.d.ts +7 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +35 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +3 -0
- package/lib/field-controls/widgets/link/component.d.ts +20 -0
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +88 -0
- package/lib/field-controls/widgets/utils.d.ts +17 -0
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +36 -0
- package/lib/field-widgets/htpasswd/component.d.ts +9 -0
- package/lib/field-widgets/htpasswd/form.d.ts +32 -0
- package/lib/field-widgets/htpasswd/index.d.ts +3 -0
- package/lib/field-widgets/htpasswd/module.d.ts +13 -0
- package/lib/field-widgets/index.d.ts +1 -0
- package/lib/remote-widgets/constants.d.ts +3 -0
- package/lib/remote-widgets/index.d.ts +3 -0
- package/lib/remote-widgets/remote-widget.service.d.ts +28 -0
- package/lib/remote-widgets/token.d.ts +3 -0
- package/lib/spec-descriptors/capability/capability.component.d.ts +20 -0
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +34 -0
- package/lib/spec-descriptors/index.d.ts +3 -0
- package/lib/spec-descriptors/util.d.ts +4 -0
- package/lib/types/index.d.ts +122 -0
- package/lib/utils/capability.d.ts +54 -0
- package/lib/utils/constant.d.ts +12 -0
- package/lib/utils/directives.d.ts +9 -0
- package/lib/utils/helper.d.ts +61 -0
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/service-model.d.ts +44 -0
- package/lib/utils/util.d.ts +48 -0
- package/package.json +30 -0
- package/public-api.d.ts +9 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { K8sApiService, ObservableInput, skipError, TOKEN_RESOURCE_DEFINITIONS, ValueHook, } from '@alauda-fe/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, Inject, Injector, Input, } from '@angular/core';
|
|
4
|
+
import { isEmpty } from 'lodash-es';
|
|
5
|
+
import { BaseResourceFormComponent } from 'ng-resource-form-util';
|
|
6
|
+
import { BehaviorSubject, map, Observable, pluck, switchMap, tap } from 'rxjs';
|
|
7
|
+
import { CrdFormComponent } from '../../../crd-form/component';
|
|
8
|
+
import { getK8sResourcePrefixOptions } from '../../../utils';
|
|
9
|
+
import { findResourceType } from './util';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@alauda-fe/common";
|
|
12
|
+
import * as i2 from "../../../crd-form/component";
|
|
13
|
+
import * as i3 from "@angular/common";
|
|
14
|
+
import * as i4 from "@angular/forms";
|
|
15
|
+
import * as i5 from "@alauda/ui";
|
|
16
|
+
function K8sResourcePrefixComponent_ng_container_0_aui_option_3_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
i0.ɵɵelementStart(0, "aui-option", 5);
|
|
18
|
+
i0.ɵɵpipe(1, "aclName");
|
|
19
|
+
i0.ɵɵpipe(2, "aclName");
|
|
20
|
+
i0.ɵɵtext(3);
|
|
21
|
+
i0.ɵɵpipe(4, "aclName");
|
|
22
|
+
i0.ɵɵelementEnd();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const item_r1 = ctx.$implicit;
|
|
25
|
+
i0.ɵɵproperty("value", i0.ɵɵpipeBind1(1, 3, item_r1))("label", i0.ɵɵpipeBind1(2, 5, item_r1));
|
|
26
|
+
i0.ɵɵadvance(3);
|
|
27
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 7, item_r1), " ");
|
|
28
|
+
} }
|
|
29
|
+
function K8sResourcePrefixComponent_ng_container_0_ng_container_5_aui_tag_1_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
i0.ɵɵelementStart(0, "aui-tag", 7);
|
|
31
|
+
i0.ɵɵtext(1);
|
|
32
|
+
i0.ɵɵelementEnd();
|
|
33
|
+
} if (rf & 2) {
|
|
34
|
+
const tag_r2 = ctx.$implicit;
|
|
35
|
+
i0.ɵɵproperty("border", true)("auiTooltip", tag_r2);
|
|
36
|
+
i0.ɵɵadvance();
|
|
37
|
+
i0.ɵɵtextInterpolate1(" ", tag_r2, " ");
|
|
38
|
+
} }
|
|
39
|
+
function K8sResourcePrefixComponent_ng_container_0_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementContainerStart(0);
|
|
41
|
+
i0.ɵɵtemplate(1, K8sResourcePrefixComponent_ng_container_0_ng_container_5_aui_tag_1_Template, 2, 3, "aui-tag", 6);
|
|
42
|
+
i0.ɵɵelementContainerEnd();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
45
|
+
i0.ɵɵadvance();
|
|
46
|
+
i0.ɵɵproperty("ngForOf", ctx_r2.form.value);
|
|
47
|
+
} }
|
|
48
|
+
function K8sResourcePrefixComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
i0.ɵɵelementContainerStart(0);
|
|
50
|
+
i0.ɵɵelementStart(1, "aui-multi-select", 2);
|
|
51
|
+
i0.ɵɵpipe(2, "async");
|
|
52
|
+
i0.ɵɵtemplate(3, K8sResourcePrefixComponent_ng_container_0_aui_option_3_Template, 5, 9, "aui-option", 3);
|
|
53
|
+
i0.ɵɵpipe(4, "async");
|
|
54
|
+
i0.ɵɵelementEnd();
|
|
55
|
+
i0.ɵɵtemplate(5, K8sResourcePrefixComponent_ng_container_0_ng_container_5_Template, 2, 1, "ng-container", 4);
|
|
56
|
+
i0.ɵɵelementContainerEnd();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
59
|
+
i0.ɵɵadvance();
|
|
60
|
+
i0.ɵɵproperty("formControl", ctx_r2.form)("hidden", ctx_r2.readonly || !i0.ɵɵpipeBind1(2, 5, ctx_r2.init$$))("maxRowCount", 3);
|
|
61
|
+
i0.ɵɵadvance(2);
|
|
62
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(4, 7, ctx_r2.resources$));
|
|
63
|
+
i0.ɵɵadvance(2);
|
|
64
|
+
i0.ɵɵproperty("ngIf", ctx_r2.readonly);
|
|
65
|
+
} }
|
|
66
|
+
function K8sResourcePrefixComponent_ng_template_2_aui_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "aui-option", 5);
|
|
68
|
+
i0.ɵɵpipe(1, "aclName");
|
|
69
|
+
i0.ɵɵpipe(2, "aclName");
|
|
70
|
+
i0.ɵɵtext(3);
|
|
71
|
+
i0.ɵɵpipe(4, "aclName");
|
|
72
|
+
i0.ɵɵelementEnd();
|
|
73
|
+
} if (rf & 2) {
|
|
74
|
+
const item_r4 = ctx.$implicit;
|
|
75
|
+
i0.ɵɵproperty("value", i0.ɵɵpipeBind1(1, 3, item_r4))("label", i0.ɵɵpipeBind1(2, 5, item_r4));
|
|
76
|
+
i0.ɵɵadvance(3);
|
|
77
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 7, item_r4), " ");
|
|
78
|
+
} }
|
|
79
|
+
function K8sResourcePrefixComponent_ng_template_2_span_6_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "span");
|
|
81
|
+
i0.ɵɵtext(1);
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
} if (rf & 2) {
|
|
84
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
85
|
+
i0.ɵɵadvance();
|
|
86
|
+
i0.ɵɵtextInterpolate(ctx_r2.form.value);
|
|
87
|
+
} }
|
|
88
|
+
function K8sResourcePrefixComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "aui-select", 8);
|
|
90
|
+
i0.ɵɵtemplate(1, K8sResourcePrefixComponent_ng_template_2_aui_option_1_Template, 5, 9, "aui-option", 3);
|
|
91
|
+
i0.ɵɵpipe(2, "async");
|
|
92
|
+
i0.ɵɵelementStart(3, "aui-option-placeholder");
|
|
93
|
+
i0.ɵɵtext(4);
|
|
94
|
+
i0.ɵɵpipe(5, "translate");
|
|
95
|
+
i0.ɵɵelementEnd()();
|
|
96
|
+
i0.ɵɵtemplate(6, K8sResourcePrefixComponent_ng_template_2_span_6_Template, 2, 1, "span", 4);
|
|
97
|
+
} if (rf & 2) {
|
|
98
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
99
|
+
i0.ɵɵproperty("formControl", ctx_r2.form)("hidden", ctx_r2.readonly);
|
|
100
|
+
i0.ɵɵadvance();
|
|
101
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 5, ctx_r2.resources$));
|
|
102
|
+
i0.ɵɵadvance(3);
|
|
103
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 7, "no_data"));
|
|
104
|
+
i0.ɵɵadvance(2);
|
|
105
|
+
i0.ɵɵproperty("ngIf", ctx_r2.readonly);
|
|
106
|
+
} }
|
|
107
|
+
export class K8sResourcePrefixComponent extends BaseResourceFormComponent {
|
|
108
|
+
constructor(injector, k8sApi, crdForm, resourceDefinitions) {
|
|
109
|
+
super(injector);
|
|
110
|
+
this.k8sApi = k8sApi;
|
|
111
|
+
this.crdForm = crdForm;
|
|
112
|
+
this.resourceDefinitions = resourceDefinitions;
|
|
113
|
+
this.init$$ = new BehaviorSubject(false);
|
|
114
|
+
this.readonly = false;
|
|
115
|
+
this.options$ = this.field$.pipe(map(field => getK8sResourcePrefixOptions(field)));
|
|
116
|
+
this.resources$ = this.options$.pipe(switchMap(option => this.k8sApi[option.isGlobal ? 'getGlobalResourceList' : 'getResourceList']({
|
|
117
|
+
type: findResourceType(option.type, this.resourceDefinitions),
|
|
118
|
+
...(option.namespaced
|
|
119
|
+
? option.isGlobal
|
|
120
|
+
? { namespaced: true }
|
|
121
|
+
: { namespace: this.crdForm?.formContext?.namespace }
|
|
122
|
+
: null),
|
|
123
|
+
...(!option.isGlobal && {
|
|
124
|
+
cluster: this.crdForm?.formContext?.cluster,
|
|
125
|
+
}),
|
|
126
|
+
...(option.labelSelector && {
|
|
127
|
+
queryParams: { labelSelector: option.labelSelector },
|
|
128
|
+
}),
|
|
129
|
+
}).pipe(pluck('items'))), skipError(), tap(() => this.init$$.next(true)));
|
|
130
|
+
}
|
|
131
|
+
createForm() {
|
|
132
|
+
return this.fb.control(null);
|
|
133
|
+
}
|
|
134
|
+
static { this.ɵfac = function K8sResourcePrefixComponent_Factory(t) { return new (t || K8sResourcePrefixComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.K8sApiService), i0.ɵɵdirectiveInject(i2.CrdFormComponent), i0.ɵɵdirectiveInject(TOKEN_RESOURCE_DEFINITIONS)); }; }
|
|
135
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: K8sResourcePrefixComponent, selectors: [["acl-crd-resource-prefix"]], inputs: { field: "field", readonly: "readonly", formErrors: "formErrors" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 4, consts: [["singleSelect", ""], [4, "ngIf", "ngIfElse"], [1, "select", 3, "formControl", "hidden", "maxRowCount"], [3, "value", "label", 4, "ngFor", "ngForOf"], [4, "ngIf"], [3, "value", "label"], ["type", "info", "size", "mini", 3, "border", "auiTooltip", 4, "ngFor", "ngForOf"], ["type", "info", "size", "mini", 3, "border", "auiTooltip"], [1, "select", 3, "formControl", "hidden"]], template: function K8sResourcePrefixComponent_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵtemplate(0, K8sResourcePrefixComponent_ng_container_0_Template, 6, 9, "ng-container", 1);
|
|
137
|
+
i0.ɵɵpipe(1, "async");
|
|
138
|
+
i0.ɵɵtemplate(2, K8sResourcePrefixComponent_ng_template_2_Template, 7, 9, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
139
|
+
} if (rf & 2) {
|
|
140
|
+
let tmp_1_0;
|
|
141
|
+
const singleSelect_r5 = i0.ɵɵreference(3);
|
|
142
|
+
i0.ɵɵproperty("ngIf", (tmp_1_0 = i0.ɵɵpipeBind1(1, 2, ctx.options$)) == null ? null : tmp_1_0.multiple)("ngIfElse", singleSelect_r5);
|
|
143
|
+
} }, dependencies: [i3.NgForOf, i3.NgIf, i4.NgControlStatus, i4.FormControlDirective, i5.SelectComponent, i5.OptionComponent, i5.OptionPlaceholderComponent, i5.MultiSelectComponent, i5.TagComponent, i5.TooltipDirective, i1.E2eAttributeBindingDirective, i3.AsyncPipe, i1.TranslatePipe, i1.K8sNamePipe], styles: ["[_nghost-%COMP%]{flex:1}.select[_ngcontent-%COMP%]{display:block}"], changeDetection: 0 }); }
|
|
144
|
+
}
|
|
145
|
+
__decorate([
|
|
146
|
+
ObservableInput(),
|
|
147
|
+
__metadata("design:type", Observable)
|
|
148
|
+
], K8sResourcePrefixComponent.prototype, "field$", void 0);
|
|
149
|
+
__decorate([
|
|
150
|
+
ValueHook(function (formErrors) {
|
|
151
|
+
this.form?.setErrors(isEmpty(formErrors) ? null : formErrors);
|
|
152
|
+
}),
|
|
153
|
+
__metadata("design:type", Object)
|
|
154
|
+
], K8sResourcePrefixComponent.prototype, "formErrors", void 0);
|
|
155
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(K8sResourcePrefixComponent, [{
|
|
156
|
+
type: Component,
|
|
157
|
+
args: [{ selector: 'acl-crd-resource-prefix', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"(options$ | async)?.multiple; else singleSelect\">\n <aui-multi-select\n class=\"select\"\n [formControl]=\"form\"\n [hidden]=\"readonly || !(init$$ | async)\"\n [maxRowCount]=\"3\"\n >\n <aui-option\n *ngFor=\"let item of resources$ | async\"\n [value]=\"item | aclName\"\n [label]=\"item | aclName\"\n >\n {{ item | aclName }}\n </aui-option>\n </aui-multi-select>\n <ng-container *ngIf=\"readonly\">\n <aui-tag\n *ngFor=\"let tag of $any(form.value); let ind = index\"\n type=\"info\"\n size=\"mini\"\n [border]=\"true\"\n [auiTooltip]=\"tag\"\n >\n {{ tag }}\n </aui-tag>\n </ng-container>\n</ng-container>\n<ng-template #singleSelect>\n <aui-select\n [formControl]=\"form\"\n class=\"select\"\n [hidden]=\"readonly\"\n >\n <aui-option\n *ngFor=\"let item of resources$ | async\"\n [value]=\"item | aclName\"\n [label]=\"item | aclName\"\n >\n {{ item | aclName }}\n </aui-option>\n <aui-option-placeholder>{{ 'no_data' | translate }}</aui-option-placeholder>\n </aui-select>\n <span *ngIf=\"readonly\">{{ form.value }}</span>\n</ng-template>\n", styles: [":host{flex:1}.select{display:block}\n"] }]
|
|
158
|
+
}], () => [{ type: i0.Injector }, { type: i1.K8sApiService }, { type: i2.CrdFormComponent }, { type: undefined, decorators: [{
|
|
159
|
+
type: Inject,
|
|
160
|
+
args: [TOKEN_RESOURCE_DEFINITIONS]
|
|
161
|
+
}] }], { field: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], field$: [], readonly: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], formErrors: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}] }); })();
|
|
168
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(K8sResourcePrefixComponent, { className: "K8sResourcePrefixComponent", filePath: "lib/field-controls/widgets/k8s-resource-prefix/component.ts", lineNumber: 32 }); })();
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2ZpZWxkLWNvbnRyb2xzL3dpZGdldHMvazhzLXJlc291cmNlLXByZWZpeC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvd2lkZ2V0cy9rOHMtcmVzb3VyY2UtcHJlZml4L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxhQUFhLEVBRWIsZUFBZSxFQUNmLFNBQVMsRUFDVCwwQkFBMEIsRUFDMUIsU0FBUyxHQUNWLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7OztJQ2hCdEMscUNBSUM7OztJQUNDLFlBQ0Y7O0lBQUEsaUJBQWE7OztJQUhYLEFBREEscURBQXdCLHdDQUNBO0lBRXhCLGVBQ0Y7SUFERSw4REFDRjs7O0lBR0Esa0NBTUM7SUFDQyxZQUNGO0lBQUEsaUJBQVU7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LFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7MkZBM0RVLDBCQUEwQiw2SUFLM0IsMEJBQTBCO29FQUx6QiwwQkFBMEI7WUMvQnZDLDZGQUFzRTs7WUEyQnRFLDRIQUEyQjs7OztZQTNCd0IsQUFBcEMsdUdBQW9DLDZCQUFpQjs7O0FEZ0RsRTtJQURDLGVBQWUsRUFBRTs4QkFDVCxVQUFVOzBEQUFlO0FBYWxDO0lBSkMsU0FBUyxDQUFDLFVBQVUsVUFBc0I7UUFDekMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQzs7OERBRXFCO2lGQTlCWiwwQkFBMEI7Y0FOdEMsU0FBUzsyQkFDRSx5QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU07O3NCQU81QyxNQUFNO3VCQUFDLDBCQUEwQjtxQkFTcEMsS0FBSztrQkFESixLQUFLO1lBSU4sTUFBTSxNQUdOLFFBQVE7a0JBRFAsS0FBSztZQVdOLFVBQVU7a0JBRFQsS0FBSzs7a0ZBN0JLLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEs4c0FwaVNlcnZpY2UsXG4gIEs4c1Jlc291cmNlRGVmaW5pdGlvbnMsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgc2tpcEVycm9yLFxuICBUT0tFTl9SRVNPVVJDRV9ERUZJTklUSU9OUyxcbiAgVmFsdWVIb29rLFxufSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJhc2VSZXNvdXJjZUZvcm1Db21wb25lbnQgfSBmcm9tICduZy1yZXNvdXJjZS1mb3JtLXV0aWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUsIHBsdWNrLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDcmRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY3JkLWZvcm0vY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1FcnJvcnMsIE9wZXJhbmRGaWVsZCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEs4c1Jlc291cmNlUHJlZml4T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuaW1wb3J0IHsgZmluZFJlc291cmNlVHlwZSB9IGZyb20gJy4vdXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1jcmQtcmVzb3VyY2UtcHJlZml4JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHlsZS5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBLOHNSZXNvdXJjZVByZWZpeENvbXBvbmVudCBleHRlbmRzIEJhc2VSZXNvdXJjZUZvcm1Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNBcGk6IEs4c0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcmRGb3JtOiBDcmRGb3JtQ29tcG9uZW50LFxuICAgIEBJbmplY3QoVE9LRU5fUkVTT1VSQ0VfREVGSU5JVElPTlMpXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZURlZmluaXRpb25zOiBLOHNSZXNvdXJjZURlZmluaXRpb25zLFxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cblxuICBpbml0JCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBASW5wdXQoKVxuICBmaWVsZDogT3BlcmFuZEZpZWxkO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmaWVsZCQhOiBPYnNlcnZhYmxlPE9wZXJhbmRGaWVsZD47XG5cbiAgQElucHV0KClcbiAgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogY3JkLWZvcm0g55qEIGVycm9yU3RhdGUg5piv55Sx5YWo5bGA55qEIEZvcm1FcnJvciDlr7nosaHlu7rnq4vnmoTvvIzkuLrmu6HotrPljZXkuIDmlbDmja7mupDnmoTorr7orqHvvIzoh6rlrprkuYkgd2lkZ2V0IOeahCBlcnJvciDlj6/ku6XnlLHlpJbpg6jkvKDlhaXvvIxcbiAgICog5omA5pyJ55qEIHZhbGlkYXRpb24g5ZyoIGZpZWxkIOe6p+WIq+agoemqjO+8jHdpZGdldCDlj6rpnIDopoHlnKjlhbPlv4PmoKHpqozlpLHotKXml7bov5vooYzlkIjnkIblsZXnpLpcbiAgICovXG4gIEBWYWx1ZUhvb2soZnVuY3Rpb24gKGZvcm1FcnJvcnM6IEZvcm1FcnJvcnMpIHtcbiAgICB0aGlzLmZvcm0/LnNldEVycm9ycyhpc0VtcHR5KGZvcm1FcnJvcnMpID8gbnVsbCA6IGZvcm1FcnJvcnMpO1xuICB9KVxuICBASW5wdXQoKVxuICBmb3JtRXJyb3JzOiBGb3JtRXJyb3JzO1xuXG4gIG9wdGlvbnMkID0gdGhpcy5maWVsZCQucGlwZShtYXAoZmllbGQgPT4gZ2V0SzhzUmVzb3VyY2VQcmVmaXhPcHRpb25zKGZpZWxkKSkpO1xuXG4gIHJlc291cmNlcyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKG9wdGlvbiA9PlxuICAgICAgdGhpcy5rOHNBcGlbXG4gICAgICAgIG9wdGlvbi5pc0dsb2JhbCA/ICdnZXRHbG9iYWxSZXNvdXJjZUxpc3QnIDogJ2dldFJlc291cmNlTGlzdCdcbiAgICAgIF0oe1xuICAgICAgICB0eXBlOiBmaW5kUmVzb3VyY2VUeXBlKG9wdGlvbi50eXBlLCB0aGlzLnJlc291cmNlRGVmaW5pdGlvbnMpLFxuICAgICAgICAuLi4ob3B0aW9uLm5hbWVzcGFjZWRcbiAgICAgICAgICA/IG9wdGlvbi5pc0dsb2JhbFxuICAgICAgICAgICAgPyB7IG5hbWVzcGFjZWQ6IHRydWUgfVxuICAgICAgICAgICAgOiB7IG5hbWVzcGFjZTogdGhpcy5jcmRGb3JtPy5mb3JtQ29udGV4dD8ubmFtZXNwYWNlIH1cbiAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAuLi4oIW9wdGlvbi5pc0dsb2JhbCAmJiB7XG4gICAgICAgICAgY2x1c3RlcjogdGhpcy5jcmRGb3JtPy5mb3JtQ29udGV4dD8uY2x1c3RlcixcbiAgICAgICAgfSksXG4gICAgICAgIC4uLihvcHRpb24ubGFiZWxTZWxlY3RvciAmJiB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHsgbGFiZWxTZWxlY3Rvcjogb3B0aW9uLmxhYmVsU2VsZWN0b3IgfSxcbiAgICAgICAgfSksXG4gICAgICB9KS5waXBlKHBsdWNrKCdpdGVtcycpKSxcbiAgICApLFxuICAgIHNraXBFcnJvcigpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmluaXQkJC5uZXh0KHRydWUpKSxcbiAgKTtcblxuICBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2wobnVsbCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIob3B0aW9ucyQgfCBhc3luYyk/Lm11bHRpcGxlOyBlbHNlIHNpbmdsZVNlbGVjdFwiPlxuICA8YXVpLW11bHRpLXNlbGVjdFxuICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybVwiXG4gICAgW2hpZGRlbl09XCJyZWFkb25seSB8fCAhKGluaXQkJCB8IGFzeW5jKVwiXG4gICAgW21heFJvd0NvdW50XT1cIjNcIlxuICA+XG4gICAgPGF1aS1vcHRpb25cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc291cmNlcyQgfCBhc3luY1wiXG4gICAgICBbdmFsdWVdPVwiaXRlbSB8IGFjbE5hbWVcIlxuICAgICAgW2xhYmVsXT1cIml0ZW0gfCBhY2xOYW1lXCJcbiAgICA+XG4gICAgICB7eyBpdGVtIHwgYWNsTmFtZSB9fVxuICAgIDwvYXVpLW9wdGlvbj5cbiAgPC9hdWktbXVsdGktc2VsZWN0PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHlcIj5cbiAgICA8YXVpLXRhZ1xuICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiAkYW55KGZvcm0udmFsdWUpOyBsZXQgaW5kID0gaW5kZXhcIlxuICAgICAgdHlwZT1cImluZm9cIlxuICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgW2JvcmRlcl09XCJ0cnVlXCJcbiAgICAgIFthdWlUb29sdGlwXT1cInRhZ1wiXG4gICAgPlxuICAgICAge3sgdGFnIH19XG4gICAgPC9hdWktdGFnPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNzaW5nbGVTZWxlY3Q+XG4gIDxhdWktc2VsZWN0XG4gICAgW2Zvcm1Db250cm9sXT1cImZvcm1cIlxuICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICBbaGlkZGVuXT1cInJlYWRvbmx5XCJcbiAgPlxuICAgIDxhdWktb3B0aW9uXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXNvdXJjZXMkIHwgYXN5bmNcIlxuICAgICAgW3ZhbHVlXT1cIml0ZW0gfCBhY2xOYW1lXCJcbiAgICAgIFtsYWJlbF09XCJpdGVtIHwgYWNsTmFtZVwiXG4gICAgPlxuICAgICAge3sgaXRlbSB8IGFjbE5hbWUgfX1cbiAgICA8L2F1aS1vcHRpb24+XG4gICAgPGF1aS1vcHRpb24tcGxhY2Vob2xkZXI+e3sgJ25vX2RhdGEnIHwgdHJhbnNsYXRlIH19PC9hdWktb3B0aW9uLXBsYWNlaG9sZGVyPlxuICA8L2F1aS1zZWxlY3Q+XG4gIDxzcGFuICpuZ0lmPVwicmVhZG9ubHlcIj57eyBmb3JtLnZhbHVlIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export function findResourceType(type, definitions) {
|
|
2
|
+
type = plural(type.toLowerCase());
|
|
3
|
+
return Object.entries(definitions).find(([_k, v]) => v.type === type)?.[0];
|
|
4
|
+
}
|
|
5
|
+
export function plural(word) {
|
|
6
|
+
const plural = {
|
|
7
|
+
'(quiz)$': '$1zes',
|
|
8
|
+
'^(ox)$': '$1en',
|
|
9
|
+
'([m|l])ouse$': '$1ice',
|
|
10
|
+
// cspell:disable-next-line
|
|
11
|
+
'(matr|vert|ind)ix|ex$': '$1ices',
|
|
12
|
+
'(x|ch|ss|sh)$': '$1es',
|
|
13
|
+
// cspell:disable-next-line
|
|
14
|
+
'([^aeiouy]|qu)y$': '$1ies',
|
|
15
|
+
'(hive)$': '$1s',
|
|
16
|
+
'(?:([^f])fe|([lr])f)$': '$1$2ves',
|
|
17
|
+
// cspell:disable-next-line
|
|
18
|
+
'(shea|lea|loa|thie)f$': '$1ves',
|
|
19
|
+
sis$: 'ses',
|
|
20
|
+
'([ti])um$': '$1a',
|
|
21
|
+
// cspell:disable-next-line
|
|
22
|
+
'(tomat|potat|ech|her|vet)o$': '$1oes',
|
|
23
|
+
'(bu)s$': '$1ses',
|
|
24
|
+
'(alias)$': '$1es',
|
|
25
|
+
// cspell:disable-next-line
|
|
26
|
+
'(octop)us$': '$1i',
|
|
27
|
+
'(ax|test)is$': '$1es',
|
|
28
|
+
'(us)$': '$1es',
|
|
29
|
+
'([^s]+)$': '$1s',
|
|
30
|
+
};
|
|
31
|
+
// check for matches using regular expressions
|
|
32
|
+
Object.keys(plural).forEach(reg => {
|
|
33
|
+
const pattern = new RegExp(reg, 'i');
|
|
34
|
+
if (pattern.test(word)) {
|
|
35
|
+
word = word.replace(pattern, plural[reg]);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return word;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9maWVsZC1jb250cm9scy93aWRnZXRzL2s4cy1yZXNvdXJjZS1wcmVmaXgvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQVksRUFDWixXQUFtQztJQUVuQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQVk7SUFDakMsTUFBTSxNQUFNLEdBQThCO1FBQ3hDLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLGNBQWMsRUFBRSxPQUFPO1FBQ3ZCLDJCQUEyQjtRQUMzQix1QkFBdUIsRUFBRSxRQUFRO1FBQ2pDLGVBQWUsRUFBRSxNQUFNO1FBQ3ZCLDJCQUEyQjtRQUMzQixrQkFBa0IsRUFBRSxPQUFPO1FBQzNCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLHVCQUF1QixFQUFFLFNBQVM7UUFDbEMsMkJBQTJCO1FBQzNCLHVCQUF1QixFQUFFLE9BQU87UUFDaEMsSUFBSSxFQUFFLEtBQUs7UUFDWCxXQUFXLEVBQUUsS0FBSztRQUNsQiwyQkFBMkI7UUFDM0IsNkJBQTZCLEVBQUUsT0FBTztRQUN0QyxRQUFRLEVBQUUsT0FBTztRQUNqQixVQUFVLEVBQUUsTUFBTTtRQUNsQiwyQkFBMkI7UUFDM0IsWUFBWSxFQUFFLEtBQUs7UUFDbkIsY0FBYyxFQUFFLE1BQU07UUFDdEIsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDO0lBQ0YsOENBQThDO0lBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSzhzUmVzb3VyY2VEZWZpbml0aW9ucyB9IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSZXNvdXJjZVR5cGUoXG4gIHR5cGU6IHN0cmluZyxcbiAgZGVmaW5pdGlvbnM6IEs4c1Jlc291cmNlRGVmaW5pdGlvbnMsXG4pIHtcbiAgdHlwZSA9IHBsdXJhbCh0eXBlLnRvTG93ZXJDYXNlKCkpO1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGVmaW5pdGlvbnMpLmZpbmQoKFtfaywgdl0pID0+IHYudHlwZSA9PT0gdHlwZSk/LlswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbCh3b3JkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwbHVyYWw6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgJyhxdWl6KSQnOiAnJDF6ZXMnLFxuICAgICdeKG94KSQnOiAnJDFlbicsXG4gICAgJyhbbXxsXSlvdXNlJCc6ICckMWljZScsXG4gICAgLy8gY3NwZWxsOmRpc2FibGUtbmV4dC1saW5lXG4gICAgJyhtYXRyfHZlcnR8aW5kKWl4fGV4JCc6ICckMWljZXMnLFxuICAgICcoeHxjaHxzc3xzaCkkJzogJyQxZXMnLFxuICAgIC8vIGNzcGVsbDpkaXNhYmxlLW5leHQtbGluZVxuICAgICcoW15hZWlvdXldfHF1KXkkJzogJyQxaWVzJyxcbiAgICAnKGhpdmUpJCc6ICckMXMnLFxuICAgICcoPzooW15mXSlmZXwoW2xyXSlmKSQnOiAnJDEkMnZlcycsXG4gICAgLy8gY3NwZWxsOmRpc2FibGUtbmV4dC1saW5lXG4gICAgJyhzaGVhfGxlYXxsb2F8dGhpZSlmJCc6ICckMXZlcycsXG4gICAgc2lzJDogJ3NlcycsXG4gICAgJyhbdGldKXVtJCc6ICckMWEnLFxuICAgIC8vIGNzcGVsbDpkaXNhYmxlLW5leHQtbGluZVxuICAgICcodG9tYXR8cG90YXR8ZWNofGhlcnx2ZXQpbyQnOiAnJDFvZXMnLFxuICAgICcoYnUpcyQnOiAnJDFzZXMnLFxuICAgICcoYWxpYXMpJCc6ICckMWVzJyxcbiAgICAvLyBjc3BlbGw6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAnKG9jdG9wKXVzJCc6ICckMWknLFxuICAgICcoYXh8dGVzdClpcyQnOiAnJDFlcycsXG4gICAgJyh1cykkJzogJyQxZXMnLFxuICAgICcoW15zXSspJCc6ICckMXMnLFxuICB9O1xuICAvLyBjaGVjayBmb3IgbWF0Y2hlcyB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zXG4gIE9iamVjdC5rZXlzKHBsdXJhbCkuZm9yRWFjaChyZWcgPT4ge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHJlZywgJ2knKTtcbiAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpKSB7XG4gICAgICB3b3JkID0gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHBsdXJhbFtyZWddKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gd29yZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { IconModule } from '@alauda/ui';
|
|
2
|
+
import { createNestedFormControl, SanitizePipe } from '@alauda-fe/common';
|
|
3
|
+
import { NgIf } from '@angular/common';
|
|
4
|
+
import { ChangeDetectionStrategy, Component, Input, forwardRef, } from '@angular/core';
|
|
5
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
+
import { SpecCapability } from '../../../types';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@alauda/ui";
|
|
9
|
+
function LinkComponent_aui_icon_4_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
i0.ɵɵelement(0, "aui-icon", 2);
|
|
11
|
+
} }
|
|
12
|
+
export function isLink(field) {
|
|
13
|
+
const { capabilities } = field;
|
|
14
|
+
return capabilities.some(c => c.startsWith(`${SpecCapability.text}:link`));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 获取链接参数
|
|
18
|
+
*
|
|
19
|
+
* @see https://jira.alauda.cn/browse/ACP-32703
|
|
20
|
+
*/
|
|
21
|
+
export function resolveLinkOptions(field) {
|
|
22
|
+
const linkCapability = field.capabilities.find(capability => capability.startsWith(SpecCapability.text));
|
|
23
|
+
const target = linkCapability?.split(`${SpecCapability.text}:link:`)?.[1];
|
|
24
|
+
return { target: target || '_blank' };
|
|
25
|
+
}
|
|
26
|
+
export class LinkComponent extends createNestedFormControl({
|
|
27
|
+
autoEmitChange: true,
|
|
28
|
+
}) {
|
|
29
|
+
get options() {
|
|
30
|
+
return resolveLinkOptions(this.field);
|
|
31
|
+
}
|
|
32
|
+
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵLinkComponent_BaseFactory; return function LinkComponent_Factory(t) { return (ɵLinkComponent_BaseFactory || (ɵLinkComponent_BaseFactory = i0.ɵɵgetInheritedFactory(LinkComponent)))(t || LinkComponent); }; })(); }
|
|
33
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LinkComponent, selectors: [["acl-crd-link"]], inputs: { field: "field" }, standalone: true, features: [i0.ɵɵProvidersFeature([
|
|
34
|
+
{
|
|
35
|
+
provide: NG_VALUE_ACCESSOR,
|
|
36
|
+
useExisting: forwardRef(() => LinkComponent),
|
|
37
|
+
multi: true,
|
|
38
|
+
},
|
|
39
|
+
]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 5, vars: 7, consts: [[3, "href", "target"], ["icon", "jump", "margin", "left", 4, "ngIf"], ["icon", "jump", "margin", "left"]], template: function LinkComponent_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementStart(0, "a", 0);
|
|
41
|
+
i0.ɵɵpipe(1, "aclSanitize");
|
|
42
|
+
i0.ɵɵelementStart(2, "span");
|
|
43
|
+
i0.ɵɵtext(3);
|
|
44
|
+
i0.ɵɵelementEnd();
|
|
45
|
+
i0.ɵɵtemplate(4, LinkComponent_aui_icon_4_Template, 1, 0, "aui-icon", 1);
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
i0.ɵɵproperty("href", i0.ɵɵpipeBind2(1, 4, ctx.model, "url"), i0.ɵɵsanitizeUrl)("target", ctx.options.target);
|
|
49
|
+
i0.ɵɵadvance(3);
|
|
50
|
+
i0.ɵɵtextInterpolate(ctx.model);
|
|
51
|
+
i0.ɵɵadvance();
|
|
52
|
+
i0.ɵɵproperty("ngIf", ctx.options.target === "_blank");
|
|
53
|
+
} }, dependencies: [IconModule, i1.IconComponent, SanitizePipe, NgIf], encapsulation: 2, changeDetection: 0 }); }
|
|
54
|
+
}
|
|
55
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LinkComponent, [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{ standalone: true, selector: 'acl-crd-link', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
58
|
+
{
|
|
59
|
+
provide: NG_VALUE_ACCESSOR,
|
|
60
|
+
useExisting: forwardRef(() => LinkComponent),
|
|
61
|
+
multi: true,
|
|
62
|
+
},
|
|
63
|
+
], imports: [IconModule, SanitizePipe, NgIf], template: "<a\n [href]=\"model | aclSanitize: 'url'\"\n [target]=\"options.target\"\n>\n <span>{{ model }}</span\n ><aui-icon\n *ngIf=\"options.target === '_blank'\"\n icon=\"jump\"\n margin=\"left\"\n >\n </aui-icon>\n</a>\n" }]
|
|
64
|
+
}], null, { field: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}] }); })();
|
|
67
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LinkComponent, { className: "LinkComponent", filePath: "lib/field-controls/widgets/link/component.ts", lineNumber: 51 }); })();
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2ZpZWxkLWNvbnRyb2xzL3dpZGdldHMvbGluay9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvd2lkZ2V0cy9saW5rL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztJQ04zRCw4QkFLVTs7QURPYixNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQW1CO0lBQ3hDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDL0IsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBbUI7SUFDcEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDMUQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQzNDLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQWlCLENBQUM7QUFDdkQsQ0FBQztBQWdCRCxNQUFNLE9BQU8sYUFBYyxTQUFRLHVCQUF1QixDQUFTO0lBQ2pFLGNBQWMsRUFBRSxJQUFJO0NBQ3JCLENBQUM7SUFJQSxJQUFJLE9BQU87UUFDVCxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dOQVJVLGFBQWEsU0FBYixhQUFhO29FQUFiLGFBQWEsZ0hBVGI7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQzVDLEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0Y7WUMvQ0gsNEJBR0M7O1lBQ0MsNEJBQU07WUFBQSxZQUFXO1lBQUEsaUJBQ2hCO1lBQUEsd0VBSUE7WUFFSCxpQkFBSTs7WUFURixBQURBLCtFQUFtQyw4QkFDVjtZQUVuQixlQUFXO1lBQVgsK0JBQVc7WUFFZCxjQUFpQztZQUFqQyxzREFBaUM7NEJEMEMxQixVQUFVLG9CQUFFLFlBQVksRUFBRSxJQUFJOztpRkFFN0IsYUFBYTtjQWR6QixTQUFTOzZCQUNJLElBQUksWUFDTixjQUFjLG1CQUVQLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO3dCQUM1QyxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRixXQUNRLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUM7Z0JBTXpDLEtBQUs7a0JBREosS0FBSzs7a0ZBSEssYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25Nb2R1bGUgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IGNyZWF0ZU5lc3RlZEZvcm1Db250cm9sLCBTYW5pdGl6ZVBpcGUgfSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBPcGVyYW5kRmllbGQsIFNwZWNDYXBhYmlsaXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgTGlua09wdGlvbnMge1xuICB0YXJnZXQ/OiBzdHJpbmc7IC8vIGRlZmF1bHQgXCJfYmxhbmtcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaW5rKGZpZWxkOiBPcGVyYW5kRmllbGQpIHtcbiAgY29uc3QgeyBjYXBhYmlsaXRpZXMgfSA9IGZpZWxkO1xuICByZXR1cm4gY2FwYWJpbGl0aWVzLnNvbWUoYyA9PiBjLnN0YXJ0c1dpdGgoYCR7U3BlY0NhcGFiaWxpdHkudGV4dH06bGlua2ApKTtcbn1cblxuLyoqXG4gKiDojrflj5bpk77mjqXlj4LmlbBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vamlyYS5hbGF1ZGEuY24vYnJvd3NlL0FDUC0zMjcwM1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxpbmtPcHRpb25zKGZpZWxkOiBPcGVyYW5kRmllbGQpIHtcbiAgY29uc3QgbGlua0NhcGFiaWxpdHkgPSBmaWVsZC5jYXBhYmlsaXRpZXMuZmluZChjYXBhYmlsaXR5ID0+XG4gICAgY2FwYWJpbGl0eS5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LnRleHQpLFxuICApO1xuICBjb25zdCB0YXJnZXQgPSBsaW5rQ2FwYWJpbGl0eT8uc3BsaXQoYCR7U3BlY0NhcGFiaWxpdHkudGV4dH06bGluazpgKT8uWzFdO1xuXG4gIHJldHVybiB7IHRhcmdldDogdGFyZ2V0IHx8ICdfYmxhbmsnIH0gYXMgTGlua09wdGlvbnM7XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2FjbC1jcmQtbGluaycsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExpbmtDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgaW1wb3J0czogW0ljb25Nb2R1bGUsIFNhbml0aXplUGlwZSwgTmdJZl0sXG59KVxuZXhwb3J0IGNsYXNzIExpbmtDb21wb25lbnQgZXh0ZW5kcyBjcmVhdGVOZXN0ZWRGb3JtQ29udHJvbDxzdHJpbmc+KHtcbiAgYXV0b0VtaXRDaGFuZ2U6IHRydWUsXG59KSB7XG4gIEBJbnB1dCgpXG4gIGZpZWxkOiBPcGVyYW5kRmllbGQ7XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHJlc29sdmVMaW5rT3B0aW9ucyh0aGlzLmZpZWxkKTtcbiAgfVxufVxuIiwiPGFcbiAgW2hyZWZdPVwibW9kZWwgfCBhY2xTYW5pdGl6ZTogJ3VybCdcIlxuICBbdGFyZ2V0XT1cIm9wdGlvbnMudGFyZ2V0XCJcbj5cbiAgPHNwYW4+e3sgbW9kZWwgfX08L3NwYW5cbiAgPjxhdWktaWNvblxuICAgICpuZ0lmPVwib3B0aW9ucy50YXJnZXQgPT09ICdfYmxhbmsnXCJcbiAgICBpY29uPVwianVtcFwiXG4gICAgbWFyZ2luPVwibGVmdFwiXG4gID5cbiAgPC9hdWktaWNvbj5cbjwvYT5cbiJdfQ==
|