test-dist-es6-5
Version:
A media file format generator/parser that exposes a React-like API.
248 lines (204 loc) • 6.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _IsoBmff = require('./IsoBmff');
var _IsoBmff2 = _interopRequireDefault(_IsoBmff);
var _PropTypes = require('./core/PropTypes');
var _PropTypes2 = _interopRequireDefault(_PropTypes);
var _Reader = require('./core/Reader');
var _Reader2 = _interopRequireDefault(_Reader);
var _Writer = require('./core/Writer');
var _Writer2 = _interopRequireDefault(_Writer);
var _Buffer = require('./core/Buffer');
var _Buffer2 = _interopRequireDefault(_Buffer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function traverse(context, element, buffer) {
var offset = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];
var type = void 0,
props = void 0,
children = void 0,
instance = void 0,
propTypes = void 0,
base = offset,
err = void 0;
if (!element) {
console.warn('Kontainer.renderToBuffer: null element.');
return 0;
}
type = element.type;
props = element.props;
children = props.children;
instance = element.instance;
//console.log(`traverse enter. type=${type.COMPACT_NAME}`);
if (!instance) {
// Validate props
propTypes = type.propTypes;
if (propTypes) {
if (!(0, _keys2.default)(propTypes).every(function (key) {
err = propTypes[key](props, key, type.COMPACT_NAME);
if (err) {
return false;
}
return true;
})) {
console.error('Kontainer.renderToBuffer: Prop validation failed: ' + err.message);
return 0;
}
}
// Validate context
err = type.validate(context, props);
if (err) {
console.error('Kontainer.renderToBuffer: Context validation failed: ' + err.message);
}
// Instantiation
instance = element.instance = new type(props);
}
// Write self to the array buffer.
base += instance.serialize(buffer, offset);
// Write children to the array buffer.
children.forEach(function (child) {
base += traverse(context, child, buffer, base);
});
// Update the size.
instance.setSize(base - offset, buffer, offset);
//console.log(`traverse exit. type=${type.COMPACT_NAME} size=${instance.getSize()}`);
return instance.getSize();
}
function printProps(context, element) {
var indent = context.indent;
var formatter = context.formatter;
var type = void 0,
props = void 0,
children = void 0;
if (!element) {
console.warn('Kontainer.renderToString: null element.');
return;
}
type = element.type;
props = element.props;
children = props.children;
//console.log(`printProps enter. type=${type.COMPACT_NAME}`);
context.string += formatter.header(indent, type.COMPACT_NAME);
// Write self to the string.
(0, _keys2.default)(props).forEach(function (key) {
if (key === 'children' || key === 'type') {
return;
}
if (key === 'extendedType' && props.type !== 'uuid') {
return;
}
context.string += formatter.body(indent, key, props[key]);
});
// Write children to the array buffer.
context.indent++;
children.forEach(function (child) {
printProps(context, child);
});
context.indent--;
context.string += formatter.footer(indent, type.COMPACT_NAME);
//console.log(`printProps exit. type=${type.COMPACT_NAME}`);
}
function renderToBuffer(element) {
var size = void 0,
buffer = void 0,
context = {};
// Culculate the entire byte size.
size = traverse(context, element);
if (!size) {
return null;
}
// Write to the array buffer.
buffer = new _Buffer2.default(size);
traverse(context, element, buffer.getView());
return buffer.getData();
}
var defaultPropsFormatter = {
buffer: function buffer(v) {
if (global && global.Buffer) {
return '[Buffer length=' + v.length + ']';
}
return v;
},
isBuffer: function isBuffer(v) {
if (global && global.Buffer) {
return v instanceof global.Buffer;
}
return v instanceof ArrayBuffer;
},
padding: function padding(num) {
var str = '';
for (var i = 0; i < num; i++) {
str += '\t';
}
return str;
},
value: function value(v) {
var str = void 0;
if ((typeof v === 'undefined' ? 'undefined' : (0, _typeof3.default)(v)) === 'object' && !(v instanceof Date) && !defaultPropsFormatter.isBuffer(v)) {
str = '{';
(0, _keys2.default)(v).forEach(function (key) {
str += key + ': ' + defaultPropsFormatter.value(v[key]) + ', ';
});
return str + '}';
}
if (typeof v === 'string') {
return '"' + v + '"';
}
if (defaultPropsFormatter.isBuffer(v)) {
return defaultPropsFormatter.buffer(v);
}
return v;
},
array: function array(a) {
var str = '[ ';
if (a.length > 100) {
return str + ('array of length=' + a.length + ']');
}
a.forEach(function (v) {
if (v instanceof Array) {
str += defaultPropsFormatter.array(v);
} else {
str += defaultPropsFormatter.value(v);
}
str += ', ';
});
return str + ' ]';
},
header: function header(indentNum, typeName) {
return defaultPropsFormatter.padding(indentNum) + '[' + typeName + '] >>>> start' + '\n';
},
footer: function footer(indentNum, typeName) {
return defaultPropsFormatter.padding(indentNum) + '[' + typeName + '] <<<< end' + '\n';
},
body: function body(indentNum, key, value) {
var v = void 0;
if (value instanceof Array) {
v = defaultPropsFormatter.array(value);
} else {
v = defaultPropsFormatter.value(value);
}
return defaultPropsFormatter.padding(indentNum) + '\t' + key + ': ' + v + '\n';
}
};
function renderToString(element, propsFormatter) {
var context = {
string: '',
indent: 0,
formatter: propsFormatter || defaultPropsFormatter
};
printProps(context, element);
return context.string;
}
exports.default = {
renderToBuffer: renderToBuffer,
renderToString: renderToString,
IsoBmff: _IsoBmff2.default,
PropTypes: _PropTypes2.default,
Reader: _Reader2.default,
Writer: _Writer2.default
};