UNPKG

nestjs-auto-reflect-metadata-emitter

Version:

[![Actions Status](https://github.com/Codibre/nestjs-auto-reflect-metadata-emitter/workflows/build/badge.svg)](https://github.com/Codibre/nestjs-auto-reflect-metadata-emitter/actions) [![Actions Status](https://github.com/Codibre/nestjs-auto-reflect-metad

170 lines 7.96 kB
"use strict"; 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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.before = before; exports.simpleDecorator = simpleDecorator; const ts = __importStar(require("typescript")); const module_exists_1 = require("./module-exists"); const ts_loader_1 = require("./ts-loader"); function addRef(p, imports, mustImport) { if (p.type) { const ref = imports.get(p.type.getText()); if (ref) mustImport.add(ref); } } function* emitPropertyAssignments(obj) { for (const k in obj) { if (k in obj) { yield ts_loader_1.tsBinary.factory.createPropertyAssignment(k, obj[k] ? ts_loader_1.tsBinary.factory.createTrue() : ts_loader_1.tsBinary.factory.createFalse()); } } } function getProperties(node) { const modifiers = new Set(); for (const modifier of ts_loader_1.tsBinary.getModifiers(node) ?? []) { modifiers.add(modifier.kind); } const access = { private: modifiers.has(ts.SyntaxKind.PrivateKeyword), protected: modifiers.has(ts.SyntaxKind.ProtectedKeyword), }; const properties = { exported: modifiers.has(ts.SyntaxKind.ExportKeyword), ...access, public: !access.private && !access.protected, readonly: modifiers.has(ts.SyntaxKind.ReadonlyKeyword), static: modifiers.has(ts.SyntaxKind.StaticKeyword), abstract: modifiers.has(ts.SyntaxKind.AbstractKeyword), accessor: modifiers.has(ts.SyntaxKind.AccessorKeyword), async: modifiers.has(ts.SyntaxKind.AsyncKeyword), const: modifiers.has(ts.SyntaxKind.ConstKeyword), override: modifiers.has(ts.SyntaxKind.OverrideKeyword), }; return [ ...emitPropertyAssignments(properties), ]; } function addParameterRefs(node, imports, mustImport) { for (const p of node.parameters) { addRef(p, imports, mustImport); } } function before() { return (ctx) => { return (sf) => { const imports = new Map(); const mustImport = new Set(); const visitNode = (node) => { try { if (ts_loader_1.tsBinary.isImportClause(node)) { const { namedBindings } = node; if (namedBindings) { for (const item of ts.isNamedImports(namedBindings) ? namedBindings.elements : []) { imports.set(item.name.getText(), node); } } } else if (ts_loader_1.tsBinary.isMethodDeclaration(node) || ts_loader_1.tsBinary.isPropertyDeclaration(node) || ts_loader_1.tsBinary.isClassDeclaration(node)) { let identifier; const modifiers = getProperties(node); if (!ts_loader_1.tsBinary.isClassDeclaration(node)) { if (node.type) addRef(node, imports, mustImport); if (ts_loader_1.tsBinary.isMethodDeclaration(node)) { addParameterRefs(node, imports, mustImport); identifier = 'registerMethodMetadata'; } else { identifier = 'registerPropertyMetadata'; } } else { identifier = 'registerClassMetadata'; for (const member of node.members) { if (ts_loader_1.tsBinary.isConstructorDeclaration(member)) { addParameterRefs(member, imports, mustImport); break; } } } const requireCall = ts_loader_1.tsBinary.factory.createCallExpression(ts_loader_1.tsBinary.factory.createIdentifier('require'), undefined, [ ts_loader_1.tsBinary.factory.createStringLiteral('nestjs-auto-reflect-metadata-emitter/decorators'), ]); const decoratorAccess = ts_loader_1.tsBinary.factory.createPropertyAccessChain(requireCall, undefined, ts_loader_1.tsBinary.factory.createIdentifier(identifier)); const decoratorCall = ts_loader_1.tsBinary.factory.createCallExpression(decoratorAccess, undefined, [ts_loader_1.tsBinary.factory.createObjectLiteralExpression(modifiers)]); const decorator = ts_loader_1.tsBinary.factory.createDecorator(decoratorCall); node = ts_loader_1.tsBinary.factory.replaceDecoratorsAndModifiers(node, [ ...(node.modifiers ?? []), decorator, ]); return ts_loader_1.tsBinary.isClassDeclaration(node) ? ts_loader_1.tsBinary.visitEachChild(node, visitNode, ctx) : node; } return ts_loader_1.tsBinary.visitEachChild(node, visitNode, ctx); } catch (err) { console.log(err.stack); return node; } }; const processImports = (node) => { try { if (ts_loader_1.tsBinary.isImportClause(node) && (0, module_exists_1.moduleExists)(sf, node.parent.moduleSpecifier.text)) { const { namedBindings } = node; if (namedBindings) { for (const item of ts.isNamedImports(namedBindings) ? namedBindings.elements : []) { item.symbol.flags |= 33554432; item.symbol.links = { referenced: true }; break; } } return ts_loader_1.tsBinary.factory.updateImportClause(node, false, node.name, node.namedBindings); } return ts_loader_1.tsBinary.visitEachChild(node, processImports, ctx); } catch (err) { console.log(err.stack); return node; } }; const nodeResult = ts_loader_1.tsBinary.visitNode(sf, visitNode); return ts_loader_1.tsBinary.visitNode(nodeResult, processImports); }; }; } function simpleDecorator() { } //# sourceMappingURL=emitter.js.map