@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
JavaScript
;
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;