1 | /**
|
2 | * @license
|
3 | * Copyright Google LLC All Rights Reserved.
|
4 | *
|
5 | * Use of this source code is governed by an MIT-style license that can be
|
6 | * found in the LICENSE file at https://angular.io/license
|
7 | */
|
8 | (function (factory) {
|
9 | if (typeof module === "object" && typeof module.exports === "object") {
|
10 | var v = factory(require, exports);
|
11 | if (v !== undefined) module.exports = v;
|
12 | }
|
13 | else if (typeof define === "function" && define.amd) {
|
14 | define("@angular/language-service/src/diagnostic_messages", ["require", "exports", "typescript"], factory);
|
15 | }
|
16 | })(function (require, exports) {
|
17 | ;
|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
19 | exports.createDiagnostic = exports.Diagnostic = void 0;
|
20 | var ts = require("typescript");
|
21 | exports.Diagnostic = {
|
22 | directive_not_in_module: {
|
23 | message: "%1 '%2' is not included in a module and will not be available inside a template. Consider adding it to a NgModule declaration.",
|
24 | kind: 'Suggestion',
|
25 | },
|
26 | missing_template_and_templateurl: {
|
27 | message: "Component '%1' must have a template or templateUrl",
|
28 | kind: 'Error',
|
29 | },
|
30 | both_template_and_templateurl: {
|
31 | message: "Component '%1' must not have both template and templateUrl",
|
32 | kind: 'Error',
|
33 | },
|
34 | invalid_templateurl: {
|
35 | message: "URL does not point to a valid file",
|
36 | kind: 'Error',
|
37 | },
|
38 | template_context_missing_member: {
|
39 | message: "The template context of '%1' does not define %2.\n" +
|
40 | "If the context type is a base type or 'any', consider refining it to a more specific type.",
|
41 | kind: 'Suggestion',
|
42 | },
|
43 | callable_expression_expected_method_call: {
|
44 | message: 'Unexpected callable expression. Expected a method call',
|
45 | kind: 'Warning',
|
46 | },
|
47 | call_target_not_callable: {
|
48 | message: "Call target '%1' has non-callable type '%2'.",
|
49 | kind: 'Error',
|
50 | },
|
51 | expression_might_be_null: {
|
52 | message: 'The expression might be null',
|
53 | kind: 'Error',
|
54 | },
|
55 | expected_a_number_type: {
|
56 | message: 'Expected a number type',
|
57 | kind: 'Error',
|
58 | },
|
59 | expected_a_string_or_number_type: {
|
60 | message: 'Expected operands to be a string or number type',
|
61 | kind: 'Error',
|
62 | },
|
63 | expected_operands_of_comparable_types_or_any: {
|
64 | message: 'Expected operands to be of comparable types or any',
|
65 | kind: 'Error',
|
66 | },
|
67 | unrecognized_operator: {
|
68 | message: 'Unrecognized operator %1',
|
69 | kind: 'Error',
|
70 | },
|
71 | unrecognized_primitive: {
|
72 | message: 'Unrecognized primitive %1',
|
73 | kind: 'Error',
|
74 | },
|
75 | no_pipe_found: {
|
76 | message: 'No pipe of name %1 found',
|
77 | kind: 'Error',
|
78 | },
|
79 | // TODO: Consider a better error message here.
|
80 | unable_to_resolve_compatible_call_signature: {
|
81 | message: 'Unable to resolve compatible call signature',
|
82 | kind: 'Error',
|
83 | },
|
84 | unable_to_resolve_signature: {
|
85 | message: 'Unable to resolve signature for call of %1',
|
86 | kind: 'Error',
|
87 | },
|
88 | could_not_resolve_type: {
|
89 | message: "Could not resolve the type of '%1'",
|
90 | kind: 'Error',
|
91 | },
|
92 | identifier_not_callable: {
|
93 | message: "'%1' is not callable",
|
94 | kind: 'Error',
|
95 | },
|
96 | identifier_possibly_undefined: {
|
97 | message: "'%1' is possibly undefined. Consider using the safe navigation operator (%2) or non-null assertion operator (%3).",
|
98 | kind: 'Suggestion',
|
99 | },
|
100 | identifier_not_defined_in_app_context: {
|
101 | message: "Identifier '%1' is not defined. The component declaration, template variable declarations, and element references do not contain such a member",
|
102 | kind: 'Error',
|
103 | },
|
104 | identifier_not_defined_on_receiver: {
|
105 | message: "Identifier '%1' is not defined. '%2' does not contain such a member",
|
106 | kind: 'Error',
|
107 | },
|
108 | identifier_is_private: {
|
109 | message: "Identifier '%1' refers to a private member of %2",
|
110 | kind: 'Warning',
|
111 | },
|
112 | };
|
113 | /**
|
114 | * Creates a language service diagnostic.
|
115 | * @param span location the diagnostic for
|
116 | * @param dm diagnostic message
|
117 | * @param formatArgs run-time arguments to format the diagnostic message with (see the messages in
|
118 | * the `Diagnostic` object for an example).
|
119 | * @returns a created diagnostic
|
120 | */
|
121 | function createDiagnostic(span, dm) {
|
122 | var formatArgs = [];
|
123 | for (var _i = 2; _i < arguments.length; _i++) {
|
124 | formatArgs[_i - 2] = arguments[_i];
|
125 | }
|
126 | // Formats "%1 %2" with formatArgs ['a', 'b'] as "a b"
|
127 | var formattedMessage = dm.message.replace(/%(\d+)/g, function (_, index) { return formatArgs[+index - 1]; });
|
128 | return {
|
129 | kind: ts.DiagnosticCategory[dm.kind],
|
130 | message: formattedMessage,
|
131 | span: span,
|
132 | };
|
133 | }
|
134 | exports.createDiagnostic = createDiagnostic;
|
135 | });
|
136 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY19tZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2Uvc3JjL2RpYWdub3N0aWNfbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsK0JBQWlDO0lBa0JwQixRQUFBLFVBQVUsR0FBOEM7UUFDbkUsdUJBQXVCLEVBQUU7WUFDdkIsT0FBTyxFQUNILGdJQUFnSTtZQUNwSSxJQUFJLEVBQUUsWUFBWTtTQUNuQjtRQUVELGdDQUFnQyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxvREFBb0Q7WUFDN0QsSUFBSSxFQUFFLE9BQU87U0FDZDtRQUVELDZCQUE2QixFQUFFO1lBQzdCLE9BQU8sRUFBRSw0REFBNEQ7WUFDckUsSUFBSSxFQUFFLE9BQU87U0FDZDtRQUVELG1CQUFtQixFQUFFO1lBQ25CLE9BQU8sRUFBRSxvQ0FBb0M7WUFDN0MsSUFBSSxFQUFFLE9BQU87U0FDZDtRQUVELCtCQUErQixFQUFFO1lBQy9CLE9BQU8sRUFBRSxvREFBb0Q7Z0JBQ3pELDRGQUE0RjtZQUNoRyxJQUFJLEVBQUUsWUFBWTtTQUNuQjtRQUVELHdDQUF3QyxFQUFFO1lBQ3hDLE9BQU8sRUFBRSx3REFBd0Q7WUFDakUsSUFBSSxFQUFFLFNBQVM7U0FDaEI7UUFFRCx3QkFBd0IsRUFBRTtZQUN4QixPQUFPLEVBQUUsOENBQThDO1lBQ3ZELElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCx3QkFBd0IsRUFBRTtZQUN4QixPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCxzQkFBc0IsRUFBRTtZQUN0QixPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCxnQ0FBZ0MsRUFBRTtZQUNoQyxPQUFPLEVBQUUsaURBQWlEO1lBQzFELElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCw0Q0FBNEMsRUFBRTtZQUM1QyxPQUFPLEVBQUUsb0RBQW9EO1lBQzdELElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCxxQkFBcUIsRUFBRTtZQUNyQixPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCxzQkFBc0IsRUFBRTtZQUN0QixPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCxhQUFhLEVBQUU7WUFDYixPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFFRCw4Q0FBOEM7UUFDOUMsMkNBQTJDLEVBQUU7WUFDM0MsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxJQUFJLEVBQUUsT0FBTztTQUNkO1FBRUQsMkJBQTJCLEVBQUU7WUFDM0IsT0FBTyxFQUFFLDRDQUE0QztZQUNyRCxJQUFJLEVBQUUsT0FBTztTQUNkO1FBRUQsc0JBQXNCLEVBQUU7WUFDdEIsT0FBTyxFQUFFLG9DQUFvQztZQUM3QyxJQUFJLEVBQUUsT0FBTztTQUNkO1FBRUQsdUJBQXVCLEVBQUU7WUFDdkIsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixJQUFJLEVBQUUsT0FBTztTQUNkO1FBRUQsNkJBQTZCLEVBQUU7WUFDN0IsT0FBTyxFQUNILG1IQUFtSDtZQUN2SCxJQUFJLEVBQUUsWUFBWTtTQUNuQjtRQUVELHFDQUFxQyxFQUFFO1lBQ3JDLE9BQU8sRUFDSCxnSkFBZ0o7WUFDcEosSUFBSSxFQUFFLE9BQU87U0FDZDtRQUVELGtDQUFrQyxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxxRUFBcUU7WUFDOUUsSUFBSSxFQUFFLE9BQU87U0FDZDtRQUVELHFCQUFxQixFQUFFO1lBQ3JCLE9BQU8sRUFBRSxrREFBa0Q7WUFDM0QsSUFBSSxFQUFFLFNBQVM7U0FDaEI7S0FDRixDQUFDO0lBRUY7Ozs7Ozs7T0FPRztJQUNILFNBQWdCLGdCQUFnQixDQUM1QixJQUFhLEVBQUUsRUFBcUI7UUFBRSxvQkFBdUI7YUFBdkIsVUFBdUIsRUFBdkIscUJBQXVCLEVBQXZCLElBQXVCO1lBQXZCLG1DQUF1Qjs7UUFDL0Qsc0RBQXNEO1FBQ3RELElBQU0sZ0JBQWdCLEdBQ2xCLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFDLENBQUMsRUFBRSxLQUFhLElBQUssT0FBQSxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQXRCLENBQXNCLENBQUMsQ0FBQztRQUNoRixPQUFPO1lBQ0wsSUFBSSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsSUFBSSxNQUFBO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFWRCw0Q0FVQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCAqIGFzIG5nIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3N0aWNNZXNzYWdlIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBraW5kOiBrZXlvZiB0eXBlb2YgdHMuRGlhZ25vc3RpY0NhdGVnb3J5O1xufVxuXG50eXBlIERpYWdub3N0aWNOYW1lID0gJ2RpcmVjdGl2ZV9ub3RfaW5fbW9kdWxlJ3wnbWlzc2luZ190ZW1wbGF0ZV9hbmRfdGVtcGxhdGV1cmwnfFxuICAgICdib3RoX3RlbXBsYXRlX2FuZF90ZW1wbGF0ZXVybCd8J2ludmFsaWRfdGVtcGxhdGV1cmwnfCd0ZW1wbGF0ZV9jb250ZXh0X21pc3NpbmdfbWVtYmVyJ3xcbiAgICAnY2FsbGFibGVfZXhwcmVzc2lvbl9leHBlY3RlZF9tZXRob2RfY2FsbCd8J2NhbGxfdGFyZ2V0X25vdF9jYWxsYWJsZSd8XG4gICAgJ2V4cHJlc3Npb25fbWlnaHRfYmVfbnVsbCd8J2V4cGVjdGVkX2FfbnVtYmVyX3R5cGUnfCdleHBlY3RlZF9hX3N0cmluZ19vcl9udW1iZXJfdHlwZSd8XG4gICAgJ2V4cGVjdGVkX29wZXJhbmRzX29mX2NvbXBhcmFibGVfdHlwZXNfb3JfYW55J3wndW5yZWNvZ25pemVkX29wZXJhdG9yJ3wndW5yZWNvZ25pemVkX3ByaW1pdGl2ZSd8XG4gICAgJ25vX3BpcGVfZm91bmQnfCd1bmFibGVfdG9fcmVzb2x2ZV9jb21wYXRpYmxlX2NhbGxfc2lnbmF0dXJlJ3wndW5hYmxlX3RvX3Jlc29sdmVfc2lnbmF0dXJlJ3xcbiAgICAnY291bGRfbm90X3Jlc29sdmVfdHlwZSd8J2lkZW50aWZpZXJfbm90X2NhbGxhYmxlJ3wnaWRlbnRpZmllcl9wb3NzaWJseV91bmRlZmluZWQnfFxuICAgICdpZGVudGlmaWVyX25vdF9kZWZpbmVkX2luX2FwcF9jb250ZXh0J3wnaWRlbnRpZmllcl9ub3RfZGVmaW5lZF9vbl9yZWNlaXZlcid8XG4gICAgJ2lkZW50aWZpZXJfaXNfcHJpdmF0ZSc7XG5cbmV4cG9ydCBjb25zdCBEaWFnbm9zdGljOiBSZWNvcmQ8RGlhZ25vc3RpY05hbWUsIERpYWdub3N0aWNNZXNzYWdlPiA9IHtcbiAgZGlyZWN0aXZlX25vdF9pbl9tb2R1bGU6IHtcbiAgICBtZXNzYWdlOlxuICAgICAgICBgJTEgJyUyJyBpcyBub3QgaW5jbHVkZWQgaW4gYSBtb2R1bGUgYW5kIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbnNpZGUgYSB0ZW1wbGF0ZS4gQ29uc2lkZXIgYWRkaW5nIGl0IHRvIGEgTmdNb2R1bGUgZGVjbGFyYXRpb24uYCxcbiAgICBraW5kOiAnU3VnZ2VzdGlvbicsXG4gIH0sXG5cbiAgbWlzc2luZ190ZW1wbGF0ZV9hbmRfdGVtcGxhdGV1cmw6IHtcbiAgICBtZXNzYWdlOiBgQ29tcG9uZW50ICclMScgbXVzdCBoYXZlIGEgdGVtcGxhdGUgb3IgdGVtcGxhdGVVcmxgLFxuICAgIGtpbmQ6ICdFcnJvcicsXG4gIH0sXG5cbiAgYm90aF90ZW1wbGF0ZV9hbmRfdGVtcGxhdGV1cmw6IHtcbiAgICBtZXNzYWdlOiBgQ29tcG9uZW50ICclMScgbXVzdCBub3QgaGF2ZSBib3RoIHRlbXBsYXRlIGFuZCB0ZW1wbGF0ZVVybGAsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBpbnZhbGlkX3RlbXBsYXRldXJsOiB7XG4gICAgbWVzc2FnZTogYFVSTCBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGZpbGVgLFxuICAgIGtpbmQ6ICdFcnJvcicsXG4gIH0sXG5cbiAgdGVtcGxhdGVfY29udGV4dF9taXNzaW5nX21lbWJlcjoge1xuICAgIG1lc3NhZ2U6IGBUaGUgdGVtcGxhdGUgY29udGV4dCBvZiAnJTEnIGRvZXMgbm90IGRlZmluZSAlMi5cXG5gICtcbiAgICAgICAgYElmIHRoZSBjb250ZXh0IHR5cGUgaXMgYSBiYXNlIHR5cGUgb3IgJ2FueScsIGNvbnNpZGVyIHJlZmluaW5nIGl0IHRvIGEgbW9yZSBzcGVjaWZpYyB0eXBlLmAsXG4gICAga2luZDogJ1N1Z2dlc3Rpb24nLFxuICB9LFxuXG4gIGNhbGxhYmxlX2V4cHJlc3Npb25fZXhwZWN0ZWRfbWV0aG9kX2NhbGw6IHtcbiAgICBtZXNzYWdlOiAnVW5leHBlY3RlZCBjYWxsYWJsZSBleHByZXNzaW9uLiBFeHBlY3RlZCBhIG1ldGhvZCBjYWxsJyxcbiAgICBraW5kOiAnV2FybmluZycsXG4gIH0sXG5cbiAgY2FsbF90YXJnZXRfbm90X2NhbGxhYmxlOiB7XG4gICAgbWVzc2FnZTogYENhbGwgdGFyZ2V0ICclMScgaGFzIG5vbi1jYWxsYWJsZSB0eXBlICclMicuYCxcbiAgICBraW5kOiAnRXJyb3InLFxuICB9LFxuXG4gIGV4cHJlc3Npb25fbWlnaHRfYmVfbnVsbDoge1xuICAgIG1lc3NhZ2U6ICdUaGUgZXhwcmVzc2lvbiBtaWdodCBiZSBudWxsJyxcbiAgICBraW5kOiAnRXJyb3InLFxuICB9LFxuXG4gIGV4cGVjdGVkX2FfbnVtYmVyX3R5cGU6IHtcbiAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYSBudW1iZXIgdHlwZScsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBleHBlY3RlZF9hX3N0cmluZ19vcl9udW1iZXJfdHlwZToge1xuICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBvcGVyYW5kcyB0byBiZSBhIHN0cmluZyBvciBudW1iZXIgdHlwZScsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBleHBlY3RlZF9vcGVyYW5kc19vZl9jb21wYXJhYmxlX3R5cGVzX29yX2FueToge1xuICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBvcGVyYW5kcyB0byBiZSBvZiBjb21wYXJhYmxlIHR5cGVzIG9yIGFueScsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICB1bnJlY29nbml6ZWRfb3BlcmF0b3I6IHtcbiAgICBtZXNzYWdlOiAnVW5yZWNvZ25pemVkIG9wZXJhdG9yICUxJyxcbiAgICBraW5kOiAnRXJyb3InLFxuICB9LFxuXG4gIHVucmVjb2duaXplZF9wcmltaXRpdmU6IHtcbiAgICBtZXNzYWdlOiAnVW5yZWNvZ25pemVkIHByaW1pdGl2ZSAlMScsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBub19waXBlX2ZvdW5kOiB7XG4gICAgbWVzc2FnZTogJ05vIHBpcGUgb2YgbmFtZSAlMSBmb3VuZCcsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICAvLyBUT0RPOiBDb25zaWRlciBhIGJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuXG4gIHVuYWJsZV90b19yZXNvbHZlX2NvbXBhdGlibGVfY2FsbF9zaWduYXR1cmU6IHtcbiAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIHJlc29sdmUgY29tcGF0aWJsZSBjYWxsIHNpZ25hdHVyZScsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICB1bmFibGVfdG9fcmVzb2x2ZV9zaWduYXR1cmU6IHtcbiAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIHJlc29sdmUgc2lnbmF0dXJlIGZvciBjYWxsIG9mICUxJyxcbiAgICBraW5kOiAnRXJyb3InLFxuICB9LFxuXG4gIGNvdWxkX25vdF9yZXNvbHZlX3R5cGU6IHtcbiAgICBtZXNzYWdlOiBgQ291bGQgbm90IHJlc29sdmUgdGhlIHR5cGUgb2YgJyUxJ2AsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBpZGVudGlmaWVyX25vdF9jYWxsYWJsZToge1xuICAgIG1lc3NhZ2U6IGAnJTEnIGlzIG5vdCBjYWxsYWJsZWAsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBpZGVudGlmaWVyX3Bvc3NpYmx5X3VuZGVmaW5lZDoge1xuICAgIG1lc3NhZ2U6XG4gICAgICAgIGAnJTEnIGlzIHBvc3NpYmx5IHVuZGVmaW5lZC4gQ29uc2lkZXIgdXNpbmcgdGhlIHNhZmUgbmF2aWdhdGlvbiBvcGVyYXRvciAoJTIpIG9yIG5vbi1udWxsIGFzc2VydGlvbiBvcGVyYXRvciAoJTMpLmAsXG4gICAga2luZDogJ1N1Z2dlc3Rpb24nLFxuICB9LFxuXG4gIGlkZW50aWZpZXJfbm90X2RlZmluZWRfaW5fYXBwX2NvbnRleHQ6IHtcbiAgICBtZXNzYWdlOlxuICAgICAgICBgSWRlbnRpZmllciAnJTEnIGlzIG5vdCBkZWZpbmVkLiBUaGUgY29tcG9uZW50IGRlY2xhcmF0aW9uLCB0ZW1wbGF0ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGFuZCBlbGVtZW50IHJlZmVyZW5jZXMgZG8gbm90IGNvbnRhaW4gc3VjaCBhIG1lbWJlcmAsXG4gICAga2luZDogJ0Vycm9yJyxcbiAgfSxcblxuICBpZGVudGlmaWVyX25vdF9kZWZpbmVkX29uX3JlY2VpdmVyOiB7XG4gICAgbWVzc2FnZTogYElkZW50aWZpZXIgJyUxJyBpcyBub3QgZGVmaW5lZC4gJyUyJyBkb2VzIG5vdCBjb250YWluIHN1Y2ggYSBtZW1iZXJgLFxuICAgIGtpbmQ6ICdFcnJvcicsXG4gIH0sXG5cbiAgaWRlbnRpZmllcl9pc19wcml2YXRlOiB7XG4gICAgbWVzc2FnZTogYElkZW50aWZpZXIgJyUxJyByZWZlcnMgdG8gYSBwcml2YXRlIG1lbWJlciBvZiAlMmAsXG4gICAga2luZDogJ1dhcm5pbmcnLFxuICB9LFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGFuZ3VhZ2Ugc2VydmljZSBkaWFnbm9zdGljLlxuICogQHBhcmFtIHNwYW4gbG9jYXRpb24gdGhlIGRpYWdub3N0aWMgZm9yXG4gKiBAcGFyYW0gZG0gZGlhZ25vc3RpYyBtZXNzYWdlXG4gKiBAcGFyYW0gZm9ybWF0QXJncyBydW4tdGltZSBhcmd1bWVudHMgdG8gZm9ybWF0IHRoZSBkaWFnbm9zdGljIG1lc3NhZ2Ugd2l0aCAoc2VlIHRoZSBtZXNzYWdlcyBpblxuICogICAgICAgIHRoZSBgRGlhZ25vc3RpY2Agb2JqZWN0IGZvciBhbiBleGFtcGxlKS5cbiAqIEByZXR1cm5zIGEgY3JlYXRlZCBkaWFnbm9zdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWFnbm9zdGljKFxuICAgIHNwYW46IG5nLlNwYW4sIGRtOiBEaWFnbm9zdGljTWVzc2FnZSwgLi4uZm9ybWF0QXJnczogc3RyaW5nW10pOiBuZy5EaWFnbm9zdGljIHtcbiAgLy8gRm9ybWF0cyBcIiUxICUyXCIgd2l0aCBmb3JtYXRBcmdzIFsnYScsICdiJ10gYXMgXCJhIGJcIlxuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID1cbiAgICAgIGRtLm1lc3NhZ2UucmVwbGFjZSgvJShcXGQrKS9nLCAoXywgaW5kZXg6IHN0cmluZykgPT4gZm9ybWF0QXJnc1sraW5kZXggLSAxXSk7XG4gIHJldHVybiB7XG4gICAga2luZDogdHMuRGlhZ25vc3RpY0NhdGVnb3J5W2RtLmtpbmRdLFxuICAgIG1lc3NhZ2U6IGZvcm1hdHRlZE1lc3NhZ2UsXG4gICAgc3BhbixcbiAgfTtcbn1cbiJdfQ== |
\ | No newline at end of file |