| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import makeLegalIdentifier from './makeLegalIdentifier';
-
- function serializeArray (arr, indent, baseIndent) {
- let output = '[';
- const separator = indent ? '\n' + baseIndent + indent : '';
- for (let i = 0; i < arr.length; i++) {
- const key = arr[i];
- output += `${ i > 0 ? ',' : '' }${ separator }${ serialize(key, indent, baseIndent + indent) }`;
- }
- return output + `${ indent ? '\n' + baseIndent : '' }]`;
- }
-
- function serializeObject (obj, indent, baseIndent) {
- let output = '{';
- const separator = indent ? '\n' + baseIndent + indent : '';
- const keys = Object.keys(obj);
- for (let i = 0; i < keys.length; i++) {
- const key = keys[i];
- const stringKey = makeLegalIdentifier(key) === key ? key : JSON.stringify(key);
- output += `${ i > 0 ? ',' : '' }${ separator }${ stringKey }:${ indent ? ' ' : '' }${ serialize(obj[key], indent, baseIndent + indent) }`;
- }
- return output + `${ indent ? '\n' + baseIndent : '' }}`;
- }
-
- function serialize (obj, indent, baseIndent) {
- if (obj === Infinity)
- return 'Infinity';
- if (obj instanceof Date)
- return 'new Date(' + obj.getTime() + ')';
- if (obj instanceof RegExp)
- return obj.toString();
- if (typeof obj === 'number' && isNaN(obj))
- return 'NaN';
- if (Array.isArray(obj))
- return serializeArray(obj, indent, baseIndent);
- if (obj === null)
- return 'null';
- if (typeof obj === 'object')
- return serializeObject(obj, indent, baseIndent);
- return JSON.stringify(obj);
- }
-
- // convert data object into separate named exports (and default)
- export default function dataToNamedExports (data, options = {}) {
- const t = options.compact ? '' : 'indent' in options ? options.indent : '\t';
- const _ = options.compact ? '' : ' ';
- const n = options.compact ? '' : '\n';
- const declarationType = options.preferConst ? 'const' : 'var';
-
- if (options.namedExports === false || typeof data !== 'object' || Array.isArray(data) || data === null)
- return `export default${ _ }${ serialize( data, options.compact ? null : t, '' ) };`;
-
- let namedExportCode = '';
- const defaultExportRows = [];
- const dataKeys = Object.keys(data);
- for (let i = 0; i < dataKeys.length; i++) {
- const key = dataKeys[i];
- if (key === makeLegalIdentifier(key)) {
- if (options.objectShorthand)
- defaultExportRows.push(key);
- else
- defaultExportRows.push(`${ key }:${ _ }${ key }`);
- namedExportCode += `export ${declarationType} ${key}${ _ }=${ _ }${ serialize(data[key], options.compact ? null : t, '') };${ n }`;
- } else {
- defaultExportRows.push(`${ JSON.stringify(key) }: ${ serialize(data[key], options.compact ? null : t, '')}`);
- }
- }
- return namedExportCode + `export default${ _ }{${ n }${ t }${ defaultExportRows.join(`,${ n }${ t }`) }${ n }};${ n }`;
- }
|