@coralogix/rum-cli 1.1.5 → 1.1.7

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.
Files changed (68) hide show
  1. package/README.md +16 -28
  2. package/package.json +4 -1
  3. package/.eslintignore +0 -1
  4. package/.eslintrc.js +0 -31
  5. package/.github/workflows/npm-publish.yml +0 -41
  6. package/api/rum-api.ts +0 -79
  7. package/assets/docs-illustration.png +0 -0
  8. package/cli/rum-cli.ts +0 -54
  9. package/cli/theme/index.ts +0 -5
  10. package/cli/validators/index.ts +0 -14
  11. package/config/config.ts +0 -31
  12. package/config/index.js +0 -7
  13. package/config/index.ts +0 -3
  14. package/dist/api/rum-api.d.ts +0 -5
  15. package/dist/api/rum-api.js +0 -98
  16. package/dist/cli/rum-cli.d.ts +0 -2
  17. package/dist/cli/theme/index.d.ts +0 -3
  18. package/dist/cli/theme/index.js +0 -7
  19. package/dist/cli/validators/index.d.ts +0 -1
  20. package/dist/cli/validators/index.js +0 -16
  21. package/dist/config/config.d.ts +0 -16
  22. package/dist/config/config.js +0 -16
  23. package/dist/config/index.d.ts +0 -2
  24. package/dist/config/index.js +0 -8
  25. package/dist/model/cli.model.d.ts +0 -1
  26. package/dist/model/cli.model.js +0 -11
  27. package/dist/proto-models/com/coralogix/rum/v2/audit_log.d.ts +0 -24
  28. package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +0 -62
  29. package/dist/proto-models/com/coralogix/rum/v2/chunk.d.ts +0 -56
  30. package/dist/proto-models/com/coralogix/rum/v2/chunk.js +0 -330
  31. package/dist/proto-models/com/coralogix/rum/v2/file.d.ts +0 -26
  32. package/dist/proto-models/com/coralogix/rum/v2/file.js +0 -140
  33. package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +0 -72
  34. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +0 -233
  35. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +0 -69
  36. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +0 -181
  37. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.d.ts +0 -55
  38. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +0 -277
  39. package/dist/proto-models/google/protobuf/descriptor.d.ts +0 -1140
  40. package/dist/proto-models/google/protobuf/descriptor.js +0 -3612
  41. package/dist/services/source-maps/source-maps.service.d.ts +0 -3
  42. package/dist/services/source-maps/source-maps.service.js +0 -42
  43. package/dist/services/source-maps/utils/traverse-folder.util.d.ts +0 -2
  44. package/dist/services/source-maps/utils/traverse-folder.util.js +0 -42
  45. package/generate-protos.sh +0 -14
  46. package/meta.yaml +0 -4
  47. package/model/cli.model.ts +0 -7
  48. package/prepublish.sh +0 -19
  49. package/proto-models/com/coralogix/rum/v2/audit_log.ts +0 -76
  50. package/proto-models/com/coralogix/rum/v2/chunk.ts +0 -391
  51. package/proto-models/com/coralogix/rum/v2/file.ts +0 -164
  52. package/proto-models/com/coralogix/rum/v2/rum_service.ts +0 -272
  53. package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +0 -216
  54. package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -331
  55. package/proto-models/google/protobuf/descriptor.ts +0 -4715
  56. package/protofetch.lock +0 -18
  57. package/protofetch.toml +0 -7
  58. package/protos/com/coralogix/rum/v2/audit_log.proto +0 -13
  59. package/protos/com/coralogix/rum/v2/chunk.proto +0 -24
  60. package/protos/com/coralogix/rum/v2/file.proto +0 -8
  61. package/protos/com/coralogix/rum/v2/rum_service.proto +0 -23
  62. package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +0 -19
  63. package/protos/com/coralogix/rum/v2/source_code_file_mapping.proto +0 -16
  64. package/protoset.bin +0 -0
  65. package/services/source-maps/source-maps.service.ts +0 -31
  66. package/services/source-maps/utils/traverse-folder.util.ts +0 -33
  67. package/tsconfig.build.json +0 -6
  68. package/tsconfig.json +0 -25
