Add associative map constraints and range refinement

This commit is contained in:
2026-08-14 06:26:15 +09:00
parent 8198b615a8
commit cc6ab40807
52 changed files with 8951 additions and 6918 deletions
@@ -15,6 +15,13 @@ test('injects one JavaScript host environment into evaluation and completion', a
globals: {
App: {
enabled: { $decodal: 'Bool', default: true },
Services: {
$decodal: 'Map',
value: {
port: { $decodal: 'Int' },
active: { $decodal: 'Bool', default: true },
},
},
},
},
loadImport(_currentKey, specifier) {
@@ -39,10 +46,11 @@ test('injects one JavaScript host environment into evaluation and completion', a
const evaluated = JSON.parse(service.evaluate(
'main.dcdl',
'main.dcdl',
'let s = import "./schema.dcdl"; in { server = s.Server & { port = 8080; }; enabled = App.enabled; post = import "./post.md"; }',
'let s = import "./schema.dcdl"; in { server = { port = 8080; } as s.Server; services = { api = { port = 8081; }; } as App.Services; enabled = App.enabled; post = import "./post.md" as { frontmatter = { draft = Bool; }; body = String; }; }',
));
assert.equal(evaluated.ok, true, evaluated.error);
assert.match(evaluated.output, /"port": 8080/);
assert.match(evaluated.output, /"active": true/);
assert.match(evaluated.output, /"body": "# Hello"/);
const member = JSON.parse(service.complete('main.dcdl', 'App.en', 6, false));