- @override
Returns all APIPath
objects this instance knows about.
This method is implemented by Router
.
Source
@override List<APIPath> documentPaths(PackagePathResolver resolver) { var p = new APIPath(); p.path = "/" + segments.map((rs) { if (rs.isLiteralMatcher) { return rs.literal; } else if (rs.isVariable) { return "{${rs.variableName}}"; } else if (rs.isRemainingMatcher) { return "*"; } }).join("/"); p.parameters = segments.where((seg) => seg.isVariable).map((seg) { var param = new APIParameter() ..name = seg.variableName ..parameterLocation = APIParameterLocation.path; return param; }).toList(); List<APIOperation> allOperations = controller.documentOperations(resolver) ?? []; p.operations = allOperations.where((op) { var opPathParamNames = op.parameters .where((p) => p.parameterLocation == APIParameterLocation.path) .map((p) => p.name) .toList(); var pathParamNames = p.parameters .where((p) => p.parameterLocation == APIParameterLocation.path) .toList(); if (pathParamNames.length != opPathParamNames.length) { return false; } return pathParamNames.every((p) => opPathParamNames.contains(p.name)); }).toList(); // Strip operation parameters that are already in the path, but move their type into // the path's path parameters p.operations.forEach((op) { var typedPathParameters = op.parameters .where((pi) => pi.parameterLocation == APIParameterLocation.path) .toList(); p.parameters.forEach((p) { var matchingTypedPathParam = typedPathParameters.firstWhere( (typedParam) => typedParam.name == p.name, orElse: () => null); p.schemaObject ??= matchingTypedPathParam?.schemaObject; }); op.parameters = op.parameters .where((p) => p.parameterLocation != APIParameterLocation.path) .toList(); }); return [p]; }