| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.program = exports.expression = exports.statement = exports.statements = exports.smart = void 0; |
| |
| function makeStatementFormatter(fn) { |
| return { |
| code: str => `/* @babel/template */;\n${str}`, |
| validate: () => {}, |
| unwrap: ast => { |
| return fn(ast.program.body.slice(1)); |
| } |
| }; |
| } |
| |
| const smart = makeStatementFormatter(body => { |
| if (body.length > 1) { |
| return body; |
| } else { |
| return body[0]; |
| } |
| }); |
| exports.smart = smart; |
| const statements = makeStatementFormatter(body => body); |
| exports.statements = statements; |
| const statement = makeStatementFormatter(body => { |
| if (body.length === 0) { |
| throw new Error("Found nothing to return."); |
| } |
| |
| if (body.length > 1) { |
| throw new Error("Found multiple statements but wanted one"); |
| } |
| |
| return body[0]; |
| }); |
| exports.statement = statement; |
| const expression = { |
| code: str => `(\n${str}\n)`, |
| validate: ({ |
| program |
| }) => { |
| if (program.body.length > 1) { |
| throw new Error("Found multiple statements but wanted one"); |
| } |
| |
| const expression = program.body[0].expression; |
| |
| if (expression.start === 0) { |
| throw new Error("Parse result included parens."); |
| } |
| }, |
| unwrap: ast => ast.program.body[0].expression |
| }; |
| exports.expression = expression; |
| const program = { |
| code: str => str, |
| validate: () => {}, |
| unwrap: ast => ast.program |
| }; |
| exports.program = program; |