File size: 1,953 Bytes
0ade7b1 794b22f 0ade7b1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #!/usr/bin/env node
// Reproduces every compiler-level claim from the external agent review (0.7.2 cycle).
import { parse } from '../public/dssl/parser.js';
import { resolve } from '../public/dssl/resolver.js';
let fails = 0;
function show(name, source, opts = {}) {
const { ast } = parse(source, 'repro.dssl');
const out = resolve(ast, 'repro.dssl', {});
console.log('== ' + name);
if (out.errors?.length) console.log(' ERRORS:', out.errors.map(e => e.message || e).join(' | '));
if (out.warnings?.length) console.log(' WARNINGS:', out.warnings.map(e => e.message || e).join(' | '));
for (const r of (out.rules || [])) {
console.log(' rule:', r.selector, JSON.stringify(r.decls || r.sets || r).slice(0, 220));
}
return out;
}
// 1. THE BIG ONE: nested state must sort after base
show('nested hover vs base (cascade)', `
.card {
background: #26201a
hover { background: #c0392b }
}
`);
// 2. raw hex alpha
show('raw hex /50 alpha', `
.card { background: #ff0000/50 }
`);
// 3. transition-delay units
show('transition-delay 200', `
.card { transition-delay: 200 }
`);
// 4. grid gap shorthand
show('grid: 3 gap 12', `
.grid { grid: 3 gap 12 }
`);
// 5. shadow token def with bare ink
show('shadow { md: 0 2 4 ink/10 }', `
shadow { md: 0 2 4 ink/10 }
`);
// 6. seen block
show('seen { opacity: 0 -> 1 } block', `
.card { seen { opacity: 0 -> 1 } }
`);
show('seen as motion decl', `
.card { seen: opacity 0 -> 1 }
`);
// 7. hovr typo nested
show('nested hovr typo', `
.card { hovr { background: red } }
`);
// 8. missing properties
show('fill/stroke/text-wrap/content-visibility', `
.card { fill: red; stroke: blue; stroke-width: 2; text-wrap: balance; content-visibility: auto }
`);
// 9. ::part / ::slotted
show('::part selector', `
my-card::part(header) { background: red }
`);
// 10. shadow: sm / hover shadow lg quickstart pattern
show('README quickstart pattern', `
.card { shadow: sm; hover { shadow: lg } }
`);
|