egg-ts-helper
Version:
egg typescript helper
168 lines • 13.6 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkConfigReturnType = checkConfigReturnType;
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const typescript_1 = __importDefault(require("typescript"));
const config_1 = require("../config");
const utils = __importStar(require("../utils"));
const base_1 = require("./base");
const EXPORT_DEFAULT_FUNCTION = 1;
const EXPORT_DEFAULT = 2;
const EXPORT = 3;
const globalCache = {};
class ConfigGenerator extends base_1.BaseGenerator {
buildParams(config) {
const { baseConfig } = this;
const fileList = config.fileList;
const cache = globalCache[baseConfig.id] = globalCache[baseConfig.id] || {};
if (!fileList.length)
return;
// skip when framework `egg >= 4.0.0`
if (baseConfig.framework === 'egg' && baseConfig.frameworkVersion && Number(baseConfig.frameworkVersion.split('.')[0]) >= 4) {
this.tsHelper.log(`skip gen \`typings/config/index.d.ts\` on ${baseConfig.framework}@${baseConfig.frameworkVersion}`);
return;
}
const importList = [];
const declarationList = [];
const moduleList = [];
fileList.forEach(f => {
const abUrl = node_path_1.default.resolve(config.dir, f);
// read from cache
if (!cache[abUrl] || config.file === abUrl) {
const skipLibCheck = !!baseConfig.tsConfig.skipLibCheck;
const { type, usePowerPartial } = checkConfigReturnType(abUrl);
// skip when not usePowerPartial and skipLibCheck in ts file
// because it maybe cause types error.
if (node_path_1.default.extname(f) !== '.js' && !usePowerPartial && !skipLibCheck)
return;
const { moduleName: sModuleName } = utils.getModuleObjByPath(f);
const moduleName = `Export${sModuleName}`;
const importContext = utils.getImportStr(config.dtsDir, abUrl, moduleName, type === EXPORT);
let tds = `type ${sModuleName} = `;
if (type === EXPORT_DEFAULT_FUNCTION) {
tds += `ReturnType<typeof ${moduleName}>;`;
}
else if (type === EXPORT_DEFAULT || type === EXPORT) {
tds += `typeof ${moduleName};`;
}
else {
return;
}
// cache the file
cache[abUrl] = {
import: importContext,
declaration: tds,
moduleName: sModuleName,
};
}
const cacheItem = cache[abUrl];
importList.push(cacheItem.import);
declarationList.push(cacheItem.declaration);
moduleList.push(cacheItem.moduleName);
});
return {
importList,
declarationList,
moduleList,
};
}
renderWithParams(config, params) {
const dist = node_path_1.default.resolve(config.dtsDir, 'index.d.ts');
if (!params)
return { dist };
if (!params.importList.length)
return { dist };
const { baseConfig } = this;
const { importList, declarationList, moduleList } = params;
const newConfigType = `New${config.interface}`;
return {
dist,
content: `import { ${config.interface} } from '${baseConfig.framework}';\n` +
`${importList.join('\n')}\n` +
`${declarationList.join('\n')}\n` +
`type ${newConfigType} = ${moduleList.join(' & ')};\n` +
`declare module '${baseConfig.framework}' {\n` +
` interface ${config.interface} extends ${newConfigType} { }\n` +
'}',
};
}
}
ConfigGenerator.defaultConfig = {
// only need to parse config.default.ts or config.ts
pattern: 'config(.default|).(ts|js)',
interface: config_1.declMapping.config,
};
exports.default = ConfigGenerator;
// check config return type.
function checkConfigReturnType(f) {
const result = utils.findExportNode(node_fs_1.default.readFileSync(f, 'utf-8'));
const resp = {
type: undefined,
usePowerPartial: false,
};
if (result.exportDefaultNode) {
const exportDefaultNode = result.exportDefaultNode;
if (typescript_1.default.isFunctionLike(exportDefaultNode)) {
if ((typescript_1.default.isFunctionDeclaration(exportDefaultNode) || typescript_1.default.isArrowFunction(exportDefaultNode)) && exportDefaultNode.body) {
exportDefaultNode.body.forEachChild(tNode => {
if (!resp.usePowerPartial && typescript_1.default.isVariableStatement(tNode)) {
// check wether use PowerPartial<EggAppInfo>
resp.usePowerPartial = !!tNode.declarationList.declarations.find(decl => {
let typeText = decl.type ? decl.type.getText() : undefined;
if (decl.initializer && typescript_1.default.isAsExpression(decl.initializer) && decl.initializer.type) {
typeText = decl.initializer.type.getText();
}
return !!(typeText && typeText.includes('PowerPartial') && typeText.includes('EggAppConfig'));
});
}
});
}
resp.type = EXPORT_DEFAULT_FUNCTION;
}
else {
resp.type = EXPORT_DEFAULT;
}
}
else if (result.exportNodeList.length) {
resp.type = EXPORT;
}
return resp;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEhBLHNEQWtDQztBQTVKRCxzREFBeUI7QUFDekIsMERBQTZCO0FBQzdCLDREQUE0QjtBQUc1QixzQ0FBd0M7QUFDeEMsZ0RBQWtDO0FBQ2xDLGlDQUF1QztBQUV2QyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sV0FBVyxHQUFxRCxFQUFFLENBQUM7QUFjekUsTUFBcUIsZUFBZ0IsU0FBUSxvQkFBZ0Q7SUFPM0YsV0FBVyxDQUFDLE1BQW1CO1FBQzdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFN0IscUNBQXFDO1FBQ3JDLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksVUFBVSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFF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