| 37 | |
| 38 | #[wasm_bindgen] |
| 39 | pub fn parse(source_text: String) -> Result<SerializableParserResult, serde_wasm_bindgen::Error> { |
| 40 | let allocator = Bump::default(); |
| 41 | let lexer = Lexer::new(&CssAtomSet::ATOMS, source_text.as_str()); |
| 42 | let result = Parser::new(&allocator, source_text.as_str(), lexer).parse_entirely::<StyleSheet>(); |
| 43 | let serializer = serde_wasm_bindgen::Serializer::json_compatible(); |
| 44 | let diagnostics = result |
| 45 | .errors |
| 46 | .iter() |
| 47 | .map(|err| { |
| 48 | let DiagnosticMeta { code, message, help, .. } = (err.formatter)(err, &source_text); |
| 49 | let span = err.start_cursor.span() + err.end_cursor.span(); |
| 50 | let from = span.start().into(); |
| 51 | let to = span.end().into(); |
| 52 | SerializableDiagnostic { |
| 53 | from, |
| 54 | to, |
| 55 | code: code.to_string(), |
| 56 | severity: err.severity.to_string(), |
| 57 | message, |
| 58 | help, |
| 59 | } |
| 60 | .serialize(&serializer) |
| 61 | .unwrap() |
| 62 | }) |
| 63 | .collect::<Vec<_>>(); |
| 64 | Ok(SerializableParserResult { ast: result.output.serialize(&serializer).unwrap(), diagnostics }) |
| 65 | } |
| 66 | |
| 67 | #[wasm_bindgen] |
| 68 | pub fn minify(source_text: String) -> Result<String, serde_wasm_bindgen::Error> { |