comment-parser
Version:
Generic JSDoc-like comment parser
1 lines • 5.33 kB
Source Map (JSON)
{"version":3,"sources":["type.js"],"names":["Object","defineProperty","exports","value","util_js_1","require","typeTokenizer","spacing","join","getJoiner","spec","curlies","lines","i","tokens","source","entries","type","description","ch","push","problems","code","message","line","number","critical","parts","offset","postDelimiter","length","slice","postType","splitSpace","default","trim","x","t","map"],"mappings":"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","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_js_1 = require(\"../../util.js\");\n/**\n * Sets splits remaining `Spec.lines[].tokes.description` into `type` and `description`\n * tokens and populates Spec.type`\n *\n * @param {Spacing} spacing tells how to deal with a whitespace\n * for type values going over multiple lines\n */\nfunction typeTokenizer(spacing = 'compact') {\n const join = getJoiner(spacing);\n return (spec) => {\n let curlies = 0;\n let lines = [];\n for (const [i, { tokens }] of spec.source.entries()) {\n let type = '';\n if (i === 0 && tokens.description[0] !== '{')\n return spec;\n for (const ch of tokens.description) {\n if (ch === '{')\n curlies++;\n if (ch === '}')\n curlies--;\n type += ch;\n if (curlies === 0)\n break;\n }\n lines.push([tokens, type]);\n if (curlies === 0)\n break;\n }\n if (curlies !== 0) {\n spec.problems.push({\n code: 'spec:type:unpaired-curlies',\n message: 'unpaired curlies',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n const parts = [];\n const offset = lines[0][0].postDelimiter.length;\n for (const [i, [tokens, type]] of lines.entries()) {\n tokens.type = type;\n if (i > 0) {\n tokens.type = tokens.postDelimiter.slice(offset) + type;\n tokens.postDelimiter = tokens.postDelimiter.slice(0, offset);\n }\n [tokens.postType, tokens.description] = (0, util_js_1.splitSpace)(tokens.description.slice(type.length));\n parts.push(tokens.type);\n }\n parts[0] = parts[0].slice(1);\n parts[parts.length - 1] = parts[parts.length - 1].slice(0, -1);\n spec.type = join(parts);\n return spec;\n };\n}\nexports.default = typeTokenizer;\nconst trim = (x) => x.trim();\nfunction getJoiner(spacing) {\n if (spacing === 'compact')\n return (t) => t.map(trim).join('');\n else if (spacing === 'preserve')\n return (t) => t.join('\\n');\n else\n return spacing;\n}\n"],"file":"type.cjs"}