123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- "use strict";
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
-
- const util_1 = require("../../util.cjs");
-
- const isQuoted = s => s && s.startsWith('"') && s.endsWith('"');
- /**
- * Splits remaining `spec.lines[].tokens.description` into `name` and `descriptions` tokens,
- * and populates the `spec.name`
- */
-
-
- function nameTokenizer() {
- const typeEnd = (num, {
- tokens
- }, i) => tokens.type === '' ? num : i;
-
- return spec => {
- // look for the name in the line where {type} ends
- const {
- tokens
- } = spec.source[spec.source.reduce(typeEnd, 0)];
- const source = tokens.description.trimLeft();
- const quotedGroups = source.split('"'); // if it starts with quoted group, assume it is a literal
-
- if (quotedGroups.length > 1 && quotedGroups[0] === '' && quotedGroups.length % 2 === 1) {
- spec.name = quotedGroups[1];
- tokens.name = `"${quotedGroups[1]}"`;
- [tokens.postName, tokens.description] = util_1.splitSpace(source.slice(tokens.name.length));
- return spec;
- }
-
- let brackets = 0;
- let name = '';
- let optional = false;
- let defaultValue; // assume name is non-space string or anything wrapped into brackets
-
- for (const ch of source) {
- if (brackets === 0 && util_1.isSpace(ch)) break;
- if (ch === '[') brackets++;
- if (ch === ']') brackets--;
- name += ch;
- }
-
- if (brackets !== 0) {
- spec.problems.push({
- code: 'spec:name:unpaired-brackets',
- message: 'unpaired brackets',
- line: spec.source[0].number,
- critical: true
- });
- return spec;
- }
-
- const nameToken = name;
-
- if (name[0] === '[' && name[name.length - 1] === ']') {
- optional = true;
- name = name.slice(1, -1);
- const parts = name.split('=');
- name = parts[0].trim();
- if (parts[1] !== undefined) defaultValue = parts.slice(1).join('=').trim();
-
- if (name === '') {
- spec.problems.push({
- code: 'spec:name:empty-name',
- message: 'empty name',
- line: spec.source[0].number,
- critical: true
- });
- return spec;
- }
-
- if (defaultValue === '') {
- spec.problems.push({
- code: 'spec:name:empty-default',
- message: 'empty default value',
- line: spec.source[0].number,
- critical: true
- });
- return spec;
- } // has "=" and is not a string, except for "=>"
-
-
- if (!isQuoted(defaultValue) && /=(?!>)/.test(defaultValue)) {
- spec.problems.push({
- code: 'spec:name:invalid-default',
- message: 'invalid default value syntax',
- line: spec.source[0].number,
- critical: true
- });
- return spec;
- }
- }
-
- spec.optional = optional;
- spec.name = name;
- tokens.name = nameToken;
- if (defaultValue !== undefined) spec.default = defaultValue;
- [tokens.postName, tokens.description] = util_1.splitSpace(source.slice(tokens.name.length));
- return spec;
- };
- }
-
- exports.default = nameTokenizer;
- //# sourceMappingURL=name.cjs.map
|