From 0306b182499b3f6202502566d9a0dc21ea0f6ce2 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Sun, 9 Mar 2025 18:48:22 +0100 Subject: [PATCH] Add support for JDD-based content in rss --- package-lock.json | 367 ++++++++++++++++++---------------- package.json | 10 +- src/back/app.ts | 2 - src/back/collections/pages.ts | 29 ++- src/back/defaultHead.tsx | 14 +- src/back/util.ts | 8 + 6 files changed, 245 insertions(+), 185 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03d0bd2..80376f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,9 @@ "@sealcode/add-to-head": "^1.0.0", "@sealcode/crud-ui": "^0.0.17", "@sealcode/file-manager": "^1.0.2", - "@sealcode/jdd": "^0.7.2", - "@sealcode/jdd-editor": "^0.1.19", - "@sealcode/sealgen": "^0.17.26", + "@sealcode/jdd": "^0.7.3", + "@sealcode/jdd-editor": "^0.1.20", + "@sealcode/sealgen": "^0.17.27", "@sealcode/simplemde": "^1.12.1", "@sealcode/ts-predicates": "^0.6.2", "@types/kill-port": "^2.0.0", @@ -36,10 +36,10 @@ "nodemon": "^3.0.1", "object-path": "^0.11.8", "qs": "^6.12.0", - "sealious": "^0.19.36", + "sealious": "^0.19.39", "slug": "^9.1.0", "stimulus": "^3.2.2", - "tempstream": "^0.4.5", + "tempstream": "^0.4.6", "throttle-debounce": "^5.0.2", "turndown": "^7.2.0" }, @@ -939,9 +939,9 @@ } }, "node_modules/@sealcode/jdd": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sealcode/jdd/-/jdd-0.7.2.tgz", - "integrity": "sha512-5y8siKvnLSqmyJT9PP0JLnVZqRx+IIk9bggVOvYZQsrSgDiD3hmqMWad9Gs4zP8Qzudgy7hJbbR2VfsGo+UqNg==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sealcode/jdd/-/jdd-0.7.3.tgz", + "integrity": "sha512-OZJDBLt7MMr/PGKfGQxEhLl+7wG2sw0jxHJr4PW0SLrPizT2NGHJGsyDK2eR1ZsNPm+Bukim8V2Q4M1gACYtWg==", "dependencies": { "@sealcode/file-manager": "^1.0.2", "@sealcode/ts-predicates": "^0.5.3", @@ -954,7 +954,7 @@ "mri": "^1.2.0", "prettier": "^2.7.1", "slug": "^9.1.0", - "tempstream": "^0.4.5", + "tempstream": "^0.4.6", "uuid": "^9.0.1" }, "peerDependencies": { @@ -962,9 +962,9 @@ } }, "node_modules/@sealcode/jdd-editor": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@sealcode/jdd-editor/-/jdd-editor-0.1.19.tgz", - "integrity": "sha512-dSXN2YMJR7s3fiBlypajZBECpeSHSlJwxy4PU0n0RrBzzwF8Y2hbiu+dhaQVoAfhJyVnOOBE22UlAZ137iKlfQ==", + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/@sealcode/jdd-editor/-/jdd-editor-0.1.20.tgz", + "integrity": "sha512-pdBKSFR1934t7LiL3m+VekuyFtWyOsZO5k7RQ32dR6e5cIN1LXSEgWR9kzLpeKo5yO6TdquUU/FuWqLm4zlwgQ==", "dependencies": { "@koa/router": "^13.1.0", "@sealcode/jdd": "^0.7.1", @@ -976,7 +976,7 @@ "object-path": "^0.11.8", "sealious": "^0.19.36", "stimulus": "^3.2.2", - "tempstream": "^0.4.5", + "tempstream": "^0.4.6", "throttle-debounce": "^5.0.2", "turndown": "^7.2.0" } @@ -1004,9 +1004,9 @@ "integrity": "sha512-pDsGlk2KokQkwzsJDBUWJFDRpEoxxth6TMQGDJyCTmWnd1Vn+cQb5moXDKaf7cXnWb9Y6QtdNX/fPzM/3RH2Cg==" }, "node_modules/@sealcode/sealgen": { - "version": "0.17.26", - "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.17.26.tgz", - "integrity": "sha512-eehUUh+d3XW8F41d18q9tBuYEg9P21IfvovxFiM/p609OaplcZ4pUD+pma7zu/cMr+Xh85aw/gQUox5C9Obp4A==", + "version": "0.17.27", + "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.17.27.tgz", + "integrity": "sha512-K20pcQ6xnaLO4CjrcpCZ7R1w4ek2kOS/cGtHmeBlO5uZSQu1mY0Q4gIIbzFNUhETcEMTpRyN7Aq7mXWJkn0+iA==", "dependencies": { "@koa/router": "^12.0.1", "@sealcode/file-manager": "^1.0.2", @@ -1028,7 +1028,7 @@ "prompts": "^2.4.2", "recursive-readdir": "^2.2.3", "tempfile": "^5.0.0", - "tempstream": "^0.4.4", + "tempstream": "^0.4.6", "tiny-glob": "^0.2.9", "ws": "^8.16.0", "yargs": "^17.6.2" @@ -1472,10 +1472,6 @@ "@types/node": "*" } }, - "node_modules/@types/shortid": { - "version": "0.0.29", - "license": "MIT" - }, "node_modules/@types/simplemde": { "version": "1.11.11", "resolved": "https://registry.npmjs.org/@types/simplemde/-/simplemde-1.11.11.tgz", @@ -5900,30 +5896,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/juice": { - "version": "10.0.0", - "license": "MIT", - "dependencies": { - "cheerio": "^1.0.0-rc.12", - "commander": "^6.1.0", - "mensch": "^0.3.4", - "slick": "^1.12.2", - "web-resource-inliner": "^6.0.1" - }, - "bin": { - "juice": "bin/juice" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/juice/node_modules/commander": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/keygrip": { "version": "1.1.0", "license": "MIT", @@ -6651,6 +6623,8 @@ }, "node_modules/mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -6894,6 +6868,160 @@ "mjml-validator": "4.15.3" } }, + "node_modules/mjml-core/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/mjml-core/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/domutils/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/escape-goat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mjml-core/node_modules/htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/fb55/htmlparser2?sponsor=1" + } + }, + "node_modules/mjml-core/node_modules/juice": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/juice/-/juice-10.0.1.tgz", + "integrity": "sha512-ZhJT1soxJCkOiO55/mz8yeBKTAJhRzX9WBO+16ZTqNTONnnVlUPyVBIzQ7lDRjaBdTbid+bAnyIon/GM3yp4cA==", + "license": "MIT", + "dependencies": { + "cheerio": "1.0.0-rc.12", + "commander": "^6.1.0", + "mensch": "^0.3.4", + "slick": "^1.12.2", + "web-resource-inliner": "^6.0.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mjml-core/node_modules/web-resource-inliner": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", + "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "escape-goat": "^3.0.0", + "htmlparser2": "^5.0.0", + "mime": "^2.4.6", + "node-fetch": "^2.6.0", + "valid-data-url": "^3.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mjml-divider": { "version": "4.15.3", "license": "MIT", @@ -7541,8 +7669,21 @@ } }, "node_modules/nanoid": { - "version": "2.1.11", - "license": "MIT" + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.3.tgz", + "integrity": "sha512-zAbEOEr7u2CbxwoMRlz/pNSpRP0FdAU4pRaYunCdEezWohXFs+a0Xw7RfkKaezMsmSM1vttcLthJtwRnVtOfHQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } }, "node_modules/napi-build-utils": { "version": "1.0.2", @@ -9209,9 +9350,9 @@ } }, "node_modules/sealious": { - "version": "0.19.36", - "resolved": "https://registry.npmjs.org/sealious/-/sealious-0.19.36.tgz", - "integrity": "sha512-qpRISkbSxqB0kYP/WCRui7YyYafEb7GAnw7UerNem1I3mGhk6Wxq8tipfO3l6Kgge6kmze4gQkewjlQ+PyD3OQ==", + "version": "0.19.39", + "resolved": "https://registry.npmjs.org/sealious/-/sealious-0.19.39.tgz", + "integrity": "sha512-fowSikfe9HxQrl0xTbpNDNDMpbW+H/wxoJr4DYOcWVUet9c6sjrYuhQKAubtCsOAn8tZCtDmGiYCO5oGXpUfVQ==", "dependencies": { "@koa/router": "^12.0.1", "@sealcode/file-manager": "^1.0.1", @@ -9233,7 +9374,6 @@ "@types/nodemailer": "^6.4.0", "@types/object-hash": "^1.3.3", "@types/sanitize-html": "^2.11.0", - "@types/shortid": "0.0.29", "@types/uuid": "^8.3.0", "bluebird": "^3.4.6", "boom": "^7.3.0", @@ -9258,12 +9398,12 @@ "locreq": "^3.0.0", "mjml": "^4.2.0", "mongodb": "^6.5.0", + "nanoid": "^5.0.9", "nodemailer": "^6.4.6", "object-hash": "^2.0.3", "pretty-ms": "^7.0.0", "qs": "^6.12.0", "sanitize-html": "^1.13.0", - "shortid": "^2.2.6", "typedoc": "^0.17.8", "uuid": "^8.3.2" }, @@ -9523,13 +9663,6 @@ "node": ">=4" } }, - "node_modules/shortid": { - "version": "2.2.16", - "license": "MIT", - "dependencies": { - "nanoid": "^2.1.0" - } - }, "node_modules/side-channel": { "version": "1.0.6", "license": "MIT", @@ -10448,9 +10581,9 @@ } }, "node_modules/tempstream": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/tempstream/-/tempstream-0.4.5.tgz", - "integrity": "sha512-SplQcin+UyBivqeKpfCtQmKntrmeY0hypId6y5bZjAiYkQRUDybAJq/xFyn5AohNL9NQS19HSSYVhRsyy66fvQ==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/tempstream/-/tempstream-0.4.6.tgz", + "integrity": "sha512-UpRUWkgm6CdbwrBHRCiKmYwTSXvLsoROOZFwNmn+o2OXYd67yLe0/oK05ezgtD6YjkKy9Hrel36VSyaRlgsQUQ==", "dependencies": { "classnames": "^2.5.1", "escape-goat": "^4.0.0" @@ -11095,6 +11228,8 @@ }, "node_modules/valid-data-url": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", + "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", "license": "MIT", "engines": { "node": ">=10" @@ -11120,114 +11255,6 @@ "node": ">=10.13.0" } }, - "node_modules/web-resource-inliner": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "escape-goat": "^3.0.0", - "htmlparser2": "^5.0.0", - "mime": "^2.4.6", - "node-fetch": "^2.6.0", - "valid-data-url": "^3.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/web-resource-inliner/node_modules/dom-serializer": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.3.1", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/domhandler": { - "version": "3.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.0.1" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/domutils": { - "version": "2.8.0", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/domutils/node_modules/domhandler": { - "version": "4.3.1", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/entities": { - "version": "2.2.0", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/web-resource-inliner/node_modules/escape-goat": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web-resource-inliner/node_modules/htmlparser2": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.3.0", - "domutils": "^2.4.2", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/fb55/htmlparser2?sponsor=1" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "license": "BSD-2-Clause", diff --git a/package.json b/package.json index 4e4365d..1bbf5e2 100644 --- a/package.json +++ b/package.json @@ -80,9 +80,9 @@ "@sealcode/add-to-head": "^1.0.0", "@sealcode/crud-ui": "^0.0.17", "@sealcode/file-manager": "^1.0.2", - "@sealcode/jdd": "^0.7.2", - "@sealcode/jdd-editor": "^0.1.19", - "@sealcode/sealgen": "^0.17.26", + "@sealcode/jdd": "^0.7.3", + "@sealcode/jdd-editor": "^0.1.20", + "@sealcode/sealgen": "^0.17.27", "@sealcode/simplemde": "^1.12.1", "@sealcode/ts-predicates": "^0.6.2", "@types/kill-port": "^2.0.0", @@ -101,10 +101,10 @@ "nodemon": "^3.0.1", "object-path": "^0.11.8", "qs": "^6.12.0", - "sealious": "^0.19.36", + "sealious": "^0.19.39", "slug": "^9.1.0", "stimulus": "^3.2.2", - "tempstream": "^0.4.5", + "tempstream": "^0.4.6", "throttle-debounce": "^5.0.2", "turndown": "^7.2.0" }, diff --git a/src/back/app.ts b/src/back/app.ts index acc310b..dcf4421 100644 --- a/src/back/app.ts +++ b/src/back/app.ts @@ -93,8 +93,6 @@ export default class TheApp extends App { }) : new LoggerMailer(); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - async start() { await super.start(); } diff --git a/src/back/collections/pages.ts b/src/back/collections/pages.ts index 5f2da65..6551ea9 100644 --- a/src/back/collections/pages.ts +++ b/src/back/collections/pages.ts @@ -1,8 +1,15 @@ import { Collection, FieldTypes, Policies } from "sealious"; -import type { App } from "sealious"; +import type { Context } from "koa"; +import type { App, CollectionItem } from "sealious"; import { CRUDRoles } from "../policy-types/roles.js"; import assert from "assert"; import TheApp from "../app.js"; +import type { FieldEntryMapping } from "sealious/@types/src/chip-types/collection.js"; +import { JDD } from "@sealcode/jdd"; +import { registry } from "../jdd-components/registry.js"; +import type { RawJDDocument } from "@sealcode/jdd"; +import { makeJDDContext } from "../jdd-context.js"; +import { tempstream } from "tempstream"; export default class Pages extends Collection { fields = { @@ -55,4 +62,24 @@ export default class Pages extends Collection { } }); } + + mapFieldsToFeed(): FieldEntryMapping { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function getJDD(ctx: Context, item: CollectionItem) { + const jdd_context = makeJDDContext(ctx); + return JDD.fromStorage( + registry, + jdd_context, + item.get("content") as RawJDDocument + ); + } + return { + ...super.mapFieldsToFeed(), + content: async (ctx, item) => { + const jdd = await getJDD(ctx, item); + const result = await tempstream/* HTML */ `${jdd.render()}`; + return result; + }, + }; + } } diff --git a/src/back/defaultHead.tsx b/src/back/defaultHead.tsx index 7fc550a..4b2b31a 100644 --- a/src/back/defaultHead.tsx +++ b/src/back/defaultHead.tsx @@ -64,13 +64,13 @@ export function defaultHead({ ...(ctx.url.includes("/dowodzenie/") ? ["admin"] : []), ...css_clumps, ].map( - (clump_name) => /* HTML*/ `` + (clump_name) => /* HTML */ `` )} ${canonicalPath diff --git a/src/back/util.ts b/src/back/util.ts index cb8b3e4..186bd01 100644 --- a/src/back/util.ts +++ b/src/back/util.ts @@ -2,6 +2,9 @@ /* eslint-disable @typescript-eslint/consistent-type-assertions */ import type { Context } from "koa"; import qs from "qs"; +import { promises as fs } from "node:fs"; +import _locreq from "locreq"; +const locreq = _locreq(import.meta.dirname); export async function sleep(time: number) { return new Promise((resolve) => setTimeout(resolve, time)); @@ -75,3 +78,8 @@ export const fromCheckboxValues = (arr: Record | null): string[] .filter(([, value]) => value === "on") .map(([key]) => key); }; + +export const get_css_clump_content = function (clump_name: string) { + const path = locreq.resolve(`public/dist/${clump_name}.entrypoint.css`); + return fs.readFile(path, "utf-8"); +};