tnp-helpers 13.1.1 → 13.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app.d.ts +1 -1
- package/app.js +6 -6
- package/browser/README.md +24 -24
- package/browser/esm2020/lib/base-component.mjs +47 -47
- package/browser/esm2020/lib/base-formly-component.mjs +125 -125
- package/browser/esm2020/lib/condition-wait.mjs +53 -53
- package/browser/esm2020/lib/constants.mjs +6 -6
- package/browser/esm2020/lib/dual-component-ctrl.mjs +120 -120
- package/browser/esm2020/lib/helpers-array-obj.mjs +80 -80
- package/browser/esm2020/lib/helpers-environment.mjs +30 -30
- package/browser/esm2020/lib/helpers-numbers.mjs +5 -5
- package/browser/esm2020/lib/helpers-strings-regexes.mjs +48 -48
- package/browser/esm2020/lib/helpers-strings.mjs +257 -257
- package/browser/esm2020/lib/helpers.mjs +276 -276
- package/browser/esm2020/lib/index.mjs +14 -14
- package/browser/esm2020/lib/long-press.directive.mjs +111 -111
- package/browser/esm2020/lib/project.mjs +413 -413
- package/browser/esm2020/lib/resize-service.mjs +19 -19
- package/browser/esm2020/public-api.mjs +1 -1
- package/browser/esm2020/tnp-helpers.mjs +4 -4
- package/browser/fesm2015/tnp-helpers.mjs +1535 -1535
- package/browser/fesm2020/tnp-helpers.mjs +1527 -1527
- package/browser/lib/base-component.d.ts +17 -17
- package/browser/lib/base-formly-component.d.ts +31 -31
- package/browser/lib/condition-wait.d.ts +8 -8
- package/browser/lib/constants.d.ts +6 -6
- package/browser/lib/dual-component-ctrl.d.ts +25 -25
- package/browser/lib/helpers-array-obj.d.ts +15 -15
- package/browser/lib/helpers-environment.d.ts +5 -5
- package/browser/lib/helpers-numbers.d.ts +3 -3
- package/browser/lib/helpers-strings-regexes.d.ts +28 -28
- package/browser/lib/helpers-strings.d.ts +50 -50
- package/browser/lib/helpers.d.ts +28 -28
- package/browser/lib/index.d.ts +9 -9
- package/browser/lib/long-press.directive.d.ts +25 -25
- package/browser/lib/project.d.ts +91 -91
- package/browser/lib/resize-service.d.ts +9 -9
- package/browser/public-api.d.ts +1 -1
- package/browser/tnp-helpers.d.ts +5 -5
- package/client/README.md +24 -24
- package/client/esm2020/lib/base-component.mjs +47 -47
- package/client/esm2020/lib/base-formly-component.mjs +125 -125
- package/client/esm2020/lib/condition-wait.mjs +53 -53
- package/client/esm2020/lib/constants.mjs +6 -6
- package/client/esm2020/lib/dual-component-ctrl.mjs +120 -120
- package/client/esm2020/lib/helpers-array-obj.mjs +80 -80
- package/client/esm2020/lib/helpers-environment.mjs +30 -30
- package/client/esm2020/lib/helpers-numbers.mjs +5 -5
- package/client/esm2020/lib/helpers-strings-regexes.mjs +48 -48
- package/client/esm2020/lib/helpers-strings.mjs +257 -257
- package/client/esm2020/lib/helpers.mjs +276 -276
- package/client/esm2020/lib/index.mjs +14 -14
- package/client/esm2020/lib/long-press.directive.mjs +111 -111
- package/client/esm2020/lib/project.mjs +413 -413
- package/client/esm2020/lib/resize-service.mjs +19 -19
- package/client/esm2020/public-api.mjs +1 -1
- package/client/esm2020/tnp-helpers.mjs +4 -4
- package/client/fesm2015/tnp-helpers.mjs +1535 -1535
- package/client/fesm2020/tnp-helpers.mjs +1527 -1527
- package/client/lib/base-component.d.ts +17 -17
- package/client/lib/base-formly-component.d.ts +31 -31
- package/client/lib/condition-wait.d.ts +8 -8
- package/client/lib/constants.d.ts +6 -6
- package/client/lib/dual-component-ctrl.d.ts +25 -25
- package/client/lib/helpers-array-obj.d.ts +15 -15
- package/client/lib/helpers-environment.d.ts +5 -5
- package/client/lib/helpers-numbers.d.ts +3 -3
- package/client/lib/helpers-strings-regexes.d.ts +28 -28
- package/client/lib/helpers-strings.d.ts +50 -50
- package/client/lib/helpers.d.ts +28 -28
- package/client/lib/index.d.ts +9 -9
- package/client/lib/long-press.directive.d.ts +25 -25
- package/client/lib/project.d.ts +91 -91
- package/client/lib/resize-service.d.ts +9 -9
- package/client/public-api.d.ts +1 -1
- package/client/tnp-helpers.d.ts +5 -5
- package/index.d.ts +1 -1
- package/index.js +5 -5
- package/lib/angular.helper.d.ts +22 -22
- package/lib/angular.helper.js +50 -50
- package/lib/base-component.d.ts +1 -1
- package/lib/base-component.js +6 -6
- package/lib/base-formly-component.d.ts +1 -1
- package/lib/base-formly-component.js +6 -6
- package/lib/condition-wait.d.ts +8 -8
- package/lib/condition-wait.js +94 -94
- package/lib/constants.d.ts +6 -6
- package/lib/constants.js +10 -10
- package/lib/dual-component-ctrl.d.ts +1 -1
- package/lib/dual-component-ctrl.js +6 -6
- package/lib/git-project.d.ts +44 -44
- package/lib/git-project.js +195 -195
- package/lib/helpers-array-obj.d.ts +15 -15
- package/lib/helpers-array-obj.js +88 -88
- package/lib/helpers-cli-tool.backend.d.ts +45 -45
- package/lib/helpers-cli-tool.backend.js +293 -293
- package/lib/helpers-dependencies.backend.d.ts +11 -11
- package/lib/helpers-dependencies.backend.js +105 -105
- package/lib/helpers-environment.d.ts +5 -5
- package/lib/helpers-environment.js +35 -35
- package/lib/helpers-file-folders.backend.d.ts +84 -84
- package/lib/helpers-file-folders.backend.js +736 -736
- package/lib/helpers-git.backend.d.ts +35 -35
- package/lib/helpers-git.backend.js +541 -545
- package/lib/helpers-git.backend.js.map +1 -1
- package/lib/helpers-json5.backend.d.ts +16 -16
- package/lib/helpers-json5.backend.js +70 -70
- package/lib/helpers-morphi-framework.backend.d.ts +4 -4
- package/lib/helpers-morphi-framework.backend.js +49 -49
- package/lib/helpers-network.backend.d.ts +8 -8
- package/lib/helpers-network.backend.js +48 -48
- package/lib/helpers-npm.backend.d.ts +3 -3
- package/lib/helpers-npm.backend.js +17 -17
- package/lib/helpers-numbers.d.ts +3 -3
- package/lib/helpers-numbers.js +11 -11
- package/lib/helpers-path.backend.d.ts +7 -7
- package/lib/helpers-path.backend.js +36 -36
- package/lib/helpers-process.backend.d.ts +57 -57
- package/lib/helpers-process.backend.js +529 -529
- package/lib/helpers-process.backend.js.map +1 -1
- package/lib/helpers-strings-regexes.d.ts +28 -28
- package/lib/helpers-strings-regexes.js +60 -60
- package/lib/helpers-strings.d.ts +50 -50
- package/lib/helpers-strings.js +265 -265
- package/lib/helpers-system-terminal.backend.d.ts +5 -5
- package/lib/helpers-system-terminal.backend.js +53 -53
- package/lib/helpers.d.ts +67 -67
- package/lib/helpers.js +391 -391
- package/lib/index.d.ts +6 -6
- package/lib/index.js +19 -19
- package/lib/long-press.directive.d.ts +22 -22
- package/lib/long-press.directive.js +141 -141
- package/lib/merge-helpers.backend.d.ts +23 -23
- package/lib/merge-helpers.backend.js +108 -108
- package/lib/project.d.ts +94 -94
- package/lib/project.js +422 -422
- package/lib/resize-service.d.ts +6 -6
- package/lib/resize-service.js +24 -24
- package/lib/ts-code/index.d.ts +1 -1
- package/lib/ts-code/index.js +7 -7
- package/lib/ts-code/ts-code-extractor.d.ts +14 -14
- package/lib/ts-code/ts-code-extractor.js +46 -46
- package/lib/ts-code/ts-code-modifier.backend.d.ts +12 -12
- package/lib/ts-code/ts-code-modifier.backend.js +70 -70
- package/package.json +5 -5
- package/package.json_devDependencies.json +222 -222
- package/package.json_tnp.json5 +41 -41
- package/tmp-environment.json +22 -21
- package/websql/README.md +24 -24
- package/websql/esm2020/lib/base-component.mjs +47 -47
- package/websql/esm2020/lib/base-formly-component.mjs +125 -125
- package/websql/esm2020/lib/condition-wait.mjs +53 -53
- package/websql/esm2020/lib/constants.mjs +6 -6
- package/websql/esm2020/lib/dual-component-ctrl.mjs +120 -120
- package/websql/esm2020/lib/helpers-array-obj.mjs +80 -80
- package/websql/esm2020/lib/helpers-environment.mjs +30 -30
- package/websql/esm2020/lib/helpers-numbers.mjs +5 -5
- package/websql/esm2020/lib/helpers-strings-regexes.mjs +48 -48
- package/websql/esm2020/lib/helpers-strings.mjs +257 -257
- package/websql/esm2020/lib/helpers.mjs +276 -276
- package/websql/esm2020/lib/index.mjs +14 -14
- package/websql/esm2020/lib/long-press.directive.mjs +111 -111
- package/websql/esm2020/lib/project.mjs +413 -413
- package/websql/esm2020/lib/resize-service.mjs +19 -19
- package/websql/esm2020/public-api.mjs +1 -1
- package/websql/esm2020/tnp-helpers.mjs +4 -4
- package/websql/fesm2015/tnp-helpers.mjs +1535 -1535
- package/websql/fesm2020/tnp-helpers.mjs +1527 -1527
- package/websql/lib/base-component.d.ts +17 -17
- package/websql/lib/base-formly-component.d.ts +31 -31
- package/websql/lib/condition-wait.d.ts +8 -8
- package/websql/lib/constants.d.ts +6 -6
- package/websql/lib/dual-component-ctrl.d.ts +25 -25
- package/websql/lib/helpers-array-obj.d.ts +15 -15
- package/websql/lib/helpers-environment.d.ts +5 -5
- package/websql/lib/helpers-numbers.d.ts +3 -3
- package/websql/lib/helpers-strings-regexes.d.ts +28 -28
- package/websql/lib/helpers-strings.d.ts +50 -50
- package/websql/lib/helpers.d.ts +28 -28
- package/websql/lib/index.d.ts +9 -9
- package/websql/lib/long-press.directive.d.ts +25 -25
- package/websql/lib/project.d.ts +91 -91
- package/websql/lib/resize-service.d.ts +9 -9
- package/websql/public-api.d.ts +1 -1
- package/websql/tnp-helpers.d.ts +5 -5
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
//#region @browser
|
|
2
|
-
import { _ } from 'tnp-core/browser';
|
|
3
|
-
import { CLASS } from 'typescript-class-helpers/browser';
|
|
4
|
-
/* */
|
|
5
|
-
/* */
|
|
6
|
-
import { Log } from 'ng2-logger/browser';
|
|
7
|
-
const log = Log.create(`DualComponentController`);
|
|
8
|
-
export class DualComponentController {
|
|
9
|
-
constructor(cmp, isFormlyMode = false) {
|
|
10
|
-
this.cmp = cmp;
|
|
11
|
-
this.isFormlyMode = isFormlyMode;
|
|
12
|
-
}
|
|
13
|
-
getValTemplateOptions(propertyName) {
|
|
14
|
-
if (this.isFormlyMode) {
|
|
15
|
-
const res = this.cmp.field?.templateOptions[propertyName];
|
|
16
|
-
if (res === void 0 && this.cmp[propertyName]) {
|
|
17
|
-
return this.cmp[propertyName];
|
|
18
|
-
}
|
|
19
|
-
return res;
|
|
20
|
-
}
|
|
21
|
-
return this.cmp[propertyName];
|
|
22
|
-
}
|
|
23
|
-
getValContext(propertyName) {
|
|
24
|
-
if (this.isFormlyMode) {
|
|
25
|
-
const res = this.cmp?.field[propertyName];
|
|
26
|
-
if (res === void 0 && this.cmp[propertyName]) {
|
|
27
|
-
return this.cmp[propertyName];
|
|
28
|
-
}
|
|
29
|
-
return res;
|
|
30
|
-
}
|
|
31
|
-
return this.cmp[propertyName];
|
|
32
|
-
}
|
|
33
|
-
get disabled() {
|
|
34
|
-
return this.getValTemplateOptions('disabled');
|
|
35
|
-
}
|
|
36
|
-
get required() {
|
|
37
|
-
return this.getValTemplateOptions('required');
|
|
38
|
-
}
|
|
39
|
-
get type() {
|
|
40
|
-
if (!this.isFormlyMode) {
|
|
41
|
-
return CLASS.getNameFromObject(this.cmp);
|
|
42
|
-
}
|
|
43
|
-
return this.getValContext('type');
|
|
44
|
-
}
|
|
45
|
-
get label() {
|
|
46
|
-
return this.getValTemplateOptions('label');
|
|
47
|
-
}
|
|
48
|
-
get placeholder() {
|
|
49
|
-
return this.getValTemplateOptions('placeholder');
|
|
50
|
-
}
|
|
51
|
-
get defaultValue() {
|
|
52
|
-
return this.getValContext('defaultValue');
|
|
53
|
-
}
|
|
54
|
-
get formControl() {
|
|
55
|
-
return this.getValContext('formControl');
|
|
56
|
-
}
|
|
57
|
-
get key() {
|
|
58
|
-
return this.getValContext('key');
|
|
59
|
-
}
|
|
60
|
-
get path() {
|
|
61
|
-
return this.getValContext('path');
|
|
62
|
-
}
|
|
63
|
-
get model() {
|
|
64
|
-
if (this.isFormlyMode) {
|
|
65
|
-
return this.getValContext('model');
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
return this.__model;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
set model(v) {
|
|
72
|
-
if (this.isFormlyMode) {
|
|
73
|
-
log.w(`[DualComponentController] You can't set model in formly component mode`);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
this.__model = v;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
get mode() {
|
|
80
|
-
if (this.isFormlyMode) {
|
|
81
|
-
return this.getValContext('mode');
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
return this.__mode;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
set mode(v) {
|
|
88
|
-
if (this.isFormlyMode) {
|
|
89
|
-
// this.cmp.field.mode =
|
|
90
|
-
// log.w(`[DualComponentController] You can't set mode in formly component mode`);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.__mode = v;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
get value() {
|
|
97
|
-
if (this.isFormlyMode) {
|
|
98
|
-
return this.cmp.field.formControl.value;
|
|
99
|
-
}
|
|
100
|
-
if (_.isString(this.path)) {
|
|
101
|
-
return _.get(this.cmp.model, this.path);
|
|
102
|
-
}
|
|
103
|
-
return this.cmp.model;
|
|
104
|
-
}
|
|
105
|
-
set value(v) {
|
|
106
|
-
if (this.isFormlyMode) {
|
|
107
|
-
this.cmp.field.formControl.setValue(v);
|
|
108
|
-
// @ts-ignore
|
|
109
|
-
this.cmp.change.next(v);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (_.isString(this.path)) {
|
|
113
|
-
_.set(this.cmp.model, this.path, v);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
this.cmp.model = v;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
//#endregion
|
|
1
|
+
//#region @browser
|
|
2
|
+
import { _ } from 'tnp-core/browser';
|
|
3
|
+
import { CLASS } from 'typescript-class-helpers/browser';
|
|
4
|
+
/* */
|
|
5
|
+
/* */
|
|
6
|
+
import { Log } from 'ng2-logger/browser';
|
|
7
|
+
const log = Log.create(`DualComponentController`);
|
|
8
|
+
export class DualComponentController {
|
|
9
|
+
constructor(cmp, isFormlyMode = false) {
|
|
10
|
+
this.cmp = cmp;
|
|
11
|
+
this.isFormlyMode = isFormlyMode;
|
|
12
|
+
}
|
|
13
|
+
getValTemplateOptions(propertyName) {
|
|
14
|
+
if (this.isFormlyMode) {
|
|
15
|
+
const res = this.cmp.field?.templateOptions[propertyName];
|
|
16
|
+
if (res === void 0 && this.cmp[propertyName]) {
|
|
17
|
+
return this.cmp[propertyName];
|
|
18
|
+
}
|
|
19
|
+
return res;
|
|
20
|
+
}
|
|
21
|
+
return this.cmp[propertyName];
|
|
22
|
+
}
|
|
23
|
+
getValContext(propertyName) {
|
|
24
|
+
if (this.isFormlyMode) {
|
|
25
|
+
const res = this.cmp?.field[propertyName];
|
|
26
|
+
if (res === void 0 && this.cmp[propertyName]) {
|
|
27
|
+
return this.cmp[propertyName];
|
|
28
|
+
}
|
|
29
|
+
return res;
|
|
30
|
+
}
|
|
31
|
+
return this.cmp[propertyName];
|
|
32
|
+
}
|
|
33
|
+
get disabled() {
|
|
34
|
+
return this.getValTemplateOptions('disabled');
|
|
35
|
+
}
|
|
36
|
+
get required() {
|
|
37
|
+
return this.getValTemplateOptions('required');
|
|
38
|
+
}
|
|
39
|
+
get type() {
|
|
40
|
+
if (!this.isFormlyMode) {
|
|
41
|
+
return CLASS.getNameFromObject(this.cmp);
|
|
42
|
+
}
|
|
43
|
+
return this.getValContext('type');
|
|
44
|
+
}
|
|
45
|
+
get label() {
|
|
46
|
+
return this.getValTemplateOptions('label');
|
|
47
|
+
}
|
|
48
|
+
get placeholder() {
|
|
49
|
+
return this.getValTemplateOptions('placeholder');
|
|
50
|
+
}
|
|
51
|
+
get defaultValue() {
|
|
52
|
+
return this.getValContext('defaultValue');
|
|
53
|
+
}
|
|
54
|
+
get formControl() {
|
|
55
|
+
return this.getValContext('formControl');
|
|
56
|
+
}
|
|
57
|
+
get key() {
|
|
58
|
+
return this.getValContext('key');
|
|
59
|
+
}
|
|
60
|
+
get path() {
|
|
61
|
+
return this.getValContext('path');
|
|
62
|
+
}
|
|
63
|
+
get model() {
|
|
64
|
+
if (this.isFormlyMode) {
|
|
65
|
+
return this.getValContext('model');
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return this.__model;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
set model(v) {
|
|
72
|
+
if (this.isFormlyMode) {
|
|
73
|
+
log.w(`[DualComponentController] You can't set model in formly component mode`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this.__model = v;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
get mode() {
|
|
80
|
+
if (this.isFormlyMode) {
|
|
81
|
+
return this.getValContext('mode');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return this.__mode;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
set mode(v) {
|
|
88
|
+
if (this.isFormlyMode) {
|
|
89
|
+
// this.cmp.field.mode =
|
|
90
|
+
// log.w(`[DualComponentController] You can't set mode in formly component mode`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.__mode = v;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
get value() {
|
|
97
|
+
if (this.isFormlyMode) {
|
|
98
|
+
return this.cmp.field.formControl.value;
|
|
99
|
+
}
|
|
100
|
+
if (_.isString(this.path)) {
|
|
101
|
+
return _.get(this.cmp.model, this.path);
|
|
102
|
+
}
|
|
103
|
+
return this.cmp.model;
|
|
104
|
+
}
|
|
105
|
+
set value(v) {
|
|
106
|
+
if (this.isFormlyMode) {
|
|
107
|
+
this.cmp.field.formControl.setValue(v);
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
this.cmp.change.next(v);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (_.isString(this.path)) {
|
|
113
|
+
_.set(this.cmp.model, this.path, v);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.cmp.model = v;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//#endregion
|
|
121
121
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1jb21wb25lbnQtY3RybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9kdWFsLWNvbXBvbmVudC1jdHJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQjtBQUNsQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3pELEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLEdBQUcsRUFBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUVsRCxNQUFNLE9BQWdCLHVCQUF1QjtJQUUzQyxZQUFzQixHQUF3QixFQUFTLGVBQWUsS0FBSztRQUFyRCxRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBRTNFLENBQUM7SUFFUyxxQkFBcUIsQ0FBQyxZQUFvQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ3pELElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzVDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMvQjtZQUNELE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVTLGFBQWEsQ0FBQyxZQUFvQjtRQUMxQyxJQUFJ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QUFFO1lBQ3pCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsYUFBYTtZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztDQUdGO0FBQ0QsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBAYnJvd3NlclxuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgQmFzZUZvcm1seUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1mb3JtbHktY29tcG9uZW50JztcbmltcG9ydCB7IENMQVNTIH0gZnJvbSAndHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL2Jyb3dzZXInO1xuaW1wb3J0IHsgICBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgQWZ0ZXJWaWV3SW5pdCwgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsvKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgICBGb3JtQ29udHJvbCwgICBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3JtcycvKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuY29uc3QgbG9nID0gTG9nLmNyZWF0ZShgRHVhbENvbXBvbmVudENvbnRyb2xsZXJgKTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIER1YWxDb21wb25lbnRDb250cm9sbGVyPFQgPSBhbnk+IHtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY21wOiBCYXNlRm9ybWx5Q29tcG9uZW50LCBwdWJsaWMgaXNGb3JtbHlNb2RlID0gZmFsc2UpIHtcblxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFZhbFRlbXBsYXRlT3B0aW9ucyhwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzRm9ybWx5TW9kZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5jbXAuZmllbGQ/LnRlbXBsYXRlT3B0aW9uc1twcm9wZXJ0eU5hbWVdXG4gICAgICBpZiAocmVzID09PSB2b2lkIDAgJiYgdGhpcy5jbXBbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbXBbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNtcFtwcm9wZXJ0eU5hbWVdXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VmFsQ29udGV4dChwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzRm9ybWx5TW9kZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5jbXA/LmZpZWxkW3Byb3BlcnR5TmFtZV1cbiAgICAgIGlmIChyZXMgPT09IHZvaWQgMCAmJiB0aGlzLmNtcFtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNtcFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY21wW3Byb3BlcnR5TmFtZV1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWxUZW1wbGF0ZU9wdGlvbnMoJ2Rpc2FibGVkJykgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWxUZW1wbGF0ZU9wdGlvbnMoJ3JlcXVpcmVkJykgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIGlmICghdGhpcy5pc0Zvcm1seU1vZGUpIHtcbiAgICAgIHJldHVybiBDTEFTUy5nZXROYW1lRnJvbU9iamVjdCh0aGlzLmNtcClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsQ29udGV4dCgndHlwZScpIGFzIGJvb2xlYW47XG4gIH1cblxuICBnZXQgbGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsVGVtcGxhdGVPcHRpb25zKCdsYWJlbCcpIGFzIHN0cmluZztcbiAgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWxUZW1wbGF0ZU9wdGlvbnMoJ3BsYWNlaG9sZGVyJykgYXMgc3RyaW5nO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWxDb250ZXh0KCdkZWZhdWx0VmFsdWUnKSBhcyBhbnk7XG4gIH1cblxuICBnZXQgZm9ybUNvbnRyb2woKTogYW55IHsvLyBGb3JtQ29udHJvbCB7IC8vIFRPRE8gUVVJQ0tfRklYXG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsQ29udGV4dCgnZm9ybUNvbnRyb2wnKSBhcyBhbnk7XG4gIH1cblxuICBnZXQga2V5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFZhbENvbnRleHQoJ2tleScpIGFzIHN0cmluZztcbiAgfVxuXG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmdldFZhbENvbnRleHQoJ3BhdGgnKSBhcyBzdHJpbmc7XG4gIH1cblxuICBfX21vZGVsOiBhbnk7XG4gIGdldCBtb2RlbCgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzRm9ybWx5TW9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsQ29udGV4dCgnbW9kZWwnKSBhcyBzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9fbW9kZWw7XG4gICAgfVxuICB9XG5cbiAgc2V0IG1vZGVsKHYpIHtcbiAgICBpZiAodGhpcy5pc0Zvcm1seU1vZGUpIHtcbiAgICAgIGxvZy53KGBbRHVhbENvbXBvbmVudENvbnRyb2xsZXJdIFlvdSBjYW4ndCBzZXQgbW9kZWwgaW4gZm9ybWx5IGNvbXBvbmVudCBtb2RlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX19tb2RlbCA9IHY7XG4gICAgfVxuICB9XG5cbiAgX19tb2RlOiBhbnk7XG4gIGdldCBtb2RlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNGb3JtbHlNb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWxDb250ZXh0KCdtb2RlJykgYXMgc3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fX21vZGU7XG4gICAgfVxuICB9XG5cbiAgc2V0IG1vZGUodikge1xuICAgIGlmICh0aGlzLmlzRm9ybWx5TW9kZSkge1xuICAgICAgLy8gdGhpcy5jbXAuZmllbGQubW9kZSA9XG4gICAgICAvLyBsb2cudyhgW0R1YWxDb21wb25lbnRDb250cm9sbGVyXSBZb3UgY2FuJ3Qgc2V0IG1vZGUgaW4gZm9ybWx5IGNvbXBvbmVudCBtb2RlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX19tb2RlID0gdjtcbiAgICB9XG4gIH1cblxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICBpZiAodGhpcy5pc0Zvcm1seU1vZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNtcC5maWVsZC5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcodGhpcy5wYXRoKSkge1xuICAgICAgcmV0dXJuIF8uZ2V0KHRoaXMuY21wLm1vZGVsLCB0aGlzLnBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbXAubW9kZWw7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICh0aGlzLmlzRm9ybWx5TW9kZSkge1xuICAgICAgdGhpcy5jbXAuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUodik7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmNtcC5jaGFuZ2UubmV4dCh2KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcodGhpcy5wYXRoKSkge1xuICAgICAgXy5zZXQodGhpcy5jbXAubW9kZWwsIHRoaXMucGF0aCwgdik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY21wLm1vZGVsID0gdjtcbiAgICB9XG4gIH1cblxuXG59XG4vLyNlbmRyZWdpb25cbiJdfQ==
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import { _ } from 'tnp-core/browser';
|
|
2
|
-
import * as fuzzy from 'fuzzy';
|
|
3
|
-
import { Helpers } from './index';
|
|
4
|
-
export class HelpersArrayObj {
|
|
5
|
-
from(s) {
|
|
6
|
-
if (_.isArray(s)) {
|
|
7
|
-
return s;
|
|
8
|
-
}
|
|
9
|
-
if (_.isString(s)) {
|
|
10
|
-
return s.split(' ');
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
second(arr) {
|
|
14
|
-
if (!Array.isArray(arr) || arr.length < 2) {
|
|
15
|
-
return void 0;
|
|
16
|
-
}
|
|
17
|
-
return arr[1];
|
|
18
|
-
}
|
|
19
|
-
arrayMoveElementBefore(arr, a, b, prop) {
|
|
20
|
-
let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);
|
|
21
|
-
_.pullAt(arr, indexA);
|
|
22
|
-
let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);
|
|
23
|
-
if (indexB === 0) {
|
|
24
|
-
arr.unshift(a);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
arr.splice(indexB - 1, 0, a);
|
|
28
|
-
}
|
|
29
|
-
return arr;
|
|
30
|
-
}
|
|
31
|
-
arrayMoveElementAfterB(arr, a, b, prop) {
|
|
32
|
-
let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);
|
|
33
|
-
_.pullAt(arr, indexA);
|
|
34
|
-
let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);
|
|
35
|
-
if (indexB === arr.length - 1) {
|
|
36
|
-
arr.push(a);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
arr.splice(indexB + 1, 0, a);
|
|
40
|
-
}
|
|
41
|
-
return arr;
|
|
42
|
-
}
|
|
43
|
-
uniqArray(array, uniqueProperty) {
|
|
44
|
-
var seen = {};
|
|
45
|
-
return array
|
|
46
|
-
.filter(f => !!f)
|
|
47
|
-
.filter(function (item) {
|
|
48
|
-
return seen.hasOwnProperty(uniqueProperty ? item[uniqueProperty] : item) ? false
|
|
49
|
-
: (seen[uniqueProperty ? item[uniqueProperty] : item] = true);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
sortKeys(obj) {
|
|
53
|
-
if (_.isArray(obj)) {
|
|
54
|
-
return obj.map(Helpers.arrays.sortKeys);
|
|
55
|
-
}
|
|
56
|
-
if (_.isObject(obj)) {
|
|
57
|
-
return _.fromPairs(_.keys(obj).sort().map(key => [key, Helpers.arrays.sortKeys(obj[key])]));
|
|
58
|
-
}
|
|
59
|
-
return obj;
|
|
60
|
-
}
|
|
61
|
-
;
|
|
62
|
-
/**
|
|
63
|
-
* Fuzzy search
|
|
64
|
-
*/
|
|
65
|
-
fuzzy(query, list, valueFn) {
|
|
66
|
-
const resultsFuzzy = fuzzy.filter(query, list.map(k => valueFn ? valueFn(k) : k));
|
|
67
|
-
const resultsFuzzyKebab = fuzzy.filter(_.kebabCase(query), list.map(k => _.kebabCase((valueFn ? valueFn(k) : k))));
|
|
68
|
-
const matches = resultsFuzzy.map((el) => el.string);
|
|
69
|
-
const matchesKebab = resultsFuzzyKebab.map((el) => el.string);
|
|
70
|
-
const results = (resultsFuzzy.length === 0) ? [] : list.filter(k => {
|
|
71
|
-
return matches.includes((valueFn ? valueFn(k) : k));
|
|
72
|
-
});
|
|
73
|
-
if (matches.length === 0 && matchesKebab.length > 0) {
|
|
74
|
-
const m = list.find(k => _.kebabCase((valueFn ? valueFn(k) : k)) === _.first(matchesKebab));
|
|
75
|
-
results.push(m);
|
|
76
|
-
matches.push((valueFn ? valueFn(m) : m));
|
|
77
|
-
}
|
|
78
|
-
return { matches, results };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
1
|
+
import { _ } from 'tnp-core/browser';
|
|
2
|
+
import * as fuzzy from 'fuzzy';
|
|
3
|
+
import { Helpers } from './index';
|
|
4
|
+
export class HelpersArrayObj {
|
|
5
|
+
from(s) {
|
|
6
|
+
if (_.isArray(s)) {
|
|
7
|
+
return s;
|
|
8
|
+
}
|
|
9
|
+
if (_.isString(s)) {
|
|
10
|
+
return s.split(' ');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
second(arr) {
|
|
14
|
+
if (!Array.isArray(arr) || arr.length < 2) {
|
|
15
|
+
return void 0;
|
|
16
|
+
}
|
|
17
|
+
return arr[1];
|
|
18
|
+
}
|
|
19
|
+
arrayMoveElementBefore(arr, a, b, prop) {
|
|
20
|
+
let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);
|
|
21
|
+
_.pullAt(arr, indexA);
|
|
22
|
+
let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);
|
|
23
|
+
if (indexB === 0) {
|
|
24
|
+
arr.unshift(a);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
arr.splice(indexB - 1, 0, a);
|
|
28
|
+
}
|
|
29
|
+
return arr;
|
|
30
|
+
}
|
|
31
|
+
arrayMoveElementAfterB(arr, a, b, prop) {
|
|
32
|
+
let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);
|
|
33
|
+
_.pullAt(arr, indexA);
|
|
34
|
+
let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);
|
|
35
|
+
if (indexB === arr.length - 1) {
|
|
36
|
+
arr.push(a);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
arr.splice(indexB + 1, 0, a);
|
|
40
|
+
}
|
|
41
|
+
return arr;
|
|
42
|
+
}
|
|
43
|
+
uniqArray(array, uniqueProperty) {
|
|
44
|
+
var seen = {};
|
|
45
|
+
return array
|
|
46
|
+
.filter(f => !!f)
|
|
47
|
+
.filter(function (item) {
|
|
48
|
+
return seen.hasOwnProperty(uniqueProperty ? item[uniqueProperty] : item) ? false
|
|
49
|
+
: (seen[uniqueProperty ? item[uniqueProperty] : item] = true);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
sortKeys(obj) {
|
|
53
|
+
if (_.isArray(obj)) {
|
|
54
|
+
return obj.map(Helpers.arrays.sortKeys);
|
|
55
|
+
}
|
|
56
|
+
if (_.isObject(obj)) {
|
|
57
|
+
return _.fromPairs(_.keys(obj).sort().map(key => [key, Helpers.arrays.sortKeys(obj[key])]));
|
|
58
|
+
}
|
|
59
|
+
return obj;
|
|
60
|
+
}
|
|
61
|
+
;
|
|
62
|
+
/**
|
|
63
|
+
* Fuzzy search
|
|
64
|
+
*/
|
|
65
|
+
fuzzy(query, list, valueFn) {
|
|
66
|
+
const resultsFuzzy = fuzzy.filter(query, list.map(k => valueFn ? valueFn(k) : k));
|
|
67
|
+
const resultsFuzzyKebab = fuzzy.filter(_.kebabCase(query), list.map(k => _.kebabCase((valueFn ? valueFn(k) : k))));
|
|
68
|
+
const matches = resultsFuzzy.map((el) => el.string);
|
|
69
|
+
const matchesKebab = resultsFuzzyKebab.map((el) => el.string);
|
|
70
|
+
const results = (resultsFuzzy.length === 0) ? [] : list.filter(k => {
|
|
71
|
+
return matches.includes((valueFn ? valueFn(k) : k));
|
|
72
|
+
});
|
|
73
|
+
if (matches.length === 0 && matchesKebab.length > 0) {
|
|
74
|
+
const m = list.find(k => _.kebabCase((valueFn ? valueFn(k) : k)) === _.first(matchesKebab));
|
|
75
|
+
results.push(m);
|
|
76
|
+
matches.push((valueFn ? valueFn(m) : m));
|
|
77
|
+
}
|
|
78
|
+
return { matches, results };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
81
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1hcnJheS1vYmouanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItYnVuZGxlL3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvaGVscGVycy1hcnJheS1vYmoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFbEMsTUFBTSxPQUFPLGVBQWU7SUFFMUIsSUFBSSxDQUFDLENBQW9CO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUNwQjtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRztRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sS0FBSyxDQUFDLENBQUM7U0FDZjtRQUNELE9BQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxzQkFBc0IsQ0FBVSxHQUFVLEVBQUUsQ0FBTSxFQUFFLENBQU0sRUFBRSxJQUFjO1FBQ3hFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFD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Q0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakUsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ25HLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgKiBhcyBmdXp6eSBmcm9tICdmdXp6eSc7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJzQXJyYXlPYmoge1xuXG4gIGZyb20oczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKF8uaXNBcnJheShzKSkge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChfLmlzU3RyaW5nKHMpKSB7XG4gICAgICByZXR1cm4gcy5zcGxpdCgnICcpXG4gICAgfVxuICB9XG5cbiAgc2Vjb25kKGFycikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpIHx8IGFyci5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gIGFyclsxXTtcbiAgfVxuXG4gIGFycmF5TW92ZUVsZW1lbnRCZWZvcmU8VCA9IGFueT4oYXJyOiBhbnlbXSwgYTogYW55LCBiOiBhbnksIHByb3A/OiBrZXlvZiBUKSB7XG4gICAgbGV0IGluZGV4QSA9IHByb3AgPyBhcnIuZmluZEluZGV4KGVsZW0gPT4gZWxlbVtwcm9wXSA9PT0gYVtwcm9wXSkgOiBhcnIuaW5kZXhPZihhKTtcbiAgICBfLnB1bGxBdChhcnIsIGluZGV4QSk7XG4gICAgbGV0IGluZGV4QiA9IHByb3AgPyBhcnIuZmluZEluZGV4KGVsZW0gPT4gZWxlbVtwcm9wXSA9PT0gYltwcm9wXSkgOiBhcnIuaW5kZXhPZihiKTtcbiAgICBpZiAoaW5kZXhCID09PSAwKSB7XG4gICAgICBhcnIudW5zaGlmdChhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyLnNwbGljZShpbmRleEIgLSAxLCAwLCBhKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBhcnJheU1vdmVFbGVtZW50QWZ0ZXJCPFQgPSBhbnk+KGFycjogYW55W10sIGE6IGFueSwgYjogYW55LCBwcm9wPzoga2V5b2YgVCkge1xuICAgIGxldCBpbmRleEEgPSBwcm9wID8gYXJyLmZpbmRJbmRleChlbGVtID0+IGVsZW1bcHJvcF0gPT09IGFbcHJvcF0pIDogYXJyLmluZGV4T2YoYSk7XG4gICAgXy5wdWxsQXQoYXJyLCBpbmRleEEpO1xuICAgIGxldCBpbmRleEIgPSBwcm9wID8gYXJyLmZpbmRJbmRleChlbGVtID0+IGVsZW1bcHJvcF0gPT09IGJbcHJvcF0pIDogYXJyLmluZGV4T2YoYik7XG4gICAgaWYgKGluZGV4QiA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgIGFyci5wdXNoKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4QiArIDEsIDAsIGEpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgdW5pcUFycmF5PFQgPSBhbnk+KGFycmF5OiBhbnlbXSwgdW5pcXVlUHJvcGVydHk/OiAoa2V5b2YgVCkpIHtcbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcihmID0+ICEhZilcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHNlZW4uaGFzT3duUHJvcGVydHkodW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW0pID8gZmFsc2VcbiAgICAgICAgICA6IChzZWVuW3VuaXF1ZVByb3BlcnR5ID8gaXRlbVt1bmlxdWVQcm9wZXJ0eV0gOiBpdGVtXSA9IHRydWUpO1xuICAgICAgfSkgYXMgVFtdO1xuICB9XG5cbiAgc29ydEtleXMob2JqKSB7XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSB7XG4gICAgICByZXR1cm4gb2JqLm1hcChIZWxwZXJzLmFycmF5cy5zb3J0S2V5cyk7XG4gICAgfVxuICAgIGlmIChfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBfLmZyb21QYWlycyhfLmtleXMob2JqKS5zb3J0KCkubWFwKGtleSA9PiBba2V5LCBIZWxwZXJzLmFycmF5cy5zb3J0S2V5cyhvYmpba2V5XSldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZ1enp5IHNlYXJjaFxuICAgKi9cbiAgZnV6enk8VCA9IGFueT4ocXVlcnk6IHN0cmluZywgbGlzdDogVFtdLCB2YWx1ZUZuPzogKG1vZGVsRnJvbUxpc3Q6IFQpID0+IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdHNGdXp6eSA9IGZ1enp5LmZpbHRlcihcbiAgICAgIHF1ZXJ5LFxuICAgICAgbGlzdC5tYXAoayA9PiB2YWx1ZUZuID8gdmFsdWVGbihrKSA6IGspLFxuICAgIClcbiAgICBjb25zdCByZXN1bHRzRnV6enlLZWJhYiA9IGZ1enp5LmZpbHRlcihcbiAgICAgIF8ua2ViYWJDYXNlKHF1ZXJ5KSxcbiAgICAgIGxpc3QubWFwKGsgPT4gXy5rZWJhYkNhc2UoKHZhbHVlRm4gPyB2YWx1ZUZuKGspIDogaykgYXMgYW55KSksXG4gICAgKVxuICAgIGNvbnN0IG1hdGNoZXMgPSByZXN1bHRzRnV6enkubWFwKChlbCkgPT4gZWwuc3RyaW5nKTtcbiAgICBjb25zdCBtYXRjaGVzS2ViYWIgPSByZXN1bHRzRnV6enlLZWJhYi5tYXAoKGVsKSA9PiBlbC5zdHJpbmcpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IChyZXN1bHRzRnV6enkubGVuZ3RoID09PSAwKSA/IFtdIDogbGlzdC5maWx0ZXIoayA9PiB7XG4gICAgICByZXR1cm4gbWF0Y2hlcy5pbmNsdWRlcygodmFsdWVGbiA/IHZhbHVlRm4oaykgOiBrKSBhcyBhbnkpO1xuICAgIH0pXG5cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDAgJiYgbWF0Y2hlc0tlYmFiLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG0gPSBsaXN0LmZpbmQoayA9PiBfLmtlYmFiQ2FzZSgodmFsdWVGbiA/IHZhbHVlRm4oaykgOiBrKSBhcyBhbnkpID09PSBfLmZpcnN0KG1hdGNoZXNLZWJhYikpO1xuICAgICAgcmVzdWx0cy5wdXNoKG0pO1xuICAgICAgbWF0Y2hlcy5wdXNoKCh2YWx1ZUZuID8gdmFsdWVGbihtKSA6IG0pIGFzIGFueSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbWF0Y2hlcywgcmVzdWx0cyB9O1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { _, /* */ /* */ } from 'tnp-core/browser'; /* */
|
|
2
|
-
/* */
|
|
3
|
-
/* */
|
|
4
|
-
/* */
|
|
5
|
-
/* */
|
|
6
|
-
export class HelpersEnvironment {
|
|
7
|
-
environmentName(filename, local_env_name) {
|
|
8
|
-
/* */
|
|
9
|
-
/* */
|
|
10
|
-
/* */
|
|
11
|
-
/* */
|
|
12
|
-
/* */
|
|
13
|
-
/* */
|
|
14
|
-
}
|
|
15
|
-
isValidGitRepuUrl(url) {
|
|
16
|
-
const regex = /^([A-Za-z0-9]+@|http(|s)\:\/\/)([A-Za-z0-9.]+(:\d+)?)(?::|\/)([\d\/\w.-]+?)(\.git)?$/;
|
|
17
|
-
const res = regex.test(url);
|
|
18
|
-
return res;
|
|
19
|
-
}
|
|
20
|
-
isValidIp(ip) {
|
|
21
|
-
if (!_.isString(ip)) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
ip = ip.trim();
|
|
25
|
-
if (ip === 'localhost') {
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ip);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
1
|
+
import { _, /* */ /* */ } from 'tnp-core/browser'; /* */
|
|
2
|
+
/* */
|
|
3
|
+
/* */
|
|
4
|
+
/* */
|
|
5
|
+
/* */
|
|
6
|
+
export class HelpersEnvironment {
|
|
7
|
+
environmentName(filename, local_env_name) {
|
|
8
|
+
/* */
|
|
9
|
+
/* */
|
|
10
|
+
/* */
|
|
11
|
+
/* */
|
|
12
|
+
/* */
|
|
13
|
+
/* */
|
|
14
|
+
}
|
|
15
|
+
isValidGitRepuUrl(url) {
|
|
16
|
+
const regex = /^([A-Za-z0-9]+@|http(|s)\:\/\/)([A-Za-z0-9.]+(:\d+)?)(?::|\/)([\d\/\w.-]+?)(\.git)?$/;
|
|
17
|
+
const res = regex.test(url);
|
|
18
|
+
return res;
|
|
19
|
+
}
|
|
20
|
+
isValidIp(ip) {
|
|
21
|
+
if (!_.isString(ip)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
ip = ip.trim();
|
|
25
|
+
if (ip === 'localhost') {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ip);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
31
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9oZWxwZXJzLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBSyxNQUFNLGtCQUFrQixDQUFDLENBQUEsS0FBSztBQUM1RCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBR0wsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixlQUFlLENBQUMsUUFBUSxFQUFFLGNBQWM7UUFDMUMsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0lBRUgsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsTUFBTSxLQUFLLEdBQUcsc0ZBQXNGLENBQUM7UUFDckcsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBVTtRQUNsQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLElBQUksRUFBRSxLQUFLLFdBQVcsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxrS0FBa0ssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDcEwsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgICBfLCAvKiAqLyAvKiAqLyAgICB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJzRW52aXJvbm1lbnQge1xuXG4gIGVudmlyb25tZW50TmFtZShmaWxlbmFtZSwgbG9jYWxfZW52X25hbWUpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuICBpc1ZhbGlkR2l0UmVwdVVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHJlZ2V4ID0gL14oW0EtWmEtejAtOV0rQHxodHRwKHxzKVxcOlxcL1xcLykoW0EtWmEtejAtOS5dKyg6XFxkKyk/KSg/Ojp8XFwvKShbXFxkXFwvXFx3Li1dKz8pKFxcLmdpdCk/JC87XG4gICAgY29uc3QgcmVzID0gcmVnZXgudGVzdCh1cmwpO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBpc1ZhbGlkSXAoaXA6IHN0cmluZykge1xuICAgIGlmICghXy5pc1N0cmluZyhpcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaXAgPSBpcC50cmltKCk7XG4gICAgaWYgKGlwID09PSAnbG9jYWxob3N0Jykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvXigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pJC8udGVzdChpcClcbiAgfVxuXG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export class HelpersNumber {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.randomInteger = (max, min) => Math.round(Math.random() * (max - min)) + min;
|
|
4
|
-
}
|
|
5
|
-
}
|
|
1
|
+
export class HelpersNumber {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.randomInteger = (max, min) => Math.round(Math.random() * (max - min)) + min;
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
6
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1udW1iZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMtbnVtYmVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUNFLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUc5RSxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSGVscGVyc051bWJlciB7XG4gIHJhbmRvbUludGVnZXIgPSAobWF4LCBtaW4pID0+IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcblxuXG59XG4iXX0=
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { _ } from 'tnp-core/browser';
|
|
2
|
-
export class HelpersStringsRegexes {
|
|
3
|
-
escapeStringForRegEx(s) {
|
|
4
|
-
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
5
|
-
}
|
|
6
|
-
matchExactOnce(s, regex) {
|
|
7
|
-
if (!_.isString(s) || !_.isRegExp(regex)) {
|
|
8
|
-
return void 0;
|
|
9
|
-
}
|
|
10
|
-
const result = s.match(regex);
|
|
11
|
-
if (_.isNil(result)) {
|
|
12
|
-
return void 0;
|
|
13
|
-
}
|
|
14
|
-
return result.length >= 1 ? _.first(result) : void 0;
|
|
15
|
-
}
|
|
16
|
-
get regex() {
|
|
17
|
-
return {
|
|
18
|
-
/**
|
|
19
|
-
* mathes
|
|
20
|
-
* xxx.xxx.xxx.xxx
|
|
21
|
-
* xxx.xxx.xxx.xxx:port
|
|
22
|
-
* http://xxx.xxx.xxx.xxx:port
|
|
23
|
-
* http://xxx.xxx.xxx.xxx
|
|
24
|
-
* https://xxx.xxx.xxx.xxx:port
|
|
25
|
-
* https://xxx.xxx.xxx.xxx *
|
|
26
|
-
*/
|
|
27
|
-
get forStringWithIpHost() {
|
|
28
|
-
const regex = /(http(s)?\:\/\/)?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\:[0-9]+)?/;
|
|
29
|
-
return regex;
|
|
30
|
-
},
|
|
31
|
-
/**
|
|
32
|
-
* mathes
|
|
33
|
-
* http://domain.com:port
|
|
34
|
-
* http://domain.com
|
|
35
|
-
* http://domain:port
|
|
36
|
-
* http://domain
|
|
37
|
-
* https://domain.com:port
|
|
38
|
-
* https://domain.com
|
|
39
|
-
* https://domain:port
|
|
40
|
-
* https://domain
|
|
41
|
-
*/
|
|
42
|
-
get forStringWithDomainHost() {
|
|
43
|
-
const regex = /(((http(s)?\:\/\/)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+(\:[0-9]+)?)|((http(s)?\:\/\/)[a-zA-Z0-9-]{1,61}))/;
|
|
44
|
-
return regex;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { _ } from 'tnp-core/browser';
|
|
2
|
+
export class HelpersStringsRegexes {
|
|
3
|
+
escapeStringForRegEx(s) {
|
|
4
|
+
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
5
|
+
}
|
|
6
|
+
matchExactOnce(s, regex) {
|
|
7
|
+
if (!_.isString(s) || !_.isRegExp(regex)) {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
const result = s.match(regex);
|
|
11
|
+
if (_.isNil(result)) {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
return result.length >= 1 ? _.first(result) : void 0;
|
|
15
|
+
}
|
|
16
|
+
get regex() {
|
|
17
|
+
return {
|
|
18
|
+
/**
|
|
19
|
+
* mathes
|
|
20
|
+
* xxx.xxx.xxx.xxx
|
|
21
|
+
* xxx.xxx.xxx.xxx:port
|
|
22
|
+
* http://xxx.xxx.xxx.xxx:port
|
|
23
|
+
* http://xxx.xxx.xxx.xxx
|
|
24
|
+
* https://xxx.xxx.xxx.xxx:port
|
|
25
|
+
* https://xxx.xxx.xxx.xxx *
|
|
26
|
+
*/
|
|
27
|
+
get forStringWithIpHost() {
|
|
28
|
+
const regex = /(http(s)?\:\/\/)?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\:[0-9]+)?/;
|
|
29
|
+
return regex;
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* mathes
|
|
33
|
+
* http://domain.com:port
|
|
34
|
+
* http://domain.com
|
|
35
|
+
* http://domain:port
|
|
36
|
+
* http://domain
|
|
37
|
+
* https://domain.com:port
|
|
38
|
+
* https://domain.com
|
|
39
|
+
* https://domain:port
|
|
40
|
+
* https://domain
|
|
41
|
+
*/
|
|
42
|
+
get forStringWithDomainHost() {
|
|
43
|
+
const regex = /(((http(s)?\:\/\/)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+(\:[0-9]+)?)|((http(s)?\:\/\/)[a-zA-Z0-9-]{1,61}))/;
|
|
44
|
+
return regex;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
49
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLXJlZ2V4ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItYnVuZGxlL3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvaGVscGVycy1zdHJpbmdzLXJlZ2V4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE1BQU0sT0FBTyxxQkFBcUI7SUFJaEMsb0JBQW9CLENBQUMsQ0FBUztRQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGNBQWMsQ0FBQyxDQUFTLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxLQUFLLENBQUMsQ0FBQztTQUNmO1FBQ0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUMsQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU87WUFDTDs7Ozs7Ozs7YUFRQztZQUNELElBQUksbUJBQW1CO2dCQUNyQixNQUFNLEtBQUssR0FBRyw0TEFBNEwsQ0FBQztnQkFDM00sT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0Q7Ozs7Ozs7Ozs7WUFVQTtZQUNBLElBQUksdUJBQXVCO2dCQUN6QixNQUFNLEtBQUssR0FBRyxrSUFBa0ksQ0FBQztnQkFDakosT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1NBQ0YsQ0FBQTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmV4cG9ydCBjbGFzcyBIZWxwZXJzU3RyaW5nc1JlZ2V4ZXMge1xuXG5cblxuICBlc2NhcGVTdHJpbmdGb3JSZWdFeChzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIG1hdGNoRXhhY3RPbmNlKHM6IHN0cmluZywgcmVnZXg6IFJlZ0V4cCk6IHN0cmluZyB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHMpIHx8ICFfLmlzUmVnRXhwKHJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gcy5tYXRjaChyZWdleCk7XG4gICAgaWYgKF8uaXNOaWwocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPj0gMSA/IF8uZmlyc3QocmVzdWx0KSA6IHZvaWQgMDtcbiAgfVxuXG4gIGdldCByZWdleCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICogbWF0aGVzXG4gICAgICogeHh4Lnh4eC54eHgueHh4XG4gICAgICogeHh4Lnh4eC54eHgueHh4OnBvcnRcbiAgICAgKiBodHRwOi8veHh4Lnh4eC54eHgueHh4OnBvcnRcbiAgICAgKiBodHRwOi8veHh4Lnh4eC54eHgueHh4XG4gICAgICogaHR0cHM6Ly94eHgueHh4Lnh4eC54eHg6cG9ydFxuICAgICAqIGh0dHBzOi8veHh4Lnh4eC54eHgueHh4ICAgKlxuICAgICAqL1xuICAgICAgZ2V0IGZvclN0cmluZ1dpdGhJcEhvc3QoKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhodHRwKHMpP1xcOlxcL1xcLyk/KDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykoXFw6WzAtOV0rKT8vO1xuICAgICAgICByZXR1cm4gcmVnZXg7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgKiBtYXRoZXNcbiAgICAqIGh0dHA6Ly9kb21haW4uY29tOnBvcnRcbiAgICAqIGh0dHA6Ly9kb21haW4uY29tXG4gICAgKiBodHRwOi8vZG9tYWluOnBvcnRcbiAgICAqIGh0dHA6Ly9kb21haW5cbiAgICAqIGh0dHBzOi8vZG9tYWluLmNvbTpwb3J0XG4gICAgKiBodHRwczovL2RvbWFpbi5jb21cbiAgICAqIGh0dHBzOi8vZG9tYWluOnBvcnRcbiAgICAqIGh0dHBzOi8vZG9tYWluXG4gICAgKi9cbiAgICAgIGdldCBmb3JTdHJpbmdXaXRoRG9tYWluSG9zdCgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKCgoaHR0cChzKT9cXDpcXC9cXC8pP1thLXpBLVowLTldW2EtekEtWjAtOS1dezEsNjF9W2EtekEtWjAtOV0oPzpcXC5bYS16QS1aXXsyLH0pKyhcXDpbMC05XSspPyl8KChodHRwKHMpP1xcOlxcL1xcLylbYS16QS1aMC05LV17MSw2MX0pKS87XG4gICAgICAgIHJldHVybiByZWdleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|