@aws-solutions-constructs/core 2.77.0 → 2.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +42 -42
- package/lib/alb-helper.js +2 -3
- package/lib/apigateway-defaults.d.ts +6 -6
- package/lib/apigateway-defaults.js +11 -11
- package/lib/apigateway-helper.d.ts +2 -2
- package/lib/apigateway-helper.js +8 -10
- package/lib/cloudfront-distribution-helper.js +2 -3
- package/lib/cloudwatch-log-group-helper.js +2 -4
- package/lib/cognito-defaults.d.ts +2 -2
- package/lib/cognito-defaults.js +4 -4
- package/lib/cognito-helper.js +3 -5
- package/lib/dynamodb-table-defaults.d.ts +3 -3
- package/lib/dynamodb-table-defaults.js +6 -6
- package/lib/dynamodb-table-helper.js +3 -3
- package/lib/elasticsearch-helper.js +5 -5
- package/lib/eventbridge-helper.js +4 -4
- package/lib/events-rule-defaults.d.ts +1 -1
- package/lib/events-rule-defaults.js +4 -4
- package/lib/fargate-helper.js +2 -3
- package/lib/glue-database-defaults.js +3 -3
- package/lib/glue-job-helper.js +3 -3
- package/lib/glue-table-defaults.js +6 -6
- package/lib/iot-topic-rule-defaults.d.ts +1 -1
- package/lib/iot-topic-rule-defaults.js +6 -6
- package/lib/kendra-helper.d.ts +1 -1
- package/lib/kendra-helper.js +1 -1
- package/lib/kinesis-analytics-defaults.d.ts +2 -2
- package/lib/kinesis-analytics-defaults.js +4 -4
- package/lib/kinesis-analytics-helper.js +2 -2
- package/lib/kinesis-firehose-s3-defaults.d.ts +1 -1
- package/lib/kinesis-firehose-s3-defaults.js +7 -7
- package/lib/kinesis-streams-defaults.d.ts +2 -2
- package/lib/kinesis-streams-defaults.js +4 -4
- package/lib/kinesis-streams-helper.js +2 -3
- package/lib/kms-defaults.d.ts +2 -2
- package/lib/kms-defaults.js +4 -4
- package/lib/kms-helper.js +2 -4
- package/lib/lambda-event-source-mapping-defaults.d.ts +3 -3
- package/lib/lambda-event-source-mapping-defaults.js +16 -16
- package/lib/mediastore-helper.js +2 -3
- package/lib/opensearch-helper.js +2 -2
- package/lib/override-warning-service.js +9 -6
- package/lib/s3-bucket-helper.js +7 -1
- package/lib/sagemaker-helper.d.ts +5 -0
- package/lib/sagemaker-helper.js +10 -9
- package/lib/secretsmanager-defaults.d.ts +2 -2
- package/lib/secretsmanager-defaults.js +4 -4
- package/lib/secretsmanager-helper.js +2 -3
- package/lib/sns-defaults.d.ts +2 -2
- package/lib/sns-defaults.js +4 -4
- package/lib/sns-helper.js +2 -2
- package/lib/sqs-defaults.js +3 -3
- package/lib/sqs-helper.js +2 -2
- package/lib/step-function-defaults.d.ts +1 -1
- package/lib/step-function-defaults.js +3 -3
- package/lib/utils.d.ts +1 -1
- package/lib/utils.js +14 -12
- package/lib/vpc-helper.js +1 -3
- package/lib/waf-helper.js +2 -3
- package/lib/websocket-api-helper.js +1 -2
- package/package.json +3 -3
- package/test/apigateway-helper.test.js +3 -3
- package/test/cloudfront-distribution-api-gateway-helper.test.js +11 -11
- package/test/dynamo-table.test.js +9 -9
- package/test/glue-job-helper.test.js +7 -7
- package/test/glue-table-helper.test.js +5 -5
- package/test/kinesis-analytics.test.js +2 -2
- package/test/kinesis-streams-defaults.test.js +2 -2
- package/test/lambda-event-source.test.js +10 -10
- package/test/override-warning-service.test.js +25 -26
- package/test/pipes-helper.test.js +2 -2
- package/test/step-function-helper.test.js +5 -5
- package/test/utils.test.js +11 -12
- package/.eslintignore +0 -9
- package/node_modules/ansi-regex/index.d.ts +0 -37
- package/node_modules/ansi-regex/index.js +0 -10
- package/node_modules/ansi-regex/license +0 -9
- package/node_modules/ansi-regex/package.json +0 -55
- package/node_modules/ansi-regex/readme.md +0 -78
- package/node_modules/aproba/LICENSE +0 -14
- package/node_modules/aproba/README.md +0 -94
- package/node_modules/aproba/index.js +0 -105
- package/node_modules/aproba/package.json +0 -35
- package/node_modules/are-we-there-yet/LICENSE.md +0 -18
- package/node_modules/are-we-there-yet/README.md +0 -208
- package/node_modules/are-we-there-yet/lib/index.js +0 -4
- package/node_modules/are-we-there-yet/lib/tracker-base.js +0 -13
- package/node_modules/are-we-there-yet/lib/tracker-group.js +0 -112
- package/node_modules/are-we-there-yet/lib/tracker-stream.js +0 -42
- package/node_modules/are-we-there-yet/lib/tracker.js +0 -34
- package/node_modules/are-we-there-yet/package.json +0 -53
- package/node_modules/color-support/LICENSE +0 -15
- package/node_modules/color-support/README.md +0 -129
- package/node_modules/color-support/bin.js +0 -3
- package/node_modules/color-support/browser.js +0 -14
- package/node_modules/color-support/index.js +0 -134
- package/node_modules/color-support/package.json +0 -36
- package/node_modules/console-control-strings/LICENSE +0 -13
- package/node_modules/console-control-strings/README.md +0 -145
- package/node_modules/console-control-strings/index.js +0 -125
- package/node_modules/console-control-strings/package.json +0 -27
- package/node_modules/deep-diff/.circleci/config.yml +0 -76
- package/node_modules/deep-diff/.eslintrc +0 -72
- package/node_modules/deep-diff/.vscode/launch.json +0 -30
- package/node_modules/deep-diff/.vscode/tasks.json +0 -12
- package/node_modules/deep-diff/ChangeLog.md +0 -63
- package/node_modules/deep-diff/LICENSE +0 -7
- package/node_modules/deep-diff/Readme.md +0 -239
- package/node_modules/deep-diff/dist/deep-diff.min.js +0 -1
- package/node_modules/deep-diff/dist/deep-diff.min.js.map +0 -1
- package/node_modules/deep-diff/examples/apply-diff-from-any.js +0 -39
- package/node_modules/deep-diff/examples/array-change.js +0 -45
- package/node_modules/deep-diff/examples/capture_change_apply_elsewhere.js +0 -53
- package/node_modules/deep-diff/examples/diff-ignoring-fun.js +0 -88
- package/node_modules/deep-diff/examples/diff-scenarios.js +0 -49
- package/node_modules/deep-diff/examples/example1.js +0 -41
- package/node_modules/deep-diff/examples/issue-111.js +0 -6
- package/node_modules/deep-diff/examples/issue-113-1.js +0 -14
- package/node_modules/deep-diff/examples/issue-113-2.js +0 -11
- package/node_modules/deep-diff/examples/issue-115.js +0 -17
- package/node_modules/deep-diff/examples/issue-124.js +0 -8
- package/node_modules/deep-diff/examples/issue-125.js +0 -19
- package/node_modules/deep-diff/examples/issue-126.js +0 -33
- package/node_modules/deep-diff/examples/issue-35.js +0 -11
- package/node_modules/deep-diff/examples/issue-47.js +0 -17
- package/node_modules/deep-diff/examples/issue-48.js +0 -48
- package/node_modules/deep-diff/examples/issue-62.js +0 -14
- package/node_modules/deep-diff/examples/issue-70.js +0 -6
- package/node_modules/deep-diff/examples/issue-71.js +0 -15
- package/node_modules/deep-diff/examples/issue-72.js +0 -21
- package/node_modules/deep-diff/examples/issue-74.js +0 -9
- package/node_modules/deep-diff/examples/issue-78.js +0 -24
- package/node_modules/deep-diff/examples/issue-83.js +0 -11
- package/node_modules/deep-diff/examples/issue-88.js +0 -26
- package/node_modules/deep-diff/examples/performance.js +0 -64
- package/node_modules/deep-diff/examples/practice-data.json +0 -2501
- package/node_modules/deep-diff/index.js +0 -526
- package/node_modules/deep-diff/package.json +0 -74
- package/node_modules/deep-diff/test/.eslintrc +0 -10
- package/node_modules/deep-diff/test/tests.html +0 -34
- package/node_modules/deep-diff/test/tests.js +0 -759
- package/node_modules/deepmerge/.editorconfig +0 -7
- package/node_modules/deepmerge/.eslintcache +0 -1
- package/node_modules/deepmerge/changelog.md +0 -167
- package/node_modules/deepmerge/dist/cjs.js +0 -133
- package/node_modules/deepmerge/dist/umd.js +0 -139
- package/node_modules/deepmerge/index.d.ts +0 -20
- package/node_modules/deepmerge/index.js +0 -106
- package/node_modules/deepmerge/license.txt +0 -21
- package/node_modules/deepmerge/package.json +0 -42
- package/node_modules/deepmerge/readme.md +0 -264
- package/node_modules/deepmerge/rollup.config.js +0 -22
- package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
- package/node_modules/emoji-regex/README.md +0 -73
- package/node_modules/emoji-regex/es2015/index.js +0 -6
- package/node_modules/emoji-regex/es2015/text.js +0 -6
- package/node_modules/emoji-regex/index.d.ts +0 -23
- package/node_modules/emoji-regex/index.js +0 -6
- package/node_modules/emoji-regex/package.json +0 -50
- package/node_modules/emoji-regex/text.js +0 -6
- package/node_modules/gauge/LICENSE.md +0 -20
- package/node_modules/gauge/README.md +0 -402
- package/node_modules/gauge/lib/base-theme.js +0 -18
- package/node_modules/gauge/lib/error.js +0 -24
- package/node_modules/gauge/lib/has-color.js +0 -4
- package/node_modules/gauge/lib/index.js +0 -289
- package/node_modules/gauge/lib/plumbing.js +0 -50
- package/node_modules/gauge/lib/process.js +0 -3
- package/node_modules/gauge/lib/progress-bar.js +0 -41
- package/node_modules/gauge/lib/render-template.js +0 -222
- package/node_modules/gauge/lib/set-immediate.js +0 -7
- package/node_modules/gauge/lib/set-interval.js +0 -3
- package/node_modules/gauge/lib/spin.js +0 -5
- package/node_modules/gauge/lib/template-item.js +0 -87
- package/node_modules/gauge/lib/theme-set.js +0 -122
- package/node_modules/gauge/lib/themes.js +0 -56
- package/node_modules/gauge/lib/wide-truncate.js +0 -31
- package/node_modules/gauge/package.json +0 -68
- package/node_modules/has-unicode/LICENSE +0 -14
- package/node_modules/has-unicode/README.md +0 -43
- package/node_modules/has-unicode/index.js +0 -16
- package/node_modules/has-unicode/package.json +0 -30
- package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
- package/node_modules/is-fullwidth-code-point/index.js +0 -50
- package/node_modules/is-fullwidth-code-point/license +0 -9
- package/node_modules/is-fullwidth-code-point/package.json +0 -42
- package/node_modules/is-fullwidth-code-point/readme.md +0 -39
- package/node_modules/npmlog/LICENSE.md +0 -20
- package/node_modules/npmlog/README.md +0 -216
- package/node_modules/npmlog/lib/log.js +0 -400
- package/node_modules/npmlog/package.json +0 -52
- package/node_modules/set-blocking/LICENSE.txt +0 -14
- package/node_modules/set-blocking/README.md +0 -31
- package/node_modules/set-blocking/index.js +0 -7
- package/node_modules/set-blocking/package.json +0 -42
- package/node_modules/signal-exit/LICENSE.txt +0 -16
- package/node_modules/signal-exit/README.md +0 -74
- package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
- package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
- package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
- package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
- package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/cjs/index.js +0 -279
- package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
- package/node_modules/signal-exit/dist/cjs/package.json +0 -3
- package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
- package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
- package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
- package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
- package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
- package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
- package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
- package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/mjs/index.js +0 -275
- package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
- package/node_modules/signal-exit/dist/mjs/package.json +0 -3
- package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
- package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
- package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
- package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
- package/node_modules/signal-exit/package.json +0 -106
- package/node_modules/string-width/index.d.ts +0 -29
- package/node_modules/string-width/index.js +0 -47
- package/node_modules/string-width/license +0 -9
- package/node_modules/string-width/package.json +0 -56
- package/node_modules/string-width/readme.md +0 -50
- package/node_modules/strip-ansi/index.d.ts +0 -17
- package/node_modules/strip-ansi/index.js +0 -4
- package/node_modules/strip-ansi/license +0 -9
- package/node_modules/strip-ansi/package.json +0 -54
- package/node_modules/strip-ansi/readme.md +0 -46
- package/node_modules/wide-align/LICENSE +0 -14
- package/node_modules/wide-align/README.md +0 -47
- package/node_modules/wide-align/align.js +0 -65
- package/node_modules/wide-align/package.json +0 -33
package/test/utils.test.js
CHANGED
|
@@ -16,7 +16,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
const defaults = require("../");
|
|
17
17
|
const cdk = require("aws-cdk-lib");
|
|
18
18
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
19
|
-
const log = require("npmlog");
|
|
20
19
|
const s3 = require("aws-cdk-lib/aws-s3");
|
|
21
20
|
const assertions_1 = require("aws-cdk-lib/assertions");
|
|
22
21
|
// Need 2 parts, but they can't overlap
|
|
@@ -92,14 +91,14 @@ test('Test consolidate props with all args', () => {
|
|
|
92
91
|
const arg3 = {
|
|
93
92
|
val1: 31,
|
|
94
93
|
};
|
|
95
|
-
const
|
|
94
|
+
const consoleLogSpy = jest.spyOn(console, 'log');
|
|
96
95
|
const result = defaults.consolidateProps(arg1, arg2, arg3);
|
|
97
96
|
expect(result).toEqual({
|
|
98
97
|
val1: 31,
|
|
99
98
|
val2: 22,
|
|
100
99
|
val3: 13,
|
|
101
100
|
});
|
|
102
|
-
expect(
|
|
101
|
+
expect(consoleLogSpy).toBeCalledTimes(2);
|
|
103
102
|
});
|
|
104
103
|
test('Test consolidate props with first and third args', () => {
|
|
105
104
|
jest.resetModules();
|
|
@@ -113,14 +112,14 @@ test('Test consolidate props with first and third args', () => {
|
|
|
113
112
|
const arg3 = {
|
|
114
113
|
val1: 31,
|
|
115
114
|
};
|
|
116
|
-
const
|
|
115
|
+
const consoleLogSpy = jest.spyOn(console, 'log');
|
|
117
116
|
const result = defaults.consolidateProps(arg1, undefined, arg3);
|
|
118
117
|
expect(result).toEqual({
|
|
119
118
|
val1: 31,
|
|
120
119
|
val2: 12,
|
|
121
120
|
val3: 13,
|
|
122
121
|
});
|
|
123
|
-
expect(
|
|
122
|
+
expect(consoleLogSpy).toBeCalledTimes(0);
|
|
124
123
|
});
|
|
125
124
|
test('Test consolidate props with first and second args', () => {
|
|
126
125
|
jest.resetModules();
|
|
@@ -135,14 +134,14 @@ test('Test consolidate props with first and second args', () => {
|
|
|
135
134
|
val1: 21,
|
|
136
135
|
val2: 22,
|
|
137
136
|
};
|
|
138
|
-
const
|
|
137
|
+
const consoleLogSpy = jest.spyOn(console, 'log');
|
|
139
138
|
const result = defaults.consolidateProps(arg1, arg2);
|
|
140
139
|
expect(result).toEqual({
|
|
141
140
|
val1: 21,
|
|
142
141
|
val2: 22,
|
|
143
142
|
val3: 13,
|
|
144
143
|
});
|
|
145
|
-
expect(
|
|
144
|
+
expect(consoleLogSpy).toBeCalledTimes(2);
|
|
146
145
|
});
|
|
147
146
|
test('Test consolidate props with one arg', () => {
|
|
148
147
|
jest.resetModules();
|
|
@@ -153,10 +152,10 @@ test('Test consolidate props with one arg', () => {
|
|
|
153
152
|
val2: 12,
|
|
154
153
|
val3: 13,
|
|
155
154
|
};
|
|
156
|
-
const
|
|
155
|
+
const consoleLogSpy = jest.spyOn(console, 'log');
|
|
157
156
|
const result = defaults.consolidateProps(arg1);
|
|
158
157
|
expect(result).toEqual(arg1);
|
|
159
|
-
expect(
|
|
158
|
+
expect(consoleLogSpy).toBeCalledTimes(0);
|
|
160
159
|
});
|
|
161
160
|
test('Test generateName sunny day for current construct with undefined name argument', () => {
|
|
162
161
|
const stack = new cdk.Stack(undefined, "some-new-id");
|
|
@@ -228,10 +227,10 @@ test('ConsolidateProps does not generate warnings for construct props overrides'
|
|
|
228
227
|
const constructProps = {
|
|
229
228
|
val2: 'four'
|
|
230
229
|
};
|
|
231
|
-
const
|
|
230
|
+
const consoleLogSpy = jest.spyOn(console, 'log');
|
|
232
231
|
defaults.consolidateProps(defaultProps, clientProps, constructProps);
|
|
233
232
|
// Assert
|
|
234
|
-
expect(
|
|
233
|
+
expect(consoleLogSpy).toBeCalledTimes(1);
|
|
235
234
|
});
|
|
236
235
|
test('CheckBooleanWithDefault', () => {
|
|
237
236
|
let response;
|
|
@@ -273,4 +272,4 @@ test('Test removeNonAlphanumeric', () => {
|
|
|
273
272
|
const result = defaults.removeNonAlphanumeric(source);
|
|
274
273
|
expect(result).toEqual(desiredResult);
|
|
275
274
|
});
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDVixnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLDZDQUFpRDtBQUNqRCw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLHVEQUFrRDtBQUVsRCx1Q0FBdUM7QUFDdkMsaURBQWlEO0FBQ2pELE1BQU0sS0FBSyxHQUFHLENBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDdkQsTUFBTSxhQUFhLEdBQUcsQ0FBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFaEQsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXhELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWxELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXpELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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ZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uLyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuUmVzb3VyY2UsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbG9nIGZyb20gJ25wbWxvZyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcblxuLy8gTmVlZCAyIHBhcnRzLCBidXQgdGhleSBjYW4ndCBvdmVybGFwXG4vLyBzbyB3ZSBjYW4gZXhwbGljaXRseSBmaW5kIHRoZW0gaW4gdGhlIHJlc3VsdHMuXG5jb25zdCBwYXJ0cyA9IFsgJ2ZpcnN0cG9ydGlvbmlzbG9uZycsICdzZWNvbmRzZWN0aW9uJ107XG5jb25zdCBub25BbHBoYVBhcnRzID0gWyAncGFydC1vbmUnLCAncGFydC10d28nXTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVJlc291cmNlTmFtZSB3aXRoIGEgdHJ1bmNhdGVkIHBhcnQnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKHBhcnRzLCAzOCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzFdKTtcbiAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihwYXJ0c1swXS5zbGljZSgwLCAxMykpO1xuXG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVJlc291cmNlTmFtZSB3aXRoIG5vIHRydW5jYXRlZCBwYXJ0cycsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUocGFydHMsIDEwMCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzFdKTtcbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzBdKTtcbiAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLnRvRXF1YWwocGFydHNbMF0ubGVuZ3RoICsgcGFydHNbMV0ubGVuZ3RoICsgMTIpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVSZXNvdXJjZU5hbWUgd2l0aCBub24gQXBoYW51bWVyaWMnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKG5vbkFscGhhUGFydHMsIDEwMCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKCdwYXJ0b25lcGFydHR3bycpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVSZXNvdXJjZU5hbWUgd2l0aCByYW5kb21pemVkIGV4dGVuc2lvbicsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0T25lID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUocGFydHMsIDUxMiwgdHJ1ZSk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG5cbiAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIHRpbWUgdmFsdWUgYXBwZW5kZWQgY2hhbmdlcyBiZXR3ZWVuIGNhbGxsc1xuICBsZXQgY3VyclRpbWUgPSBzdGFydFRpbWU7XG4gIHdoaWxlIChjdXJyVGltZSAgPT09IHN0YXJ0VGltZSkge1xuICAgIGN1cnJUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFR3byA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKHBhcnRzLCA1MTIsIHRydWUpO1xuXG4gIGV4cGVjdChyZXN1bHRPbmUpLnRvQ29udGFpbihwYXJ0c1sxXSk7XG4gIGV4cGVjdChyZXN1bHRPbmUpLnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHRUd28pLnRvQ29udGFpbihwYXJ0c1sxXSk7XG4gIGV4cGVjdChyZXN1bHRUd28pLnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHRPbmUpLm5vdC50b0VxdWFsKHJlc3VsdFR3byk7XG4gIGV4cGVjdChyZXN1bHRPbmUuc2xpY2UoMCwgLTEzKSkudG9FcXVhbChyZXN1bHRUd28uc2xpY2UoMCwgLTEzKSk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlUGh5c2ljYWxOYW1lJywgKCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVBoeXNpY2FsTmFtZSgnL2F3cy92ZW5kZWRsb2dzL3N0YXRlcy9jb25zdHJ1Y3RzLycsIHBhcnRzLCAyNTUpO1xuXG4gIC8vIFRoZSB0b2tlbiBudW1iZXIgaXMgbm90IGNvbnN0YW50LCBzbyBuZWVkIHRvIGJlIGZsZXhpYmxlIGNoZWNraW5nIHRoaXMgdmFsdWVcbiAgY29uc3QgcmVnZXggPSAvXFwvYXdzXFwvdmVuZGVkbG9nc1xcL3N0YXRlc1xcL2NvbnN0cnVjdHNcXC9maXJzdHBvcnRpb25pc2xvbmdzZWNvbmRzZWN0aW9uLVxcJHtUb2tlblxcW1RPS0VOXFwuWzAtOV0rXFxdfS87XG4gIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2gocmVnZXgpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgdHJ1bmNhdGlvbiBvZiBnZW5lcmF0ZVBoeXNpY2FsTmFtZScsICgpID0+IHtcbiAgY29uc3QgbG9uZ1BhcnRzID0gWyAuLi5wYXJ0cywgLi4ucGFydHMsIC4uLnBhcnRzLCAuLi5wYXJ0cywgLi4ucGFydHMgXTtcbiAgY29uc3QgcHJlZml4ID0gJy9hd3MvdmVuZGVkbG9ncy9zdGF0ZXMvY29uc3RydWN0cy8nO1xuICBjb25zdCBsZW5ndGhPZkd1aWQgPSAzNjtcbiAgY29uc3QgbWF4TmFtZUxlbmd0aCA9IDEyNTtcblxuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIGxvbmdQYXJ0cywgbWF4TmFtZUxlbmd0aCk7XG5cbiAgY29uc3QgZml4ZWRQb3J0aW9uID0gcmVzdWx0LnNwbGl0KCckJylbMF07XG4gIGV4cGVjdChmaXhlZFBvcnRpb24ubGVuZ3RoKS50b0VxdWFsKG1heE5hbWVMZW5ndGggLSBsZW5ndGhPZkd1aWQpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZScsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSgnaW50ZWcuYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVELmpzJyk7XG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbignYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVEJyk7XG5cbiAgY29uc3QgcmVzdWx0MSA9IGRlZmF1bHRzLmdlbmVyYXRlSW50ZWdTdGFja05hbWUoJ2ludGVnLm92ZXJyaWRlX2F1dGhfYXBpX2tleXMudHMnKTtcbiAgZXhwZWN0KHJlc3VsdDEpLnRvQ29udGFpbignb3ZlcnJpZGUtYXV0aC1hcGkta2V5cycpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBhbGwgYXJncycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGFyZzEgPSB7XG4gICAgdmFsMTogMTEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH07XG5cbiAgY29uc3QgYXJnMiA9IHtcbiAgICB2YWwxOiAyMSxcbiAgICB2YWwyOiAyMixcbiAgfTtcblxuICBjb25zdCBhcmczID0ge1xuICAgIHZhbDE6IDMxLFxuICB9O1xuXG4gIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGxvZywgJ3dhcm4nKTtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhhcmcxLCBhcmcyLCBhcmczKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2YWwxOiAzMSxcbiAgICB2YWwyOiAyMixcbiAgICB2YWwzOiAxMyxcbiAgfSk7XG5cbiAgZXhwZWN0KHdhcm4pLnRvQmVDYWxsZWRUaW1lcygyKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBmaXJzdCBhbmQgdGhpcmQgYXJncycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGFyZzEgPSB7XG4gICAgdmFsMTogMTEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH07XG5cbiAgY29uc3QgYXJnMyA9IHtcbiAgICB2YWwxOiAzMSxcbiAgfTtcblxuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihsb2csICd3YXJuJyk7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoYXJnMSwgdW5kZWZpbmVkLCBhcmczKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2YWwxOiAzMSxcbiAgICB2YWwyOiAxMixcbiAgICB2YWwzOiAxMyxcbiAgfSk7XG5cbiAgZXhwZWN0KHdhcm4pLnRvQmVDYWxsZWRUaW1lcygwKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBmaXJzdCBhbmQgc2Vjb25kIGFyZ3MnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBhcmcxID0ge1xuICAgIHZhbDE6IDExLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9O1xuXG4gIGNvbnN0IGFyZzIgPSB7XG4gICAgdmFsMTogMjEsXG4gICAgdmFsMjogMjIsXG4gIH07XG5cbiAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24obG9nLCAnd2FybicpO1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGFyZzEsIGFyZzIpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZhbDE6IDIxLFxuICAgIHZhbDI6IDIyLFxuICAgIHZhbDM6IDEzLFxuICB9KTtcblxuICBleHBlY3Qod2FybikudG9CZUNhbGxlZFRpbWVzKDIpO1xuXG59KTtcblxudGVzdCgnVGVzdCBjb25zb2xpZGF0ZSBwcm9wcyB3aXRoIG9uZSBhcmcnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBhcmcxID0ge1xuICAgIHZhbDE6IDExLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9O1xuXG4gIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGxvZywgJ3dhcm4nKTtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhhcmcxKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGFyZzEpO1xuXG4gIGV4cGVjdCh3YXJuKS50b0JlQ2FsbGVkVGltZXMoMCk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlTmFtZSBzdW5ueSBkYXkgZm9yIGN1cnJlbnQgY29uc3RydWN0IHdpdGggdW5kZWZpbmVkIG5hbWUgYXJndW1lbnQnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG5cbiAgY29uc3QgbmV3TmFtZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFjayk7XG4gIC8vIDUgaXMgbm90IHNwZWNpZmljLCBqdXN0IGNoZWNraW5nIHRoZSBuYW1lIGlzIHNldmVyYWwgY2hhcmFjdGVycyBsb25nZXIgdGhhbiBqdXN0IGEgQ1IvTEZcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNSk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgc3VubnkgZGF5IGZvciBjdXJyZW50IGNvbnN0cnVjdCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcblxuICBjb25zdCBuZXdOYW1lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrLCBcIlwiKTtcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNSk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgc3VubnkgZGF5IGZvciBjaGlsZCBjb25zdHJ1Y3QnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG5cbiAgY29uc3QgbmV3TmFtZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFjaywgXCJjaGlsZFwiKTtcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNSk7XG4gIGV4cGVjdChuZXdOYW1lLmluY2x1ZGVzKG5ld05hbWUpKS50b0JlKHRydWUpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVOYW1lIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG4gIGNvbnN0IHNldmVudHlDaGFyYWN0ZXJOYW1lID0gJzEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0nO1xuICBjb25zdCBuZXdOYW1lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrLCBzZXZlbnR5Q2hhcmFjdGVyTmFtZSk7XG4gIGV4cGVjdChuZXdOYW1lLmxlbmd0aCkudG9FcXVhbCg2NCk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgdW5pcXVlbmVzcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2tPbmUgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcbiAgY29uc3Qgc3RhY2tUd28gPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJvdGhlci1pZFwiKTtcblxuICBjb25zdCBuYW1lT25lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrT25lLCBcIlwiKTtcbiAgY29uc3QgbmFtZVR3byA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFja1R3bywgXCJcIik7XG4gIGV4cGVjdChuYW1lT25lID09PSBuYW1lVHdvKS50b0JlKGZhbHNlKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHN1Y2Nlc3NmdWwgQ2hlY2tMaXN0VmFsdWVzJywgKCkgPT4ge1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0xpc3RWYWx1ZXMoWydvbmUnLCAndHdvJywgJ2ZvdXInXSwgWydmb3VyJywgJ29uZSddLCAndGVzdCB2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS5ub3QudG9UaHJvd0Vycm9yKCk7XG59KTtcblxudGVzdCgnVGVzdCBmYWlsIE9wZW5TZWFyY2ggaW1wcm9wZXIgdnBjIHNwZWNpZmljYXRpb24nLCAoKSA9PiB7XG5cbiAgY29uc3QgcHJvcHM6IGRlZmF1bHRzLk9wZW5TZWFyY2hQcm9wcyA9IHtcbiAgICBvcGVuU2VhcmNoRG9tYWluUHJvcHM6IHtcbiAgICAgIHZwY09wdGlvbnM6IHt9XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tPcGVuU2VhcmNoUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0Vycm9yIC0gRGVmaW5lIFZQQyB1c2luZyBjb25zdHJ1Y3QgcGFyYW1ldGVycyBub3QgdGhlIE9wZW5TZWFyY2ggU2VydmljZSBwcm9wc1xcbicpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgdW5zdWNjZXNzZnVsIENoZWNrTGlzdFZhbHVlcycsICgpID0+IHtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tMaXN0VmFsdWVzKFsnb25lJywgJ3R3bycsICdmb3VyJ10sIFsnZm91cicsICd0aHJlZSddLCAndGVzdCB2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0ludmFsaWQgdGVzdCB2YWx1ZSBzdWJtaXR0ZWQgLSB0aHJlZScpO1xufSk7XG5cbnRlc3QoJ0NvbnNvbGlkYXRlUHJvcHMgZG9lcyBub3QgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIGNvbnN0cnVjdCBwcm9wcyBvdmVycmlkZXMnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsMTogJ29uZSdcbiAgfTtcblxuICBjb25zdCBjbGllbnRQcm9wcyA9IHtcbiAgICB2YWwxOiAndHdvJyxcbiAgICB2YWwyOiAndGhyZWUnXG4gIH07XG5cbiAgY29uc3QgY29uc3RydWN0UHJvcHMgPSB7XG4gICAgdmFsMjogJ2ZvdXInXG4gIH07XG5cbiAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24obG9nLCAnd2FybicpO1xuICBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGRlZmF1bHRQcm9wcywgY2xpZW50UHJvcHMsICBjb25zdHJ1Y3RQcm9wcyk7XG5cbiAgLy8gQXNzZXJ0XG4gIGV4cGVjdCh3YXJuKS50b0JlQ2FsbGVkVGltZXMoMSk7XG5cbn0pO1xuXG50ZXN0KCdDaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCcsICgpID0+IHtcbiAgbGV0IHJlc3BvbnNlO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodW5kZWZpbmVkLCB0cnVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHRydWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodW5kZWZpbmVkLCBmYWxzZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShmYWxzZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCh0cnVlLCB0cnVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHRydWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodHJ1ZSwgZmFsc2UpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUodHJ1ZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdChmYWxzZSwgdHJ1ZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShmYWxzZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdChmYWxzZSwgZmFsc2UpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUoZmFsc2UpO1xufSk7XG5cbnRlc3QoJ0NoZWNrU3RyaW5nV2l0aERlZmF1bHQnLCAoKSA9PiB7XG4gIGxldCByZXNwb25zZTtcbiAgY29uc3QgdmFsdWUgPSAndGVzdFZhbHVlJztcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gJ2RlZmF1bHQnO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tTdHJpbmdXaXRoRGVmYXVsdCh1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShkZWZhdWx0VmFsdWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tTdHJpbmdXaXRoRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHZhbHVlKTtcblxufSk7XG5cbnRlc3QoJ3Rlc3QgYWRkQ2ZuR3VhcmRTdXBwcmVzc1J1bGVzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IHRlc3RCdWNrZXQgPSBuZXcgczMuQnVja2V0KHN0YWNrLCAndGVzdC1idWNrZXQnKTtcbiAgZGVmYXVsdHMuYWRkQ2ZuR3VhcmRTdXBwcmVzc1J1bGVzKHRlc3RCdWNrZXQsIFtcIkFEREVEX1RPX0JVQ0tFVFwiXSk7XG4gIGRlZmF1bHRzLmFkZENmbkd1YXJkU3VwcHJlc3NSdWxlcyh0ZXN0QnVja2V0Lm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIENmblJlc291cmNlLCBbXCJBRERFRF9UT19DRk5fUkVTT1VSQ0VcIl0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgY29uc3QgYnVja2V0ID0gdGVtcGxhdGUuZmluZFJlc291cmNlcyhcIkFXUzo6UzM6OkJ1Y2tldFwiKTtcbiAgZXhwZWN0KGJ1Y2tldC50ZXN0YnVja2V0RTZFMDVBQkUuTWV0YWRhdGEuZ3VhcmQuU3VwcHJlc3NlZFJ1bGVzWzBdKS50b0VxdWFsKFwiQURERURfVE9fQlVDS0VUXCIpO1xuICBleHBlY3QoYnVja2V0LnRlc3RidWNrZXRFNkUwNUFCRS5NZXRhZGF0YS5ndWFyZC5TdXBwcmVzc2VkUnVsZXNbMV0pLnRvRXF1YWwoXCJBRERFRF9UT19DRk5fUkVTT1VSQ0VcIik7XG59KTtcblxudGVzdCgnVGVzdCByZW1vdmVOb25BbHBoYW51bWVyaWMnLCAoKSA9PiB7XG4gIGNvbnN0IHNvdXJjZSA9ICdcXFxcdGhpcyYmaXMlYSNzdHJpbmdnQCc7XG4gIGNvbnN0IGRlc2lyZWRSZXN1bHQgPSAndGhpc2lzYXN0cmluZ2cnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLnJlbW92ZU5vbkFscGhhbnVtZXJpYyhzb3VyY2UpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZGVzaXJlZFJlc3VsdCk7XG5cbn0pO1xuIl19
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDVixnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLDZDQUFpRDtBQUNqRCx5Q0FBeUM7QUFDekMsdURBQWtEO0FBRWxELHVDQUF1QztBQUN2QyxpREFBaUQ7QUFDakQsTUFBTSxLQUFLLEdBQUcsQ0FBRSxvQkFBb0IsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN2RCxNQUFNLGFBQWEsR0FBRyxDQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVoRCxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO0lBQzNELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFbEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO0lBQzdELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFN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QUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RCxRQUFRLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQWdCLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFFbkgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvRixNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDdkcsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDO0lBQ3ZDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDO0lBRXZDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV0RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRXhDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnLi4vJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcblxuLy8gTmVlZCAyIHBhcnRzLCBidXQgdGhleSBjYW4ndCBvdmVybGFwXG4vLyBzbyB3ZSBjYW4gZXhwbGljaXRseSBmaW5kIHRoZW0gaW4gdGhlIHJlc3VsdHMuXG5jb25zdCBwYXJ0cyA9IFsgJ2ZpcnN0cG9ydGlvbmlzbG9uZycsICdzZWNvbmRzZWN0aW9uJ107XG5jb25zdCBub25BbHBoYVBhcnRzID0gWyAncGFydC1vbmUnLCAncGFydC10d28nXTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVJlc291cmNlTmFtZSB3aXRoIGEgdHJ1bmNhdGVkIHBhcnQnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKHBhcnRzLCAzOCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzFdKTtcbiAgZXhwZWN0KHJlc3VsdCkubm90LnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihwYXJ0c1swXS5zbGljZSgwLCAxMykpO1xuXG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVJlc291cmNlTmFtZSB3aXRoIG5vIHRydW5jYXRlZCBwYXJ0cycsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUocGFydHMsIDEwMCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzFdKTtcbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzBdKTtcbiAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLnRvRXF1YWwocGFydHNbMF0ubGVuZ3RoICsgcGFydHNbMV0ubGVuZ3RoICsgMTIpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVSZXNvdXJjZU5hbWUgd2l0aCBub24gQXBoYW51bWVyaWMnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKG5vbkFscGhhUGFydHMsIDEwMCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKCdwYXJ0b25lcGFydHR3bycpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVSZXNvdXJjZU5hbWUgd2l0aCByYW5kb21pemVkIGV4dGVuc2lvbicsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0T25lID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUocGFydHMsIDUxMiwgdHJ1ZSk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG5cbiAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIHRpbWUgdmFsdWUgYXBwZW5kZWQgY2hhbmdlcyBiZXR3ZWVuIGNhbGxsc1xuICBsZXQgY3VyclRpbWUgPSBzdGFydFRpbWU7XG4gIHdoaWxlIChjdXJyVGltZSAgPT09IHN0YXJ0VGltZSkge1xuICAgIGN1cnJUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFR3byA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKHBhcnRzLCA1MTIsIHRydWUpO1xuXG4gIGV4cGVjdChyZXN1bHRPbmUpLnRvQ29udGFpbihwYXJ0c1sxXSk7XG4gIGV4cGVjdChyZXN1bHRPbmUpLnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHRUd28pLnRvQ29udGFpbihwYXJ0c1sxXSk7XG4gIGV4cGVjdChyZXN1bHRUd28pLnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHRPbmUpLm5vdC50b0VxdWFsKHJlc3VsdFR3byk7XG4gIGV4cGVjdChyZXN1bHRPbmUuc2xpY2UoMCwgLTEzKSkudG9FcXVhbChyZXN1bHRUd28uc2xpY2UoMCwgLTEzKSk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlUGh5c2ljYWxOYW1lJywgKCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVBoeXNpY2FsTmFtZSgnL2F3cy92ZW5kZWRsb2dzL3N0YXRlcy9jb25zdHJ1Y3RzLycsIHBhcnRzLCAyNTUpO1xuXG4gIC8vIFRoZSB0b2tlbiBudW1iZXIgaXMgbm90IGNvbnN0YW50LCBzbyBuZWVkIHRvIGJlIGZsZXhpYmxlIGNoZWNraW5nIHRoaXMgdmFsdWVcbiAgY29uc3QgcmVnZXggPSAvXFwvYXdzXFwvdmVuZGVkbG9nc1xcL3N0YXRlc1xcL2NvbnN0cnVjdHNcXC9maXJzdHBvcnRpb25pc2xvbmdzZWNvbmRzZWN0aW9uLVxcJHtUb2tlblxcW1RPS0VOXFwuWzAtOV0rXFxdfS87XG4gIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2gocmVnZXgpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgdHJ1bmNhdGlvbiBvZiBnZW5lcmF0ZVBoeXNpY2FsTmFtZScsICgpID0+IHtcbiAgY29uc3QgbG9uZ1BhcnRzID0gWyAuLi5wYXJ0cywgLi4ucGFydHMsIC4uLnBhcnRzLCAuLi5wYXJ0cywgLi4ucGFydHMgXTtcbiAgY29uc3QgcHJlZml4ID0gJy9hd3MvdmVuZGVkbG9ncy9zdGF0ZXMvY29uc3RydWN0cy8nO1xuICBjb25zdCBsZW5ndGhPZkd1aWQgPSAzNjtcbiAgY29uc3QgbWF4TmFtZUxlbmd0aCA9IDEyNTtcblxuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIGxvbmdQYXJ0cywgbWF4TmFtZUxlbmd0aCk7XG5cbiAgY29uc3QgZml4ZWRQb3J0aW9uID0gcmVzdWx0LnNwbGl0KCckJylbMF07XG4gIGV4cGVjdChmaXhlZFBvcnRpb24ubGVuZ3RoKS50b0VxdWFsKG1heE5hbWVMZW5ndGggLSBsZW5ndGhPZkd1aWQpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZScsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSgnaW50ZWcuYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVELmpzJyk7XG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbignYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVEJyk7XG5cbiAgY29uc3QgcmVzdWx0MSA9IGRlZmF1bHRzLmdlbmVyYXRlSW50ZWdTdGFja05hbWUoJ2ludGVnLm92ZXJyaWRlX2F1dGhfYXBpX2tleXMudHMnKTtcbiAgZXhwZWN0KHJlc3VsdDEpLnRvQ29udGFpbignb3ZlcnJpZGUtYXV0aC1hcGkta2V5cycpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBhbGwgYXJncycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGFyZzEgPSB7XG4gICAgdmFsMTogMTEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH07XG5cbiAgY29uc3QgYXJnMiA9IHtcbiAgICB2YWwxOiAyMSxcbiAgICB2YWwyOiAyMixcbiAgfTtcblxuICBjb25zdCBhcmczID0ge1xuICAgIHZhbDE6IDMxLFxuICB9O1xuXG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhhcmcxLCBhcmcyLCBhcmczKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2YWwxOiAzMSxcbiAgICB2YWwyOiAyMixcbiAgICB2YWwzOiAxMyxcbiAgfSk7XG5cbiAgZXhwZWN0KGNvbnNvbGVMb2dTcHkpLnRvQmVDYWxsZWRUaW1lcygyKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBmaXJzdCBhbmQgdGhpcmQgYXJncycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGFyZzEgPSB7XG4gICAgdmFsMTogMTEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH07XG5cbiAgY29uc3QgYXJnMyA9IHtcbiAgICB2YWwxOiAzMSxcbiAgfTtcblxuICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJyk7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoYXJnMSwgdW5kZWZpbmVkLCBhcmczKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2YWwxOiAzMSxcbiAgICB2YWwyOiAxMixcbiAgICB2YWwzOiAxMyxcbiAgfSk7XG5cbiAgZXhwZWN0KGNvbnNvbGVMb2dTcHkpLnRvQmVDYWxsZWRUaW1lcygwKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBmaXJzdCBhbmQgc2Vjb25kIGFyZ3MnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBhcmcxID0ge1xuICAgIHZhbDE6IDExLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9O1xuXG4gIGNvbnN0IGFyZzIgPSB7XG4gICAgdmFsMTogMjEsXG4gICAgdmFsMjogMjIsXG4gIH07XG5cbiAgY29uc3QgY29uc29sZUxvZ1NweSA9IGplc3Quc3B5T24oY29uc29sZSwgJ2xvZycpO1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGFyZzEsIGFyZzIpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZhbDE6IDIxLFxuICAgIHZhbDI6IDIyLFxuICAgIHZhbDM6IDEzLFxuICB9KTtcblxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDIpO1xuXG59KTtcblxudGVzdCgnVGVzdCBjb25zb2xpZGF0ZSBwcm9wcyB3aXRoIG9uZSBhcmcnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBhcmcxID0ge1xuICAgIHZhbDE6IDExLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9O1xuXG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhhcmcxKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGFyZzEpO1xuXG4gIGV4cGVjdChjb25zb2xlTG9nU3B5KS50b0JlQ2FsbGVkVGltZXMoMCk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlTmFtZSBzdW5ueSBkYXkgZm9yIGN1cnJlbnQgY29uc3RydWN0IHdpdGggdW5kZWZpbmVkIG5hbWUgYXJndW1lbnQnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG5cbiAgY29uc3QgbmV3TmFtZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFjayk7XG4gIC8vIDUgaXMgbm90IHNwZWNpZmljLCBqdXN0IGNoZWNraW5nIHRoZSBuYW1lIGlzIHNldmVyYWwgY2hhcmFjdGVycyBsb25nZXIgdGhhbiBqdXN0IGEgQ1IvTEZcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNSk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgc3VubnkgZGF5IGZvciBjdXJyZW50IGNvbnN0cnVjdCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcblxuICBjb25zdCBuZXdOYW1lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrLCBcIlwiKTtcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNSk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgc3VubnkgZGF5IGZvciBjaGlsZCBjb25zdHJ1Y3QnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG5cbiAgY29uc3QgbmV3TmFtZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFjaywgXCJjaGlsZFwiKTtcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNSk7XG4gIGV4cGVjdChuZXdOYW1lLmluY2x1ZGVzKG5ld05hbWUpKS50b0JlKHRydWUpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVOYW1lIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG4gIGNvbnN0IHNldmVudHlDaGFyYWN0ZXJOYW1lID0gJzEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0nO1xuICBjb25zdCBuZXdOYW1lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrLCBzZXZlbnR5Q2hhcmFjdGVyTmFtZSk7XG4gIGV4cGVjdChuZXdOYW1lLmxlbmd0aCkudG9FcXVhbCg2NCk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgdW5pcXVlbmVzcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2tPbmUgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcbiAgY29uc3Qgc3RhY2tUd28gPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJvdGhlci1pZFwiKTtcblxuICBjb25zdCBuYW1lT25lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrT25lLCBcIlwiKTtcbiAgY29uc3QgbmFtZVR3byA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFja1R3bywgXCJcIik7XG4gIGV4cGVjdChuYW1lT25lID09PSBuYW1lVHdvKS50b0JlKGZhbHNlKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHN1Y2Nlc3NmdWwgQ2hlY2tMaXN0VmFsdWVzJywgKCkgPT4ge1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0xpc3RWYWx1ZXMoWydvbmUnLCAndHdvJywgJ2ZvdXInXSwgWydmb3VyJywgJ29uZSddLCAndGVzdCB2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS5ub3QudG9UaHJvd0Vycm9yKCk7XG59KTtcblxudGVzdCgnVGVzdCBmYWlsIE9wZW5TZWFyY2ggaW1wcm9wZXIgdnBjIHNwZWNpZmljYXRpb24nLCAoKSA9PiB7XG5cbiAgY29uc3QgcHJvcHM6IGRlZmF1bHRzLk9wZW5TZWFyY2hQcm9wcyA9IHtcbiAgICBvcGVuU2VhcmNoRG9tYWluUHJvcHM6IHtcbiAgICAgIHZwY09wdGlvbnM6IHt9XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tPcGVuU2VhcmNoUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0Vycm9yIC0gRGVmaW5lIFZQQyB1c2luZyBjb25zdHJ1Y3QgcGFyYW1ldGVycyBub3QgdGhlIE9wZW5TZWFyY2ggU2VydmljZSBwcm9wc1xcbicpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgdW5zdWNjZXNzZnVsIENoZWNrTGlzdFZhbHVlcycsICgpID0+IHtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tMaXN0VmFsdWVzKFsnb25lJywgJ3R3bycsICdmb3VyJ10sIFsnZm91cicsICd0aHJlZSddLCAndGVzdCB2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0ludmFsaWQgdGVzdCB2YWx1ZSBzdWJtaXR0ZWQgLSB0aHJlZScpO1xufSk7XG5cbnRlc3QoJ0NvbnNvbGlkYXRlUHJvcHMgZG9lcyBub3QgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIGNvbnN0cnVjdCBwcm9wcyBvdmVycmlkZXMnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsMTogJ29uZSdcbiAgfTtcblxuICBjb25zdCBjbGllbnRQcm9wcyA9IHtcbiAgICB2YWwxOiAndHdvJyxcbiAgICB2YWwyOiAndGhyZWUnXG4gIH07XG5cbiAgY29uc3QgY29uc3RydWN0UHJvcHMgPSB7XG4gICAgdmFsMjogJ2ZvdXInXG4gIH07XG5cbiAgY29uc3QgY29uc29sZUxvZ1NweSA9IGplc3Quc3B5T24oY29uc29sZSwgJ2xvZycpO1xuICBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGRlZmF1bHRQcm9wcywgY2xpZW50UHJvcHMsICBjb25zdHJ1Y3RQcm9wcyk7XG5cbiAgLy8gQXNzZXJ0XG4gIGV4cGVjdChjb25zb2xlTG9nU3B5KS50b0JlQ2FsbGVkVGltZXMoMSk7XG5cbn0pO1xuXG50ZXN0KCdDaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCcsICgpID0+IHtcbiAgbGV0IHJlc3BvbnNlO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodW5kZWZpbmVkLCB0cnVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHRydWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodW5kZWZpbmVkLCBmYWxzZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShmYWxzZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCh0cnVlLCB0cnVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHRydWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodHJ1ZSwgZmFsc2UpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUodHJ1ZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdChmYWxzZSwgdHJ1ZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShmYWxzZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdChmYWxzZSwgZmFsc2UpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUoZmFsc2UpO1xufSk7XG5cbnRlc3QoJ0NoZWNrU3RyaW5nV2l0aERlZmF1bHQnLCAoKSA9PiB7XG4gIGxldCByZXNwb25zZTtcbiAgY29uc3QgdmFsdWUgPSAndGVzdFZhbHVlJztcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gJ2RlZmF1bHQnO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tTdHJpbmdXaXRoRGVmYXVsdCh1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShkZWZhdWx0VmFsdWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tTdHJpbmdXaXRoRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHZhbHVlKTtcblxufSk7XG5cbnRlc3QoJ3Rlc3QgYWRkQ2ZuR3VhcmRTdXBwcmVzc1J1bGVzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IHRlc3RCdWNrZXQgPSBuZXcgczMuQnVja2V0KHN0YWNrLCAndGVzdC1idWNrZXQnKTtcbiAgZGVmYXVsdHMuYWRkQ2ZuR3VhcmRTdXBwcmVzc1J1bGVzKHRlc3RCdWNrZXQsIFtcIkFEREVEX1RPX0JVQ0tFVFwiXSk7XG4gIGRlZmF1bHRzLmFkZENmbkd1YXJkU3VwcHJlc3NSdWxlcyh0ZXN0QnVja2V0Lm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIENmblJlc291cmNlLCBbXCJBRERFRF9UT19DRk5fUkVTT1VSQ0VcIl0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgY29uc3QgYnVja2V0ID0gdGVtcGxhdGUuZmluZFJlc291cmNlcyhcIkFXUzo6UzM6OkJ1Y2tldFwiKTtcbiAgZXhwZWN0KGJ1Y2tldC50ZXN0YnVja2V0RTZFMDVBQkUuTWV0YWRhdGEuZ3VhcmQuU3VwcHJlc3NlZFJ1bGVzWzBdKS50b0VxdWFsKFwiQURERURfVE9fQlVDS0VUXCIpO1xuICBleHBlY3QoYnVja2V0LnRlc3RidWNrZXRFNkUwNUFCRS5NZXRhZGF0YS5ndWFyZC5TdXBwcmVzc2VkUnVsZXNbMV0pLnRvRXF1YWwoXCJBRERFRF9UT19DRk5fUkVTT1VSQ0VcIik7XG59KTtcblxudGVzdCgnVGVzdCByZW1vdmVOb25BbHBoYW51bWVyaWMnLCAoKSA9PiB7XG4gIGNvbnN0IHNvdXJjZSA9ICdcXFxcdGhpcyYmaXMlYSNzdHJpbmdnQCc7XG4gIGNvbnN0IGRlc2lyZWRSZXN1bHQgPSAndGhpc2lzYXN0cmluZ2cnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLnJlbW92ZU5vbkFscGhhbnVtZXJpYyhzb3VyY2UpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZGVzaXJlZFJlc3VsdCk7XG5cbn0pO1xuIl19
|
package/.eslintignore
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
declare namespace ansiRegex {
|
|
2
|
-
interface Options {
|
|
3
|
-
/**
|
|
4
|
-
Match only the first ANSI escape.
|
|
5
|
-
|
|
6
|
-
@default false
|
|
7
|
-
*/
|
|
8
|
-
onlyFirst: boolean;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
Regular expression for matching ANSI escape codes.
|
|
14
|
-
|
|
15
|
-
@example
|
|
16
|
-
```
|
|
17
|
-
import ansiRegex = require('ansi-regex');
|
|
18
|
-
|
|
19
|
-
ansiRegex().test('\u001B[4mcake\u001B[0m');
|
|
20
|
-
//=> true
|
|
21
|
-
|
|
22
|
-
ansiRegex().test('cake');
|
|
23
|
-
//=> false
|
|
24
|
-
|
|
25
|
-
'\u001B[4mcake\u001B[0m'.match(ansiRegex());
|
|
26
|
-
//=> ['\u001B[4m', '\u001B[0m']
|
|
27
|
-
|
|
28
|
-
'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
|
|
29
|
-
//=> ['\u001B[4m']
|
|
30
|
-
|
|
31
|
-
'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
|
|
32
|
-
//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
|
|
33
|
-
```
|
|
34
|
-
*/
|
|
35
|
-
declare function ansiRegex(options?: ansiRegex.Options): RegExp;
|
|
36
|
-
|
|
37
|
-
export = ansiRegex;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
module.exports = ({onlyFirst = false} = {}) => {
|
|
4
|
-
const pattern = [
|
|
5
|
-
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
|
6
|
-
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
|
7
|
-
].join('|');
|
|
8
|
-
|
|
9
|
-
return new RegExp(pattern, onlyFirst ? undefined : 'g');
|
|
10
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
-
|
|
7
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
-
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ansi-regex",
|
|
3
|
-
"version": "5.0.1",
|
|
4
|
-
"description": "Regular expression for matching ANSI escape codes",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"repository": "chalk/ansi-regex",
|
|
7
|
-
"author": {
|
|
8
|
-
"name": "Sindre Sorhus",
|
|
9
|
-
"email": "sindresorhus@gmail.com",
|
|
10
|
-
"url": "sindresorhus.com"
|
|
11
|
-
},
|
|
12
|
-
"engines": {
|
|
13
|
-
"node": ">=8"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"test": "xo && ava && tsd",
|
|
17
|
-
"view-supported": "node fixtures/view-codes.js"
|
|
18
|
-
},
|
|
19
|
-
"files": [
|
|
20
|
-
"index.js",
|
|
21
|
-
"index.d.ts"
|
|
22
|
-
],
|
|
23
|
-
"keywords": [
|
|
24
|
-
"ansi",
|
|
25
|
-
"styles",
|
|
26
|
-
"color",
|
|
27
|
-
"colour",
|
|
28
|
-
"colors",
|
|
29
|
-
"terminal",
|
|
30
|
-
"console",
|
|
31
|
-
"cli",
|
|
32
|
-
"string",
|
|
33
|
-
"tty",
|
|
34
|
-
"escape",
|
|
35
|
-
"formatting",
|
|
36
|
-
"rgb",
|
|
37
|
-
"256",
|
|
38
|
-
"shell",
|
|
39
|
-
"xterm",
|
|
40
|
-
"command-line",
|
|
41
|
-
"text",
|
|
42
|
-
"regex",
|
|
43
|
-
"regexp",
|
|
44
|
-
"re",
|
|
45
|
-
"match",
|
|
46
|
-
"test",
|
|
47
|
-
"find",
|
|
48
|
-
"pattern"
|
|
49
|
-
],
|
|
50
|
-
"devDependencies": {
|
|
51
|
-
"ava": "^2.4.0",
|
|
52
|
-
"tsd": "^0.9.0",
|
|
53
|
-
"xo": "^0.25.3"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# ansi-regex
|
|
2
|
-
|
|
3
|
-
> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## Install
|
|
7
|
-
|
|
8
|
-
```
|
|
9
|
-
$ npm install ansi-regex
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## Usage
|
|
14
|
-
|
|
15
|
-
```js
|
|
16
|
-
const ansiRegex = require('ansi-regex');
|
|
17
|
-
|
|
18
|
-
ansiRegex().test('\u001B[4mcake\u001B[0m');
|
|
19
|
-
//=> true
|
|
20
|
-
|
|
21
|
-
ansiRegex().test('cake');
|
|
22
|
-
//=> false
|
|
23
|
-
|
|
24
|
-
'\u001B[4mcake\u001B[0m'.match(ansiRegex());
|
|
25
|
-
//=> ['\u001B[4m', '\u001B[0m']
|
|
26
|
-
|
|
27
|
-
'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
|
|
28
|
-
//=> ['\u001B[4m']
|
|
29
|
-
|
|
30
|
-
'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
|
|
31
|
-
//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## API
|
|
36
|
-
|
|
37
|
-
### ansiRegex(options?)
|
|
38
|
-
|
|
39
|
-
Returns a regex for matching ANSI escape codes.
|
|
40
|
-
|
|
41
|
-
#### options
|
|
42
|
-
|
|
43
|
-
Type: `object`
|
|
44
|
-
|
|
45
|
-
##### onlyFirst
|
|
46
|
-
|
|
47
|
-
Type: `boolean`<br>
|
|
48
|
-
Default: `false` *(Matches any ANSI escape codes in a string)*
|
|
49
|
-
|
|
50
|
-
Match only the first ANSI escape.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
## FAQ
|
|
54
|
-
|
|
55
|
-
### Why do you test for codes not in the ECMA 48 standard?
|
|
56
|
-
|
|
57
|
-
Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
|
|
58
|
-
|
|
59
|
-
On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
## Maintainers
|
|
63
|
-
|
|
64
|
-
- [Sindre Sorhus](https://github.com/sindresorhus)
|
|
65
|
-
- [Josh Junon](https://github.com/qix-)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
<div align="center">
|
|
71
|
-
<b>
|
|
72
|
-
<a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
|
|
73
|
-
</b>
|
|
74
|
-
<br>
|
|
75
|
-
<sub>
|
|
76
|
-
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
|
|
77
|
-
</sub>
|
|
78
|
-
</div>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Copyright (c) 2015, Rebecca Turner <me@re-becca.org>
|
|
2
|
-
|
|
3
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
4
|
-
purpose with or without fee is hereby granted, provided that the above
|
|
5
|
-
copyright notice and this permission notice appear in all copies.
|
|
6
|
-
|
|
7
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
8
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
9
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
10
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
11
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
12
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
13
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
14
|
-
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
aproba
|
|
2
|
-
======
|
|
3
|
-
|
|
4
|
-
A ridiculously light-weight function argument validator
|
|
5
|
-
|
|
6
|
-
```
|
|
7
|
-
var validate = require("aproba")
|
|
8
|
-
|
|
9
|
-
function myfunc(a, b, c) {
|
|
10
|
-
// `a` must be a string, `b` a number, `c` a function
|
|
11
|
-
validate('SNF', arguments) // [a,b,c] is also valid
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
myfunc('test', 23, function () {}) // ok
|
|
15
|
-
myfunc(123, 23, function () {}) // type error
|
|
16
|
-
myfunc('test', 23) // missing arg error
|
|
17
|
-
myfunc('test', 23, function () {}, true) // too many args error
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Valid types are:
|
|
22
|
-
|
|
23
|
-
| type | description
|
|
24
|
-
| :--: | :----------
|
|
25
|
-
| * | matches any type
|
|
26
|
-
| A | `Array.isArray` OR an `arguments` object
|
|
27
|
-
| S | typeof == string
|
|
28
|
-
| N | typeof == number
|
|
29
|
-
| F | typeof == function
|
|
30
|
-
| O | typeof == object and not type A and not type E
|
|
31
|
-
| B | typeof == boolean
|
|
32
|
-
| E | `instanceof Error` OR `null` **(special: see below)**
|
|
33
|
-
| Z | == `null`
|
|
34
|
-
|
|
35
|
-
Validation failures throw one of three exception types, distinguished by a
|
|
36
|
-
`code` property of `EMISSINGARG`, `EINVALIDTYPE` or `ETOOMANYARGS`.
|
|
37
|
-
|
|
38
|
-
If you pass in an invalid type then it will throw with a code of
|
|
39
|
-
`EUNKNOWNTYPE`.
|
|
40
|
-
|
|
41
|
-
If an **error** argument is found and is not null then the remaining
|
|
42
|
-
arguments are optional. That is, if you say `ESO` then that's like using a
|
|
43
|
-
non-magical `E` in: `E|ESO|ZSO`.
|
|
44
|
-
|
|
45
|
-
### But I have optional arguments?!
|
|
46
|
-
|
|
47
|
-
You can provide more than one signature by separating them with pipes `|`.
|
|
48
|
-
If any signature matches the arguments then they'll be considered valid.
|
|
49
|
-
|
|
50
|
-
So for example, say you wanted to write a signature for
|
|
51
|
-
`fs.createWriteStream`. The docs for it describe it thusly:
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
fs.createWriteStream(path[, options])
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
This would be a signature of `SO|S`. That is, a string and and object, or
|
|
58
|
-
just a string.
|
|
59
|
-
|
|
60
|
-
Now, if you read the full `fs` docs, you'll see that actually path can ALSO
|
|
61
|
-
be a buffer. And options can be a string, that is:
|
|
62
|
-
```
|
|
63
|
-
path <String> | <Buffer>
|
|
64
|
-
options <String> | <Object>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
To reproduce this you have to fully enumerate all of the possible
|
|
68
|
-
combinations and that implies a signature of `SO|SS|OO|OS|S|O`. The
|
|
69
|
-
awkwardness is a feature: It reminds you of the complexity you're adding to
|
|
70
|
-
your API when you do this sort of thing.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
### Browser support
|
|
74
|
-
|
|
75
|
-
This has no dependencies and should work in browsers, though you'll have
|
|
76
|
-
noisier stack traces.
|
|
77
|
-
|
|
78
|
-
### Why this exists
|
|
79
|
-
|
|
80
|
-
I wanted a very simple argument validator. It needed to do two things:
|
|
81
|
-
|
|
82
|
-
1. Be more concise and easier to use than assertions
|
|
83
|
-
|
|
84
|
-
2. Not encourage an infinite bikeshed of DSLs
|
|
85
|
-
|
|
86
|
-
This is why types are specified by a single character and there's no such
|
|
87
|
-
thing as an optional argument.
|
|
88
|
-
|
|
89
|
-
This is not intended to validate user data. This is specifically about
|
|
90
|
-
asserting the interface of your functions.
|
|
91
|
-
|
|
92
|
-
If you need greater validation, I encourage you to write them by hand or
|
|
93
|
-
look elsewhere.
|
|
94
|
-
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
module.exports = validate
|
|
3
|
-
|
|
4
|
-
function isArguments (thingy) {
|
|
5
|
-
return thingy != null && typeof thingy === 'object' && thingy.hasOwnProperty('callee')
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
const types = {
|
|
9
|
-
'*': {label: 'any', check: () => true},
|
|
10
|
-
A: {label: 'array', check: _ => Array.isArray(_) || isArguments(_)},
|
|
11
|
-
S: {label: 'string', check: _ => typeof _ === 'string'},
|
|
12
|
-
N: {label: 'number', check: _ => typeof _ === 'number'},
|
|
13
|
-
F: {label: 'function', check: _ => typeof _ === 'function'},
|
|
14
|
-
O: {label: 'object', check: _ => typeof _ === 'object' && _ != null && !types.A.check(_) && !types.E.check(_)},
|
|
15
|
-
B: {label: 'boolean', check: _ => typeof _ === 'boolean'},
|
|
16
|
-
E: {label: 'error', check: _ => _ instanceof Error},
|
|
17
|
-
Z: {label: 'null', check: _ => _ == null}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function addSchema (schema, arity) {
|
|
21
|
-
const group = arity[schema.length] = arity[schema.length] || []
|
|
22
|
-
if (group.indexOf(schema) === -1) group.push(schema)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function validate (rawSchemas, args) {
|
|
26
|
-
if (arguments.length !== 2) throw wrongNumberOfArgs(['SA'], arguments.length)
|
|
27
|
-
if (!rawSchemas) throw missingRequiredArg(0, 'rawSchemas')
|
|
28
|
-
if (!args) throw missingRequiredArg(1, 'args')
|
|
29
|
-
if (!types.S.check(rawSchemas)) throw invalidType(0, ['string'], rawSchemas)
|
|
30
|
-
if (!types.A.check(args)) throw invalidType(1, ['array'], args)
|
|
31
|
-
const schemas = rawSchemas.split('|')
|
|
32
|
-
const arity = {}
|
|
33
|
-
|
|
34
|
-
schemas.forEach(schema => {
|
|
35
|
-
for (let ii = 0; ii < schema.length; ++ii) {
|
|
36
|
-
const type = schema[ii]
|
|
37
|
-
if (!types[type]) throw unknownType(ii, type)
|
|
38
|
-
}
|
|
39
|
-
if (/E.*E/.test(schema)) throw moreThanOneError(schema)
|
|
40
|
-
addSchema(schema, arity)
|
|
41
|
-
if (/E/.test(schema)) {
|
|
42
|
-
addSchema(schema.replace(/E.*$/, 'E'), arity)
|
|
43
|
-
addSchema(schema.replace(/E/, 'Z'), arity)
|
|
44
|
-
if (schema.length === 1) addSchema('', arity)
|
|
45
|
-
}
|
|
46
|
-
})
|
|
47
|
-
let matching = arity[args.length]
|
|
48
|
-
if (!matching) {
|
|
49
|
-
throw wrongNumberOfArgs(Object.keys(arity), args.length)
|
|
50
|
-
}
|
|
51
|
-
for (let ii = 0; ii < args.length; ++ii) {
|
|
52
|
-
let newMatching = matching.filter(schema => {
|
|
53
|
-
const type = schema[ii]
|
|
54
|
-
const typeCheck = types[type].check
|
|
55
|
-
return typeCheck(args[ii])
|
|
56
|
-
})
|
|
57
|
-
if (!newMatching.length) {
|
|
58
|
-
const labels = matching.map(_ => types[_[ii]].label).filter(_ => _ != null)
|
|
59
|
-
throw invalidType(ii, labels, args[ii])
|
|
60
|
-
}
|
|
61
|
-
matching = newMatching
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function missingRequiredArg (num) {
|
|
66
|
-
return newException('EMISSINGARG', 'Missing required argument #' + (num + 1))
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function unknownType (num, type) {
|
|
70
|
-
return newException('EUNKNOWNTYPE', 'Unknown type ' + type + ' in argument #' + (num + 1))
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function invalidType (num, expectedTypes, value) {
|
|
74
|
-
let valueType
|
|
75
|
-
Object.keys(types).forEach(typeCode => {
|
|
76
|
-
if (types[typeCode].check(value)) valueType = types[typeCode].label
|
|
77
|
-
})
|
|
78
|
-
return newException('EINVALIDTYPE', 'Argument #' + (num + 1) + ': Expected ' +
|
|
79
|
-
englishList(expectedTypes) + ' but got ' + valueType)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function englishList (list) {
|
|
83
|
-
return list.join(', ').replace(/, ([^,]+)$/, ' or $1')
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function wrongNumberOfArgs (expected, got) {
|
|
87
|
-
const english = englishList(expected)
|
|
88
|
-
const args = expected.every(ex => ex.length === 1)
|
|
89
|
-
? 'argument'
|
|
90
|
-
: 'arguments'
|
|
91
|
-
return newException('EWRONGARGCOUNT', 'Expected ' + english + ' ' + args + ' but got ' + got)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function moreThanOneError (schema) {
|
|
95
|
-
return newException('ETOOMANYERRORTYPES',
|
|
96
|
-
'Only one error type per argument signature is allowed, more than one found in "' + schema + '"')
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function newException (code, msg) {
|
|
100
|
-
const err = new Error(msg)
|
|
101
|
-
err.code = code
|
|
102
|
-
/* istanbul ignore else */
|
|
103
|
-
if (Error.captureStackTrace) Error.captureStackTrace(err, validate)
|
|
104
|
-
return err
|
|
105
|
-
}
|