| 'use strict'; |
| exports.__esModule = true; |
| |
| const pattern = /(^|;)\s*(export|import)((\s+\w)|(\s*[{*=]))|import\(/m; |
| /** |
| * detect possible imports/exports without a full parse. |
| * |
| * A negative test means that a file is definitely _not_ a module. |
| * A positive test means it _could_ be. |
| * |
| * Not perfect, just a fast way to disqualify large non-ES6 modules and |
| * avoid a parse. |
| * @type {RegExp} |
| */ |
| exports.test = function isMaybeUnambiguousModule(content) { |
| return pattern.test(content); |
| }; |
| |
| // future-/Babel-proof at the expense of being a little loose |
| const unambiguousNodeType = /^(?:(?:Exp|Imp)ort.*Declaration|TSExportAssignment)$/; |
| |
| /** |
| * Given an AST, return true if the AST unambiguously represents a module. |
| * @param {Program node} ast |
| * @return {Boolean} |
| */ |
| exports.isModule = function isUnambiguousModule(ast) { |
| return ast.body && ast.body.some(node => unambiguousNodeType.test(node.type)); |
| }; |