options-adapter.js 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.legacyOptionsAdapter = legacyOptionsAdapter;
  4. const url = require("url");
  5. const debug_1 = require("../debug");
  6. const logger_1 = require("../logger");
  7. const debug = debug_1.Debug.extend('legacy-options-adapter');
  8. // https://github.com/chimurai/http-proxy-middleware/blob/7341704d0aa9d1606dfd37ebfdffddd34c894784/src/_handlers.ts#L20-L27
  9. const proxyEventMap = {
  10. onError: 'error',
  11. onProxyReq: 'proxyReq',
  12. onProxyRes: 'proxyRes',
  13. onProxyReqWs: 'proxyReqWs',
  14. onOpen: 'open',
  15. onClose: 'close',
  16. };
  17. /**
  18. * Convert {@link LegacyOptions legacy Options} to new {@link Options}
  19. */
  20. function legacyOptionsAdapter(legacyContext, legacyOptions) {
  21. let options = {};
  22. let logger;
  23. // https://github.com/chimurai/http-proxy-middleware/pull/716
  24. if (typeof legacyContext === 'string' && !!url.parse(legacyContext).host) {
  25. throw new Error(`Shorthand syntax is removed from legacyCreateProxyMiddleware().
  26. Please use "legacyCreateProxyMiddleware({ target: 'http://www.example.org' })" instead.
  27. More details: https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md#removed-shorthand-usage
  28. `);
  29. }
  30. // detect old "context" argument and convert to "options.pathFilter"
  31. // https://github.com/chimurai/http-proxy-middleware/pull/722/files#diff-a2a171449d862fe29692ce031981047d7ab755ae7f84c707aef80701b3ea0c80L4
  32. if (legacyContext && legacyOptions) {
  33. debug('map legacy context/filter to options.pathFilter');
  34. options = { ...legacyOptions, pathFilter: legacyContext };
  35. logger = getLegacyLogger(options);
  36. logger.warn(`[http-proxy-middleware] Legacy "context" argument is deprecated. Migrate your "context" to "options.pathFilter":
  37. const options = {
  38. pathFilter: '${legacyContext}',
  39. }
  40. More details: https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md#removed-context-argument
  41. `);
  42. }
  43. else if (legacyContext && !legacyOptions) {
  44. options = { ...legacyContext };
  45. logger = getLegacyLogger(options);
  46. }
  47. else {
  48. logger = getLegacyLogger({});
  49. }
  50. // map old event names to new event names
  51. // https://github.com/chimurai/http-proxy-middleware/pull/745/files#diff-c54113cf61ec99691748a3890bfbeb00e10efb3f0a76f03a0fd9ec49072e410aL48-L53
  52. Object.entries(proxyEventMap).forEach(([legacyEventName, proxyEventName]) => {
  53. if (options[legacyEventName]) {
  54. options.on = { ...options.on };
  55. options.on[proxyEventName] = options[legacyEventName];
  56. debug('map legacy event "%s" to "on.%s"', legacyEventName, proxyEventName);
  57. logger.warn(`[http-proxy-middleware] Legacy "${legacyEventName}" is deprecated. Migrate to "options.on.${proxyEventName}":
  58. const options = {
  59. on: {
  60. ${proxyEventName}: () => {},
  61. },
  62. }
  63. More details: https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md#refactored-proxy-events
  64. `);
  65. }
  66. });
  67. // map old logProvider to new logger
  68. // https://github.com/chimurai/http-proxy-middleware/pull/749
  69. const logProvider = options.logProvider && options.logProvider();
  70. const logLevel = options.logLevel;
  71. debug('legacy logLevel', logLevel);
  72. debug('legacy logProvider: %O', logProvider);
  73. if (typeof logLevel === 'string' && logLevel !== 'silent') {
  74. debug('map "logProvider" to "logger"');
  75. logger.warn(`[http-proxy-middleware] Legacy "logLevel" and "logProvider" are deprecated. Migrate to "options.logger":
  76. const options = {
  77. logger: console,
  78. }
  79. More details: https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md#removed-logprovider-and-loglevel-options
  80. `);
  81. }
  82. return options;
  83. }
  84. function getLegacyLogger(options) {
  85. const legacyLogger = options.logProvider && options.logProvider();
  86. if (legacyLogger) {
  87. options.logger = legacyLogger;
  88. }
  89. return (0, logger_1.getLogger)(options);
  90. }