From c64d8c3d03affca0055cfadf9c385a29dda90c5e Mon Sep 17 00:00:00 2001 From: Ivan Polyakov Date: Fri, 7 Oct 2022 22:43:04 +0300 Subject: [PATCH 1/3] auto publishing --- .drone.yml | 22 ++++++++++++++++++++++ README.md | 1 + 2 files changed, 23 insertions(+) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..9031c4e --- /dev/null +++ b/.drone.yml @@ -0,0 +1,22 @@ +kind: pipeline +type: docker +name: production +when: + event: [ push ] + branch: [ master ] + +trigger: + branch: + - master + +steps: + - name: publish + image: plugins/npm + settings: + username: vilor + password: + from_secret: npm_password + email: + from_secret: npm_email + token: + from_secret: npm_token diff --git a/README.md b/README.md index 7babbdd..6c6ab30 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ sxml-loader =========== +[![Build Status](http://drone.vilor.one/api/badges/vilor/sxml-loader/status.svg)](http://drone.vilor.one/vilor/sxml-loader) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
-- 2.36.1 From 4df4b259c003636cab8e6c1ab09004495e44a7b4 Mon Sep 17 00:00:00 2001 From: Ivan Polyakov Date: Sat, 8 Oct 2022 00:04:35 +0300 Subject: [PATCH 2/3] interpreter settings --- README.md | 34 ++++++++++++++++++++--------- src/loader.js | 59 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 77 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 6c6ab30..bfd1a73 100644 --- a/README.md +++ b/README.md @@ -12,18 +12,9 @@ sxml-loader Scheme XML loader for webpack. -**NOTE**: -At the moment, the _sxml-loader_ only works with -[Chicken Scheme](http://call-cc.org/) and its -[sxml-serializer](http://wiki.call-cc.org/eggref/5/sxml-serializer) -egg, so you need to install them in order to use the _sxml-loader_. - Usage ----- -**SXML**: -```scm -'(h1 "Hello") -``` +_See the full example in the [example](example) directory._ **webpack.config.js**: ```js @@ -41,6 +32,29 @@ module.exports = { } ``` +By default SXML will be processed by _Chicken Scheme_ +with _sxml-serializer_ egg. You can use a different interpreter +by setting the loader options. + +GNU Guile example: +```js +// ... +use: [ + 'html-loader', + { + loader: 'sxml-loader', + options: { + interpreter: 'guile', + flags: ['-c'], // "eval" flag (in Guile case "-c") should be last. + + // SXML_LOADER_CONTENT will be replaced with processing SXML markup. + expr: '(use-modules (sxml simple))(sxml->xml SXML_LOADER_CONTENT)', + }, + }, +], +// ... +``` + License ------- GPLv3 or later. See full text in the [COPYING](COPYING) file diff --git a/src/loader.js b/src/loader.js index 9fadfa6..c0a3914 100644 --- a/src/loader.js +++ b/src/loader.js @@ -1,17 +1,64 @@ // SPDX-License-Identifier: GPL-3.0-or-later // Copyright 2022 Ivan Polyakov const { spawn } = require('child_process'); +const { validate } = require('schema-utils'); + +const schema = { + type: 'object', + properties: { + interpreter: { + type: 'string', + default: 'chicken-csi', + }, + flags: { + type: 'array', + default: ['-e'], + }, + expr: { + type: 'string', + default: '(import sxml-serializer)(display (serialize-sxml SXML_LOADER_CONTENT))', + }, + }, +}; module.exports = function(content, map, meta) { - const cb = this.async(); - const expr = `(import sxml-serializer)(display (serialize-sxml ${content}))`; - const scheme = spawn('chicken-csi', ['-e', expr]); + const options = this.getOptions(); + validate(schema, options, { + name: 'SXML Loader', + baseDataPath: 'options', + }); + + let interpreter = schema.properties.interpreter.default; + if (options.interpreter) + interpreter = options.interpreter; + + let flags = schema.properties.flags.default; + if (options.flags) + flags = options.flags; - scheme.stdout.on('data', data => { + let expr = schema.properties.expr.default; + if (options.expr) + expr = options.expr; + expr = expr.replace('SXML_LOADER_CONTENT', content); + flags.push(expr); + + const cb = this.async(); + runScheme(interpreter, flags).then(data => { cb(null, data, map, meta); + }).catch(err => { + console.error(err); }); +} + +function runScheme(interpreter, flags) { + return new Promise((resolve, reject) => { + const scheme = spawn(interpreter, flags); - scheme.stderr.on('data', data => { - console.error(data); + scheme.stdout.on('data', (data) => { + resolve(data); + }); + scheme.stderr.on('data', (data) => { + reject(data.toString()); + }); }); } -- 2.36.1 From 8fed1be27590a7fcbb6150c7af82ee761f9c7631 Mon Sep 17 00:00:00 2001 From: Ivan Polyakov Date: Sat, 8 Oct 2022 00:05:35 +0300 Subject: [PATCH 3/3] new version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 725307f..e34c329 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sxml-loader", - "version": "0.1.0", + "version": "0.2.0", "description": "Scheme XML loader for webpack", "main": "src/loader.js", "bugs": "http://git.vilor.one/vilor/sxml-loader/issues", -- 2.36.1