{"version":3,"sources":["../../src/index.ts","../../src/_helpers/thrower.ts","../../src/_typeguards/isText.ts","../../src/tokens/comment.ts","../../src/_helpers/cut.ts","../../src/_typeguards/isPresent.ts","../../src/_helpers/getNextToken.ts","../../src/_typeguards/isString.ts","../../src/_helpers/check.ts","../../src/_helpers/wrap.ts","../../src/validators/isProto.ts","../../src/tokens/syntax.ts","../../src/validators/isText.ts","../../src/tokens/package.ts","../../src/validators/isNumber.ts","../../src/validators/isStr.ts","../../src/tokens/options.ts","../../src/tokens/enums.ts","../../src/tokens/extensions.ts","../../src/tokens/map.ts","../../src/tokens/field.ts","../../src/tokens/oneof.ts","../../src/tokens/anyof.ts","../../src/tokens/reserved.ts","../../src/_typeguards/isObject.ts","../../src/tokens/message.ts","../../src/tokens/import.ts","../../src/tokens/rpc.ts","../../src/tokens/service.ts","../../src/tokens/schema.ts","../../src/parse.ts"],"sourcesContent":["export {parse} from './parse';\r\nexport {\r\n    Schema, Method, Service, Extension, Extend, Enum, Field, Message, Reserved, Options, Tokens, Option\r\n} from './types';\r\n","import {Tokens} from '../types';\r\n\r\nexport class Thrower {\r\n    public name: string;\r\n    public message: [string, number][];\r\n\r\n    public line = 0;\r\n    public column = 0;\r\n    public range: Tokens = [];\r\n\r\n    constructor(name: string, message: [string, number][]) {\r\n        this.name = name;\r\n        this.message = message;\r\n    }\r\n\r\n    public addLine(num: number) {\r\n        this.line = num;\r\n    }\r\n\r\n    public addColumn(num: number) {\r\n        this.column = num;\r\n    }\r\n\r\n    public addRange(range: Tokens) {\r\n        this.range = range.length > 10\r\n            ? range.slice(0, 5).concat(['...'], range.slice(-5))\r\n            : range;\r\n    }\r\n}\r\n","export function isText(value: unknown): value is string {\r\n    return typeof value === 'string' && value !== '';\r\n}\r\n","import {isText} from '../_typeguards/isText';\r\n\r\nlet comment = '';\r\nlet lastComment: {comment?: string} = {};\r\n\r\nexport const writeComment = (com: {comment?: string}) => {\r\n    const co = (com.comment ?? '') + comment;\r\n\r\n    if (isText(co)) {\r\n        com.comment = co;\r\n    }\r\n\r\n    comment = '';\r\n    lastComment = com;\r\n};\r\n\r\nexport const getComment = () => {\r\n    return comment;\r\n};\r\n\r\nexport const setComment = (nextComment: string) => {\r\n    comment = nextComment;\r\n};\r\n\r\nexport const cleanComment = () => {\r\n    comment = '';\r\n};\r\n\r\nexport const getLastComment = () => {\r\n    return lastComment;\r\n};\r\n\r\nexport const setLastComment = (com: {comment?: string}) => {\r\n    lastComment = com;\r\n};\r\n","export const cut = <T>(arr: T[], count: number) => arr.splice(0, count);\r\n\r\nexport const cutStr = (str?: string) => str?.slice(1, -1) ?? '';\r\n\r\nexport const cutSemicolon = (tokens: string[]) => {\r\n    if (tokens[0] === ';') {\r\n        tokens.shift();\r\n    }\r\n};\r\n","export function isPresent<T>(value: T): value is Exclude<T, undefined | null> {\r\n    return value !== undefined && value !== null;\r\n}\r\n","import {getComment, setComment, getLastComment} from '../tokens/comment';\r\nimport {cut} from './cut';\r\nimport {isPresent} from '../_typeguards/isPresent';\r\n\r\nexport const getNextToken = (tokens: string[]): string | undefined => {\r\n    while (tokens.length > 0) {\r\n        switch (tokens[0]) {\r\n            case '//': {\r\n                const comments = cut(tokens, 2);\r\n\r\n                const comment = getComment();\r\n\r\n                const prefixComment = comment !== ''\r\n                    ? `${comment}\\n`\r\n                    : comment;\r\n\r\n                const nextComment = prefixComment + comments[1];\r\n\r\n                setComment(nextComment);\r\n                break;\r\n            }\r\n\r\n            case '/*': {\r\n                const commentsMulti = cut(tokens, 3);\r\n\r\n                const comment = getComment();\r\n\r\n                const prefixComment = comment !== ''\r\n                    ? `${comment}\\n`\r\n                    : comment;\r\n\r\n                const nextComment = prefixComment + commentsMulti[1];\r\n\r\n                setComment(nextComment);\r\n                break;\r\n            }\r\n\r\n            case '!//': {\r\n                const commentInline = cut(tokens, 2);\r\n\r\n                const comment = getComment();\r\n\r\n                const prefixComment = comment !== ''\r\n                    ? `${comment}\\n`\r\n                    : comment;\r\n\r\n                const nextComment = prefixComment + commentInline[1];\r\n\r\n                const lastComment = getLastComment();\r\n\r\n                if (isPresent(lastComment)) {\r\n                    lastComment.comment = comment;\r\n\r\n                    setComment('');\r\n                } else {\r\n                    setComment(nextComment);\r\n                }\r\n\r\n                break;\r\n            }\r\n\r\n            default:\r\n                return tokens[0];\r\n        }\r\n    }\r\n\r\n    return tokens[0];\r\n};\r\n","export function isString(value: unknown): value is string {\r\n    return typeof value === 'string';\r\n}\r\n","import {Thrower} from './thrower';\r\nimport {Tokens} from '../types';\r\nimport {wrap} from './wrap';\r\nimport {isString} from '../_typeguards/isString';\r\n\r\ntype Checks = ReturnType<typeof wrap>;\r\n\r\ntype Config = {\r\n    type?: string;\r\n    rules: Checks[];\r\n    tokens: Tokens;\r\n};\r\n\r\nexport const check = (config: Config) => {\r\n    const {type, rules, tokens} = config;\r\n\r\n    const errors: [string, number][] = [];\r\n    const results: string[] = [];\r\n    const range: Tokens = tokens.slice(0, rules.length);\r\n\r\n    let len = 0;\r\n\r\n    for (let i = 0; i < rules.length; i++) {\r\n        const {rule, config} = rules[i];\r\n        const val = Array.isArray(rule)\r\n            ? rule\r\n            : [rule];\r\n\r\n        const index = config?.strict === true\r\n            ? i\r\n            : len;\r\n        const token = tokens[index] ?? '';\r\n\r\n        let valid = false;\r\n\r\n        for (const validator of val) {\r\n            if (!valid) {\r\n                valid = typeof validator === 'function'\r\n                    ? validator(token)\r\n                    : token === validator;\r\n            }\r\n        }\r\n\r\n        if (config?.result === true) {\r\n            const item = valid\r\n                ? token\r\n                : '';\r\n\r\n            results.push(item);\r\n        }\r\n        if (!valid && config?.ignore !== true) {\r\n            errors.push([`Token \"${token}\" not equal \"${val.join(',')}\"`, i]);\r\n        }\r\n        if (valid || (!valid && config?.ignore !== true)) {\r\n            len++;\r\n        }\r\n    }\r\n\r\n    if (errors.length > 0 && isString(type)) {\r\n        errors.push([range.join(', '), 0]);\r\n        throw new Thrower(type, errors);\r\n    }\r\n\r\n    return {\r\n        errors,\r\n        results,\r\n        range,\r\n        len: len,\r\n    };\r\n};\r\n","type Validator = string | ((item?: string) => boolean);\r\n\r\ntype CheckConfig = {\r\n    strict?: boolean;\r\n    ignore?: boolean;\r\n    result?: boolean;\r\n};\r\n\r\nexport const wrap = (rule: Validator | Validator[], config?: CheckConfig) => ({rule, config});\r\n","import {cutStr} from '../_helpers/cut';\r\n\r\nexport const isProto = (str?: string) => {\r\n    const s = cutStr(str);\r\n    return s === 'proto2' || s === 'proto3';\r\n};\r\n\r\nisProto.toString = () => ' string with quotes \"proto2\" or \"proto3\" ';\r\n","import {check} from '../_helpers/check';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut, cutStr} from '../_helpers/cut';\r\nimport {isProto} from '../validators/isProto';\r\n\r\nexport const getSyntax = (tokens: string[]) => {\r\n    const {range, len} = check({\r\n        type: 'syntax',\r\n        tokens,\r\n        rules: [wrap('syntax'), wrap('='), wrap(isProto), wrap(';')],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    if (cutStr(range[2]) === 'proto2') {\r\n        return 2;\r\n    }\r\n\r\n    return 3;\r\n};\r\n","import {Symbols} from '@veksa/protobuf-tokenizer';\r\n\r\nexport const isText = (str?: unknown): str is string => {\r\n    return typeof str === 'string' && !Symbols[str];\r\n};\r\n\r\nisText.toString = () => 'string';\r\n","import {check} from '../_helpers/check';\r\nimport {cut} from '../_helpers/cut';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {isText} from '../validators/isText';\r\n\r\nexport const getPackage = (tokens: string[]) => {\r\n    const {len, results} = check({\r\n        type: 'package',\r\n        tokens,\r\n        rules: [wrap('package'), wrap(isText, {result: true}), wrap(';')],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    return results[0];\r\n};\r\n","export const isNumber = (str?: unknown): str is number => {\r\n    return !isNaN(Number(str));\r\n};\r\n\r\nisNumber.toString = () => 'number';\r\n","import {isText} from './isText';\r\n\r\nexport const isStr = (str?: unknown): str is string => {\r\n    return isText(str)\r\n        ? (str.slice(0, 1) === '\"' && str.slice(-1) === '\"') || (str.slice(0, 1) === '\\'' && str.slice(-1) === '\\'')\r\n        : false;\r\n};\r\n\r\nisStr.toString = () => ' string with quotes \"...\" or \\'...\\' ';\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Option, Options} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {isPresent} from '../_typeguards/isPresent';\r\nimport {setLastComment, writeComment} from './comment';\r\nimport {cutStr, cut, cutSemicolon} from '../_helpers/cut';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {isNumber} from '../validators/isNumber';\r\nimport {isStr} from '../validators/isStr';\r\nimport {isText} from '../validators/isText';\r\n\r\nconst getValue = (value?: string) => {\r\n    if (value === 'true') {\r\n        return true;\r\n    }\r\n\r\n    if (value === 'false') {\r\n        return false;\r\n    }\r\n\r\n    if (isNumber(value)) {\r\n        return value;\r\n    }\r\n\r\n    if (isStr(value)) {\r\n        return cutStr(value);\r\n    }\r\n\r\n    return value;\r\n};\r\n\r\nexport const getOptionValue = (tokens: string[]): Option => {\r\n    const value = tokens.shift();\r\n\r\n    if (value !== '{') {\r\n        return getValue(value);\r\n    }\r\n\r\n    const result: Options = {};\r\n\r\n    let field: string | undefined;\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '}':\r\n                cut(tokens, 1);\r\n                return result;\r\n\r\n            case ':':\r\n                cut(tokens, 1);\r\n                insertOption(result, field, tokens[0] === '['\r\n                    ? getOptionArray(tokens)\r\n                    : getOptionValue(tokens));\r\n                break;\r\n\r\n            case '{':\r\n                insertOption(result, field, getOptionValue(tokens));\r\n                break;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                field = tokens.shift();\r\n        }\r\n    }\r\n\r\n    throw new Thrower('option array', [['no close tag \"}\"', 0]]);\r\n};\r\n\r\nexport const getOptionArray = (tokens: string[]): Option[] => {\r\n    const options: Option[] = [];\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '[':\r\n            case ',':\r\n                cut(tokens, 1);\r\n                options.push(getOptionValue(tokens));\r\n                break;\r\n\r\n            case ']':\r\n                cut(tokens, 1);\r\n                return options;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                throw new Thrower('options array', [[`Unexpected token \"${tokens[0]}\"`, 0]]);\r\n        }\r\n    }\r\n\r\n    throw new Thrower('options array', [['no close tag \"]\"', 0]]);\r\n};\r\n\r\nexport const getOption = (tokens: string[]) => {\r\n    const {len, results} = check({\r\n        type: 'option',\r\n        tokens,\r\n        rules: [\r\n            wrap('(', {ignore: true}),\r\n            wrap(isText, {result: true}),\r\n            wrap(')', {ignore: true}),\r\n            wrap(isText, {result: true, ignore: true}),\r\n            wrap('='),\r\n            wrap([isText, '{']),\r\n        ],\r\n    });\r\n\r\n    cut(tokens, len - 1);\r\n    const field = results[0] + results[1];\r\n    const value = getOptionValue(tokens);\r\n\r\n    return {field, value};\r\n};\r\n\r\nexport const getInnerOptions = (tokens: string[]) => {\r\n    const options: Options = {};\r\n\r\n    setLastComment(options);\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '[':\r\n            case ',': {\r\n                cut(tokens, 1);\r\n                const {field, value} = getOption(tokens);\r\n\r\n                const path = field.split('.');\r\n                const lastFieldName = path.pop();\r\n\r\n                let opt = options;\r\n\r\n                for (const p of path) {\r\n                    if (!isPresent(opt[p])) {\r\n                        opt[p] = {};\r\n                    }\r\n                    opt = opt[p] as Options;\r\n                }\r\n\r\n                insertOption(opt, lastFieldName, value);\r\n                break;\r\n            }\r\n\r\n            case ']':\r\n                cut(tokens, 1);\r\n                writeComment(options);\r\n                return options;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                throw new Thrower('inner options', [[`Unexpected token \"${tokens[0]}\"`, 0]]);\r\n        }\r\n    }\r\n\r\n    throw new Thrower('inner options', [['no close tag \"]\"', 0]]);\r\n};\r\n\r\nexport const getOptions = (tokens: string[]) => {\r\n    const {len} = check({tokens, rules: [wrap('option')], type: 'option'});\r\n\r\n    cut(tokens, len);\r\n\r\n    const result = getOption(tokens);\r\n\r\n    cutSemicolon(tokens);\r\n\r\n    return result;\r\n};\r\n\r\nexport const insertOption = (\r\n    result: Options,\r\n    field: string | undefined,\r\n    out: string | boolean | Options | Option[] | undefined,\r\n) => {\r\n    if (!isText(field)) {\r\n        throw new Thrower('insert option', [['No any field name', 0]]);\r\n    }\r\n\r\n    if (isPresent(result[field])) {\r\n        if (Array.isArray(result[field])) {\r\n            if (Array.isArray(out)) {\r\n                result[field] = (result[field] as Option[]).concat(out);\r\n            } else {\r\n                (result[field] as Option[]).push(out);\r\n            }\r\n        } else {\r\n            result[field] = [result[field]];\r\n            (result[field] as Option[]).push(out);\r\n        }\r\n    } else {\r\n        result[field] = out;\r\n    }\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Enum} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {getInnerOptions, getOptions, insertOption} from './options';\r\nimport {writeComment} from './comment';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut, cutSemicolon} from '../_helpers/cut';\r\nimport {isText} from '../validators/isText';\r\nimport {isNumber} from '../validators/isNumber';\r\n\r\nexport const getEnumVal = (tokens: string[]) => {\r\n    const {results} = check({\r\n        type: 'enum value',\r\n        tokens: tokens.slice(0, 4).concat(tokens[tokens.indexOf(';')]),\r\n        rules: [wrap(isText, {result: true}), wrap('='), wrap(isNumber, {result: true}), wrap([';', '[']), wrap([';'])],\r\n    });\r\n\r\n    cut(tokens, 3);\r\n    const options = tokens[0] === '['\r\n        ? getInnerOptions(tokens)\r\n        : {};\r\n    cut(tokens, 1);\r\n\r\n    return {\r\n        name: results[0],\r\n        value: {\r\n            value: Number(results[1]),\r\n            options,\r\n        },\r\n    };\r\n};\r\n\r\nexport const getEnums = (tokens: string[]) => {\r\n    const {results} = check({\r\n        type: 'enum',\r\n        tokens: tokens.slice(0, 3).concat(tokens[tokens.indexOf('}')]),\r\n        rules: [wrap('enum'), wrap(isText, {result: true}), wrap('{'), wrap('}')],\r\n    });\r\n\r\n    const en: Enum = {\r\n        name: results[0],\r\n        values: {},\r\n        options: {},\r\n    };\r\n\r\n    writeComment(en);\r\n\r\n    cut(tokens, 3);\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '}':\r\n                cut(tokens, 1);\r\n                cutSemicolon(tokens);\r\n                writeComment(en);\r\n                return en;\r\n\r\n            case 'option': {\r\n                const {field, value} = getOptions(tokens);\r\n                insertOption(en.options, field, value);\r\n                break;\r\n            }\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default: {\r\n                const {name, value} = getEnumVal(tokens);\r\n                en.values[name] = value;\r\n                writeComment(en.values[name]);\r\n            }\r\n        }\r\n    }\r\n\r\n    throw new Thrower('enum', [['no close tag \"}\"', 0]]);\r\n};\r\n","import {check} from '../_helpers/check';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut} from '../_helpers/cut';\r\nimport {isNumber} from '../validators/isNumber';\r\n\r\nexport const getExtensions = (tokens: string[]) => {\r\n    const {results, len} = check({\r\n        type: 'extensions',\r\n        tokens,\r\n        rules: [\r\n            wrap('extensions'),\r\n            wrap(isNumber, {result: true}),\r\n            wrap('to'),\r\n            wrap(['max', isNumber], {result: true}),\r\n            wrap(';'),\r\n        ],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    const from = Number(results[0]);\r\n    const to = results[1] === 'max'\r\n        ? 0x1fffffff\r\n        : Number(results[1]);\r\n\r\n    return {from, to};\r\n};\r\n","import {cut} from '../_helpers/cut';\r\nimport {isText} from '../validators/isText';\r\n\r\nconst skipComments = (tokens: string[], index: number): number => {\r\n    let i = index;\r\n\r\n    while (i < tokens.length && (tokens[i] === '/*' || tokens[i] === '*/' || tokens[i] === '//')) {\r\n        // Skip comment and the comment content if it's a block comment\r\n        if (tokens[i] === '/*') {\r\n            i++;\r\n            // Skip until we find the closing comment token\r\n            while (i < tokens.length && tokens[i] !== '*/') {\r\n                i++;\r\n            }\r\n            if (i < tokens.length) i++; // Skip the closing '*/' token\r\n        } else if (tokens[i] === '//') {\r\n            i++;\r\n            // Skip until end of line or next token\r\n            while (i < tokens.length && tokens[i] !== '\\n') {\r\n                i++;\r\n            }\r\n            if (i < tokens.length) i++; // Skip the newline\r\n        } else {\r\n            i++; // Skip '*/' token if found directly\r\n        }\r\n    }\r\n\r\n    return i - index; // Return how many tokens we skipped\r\n}\r\n\r\nexport const getMap = (tokens: string[]) => {\r\n    let index = 0;\r\n    let keyType = '';\r\n    let valueType = '';\r\n    let fromComment = '';\r\n    let toComment = '';\r\n    let name = '';\r\n\r\n    // Verify 'map' token\r\n    if (tokens[index] !== 'map') {\r\n        throw new Error(`Expected 'map' but got '${tokens[index]}'`);\r\n    }\r\n    index++;\r\n\r\n    // Skip comments if present\r\n    index += skipComments(tokens, index);\r\n\r\n    // Verify '<' token\r\n    if (tokens[index] !== '<') {\r\n        throw new Error(`Expected '<' but got '${tokens[index]}'`);\r\n    }\r\n    index++;\r\n\r\n    // Skip comments if present\r\n    index += skipComments(tokens, index);\r\n\r\n    // Get key type\r\n    if (!isText(tokens[index])) {\r\n        throw new Error(`Expected key type but got '${tokens[index]}'`);\r\n    }\r\n    keyType = tokens[index];\r\n    index++;\r\n\r\n    // Check for comments after key type and before comma\r\n    if (index < tokens.length && tokens[index] === '/*') {\r\n        index++; // Skip '/*'\r\n        // Collect comment content\r\n        while (index < tokens.length && tokens[index] !== '*/') {\r\n            fromComment += tokens[index];\r\n            index++;\r\n        }\r\n        if (index < tokens.length && tokens[index] === '*/') {\r\n            index++; // Skip '*/'\r\n        }\r\n    }\r\n\r\n    // Verify ',' token\r\n    if (tokens[index] !== ',') {\r\n        throw new Error(`Expected ',' but got '${tokens[index]}'`);\r\n    }\r\n    index++;\r\n\r\n    // Skip regular comments if present\r\n    index += skipComments(tokens, index);\r\n\r\n    // Get value type\r\n    if (!isText(tokens[index])) {\r\n        throw new Error(`Expected value type but got '${tokens[index]}'`);\r\n    }\r\n    valueType = tokens[index];\r\n    index++;\r\n\r\n    // Check for comments after value type and before closing angle bracket\r\n    if (index < tokens.length && tokens[index] === '/*') {\r\n        index++; // Skip '/*'\r\n        // Collect comment content\r\n        while (index < tokens.length && tokens[index] !== '*/') {\r\n            toComment += tokens[index];\r\n            index++;\r\n        }\r\n        if (index < tokens.length && tokens[index] === '*/') {\r\n            index++; // Skip '*/'\r\n        }\r\n    }\r\n\r\n    // Verify '>' token\r\n    if (tokens[index] !== '>') {\r\n        throw new Error(`Expected '>' but got '${tokens[index]}'`);\r\n    }\r\n    index++;\r\n\r\n    // Skip comments if present\r\n    index += skipComments(tokens, index);\r\n\r\n    // Get field name\r\n    if (!isText(tokens[index])) {\r\n        throw new Error(`Expected field name but got '${tokens[index]}'`);\r\n    }\r\n    name = tokens[index];\r\n    index++;\r\n\r\n    // Remove processed tokens\r\n    cut(tokens, index);\r\n\r\n    // Build the return object\r\n    const mapObj: any = {\r\n        from: keyType,\r\n        to: valueType,\r\n    };\r\n    \r\n    // Add comments if they exist\r\n    if (fromComment) {\r\n        mapObj.fromComment = fromComment.trim();\r\n    }\r\n    \r\n    if (toComment) {\r\n        mapObj.toComment = toComment.trim();\r\n    }\r\n\r\n    return {\r\n        type: 'map',\r\n        map: mapObj,\r\n        name,\r\n    };\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Field} from '../types';\r\nimport {getMap} from './map';\r\nimport {getInnerOptions} from './options';\r\nimport {setLastComment, writeComment} from './comment';\r\n\r\nexport const getField = (tokens: string[], empty = false) => {\r\n    const field: Field = {\r\n        name: '',\r\n        type: '',\r\n        tag: -1,\r\n        required: false,\r\n        repeated: false,\r\n        optional: false,\r\n        options: {},\r\n    };\r\n\r\n    setLastComment(field);\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '=':\r\n                tokens.shift();\r\n                field.tag = Number(tokens.shift());\r\n                break;\r\n\r\n            case 'map': {\r\n                const {type, map, name} = getMap(tokens);\r\n                field.type = type;\r\n                field.map = map;\r\n                field.name = name;\r\n                break;\r\n            }\r\n\r\n            case 'repeated':\r\n            case 'required':\r\n            case 'optional': {\r\n                const t = tokens.shift();\r\n                field.required = t === 'required';\r\n                field.repeated = t === 'repeated';\r\n                field.optional = t === 'optional';\r\n                field.type = tokens.shift() as string;\r\n                field.name = tokens.shift() as string;\r\n                writeComment(field);\r\n                break;\r\n            }\r\n\r\n            case '[':\r\n                field.options = getInnerOptions(tokens);\r\n                break;\r\n\r\n            case ';':\r\n                if (field.name === '') {\r\n                    throw new Thrower('field', [['Missing field name', 0]]);\r\n                }\r\n\r\n                if (field.type === '') {\r\n                    throw new Thrower('field', [[`Missing type in message field: ${field.name}`, 0]]);\r\n                }\r\n\r\n                if (field.tag === -1) {\r\n                    throw new Thrower('field', [[`Missing tag number in message field: ${field.name}`, 0]]);\r\n                }\r\n\r\n                tokens.shift();\r\n                return field;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                if (empty) {\r\n                    field.type = tokens.shift() as string;\r\n                    field.name = tokens.shift() as string;\r\n                    writeComment(field);\r\n                } else {\r\n                    throw new Thrower('field', [[`Unexpected token in message field: ${tokens[0]}`, 0]]);\r\n                }\r\n        }\r\n    }\r\n\r\n    throw new Thrower('field', [['No ; found for message field', 0]]);\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Field} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {getField} from './field';\r\nimport {cut} from '../_helpers/cut';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {isText} from '../validators/isText';\r\n\r\nexport const getOneOf = (tokens: string[]) => {\r\n    const fields: Field[] = [];\r\n\r\n    const {len, results} = check({\r\n        type: 'oneof',\r\n        tokens,\r\n        rules: [wrap('oneof'), wrap(isText, {result: true}), wrap('{')],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    const fieldName = results[0];\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '}':\r\n                cut(tokens, 1);\r\n\r\n                return fields;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default: {\r\n                const field = getField(tokens, true);\r\n                field.oneof = fieldName;\r\n                fields.push(field);\r\n            }\r\n        }\r\n    }\r\n\r\n    throw new Thrower('oneof', [['no close tag \"}\"', 0]]);\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Field} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {getField} from './field';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut} from '../_helpers/cut';\r\nimport {isText} from '../validators/isText';\r\n\r\nexport const getAnyOf = (tokens: string[]) => {\r\n    const fields: Field[] = [];\r\n\r\n    const {len, results} = check({\r\n        type: 'anyof',\r\n        tokens,\r\n        rules: [wrap('anyof'), wrap(isText, {result: true}), wrap('{')],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    const fieldName = results[0];\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '}':\r\n                cut(tokens, 1);\r\n\r\n                return fields;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default: {\r\n                const field = getField(tokens, true);\r\n                field.anyof = fieldName;\r\n                fields.push(field);\r\n            }\r\n        }\r\n    }\r\n\r\n    throw new Thrower('anyof', [['no close tag \"}\"', 0]]);\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Reserved} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut, cutStr} from '../_helpers/cut';\r\nimport {isNumber} from '../validators/isNumber';\r\nimport {isText} from '../validators/isText';\r\n\r\nexport const getReservedItem = (tokens: string[]): Reserved => {\r\n    const {results, len, errors} = check({\r\n        tokens,\r\n        rules: [wrap(isNumber, {result: true}), wrap('to'), wrap(['max', isNumber], {result: true})],\r\n    });\r\n\r\n    if (errors.length === 0) {\r\n        cut(tokens, len);\r\n\r\n        const from = Number(results[0]);\r\n        const to = results[1] === 'max'\r\n            ? 0x1fffffff\r\n            : Number(results[1]);\r\n\r\n        return {from, to};\r\n    }\r\n\r\n    const inner = check({\r\n        tokens,\r\n        rules: [wrap([isNumber, isText], {result: true})],\r\n    });\r\n\r\n    if (inner.errors.length === 0) {\r\n        cut(tokens, inner.len);\r\n\r\n        const res = inner.results[0];\r\n        return isNumber(res)\r\n            ? Number(res)\r\n            : cutStr(res);\r\n    }\r\n\r\n    throw new Thrower('reserved', errors.concat(inner.errors));\r\n};\r\n\r\nexport const getReserved = (tokens: string[]): Reserved[] => {\r\n    const reserved: Reserved[] = [];\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case 'reserved':\r\n            case ',':\r\n                cut(tokens, 1);\r\n                reserved.push(getReservedItem(tokens));\r\n                break;\r\n\r\n            case ';':\r\n                cut(tokens, 1);\r\n                return reserved;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                throw new Thrower('reserved', [[`Unexpected token \"${tokens[0]}\"`, 0]]);\r\n        }\r\n    }\r\n\r\n    throw new Thrower('reserved', [['no close tag \";\"', 0]]);\r\n};\r\n","export function isObject(value: unknown): value is Record<string, unknown> {\r\n    return value !== null && typeof value === 'object';\r\n}\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Message} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {getEnums} from './enums';\r\nimport {getExtensions} from './extensions';\r\nimport {getField} from './field';\r\nimport {getOneOf} from './oneof';\r\nimport {getAnyOf} from './anyof';\r\nimport {getOptions, insertOption} from './options';\r\nimport {getReserved} from './reserved';\r\nimport {writeComment} from './comment';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut} from '../_helpers/cut';\r\nimport {isText} from '../validators/isText';\r\nimport {isNumber} from '../validators/isNumber';\r\nimport {isObject} from '../_typeguards/isObject';\r\n\r\nexport const getExtend = (tokens: string[]) => {\r\n    return {\r\n        name: tokens[1],\r\n        message: getMessage(tokens),\r\n    };\r\n};\r\n\r\nexport const getMessageBody = (tokens: string[], name: string) => {\r\n    const message: Message = {\r\n        name,\r\n        enums: [],\r\n        options: {},\r\n        messages: [],\r\n        fields: [],\r\n        extends: [],\r\n        extensions: [],\r\n        reserved: [],\r\n    };\r\n\r\n    writeComment(message);\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '}':\r\n                tokens.shift();\r\n                writeComment(message);\r\n                CheckReserved(message);\r\n                return message;\r\n\r\n            case 'map':\r\n            case 'repeated':\r\n            case 'optional':\r\n            case 'required':\r\n                message.fields.push(getField(tokens));\r\n                break;\r\n\r\n            case 'enum':\r\n                message.enums.push(getEnums(tokens));\r\n                break;\r\n\r\n            case 'message':\r\n                message.messages.push(getMessage(tokens));\r\n                break;\r\n\r\n            case 'extensions':\r\n                message.extensions.push(getExtensions(tokens));\r\n                break;\r\n\r\n            case 'oneof':\r\n                message.fields = message.fields.concat(getOneOf(tokens));\r\n                break;\r\n\r\n            case 'anyof':\r\n                message.fields = message.fields.concat(getAnyOf(tokens));\r\n                break;\r\n\r\n            case 'extend':\r\n                message.extends.push(getExtend(tokens));\r\n                break;\r\n\r\n            case ';':\r\n                tokens.shift();\r\n                break;\r\n\r\n            case 'reserved':\r\n                message.reserved.push(getReserved(tokens));\r\n                break;\r\n\r\n            case 'option': {\r\n                const {field, value} = getOptions(tokens);\r\n                insertOption(message.options, field, value);\r\n                break;\r\n            }\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                message.fields.push(getField(tokens, true));\r\n        }\r\n    }\r\n\r\n    throw new Thrower('message', [['no close tag \"}\"', 0]]);\r\n};\r\n\r\nconst CheckReserved = (message: Message) => {\r\n    for (const reserved of message.reserved) {\r\n        for (const reserve of reserved) {\r\n            for (const field of message.fields) {\r\n                if (isText(reserve) && reserve === field.name) {\r\n                    throw new Thrower('reserved', [[`Field name \"${field.name}\" in message \"${message.name}\" is reserved`, 0]]);\r\n                } else if (isNumber(reserve) && reserve === field.tag) {\r\n                    throw new Thrower('reserved', [\r\n                        [`Field \"${field.name}\" in message \"${message.name}\" with tag \"${field.tag}\" is reserved`, 0],\r\n                    ]);\r\n                } else if (isObject(reserve) && reserve.from <= field.tag && field.tag <= reserve.to) {\r\n                    throw new Thrower('reserved', [\r\n                        [\r\n                            // eslint-disable-next-line max-len\r\n                            `Field \"${field.name}\" with tag \"${field.tag}\" in message \"${message.name}\" is reserved between ${reserve.from} to ${reserve.to}`,\r\n                            0,\r\n                        ],\r\n                    ]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nexport const getMessage = (tokens: string[]) => {\r\n    const {len} = check({\r\n        type: 'message',\r\n        tokens: [tokens[0], tokens[1], tokens[2], tokens[tokens.indexOf('}')]],\r\n        rules: [wrap(['extend', 'message']), wrap(isText), wrap('{'), wrap('}')],\r\n    });\r\n\r\n    const [, messageName] = cut(tokens, len - 1);\r\n\r\n    return getMessageBody(tokens, messageName);\r\n};\r\n","import {check} from '../_helpers/check';\r\nimport {isStr} from '../validators/isStr';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut, cutStr} from '../_helpers/cut';\r\n\r\nexport const getImport = (tokens: string[]) => {\r\n    const {len, results} = check({\r\n        type: 'import',\r\n        tokens,\r\n        rules: [wrap('import'), wrap(isStr, {result: true}), wrap(';')],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    return cutStr(results[0]);\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Method} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {getOptions, insertOption} from './options';\r\nimport {setLastComment, writeComment} from './comment';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {cut, cutSemicolon} from '../_helpers/cut';\r\nimport {isText} from '../validators/isText';\r\n\r\nexport const getRPC = (tokens: string[]) => {\r\n    const {results, len} = check({\r\n        type: 'rpc',\r\n        tokens,\r\n        rules: [\r\n            wrap('rpc'),\r\n            wrap(isText, {result: true}),\r\n            wrap('('),\r\n            wrap('stream', {ignore: true, result: true}),\r\n            wrap(isText, {result: true}),\r\n            wrap(')'),\r\n            wrap('returns'),\r\n            wrap('('),\r\n            wrap('stream', {ignore: true, result: true}),\r\n            wrap(isText, {result: true}),\r\n            wrap(')'),\r\n        ],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    const rpc: Method = {\r\n        name: results[0],\r\n        inputType: results[2],\r\n        outputType: results[4],\r\n        clientStreaming: results[1] === 'stream',\r\n        serverStreaming: results[3] === 'stream',\r\n        options: {},\r\n    };\r\n\r\n    setLastComment(rpc);\r\n\r\n    if (tokens[0] === ';') {\r\n        tokens.shift();\r\n        return rpc;\r\n    }\r\n\r\n    check({\r\n        type: 'rpc',\r\n        tokens: [tokens[0], tokens[tokens.indexOf('}')]],\r\n        rules: [wrap('{'), wrap('}')],\r\n    });\r\n\r\n    tokens.shift();\r\n\r\n    while (tokens.length > 0) {\r\n        switch (getNextToken(tokens)) {\r\n            case '}':\r\n                cut(tokens, 1);\r\n                cutSemicolon(tokens);\r\n                writeComment(rpc);\r\n                return rpc;\r\n\r\n            case 'option': {\r\n                const {field, value} = getOptions(tokens);\r\n                insertOption(rpc.options, field, value);\r\n                break;\r\n            }\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                throw new Thrower('rpc', [[`Unexpected token \"${tokens[0]}\"`, 0]]);\r\n        }\r\n    }\r\n\r\n    throw new Thrower('rpc', [['no close tag \"}\"', 0]]);\r\n};\r\n","import {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {Service} from '../types';\r\nimport {check} from '../_helpers/check';\r\nimport {getOptions, insertOption} from './options';\r\nimport {getRPC} from './rpc';\r\nimport {setLastComment, writeComment} from './comment';\r\nimport {cut, cutSemicolon} from '../_helpers/cut';\r\nimport {wrap} from '../_helpers/wrap';\r\nimport {isText} from '../validators/isText';\r\n\r\nexport const getService = (tokens: string[]) => {\r\n    const {results, len} = check({\r\n        type: 'service',\r\n        tokens,\r\n        rules: [wrap('service'), wrap(isText, {result: true}), wrap('{')],\r\n    });\r\n\r\n    cut(tokens, len);\r\n\r\n    const service: Service = {\r\n        name: results[0],\r\n        methods: [],\r\n        options: {},\r\n    };\r\n\r\n    setLastComment(service);\r\n\r\n    while (tokens.length > 0) {\r\n        if (tokens[0] === '}') {\r\n            tokens.shift();\r\n            cutSemicolon(tokens);\r\n            writeComment(service);\r\n            return service;\r\n        }\r\n\r\n        switch (getNextToken(tokens)) {\r\n            case 'option': {\r\n                const {field, value} = getOptions(tokens);\r\n                insertOption(service.options, field, value);\r\n                break;\r\n            }\r\n\r\n            case 'rpc':\r\n                service.methods.push(getRPC(tokens));\r\n                break;\r\n\r\n            case undefined:\r\n                continue;\r\n\r\n            default:\r\n                throw new Thrower('rpc', [[`Unexpected token in service: ${tokens[0]}`, 0]]);\r\n        }\r\n    }\r\n\r\n    throw new Thrower('rpc', [['no close tag \"}\"', 0]]);\r\n};\r\n","import {Schema} from '../types';\r\nimport {getNextToken} from '../_helpers/getNextToken';\r\nimport {Thrower} from '../_helpers/thrower';\r\nimport {getSyntax} from './syntax';\r\nimport {getPackage} from './package';\r\nimport {getMessage, getExtend} from './message';\r\nimport {getImport} from './import';\r\nimport {getEnums} from './enums';\r\nimport {getOptions, insertOption} from './options';\r\nimport {getService} from './service';\r\nimport {cleanComment, setLastComment, getComment} from './comment';\r\n\r\nexport const getSchema = (tokens: string[]) => {\r\n    const schema: Schema = {\r\n        syntax: 3,\r\n        imports: [],\r\n        enums: [],\r\n        messages: [],\r\n        options: {},\r\n        extends: [],\r\n        services: [],\r\n    };\r\n\r\n    cleanComment();\r\n    setLastComment(schema);\r\n\r\n    let first = true;\r\n\r\n    while (tokens.length > 0) {\r\n        const token = getNextToken(tokens);\r\n\r\n        switch (token) {\r\n            case 'syntax':\r\n                if (!first) {\r\n                    throw new Thrower('syntax', [['must be on first line', 0]]);\r\n                }\r\n                schema.syntax = getSyntax(tokens);\r\n                break;\r\n\r\n            case 'package':\r\n                schema.package = getPackage(tokens);\r\n                break;\r\n\r\n            case 'message':\r\n                schema.messages.push(getMessage(tokens));\r\n                break;\r\n\r\n            case 'import':\r\n                schema.imports.push(getImport(tokens));\r\n                break;\r\n\r\n            case 'enum':\r\n                schema.enums.push(getEnums(tokens));\r\n                break;\r\n\r\n            case 'option': {\r\n                const {field, value} = getOptions(tokens);\r\n                insertOption(schema.options, field, value);\r\n                break;\r\n            }\r\n\r\n            case 'extend':\r\n                schema.extends.push(getExtend(tokens));\r\n                break;\r\n\r\n            case 'service':\r\n                schema.services.push(getService(tokens));\r\n                break;\r\n\r\n            default: {\r\n                const comment = getComment();\r\n\r\n                if (!comment) {\r\n                    throw new Thrower('common', [[`Unexpected token: ${tokens[0]}`, 0]]);\r\n                }\r\n            }\r\n        }\r\n        first = false;\r\n    }\r\n\r\n    extendSchema(schema);\r\n\r\n    return schema;\r\n};\r\n\r\nconst extendSchema = (schema: Schema) => {\r\n    for (const ext of schema.extends) {\r\n        for (const msg of schema.messages) {\r\n            if (msg.name === ext.name) {\r\n                if (msg.extensions.length === 0) {\r\n                    throw new Thrower('extends', [[`${msg.name} does not have extensions`, 0]]);\r\n                }\r\n\r\n                for (const field of ext.message.fields) {\r\n                    for (const extension of msg.extensions) {\r\n                        if (field.tag < extension.from || field.tag > extension.to) {\r\n                            throw new Thrower('extends', [[`${msg.name} does not declare ${field.tag} as an extension number`, 0]]);\r\n                        }\r\n                        msg.fields.push(field);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n","import {Thrower} from './_helpers/thrower';\r\nimport {getSchema} from './tokens/schema';\r\nimport {tokenize} from '@veksa/protobuf-tokenizer';\r\n\r\nexport const parse = (buf: string | Buffer) => {\r\n    const {tokens, lines, columns} = tokenize(buf);\r\n\r\n    try {\r\n        return getSchema(tokens);\r\n    } catch (e) {\r\n        if (e instanceof Thrower) {\r\n            e.addRange(tokens);\r\n            e.addLine(lines[lines.length - tokens.length]);\r\n            e.addColumn(columns[lines.length - tokens.length + e.message[0][1]]);\r\n        }\r\n        throw e;\r\n    }\r\n};\r\n"],"mappings":"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","names":["src_exports","__export","parse","__toCommonJS","Thrower","name","message","num","range","isText","value","comment","lastComment","writeComment","com","co","isText","getComment","setComment","nextComment","cleanComment","getLastComment","setLastComment","cut","arr","count","cutStr","str","cutSemicolon","tokens","isPresent","value","getNextToken","tokens","comments","cut","comment","getComment","nextComment","setComment","commentsMulti","commentInline","lastComment","getLastComment","isPresent","isString","value","check","config","type","rules","tokens","errors","results","range","len","i","rule","val","index","token","valid","validator","item","isString","Thrower","wrap","rule","config","isProto","str","s","cutStr","getSyntax","tokens","range","len","check","wrap","isProto","cut","cutStr","import_protobuf_tokenizer","isText","str","getPackage","tokens","len","results","check","wrap","isText","cut","isNumber","str","isStr","str","isText","getValue","value","isNumber","isStr","cutStr","getOptionValue","tokens","result","field","getNextToken","cut","insertOption","getOptionArray","Thrower","options","getOption","len","results","check","wrap","isText","getInnerOptions","setLastComment","path","lastFieldName","opt","p","isPresent","writeComment","getOptions","cutSemicolon","out","getEnumVal","tokens","results","check","wrap","isText","isNumber","cut","options","getInnerOptions","getEnums","en","writeComment","getNextToken","cutSemicolon","field","value","getOptions","insertOption","name","Thrower","getExtensions","tokens","results","len","check","wrap","isNumber","cut","from","to","skipComments","tokens","index","i","getMap","keyType","valueType","fromComment","toComment","name","isText","cut","mapObj","getField","tokens","empty","field","setLastComment","getNextToken","type","map","name","getMap","t","writeComment","getInnerOptions","Thrower","getOneOf","tokens","fields","len","results","check","wrap","isText","cut","fieldName","getNextToken","field","getField","Thrower","getAnyOf","tokens","fields","len","results","check","wrap","isText","cut","fieldName","getNextToken","field","getField","Thrower","getReservedItem","tokens","results","len","errors","check","wrap","isNumber","cut","from","to","inner","isText","res","cutStr","Thrower","getReserved","reserved","getNextToken","isObject","value","getExtend","tokens","getMessage","getMessageBody","name","message","writeComment","getNextToken","CheckReserved","getField","getEnums","getExtensions","getOneOf","getAnyOf","getReserved","field","value","getOptions","insertOption","Thrower","reserved","reserve","isText","isNumber","isObject","len","check","wrap","messageName","cut","getImport","tokens","len","results","check","wrap","isStr","cut","cutStr","getRPC","tokens","results","len","check","wrap","isText","cut","rpc","setLastComment","getNextToken","cutSemicolon","writeComment","field","value","getOptions","insertOption","Thrower","getService","tokens","results","len","check","wrap","isText","cut","service","setLastComment","cutSemicolon","writeComment","getNextToken","field","value","getOptions","insertOption","getRPC","Thrower","getSchema","tokens","schema","cleanComment","setLastComment","first","getNextToken","Thrower","getSyntax","getPackage","getMessage","getImport","getEnums","field","value","getOptions","insertOption","getExtend","getService","getComment","extendSchema","ext","msg","extension","import_protobuf_tokenizer","parse","buf","tokens","lines","columns","getSchema","e","Thrower"]}