From 4e841be4f02a614d5f6d18c25a8f99cf83e460b4 Mon Sep 17 00:00:00 2001 From: hyper Date: Tue, 31 Mar 2026 16:45:38 +0800 Subject: [PATCH] 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 --- dist/csv-loader/loader.js | 8 +++++--- dist/csv-loader/loader.mjs | 8 +++++--- dist/index.js | 8 +++++--- dist/index.mjs | 8 +++++--- src/validator.ts | 10 +++++++--- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/dist/csv-loader/loader.js b/dist/csv-loader/loader.js index 65405cc..22e85f5 100644 --- a/dist/csv-loader/loader.js +++ b/dist/csv-loader/loader.js @@ -295,10 +295,12 @@ var ValueParser = class { const elementSchema = schema.elements[i]; if (elementSchema.name) { this.skipWhitespace(); - if (!this.consumeStr(`${elementSchema.name}:`)) { - throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); + const savedPos = this.pos; + if (this.consumeStr(`${elementSchema.name}:`)) { + this.skipWhitespace(); + } else { + this.pos = savedPos; } - this.skipWhitespace(); } result.push(this.parseValue(elementSchema.schema, false)); this.skipWhitespace(); diff --git a/dist/csv-loader/loader.mjs b/dist/csv-loader/loader.mjs index 829d3c2..f28767c 100644 --- a/dist/csv-loader/loader.mjs +++ b/dist/csv-loader/loader.mjs @@ -261,10 +261,12 @@ var ValueParser = class { const elementSchema = schema.elements[i]; if (elementSchema.name) { this.skipWhitespace(); - if (!this.consumeStr(`${elementSchema.name}:`)) { - throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); + const savedPos = this.pos; + if (this.consumeStr(`${elementSchema.name}:`)) { + this.skipWhitespace(); + } else { + this.pos = savedPos; } - this.skipWhitespace(); } result.push(this.parseValue(elementSchema.schema, false)); this.skipWhitespace(); diff --git a/dist/index.js b/dist/index.js index 1a1cd39..6905d8c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -288,10 +288,12 @@ var ValueParser = class { const elementSchema = schema.elements[i]; if (elementSchema.name) { this.skipWhitespace(); - if (!this.consumeStr(`${elementSchema.name}:`)) { - throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); + const savedPos = this.pos; + if (this.consumeStr(`${elementSchema.name}:`)) { + this.skipWhitespace(); + } else { + this.pos = savedPos; } - this.skipWhitespace(); } result.push(this.parseValue(elementSchema.schema, false)); this.skipWhitespace(); diff --git a/dist/index.mjs b/dist/index.mjs index 5af0dd2..19bc3de 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -258,10 +258,12 @@ var ValueParser = class { const elementSchema = schema.elements[i]; if (elementSchema.name) { this.skipWhitespace(); - if (!this.consumeStr(`${elementSchema.name}:`)) { - throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); + const savedPos = this.pos; + if (this.consumeStr(`${elementSchema.name}:`)) { + this.skipWhitespace(); + } else { + this.pos = savedPos; } - this.skipWhitespace(); } result.push(this.parseValue(elementSchema.schema, false)); this.skipWhitespace(); diff --git a/src/validator.ts b/src/validator.ts index 24f9de4..6be26fc 100644 --- a/src/validator.ts +++ b/src/validator.ts @@ -116,12 +116,16 @@ class ValueParser { this.skipWhitespace(); const elementSchema = schema.elements[i]; + // Try to consume optional name prefix (e.g., "current:") if (elementSchema.name) { this.skipWhitespace(); - if (!this.consumeStr(`${elementSchema.name}:`)) { - throw new ParseError(`Expected ${elementSchema.name}:`, this.pos); + const savedPos = this.pos; + if (this.consumeStr(`${elementSchema.name}:`)) { + this.skipWhitespace(); + } else { + // Name not found, reset position and continue without name + this.pos = savedPos; } - this.skipWhitespace(); } result.push(this.parseValue(elementSchema.schema, false));