@hmcts/ccd-case-ui-toolkit 7.2.55-markdown-add-validation → 7.2.56
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/lib/shared/services/form/form-validators.service.mjs +3 -75
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +2 -74
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/services/form/form-validators.service.d.ts +0 -5
- package/lib/shared/services/form/form-validators.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -52,15 +52,10 @@ export class FormValidatorsService {
|
|
|
52
52
|
return validator;
|
|
53
53
|
}
|
|
54
54
|
static markDownPatternValidator() {
|
|
55
|
-
|
|
56
|
-
const inlineMarkdownPattern = /(?:!?\[[^\]]{0,500}\]\([^)]{0,500}\)|<(?:img\b[^>]{0,500}>|a\b[^>]{0,500}>[\s\S]*?<\/a>))/i;
|
|
57
|
-
// Matches: [text][id], ![alt][id], and the collapsed form [text][]
|
|
58
|
-
const referenceBoxPattern = /(!)?\[((?:[^[\]\\]|\\.){0,500})\]\s*\[([^\]]{0,100})\]/;
|
|
59
|
-
// Matches: autolinks such as <http://example.com>
|
|
60
|
-
const autolinkPattern = /<(?:[A-Za-z][A-Za-z0-9+.-]*:[^ <>\n]*|[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+)>/;
|
|
55
|
+
const pattern = /(\[[^\]]{0,500}\]\([^)]{0,500}\)|!\[[^\]]{0,500}\]\([^)]{0,500}\)|<img[^>]{0,500}>|<a[^>]{0,500}>.*?<\/a>)/;
|
|
61
56
|
return (control) => {
|
|
62
57
|
const value = control?.value?.toString().trim();
|
|
63
|
-
return (value &&
|
|
58
|
+
return (value && pattern.test(value)) ? { markDownPattern: {} } : null;
|
|
64
59
|
};
|
|
65
60
|
}
|
|
66
61
|
// TODO: Strip this out as it's only here for the moment because
|
|
@@ -78,77 +73,10 @@ export class FormValidatorsService {
|
|
|
78
73
|
}
|
|
79
74
|
return control;
|
|
80
75
|
}
|
|
81
|
-
// Check for multi-bracket markdown links and validate destination URL
|
|
82
|
-
static hasMultiBracket(value) {
|
|
83
|
-
// Sonar-friendly detector: opening-run + text + first closing ']'
|
|
84
|
-
const openingTextClosePattern = /\[{1,10}[^[\]\n]{1,60}\]/;
|
|
85
|
-
// Can add an additional RegEx for additional URL validation rules if needed here
|
|
86
|
-
let scanIndex = 0;
|
|
87
|
-
const totalLength = value.length;
|
|
88
|
-
while (scanIndex < totalLength) {
|
|
89
|
-
const seg = this.findOpeningTextClose(value, scanIndex, openingTextClosePattern);
|
|
90
|
-
if (!seg) {
|
|
91
|
-
return false; // no candidate -> no match
|
|
92
|
-
}
|
|
93
|
-
const runs = this.extendClosingRunAndRequireParen(value, seg.absStart, seg.afterFirstClose);
|
|
94
|
-
if (runs && runs.openingRunCount === runs.closingRunCount) {
|
|
95
|
-
// If there were additional validation rules, they would be applied here
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
// Advance to avoid stalling on overlaps
|
|
99
|
-
scanIndex = seg.absStart + 1;
|
|
100
|
-
}
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
// Find opening '[' run, text, and first closing ']'
|
|
104
|
-
static findOpeningTextClose(source, fromIndex, pattern) {
|
|
105
|
-
const slice = source.slice(fromIndex);
|
|
106
|
-
const match = pattern.exec(slice);
|
|
107
|
-
if (!match) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
const absStart = fromIndex + match.index;
|
|
111
|
-
const afterFirstClose = absStart + match[0].length; // index just after the first ']'
|
|
112
|
-
return { absStart, afterFirstClose };
|
|
113
|
-
}
|
|
114
|
-
// Count opening '[' run, extend the ']' run, and require '(' right after the full ']' run
|
|
115
|
-
static extendClosingRunAndRequireParen(source, absStart, afterFirstClose) {
|
|
116
|
-
const n = source.length;
|
|
117
|
-
// Count opening '[' run (e.g., '[[[')
|
|
118
|
-
let openingRunCount = 0;
|
|
119
|
-
for (let i = absStart; i < n && source[i] === '['; i++) {
|
|
120
|
-
openingRunCount++;
|
|
121
|
-
}
|
|
122
|
-
// Extend closing ']' run forward from the first one
|
|
123
|
-
let closingRunCount = 1;
|
|
124
|
-
let afterClosingRun = afterFirstClose;
|
|
125
|
-
while (afterClosingRun < n && source[afterClosingRun] === ']') {
|
|
126
|
-
closingRunCount++;
|
|
127
|
-
afterClosingRun++;
|
|
128
|
-
}
|
|
129
|
-
return { openingRunCount, closingRunCount, afterOpenParen: afterClosingRun + 1 };
|
|
130
|
-
}
|
|
131
|
-
static isValidReferenceUrlTitleTail(tail) {
|
|
132
|
-
const possibleTitle = tail.trim();
|
|
133
|
-
// Accept exactly one of: "title", 'title', (title) — bounded and single-line.
|
|
134
|
-
if (!possibleTitle || /^"[^"\r\n]{0,300}"$/.test(possibleTitle) || /^'[^'\r\n]{0,300}'$/.test(possibleTitle) || /^\([^)\r\n]{0,300}\)$/.test(possibleTitle)) {
|
|
135
|
-
return true;
|
|
136
|
-
}
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
static matchesReferenceUrlDef(line) {
|
|
140
|
-
// Single-line, pragmatic CommonMark-style reference definition e.g. [text]: http://example.com
|
|
141
|
-
const baseReferenceUrlPattern = /^[ \t]{0,3}\[([^\]]{1,100})\]:[ \t]*<?([^\s>]{1,2048})>?[ \t]*([^ \t\r\n].*)?$/m;
|
|
142
|
-
const mainRegEx = baseReferenceUrlPattern.exec(line);
|
|
143
|
-
if (!mainRegEx)
|
|
144
|
-
return false;
|
|
145
|
-
const tail = mainRegEx[3] ?? "";
|
|
146
|
-
return this.isValidReferenceUrlTitleTail(tail);
|
|
147
|
-
}
|
|
148
76
|
static ɵfac = function FormValidatorsService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FormValidatorsService)(); };
|
|
149
77
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FormValidatorsService, factory: FormValidatorsService.ɵfac });
|
|
150
78
|
}
|
|
151
79
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormValidatorsService, [{
|
|
152
80
|
type: Injectable
|
|
153
81
|
}], null, null); })();
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Zvcm0vZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixNQUFNLENBQVUsc0JBQXNCLEdBQW9CO1FBQ2hFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGNBQWM7S0FDNUMsQ0FBQztJQUNNLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7SUFDNUMsTUFBTSxDQUFVLHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUV0RCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQW9CLEVBQUUsT0FBd0I7UUFDeEUsSUFDRSxTQUFTLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxTQUFTO1lBQ2pELHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN0RixDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JB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K0ZBQStGO1FBQy9GLE1BQU0sdUJBQXVCLEdBQUcsaUZBQWlGLENBQUM7UUFFbEgsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDOytHQWhMVSxxQkFBcUI7Z0VBQXJCLHFCQUFxQixXQUFyQixxQkFBcUI7O2lGQUFyQixxQkFBcUI7Y0FEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbW1vbnMvY29uc3RhbnRzJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpZWxkLXR5cGUtZW51bS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdG9yc1NlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDVVNUT01fVkFMSURBVEVEX1RZUEVTOiBGaWVsZFR5cGVFbnVtW10gPSBbXG4gICAgJ0RhdGUnLCAnTW9uZXlHQlAnLCAnTGFiZWwnLCAnSnVkaWNpYWxVc2VyJ1xuICBdO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0lOUFVUX1RFWFQgPSAndGV4dCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSU5QVVRfVEVYVEFSRUEgPSAndGV4dEFyZWFzJztcblxuICBwdWJsaWMgc3RhdGljIGFkZFZhbGlkYXRvcnMoY2FzZUZpZWxkOiBDYXNlRmllbGQsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgaWYgKFxuICAgICAgY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dCA9PT0gQ29uc3RhbnRzLk1BTkRBVE9SWSAmJlxuICAgICAgRm9ybVZhbGlkYXRvcnNTZXJ2aWNlLkNVU1RPTV9WQUxJREFURURfVFlQRVMuaW5kZXhPZihjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ1RleHQnKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLm1hcmtEb3duUGF0dGVyblZhbGlkYXRvcigpKTtcbiAgICAgICAgaWYgKGNhc2VGaWVsZC5maWVsZF90eXBlLnJlZ3VsYXJfZXhwcmVzc2lvbikge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY2FzZUZpZWxkLmZpZWxkX3R5cGUucmVndWxhcl9leHByZXNzaW9uKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1wdHlWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhc2VGaWVsZC5maWVsZF90eXBlLm1pbiAmJiAodHlwZW9mIGNhc2VGaWVsZC5maWVsZF90eXBlLm1pbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKGNhc2VGaWVsZC5maWVsZF90eXBlLm1pbikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZS5tYXggJiYgKHR5cGVvZiBjYXNlRmllbGQuZmllbGRfdHlwZS5tYXggPT09ICdudW1iZXInKSkge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChjYXNlRmllbGQuZmllbGRfdHlwZS5tYXgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ1RleHRBcmVhJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5lbXB0eVZhbGlkYXRvcigpKTtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWFya0Rvd25QYXR0ZXJuVmFsaWRhdG9yKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKGNvbnRyb2wudmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9IGVsc2UgaWYgKGNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHQgPT09ICdPUFRJT05BTCcgJiYgKGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdUZXh0JyB8fCBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnVGV4dEFyZWEnKVxuICAgICAgfHwgKGNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHQgPT09ICdDT01QTEVYJyAmJiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpKSB7XG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5tYXJrRG93blBhdHRlcm5WYWxpZGF0b3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVtcHR5VmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKGNvbnRyb2w/LnZhbHVlPy50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHt9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1hcmtEb3duUGF0dGVyblZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgLy8gTWF0Y2hlczogW3RleHRdKHVybCksICFbYWx0XSh1cmwpLCA8aW1nIC4uLj4sIDxhIC4uLj4uLi48L2E+XG4gICAgY29uc3QgaW5saW5lTWFya2Rvd25QYXR0ZXJuID0gLyg/OiE/XFxbW15cXF1dezAsNTAwfVxcXVxcKFteKV17MCw1MDB9XFwpfDwoPzppbWdcXGJbXj5dezAsNTAwfT58YVxcYltePl17MCw1MDB9PltcXHNcXFNdKj88XFwvYT4pKS9pO1xuXG4gICAgLy8gTWF0Y2hlczogW3RleHRdW2lkXSwgIVthbHRdW2lkXSwgYW5kIHRoZSBjb2xsYXBzZWQgZm9ybSBbdGV4dF1bXVxuICAgIGNvbnN0IHJlZmVyZW5jZUJveFBhdHRlcm4gPSAvKCEpP1xcWygoPzpbXltcXF1cXFxcXXxcXFxcLil7MCw1MDB9KVxcXVxccypcXFsoW15cXF1dezAsMTAwfSlcXF0vO1xuXG4gICAgLy8gTWF0Y2hlczogYXV0b2xpbmtzIHN1Y2ggYXMgPGh0dHA6Ly9leGFtcGxlLmNvbT5cbiAgICBjb25zdCBhdXRvbGlua1BhdHRlcm4gPSAvPCg/OltBLVphLXpdW0EtWmEtejAtOSsuLV0qOlteIDw+XFxuXSp8W0EtWmEtejAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW0EtWmEtejAtOS1dKyg/OlxcLltBLVphLXowLTktXSspKyk+LztcblxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sPy52YWx1ZT8udG9TdHJpbmcoKS50cmltKCk7XG4gICAgICByZXR1cm4gKHZhbHVlICYmIChpbmxpbmVNYXJrZG93blBhdHRlcm4udGVzdCh2YWx1ZSkgfHwgcmVmZXJlbmNlQm94UGF0dGVybi50ZXN0KHZhbHVlKSB8fCB0aGlzLm1hdGNoZXNSZWZlcmVuY2VVcmxEZWYodmFsdWUpIHx8IGF1dG9saW5rUGF0dGVybi50ZXN0KHZhbHVlKSB8fCB0aGlzLmhhc011bHRpQnJhY2tldCh2YWx1ZSBhcyBzdHJpbmcpKSkgPyB7IG1hcmtEb3duUGF0dGVybjoge30gfSA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFRPRE86IFN0cmlwIHRoaXMgb3V0IGFzIGl0J3Mgb25seSBoZXJlIGZvciB0aGUgbW9tZW50IGJlY2F1c2VcbiAgLy8gdGhlIHNlcnZpY2UgaXMgYmVpbmcgaW5qZWN0ZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGJ1dCBpdCBkb2Vzbid0XG4gIC8vIG5lZWQgdG8gYmUgYXMgRm9ybVZhbGlkYXRvcnNTZXJ2aWNlLmFkZFZhbGlkYXRvcnMgaXMgcGVyZmVjdGx5XG4gIC8vIGhhcHB5IGJlaW5nIHN0YXRpYy5cbiAgcHVibGljIGFkZFZhbGlkYXRvcnMoY2FzZUZpZWxkOiBDYXNlRmllbGQsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIEZvcm1WYWxpZGF0b3JzU2VydmljZS5hZGRWYWxpZGF0b3JzKGNhc2VGaWVsZCwgY29udHJvbCk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWFya0Rvd25WYWxpZGF0b3JzKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sLCBjb250cm9sUGF0aDogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChjb250cm9sUGF0aCk7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhGb3JtVmFsaWRhdG9yc1NlcnZpY2UubWFya0Rvd25QYXR0ZXJuVmFsaWRhdG9yKCkpO1xuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIG11bHRpLWJyYWNrZXQgbWFya2Rvd24gbGlua3MgYW5kIHZhbGlkYXRlIGRlc3RpbmF0aW9uIFVSTFxuICBwcml2YXRlIHN0YXRpYyBoYXNNdWx0aUJyYWNrZXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgLy8gU29uYXItZnJpZW5kbHkgZGV0ZWN0b3I6IG9wZW5pbmctcnVuICsgdGV4dCArIGZpcnN0IGNsb3NpbmcgJ10nXG4gICAgY29uc3Qgb3BlbmluZ1RleHRDbG9zZVBhdHRlcm4gPSAvXFxbezEsMTB9W15bXFxdXFxuXXsxLDYwfVxcXS87XG5cbiAgICAvLyBDYW4gYWRkIGFuIGFkZGl0aW9uYWwgUmVnRXggZm9yIGFkZGl0aW9uYWwgVVJMIHZhbGlkYXRpb24gcnVsZXMgaWYgbmVlZGVkIGhlcmVcblxuICAgIGxldCBzY2FuSW5kZXggPSAwO1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuXG4gICAgd2hpbGUgKHNjYW5JbmRleCA8IHRvdGFsTGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWcgPSB0aGlzLmZpbmRPcGVuaW5nVGV4dENsb3NlKHZhbHVlLCBzY2FuSW5kZXgsIG9wZW5pbmdUZXh0Q2xvc2VQYXR0ZXJuKTtcbiAgICAgIGlmICghc2VnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gbm8gY2FuZGlkYXRlIC0+IG5vIG1hdGNoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJ1bnMgPSB0aGlzLmV4dGVuZENsb3NpbmdSdW5BbmRSZXF1aXJlUGFyZW4odmFsdWUsIHNlZy5hYnNTdGFydCwgc2VnLmFmdGVyRmlyc3RDbG9zZSk7XG4gICAgICBpZiAocnVucyAmJiBydW5zLm9wZW5pbmdSdW5Db3VudCA9PT0gcnVucy5jbG9zaW5nUnVuQ291bnQpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gcnVsZXMsIHRoZXkgd291bGQgYmUgYXBwbGllZCBoZXJlXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBZHZhbmNlIHRvIGF2b2lkIHN0YWxsaW5nIG9uIG92ZXJsYXBzXG4gICAgICBzY2FuSW5kZXggPSBzZWcuYWJzU3RhcnQgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBGaW5kIG9wZW5pbmcgJ1snIHJ1biwgdGV4dCwgYW5kIGZpcnN0IGNsb3NpbmcgJ10nXG4gIHByaXZhdGUgc3RhdGljIGZpbmRPcGVuaW5nVGV4dENsb3NlKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIGZyb21JbmRleDogbnVtYmVyLFxuICAgIHBhdHRlcm46IFJlZ0V4cFxuICApOiB7IGFic1N0YXJ0OiBudW1iZXI7IGFmdGVyRmlyc3RDbG9zZTogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBjb25zdCBzbGljZSA9IHNvdXJjZS5zbGljZShmcm9tSW5kZXgpO1xuICAgIGNvbnN0IG1hdGNoID0gcGF0dGVybi5leGVjKHNsaWNlKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYWJzU3RhcnQgPSBmcm9tSW5kZXggKyBtYXRjaC5pbmRleDtcbiAgICBjb25zdCBhZnRlckZpcnN0Q2xvc2UgPSBhYnNTdGFydCArIG1hdGNoWzBdLmxlbmd0aDsgLy8gaW5kZXgganVzdCBhZnRlciB0aGUgZmlyc3QgJ10nXG4gICAgcmV0dXJuIHsgYWJzU3RhcnQsIGFmdGVyRmlyc3RDbG9zZSB9O1xuICB9XG5cbiAgLy8gQ291bnQgb3BlbmluZyAnWycgcnVuLCBleHRlbmQgdGhlICddJyBydW4sIGFuZCByZXF1aXJlICcoJyByaWdodCBhZnRlciB0aGUgZnVsbCAnXScgcnVuXG4gIHByaXZhdGUgc3RhdGljIGV4dGVuZENsb3NpbmdSdW5BbmRSZXF1aXJlUGFyZW4oXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgYWJzU3RhcnQ6IG51bWJlcixcbiAgICBhZnRlckZpcnN0Q2xvc2U6IG51bWJlclxuICApOiB7IG9wZW5pbmdSdW5Db3VudDogbnVtYmVyOyBjbG9zaW5nUnVuQ291bnQ6IG51bWJlcjsgYWZ0ZXJPcGVuUGFyZW46IG51bWJlciB9IHwgbnVsbCB7XG4gICAgY29uc3QgbiA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgICAvLyBDb3VudCBvcGVuaW5nICdbJyBydW4gKGUuZy4sICdbW1snKVxuICAgIGxldCBvcGVuaW5nUnVuQ291bnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSBhYnNTdGFydDsgaSA8IG4gJiYgc291cmNlW2ldID09PSAnWyc7IGkrKykge1xuICAgICAgb3BlbmluZ1J1bkNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gRXh0ZW5kIGNsb3NpbmcgJ10nIHJ1biBmb3J3YXJkIGZyb20gdGhlIGZpcnN0IG9uZVxuICAgIGxldCBjbG9zaW5nUnVuQ291bnQgPSAxO1xuICAgIGxldCBhZnRlckNsb3NpbmdSdW4gPSBhZnRlckZpcnN0Q2xvc2U7XG4gICAgd2hpbGUgKGFmdGVyQ2xvc2luZ1J1biA8IG4gJiYgc291cmNlW2FmdGVyQ2xvc2luZ1J1bl0gPT09ICddJykge1xuICAgICAgY2xvc2luZ1J1bkNvdW50Kys7XG4gICAgICBhZnRlckNsb3NpbmdSdW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVuaW5nUnVuQ291bnQsIGNsb3NpbmdSdW5Db3VudCwgYWZ0ZXJPcGVuUGFyZW46IGFmdGVyQ2xvc2luZ1J1biArIDEgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRSZWZlcmVuY2VVcmxUaXRsZVRhaWwodGFpbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcG9zc2libGVUaXRsZSA9IHRhaWwudHJpbSgpO1xuICAgIC8vIEFjY2VwdCBleGFjdGx5IG9uZSBvZjogXCJ0aXRsZVwiLCAndGl0bGUnLCAodGl0bGUpIOKAlCBib3VuZGVkIGFuZCBzaW5nbGUtbGluZS5cbiAgICBpZiAoIXBvc3NpYmxlVGl0bGUgfHwgL15cIlteXCJcXHJcXG5dezAsMzAwfVwiJC8udGVzdChwb3NzaWJsZVRpdGxlKSB8fCAvXidbXidcXHJcXG5dezAsMzAwfSckLy50ZXN0KHBvc3NpYmxlVGl0bGUpIHx8IC9eXFwoW14pXFxyXFxuXXswLDMwMH1cXCkkLy50ZXN0KHBvc3NpYmxlVGl0bGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICBwcml2YXRlIHN0YXRpYyBtYXRjaGVzUmVmZXJlbmNlVXJsRGVmKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIFNpbmdsZS1saW5lLCBwcmFnbWF0aWMgQ29tbW9uTWFyay1zdHlsZSByZWZlcmVuY2UgZGVmaW5pdGlvbiBlLmcuIFt0ZXh0XTogaHR0cDovL2V4YW1wbGUuY29tXG4gICAgY29uc3QgYmFzZVJlZmVyZW5jZVVybFBhdHRlcm4gPSAvXlsgXFx0XXswLDN9XFxbKFteXFxdXXsxLDEwMH0pXFxdOlsgXFx0XSo8PyhbXlxccz5dezEsMjA0OH0pPj9bIFxcdF0qKFteIFxcdFxcclxcbl0uKik/JC9tO1xuXG4gICAgY29uc3QgbWFpblJlZ0V4ID0gYmFzZVJlZmVyZW5jZVVybFBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICBpZiAoIW1haW5SZWdFeCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHRhaWwgPSBtYWluUmVnRXhbM10gPz8gXCJcIjtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkUmVmZXJlbmNlVXJsVGl0bGVUYWlsKHRhaWwpO1xuICB9XG59XG4iXX0=
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Zvcm0vZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixNQUFNLENBQVUsc0JBQXNCLEdBQW9CO1FBQ2hFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGNBQWM7S0FDNUMsQ0FBQztJQUNNLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7SUFDNUMsTUFBTSxDQUFVLHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUV0RCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQW9CLEVBQUUsT0FBd0I7UUFDeEUsSUFDRSxTQUFTLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxTQUFTO1lBQ2pELHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN0RixDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JB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QUFDO1FBQ3pFLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsa0VBQWtFO0lBQ2xFLGlFQUFpRTtJQUNqRSxzQkFBc0I7SUFDZixhQUFhLENBQUMsU0FBb0IsRUFBRSxPQUF3QjtRQUNqRSxPQUFPLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLHFCQUFxQixDQUFDLFNBQTBCLEVBQUUsV0FBbUI7UUFDMUUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDeEUsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBL0VVLHFCQUFxQjtnRUFBckIscUJBQXFCLFdBQXJCLHFCQUFxQjs7aUZBQXJCLHFCQUFxQjtjQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29tbW9ucy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vZmllbGQtdHlwZS1lbnVtLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZvcm1WYWxpZGF0b3JzU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENVU1RPTV9WQUxJREFURURfVFlQRVM6IEZpZWxkVHlwZUVudW1bXSA9IFtcbiAgICAnRGF0ZScsICdNb25leUdCUCcsICdMYWJlbCcsICdKdWRpY2lhbFVzZXInXG4gIF07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSU5QVVRfVEVYVCA9ICd0ZXh0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9JTlBVVF9URVhUQVJFQSA9ICd0ZXh0QXJlYXMnO1xuXG4gIHB1YmxpYyBzdGF0aWMgYWRkVmFsaWRhdG9ycyhjYXNlRmllbGQ6IENhc2VGaWVsZCwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBpZiAoXG4gICAgICBjYXNlRmllbGQuZGlzcGxheV9jb250ZXh0ID09PSBDb25zdGFudHMuTUFOREFUT1JZICYmXG4gICAgICBGb3JtVmFsaWRhdG9yc1NlcnZpY2UuQ1VTVE9NX1ZBTElEQVRFRF9UWVBFUy5pbmRleE9mKGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUpID09PSAtMVxuICAgICkge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnVGV4dCcpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWFya0Rvd25QYXR0ZXJuVmFsaWRhdG9yKCkpO1xuICAgICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUucmVndWxhcl9leHByZXNzaW9uKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjYXNlRmllbGQuZmllbGRfdHlwZS5yZWd1bGFyX2V4cHJlc3Npb24pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5lbXB0eVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUubWluICYmICh0eXBlb2YgY2FzZUZpZWxkLmZpZWxkX3R5cGUubWluID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoY2FzZUZpZWxkLmZpZWxkX3R5cGUubWluKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhc2VGaWVsZC5maWVsZF90eXBlLm1heCAmJiAodHlwZW9mIGNhc2VGaWVsZC5maWVsZF90eXBlLm1heCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGNhc2VGaWVsZC5maWVsZF90eXBlLm1heCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnVGV4dEFyZWEnKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmVtcHR5VmFsaWRhdG9yKCkpO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5tYXJrRG93blBhdHRlcm5WYWxpZGF0b3IoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goY29udHJvbC52YWxpZGF0b3IpO1xuICAgICAgfVxuICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH0gZWxzZSBpZiAoY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dCA9PT0gJ09QVElPTkFMJyAmJiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ1RleHQnIHx8IGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdUZXh0QXJlYScpXG4gICAgfHwgKGNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHQgPT09ICdDT01QTEVYJyAmJiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpKSB7XG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5tYXJrRG93blBhdHRlcm5WYWxpZGF0b3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVtcHR5VmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTpWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoY29udHJvbD8udmFsdWU/LnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyByZXF1aXJlZDoge30gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbWFya0Rvd25QYXR0ZXJuVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gLyhcXFtbXlxcXV17MCw1MDB9XFxdXFwoW14pXXswLDUwMH1cXCl8IVxcW1teXFxdXXswLDUwMH1cXF1cXChbXildezAsNTAwfVxcKXw8aW1nW14+XXswLDUwMH0+fDxhW14+XXswLDUwMH0+Lio/PFxcL2E+KS87XG5cbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbD8udmFsdWU/LnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgcmV0dXJuICh2YWx1ZSAmJiBwYXR0ZXJuLnRlc3QodmFsdWUpKSA/IHsgbWFya0Rvd25QYXR0ZXJuOiB7fSB9IDogbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgLy8gVE9ETzogU3RyaXAgdGhpcyBvdXQgYXMgaXQncyBvbmx5IGhlcmUgZm9yIHRoZSBtb21lbnQgYmVjYXVzZVxuICAvLyB0aGUgc2VydmljZSBpcyBiZWluZyBpbmplY3RlZCBhbGwgb3ZlciB0aGUgcGxhY2UgYnV0IGl0IGRvZXNuJ3RcbiAgLy8gbmVlZCB0byBiZSBhcyBGb3JtVmFsaWRhdG9yc1NlcnZpY2UuYWRkVmFsaWRhdG9ycyBpcyBwZXJmZWN0bHlcbiAgLy8gaGFwcHkgYmVpbmcgc3RhdGljLlxuICBwdWJsaWMgYWRkVmFsaWRhdG9ycyhjYXNlRmllbGQ6IENhc2VGaWVsZCwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gRm9ybVZhbGlkYXRvcnNTZXJ2aWNlLmFkZFZhbGlkYXRvcnMoY2FzZUZpZWxkLCBjb250cm9sKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRNYXJrRG93blZhbGlkYXRvcnMoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xQYXRoOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xQYXRoKTtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKEZvcm1WYWxpZGF0b3JzU2VydmljZS5tYXJrRG93blBhdHRlcm5WYWxpZGF0b3IoKSk7XG4gICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -5093,15 +5093,10 @@ class FormValidatorsService {
|
|
|
5093
5093
|
return validator;
|
|
5094
5094
|
}
|
|
5095
5095
|
static markDownPatternValidator() {
|
|
5096
|
-
|
|
5097
|
-
const inlineMarkdownPattern = /(?:!?\[[^\]]{0,500}\]\([^)]{0,500}\)|<(?:img\b[^>]{0,500}>|a\b[^>]{0,500}>[\s\S]*?<\/a>))/i;
|
|
5098
|
-
// Matches: [text][id], ![alt][id], and the collapsed form [text][]
|
|
5099
|
-
const referenceBoxPattern = /(!)?\[((?:[^[\]\\]|\\.){0,500})\]\s*\[([^\]]{0,100})\]/;
|
|
5100
|
-
// Matches: autolinks such as <http://example.com>
|
|
5101
|
-
const autolinkPattern = /<(?:[A-Za-z][A-Za-z0-9+.-]*:[^ <>\n]*|[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+)>/;
|
|
5096
|
+
const pattern = /(\[[^\]]{0,500}\]\([^)]{0,500}\)|!\[[^\]]{0,500}\]\([^)]{0,500}\)|<img[^>]{0,500}>|<a[^>]{0,500}>.*?<\/a>)/;
|
|
5102
5097
|
return (control) => {
|
|
5103
5098
|
const value = control?.value?.toString().trim();
|
|
5104
|
-
return (value &&
|
|
5099
|
+
return (value && pattern.test(value)) ? { markDownPattern: {} } : null;
|
|
5105
5100
|
};
|
|
5106
5101
|
}
|
|
5107
5102
|
// TODO: Strip this out as it's only here for the moment because
|
|
@@ -5119,73 +5114,6 @@ class FormValidatorsService {
|
|
|
5119
5114
|
}
|
|
5120
5115
|
return control;
|
|
5121
5116
|
}
|
|
5122
|
-
// Check for multi-bracket markdown links and validate destination URL
|
|
5123
|
-
static hasMultiBracket(value) {
|
|
5124
|
-
// Sonar-friendly detector: opening-run + text + first closing ']'
|
|
5125
|
-
const openingTextClosePattern = /\[{1,10}[^[\]\n]{1,60}\]/;
|
|
5126
|
-
// Can add an additional RegEx for additional URL validation rules if needed here
|
|
5127
|
-
let scanIndex = 0;
|
|
5128
|
-
const totalLength = value.length;
|
|
5129
|
-
while (scanIndex < totalLength) {
|
|
5130
|
-
const seg = this.findOpeningTextClose(value, scanIndex, openingTextClosePattern);
|
|
5131
|
-
if (!seg) {
|
|
5132
|
-
return false; // no candidate -> no match
|
|
5133
|
-
}
|
|
5134
|
-
const runs = this.extendClosingRunAndRequireParen(value, seg.absStart, seg.afterFirstClose);
|
|
5135
|
-
if (runs && runs.openingRunCount === runs.closingRunCount) {
|
|
5136
|
-
// If there were additional validation rules, they would be applied here
|
|
5137
|
-
return true;
|
|
5138
|
-
}
|
|
5139
|
-
// Advance to avoid stalling on overlaps
|
|
5140
|
-
scanIndex = seg.absStart + 1;
|
|
5141
|
-
}
|
|
5142
|
-
return false;
|
|
5143
|
-
}
|
|
5144
|
-
// Find opening '[' run, text, and first closing ']'
|
|
5145
|
-
static findOpeningTextClose(source, fromIndex, pattern) {
|
|
5146
|
-
const slice = source.slice(fromIndex);
|
|
5147
|
-
const match = pattern.exec(slice);
|
|
5148
|
-
if (!match) {
|
|
5149
|
-
return null;
|
|
5150
|
-
}
|
|
5151
|
-
const absStart = fromIndex + match.index;
|
|
5152
|
-
const afterFirstClose = absStart + match[0].length; // index just after the first ']'
|
|
5153
|
-
return { absStart, afterFirstClose };
|
|
5154
|
-
}
|
|
5155
|
-
// Count opening '[' run, extend the ']' run, and require '(' right after the full ']' run
|
|
5156
|
-
static extendClosingRunAndRequireParen(source, absStart, afterFirstClose) {
|
|
5157
|
-
const n = source.length;
|
|
5158
|
-
// Count opening '[' run (e.g., '[[[')
|
|
5159
|
-
let openingRunCount = 0;
|
|
5160
|
-
for (let i = absStart; i < n && source[i] === '['; i++) {
|
|
5161
|
-
openingRunCount++;
|
|
5162
|
-
}
|
|
5163
|
-
// Extend closing ']' run forward from the first one
|
|
5164
|
-
let closingRunCount = 1;
|
|
5165
|
-
let afterClosingRun = afterFirstClose;
|
|
5166
|
-
while (afterClosingRun < n && source[afterClosingRun] === ']') {
|
|
5167
|
-
closingRunCount++;
|
|
5168
|
-
afterClosingRun++;
|
|
5169
|
-
}
|
|
5170
|
-
return { openingRunCount, closingRunCount, afterOpenParen: afterClosingRun + 1 };
|
|
5171
|
-
}
|
|
5172
|
-
static isValidReferenceUrlTitleTail(tail) {
|
|
5173
|
-
const possibleTitle = tail.trim();
|
|
5174
|
-
// Accept exactly one of: "title", 'title', (title) — bounded and single-line.
|
|
5175
|
-
if (!possibleTitle || /^"[^"\r\n]{0,300}"$/.test(possibleTitle) || /^'[^'\r\n]{0,300}'$/.test(possibleTitle) || /^\([^)\r\n]{0,300}\)$/.test(possibleTitle)) {
|
|
5176
|
-
return true;
|
|
5177
|
-
}
|
|
5178
|
-
return false;
|
|
5179
|
-
}
|
|
5180
|
-
static matchesReferenceUrlDef(line) {
|
|
5181
|
-
// Single-line, pragmatic CommonMark-style reference definition e.g. [text]: http://example.com
|
|
5182
|
-
const baseReferenceUrlPattern = /^[ \t]{0,3}\[([^\]]{1,100})\]:[ \t]*<?([^\s>]{1,2048})>?[ \t]*([^ \t\r\n].*)?$/m;
|
|
5183
|
-
const mainRegEx = baseReferenceUrlPattern.exec(line);
|
|
5184
|
-
if (!mainRegEx)
|
|
5185
|
-
return false;
|
|
5186
|
-
const tail = mainRegEx[3] ?? "";
|
|
5187
|
-
return this.isValidReferenceUrlTitleTail(tail);
|
|
5188
|
-
}
|
|
5189
5117
|
static ɵfac = function FormValidatorsService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FormValidatorsService)(); };
|
|
5190
5118
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FormValidatorsService, factory: FormValidatorsService.ɵfac });
|
|
5191
5119
|
}
|