TypeScript
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Cat /dev/Nulo 2022-12-20 14:07:24 -03:00
parent aa7a0187db
commit cb66797214
6 changed files with 271 additions and 14 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
build/ build/
node_modules/ node_modules/
build.js/

View File

@ -10,7 +10,8 @@ pipeline:
- pnpm set registry http://npm.proxy.coso - pnpm set registry http://npm.proxy.coso
- pnpm install - pnpm install
- node compilar.js - pnpm check
- pnpm build
- apk add rsync openssh-client-default - apk add rsync openssh-client-default

View File

@ -9,12 +9,16 @@ const execFile = promisify(execFileCallback);
const reader = new commonmark.Parser({ smart: true }); const reader = new commonmark.Parser({ smart: true });
const writer = new commonmark.HtmlRenderer({ safe: false, smart: true }); const writer = new commonmark.HtmlRenderer({ safe: false, smart: true });
const config = { interface Config {
sourcePath: string;
buildPath: string;
}
const config: Config = {
sourcePath: ".", sourcePath: ".",
buildPath: "build", buildPath: "build",
}; };
function head(title, outputName) { function head(title: string, outputName: string) {
// TODO: deshardcodear og:url // TODO: deshardcodear og:url
return `<!doctype html> return `<!doctype html>
<meta charset=utf-8> <meta charset=utf-8>
@ -30,7 +34,7 @@ function head(title, outputName) {
`; `;
} }
function header(title, sourceCodePath, linkConexiones = false) { function header(title: string, sourceCodePath: string, linkConexiones = false) {
return ( return (
`<a href=.>☚ Volver al inicio</a>` + `<a href=.>☚ Volver al inicio</a>` +
`<header> `<header>
@ -46,7 +50,7 @@ function header(title, sourceCodePath, linkConexiones = false) {
} }
const wikilinkExp = /\[\[(.+?)\]\]/giu; const wikilinkExp = /\[\[(.+?)\]\]/giu;
async function scanForConnections(sourcePath) { async function scanForConnections(sourcePath: string) {
const dir = await opendir(sourcePath); const dir = await opendir(sourcePath);
let connections = []; let connections = [];
for await (const entry of dir) { for await (const entry of dir) {
@ -62,7 +66,7 @@ async function scanForConnections(sourcePath) {
return connections; return connections;
} }
function hackilyTransformHtml(html) { function hackilyTransformHtml(html: string) {
return html return html
.replaceAll("<a h", '<a rel="noopener noreferrer" h') .replaceAll("<a h", '<a rel="noopener noreferrer" h')
.replaceAll(wikilinkExp, `<a href="$1.html">$1</a>`); .replaceAll(wikilinkExp, `<a href="$1.html">$1</a>`);
@ -73,7 +77,7 @@ const connections = await scanForConnections(config.sourcePath);
await mkdir(config.buildPath, { recursive: true }); await mkdir(config.buildPath, { recursive: true });
const dir = await opendir(config.sourcePath); const dir = await opendir(config.sourcePath);
let pageList = []; let pageList: string[] = [];
let promises = []; let promises = [];
for await (const entry of dir) { for await (const entry of dir) {
if (!entry.isFile()) continue; if (!entry.isFile()) continue;
@ -83,7 +87,7 @@ await Promise.all(promises);
await compilePageList(config, pageList); await compilePageList(config, pageList);
async function compileFile(name) { async function compileFile(name: string) {
const extension = extname(name); const extension = extname(name);
if ( if (
[".js", ".md", ".css", ".png", ".jpg", ".mp4", ".svg", ".html"].includes( [".js", ".md", ".css", ".png", ".jpg", ".mp4", ".svg", ".html"].includes(
@ -100,7 +104,7 @@ async function compileFile(name) {
else if (extension === ".gen") await compileExecutable(config, name); else if (extension === ".gen") await compileExecutable(config, name);
} }
async function compilePageList(config, pageList) { async function compilePageList(config: Config, pageList: string[]) {
const name = "Lista de páginas"; const name = "Lista de páginas";
const outputPath = join(config.buildPath, name + ".html"); const outputPath = join(config.buildPath, name + ".html");
const html = const html =
@ -114,7 +118,7 @@ async function compilePageList(config, pageList) {
`; `;
await writeFile(outputPath, html); await writeFile(outputPath, html);
} }
async function compileMarkdown(config, sourceFileName) { async function compileMarkdown(config: Config, sourceFileName: string) {
const name = basename(sourceFileName, ".md"); const name = basename(sourceFileName, ".md");
const markdown = await readFile( const markdown = await readFile(
join(config.sourcePath, sourceFileName), join(config.sourcePath, sourceFileName),
@ -149,7 +153,7 @@ async function compileMarkdown(config, sourceFileName) {
await writeFile(outputPath, html); await writeFile(outputPath, html);
} }
async function compileExecutable(config, sourceFileName) { async function compileExecutable(config: Config, sourceFileName: string) {
const name = basename(sourceFileName, ".gen"); const name = basename(sourceFileName, ".gen");
const { stdout, stderr } = await execFile( const { stdout, stderr } = await execFile(
@ -170,7 +174,7 @@ async function compileExecutable(config, sourceFileName) {
// Markdown utils // Markdown utils
// ============================================== // ==============================================
function renderMarkdown(markdown) { function renderMarkdown(markdown: string) {
const parsed = reader.parse(markdown); const parsed = reader.parse(markdown);
return writer.render(parsed); return writer.render(parsed);
} }

View File

@ -5,14 +5,18 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "build-ts": "esbuild compilar.ts --target=node18 --outdir=build.js --sourcemap",
"build": "pnpm build-ts && node build.js/compilar.js",
"check": "tsc --noEmit"
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@types/commonmark": "^0.27.5", "@types/commonmark": "^0.27.5",
"@types/node": "^18.11.17" "@types/node": "^18.11.17",
"esbuild": "^0.16.10",
"typescript": "^4.9.4"
}, },
"dependencies": { "dependencies": {
"commonmark": "^0.30.0" "commonmark": "^0.30.0"

View File

@ -4,6 +4,8 @@ specifiers:
'@types/commonmark': ^0.27.5 '@types/commonmark': ^0.27.5
'@types/node': ^18.11.17 '@types/node': ^18.11.17
commonmark: ^0.30.0 commonmark: ^0.30.0
esbuild: ^0.16.10
typescript: ^4.9.4
dependencies: dependencies:
commonmark: 0.30.0 commonmark: 0.30.0
@ -11,9 +13,209 @@ dependencies:
devDependencies: devDependencies:
'@types/commonmark': 0.27.5 '@types/commonmark': 0.27.5
'@types/node': 18.11.17 '@types/node': 18.11.17
esbuild: 0.16.10
typescript: 4.9.4
packages: packages:
/@esbuild/android-arm/0.16.10:
resolution: {integrity: sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-arm64/0.16.10:
resolution: {integrity: sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-x64/0.16.10:
resolution: {integrity: sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-arm64/0.16.10:
resolution: {integrity: sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-x64/0.16.10:
resolution: {integrity: sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-arm64/0.16.10:
resolution: {integrity: sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-x64/0.16.10:
resolution: {integrity: sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm/0.16.10:
resolution: {integrity: sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm64/0.16.10:
resolution: {integrity: sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ia32/0.16.10:
resolution: {integrity: sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-loong64/0.16.10:
resolution: {integrity: sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-mips64el/0.16.10:
resolution: {integrity: sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ppc64/0.16.10:
resolution: {integrity: sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-riscv64/0.16.10:
resolution: {integrity: sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-s390x/0.16.10:
resolution: {integrity: sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-x64/0.16.10:
resolution: {integrity: sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/netbsd-x64/0.16.10:
resolution: {integrity: sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/openbsd-x64/0.16.10:
resolution: {integrity: sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/sunos-x64/0.16.10:
resolution: {integrity: sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-arm64/0.16.10:
resolution: {integrity: sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-ia32/0.16.10:
resolution: {integrity: sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-x64/0.16.10:
resolution: {integrity: sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@types/commonmark/0.27.5: /@types/commonmark/0.27.5:
resolution: {integrity: sha512-vIqgmHyLsc8Or3EWLz6QkhI8/v61FNeH0yxRupA7VqSbA2eFMoHHJAhZSHudplAV89wqg1CKSmShE016ziRXuw==} resolution: {integrity: sha512-vIqgmHyLsc8Or3EWLz6QkhI8/v61FNeH0yxRupA7VqSbA2eFMoHHJAhZSHudplAV89wqg1CKSmShE016ziRXuw==}
dev: true dev: true
@ -36,6 +238,36 @@ packages:
resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==}
dev: false dev: false
/esbuild/0.16.10:
resolution: {integrity: sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.16.10
'@esbuild/android-arm64': 0.16.10
'@esbuild/android-x64': 0.16.10
'@esbuild/darwin-arm64': 0.16.10
'@esbuild/darwin-x64': 0.16.10
'@esbuild/freebsd-arm64': 0.16.10
'@esbuild/freebsd-x64': 0.16.10
'@esbuild/linux-arm': 0.16.10
'@esbuild/linux-arm64': 0.16.10
'@esbuild/linux-ia32': 0.16.10
'@esbuild/linux-loong64': 0.16.10
'@esbuild/linux-mips64el': 0.16.10
'@esbuild/linux-ppc64': 0.16.10
'@esbuild/linux-riscv64': 0.16.10
'@esbuild/linux-s390x': 0.16.10
'@esbuild/linux-x64': 0.16.10
'@esbuild/netbsd-x64': 0.16.10
'@esbuild/openbsd-x64': 0.16.10
'@esbuild/sunos-x64': 0.16.10
'@esbuild/win32-arm64': 0.16.10
'@esbuild/win32-ia32': 0.16.10
'@esbuild/win32-x64': 0.16.10
dev: true
/mdurl/1.0.1: /mdurl/1.0.1:
resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
dev: false dev: false
@ -47,3 +279,9 @@ packages:
/string.prototype.repeat/0.2.0: /string.prototype.repeat/0.2.0:
resolution: {integrity: sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA==} resolution: {integrity: sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA==}
dev: false dev: false
/typescript/4.9.4:
resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
engines: {node: '>=4.2.0'}
hasBin: true
dev: true

9
tsconfig.json Normal file
View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"target": "es2022",
"module": "es2022",
"moduleResolution": "node",
"esModuleInterop": true,
"strict": true
}
}