fix: make named member prefix optional in tuple values

- Allow parsing tuple values with or without name prefixes
- Supports both [x: 10; y: 20] and [10; 20] formats
- Useful for CSV data where names are schema-only metadata

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
hyper 2026-03-31 16:45:38 +08:00
parent 9adce3d45e
commit 4e841be4f0
5 changed files with 27 additions and 15 deletions

View File

@ -295,10 +295,12 @@ var ValueParser = class {
const elementSchema = schema.elements[i]; const elementSchema = schema.elements[i];
if (elementSchema.name) { if (elementSchema.name) {
this.skipWhitespace(); this.skipWhitespace();
if (!this.consumeStr(`${elementSchema.name}:`)) { const savedPos = this.pos;
throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); if (this.consumeStr(`${elementSchema.name}:`)) {
}
this.skipWhitespace(); this.skipWhitespace();
} else {
this.pos = savedPos;
}
} }
result.push(this.parseValue(elementSchema.schema, false)); result.push(this.parseValue(elementSchema.schema, false));
this.skipWhitespace(); this.skipWhitespace();

View File

@ -261,10 +261,12 @@ var ValueParser = class {
const elementSchema = schema.elements[i]; const elementSchema = schema.elements[i];
if (elementSchema.name) { if (elementSchema.name) {
this.skipWhitespace(); this.skipWhitespace();
if (!this.consumeStr(`${elementSchema.name}:`)) { const savedPos = this.pos;
throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); if (this.consumeStr(`${elementSchema.name}:`)) {
}
this.skipWhitespace(); this.skipWhitespace();
} else {
this.pos = savedPos;
}
} }
result.push(this.parseValue(elementSchema.schema, false)); result.push(this.parseValue(elementSchema.schema, false));
this.skipWhitespace(); this.skipWhitespace();

8
dist/index.js vendored
View File

@ -288,10 +288,12 @@ var ValueParser = class {
const elementSchema = schema.elements[i]; const elementSchema = schema.elements[i];
if (elementSchema.name) { if (elementSchema.name) {
this.skipWhitespace(); this.skipWhitespace();
if (!this.consumeStr(`${elementSchema.name}:`)) { const savedPos = this.pos;
throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); if (this.consumeStr(`${elementSchema.name}:`)) {
}
this.skipWhitespace(); this.skipWhitespace();
} else {
this.pos = savedPos;
}
} }
result.push(this.parseValue(elementSchema.schema, false)); result.push(this.parseValue(elementSchema.schema, false));
this.skipWhitespace(); this.skipWhitespace();

8
dist/index.mjs vendored
View File

@ -258,10 +258,12 @@ var ValueParser = class {
const elementSchema = schema.elements[i]; const elementSchema = schema.elements[i];
if (elementSchema.name) { if (elementSchema.name) {
this.skipWhitespace(); this.skipWhitespace();
if (!this.consumeStr(`${elementSchema.name}:`)) { const savedPos = this.pos;
throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); if (this.consumeStr(`${elementSchema.name}:`)) {
}
this.skipWhitespace(); this.skipWhitespace();
} else {
this.pos = savedPos;
}
} }
result.push(this.parseValue(elementSchema.schema, false)); result.push(this.parseValue(elementSchema.schema, false));
this.skipWhitespace(); this.skipWhitespace();

View File

@ -116,12 +116,16 @@ class ValueParser {
this.skipWhitespace(); this.skipWhitespace();
const elementSchema = schema.elements[i]; const elementSchema = schema.elements[i];
// Try to consume optional name prefix (e.g., "current:")
if (elementSchema.name) { if (elementSchema.name) {
this.skipWhitespace(); this.skipWhitespace();
if (!this.consumeStr(`${elementSchema.name}:`)) { const savedPos = this.pos;
throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); if (this.consumeStr(`${elementSchema.name}:`)) {
}
this.skipWhitespace(); this.skipWhitespace();
} else {
// Name not found, reset position and continue without name
this.pos = savedPos;
}
} }
result.push(this.parseValue(elementSchema.schema, false)); result.push(this.parseValue(elementSchema.schema, false));