resolver.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. "use strict";
  2. /*
  3. * Copyright 2019 gRPC authors.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. Object.defineProperty(exports, "__esModule", { value: true });
  19. exports.mapUriDefaultScheme = exports.getDefaultAuthority = exports.createResolver = exports.registerDefaultScheme = exports.registerResolver = void 0;
  20. const uri_parser_1 = require("./uri-parser");
  21. const registeredResolvers = {};
  22. let defaultScheme = null;
  23. /**
  24. * Register a resolver class to handle target names prefixed with the `prefix`
  25. * string. This prefix should correspond to a URI scheme name listed in the
  26. * [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)
  27. * @param prefix
  28. * @param resolverClass
  29. */
  30. function registerResolver(scheme, resolverClass) {
  31. registeredResolvers[scheme] = resolverClass;
  32. }
  33. exports.registerResolver = registerResolver;
  34. /**
  35. * Register a default resolver to handle target names that do not start with
  36. * any registered prefix.
  37. * @param resolverClass
  38. */
  39. function registerDefaultScheme(scheme) {
  40. defaultScheme = scheme;
  41. }
  42. exports.registerDefaultScheme = registerDefaultScheme;
  43. /**
  44. * Create a name resolver for the specified target, if possible. Throws an
  45. * error if no such name resolver can be created.
  46. * @param target
  47. * @param listener
  48. */
  49. function createResolver(target, listener, options) {
  50. if (target.scheme !== undefined && target.scheme in registeredResolvers) {
  51. return new registeredResolvers[target.scheme](target, listener, options);
  52. }
  53. else {
  54. throw new Error(`No resolver could be created for target ${(0, uri_parser_1.uriToString)(target)}`);
  55. }
  56. }
  57. exports.createResolver = createResolver;
  58. /**
  59. * Get the default authority for the specified target, if possible. Throws an
  60. * error if no registered name resolver can parse that target string.
  61. * @param target
  62. */
  63. function getDefaultAuthority(target) {
  64. if (target.scheme !== undefined && target.scheme in registeredResolvers) {
  65. return registeredResolvers[target.scheme].getDefaultAuthority(target);
  66. }
  67. else {
  68. throw new Error(`Invalid target ${(0, uri_parser_1.uriToString)(target)}`);
  69. }
  70. }
  71. exports.getDefaultAuthority = getDefaultAuthority;
  72. function mapUriDefaultScheme(target) {
  73. if (target.scheme === undefined || !(target.scheme in registeredResolvers)) {
  74. if (defaultScheme !== null) {
  75. return {
  76. scheme: defaultScheme,
  77. authority: undefined,
  78. path: (0, uri_parser_1.uriToString)(target),
  79. };
  80. }
  81. else {
  82. return null;
  83. }
  84. }
  85. return target;
  86. }
  87. exports.mapUriDefaultScheme = mapUriDefaultScheme;
  88. //# sourceMappingURL=resolver.js.map