UNPKG

js-slang

Version:

Javascript-based implementations of Source, written in Typescript

60 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getImportedName = exports.getIdsFromDeclaration = exports.extractIdsFromPattern = exports.filterImportDeclarations = exports.getModuleDeclarationSource = void 0; const assert_1 = require("../assert"); const walkers_1 = require("../walkers"); const dict_1 = require("../dict"); const typeGuards_1 = require("./typeGuards"); function getModuleDeclarationSource(node) { (0, assert_1.default)(typeof node.source?.value === 'string', `Expected ${node.type} to have a source value of type string, got ${node.source?.value}`); return node.source.value; } exports.getModuleDeclarationSource = getModuleDeclarationSource; /** * Filters out all import declarations from a program, and sorts them by * the module they import from */ function filterImportDeclarations({ body }) { return body.reduce(([importNodes, otherNodes], node) => { if (!(0, typeGuards_1.isImportDeclaration)(node)) return [importNodes, [...otherNodes, node]]; const moduleName = getModuleDeclarationSource(node); importNodes.add(moduleName, node); return [importNodes, otherNodes]; }, [new dict_1.ArrayMap(), []]); } exports.filterImportDeclarations = filterImportDeclarations; function extractIdsFromPattern(pattern) { const identifiers = []; (0, walkers_1.simple)(pattern, { Identifier: (node) => { identifiers.push(node); } }); return identifiers; } exports.extractIdsFromPattern = extractIdsFromPattern; function getIdsFromDeclaration(decl, allowNull) { const rawIds = (0, typeGuards_1.isVariableDeclaration)(decl) ? decl.declarations.flatMap(({ id }) => extractIdsFromPattern(id)) : [decl.id]; if (!allowNull) { rawIds.forEach(each => { (0, assert_1.default)(each !== null, 'Encountered a null identifier!'); }); } return rawIds; } exports.getIdsFromDeclaration = getIdsFromDeclaration; const getImportedName = (spec) => { switch (spec.type) { case 'ImportDefaultSpecifier': return 'default'; case 'ImportSpecifier': return spec.imported.name; case 'ExportSpecifier': return spec.local.name; } }; exports.getImportedName = getImportedName; //# sourceMappingURL=helpers.js.map