UNPKG

@storm-stack/plugin-system

Version:

A library used to create and manage a plugin-styled architecture in a TypeScript application.

64 lines (63 loc) 2.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createResolver = void 0; var _errors = require("@storm-stack/errors"); var _fileSystem = require("@storm-stack/file-system"); var _types = require("@storm-stack/types"); var _enhancedResolve = require("enhanced-resolve"); var _nodeFs = _interopRequireDefault(require("node:fs")); var _errors2 = require("../errors.cjs"); var _run = require("./run.cjs"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const createResolver = (rootPath = __dirname, tsconfig = "tsconfig.json", autoInstall = true) => { const tsconfigJson = (0, _fileSystem.loadTsConfigFile)(tsconfig.includes(rootPath) ? tsconfig : (0, _fileSystem.joinPaths)(rootPath, tsconfig)); const resolverFactory = _enhancedResolve.ResolverFactory.createResolver({ alias: tsconfigJson?.data?.compilerOptions?.paths, fileSystem: new _enhancedResolve.CachedInputFileSystem(_nodeFs.default, 4e3), extensions: [".js", ".cjs", ".mjs", ".jsx", ".json", ".node", ".ts", ".tsx"], mainFields: ["main", "module"], mainFiles: ["index"], descriptionFiles: ["package.json"] }); return request => { const resolveContext = { issuer: rootPath }; return new Promise((resolve, reject) => { resolverFactory.resolve(resolveContext, rootPath, request, {}, (error, result) => { if (error || !result || !(0, _types.isString)(result)) { if (autoInstall) { (0, _run.install)(request, rootPath).then(() => { resolverFactory.resolve(resolveContext, rootPath, request, {}, (innerError, innerResult) => { if (innerError) { reject(innerError); } else if (!innerResult || !(0, _types.isString)(innerResult)) { reject(_errors.StormError.create({ code: _errors2.PluginSystemErrorCode.module_not_found, message: `Cannot find plugin ${request}` })); } else { resolve(innerResult); } }); resolve(result); }); } if (error) { reject(error); } else { reject(_errors.StormError.create({ code: _errors2.PluginSystemErrorCode.module_not_found, message: `Cannot find plugin ${request}` })); } } else { resolve(result); } }); }); }; }; exports.createResolver = createResolver;