release: WRNexusJS 0.2.77

This commit is contained in:
2026-07-22 01:26:10 +05:30
parent 569365143b
commit 7ff5b3e8c5
95 changed files with 1077 additions and 177 deletions
+66 -1
View File
@@ -173,6 +173,71 @@ class Lexer {
v += src[this.pos++];
return v.trim();
}
readPropInitializer() {
const { src } = this;
let value = "";
let square = 0;
let brace = 0;
let paren = 0;
let quote = null;
const beginsPropDeclaration = (position) => {
let cursor = position;
while (cursor < src.length && (src[cursor] === " " || src[cursor] === "\t"))
cursor++;
if (!isIdentStart(src[cursor] ?? ""))
return false;
cursor++;
while (cursor < src.length && isIdentPart(src[cursor]))
cursor++;
while (cursor < src.length && (src[cursor] === " " || src[cursor] === "\t"))
cursor++;
return src[cursor] === "=" || src[cursor] === ":";
};
while (this.pos < src.length) {
const c = src[this.pos];
if (quote) {
value += c;
this.pos++;
if (c === "\\" && this.pos < src.length)
value += src[this.pos++];
else if (c === quote)
quote = null;
continue;
}
if (c === '"' || c === "'" || c === "`") {
quote = c;
value += c;
this.pos++;
continue;
}
if (c === "[")
square++;
else if (c === "]" && square > 0)
square--;
else if (c === "{")
brace++;
else if (c === "}" && brace > 0)
brace--;
else if (c === "(")
paren++;
else if (c === ")" && paren > 0)
paren--;
const topLevel = square === 0 && brace === 0 && paren === 0;
if (topLevel) {
if (c === `
` || c === "\r" || c === "}")
break;
if ((c === " " || c === "\t") && beginsPropDeclaration(this.pos))
break;
}
value += c;
this.pos++;
}
const result = value.trim();
if (!result)
throw new LexError(`Expected a prop initializer at offset ${this.pos}`);
return result;
}
readTypeAnnotation() {
const { src } = this;
let value = "";
@@ -471,7 +536,7 @@ function parse(source) {
expect("eq");
hasDefault = true;
}
const defaultValue = hasDefault ? lx.readToLineEnd() : "undefined";
const defaultValue = hasDefault ? lx.readPropInitializer() : "undefined";
props.push({ name: pName, valueType, required: !hasDefault, default: defaultValue });
}
expect("rbrace");