import parse from './parse/index'; import validate from './validate/index'; import generate from './generators/dom/index'; import generateSSR from './generators/server-side-rendering/index'; import { assign } from './shared/index.js'; import { version } from '../package.json'; import Stylesheet from './css/Stylesheet'; import { Parsed, CompileOptions, Warning } from './interfaces'; function normalizeOptions(options: CompileOptions): CompileOptions { let normalizedOptions = assign({ generate: 'dom' }, options); const { onwarn, onerror } = normalizedOptions; normalizedOptions.onwarn = onwarn ? (warning: Warning) => onwarn(warning, defaultOnwarn) : defaultOnwarn; normalizedOptions.onerror = onerror ? (error: Error) => onerror(error, defaultOnerror) : defaultOnerror; return normalizedOptions; } function defaultOnwarn(warning: Warning) { if (warning.loc) { console.warn( `(${warning.loc.line}:${warning.loc.column}) – ${warning.message}` ); // eslint-disable-line no-console } else { console.warn(warning.message); // eslint-disable-line no-console } } function defaultOnerror(error: Error) { throw error; } export function compile(source: string, _options: CompileOptions) { const options = normalizeOptions(_options); let parsed: Parsed; try { parsed = parse(source, options); } catch (err) { options.onerror(err); return; } const stylesheet = new Stylesheet(source, parsed, options.filename, options.cascade !== false); validate(parsed, source, stylesheet, options); const compiler = options.generate === 'ssr' ? generateSSR : generate; return compiler(parsed, source, stylesheet, options); } export function create(source: string, _options: CompileOptions = {}) { _options.format = 'eval'; const compiled = compile(source, _options); if (!compiled || !compiled.code) { return; } try { return (0,eval)(compiled.code); } catch (err) { if (_options.onerror) { _options.onerror(err); return; } else { throw err; } } } export { parse, validate, version as VERSION };