+1
deno.json
+1
deno.json
···
2
2
"imports": {
3
3
"@img/sharp-wasm32": "npm:@img/sharp-wasm32@0.33.5",
4
4
"@nolebase/markdown-it-bi-directional-links": "npm:@nolebase/markdown-it-bi-directional-links@^2.15.0",
5
+
"csstree-validator": "npm:csstree-validator@^4.0.1",
5
6
"lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@f6e8b76726f84055e7d56f201bad44ab4162ed9c/",
6
7
"markdown-it-obsidian-callouts": "npm:markdown-it-obsidian-callouts@^0.3.1",
7
8
"html-validate": "npm:html-validate@9.4.0"
+42
deno.lock
+42
deno.lock
···
38
38
"npm:@tailwindcss/oxide@4.0.3": "4.0.3",
39
39
"npm:@tailwindcss/oxide@4.0.6": "4.0.6",
40
40
"npm:@types/estree@1.0.6": "1.0.6",
41
+
"npm:csstree-validator@^4.0.1": "4.0.1",
41
42
"npm:date-fns@4.1.0": "4.1.0",
42
43
"npm:estree-walker@3.0.3": "3.0.3",
43
44
"npm:html-validate@9.4.0": "9.4.0_ajv@8.17.1",
···
398
399
"require-from-string"
399
400
]
400
401
},
402
+
"ansi-colors@4.1.3": {
403
+
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="
404
+
},
401
405
"ansi-regex@5.0.1": {
402
406
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
403
407
},
···
426
430
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
427
431
"dependencies": [
428
432
"balanced-match"
433
+
]
434
+
},
435
+
"clap@3.1.1": {
436
+
"integrity": "sha512-vp42956Ax06WwaaheYEqEOgXZ3VKJxgccZ0gJL0HpyiupkIS9RVJFo5eDU1BPeQAOqz+cclndZg4DCqG1sJReQ==",
437
+
"dependencies": [
438
+
"ansi-colors"
429
439
]
430
440
},
431
441
"color-convert@2.0.1": {
···
489
499
"source-map-js"
490
500
]
491
501
},
502
+
"css-tree@3.1.0": {
503
+
"integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
504
+
"dependencies": [
505
+
"mdn-data@2.12.2",
506
+
"source-map-js"
507
+
]
508
+
},
492
509
"css-what@6.1.0": {
493
510
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
494
511
},
···
498
515
"css-tree@2.2.1"
499
516
]
500
517
},
518
+
"csstree-validator@4.0.1": {
519
+
"integrity": "sha512-ywwDonvo6BuhXkrNSCAW4JLxsNd8HzpOtVVv22W5BNtZNeviZORSOLb7CLskeaKnL9jjvi24kL7UNh5m52ygpw==",
520
+
"dependencies": [
521
+
"clap",
522
+
"css-tree@3.1.0",
523
+
"enhanced-resolve"
524
+
]
525
+
},
501
526
"date-fns@4.1.0": {
502
527
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="
503
528
},
···
543
568
},
544
569
"emoji-regex@9.2.2": {
545
570
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
571
+
},
572
+
"enhanced-resolve@5.18.1": {
573
+
"integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
574
+
"dependencies": [
575
+
"graceful-fs",
576
+
"tapable"
577
+
]
546
578
},
547
579
"entities@4.5.0": {
548
580
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
···
583
615
"path-scurry"
584
616
]
585
617
},
618
+
"graceful-fs@4.2.11": {
619
+
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
620
+
},
586
621
"html-validate@9.4.0_ajv@8.17.1": {
587
622
"integrity": "sha512-Io8vjeAf2JJJTHJDGvozVB6Vv/IZRkNRruSENg9lmLzE1gUcr77sIdtE2rzwLkBsCESDv5+nAAtk2TCer78jxA==",
588
623
"dependencies": [
···
673
708
},
674
709
"mdn-data@2.0.30": {
675
710
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
711
+
},
712
+
"mdn-data@2.12.2": {
713
+
"integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="
676
714
},
677
715
"mdurl@2.0.0": {
678
716
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
···
838
876
},
839
877
"tailwindcss@4.0.6": {
840
878
"integrity": "sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw=="
879
+
},
880
+
"tapable@2.2.1": {
881
+
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
841
882
},
842
883
"tinyglobby@0.2.12_picomatch@4.0.2": {
843
884
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
···
1151
1192
"dependencies": [
1152
1193
"npm:@img/sharp-wasm32@0.33.5",
1153
1194
"npm:@nolebase/markdown-it-bi-directional-links@^2.15.0",
1195
+
"npm:csstree-validator@^4.0.1",
1154
1196
"npm:html-validate@9.4.0",
1155
1197
"npm:markdown-it-obsidian-callouts@~0.3.1"
1156
1198
]
+20
plugins/validateCSS.ts
+20
plugins/validateCSS.ts
···
1
+
import { validate } from "csstree-validator";
2
+
import "lume/types.ts";
3
+
import { log } from "lume/core/utils/log.ts";
4
+
5
+
// CSS Validation Plugin, by dish
6
+
// version 1.0.0
7
+
8
+
export default function () {
9
+
return (site: Lume.Site) => {
10
+
site.process([".css"], validateStylesheets);
11
+
12
+
function validateStylesheets(pages: Lume.Page[]) {
13
+
for (const page of pages) {
14
+
// const report = validate(page.content, page.sourcePath);
15
+
log.info(page.content as string);
16
+
log.error(validate(page.content as string, page.sourcePath));
17
+
}
18
+
}
19
+
};
20
+
}