mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-06 03:14:00 +00:00
fix(tools): enforce string schema lengths by Unicode code point
This commit is contained in:
1 parent
6dd4d0156f
commit
2c5fb039ce
4 files changed
+30
-2
No files matched your search
@@ -15,6 +15,8 @@
|
|||||||
the five borough cores load and `CCTV_NYC_MAX_SOURCES` changes the cap. The catalog-wide ceiling is
|
the five borough cores load and `CCTV_NYC_MAX_SOURCES` changes the cap. The catalog-wide ceiling is
|
||||||
unchanged; extra cameras share it round-robin with the other packs.
|
unchanged; extra cameras share it round-robin with the other packs.
|
||||||
|
|
||||||
|
- Tool string length validation counts Unicode characters correctly, including characters outside the basic multilingual plane.
|
||||||
|
|
||||||
- Treat explicitly current, complete empty vessel coverage as a successful update,
|
- Treat explicitly current, complete empty vessel coverage as a successful update,
|
||||||
clearing obsolete contacts while retaining stale or incomplete snapshots.
|
clearing obsolete contacts while retaining stale or incomplete snapshots.
|
||||||
|
|
||||||
|
|||||||
@@ -5310,3 +5310,8 @@ datacenters, dams and the Nepal locator retain that shared credit while displaye
|
|||||||
|
|
||||||
Military fragments stitch by source identity. Different mapped parcels merge only
|
Military fragments stitch by source identity. Different mapped parcels merge only
|
||||||
when their footprints touch or contain one another, never across a seam tolerance gap.
|
when their footprints touch or contain one another, never across a seam tolerance gap.
|
||||||
|
|
||||||
|
|
||||||
|
### fix(tools): enforce string schema lengths by Unicode code point
|
||||||
|
|
||||||
|
Count code points for minLength and maxLength, preserving ASCII behavior and regular-expression validation.
|
||||||
+3
-2
@@ -106,9 +106,10 @@ export function validateValue(schema, value, path = 'arguments') {
|
|||||||
fail('must be a string');
|
fail('must be a string');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (schema.minLength != null && value.length < schema.minLength)
|
const length = [...value].length;
|
||||||
|
if (schema.minLength != null && length < schema.minLength)
|
||||||
fail(`must be at least ${schema.minLength} characters`);
|
fail(`must be at least ${schema.minLength} characters`);
|
||||||
if (schema.maxLength != null && value.length > schema.maxLength)
|
if (schema.maxLength != null && length > schema.maxLength)
|
||||||
fail(`must be at most ${schema.maxLength} characters`);
|
fail(`must be at most ${schema.maxLength} characters`);
|
||||||
if (
|
if (
|
||||||
schema.pattern !== undefined &&
|
schema.pattern !== undefined &&
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import test from 'node:test';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import { validateValue } from './schema.js';
|
||||||
|
test('tool string schemas count Unicode characters rather than UTF-16 units', () => {
|
||||||
|
const value = '𠮷野家😀';
|
||||||
|
assert.deepEqual(validateValue({ type: 'string', maxLength: 4 }, value), []);
|
||||||
|
assert.equal(
|
||||||
|
validateValue({ type: 'string', minLength: 5 }, value).length,
|
||||||
|
1,
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
validateValue({ type: 'string', maxLength: 3 }, value).length,
|
||||||
|
1,
|
||||||
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
validateValue({ type: 'string', minLength: 4, maxLength: 4 }, 'abcd'),
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
assert.equal(validateValue({ type: 'string', minLength: 2 }, '𠮷').length, 1);
|
||||||
|
});
|
||||||
Reference in new issue
Block a user