vilor
2 years ago
4 changed files with 101 additions and 17 deletions
@ -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 |
@ -1,17 +1,64 @@ |
|||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
// Copyright 2022 Ivan Polyakov
|
// Copyright 2022 Ivan Polyakov
|
||||||
const { spawn } = require('child_process'); |
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) { |
module.exports = function(content, map, meta) { |
||||||
const cb = this.async(); |
const options = this.getOptions(); |
||||||
const expr = `(import sxml-serializer)(display (serialize-sxml ${content}))`; |
validate(schema, options, { |
||||||
const scheme = spawn('chicken-csi', ['-e', expr]); |
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; |
||||||
|
|
||||||
|
let expr = schema.properties.expr.default; |
||||||
|
if (options.expr) |
||||||
|
expr = options.expr; |
||||||
|
expr = expr.replace('SXML_LOADER_CONTENT', content); |
||||||
|
flags.push(expr); |
||||||
|
|
||||||
scheme.stdout.on('data', data => { |
const cb = this.async(); |
||||||
|
runScheme(interpreter, flags).then(data => { |
||||||
cb(null, data, map, meta); |
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 => { |
scheme.stdout.on('data', (data) => { |
||||||
console.error(data); |
resolve(data); |
||||||
|
}); |
||||||
|
scheme.stderr.on('data', (data) => { |
||||||
|
reject(data.toString()); |
||||||
|
}); |
||||||
}); |
}); |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue