{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { Options, Enum, Message, Extends, Service, Enums, EnumValue, Messages, RPC, MessageField, OptionsJSON } from \"./parser-internals\";\nconst indent: ((s: string) => string) = s => s.replace(/^/gm, '  ')\nexport class Schema extends Options {\n\tsyntax: 2 | 3 = 3;\n\tpackage: string = '';\n\timports: string[] = [];\n\tenums: Enum[] = [];\n\tmessages: Message[] = [];\n\textends: Extends[] = [];\n\tservices: Service[] = [];\n\toptimize_for: \"SPEED\" | \"CODE_SIZE\" | \"LITE_RUNTIME\" | \"AUTO\" = \"AUTO\";\n\ttoString() {\n\t\treturn '' +\n`syntax = \"proto${this.syntax}\";\n${this.package && `package ${this.package};`\n}${this.imports.reduce((a, i) => a + `\\nimport \"${i}\";`, '')\n}${onOptions(this)\n}${onEnums(this)\n}${this.extends.reduce((a, v) => a + `\\nextend ${v.name} {${indent(onFields(v.fields))}\\n}`, '')\n}${onMessages(this)\n}${onServices(this)}`\n\t}\n}\nfunction traverse(val: OptionsJSON) {\n\tlet keys = Object.keys(val)\n\tif (keys.length === 0) return {path: '', val: ''}\n\tif (keys.length > 1) return {path: '', val}\n\tlet path = keys[0]\n\tkeys = Object.keys(val = val[path] as OptionsJSON)\n\twhile (keys.length === 1) {\n\t\tpath += '.' + keys[0]\n\t\tif (typeof val[keys[0]] === 'object') {\n\t\t\tval = val[keys[0]] as OptionsJSON\n\t\t\tkeys = Object.keys(val)\n\t\t} else return {path, val: val[keys[0]]}\n\t}\n\n\treturn { path, val }\n}\nfunction onOptionsChild(opts: OptionsJSON): string {\n\tlet s = ''\n\tfor (const v in opts) s += `\\n${v}${\n\t\ttypeof opts[v] === 'object' ? ` {${\n\t\t\tindent(onOptionsChild(opts[v] as OptionsJSON))}\\n}` : `: ${opts[v]}`\n\t};`\n\treturn s\n}\nfunction onOptionsJSON(opts: OptionsJSON): string {\n\tlet s = ''\n\tconst {path, val} = traverse(opts)\n\tif (path !== '') return `\\noption ${path.includes('.') ? `(${path})` : path} = ${typeof val === 'string' ? val : `{${indent(onOptionsChild(val))}\\n};`}`\n\telse if (typeof val === 'object') for (const v in val) s += `\\noption ${v} = ${typeof val[v] === 'string' ? val[v] : `{${indent(onOptionsChild(val[v] as OptionsJSON))}\\n}`};`\n\treturn s;\n}\nfunction onOptions<T extends Options>({options}: T): string {\n\tif (options.size === 0) return ''\n\treturn onOptionsJSON(Options.intoJSON(options))\n}\nfunction onOptionsInline<T extends Options>({options}: T) {\n\tif (options.size === 0) return ''\n\tlet a: string[] = []\n\tfor (const [k, v] of options)\n\t\ta.push(`${k.includes('.') ? `(${k})` : k} = ${v}`)\n\treturn ` [${a.join(', ')}]`\n}\nfunction onEnums<T extends Enums>({enums}: T): string {\n\tlet s = ''\n\tfor (const en of enums)\n\t\ts += `\\nenum ${en.name} {${\n\t\t\tindent(\n\t\t\t\tonOptions(en) +\n\t\t\t\tonEnumValues(en.values)\n\t\t\t\t)}\\n}`\n\treturn s\n}\nfunction onEnumValues(a: EnumValue[]) {\n\tlet s = ''\n\tfor (const e of a)\n\t\ts += `\\n${e.name} = ${e.value}${onOptionsInline(e)};`\n\treturn s\n}\nfunction onMessages<T extends Messages>({messages}: T) {\n\tlet s = ''\n\tfor (const msg of messages)\n\t\ts += `\\nmessage ${msg.name} {${\n\t\t\tindent(\n\t\t\t\tonOptions(msg) +\n\t\t\t\tonEnums(msg) +\n\t\t\t\tonMessages(msg) +\n\t\t\t\tonFields(msg.fields)\n\t\t\t\t)\n\t\t\t}\\n}`\n\treturn s\n}\nfunction onFieldValues(fields: MessageField[]) {\n\tlet s = ''\n\tfor (const f of fields)\n\t\ts += `\\n${\n\t\t\tf.required ?\n\t\t\t'required ' :\n\t\t\tf.repeated ?\n\t\t\t'repeated ' :\n\t\t\t(f.optional && !f.oneof) ?\n\t\t\t'optional ' :\n\t\t\t''\n\t\t}${\n\t\t\tf.type === 'map' ?\n\t\t\t`map<${f.map!.from}, ${f.map!.to}>` :\n\t\t\tf.type\n\t\t} ${\n\t\t\tf.name\n\t\t} = ${\n\t\t\tf.tag\n\t\t}${onOptionsInline(f)};`\n\treturn s;\n}\nfunction onFields(fields: MessageField[]) {\n\tlet s = ''\n\ts += onFieldValues(fields.filter(v => !v.oneof))\n\tconst oneofs = fields.filter(v => Boolean(v.oneof)).reduce((a, v) => {\n\t\t(a[v.oneof] || (a[v.oneof] = [])).push(v);\n\t\treturn a\n\t}, {} as {[s: string]: MessageField[]})\n\tfor (const oneof in oneofs)\n\t\ts += `\\noneof ${oneof} {${indent(onFieldValues(oneofs[oneof]))}\\n}`\n\treturn s\n}\nfunction onRPCs(rpcs: RPC[]) {\n\tlet s = ''\n\tfor (const rpc of rpcs)\n\t\ts += `\\nrpc ${rpc.name} (${\n\t\t\trpc.client_streaming ? 'stream ' : ''\n\t\t}${rpc.input_type}) returns (${\n\t\t\trpc.server_streaming ? 'stream ' : ''\n\t\t}${rpc.output_type})${\n\t\t\trpc.options.size > 0 ? ` {${indent(onOptions(rpc))}\\n}` : ''\n\t\t};`\n\n\treturn s;\n}\nfunction onServices({services}: Schema) {\n\tlet s = ''\n\tfor (const srv of services)\n\ts += `\\nservice ${srv.name} {${indent(\n\t\tonOptions(srv) +\n\t\tonRPCs(srv.methods)\n\t)}\\n}`\n\treturn s\n}\n"]}