diff --git a/README.md b/README.md index dab0255..351725d 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,17 @@ module.exports = { Options ------- ``` -| Option | Description | -| ======= | ============================================================= | -| doctype | The document type at the top of the markup. `html` by default | -| ------- | ------------------------------------------------------------- | -| expr | A Scheme expression that processes your markup. | -| | Insert `SXML_LOADER_CONTENT` where you want to process | -| | the markup list. | +| Option | Description | +| ============== | ====================================================== | +| doctype | The document type at the top of the markup. | +| | `html` by default | +| -------------- | ------------------------------------------------------ | +| expr | A Scheme expression that processes your markup. | +| | Insert `SXML_LOADER_CONTENT` where you want to process | +| | the markup list. | +| -------------- | ------------------------------------------------------ | +| afterTranslate | A hook called after the SXML to HTML translation | +| | is complete. `afterTranslate(markup: string): string` | ``` License diff --git a/loader.js b/loader.js index 9575c9d..1e4d83a 100644 --- a/loader.js +++ b/loader.js @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later // Copyright 2022 Ivan Polyakov + const { spawn } = require('child_process'); const { validate } = require('schema-utils'); @@ -14,6 +15,9 @@ const schema = { type: 'string', default: '', }, + afterTranslate: { + instanceOf: 'Function', + }, }, }; @@ -35,7 +39,12 @@ module.exports = function(content, map, meta) { const cb = this.async(); runScheme('guile', ['-c', expr]).then(data => { - cb(null, `${doctype}\n${data}`, map, meta); + let markup = `${doctype}\n${data}`; + if (options.afterTranslate) { + markup = options.afterTranslate(markup); + } + + cb(null, markup, map, meta); }).catch(code => { console.error(`Guile exited with code ${code}`); }); @@ -45,15 +54,10 @@ function runScheme(interpreter, flags) { return new Promise((resolve, reject) => { const scheme = spawn(interpreter, flags); - scheme.stdout.on('data', (data) => { - resolve(data); - }); + scheme.stdout.on('data', resolve); scheme.stderr.on('data', (data) => { console.error(data.toString()); }); - scheme.on('exit', (code) => { - if (code) - reject(code); - }); + scheme.on('exit', reject); }); } diff --git a/package.json b/package.json index 25e104b..283d07c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sxml-loader", - "version": "0.3.2", + "version": "0.3.3", "description": "Scheme XML loader for webpack", "main": "loader.js", "bugs": "http://git.vilor.one/vilor/sxml-loader/issues",