@@ -1,181 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RumSourceMapServiceDefinition = exports.UploadSourceMapsResponse = exports.UploadSourceMapsRequest = exports.protobufPackage = void 0;
7
- /* eslint-disable */
8
- const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
- const file_1 = require("./file");
10
- exports.protobufPackage = "com.coralogix.rum.v2";
11
- function createBaseUploadSourceMapsRequest() {
12
- return { application: "", releaseId: "", commitHash: undefined, repoName: undefined, user: undefined, files: [] };
13
- }
14
- exports.UploadSourceMapsRequest = {
15
- encode(message, writer = minimal_1.default.Writer.create()) {
16
- if (message.application !== "") {
17
- writer.uint32(10).string(message.application);
18
- }
19
- if (message.releaseId !== "") {
20
- writer.uint32(18).string(message.releaseId);
21
- }
22
- if (message.commitHash !== undefined) {
23
- writer.uint32(26).string(message.commitHash);
24
- }
25
- if (message.repoName !== undefined) {
26
- writer.uint32(34).string(message.repoName);
27
- }
28
- if (message.user !== undefined) {
29
- writer.uint32(42).string(message.user);
30
- }
31
- for (const v of message.files) {
32
- file_1.FileMetadata.encode(v, writer.uint32(50).fork()).ldelim();
33
- }
34
- return writer;
35
- },
36
- decode(input, length) {
37
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
38
- let end = length === undefined ? reader.len : reader.pos + length;
39
- const message = createBaseUploadSourceMapsRequest();
40
- while (reader.pos < end) {
41
- const tag = reader.uint32();
42
- switch (tag >>> 3) {
43
- case 1:
44
- if (tag !== 10) {
45
- break;
46
- }
47
- message.application = reader.string();
48
- continue;
49
- case 2:
50
- if (tag !== 18) {
51
- break;
52
- }
53
- message.releaseId = reader.string();
54
- continue;
55
- case 3:
56
- if (tag !== 26) {
57
- break;
58
- }
59
- message.commitHash = reader.string();
60
- continue;
61
- case 4:
62
- if (tag !== 34) {
63
- break;
64
- }
65
- message.repoName = reader.string();
66
- continue;
67
- case 5:
68
- if (tag !== 42) {
69
- break;
70
- }
71
- message.user = reader.string();
72
- continue;
73
- case 6:
74
- if (tag !== 50) {
75
- break;
76
- }
77
- message.files.push(file_1.FileMetadata.decode(reader, reader.uint32()));
78
- continue;
79
- }
80
- if ((tag & 7) === 4 || tag === 0) {
81
- break;
82
- }
83
- reader.skipType(tag & 7);
84
- }
85
- return message;
86
- },
87
- fromJSON(object) {
88
- return {
89
- application: isSet(object.application) ? String(object.application) : "",
90
- releaseId: isSet(object.releaseId) ? String(object.releaseId) : "",
91
- commitHash: isSet(object.commitHash) ? String(object.commitHash) : undefined,
92
- repoName: isSet(object.repoName) ? String(object.repoName) : undefined,
93
- user: isSet(object.user) ? String(object.user) : undefined,
94
- files: Array.isArray(object === null || object === void 0 ? void 0 : object.files) ? object.files.map((e) => file_1.FileMetadata.fromJSON(e)) : [],
95
- };
96
- },
97
- toJSON(message) {
98
- const obj = {};
99
- message.application !== undefined && (obj.application = message.application);
100
- message.releaseId !== undefined && (obj.releaseId = message.releaseId);
101
- message.commitHash !== undefined && (obj.commitHash = message.commitHash);
102
- message.repoName !== undefined && (obj.repoName = message.repoName);
103
- message.user !== undefined && (obj.user = message.user);
104
- if (message.files) {
105
- obj.files = message.files.map((e) => e ? file_1.FileMetadata.toJSON(e) : undefined);
106
- }
107
- else {
108
- obj.files = [];
109
- }
110
- return obj;
111
- },
112
- create(base) {
113
- return exports.UploadSourceMapsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
114
- },
115
- fromPartial(object) {
116
- var _a, _b, _c, _d, _e, _f;
117
- const message = createBaseUploadSourceMapsRequest();
118
- message.application = (_a = object.application) !== null && _a !== void 0 ? _a : "";
119
- message.releaseId = (_b = object.releaseId) !== null && _b !== void 0 ? _b : "";
120
- message.commitHash = (_c = object.commitHash) !== null && _c !== void 0 ? _c : undefined;
121
- message.repoName = (_d = object.repoName) !== null && _d !== void 0 ? _d : undefined;
122
- message.user = (_e = object.user) !== null && _e !== void 0 ? _e : undefined;
123
- message.files = ((_f = object.files) === null || _f === void 0 ? void 0 : _f.map((e) => file_1.FileMetadata.fromPartial(e))) || [];
124
- return message;
125
- },
126
- };
127
- function createBaseUploadSourceMapsResponse() {
128
- return {};
129
- }
130
- exports.UploadSourceMapsResponse = {
131
- encode(_, writer = minimal_1.default.Writer.create()) {
132
- return writer;
133
- },
134
- decode(input, length) {
135
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
136
- let end = length === undefined ? reader.len : reader.pos + length;
137
- const message = createBaseUploadSourceMapsResponse();
138
- while (reader.pos < end) {
139
- const tag = reader.uint32();
140
- switch (tag >>> 3) {
141
- }
142
- if ((tag & 7) === 4 || tag === 0) {
143
- break;
144
- }
145
- reader.skipType(tag & 7);
146
- }
147
- return message;
148
- },
149
- fromJSON(_) {
150
- return {};
151
- },
152
- toJSON(_) {
153
- const obj = {};
154
- return obj;
155
- },
156
- create(base) {
157
- return exports.UploadSourceMapsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
158
- },
159
- fromPartial(_) {
160
- const message = createBaseUploadSourceMapsResponse();
161
- return message;
162
- },
163
- };
164
- exports.RumSourceMapServiceDefinition = {
165
- name: "RumSourceMapService",
166
- fullName: "com.coralogix.rum.v2.RumSourceMapService",
167
- methods: {
168
- uploadSourceMaps: {
169
- name: "UploadSourceMaps",
170
- requestType: exports.UploadSourceMapsRequest,
171
- requestStream: false,
172
- responseType: exports.UploadSourceMapsResponse,
173
- responseStream: false,
174
- options: {},
175
- },
176
- },
177
- };
178
- function isSet(value) {
179
- return value !== null && value !== undefined;
180
- }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtX3NvdXJjZV9tYXBfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L3J1bS92Mi9ydW1fc291cmNlX21hcF9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQixpRUFBcUM7QUFDckMsaUNBQXNDO0FBRXpCLFFBQUEsZUFBZSxHQUFHLHNCQUFzQixDQUFDO0FBY3RELFNBQVMsaUNBQWlDO0lBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3BILENBQUM7QUFFWSxRQUFBLHVCQUF1QixHQUFHO0lBQ3JDLE1BQU0sQ0FBQyxPQUFnQyxFQUFFLFNBQXFCLGlCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUMvRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssRUFBRSxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxR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LEVBQUUsRUFBRTtTQUNaO0tBQ0Y7Q0FDTyxDQUFDO0FBVVgsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUN2QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSBcInByb3RvYnVmanMvbWluaW1hbFwiO1xuaW1wb3J0IHsgRmlsZU1ldGFkYXRhIH0gZnJvbSBcIi4vZmlsZVwiO1xuXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gXCJjb20uY29yYWxvZ2l4LnJ1bS52MlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb246IHN0cmluZztcbiAgcmVsZWFzZUlkOiBzdHJpbmc7XG4gIGNvbW1pdEhhc2g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlcG9OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB1c2VyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlczogRmlsZU1ldGFkYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkU291cmNlTWFwc1Jlc3BvbnNlIHtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0KCk6IFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0IHtcbiAgcmV0dXJuIHsgYXBwbGljYXRpb246IFwiXCIsIHJlbGVhc2VJZDogXCJcIiwgY29tbWl0SGFzaDogdW5kZWZpbmVkLCByZXBvTmFtZTogdW5kZWZpbmVkLCB1c2VyOiB1bmRlZmluZWQsIGZpbGVzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgVXBsb2FkU291cmNlTWFwc1JlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFwcGxpY2F0aW9uICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5hcHBsaWNhdGlvbik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJlbGVhc2VJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UucmVsZWFzZUlkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29tbWl0SGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5jb21taXRIYXNoKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVwb05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2UucmVwb05hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51c2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyhtZXNzYWdlLnVzZXIpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5maWxlcykge1xuICAgICAgRmlsZU1ldGFkYXRhLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuYXBwbGljYXRpb24gPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5yZWxlYXNlSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jb21taXRIYXNoID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVwb05hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51c2VyID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZmlsZXMucHVzaChGaWxlTWV0YWRhdGEuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcGxpY2F0aW9uOiBpc1NldChvYmplY3QuYXBwbGljYXRpb24pID8gU3RyaW5nKG9iamVjdC5hcHBsaWNhdGlvbikgOiBcIlwiLFxuICAgICAgcmVsZWFzZUlkOiBpc1NldChvYmplY3QucmVsZWFzZUlkKSA/IFN0cmluZyhvYmplY3QucmVsZWFzZUlkKSA6IFwiXCIsXG4gICAgICBjb21taXRIYXNoOiBpc1NldChvYmplY3QuY29tbWl0SGFzaCkgPyBTdHJpbmcob2JqZWN0LmNvbW1pdEhhc2gpIDogdW5kZWZpbmVkLFxuICAgICAgcmVwb05hbWU6IGlzU2V0KG9iamVjdC5yZXBvTmFtZSkgPyBTdHJpbmcob2JqZWN0LnJlcG9OYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgIHVzZXI6IGlzU2V0KG9iamVjdC51c2VyKSA/IFN0cmluZyhvYmplY3QudXNlcikgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlczogQXJyYXkuaXNBcnJheShvYmplY3Q/LmZpbGVzKSA/IG9iamVjdC5maWxlcy5tYXAoKGU6IGFueSkgPT4gRmlsZU1ldGFkYXRhLmZyb21KU09OKGUpKSA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmFwcGxpY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgKG9iai5hcHBsaWNhdGlvbiA9IG1lc3NhZ2UuYXBwbGljYXRpb24pO1xuICAgIG1lc3NhZ2UucmVsZWFzZUlkICE9PSB1bmRlZmluZWQgJiYgKG9iai5yZWxlYXNlSWQgPSBtZXNzYWdlLnJlbGVhc2VJZCk7XG4gICAgbWVzc2FnZS5jb21taXRIYXNoICE9PSB1bmRlZmluZWQgJiYgKG9iai5jb21taXRIYXNoID0gbWVzc2FnZS5jb21taXRIYXNoKTtcbiAgICBtZXNzYWdlLnJlcG9OYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5yZXBvTmFtZSA9IG1lc3NhZ2UucmVwb05hbWUpO1xuICAgIG1lc3NhZ2UudXNlciAhPT0gdW5kZWZpbmVkICYmIChvYmoudXNlciA9IG1lc3NhZ2UudXNlcik7XG4gICAgaWYgKG1lc3NhZ2UuZmlsZXMpIHtcbiAgICAgIG9iai5maWxlcyA9IG1lc3NhZ2UuZmlsZXMubWFwKChlKSA9PiBlID8gRmlsZU1ldGFkYXRhLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5maWxlcyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXBsb2FkU291cmNlTWFwc1JlcXVlc3Q+KTogVXBsb2FkU291cmNlTWFwc1JlcXVlc3Qge1xuICAgIHJldHVybiBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0Pik6IFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5hcHBsaWNhdGlvbiA9IG9iamVjdC5hcHBsaWNhdGlvbiA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucmVsZWFzZUlkID0gb2JqZWN0LnJlbGVhc2VJZCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuY29tbWl0SGFzaCA9IG9iamVjdC5jb21taXRIYXNoID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnJlcG9OYW1lID0gb2JqZWN0LnJlcG9OYW1lID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnVzZXIgPSBvYmplY3QudXNlciA/PyB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5maWxlcyA9IG9iamVjdC5maWxlcz8ubWFwKChlKSA9PiBGaWxlTWV0YWRhdGEuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVwbG9hZFNvdXJjZU1hcHNSZXNwb25zZSgpOiBVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2Uge1xuICByZXR1cm4ge307XG59XG5cbmV4cG9ydCBjb25zdCBVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2UgPSB7XG4gIGVuY29kZShfOiBVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVwbG9hZFNvdXJjZU1hcHNSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihfOiBhbnkpOiBVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfSxcblxuICB0b0pTT04oXzogVXBsb2FkU291cmNlTWFwc1Jlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXBsb2FkU291cmNlTWFwc1Jlc3BvbnNlPik6IFVwbG9hZFNvdXJjZU1hcHNSZXNwb25zZSB7XG4gICAgcmV0dXJuIFVwbG9hZFNvdXJjZU1hcHNSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChfOiBEZWVwUGFydGlhbDxVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2U+KTogVXBsb2FkU291cmNlTWFwc1Jlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVwbG9hZFNvdXJjZU1hcHNSZXNwb25zZSgpO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZXhwb3J0IHR5cGUgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24gPSB0eXBlb2YgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb247XG5leHBvcnQgY29uc3QgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24gPSB7XG4gIG5hbWU6IFwiUnVtU291cmNlTWFwU2VydmljZVwiLFxuICBmdWxsTmFtZTogXCJjb20uY29yYWxvZ2l4LnJ1bS52Mi5SdW1Tb3VyY2VNYXBTZXJ2aWNlXCIsXG4gIG1ldGhvZHM6IHtcbiAgICB1cGxvYWRTb3VyY2VNYXBzOiB7XG4gICAgICBuYW1lOiBcIlVwbG9hZFNvdXJjZU1hcHNcIixcbiAgICAgIHJlcXVlc3RUeXBlOiBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBVcGxvYWRTb3VyY2VNYXBzUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB7fSxcbiAgICB9LFxuICB9LFxufSBhcyBjb25zdDtcblxudHlwZSBCdWlsdGluID0gRGF0ZSB8IEZ1bmN0aW9uIHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW4gPyBUXG4gIDogVCBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8RGVlcFBhcnRpYWw8VT4+IDogVCBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyB7ICRjYXNlOiBzdHJpbmcgfSA/IHsgW0sgaW4ga2V5b2YgT21pdDxULCBcIiRjYXNlXCI+XT86IERlZXBQYXJ0aWFsPFRbS10+IH0gJiB7ICRjYXNlOiBUW1wiJGNhc2VcIl0gfVxuICA6IFQgZXh0ZW5kcyB7fSA/IHsgW0sgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW0tdPiB9XG4gIDogUGFydGlhbDxUPjtcblxuZnVuY3Rpb24gaXNTZXQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -1,55 +0,0 @@
1
- import _m0 from "protobufjs/minimal";
2
- export declare const protobufPackage = "com.coralogix.rum.v2";
3
- export interface FileSourceCodeMap {
4
- fileNameToCode: {
5
- [key: string]: string;
6
- };
7
- }
8
- export interface FileSourceCodeMap_FileNameToCodeEntry {
9
- key: string;
10
- value: string;
11
- }
12
- export interface SourceCodeLineMapping {
13
- chunkName: string;
14
- sourceFileName: string;
15
- originalLineNumber: number;
16
- generatedLineNumber: number;
17
- originalColumnNumber: number;
18
- generatedColumnNumber: number;
19
- sourceFunctionName: string;
20
- }
21
- export declare const FileSourceCodeMap: {
22
- encode(message: FileSourceCodeMap, writer?: _m0.Writer): _m0.Writer;
23
- decode(input: _m0.Reader | Uint8Array, length?: number): FileSourceCodeMap;
24
- fromJSON(object: any): FileSourceCodeMap;
25
- toJSON(message: FileSourceCodeMap): unknown;
26
- create(base?: DeepPartial<FileSourceCodeMap>): FileSourceCodeMap;
27
- fromPartial(object: DeepPartial<FileSourceCodeMap>): FileSourceCodeMap;
28
- };
29
- export declare const FileSourceCodeMap_FileNameToCodeEntry: {
30
- encode(message: FileSourceCodeMap_FileNameToCodeEntry, writer?: _m0.Writer): _m0.Writer;
31
- decode(input: _m0.Reader | Uint8Array, length?: number): FileSourceCodeMap_FileNameToCodeEntry;
32
- fromJSON(object: any): FileSourceCodeMap_FileNameToCodeEntry;
33
- toJSON(message: FileSourceCodeMap_FileNameToCodeEntry): unknown;
34
- create(base?: DeepPartial<FileSourceCodeMap_FileNameToCodeEntry>): FileSourceCodeMap_FileNameToCodeEntry;
35
- fromPartial(object: DeepPartial<FileSourceCodeMap_FileNameToCodeEntry>): FileSourceCodeMap_FileNameToCodeEntry;
36
- };
37
- export declare const SourceCodeLineMapping: {
38
- encode(message: SourceCodeLineMapping, writer?: _m0.Writer): _m0.Writer;
39
- decode(input: _m0.Reader | Uint8Array, length?: number): SourceCodeLineMapping;
40
- fromJSON(object: any): SourceCodeLineMapping;
41
- toJSON(message: SourceCodeLineMapping): unknown;
42
- create(base?: DeepPartial<SourceCodeLineMapping>): SourceCodeLineMapping;
43
- fromPartial(object: DeepPartial<SourceCodeLineMapping>): SourceCodeLineMapping;
44
- };
45
- type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
46
- export type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {
47
- $case: string;
48
- } ? {
49
- [K in keyof Omit<T, "$case">]?: DeepPartial<T[K]>;
50
- } & {
51
- $case: T["$case"];
52
- } : T extends {} ? {
53
- [K in keyof T]?: DeepPartial<T[K]>;
54
- } : Partial<T>;
55
- export {};
@@ -1,277 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SourceCodeLineMapping = exports.FileSourceCodeMap_FileNameToCodeEntry = exports.FileSourceCodeMap = exports.protobufPackage = void 0;
7
- /* eslint-disable */
8
- const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
- exports.protobufPackage = "com.coralogix.rum.v2";
10
- function createBaseFileSourceCodeMap() {
11
- return { fileNameToCode: {} };
12
- }
13
- exports.FileSourceCodeMap = {
14
- encode(message, writer = minimal_1.default.Writer.create()) {
15
- Object.entries(message.fileNameToCode).forEach(([key, value]) => {
16
- exports.FileSourceCodeMap_FileNameToCodeEntry.encode({ key: key, value }, writer.uint32(10).fork()).ldelim();
17
- });
18
- return writer;
19
- },
20
- decode(input, length) {
21
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
22
- let end = length === undefined ? reader.len : reader.pos + length;
23
- const message = createBaseFileSourceCodeMap();
24
- while (reader.pos < end) {
25
- const tag = reader.uint32();
26
- switch (tag >>> 3) {
27
- case 1:
28
- if (tag !== 10) {
29
- break;
30
- }
31
- const entry1 = exports.FileSourceCodeMap_FileNameToCodeEntry.decode(reader, reader.uint32());
32
- if (entry1.value !== undefined) {
33
- message.fileNameToCode[entry1.key] = entry1.value;
34
- }
35
- continue;
36
- }
37
- if ((tag & 7) === 4 || tag === 0) {
38
- break;
39
- }
40
- reader.skipType(tag & 7);
41
- }
42
- return message;
43
- },
44
- fromJSON(object) {
45
- return {
46
- fileNameToCode: isObject(object.fileNameToCode)
47
- ? Object.entries(object.fileNameToCode).reduce((acc, [key, value]) => {
48
- acc[key] = String(value);
49
- return acc;
50
- }, {})
51
- : {},
52
- };
53
- },
54
- toJSON(message) {
55
- const obj = {};
56
- obj.fileNameToCode = {};
57
- if (message.fileNameToCode) {
58
- Object.entries(message.fileNameToCode).forEach(([k, v]) => {
59
- obj.fileNameToCode[k] = v;
60
- });
61
- }
62
- return obj;
63
- },
64
- create(base) {
65
- return exports.FileSourceCodeMap.fromPartial(base !== null && base !== void 0 ? base : {});
66
- },
67
- fromPartial(object) {
68
- var _a;
69
- const message = createBaseFileSourceCodeMap();
70
- message.fileNameToCode = Object.entries((_a = object.fileNameToCode) !== null && _a !== void 0 ? _a : {}).reduce((acc, [key, value]) => {
71
- if (value !== undefined) {
72
- acc[key] = String(value);
73
- }
74
- return acc;
75
- }, {});
76
- return message;
77
- },
78
- };
79
- function createBaseFileSourceCodeMap_FileNameToCodeEntry() {
80
- return { key: "", value: "" };
81
- }
82
- exports.FileSourceCodeMap_FileNameToCodeEntry = {
83
- encode(message, writer = minimal_1.default.Writer.create()) {
84
- if (message.key !== "") {
85
- writer.uint32(10).string(message.key);
86
- }
87
- if (message.value !== "") {
88
- writer.uint32(18).string(message.value);
89
- }
90
- return writer;
91
- },
92
- decode(input, length) {
93
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
94
- let end = length === undefined ? reader.len : reader.pos + length;
95
- const message = createBaseFileSourceCodeMap_FileNameToCodeEntry();
96
- while (reader.pos < end) {
97
- const tag = reader.uint32();
98
- switch (tag >>> 3) {
99
- case 1:
100
- if (tag !== 10) {
101
- break;
102
- }
103
- message.key = reader.string();
104
- continue;
105
- case 2:
106
- if (tag !== 18) {
107
- break;
108
- }
109
- message.value = reader.string();
110
- continue;
111
- }
112
- if ((tag & 7) === 4 || tag === 0) {
113
- break;
114
- }
115
- reader.skipType(tag & 7);
116
- }
117
- return message;
118
- },
119
- fromJSON(object) {
120
- return { key: isSet(object.key) ? String(object.key) : "", value: isSet(object.value) ? String(object.value) : "" };
121
- },
122
- toJSON(message) {
123
- const obj = {};
124
- message.key !== undefined && (obj.key = message.key);
125
- message.value !== undefined && (obj.value = message.value);
126
- return obj;
127
- },
128
- create(base) {
129
- return exports.FileSourceCodeMap_FileNameToCodeEntry.fromPartial(base !== null && base !== void 0 ? base : {});
130
- },
131
- fromPartial(object) {
132
- var _a, _b;
133
- const message = createBaseFileSourceCodeMap_FileNameToCodeEntry();
134
- message.key = (_a = object.key) !== null && _a !== void 0 ? _a : "";
135
- message.value = (_b = object.value) !== null && _b !== void 0 ? _b : "";
136
- return message;
137
- },
138
- };
139
- function createBaseSourceCodeLineMapping() {
140
- return {
141
- chunkName: "",
142
- sourceFileName: "",
143
- originalLineNumber: 0,
144
- generatedLineNumber: 0,
145
- originalColumnNumber: 0,
146
- generatedColumnNumber: 0,
147
- sourceFunctionName: "",
148
- };
149
- }
150
- exports.SourceCodeLineMapping = {
151
- encode(message, writer = minimal_1.default.Writer.create()) {
152
- if (message.chunkName !== "") {
153
- writer.uint32(10).string(message.chunkName);
154
- }
155
- if (message.sourceFileName !== "") {
156
- writer.uint32(18).string(message.sourceFileName);
157
- }
158
- if (message.originalLineNumber !== 0) {
159
- writer.uint32(24).int32(message.originalLineNumber);
160
- }
161
- if (message.generatedLineNumber !== 0) {
162
- writer.uint32(32).int32(message.generatedLineNumber);
163
- }
164
- if (message.originalColumnNumber !== 0) {
165
- writer.uint32(40).int32(message.originalColumnNumber);
166
- }
167
- if (message.generatedColumnNumber !== 0) {
168
- writer.uint32(48).int32(message.generatedColumnNumber);
169
- }
170
- if (message.sourceFunctionName !== "") {
171
- writer.uint32(58).string(message.sourceFunctionName);
172
- }
173
- return writer;
174
- },
175
- decode(input, length) {
176
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
177
- let end = length === undefined ? reader.len : reader.pos + length;
178
- const message = createBaseSourceCodeLineMapping();
179
- while (reader.pos < end) {
180
- const tag = reader.uint32();
181
- switch (tag >>> 3) {
182
- case 1:
183
- if (tag !== 10) {
184
- break;
185
- }
186
- message.chunkName = reader.string();
187
- continue;
188
- case 2:
189
- if (tag !== 18) {
190
- break;
191
- }
192
- message.sourceFileName = reader.string();
193
- continue;
194
- case 3:
195
- if (tag !== 24) {
196
- break;
197
- }
198
- message.originalLineNumber = reader.int32();
199
- continue;
200
- case 4:
201
- if (tag !== 32) {
202
- break;
203
- }
204
- message.generatedLineNumber = reader.int32();
205
- continue;
206
- case 5:
207
- if (tag !== 40) {
208
- break;
209
- }
210
- message.originalColumnNumber = reader.int32();
211
- continue;
212
- case 6:
213
- if (tag !== 48) {
214
- break;
215
- }
216
- message.generatedColumnNumber = reader.int32();
217
- continue;
218
- case 7:
219
- if (tag !== 58) {
220
- break;
221
- }
222
- message.sourceFunctionName = reader.string();
223
- continue;
224
- }
225
- if ((tag & 7) === 4 || tag === 0) {
226
- break;
227
- }
228
- reader.skipType(tag & 7);
229
- }
230
- return message;
231
- },
232
- fromJSON(object) {
233
- return {
234
- chunkName: isSet(object.chunkName) ? String(object.chunkName) : "",
235
- sourceFileName: isSet(object.sourceFileName) ? String(object.sourceFileName) : "",
236
- originalLineNumber: isSet(object.originalLineNumber) ? Number(object.originalLineNumber) : 0,
237
- generatedLineNumber: isSet(object.generatedLineNumber) ? Number(object.generatedLineNumber) : 0,
238
- originalColumnNumber: isSet(object.originalColumnNumber) ? Number(object.originalColumnNumber) : 0,
239
- generatedColumnNumber: isSet(object.generatedColumnNumber) ? Number(object.generatedColumnNumber) : 0,
240
- sourceFunctionName: isSet(object.sourceFunctionName) ? String(object.sourceFunctionName) : "",
241
- };
242
- },
243
- toJSON(message) {
244
- const obj = {};
245
- message.chunkName !== undefined && (obj.chunkName = message.chunkName);
246
- message.sourceFileName !== undefined && (obj.sourceFileName = message.sourceFileName);
247
- message.originalLineNumber !== undefined && (obj.originalLineNumber = Math.round(message.originalLineNumber));
248
- message.generatedLineNumber !== undefined && (obj.generatedLineNumber = Math.round(message.generatedLineNumber));
249
- message.originalColumnNumber !== undefined && (obj.originalColumnNumber = Math.round(message.originalColumnNumber));
250
- message.generatedColumnNumber !== undefined &&
251
- (obj.generatedColumnNumber = Math.round(message.generatedColumnNumber));
252
- message.sourceFunctionName !== undefined && (obj.sourceFunctionName = message.sourceFunctionName);
253
- return obj;
254
- },
255
- create(base) {
256
- return exports.SourceCodeLineMapping.fromPartial(base !== null && base !== void 0 ? base : {});
257
- },
258
- fromPartial(object) {
259
- var _a, _b, _c, _d, _e, _f, _g;
260
- const message = createBaseSourceCodeLineMapping();
261
- message.chunkName = (_a = object.chunkName) !== null && _a !== void 0 ? _a : "";
262
- message.sourceFileName = (_b = object.sourceFileName) !== null && _b !== void 0 ? _b : "";
263
- message.originalLineNumber = (_c = object.originalLineNumber) !== null && _c !== void 0 ? _c : 0;
264
- message.generatedLineNumber = (_d = object.generatedLineNumber) !== null && _d !== void 0 ? _d : 0;
265
- message.originalColumnNumber = (_e = object.originalColumnNumber) !== null && _e !== void 0 ? _e : 0;
266
- message.generatedColumnNumber = (_f = object.generatedColumnNumber) !== null && _f !== void 0 ? _f : 0;
267
- message.sourceFunctionName = (_g = object.sourceFunctionName) !== null && _g !== void 0 ? _g : "";
268
- return message;
269
- },
270
- };
271
- function isObject(value) {
272
- return typeof value === "object" && value !== null;
273
- }
274
- function isSet(value) {
275
- return value !== null && value !== undefined;
276
- }
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX2NvZGVfZmlsZV9tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3NvdXJjZV9jb2RlX2ZpbGVfbWFwcGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvQkFBb0I7QUFDcEIsaUVBQXFDO0FBRXhCLFFBQUEsZUFBZSxHQUFHLHNCQUFzQixDQUFDO0FBcUJ0RCxTQUFTLDJCQUEyQjtJQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFFWSxRQUFBLGlCQUFpQixHQUFHO0lBQy9CLE1BQU0sQ0FBQyxPQUEwQixFQUFFLFNBQXFCLGlCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUN6RSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzlELDZDQUFxQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlHLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLGlCQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMs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LENBQUMsa0JBQWtCLG1DQUFJLEVBQUUsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YsQ0FBQztBQVVGLFNBQVMsUUFBUSxDQUFDLEtBQVU7SUFDMUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUN2QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSBcInByb3RvYnVmanMvbWluaW1hbFwiO1xuXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gXCJjb20uY29yYWxvZ2l4LnJ1bS52MlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVTb3VyY2VDb2RlTWFwIHtcbiAgZmlsZU5hbWVUb0NvZGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUNvZGVMaW5lTWFwcGluZyB7XG4gIGNodW5rTmFtZTogc3RyaW5nO1xuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nO1xuICBvcmlnaW5hbExpbmVOdW1iZXI6IG51bWJlcjtcbiAgZ2VuZXJhdGVkTGluZU51bWJlcjogbnVtYmVyO1xuICBvcmlnaW5hbENvbHVtbk51bWJlcjogbnVtYmVyO1xuICBnZW5lcmF0ZWRDb2x1bW5OdW1iZXI6IG51bWJlcjtcbiAgc291cmNlRnVuY3Rpb25OYW1lOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWxlU291cmNlQ29kZU1hcCgpOiBGaWxlU291cmNlQ29kZU1hcCB7XG4gIHJldHVybiB7IGZpbGVOYW1lVG9Db2RlOiB7fSB9O1xufVxuXG5leHBvcnQgY29uc3QgRmlsZVNvdXJjZUNvZGVNYXAgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBGaWxlU291cmNlQ29kZU1hcCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIE9iamVjdC5lbnRyaWVzKG1lc3NhZ2UuZmlsZU5hbWVUb0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeS5lbmNvZGUoeyBrZXk6IGtleSBhcyBhbnksIHZhbHVlIH0sIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWxlU291cmNlQ29kZU1hcCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlU291cmNlQ29kZU1hcCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudHJ5MSA9IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBpZiAoZW50cnkxLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UuZmlsZU5hbWVUb0NvZGVbZW50cnkxLmtleV0gPSBlbnRyeTEudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRmlsZVNvdXJjZUNvZGVNYXAge1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlTmFtZVRvQ29kZTogaXNPYmplY3Qob2JqZWN0LmZpbGVOYW1lVG9Db2RlKVxuICAgICAgICA/IE9iamVjdC5lbnRyaWVzKG9iamVjdC5maWxlTmFtZVRvQ29kZSkucmVkdWNlPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+KChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBGaWxlU291cmNlQ29kZU1hcCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgb2JqLmZpbGVOYW1lVG9Db2RlID0ge307XG4gICAgaWYgKG1lc3NhZ2UuZmlsZU5hbWVUb0NvZGUpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKG1lc3NhZ2UuZmlsZU5hbWVUb0NvZGUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBvYmouZmlsZU5hbWVUb0NvZGVba10gPSB2O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWxlU291cmNlQ29kZU1hcD4pOiBGaWxlU291cmNlQ29kZU1hcCB7XG4gICAgcmV0dXJuIEZpbGVTb3VyY2VDb2RlTWFwLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RmlsZVNvdXJjZUNvZGVNYXA+KTogRmlsZVNvdXJjZUNvZGVNYXAge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZVNvdXJjZUNvZGVNYXAoKTtcbiAgICBtZXNzYWdlLmZpbGVOYW1lVG9Db2RlID0gT2JqZWN0LmVudHJpZXMob2JqZWN0LmZpbGVOYW1lVG9Db2RlID8/IHt9KS5yZWR1Y2U8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY2Nba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkoKTogRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSB7XG4gIHJldHVybiB7IGtleTogXCJcIiwgdmFsdWU6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uua2V5ICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5rZXkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uua2V5ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5IHtcbiAgICByZXR1cm4geyBrZXk6IGlzU2V0KG9iamVjdC5rZXkpID8gU3RyaW5nKG9iamVjdC5rZXkpIDogXCJcIiwgdmFsdWU6IGlzU2V0KG9iamVjdC52YWx1ZSkgPyBTdHJpbmcob2JqZWN0LnZhbHVlKSA6IFwiXCIgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5rZXkgIT09IHVuZGVmaW5lZCAmJiAob2JqLmtleSA9IG1lc3NhZ2Uua2V5KTtcbiAgICBtZXNzYWdlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgKG9iai52YWx1ZSA9IG1lc3NhZ2UudmFsdWUpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5Pik6IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkge1xuICAgIHJldHVybiBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeT4pOiBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkoKTtcbiAgICBtZXNzYWdlLmtleSA9IG9iamVjdC5rZXkgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnZhbHVlID0gb2JqZWN0LnZhbHVlID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlU291cmNlQ29kZUxpbmVNYXBwaW5nKCk6IFNvdXJjZUNvZGVMaW5lTWFwcGluZyB7XG4gIHJldHVybiB7XG4gICAgY2h1bmtOYW1lOiBcIlwiLFxuICAgIHNvdXJjZUZpbGVOYW1lOiBcIlwiLFxuICAgIG9yaWdpbmFsTGluZU51bWJlcjogMCxcbiAgICBnZW5lcmF0ZWRMaW5lTnVtYmVyOiAwLFxuICAgIG9yaWdpbmFsQ29sdW1uTnVtYmVyOiAwLFxuICAgIGdlbmVyYXRlZENvbHVtbk51bWJlcjogMCxcbiAgICBzb3VyY2VGdW5jdGlvbk5hbWU6IFwiXCIsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBTb3VyY2VDb2RlTGluZU1hcHBpbmcgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTb3VyY2VDb2RlTGluZU1hcHBpbmcsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5jaHVua05hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmNodW5rTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNvdXJjZUZpbGVOYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5zb3VyY2VGaWxlTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS5vcmlnaW5hbExpbmVOdW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5pbnQzMihtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW5hbENvbHVtbk51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MCkuaW50MzIobWVzc2FnZS5vcmlnaW5hbENvbHVtbk51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zb3VyY2VGdW5jdGlvbk5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLnN0cmluZyhtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU291cmNlQ29kZUxpbmVNYXBwaW5nIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNvdXJjZUNvZGVMaW5lTWFwcGluZygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2h1bmtOYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcmlnaW5hbExpbmVOdW1iZXIgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDU4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFNvdXJjZUNvZGVMaW5lTWFwcGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNodW5rTmFtZTogaXNTZXQob2JqZWN0LmNodW5rTmFtZSkgPyBTdHJpbmcob2JqZWN0LmNodW5rTmFtZSkgOiBcIlwiLFxuICAgICAgc291cmNlRmlsZU5hbWU6IGlzU2V0KG9iamVjdC5zb3VyY2VGaWxlTmFtZSkgPyBTdHJpbmcob2JqZWN0LnNvdXJjZUZpbGVOYW1lKSA6IFwiXCIsXG4gICAgICBvcmlnaW5hbExpbmVOdW1iZXI6IGlzU2V0KG9iamVjdC5vcmlnaW5hbExpbmVOdW1iZXIpID8gTnVtYmVyKG9iamVjdC5vcmlnaW5hbExpbmVOdW1iZXIpIDogMCxcbiAgICAgIGdlbmVyYXRlZExpbmVOdW1iZXI6IGlzU2V0KG9iamVjdC5nZW5lcmF0ZWRMaW5lTnVtYmVyKSA/IE51bWJlcihvYmplY3QuZ2VuZXJhdGVkTGluZU51bWJlcikgOiAwLFxuICAgICAgb3JpZ2luYWxDb2x1bW5OdW1iZXI6IGlzU2V0KG9iamVjdC5vcmlnaW5hbENvbHVtbk51bWJlcikgPyBOdW1iZXIob2JqZWN0Lm9yaWdpbmFsQ29sdW1uTnVtYmVyKSA6IDAsXG4gICAgICBnZW5lcmF0ZWRDb2x1bW5OdW1iZXI6IGlzU2V0KG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpID8gTnVtYmVyKG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpIDogMCxcbiAgICAgIHNvdXJjZUZ1bmN0aW9uTmFtZTogaXNTZXQob2JqZWN0LnNvdXJjZUZ1bmN0aW9uTmFtZSkgPyBTdHJpbmcob2JqZWN0LnNvdXJjZUZ1bmN0aW9uTmFtZSkgOiBcIlwiLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFNvdXJjZUNvZGVMaW5lTWFwcGluZyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5jaHVua05hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmNodW5rTmFtZSA9IG1lc3NhZ2UuY2h1bmtOYW1lKTtcbiAgICBtZXNzYWdlLnNvdXJjZUZpbGVOYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5zb3VyY2VGaWxlTmFtZSA9IG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUpO1xuICAgIG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgKG9iai5vcmlnaW5hbExpbmVOdW1iZXIgPSBNYXRoLnJvdW5kKG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyKSk7XG4gICAgbWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgKG9iai5nZW5lcmF0ZWRMaW5lTnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIpKTtcbiAgICBtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgKG9iai5vcmlnaW5hbENvbHVtbk51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5vcmlnaW5hbENvbHVtbk51bWJlcikpO1xuICAgIG1lc3NhZ2UuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmouZ2VuZXJhdGVkQ29sdW1uTnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlcikpO1xuICAgIG1lc3NhZ2Uuc291cmNlRnVuY3Rpb25OYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5zb3VyY2VGdW5jdGlvbk5hbWUgPSBtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNvdXJjZUNvZGVMaW5lTWFwcGluZz4pOiBTb3VyY2VDb2RlTGluZU1hcHBpbmcge1xuICAgIHJldHVybiBTb3VyY2VDb2RlTGluZU1hcHBpbmcuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlTGluZU1hcHBpbmc+KTogU291cmNlQ29kZUxpbmVNYXBwaW5nIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNvdXJjZUNvZGVMaW5lTWFwcGluZygpO1xuICAgIG1lc3NhZ2UuY2h1bmtOYW1lID0gb2JqZWN0LmNodW5rTmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUgPSBvYmplY3Quc291cmNlRmlsZU5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlciA9IG9iamVjdC5vcmlnaW5hbExpbmVOdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgPSBvYmplY3QuZ2VuZXJhdGVkTGluZU51bWJlciA/PyAwO1xuICAgIG1lc3NhZ2Uub3JpZ2luYWxDb2x1bW5OdW1iZXIgPSBvYmplY3Qub3JpZ2luYWxDb2x1bW5OdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciA9IG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSA9IG9iamVjdC5zb3VyY2VGdW5jdGlvbk5hbWUgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlZXBQYXJ0aWFsPFU+PiA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNTZXQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==