/*
## License
Copyright (c) 2016 Z3 Development https://github.com/z3dev
Copyright (c) 2013-2016 by Rene K. Mueller <spiritdude@gmail.com>
All code released under MIT license
*/
// //////////////////////////////////////////
//
// AMF is a language for describing three-dimensional graphics in XML
// See ASTM for Documentation, http://www.astm.org/Standards/ISOASTM52915.htm
//
// //////////////////////////////////////////
/**
* Deserializer of AMF source data (XML) to JSCAD geometries.
* @see {@link https://github.com/jscad/OpenJSCAD.org/blob/master/packages/io/amf-deserializer/README.md|README} for supported conversion of AMF objects.
* @module io/amf-deserializer
* @example
* const { deserializer, extension } = require('@jscad/amf-serializer')
*/
const version = require('../package.json').version
const translate = require('./translate')
const instantiate = require('./deserialize')
/**
* Deserialize the given AMF source (XML) into either a script or an array of geometry
* @see {@link https://en.wikipedia.org/wiki/Additive_manufacturing_file_format|AMF File Format}
* @see README for supported conversions
* @param {Object} options - options used during deserializing
* @param {String} [options.filename='amf'] - filename of original AMF source
* @param {String} [options.output='script'] - either 'script' or 'geometry' to set desired output
* @param {String} [options.version] - version added to the script metadata, default is package version
* @param {Boolean} [options.addMetadata=true] - toggle injection of metadata at the start of the script
* @param {String} input - AMF source data (XML)
* @returns {(Array|String)} either an array of objects (geometry) or a string (script)
* @alias module:io/amf-deserializer.deserialize
*/
const deserialize = (options, input) => {
const defaults = {
filename: 'amf',
output: 'script',
version,
addMetaData: true
}
options = Object.assign({}, defaults, options)
return options.output === 'script' ? translate(options, input) : instantiate(options, input)
}
const extension = 'amf'
module.exports = {
deserialize,
extension
}