UNPKG

js-slang

Version:

Javascript-based implementations of Source, written in Typescript

51 lines 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRequireProvider = void 0; const _ = require("lodash"); const jsslang = require("../.."); const interpreter = require("../../cse-machine/interpreter"); const parser = require("../../parser/parser"); const stdlib = require("../../stdlib"); const types = require("../../types"); const assert = require("../../utils/assert"); const stringify = require("../../utils/stringify"); /** * Returns a function that simulates the job of Node's `require`. The require * provider is then used by Source modules to access the context and js-slang standard * library */ const getRequireProvider = (context) => (x) => { const pathSegments = x.split('/'); const recurser = (obj, segments) => { if (segments.length === 0) return obj; const currObj = obj[segments[0]]; if (currObj !== undefined) return recurser(currObj, segments.splice(1)); throw new Error(`Dynamic require of ${x} is not supported`); }; const exports = { 'js-slang': { ...jsslang, dist: { stdlib, types, utils: { assert, stringify }, parser: { parser }, 'cse-machine': { interpreter } }, context }, lodash: _ }; return recurser(exports, pathSegments); }; exports.getRequireProvider = getRequireProvider; //# sourceMappingURL=requireProvider.js.map