@nestbridge/webpack 2.0.4 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dirname, extname, join, posix, relative, resolve, sep } from "node:path";
|
|
2
|
+
import { SyntaxKind, isArrayLiteralExpression, isArrayTypeNode, isArrowFunction, isBlock, isCallExpression, isClassDeclaration, isDecorator, isExportDeclaration, isExpressionStatement, isFalseLiteral, isFunctionExpression, isIdentifier, isImportDeclaration, isMethodDeclaration, isNamedExports, isNamedImports, isNewExpression, isNullLiteral, isNumericLiteral, isObjectLiteralExpression, isParenthesizedExpression, isPropertyAccessExpression, isPropertyAssignment, isPropertyDeclaration, isReturnStatement, isSpreadElement, isStringLiteral, isStringLiteralLikeNode, isTrueLiteral, isTypeReferenceNode, isUnionTypeNode, isVariableStatement } from "typescript/unstable/ast";
|
|
2
3
|
import { API } from "typescript/unstable/sync";
|
|
3
|
-
import { existsSync, globSync, mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
-
import { dirname, extname, join, posix, relative, resolve } from "node:path";
|
|
4
|
+
import { existsSync, globSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { createUnplugin } from "unplugin";
|
|
6
6
|
//#region ../unplugin/build/nestbridge.unplugin.js
|
|
7
7
|
var getDecorators = (node) => {
|
|
@@ -333,7 +333,11 @@ var findControllerClasses = (sourceFile) => {
|
|
|
333
333
|
var sharedApi;
|
|
334
334
|
var parseSourceFile = (filePath) => {
|
|
335
335
|
sharedApi ??= new API();
|
|
336
|
-
|
|
336
|
+
sharedApi.updateSnapshot({ closeFiles: [filePath] });
|
|
337
|
+
const sourceFile = sharedApi.updateSnapshot({
|
|
338
|
+
openFiles: [filePath],
|
|
339
|
+
fileChanges: { changed: [filePath] }
|
|
340
|
+
}).getDefaultProjectForFile(filePath)?.program.getSourceFile(filePath);
|
|
337
341
|
if (sourceFile === void 0) throw new Error(`Unable to parse source file: ${filePath}`);
|
|
338
342
|
return sourceFile;
|
|
339
343
|
};
|
|
@@ -790,11 +794,309 @@ var analyzeResolvers = (filePaths) => {
|
|
|
790
794
|
diagnostics
|
|
791
795
|
};
|
|
792
796
|
};
|
|
797
|
+
var MODULE_DECORATOR_NAME = "Module";
|
|
798
|
+
var PROVIDERS_PROPERTY_NAME = "providers";
|
|
799
|
+
var PROVIDE_PROPERTY_NAME = "provide";
|
|
800
|
+
var USE_CLASS_PROPERTY_NAME = "useClass";
|
|
801
|
+
var APP_FILTER_LOCAL_NAME = "APP_FILTER";
|
|
802
|
+
var NEST_CORE_MODULE_SPECIFIER$1 = "@nestjs/core";
|
|
803
|
+
var findAppFilterProviderClassName = (moduleClassDeclaration, moduleSourceFile) => {
|
|
804
|
+
const moduleDecorator = findDecorator(moduleClassDeclaration, MODULE_DECORATOR_NAME);
|
|
805
|
+
if (moduleDecorator === void 0 || !isCallExpression(moduleDecorator.expression)) return;
|
|
806
|
+
const [moduleOptions] = moduleDecorator.expression.arguments;
|
|
807
|
+
if (moduleOptions === void 0 || !isObjectLiteralExpression(moduleOptions)) return;
|
|
808
|
+
const providersProperty = moduleOptions.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === PROVIDERS_PROPERTY_NAME);
|
|
809
|
+
if (providersProperty === void 0 || !isArrayLiteralExpression(providersProperty.initializer)) return;
|
|
810
|
+
const appFilterImportSource = findImportSource(moduleSourceFile, APP_FILTER_LOCAL_NAME);
|
|
811
|
+
if (appFilterImportSource === void 0 || appFilterImportSource.moduleSpecifierText !== NEST_CORE_MODULE_SPECIFIER$1) return;
|
|
812
|
+
const classNames = /* @__PURE__ */ new Set();
|
|
813
|
+
for (const element of providersProperty.initializer.elements) {
|
|
814
|
+
if (isSpreadElement(element)) return;
|
|
815
|
+
if (!isObjectLiteralExpression(element)) continue;
|
|
816
|
+
const provideProperty = element.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === PROVIDE_PROPERTY_NAME);
|
|
817
|
+
if (provideProperty === void 0 || !isIdentifier(provideProperty.initializer) || provideProperty.initializer.text !== APP_FILTER_LOCAL_NAME) continue;
|
|
818
|
+
const useClassProperty = element.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === USE_CLASS_PROPERTY_NAME);
|
|
819
|
+
if (useClassProperty === void 0 || !isIdentifier(useClassProperty.initializer)) return;
|
|
820
|
+
classNames.add(useClassProperty.initializer.text);
|
|
821
|
+
}
|
|
822
|
+
return classNames.size === 1 ? [...classNames][0] : void 0;
|
|
823
|
+
};
|
|
824
|
+
var USE_GLOBAL_FILTERS_METHOD_NAME = "useGlobalFilters";
|
|
825
|
+
var collectUseGlobalFiltersCalls = (node, calls) => {
|
|
826
|
+
if (isCallExpression(node) && isPropertyAccessExpression(node.expression) && node.expression.name.text === USE_GLOBAL_FILTERS_METHOD_NAME) calls.push(node);
|
|
827
|
+
node.forEachChild((child) => {
|
|
828
|
+
collectUseGlobalFiltersCalls(child, calls);
|
|
829
|
+
});
|
|
830
|
+
};
|
|
831
|
+
var findGlobalFilterClassName = (sourceFile) => {
|
|
832
|
+
const calls = [];
|
|
833
|
+
collectUseGlobalFiltersCalls(sourceFile, calls);
|
|
834
|
+
if (calls.length === 0) return;
|
|
835
|
+
const classNames = /* @__PURE__ */ new Set();
|
|
836
|
+
for (const call of calls) for (const argument of call.arguments) {
|
|
837
|
+
if (!isNewExpression(argument) || !isIdentifier(argument.expression)) return;
|
|
838
|
+
classNames.add(argument.expression.text);
|
|
839
|
+
}
|
|
840
|
+
return classNames.size === 1 ? [...classNames][0] : void 0;
|
|
841
|
+
};
|
|
842
|
+
var NEST_FACTORY_LOCAL_NAME = "NestFactory";
|
|
843
|
+
var NEST_FACTORY_CREATE_METHOD_NAME = "create";
|
|
844
|
+
var NEST_CORE_MODULE_SPECIFIER = "@nestjs/core";
|
|
845
|
+
var collectNestFactoryCreateCalls = (node, calls) => {
|
|
846
|
+
if (isCallExpression(node) && isPropertyAccessExpression(node.expression) && isIdentifier(node.expression.expression) && node.expression.expression.text === NEST_FACTORY_LOCAL_NAME && node.expression.name.text === NEST_FACTORY_CREATE_METHOD_NAME) calls.push(node);
|
|
847
|
+
node.forEachChild((child) => {
|
|
848
|
+
collectNestFactoryCreateCalls(child, calls);
|
|
849
|
+
});
|
|
850
|
+
};
|
|
851
|
+
var findRootModuleClassName = (sourceFile) => {
|
|
852
|
+
const nestFactoryImportSource = findImportSource(sourceFile, NEST_FACTORY_LOCAL_NAME);
|
|
853
|
+
if (nestFactoryImportSource === void 0 || nestFactoryImportSource.moduleSpecifierText !== NEST_CORE_MODULE_SPECIFIER) return;
|
|
854
|
+
const calls = [];
|
|
855
|
+
collectNestFactoryCreateCalls(sourceFile, calls);
|
|
856
|
+
if (calls.length !== 1) return;
|
|
857
|
+
const [call] = calls;
|
|
858
|
+
if (call === void 0) return;
|
|
859
|
+
const [moduleArgument] = call.arguments;
|
|
860
|
+
return moduleArgument !== void 0 && isIdentifier(moduleArgument) ? moduleArgument.text : void 0;
|
|
861
|
+
};
|
|
862
|
+
var RESPONSE_BODY_CALL_NAMES = /* @__PURE__ */ new Set(["json", "send"]);
|
|
863
|
+
var matchResponseBodyArgument = (expression) => {
|
|
864
|
+
if (!isCallExpression(expression) || !isPropertyAccessExpression(expression.expression) || !RESPONSE_BODY_CALL_NAMES.has(expression.expression.name.text) || expression.arguments.length !== 1) return;
|
|
865
|
+
const [argument] = expression.arguments;
|
|
866
|
+
return argument;
|
|
867
|
+
};
|
|
868
|
+
var resolveCatchMethodBody = (catchMethod) => {
|
|
869
|
+
const [exceptionParameter] = catchMethod.parameters;
|
|
870
|
+
if (exceptionParameter === void 0 || !isIdentifier(exceptionParameter.name)) return;
|
|
871
|
+
const body = catchMethod.body;
|
|
872
|
+
if (body === void 0) return;
|
|
873
|
+
const localDeclarations = /* @__PURE__ */ new Map();
|
|
874
|
+
let responseBodyArgument;
|
|
875
|
+
let sawResponseCall = false;
|
|
876
|
+
let sawTrailingReturn = false;
|
|
877
|
+
for (const statement of body.statements) {
|
|
878
|
+
if (sawTrailingReturn) return;
|
|
879
|
+
if (!sawResponseCall && isVariableStatement(statement)) {
|
|
880
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
881
|
+
if (!isIdentifier(declaration.name) || declaration.initializer === void 0) return;
|
|
882
|
+
localDeclarations.set(declaration.name.text, declaration.initializer);
|
|
883
|
+
}
|
|
884
|
+
continue;
|
|
885
|
+
}
|
|
886
|
+
if (!sawResponseCall && isExpressionStatement(statement)) {
|
|
887
|
+
const argument = matchResponseBodyArgument(statement.expression);
|
|
888
|
+
if (argument === void 0) return;
|
|
889
|
+
responseBodyArgument = argument;
|
|
890
|
+
sawResponseCall = true;
|
|
891
|
+
continue;
|
|
892
|
+
}
|
|
893
|
+
if (sawResponseCall && isReturnStatement(statement) && statement.expression === void 0) {
|
|
894
|
+
sawTrailingReturn = true;
|
|
895
|
+
continue;
|
|
896
|
+
}
|
|
897
|
+
return;
|
|
898
|
+
}
|
|
899
|
+
if (!sawResponseCall || responseBodyArgument === void 0) return;
|
|
900
|
+
return {
|
|
901
|
+
exceptionParameterName: exceptionParameter.name.text,
|
|
902
|
+
localDeclarations,
|
|
903
|
+
responseBodyArgument
|
|
904
|
+
};
|
|
905
|
+
};
|
|
906
|
+
var EXCEPTION_MESSAGE_MEMBER_NAME = "message";
|
|
907
|
+
var EXCEPTION_STATUS_METHOD_NAME = "getStatus";
|
|
908
|
+
var resolvesToExceptionParameter = (expression, exceptionParameterName, localDeclarations, visited) => {
|
|
909
|
+
if (!isIdentifier(expression)) return false;
|
|
910
|
+
if (expression.text === exceptionParameterName) return true;
|
|
911
|
+
if (visited.has(expression.text)) return false;
|
|
912
|
+
visited.add(expression.text);
|
|
913
|
+
const aliasedExpression = localDeclarations.get(expression.text);
|
|
914
|
+
return aliasedExpression !== void 0 ? resolvesToExceptionParameter(aliasedExpression, exceptionParameterName, localDeclarations, visited) : false;
|
|
915
|
+
};
|
|
916
|
+
var synthesizeErrorValueType = (expression, exceptionParameterName, localDeclarations) => {
|
|
917
|
+
if (isPropertyAccessExpression(expression) && expression.name.text === EXCEPTION_MESSAGE_MEMBER_NAME && resolvesToExceptionParameter(expression.expression, exceptionParameterName, localDeclarations, /* @__PURE__ */ new Set())) return "string";
|
|
918
|
+
if (isCallExpression(expression) && expression.arguments.length === 0 && isPropertyAccessExpression(expression.expression) && expression.expression.name.text === EXCEPTION_STATUS_METHOD_NAME && resolvesToExceptionParameter(expression.expression.expression, exceptionParameterName, localDeclarations, /* @__PURE__ */ new Set())) return "number";
|
|
919
|
+
if (isObjectLiteralExpression(expression)) {
|
|
920
|
+
const memberTypes = [];
|
|
921
|
+
for (const property of expression.properties) {
|
|
922
|
+
if (!isPropertyAssignment(property) || !(isIdentifier(property.name) || isStringLiteral(property.name))) return;
|
|
923
|
+
const valueType = synthesizeErrorValueType(property.initializer, exceptionParameterName, localDeclarations);
|
|
924
|
+
if (valueType === void 0) return;
|
|
925
|
+
memberTypes.push(`${property.name.text}: ${valueType}`);
|
|
926
|
+
}
|
|
927
|
+
return `{ ${memberTypes.join("; ")} }`;
|
|
928
|
+
}
|
|
929
|
+
if (isStringLiteral(expression)) return "string";
|
|
930
|
+
if (isNumericLiteral(expression)) return "number";
|
|
931
|
+
if (isTrueLiteral(expression) || isFalseLiteral(expression)) return "boolean";
|
|
932
|
+
if (isNullLiteral(expression)) return "null";
|
|
933
|
+
if (isIdentifier(expression)) {
|
|
934
|
+
const aliasedExpression = localDeclarations.get(expression.text);
|
|
935
|
+
return aliasedExpression !== void 0 ? synthesizeErrorValueType(aliasedExpression, exceptionParameterName, localDeclarations) : void 0;
|
|
936
|
+
}
|
|
937
|
+
};
|
|
938
|
+
var synthesizeErrorBodyType = (objectLiteral, exceptionParameterName, localDeclarations) => synthesizeErrorValueType(objectLiteral, exceptionParameterName, localDeclarations);
|
|
939
|
+
var CATCH_DECORATOR_NAME = "Catch";
|
|
940
|
+
var CATCH_METHOD_NAME = "catch";
|
|
941
|
+
var findCatchMethod = (members) => members.find((member) => isMethodDeclaration(member) && isIdentifier(member.name) && member.name.text === CATCH_METHOD_NAME);
|
|
942
|
+
var resolveViaGlobalFilters = (bootstrapSourceFile, bootstrapFilePath) => {
|
|
943
|
+
const filterClassName = findGlobalFilterClassName(bootstrapSourceFile);
|
|
944
|
+
return filterClassName === void 0 ? void 0 : resolveClassDeclaration(filterClassName, bootstrapSourceFile, bootstrapFilePath);
|
|
945
|
+
};
|
|
946
|
+
var resolveViaAppFilterProvider = (bootstrapSourceFile, bootstrapFilePath) => {
|
|
947
|
+
const rootModuleClassName = findRootModuleClassName(bootstrapSourceFile);
|
|
948
|
+
if (rootModuleClassName === void 0) return;
|
|
949
|
+
const resolvedModule = resolveClassDeclaration(rootModuleClassName, bootstrapSourceFile, bootstrapFilePath);
|
|
950
|
+
if (resolvedModule === void 0) return;
|
|
951
|
+
const filterClassName = findAppFilterProviderClassName(resolvedModule.classDeclaration, resolvedModule.sourceFile);
|
|
952
|
+
return filterClassName === void 0 ? void 0 : resolveClassDeclaration(filterClassName, resolvedModule.sourceFile, resolvedModule.filePath);
|
|
953
|
+
};
|
|
954
|
+
var isSameDeclaration = (a, b) => a.filePath === b.filePath && a.classDeclaration.name?.text === b.classDeclaration.name?.text;
|
|
955
|
+
var reconcileResolvedFilter = (viaGlobalFilters, viaAppFilterProvider) => {
|
|
956
|
+
if (viaGlobalFilters !== void 0 && viaAppFilterProvider !== void 0) return isSameDeclaration(viaGlobalFilters, viaAppFilterProvider) ? viaGlobalFilters : void 0;
|
|
957
|
+
return viaGlobalFilters ?? viaAppFilterProvider;
|
|
958
|
+
};
|
|
959
|
+
var detectErrorResponseShape = (bootstrapFilePath) => {
|
|
960
|
+
const bootstrapSourceFile = parseSourceFile(bootstrapFilePath);
|
|
961
|
+
const resolved = reconcileResolvedFilter(resolveViaGlobalFilters(bootstrapSourceFile, bootstrapFilePath), resolveViaAppFilterProvider(bootstrapSourceFile, bootstrapFilePath));
|
|
962
|
+
if (resolved === void 0 || findDecorator(resolved.classDeclaration, CATCH_DECORATOR_NAME) === void 0) return;
|
|
963
|
+
const catchMethod = findCatchMethod(resolved.classDeclaration.members);
|
|
964
|
+
if (catchMethod?.body === void 0) return;
|
|
965
|
+
const bodyResolution = resolveCatchMethodBody(catchMethod);
|
|
966
|
+
if (bodyResolution === void 0 || !isObjectLiteralExpression(bodyResolution.responseBodyArgument)) return;
|
|
967
|
+
const errorBodyTypeSource = synthesizeErrorBodyType(bodyResolution.responseBodyArgument, bodyResolution.exceptionParameterName, bodyResolution.localDeclarations);
|
|
968
|
+
return errorBodyTypeSource === void 0 ? void 0 : { errorBodyTypeSource };
|
|
969
|
+
};
|
|
970
|
+
var USE_GLOBAL_INTERCEPTORS_METHOD_NAME = "useGlobalInterceptors";
|
|
971
|
+
var collectUseGlobalInterceptorsCalls = (node, calls) => {
|
|
972
|
+
if (isCallExpression(node) && isPropertyAccessExpression(node.expression) && node.expression.name.text === USE_GLOBAL_INTERCEPTORS_METHOD_NAME) calls.push(node);
|
|
973
|
+
node.forEachChild((child) => {
|
|
974
|
+
collectUseGlobalInterceptorsCalls(child, calls);
|
|
975
|
+
});
|
|
976
|
+
};
|
|
977
|
+
/**
|
|
978
|
+
* Returned in registration order: `useGlobalInterceptors` concatenates onto a
|
|
979
|
+
* single global list, so a later call (or a later argument within one call)
|
|
980
|
+
* always registers an interceptor that wraps closer to the raw handler result.
|
|
981
|
+
*/
|
|
982
|
+
var findGlobalInterceptorClassNames = (sourceFile) => {
|
|
983
|
+
const calls = [];
|
|
984
|
+
collectUseGlobalInterceptorsCalls(sourceFile, calls);
|
|
985
|
+
if (calls.length === 0) return;
|
|
986
|
+
const classNames = [];
|
|
987
|
+
for (const call of calls) for (const argument of call.arguments) {
|
|
988
|
+
if (!isNewExpression(argument) || !isIdentifier(argument.expression)) return;
|
|
989
|
+
classNames.push(argument.expression.text);
|
|
990
|
+
}
|
|
991
|
+
return classNames.length === 0 ? void 0 : classNames;
|
|
992
|
+
};
|
|
993
|
+
var synthesizeExpressionType = (expression, parameterName, substitution, state) => {
|
|
994
|
+
if (isIdentifier(expression) && expression.text === parameterName) {
|
|
995
|
+
state.substitutionCount += 1;
|
|
996
|
+
return substitution;
|
|
997
|
+
}
|
|
998
|
+
if (isObjectLiteralExpression(expression)) {
|
|
999
|
+
const memberTypes = [];
|
|
1000
|
+
for (const property of expression.properties) {
|
|
1001
|
+
if (!isPropertyAssignment(property) || !(isIdentifier(property.name) || isStringLiteral(property.name))) return;
|
|
1002
|
+
const valueType = synthesizeExpressionType(property.initializer, parameterName, substitution, state);
|
|
1003
|
+
if (valueType === void 0) return;
|
|
1004
|
+
memberTypes.push(`${property.name.text}: ${valueType}`);
|
|
1005
|
+
}
|
|
1006
|
+
return `{ ${memberTypes.join("; ")} }`;
|
|
1007
|
+
}
|
|
1008
|
+
if (isStringLiteral(expression)) return "string";
|
|
1009
|
+
if (isNumericLiteral(expression)) return "number";
|
|
1010
|
+
if (isTrueLiteral(expression) || isFalseLiteral(expression)) return "boolean";
|
|
1011
|
+
if (isNullLiteral(expression)) return "null";
|
|
1012
|
+
};
|
|
1013
|
+
var synthesizeGenericObjectType = (objectLiteral, parameterName, substitution) => {
|
|
1014
|
+
const state = { substitutionCount: 0 };
|
|
1015
|
+
const objectType = synthesizeExpressionType(objectLiteral, parameterName, substitution, state);
|
|
1016
|
+
return objectType !== void 0 && state.substitutionCount === 1 ? objectType : void 0;
|
|
1017
|
+
};
|
|
1018
|
+
var INTERCEPT_METHOD_NAME = "intercept";
|
|
1019
|
+
var PIPE_MEMBER_NAME = "pipe";
|
|
1020
|
+
var MAP_OPERATOR_NAME = "map";
|
|
1021
|
+
var RXJS_MODULE_SPECIFIER = "rxjs";
|
|
1022
|
+
var WRAPPED_RESULT_SUBSTITUTION = "Awaited<Result>";
|
|
1023
|
+
var unwrapParenthesizedExpression = (expression) => {
|
|
1024
|
+
let unwrapped = expression;
|
|
1025
|
+
while (isParenthesizedExpression(unwrapped)) unwrapped = unwrapped.expression;
|
|
1026
|
+
return unwrapped;
|
|
1027
|
+
};
|
|
1028
|
+
var resolveSoleReturnExpression = (body) => {
|
|
1029
|
+
if (!isBlock(body)) return unwrapParenthesizedExpression(body);
|
|
1030
|
+
const localDeclarations = /* @__PURE__ */ new Map();
|
|
1031
|
+
let returnExpression;
|
|
1032
|
+
let sawReturn = false;
|
|
1033
|
+
for (const statement of body.statements) {
|
|
1034
|
+
if (sawReturn) return;
|
|
1035
|
+
if (isVariableStatement(statement)) {
|
|
1036
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
1037
|
+
if (!isIdentifier(declaration.name) || declaration.initializer === void 0) return;
|
|
1038
|
+
localDeclarations.set(declaration.name.text, declaration.initializer);
|
|
1039
|
+
}
|
|
1040
|
+
continue;
|
|
1041
|
+
}
|
|
1042
|
+
if (isReturnStatement(statement)) {
|
|
1043
|
+
sawReturn = true;
|
|
1044
|
+
returnExpression = statement.expression;
|
|
1045
|
+
continue;
|
|
1046
|
+
}
|
|
1047
|
+
return;
|
|
1048
|
+
}
|
|
1049
|
+
if (returnExpression === void 0) return;
|
|
1050
|
+
return isIdentifier(returnExpression) ? localDeclarations.get(returnExpression.text) : returnExpression;
|
|
1051
|
+
};
|
|
1052
|
+
var matchPipedMapCallback = (expression, interceptorSourceFile) => {
|
|
1053
|
+
if (!isCallExpression(expression) || !isPropertyAccessExpression(expression.expression) || expression.expression.name.text !== PIPE_MEMBER_NAME || expression.arguments.length !== 1) return;
|
|
1054
|
+
const [operator] = expression.arguments;
|
|
1055
|
+
if (operator === void 0 || !isCallExpression(operator) || !isIdentifier(operator.expression) || operator.expression.text !== MAP_OPERATOR_NAME || operator.arguments.length !== 1) return;
|
|
1056
|
+
const mapImportSource = findImportSource(interceptorSourceFile, operator.expression.text);
|
|
1057
|
+
if (mapImportSource === void 0 || mapImportSource.moduleSpecifierText !== RXJS_MODULE_SPECIFIER) return;
|
|
1058
|
+
const [callback] = operator.arguments;
|
|
1059
|
+
return callback !== void 0 && (isArrowFunction(callback) || isFunctionExpression(callback)) ? callback : void 0;
|
|
1060
|
+
};
|
|
1061
|
+
var findInterceptMethod = (members) => members.find((member) => isMethodDeclaration(member) && isIdentifier(member.name) && member.name.text === INTERCEPT_METHOD_NAME);
|
|
1062
|
+
var synthesizeInterceptorWrapperType = (interceptorClassName, bootstrapSourceFile, bootstrapFilePath, innerTypeSource) => {
|
|
1063
|
+
const resolved = resolveClassDeclaration(interceptorClassName, bootstrapSourceFile, bootstrapFilePath);
|
|
1064
|
+
if (resolved === void 0) return;
|
|
1065
|
+
const interceptMethod = findInterceptMethod(resolved.classDeclaration.members);
|
|
1066
|
+
if (interceptMethod?.body === void 0) return;
|
|
1067
|
+
const returnExpression = resolveSoleReturnExpression(interceptMethod.body);
|
|
1068
|
+
if (returnExpression === void 0) return;
|
|
1069
|
+
const mapCallback = matchPipedMapCallback(returnExpression, resolved.sourceFile);
|
|
1070
|
+
if (mapCallback === void 0 || mapCallback.parameters.length !== 1) return;
|
|
1071
|
+
const [callbackParameter] = mapCallback.parameters;
|
|
1072
|
+
if (callbackParameter === void 0 || !isIdentifier(callbackParameter.name)) return;
|
|
1073
|
+
const callbackReturnExpression = resolveSoleReturnExpression(mapCallback.body);
|
|
1074
|
+
if (callbackReturnExpression === void 0 || !isObjectLiteralExpression(callbackReturnExpression)) return;
|
|
1075
|
+
return synthesizeGenericObjectType(callbackReturnExpression, callbackParameter.name.text, innerTypeSource);
|
|
1076
|
+
};
|
|
1077
|
+
/**
|
|
1078
|
+
* Interceptors registered first wrap those registered after them, so the
|
|
1079
|
+
* composed type is built from the last-registered interceptor (closest to the
|
|
1080
|
+
* raw handler result) outward to the first-registered one.
|
|
1081
|
+
*/
|
|
1082
|
+
var detectResponseWrapper = (bootstrapFilePath) => {
|
|
1083
|
+
const bootstrapSourceFile = parseSourceFile(bootstrapFilePath);
|
|
1084
|
+
const interceptorClassNames = findGlobalInterceptorClassNames(bootstrapSourceFile);
|
|
1085
|
+
if (interceptorClassNames === void 0) return;
|
|
1086
|
+
let composedTypeSource = WRAPPED_RESULT_SUBSTITUTION;
|
|
1087
|
+
for (const interceptorClassName of [...interceptorClassNames].reverse()) {
|
|
1088
|
+
const wrapperTypeSource = synthesizeInterceptorWrapperType(interceptorClassName, bootstrapSourceFile, bootstrapFilePath, composedTypeSource);
|
|
1089
|
+
if (wrapperTypeSource === void 0) return;
|
|
1090
|
+
composedTypeSource = wrapperTypeSource;
|
|
1091
|
+
}
|
|
1092
|
+
return { wrappedResultTypeSource: composedTypeSource };
|
|
1093
|
+
};
|
|
793
1094
|
var REMOTE_RESULT_HELPERS = {
|
|
794
1095
|
json: "RemoteResult",
|
|
795
1096
|
observable: "RemoteObservableResult",
|
|
796
1097
|
stream: "RemoteStreamResult"
|
|
797
1098
|
};
|
|
1099
|
+
var WRAPPED_RESULT_HELPER = "__NestBridgeWrapped";
|
|
798
1100
|
var toPosixPath = (filePath) => filePath.replace(/\\/g, "/");
|
|
799
1101
|
var importSpecifierFor = (sourceFile, outputFilePath) => {
|
|
800
1102
|
if (!sourceFile.startsWith(".") && !/^[A-Za-z]:[\\/]/.test(sourceFile) && !sourceFile.startsWith("/")) return sourceFile;
|
|
@@ -805,34 +1107,46 @@ var stripExtension = (filePath) => {
|
|
|
805
1107
|
const extension = extname(filePath);
|
|
806
1108
|
return extension.length > 0 ? filePath.slice(0, -extension.length) : filePath;
|
|
807
1109
|
};
|
|
808
|
-
var generateControllerDeclaration = (controller, outputFilePath) => {
|
|
1110
|
+
var generateControllerDeclaration = (controller, outputFilePath, responseWrapper) => {
|
|
809
1111
|
const sourceFileSpecifier = importSpecifierFor(controller.sourceFile, outputFilePath);
|
|
810
1112
|
const importSpecifier = stripExtension(sourceFileSpecifier);
|
|
811
1113
|
const serverAlias = `__Server${controller.name}`;
|
|
1114
|
+
const helperNameFor = (method) => responseWrapper !== void 0 && (method.responseKind ?? "json") === "json" ? WRAPPED_RESULT_HELPER : REMOTE_RESULT_HELPERS[method.responseKind ?? "json"];
|
|
812
1115
|
const classBody = [
|
|
813
1116
|
" constructor();",
|
|
814
1117
|
"",
|
|
815
1118
|
...controller.methods.map((method) => {
|
|
816
|
-
const helperName =
|
|
1119
|
+
const helperName = helperNameFor(method);
|
|
817
1120
|
return ` ${method.name}(...args: Parameters<${serverAlias}['${method.name}']>): ${helperName}<${serverAlias}['${method.name}']>;`;
|
|
818
1121
|
})
|
|
819
1122
|
].join("\n");
|
|
820
|
-
const
|
|
821
|
-
const
|
|
1123
|
+
const rawHelperNames = controller.methods.map((method) => helperNameFor(method));
|
|
1124
|
+
const hasWrappedMethod = rawHelperNames.includes(WRAPPED_RESULT_HELPER);
|
|
1125
|
+
const helperImports = rawHelperNames.length === 0 ? ["RemoteResult"] : Array.from(new Set(rawHelperNames.filter((name) => name !== WRAPPED_RESULT_HELPER))).sort();
|
|
1126
|
+
const wrappedResultTypeAliasLines = responseWrapper !== void 0 && hasWrappedMethod ? [`type ${WRAPPED_RESULT_HELPER}<T> = T extends (...args: never[]) => infer Result ? Promise<${responseWrapper.wrappedResultTypeSource}> : never;`, ""] : [];
|
|
822
1127
|
return [
|
|
823
1128
|
`import type { ${controller.name} as ${serverAlias} } from '${importSpecifier}';`,
|
|
824
|
-
`import type { ${helperImports.join(", ")} } from 'nestbridge'
|
|
1129
|
+
...helperImports.length > 0 ? [`import type { ${helperImports.join(", ")} } from 'nestbridge';`] : [],
|
|
825
1130
|
"",
|
|
826
1131
|
"/**",
|
|
827
1132
|
" * Generated by NestBridge — client-facing methods only.",
|
|
828
1133
|
` * @see {@link ${sourceFileSpecifier}} for the real controller implementation.`,
|
|
829
1134
|
" */",
|
|
1135
|
+
...wrappedResultTypeAliasLines,
|
|
830
1136
|
`export declare class ${controller.name} {`,
|
|
831
1137
|
classBody,
|
|
832
1138
|
"}",
|
|
833
1139
|
""
|
|
834
1140
|
].join("\n");
|
|
835
1141
|
};
|
|
1142
|
+
var ERROR_BODY_TYPE_NAME = "NestBridgeErrorBody";
|
|
1143
|
+
var generateErrorBodyDeclaration = (errorBodyTypeSource) => [
|
|
1144
|
+
"/**",
|
|
1145
|
+
" * Generated by NestBridge — inferred shape of the global exception filter's response body.",
|
|
1146
|
+
" */",
|
|
1147
|
+
`export type ${ERROR_BODY_TYPE_NAME} = ${errorBodyTypeSource};`,
|
|
1148
|
+
""
|
|
1149
|
+
].join("\n");
|
|
836
1150
|
var formatDiagnostic = (diagnostic) => {
|
|
837
1151
|
const subject = diagnostic.memberName.length > 0 ? `${diagnostic.controllerName}.${diagnostic.memberName}` : diagnostic.controllerName;
|
|
838
1152
|
const lines = [
|
|
@@ -976,28 +1290,52 @@ var stripLeadingParentSegments = (relativePath) => {
|
|
|
976
1290
|
const firstOwnedIndex = segments.findIndex((segment) => segment !== "..");
|
|
977
1291
|
return segments.slice(firstOwnedIndex === -1 ? segments.length : firstOwnedIndex).join("/");
|
|
978
1292
|
};
|
|
979
|
-
var mirroredDeclarationPath = (
|
|
980
|
-
const mirroredPath = stripLeadingParentSegments(relative(
|
|
981
|
-
return join(
|
|
1293
|
+
var mirroredDeclarationPath = (sourceRoot, resolvedOutputDir, controllerFilePath) => {
|
|
1294
|
+
const mirroredPath = stripLeadingParentSegments(relative(sourceRoot, controllerFilePath)).replace(/\.ts$/, ".d.ts");
|
|
1295
|
+
return join(resolvedOutputDir, mirroredPath);
|
|
982
1296
|
};
|
|
983
|
-
var writeControllerDeclarations = (controllers,
|
|
1297
|
+
var writeControllerDeclarations = (controllers, sourceRoot, resolvedOutputDir, responseWrapper) => {
|
|
984
1298
|
for (const controller of controllers) {
|
|
985
|
-
const outputFilePath = mirroredDeclarationPath(
|
|
1299
|
+
const outputFilePath = mirroredDeclarationPath(sourceRoot, resolvedOutputDir, controller.sourceFile);
|
|
986
1300
|
mkdirSync(dirname(outputFilePath), { recursive: true });
|
|
987
|
-
writeFileSync(outputFilePath, generateControllerDeclaration(controller, outputFilePath), "utf-8");
|
|
1301
|
+
writeFileSync(outputFilePath, generateControllerDeclaration(controller, outputFilePath, responseWrapper), "utf-8");
|
|
988
1302
|
}
|
|
989
1303
|
};
|
|
990
|
-
var
|
|
1304
|
+
var ERROR_BODY_DECLARATION_FILE_NAME = "nestbridge-error-body.d.ts";
|
|
1305
|
+
var errorBodyDeclarationPath = (resolvedOutputDir) => join(resolvedOutputDir, ERROR_BODY_DECLARATION_FILE_NAME);
|
|
1306
|
+
var writeErrorBodyDeclaration = (resolvedOutputDir, errorResponseShape) => {
|
|
1307
|
+
const outputFilePath = errorBodyDeclarationPath(resolvedOutputDir);
|
|
1308
|
+
if (errorResponseShape === void 0) {
|
|
1309
|
+
rmSync(outputFilePath, { force: true });
|
|
1310
|
+
return;
|
|
1311
|
+
}
|
|
1312
|
+
mkdirSync(dirname(outputFilePath), { recursive: true });
|
|
1313
|
+
writeFileSync(outputFilePath, generateErrorBodyDeclaration(errorResponseShape.errorBodyTypeSource), "utf-8");
|
|
1314
|
+
};
|
|
1315
|
+
var writeResolverDeclarations = (resolvers, sourceRoot, resolvedOutputDir) => {
|
|
991
1316
|
for (const resolver of resolvers) {
|
|
992
|
-
const outputFilePath = mirroredDeclarationPath(
|
|
1317
|
+
const outputFilePath = mirroredDeclarationPath(sourceRoot, resolvedOutputDir, resolver.sourceFile);
|
|
993
1318
|
mkdirSync(dirname(outputFilePath), { recursive: true });
|
|
994
1319
|
writeFileSync(outputFilePath, generateControllerDeclaration(resolver, outputFilePath), "utf-8");
|
|
995
1320
|
}
|
|
996
1321
|
};
|
|
997
|
-
var discoverFiles = (patterns, root) => {
|
|
998
|
-
const matches = globSync([...patterns], {
|
|
1322
|
+
var discoverFiles = (patterns, root, exclude) => {
|
|
1323
|
+
const matches = globSync([...patterns], {
|
|
1324
|
+
cwd: root,
|
|
1325
|
+
exclude
|
|
1326
|
+
});
|
|
999
1327
|
return [...new Set(matches.map((match) => resolve(root, match)))].sort();
|
|
1000
1328
|
};
|
|
1329
|
+
var BOOTSTRAP_FILE_PATTERN = "**/main.ts";
|
|
1330
|
+
var discoverBootstrapFile = (root, resolvedOutputDir) => {
|
|
1331
|
+
const isExcluded = (filePath) => {
|
|
1332
|
+
if (filePath.split(/[\\/]/).includes("node_modules")) return true;
|
|
1333
|
+
const resolvedPath = resolve(root, filePath);
|
|
1334
|
+
return resolvedPath === resolvedOutputDir || resolvedPath.startsWith(`${resolvedOutputDir}${sep}`);
|
|
1335
|
+
};
|
|
1336
|
+
const matches = discoverFiles([BOOTSTRAP_FILE_PATTERN], root, isExcluded);
|
|
1337
|
+
return matches.length === 1 ? matches[0] : void 0;
|
|
1338
|
+
};
|
|
1001
1339
|
var resolveNestBridgeOptions = (options) => ({
|
|
1002
1340
|
controllers: Array.isArray(options.controllers) ? options.controllers : [options.controllers],
|
|
1003
1341
|
resolvers: options.resolvers === void 0 ? [] : Array.isArray(options.resolvers) ? options.resolvers : [options.resolvers],
|
|
@@ -1054,8 +1392,10 @@ var reportDiagnostics = (diagnostics, watchMode) => {
|
|
|
1054
1392
|
var nestBridgeUnplugin = createUnplugin((options, meta) => {
|
|
1055
1393
|
const resolvedOptions = resolveNestBridgeOptions(options);
|
|
1056
1394
|
let root = resolvedOptions.root ?? process.cwd();
|
|
1395
|
+
let bundlerRoot = root;
|
|
1057
1396
|
let controllerRegistry;
|
|
1058
1397
|
let resolverRegistry;
|
|
1398
|
+
let bootstrapFilePath;
|
|
1059
1399
|
const log = (message) => {
|
|
1060
1400
|
if (resolvedOptions.debug) console.log(`[nestbridge] ${message}`);
|
|
1061
1401
|
};
|
|
@@ -1063,8 +1403,14 @@ var nestBridgeUnplugin = createUnplugin((options, meta) => {
|
|
|
1063
1403
|
const { controllers, diagnostics: controllerDiagnostics } = controllerRegistry.refresh();
|
|
1064
1404
|
const { resolvers, diagnostics: resolverDiagnostics } = resolverRegistry.refresh();
|
|
1065
1405
|
reportDiagnostics([...controllerDiagnostics, ...resolverDiagnostics], meta.watchMode);
|
|
1066
|
-
|
|
1067
|
-
|
|
1406
|
+
const resolvedOutputDir = resolve(bundlerRoot, resolvedOptions.outputDir);
|
|
1407
|
+
const discoveredBootstrapFile = discoverBootstrapFile(root, resolvedOutputDir);
|
|
1408
|
+
bootstrapFilePath = discoveredBootstrapFile !== void 0 ? normalizePath(discoveredBootstrapFile) : void 0;
|
|
1409
|
+
const responseWrapper = discoveredBootstrapFile !== void 0 ? detectResponseWrapper(discoveredBootstrapFile) : void 0;
|
|
1410
|
+
const errorResponseShape = discoveredBootstrapFile !== void 0 ? detectErrorResponseShape(discoveredBootstrapFile) : void 0;
|
|
1411
|
+
writeControllerDeclarations(controllers, root, resolvedOutputDir, responseWrapper);
|
|
1412
|
+
writeResolverDeclarations(resolvers, root, resolvedOutputDir);
|
|
1413
|
+
writeErrorBodyDeclaration(resolvedOutputDir, errorResponseShape);
|
|
1068
1414
|
log(`analyzed ${controllers.length} controller(s), ${resolvers.length} resolver(s), ${controllerDiagnostics.length + resolverDiagnostics.length} diagnostic(s)`);
|
|
1069
1415
|
};
|
|
1070
1416
|
return {
|
|
@@ -1093,20 +1439,25 @@ var nestBridgeUnplugin = createUnplugin((options, meta) => {
|
|
|
1093
1439
|
},
|
|
1094
1440
|
watchChange(id) {
|
|
1095
1441
|
const changedFile = normalizePath(id);
|
|
1096
|
-
const wasTracked = controllerRegistry.has(changedFile) || resolverRegistry.has(changedFile);
|
|
1097
|
-
const
|
|
1442
|
+
const wasTracked = controllerRegistry.has(changedFile) || resolverRegistry.has(changedFile) || changedFile === bootstrapFilePath;
|
|
1443
|
+
const discoveredBootstrapFile = discoverBootstrapFile(root, resolve(bundlerRoot, resolvedOptions.outputDir));
|
|
1444
|
+
const isTrackedNow = discoverFiles(resolvedOptions.controllers, root).map(normalizePath).includes(changedFile) || discoverFiles(resolvedOptions.resolvers, root).map(normalizePath).includes(changedFile) || discoveredBootstrapFile !== void 0 && normalizePath(discoveredBootstrapFile) === changedFile;
|
|
1098
1445
|
if (!wasTracked && !isTrackedNow) return;
|
|
1099
1446
|
runAnalysis();
|
|
1100
1447
|
log(`nestbridge source changed: ${changedFile}`);
|
|
1101
1448
|
},
|
|
1102
1449
|
vite: { configResolved(config) {
|
|
1103
1450
|
if (resolvedOptions.root === void 0) root = config.root;
|
|
1104
|
-
|
|
1451
|
+
bundlerRoot = config.root;
|
|
1452
|
+
} },
|
|
1453
|
+
webpack(compiler) {
|
|
1454
|
+
bundlerRoot = compiler.options.context ?? bundlerRoot;
|
|
1455
|
+
}
|
|
1105
1456
|
};
|
|
1106
1457
|
});
|
|
1107
1458
|
//#endregion
|
|
1108
1459
|
//#region src/version.ts
|
|
1109
|
-
var VERSION = "2.
|
|
1460
|
+
var VERSION = "2.1.1";
|
|
1110
1461
|
//#endregion
|
|
1111
1462
|
//#region src/main.ts
|
|
1112
1463
|
var nestBridge = nestBridgeUnplugin.webpack;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nestbridge.webpack.js","names":[],"sources":["../../unplugin/build/nestbridge.unplugin.js","../package.json","../src/version.ts","../src/main.ts"],"sourcesContent":["import { SyntaxKind, isArrayLiteralExpression, isArrayTypeNode, isArrowFunction, isBlock, isCallExpression, isClassDeclaration, isDecorator, isExportDeclaration, isFunctionExpression, isIdentifier, isImportDeclaration, isMethodDeclaration, isNamedExports, isNamedImports, isObjectLiteralExpression, isPropertyAssignment, isPropertyDeclaration, isReturnStatement, isStringLiteralLikeNode, isTypeReferenceNode, isUnionTypeNode } from \"typescript/unstable/ast\";\nimport { API } from \"typescript/unstable/sync\";\nimport { existsSync, globSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, extname, join, posix, relative, resolve } from \"node:path\";\nimport { createUnplugin } from \"unplugin\";\n//#region ../core/build/nestbridge.core.js\nvar getDecorators = (node) => {\n\tconst decorators = node.modifiers?.filter(isDecorator);\n\treturn decorators === void 0 || decorators.length === 0 ? void 0 : decorators;\n};\nvar findDecorator = (node, decoratorName) => {\n\tconst decorators = getDecorators(node);\n\tif (decorators === void 0) return;\n\treturn decorators.find((decorator) => decoratorNameOf(decorator) === decoratorName);\n};\nvar findAnyDecorator = (node, decoratorNames) => {\n\tconst decorators = getDecorators(node);\n\tif (decorators === void 0) return;\n\treturn decorators.find((decorator) => decoratorNames.includes(decoratorNameOf(decorator) ?? \"\"));\n};\nvar decoratorNameOf = (decorator) => {\n\tconst expression = decorator.expression;\n\tif (isCallExpression(expression) && isIdentifier(expression.expression)) return expression.expression.text;\n\tif (isIdentifier(expression)) return expression.text;\n};\nvar readStaticStringArgument = (decorator) => {\n\tconst expression = decorator.expression;\n\tif (!isCallExpression(expression)) return {\n\t\tok: true,\n\t\tvalue: void 0\n\t};\n\tconst [firstArgument] = expression.arguments;\n\tif (firstArgument === void 0) return {\n\t\tok: true,\n\t\tvalue: void 0\n\t};\n\tif (isStringLiteralLikeNode(firstArgument)) return {\n\t\tok: true,\n\t\tvalue: firstArgument.text\n\t};\n\treturn {\n\t\tok: false,\n\t\targumentText: firstArgument.getText()\n\t};\n};\nvar HTTP_METHOD_DECORATOR_NAMES = {\n\tGet: \"GET\",\n\tPost: \"POST\",\n\tPut: \"PUT\",\n\tPatch: \"PATCH\",\n\tDelete: \"DELETE\"\n};\nvar locationOf = (sourceFile, node) => {\n\tconst { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n\treturn {\n\t\tline: line + 1,\n\t\tcolumn: character + 1\n\t};\n};\nvar SUPPORTED_PARAMETER_DECORATORS = [\n\t\"Param\",\n\t\"Query\",\n\t\"Body\",\n\t\"Headers\"\n];\nvar KNOWN_UNSUPPORTED_PARAMETER_DECORATORS = [\n\t\"Req\",\n\t\"Res\",\n\t\"Request\",\n\t\"Response\"\n];\nvar extractParameterDefinition = (parameter, index, context) => {\n\tconst decorator = findAnyDecorator(parameter, [...SUPPORTED_PARAMETER_DECORATORS, ...KNOWN_UNSUPPORTED_PARAMETER_DECORATORS]);\n\tconst location = locationOf(context.sourceFile, parameter);\n\tif (decorator === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `Parameter \"${parameter.name.getText()}\" must be decorated with one of @Param, @Query, @Body, or @Headers to be transported through a NestBridge HTTP client.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst decoratorName = decoratorNameOf(decorator);\n\tif (decoratorName !== void 0 && KNOWN_UNSUPPORTED_PARAMETER_DECORATORS.includes(decoratorName)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@${decoratorName}() cannot be transported through a NestBridge HTTP client.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (!isIdentifier(parameter.name)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"Destructured parameters cannot be transported through a NestBridge HTTP client.\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst argument = readStaticStringArgument(decorator);\n\tif (!argument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@${decoratorName}() arguments must be statically analyzable string literals.`,\n\t\t\tfound: `@${decoratorName}(${argument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst base = {\n\t\tindex,\n\t\tparameterName: parameter.name.text\n\t};\n\tif (decoratorName === \"Param\") {\n\t\tif (argument.value === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-parameter\",\n\t\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\t\tcontrollerName: context.controllerName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: \"A whole @Param() is not supported; provide a route parameter name such as @Param('id').\",\n\t\t\t\tfilePath: context.filePath,\n\t\t\t\tline: location.line,\n\t\t\t\tcolumn: location.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tkind: \"param\",\n\t\t\tname: argument.value\n\t\t};\n\t}\n\tif (decoratorName === \"Headers\") {\n\t\tif (argument.value === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-parameter\",\n\t\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\t\tcontrollerName: context.controllerName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: \"A whole @Headers() is not supported; provide a header name such as @Headers('x-example').\",\n\t\t\t\tfilePath: context.filePath,\n\t\t\t\tline: location.line,\n\t\t\t\tcolumn: location.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tkind: \"header\",\n\t\t\tname: argument.value\n\t\t};\n\t}\n\tif (decoratorName === \"Query\") return {\n\t\t...base,\n\t\tkind: \"query\",\n\t\tname: argument.value\n\t};\n\treturn {\n\t\t...base,\n\t\tkind: \"body\",\n\t\tname: argument.value\n\t};\n};\nvar PRIMITIVE_SCALAR_TYPES = {\n\tstring: \"String\",\n\tnumber: \"Float\",\n\tboolean: \"Boolean\"\n};\nvar unwrapPromise = (typeNode) => {\n\tif (isTypeReferenceNode(typeNode) && isIdentifier(typeNode.typeName) && typeNode.typeName.text === \"Promise\" && typeNode.typeArguments?.[0] !== void 0) return unwrapPromise(typeNode.typeArguments[0]);\n\treturn typeNode;\n};\nvar unwrapNullable = (typeNode) => {\n\tif (!isUnionTypeNode(typeNode)) return {\n\t\tinner: typeNode,\n\t\tisNullable: false\n\t};\n\tconst nonNullMembers = typeNode.types.filter((member) => member.kind !== SyntaxKind.NullKeyword && member.kind !== SyntaxKind.UndefinedKeyword);\n\tconst [onlyMember] = nonNullMembers;\n\tif (nonNullMembers.length !== 1 || onlyMember === void 0) return {\n\t\tinner: typeNode,\n\t\tisNullable: nonNullMembers.length !== typeNode.types.length\n\t};\n\treturn {\n\t\tinner: onlyMember,\n\t\tisNullable: true\n\t};\n};\nvar unwrapArrayElement = (typeNode) => {\n\tif (isArrayTypeNode(typeNode)) return typeNode.elementType;\n\tif (isTypeReferenceNode(typeNode) && isIdentifier(typeNode.typeName) && typeNode.typeName.text === \"Array\" && typeNode.typeArguments?.[0] !== void 0) return typeNode.typeArguments[0];\n};\nvar identifierTextOf = (typeNode) => {\n\tif (isTypeReferenceNode(typeNode) && isIdentifier(typeNode.typeName)) return typeNode.typeName.text;\n\tswitch (typeNode.kind) {\n\t\tcase SyntaxKind.StringKeyword: return \"string\";\n\t\tcase SyntaxKind.NumberKeyword: return \"number\";\n\t\tcase SyntaxKind.BooleanKeyword: return \"boolean\";\n\t\tdefault: return;\n\t}\n};\nvar unwrapTypeNode = (typeNode) => {\n\tconst { inner: withoutNullable, isNullable } = unwrapNullable(unwrapPromise(typeNode));\n\tconst arrayElement = unwrapArrayElement(withoutNullable);\n\tconst identifierText = identifierTextOf(arrayElement === void 0 ? withoutNullable : unwrapNullable(arrayElement).inner);\n\tif (identifierText === void 0) return;\n\treturn {\n\t\tidentifierText,\n\t\tisArray: arrayElement !== void 0,\n\t\tisNullable\n\t};\n};\nvar graphqlScalarNameFor = (identifierText) => PRIMITIVE_SCALAR_TYPES[identifierText] ?? identifierText;\nvar graphqlTypeStringFor = (unwrapped, explicitTypeName) => {\n\tconst baseName = explicitTypeName ?? graphqlScalarNameFor(unwrapped.identifierText);\n\tconst wrapped = unwrapped.isArray ? `[${baseName}!]` : baseName;\n\treturn unwrapped.isNullable ? wrapped : `${wrapped}!`;\n};\nvar OBSERVABLE_TYPE_NAME = \"Observable\";\nvar STREAMABLE_FILE_TYPE_NAME = \"StreamableFile\";\nvar readResponseKind = (returnType) => {\n\tif (returnType === void 0) return \"json\";\n\tconst unwrapped = unwrapPromise(returnType);\n\tif (!isTypeReferenceNode(unwrapped) || !isIdentifier(unwrapped.typeName)) return \"json\";\n\tif (unwrapped.typeName.text === OBSERVABLE_TYPE_NAME) return \"observable\";\n\tif (unwrapped.typeName.text === STREAMABLE_FILE_TYPE_NAME) return \"stream\";\n\treturn \"json\";\n};\nvar trimSlashes = (segment) => segment.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\nvar joinRoutePath = (controllerPath, methodPath) => {\n\treturn `/${[trimSlashes(controllerPath), trimSlashes(methodPath ?? \"\")].filter((segment) => segment.length > 0).join(\"/\")}`;\n};\nvar extractMethodDefinition = (method, context) => {\n\tconst decorator = findAnyDecorator(method, Object.keys(HTTP_METHOD_DECORATOR_NAMES));\n\tif (decorator === void 0) return;\n\tconst methodName = method.name.getText();\n\tconst decoratorName = decoratorNameOf(decorator);\n\tconst location = locationOf(context.sourceFile, method);\n\tif (decoratorName === void 0) return;\n\tconst httpMethod = HTTP_METHOD_DECORATOR_NAMES[decoratorName];\n\tif (httpMethod === void 0) return;\n\tconst routeArgument = readStaticStringArgument(decorator);\n\tif (!routeArgument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-route\",\n\t\t\ttitle: \"Unsupported route.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: methodName,\n\t\t\tdetail: \"Route paths must be statically analyzable.\",\n\t\t\tfound: `@${decoratorName}(${routeArgument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst parameters = method.parameters.map((parameter, index) => extractParameterDefinition(parameter, index, {\n\t\tsourceFile: context.sourceFile,\n\t\tfilePath: context.filePath,\n\t\tcontrollerName: context.controllerName,\n\t\tmethodName,\n\t\tdiagnostics: context.diagnostics\n\t}));\n\tif (parameters.some((parameter) => parameter === void 0)) return;\n\treturn {\n\t\tname: methodName,\n\t\thttpMethod,\n\t\tpath: joinRoutePath(context.controllerPath, routeArgument.value),\n\t\tparameters: parameters.filter((parameter) => parameter !== void 0),\n\t\tresponseKind: readResponseKind(method.type),\n\t\tline: location.line,\n\t\tcolumn: location.column\n\t};\n};\nvar extractControllerDefinition = (classDeclaration, sourceFile, filePath, diagnostics) => {\n\tconst controllerName = classDeclaration.name?.text ?? \"(anonymous controller)\";\n\tconst decorator = findDecorator(classDeclaration, \"Controller\");\n\tif (decorator === void 0) return;\n\tconst location = locationOf(sourceFile, classDeclaration);\n\tconst argument = readStaticStringArgument(decorator);\n\tif (!argument.ok) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"unsupported-route\",\n\t\t\ttitle: \"Unsupported route.\",\n\t\t\tcontrollerName,\n\t\t\tmemberName: \"\",\n\t\t\tdetail: \"Controller paths must be statically analyzable.\",\n\t\t\tfound: `@Controller(${argument.argumentText})`,\n\t\t\tfilePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst methods = classDeclaration.members.filter((member) => isMethodDeclaration(member)).map((method) => extractMethodDefinition(method, {\n\t\tsourceFile,\n\t\tfilePath,\n\t\tcontrollerName,\n\t\tcontrollerPath: argument.value ?? \"\",\n\t\tdiagnostics\n\t})).filter((method) => method !== void 0);\n\treturn {\n\t\tname: controllerName,\n\t\tpath: argument.value ?? \"\",\n\t\tsourceFile: filePath,\n\t\tmethods\n\t};\n};\nvar findControllerClasses = (sourceFile) => {\n\treturn sourceFile.statements.filter((statement) => isClassDeclaration(statement) && findDecorator(statement, \"Controller\") !== void 0);\n};\nvar sharedApi;\nvar parseSourceFile = (filePath) => {\n\tsharedApi ??= new API();\n\tconst sourceFile = sharedApi.updateSnapshot({ openFiles: [filePath] }).getDefaultProjectForFile(filePath)?.program.getSourceFile(filePath);\n\tif (sourceFile === void 0) throw new Error(`Unable to parse source file: ${filePath}`);\n\treturn sourceFile;\n};\nvar analyzeControllers = (filePaths) => {\n\tconst diagnostics = [];\n\tconst controllers = [];\n\tfor (const filePath of filePaths) {\n\t\tconst sourceFile = parseSourceFile(filePath);\n\t\tfor (const classDeclaration of findControllerClasses(sourceFile)) {\n\t\t\tconst controller = extractControllerDefinition(classDeclaration, sourceFile, filePath, diagnostics);\n\t\t\tif (controller !== void 0) controllers.push(controller);\n\t\t}\n\t}\n\treturn {\n\t\tcontrollers,\n\t\tdiagnostics\n\t};\n};\nvar GRAPHQL_OPERATION_DECORATOR_NAMES = {\n\tQuery: \"query\",\n\tMutation: \"mutation\"\n};\nvar readTypeThunkExpression = (thunk) => {\n\tif (!isBlock(thunk.body)) return thunk.body;\n\treturn thunk.body.statements.find(isReturnStatement)?.expression;\n};\nvar readArgsTypeOption = (decorator) => {\n\tif (!isCallExpression(decorator.expression)) return;\n\tconst optionsArgument = decorator.expression.arguments.find(isObjectLiteralExpression);\n\tif (optionsArgument === void 0) return;\n\tconst typeProperty = optionsArgument.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === \"type\");\n\tif (typeProperty === void 0) return;\n\tconst thunk = typeProperty.initializer;\n\tif (!isArrowFunction(thunk) && !isFunctionExpression(thunk)) return;\n\tconst returnedExpression = readTypeThunkExpression(thunk);\n\tif (returnedExpression === void 0) return;\n\tif (isArrayLiteralExpression(returnedExpression)) {\n\t\tconst element = returnedExpression.elements[0];\n\t\treturn element !== void 0 && isIdentifier(element) ? {\n\t\t\ttypeName: element.text,\n\t\t\tisArray: true\n\t\t} : void 0;\n\t}\n\treturn isIdentifier(returnedExpression) ? {\n\t\ttypeName: returnedExpression.text,\n\t\tisArray: false\n\t} : void 0;\n};\nvar extractResolverArgumentDefinition = (parameter, index, context) => {\n\tconst decorator = findAnyDecorator(parameter, [\"Args\"]);\n\tconst location = locationOf(context.sourceFile, parameter);\n\tif (decorator === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `Parameter \"${parameter.name.getText()}\" must be decorated with @Args to be transported through a NestBridge GraphQL client.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (!isIdentifier(parameter.name)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"Destructured parameters cannot be transported through a NestBridge GraphQL client.\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst nameArgument = readStaticStringArgument(decorator);\n\tif (!nameArgument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"@Args() name must be a statically analyzable string literal.\",\n\t\t\tfound: `@Args(${nameArgument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (nameArgument.value === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"A whole @Args() is not supported; provide an argument name such as @Args('id').\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (parameter.type === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@Args() parameter \"${parameter.name.text}\" needs an explicit type annotation.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst unwrapped = unwrapTypeNode(parameter.type);\n\tif (unwrapped === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@Args() parameter \"${parameter.name.text}\" has a type NestBridge cannot statically resolve to a GraphQL type.`,\n\t\t\tfound: parameter.type.getText(),\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst explicitType = readArgsTypeOption(decorator);\n\treturn {\n\t\tindex,\n\t\tparameterName: parameter.name.text,\n\t\tname: nameArgument.value,\n\t\tgraphqlType: graphqlTypeStringFor(unwrapped, explicitType?.typeName)\n\t};\n};\nvar parsedFilesByPath = /* @__PURE__ */ new Map();\nvar parseFile = (filePath) => {\n\tconst cached = parsedFilesByPath.get(filePath);\n\tif (cached !== void 0) return cached;\n\tconst sourceFile = parseSourceFile(filePath);\n\tparsedFilesByPath.set(filePath, sourceFile);\n\treturn sourceFile;\n};\nvar resolveModuleFile = (fromFilePath, moduleSpecifierText) => {\n\tif (!moduleSpecifierText.startsWith(\".\")) return;\n\tconst base = resolve(dirname(fromFilePath), moduleSpecifierText);\n\treturn [\n\t\t`${base}.ts`,\n\t\t`${base}.tsx`,\n\t\tresolve(base, \"index.ts\")\n\t].find((candidate) => existsSync(candidate));\n};\nvar findExportedDeclaration = (sourceFile, name) => sourceFile.statements.find((statement) => isClassDeclaration(statement) && statement.name?.text === name);\nvar findImportSource = (sourceFile, localName) => {\n\tfor (const statement of sourceFile.statements) {\n\t\tif (!isImportDeclaration(statement) || !isStringLiteralLikeNode(statement.moduleSpecifier)) continue;\n\t\tconst namedBindings = statement.importClause?.namedBindings;\n\t\tif (namedBindings === void 0 || !isNamedImports(namedBindings)) continue;\n\t\tconst element = namedBindings.elements.find((candidate) => candidate.name.text === localName);\n\t\tif (element !== void 0) return {\n\t\t\tmoduleSpecifierText: statement.moduleSpecifier.text,\n\t\t\timportedName: element.propertyName?.text ?? element.name.text\n\t\t};\n\t}\n};\nvar findReExportSource = (sourceFile, name) => {\n\tfor (const statement of sourceFile.statements) {\n\t\tif (!isExportDeclaration(statement) || statement.moduleSpecifier === void 0 || !isStringLiteralLikeNode(statement.moduleSpecifier)) continue;\n\t\tif (statement.exportClause === void 0) return statement.moduleSpecifier.text;\n\t\tif (isNamedExports(statement.exportClause) && statement.exportClause.elements.some((element) => (element.propertyName?.text ?? element.name.text) === name)) return statement.moduleSpecifier.text;\n\t}\n};\nvar resolveClassDeclaration = (name, fromSourceFile, fromFilePath, visited = /* @__PURE__ */ new Set()) => {\n\tif (visited.has(fromFilePath)) return;\n\tvisited.add(fromFilePath);\n\tconst direct = findExportedDeclaration(fromSourceFile, name);\n\tif (direct !== void 0) return {\n\t\tclassDeclaration: direct,\n\t\tsourceFile: fromSourceFile,\n\t\tfilePath: fromFilePath\n\t};\n\tconst importSource = findImportSource(fromSourceFile, name);\n\tif (importSource !== void 0) {\n\t\tconst resolvedPath = resolveModuleFile(fromFilePath, importSource.moduleSpecifierText);\n\t\tif (resolvedPath !== void 0) {\n\t\t\tconst nextSourceFile = parseFile(resolvedPath);\n\t\t\tconst result = resolveClassDeclaration(importSource.importedName, nextSourceFile, resolvedPath, visited);\n\t\t\tif (result !== void 0) return result;\n\t\t}\n\t}\n\tconst reExportModuleSpecifierText = findReExportSource(fromSourceFile, name);\n\tif (reExportModuleSpecifierText !== void 0) {\n\t\tconst resolvedPath = resolveModuleFile(fromFilePath, reExportModuleSpecifierText);\n\t\tif (resolvedPath !== void 0) return resolveClassDeclaration(name, parseFile(resolvedPath), resolvedPath, visited);\n\t}\n};\nvar PRIMITIVE_SCALAR_NAMES$1 = /* @__PURE__ */ new Set([\n\t\"string\",\n\t\"number\",\n\t\"boolean\"\n]);\nvar extractSelectionFields = (classDeclaration, sourceFile, filePath, context) => {\n\tconst typeName = classDeclaration.name?.text ?? \"(anonymous type)\";\n\tconst location = locationOf(sourceFile, classDeclaration);\n\tif (context.visitedTypeNames.has(typeName)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"circular-type\",\n\t\t\ttitle: \"Circular type.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `Type \"${typeName}\" references itself, directly or indirectly. NestBridge cannot build a finite GraphQL selection set for it.`,\n\t\t\tfilePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst nextVisited = new Set(context.visitedTypeNames).add(typeName);\n\tconst properties = classDeclaration.members.filter((member) => isPropertyDeclaration(member) && findDecorator(member, \"Field\") !== void 0);\n\tconst fields = [];\n\tfor (const property of properties) {\n\t\tif (!isIdentifier(property.name)) continue;\n\t\tconst fieldName = property.name.text;\n\t\tconst fieldLocation = locationOf(sourceFile, property);\n\t\tif (property.type === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported field type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: `Field \"${fieldName}\" on \"${typeName}\" needs an explicit type annotation.`,\n\t\t\t\tfilePath,\n\t\t\t\tline: fieldLocation.line,\n\t\t\t\tcolumn: fieldLocation.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst unwrapped = unwrapTypeNode(property.type);\n\t\tif (unwrapped === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported field type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: `Field \"${fieldName}\" on \"${typeName}\" has a type NestBridge cannot statically resolve.`,\n\t\t\t\tfound: property.type.getText(),\n\t\t\t\tfilePath,\n\t\t\t\tline: fieldLocation.line,\n\t\t\t\tcolumn: fieldLocation.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (PRIMITIVE_SCALAR_NAMES$1.has(unwrapped.identifierText)) {\n\t\t\tfields.push({ name: fieldName });\n\t\t\tcontinue;\n\t\t}\n\t\tconst resolved = resolveClassDeclaration(unwrapped.identifierText, sourceFile, filePath);\n\t\tif (resolved === void 0) {\n\t\t\tfields.push({ name: fieldName });\n\t\t\tcontinue;\n\t\t}\n\t\tif (findDecorator(resolved.classDeclaration, \"ObjectType\") === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported field type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: `Field \"${fieldName}\" on \"${typeName}\" resolves to class \"${unwrapped.identifierText}\", which is not decorated with @ObjectType(). NestBridge cannot build a GraphQL selection set for it.`,\n\t\t\t\tfilePath,\n\t\t\t\tline: fieldLocation.line,\n\t\t\t\tcolumn: fieldLocation.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst children = extractSelectionFields(resolved.classDeclaration, resolved.sourceFile, resolved.filePath, {\n\t\t\t...context,\n\t\t\tvisitedTypeNames: nextVisited\n\t\t});\n\t\tif (children === void 0) return;\n\t\tfields.push({\n\t\t\tname: fieldName,\n\t\t\tchildren\n\t\t});\n\t}\n\treturn fields;\n};\nvar readNameFromOptions = (optionsArgument) => {\n\tconst nameProperty = optionsArgument.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === \"name\");\n\tif (nameProperty === void 0 || !isStringLiteralLikeNode(nameProperty.initializer)) return;\n\treturn nameProperty.initializer.text;\n};\nvar readGraphqlOperationName = (decorator) => {\n\tconst expression = decorator.expression;\n\tif (!isCallExpression(expression)) return {\n\t\tok: true,\n\t\tvalue: void 0\n\t};\n\tlet value;\n\tfor (const argument of expression.arguments) {\n\t\tif (isArrowFunction(argument) || isFunctionExpression(argument)) continue;\n\t\tif (isStringLiteralLikeNode(argument)) {\n\t\t\tvalue = argument.text;\n\t\t\tcontinue;\n\t\t}\n\t\tif (isObjectLiteralExpression(argument)) {\n\t\t\tvalue = readNameFromOptions(argument) ?? value;\n\t\t\tcontinue;\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\targumentText: argument.getText()\n\t\t};\n\t}\n\treturn {\n\t\tok: true,\n\t\tvalue\n\t};\n};\nvar readGraphqlReturnTypeOption = (decorator) => {\n\tif (!isCallExpression(decorator.expression)) return;\n\tconst thunk = decorator.expression.arguments.find((argument) => isArrowFunction(argument) || isFunctionExpression(argument));\n\tif (thunk === void 0) return;\n\tconst returnedExpression = readTypeThunkExpression(thunk);\n\tif (returnedExpression === void 0) return;\n\tif (isArrayLiteralExpression(returnedExpression)) {\n\t\tconst element = returnedExpression.elements[0];\n\t\treturn element !== void 0 && isIdentifier(element) ? element.text : void 0;\n\t}\n\treturn isIdentifier(returnedExpression) ? returnedExpression.text : void 0;\n};\nvar PRIMITIVE_SCALAR_NAMES = /* @__PURE__ */ new Set([\n\t\"string\",\n\t\"number\",\n\t\"boolean\"\n]);\nvar extractResolverMethodDefinition = (method, context) => {\n\tconst decorator = findAnyDecorator(method, Object.keys(GRAPHQL_OPERATION_DECORATOR_NAMES));\n\tif (decorator === void 0) return;\n\tconst methodName = method.name.getText();\n\tconst decoratorName = decoratorNameOf(decorator);\n\tconst location = locationOf(context.sourceFile, method);\n\tif (decoratorName === void 0) return;\n\tconst operationKind = GRAPHQL_OPERATION_DECORATOR_NAMES[decoratorName];\n\tif (operationKind === void 0) return;\n\tconst nameArgument = readGraphqlOperationName(decorator);\n\tif (!nameArgument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-route\",\n\t\t\ttitle: \"Unsupported operation name.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: methodName,\n\t\t\tdetail: \"GraphQL operation names must be statically analyzable string literals.\",\n\t\t\tfound: `@${decoratorName}(${nameArgument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst decoratorReturnType = readGraphqlReturnTypeOption(decorator);\n\tconst identifierText = decoratorReturnType ?? (method.type === void 0 ? void 0 : unwrapTypeNode(method.type)?.identifierText);\n\tif (identifierText === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-return-type\",\n\t\t\ttitle: \"Unsupported return type.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: methodName,\n\t\t\tdetail: \"GraphQL resolver methods need a type thunk on @Query()/@Mutation() (e.g. \\\"() => UserType\\\") or an explicit return type annotation so NestBridge can build a selection set.\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tlet selection = [];\n\tif (!PRIMITIVE_SCALAR_NAMES.has(identifierText.toLowerCase())) {\n\t\tconst resolved = resolveClassDeclaration(identifierText, context.sourceFile, context.filePath);\n\t\tif (resolved === void 0 && decoratorReturnType === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported return type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: methodName,\n\t\t\t\tdetail: `NestBridge could not locate the declaration of type \"${identifierText}\".`,\n\t\t\t\tfilePath: context.filePath,\n\t\t\t\tline: location.line,\n\t\t\t\tcolumn: location.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (resolved !== void 0) {\n\t\t\tconst fields = extractSelectionFields(resolved.classDeclaration, resolved.sourceFile, resolved.filePath, {\n\t\t\t\tresolverName: context.resolverName,\n\t\t\t\tmethodName,\n\t\t\t\tdiagnostics: context.diagnostics,\n\t\t\t\tvisitedTypeNames: /* @__PURE__ */ new Set()\n\t\t\t});\n\t\t\tif (fields === void 0) return;\n\t\t\tselection = fields;\n\t\t}\n\t}\n\tconst args = method.parameters.map((parameter, index) => extractResolverArgumentDefinition(parameter, index, {\n\t\tsourceFile: context.sourceFile,\n\t\tfilePath: context.filePath,\n\t\tresolverName: context.resolverName,\n\t\tmethodName,\n\t\tdiagnostics: context.diagnostics\n\t}));\n\tif (args.some((argument) => argument === void 0)) return;\n\treturn {\n\t\tname: methodName,\n\t\toperationKind,\n\t\toperationName: nameArgument.value ?? methodName,\n\t\targuments: args.filter((argument) => argument !== void 0),\n\t\tselection,\n\t\tline: location.line,\n\t\tcolumn: location.column\n\t};\n};\nvar extractResolverDefinition = (classDeclaration, sourceFile, filePath, diagnostics) => {\n\tconst resolverName = classDeclaration.name?.text ?? \"(anonymous resolver)\";\n\treturn {\n\t\tname: resolverName,\n\t\tsourceFile: filePath,\n\t\tmethods: classDeclaration.members.filter((member) => isMethodDeclaration(member)).map((method) => extractResolverMethodDefinition(method, {\n\t\t\tsourceFile,\n\t\t\tfilePath,\n\t\t\tresolverName,\n\t\t\tdiagnostics\n\t\t})).filter((method) => method !== void 0)\n\t};\n};\nvar findResolverClasses = (sourceFile) => {\n\treturn sourceFile.statements.filter((statement) => isClassDeclaration(statement) && findDecorator(statement, \"Resolver\") !== void 0);\n};\nvar analyzeResolvers = (filePaths) => {\n\tconst diagnostics = [];\n\tconst resolvers = [];\n\tfor (const filePath of filePaths) {\n\t\tconst sourceFile = parseSourceFile(filePath);\n\t\tfor (const classDeclaration of findResolverClasses(sourceFile)) {\n\t\t\tconst resolver = extractResolverDefinition(classDeclaration, sourceFile, filePath, diagnostics);\n\t\t\tif (resolver !== void 0) resolvers.push(resolver);\n\t\t}\n\t}\n\treturn {\n\t\tresolvers,\n\t\tdiagnostics\n\t};\n};\nvar REMOTE_RESULT_HELPERS = {\n\tjson: \"RemoteResult\",\n\tobservable: \"RemoteObservableResult\",\n\tstream: \"RemoteStreamResult\"\n};\nvar toPosixPath = (filePath) => filePath.replace(/\\\\/g, \"/\");\nvar importSpecifierFor = (sourceFile, outputFilePath) => {\n\tif (!sourceFile.startsWith(\".\") && !/^[A-Za-z]:[\\\\/]/.test(sourceFile) && !sourceFile.startsWith(\"/\")) return sourceFile;\n\tconst relativePath = toPosixPath(relative(dirname(outputFilePath), sourceFile));\n\treturn relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n};\nvar stripExtension = (filePath) => {\n\tconst extension = extname(filePath);\n\treturn extension.length > 0 ? filePath.slice(0, -extension.length) : filePath;\n};\nvar generateControllerDeclaration = (controller, outputFilePath) => {\n\tconst sourceFileSpecifier = importSpecifierFor(controller.sourceFile, outputFilePath);\n\tconst importSpecifier = stripExtension(sourceFileSpecifier);\n\tconst serverAlias = `__Server${controller.name}`;\n\tconst classBody = [\n\t\t\" constructor();\",\n\t\t\"\",\n\t\t...controller.methods.map((method) => {\n\t\t\tconst helperName = REMOTE_RESULT_HELPERS[method.responseKind ?? \"json\"];\n\t\t\treturn ` ${method.name}(...args: Parameters<${serverAlias}['${method.name}']>): ${helperName}<${serverAlias}['${method.name}']>;`;\n\t\t})\n\t].join(\"\\n\");\n\tconst usedHelperNames = new Set(controller.methods.map((method) => REMOTE_RESULT_HELPERS[method.responseKind ?? \"json\"]));\n\tconst helperImports = Array.from(usedHelperNames.size > 0 ? usedHelperNames : [\"RemoteResult\"]).sort();\n\treturn [\n\t\t`import type { ${controller.name} as ${serverAlias} } from '${importSpecifier}';`,\n\t\t`import type { ${helperImports.join(\", \")} } from 'nestbridge';`,\n\t\t\"\",\n\t\t\"/**\",\n\t\t\" * Generated by NestBridge — client-facing methods only.\",\n\t\t` * @see {@link ${sourceFileSpecifier}} for the real controller implementation.`,\n\t\t\" */\",\n\t\t`export declare class ${controller.name} {`,\n\t\tclassBody,\n\t\t\"}\",\n\t\t\"\"\n\t].join(\"\\n\");\n};\nvar formatDiagnostic = (diagnostic) => {\n\tconst subject = diagnostic.memberName.length > 0 ? `${diagnostic.controllerName}.${diagnostic.memberName}` : diagnostic.controllerName;\n\tconst lines = [\n\t\t`[NestBridge] ${diagnostic.title}`,\n\t\t\"\",\n\t\tsubject,\n\t\t\"\",\n\t\tdiagnostic.detail\n\t];\n\tif (diagnostic.found !== void 0) lines.push(\"\", \"Found:\", diagnostic.found);\n\tif (diagnostic.expected !== void 0) lines.push(\"\", \"Expected:\", diagnostic.expected);\n\tlines.push(\"\", `${diagnostic.filePath}:${diagnostic.line}:${diagnostic.column}`);\n\treturn lines.join(\"\\n\");\n};\n//#endregion\n//#region src/codegen/generate-config-module.ts\nvar generateConfigModule = (options) => {\n\tif (options.baseURL === void 0) return \"\";\n\treturn [\n\t\t\"import { setNestBridgeBaseURL } from 'nestbridge';\",\n\t\t\"\",\n\t\t`setNestBridgeBaseURL(${JSON.stringify(options.baseURL)});`,\n\t\t\"\"\n\t].join(\"\\n\");\n};\n//#endregion\n//#region src/virtual-modules/config-virtual-id.ts\n/**\n* Must not contain a colon: webpack treats any `letter+:` prefix as a URL\n* scheme and routes the request past its filesystem resolver entirely,\n* bypassing the resolveId hook this virtual module relies on.\n*/\nvar CONFIG_VIRTUAL_MODULE_ID = \"virtual-nestbridge-config\";\nvar RESOLVED_CONFIG_VIRTUAL_MODULE_ID = `\\0${CONFIG_VIRTUAL_MODULE_ID}`;\n//#endregion\n//#region src/codegen/merge-named-parameters-expression.ts\nvar mergeNamedParametersExpression = (parameters) => {\n\tif (parameters.length === 0) return;\n\tconst whole = parameters.find((parameter) => parameter.name === void 0);\n\tconst named = parameters.filter((parameter) => parameter.name !== void 0);\n\tconst namedEntries = named.map((parameter) => `${JSON.stringify(parameter.name)}: ${parameter.parameterName}`);\n\tif (whole === void 0) return `{ ${namedEntries.join(\", \")} }`;\n\tif (named.length === 0) return whole.parameterName;\n\treturn `{ ...${whole.parameterName}, ${namedEntries.join(\", \")} }`;\n};\n//#endregion\n//#region src/codegen/generate-body-expression.ts\nvar generateBodyExpression = (parameters) => mergeNamedParametersExpression(parameters.filter((parameter) => parameter.kind === \"body\"));\n//#endregion\n//#region src/codegen/generate-headers-expression.ts\nvar generateHeadersExpression = (parameters) => {\n\tconst headerParameters = parameters.filter((parameter) => parameter.kind === \"header\");\n\tif (headerParameters.length === 0) return;\n\treturn `{ ${headerParameters.map((parameter) => `${JSON.stringify(parameter.name)}: ${parameter.parameterName}`).join(\", \")} }`;\n};\n//#endregion\n//#region src/codegen/generate-parameter-list.ts\nvar generateParameterList = (parameters) => [...parameters].sort((a, b) => a.index - b.index).map((parameter) => parameter.parameterName).join(\", \");\n//#endregion\n//#region src/codegen/generate-path-expression.ts\nvar PARAM_TOKEN_PATTERN = /:([A-Za-z0-9_]+)/;\nvar generatePathExpression = (method) => {\n\tconst paramParameters = method.parameters.filter((parameter) => parameter.kind === \"param\");\n\tconst parts = method.path.split(PARAM_TOKEN_PATTERN);\n\tconst expressionParts = [];\n\tparts.forEach((part, index) => {\n\t\tif (!(index % 2 === 1)) {\n\t\t\tif (part.length > 0) expressionParts.push(JSON.stringify(part));\n\t\t\treturn;\n\t\t}\n\t\tconst match = paramParameters.find((parameter) => parameter.name === part);\n\t\texpressionParts.push(match !== void 0 ? `encodeURIComponent(${match.parameterName})` : JSON.stringify(`:${part}`));\n\t});\n\treturn expressionParts.length > 0 ? expressionParts.join(\" + \") : \"''\";\n};\n//#endregion\n//#region src/codegen/generate-query-expression.ts\nvar generateQueryExpression = (parameters) => mergeNamedParametersExpression(parameters.filter((parameter) => parameter.kind === \"query\"));\n//#endregion\n//#region src/codegen/generate-controller-module.ts\nvar generateMethod$1 = (method) => {\n\tconst requestProperties = [`method: ${JSON.stringify(method.httpMethod)}`, `path: ${generatePathExpression(method)}`];\n\tconst queryExpression = generateQueryExpression(method.parameters);\n\tif (queryExpression !== void 0) requestProperties.push(`query: ${queryExpression}`);\n\tconst bodyExpression = generateBodyExpression(method.parameters);\n\tif (bodyExpression !== void 0) requestProperties.push(`body: ${bodyExpression}`);\n\tconst headersExpression = generateHeadersExpression(method.parameters);\n\tif (headersExpression !== void 0) requestProperties.push(`headers: ${headersExpression}`);\n\tif (method.responseKind === \"stream\") requestProperties.push(`responseType: \"blob\"`);\n\treturn [\n\t\t` ${method.name}(${generateParameterList(method.parameters)}) {`,\n\t\t\" return request({\",\n\t\t...requestProperties.map((property) => ` ${property},`),\n\t\t\" });\",\n\t\t\" }\"\n\t].join(\"\\n\");\n};\nvar generateControllerModule = (controller) => {\n\tconst methods = controller.methods.map(generateMethod$1).join(\"\\n\\n\");\n\treturn [\n\t\t`import '${CONFIG_VIRTUAL_MODULE_ID}';`,\n\t\t\"import { request } from 'nestbridge';\",\n\t\t\"\",\n\t\t`export class ${controller.name} {`,\n\t\t\" constructor() {}\",\n\t\t\"\",\n\t\tmethods,\n\t\t\"}\",\n\t\t\"\"\n\t].join(\"\\n\");\n};\n//#endregion\n//#region src/codegen/generate-graphql-document.ts\nvar capitalize = (value) => `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\nvar renderSelectionSet = (fields) => {\n\treturn `{ ${fields.map((field) => field.children === void 0 ? field.name : `${field.name} ${renderSelectionSet(field.children)}`).join(\" \")} }`;\n};\nvar generateGraphqlDocument = (method) => {\n\tconst variableDeclarations = method.arguments.map((argument) => `$${argument.name}: ${argument.graphqlType}`).join(\", \");\n\tconst fieldArguments = method.arguments.map((argument) => `${argument.name}: $${argument.name}`).join(\", \");\n\tconst variablesClause = variableDeclarations.length > 0 ? `(${variableDeclarations})` : \"\";\n\tconst fieldArgumentsClause = fieldArguments.length > 0 ? `(${fieldArguments})` : \"\";\n\tconst fieldSelection = method.selection.length > 0 ? ` ${renderSelectionSet(method.selection)}` : \"\";\n\treturn `${method.operationKind} ${capitalize(method.name)}${variablesClause} { ${method.operationName}${fieldArgumentsClause}${fieldSelection} }`;\n};\n//#endregion\n//#region src/codegen/generate-resolver-argument-list.ts\nvar generateResolverArgumentList = (resolverArguments) => [...resolverArguments].sort((a, b) => a.index - b.index).map((argument) => argument.parameterName).join(\", \");\n//#endregion\n//#region src/codegen/generate-resolver-module.ts\nvar generateVariablesExpression = (resolverArguments) => {\n\tif (resolverArguments.length === 0) return;\n\treturn `{ ${resolverArguments.map((argument) => `${JSON.stringify(argument.name)}: ${argument.parameterName}`).join(\", \")} }`;\n};\nvar generateMethod = (method) => {\n\tconst requestProperties = [`document: ${JSON.stringify(generateGraphqlDocument(method))}`];\n\tconst variablesExpression = generateVariablesExpression(method.arguments);\n\tif (variablesExpression !== void 0) requestProperties.push(`variables: ${variablesExpression}`);\n\treturn [\n\t\t` async ${method.name}(${generateResolverArgumentList(method.arguments)}) {`,\n\t\t\" const result = await graphqlRequest({\",\n\t\t...requestProperties.map((property) => ` ${property},`),\n\t\t\" });\",\n\t\t\"\",\n\t\t` return result.${method.operationName};`,\n\t\t\" }\"\n\t].join(\"\\n\");\n};\nvar generateResolverModule = (resolver) => {\n\tconst methods = resolver.methods.map(generateMethod).join(\"\\n\\n\");\n\treturn [\n\t\t`import '${CONFIG_VIRTUAL_MODULE_ID}';`,\n\t\t\"import { graphqlRequest } from 'nestbridge';\",\n\t\t\"\",\n\t\t`export class ${resolver.name} {`,\n\t\t\" constructor() {}\",\n\t\t\"\",\n\t\tmethods,\n\t\t\"}\",\n\t\t\"\"\n\t].join(\"\\n\");\n};\n//#endregion\n//#region src/declarations/mirror-declaration-path.ts\nvar stripLeadingParentSegments = (relativePath) => {\n\tconst segments = relativePath.split(/[\\\\/]/);\n\tconst firstOwnedIndex = segments.findIndex((segment) => segment !== \"..\");\n\treturn segments.slice(firstOwnedIndex === -1 ? segments.length : firstOwnedIndex).join(\"/\");\n};\nvar mirroredDeclarationPath = (root, outputDir, controllerFilePath) => {\n\tconst mirroredPath = stripLeadingParentSegments(relative(root, controllerFilePath)).replace(/\\.ts$/, \".d.ts\");\n\treturn join(root, outputDir, mirroredPath);\n};\n//#endregion\n//#region src/declarations/write-controller-declarations.ts\nvar writeControllerDeclarations = (controllers, root, outputDir) => {\n\tfor (const controller of controllers) {\n\t\tconst outputFilePath = mirroredDeclarationPath(root, outputDir, controller.sourceFile);\n\t\tmkdirSync(dirname(outputFilePath), { recursive: true });\n\t\twriteFileSync(outputFilePath, generateControllerDeclaration(controller, outputFilePath), \"utf-8\");\n\t}\n};\n//#endregion\n//#region src/declarations/write-resolver-declarations.ts\nvar writeResolverDeclarations = (resolvers, root, outputDir) => {\n\tfor (const resolver of resolvers) {\n\t\tconst outputFilePath = mirroredDeclarationPath(root, outputDir, resolver.sourceFile);\n\t\tmkdirSync(dirname(outputFilePath), { recursive: true });\n\t\twriteFileSync(outputFilePath, generateControllerDeclaration(resolver, outputFilePath), \"utf-8\");\n\t}\n};\n//#endregion\n//#region src/discovery/discover-files.ts\nvar discoverFiles = (patterns, root) => {\n\tconst matches = globSync([...patterns], { cwd: root });\n\treturn [...new Set(matches.map((match) => resolve(root, match)))].sort();\n};\n//#endregion\n//#region src/options/nestbridge-options.ts\nvar resolveNestBridgeOptions = (options) => ({\n\tcontrollers: Array.isArray(options.controllers) ? options.controllers : [options.controllers],\n\tresolvers: options.resolvers === void 0 ? [] : Array.isArray(options.resolvers) ? options.resolvers : [options.resolvers],\n\tbaseURL: options.baseURL,\n\tdebug: options.debug ?? false,\n\toutputDir: options.outputDir ?? \".nestbridge\",\n\troot: options.root\n});\n//#endregion\n//#region src/plugin/normalize-path.ts\nvar isWindows = process.platform === \"win32\";\nvar normalizePath = (filePath) => posix.normalize(isWindows ? filePath.replaceAll(\"\\\\\", \"/\") : filePath);\n//#endregion\n//#region src/plugin/controller-registry.ts\nvar createControllerRegistry = (patterns, root) => {\n\tconst controllersByFile = /* @__PURE__ */ new Map();\n\tconst refresh = () => {\n\t\tcontrollersByFile.clear();\n\t\tconst { controllers, diagnostics } = analyzeControllers(discoverFiles(patterns, root));\n\t\tfor (const controller of controllers) controllersByFile.set(normalizePath(controller.sourceFile), controller);\n\t\treturn {\n\t\t\tcontrollers,\n\t\t\tdiagnostics\n\t\t};\n\t};\n\treturn {\n\t\trefresh,\n\t\tget: (filePath) => controllersByFile.get(filePath),\n\t\thas: (filePath) => controllersByFile.has(filePath),\n\t\tall: () => [...controllersByFile.values()]\n\t};\n};\n//#endregion\n//#region src/plugin/resolver-registry.ts\nvar createResolverRegistry = (patterns, root) => {\n\tconst resolversByFile = /* @__PURE__ */ new Map();\n\tconst refresh = () => {\n\t\tresolversByFile.clear();\n\t\tconst { resolvers, diagnostics } = analyzeResolvers(discoverFiles(patterns, root));\n\t\tfor (const resolver of resolvers) resolversByFile.set(normalizePath(resolver.sourceFile), resolver);\n\t\treturn {\n\t\t\tresolvers,\n\t\t\tdiagnostics\n\t\t};\n\t};\n\treturn {\n\t\trefresh,\n\t\tget: (filePath) => resolversByFile.get(filePath),\n\t\thas: (filePath) => resolversByFile.has(filePath),\n\t\tall: () => [...resolversByFile.values()]\n\t};\n};\n//#endregion\n//#region src/plugin/nestbridge-unplugin-factory.ts\nvar reportDiagnostics = (diagnostics, watchMode) => {\n\tfor (const diagnostic of diagnostics) {\n\t\tconst message = formatDiagnostic(diagnostic);\n\t\tif (watchMode === false) throw new Error(message);\n\t\tconsole.warn(message);\n\t}\n};\nvar nestBridgeUnplugin = createUnplugin((options, meta) => {\n\tconst resolvedOptions = resolveNestBridgeOptions(options);\n\tlet root = resolvedOptions.root ?? process.cwd();\n\tlet controllerRegistry;\n\tlet resolverRegistry;\n\tconst log = (message) => {\n\t\tif (resolvedOptions.debug) console.log(`[nestbridge] ${message}`);\n\t};\n\tconst runAnalysis = () => {\n\t\tconst { controllers, diagnostics: controllerDiagnostics } = controllerRegistry.refresh();\n\t\tconst { resolvers, diagnostics: resolverDiagnostics } = resolverRegistry.refresh();\n\t\treportDiagnostics([...controllerDiagnostics, ...resolverDiagnostics], meta.watchMode);\n\t\twriteControllerDeclarations(controllers, root, resolvedOptions.outputDir);\n\t\twriteResolverDeclarations(resolvers, root, resolvedOptions.outputDir);\n\t\tlog(`analyzed ${controllers.length} controller(s), ${resolvers.length} resolver(s), ${controllerDiagnostics.length + resolverDiagnostics.length} diagnostic(s)`);\n\t};\n\treturn {\n\t\tname: \"nestbridge\",\n\t\tenforce: \"pre\",\n\t\tbuildStart() {\n\t\t\tcontrollerRegistry = createControllerRegistry(resolvedOptions.controllers, root);\n\t\t\tresolverRegistry = createResolverRegistry(resolvedOptions.resolvers, root);\n\t\t\trunAnalysis();\n\t\t},\n\t\tresolveId(source) {\n\t\t\tif (source === \"virtual-nestbridge-config\") return RESOLVED_CONFIG_VIRTUAL_MODULE_ID;\n\t\t\treturn null;\n\t\t},\n\t\tload(id) {\n\t\t\tif (id === RESOLVED_CONFIG_VIRTUAL_MODULE_ID) return generateConfigModule(resolvedOptions);\n\t\t\treturn null;\n\t\t},\n\t\ttransform(_code, id) {\n\t\t\tconst absolutePath = normalizePath(id);\n\t\t\tconst controller = controllerRegistry.get(absolutePath);\n\t\t\tif (controller !== void 0) return generateControllerModule(controller);\n\t\t\tconst resolver = resolverRegistry.get(absolutePath);\n\t\t\tif (resolver !== void 0) return generateResolverModule(resolver);\n\t\t\treturn null;\n\t\t},\n\t\twatchChange(id) {\n\t\t\tconst changedFile = normalizePath(id);\n\t\t\tconst wasTracked = controllerRegistry.has(changedFile) || resolverRegistry.has(changedFile);\n\t\t\tconst isTrackedNow = discoverFiles(resolvedOptions.controllers, root).map(normalizePath).includes(changedFile) || discoverFiles(resolvedOptions.resolvers, root).map(normalizePath).includes(changedFile);\n\t\t\tif (!wasTracked && !isTrackedNow) return;\n\t\t\trunAnalysis();\n\t\t\tlog(`nestbridge source changed: ${changedFile}`);\n\t\t},\n\t\tvite: { configResolved(config) {\n\t\t\tif (resolvedOptions.root === void 0) root = config.root;\n\t\t} }\n\t};\n});\n//#endregion\n//#region src/version.ts\nvar VERSION = \"2.0.4\";\n//#endregion\nexport { VERSION, nestBridgeUnplugin };\n\n//# sourceMappingURL=nestbridge.unplugin.js.map","{\n \"name\": \"@nestbridge/webpack\",\n \"version\": \"2.0.4\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/MDReal32/nestbridge.git\",\n \"directory\": \"packages/webpack\"\n },\n \"main\": \"./build/nestbridge.webpack.js\",\n \"types\": \"./build/nestbridge.webpack.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./build/nestbridge.webpack.d.ts\",\n \"import\": \"./build/nestbridge.webpack.js\"\n }\n },\n \"files\": [\n \"build\"\n ],\n \"scripts\": {\n \"build\": \"vite build\",\n \"test\": \"vitest run\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit\",\n \"lint\": \"biome check .\"\n },\n \"dependencies\": {\n \"@nestbridge/unplugin\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^26.4.1\",\n \"esbuild-loader\": \"^4.5.0\",\n \"rolldown-plugin-dts\": \"^0.28.5\",\n \"typescript\": \"^7.0.2\",\n \"vite\": \"^8.2.2\",\n \"vitest\": \"^5.0.0\",\n \"webpack\": \"^5.110.3\"\n },\n \"peerDependencies\": {\n \"webpack\": \"^5.110.3\"\n }\n}\n","import { version } from '../package.json';\n\nexport const VERSION: string = version;\n","import { type NestBridgeOptions, nestBridgeUnplugin } from '@nestbridge/unplugin';\nimport type { WebpackPluginInstance } from 'webpack';\n\nexport type { NestBridgeOptions } from '@nestbridge/unplugin';\nexport const nestBridge: (options: NestBridgeOptions) => WebpackPluginInstance =\n nestBridgeUnplugin.webpack;\nexport { VERSION } from './version';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nestbridge.webpack.js","names":[],"sources":["../../unplugin/build/nestbridge.unplugin.js","../package.json","../src/version.ts","../src/main.ts"],"sourcesContent":["import { dirname, extname, join, posix, relative, resolve, sep } from \"node:path\";\nimport { SyntaxKind, isArrayLiteralExpression, isArrayTypeNode, isArrowFunction, isBlock, isCallExpression, isClassDeclaration, isDecorator, isExportDeclaration, isExpressionStatement, isFalseLiteral, isFunctionExpression, isIdentifier, isImportDeclaration, isMethodDeclaration, isNamedExports, isNamedImports, isNewExpression, isNullLiteral, isNumericLiteral, isObjectLiteralExpression, isParenthesizedExpression, isPropertyAccessExpression, isPropertyAssignment, isPropertyDeclaration, isReturnStatement, isSpreadElement, isStringLiteral, isStringLiteralLikeNode, isTrueLiteral, isTypeReferenceNode, isUnionTypeNode, isVariableStatement } from \"typescript/unstable/ast\";\nimport { API } from \"typescript/unstable/sync\";\nimport { existsSync, globSync, mkdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createUnplugin } from \"unplugin\";\n//#region ../core/build/nestbridge.core.js\nvar getDecorators = (node) => {\n\tconst decorators = node.modifiers?.filter(isDecorator);\n\treturn decorators === void 0 || decorators.length === 0 ? void 0 : decorators;\n};\nvar findDecorator = (node, decoratorName) => {\n\tconst decorators = getDecorators(node);\n\tif (decorators === void 0) return;\n\treturn decorators.find((decorator) => decoratorNameOf(decorator) === decoratorName);\n};\nvar findAnyDecorator = (node, decoratorNames) => {\n\tconst decorators = getDecorators(node);\n\tif (decorators === void 0) return;\n\treturn decorators.find((decorator) => decoratorNames.includes(decoratorNameOf(decorator) ?? \"\"));\n};\nvar decoratorNameOf = (decorator) => {\n\tconst expression = decorator.expression;\n\tif (isCallExpression(expression) && isIdentifier(expression.expression)) return expression.expression.text;\n\tif (isIdentifier(expression)) return expression.text;\n};\nvar readStaticStringArgument = (decorator) => {\n\tconst expression = decorator.expression;\n\tif (!isCallExpression(expression)) return {\n\t\tok: true,\n\t\tvalue: void 0\n\t};\n\tconst [firstArgument] = expression.arguments;\n\tif (firstArgument === void 0) return {\n\t\tok: true,\n\t\tvalue: void 0\n\t};\n\tif (isStringLiteralLikeNode(firstArgument)) return {\n\t\tok: true,\n\t\tvalue: firstArgument.text\n\t};\n\treturn {\n\t\tok: false,\n\t\targumentText: firstArgument.getText()\n\t};\n};\nvar HTTP_METHOD_DECORATOR_NAMES = {\n\tGet: \"GET\",\n\tPost: \"POST\",\n\tPut: \"PUT\",\n\tPatch: \"PATCH\",\n\tDelete: \"DELETE\"\n};\nvar locationOf = (sourceFile, node) => {\n\tconst { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n\treturn {\n\t\tline: line + 1,\n\t\tcolumn: character + 1\n\t};\n};\nvar SUPPORTED_PARAMETER_DECORATORS = [\n\t\"Param\",\n\t\"Query\",\n\t\"Body\",\n\t\"Headers\"\n];\nvar KNOWN_UNSUPPORTED_PARAMETER_DECORATORS = [\n\t\"Req\",\n\t\"Res\",\n\t\"Request\",\n\t\"Response\"\n];\nvar extractParameterDefinition = (parameter, index, context) => {\n\tconst decorator = findAnyDecorator(parameter, [...SUPPORTED_PARAMETER_DECORATORS, ...KNOWN_UNSUPPORTED_PARAMETER_DECORATORS]);\n\tconst location = locationOf(context.sourceFile, parameter);\n\tif (decorator === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `Parameter \"${parameter.name.getText()}\" must be decorated with one of @Param, @Query, @Body, or @Headers to be transported through a NestBridge HTTP client.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst decoratorName = decoratorNameOf(decorator);\n\tif (decoratorName !== void 0 && KNOWN_UNSUPPORTED_PARAMETER_DECORATORS.includes(decoratorName)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@${decoratorName}() cannot be transported through a NestBridge HTTP client.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (!isIdentifier(parameter.name)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"Destructured parameters cannot be transported through a NestBridge HTTP client.\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst argument = readStaticStringArgument(decorator);\n\tif (!argument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-parameter\",\n\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@${decoratorName}() arguments must be statically analyzable string literals.`,\n\t\t\tfound: `@${decoratorName}(${argument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst base = {\n\t\tindex,\n\t\tparameterName: parameter.name.text\n\t};\n\tif (decoratorName === \"Param\") {\n\t\tif (argument.value === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-parameter\",\n\t\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\t\tcontrollerName: context.controllerName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: \"A whole @Param() is not supported; provide a route parameter name such as @Param('id').\",\n\t\t\t\tfilePath: context.filePath,\n\t\t\t\tline: location.line,\n\t\t\t\tcolumn: location.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tkind: \"param\",\n\t\t\tname: argument.value\n\t\t};\n\t}\n\tif (decoratorName === \"Headers\") {\n\t\tif (argument.value === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-parameter\",\n\t\t\t\ttitle: \"Unsupported parameter.\",\n\t\t\t\tcontrollerName: context.controllerName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: \"A whole @Headers() is not supported; provide a header name such as @Headers('x-example').\",\n\t\t\t\tfilePath: context.filePath,\n\t\t\t\tline: location.line,\n\t\t\t\tcolumn: location.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tkind: \"header\",\n\t\t\tname: argument.value\n\t\t};\n\t}\n\tif (decoratorName === \"Query\") return {\n\t\t...base,\n\t\tkind: \"query\",\n\t\tname: argument.value\n\t};\n\treturn {\n\t\t...base,\n\t\tkind: \"body\",\n\t\tname: argument.value\n\t};\n};\nvar PRIMITIVE_SCALAR_TYPES = {\n\tstring: \"String\",\n\tnumber: \"Float\",\n\tboolean: \"Boolean\"\n};\nvar unwrapPromise = (typeNode) => {\n\tif (isTypeReferenceNode(typeNode) && isIdentifier(typeNode.typeName) && typeNode.typeName.text === \"Promise\" && typeNode.typeArguments?.[0] !== void 0) return unwrapPromise(typeNode.typeArguments[0]);\n\treturn typeNode;\n};\nvar unwrapNullable = (typeNode) => {\n\tif (!isUnionTypeNode(typeNode)) return {\n\t\tinner: typeNode,\n\t\tisNullable: false\n\t};\n\tconst nonNullMembers = typeNode.types.filter((member) => member.kind !== SyntaxKind.NullKeyword && member.kind !== SyntaxKind.UndefinedKeyword);\n\tconst [onlyMember] = nonNullMembers;\n\tif (nonNullMembers.length !== 1 || onlyMember === void 0) return {\n\t\tinner: typeNode,\n\t\tisNullable: nonNullMembers.length !== typeNode.types.length\n\t};\n\treturn {\n\t\tinner: onlyMember,\n\t\tisNullable: true\n\t};\n};\nvar unwrapArrayElement = (typeNode) => {\n\tif (isArrayTypeNode(typeNode)) return typeNode.elementType;\n\tif (isTypeReferenceNode(typeNode) && isIdentifier(typeNode.typeName) && typeNode.typeName.text === \"Array\" && typeNode.typeArguments?.[0] !== void 0) return typeNode.typeArguments[0];\n};\nvar identifierTextOf = (typeNode) => {\n\tif (isTypeReferenceNode(typeNode) && isIdentifier(typeNode.typeName)) return typeNode.typeName.text;\n\tswitch (typeNode.kind) {\n\t\tcase SyntaxKind.StringKeyword: return \"string\";\n\t\tcase SyntaxKind.NumberKeyword: return \"number\";\n\t\tcase SyntaxKind.BooleanKeyword: return \"boolean\";\n\t\tdefault: return;\n\t}\n};\nvar unwrapTypeNode = (typeNode) => {\n\tconst { inner: withoutNullable, isNullable } = unwrapNullable(unwrapPromise(typeNode));\n\tconst arrayElement = unwrapArrayElement(withoutNullable);\n\tconst identifierText = identifierTextOf(arrayElement === void 0 ? withoutNullable : unwrapNullable(arrayElement).inner);\n\tif (identifierText === void 0) return;\n\treturn {\n\t\tidentifierText,\n\t\tisArray: arrayElement !== void 0,\n\t\tisNullable\n\t};\n};\nvar graphqlScalarNameFor = (identifierText) => PRIMITIVE_SCALAR_TYPES[identifierText] ?? identifierText;\nvar graphqlTypeStringFor = (unwrapped, explicitTypeName) => {\n\tconst baseName = explicitTypeName ?? graphqlScalarNameFor(unwrapped.identifierText);\n\tconst wrapped = unwrapped.isArray ? `[${baseName}!]` : baseName;\n\treturn unwrapped.isNullable ? wrapped : `${wrapped}!`;\n};\nvar OBSERVABLE_TYPE_NAME = \"Observable\";\nvar STREAMABLE_FILE_TYPE_NAME = \"StreamableFile\";\nvar readResponseKind = (returnType) => {\n\tif (returnType === void 0) return \"json\";\n\tconst unwrapped = unwrapPromise(returnType);\n\tif (!isTypeReferenceNode(unwrapped) || !isIdentifier(unwrapped.typeName)) return \"json\";\n\tif (unwrapped.typeName.text === OBSERVABLE_TYPE_NAME) return \"observable\";\n\tif (unwrapped.typeName.text === STREAMABLE_FILE_TYPE_NAME) return \"stream\";\n\treturn \"json\";\n};\nvar trimSlashes = (segment) => segment.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\nvar joinRoutePath = (controllerPath, methodPath) => {\n\treturn `/${[trimSlashes(controllerPath), trimSlashes(methodPath ?? \"\")].filter((segment) => segment.length > 0).join(\"/\")}`;\n};\nvar extractMethodDefinition = (method, context) => {\n\tconst decorator = findAnyDecorator(method, Object.keys(HTTP_METHOD_DECORATOR_NAMES));\n\tif (decorator === void 0) return;\n\tconst methodName = method.name.getText();\n\tconst decoratorName = decoratorNameOf(decorator);\n\tconst location = locationOf(context.sourceFile, method);\n\tif (decoratorName === void 0) return;\n\tconst httpMethod = HTTP_METHOD_DECORATOR_NAMES[decoratorName];\n\tif (httpMethod === void 0) return;\n\tconst routeArgument = readStaticStringArgument(decorator);\n\tif (!routeArgument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-route\",\n\t\t\ttitle: \"Unsupported route.\",\n\t\t\tcontrollerName: context.controllerName,\n\t\t\tmemberName: methodName,\n\t\t\tdetail: \"Route paths must be statically analyzable.\",\n\t\t\tfound: `@${decoratorName}(${routeArgument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst parameters = method.parameters.map((parameter, index) => extractParameterDefinition(parameter, index, {\n\t\tsourceFile: context.sourceFile,\n\t\tfilePath: context.filePath,\n\t\tcontrollerName: context.controllerName,\n\t\tmethodName,\n\t\tdiagnostics: context.diagnostics\n\t}));\n\tif (parameters.some((parameter) => parameter === void 0)) return;\n\treturn {\n\t\tname: methodName,\n\t\thttpMethod,\n\t\tpath: joinRoutePath(context.controllerPath, routeArgument.value),\n\t\tparameters: parameters.filter((parameter) => parameter !== void 0),\n\t\tresponseKind: readResponseKind(method.type),\n\t\tline: location.line,\n\t\tcolumn: location.column\n\t};\n};\nvar extractControllerDefinition = (classDeclaration, sourceFile, filePath, diagnostics) => {\n\tconst controllerName = classDeclaration.name?.text ?? \"(anonymous controller)\";\n\tconst decorator = findDecorator(classDeclaration, \"Controller\");\n\tif (decorator === void 0) return;\n\tconst location = locationOf(sourceFile, classDeclaration);\n\tconst argument = readStaticStringArgument(decorator);\n\tif (!argument.ok) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"unsupported-route\",\n\t\t\ttitle: \"Unsupported route.\",\n\t\t\tcontrollerName,\n\t\t\tmemberName: \"\",\n\t\t\tdetail: \"Controller paths must be statically analyzable.\",\n\t\t\tfound: `@Controller(${argument.argumentText})`,\n\t\t\tfilePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst methods = classDeclaration.members.filter((member) => isMethodDeclaration(member)).map((method) => extractMethodDefinition(method, {\n\t\tsourceFile,\n\t\tfilePath,\n\t\tcontrollerName,\n\t\tcontrollerPath: argument.value ?? \"\",\n\t\tdiagnostics\n\t})).filter((method) => method !== void 0);\n\treturn {\n\t\tname: controllerName,\n\t\tpath: argument.value ?? \"\",\n\t\tsourceFile: filePath,\n\t\tmethods\n\t};\n};\nvar findControllerClasses = (sourceFile) => {\n\treturn sourceFile.statements.filter((statement) => isClassDeclaration(statement) && findDecorator(statement, \"Controller\") !== void 0);\n};\nvar sharedApi;\nvar parseSourceFile = (filePath) => {\n\tsharedApi ??= new API();\n\tsharedApi.updateSnapshot({ closeFiles: [filePath] });\n\tconst sourceFile = sharedApi.updateSnapshot({\n\t\topenFiles: [filePath],\n\t\tfileChanges: { changed: [filePath] }\n\t}).getDefaultProjectForFile(filePath)?.program.getSourceFile(filePath);\n\tif (sourceFile === void 0) throw new Error(`Unable to parse source file: ${filePath}`);\n\treturn sourceFile;\n};\nvar analyzeControllers = (filePaths) => {\n\tconst diagnostics = [];\n\tconst controllers = [];\n\tfor (const filePath of filePaths) {\n\t\tconst sourceFile = parseSourceFile(filePath);\n\t\tfor (const classDeclaration of findControllerClasses(sourceFile)) {\n\t\t\tconst controller = extractControllerDefinition(classDeclaration, sourceFile, filePath, diagnostics);\n\t\t\tif (controller !== void 0) controllers.push(controller);\n\t\t}\n\t}\n\treturn {\n\t\tcontrollers,\n\t\tdiagnostics\n\t};\n};\nvar GRAPHQL_OPERATION_DECORATOR_NAMES = {\n\tQuery: \"query\",\n\tMutation: \"mutation\"\n};\nvar readTypeThunkExpression = (thunk) => {\n\tif (!isBlock(thunk.body)) return thunk.body;\n\treturn thunk.body.statements.find(isReturnStatement)?.expression;\n};\nvar readArgsTypeOption = (decorator) => {\n\tif (!isCallExpression(decorator.expression)) return;\n\tconst optionsArgument = decorator.expression.arguments.find(isObjectLiteralExpression);\n\tif (optionsArgument === void 0) return;\n\tconst typeProperty = optionsArgument.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === \"type\");\n\tif (typeProperty === void 0) return;\n\tconst thunk = typeProperty.initializer;\n\tif (!isArrowFunction(thunk) && !isFunctionExpression(thunk)) return;\n\tconst returnedExpression = readTypeThunkExpression(thunk);\n\tif (returnedExpression === void 0) return;\n\tif (isArrayLiteralExpression(returnedExpression)) {\n\t\tconst element = returnedExpression.elements[0];\n\t\treturn element !== void 0 && isIdentifier(element) ? {\n\t\t\ttypeName: element.text,\n\t\t\tisArray: true\n\t\t} : void 0;\n\t}\n\treturn isIdentifier(returnedExpression) ? {\n\t\ttypeName: returnedExpression.text,\n\t\tisArray: false\n\t} : void 0;\n};\nvar extractResolverArgumentDefinition = (parameter, index, context) => {\n\tconst decorator = findAnyDecorator(parameter, [\"Args\"]);\n\tconst location = locationOf(context.sourceFile, parameter);\n\tif (decorator === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `Parameter \"${parameter.name.getText()}\" must be decorated with @Args to be transported through a NestBridge GraphQL client.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (!isIdentifier(parameter.name)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"Destructured parameters cannot be transported through a NestBridge GraphQL client.\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst nameArgument = readStaticStringArgument(decorator);\n\tif (!nameArgument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"@Args() name must be a statically analyzable string literal.\",\n\t\t\tfound: `@Args(${nameArgument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (nameArgument.value === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: \"A whole @Args() is not supported; provide an argument name such as @Args('id').\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tif (parameter.type === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@Args() parameter \"${parameter.name.text}\" needs an explicit type annotation.`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst unwrapped = unwrapTypeNode(parameter.type);\n\tif (unwrapped === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-argument\",\n\t\t\ttitle: \"Unsupported argument.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `@Args() parameter \"${parameter.name.text}\" has a type NestBridge cannot statically resolve to a GraphQL type.`,\n\t\t\tfound: parameter.type.getText(),\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst explicitType = readArgsTypeOption(decorator);\n\treturn {\n\t\tindex,\n\t\tparameterName: parameter.name.text,\n\t\tname: nameArgument.value,\n\t\tgraphqlType: graphqlTypeStringFor(unwrapped, explicitType?.typeName)\n\t};\n};\nvar parsedFilesByPath = /* @__PURE__ */ new Map();\nvar parseFile = (filePath) => {\n\tconst cached = parsedFilesByPath.get(filePath);\n\tif (cached !== void 0) return cached;\n\tconst sourceFile = parseSourceFile(filePath);\n\tparsedFilesByPath.set(filePath, sourceFile);\n\treturn sourceFile;\n};\nvar resolveModuleFile = (fromFilePath, moduleSpecifierText) => {\n\tif (!moduleSpecifierText.startsWith(\".\")) return;\n\tconst base = resolve(dirname(fromFilePath), moduleSpecifierText);\n\treturn [\n\t\t`${base}.ts`,\n\t\t`${base}.tsx`,\n\t\tresolve(base, \"index.ts\")\n\t].find((candidate) => existsSync(candidate));\n};\nvar findExportedDeclaration = (sourceFile, name) => sourceFile.statements.find((statement) => isClassDeclaration(statement) && statement.name?.text === name);\nvar findImportSource = (sourceFile, localName) => {\n\tfor (const statement of sourceFile.statements) {\n\t\tif (!isImportDeclaration(statement) || !isStringLiteralLikeNode(statement.moduleSpecifier)) continue;\n\t\tconst namedBindings = statement.importClause?.namedBindings;\n\t\tif (namedBindings === void 0 || !isNamedImports(namedBindings)) continue;\n\t\tconst element = namedBindings.elements.find((candidate) => candidate.name.text === localName);\n\t\tif (element !== void 0) return {\n\t\t\tmoduleSpecifierText: statement.moduleSpecifier.text,\n\t\t\timportedName: element.propertyName?.text ?? element.name.text\n\t\t};\n\t}\n};\nvar findReExportSource = (sourceFile, name) => {\n\tfor (const statement of sourceFile.statements) {\n\t\tif (!isExportDeclaration(statement) || statement.moduleSpecifier === void 0 || !isStringLiteralLikeNode(statement.moduleSpecifier)) continue;\n\t\tif (statement.exportClause === void 0) return statement.moduleSpecifier.text;\n\t\tif (isNamedExports(statement.exportClause) && statement.exportClause.elements.some((element) => (element.propertyName?.text ?? element.name.text) === name)) return statement.moduleSpecifier.text;\n\t}\n};\nvar resolveClassDeclaration = (name, fromSourceFile, fromFilePath, visited = /* @__PURE__ */ new Set()) => {\n\tif (visited.has(fromFilePath)) return;\n\tvisited.add(fromFilePath);\n\tconst direct = findExportedDeclaration(fromSourceFile, name);\n\tif (direct !== void 0) return {\n\t\tclassDeclaration: direct,\n\t\tsourceFile: fromSourceFile,\n\t\tfilePath: fromFilePath\n\t};\n\tconst importSource = findImportSource(fromSourceFile, name);\n\tif (importSource !== void 0) {\n\t\tconst resolvedPath = resolveModuleFile(fromFilePath, importSource.moduleSpecifierText);\n\t\tif (resolvedPath !== void 0) {\n\t\t\tconst nextSourceFile = parseFile(resolvedPath);\n\t\t\tconst result = resolveClassDeclaration(importSource.importedName, nextSourceFile, resolvedPath, visited);\n\t\t\tif (result !== void 0) return result;\n\t\t}\n\t}\n\tconst reExportModuleSpecifierText = findReExportSource(fromSourceFile, name);\n\tif (reExportModuleSpecifierText !== void 0) {\n\t\tconst resolvedPath = resolveModuleFile(fromFilePath, reExportModuleSpecifierText);\n\t\tif (resolvedPath !== void 0) return resolveClassDeclaration(name, parseFile(resolvedPath), resolvedPath, visited);\n\t}\n};\nvar PRIMITIVE_SCALAR_NAMES$1 = /* @__PURE__ */ new Set([\n\t\"string\",\n\t\"number\",\n\t\"boolean\"\n]);\nvar extractSelectionFields = (classDeclaration, sourceFile, filePath, context) => {\n\tconst typeName = classDeclaration.name?.text ?? \"(anonymous type)\";\n\tconst location = locationOf(sourceFile, classDeclaration);\n\tif (context.visitedTypeNames.has(typeName)) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"circular-type\",\n\t\t\ttitle: \"Circular type.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: context.methodName,\n\t\t\tdetail: `Type \"${typeName}\" references itself, directly or indirectly. NestBridge cannot build a finite GraphQL selection set for it.`,\n\t\t\tfilePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst nextVisited = new Set(context.visitedTypeNames).add(typeName);\n\tconst properties = classDeclaration.members.filter((member) => isPropertyDeclaration(member) && findDecorator(member, \"Field\") !== void 0);\n\tconst fields = [];\n\tfor (const property of properties) {\n\t\tif (!isIdentifier(property.name)) continue;\n\t\tconst fieldName = property.name.text;\n\t\tconst fieldLocation = locationOf(sourceFile, property);\n\t\tif (property.type === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported field type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: `Field \"${fieldName}\" on \"${typeName}\" needs an explicit type annotation.`,\n\t\t\t\tfilePath,\n\t\t\t\tline: fieldLocation.line,\n\t\t\t\tcolumn: fieldLocation.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst unwrapped = unwrapTypeNode(property.type);\n\t\tif (unwrapped === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported field type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: `Field \"${fieldName}\" on \"${typeName}\" has a type NestBridge cannot statically resolve.`,\n\t\t\t\tfound: property.type.getText(),\n\t\t\t\tfilePath,\n\t\t\t\tline: fieldLocation.line,\n\t\t\t\tcolumn: fieldLocation.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (PRIMITIVE_SCALAR_NAMES$1.has(unwrapped.identifierText)) {\n\t\t\tfields.push({ name: fieldName });\n\t\t\tcontinue;\n\t\t}\n\t\tconst resolved = resolveClassDeclaration(unwrapped.identifierText, sourceFile, filePath);\n\t\tif (resolved === void 0) {\n\t\t\tfields.push({ name: fieldName });\n\t\t\tcontinue;\n\t\t}\n\t\tif (findDecorator(resolved.classDeclaration, \"ObjectType\") === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported field type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: context.methodName,\n\t\t\t\tdetail: `Field \"${fieldName}\" on \"${typeName}\" resolves to class \"${unwrapped.identifierText}\", which is not decorated with @ObjectType(). NestBridge cannot build a GraphQL selection set for it.`,\n\t\t\t\tfilePath,\n\t\t\t\tline: fieldLocation.line,\n\t\t\t\tcolumn: fieldLocation.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst children = extractSelectionFields(resolved.classDeclaration, resolved.sourceFile, resolved.filePath, {\n\t\t\t...context,\n\t\t\tvisitedTypeNames: nextVisited\n\t\t});\n\t\tif (children === void 0) return;\n\t\tfields.push({\n\t\t\tname: fieldName,\n\t\t\tchildren\n\t\t});\n\t}\n\treturn fields;\n};\nvar readNameFromOptions = (optionsArgument) => {\n\tconst nameProperty = optionsArgument.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === \"name\");\n\tif (nameProperty === void 0 || !isStringLiteralLikeNode(nameProperty.initializer)) return;\n\treturn nameProperty.initializer.text;\n};\nvar readGraphqlOperationName = (decorator) => {\n\tconst expression = decorator.expression;\n\tif (!isCallExpression(expression)) return {\n\t\tok: true,\n\t\tvalue: void 0\n\t};\n\tlet value;\n\tfor (const argument of expression.arguments) {\n\t\tif (isArrowFunction(argument) || isFunctionExpression(argument)) continue;\n\t\tif (isStringLiteralLikeNode(argument)) {\n\t\t\tvalue = argument.text;\n\t\t\tcontinue;\n\t\t}\n\t\tif (isObjectLiteralExpression(argument)) {\n\t\t\tvalue = readNameFromOptions(argument) ?? value;\n\t\t\tcontinue;\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\targumentText: argument.getText()\n\t\t};\n\t}\n\treturn {\n\t\tok: true,\n\t\tvalue\n\t};\n};\nvar readGraphqlReturnTypeOption = (decorator) => {\n\tif (!isCallExpression(decorator.expression)) return;\n\tconst thunk = decorator.expression.arguments.find((argument) => isArrowFunction(argument) || isFunctionExpression(argument));\n\tif (thunk === void 0) return;\n\tconst returnedExpression = readTypeThunkExpression(thunk);\n\tif (returnedExpression === void 0) return;\n\tif (isArrayLiteralExpression(returnedExpression)) {\n\t\tconst element = returnedExpression.elements[0];\n\t\treturn element !== void 0 && isIdentifier(element) ? element.text : void 0;\n\t}\n\treturn isIdentifier(returnedExpression) ? returnedExpression.text : void 0;\n};\nvar PRIMITIVE_SCALAR_NAMES = /* @__PURE__ */ new Set([\n\t\"string\",\n\t\"number\",\n\t\"boolean\"\n]);\nvar extractResolverMethodDefinition = (method, context) => {\n\tconst decorator = findAnyDecorator(method, Object.keys(GRAPHQL_OPERATION_DECORATOR_NAMES));\n\tif (decorator === void 0) return;\n\tconst methodName = method.name.getText();\n\tconst decoratorName = decoratorNameOf(decorator);\n\tconst location = locationOf(context.sourceFile, method);\n\tif (decoratorName === void 0) return;\n\tconst operationKind = GRAPHQL_OPERATION_DECORATOR_NAMES[decoratorName];\n\tif (operationKind === void 0) return;\n\tconst nameArgument = readGraphqlOperationName(decorator);\n\tif (!nameArgument.ok) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-route\",\n\t\t\ttitle: \"Unsupported operation name.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: methodName,\n\t\t\tdetail: \"GraphQL operation names must be statically analyzable string literals.\",\n\t\t\tfound: `@${decoratorName}(${nameArgument.argumentText})`,\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tconst decoratorReturnType = readGraphqlReturnTypeOption(decorator);\n\tconst identifierText = decoratorReturnType ?? (method.type === void 0 ? void 0 : unwrapTypeNode(method.type)?.identifierText);\n\tif (identifierText === void 0) {\n\t\tcontext.diagnostics.push({\n\t\t\tcode: \"unsupported-return-type\",\n\t\t\ttitle: \"Unsupported return type.\",\n\t\t\tcontrollerName: context.resolverName,\n\t\t\tmemberName: methodName,\n\t\t\tdetail: \"GraphQL resolver methods need a type thunk on @Query()/@Mutation() (e.g. \\\"() => UserType\\\") or an explicit return type annotation so NestBridge can build a selection set.\",\n\t\t\tfilePath: context.filePath,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column\n\t\t});\n\t\treturn;\n\t}\n\tlet selection = [];\n\tif (!PRIMITIVE_SCALAR_NAMES.has(identifierText.toLowerCase())) {\n\t\tconst resolved = resolveClassDeclaration(identifierText, context.sourceFile, context.filePath);\n\t\tif (resolved === void 0 && decoratorReturnType === void 0) {\n\t\t\tcontext.diagnostics.push({\n\t\t\t\tcode: \"unsupported-return-type\",\n\t\t\t\ttitle: \"Unsupported return type.\",\n\t\t\t\tcontrollerName: context.resolverName,\n\t\t\t\tmemberName: methodName,\n\t\t\t\tdetail: `NestBridge could not locate the declaration of type \"${identifierText}\".`,\n\t\t\t\tfilePath: context.filePath,\n\t\t\t\tline: location.line,\n\t\t\t\tcolumn: location.column\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (resolved !== void 0) {\n\t\t\tconst fields = extractSelectionFields(resolved.classDeclaration, resolved.sourceFile, resolved.filePath, {\n\t\t\t\tresolverName: context.resolverName,\n\t\t\t\tmethodName,\n\t\t\t\tdiagnostics: context.diagnostics,\n\t\t\t\tvisitedTypeNames: /* @__PURE__ */ new Set()\n\t\t\t});\n\t\t\tif (fields === void 0) return;\n\t\t\tselection = fields;\n\t\t}\n\t}\n\tconst args = method.parameters.map((parameter, index) => extractResolverArgumentDefinition(parameter, index, {\n\t\tsourceFile: context.sourceFile,\n\t\tfilePath: context.filePath,\n\t\tresolverName: context.resolverName,\n\t\tmethodName,\n\t\tdiagnostics: context.diagnostics\n\t}));\n\tif (args.some((argument) => argument === void 0)) return;\n\treturn {\n\t\tname: methodName,\n\t\toperationKind,\n\t\toperationName: nameArgument.value ?? methodName,\n\t\targuments: args.filter((argument) => argument !== void 0),\n\t\tselection,\n\t\tline: location.line,\n\t\tcolumn: location.column\n\t};\n};\nvar extractResolverDefinition = (classDeclaration, sourceFile, filePath, diagnostics) => {\n\tconst resolverName = classDeclaration.name?.text ?? \"(anonymous resolver)\";\n\treturn {\n\t\tname: resolverName,\n\t\tsourceFile: filePath,\n\t\tmethods: classDeclaration.members.filter((member) => isMethodDeclaration(member)).map((method) => extractResolverMethodDefinition(method, {\n\t\t\tsourceFile,\n\t\t\tfilePath,\n\t\t\tresolverName,\n\t\t\tdiagnostics\n\t\t})).filter((method) => method !== void 0)\n\t};\n};\nvar findResolverClasses = (sourceFile) => {\n\treturn sourceFile.statements.filter((statement) => isClassDeclaration(statement) && findDecorator(statement, \"Resolver\") !== void 0);\n};\nvar analyzeResolvers = (filePaths) => {\n\tconst diagnostics = [];\n\tconst resolvers = [];\n\tfor (const filePath of filePaths) {\n\t\tconst sourceFile = parseSourceFile(filePath);\n\t\tfor (const classDeclaration of findResolverClasses(sourceFile)) {\n\t\t\tconst resolver = extractResolverDefinition(classDeclaration, sourceFile, filePath, diagnostics);\n\t\t\tif (resolver !== void 0) resolvers.push(resolver);\n\t\t}\n\t}\n\treturn {\n\t\tresolvers,\n\t\tdiagnostics\n\t};\n};\nvar MODULE_DECORATOR_NAME = \"Module\";\nvar PROVIDERS_PROPERTY_NAME = \"providers\";\nvar PROVIDE_PROPERTY_NAME = \"provide\";\nvar USE_CLASS_PROPERTY_NAME = \"useClass\";\nvar APP_FILTER_LOCAL_NAME = \"APP_FILTER\";\nvar NEST_CORE_MODULE_SPECIFIER$1 = \"@nestjs/core\";\nvar findAppFilterProviderClassName = (moduleClassDeclaration, moduleSourceFile) => {\n\tconst moduleDecorator = findDecorator(moduleClassDeclaration, MODULE_DECORATOR_NAME);\n\tif (moduleDecorator === void 0 || !isCallExpression(moduleDecorator.expression)) return;\n\tconst [moduleOptions] = moduleDecorator.expression.arguments;\n\tif (moduleOptions === void 0 || !isObjectLiteralExpression(moduleOptions)) return;\n\tconst providersProperty = moduleOptions.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === PROVIDERS_PROPERTY_NAME);\n\tif (providersProperty === void 0 || !isArrayLiteralExpression(providersProperty.initializer)) return;\n\tconst appFilterImportSource = findImportSource(moduleSourceFile, APP_FILTER_LOCAL_NAME);\n\tif (appFilterImportSource === void 0 || appFilterImportSource.moduleSpecifierText !== NEST_CORE_MODULE_SPECIFIER$1) return;\n\tconst classNames = /* @__PURE__ */ new Set();\n\tfor (const element of providersProperty.initializer.elements) {\n\t\tif (isSpreadElement(element)) return;\n\t\tif (!isObjectLiteralExpression(element)) continue;\n\t\tconst provideProperty = element.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === PROVIDE_PROPERTY_NAME);\n\t\tif (provideProperty === void 0 || !isIdentifier(provideProperty.initializer) || provideProperty.initializer.text !== APP_FILTER_LOCAL_NAME) continue;\n\t\tconst useClassProperty = element.properties.find((property) => isPropertyAssignment(property) && isIdentifier(property.name) && property.name.text === USE_CLASS_PROPERTY_NAME);\n\t\tif (useClassProperty === void 0 || !isIdentifier(useClassProperty.initializer)) return;\n\t\tclassNames.add(useClassProperty.initializer.text);\n\t}\n\treturn classNames.size === 1 ? [...classNames][0] : void 0;\n};\nvar USE_GLOBAL_FILTERS_METHOD_NAME = \"useGlobalFilters\";\nvar collectUseGlobalFiltersCalls = (node, calls) => {\n\tif (isCallExpression(node) && isPropertyAccessExpression(node.expression) && node.expression.name.text === USE_GLOBAL_FILTERS_METHOD_NAME) calls.push(node);\n\tnode.forEachChild((child) => {\n\t\tcollectUseGlobalFiltersCalls(child, calls);\n\t});\n};\nvar findGlobalFilterClassName = (sourceFile) => {\n\tconst calls = [];\n\tcollectUseGlobalFiltersCalls(sourceFile, calls);\n\tif (calls.length === 0) return;\n\tconst classNames = /* @__PURE__ */ new Set();\n\tfor (const call of calls) for (const argument of call.arguments) {\n\t\tif (!isNewExpression(argument) || !isIdentifier(argument.expression)) return;\n\t\tclassNames.add(argument.expression.text);\n\t}\n\treturn classNames.size === 1 ? [...classNames][0] : void 0;\n};\nvar NEST_FACTORY_LOCAL_NAME = \"NestFactory\";\nvar NEST_FACTORY_CREATE_METHOD_NAME = \"create\";\nvar NEST_CORE_MODULE_SPECIFIER = \"@nestjs/core\";\nvar collectNestFactoryCreateCalls = (node, calls) => {\n\tif (isCallExpression(node) && isPropertyAccessExpression(node.expression) && isIdentifier(node.expression.expression) && node.expression.expression.text === NEST_FACTORY_LOCAL_NAME && node.expression.name.text === NEST_FACTORY_CREATE_METHOD_NAME) calls.push(node);\n\tnode.forEachChild((child) => {\n\t\tcollectNestFactoryCreateCalls(child, calls);\n\t});\n};\nvar findRootModuleClassName = (sourceFile) => {\n\tconst nestFactoryImportSource = findImportSource(sourceFile, NEST_FACTORY_LOCAL_NAME);\n\tif (nestFactoryImportSource === void 0 || nestFactoryImportSource.moduleSpecifierText !== NEST_CORE_MODULE_SPECIFIER) return;\n\tconst calls = [];\n\tcollectNestFactoryCreateCalls(sourceFile, calls);\n\tif (calls.length !== 1) return;\n\tconst [call] = calls;\n\tif (call === void 0) return;\n\tconst [moduleArgument] = call.arguments;\n\treturn moduleArgument !== void 0 && isIdentifier(moduleArgument) ? moduleArgument.text : void 0;\n};\nvar RESPONSE_BODY_CALL_NAMES = /* @__PURE__ */ new Set([\"json\", \"send\"]);\nvar matchResponseBodyArgument = (expression) => {\n\tif (!isCallExpression(expression) || !isPropertyAccessExpression(expression.expression) || !RESPONSE_BODY_CALL_NAMES.has(expression.expression.name.text) || expression.arguments.length !== 1) return;\n\tconst [argument] = expression.arguments;\n\treturn argument;\n};\nvar resolveCatchMethodBody = (catchMethod) => {\n\tconst [exceptionParameter] = catchMethod.parameters;\n\tif (exceptionParameter === void 0 || !isIdentifier(exceptionParameter.name)) return;\n\tconst body = catchMethod.body;\n\tif (body === void 0) return;\n\tconst localDeclarations = /* @__PURE__ */ new Map();\n\tlet responseBodyArgument;\n\tlet sawResponseCall = false;\n\tlet sawTrailingReturn = false;\n\tfor (const statement of body.statements) {\n\t\tif (sawTrailingReturn) return;\n\t\tif (!sawResponseCall && isVariableStatement(statement)) {\n\t\t\tfor (const declaration of statement.declarationList.declarations) {\n\t\t\t\tif (!isIdentifier(declaration.name) || declaration.initializer === void 0) return;\n\t\t\t\tlocalDeclarations.set(declaration.name.text, declaration.initializer);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!sawResponseCall && isExpressionStatement(statement)) {\n\t\t\tconst argument = matchResponseBodyArgument(statement.expression);\n\t\t\tif (argument === void 0) return;\n\t\t\tresponseBodyArgument = argument;\n\t\t\tsawResponseCall = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (sawResponseCall && isReturnStatement(statement) && statement.expression === void 0) {\n\t\t\tsawTrailingReturn = true;\n\t\t\tcontinue;\n\t\t}\n\t\treturn;\n\t}\n\tif (!sawResponseCall || responseBodyArgument === void 0) return;\n\treturn {\n\t\texceptionParameterName: exceptionParameter.name.text,\n\t\tlocalDeclarations,\n\t\tresponseBodyArgument\n\t};\n};\nvar EXCEPTION_MESSAGE_MEMBER_NAME = \"message\";\nvar EXCEPTION_STATUS_METHOD_NAME = \"getStatus\";\nvar resolvesToExceptionParameter = (expression, exceptionParameterName, localDeclarations, visited) => {\n\tif (!isIdentifier(expression)) return false;\n\tif (expression.text === exceptionParameterName) return true;\n\tif (visited.has(expression.text)) return false;\n\tvisited.add(expression.text);\n\tconst aliasedExpression = localDeclarations.get(expression.text);\n\treturn aliasedExpression !== void 0 ? resolvesToExceptionParameter(aliasedExpression, exceptionParameterName, localDeclarations, visited) : false;\n};\nvar synthesizeErrorValueType = (expression, exceptionParameterName, localDeclarations) => {\n\tif (isPropertyAccessExpression(expression) && expression.name.text === EXCEPTION_MESSAGE_MEMBER_NAME && resolvesToExceptionParameter(expression.expression, exceptionParameterName, localDeclarations, /* @__PURE__ */ new Set())) return \"string\";\n\tif (isCallExpression(expression) && expression.arguments.length === 0 && isPropertyAccessExpression(expression.expression) && expression.expression.name.text === EXCEPTION_STATUS_METHOD_NAME && resolvesToExceptionParameter(expression.expression.expression, exceptionParameterName, localDeclarations, /* @__PURE__ */ new Set())) return \"number\";\n\tif (isObjectLiteralExpression(expression)) {\n\t\tconst memberTypes = [];\n\t\tfor (const property of expression.properties) {\n\t\t\tif (!isPropertyAssignment(property) || !(isIdentifier(property.name) || isStringLiteral(property.name))) return;\n\t\t\tconst valueType = synthesizeErrorValueType(property.initializer, exceptionParameterName, localDeclarations);\n\t\t\tif (valueType === void 0) return;\n\t\t\tmemberTypes.push(`${property.name.text}: ${valueType}`);\n\t\t}\n\t\treturn `{ ${memberTypes.join(\"; \")} }`;\n\t}\n\tif (isStringLiteral(expression)) return \"string\";\n\tif (isNumericLiteral(expression)) return \"number\";\n\tif (isTrueLiteral(expression) || isFalseLiteral(expression)) return \"boolean\";\n\tif (isNullLiteral(expression)) return \"null\";\n\tif (isIdentifier(expression)) {\n\t\tconst aliasedExpression = localDeclarations.get(expression.text);\n\t\treturn aliasedExpression !== void 0 ? synthesizeErrorValueType(aliasedExpression, exceptionParameterName, localDeclarations) : void 0;\n\t}\n};\nvar synthesizeErrorBodyType = (objectLiteral, exceptionParameterName, localDeclarations) => synthesizeErrorValueType(objectLiteral, exceptionParameterName, localDeclarations);\nvar CATCH_DECORATOR_NAME = \"Catch\";\nvar CATCH_METHOD_NAME = \"catch\";\nvar findCatchMethod = (members) => members.find((member) => isMethodDeclaration(member) && isIdentifier(member.name) && member.name.text === CATCH_METHOD_NAME);\nvar resolveViaGlobalFilters = (bootstrapSourceFile, bootstrapFilePath) => {\n\tconst filterClassName = findGlobalFilterClassName(bootstrapSourceFile);\n\treturn filterClassName === void 0 ? void 0 : resolveClassDeclaration(filterClassName, bootstrapSourceFile, bootstrapFilePath);\n};\nvar resolveViaAppFilterProvider = (bootstrapSourceFile, bootstrapFilePath) => {\n\tconst rootModuleClassName = findRootModuleClassName(bootstrapSourceFile);\n\tif (rootModuleClassName === void 0) return;\n\tconst resolvedModule = resolveClassDeclaration(rootModuleClassName, bootstrapSourceFile, bootstrapFilePath);\n\tif (resolvedModule === void 0) return;\n\tconst filterClassName = findAppFilterProviderClassName(resolvedModule.classDeclaration, resolvedModule.sourceFile);\n\treturn filterClassName === void 0 ? void 0 : resolveClassDeclaration(filterClassName, resolvedModule.sourceFile, resolvedModule.filePath);\n};\nvar isSameDeclaration = (a, b) => a.filePath === b.filePath && a.classDeclaration.name?.text === b.classDeclaration.name?.text;\nvar reconcileResolvedFilter = (viaGlobalFilters, viaAppFilterProvider) => {\n\tif (viaGlobalFilters !== void 0 && viaAppFilterProvider !== void 0) return isSameDeclaration(viaGlobalFilters, viaAppFilterProvider) ? viaGlobalFilters : void 0;\n\treturn viaGlobalFilters ?? viaAppFilterProvider;\n};\nvar detectErrorResponseShape = (bootstrapFilePath) => {\n\tconst bootstrapSourceFile = parseSourceFile(bootstrapFilePath);\n\tconst resolved = reconcileResolvedFilter(resolveViaGlobalFilters(bootstrapSourceFile, bootstrapFilePath), resolveViaAppFilterProvider(bootstrapSourceFile, bootstrapFilePath));\n\tif (resolved === void 0 || findDecorator(resolved.classDeclaration, CATCH_DECORATOR_NAME) === void 0) return;\n\tconst catchMethod = findCatchMethod(resolved.classDeclaration.members);\n\tif (catchMethod?.body === void 0) return;\n\tconst bodyResolution = resolveCatchMethodBody(catchMethod);\n\tif (bodyResolution === void 0 || !isObjectLiteralExpression(bodyResolution.responseBodyArgument)) return;\n\tconst errorBodyTypeSource = synthesizeErrorBodyType(bodyResolution.responseBodyArgument, bodyResolution.exceptionParameterName, bodyResolution.localDeclarations);\n\treturn errorBodyTypeSource === void 0 ? void 0 : { errorBodyTypeSource };\n};\nvar USE_GLOBAL_INTERCEPTORS_METHOD_NAME = \"useGlobalInterceptors\";\nvar collectUseGlobalInterceptorsCalls = (node, calls) => {\n\tif (isCallExpression(node) && isPropertyAccessExpression(node.expression) && node.expression.name.text === USE_GLOBAL_INTERCEPTORS_METHOD_NAME) calls.push(node);\n\tnode.forEachChild((child) => {\n\t\tcollectUseGlobalInterceptorsCalls(child, calls);\n\t});\n};\n/**\n* Returned in registration order: `useGlobalInterceptors` concatenates onto a\n* single global list, so a later call (or a later argument within one call)\n* always registers an interceptor that wraps closer to the raw handler result.\n*/\nvar findGlobalInterceptorClassNames = (sourceFile) => {\n\tconst calls = [];\n\tcollectUseGlobalInterceptorsCalls(sourceFile, calls);\n\tif (calls.length === 0) return;\n\tconst classNames = [];\n\tfor (const call of calls) for (const argument of call.arguments) {\n\t\tif (!isNewExpression(argument) || !isIdentifier(argument.expression)) return;\n\t\tclassNames.push(argument.expression.text);\n\t}\n\treturn classNames.length === 0 ? void 0 : classNames;\n};\nvar synthesizeExpressionType = (expression, parameterName, substitution, state) => {\n\tif (isIdentifier(expression) && expression.text === parameterName) {\n\t\tstate.substitutionCount += 1;\n\t\treturn substitution;\n\t}\n\tif (isObjectLiteralExpression(expression)) {\n\t\tconst memberTypes = [];\n\t\tfor (const property of expression.properties) {\n\t\t\tif (!isPropertyAssignment(property) || !(isIdentifier(property.name) || isStringLiteral(property.name))) return;\n\t\t\tconst valueType = synthesizeExpressionType(property.initializer, parameterName, substitution, state);\n\t\t\tif (valueType === void 0) return;\n\t\t\tmemberTypes.push(`${property.name.text}: ${valueType}`);\n\t\t}\n\t\treturn `{ ${memberTypes.join(\"; \")} }`;\n\t}\n\tif (isStringLiteral(expression)) return \"string\";\n\tif (isNumericLiteral(expression)) return \"number\";\n\tif (isTrueLiteral(expression) || isFalseLiteral(expression)) return \"boolean\";\n\tif (isNullLiteral(expression)) return \"null\";\n};\nvar synthesizeGenericObjectType = (objectLiteral, parameterName, substitution) => {\n\tconst state = { substitutionCount: 0 };\n\tconst objectType = synthesizeExpressionType(objectLiteral, parameterName, substitution, state);\n\treturn objectType !== void 0 && state.substitutionCount === 1 ? objectType : void 0;\n};\nvar INTERCEPT_METHOD_NAME = \"intercept\";\nvar PIPE_MEMBER_NAME = \"pipe\";\nvar MAP_OPERATOR_NAME = \"map\";\nvar RXJS_MODULE_SPECIFIER = \"rxjs\";\nvar WRAPPED_RESULT_SUBSTITUTION = \"Awaited<Result>\";\nvar unwrapParenthesizedExpression = (expression) => {\n\tlet unwrapped = expression;\n\twhile (isParenthesizedExpression(unwrapped)) unwrapped = unwrapped.expression;\n\treturn unwrapped;\n};\nvar resolveSoleReturnExpression = (body) => {\n\tif (!isBlock(body)) return unwrapParenthesizedExpression(body);\n\tconst localDeclarations = /* @__PURE__ */ new Map();\n\tlet returnExpression;\n\tlet sawReturn = false;\n\tfor (const statement of body.statements) {\n\t\tif (sawReturn) return;\n\t\tif (isVariableStatement(statement)) {\n\t\t\tfor (const declaration of statement.declarationList.declarations) {\n\t\t\t\tif (!isIdentifier(declaration.name) || declaration.initializer === void 0) return;\n\t\t\t\tlocalDeclarations.set(declaration.name.text, declaration.initializer);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (isReturnStatement(statement)) {\n\t\t\tsawReturn = true;\n\t\t\treturnExpression = statement.expression;\n\t\t\tcontinue;\n\t\t}\n\t\treturn;\n\t}\n\tif (returnExpression === void 0) return;\n\treturn isIdentifier(returnExpression) ? localDeclarations.get(returnExpression.text) : returnExpression;\n};\nvar matchPipedMapCallback = (expression, interceptorSourceFile) => {\n\tif (!isCallExpression(expression) || !isPropertyAccessExpression(expression.expression) || expression.expression.name.text !== PIPE_MEMBER_NAME || expression.arguments.length !== 1) return;\n\tconst [operator] = expression.arguments;\n\tif (operator === void 0 || !isCallExpression(operator) || !isIdentifier(operator.expression) || operator.expression.text !== MAP_OPERATOR_NAME || operator.arguments.length !== 1) return;\n\tconst mapImportSource = findImportSource(interceptorSourceFile, operator.expression.text);\n\tif (mapImportSource === void 0 || mapImportSource.moduleSpecifierText !== RXJS_MODULE_SPECIFIER) return;\n\tconst [callback] = operator.arguments;\n\treturn callback !== void 0 && (isArrowFunction(callback) || isFunctionExpression(callback)) ? callback : void 0;\n};\nvar findInterceptMethod = (members) => members.find((member) => isMethodDeclaration(member) && isIdentifier(member.name) && member.name.text === INTERCEPT_METHOD_NAME);\nvar synthesizeInterceptorWrapperType = (interceptorClassName, bootstrapSourceFile, bootstrapFilePath, innerTypeSource) => {\n\tconst resolved = resolveClassDeclaration(interceptorClassName, bootstrapSourceFile, bootstrapFilePath);\n\tif (resolved === void 0) return;\n\tconst interceptMethod = findInterceptMethod(resolved.classDeclaration.members);\n\tif (interceptMethod?.body === void 0) return;\n\tconst returnExpression = resolveSoleReturnExpression(interceptMethod.body);\n\tif (returnExpression === void 0) return;\n\tconst mapCallback = matchPipedMapCallback(returnExpression, resolved.sourceFile);\n\tif (mapCallback === void 0 || mapCallback.parameters.length !== 1) return;\n\tconst [callbackParameter] = mapCallback.parameters;\n\tif (callbackParameter === void 0 || !isIdentifier(callbackParameter.name)) return;\n\tconst callbackReturnExpression = resolveSoleReturnExpression(mapCallback.body);\n\tif (callbackReturnExpression === void 0 || !isObjectLiteralExpression(callbackReturnExpression)) return;\n\treturn synthesizeGenericObjectType(callbackReturnExpression, callbackParameter.name.text, innerTypeSource);\n};\n/**\n* Interceptors registered first wrap those registered after them, so the\n* composed type is built from the last-registered interceptor (closest to the\n* raw handler result) outward to the first-registered one.\n*/\nvar detectResponseWrapper = (bootstrapFilePath) => {\n\tconst bootstrapSourceFile = parseSourceFile(bootstrapFilePath);\n\tconst interceptorClassNames = findGlobalInterceptorClassNames(bootstrapSourceFile);\n\tif (interceptorClassNames === void 0) return;\n\tlet composedTypeSource = WRAPPED_RESULT_SUBSTITUTION;\n\tfor (const interceptorClassName of [...interceptorClassNames].reverse()) {\n\t\tconst wrapperTypeSource = synthesizeInterceptorWrapperType(interceptorClassName, bootstrapSourceFile, bootstrapFilePath, composedTypeSource);\n\t\tif (wrapperTypeSource === void 0) return;\n\t\tcomposedTypeSource = wrapperTypeSource;\n\t}\n\treturn { wrappedResultTypeSource: composedTypeSource };\n};\nvar REMOTE_RESULT_HELPERS = {\n\tjson: \"RemoteResult\",\n\tobservable: \"RemoteObservableResult\",\n\tstream: \"RemoteStreamResult\"\n};\nvar WRAPPED_RESULT_HELPER = \"__NestBridgeWrapped\";\nvar toPosixPath = (filePath) => filePath.replace(/\\\\/g, \"/\");\nvar importSpecifierFor = (sourceFile, outputFilePath) => {\n\tif (!sourceFile.startsWith(\".\") && !/^[A-Za-z]:[\\\\/]/.test(sourceFile) && !sourceFile.startsWith(\"/\")) return sourceFile;\n\tconst relativePath = toPosixPath(relative(dirname(outputFilePath), sourceFile));\n\treturn relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n};\nvar stripExtension = (filePath) => {\n\tconst extension = extname(filePath);\n\treturn extension.length > 0 ? filePath.slice(0, -extension.length) : filePath;\n};\nvar generateControllerDeclaration = (controller, outputFilePath, responseWrapper) => {\n\tconst sourceFileSpecifier = importSpecifierFor(controller.sourceFile, outputFilePath);\n\tconst importSpecifier = stripExtension(sourceFileSpecifier);\n\tconst serverAlias = `__Server${controller.name}`;\n\tconst helperNameFor = (method) => responseWrapper !== void 0 && (method.responseKind ?? \"json\") === \"json\" ? WRAPPED_RESULT_HELPER : REMOTE_RESULT_HELPERS[method.responseKind ?? \"json\"];\n\tconst classBody = [\n\t\t\" constructor();\",\n\t\t\"\",\n\t\t...controller.methods.map((method) => {\n\t\t\tconst helperName = helperNameFor(method);\n\t\t\treturn ` ${method.name}(...args: Parameters<${serverAlias}['${method.name}']>): ${helperName}<${serverAlias}['${method.name}']>;`;\n\t\t})\n\t].join(\"\\n\");\n\tconst rawHelperNames = controller.methods.map((method) => helperNameFor(method));\n\tconst hasWrappedMethod = rawHelperNames.includes(WRAPPED_RESULT_HELPER);\n\tconst helperImports = rawHelperNames.length === 0 ? [\"RemoteResult\"] : Array.from(new Set(rawHelperNames.filter((name) => name !== WRAPPED_RESULT_HELPER))).sort();\n\tconst wrappedResultTypeAliasLines = responseWrapper !== void 0 && hasWrappedMethod ? [`type ${WRAPPED_RESULT_HELPER}<T> = T extends (...args: never[]) => infer Result ? Promise<${responseWrapper.wrappedResultTypeSource}> : never;`, \"\"] : [];\n\treturn [\n\t\t`import type { ${controller.name} as ${serverAlias} } from '${importSpecifier}';`,\n\t\t...helperImports.length > 0 ? [`import type { ${helperImports.join(\", \")} } from 'nestbridge';`] : [],\n\t\t\"\",\n\t\t\"/**\",\n\t\t\" * Generated by NestBridge — client-facing methods only.\",\n\t\t` * @see {@link ${sourceFileSpecifier}} for the real controller implementation.`,\n\t\t\" */\",\n\t\t...wrappedResultTypeAliasLines,\n\t\t`export declare class ${controller.name} {`,\n\t\tclassBody,\n\t\t\"}\",\n\t\t\"\"\n\t].join(\"\\n\");\n};\nvar ERROR_BODY_TYPE_NAME = \"NestBridgeErrorBody\";\nvar generateErrorBodyDeclaration = (errorBodyTypeSource) => [\n\t\"/**\",\n\t\" * Generated by NestBridge — inferred shape of the global exception filter's response body.\",\n\t\" */\",\n\t`export type ${ERROR_BODY_TYPE_NAME} = ${errorBodyTypeSource};`,\n\t\"\"\n].join(\"\\n\");\nvar formatDiagnostic = (diagnostic) => {\n\tconst subject = diagnostic.memberName.length > 0 ? `${diagnostic.controllerName}.${diagnostic.memberName}` : diagnostic.controllerName;\n\tconst lines = [\n\t\t`[NestBridge] ${diagnostic.title}`,\n\t\t\"\",\n\t\tsubject,\n\t\t\"\",\n\t\tdiagnostic.detail\n\t];\n\tif (diagnostic.found !== void 0) lines.push(\"\", \"Found:\", diagnostic.found);\n\tif (diagnostic.expected !== void 0) lines.push(\"\", \"Expected:\", diagnostic.expected);\n\tlines.push(\"\", `${diagnostic.filePath}:${diagnostic.line}:${diagnostic.column}`);\n\treturn lines.join(\"\\n\");\n};\n//#endregion\n//#region src/codegen/generate-config-module.ts\nvar generateConfigModule = (options) => {\n\tif (options.baseURL === void 0) return \"\";\n\treturn [\n\t\t\"import { setNestBridgeBaseURL } from 'nestbridge';\",\n\t\t\"\",\n\t\t`setNestBridgeBaseURL(${JSON.stringify(options.baseURL)});`,\n\t\t\"\"\n\t].join(\"\\n\");\n};\n//#endregion\n//#region src/virtual-modules/config-virtual-id.ts\n/**\n* Must not contain a colon: webpack treats any `letter+:` prefix as a URL\n* scheme and routes the request past its filesystem resolver entirely,\n* bypassing the resolveId hook this virtual module relies on.\n*/\nvar CONFIG_VIRTUAL_MODULE_ID = \"virtual-nestbridge-config\";\nvar RESOLVED_CONFIG_VIRTUAL_MODULE_ID = `\\0${CONFIG_VIRTUAL_MODULE_ID}`;\n//#endregion\n//#region src/codegen/merge-named-parameters-expression.ts\nvar mergeNamedParametersExpression = (parameters) => {\n\tif (parameters.length === 0) return;\n\tconst whole = parameters.find((parameter) => parameter.name === void 0);\n\tconst named = parameters.filter((parameter) => parameter.name !== void 0);\n\tconst namedEntries = named.map((parameter) => `${JSON.stringify(parameter.name)}: ${parameter.parameterName}`);\n\tif (whole === void 0) return `{ ${namedEntries.join(\", \")} }`;\n\tif (named.length === 0) return whole.parameterName;\n\treturn `{ ...${whole.parameterName}, ${namedEntries.join(\", \")} }`;\n};\n//#endregion\n//#region src/codegen/generate-body-expression.ts\nvar generateBodyExpression = (parameters) => mergeNamedParametersExpression(parameters.filter((parameter) => parameter.kind === \"body\"));\n//#endregion\n//#region src/codegen/generate-headers-expression.ts\nvar generateHeadersExpression = (parameters) => {\n\tconst headerParameters = parameters.filter((parameter) => parameter.kind === \"header\");\n\tif (headerParameters.length === 0) return;\n\treturn `{ ${headerParameters.map((parameter) => `${JSON.stringify(parameter.name)}: ${parameter.parameterName}`).join(\", \")} }`;\n};\n//#endregion\n//#region src/codegen/generate-parameter-list.ts\nvar generateParameterList = (parameters) => [...parameters].sort((a, b) => a.index - b.index).map((parameter) => parameter.parameterName).join(\", \");\n//#endregion\n//#region src/codegen/generate-path-expression.ts\nvar PARAM_TOKEN_PATTERN = /:([A-Za-z0-9_]+)/;\nvar generatePathExpression = (method) => {\n\tconst paramParameters = method.parameters.filter((parameter) => parameter.kind === \"param\");\n\tconst parts = method.path.split(PARAM_TOKEN_PATTERN);\n\tconst expressionParts = [];\n\tparts.forEach((part, index) => {\n\t\tif (!(index % 2 === 1)) {\n\t\t\tif (part.length > 0) expressionParts.push(JSON.stringify(part));\n\t\t\treturn;\n\t\t}\n\t\tconst match = paramParameters.find((parameter) => parameter.name === part);\n\t\texpressionParts.push(match !== void 0 ? `encodeURIComponent(${match.parameterName})` : JSON.stringify(`:${part}`));\n\t});\n\treturn expressionParts.length > 0 ? expressionParts.join(\" + \") : \"''\";\n};\n//#endregion\n//#region src/codegen/generate-query-expression.ts\nvar generateQueryExpression = (parameters) => mergeNamedParametersExpression(parameters.filter((parameter) => parameter.kind === \"query\"));\n//#endregion\n//#region src/codegen/generate-controller-module.ts\nvar generateMethod$1 = (method) => {\n\tconst requestProperties = [`method: ${JSON.stringify(method.httpMethod)}`, `path: ${generatePathExpression(method)}`];\n\tconst queryExpression = generateQueryExpression(method.parameters);\n\tif (queryExpression !== void 0) requestProperties.push(`query: ${queryExpression}`);\n\tconst bodyExpression = generateBodyExpression(method.parameters);\n\tif (bodyExpression !== void 0) requestProperties.push(`body: ${bodyExpression}`);\n\tconst headersExpression = generateHeadersExpression(method.parameters);\n\tif (headersExpression !== void 0) requestProperties.push(`headers: ${headersExpression}`);\n\tif (method.responseKind === \"stream\") requestProperties.push(`responseType: \"blob\"`);\n\treturn [\n\t\t` ${method.name}(${generateParameterList(method.parameters)}) {`,\n\t\t\" return request({\",\n\t\t...requestProperties.map((property) => ` ${property},`),\n\t\t\" });\",\n\t\t\" }\"\n\t].join(\"\\n\");\n};\nvar generateControllerModule = (controller) => {\n\tconst methods = controller.methods.map(generateMethod$1).join(\"\\n\\n\");\n\treturn [\n\t\t`import '${CONFIG_VIRTUAL_MODULE_ID}';`,\n\t\t\"import { request } from 'nestbridge';\",\n\t\t\"\",\n\t\t`export class ${controller.name} {`,\n\t\t\" constructor() {}\",\n\t\t\"\",\n\t\tmethods,\n\t\t\"}\",\n\t\t\"\"\n\t].join(\"\\n\");\n};\n//#endregion\n//#region src/codegen/generate-graphql-document.ts\nvar capitalize = (value) => `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\nvar renderSelectionSet = (fields) => {\n\treturn `{ ${fields.map((field) => field.children === void 0 ? field.name : `${field.name} ${renderSelectionSet(field.children)}`).join(\" \")} }`;\n};\nvar generateGraphqlDocument = (method) => {\n\tconst variableDeclarations = method.arguments.map((argument) => `$${argument.name}: ${argument.graphqlType}`).join(\", \");\n\tconst fieldArguments = method.arguments.map((argument) => `${argument.name}: $${argument.name}`).join(\", \");\n\tconst variablesClause = variableDeclarations.length > 0 ? `(${variableDeclarations})` : \"\";\n\tconst fieldArgumentsClause = fieldArguments.length > 0 ? `(${fieldArguments})` : \"\";\n\tconst fieldSelection = method.selection.length > 0 ? ` ${renderSelectionSet(method.selection)}` : \"\";\n\treturn `${method.operationKind} ${capitalize(method.name)}${variablesClause} { ${method.operationName}${fieldArgumentsClause}${fieldSelection} }`;\n};\n//#endregion\n//#region src/codegen/generate-resolver-argument-list.ts\nvar generateResolverArgumentList = (resolverArguments) => [...resolverArguments].sort((a, b) => a.index - b.index).map((argument) => argument.parameterName).join(\", \");\n//#endregion\n//#region src/codegen/generate-resolver-module.ts\nvar generateVariablesExpression = (resolverArguments) => {\n\tif (resolverArguments.length === 0) return;\n\treturn `{ ${resolverArguments.map((argument) => `${JSON.stringify(argument.name)}: ${argument.parameterName}`).join(\", \")} }`;\n};\nvar generateMethod = (method) => {\n\tconst requestProperties = [`document: ${JSON.stringify(generateGraphqlDocument(method))}`];\n\tconst variablesExpression = generateVariablesExpression(method.arguments);\n\tif (variablesExpression !== void 0) requestProperties.push(`variables: ${variablesExpression}`);\n\treturn [\n\t\t` async ${method.name}(${generateResolverArgumentList(method.arguments)}) {`,\n\t\t\" const result = await graphqlRequest({\",\n\t\t...requestProperties.map((property) => ` ${property},`),\n\t\t\" });\",\n\t\t\"\",\n\t\t` return result.${method.operationName};`,\n\t\t\" }\"\n\t].join(\"\\n\");\n};\nvar generateResolverModule = (resolver) => {\n\tconst methods = resolver.methods.map(generateMethod).join(\"\\n\\n\");\n\treturn [\n\t\t`import '${CONFIG_VIRTUAL_MODULE_ID}';`,\n\t\t\"import { graphqlRequest } from 'nestbridge';\",\n\t\t\"\",\n\t\t`export class ${resolver.name} {`,\n\t\t\" constructor() {}\",\n\t\t\"\",\n\t\tmethods,\n\t\t\"}\",\n\t\t\"\"\n\t].join(\"\\n\");\n};\n//#endregion\n//#region src/declarations/mirror-declaration-path.ts\nvar stripLeadingParentSegments = (relativePath) => {\n\tconst segments = relativePath.split(/[\\\\/]/);\n\tconst firstOwnedIndex = segments.findIndex((segment) => segment !== \"..\");\n\treturn segments.slice(firstOwnedIndex === -1 ? segments.length : firstOwnedIndex).join(\"/\");\n};\nvar mirroredDeclarationPath = (sourceRoot, resolvedOutputDir, controllerFilePath) => {\n\tconst mirroredPath = stripLeadingParentSegments(relative(sourceRoot, controllerFilePath)).replace(/\\.ts$/, \".d.ts\");\n\treturn join(resolvedOutputDir, mirroredPath);\n};\n//#endregion\n//#region src/declarations/write-controller-declarations.ts\nvar writeControllerDeclarations = (controllers, sourceRoot, resolvedOutputDir, responseWrapper) => {\n\tfor (const controller of controllers) {\n\t\tconst outputFilePath = mirroredDeclarationPath(sourceRoot, resolvedOutputDir, controller.sourceFile);\n\t\tmkdirSync(dirname(outputFilePath), { recursive: true });\n\t\twriteFileSync(outputFilePath, generateControllerDeclaration(controller, outputFilePath, responseWrapper), \"utf-8\");\n\t}\n};\n//#endregion\n//#region src/declarations/write-error-body-declaration.ts\nvar ERROR_BODY_DECLARATION_FILE_NAME = \"nestbridge-error-body.d.ts\";\nvar errorBodyDeclarationPath = (resolvedOutputDir) => join(resolvedOutputDir, ERROR_BODY_DECLARATION_FILE_NAME);\nvar writeErrorBodyDeclaration = (resolvedOutputDir, errorResponseShape) => {\n\tconst outputFilePath = errorBodyDeclarationPath(resolvedOutputDir);\n\tif (errorResponseShape === void 0) {\n\t\trmSync(outputFilePath, { force: true });\n\t\treturn;\n\t}\n\tmkdirSync(dirname(outputFilePath), { recursive: true });\n\twriteFileSync(outputFilePath, generateErrorBodyDeclaration(errorResponseShape.errorBodyTypeSource), \"utf-8\");\n};\n//#endregion\n//#region src/declarations/write-resolver-declarations.ts\nvar writeResolverDeclarations = (resolvers, sourceRoot, resolvedOutputDir) => {\n\tfor (const resolver of resolvers) {\n\t\tconst outputFilePath = mirroredDeclarationPath(sourceRoot, resolvedOutputDir, resolver.sourceFile);\n\t\tmkdirSync(dirname(outputFilePath), { recursive: true });\n\t\twriteFileSync(outputFilePath, generateControllerDeclaration(resolver, outputFilePath), \"utf-8\");\n\t}\n};\n//#endregion\n//#region src/discovery/discover-files.ts\nvar discoverFiles = (patterns, root, exclude) => {\n\tconst matches = globSync([...patterns], {\n\t\tcwd: root,\n\t\texclude\n\t});\n\treturn [...new Set(matches.map((match) => resolve(root, match)))].sort();\n};\n//#endregion\n//#region src/discovery/discover-bootstrap-file.ts\nvar BOOTSTRAP_FILE_PATTERN = \"**/main.ts\";\nvar discoverBootstrapFile = (root, resolvedOutputDir) => {\n\tconst isExcluded = (filePath) => {\n\t\tif (filePath.split(/[\\\\/]/).includes(\"node_modules\")) return true;\n\t\tconst resolvedPath = resolve(root, filePath);\n\t\treturn resolvedPath === resolvedOutputDir || resolvedPath.startsWith(`${resolvedOutputDir}${sep}`);\n\t};\n\tconst matches = discoverFiles([BOOTSTRAP_FILE_PATTERN], root, isExcluded);\n\treturn matches.length === 1 ? matches[0] : void 0;\n};\n//#endregion\n//#region src/options/nestbridge-options.ts\nvar resolveNestBridgeOptions = (options) => ({\n\tcontrollers: Array.isArray(options.controllers) ? options.controllers : [options.controllers],\n\tresolvers: options.resolvers === void 0 ? [] : Array.isArray(options.resolvers) ? options.resolvers : [options.resolvers],\n\tbaseURL: options.baseURL,\n\tdebug: options.debug ?? false,\n\toutputDir: options.outputDir ?? \".nestbridge\",\n\troot: options.root\n});\n//#endregion\n//#region src/plugin/normalize-path.ts\nvar isWindows = process.platform === \"win32\";\nvar normalizePath = (filePath) => posix.normalize(isWindows ? filePath.replaceAll(\"\\\\\", \"/\") : filePath);\n//#endregion\n//#region src/plugin/controller-registry.ts\nvar createControllerRegistry = (patterns, root) => {\n\tconst controllersByFile = /* @__PURE__ */ new Map();\n\tconst refresh = () => {\n\t\tcontrollersByFile.clear();\n\t\tconst { controllers, diagnostics } = analyzeControllers(discoverFiles(patterns, root));\n\t\tfor (const controller of controllers) controllersByFile.set(normalizePath(controller.sourceFile), controller);\n\t\treturn {\n\t\t\tcontrollers,\n\t\t\tdiagnostics\n\t\t};\n\t};\n\treturn {\n\t\trefresh,\n\t\tget: (filePath) => controllersByFile.get(filePath),\n\t\thas: (filePath) => controllersByFile.has(filePath),\n\t\tall: () => [...controllersByFile.values()]\n\t};\n};\n//#endregion\n//#region src/plugin/resolver-registry.ts\nvar createResolverRegistry = (patterns, root) => {\n\tconst resolversByFile = /* @__PURE__ */ new Map();\n\tconst refresh = () => {\n\t\tresolversByFile.clear();\n\t\tconst { resolvers, diagnostics } = analyzeResolvers(discoverFiles(patterns, root));\n\t\tfor (const resolver of resolvers) resolversByFile.set(normalizePath(resolver.sourceFile), resolver);\n\t\treturn {\n\t\t\tresolvers,\n\t\t\tdiagnostics\n\t\t};\n\t};\n\treturn {\n\t\trefresh,\n\t\tget: (filePath) => resolversByFile.get(filePath),\n\t\thas: (filePath) => resolversByFile.has(filePath),\n\t\tall: () => [...resolversByFile.values()]\n\t};\n};\n//#endregion\n//#region src/plugin/nestbridge-unplugin-factory.ts\nvar reportDiagnostics = (diagnostics, watchMode) => {\n\tfor (const diagnostic of diagnostics) {\n\t\tconst message = formatDiagnostic(diagnostic);\n\t\tif (watchMode === false) throw new Error(message);\n\t\tconsole.warn(message);\n\t}\n};\nvar nestBridgeUnplugin = createUnplugin((options, meta) => {\n\tconst resolvedOptions = resolveNestBridgeOptions(options);\n\tlet root = resolvedOptions.root ?? process.cwd();\n\tlet bundlerRoot = root;\n\tlet controllerRegistry;\n\tlet resolverRegistry;\n\tlet bootstrapFilePath;\n\tconst log = (message) => {\n\t\tif (resolvedOptions.debug) console.log(`[nestbridge] ${message}`);\n\t};\n\tconst runAnalysis = () => {\n\t\tconst { controllers, diagnostics: controllerDiagnostics } = controllerRegistry.refresh();\n\t\tconst { resolvers, diagnostics: resolverDiagnostics } = resolverRegistry.refresh();\n\t\treportDiagnostics([...controllerDiagnostics, ...resolverDiagnostics], meta.watchMode);\n\t\tconst resolvedOutputDir = resolve(bundlerRoot, resolvedOptions.outputDir);\n\t\tconst discoveredBootstrapFile = discoverBootstrapFile(root, resolvedOutputDir);\n\t\tbootstrapFilePath = discoveredBootstrapFile !== void 0 ? normalizePath(discoveredBootstrapFile) : void 0;\n\t\tconst responseWrapper = discoveredBootstrapFile !== void 0 ? detectResponseWrapper(discoveredBootstrapFile) : void 0;\n\t\tconst errorResponseShape = discoveredBootstrapFile !== void 0 ? detectErrorResponseShape(discoveredBootstrapFile) : void 0;\n\t\twriteControllerDeclarations(controllers, root, resolvedOutputDir, responseWrapper);\n\t\twriteResolverDeclarations(resolvers, root, resolvedOutputDir);\n\t\twriteErrorBodyDeclaration(resolvedOutputDir, errorResponseShape);\n\t\tlog(`analyzed ${controllers.length} controller(s), ${resolvers.length} resolver(s), ${controllerDiagnostics.length + resolverDiagnostics.length} diagnostic(s)`);\n\t};\n\treturn {\n\t\tname: \"nestbridge\",\n\t\tenforce: \"pre\",\n\t\tbuildStart() {\n\t\t\tcontrollerRegistry = createControllerRegistry(resolvedOptions.controllers, root);\n\t\t\tresolverRegistry = createResolverRegistry(resolvedOptions.resolvers, root);\n\t\t\trunAnalysis();\n\t\t},\n\t\tresolveId(source) {\n\t\t\tif (source === \"virtual-nestbridge-config\") return RESOLVED_CONFIG_VIRTUAL_MODULE_ID;\n\t\t\treturn null;\n\t\t},\n\t\tload(id) {\n\t\t\tif (id === RESOLVED_CONFIG_VIRTUAL_MODULE_ID) return generateConfigModule(resolvedOptions);\n\t\t\treturn null;\n\t\t},\n\t\ttransform(_code, id) {\n\t\t\tconst absolutePath = normalizePath(id);\n\t\t\tconst controller = controllerRegistry.get(absolutePath);\n\t\t\tif (controller !== void 0) return generateControllerModule(controller);\n\t\t\tconst resolver = resolverRegistry.get(absolutePath);\n\t\t\tif (resolver !== void 0) return generateResolverModule(resolver);\n\t\t\treturn null;\n\t\t},\n\t\twatchChange(id) {\n\t\t\tconst changedFile = normalizePath(id);\n\t\t\tconst wasTracked = controllerRegistry.has(changedFile) || resolverRegistry.has(changedFile) || changedFile === bootstrapFilePath;\n\t\t\tconst discoveredBootstrapFile = discoverBootstrapFile(root, resolve(bundlerRoot, resolvedOptions.outputDir));\n\t\t\tconst isTrackedNow = discoverFiles(resolvedOptions.controllers, root).map(normalizePath).includes(changedFile) || discoverFiles(resolvedOptions.resolvers, root).map(normalizePath).includes(changedFile) || discoveredBootstrapFile !== void 0 && normalizePath(discoveredBootstrapFile) === changedFile;\n\t\t\tif (!wasTracked && !isTrackedNow) return;\n\t\t\trunAnalysis();\n\t\t\tlog(`nestbridge source changed: ${changedFile}`);\n\t\t},\n\t\tvite: { configResolved(config) {\n\t\t\tif (resolvedOptions.root === void 0) root = config.root;\n\t\t\tbundlerRoot = config.root;\n\t\t} },\n\t\twebpack(compiler) {\n\t\t\tbundlerRoot = compiler.options.context ?? bundlerRoot;\n\t\t}\n\t};\n});\n//#endregion\n//#region src/version.ts\nvar VERSION = \"2.1.1\";\n//#endregion\nexport { VERSION, nestBridgeUnplugin };\n\n//# sourceMappingURL=nestbridge.unplugin.js.map","{\n \"name\": \"@nestbridge/webpack\",\n \"version\": \"2.1.1\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/MDReal32/nestbridge.git\",\n \"directory\": \"packages/webpack\"\n },\n \"main\": \"./build/nestbridge.webpack.js\",\n \"types\": \"./build/nestbridge.webpack.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./build/nestbridge.webpack.d.ts\",\n \"import\": \"./build/nestbridge.webpack.js\"\n }\n },\n \"files\": [\n \"build\"\n ],\n \"scripts\": {\n \"build\": \"vite build\",\n \"test\": \"vitest run\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit\",\n \"lint\": \"biome check .\"\n },\n \"dependencies\": {\n \"@nestbridge/unplugin\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^26.4.1\",\n \"esbuild-loader\": \"^4.5.0\",\n \"rolldown-plugin-dts\": \"^0.28.5\",\n \"typescript\": \"^7.0.2\",\n \"vite\": \"^8.2.2\",\n \"vitest\": \"^5.0.0\",\n \"webpack\": \"^5.110.3\"\n },\n \"peerDependencies\": {\n \"webpack\": \"^5.110.3\"\n }\n}\n","import { version } from '../package.json';\n\nexport const VERSION: string = version;\n","import { type NestBridgeOptions, nestBridgeUnplugin } from '@nestbridge/unplugin';\nimport type { WebpackPluginInstance } from 'webpack';\n\nexport type { NestBridgeOptions } from '@nestbridge/unplugin';\nexport const nestBridge: (options: NestBridgeOptions) => WebpackPluginInstance =\n nestBridgeUnplugin.webpack;\nexport { VERSION } from './version';\n"],"mappings":"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"}
|