UNPKG

@leosprograms/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

125 lines 19.1 kB
/** * base types for GraphQL query layer * * @package: HoloREA * @since: 2019-05-20 */ import { GraphQLScalarType } from 'graphql'; import { Kind } from 'graphql/language/index.js'; import Big from 'big.js'; export function addTypename(name) { return (obj) => { obj['__typename'] = name; return obj; }; } export function injectTypename(name, fn) { return async (root, args) => { const data = await fn(root, args); data['__typename'] = name; return data; }; } // VfModule listing. // for the reference, see: // https://lab.allmende.io/valueflows/vf-schemas/vf-graphql/-/tree/sprout/lib/schemas // enum containing the not yet implemented VfModule // obviously, move the variant to VfModule if implementing // it var UnimplementedVfModule; (function (UnimplementedVfModule) { UnimplementedVfModule["Geolocation"] = "geolocation"; UnimplementedVfModule["History"] = "history"; UnimplementedVfModule["Recipe"] = "recipe"; UnimplementedVfModule["Scenario"] = "scenario"; UnimplementedVfModule["ProductBatch"] = "product_batch"; UnimplementedVfModule["Appreciation"] = "appreciation"; UnimplementedVfModule["Claim"] = "claim"; UnimplementedVfModule["Filtering"] = "filtering"; UnimplementedVfModule["Ordering"] = "ordering"; })(UnimplementedVfModule || (UnimplementedVfModule = {})); // enum containing the implemented VF modules. // separate from above so that developers can import the enum and not turn on useless // features export var VfModule; (function (VfModule) { // always required regardless // see: https://lab.allmende.io/valueflows/vf-schemas/vf-graphql/-/blob/sprout/lib/index.js#L29 VfModule["Util"] = "util"; VfModule["Pagination"] = "pagination"; VfModule["History"] = "history"; // optional to enable VfModule["Agent"] = "agent"; VfModule["Agreement"] = "agreement"; VfModule["Action"] = "action"; VfModule["ProcessSpecification"] = "process_specification"; VfModule["ResourceSpecification"] = "resource_specification"; VfModule["Measurement"] = "measurement"; VfModule["Observation"] = "observation"; VfModule["Process"] = "process"; VfModule["Plan"] = "plan"; VfModule["Fulfillment"] = "fulfillment"; VfModule["Intent"] = "intent"; VfModule["Commitment"] = "commitment"; VfModule["Satisfaction"] = "satisfaction"; VfModule["Proposal"] = "proposal"; VfModule["Recipe"] = "recipe"; })(VfModule || (VfModule = {})); // default 'full suite' VF module set supported by hREA export const DEFAULT_VF_MODULES = [ VfModule.History, // Specification DNA VfModule.Action, VfModule.ProcessSpecification, VfModule.ResourceSpecification, VfModule.Measurement, // Agent DNA VfModule.Agent, // Agreement DNA VfModule.Agreement, // Observation DNA VfModule.Observation, VfModule.Process, // Proposal DNA VfModule.Proposal, // Plan DNA VfModule.Plan, // Planning DNA VfModule.Fulfillment, VfModule.Intent, VfModule.Commitment, VfModule.Satisfaction, // Recipe DNA VfModule.Recipe, ]; // scalar types export const URI = new GraphQLScalarType({ name: 'URI', description: 'The `URI` type declares a reference to any resolvable resource.', serialize: (v) => v, parseValue: (v) => v, parseLiteral(ast) { if (ast.kind === Kind.STRING) { if (!ast.value.match(/^\w+:/)) { throw new Error('Unable to parse URI- invalid format'); } return ast.value; } return null; }, }); // :TODO: this should be a GraphQLScalarType<Big, string> to avoid precision loss at API boundary export const Decimal = new GraphQLScalarType({ name: 'Decimal', description: 'The `Decimal` scalar type to handle precision arithmetic and potentially large values.', serialize: (v) => v.toNumber(), parseValue: (v) => Big(v), parseLiteral(ast) { if (ast.kind !== Kind.STRING && ast.kind !== Kind.INT && ast.kind !== Kind.FLOAT) { // @ts-ignore throw new TypeError(String(ast.value) + ' is not a valid decimal value.'); } return Big(ast.value); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUEyQixNQUFNLDJCQUEyQixDQUFBO0FBQ3pFLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQTtBQThHeEIsTUFBTSxVQUFVLFdBQVcsQ0FBSyxJQUFZO0lBQzFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNiLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDeEIsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBSyxJQUFZLEVBQUUsRUFBZTtJQUM5RCxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFjLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsb0JBQW9CO0FBQ3BCLDBCQUEwQjtBQUMxQixxRkFBcUY7QUFFckYsbURBQW1EO0FBQ25ELDBEQUEwRDtBQUMxRCxLQUFLO0FBQ0wsSUFBSyxxQkFVSjtBQVZELFdBQUsscUJBQXFCO0lBQ3hCLG9EQUEyQixDQUFBO0lBQzNCLDRDQUFtQixDQUFBO0lBQ25CLDBDQUFpQixDQUFBO0lBQ2pCLDhDQUFxQixDQUFBO0lBQ3JCLHVEQUE4QixDQUFBO0lBQzlCLHNEQUE2QixDQUFBO0lBQzdCLHdDQUFlLENBQUE7SUFDZixnREFBdUIsQ0FBQTtJQUN2Qiw4Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBVkkscUJBQXFC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QUssRUFBRTtZQUNoRixhQUFhO1lBQ2IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLGdDQUFnQyxDQUFDLENBQUE7U0FDMUU7UUFFRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsQ0FBQztDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYmFzZSB0eXBlcyBmb3IgR3JhcGhRTCBxdWVyeSBsYXllclxuICpcbiAqIEBwYWNrYWdlOiBIb2xvUkVBXG4gKiBAc2luY2U6ICAgMjAxOS0wNS0yMFxuICovXG5cbmltcG9ydCB7IFNpZ25hbENiLCBDZWxsSWQgfSBmcm9tICdAaG9sb2NoYWluL2NsaWVudCdcbmltcG9ydCB7IElSZXNvbHZlcnMgfSBmcm9tICdAZ3JhcGhxbC10b29scy91dGlscydcbmltcG9ydCB7IEdyYXBoUUxTY2FsYXJUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcbmltcG9ydCB7IEtpbmQsIFZhbHVlTm9kZSwgVmFyaWFibGVOb2RlIH0gZnJvbSAnZ3JhcGhxbC9sYW5ndWFnZS9pbmRleC5qcydcbmltcG9ydCBCaWcgZnJvbSAnYmlnLmpzJ1xuXG4vLyBDb25maWd1cmF0aW9uIG9iamVjdCB0byBhbGxvdyBzcGVjaWZ5aW5nIGN1c3RvbSBjb25kdWN0b3IgRE5BIElEcyB0byBiaW5kIHRvLlxuLy8gRGVmYXVsdCBpcyB0byB1c2UgYSBETkEgd2l0aCB0aGUgc2FtZSBJRCBhcyB0aGUgbWFwcGluZyBJRCAoaWUuIGFnZW50ID0gXCJhZ2VudFwiKVxuZXhwb3J0IGludGVyZmFjZSBETkFJZE1hcHBpbmdzIHtcbiAgYWdlbnQ/OiBDZWxsSWQsXG4gIGFncmVlbWVudD86IENlbGxJZCxcbiAgb2JzZXJ2YXRpb24/OiBDZWxsSWQsXG4gIHBsYW5uaW5nPzogQ2VsbElkLFxuICBwcm9wb3NhbD86IENlbGxJZCxcbiAgc3BlY2lmaWNhdGlvbj86IENlbGxJZCxcbiAgY29tYmluZWQ/OiBDZWxsSWQsXG59XG5cbmV4cG9ydCB7IENlbGxJZCB9XG5cbi8vIE9wdGlvbnMgZm9yIHJlc29sdmVyIGdlbmVyYXRvclxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlck9wdGlvbnMge1xuICAvLyBBcHBBZ2VudENsaWVudCBpbiBjYXNlIHdlIG5lZWQgdG8gbWFrZSBjYWxscyB0byB0aGUgY29uZHVjdG9yIGluIHdlYXZlXG4gIHdlYXZlQXBwQWdlbnRDbGllbnQ6IGFueTtcblxuICAvLyBBcnJheSBvZiBWYWx1ZUZsb3dzIG1vZHVsZXMgdG8gaW5jbHVkZSBpbiB0aGUgc2NoZW1hXG4gIC8vIEBzZWUgaHR0cHM6Ly9sYWIuYWxsbWVuZGUuaW8vdmFsdWVmbG93cy92Zi1zY2hlbWFzL3ZmLWdyYXBocWwjZ2VuZXJhdGluZy1zY2hlbWFzXG4gIGVuYWJsZWRWRk1vZHVsZXM6IFZmTW9kdWxlW10sXG5cbiAgLy8gTWFwcGluZyBvZiBETkEgaWRlbnRpZmllcnMgdG8gcnVudGltZSBgQ2VsbElkYHMgdG8gYmluZCB0by5cbiAgZG5hQ29uZmlnOiBETkFJZE1hcHBpbmdzLFxuXG4gIC8vIEN1c3RvbSBIb2xvY2hhaW4gY29uZHVjdG9yIFVSSSB0byB1c2Ugd2l0aCB0aGlzIGluc3RhbmNlLCB0byBzdXBwb3J0IGNvbm5lY3RpbmcgdG8gbXVsdGlwbGUgY29uZHVjdG9ycy5cbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgY29ubmVjdHMgdG8gdGhlIGxvY2FsIGNvbmR1Y3RvciBvciB0aGUgVVJJIHN0b3JlZCBpbiBgcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0hDX0NPTk5fVVJMYC5cbiAgY29uZHVjdG9yVXJpOiBzdHJpbmcsXG5cbiAgLy8gQ3VzdG9tIEFkbWluIEhvbG9jaGFpbiBjb25kdWN0b3IgVVJJIHRvIHVzZSB3aXRoIHRoaXMgaW5zdGFuY2UsIHRvIHN1cHBvcnQgY29ubmVjdGluZyB0byBtdWx0aXBsZSBjb25kdWN0b3JzLlxuICAvLyBJZiBub3Qgc3BlY2lmaWVkLCBjb25uZWN0cyB0byB0aGUgbG9jYWwgY29uZHVjdG9yIG9yIHRoZSBVUkkgc3RvcmVkIGluIGBwcm9jZXNzLmVudi5SRUFDVF9BUFBfSENfQURNSU5fQ09OTl9VUkxgLlxuICBhZG1pbkNvbmR1Y3RvclVyaTogc3RyaW5nLFxuXG4gIC8vIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGZldGNoIHRoZSBpbnN0YWxsZWQgQ2VsbElkJ3MgYW5kIGdyYW50IGF1dGhvcml6YXRpb25cbiAgLy8gYnkgdGhlIEFkbWluIEFQSSBmb3IgYW55IHpvbWUgZnVuY3Rpb25zIG9uIHRob3NlIENlbGxzIHRvIGJlIGNhbGxlZFxuICBhcHBJZDogc3RyaW5nLFxuXG4gIC8vIENhbGxiYWNrIHRvIGxpc3RlbiBmb3Igc2lnbmFscyBmcm9tIHRoZSBIb2xvY2hhaW4gYXBwIHdlYnNvY2tldCwgdG8gc3VwcG9ydCByZWFsdGltZSBldmVudCBub3RpZmljYXRpb25zLlxuICB0cmFjZUFwcFNpZ25hbHM/OiBTaWduYWxDYixcblxuICAvLyBPcmlnaW5cbiAgb3JpZ2luPzogc3RyaW5nLFxufVxuXG4vLyBTY2hlbWEgZ2VuZXJhdGlvbiBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byB2Zi1ncmFwaHFsXG4vLyBAc2VlIGh0dHBzOi8vbGFiLmFsbG1lbmRlLmlvL3ZhbHVlZmxvd3MvdmYtc2NoZW1hcy92Zi1ncmFwaHFsI2dlbmVyYXRpbmctc2NoZW1hc1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25PcHRpb25zIHtcbiAgLy8gQXJyYXkgb2YgYWRkaXRpb25hbCBTREwgc2NoZW1hIHN0cmluZ3MgdG8gYnVuZGxlIGludG8gdGhlIHJlc3VsdGFudCBzY2hlbWEgaW4gYWRkaXRpb24gdG8gdGhlXG4gIC8vIHNwZWNpZmllZCBtb2R1bGFyIHN1Yi1zZWN0aW9uIG9mIHRoZSBWYWx1ZUZsb3dzIHNwZWMuXG4gIGV4dGVuc2lvblNjaGVtYXM/OiBzdHJpbmdbXSxcblxuICAvLyBBZGRpdGlvbmFsIHJlc29sdmVyIGNhbGxiYWNrcyB0byBpbmplY3QgaW50byB0aGUgc2NoZW1hIGluIGFkZGl0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRcbiAgLy8gc2V0IG9mIGhSRUEgRE5BIHJlc29sdmVycy5cbiAgLy8gVXNlZCBmb3IgaW5qZWN0aW5nIGltcGxlbWVudGF0aW9uIGxvZ2ljIGZvciBgZXh0ZW5zaW9uU2NoZW1hc2A6IG5vdCByZWNvbW1lbmRlZCBmb3Igb3ZlcnJpZGluZ1xuICAvLyBwYXJ0cyBvZiB0aGUgaFJFQSBjb3JlIGJlaGF2aW91ciFcbiAgZXh0ZW5zaW9uUmVzb2x2ZXJzPzogSVJlc29sdmVycyxcbn1cblxuZXhwb3J0IHR5cGUgQmluZFNjaGVtYU9wdGlvbnMgPSBQaWNrPFJlc29sdmVyT3B0aW9ucywgJ2RuYUNvbmZpZycgfCAnY29uZHVjdG9yVXJpJyB8ICdhZG1pbkNvbmR1Y3RvclVyaScgfCAnYXBwSWQnIHwgJ3RyYWNlQXBwU2lnbmFscycgfCAnd2VhdmVBcHBBZ2VudENsaWVudCc+XG4gICYge1xuICAgIC8vIG9wdGlvbmFsIGJlY2F1c2UgREVGQVVMVF9WRl9NT0RVTEVTIGlzIGFzc2lnbmVkIGFzIGZhbGxiYWNrXG4gICAgZW5hYmxlZFZGTW9kdWxlcz86IFZmTW9kdWxlW10gXG4gIH1cbiAgJiBFeHRlbnNpb25PcHRpb25zXG5cbi8vIFR5cGVzIHRoYXQgc2VyaWFsaXplIGZvciBydXN0IHpvbWUgY2FsbHNcbi8vIHN0YXJ0IG9mIHNlY3Rpb25cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFBhcmFtcyB7XG4gIGFkZHJlc3M6IEFkZHJlc3NhYmxlSWRlbnRpZmllcixcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQnlJZCB7XG4gIGlkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIsXG59XG5leHBvcnQgaW50ZXJmYWNlIEJ5UmV2aXNpb24ge1xuICByZXZpc2lvbklkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIsXG59XG5cbmV4cG9ydCB0eXBlIEFkZHJlc3NhYmxlSWRlbnRpZmllciA9IHN0cmluZ1xuZXhwb3J0IHR5cGUgQ29tbWl0bWVudEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFByb2Nlc3NBZGRyZXNzID0gQWRkcmVzc2FibGVJZGVudGlmaWVyXG5leHBvcnQgdHlwZSBGdWxmaWxsbWVudEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFNhdGlzZmFjdGlvbkFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIEFncmVlbWVudEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFBsYW5BZGRyZXNzID0gQWRkcmVzc2FibGVJZGVudGlmaWVyXG5leHBvcnQgdHlwZSBQcm9wb3NhbEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIEludGVudEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIEFnZW50QWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgRWNvbm9taWNSZXNvdXJjZUFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIEVjb25vbWljRXZlbnRBZGRyZXNzID0gQWRkcmVzc2FibGVJZGVudGlmaWVyXG5leHBvcnQgdHlwZSBSZXNvdXJjZVNwZWNpZmljYXRpb25BZGRyZXNzID0gQWRkcmVzc2FibGVJZGVudGlmaWVyXG5leHBvcnQgdHlwZSBQcm9wb3NlZEludGVudEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFByb2Nlc3NTcGVjaWZpY2F0aW9uQWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgUmVjaXBlUHJvY2Vzc0FkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFJlY2lwZUV4Y2hhbmdlQWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgUmVjaXBlRmxvd0FkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcblxuZXhwb3J0IGludGVyZmFjZSBCeVJldmlzaW9uIHtcbiAgcmV2aXNpb25JZDogc3RyaW5nXG59XG4vLyBlbmQgb2Ygc2VjdGlvblxuXG4vLyBoZWxwZXJzIGZvciByZXNvbHZlcnMgdG8gaW5qZWN0IF9fdHlwZW5hbWUgcGFyYW1ldGVyIGZvciB1bmlvbiB0eXBlIGRpc2FtYmlndWF0aW9uXG4vLyAuLi50aGlzIG1pZ2h0IGJlIHVubmVjZXNzYXJpbHkgcHJlc2VudCBkdWUgdG8gbGFjayBvZiBmYW1pbGlhcml0eSB3aXRoIEdyYXBoUUw/XG5cbnR5cGUgT2JqRGVjb3JhdG9yPFQ+ID0gKG9iajogVCkgPT4gVFxudHlwZSBSZXNvbHZlcjxUPiA9IChyb290LCBhcmdzKSA9PiBQcm9taXNlPFQ+XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBlbmFtZTxUPiAobmFtZTogc3RyaW5nKTogT2JqRGVjb3JhdG9yPFQ+IHtcbiAgcmV0dXJuIChvYmopID0+IHtcbiAgICBvYmpbJ19fdHlwZW5hbWUnXSA9IG5hbWVcbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFR5cGVuYW1lPFQ+IChuYW1lOiBzdHJpbmcsIGZuOiBSZXNvbHZlcjxUPik6IFJlc29sdmVyPFQ+IHtcbiAgcmV0dXJuIGFzeW5jIChyb290LCBhcmdzKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZuKHJvb3QsIGFyZ3MpXG4gICAgZGF0YVsnX190eXBlbmFtZSddID0gbmFtZVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cblxuLy8gVmZNb2R1bGUgbGlzdGluZy5cbi8vIGZvciB0aGUgcmVmZXJlbmNlLCBzZWU6XG4vLyBodHRwczovL2xhYi5hbGxtZW5kZS5pby92YWx1ZWZsb3dzL3ZmLXNjaGVtYXMvdmYtZ3JhcGhxbC8tL3RyZWUvc3Byb3V0L2xpYi9zY2hlbWFzXG5cbi8vIGVudW0gY29udGFpbmluZyB0aGUgbm90IHlldCBpbXBsZW1lbnRlZCBWZk1vZHVsZVxuLy8gb2J2aW91c2x5LCBtb3ZlIHRoZSB2YXJpYW50IHRvIFZmTW9kdWxlIGlmIGltcGxlbWVudGluZ1xuLy8gaXRcbmVudW0gVW5pbXBsZW1lbnRlZFZmTW9kdWxlIHtcbiAgR2VvbG9jYXRpb24gPSAnZ2VvbG9jYXRpb24nLFxuICBIaXN0b3J5ID0gJ2hpc3RvcnknLFxuICBSZWNpcGUgPSAncmVjaXBlJyxcbiAgU2NlbmFyaW8gPSAnc2NlbmFyaW8nLFxuICBQcm9kdWN0QmF0Y2ggPSAncHJvZHVjdF9iYXRjaCcsXG4gIEFwcHJlY2lhdGlvbiA9ICdhcHByZWNpYXRpb24nLFxuICBDbGFpbSA9ICdjbGFpbScsXG4gIEZpbHRlcmluZyA9ICdmaWx0ZXJpbmcnLFxuICBPcmRlcmluZyA9ICdvcmRlcmluZycsXG59XG5cbi8vIGVudW0gY29udGFpbmluZyB0aGUgaW1wbGVtZW50ZWQgVkYgbW9kdWxlcy5cbi8vIHNlcGFyYXRlIGZyb20gYWJvdmUgc28gdGhhdCBkZXZlbG9wZXJzIGNhbiBpbXBvcnQgdGhlIGVudW0gYW5kIG5vdCB0dXJuIG9uIHVzZWxlc3Ncbi8vIGZlYXR1cmVzXG5leHBvcnQgZW51bSBWZk1vZHVsZSB7XG4gIC8vIGFsd2F5cyByZXF1aXJlZCByZWdhcmRsZXNzXG4gIC8vIHNlZTogaHR0cHM6Ly9sYWIuYWxsbWVuZGUuaW8vdmFsdWVmbG93cy92Zi1zY2hlbWFzL3ZmLWdyYXBocWwvLS9ibG9iL3Nwcm91dC9saWIvaW5kZXguanMjTDI5XG4gIFV0aWwgPSAndXRpbCcsXG4gIFBhZ2luYXRpb24gPSAncGFnaW5hdGlvbicsXG4gIEhpc3RvcnkgPSAnaGlzdG9yeScsXG4gIC8vIG9wdGlvbmFsIHRvIGVuYWJsZVxuICBBZ2VudCA9ICdhZ2VudCcsXG4gIEFncmVlbWVudCA9ICdhZ3JlZW1lbnQnLFxuICBBY3Rpb24gPSAnYWN0aW9uJyxcbiAgUHJvY2Vzc1NwZWNpZmljYXRpb24gPSAncHJvY2Vzc19zcGVjaWZpY2F0aW9uJyxcbiAgUmVzb3VyY2VTcGVjaWZpY2F0aW9uID0gJ3Jlc291cmNlX3NwZWNpZmljYXRpb24nLFxuICBNZWFzdXJlbWVudCA9ICdtZWFzdXJlbWVudCcsXG4gIE9ic2VydmF0aW9uID0gJ29ic2VydmF0aW9uJyxcbiAgUHJvY2VzcyA9ICdwcm9jZXNzJyxcbiAgUGxhbiA9ICdwbGFuJyxcbiAgRnVsZmlsbG1lbnQgPSAnZnVsZmlsbG1lbnQnLFxuICBJbnRlbnQgPSAnaW50ZW50JyxcbiAgQ29tbWl0bWVudCA9ICdjb21taXRtZW50JyxcbiAgU2F0aXNmYWN0aW9uID0gJ3NhdGlzZmFjdGlvbicsXG4gIFByb3Bvc2FsID0gJ3Byb3Bvc2FsJyxcbiAgUmVjaXBlID0gJ3JlY2lwZScsXG59XG5cbi8vIGRlZmF1bHQgJ2Z1bGwgc3VpdGUnIFZGIG1vZHVsZSBzZXQgc3VwcG9ydGVkIGJ5IGhSRUFcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZGX01PRFVMRVMgPSBbXG4gIFZmTW9kdWxlLkhpc3RvcnksXG4gIC8vIFNwZWNpZmljYXRpb24gRE5BXG4gIFZmTW9kdWxlLkFjdGlvbixcbiAgVmZNb2R1bGUuUHJvY2Vzc1NwZWNpZmljYXRpb24sXG4gIFZmTW9kdWxlLlJlc291cmNlU3BlY2lmaWNhdGlvbixcbiAgVmZNb2R1bGUuTWVhc3VyZW1lbnQsXG4gIC8vIEFnZW50IEROQVxuICBWZk1vZHVsZS5BZ2VudCxcbiAgLy8gQWdyZWVtZW50IEROQVxuICBWZk1vZHVsZS5BZ3JlZW1lbnQsXG4gIC8vIE9ic2VydmF0aW9uIEROQVxuICBWZk1vZHVsZS5PYnNlcnZhdGlvbixcbiAgVmZNb2R1bGUuUHJvY2VzcyxcbiAgLy8gUHJvcG9zYWwgRE5BXG4gIFZmTW9kdWxlLlByb3Bvc2FsLFxuICAvLyBQbGFuIEROQVxuICBWZk1vZHVsZS5QbGFuLFxuICAvLyBQbGFubmluZyBETkFcbiAgVmZNb2R1bGUuRnVsZmlsbG1lbnQsXG4gIFZmTW9kdWxlLkludGVudCxcbiAgVmZNb2R1bGUuQ29tbWl0bWVudCxcbiAgVmZNb2R1bGUuU2F0aXNmYWN0aW9uLFxuICAvLyBSZWNpcGUgRE5BXG4gIFZmTW9kdWxlLlJlY2lwZSxcbl1cblxuLy8gc2NhbGFyIHR5cGVzXG5cbmV4cG9ydCBjb25zdCBVUkkgPSBuZXcgR3JhcGhRTFNjYWxhclR5cGUoe1xuICBuYW1lOiAnVVJJJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgYFVSSWAgdHlwZSBkZWNsYXJlcyBhIHJlZmVyZW5jZSB0byBhbnkgcmVzb2x2YWJsZSByZXNvdXJjZS4nLFxuICBzZXJpYWxpemU6ICh2KSA9PiB2LFxuICBwYXJzZVZhbHVlOiAodikgPT4gdixcbiAgcGFyc2VMaXRlcmFsIChhc3QpIHtcbiAgICBpZiAoYXN0LmtpbmQgPT09IEtpbmQuU1RSSU5HKSB7XG4gICAgICBpZiAoIWFzdC52YWx1ZS5tYXRjaCgvXlxcdys6LykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcGFyc2UgVVJJLSBpbnZhbGlkIGZvcm1hdCcpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXN0LnZhbHVlXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH0sXG59KVxuXG4vLyA6VE9ETzogdGhpcyBzaG91bGQgYmUgYSBHcmFwaFFMU2NhbGFyVHlwZTxCaWcsIHN0cmluZz4gdG8gYXZvaWQgcHJlY2lzaW9uIGxvc3MgYXQgQVBJIGJvdW5kYXJ5XG5leHBvcnQgY29uc3QgRGVjaW1hbDogR3JhcGhRTFNjYWxhclR5cGUgPSBuZXcgR3JhcGhRTFNjYWxhclR5cGUoe1xuICBuYW1lOiAnRGVjaW1hbCcsXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGBEZWNpbWFsYCBzY2FsYXIgdHlwZSB0byBoYW5kbGUgcHJlY2lzaW9uIGFyaXRobWV0aWMgYW5kIHBvdGVudGlhbGx5IGxhcmdlIHZhbHVlcy4nLFxuICBzZXJpYWxpemU6ICh2OiB1bmtub3duKSA9PiAodiBhcyBCaWcpLnRvTnVtYmVyKCksXG4gIHBhcnNlVmFsdWU6ICh2OiB1bmtub3duKSA9PiBCaWcodiBhcyBudW1iZXIpLFxuICBwYXJzZUxpdGVyYWwoYXN0OiBWYWx1ZU5vZGUpIHtcbiAgICBpZiAoYXN0LmtpbmQgIT09IEtpbmQuU1RSSU5HICYmIGFzdC5raW5kICE9PSBLaW5kLklOVCAmJiBhc3Qua2luZCAhPT0gS2luZC5GTE9BVCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihTdHJpbmcoYXN0LnZhbHVlKSArICcgaXMgbm90IGEgdmFsaWQgZGVjaW1hbCB2YWx1ZS4nKVxuICAgIH1cblxuICAgIHJldHVybiBCaWcoYXN0LnZhbHVlKVxuICB9XG59KVxuIl19