UNPKG

2.24 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _isNan = require('babel-runtime/core-js/number/is-nan');
8
9var _isNan2 = _interopRequireDefault(_isNan);
10
11var _typeof2 = require('babel-runtime/helpers/typeof');
12
13var _typeof3 = _interopRequireDefault(_typeof2);
14
15exports.test = test;
16exports.build = build;
17
18var _babelTemplate = require('babel-template');
19
20var _babelTemplate2 = _interopRequireDefault(_babelTemplate);
21
22var _babelTypes = require('babel-types');
23
24function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26/*!
27 * Copyright (c) 2015-2017 Cisco Systems, Inc. See LICENSE file.
28 */
29
30var pattern = /^\s*?=>( async)?\s*/;
31
32var tpl = (0, _babelTemplate2.default)('\n (function() {\n var assert = require(\'assert\');\n assert.equal(result, ASSERTION);\n })();\n');
33
34/**
35 * Indicates whether the specified value defines a literal assertion
36 * @param {string} value
37 * @returns {Boolean}
38 */
39function test(value) {
40 return pattern.test(value);
41}
42
43/**
44 * Builds a literal assertion
45 * @param {string} value
46 * @returns {ast}
47 */
48function build(value) {
49 return tpl({
50 ASSERTION: literal(value.replace(pattern, ''))
51 });
52}
53
54/**
55 * Coerces a string into a type
56 * @param {string} l
57 * @returns {Literal}
58 */
59function literal(l) {
60 /* eslint complexity: [0] */
61 // eslint-disable-next-line prefer-const
62 var f = void 0,
63 i = void 0;
64 switch (typeof l === 'undefined' ? 'undefined' : (0, _typeof3.default)(l)) {
65 case 'boolean':
66 return (0, _babelTypes.booleanLiteral)(l);
67 case 'number':
68 return (0, _babelTypes.numericLiteral)(l);
69 case 'string':
70 if (l === 'true') {
71 return (0, _babelTypes.booleanLiteral)(true);
72 }
73 if (l === 'false') {
74 return (0, _babelTypes.booleanLiteral)(false);
75 }
76 i = parseInt(l, 10);
77 if (!(0, _isNan2.default)(i)) {
78 return (0, _babelTypes.numericLiteral)(i);
79 }
80 f = parseFloat(l);
81 if (!(0, _isNan2.default)(f)) {
82 return (0, _babelTypes.numericLiteral)(f);
83 }
84 return (0, _babelTypes.stringLiteral)(l);
85 default:
86 throw new Error('Unsupported literal type');
87 }
88}
89//# sourceMappingURL=literal.js.map