@wireio/protoc-gen-solana 1.0.7 → 1.0.9
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/dist/bin/protoc-gen-solana +0 -0
- package/dist/bundle/protoc-gen-solana.cjs +168 -22
- package/dist/bundle/protoc-gen-solana.cjs.map +4 -4
- package/lib/generator/field.js +5 -5
- package/lib/generator/message.d.ts +1 -1
- package/lib/generator/message.d.ts.map +1 -1
- package/lib/generator/message.js +88 -2
- package/lib/plugin.js +2 -2
- package/lib/util/names.d.ts +13 -0
- package/lib/util/names.d.ts.map +1 -1
- package/lib/util/names.js +36 -1
- package/package.json +1 -1
package/lib/generator/field.js
CHANGED
|
@@ -20,7 +20,7 @@ function isMessage(field) {
|
|
|
20
20
|
* Generate the Rust struct member declaration for a field.
|
|
21
21
|
*/
|
|
22
22
|
function genStructMember(field) {
|
|
23
|
-
const rustName = (0, names_js_1.
|
|
23
|
+
const rustName = (0, names_js_1.toRustFieldName)(field.name);
|
|
24
24
|
let rustType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
|
|
25
25
|
if (field.mapEntry) {
|
|
26
26
|
const keyType = (0, type_map_js_1.resolveRustType)(field.mapEntry.keyType, undefined);
|
|
@@ -41,7 +41,7 @@ function genStructMember(field) {
|
|
|
41
41
|
* Returns Rust statements that append encoded bytes to a `Vec<u8> buf`.
|
|
42
42
|
*/
|
|
43
43
|
function genFieldEncode(field) {
|
|
44
|
-
const rustName = (0, names_js_1.
|
|
44
|
+
const rustName = (0, names_js_1.toRustFieldName)(field.name);
|
|
45
45
|
const typeInfo = type_map_js_1.PROTO_TYPE_MAP[field.type];
|
|
46
46
|
if (!typeInfo) {
|
|
47
47
|
logger_js_1.log.warn(`Skipping unsupported field type ${field.type} for ${field.name}`);
|
|
@@ -65,7 +65,7 @@ function genFieldEncode(field) {
|
|
|
65
65
|
* Returns a `TAG => { ... }` arm.
|
|
66
66
|
*/
|
|
67
67
|
function genFieldDecode(field) {
|
|
68
|
-
const rustName = (0, names_js_1.
|
|
68
|
+
const rustName = (0, names_js_1.toRustFieldName)(field.name);
|
|
69
69
|
const typeInfo = type_map_js_1.PROTO_TYPE_MAP[field.type];
|
|
70
70
|
if (!typeInfo) {
|
|
71
71
|
return ` // TODO: unsupported field type ${field.type} for ${field.name}`;
|
|
@@ -145,7 +145,7 @@ function genRepeatedEncode(field, rustName, typeInfo, tagHex) {
|
|
|
145
145
|
return lines.join("\n");
|
|
146
146
|
}
|
|
147
147
|
function genMapEncode(field, tagHex) {
|
|
148
|
-
const rustName = (0, names_js_1.
|
|
148
|
+
const rustName = (0, names_js_1.toRustFieldName)(field.name);
|
|
149
149
|
const me = field.mapEntry;
|
|
150
150
|
const keyInfo = type_map_js_1.PROTO_TYPE_MAP[me.keyType];
|
|
151
151
|
const valInfo = type_map_js_1.PROTO_TYPE_MAP[me.valueType];
|
|
@@ -298,4 +298,4 @@ function genMapDecode(field, rustName, tag) {
|
|
|
298
298
|
lines.push(` _ => {`, ` pos = skip_field(data, pos, entry_tag & 0x07)?;`, ` }`, ` }`, ` }`, ` msg.${rustName}_keys.push(key);`, ` msg.${rustName}_values.push(val);`, ` }`);
|
|
299
299
|
return lines.join("\n");
|
|
300
300
|
}
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUJBLGdDQUVDO0FBR0QsOEJBRUM7QUFLRCwwQ0FzQkM7QUFNRCx3Q0E0QkM7QUFNRCx3Q0EwQkM7QUEzSEQsK0NBQThDO0FBQzlDLCtDQU9zQjtBQUN0QixpREFBdUM7QUFhdkMsK0NBQStDO0FBQy9DLFNBQWdCLFVBQVUsQ0FBQyxLQUFnQjtJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsU0FBZ0IsU0FBUyxDQUFDLEtBQWdCO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEtBQWdCO0lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUEsc0JBQVcsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDeEMsSUFBSSxRQUFRLEdBQUcsSUFBQSw2QkFBZSxFQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTFELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWUsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFlLEVBQzdCLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDN0IsQ0FBQTtRQUNELDJDQUEyQztRQUMzQyxPQUFPO1lBQ0wsV0FBVyxRQUFRLGNBQWMsT0FBTyxJQUFJO1lBQzVDLFdBQVcsUUFBUSxnQkFBZ0IsT0FBTyxJQUFJO1NBQy9DLENBQUMs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QUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcIi4uL3V0aWwvbmFtZXMuanNcIlxuaW1wb3J0IHtcbiAgUFJPVE9fVFlQRV9NQVAsXG4gIFdpcmVUeXBlLFxuICBmaWVsZFRhZyxcbiAgcmVzb2x2ZVJ1c3RUeXBlLFxuICBuZWVkc1ZhcmludENhc3QsXG4gIHZhcmludERlY29kZUNhc3Rcbn0gZnJvbSBcIi4vdHlwZS1tYXAuanNcIlxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCJcblxuLyoqIFBhcnNlZCBmaWVsZCBkZXNjcmlwdG9yIHN1YnNldCBuZWVkZWQgZm9yIGNvZGVnZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkSW5mbyB7XG4gIG5hbWU6IHN0cmluZ1xuICBudW1iZXI6IG51bWJlclxuICB0eXBlOiBudW1iZXJcbiAgdHlwZU5hbWU/OiBzdHJpbmdcbiAgbGFiZWw6IG51bWJlciAvLyAxPW9wdGlvbmFsLCAyPXJlcXVpcmVkLCAzPXJlcGVhdGVkXG4gIG9uZW9mSW5kZXg/OiBudW1iZXJcbiAgbWFwRW50cnk/OiB7IGtleVR5cGU6IG51bWJlcjsgdmFsdWVUeXBlOiBudW1iZXI7IHZhbHVlVHlwZU5hbWU/OiBzdHJpbmcgfVxufVxuXG4vKiogQ2hlY2sgaWYgZmllbGQgaXMgcmVwZWF0ZWQgKGxhYmVsID09IDMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwZWF0ZWQoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQubGFiZWwgPT09IDNcbn1cblxuLyoqIENoZWNrIGlmIGZpZWxkIGlzIGEgbWVzc2FnZSB0eXBlICh0eXBlID09IDExKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2UoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQudHlwZSA9PT0gMTFcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgUnVzdCBzdHJ1Y3QgbWVtYmVyIGRlY2xhcmF0aW9uIGZvciBhIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuU3RydWN0TWVtYmVyKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGxldCBydXN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICBjb25zdCBrZXlUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKGZpZWxkLm1hcEVudHJ5LmtleVR5cGUsIHVuZGVmaW5lZClcbiAgICBjb25zdCB2YWxUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlLFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlTmFtZVxuICAgIClcbiAgICAvLyBNYXBzIGJlY29tZSBwYXJhbGxlbCBWZWNzOiBrZXlzICsgdmFsdWVzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgcHViICR7cnVzdE5hbWV9X2tleXM6IFZlYzwke2tleVR5cGV9PixgLFxuICAgICAgYCAgICBwdWIgJHtydXN0TmFtZX1fdmFsdWVzOiBWZWM8JHt2YWxUeXBlfT4sYFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcnVzdFR5cGUgPSBgVmVjPCR7cnVzdFR5cGV9PmBcbiAgfVxuXG4gIHJldHVybiBgICAgIHB1YiAke3J1c3ROYW1lfTogJHtydXN0VHlwZX0sYFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGVuY29kZSBsb2dpYyBmb3IgYSBzaW5nbGUgZmllbGQuXG4gKiBSZXR1cm5zIFJ1c3Qgc3RhdGVtZW50cyB0aGF0IGFwcGVuZCBlbmNvZGVkIGJ5dGVzIHRvIGEgYFZlYzx1OD4gYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRW5jb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgbG9nLndhcm4oYFNraXBwaW5nIHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWApXG4gICAgcmV0dXJuIGAgICAgICAgIC8vIFRPRE86IHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWBcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGZpZWxkVGFnKFxuICAgIGZpZWxkLm51bWJlcixcbiAgICBmaWVsZC5tYXBFbnRyeSA/IFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZCA6IHR5cGVJbmZvLndpcmVUeXBlXG4gIClcbiAgY29uc3QgdGFnSGV4ID0gYDB4JHt0YWcudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcEVuY29kZShmaWVsZCwgdGFnSGV4KVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlblJlcGVhdGVkRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbiAgfVxuXG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlbk1lc3NhZ2VFbmNvZGUoZmllbGQsIHJ1c3ROYW1lLCB0YWdIZXgpXG4gIH1cblxuICByZXR1cm4gZ2VuU2NhbGFyRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZWNvZGUgYnJhbmNoIGZvciBhIHNpbmdsZSBmaWVsZCB3aXRoaW4gdGhlIHRhZy1kaXNwYXRjaCBtYXRjaC5cbiAqIFJldHVybnMgYSBgVEFHID0+IHsgLi4uIH1gIGFybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRGVjb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAvLyBUT0RPOiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gXG4gIH1cblxuICBjb25zdCB0YWcgPSBmaWVsZFRhZyhcbiAgICBmaWVsZC5udW1iZXIsXG4gICAgZmllbGQubWFwRW50cnkgPyBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgOiB0eXBlSW5mby53aXJlVHlwZVxuICApXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHRhZylcbiAgfVxuXG4gIGlmIChpc1JlcGVhdGVkKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5SZXBlYXRlZERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG4gIH1cblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5NZXNzYWdlRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnKVxuICB9XG5cbiAgcmV0dXJuIGdlblNjYWxhckRlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBjb2RlZ2VuIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGdlblNjYWxhckVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBjYXN0ID0gbmVlZHNWYXJpbnRDYXN0KGZpZWxkLnR5cGUpXG4gIC8vIEZvciBmbG9hdCB0eXBlcywgbmVlZCB0byBwYXNzIGJpdHNcbiAgaWYgKGZpZWxkLnR5cGUgPT09IDEpIHtcbiAgICAvLyBkb3VibGUg4oaSIGY2NC50b19iaXRzKCkg4oaSIHU2NFxuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICBlbmNvZGVfZml4ZWQ2NCgmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfS50b19iaXRzKCkpO2BcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gMikge1xuICAgIC8vIGZsb2F0IOKGkiBmMzIudG9fYml0cygpIOKGkiB1MzJcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgICAgYCAgICAgICAgZW5jb2RlX2ZpeGVkMzIoJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0udG9fYml0cygpKTtgXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cbiAgaWYgKHR5cGVJbmZvLmVuY29kZVJlZikge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAmc2VsZi4ke3J1c3ROYW1lfSk7YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0ke2Nhc3R9KTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NZXNzYWdlRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0YWdIZXg6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgYCAgICAgICAgbGV0ICR7cnVzdE5hbWV9X2VuY29kZWQgPSBzZWxmLiR7cnVzdE5hbWV9LmVuY29kZSgpO2AsXG4gICAgYCAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgJHtydXN0TmFtZX1fZW5jb2RlZC5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCYke3J1c3ROYW1lfV9lbmNvZGVkKTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5SZXBlYXRlZEVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGZvciBlbGVtIGluICZzZWxmLiR7cnVzdE5hbWV9IHtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2ApXG5cbiAgaWYgKGlzTWVzc2FnZShmaWVsZCkpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgIGxldCBlbGVtX2VuY29kZWQgPSBlbGVtLmVuY29kZSgpO2AsXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgZWxlbV9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJmVsZW1fZW5jb2RlZCk7YFxuICAgIClcbiAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAxKSB7XG4gICAgLy8gcmVwZWF0ZWQgZG91YmxlXG4gICAgbGluZXMucHVzaChgICAgICAgICAgICAgZW5jb2RlX2ZpeGVkNjQoJm11dCBidWYsIGVsZW0udG9fYml0cygpKTtgKVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IDIpIHtcbiAgICAvLyByZXBlYXRlZCBmbG9hdFxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGVuY29kZV9maXhlZDMyKCZtdXQgYnVmLCBlbGVtLnRvX2JpdHMoKSk7YClcbiAgfSBlbHNlIGlmICh0eXBlSW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCBlbGVtKTtgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNhc3QgPSBuZWVkc1ZhcmludENhc3QoZmllbGQudHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAqZWxlbSR7Y2FzdH0pO2ApXG4gIH1cblxuICBsaW5lcy5wdXNoKGAgICAgICAgIH1gKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBFbmNvZGUoZmllbGQ6IEZpZWxkSW5mbywgdGFnSGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IG1lID0gZmllbGQubWFwRW50cnkhXG4gIGNvbnN0IGtleUluZm8gPSBQUk9UT19UWVBFX01BUFttZS5rZXlUeXBlXVxuICBjb25zdCB2YWxJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUudmFsdWVUeXBlXVxuXG4gIGNvbnN0IGtleVRhZyA9IGAweCR7ZmllbGRUYWcoMSwga2V5SW5mby53aXJlVHlwZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG4gIGNvbnN0IGtleUNhc3QgPSBuZWVkc1ZhcmludENhc3QobWUua2V5VHlwZSlcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLiR7cnVzdE5hbWV9X2tleXMubGVuKCkge2AsXG4gICAgYCAgICAgICAgICAgIGxldCBtdXQgZW50cnkgPSBWZWM6Om5ldygpO2AsXG4gICAgYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBlbnRyeSwgJHtrZXlUYWd9KTtgXG4gIF1cblxuICBpZiAoa2V5SW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgJnNlbGYuJHtydXN0TmFtZX1fa2V5c1tpXSk7YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgc2VsZi4ke3J1c3ROYW1lfV9rZXlzW2ldJHtrZXlDYXN0fSk7YClcbiAgfVxuXG4gIGlmIChtZS52YWx1ZVR5cGUgPT09IDExKSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGVudHJ5LCAke3ZhbFRhZ30pO2AsXG4gICAgICBgICAgICAgICAgICAgbGV0IHZhbF9lbmNvZGVkID0gc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgZW50cnksIHZhbF9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbnRyeS5leHRlbmRfZnJvbV9zbGljZSgmdmFsX2VuY29kZWQpO2BcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCB2YWxJbmZvLndpcmVUeXBlKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICBjb25zdCB2YWxDYXN0ID0gbmVlZHNWYXJpbnRDYXN0KG1lLnZhbHVlVHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgZW50cnksICR7dmFsVGFnfSk7YClcbiAgICBpZiAodmFsSW5mby5lbmNvZGVSZWYpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCAmc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0pO2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCBzZWxmLiR7cnVzdE5hbWV9X3ZhbHVlc1tpXSR7dmFsQ2FzdH0pO2ApXG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaChcbiAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbnRyeS5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnkpO2AsXG4gICAgYCAgICAgICAgfWBcbiAgKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY2FsYXJEZWNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHR5cGVJbmZvOiAodHlwZW9mIFBST1RPX1RZUEVfTUFQKVtudW1iZXJdLFxuICB0YWc6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICAvLyBGbG9hdCB0eXBlcyBuZWVkIGZyb21fYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0Ojpmcm9tX2JpdHNcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0ICh2LCBuZXdfcG9zKSA9IGRlY29kZV9maXhlZDY0KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfSA9IGY2NDo6ZnJvbV9iaXRzKHYpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMjo6ZnJvbV9iaXRzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSBmMzI6OmZyb21fYml0cyh2KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgICBgICAgICAgICAgICAgfWBcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke3R5cGVJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSB2JHtjYXN0fTtgLFxuICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgIGAgICAgICAgICAgICB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuZnVuY3Rpb24gZ2VuTWVzc2FnZURlY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdFR5cGUgPSByZXNvbHZlUnVzdFR5cGUoZmllbGQudHlwZSwgZmllbGQudHlwZU5hbWUpXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAobGVuLCBuZXdfcG9zKSA9IGRlY29kZV92YXJpbnQoZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXdfcG9zICsgbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSAke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICBgICAgICAgICAgICAgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRGVjb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0IChsZW4sIG5ld19wb3MpID0gZGVjb2RlX3ZhcmludChkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3X3BvcyArIGxlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaCgke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICAgICAgJHt0YWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gZGVjb2RlX2ZpeGVkNjQoZGF0YSwgcG9zKT87YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2goZjY0Ojpmcm9tX2JpdHModikpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaChmMzI6OmZyb21fYml0cyh2KSk7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgICAgYCAgICAgICAgICAgIH1gXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt0eXBlSW5mby5kZWNvZGVGdW5jfShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2godiR7Y2FzdH0pO2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBEZWNvZGUoZmllbGQ6IEZpZWxkSW5mbywgcnVzdE5hbWU6IHN0cmluZywgdGFnOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtZSA9IGZpZWxkLm1hcEVudHJ5IVxuICBjb25zdCBrZXlJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUua2V5VHlwZV1cbiAgY29uc3QgdmFsSW5mbyA9IFBST1RPX1RZUEVfTUFQW21lLnZhbHVlVHlwZV1cbiAgY29uc3Qga2V5U29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLmtleVR5cGUsIHVuZGVmaW5lZClcbiAgY29uc3QgdmFsU29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLnZhbHVlVHlwZSwgbWUudmFsdWVUeXBlTmFtZSlcblxuICBjb25zdCBrZXlUYWcgPSBmaWVsZFRhZygxLCBrZXlJbmZvLndpcmVUeXBlKVxuICBjb25zdCBrZXlDYXN0ID0gdmFyaW50RGVjb2RlQ2FzdChtZS5rZXlUeXBlKVxuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKGVudHJ5X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgZW50cnlfZW5kID0gcG9zICsgZW50cnlfbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IGtleTogJHtrZXlTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IHZhbDogJHt2YWxTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPCBlbnRyeV9lbmQge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgbGV0IChlbnRyeV90YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICBtYXRjaCBlbnRyeV90YWcge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7a2V5VGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke2tleUluZm8uZGVjb2RlRnVuY30oZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHYke2tleUNhc3R9O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gIF1cblxuICBpZiAobWUudmFsdWVUeXBlID09PSAxMSkge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZClcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsVGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICh2X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2X2VuZCA9IG5ld19wb3MgKyB2X2xlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAke3ZhbFNvbH06OmRlY29kZSgmZGF0YVtuZXdfcG9zLi52X2VuZF0pPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB2X2VuZDtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIHZhbEluZm8ud2lyZVR5cGUpXG4gICAgY29uc3QgdmFsQ2FzdCA9IHZhcmludERlY29kZUNhc3QobWUudmFsdWVUeXBlKVxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWxUYWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt2YWxJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHYke3ZhbENhc3R9O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgIClcbiAgfVxuXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgZW50cnlfdGFnICYgMHgwNyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgfWAsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX1fa2V5cy5wdXNoKGtleSk7YCxcbiAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfV92YWx1ZXMucHVzaCh2YWwpO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cbiJdfQ==
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUJBLGdDQUVDO0FBR0QsOEJBRUM7QUFLRCwwQ0FzQkM7QUFNRCx3Q0E0QkM7QUFNRCx3Q0EwQkM7QUEzSEQsK0NBQStEO0FBQy9ELCtDQU9zQjtBQUN0QixpREFBdUM7QUFhdkMsK0NBQStDO0FBQy9DLFNBQWdCLFVBQVUsQ0FBQyxLQUFnQjtJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsU0FBZ0IsU0FBUyxDQUFDLEtBQWdCO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEtBQWdCO0lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUEsMEJBQWUsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUMsSUFBSSxRQUFRLEdBQUcsSUFBQSw2QkFBZSxFQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTFELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWUsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFlLEVBQzdCLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDN0IsQ0FBQTtRQUNELDJDQUEyQztRQUMzQyxPQUFPO1lBQ0wsV0FBVyxRQUFRLGNBQWMsT0FBTyxJQUFJO1lBQzVDLFdBQVcsUUFBUSxnQkFBZ0IsT0FBTyxJQUFJO1NBQy9DLENBQUMs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QUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvU25ha2VDYXNlLCB0b1J1c3RGaWVsZE5hbWUgfSBmcm9tIFwiLi4vdXRpbC9uYW1lcy5qc1wiXG5pbXBvcnQge1xuICBQUk9UT19UWVBFX01BUCxcbiAgV2lyZVR5cGUsXG4gIGZpZWxkVGFnLFxuICByZXNvbHZlUnVzdFR5cGUsXG4gIG5lZWRzVmFyaW50Q2FzdCxcbiAgdmFyaW50RGVjb2RlQ2FzdFxufSBmcm9tIFwiLi90eXBlLW1hcC5qc1wiXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi4vdXRpbC9sb2dnZXIuanNcIlxuXG4vKiogUGFyc2VkIGZpZWxkIGRlc2NyaXB0b3Igc3Vic2V0IG5lZWRlZCBmb3IgY29kZWdlbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRJbmZvIHtcbiAgbmFtZTogc3RyaW5nXG4gIG51bWJlcjogbnVtYmVyXG4gIHR5cGU6IG51bWJlclxuICB0eXBlTmFtZT86IHN0cmluZ1xuICBsYWJlbDogbnVtYmVyIC8vIDE9b3B0aW9uYWwsIDI9cmVxdWlyZWQsIDM9cmVwZWF0ZWRcbiAgb25lb2ZJbmRleD86IG51bWJlclxuICBtYXBFbnRyeT86IHsga2V5VHlwZTogbnVtYmVyOyB2YWx1ZVR5cGU6IG51bWJlcjsgdmFsdWVUeXBlTmFtZT86IHN0cmluZyB9XG59XG5cbi8qKiBDaGVjayBpZiBmaWVsZCBpcyByZXBlYXRlZCAobGFiZWwgPT0gMykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXBlYXRlZChmaWVsZDogRmllbGRJbmZvKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWVsZC5sYWJlbCA9PT0gM1xufVxuXG4vKiogQ2hlY2sgaWYgZmllbGQgaXMgYSBtZXNzYWdlIHR5cGUgKHR5cGUgPT0gMTEpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWVzc2FnZShmaWVsZDogRmllbGRJbmZvKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWVsZC50eXBlID09PSAxMVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBSdXN0IHN0cnVjdCBtZW1iZXIgZGVjbGFyYXRpb24gZm9yIGEgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5TdHJ1Y3RNZW1iZXIoZmllbGQ6IEZpZWxkSW5mbyk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1c3ROYW1lID0gdG9SdXN0RmllbGROYW1lKGZpZWxkLm5hbWUpXG4gIGxldCBydXN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICBjb25zdCBrZXlUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKGZpZWxkLm1hcEVudHJ5LmtleVR5cGUsIHVuZGVmaW5lZClcbiAgICBjb25zdCB2YWxUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlLFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlTmFtZVxuICAgIClcbiAgICAvLyBNYXBzIGJlY29tZSBwYXJhbGxlbCBWZWNzOiBrZXlzICsgdmFsdWVzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgcHViICR7cnVzdE5hbWV9X2tleXM6IFZlYzwke2tleVR5cGV9PixgLFxuICAgICAgYCAgICBwdWIgJHtydXN0TmFtZX1fdmFsdWVzOiBWZWM8JHt2YWxUeXBlfT4sYFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcnVzdFR5cGUgPSBgVmVjPCR7cnVzdFR5cGV9PmBcbiAgfVxuXG4gIHJldHVybiBgICAgIHB1YiAke3J1c3ROYW1lfTogJHtydXN0VHlwZX0sYFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGVuY29kZSBsb2dpYyBmb3IgYSBzaW5nbGUgZmllbGQuXG4gKiBSZXR1cm5zIFJ1c3Qgc3RhdGVtZW50cyB0aGF0IGFwcGVuZCBlbmNvZGVkIGJ5dGVzIHRvIGEgYFZlYzx1OD4gYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRW5jb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvUnVzdEZpZWxkTmFtZShmaWVsZC5uYW1lKVxuICBjb25zdCB0eXBlSW5mbyA9IFBST1RPX1RZUEVfTUFQW2ZpZWxkLnR5cGVdXG5cbiAgaWYgKCF0eXBlSW5mbykge1xuICAgIGxvZy53YXJuKGBTa2lwcGluZyB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gKVxuICAgIHJldHVybiBgICAgICAgICAvLyBUT0RPOiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gXG4gIH1cblxuICBjb25zdCB0YWcgPSBmaWVsZFRhZyhcbiAgICBmaWVsZC5udW1iZXIsXG4gICAgZmllbGQubWFwRW50cnkgPyBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgOiB0eXBlSW5mby53aXJlVHlwZVxuICApXG4gIGNvbnN0IHRhZ0hleCA9IGAweCR7dGFnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuXG4gIGlmIChmaWVsZC5tYXBFbnRyeSkge1xuICAgIHJldHVybiBnZW5NYXBFbmNvZGUoZmllbGQsIHRhZ0hleClcbiAgfVxuXG4gIGlmIChpc1JlcGVhdGVkKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5SZXBlYXRlZEVuY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWdIZXgpXG4gIH1cblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5NZXNzYWdlRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnSGV4KVxuICB9XG5cbiAgcmV0dXJuIGdlblNjYWxhckVuY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWdIZXgpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgZGVjb2RlIGJyYW5jaCBmb3IgYSBzaW5nbGUgZmllbGQgd2l0aGluIHRoZSB0YWctZGlzcGF0Y2ggbWF0Y2guXG4gKiBSZXR1cm5zIGEgYFRBRyA9PiB7IC4uLiB9YCBhcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5GaWVsZERlY29kZShmaWVsZDogRmllbGRJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgcnVzdE5hbWUgPSB0b1J1c3RGaWVsZE5hbWUoZmllbGQubmFtZSlcbiAgY29uc3QgdHlwZUluZm8gPSBQUk9UT19UWVBFX01BUFtmaWVsZC50eXBlXVxuXG4gIGlmICghdHlwZUluZm8pIHtcbiAgICByZXR1cm4gYCAgICAgICAgICAgIC8vIFRPRE86IHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWBcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGZpZWxkVGFnKFxuICAgIGZpZWxkLm51bWJlcixcbiAgICBmaWVsZC5tYXBFbnRyeSA/IFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZCA6IHR5cGVJbmZvLndpcmVUeXBlXG4gIClcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICByZXR1cm4gZ2VuTWFwRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlblJlcGVhdGVkRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZylcbiAgfVxuXG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlbk1lc3NhZ2VEZWNvZGUoZmllbGQsIHJ1c3ROYW1lLCB0YWcpXG4gIH1cblxuICByZXR1cm4gZ2VuU2NhbGFyRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZylcbn1cblxuLy8g4pSA4pSAIEludGVybmFsIGNvZGVnZW4gaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gZ2VuU2NhbGFyRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnSGV4OiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGNhc3QgPSBuZWVkc1ZhcmludENhc3QoZmllbGQudHlwZSlcbiAgLy8gRm9yIGZsb2F0IHR5cGVzLCBuZWVkIHRvIHBhc3MgYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0LnRvX2JpdHMoKSDihpIgdTY0XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgIGVuY29kZV9rZXkoJm11dCBidWYsICR7dGFnSGV4fSk7YCxcbiAgICAgIGAgICAgICAgIGVuY29kZV9maXhlZDY0KCZtdXQgYnVmLCBzZWxmLiR7cnVzdE5hbWV9LnRvX2JpdHMoKSk7YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMi50b19iaXRzKCkg4oaSIHUzMlxuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICBlbmNvZGVfZml4ZWQzMigmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfS50b19iaXRzKCkpO2BcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuICBpZiAodHlwZUluZm8uZW5jb2RlUmVmKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgIGVuY29kZV9rZXkoJm11dCBidWYsICR7dGFnSGV4fSk7YCxcbiAgICAgIGAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsICZzZWxmLiR7cnVzdE5hbWV9KTtgXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cbiAgcmV0dXJuIFtcbiAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgYCAgICAgICAgJHt0eXBlSW5mby5lbmNvZGVGdW5jfSgmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfSR7Y2FzdH0pO2BcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlbk1lc3NhZ2VFbmNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICByZXR1cm4gW1xuICAgIGAgICAgICAgIGVuY29kZV9rZXkoJm11dCBidWYsICR7dGFnSGV4fSk7YCxcbiAgICBgICAgICAgICBsZXQgJHtydXN0TmFtZX1fZW5jb2RlZCA9IHNlbGYuJHtydXN0TmFtZX0uZW5jb2RlKCk7YCxcbiAgICBgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCAke3J1c3ROYW1lfV9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICBgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJiR7cnVzdE5hbWV9X2VuY29kZWQpO2BcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnSGV4OiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG4gIGxpbmVzLnB1c2goYCAgICAgICAgZm9yIGVsZW0gaW4gJnNlbGYuJHtydXN0TmFtZX0ge2ApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBidWYsICR7dGFnSGV4fSk7YClcblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgbGV0IGVsZW1fZW5jb2RlZCA9IGVsZW0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbGVtX2VuY29kZWQubGVuKCkgYXMgdTY0KTtgLFxuICAgICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZWxlbV9lbmNvZGVkKTtgXG4gICAgKVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IDEpIHtcbiAgICAvLyByZXBlYXRlZCBkb3VibGVcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfZml4ZWQ2NCgmbXV0IGJ1ZiwgZWxlbS50b19iaXRzKCkpO2ApXG4gIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gMikge1xuICAgIC8vIHJlcGVhdGVkIGZsb2F0XG4gICAgbGluZXMucHVzaChgICAgICAgICAgICAgZW5jb2RlX2ZpeGVkMzIoJm11dCBidWYsIGVsZW0udG9fYml0cygpKTtgKVxuICB9IGVsc2UgaWYgKHR5cGVJbmZvLmVuY29kZVJlZikge1xuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsIGVsZW0pO2ApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2FzdCA9IG5lZWRzVmFyaW50Q2FzdChmaWVsZC50eXBlKVxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsICplbGVtJHtjYXN0fSk7YClcbiAgfVxuXG4gIGxpbmVzLnB1c2goYCAgICAgICAgfWApXG4gIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlbk1hcEVuY29kZShmaWVsZDogRmllbGRJbmZvLCB0YWdIZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1c3ROYW1lID0gdG9SdXN0RmllbGROYW1lKGZpZWxkLm5hbWUpXG4gIGNvbnN0IG1lID0gZmllbGQubWFwRW50cnkhXG4gIGNvbnN0IGtleUluZm8gPSBQUk9UT19UWVBFX01BUFttZS5rZXlUeXBlXVxuICBjb25zdCB2YWxJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUudmFsdWVUeXBlXVxuXG4gIGNvbnN0IGtleVRhZyA9IGAweCR7ZmllbGRUYWcoMSwga2V5SW5mby53aXJlVHlwZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG4gIGNvbnN0IGtleUNhc3QgPSBuZWVkc1ZhcmludENhc3QobWUua2V5VHlwZSlcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLiR7cnVzdE5hbWV9X2tleXMubGVuKCkge2AsXG4gICAgYCAgICAgICAgICAgIGxldCBtdXQgZW50cnkgPSBWZWM6Om5ldygpO2AsXG4gICAgYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBlbnRyeSwgJHtrZXlUYWd9KTtgXG4gIF1cblxuICBpZiAoa2V5SW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgJnNlbGYuJHtydXN0TmFtZX1fa2V5c1tpXSk7YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgc2VsZi4ke3J1c3ROYW1lfV9rZXlzW2ldJHtrZXlDYXN0fSk7YClcbiAgfVxuXG4gIGlmIChtZS52YWx1ZVR5cGUgPT09IDExKSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGVudHJ5LCAke3ZhbFRhZ30pO2AsXG4gICAgICBgICAgICAgICAgICAgbGV0IHZhbF9lbmNvZGVkID0gc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgZW50cnksIHZhbF9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbnRyeS5leHRlbmRfZnJvbV9zbGljZSgmdmFsX2VuY29kZWQpO2BcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCB2YWxJbmZvLndpcmVUeXBlKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICBjb25zdCB2YWxDYXN0ID0gbmVlZHNWYXJpbnRDYXN0KG1lLnZhbHVlVHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgZW50cnksICR7dmFsVGFnfSk7YClcbiAgICBpZiAodmFsSW5mby5lbmNvZGVSZWYpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCAmc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0pO2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCBzZWxmLiR7cnVzdE5hbWV9X3ZhbHVlc1tpXSR7dmFsQ2FzdH0pO2ApXG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaChcbiAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbnRyeS5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnkpO2AsXG4gICAgYCAgICAgICAgfWBcbiAgKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY2FsYXJEZWNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHR5cGVJbmZvOiAodHlwZW9mIFBST1RPX1RZUEVfTUFQKVtudW1iZXJdLFxuICB0YWc6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICAvLyBGbG9hdCB0eXBlcyBuZWVkIGZyb21fYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0Ojpmcm9tX2JpdHNcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0ICh2LCBuZXdfcG9zKSA9IGRlY29kZV9maXhlZDY0KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfSA9IGY2NDo6ZnJvbV9iaXRzKHYpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMjo6ZnJvbV9iaXRzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSBmMzI6OmZyb21fYml0cyh2KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgICBgICAgICAgICAgICAgfWBcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke3R5cGVJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSB2JHtjYXN0fTtgLFxuICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgIGAgICAgICAgICAgICB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuZnVuY3Rpb24gZ2VuTWVzc2FnZURlY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdFR5cGUgPSByZXNvbHZlUnVzdFR5cGUoZmllbGQudHlwZSwgZmllbGQudHlwZU5hbWUpXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAobGVuLCBuZXdfcG9zKSA9IGRlY29kZV92YXJpbnQoZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXdfcG9zICsgbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSAke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICBgICAgICAgICAgICAgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRGVjb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0IChsZW4sIG5ld19wb3MpID0gZGVjb2RlX3ZhcmludChkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3X3BvcyArIGxlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaCgke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICAgICAgJHt0YWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gZGVjb2RlX2ZpeGVkNjQoZGF0YSwgcG9zKT87YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2goZjY0Ojpmcm9tX2JpdHModikpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaChmMzI6OmZyb21fYml0cyh2KSk7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgICAgYCAgICAgICAgICAgIH1gXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt0eXBlSW5mby5kZWNvZGVGdW5jfShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2godiR7Y2FzdH0pO2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBEZWNvZGUoZmllbGQ6IEZpZWxkSW5mbywgcnVzdE5hbWU6IHN0cmluZywgdGFnOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtZSA9IGZpZWxkLm1hcEVudHJ5IVxuICBjb25zdCBrZXlJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUua2V5VHlwZV1cbiAgY29uc3QgdmFsSW5mbyA9IFBST1RPX1RZUEVfTUFQW21lLnZhbHVlVHlwZV1cbiAgY29uc3Qga2V5U29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLmtleVR5cGUsIHVuZGVmaW5lZClcbiAgY29uc3QgdmFsU29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLnZhbHVlVHlwZSwgbWUudmFsdWVUeXBlTmFtZSlcblxuICBjb25zdCBrZXlUYWcgPSBmaWVsZFRhZygxLCBrZXlJbmZvLndpcmVUeXBlKVxuICBjb25zdCBrZXlDYXN0ID0gdmFyaW50RGVjb2RlQ2FzdChtZS5rZXlUeXBlKVxuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKGVudHJ5X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgZW50cnlfZW5kID0gcG9zICsgZW50cnlfbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IGtleTogJHtrZXlTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IHZhbDogJHt2YWxTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPCBlbnRyeV9lbmQge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgbGV0IChlbnRyeV90YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICBtYXRjaCBlbnRyeV90YWcge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7a2V5VGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke2tleUluZm8uZGVjb2RlRnVuY30oZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHYke2tleUNhc3R9O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gIF1cblxuICBpZiAobWUudmFsdWVUeXBlID09PSAxMSkge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZClcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsVGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICh2X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2X2VuZCA9IG5ld19wb3MgKyB2X2xlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAke3ZhbFNvbH06OmRlY29kZSgmZGF0YVtuZXdfcG9zLi52X2VuZF0pPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB2X2VuZDtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIHZhbEluZm8ud2lyZVR5cGUpXG4gICAgY29uc3QgdmFsQ2FzdCA9IHZhcmludERlY29kZUNhc3QobWUudmFsdWVUeXBlKVxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWxUYWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt2YWxJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHYke3ZhbENhc3R9O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgIClcbiAgfVxuXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgZW50cnlfdGFnICYgMHgwNyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgfWAsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX1fa2V5cy5wdXNoKGtleSk7YCxcbiAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfV92YWx1ZXMucHVzaCh2YWwpO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cbiJdfQ==
|
|
@@ -19,5 +19,5 @@ export interface MessageDescriptor {
|
|
|
19
19
|
* encode/decode impl blocks for all non-map-entry messages
|
|
20
20
|
* in a given proto file.
|
|
21
21
|
*/
|
|
22
|
-
export declare function generateRsFile(messages: MessageDescriptor[], protoFileName: string): string;
|
|
22
|
+
export declare function generateRsFile(messages: MessageDescriptor[], protoFileName: string, protoPackage?: string): string;
|
|
23
23
|
//# sourceMappingURL=message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/generator/message.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAIV,MAAM,YAAY,CAAA;AAGnB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,iBAAiB,EAAE,CAAA;IACnC,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAA;CACpB;
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/generator/message.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAIV,MAAM,YAAY,CAAA;AAGnB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,iBAAiB,EAAE,CAAA;IACnC,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAA;CACpB;AA8FD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CA4BR"}
|
package/lib/generator/message.js
CHANGED
|
@@ -4,12 +4,93 @@ exports.generateRsFile = generateRsFile;
|
|
|
4
4
|
const names_js_1 = require("../util/names.js");
|
|
5
5
|
const logger_js_1 = require("../util/logger.js");
|
|
6
6
|
const field_js_1 = require("./field.js");
|
|
7
|
+
/**
|
|
8
|
+
* Collect all cross-file message type references from a set of messages.
|
|
9
|
+
* Returns the set of fully-qualified type names that are NOT defined in
|
|
10
|
+
* the current file's message list.
|
|
11
|
+
*/
|
|
12
|
+
function collectExternalTypes(messages, currentProtoPackage) {
|
|
13
|
+
const localNames = new Set(messages.map(m => m.fullName));
|
|
14
|
+
// Also include nested (map entry) names
|
|
15
|
+
for (const m of messages) {
|
|
16
|
+
for (const nm of m.nestedMessages) {
|
|
17
|
+
localNames.add(nm.fullName);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const external = new Set();
|
|
21
|
+
for (const msg of messages) {
|
|
22
|
+
for (const field of msg.fields) {
|
|
23
|
+
if (field.type === 11 && field.typeName) {
|
|
24
|
+
const fqn = field.typeName.startsWith(".")
|
|
25
|
+
? field.typeName
|
|
26
|
+
: `.${field.typeName}`;
|
|
27
|
+
if (!localNames.has(fqn)) {
|
|
28
|
+
external.add(fqn);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return external;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert a fully-qualified proto type name to a Rust `use` path.
|
|
37
|
+
* e.g. ".sysio.opp.types.ChainAddress" → "crate::sysio::opp::types::types::ChainAddress"
|
|
38
|
+
*
|
|
39
|
+
* The module path maps proto package segments to directory/file structure.
|
|
40
|
+
* The last segment before the type name is repeated as the filename module.
|
|
41
|
+
*/
|
|
42
|
+
function fqnToRustUsePath(fqn) {
|
|
43
|
+
// Strip leading dot
|
|
44
|
+
const parts = fqn.replace(/^\./, "").split(".");
|
|
45
|
+
if (parts.length < 2)
|
|
46
|
+
return "";
|
|
47
|
+
// Last part is the type name, everything before is package path
|
|
48
|
+
const typeName = parts[parts.length - 1];
|
|
49
|
+
const packageParts = parts.slice(0, -1);
|
|
50
|
+
// The module file name matches the last package segment (e.g. "types" → types.rs)
|
|
51
|
+
const modulePath = packageParts.join("::");
|
|
52
|
+
return `crate::${modulePath}::${packageParts[packageParts.length - 1]}::${typeName}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate `use` import lines for external types referenced by messages.
|
|
56
|
+
*/
|
|
57
|
+
function genExternalImports(messages, currentProtoPackage) {
|
|
58
|
+
const external = collectExternalTypes(messages, currentProtoPackage);
|
|
59
|
+
if (external.size === 0)
|
|
60
|
+
return [];
|
|
61
|
+
// Build the current file's module path so we can exclude self-imports
|
|
62
|
+
const currentModulePath = currentProtoPackage
|
|
63
|
+
? `crate::${currentProtoPackage.split(".").join("::")}::${currentProtoPackage.split(".").pop()}`
|
|
64
|
+
: "";
|
|
65
|
+
// Group by module path for wildcard imports
|
|
66
|
+
const modules = new Map();
|
|
67
|
+
for (const fqn of external) {
|
|
68
|
+
const parts = fqn.replace(/^\./, "").split(".");
|
|
69
|
+
if (parts.length < 2)
|
|
70
|
+
continue;
|
|
71
|
+
const typeName = parts[parts.length - 1];
|
|
72
|
+
const packageParts = parts.slice(0, -1);
|
|
73
|
+
const modulePath = `crate::${packageParts.join("::")}::${packageParts[packageParts.length - 1]}`;
|
|
74
|
+
// Skip self-imports
|
|
75
|
+
if (modulePath === currentModulePath)
|
|
76
|
+
continue;
|
|
77
|
+
if (!modules.has(modulePath)) {
|
|
78
|
+
modules.set(modulePath, new Set());
|
|
79
|
+
}
|
|
80
|
+
modules.get(modulePath).add(typeName);
|
|
81
|
+
}
|
|
82
|
+
const lines = [];
|
|
83
|
+
for (const [mod, _types] of modules) {
|
|
84
|
+
lines.push(`use ${mod}::*;`);
|
|
85
|
+
}
|
|
86
|
+
return lines;
|
|
87
|
+
}
|
|
7
88
|
/**
|
|
8
89
|
* Generate a complete .rs file containing struct definitions and
|
|
9
90
|
* encode/decode impl blocks for all non-map-entry messages
|
|
10
91
|
* in a given proto file.
|
|
11
92
|
*/
|
|
12
|
-
function generateRsFile(messages, protoFileName) {
|
|
93
|
+
function generateRsFile(messages, protoFileName, protoPackage) {
|
|
13
94
|
const lines = [];
|
|
14
95
|
lines.push(`// Auto-generated by protoc-gen-solana from ${protoFileName}`);
|
|
15
96
|
lines.push(`// DO NOT EDIT`);
|
|
@@ -17,6 +98,11 @@ function generateRsFile(messages, protoFileName) {
|
|
|
17
98
|
lines.push(`#![allow(unused_imports, non_camel_case_types, dead_code)]`);
|
|
18
99
|
lines.push(``);
|
|
19
100
|
lines.push(`use crate::protobuf_runtime::*;`);
|
|
101
|
+
// Add cross-module imports for types from other proto files
|
|
102
|
+
const externalImports = genExternalImports(messages, protoPackage || "");
|
|
103
|
+
for (const imp of externalImports) {
|
|
104
|
+
lines.push(imp);
|
|
105
|
+
}
|
|
20
106
|
lines.push(``);
|
|
21
107
|
// Generate structs with encode/decode impls
|
|
22
108
|
for (const msg of messages) {
|
|
@@ -150,4 +236,4 @@ function resolveMapEntry(field, parentMsg) {
|
|
|
150
236
|
valueTypeName: valField.typeName
|
|
151
237
|
};
|
|
152
238
|
}
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0b3IvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStCQSx3Q0F3QkM7QUF2REQsK0NBQWtEO0FBQ2xELGlEQUF1QztBQUN2Qyx5Q0FLbUI7QUFtQm5COzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFFBQTZCLEVBQzdCLGFBQXFCO0lBRXJCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUUxQixLQUFLLENBQUMsSUFBSSxDQUFDLCtDQUErQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyw0REFBNEQsQ0FBQyxDQUFBO0lBQ3hFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7SUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVkLDRDQUE0QztJQUM1QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksR0FBRyxDQUFDLFVBQVU7WUFBRSxTQUFRO1FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNoQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0FB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QUMsSUFBSSxDQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQzVDLENBQUE7SUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVU7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUV6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3hELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFFNUMsT0FBTztRQUNMLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSTtRQUN0QixTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDeEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxRQUFRO0tBQ2pDLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvdG9OYW1lVG9SdXN0IH0gZnJvbSBcIi4uL3V0aWwvbmFtZXMuanNcIlxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCJcbmltcG9ydCB7XG4gIEZpZWxkSW5mbyxcbiAgZ2VuU3RydWN0TWVtYmVyLFxuICBnZW5GaWVsZEVuY29kZSxcbiAgZ2VuRmllbGREZWNvZGVcbn0gZnJvbSBcIi4vZmllbGQuanNcIlxuaW1wb3J0IHsgUFJPVE9fVFlQRV9NQVAsIFdpcmVUeXBlIH0gZnJvbSBcIi4vdHlwZS1tYXAuanNcIlxuXG4vKipcbiAqIERlc2NyaXB0b3Igc3Vic2V0IGZvciBhIHByb3RvYnVmIG1lc3NhZ2UgbmVlZGVkIGJ5IHRoZSBjb2RlZ2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VEZXNjcmlwdG9yIHtcbiAgLyoqIFNpbXBsZSBuYW1lIChlLmcuIFwiTXlNZXNzYWdlXCIpICovXG4gIG5hbWU6IHN0cmluZ1xuICAvKiogRnVsbHkgcXVhbGlmaWVkIG5hbWUgKGUuZy4gXCIubXlfcGFja2FnZS5NeU1lc3NhZ2VcIikgKi9cbiAgZnVsbE5hbWU6IHN0cmluZ1xuICAvKiogRmllbGQgZGVzY3JpcHRvcnMgKi9cbiAgZmllbGRzOiBGaWVsZEluZm9bXVxuICAvKiogTmVzdGVkIG1lc3NhZ2UgZGVzY3JpcHRvcnMgKGZvciBtYXAgZW50cnkgdHlwZXMsIGV0Yy4pICovXG4gIG5lc3RlZE1lc3NhZ2VzOiBNZXNzYWdlRGVzY3JpcHRvcltdXG4gIC8qKiBUcnVlIGlmIHRoaXMgbWVzc2FnZSBpcyBhIHN5bnRoZXRpYyBtYXAgZW50cnkgKi9cbiAgaXNNYXBFbnRyeTogYm9vbGVhblxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgY29tcGxldGUgLnJzIGZpbGUgY29udGFpbmluZyBzdHJ1Y3QgZGVmaW5pdGlvbnMgYW5kXG4gKiBlbmNvZGUvZGVjb2RlIGltcGwgYmxvY2tzIGZvciBhbGwgbm9uLW1hcC1lbnRyeSBtZXNzYWdlc1xuICogaW4gYSBnaXZlbiBwcm90byBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSc0ZpbGUoXG4gIG1lc3NhZ2VzOiBNZXNzYWdlRGVzY3JpcHRvcltdLFxuICBwcm90b0ZpbGVOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgbGluZXMucHVzaChgLy8gQXV0by1nZW5lcmF0ZWQgYnkgcHJvdG9jLWdlbi1zb2xhbmEgZnJvbSAke3Byb3RvRmlsZU5hbWV9YClcbiAgbGluZXMucHVzaChgLy8gRE8gTk9UIEVESVRgKVxuICBsaW5lcy5wdXNoKGBgKVxuICBsaW5lcy5wdXNoKGAjIVthbGxvdyh1bnVzZWRfaW1wb3J0cywgbm9uX2NhbWVsX2Nhc2VfdHlwZXMsIGRlYWRfY29kZSldYClcbiAgbGluZXMucHVzaChgYClcbiAgbGluZXMucHVzaChgdXNlIGNyYXRlOjpwcm90b2J1Zl9ydW50aW1lOjoqO2ApXG4gIGxpbmVzLnB1c2goYGApXG5cbiAgLy8gR2VuZXJhdGUgc3RydWN0cyB3aXRoIGVuY29kZS9kZWNvZGUgaW1wbHNcbiAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICBpZiAobXNnLmlzTWFwRW50cnkpIGNvbnRpbnVlXG4gICAgbGluZXMucHVzaChnZW5TdHJ1Y3QobXNnKSlcbiAgICBsaW5lcy5wdXNoKGBgKVxuICAgIGxpbmVzLnB1c2goZ2VuSW1wbChtc2cpKVxuICAgIGxpbmVzLnB1c2goYGApXG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIFJ1c3Qgc3RydWN0IGRlZmluaXRpb24gZm9yIGEgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZ2VuU3RydWN0KG1zZzogTWVzc2FnZURlc2NyaXB0b3IpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gcHJvdG9OYW1lVG9SdXN0KG1zZy5mdWxsTmFtZSlcbiAgbG9nLmRlYnVnKGBHZW5lcmF0aW5nIHN0cnVjdCAke25hbWV9ICgke21zZy5maWVsZHMubGVuZ3RofSBmaWVsZHMpYClcblxuICBjb25zdCBtZW1iZXJzID0gbXNnLmZpZWxkc1xuICAgIC5maWx0ZXIoZiA9PiAhaXNNYXBFbnRyeUZpZWxkKGYsIG1zZykpXG4gICAgLm1hcChmID0+IHtcbiAgICAgIGNvbnN0IG1hcEVudHJ5ID0gcmVzb2x2ZU1hcEVudHJ5KGYsIG1zZylcbiAgICAgIGlmIChtYXBFbnRyeSkge1xuICAgICAgICByZXR1cm4gZ2VuU3RydWN0TWVtYmVyKHsgLi4uZiwgbWFwRW50cnkgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZW5TdHJ1Y3RNZW1iZXIoZilcbiAgICB9KVxuXG4gIHJldHVybiBbXG4gICAgYCNbZGVyaXZlKENsb25lLCBEZWJ1ZywgRGVmYXVsdCwgUGFydGlhbEVxKV1gLFxuICAgIGAjW2NmZ19hdHRyKGZlYXR1cmUgPSBcImJvcnNoXCIsIGRlcml2ZShib3JzaDo6Qm9yc2hTZXJpYWxpemUsIGJvcnNoOjpCb3JzaERlc2VyaWFsaXplKSldYCxcbiAgICBgcHViIHN0cnVjdCAke25hbWV9IHtgLFxuICAgIC4uLm1lbWJlcnMsXG4gICAgYH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBpbXBsIGJsb2NrIHdpdGggZW5jb2RlKCkgYW5kIGRlY29kZSgpIGZvciBhIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdlbkltcGwobXNnOiBNZXNzYWdlRGVzY3JpcHRvcik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdE5hbWUgPSBwcm90b05hbWVUb1J1c3QobXNnLmZ1bGxOYW1lKVxuXG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyBpbXBsICR7c3RydWN0TmFtZX1gKVxuXG4gIGNvbnN0IGVuY29kZUJvZHkgPSBnZW5FbmNvZGVGdW5jdGlvbihtc2csIHN0cnVjdE5hbWUpXG4gIGNvbnN0IGRlY29kZUJvZHkgPSBnZW5EZWNvZGVGdW5jdGlvbihtc2csIHN0cnVjdE5hbWUpXG5cbiAgcmV0dXJuIFtcbiAgICBgaW1wbCAke3N0cnVjdE5hbWV9IHtgLFxuICAgIGBgLFxuICAgIGVuY29kZUJvZHksXG4gICAgYGAsXG4gICAgZGVjb2RlQm9keSxcbiAgICBgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGVuY29kZSBmdW5jdGlvbiBib2R5LlxuICovXG5mdW5jdGlvbiBnZW5FbmNvZGVGdW5jdGlvbihcbiAgbXNnOiBNZXNzYWdlRGVzY3JpcHRvcixcbiAgc3RydWN0TmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBsaW5lcy5wdXNoKGAgICAgcHViIGZuIGVuY29kZSgmc2VsZikgLT4gVmVjPHU4PiB7YClcbiAgbGluZXMucHVzaChgICAgICAgICBsZXQgbXV0IGJ1ZiA9IFZlYzo6bmV3KCk7YClcblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIG1zZy5maWVsZHMpIHtcbiAgICBpZiAoaXNNYXBFbnRyeUZpZWxkKGZpZWxkLCBtc2cpKSBjb250aW51ZVxuXG4gICAgY29uc3QgbWFwRW50cnkgPSByZXNvbHZlTWFwRW50cnkoZmllbGQsIG1zZylcbiAgICBjb25zdCBmaWVsZEluZm8gPSBtYXBFbnRyeSA/IHsgLi4uZmllbGQsIG1hcEVudHJ5IH0gOiBmaWVsZFxuXG4gICAgbGluZXMucHVzaChgYClcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgIC8vIGZpZWxkICR7ZmllbGQubnVtYmVyfTogJHtmaWVsZC5uYW1lfWApXG4gICAgbGluZXMucHVzaChnZW5GaWVsZEVuY29kZShmaWVsZEluZm8pKVxuICB9XG5cbiAgbGluZXMucHVzaChgYClcbiAgbGluZXMucHVzaChgICAgICAgICBidWZgKVxuICBsaW5lcy5wdXNoKGAgICAgfWApXG4gIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGRlY29kZSBmdW5jdGlvbiBib2R5IHdpdGggdGFnLWRpc3BhdGNoIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGdlbkRlY29kZUZ1bmN0aW9uKFxuICBtc2c6IE1lc3NhZ2VEZXNjcmlwdG9yLFxuICBzdHJ1Y3ROYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICBwdWIgZm4gZGVjb2RlKGRhdGE6ICZbdThdKSAtPiBSZXN1bHQ8U2VsZiwgRGVjb2RlRXJyb3I+IHtgXG4gIClcbiAgbGluZXMucHVzaChgICAgICAgICBsZXQgbXV0IG1zZyA9IFNlbGY6OmRlZmF1bHQoKTtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGxldCBtdXQgcG9zID0gMHVzaXplO2ApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgbGV0IGVuZCA9IGRhdGEubGVuKCk7YClcbiAgbGluZXMucHVzaChgYClcbiAgbGluZXMucHVzaChgICAgICAgICB3aGlsZSBwb3MgPCBlbmQge2ApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGxldCAodGFnLCBuZXdfcG9zKSA9IGRlY29kZV9rZXkoZGF0YSwgcG9zKT87YClcbiAgbGluZXMucHVzaChgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgKVxuICBsaW5lcy5wdXNoKGBgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBtYXRjaCB0YWcge2ApXG5cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBtc2cuZmllbGRzKSB7XG4gICAgaWYgKGlzTWFwRW50cnlGaWVsZChmaWVsZCwgbXNnKSkgY29udGludWVcblxuICAgIGNvbnN0IG1hcEVudHJ5ID0gcmVzb2x2ZU1hcEVudHJ5KGZpZWxkLCBtc2cpXG4gICAgY29uc3QgZmllbGRJbmZvID0gbWFwRW50cnkgPyB7IC4uLmZpZWxkLCBtYXBFbnRyeSB9IDogZmllbGRcblxuICAgIGxpbmVzLnB1c2goZ2VuRmllbGREZWNvZGUoZmllbGRJbmZvKSlcbiAgfVxuXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgIF8gPT4ge2ApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgdGFnICYgMHgwNyk/O2ApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgIH1gKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICB9YClcbiAgbGluZXMucHVzaChgICAgICAgICB9YClcbiAgbGluZXMucHVzaChgYClcbiAgbGluZXMucHVzaChgICAgICAgICBPayhtc2cpYClcbiAgbGluZXMucHVzaChgICAgIH1gKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG4vLyDilIDilIAgTWFwIGVudHJ5IHJlc29sdXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmludGVyZmFjZSBNYXBFbnRyeUluZm8ge1xuICBrZXlUeXBlOiBudW1iZXJcbiAgdmFsdWVUeXBlOiBudW1iZXJcbiAgdmFsdWVUeXBlTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmllbGQgcmVmZXJlbmNlcyBhIG1hcCBlbnRyeSBtZXNzYWdlIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwRW50cnlGaWVsZChcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcGFyZW50TXNnOiBNZXNzYWdlRGVzY3JpcHRvclxuKTogYm9vbGVhbiB7XG4gIGlmIChmaWVsZC50eXBlICE9PSAxMSB8fCBmaWVsZC5sYWJlbCAhPT0gMykgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IG5lc3RlZCA9IHBhcmVudE1zZy5uZXN0ZWRNZXNzYWdlcy5maW5kKFxuICAgIG0gPT4gZmllbGQudHlwZU5hbWU/LmVuZHNXaXRoKGAuJHttLm5hbWV9YClcbiAgKVxuICByZXR1cm4gbmVzdGVkPy5pc01hcEVudHJ5ID8/IGZhbHNlXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIG1hcCBlbnRyeSdzIGtleS92YWx1ZSB0eXBlcyBmcm9tIHRoZSBzeW50aGV0aWMgbmVzdGVkIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNYXBFbnRyeShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcGFyZW50TXNnOiBNZXNzYWdlRGVzY3JpcHRvclxuKTogTWFwRW50cnlJbmZvIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpZWxkLnR5cGUgIT09IDExIHx8IGZpZWxkLmxhYmVsICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IG5lc3RlZCA9IHBhcmVudE1zZy5uZXN0ZWRNZXNzYWdlcy5maW5kKFxuICAgIG0gPT4gZmllbGQudHlwZU5hbWU/LmVuZHNXaXRoKGAuJHttLm5hbWV9YClcbiAgKVxuICBpZiAoIW5lc3RlZD8uaXNNYXBFbnRyeSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGtleUZpZWxkID0gbmVzdGVkLmZpZWxkcy5maW5kKGYgPT4gZi5udW1iZXIgPT09IDEpXG4gIGNvbnN0IHZhbEZpZWxkID0gbmVzdGVkLmZpZWxkcy5maW5kKGYgPT4gZi5udW1iZXIgPT09IDIpXG4gIGlmICgha2V5RmllbGQgfHwgIXZhbEZpZWxkKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBrZXlUeXBlOiBrZXlGaWVsZC50eXBlLFxuICAgIHZhbHVlVHlwZTogdmFsRmllbGQudHlwZSxcbiAgICB2YWx1ZVR5cGVOYW1lOiB2YWxGaWVsZC50eXBlTmFtZVxuICB9XG59XG4iXX0=
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0b3IvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJIQSx3Q0FnQ0M7QUEzSkQsK0NBQWtEO0FBQ2xELGlEQUF1QztBQUN2Qyx5Q0FLbUI7QUFtQm5COzs7O0dBSUc7QUFDSCxTQUFTLG9CQUFvQixDQUMzQixRQUE2QixFQUM3QixtQkFBMkI7SUFFM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQ3pELHdDQUF3QztJQUN4QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtJQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUTtvQkFDaEIsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFB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LEtBQWdCLEVBQ2hCLFNBQTRCO0lBRTVCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFDNUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDNUMsQ0FBQTtJQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRXpDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDeEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUU1QyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJO1FBQ3RCLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSTtRQUN4QixhQUFhLEVBQUUsUUFBUSxDQUFDLFFBQVE7S0FDakMsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm90b05hbWVUb1J1c3QgfSBmcm9tIFwiLi4vdXRpbC9uYW1lcy5qc1wiXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi4vdXRpbC9sb2dnZXIuanNcIlxuaW1wb3J0IHtcbiAgRmllbGRJbmZvLFxuICBnZW5TdHJ1Y3RNZW1iZXIsXG4gIGdlbkZpZWxkRW5jb2RlLFxuICBnZW5GaWVsZERlY29kZVxufSBmcm9tIFwiLi9maWVsZC5qc1wiXG5pbXBvcnQgeyBQUk9UT19UWVBFX01BUCwgV2lyZVR5cGUgfSBmcm9tIFwiLi90eXBlLW1hcC5qc1wiXG5cbi8qKlxuICogRGVzY3JpcHRvciBzdWJzZXQgZm9yIGEgcHJvdG9idWYgbWVzc2FnZSBuZWVkZWQgYnkgdGhlIGNvZGVnZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZURlc2NyaXB0b3Ige1xuICAvKiogU2ltcGxlIG5hbWUgKGUuZy4gXCJNeU1lc3NhZ2VcIikgKi9cbiAgbmFtZTogc3RyaW5nXG4gIC8qKiBGdWxseSBxdWFsaWZpZWQgbmFtZSAoZS5nLiBcIi5teV9wYWNrYWdlLk15TWVzc2FnZVwiKSAqL1xuICBmdWxsTmFtZTogc3RyaW5nXG4gIC8qKiBGaWVsZCBkZXNjcmlwdG9ycyAqL1xuICBmaWVsZHM6IEZpZWxkSW5mb1tdXG4gIC8qKiBOZXN0ZWQgbWVzc2FnZSBkZXNjcmlwdG9ycyAoZm9yIG1hcCBlbnRyeSB0eXBlcywgZXRjLikgKi9cbiAgbmVzdGVkTWVzc2FnZXM6IE1lc3NhZ2VEZXNjcmlwdG9yW11cbiAgLyoqIFRydWUgaWYgdGhpcyBtZXNzYWdlIGlzIGEgc3ludGhldGljIG1hcCBlbnRyeSAqL1xuICBpc01hcEVudHJ5OiBib29sZWFuXG59XG5cbi8qKlxuICogQ29sbGVjdCBhbGwgY3Jvc3MtZmlsZSBtZXNzYWdlIHR5cGUgcmVmZXJlbmNlcyBmcm9tIGEgc2V0IG9mIG1lc3NhZ2VzLlxuICogUmV0dXJucyB0aGUgc2V0IG9mIGZ1bGx5LXF1YWxpZmllZCB0eXBlIG5hbWVzIHRoYXQgYXJlIE5PVCBkZWZpbmVkIGluXG4gKiB0aGUgY3VycmVudCBmaWxlJ3MgbWVzc2FnZSBsaXN0LlxuICovXG5mdW5jdGlvbiBjb2xsZWN0RXh0ZXJuYWxUeXBlcyhcbiAgbWVzc2FnZXM6IE1lc3NhZ2VEZXNjcmlwdG9yW10sXG4gIGN1cnJlbnRQcm90b1BhY2thZ2U6IHN0cmluZ1xuKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBsb2NhbE5hbWVzID0gbmV3IFNldChtZXNzYWdlcy5tYXAobSA9PiBtLmZ1bGxOYW1lKSlcbiAgLy8gQWxzbyBpbmNsdWRlIG5lc3RlZCAobWFwIGVudHJ5KSBuYW1lc1xuICBmb3IgKGNvbnN0IG0gb2YgbWVzc2FnZXMpIHtcbiAgICBmb3IgKGNvbnN0IG5tIG9mIG0ubmVzdGVkTWVzc2FnZXMpIHtcbiAgICAgIGxvY2FsTmFtZXMuYWRkKG5tLmZ1bGxOYW1lKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4dGVybmFsID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG1zZy5maWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAxMSAmJiBmaWVsZC50eXBlTmFtZSkge1xuICAgICAgICBjb25zdCBmcW4gPSBmaWVsZC50eXBlTmFtZS5zdGFydHNXaXRoKFwiLlwiKVxuICAgICAgICAgID8gZmllbGQudHlwZU5hbWVcbiAgICAgICAgICA6IGAuJHtmaWVsZC50eXBlTmFtZX1gXG4gICAgICAgIGlmICghbG9jYWxOYW1lcy5oYXMoZnFuKSkge1xuICAgICAgICAgIGV4dGVybmFsLmFkZChmcW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4dGVybmFsXG59XG5cbi8qKlxuICogQ29udmVydCBhIGZ1bGx5LXF1YWxpZmllZCBwcm90byB0eXBlIG5hbWUgdG8gYSBSdXN0IGB1c2VgIHBhdGguXG4gKiBlLmcuIFwiLnN5c2lvLm9wcC50eXBlcy5DaGFpbkFkZHJlc3NcIiDihpIgXCJjcmF0ZTo6c3lzaW86Om9wcDo6dHlwZXM6OnR5cGVzOjpDaGFpbkFkZHJlc3NcIlxuICpcbiAqIFRoZSBtb2R1bGUgcGF0aCBtYXBzIHByb3RvIHBhY2thZ2Ugc2VnbWVudHMgdG8gZGlyZWN0b3J5L2ZpbGUgc3RydWN0dXJlLlxuICogVGhlIGxhc3Qgc2VnbWVudCBiZWZvcmUgdGhlIHR5cGUgbmFtZSBpcyByZXBlYXRlZCBhcyB0aGUgZmlsZW5hbWUgbW9kdWxlLlxuICovXG5mdW5jdGlvbiBmcW5Ub1J1c3RVc2VQYXRoKGZxbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU3RyaXAgbGVhZGluZyBkb3RcbiAgY29uc3QgcGFydHMgPSBmcW4ucmVwbGFjZSgvXlxcLi8sIFwiXCIpLnNwbGl0KFwiLlwiKVxuICBpZiAocGFydHMubGVuZ3RoIDwgMikgcmV0dXJuIFwiXCJcbiAgLy8gTGFzdCBwYXJ0IGlzIHRoZSB0eXBlIG5hbWUsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHBhY2thZ2UgcGF0aFxuICBjb25zdCB0eXBlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IHBhY2thZ2VQYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIC0xKVxuICAvLyBUaGUgbW9kdWxlIGZpbGUgbmFtZSBtYXRjaGVzIHRoZSBsYXN0IHBhY2thZ2Ugc2VnbWVudCAoZS5nLiBcInR5cGVzXCIg4oaSIHR5cGVzLnJzKVxuICBjb25zdCBtb2R1bGVQYXRoID0gcGFja2FnZVBhcnRzLmpvaW4oXCI6OlwiKVxuICByZXR1cm4gYGNyYXRlOjoke21vZHVsZVBhdGh9Ojoke3BhY2thZ2VQYXJ0c1twYWNrYWdlUGFydHMubGVuZ3RoIC0gMV19Ojoke3R5cGVOYW1lfWBcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBgdXNlYCBpbXBvcnQgbGluZXMgZm9yIGV4dGVybmFsIHR5cGVzIHJlZmVyZW5jZWQgYnkgbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdlbkV4dGVybmFsSW1wb3J0cyhcbiAgbWVzc2FnZXM6IE1lc3NhZ2VEZXNjcmlwdG9yW10sXG4gIGN1cnJlbnRQcm90b1BhY2thZ2U6IHN0cmluZ1xuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlcm5hbCA9IGNvbGxlY3RFeHRlcm5hbFR5cGVzKG1lc3NhZ2VzLCBjdXJyZW50UHJvdG9QYWNrYWdlKVxuICBpZiAoZXh0ZXJuYWwuc2l6ZSA9PT0gMCkgcmV0dXJuIFtdXG5cbiAgLy8gQnVpbGQgdGhlIGN1cnJlbnQgZmlsZSdzIG1vZHVsZSBwYXRoIHNvIHdlIGNhbiBleGNsdWRlIHNlbGYtaW1wb3J0c1xuICBjb25zdCBjdXJyZW50TW9kdWxlUGF0aCA9IGN1cnJlbnRQcm90b1BhY2thZ2VcbiAgICA/IGBjcmF0ZTo6JHtjdXJyZW50UHJvdG9QYWNrYWdlLnNwbGl0KFwiLlwiKS5qb2luKFwiOjpcIil9Ojoke2N1cnJlbnRQcm90b1BhY2thZ2Uuc3BsaXQoXCIuXCIpLnBvcCgpfWBcbiAgICA6IFwiXCJcblxuICAvLyBHcm91cCBieSBtb2R1bGUgcGF0aCBmb3Igd2lsZGNhcmQgaW1wb3J0c1xuICBjb25zdCBtb2R1bGVzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpXG4gIGZvciAoY29uc3QgZnFuIG9mIGV4dGVybmFsKSB7XG4gICAgY29uc3QgcGFydHMgPSBmcW4ucmVwbGFjZSgvXlxcLi8sIFwiXCIpLnNwbGl0KFwiLlwiKVxuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSBjb250aW51ZVxuICAgIGNvbnN0IHR5cGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBwYWNrYWdlUGFydHMgPSBwYXJ0cy5zbGljZSgwLCAtMSlcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gYGNyYXRlOjoke3BhY2thZ2VQYXJ0cy5qb2luKFwiOjpcIil9Ojoke3BhY2thZ2VQYXJ0c1twYWNrYWdlUGFydHMubGVuZ3RoIC0gMV19YFxuXG4gICAgLy8gU2tpcCBzZWxmLWltcG9ydHNcbiAgICBpZiAobW9kdWxlUGF0aCA9PT0gY3VycmVudE1vZHVsZVBhdGgpIGNvbnRpbnVlXG5cbiAgICBpZiAoIW1vZHVsZXMuaGFzKG1vZHVsZVBhdGgpKSB7XG4gICAgICBtb2R1bGVzLnNldChtb2R1bGVQYXRoLCBuZXcgU2V0KCkpXG4gICAgfVxuICAgIG1vZHVsZXMuZ2V0KG1vZHVsZVBhdGgpIS5hZGQodHlwZU5hbWUpXG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IFttb2QsIF90eXBlc10gb2YgbW9kdWxlcykge1xuICAgIGxpbmVzLnB1c2goYHVzZSAke21vZH06Oio7YClcbiAgfVxuICByZXR1cm4gbGluZXNcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGNvbXBsZXRlIC5ycyBmaWxlIGNvbnRhaW5pbmcgc3RydWN0IGRlZmluaXRpb25zIGFuZFxuICogZW5jb2RlL2RlY29kZSBpbXBsIGJsb2NrcyBmb3IgYWxsIG5vbi1tYXAtZW50cnkgbWVzc2FnZXNcbiAqIGluIGEgZ2l2ZW4gcHJvdG8gZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUnNGaWxlKFxuICBtZXNzYWdlczogTWVzc2FnZURlc2NyaXB0b3JbXSxcbiAgcHJvdG9GaWxlTmFtZTogc3RyaW5nLFxuICBwcm90b1BhY2thZ2U/OiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgbGluZXMucHVzaChgLy8gQXV0by1nZW5lcmF0ZWQgYnkgcHJvdG9jLWdlbi1zb2xhbmEgZnJvbSAke3Byb3RvRmlsZU5hbWV9YClcbiAgbGluZXMucHVzaChgLy8gRE8gTk9UIEVESVRgKVxuICBsaW5lcy5wdXNoKGBgKVxuICBsaW5lcy5wdXNoKGAjIVthbGxvdyh1bnVzZWRfaW1wb3J0cywgbm9uX2NhbWVsX2Nhc2VfdHlwZXMsIGRlYWRfY29kZSldYClcbiAgbGluZXMucHVzaChgYClcbiAgbGluZXMucHVzaChgdXNlIGNyYXRlOjpwcm90b2J1Zl9ydW50aW1lOjoqO2ApXG5cbiAgLy8gQWRkIGNyb3NzLW1vZHVsZSBpbXBvcnRzIGZvciB0eXBlcyBmcm9tIG90aGVyIHByb3RvIGZpbGVzXG4gIGNvbnN0IGV4dGVybmFsSW1wb3J0cyA9IGdlbkV4dGVybmFsSW1wb3J0cyhtZXNzYWdlcywgcHJvdG9QYWNrYWdlIHx8IFwiXCIpXG4gIGZvciAoY29uc3QgaW1wIG9mIGV4dGVybmFsSW1wb3J0cykge1xuICAgIGxpbmVzLnB1c2goaW1wKVxuICB9XG5cbiAgbGluZXMucHVzaChgYClcblxuICAvLyBHZW5lcmF0ZSBzdHJ1Y3RzIHdpdGggZW5jb2RlL2RlY29kZSBpbXBsc1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIGlmIChtc2cuaXNNYXBFbnRyeSkgY29udGludWVcbiAgICBsaW5lcy5wdXNoKGdlblN0cnVjdChtc2cpKVxuICAgIGxpbmVzLnB1c2goYGApXG4gICAgbGluZXMucHVzaChnZW5JbXBsKG1zZykpXG4gICAgbGluZXMucHVzaChgYClcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgUnVzdCBzdHJ1Y3QgZGVmaW5pdGlvbiBmb3IgYSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZW5TdHJ1Y3QobXNnOiBNZXNzYWdlRGVzY3JpcHRvcik6IHN0cmluZyB7XG4gIGNvbnN0IG5hbWUgPSBwcm90b05hbWVUb1J1c3QobXNnLmZ1bGxOYW1lKVxuICBsb2cuZGVidWcoYEdlbmVyYXRpbmcgc3RydWN0ICR7bmFtZX0gKCR7bXNnLmZpZWxkcy5sZW5ndGh9IGZpZWxkcylgKVxuXG4gIGNvbnN0IG1lbWJlcnMgPSBtc2cuZmllbGRzXG4gICAgLmZpbHRlcihmID0+ICFpc01hcEVudHJ5RmllbGQoZiwgbXNnKSlcbiAgICAubWFwKGYgPT4ge1xuICAgICAgY29uc3QgbWFwRW50cnkgPSByZXNvbHZlTWFwRW50cnkoZiwgbXNnKVxuICAgICAgaWYgKG1hcEVudHJ5KSB7XG4gICAgICAgIHJldHVybiBnZW5TdHJ1Y3RNZW1iZXIoeyAuLi5mLCBtYXBFbnRyeSB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGdlblN0cnVjdE1lbWJlcihmKVxuICAgIH0pXG5cbiAgcmV0dXJuIFtcbiAgICBgI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBEZWZhdWx0LCBQYXJ0aWFsRXEpXWAsXG4gICAgYCNbY2ZnX2F0dHIoZmVhdHVyZSA9IFwiYm9yc2hcIiwgZGVyaXZlKGJvcnNoOjpCb3JzaFNlcmlhbGl6ZSwgYm9yc2g6OkJvcnNoRGVzZXJpYWxpemUpKV1gLFxuICAgIGBwdWIgc3RydWN0ICR7bmFtZX0ge2AsXG4gICAgLi4ubWVtYmVycyxcbiAgICBgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGltcGwgYmxvY2sgd2l0aCBlbmNvZGUoKSBhbmQgZGVjb2RlKCkgZm9yIGEgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZ2VuSW1wbChtc2c6IE1lc3NhZ2VEZXNjcmlwdG9yKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RydWN0TmFtZSA9IHByb3RvTmFtZVRvUnVzdChtc2cuZnVsbE5hbWUpXG5cbiAgbG9nLmRlYnVnKGBHZW5lcmF0aW5nIGltcGwgJHtzdHJ1Y3ROYW1lfWApXG5cbiAgY29uc3QgZW5jb2RlQm9keSA9IGdlbkVuY29kZUZ1bmN0aW9uKG1zZywgc3RydWN0TmFtZSlcbiAgY29uc3QgZGVjb2RlQm9keSA9IGdlbkRlY29kZUZ1bmN0aW9uKG1zZywgc3RydWN0TmFtZSlcblxuICByZXR1cm4gW1xuICAgIGBpbXBsICR7c3RydWN0TmFtZX0ge2AsXG4gICAgYGAsXG4gICAgZW5jb2RlQm9keSxcbiAgICBgYCxcbiAgICBkZWNvZGVCb2R5LFxuICAgIGB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZW5jb2RlIGZ1bmN0aW9uIGJvZHkuXG4gKi9cbmZ1bmN0aW9uIGdlbkVuY29kZUZ1bmN0aW9uKFxuICBtc2c6IE1lc3NhZ2VEZXNjcmlwdG9yLFxuICBzdHJ1Y3ROYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG4gIGxpbmVzLnB1c2goYCAgICBwdWIgZm4gZW5jb2RlKCZzZWxmKSAtPiBWZWM8dTg+IHtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGxldCBtdXQgYnVmID0gVmVjOjpuZXcoKTtgKVxuXG4gIGZvciAoY29uc3QgZmllbGQgb2YgbXNnLmZpZWxkcykge1xuICAgIGlmIChpc01hcEVudHJ5RmllbGQoZmllbGQsIG1zZykpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBtYXBFbnRyeSA9IHJlc29sdmVNYXBFbnRyeShmaWVsZCwgbXNnKVxuICAgIGNvbnN0IGZpZWxkSW5mbyA9IG1hcEVudHJ5ID8geyAuLi5maWVsZCwgbWFwRW50cnkgfSA6IGZpZWxkXG5cbiAgICBsaW5lcy5wdXNoKGBgKVxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgLy8gZmllbGQgJHtmaWVsZC5udW1iZXJ9OiAke2ZpZWxkLm5hbWV9YClcbiAgICBsaW5lcy5wdXNoKGdlbkZpZWxkRW5jb2RlKGZpZWxkSW5mbykpXG4gIH1cblxuICBsaW5lcy5wdXNoKGBgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGJ1ZmApXG4gIGxpbmVzLnB1c2goYCAgICB9YClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZGVjb2RlIGZ1bmN0aW9uIGJvZHkgd2l0aCB0YWctZGlzcGF0Y2ggbG9vcC5cbiAqL1xuZnVuY3Rpb24gZ2VuRGVjb2RlRnVuY3Rpb24oXG4gIG1zZzogTWVzc2FnZURlc2NyaXB0b3IsXG4gIHN0cnVjdE5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgbGluZXMucHVzaChcbiAgICBgICAgIHB1YiBmbiBkZWNvZGUoZGF0YTogJlt1OF0pIC0+IFJlc3VsdDxTZWxmLCBEZWNvZGVFcnJvcj4ge2BcbiAgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGxldCBtdXQgbXNnID0gU2VsZjo6ZGVmYXVsdCgpO2ApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgbGV0IG11dCBwb3MgPSAwdXNpemU7YClcbiAgbGluZXMucHVzaChgICAgICAgICBsZXQgZW5kID0gZGF0YS5sZW4oKTtgKVxuICBsaW5lcy5wdXNoKGBgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIHdoaWxlIHBvcyA8IGVuZCB7YClcbiAgbGluZXMucHVzaChgICAgICAgICAgICAgbGV0ICh0YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2ApXG4gIGxpbmVzLnB1c2goYGApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgIG1hdGNoIHRhZyB7YClcblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIG1zZy5maWVsZHMpIHtcbiAgICBpZiAoaXNNYXBFbnRyeUZpZWxkKGZpZWxkLCBtc2cpKSBjb250aW51ZVxuXG4gICAgY29uc3QgbWFwRW50cnkgPSByZXNvbHZlTWFwRW50cnkoZmllbGQsIG1zZylcbiAgICBjb25zdCBmaWVsZEluZm8gPSBtYXBFbnRyeSA/IHsgLi4uZmllbGQsIG1hcEVudHJ5IH0gOiBmaWVsZFxuXG4gICAgbGluZXMucHVzaChnZW5GaWVsZERlY29kZShmaWVsZEluZm8pKVxuICB9XG5cbiAgbGluZXMucHVzaChgICAgICAgICAgICAgXyA9PiB7YClcbiAgbGluZXMucHVzaChgICAgICAgICAgICAgICAgIHBvcyA9IHNraXBfZmllbGQoZGF0YSwgcG9zLCB0YWcgJiAweDA3KT87YClcbiAgbGluZXMucHVzaChgICAgICAgICAgICAgfWApXG4gIGxpbmVzLnB1c2goYCAgICAgICAgICAgIH1gKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIH1gKVxuICBsaW5lcy5wdXNoKGBgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgIE9rKG1zZylgKVxuICBsaW5lcy5wdXNoKGAgICAgfWApXG4gIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpXG59XG5cbi8vIOKUgOKUgCBNYXAgZW50cnkgcmVzb2x1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIE1hcEVudHJ5SW5mbyB7XG4gIGtleVR5cGU6IG51bWJlclxuICB2YWx1ZVR5cGU6IG51bWJlclxuICB2YWx1ZVR5cGVOYW1lPzogc3RyaW5nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBmaWVsZCByZWZlcmVuY2VzIGEgbWFwIGVudHJ5IG1lc3NhZ2UgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNNYXBFbnRyeUZpZWxkKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBwYXJlbnRNc2c6IE1lc3NhZ2VEZXNjcmlwdG9yXG4pOiBib29sZWFuIHtcbiAgaWYgKGZpZWxkLnR5cGUgIT09IDExIHx8IGZpZWxkLmxhYmVsICE9PSAzKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgbmVzdGVkID0gcGFyZW50TXNnLm5lc3RlZE1lc3NhZ2VzLmZpbmQoXG4gICAgbSA9PiBmaWVsZC50eXBlTmFtZT8uZW5kc1dpdGgoYC4ke20ubmFtZX1gKVxuICApXG4gIHJldHVybiBuZXN0ZWQ/LmlzTWFwRW50cnkgPz8gZmFsc2Vcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbWFwIGVudHJ5J3Mga2V5L3ZhbHVlIHR5cGVzIGZyb20gdGhlIHN5bnRoZXRpYyBuZXN0ZWQgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1hcEVudHJ5KFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBwYXJlbnRNc2c6IE1lc3NhZ2VEZXNjcmlwdG9yXG4pOiBNYXBFbnRyeUluZm8gfCB1bmRlZmluZWQge1xuICBpZiAoZmllbGQudHlwZSAhPT0gMTEgfHwgZmllbGQubGFiZWwgIT09IDMpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgbmVzdGVkID0gcGFyZW50TXNnLm5lc3RlZE1lc3NhZ2VzLmZpbmQoXG4gICAgbSA9PiBmaWVsZC50eXBlTmFtZT8uZW5kc1dpdGgoYC4ke20ubmFtZX1gKVxuICApXG4gIGlmICghbmVzdGVkPy5pc01hcEVudHJ5KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3Qga2V5RmllbGQgPSBuZXN0ZWQuZmllbGRzLmZpbmQoZiA9PiBmLm51bWJlciA9PT0gMSlcbiAgY29uc3QgdmFsRmllbGQgPSBuZXN0ZWQuZmllbGRzLmZpbmQoZiA9PiBmLm51bWJlciA9PT0gMilcbiAgaWYgKCFrZXlGaWVsZCB8fCAhdmFsRmllbGQpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIGtleVR5cGU6IGtleUZpZWxkLnR5cGUsXG4gICAgdmFsdWVUeXBlOiB2YWxGaWVsZC50eXBlLFxuICAgIHZhbHVlVHlwZU5hbWU6IHZhbEZpZWxkLnR5cGVOYW1lXG4gIH1cbn1cbiJdfQ==
|
package/lib/plugin.js
CHANGED
|
@@ -141,7 +141,7 @@ function processRequest(stdin) {
|
|
|
141
141
|
continue;
|
|
142
142
|
}
|
|
143
143
|
const rsFileName = (0, names_js_1.protoFileToRsFile)(fileName, protoFile.package ?? "");
|
|
144
|
-
const rsContent = (0, index_js_1.generateRsFile)(messages, fileName);
|
|
144
|
+
const rsContent = (0, index_js_1.generateRsFile)(messages, fileName, protoFile.package ?? "");
|
|
145
145
|
files.push({ name: rsFileName, content: rsContent });
|
|
146
146
|
logger_js_1.log.info("Generated %s (%d messages)", rsFileName, messages.length);
|
|
147
147
|
}
|
|
@@ -206,4 +206,4 @@ function parseParams(param) {
|
|
|
206
206
|
}
|
|
207
207
|
return result;
|
|
208
208
|
}
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVGQSw4QkFXQztBQWxHRCxxREFBc0M7QUFDdEMsZ0RBQW1EO0FBQ25ELDhDQUFtRDtBQUNuRCxtREFBc0U7QUFHdEUseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSx1Q0FBdUM7QUFFdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7QUFFdEMsNkRBQTZEO0FBQzdELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0tBQ25FLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNwRSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzdELEdBQUcsQ0FDRixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxxQ0FBcUMsRUFBRSxVQUFVLENBQUMsQ0FDeEYsQ0FBQTtBQUVILGlEQUFpRDtBQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzNDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDeEQsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ25FLEdBQUcsQ0FBQyxJQUFJLFFBQVEs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RSxDQUFBO0lBQ3pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxNQUFNLENBQUE7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM1QixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvdG9idWYgZnJvbSBcInByb3RvYnVmanNcIlxuaW1wb3J0IHsgbG9nLCBzZXRMb2dMZXZlbCB9IGZyb20gXCIuL3V0aWwvbG9nZ2VyLmpzXCJcbmltcG9ydCB7IHByb3RvRmlsZVRvUnNGaWxlIH0gZnJvbSBcIi4vdXRpbC9uYW1lcy5qc1wiXG5pbXBvcnQgeyBnZW5lcmF0ZVJzRmlsZSwgZ2VuZXJhdGVSdW50aW1lIH0gZnJvbSBcIi4vZ2VuZXJhdG9yL2luZGV4LmpzXCJcbmltcG9ydCB0eXBlIHsgTWVzc2FnZURlc2NyaXB0b3IsIEZpZWxkSW5mbyB9IGZyb20gXCIuL2dlbmVyYXRvci9pbmRleC5qc1wiXG5cbi8vIOKUgOKUgCBQcm90b2J1ZiBzY2hlbWEgZm9yIHRoZSBwbHVnaW4gcHJvdG9jb2wg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBEZWZpbmVkIHByb2dyYW1tYXRpY2FsbHkgc28gdGhlIHBsdWdpbiBpcyBmdWxseSBzZWxmLWNvbnRhaW5lZFxuLy8gKG5vIC5wcm90byBmaWxlcyBuZWVkZWQgYXQgcnVudGltZSkuXG5cbmNvbnN0IHBsdWdpblJvb3QgPSBuZXcgcHJvdG9idWYuUm9vdCgpXG5cbi8vIGdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdCAoc2ltcGxpZmllZClcbmNvbnN0IENvZGVHZW5lcmF0b3JSZXF1ZXN0ID0gbmV3IHByb3RvYnVmLlR5cGUoXCJDb2RlR2VuZXJhdG9yUmVxdWVzdFwiKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImZpbGVfdG9fZ2VuZXJhdGVcIiwgMSwgXCJzdHJpbmdcIiwgXCJyZXBlYXRlZFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJwYXJhbWV0ZXJcIiwgMiwgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcbiAgLmFkZChcbiAgICBuZXcgcHJvdG9idWYuRmllbGQoXCJwcm90b19maWxlXCIsIDE1LCBcImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvXCIsIFwicmVwZWF0ZWRcIilcbiAgKVxuXG4vLyBnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlXG5jb25zdCBSZXNwb25zZUZpbGUgPSBuZXcgcHJvdG9idWYuVHlwZShcIkZpbGVcIilcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJuYW1lXCIsIDEsIFwic3RyaW5nXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwiaW5zZXJ0aW9uX3BvaW50XCIsIDIsIFwic3RyaW5nXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwiY29udGVudFwiLCAxNSwgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcblxuY29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlID0gbmV3IHByb3RvYnVmLlR5cGUoXCJDb2RlR2VuZXJhdG9yUmVzcG9uc2VcIilcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJlcnJvclwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInN1cHBvcnRlZF9mZWF0dXJlc1wiLCAyLCBcInVpbnQ2NFwiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImZpbGVcIiwgMTUsIFwiRmlsZVwiLCBcInJlcGVhdGVkXCIpKVxuICAuYWRkKFJlc3BvbnNlRmlsZSlcblxuLy8gRmlsZURlc2NyaXB0b3JQcm90byBhbmQgaXRzIG5lc3RlZCB0eXBlc1xuY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8gPSBuZXcgcHJvdG9idWYuVHlwZShcIkZpZWxkRGVzY3JpcHRvclByb3RvXCIpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibmFtZVwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcIm51bWJlclwiLCAzLCBcImludDMyXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibGFiZWxcIiwgNCwgXCJpbnQzMlwiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInR5cGVcIiwgNSwgXCJpbnQzMlwiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInR5cGVfbmFtZVwiLCA2LCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImRlZmF1bHRfdmFsdWVcIiwgNywgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJvbmVvZl9pbmRleFwiLCA5LCBcImludDMyXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwianNvbl9uYW1lXCIsIDEwLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuXG5jb25zdCBNZXNzYWdlT3B0aW9ucyA9IG5ldyBwcm90b2J1Zi5UeXBlKFwiTWVzc2FnZU9wdGlvbnNcIilcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJtYXBfZW50cnlcIiwgNywgXCJib29sXCIsIFwib3B0aW9uYWxcIikpXG5cbmNvbnN0IERlc2NyaXB0b3JQcm90byA9IG5ldyBwcm90b2J1Zi5UeXBlKFwiRGVzY3JpcHRvclByb3RvXCIpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibmFtZVwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImZpZWxkXCIsIDIsIFwiRmllbGREZXNjcmlwdG9yUHJvdG9cIiwgXCJyZXBlYXRlZFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJuZXN0ZWRfdHlwZVwiLCAzLCBcIkRlc2NyaXB0b3JQcm90b1wiLCBcInJlcGVhdGVkXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcIm9wdGlvbnNcIiwgNywgXCJNZXNzYWdlT3B0aW9uc1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKEZpZWxkRGVzY3JpcHRvclByb3RvKVxuICAuYWRkKE1lc3NhZ2VPcHRpb25zKVxuXG5jb25zdCBGaWxlRGVzY3JpcHRvclByb3RvID0gbmV3IHByb3RvYnVmLlR5cGUoXCJGaWxlRGVzY3JpcHRvclByb3RvXCIpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibmFtZVwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInBhY2thZ2VcIiwgMiwgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJkZXBlbmRlbmN5XCIsIDMsIFwic3RyaW5nXCIsIFwicmVwZWF0ZWRcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibWVzc2FnZV90eXBlXCIsIDQsIFwiRGVzY3JpcHRvclByb3RvXCIsIFwicmVwZWF0ZWRcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwic3ludGF4XCIsIDEyLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKERlc2NyaXB0b3JQcm90bylcblxuLy8gV2lyZSB0eXBlcyBpbnRvIG5hbWVzcGFjZXNcbmNvbnN0IGdvb2dsZVBiID0gbmV3IHByb3RvYnVmLk5hbWVzcGFjZShcImdvb2dsZVwiKVxuY29uc3QgcHJvdG9idWZOcyA9IG5ldyBwcm90b2J1Zi5OYW1lc3BhY2UoXCJwcm90b2J1ZlwiKVxuY29uc3QgY29tcGlsZXJOcyA9IG5ldyBwcm90b2J1Zi5OYW1lc3BhY2UoXCJjb21waWxlclwiKVxuXG5wcm90b2J1Zk5zLmFkZChGaWxlRGVzY3JpcHRvclByb3RvKVxuY29tcGlsZXJOcy5hZGQoQ29kZUdlbmVyYXRvclJlcXVlc3QpXG5jb21waWxlck5zLmFkZChDb2RlR2VuZXJhdG9yUmVzcG9uc2UpXG5wcm90b2J1Zk5zLmFkZChjb21waWxlck5zKVxuZ29vZ2xlUGIuYWRkKHByb3RvYnVmTnMpXG5wbHVnaW5Sb290LmFkZChnb29nbGVQYilcblxuLy8gUmVzb2x2ZSBhbGwgdHlwZSByZWZlcmVuY2VzXG5wbHVnaW5Sb290LnJlc29sdmVBbGwoKVxuXG4vLyDilIDilIAgUGx1Z2luIGVudHJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJlc3VsdCB7XG4gIGZpbGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+XG4gIGVycm9yPzogc3RyaW5nXG59XG5cbi8qKlxuICogUnVuIHRoZSBwcm90b2MgcGx1Z2luOiBkZWNvZGUgcmVxdWVzdCDihpIgZ2VuZXJhdGUgUnVzdCDihpIgZW5jb2RlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUGx1Z2luKHN0ZGluOiBCdWZmZXIpOiBCdWZmZXIge1xuICBsZXQgcmVzdWx0OiBQbHVnaW5SZXN1bHRcblxuICB0cnkge1xuICAgIHJlc3VsdCA9IHByb2Nlc3NSZXF1ZXN0KHN0ZGluKVxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGxvZy5lcnJvcihcIlBsdWdpbiBlcnJvcjogJXNcIiwgZXJyLm1lc3NhZ2UpXG4gICAgcmVzdWx0ID0geyBmaWxlczogW10sIGVycm9yOiBlcnIubWVzc2FnZSB9XG4gIH1cblxuICByZXR1cm4gZW5jb2RlUmVzcG9uc2UocmVzdWx0KVxufVxuXG4vKipcbiAqIERlY29kZSBDb2RlR2VuZXJhdG9yUmVxdWVzdCwgd2FsayBkZXNjcmlwdG9ycywgcHJvZHVjZSBvdXRwdXQgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NSZXF1ZXN0KHN0ZGluOiBCdWZmZXIpOiBQbHVnaW5SZXN1bHQge1xuICBjb25zdCBSZXFUeXBlID0gcGx1Z2luUm9vdC5sb29rdXBUeXBlKFxuICAgIFwiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0XCJcbiAgKVxuICBjb25zdCByZXF1ZXN0ID0gUmVxVHlwZS5kZWNvZGUoc3RkaW4pIGFzIGFueVxuXG4gIC8vIFBhcnNlIHBsdWdpbiBwYXJhbWV0ZXJzIChlLmcuIFwibG9nX2xldmVsPWRlYnVnXCIpXG4gIGNvbnN0IHBhcmFtcyA9IHBhcnNlUGFyYW1zKHJlcXVlc3QucGFyYW1ldGVyID8/IFwiXCIpXG4gIGlmIChwYXJhbXMubG9nX2xldmVsKSB7XG4gICAgc2V0TG9nTGV2ZWwocGFyYW1zLmxvZ19sZXZlbClcbiAgfVxuXG4gIGNvbnN0IGZpbGVzVG9HZW5lcmF0ZSA9IG5ldyBTZXQ8c3RyaW5nPihyZXF1ZXN0LmZpbGVfdG9fZ2VuZXJhdGUgPz8gW10pXG4gIGNvbnN0IHByb3RvRmlsZXM6IGFueVtdID0gcmVxdWVzdC5wcm90b19maWxlID8/IFtdXG5cbiAgbG9nLmluZm8oXG4gICAgXCJQcm9jZXNzaW5nICVkIHByb3RvIGZpbGUocyksIGdlbmVyYXRpbmcgZm9yICVkXCIsXG4gICAgcHJvdG9GaWxlcy5sZW5ndGgsXG4gICAgZmlsZXNUb0dlbmVyYXRlLnNpemVcbiAgKVxuXG4gIGNvbnN0IGZpbGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW11cblxuICAvLyBBbHdheXMgZW1pdCB0aGUgcnVudGltZSBsaWJyYXJ5XG4gIGZpbGVzLnB1c2goe1xuICAgIG5hbWU6IFwicHJvdG9idWZfcnVudGltZS5yc1wiLFxuICAgIGNvbnRlbnQ6IGdlbmVyYXRlUnVudGltZSgpXG4gIH0pXG5cbiAgLy8gUHJvY2VzcyBlYWNoIHJlcXVlc3RlZCBwcm90byBmaWxlXG4gIGZvciAoY29uc3QgcHJvdG9GaWxlIG9mIHByb3RvRmlsZXMpIHtcbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gcHJvdG9GaWxlLm5hbWUgPz8gXCJcIlxuICAgIGlmICghZmlsZXNUb0dlbmVyYXRlLmhhcyhmaWxlTmFtZSkpIGNvbnRpbnVlXG5cbiAgICBsb2cuaW5mbyhcIkdlbmVyYXRpbmcgZm9yICVzXCIsIGZpbGVOYW1lKVxuXG4gICAgY29uc3QgbWVzc2FnZXMgPSBleHRyYWN0TWVzc2FnZXMocHJvdG9GaWxlLCBwcm90b0ZpbGUucGFja2FnZSA/PyBcIlwiKVxuICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxvZy5pbmZvKFwiTm8gbWVzc2FnZXMgaW4gJXMsIHNraXBwaW5nXCIsIGZpbGVOYW1lKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCByc0ZpbGVOYW1lID0gcHJvdG9GaWxlVG9Sc0ZpbGUoZmlsZU5hbWUsIHByb3RvRmlsZS5wYWNrYWdlID8/IFwiXCIpXG4gICAgY29uc3QgcnNDb250ZW50ID0gZ2VuZXJhdGVSc0ZpbGUobWVzc2FnZXMsIGZpbGVOYW1lKVxuXG4gICAgZmlsZXMucHVzaCh7IG5hbWU6IHJzRmlsZU5hbWUsIGNvbnRlbnQ6IHJzQ29udGVudCB9KVxuICAgIGxvZy5pbmZvKFwiR2VuZXJhdGVkICVzICglZCBtZXNzYWdlcylcIiwgcnNGaWxlTmFtZSwgbWVzc2FnZXMubGVuZ3RoKVxuICB9XG5cbiAgcmV0dXJuIHsgZmlsZXMgfVxufVxuXG4vKipcbiAqIFdhbGsgRGVzY3JpcHRvclByb3RvIHRyZWUsIGJ1aWxkaW5nIG91ciBNZXNzYWdlRGVzY3JpcHRvciBtb2RlbC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1lc3NhZ2VzKFxuICBwcm90b0ZpbGU6IGFueSxcbiAgcGFja2FnZU5hbWU6IHN0cmluZ1xuKTogTWVzc2FnZURlc2NyaXB0b3JbXSB7XG4gIGNvbnN0IHJlc3VsdDogTWVzc2FnZURlc2NyaXB0b3JbXSA9IFtdXG4gIGNvbnN0IG1lc3NhZ2VUeXBlczogYW55W10gPSBwcm90b0ZpbGUubWVzc2FnZV90eXBlID8/IFtdXG5cbiAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZVR5cGVzKSB7XG4gICAgcmVzdWx0LnB1c2goY29udmVydERlc2NyaXB0b3IobXNnLCBwYWNrYWdlTmFtZSkpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREZXNjcmlwdG9yKGRlc2M6IGFueSwgcGFyZW50RnFuOiBzdHJpbmcpOiBNZXNzYWdlRGVzY3JpcHRvciB7XG4gIGNvbnN0IG5hbWU6IHN0cmluZyA9IGRlc2MubmFtZSA/PyBcIlwiXG4gIGNvbnN0IGZ1bGxOYW1lID0gcGFyZW50RnFuID8gYCR7cGFyZW50RnFufS4ke25hbWV9YCA6IG5hbWVcbiAgY29uc3QgaXNNYXBFbnRyeTogYm9vbGVhbiA9IGRlc2Mub3B0aW9ucz8ubWFwX2VudHJ5ID09PSB0cnVlXG5cbiAgY29uc3QgZmllbGRzOiBGaWVsZEluZm9bXSA9IChkZXNjLmZpZWxkID8/IFtdKS5tYXAoKGY6IGFueSkgPT4gKHtcbiAgICBuYW1lOiBmLm5hbWUgPz8gXCJcIixcbiAgICBudW1iZXI6IGYubnVtYmVyID8/IDAsXG4gICAgdHlwZTogZi50eXBlID8/IDAsXG4gICAgdHlwZU5hbWU6IGYudHlwZV9uYW1lLFxuICAgIGxhYmVsOiBmLmxhYmVsID8/IDEsXG4gICAgb25lb2ZJbmRleDogZi5vbmVvZl9pbmRleFxuICB9KSlcblxuICBjb25zdCBuZXN0ZWRNZXNzYWdlczogTWVzc2FnZURlc2NyaXB0b3JbXSA9IChkZXNjLm5lc3RlZF90eXBlID8/IFtdKS5tYXAoXG4gICAgKG5lc3RlZDogYW55KSA9PiBjb252ZXJ0RGVzY3JpcHRvcihuZXN0ZWQsIGZ1bGxOYW1lKVxuICApXG5cbiAgcmV0dXJuIHsgbmFtZSwgZnVsbE5hbWUsIGZpZWxkcywgbmVzdGVkTWVzc2FnZXMsIGlzTWFwRW50cnkgfVxufVxuXG4vKipcbiAqIEVuY29kZSB0aGUgQ29kZUdlbmVyYXRvclJlc3BvbnNlIGJhY2sgdG8gcHJvdG9idWYgYmluYXJ5LlxuICovXG5mdW5jdGlvbiBlbmNvZGVSZXNwb25zZShyZXN1bHQ6IFBsdWdpblJlc3VsdCk6IEJ1ZmZlciB7XG4gIGNvbnN0IFJlc3BUeXBlID0gcGx1Z2luUm9vdC5sb29rdXBUeXBlKFxuICAgIFwiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZVwiXG4gIClcblxuICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgc3VwcG9ydGVkX2ZlYXR1cmVzOiAxLCAvLyBGRUFUVVJFX1BST1RPM19PUFRJT05BTFxuICAgIGZpbGU6IHJlc3VsdC5maWxlcy5tYXAoZiA9PiAoe1xuICAgICAgbmFtZTogZi5uYW1lLFxuICAgICAgY29udGVudDogZi5jb250ZW50XG4gICAgfSkpXG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgcGF5bG9hZC5lcnJvciA9IHJlc3VsdC5lcnJvclxuICB9XG5cbiAgY29uc3QgbXNnID0gUmVzcFR5cGUuY3JlYXRlKHBheWxvYWQpXG4gIHJldHVybiBCdWZmZXIuZnJvbShSZXNwVHlwZS5lbmNvZGUobXNnKS5maW5pc2goKSlcbn1cblxuLyoqXG4gKiBQYXJzZSBcImtleT12YWx1ZSxrZXkyPXZhbHVlMlwiIHBhcmFtZXRlciBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zKHBhcmFtOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgaWYgKCFwYXJhbSkgcmV0dXJuIHJlc3VsdFxuXG4gIGZvciAoY29uc3QgcGFpciBvZiBwYXJhbS5zcGxpdChcIixcIikpIHtcbiAgICBjb25zdCBlcSA9IHBhaXIuaW5kZXhPZihcIj1cIilcbiAgICBpZiAoZXEgPiAwKSB7XG4gICAgICByZXN1bHRbcGFpci5zbGljZSgwLCBlcSkudHJpbSgpXSA9IHBhaXIuc2xpY2UoZXEgKyAxKS50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl19
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVGQSw4QkFXQztBQWxHRCxxREFBc0M7QUFDdEMsZ0RBQW1EO0FBQ25ELDhDQUFtRDtBQUNuRCxtREFBc0U7QUFHdEUseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSx1Q0FBdUM7QUFFdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7QUFFdEMsNkRBQTZEO0FBQzdELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0tBQ25FLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNwRSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzdELEdBQUcsQ0FDRixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxxQ0FBcUMsRUFBRSxVQUFVLENBQUMsQ0FDeEYsQ0FBQTtBQUVILGlEQUFpRDtBQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzNDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDeEQsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ25FLEdBQUcsQ0FBQyxJQUFJLFFBQVEs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S0FBYTtJQUNoQyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFBO0lBQ3pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxNQUFNLENBQUE7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM1QixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvdG9idWYgZnJvbSBcInByb3RvYnVmanNcIlxuaW1wb3J0IHsgbG9nLCBzZXRMb2dMZXZlbCB9IGZyb20gXCIuL3V0aWwvbG9nZ2VyLmpzXCJcbmltcG9ydCB7IHByb3RvRmlsZVRvUnNGaWxlIH0gZnJvbSBcIi4vdXRpbC9uYW1lcy5qc1wiXG5pbXBvcnQgeyBnZW5lcmF0ZVJzRmlsZSwgZ2VuZXJhdGVSdW50aW1lIH0gZnJvbSBcIi4vZ2VuZXJhdG9yL2luZGV4LmpzXCJcbmltcG9ydCB0eXBlIHsgTWVzc2FnZURlc2NyaXB0b3IsIEZpZWxkSW5mbyB9IGZyb20gXCIuL2dlbmVyYXRvci9pbmRleC5qc1wiXG5cbi8vIOKUgOKUgCBQcm90b2J1ZiBzY2hlbWEgZm9yIHRoZSBwbHVnaW4gcHJvdG9jb2wg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBEZWZpbmVkIHByb2dyYW1tYXRpY2FsbHkgc28gdGhlIHBsdWdpbiBpcyBmdWxseSBzZWxmLWNvbnRhaW5lZFxuLy8gKG5vIC5wcm90byBmaWxlcyBuZWVkZWQgYXQgcnVudGltZSkuXG5cbmNvbnN0IHBsdWdpblJvb3QgPSBuZXcgcHJvdG9idWYuUm9vdCgpXG5cbi8vIGdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdCAoc2ltcGxpZmllZClcbmNvbnN0IENvZGVHZW5lcmF0b3JSZXF1ZXN0ID0gbmV3IHByb3RvYnVmLlR5cGUoXCJDb2RlR2VuZXJhdG9yUmVxdWVzdFwiKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImZpbGVfdG9fZ2VuZXJhdGVcIiwgMSwgXCJzdHJpbmdcIiwgXCJyZXBlYXRlZFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJwYXJhbWV0ZXJcIiwgMiwgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcbiAgLmFkZChcbiAgICBuZXcgcHJvdG9idWYuRmllbGQoXCJwcm90b19maWxlXCIsIDE1LCBcImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvXCIsIFwicmVwZWF0ZWRcIilcbiAgKVxuXG4vLyBnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlXG5jb25zdCBSZXNwb25zZUZpbGUgPSBuZXcgcHJvdG9idWYuVHlwZShcIkZpbGVcIilcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJuYW1lXCIsIDEsIFwic3RyaW5nXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwiaW5zZXJ0aW9uX3BvaW50XCIsIDIsIFwic3RyaW5nXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwiY29udGVudFwiLCAxNSwgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcblxuY29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlID0gbmV3IHByb3RvYnVmLlR5cGUoXCJDb2RlR2VuZXJhdG9yUmVzcG9uc2VcIilcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJlcnJvclwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInN1cHBvcnRlZF9mZWF0dXJlc1wiLCAyLCBcInVpbnQ2NFwiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImZpbGVcIiwgMTUsIFwiRmlsZVwiLCBcInJlcGVhdGVkXCIpKVxuICAuYWRkKFJlc3BvbnNlRmlsZSlcblxuLy8gRmlsZURlc2NyaXB0b3JQcm90byBhbmQgaXRzIG5lc3RlZCB0eXBlc1xuY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8gPSBuZXcgcHJvdG9idWYuVHlwZShcIkZpZWxkRGVzY3JpcHRvclByb3RvXCIpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibmFtZVwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcIm51bWJlclwiLCAzLCBcImludDMyXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibGFiZWxcIiwgNCwgXCJpbnQzMlwiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInR5cGVcIiwgNSwgXCJpbnQzMlwiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInR5cGVfbmFtZVwiLCA2LCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImRlZmF1bHRfdmFsdWVcIiwgNywgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJvbmVvZl9pbmRleFwiLCA5LCBcImludDMyXCIsIFwib3B0aW9uYWxcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwianNvbl9uYW1lXCIsIDEwLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuXG5jb25zdCBNZXNzYWdlT3B0aW9ucyA9IG5ldyBwcm90b2J1Zi5UeXBlKFwiTWVzc2FnZU9wdGlvbnNcIilcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJtYXBfZW50cnlcIiwgNywgXCJib29sXCIsIFwib3B0aW9uYWxcIikpXG5cbmNvbnN0IERlc2NyaXB0b3JQcm90byA9IG5ldyBwcm90b2J1Zi5UeXBlKFwiRGVzY3JpcHRvclByb3RvXCIpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibmFtZVwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcImZpZWxkXCIsIDIsIFwiRmllbGREZXNjcmlwdG9yUHJvdG9cIiwgXCJyZXBlYXRlZFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJuZXN0ZWRfdHlwZVwiLCAzLCBcIkRlc2NyaXB0b3JQcm90b1wiLCBcInJlcGVhdGVkXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcIm9wdGlvbnNcIiwgNywgXCJNZXNzYWdlT3B0aW9uc1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKEZpZWxkRGVzY3JpcHRvclByb3RvKVxuICAuYWRkKE1lc3NhZ2VPcHRpb25zKVxuXG5jb25zdCBGaWxlRGVzY3JpcHRvclByb3RvID0gbmV3IHByb3RvYnVmLlR5cGUoXCJGaWxlRGVzY3JpcHRvclByb3RvXCIpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibmFtZVwiLCAxLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKG5ldyBwcm90b2J1Zi5GaWVsZChcInBhY2thZ2VcIiwgMiwgXCJzdHJpbmdcIiwgXCJvcHRpb25hbFwiKSlcbiAgLmFkZChuZXcgcHJvdG9idWYuRmllbGQoXCJkZXBlbmRlbmN5XCIsIDMsIFwic3RyaW5nXCIsIFwicmVwZWF0ZWRcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwibWVzc2FnZV90eXBlXCIsIDQsIFwiRGVzY3JpcHRvclByb3RvXCIsIFwicmVwZWF0ZWRcIikpXG4gIC5hZGQobmV3IHByb3RvYnVmLkZpZWxkKFwic3ludGF4XCIsIDEyLCBcInN0cmluZ1wiLCBcIm9wdGlvbmFsXCIpKVxuICAuYWRkKERlc2NyaXB0b3JQcm90bylcblxuLy8gV2lyZSB0eXBlcyBpbnRvIG5hbWVzcGFjZXNcbmNvbnN0IGdvb2dsZVBiID0gbmV3IHByb3RvYnVmLk5hbWVzcGFjZShcImdvb2dsZVwiKVxuY29uc3QgcHJvdG9idWZOcyA9IG5ldyBwcm90b2J1Zi5OYW1lc3BhY2UoXCJwcm90b2J1ZlwiKVxuY29uc3QgY29tcGlsZXJOcyA9IG5ldyBwcm90b2J1Zi5OYW1lc3BhY2UoXCJjb21waWxlclwiKVxuXG5wcm90b2J1Zk5zLmFkZChGaWxlRGVzY3JpcHRvclByb3RvKVxuY29tcGlsZXJOcy5hZGQoQ29kZUdlbmVyYXRvclJlcXVlc3QpXG5jb21waWxlck5zLmFkZChDb2RlR2VuZXJhdG9yUmVzcG9uc2UpXG5wcm90b2J1Zk5zLmFkZChjb21waWxlck5zKVxuZ29vZ2xlUGIuYWRkKHByb3RvYnVmTnMpXG5wbHVnaW5Sb290LmFkZChnb29nbGVQYilcblxuLy8gUmVzb2x2ZSBhbGwgdHlwZSByZWZlcmVuY2VzXG5wbHVnaW5Sb290LnJlc29sdmVBbGwoKVxuXG4vLyDilIDilIAgUGx1Z2luIGVudHJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJlc3VsdCB7XG4gIGZpbGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+XG4gIGVycm9yPzogc3RyaW5nXG59XG5cbi8qKlxuICogUnVuIHRoZSBwcm90b2MgcGx1Z2luOiBkZWNvZGUgcmVxdWVzdCDihpIgZ2VuZXJhdGUgUnVzdCDihpIgZW5jb2RlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUGx1Z2luKHN0ZGluOiBCdWZmZXIpOiBCdWZmZXIge1xuICBsZXQgcmVzdWx0OiBQbHVnaW5SZXN1bHRcblxuICB0cnkge1xuICAgIHJlc3VsdCA9IHByb2Nlc3NSZXF1ZXN0KHN0ZGluKVxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGxvZy5lcnJvcihcIlBsdWdpbiBlcnJvcjogJXNcIiwgZXJyLm1lc3NhZ2UpXG4gICAgcmVzdWx0ID0geyBmaWxlczogW10sIGVycm9yOiBlcnIubWVzc2FnZSB9XG4gIH1cblxuICByZXR1cm4gZW5jb2RlUmVzcG9uc2UocmVzdWx0KVxufVxuXG4vKipcbiAqIERlY29kZSBDb2RlR2VuZXJhdG9yUmVxdWVzdCwgd2FsayBkZXNjcmlwdG9ycywgcHJvZHVjZSBvdXRwdXQgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NSZXF1ZXN0KHN0ZGluOiBCdWZmZXIpOiBQbHVnaW5SZXN1bHQge1xuICBjb25zdCBSZXFUeXBlID0gcGx1Z2luUm9vdC5sb29rdXBUeXBlKFxuICAgIFwiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0XCJcbiAgKVxuICBjb25zdCByZXF1ZXN0ID0gUmVxVHlwZS5kZWNvZGUoc3RkaW4pIGFzIGFueVxuXG4gIC8vIFBhcnNlIHBsdWdpbiBwYXJhbWV0ZXJzIChlLmcuIFwibG9nX2xldmVsPWRlYnVnXCIpXG4gIGNvbnN0IHBhcmFtcyA9IHBhcnNlUGFyYW1zKHJlcXVlc3QucGFyYW1ldGVyID8/IFwiXCIpXG4gIGlmIChwYXJhbXMubG9nX2xldmVsKSB7XG4gICAgc2V0TG9nTGV2ZWwocGFyYW1zLmxvZ19sZXZlbClcbiAgfVxuXG4gIGNvbnN0IGZpbGVzVG9HZW5lcmF0ZSA9IG5ldyBTZXQ8c3RyaW5nPihyZXF1ZXN0LmZpbGVfdG9fZ2VuZXJhdGUgPz8gW10pXG4gIGNvbnN0IHByb3RvRmlsZXM6IGFueVtdID0gcmVxdWVzdC5wcm90b19maWxlID8/IFtdXG5cbiAgbG9nLmluZm8oXG4gICAgXCJQcm9jZXNzaW5nICVkIHByb3RvIGZpbGUocyksIGdlbmVyYXRpbmcgZm9yICVkXCIsXG4gICAgcHJvdG9GaWxlcy5sZW5ndGgsXG4gICAgZmlsZXNUb0dlbmVyYXRlLnNpemVcbiAgKVxuXG4gIGNvbnN0IGZpbGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW11cblxuICAvLyBBbHdheXMgZW1pdCB0aGUgcnVudGltZSBsaWJyYXJ5XG4gIGZpbGVzLnB1c2goe1xuICAgIG5hbWU6IFwicHJvdG9idWZfcnVudGltZS5yc1wiLFxuICAgIGNvbnRlbnQ6IGdlbmVyYXRlUnVudGltZSgpXG4gIH0pXG5cbiAgLy8gUHJvY2VzcyBlYWNoIHJlcXVlc3RlZCBwcm90byBmaWxlXG4gIGZvciAoY29uc3QgcHJvdG9GaWxlIG9mIHByb3RvRmlsZXMpIHtcbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gcHJvdG9GaWxlLm5hbWUgPz8gXCJcIlxuICAgIGlmICghZmlsZXNUb0dlbmVyYXRlLmhhcyhmaWxlTmFtZSkpIGNvbnRpbnVlXG5cbiAgICBsb2cuaW5mbyhcIkdlbmVyYXRpbmcgZm9yICVzXCIsIGZpbGVOYW1lKVxuXG4gICAgY29uc3QgbWVzc2FnZXMgPSBleHRyYWN0TWVzc2FnZXMocHJvdG9GaWxlLCBwcm90b0ZpbGUucGFja2FnZSA/PyBcIlwiKVxuICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxvZy5pbmZvKFwiTm8gbWVzc2FnZXMgaW4gJXMsIHNraXBwaW5nXCIsIGZpbGVOYW1lKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCByc0ZpbGVOYW1lID0gcHJvdG9GaWxlVG9Sc0ZpbGUoZmlsZU5hbWUsIHByb3RvRmlsZS5wYWNrYWdlID8/IFwiXCIpXG4gICAgY29uc3QgcnNDb250ZW50ID0gZ2VuZXJhdGVSc0ZpbGUobWVzc2FnZXMsIGZpbGVOYW1lLCBwcm90b0ZpbGUucGFja2FnZSA/PyBcIlwiKVxuXG4gICAgZmlsZXMucHVzaCh7IG5hbWU6IHJzRmlsZU5hbWUsIGNvbnRlbnQ6IHJzQ29udGVudCB9KVxuICAgIGxvZy5pbmZvKFwiR2VuZXJhdGVkICVzICglZCBtZXNzYWdlcylcIiwgcnNGaWxlTmFtZSwgbWVzc2FnZXMubGVuZ3RoKVxuICB9XG5cbiAgcmV0dXJuIHsgZmlsZXMgfVxufVxuXG4vKipcbiAqIFdhbGsgRGVzY3JpcHRvclByb3RvIHRyZWUsIGJ1aWxkaW5nIG91ciBNZXNzYWdlRGVzY3JpcHRvciBtb2RlbC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1lc3NhZ2VzKFxuICBwcm90b0ZpbGU6IGFueSxcbiAgcGFja2FnZU5hbWU6IHN0cmluZ1xuKTogTWVzc2FnZURlc2NyaXB0b3JbXSB7XG4gIGNvbnN0IHJlc3VsdDogTWVzc2FnZURlc2NyaXB0b3JbXSA9IFtdXG4gIGNvbnN0IG1lc3NhZ2VUeXBlczogYW55W10gPSBwcm90b0ZpbGUubWVzc2FnZV90eXBlID8/IFtdXG5cbiAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZVR5cGVzKSB7XG4gICAgcmVzdWx0LnB1c2goY29udmVydERlc2NyaXB0b3IobXNnLCBwYWNrYWdlTmFtZSkpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREZXNjcmlwdG9yKGRlc2M6IGFueSwgcGFyZW50RnFuOiBzdHJpbmcpOiBNZXNzYWdlRGVzY3JpcHRvciB7XG4gIGNvbnN0IG5hbWU6IHN0cmluZyA9IGRlc2MubmFtZSA/PyBcIlwiXG4gIGNvbnN0IGZ1bGxOYW1lID0gcGFyZW50RnFuID8gYCR7cGFyZW50RnFufS4ke25hbWV9YCA6IG5hbWVcbiAgY29uc3QgaXNNYXBFbnRyeTogYm9vbGVhbiA9IGRlc2Mub3B0aW9ucz8ubWFwX2VudHJ5ID09PSB0cnVlXG5cbiAgY29uc3QgZmllbGRzOiBGaWVsZEluZm9bXSA9IChkZXNjLmZpZWxkID8/IFtdKS5tYXAoKGY6IGFueSkgPT4gKHtcbiAgICBuYW1lOiBmLm5hbWUgPz8gXCJcIixcbiAgICBudW1iZXI6IGYubnVtYmVyID8/IDAsXG4gICAgdHlwZTogZi50eXBlID8/IDAsXG4gICAgdHlwZU5hbWU6IGYudHlwZV9uYW1lLFxuICAgIGxhYmVsOiBmLmxhYmVsID8/IDEsXG4gICAgb25lb2ZJbmRleDogZi5vbmVvZl9pbmRleFxuICB9KSlcblxuICBjb25zdCBuZXN0ZWRNZXNzYWdlczogTWVzc2FnZURlc2NyaXB0b3JbXSA9IChkZXNjLm5lc3RlZF90eXBlID8/IFtdKS5tYXAoXG4gICAgKG5lc3RlZDogYW55KSA9PiBjb252ZXJ0RGVzY3JpcHRvcihuZXN0ZWQsIGZ1bGxOYW1lKVxuICApXG5cbiAgcmV0dXJuIHsgbmFtZSwgZnVsbE5hbWUsIGZpZWxkcywgbmVzdGVkTWVzc2FnZXMsIGlzTWFwRW50cnkgfVxufVxuXG4vKipcbiAqIEVuY29kZSB0aGUgQ29kZUdlbmVyYXRvclJlc3BvbnNlIGJhY2sgdG8gcHJvdG9idWYgYmluYXJ5LlxuICovXG5mdW5jdGlvbiBlbmNvZGVSZXNwb25zZShyZXN1bHQ6IFBsdWdpblJlc3VsdCk6IEJ1ZmZlciB7XG4gIGNvbnN0IFJlc3BUeXBlID0gcGx1Z2luUm9vdC5sb29rdXBUeXBlKFxuICAgIFwiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZVwiXG4gIClcblxuICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgc3VwcG9ydGVkX2ZlYXR1cmVzOiAxLCAvLyBGRUFUVVJFX1BST1RPM19PUFRJT05BTFxuICAgIGZpbGU6IHJlc3VsdC5maWxlcy5tYXAoZiA9PiAoe1xuICAgICAgbmFtZTogZi5uYW1lLFxuICAgICAgY29udGVudDogZi5jb250ZW50XG4gICAgfSkpXG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgcGF5bG9hZC5lcnJvciA9IHJlc3VsdC5lcnJvclxuICB9XG5cbiAgY29uc3QgbXNnID0gUmVzcFR5cGUuY3JlYXRlKHBheWxvYWQpXG4gIHJldHVybiBCdWZmZXIuZnJvbShSZXNwVHlwZS5lbmNvZGUobXNnKS5maW5pc2goKSlcbn1cblxuLyoqXG4gKiBQYXJzZSBcImtleT12YWx1ZSxrZXkyPXZhbHVlMlwiIHBhcmFtZXRlciBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zKHBhcmFtOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgaWYgKCFwYXJhbSkgcmV0dXJuIHJlc3VsdFxuXG4gIGZvciAoY29uc3QgcGFpciBvZiBwYXJhbS5zcGxpdChcIixcIikpIHtcbiAgICBjb25zdCBlcSA9IHBhaXIuaW5kZXhPZihcIj1cIilcbiAgICBpZiAoZXEgPiAwKSB7XG4gICAgICByZXN1bHRbcGFpci5zbGljZSgwLCBlcSkudHJpbSgpXSA9IHBhaXIuc2xpY2UoZXEgKyAxKS50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl19
|
package/lib/util/names.d.ts
CHANGED
|
@@ -9,6 +9,19 @@ export declare function protoNameToRust(fqn: string): string;
|
|
|
9
9
|
* Only converts camelCase → snake_case if needed.
|
|
10
10
|
*/
|
|
11
11
|
export declare function toSnakeCase(name: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Sanitize a Rust identifier by appending a trailing underscore if it
|
|
14
|
+
* collides with a reserved word. Safe because protobuf encodes by field
|
|
15
|
+
* number, not name.
|
|
16
|
+
* e.g. "type" → "type_", "match" → "match_"
|
|
17
|
+
*/
|
|
18
|
+
export declare function sanitizeRustFieldName(name: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Convert a proto field name to a Rust-safe struct member name.
|
|
21
|
+
* Applies camelCase → snake_case conversion then reserved word sanitization.
|
|
22
|
+
* e.g. "user_name" → "user_name", "type" → "type_", "myAddress" → "my_address"
|
|
23
|
+
*/
|
|
24
|
+
export declare function toRustFieldName(protoFieldName: string): string;
|
|
12
25
|
/**
|
|
13
26
|
* Generate output .rs filename for a given .proto file, optionally rooted
|
|
14
27
|
* under a directory derived from the proto package name.
|
package/lib/util/names.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/util/names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAYjF"}
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/util/names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAmBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAYjF"}
|
package/lib/util/names.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.protoNameToRust = protoNameToRust;
|
|
4
4
|
exports.toSnakeCase = toSnakeCase;
|
|
5
|
+
exports.sanitizeRustFieldName = sanitizeRustFieldName;
|
|
6
|
+
exports.toRustFieldName = toRustFieldName;
|
|
5
7
|
exports.protoFileToRsFile = protoFileToRsFile;
|
|
6
8
|
/**
|
|
7
9
|
* Convert a protobuf fully-qualified name to a Rust-safe identifier (PascalCase struct name).
|
|
@@ -20,6 +22,39 @@ function toSnakeCase(name) {
|
|
|
20
22
|
// Already snake_case in proto, but handle camelCase just in case
|
|
21
23
|
return name.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Rust reserved words (keywords + weak keywords) that cannot be used as
|
|
27
|
+
* identifiers. Appending a trailing underscore is safe because protobuf
|
|
28
|
+
* encodes by field number, not name.
|
|
29
|
+
*/
|
|
30
|
+
const RUST_RESERVED_WORDS = new Set([
|
|
31
|
+
// Strict keywords
|
|
32
|
+
"as", "async", "await", "break", "const", "continue", "crate",
|
|
33
|
+
"dyn", "else", "enum", "extern", "false", "fn", "for", "if",
|
|
34
|
+
"impl", "in", "let", "loop", "match", "mod", "move", "mut",
|
|
35
|
+
"pub", "ref", "return", "self", "Self", "static", "struct",
|
|
36
|
+
"super", "trait", "true", "type", "unsafe", "use", "where", "while",
|
|
37
|
+
// Reserved for future use
|
|
38
|
+
"abstract", "become", "box", "do", "final", "macro", "override",
|
|
39
|
+
"priv", "try", "typeof", "unsized", "virtual", "yield",
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Sanitize a Rust identifier by appending a trailing underscore if it
|
|
43
|
+
* collides with a reserved word. Safe because protobuf encodes by field
|
|
44
|
+
* number, not name.
|
|
45
|
+
* e.g. "type" → "type_", "match" → "match_"
|
|
46
|
+
*/
|
|
47
|
+
function sanitizeRustFieldName(name) {
|
|
48
|
+
return RUST_RESERVED_WORDS.has(name) ? `${name}_` : name;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Convert a proto field name to a Rust-safe struct member name.
|
|
52
|
+
* Applies camelCase → snake_case conversion then reserved word sanitization.
|
|
53
|
+
* e.g. "user_name" → "user_name", "type" → "type_", "myAddress" → "my_address"
|
|
54
|
+
*/
|
|
55
|
+
function toRustFieldName(protoFieldName) {
|
|
56
|
+
return sanitizeRustFieldName(toSnakeCase(protoFieldName));
|
|
57
|
+
}
|
|
23
58
|
/**
|
|
24
59
|
* Generate output .rs filename for a given .proto file, optionally rooted
|
|
25
60
|
* under a directory derived from the proto package name.
|
|
@@ -40,4 +75,4 @@ function protoFileToRsFile(protoFile, packageName) {
|
|
|
40
75
|
const dir = packageName.split(".").join("/");
|
|
41
76
|
return `${dir}/${rsBasename}`;
|
|
42
77
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLDBDQUdDO0FBT0Qsa0NBR0M7QUF5QkQsc0RBRUM7QUFPRCwwQ0FFQztBQVFELDhDQVlDO0FBekVEOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFXO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDNUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLGlFQUFpRTtJQUNqRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDL0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUN2RCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTztJQUM3RCxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSTtJQUMzRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSztJQUMxRCxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRO0lBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPO0lBQ25FLDBCQUEwQjtJQUMxQixVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVO0lBQy9ELE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTztDQUN2RCxDQUFDLENBQUE7QUFFRjs7Ozs7R0FLRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQVk7SUFDaEQsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUMxRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxjQUFzQjtJQUNwRCxPQUFPLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFNBQWlCLEVBQUUsV0FBb0I7SUFDdkUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM3QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN4Qyw0QkFBNEI7SUFDNUIsTUFBTSxhQUFhLEdBQUcsUUFBUTtTQUMzQixPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLFdBQVcsRUFBRSxDQUFBO0lBQ2hCLE1BQU0sVUFBVSxHQUFHLEdBQUcsYUFBYSxLQUFLLENBQUE7SUFDeEMsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPLFVBQVUsQ0FBQTtJQUNuQyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM1QyxPQUFPLEdBQUcsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnQgYSBwcm90b2J1ZiBmdWxseS1xdWFsaWZpZWQgbmFtZSB0byBhIFJ1c3Qtc2FmZSBpZGVudGlmaWVyIChQYXNjYWxDYXNlIHN0cnVjdCBuYW1lKS5cbiAqIGUuZy4gXCJteV9wYWNrYWdlLk15TWVzc2FnZVwiIOKGkiBcIk15TWVzc2FnZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm90b05hbWVUb1J1c3QoZnFuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IGZxbi5zcGxpdChcIi5cIilcbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG59XG5cbi8qKlxuICogS2VlcCBzbmFrZV9jYXNlIGZpZWxkIG5hbWUgYXMtaXMgZm9yIFJ1c3Qgc3RydWN0IG1lbWJlcnMuXG4gKiBlLmcuIFwidXNlcl9uYW1lXCIg4oaSIFwidXNlcl9uYW1lXCJcbiAqIE9ubHkgY29udmVydHMgY2FtZWxDYXNlIOKGkiBzbmFrZV9jYXNlIGlmIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU25ha2VDYXNlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEFscmVhZHkgc25ha2VfY2FzZSBpbiBwcm90bywgYnV0IGhhbmRsZSBjYW1lbENhc2UganVzdCBpbiBjYXNlXG4gIHJldHVybiBuYW1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDFfJDJcIikudG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFJ1c3QgcmVzZXJ2ZWQgd29yZHMgKGtleXdvcmRzICsgd2VhayBrZXl3b3JkcykgdGhhdCBjYW5ub3QgYmUgdXNlZCBhc1xuICogaWRlbnRpZmllcnMuIEFwcGVuZGluZyBhIHRyYWlsaW5nIHVuZGVyc2NvcmUgaXMgc2FmZSBiZWNhdXNlIHByb3RvYnVmXG4gKiBlbmNvZGVzIGJ5IGZpZWxkIG51bWJlciwgbm90IG5hbWUuXG4gKi9cbmNvbnN0IFJVU1RfUkVTRVJWRURfV09SRFM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgLy8gU3RyaWN0IGtleXdvcmRzXG4gIFwiYXNcIiwgXCJhc3luY1wiLCBcImF3YWl0XCIsIFwiYnJlYWtcIiwgXCJjb25zdFwiLCBcImNvbnRpbnVlXCIsIFwiY3JhdGVcIixcbiAgXCJkeW5cIiwgXCJlbHNlXCIsIFwiZW51bVwiLCBcImV4dGVyblwiLCBcImZhbHNlXCIsIFwiZm5cIiwgXCJmb3JcIiwgXCJpZlwiLFxuICBcImltcGxcIiwgXCJpblwiLCBcImxldFwiLCBcImxvb3BcIiwgXCJtYXRjaFwiLCBcIm1vZFwiLCBcIm1vdmVcIiwgXCJtdXRcIixcbiAgXCJwdWJcIiwgXCJyZWZcIiwgXCJyZXR1cm5cIiwgXCJzZWxmXCIsIFwiU2VsZlwiLCBcInN0YXRpY1wiLCBcInN0cnVjdFwiLFxuICBcInN1cGVyXCIsIFwidHJhaXRcIiwgXCJ0cnVlXCIsIFwidHlwZVwiLCBcInVuc2FmZVwiLCBcInVzZVwiLCBcIndoZXJlXCIsIFwid2hpbGVcIixcbiAgLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAgXCJhYnN0cmFjdFwiLCBcImJlY29tZVwiLCBcImJveFwiLCBcImRvXCIsIFwiZmluYWxcIiwgXCJtYWNyb1wiLCBcIm92ZXJyaWRlXCIsXG4gIFwicHJpdlwiLCBcInRyeVwiLCBcInR5cGVvZlwiLCBcInVuc2l6ZWRcIiwgXCJ2aXJ0dWFsXCIsIFwieWllbGRcIixcbl0pXG5cbi8qKlxuICogU2FuaXRpemUgYSBSdXN0IGlkZW50aWZpZXIgYnkgYXBwZW5kaW5nIGEgdHJhaWxpbmcgdW5kZXJzY29yZSBpZiBpdFxuICogY29sbGlkZXMgd2l0aCBhIHJlc2VydmVkIHdvcmQuIFNhZmUgYmVjYXVzZSBwcm90b2J1ZiBlbmNvZGVzIGJ5IGZpZWxkXG4gKiBudW1iZXIsIG5vdCBuYW1lLlxuICogZS5nLiBcInR5cGVcIiDihpIgXCJ0eXBlX1wiLCBcIm1hdGNoXCIg4oaSIFwibWF0Y2hfXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplUnVzdEZpZWxkTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gUlVTVF9SRVNFUlZFRF9XT1JEUy5oYXMobmFtZSkgPyBgJHtuYW1lfV9gIDogbmFtZVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwcm90byBmaWVsZCBuYW1lIHRvIGEgUnVzdC1zYWZlIHN0cnVjdCBtZW1iZXIgbmFtZS5cbiAqIEFwcGxpZXMgY2FtZWxDYXNlIOKGkiBzbmFrZV9jYXNlIGNvbnZlcnNpb24gdGhlbiByZXNlcnZlZCB3b3JkIHNhbml0aXphdGlvbi5cbiAqIGUuZy4gXCJ1c2VyX25hbWVcIiDihpIgXCJ1c2VyX25hbWVcIiwgXCJ0eXBlXCIg4oaSIFwidHlwZV9cIiwgXCJteUFkZHJlc3NcIiDihpIgXCJteV9hZGRyZXNzXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUnVzdEZpZWxkTmFtZShwcm90b0ZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNhbml0aXplUnVzdEZpZWxkTmFtZSh0b1NuYWtlQ2FzZShwcm90b0ZpZWxkTmFtZSkpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgb3V0cHV0IC5ycyBmaWxlbmFtZSBmb3IgYSBnaXZlbiAucHJvdG8gZmlsZSwgb3B0aW9uYWxseSByb290ZWRcbiAqIHVuZGVyIGEgZGlyZWN0b3J5IGRlcml2ZWQgZnJvbSB0aGUgcHJvdG8gcGFja2FnZSBuYW1lLlxuICogZS5nLiBcIm15X3NlcnZpY2UucHJvdG9cIiB3aXRoIHBhY2thZ2UgXCJleGFtcGxlLm5lc3RlZFwiXG4gKiAgICAgIOKGkiBcImV4YW1wbGUvbmVzdGVkL215X3NlcnZpY2UucnNcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdG9GaWxlVG9Sc0ZpbGUocHJvdG9GaWxlOiBzdHJpbmcsIHBhY2thZ2VOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IHByb3RvRmlsZS5yZXBsYWNlKC9cXC5wcm90byQvLCBcIlwiKVxuICBjb25zdCBwYXJ0cyA9IGJhc2Uuc3BsaXQoXCIvXCIpXG4gIGNvbnN0IGZpbGVuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cbiAgLy8gUnVzdCBmaWxlcyB1c2Ugc25ha2VfY2FzZVxuICBjb25zdCBzbmFrZUZpbGVuYW1lID0gZmlsZW5hbWVcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMV8kMlwiKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHJzQmFzZW5hbWUgPSBgJHtzbmFrZUZpbGVuYW1lfS5yc2BcbiAgaWYgKCFwYWNrYWdlTmFtZSkgcmV0dXJuIHJzQmFzZW5hbWVcbiAgY29uc3QgZGlyID0gcGFja2FnZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCIvXCIpXG4gIHJldHVybiBgJHtkaXJ9LyR7cnNCYXNlbmFtZX1gXG59XG4iXX0=
|