UNPKG

@tsclean/core

Version:

Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.

85 lines (81 loc) 15.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.INVALID_EXCEPTION_FILTER = exports.UNKNOWN_REQUEST_MAPPING = exports.INVALID_MIDDLEWARE_CONFIGURATION = exports.INVALID_CLASS_SCOPE_MESSAGE = exports.INVALID_CLASS_MESSAGE = exports.UNKNOWN_EXPORT_MESSAGE = exports.UNDEFINED_MODULE_MESSAGE = exports.INVALID_MODULE_MESSAGE = exports.UNDEFINED_FORWARD_REF_MESSAGE = exports.INVALID_MIDDLEWARE_MESSAGE = exports.UNKNOWN_DEPENDENCIES_MESSAGE = void 0; const utils_1 = require("../utils"); const getInstanceName = (instance) => { var _a; if (instance === null || instance === void 0 ? void 0 : instance.forwardRef) { return (_a = instance.forwardRef()) === null || _a === void 0 ? void 0 : _a.name; } return instance === null || instance === void 0 ? void 0 : instance.name; }; const getDependencyName = (dependency) => getInstanceName(dependency) || ((0, utils_1.isSymbol)(dependency) && dependency.toString()) || dependency || '+'; const getModuleName = (module) => (module && getInstanceName(module.metaType)) || 'current'; const stringifyScope = (scope) => (scope || []).map(getInstanceName).join(' -> '); const UNKNOWN_DEPENDENCIES_MESSAGE = (type, unknownDependencyContext, module) => { const { index, name = 'dependency', dependencies, key, } = unknownDependencyContext; const moduleName = getModuleName(module) || 'Module'; const dependencyName = getDependencyName(name); let message = `TSClean can't resolve dependencies of the ${type.toString()}`; const potentialSolutions = `\n Potential solutions: - If ${dependencyName} is a constant that you must include in the file src/infrastructure/driven-adapters/providers/index.ts export const adapters = [ { provide: ${dependencyName}, useClass: ClassAdapter }, ] `; if ((0, utils_1.isNil)(index)) { message += `. Please make sure that the "${key.toString()}" property is available in the current context.${potentialSolutions}`; return message; } const dependenciesName = (dependencies || []).map(getDependencyName); dependenciesName[index] = '?'; message += ` (`; message += dependenciesName.join(', '); message += `). Please make sure that the argument ${dependencyName} at index [${index}] is available in the ${getModuleName(module)} context.`; message += potentialSolutions; return message; }; exports.UNKNOWN_DEPENDENCIES_MESSAGE = UNKNOWN_DEPENDENCIES_MESSAGE; const INVALID_MIDDLEWARE_MESSAGE = (text, name) => `The middleware doesn't provide the 'use' method (${name})`; exports.INVALID_MIDDLEWARE_MESSAGE = INVALID_MIDDLEWARE_MESSAGE; const UNDEFINED_FORWARD_REF_MESSAGE = (scope) => `TSClean cannot create the module instance. Often, this is because of a circular dependency between modules. Use forwardRef() to avoid it. Scope [${stringifyScope(scope)}] `; exports.UNDEFINED_FORWARD_REF_MESSAGE = UNDEFINED_FORWARD_REF_MESSAGE; const INVALID_MODULE_MESSAGE = (parentModule, index, scope) => { const parentModuleName = (parentModule === null || parentModule === void 0 ? void 0 : parentModule.name) || 'module'; return `TSClean cannot create the ${parentModuleName} instance. Received an unexpected value at index [${index}] of the ${parentModuleName} "imports" array. Scope [${stringifyScope(scope)}]`; }; exports.INVALID_MODULE_MESSAGE = INVALID_MODULE_MESSAGE; const UNDEFINED_MODULE_MESSAGE = (parentModule, index, scope) => { const parentModuleName = (parentModule === null || parentModule === void 0 ? void 0 : parentModule.name) || 'module'; return `TSClean cannot create the ${parentModuleName} instance. The module at index [${index}] of the ${parentModuleName} "imports" array is undefined. Potential causes: - The module at index [${index}] is of type "undefined". Check your import statements and the type of the module. Scope [${stringifyScope(scope)}]`; }; exports.UNDEFINED_MODULE_MESSAGE = UNDEFINED_MODULE_MESSAGE; const UNKNOWN_EXPORT_MESSAGE = (token = 'item', module) => { token = (0, utils_1.isSymbol)(token) ? token.toString() : token; return `TSClean cannot export a provider/module that is not a part of the currently processed module (${module}). Please verify whether the exported ${token} is available in this particular context. Possible Solutions: - Is ${token} part of the relevant providers/imports within ${module}? `; }; exports.UNKNOWN_EXPORT_MESSAGE = UNKNOWN_EXPORT_MESSAGE; const INVALID_CLASS_MESSAGE = (text, value) => `ModuleRef cannot instantiate class (${value} is not constructable).`; exports.INVALID_CLASS_MESSAGE = INVALID_CLASS_MESSAGE; const INVALID_CLASS_SCOPE_MESSAGE = (text, name) => `${name || 'This class'} is marked as a scoped provider. Request and transient-scoped providers can't be used in combination with "get()" method. Please, use "resolve()" instead.`; exports.INVALID_CLASS_SCOPE_MESSAGE = INVALID_CLASS_SCOPE_MESSAGE; exports.INVALID_MIDDLEWARE_CONFIGURATION = `An invalid middleware configuration has been passed inside the module 'configure()' method.`; exports.UNKNOWN_REQUEST_MAPPING = `An invalid controller has been detected. Perhaps, one of your controllers is missing @Mapping() decorator.`; exports.INVALID_EXCEPTION_FILTER = `Invalid exception filters (@UseFilters()).`; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3JzL21lc3NhZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLG9DQUF5QztBQUV6QyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQVUsRUFBRTs7SUFDbEQsSUFBSyxRQUFzQyxhQUF0QyxRQUFRLHVCQUFSLFFBQVEsQ0FBZ0MsVUFBVSxFQUFFLENBQUM7UUFDdEQsT0FBTyxNQUFDLFFBQXNDLENBQUMsVUFBVSxFQUFFLDBDQUFFLElBQUksQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBUSxRQUFzQixhQUF0QixRQUFRLHVCQUFSLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUE4QixFQUFVLEVBQUUsQ0FDakUsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBQSxnQkFBUSxFQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RSxVQUFxQixJQUFJLEdBQUcsQ0FBQztBQUVsQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUVwRyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQVksRUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUUxRixNQUFNLDRCQUE0QixHQUFHLENBQ3hDLElBQXFCLEVBQUUsd0JBQW1ELEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDOUYsTUFBTSxFQUNGLEtBQUssRUFDTCxJQUFJLEdBQUcsWUFBWSxFQUNuQixZQUFZLEVBQ1osR0FBRyxHQUNO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QUFxQixHQUFHLENBQUMsSUFBMEIsRUFBRSxLQUFVLEVBQUUsRUFBRSxDQUM1RSx1Q0FBdUMsS0FBSyx5QkFBeUIsQ0FBQztBQUQ3RCxRQUFBLHFCQUFxQix5QkFDd0M7QUFFbkUsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLElBQTBCLEVBQUUsSUFBd0IsRUFBRSxFQUFFLENBQ2hHLEdBQ0ksSUFBSSxJQUFJLFlBQ1osNEpBQTRKLENBQUM7QUFIcEosUUFBQSwyQkFBMkIsK0JBR3lIO0FBRXBKLFFBQUEsZ0NBQWdDLEdBQUcsNkZBQTZGLENBQUM7QUFDakksUUFBQSx1QkFBdUIsR0FBRyw0R0FBNEcsQ0FBQztBQUN2SSxRQUFBLHdCQUF3QixHQUFHLDRDQUE0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbmplY3RvckRlcGVuZGVuY3ksXG4gICAgSW5qZWN0b3JEZXBlbmRlbmN5Q29udGV4dCxcbiAgICBNb2R1bGVcbn0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQge0ZvcndhcmRSZWZlcmVuY2VJbnRlcmZhY2UsIFR5cGV9IGZyb20gXCIuLi9jb250cmFjdHNcIjtcbmltcG9ydCB7aXNOaWwsIGlzU3ltYm9sfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgZ2V0SW5zdGFuY2VOYW1lID0gKGluc3RhbmNlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAoKGluc3RhbmNlIGFzIEZvcndhcmRSZWZlcmVuY2VJbnRlcmZhY2UpPy5mb3J3YXJkUmVmKSB7XG4gICAgICAgIHJldHVybiAoaW5zdGFuY2UgYXMgRm9yd2FyZFJlZmVyZW5jZUludGVyZmFjZSkuZm9yd2FyZFJlZigpPy5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gKGluc3RhbmNlIGFzIFR5cGU8YW55Pik/Lm5hbWU7XG59O1xuXG5jb25zdCBnZXREZXBlbmRlbmN5TmFtZSA9IChkZXBlbmRlbmN5OiBJbmplY3RvckRlcGVuZGVuY3kpOiBzdHJpbmcgPT5cbiAgICBnZXRJbnN0YW5jZU5hbWUoZGVwZW5kZW5jeSkgfHwgKGlzU3ltYm9sKGRlcGVuZGVuY3kpICYmIGRlcGVuZGVuY3kudG9TdHJpbmcoKSkgfHxcbiAgICAoZGVwZW5kZW5jeSBhcyBzdHJpbmcpIHx8ICcrJztcblxuY29uc3QgZ2V0TW9kdWxlTmFtZSA9IChtb2R1bGU6IE1vZHVsZSkgPT4gKG1vZHVsZSAmJiBnZXRJbnN0YW5jZU5hbWUobW9kdWxlLm1ldGFUeXBlKSkgfHwgJ2N1cnJlbnQnO1xuXG5jb25zdCBzdHJpbmdpZnlTY29wZSA9IChzY29wZTogYW55W10pOiBzdHJpbmcgPT4gKHNjb3BlIHx8IFtdKS5tYXAoZ2V0SW5zdGFuY2VOYW1lKS5qb2luKCcgLT4gJyk7XG5cbmV4cG9ydCBjb25zdCBVTktOT1dOX0RFUEVOREVOQ0lFU19NRVNTQUdFID0gKFxuICAgIHR5cGU6IHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bkRlcGVuZGVuY3lDb250ZXh0OiBJbmplY3RvckRlcGVuZGVuY3lDb250ZXh0LCBtb2R1bGU6IE1vZHVsZSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG5hbWUgPSAnZGVwZW5kZW5jeScsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAga2V5LFxuICAgIH0gPSB1bmtub3duRGVwZW5kZW5jeUNvbnRleHQ7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IGdldE1vZHVsZU5hbWUobW9kdWxlKSB8fCAnTW9kdWxlJztcbiAgICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGdldERlcGVuZGVuY3lOYW1lKG5hbWUpO1xuXG4gICAgbGV0IG1lc3NhZ2UgPSBgVFNDbGVhbiBjYW4ndCByZXNvbHZlIGRlcGVuZGVuY2llcyBvZiB0aGUgJHt0eXBlLnRvU3RyaW5nKCl9YDtcblxuICAgIGNvbnN0IHBvdGVudGlhbFNvbHV0aW9ucyA9IGBcXG5cblBvdGVudGlhbCBzb2x1dGlvbnM6XG4tIElmICR7ZGVwZW5kZW5jeU5hbWV9IGlzIGEgY29uc3RhbnQgdGhhdCB5b3UgbXVzdCBpbmNsdWRlIGluIHRoZSBmaWxlIHNyYy9pbmZyYXN0cnVjdHVyZS9kcml2ZW4tYWRhcHRlcnMvcHJvdmlkZXJzL2luZGV4LnRzICBcbiAgZXhwb3J0IGNvbnN0IGFkYXB0ZXJzID0gW1xuICAgIHtcbiAgICAgICAgcHJvdmlkZTogJHtkZXBlbmRlbmN5TmFtZX0sXG4gICAgICAgIHVzZUNsYXNzOiBDbGFzc0FkYXB0ZXJcbiAgICB9LFxuICBdXG5gO1xuXG4gICAgaWYgKGlzTmlsKGluZGV4KSkge1xuICAgICAgICBtZXNzYWdlICs9IGAuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgXCIke2tleS50b1N0cmluZygpfVwiIHByb3BlcnR5IGlzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LiR7cG90ZW50aWFsU29sdXRpb25zfWA7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBjb25zdCBkZXBlbmRlbmNpZXNOYW1lID0gKGRlcGVuZGVuY2llcyB8fCBbXSkubWFwKGdldERlcGVuZGVuY3lOYW1lKTtcbiAgICBkZXBlbmRlbmNpZXNOYW1lW2luZGV4XSA9ICc/JztcblxuICAgIG1lc3NhZ2UgKz0gYCAoYDtcbiAgICBtZXNzYWdlICs9IGRlcGVuZGVuY2llc05hbWUuam9pbignLCAnKTtcbiAgICBtZXNzYWdlICs9IGApLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIGFyZ3VtZW50ICR7ZGVwZW5kZW5jeU5hbWV9IGF0IGluZGV4IFske2luZGV4fV0gaXMgYXZhaWxhYmxlIGluIHRoZSAke2dldE1vZHVsZU5hbWUoXG4gICAgICAgIG1vZHVsZSxcbiAgICApfSBjb250ZXh0LmA7XG4gICAgbWVzc2FnZSArPSBwb3RlbnRpYWxTb2x1dGlvbnM7XG5cbiAgICByZXR1cm4gbWVzc2FnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlZBTElEX01JRERMRVdBUkVfTUVTU0FHRSA9ICh0ZXh0OiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgbmFtZTogc3RyaW5nKSA9PlxuICAgIGBUaGUgbWlkZGxld2FyZSBkb2Vzbid0IHByb3ZpZGUgdGhlICd1c2UnIG1ldGhvZCAoJHtuYW1lfSlgO1xuXG5leHBvcnQgY29uc3QgVU5ERUZJTkVEX0ZPUldBUkRfUkVGX01FU1NBR0UgPSAoc2NvcGU6IFR5cGU8YW55PltdKSA9PlxuICAgIGBUU0NsZWFuIGNhbm5vdCBjcmVhdGUgdGhlIG1vZHVsZSBpbnN0YW5jZS4gT2Z0ZW4sIHRoaXMgaXMgYmVjYXVzZSBvZiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBtb2R1bGVzLiBVc2UgZm9yd2FyZFJlZigpIHRvIGF2b2lkIGl0LlxuU2NvcGUgWyR7c3RyaW5naWZ5U2NvcGUoc2NvcGUpfV1cbiAgYDtcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfTU9EVUxFX01FU1NBR0UgPSAoXG4gICAgcGFyZW50TW9kdWxlOiBhbnksIGluZGV4OiBudW1iZXIsIHNjb3BlOiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudE1vZHVsZU5hbWUgPSBwYXJlbnRNb2R1bGU/Lm5hbWUgfHwgJ21vZHVsZSc7XG5cbiAgICByZXR1cm4gYFRTQ2xlYW4gY2Fubm90IGNyZWF0ZSB0aGUgJHtwYXJlbnRNb2R1bGVOYW1lfSBpbnN0YW5jZS5cblJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgdmFsdWUgYXQgaW5kZXggWyR7aW5kZXh9XSBvZiB0aGUgJHtwYXJlbnRNb2R1bGVOYW1lfSBcImltcG9ydHNcIiBhcnJheS4gXG5cblNjb3BlIFske3N0cmluZ2lmeVNjb3BlKHNjb3BlKX1dYDtcbn07XG5cbmV4cG9ydCBjb25zdCBVTkRFRklORURfTU9EVUxFX01FU1NBR0UgPSAocGFyZW50TW9kdWxlOiBhbnksIGluZGV4OiBudW1iZXIsIHNjb3BlOiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudE1vZHVsZU5hbWUgPSBwYXJlbnRNb2R1bGU/Lm5hbWUgfHwgJ21vZHVsZSc7XG5cbiAgICByZXR1cm4gYFRTQ2xlYW4gY2Fubm90IGNyZWF0ZSB0aGUgJHtwYXJlbnRNb2R1bGVOYW1lfSBpbnN0YW5jZS5cblRoZSBtb2R1bGUgYXQgaW5kZXggWyR7aW5kZXh9XSBvZiB0aGUgJHtwYXJlbnRNb2R1bGVOYW1lfSBcImltcG9ydHNcIiBhcnJheSBpcyB1bmRlZmluZWQuXG5cblBvdGVudGlhbCBjYXVzZXM6XG4tIFRoZSBtb2R1bGUgYXQgaW5kZXggWyR7aW5kZXh9XSBpcyBvZiB0eXBlIFwidW5kZWZpbmVkXCIuIENoZWNrIHlvdXIgaW1wb3J0IHN0YXRlbWVudHMgYW5kIHRoZSB0eXBlIG9mIHRoZSBtb2R1bGUuXG5cblNjb3BlIFske3N0cmluZ2lmeVNjb3BlKHNjb3BlKX1dYDtcbn07XG5cbmV4cG9ydCBjb25zdCBVTktOT1dOX0VYUE9SVF9NRVNTQUdFID0gKHRva2VuOiBzdHJpbmcgfCBzeW1ib2wgPSAnaXRlbScsIG1vZHVsZTogc3RyaW5nKSA9PiB7XG4gICAgdG9rZW4gPSBpc1N5bWJvbCh0b2tlbikgPyB0b2tlbi50b1N0cmluZygpIDogdG9rZW47XG5cbiAgICByZXR1cm4gYFRTQ2xlYW4gY2Fubm90IGV4cG9ydCBhIHByb3ZpZGVyL21vZHVsZSB0aGF0IGlzIG5vdCBhIHBhcnQgb2YgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgbW9kdWxlICgke21vZHVsZX0pLiBQbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhlIGV4cG9ydGVkICR7dG9rZW59IGlzIGF2YWlsYWJsZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC5cblxuUG9zc2libGUgU29sdXRpb25zOlxuLSBJcyAke3Rva2VufSBwYXJ0IG9mIHRoZSByZWxldmFudCBwcm92aWRlcnMvaW1wb3J0cyB3aXRoaW4gJHttb2R1bGV9P1xuYDtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlZBTElEX0NMQVNTX01FU1NBR0UgPSAodGV4dDogVGVtcGxhdGVTdHJpbmdzQXJyYXksIHZhbHVlOiBhbnkpID0+XG4gICAgYE1vZHVsZVJlZiBjYW5ub3QgaW5zdGFudGlhdGUgY2xhc3MgKCR7dmFsdWV9IGlzIG5vdCBjb25zdHJ1Y3RhYmxlKS5gO1xuXG5leHBvcnQgY29uc3QgSU5WQUxJRF9DTEFTU19TQ09QRV9NRVNTQUdFID0gKHRleHQ6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+XG4gICAgYCR7XG4gICAgICAgIG5hbWUgfHwgJ1RoaXMgY2xhc3MnXG4gICAgfSBpcyBtYXJrZWQgYXMgYSBzY29wZWQgcHJvdmlkZXIuIFJlcXVlc3QgYW5kIHRyYW5zaWVudC1zY29wZWQgcHJvdmlkZXJzIGNhbid0IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBcImdldCgpXCIgbWV0aG9kLiBQbGVhc2UsIHVzZSBcInJlc29sdmUoKVwiIGluc3RlYWQuYDtcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfTUlERExFV0FSRV9DT05GSUdVUkFUSU9OID0gYEFuIGludmFsaWQgbWlkZGxld2FyZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHBhc3NlZCBpbnNpZGUgdGhlIG1vZHVsZSAnY29uZmlndXJlKCknIG1ldGhvZC5gO1xuZXhwb3J0IGNvbnN0IFVOS05PV05fUkVRVUVTVF9NQVBQSU5HID0gYEFuIGludmFsaWQgY29udHJvbGxlciBoYXMgYmVlbiBkZXRlY3RlZC4gUGVyaGFwcywgb25lIG9mIHlvdXIgY29udHJvbGxlcnMgaXMgbWlzc2luZyBATWFwcGluZygpIGRlY29yYXRvci5gO1xuZXhwb3J0IGNvbnN0IElOVkFMSURfRVhDRVBUSU9OX0ZJTFRFUiA9IGBJbnZhbGlkIGV4Y2VwdGlvbiBmaWx0ZXJzIChAVXNlRmlsdGVycygpKS5gO1xuIl19