@redocly/openapi-core 1.0.0-beta.105 → 1.0.0-beta.108

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.
Files changed (240) hide show
  1. package/README.md +4 -4
  2. package/__tests__/utils.ts +5 -5
  3. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +0 -1
  4. package/lib/benchmark/benches/recommended-oas3.bench.js +1 -1
  5. package/lib/benchmark/utils.d.ts +2 -2
  6. package/lib/benchmark/utils.js +2 -2
  7. package/lib/bundle.d.ts +2 -2
  8. package/lib/bundle.js +7 -4
  9. package/lib/config/all.d.ts +2 -2
  10. package/lib/config/all.js +3 -3
  11. package/lib/config/builtIn.d.ts +2 -2
  12. package/lib/config/builtIn.js +2 -2
  13. package/lib/config/config-resolvers.d.ts +5 -5
  14. package/lib/config/config-resolvers.js +70 -49
  15. package/lib/config/config.d.ts +8 -10
  16. package/lib/config/config.js +10 -7
  17. package/lib/config/load.d.ts +7 -0
  18. package/lib/config/load.js +18 -10
  19. package/lib/config/minimal.d.ts +2 -2
  20. package/lib/config/minimal.js +5 -4
  21. package/lib/config/recommended.d.ts +2 -2
  22. package/lib/config/recommended.js +5 -4
  23. package/lib/config/rules.d.ts +3 -3
  24. package/lib/config/rules.js +1 -1
  25. package/lib/config/types.d.ts +23 -19
  26. package/lib/config/utils.d.ts +5 -5
  27. package/lib/config/utils.js +48 -31
  28. package/lib/decorators/common/registry-dependencies.js +1 -1
  29. package/lib/decorators/common/remove-x-internal.js +2 -2
  30. package/lib/env.d.ts +3 -0
  31. package/lib/env.js +8 -0
  32. package/lib/format/codeframes.js +16 -10
  33. package/lib/format/format.js +29 -27
  34. package/lib/index.d.ts +5 -5
  35. package/lib/index.js +4 -2
  36. package/lib/js-yaml/index.js +2 -6
  37. package/lib/lint.d.ts +2 -2
  38. package/lib/lint.js +16 -6
  39. package/lib/logger.d.ts +10 -0
  40. package/lib/logger.js +31 -0
  41. package/lib/output.d.ts +3 -0
  42. package/lib/output.js +9 -0
  43. package/lib/redocly/index.js +10 -9
  44. package/lib/redocly/registry-api-types.d.ts +28 -30
  45. package/lib/redocly/registry-api.d.ts +4 -3
  46. package/lib/redocly/registry-api.js +9 -4
  47. package/lib/ref-utils.js +2 -1
  48. package/lib/resolve.d.ts +1 -1
  49. package/lib/resolve.js +1 -1
  50. package/lib/rules/ajv.d.ts +1 -1
  51. package/lib/rules/ajv.js +7 -7
  52. package/lib/rules/common/assertions/asserts.js +4 -4
  53. package/lib/rules/common/assertions/index.js +1 -1
  54. package/lib/rules/common/info-license-url.d.ts +1 -1
  55. package/lib/rules/common/info-license-url.js +5 -10
  56. package/lib/rules/common/info-license.d.ts +2 -0
  57. package/lib/rules/common/info-license.js +17 -0
  58. package/lib/rules/common/no-enum-type-mismatch.js +1 -3
  59. package/lib/rules/common/no-invalid-parameter-examples.js +3 -3
  60. package/lib/rules/common/no-invalid-schema-examples.js +3 -3
  61. package/lib/rules/common/operation-operationId.js +1 -1
  62. package/lib/rules/common/operation-security-defined.js +1 -1
  63. package/lib/rules/common/path-not-include-query.js +1 -1
  64. package/lib/rules/common/paths-kebab-case.js +4 -1
  65. package/lib/rules/common/spec.js +3 -3
  66. package/lib/rules/oas2/index.js +4 -4
  67. package/lib/rules/oas2/remove-unused-components.js +5 -5
  68. package/lib/rules/oas3/index.js +6 -6
  69. package/lib/rules/oas3/no-empty-servers.js +1 -1
  70. package/lib/rules/oas3/no-invalid-media-type-examples.js +2 -2
  71. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
  72. package/lib/rules/oas3/{no-servers-empty-enum.js → no-server-variables-empty-enum.js} +4 -4
  73. package/lib/rules/oas3/no-unused-components.js +1 -1
  74. package/lib/rules/oas3/remove-unused-components.js +5 -5
  75. package/lib/rules/other/stats.js +43 -14
  76. package/lib/rules/utils.d.ts +3 -2
  77. package/lib/rules/utils.js +20 -5
  78. package/lib/types/index.d.ts +2 -2
  79. package/lib/types/redocly-yaml.js +9 -8
  80. package/lib/utils.d.ts +5 -0
  81. package/lib/utils.js +22 -5
  82. package/lib/visitors.d.ts +1 -1
  83. package/lib/visitors.js +2 -2
  84. package/lib/walk.d.ts +2 -1
  85. package/lib/walk.js +6 -3
  86. package/package.json +2 -2
  87. package/src/__tests__/__snapshots__/bundle.test.ts.snap +141 -0
  88. package/src/__tests__/bundle.test.ts +68 -34
  89. package/src/__tests__/codeframes.test.ts +13 -14
  90. package/src/__tests__/js-yaml.test.ts +6 -4
  91. package/src/__tests__/lint.test.ts +74 -6
  92. package/src/__tests__/logger-browser.test.ts +53 -0
  93. package/src/__tests__/logger.test.ts +47 -0
  94. package/src/__tests__/login.test.ts +2 -2
  95. package/src/__tests__/normalizeVisitors.test.ts +4 -4
  96. package/src/__tests__/output-browser.test.ts +18 -0
  97. package/src/__tests__/output.test.ts +15 -0
  98. package/src/__tests__/ref-utils.test.ts +13 -13
  99. package/src/__tests__/resolve-http.test.ts +1 -1
  100. package/src/__tests__/resolve.test.ts +14 -11
  101. package/src/__tests__/utils-browser.test.ts +11 -0
  102. package/src/__tests__/utils.test.ts +7 -0
  103. package/src/__tests__/walk.test.ts +48 -56
  104. package/src/benchmark/benches/lint-with-many-rules.bench.ts +1 -1
  105. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +1 -1
  106. package/src/benchmark/benches/lint-with-no-rules.bench.ts +1 -1
  107. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +1 -2
  108. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +1 -1
  109. package/src/benchmark/benches/recommended-oas3.bench.ts +3 -3
  110. package/src/benchmark/benches/resolve-with-no-external.bench.ts +1 -1
  111. package/src/benchmark/benchmark.js +9 -5
  112. package/src/benchmark/utils.ts +5 -5
  113. package/src/bundle.ts +24 -20
  114. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +7 -5
  115. package/src/config/__tests__/config-resolvers.test.ts +123 -121
  116. package/src/config/__tests__/config.test.ts +111 -76
  117. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +4 -2
  118. package/src/config/__tests__/fixtures/resolve-config/plugin.js +4 -1
  119. package/src/config/__tests__/load.test.ts +79 -1
  120. package/src/config/__tests__/resolve-plugins.test.ts +3 -3
  121. package/src/config/__tests__/utils.test.ts +83 -0
  122. package/src/config/all.ts +5 -6
  123. package/src/config/builtIn.ts +5 -5
  124. package/src/config/config-resolvers.ts +161 -96
  125. package/src/config/config.ts +15 -13
  126. package/src/config/load.ts +34 -11
  127. package/src/config/minimal.ts +7 -6
  128. package/src/config/recommended.ts +7 -6
  129. package/src/config/rules.ts +6 -6
  130. package/src/config/types.ts +28 -19
  131. package/src/config/utils.ts +78 -57
  132. package/src/decorators/__tests__/filter-out.test.ts +8 -4
  133. package/src/decorators/__tests__/remove-x-internal.test.ts +5 -5
  134. package/src/decorators/common/filters/filter-helper.ts +1 -1
  135. package/src/decorators/common/info-description-override.ts +1 -1
  136. package/src/decorators/common/operation-description-override.ts +1 -1
  137. package/src/decorators/common/registry-dependencies.ts +1 -1
  138. package/src/decorators/common/remove-x-internal.ts +4 -4
  139. package/src/decorators/common/tag-description-override.ts +1 -1
  140. package/src/env.ts +5 -0
  141. package/src/format/codeframes.ts +18 -12
  142. package/src/format/format.ts +37 -42
  143. package/src/index.ts +8 -7
  144. package/src/js-yaml/index.ts +4 -8
  145. package/src/lint.ts +22 -18
  146. package/src/logger.ts +34 -0
  147. package/src/oas-types.ts +1 -6
  148. package/src/output.ts +7 -0
  149. package/src/redocly/__tests__/redocly-client.test.ts +25 -19
  150. package/src/redocly/index.ts +12 -7
  151. package/src/redocly/registry-api-types.ts +27 -29
  152. package/src/redocly/registry-api.ts +22 -12
  153. package/src/ref-utils.ts +4 -3
  154. package/src/resolve.ts +11 -8
  155. package/src/rules/__tests__/no-unresolved-refs.test.ts +4 -4
  156. package/src/rules/__tests__/utils.test.ts +160 -0
  157. package/src/rules/ajv.ts +7 -8
  158. package/src/rules/common/__tests__/info-description.test.ts +3 -3
  159. package/src/rules/common/__tests__/info-license.test.ts +2 -2
  160. package/src/rules/common/__tests__/license-url.test.ts +2 -2
  161. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +1 -1
  162. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +8 -8
  163. package/src/rules/common/__tests__/no-identical-paths.test.ts +1 -1
  164. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +3 -3
  165. package/src/rules/common/__tests__/operation-2xx-response.test.ts +3 -3
  166. package/src/rules/common/__tests__/operation-4xx-response.test.ts +3 -3
  167. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +2 -2
  168. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +1 -1
  169. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +4 -4
  170. package/src/rules/common/__tests__/operation-security-defined.test.ts +2 -2
  171. package/src/rules/common/__tests__/operation-singular-tag.test.ts +2 -2
  172. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +2 -2
  173. package/src/rules/common/__tests__/path-not-include-query.test.ts +2 -2
  174. package/src/rules/common/__tests__/path-params-defined.test.ts +3 -3
  175. package/src/rules/common/__tests__/paths-kebab-case.test.ts +15 -15
  176. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +8 -8
  177. package/src/rules/common/__tests__/spec.test.ts +2 -2
  178. package/src/rules/common/__tests__/tag-description.test.ts +2 -2
  179. package/src/rules/common/__tests__/tags-alphabetical.test.ts +2 -2
  180. package/src/rules/common/assertions/__tests__/asserts.test.ts +513 -130
  181. package/src/rules/common/assertions/asserts.ts +4 -4
  182. package/src/rules/common/assertions/index.ts +7 -7
  183. package/src/rules/common/info-license-url.ts +4 -9
  184. package/src/rules/common/info-license.ts +15 -0
  185. package/src/rules/common/no-ambiguous-paths.ts +1 -1
  186. package/src/rules/common/no-enum-type-mismatch.ts +12 -9
  187. package/src/rules/common/no-invalid-parameter-examples.ts +4 -4
  188. package/src/rules/common/no-invalid-schema-examples.ts +4 -4
  189. package/src/rules/common/operation-operationId.ts +1 -1
  190. package/src/rules/common/operation-parameters-unique.ts +2 -2
  191. package/src/rules/common/operation-security-defined.ts +1 -1
  192. package/src/rules/common/path-not-include-query.ts +1 -1
  193. package/src/rules/common/path-params-defined.ts +1 -1
  194. package/src/rules/common/paths-kebab-case.ts +4 -1
  195. package/src/rules/common/scalar-property-missing-example.ts +1 -1
  196. package/src/rules/common/spec.ts +12 -9
  197. package/src/rules/no-unresolved-refs.ts +1 -1
  198. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +3 -3
  199. package/src/rules/oas2/__tests__/spec/info.test.ts +12 -12
  200. package/src/rules/oas2/__tests__/spec/operation.test.ts +4 -4
  201. package/src/rules/oas2/__tests__/spec/paths.test.ts +10 -10
  202. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +6 -2
  203. package/src/rules/oas2/__tests__/spec/utils.ts +6 -6
  204. package/src/rules/oas2/index.ts +3 -3
  205. package/src/rules/oas2/remove-unused-components.ts +14 -9
  206. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +3 -3
  207. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +16 -16
  208. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +2 -2
  209. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +13 -13
  210. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +2 -2
  211. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +3 -3
  212. package/src/rules/oas3/__tests__/no-unused-components.test.ts +1 -1
  213. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +1 -1
  214. package/src/rules/oas3/__tests__/spec/info.test.ts +12 -12
  215. package/src/rules/oas3/__tests__/spec/operation.test.ts +8 -8
  216. package/src/rules/oas3/__tests__/spec/paths.test.ts +10 -10
  217. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +12 -12
  218. package/src/rules/oas3/__tests__/spec/servers.test.ts +15 -15
  219. package/src/rules/oas3/__tests__/spec/spec.test.ts +6 -6
  220. package/src/rules/oas3/__tests__/spec/utils.ts +6 -6
  221. package/src/rules/oas3/index.ts +5 -5
  222. package/src/rules/oas3/no-empty-servers.ts +1 -1
  223. package/src/rules/oas3/no-invalid-media-type-examples.ts +14 -6
  224. package/src/rules/oas3/{no-servers-empty-enum.ts → no-server-variables-empty-enum.ts} +10 -11
  225. package/src/rules/oas3/no-unused-components.ts +1 -1
  226. package/src/rules/oas3/remove-unused-components.ts +21 -10
  227. package/src/rules/other/stats.ts +46 -17
  228. package/src/rules/utils.ts +20 -4
  229. package/src/types/index.ts +5 -5
  230. package/src/types/redocly-yaml.ts +9 -8
  231. package/src/typings/common.ts +9 -1
  232. package/src/typings/openapi.ts +1 -1
  233. package/src/utils.ts +26 -3
  234. package/src/visitors.ts +9 -9
  235. package/src/walk.ts +15 -11
  236. package/tsconfig.tsbuildinfo +1 -1
  237. package/lib/rules/common/license-url.d.ts +0 -2
  238. package/lib/rules/common/license-url.js +0 -12
  239. package/lib/rules/oas3/no-servers-empty-enum.d.ts +0 -2
  240. package/src/rules/common/license-url.ts +0 -10
@@ -2,20 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatProblems = exports.getTotals = void 0;
4
4
  const path = require("path");
5
- const colorette_1 = require("colorette");
5
+ const logger_1 = require("../logger");
6
+ const output_1 = require("../output");
6
7
  const coreVersion = require('../../package.json').version;
7
8
  const codeframes_1 = require("./codeframes");
8
- const config_1 = require("../config");
9
+ const env_1 = require("../env");
9
10
  const ERROR_MESSAGE = {
10
11
  INVALID_SEVERITY_LEVEL: 'Invalid severity level; accepted values: error or warn',
11
12
  };
12
13
  const BG_COLORS = {
13
- warn: (str) => colorette_1.bgYellow(colorette_1.black(str)),
14
- error: colorette_1.bgRed,
14
+ warn: (str) => logger_1.colorize.bgYellow(logger_1.colorize.black(str)),
15
+ error: logger_1.colorize.bgRed,
15
16
  };
16
17
  const COLORS = {
17
- warn: colorette_1.yellow,
18
- error: colorette_1.red,
18
+ warn: logger_1.colorize.yellow,
19
+ error: logger_1.colorize.red,
19
20
  };
20
21
  const SEVERITY_NAMES = {
21
22
  warn: 'Warning',
@@ -51,8 +52,8 @@ function getTotals(problems) {
51
52
  }
52
53
  exports.getTotals = getTotals;
53
54
  function formatProblems(problems, opts) {
54
- const { maxProblems = 100, cwd = process.cwd(), format = 'codeframe', color = colorette_1.options.enabled, totals = getTotals(problems), version = coreVersion, } = opts;
55
- colorette_1.options.enabled = color; // force colors if specified
55
+ const { maxProblems = 100, cwd = process.cwd(), format = 'codeframe', color = logger_1.colorOptions.enabled, totals = getTotals(problems), version = coreVersion, } = opts;
56
+ logger_1.colorOptions.enabled = color; // force colors if specified
56
57
  const totalProblems = problems.length;
57
58
  problems = problems.filter((m) => !m.ignored);
58
59
  const ignoredProblems = totalProblems - problems.length;
@@ -68,31 +69,31 @@ function formatProblems(problems, opts) {
68
69
  case 'codeframe':
69
70
  for (let i = 0; i < problems.length; i++) {
70
71
  const problem = problems[i];
71
- process.stderr.write(`${formatCodeframe(problem, i)}\n`);
72
+ logger_1.logger.info(`${formatCodeframe(problem, i)}\n`);
72
73
  }
73
74
  break;
74
75
  case 'stylish': {
75
76
  const groupedByFile = groupByFiles(problems);
76
77
  for (const [file, { ruleIdPad, locationPad: positionPad, fileProblems }] of Object.entries(groupedByFile)) {
77
- process.stderr.write(`${colorette_1.blue(path.relative(cwd, file))}:\n`);
78
+ logger_1.logger.info(`${logger_1.colorize.blue(path.relative(cwd, file))}:\n`);
78
79
  for (let i = 0; i < fileProblems.length; i++) {
79
80
  const problem = fileProblems[i];
80
- process.stderr.write(`${formatStylish(problem, positionPad, ruleIdPad)}\n`);
81
+ logger_1.logger.info(`${formatStylish(problem, positionPad, ruleIdPad)}\n`);
81
82
  }
82
- process.stderr.write('\n');
83
+ logger_1.logger.info('\n');
83
84
  }
84
85
  break;
85
86
  }
86
87
  case 'checkstyle': {
87
88
  const groupedByFile = groupByFiles(problems);
88
- process.stdout.write('<?xml version="1.0" encoding="UTF-8"?>\n');
89
- process.stdout.write('<checkstyle version="4.3">\n');
89
+ output_1.output.write('<?xml version="1.0" encoding="UTF-8"?>\n');
90
+ output_1.output.write('<checkstyle version="4.3">\n');
90
91
  for (const [file, { fileProblems }] of Object.entries(groupedByFile)) {
91
- process.stdout.write(`<file name="${xmlEscape(path.relative(cwd, file))}">\n`);
92
+ output_1.output.write(`<file name="${xmlEscape(path.relative(cwd, file))}">\n`);
92
93
  fileProblems.forEach(formatCheckstyle);
93
- process.stdout.write(`</file>\n`);
94
+ output_1.output.write(`</file>\n`);
94
95
  }
95
- process.stdout.write(`</checkstyle>\n`);
96
+ output_1.output.write(`</checkstyle>\n`);
96
97
  break;
97
98
  }
98
99
  case 'codeclimate':
@@ -100,7 +101,7 @@ function formatProblems(problems, opts) {
100
101
  break;
101
102
  }
102
103
  if (totalProblems - ignoredProblems > maxProblems) {
103
- process.stderr.write(`< ... ${totalProblems - maxProblems} more problems hidden > ${colorette_1.gray('increase with `--max-problems N`')}\n`);
104
+ logger_1.logger.info(`< ... ${totalProblems - maxProblems} more problems hidden > ${logger_1.colorize.gray('increase with `--max-problems N`')}\n`);
104
105
  }
105
106
  function outputForCodeClimate() {
106
107
  const issues = problems.map((p) => {
@@ -118,7 +119,7 @@ function formatProblems(problems, opts) {
118
119
  fingerprint: `${p.ruleId}${p.location.length > 0 ? '-' + p.location[0].pointer : ''}`,
119
120
  };
120
121
  });
121
- process.stdout.write(JSON.stringify(issues, null, 2));
122
+ output_1.output.write(JSON.stringify(issues, null, 2));
122
123
  }
123
124
  function outputJSON() {
124
125
  const resultObject = {
@@ -126,13 +127,13 @@ function formatProblems(problems, opts) {
126
127
  version,
127
128
  problems: problems.map((p) => {
128
129
  var _a;
129
- let problem = Object.assign(Object.assign({}, p), { location: p.location.map((location) => (Object.assign(Object.assign({}, location), { source: {
130
+ const problem = Object.assign(Object.assign({}, p), { location: p.location.map((location) => (Object.assign(Object.assign({}, location), { source: {
130
131
  ref: path.relative(cwd, location.source.absoluteRef),
131
132
  } }))), from: p.from
132
133
  ? Object.assign(Object.assign({}, p.from), { source: {
133
134
  ref: path.relative(cwd, ((_a = p.from) === null || _a === void 0 ? void 0 : _a.source.absoluteRef) || cwd),
134
135
  } }) : undefined });
135
- if (config_1.env.FORMAT_JSON_WITH_CODEFRAMES) {
136
+ if (env_1.env.FORMAT_JSON_WITH_CODEFRAMES) {
136
137
  const location = p.location[0]; // TODO: support multiple locations
137
138
  const loc = codeframes_1.getLineColLocation(location);
138
139
  problem.codeframe = codeframes_1.getCodeframe(loc, color);
@@ -140,7 +141,7 @@ function formatProblems(problems, opts) {
140
141
  return problem;
141
142
  }),
142
143
  };
143
- process.stdout.write(JSON.stringify(resultObject, null, 2));
144
+ output_1.output.write(JSON.stringify(resultObject, null, 2));
144
145
  }
145
146
  function getBgColor(problem) {
146
147
  const { severity } = problem;
@@ -154,7 +155,7 @@ function formatProblems(problems, opts) {
154
155
  const location = problem.location[0]; // TODO: support multiple locations
155
156
  const relativePath = path.relative(cwd, location.source.absoluteRef);
156
157
  const loc = codeframes_1.getLineColLocation(location);
157
- const atPointer = location.pointer ? colorette_1.gray(`at ${location.pointer}`) : '';
158
+ const atPointer = location.pointer ? logger_1.colorize.gray(`at ${location.pointer}`) : '';
158
159
  const fileWithLoc = `${relativePath}:${loc.start.line}:${loc.start.col}`;
159
160
  return (`[${idx + 1}] ${bgColor(fileWithLoc)} ${atPointer}\n\n` +
160
161
  `${problem.message}\n\n` +
@@ -162,12 +163,12 @@ function formatProblems(problems, opts) {
162
163
  codeframes_1.getCodeframe(loc, color) +
163
164
  '\n\n' +
164
165
  formatFrom(cwd, problem.from) +
165
- `${SEVERITY_NAMES[problem.severity]} was generated by the ${colorette_1.blue(problem.ruleId)} rule.\n\n`);
166
+ `${SEVERITY_NAMES[problem.severity]} was generated by the ${logger_1.colorize.blue(problem.ruleId)} rule.\n\n`);
166
167
  }
167
168
  function formatStylish(problem, locationPad, ruleIdPad) {
168
169
  const color = COLORS[problem.severity];
169
170
  if (!SEVERITY_NAMES[problem.severity]) {
170
- return 'Error not found severity. Please check your config file. Allowed values: \`warn,error,off\`';
171
+ return 'Error not found severity. Please check your config file. Allowed values: `warn,error,off`';
171
172
  }
172
173
  const severityName = color(SEVERITY_NAMES[problem.severity].toLowerCase().padEnd(7));
173
174
  const { start } = problem.location[0];
@@ -178,7 +179,7 @@ function formatProblems(problems, opts) {
178
179
  const severity = problem.severity == 'warn' ? 'warning' : 'error';
179
180
  const message = xmlEscape(problem.message);
180
181
  const source = xmlEscape(problem.ruleId);
181
- process.stdout.write(`<error line="${line}" column="${col}" severity="${severity}" message="${message}" source="${source}" />\n`);
182
+ output_1.output.write(`<error line="${line}" column="${col}" severity="${severity}" message="${message}" source="${source}" />\n`);
182
183
  }
183
184
  }
184
185
  exports.formatProblems = formatProblems;
@@ -188,7 +189,7 @@ function formatFrom(cwd, location) {
188
189
  const relativePath = path.relative(cwd, location.source.absoluteRef);
189
190
  const loc = codeframes_1.getLineColLocation(location);
190
191
  const fileWithLoc = `${relativePath}:${loc.start.line}:${loc.start.col}`;
191
- return `referenced from ${colorette_1.blue(fileWithLoc)}\n\n`;
192
+ return `referenced from ${logger_1.colorize.blue(fileWithLoc)}\n\n`;
192
193
  }
193
194
  function formatDidYouMean(problem) {
194
195
  if (problem.suggest.length === 0)
@@ -217,6 +218,7 @@ const groupByFiles = (problems) => {
217
218
  return fileGroups;
218
219
  };
219
220
  function xmlEscape(s) {
221
+ // eslint-disable-next-line no-control-regex
220
222
  return s.replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/gu, (char) => {
221
223
  switch (char) {
222
224
  case '<':
package/lib/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- export { BundleOutputFormat, readFileFromUrl, slash, doesYamlFileExist } from './utils';
1
+ export { BundleOutputFormat, readFileFromUrl, slash, doesYamlFileExist, isTruthy } from './utils';
2
2
  export { Oas3_1Types } from './types/oas3_1';
3
3
  export { Oas3Types } from './types/oas3';
4
4
  export { Oas2Types } from './types/oas2';
5
5
  export { ConfigTypes } from './types/redocly-yaml';
6
- export { Oas3Definition, Oas3_1Definition, Oas3Components, Oas3PathItem, Oas3Paths, Oas3ComponentName, Oas3Schema, Oas3_1Schema, Oas3Tag, Oas3_1Webhooks, Referenced, } from './typings/openapi';
7
- export { Oas2Definition } from './typings/swagger';
8
- export { StatsAccumulator, StatsName } from './typings/common';
6
+ export type { Oas3Definition, Oas3_1Definition, Oas3Components, Oas3PathItem, Oas3Paths, Oas3ComponentName, Oas3Schema, Oas3_1Schema, Oas3Tag, Oas3_1Webhooks, Referenced, OasRef, } from './typings/openapi';
7
+ export type { Oas2Definition } from './typings/swagger';
8
+ export type { StatsAccumulator, StatsName } from './typings/common';
9
9
  export { normalizeTypes } from './types';
10
10
  export { Stats } from './rules/other/stats';
11
- export { Config, LintConfig, RawConfig, IGNORE_FILE, Region, getMergedConfig, transformConfig, loadConfig, getConfig, findConfig, CONFIG_FILE_NAMES, RuleSeverity } from './config';
11
+ export { Config, StyleguideConfig, RawConfig, IGNORE_FILE, Region, getMergedConfig, transformConfig, loadConfig, getConfig, findConfig, CONFIG_FILE_NAMES, RuleSeverity, createConfig, } from './config';
12
12
  export { RedoclyClient, isRedoclyRegistryURL } from './redocly';
13
13
  export { Source, BaseResolver, Document, resolveDocument, ResolveError, YamlParseError, makeDocumentFromString, } from './resolve';
14
14
  export { parseYaml, stringifyYaml } from './js-yaml';
package/lib/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapTypeToComponent = exports.bundleDocument = exports.bundle = exports.lintConfig = exports.lintFromString = exports.lintDocument = exports.validate = exports.lint = exports.getTotals = exports.formatProblems = exports.getLineColLocation = exports.getAstNodeByPointer = exports.walkDocument = exports.normalizeVisitors = exports.OasVersion = exports.openAPIMajor = exports.OasMajorVersion = exports.detectOpenAPI = exports.isRef = exports.unescapePointer = exports.stringifyYaml = exports.parseYaml = exports.makeDocumentFromString = exports.YamlParseError = exports.ResolveError = exports.resolveDocument = exports.BaseResolver = exports.Source = exports.isRedoclyRegistryURL = exports.RedoclyClient = exports.CONFIG_FILE_NAMES = exports.findConfig = exports.getConfig = exports.loadConfig = exports.transformConfig = exports.getMergedConfig = exports.IGNORE_FILE = exports.LintConfig = exports.Config = exports.Stats = exports.normalizeTypes = exports.ConfigTypes = exports.Oas2Types = exports.Oas3Types = exports.Oas3_1Types = exports.doesYamlFileExist = exports.slash = exports.readFileFromUrl = void 0;
3
+ exports.mapTypeToComponent = exports.bundleDocument = exports.bundle = exports.lintConfig = exports.lintFromString = exports.lintDocument = exports.validate = exports.lint = exports.getTotals = exports.formatProblems = exports.getLineColLocation = exports.getAstNodeByPointer = exports.walkDocument = exports.normalizeVisitors = exports.OasVersion = exports.openAPIMajor = exports.OasMajorVersion = exports.detectOpenAPI = exports.isRef = exports.unescapePointer = exports.stringifyYaml = exports.parseYaml = exports.makeDocumentFromString = exports.YamlParseError = exports.ResolveError = exports.resolveDocument = exports.BaseResolver = exports.Source = exports.isRedoclyRegistryURL = exports.RedoclyClient = exports.createConfig = exports.CONFIG_FILE_NAMES = exports.findConfig = exports.getConfig = exports.loadConfig = exports.transformConfig = exports.getMergedConfig = exports.IGNORE_FILE = exports.StyleguideConfig = exports.Config = exports.Stats = exports.normalizeTypes = exports.ConfigTypes = exports.Oas2Types = exports.Oas3Types = exports.Oas3_1Types = exports.isTruthy = exports.doesYamlFileExist = exports.slash = exports.readFileFromUrl = void 0;
4
4
  var utils_1 = require("./utils");
5
5
  Object.defineProperty(exports, "readFileFromUrl", { enumerable: true, get: function () { return utils_1.readFileFromUrl; } });
6
6
  Object.defineProperty(exports, "slash", { enumerable: true, get: function () { return utils_1.slash; } });
7
7
  Object.defineProperty(exports, "doesYamlFileExist", { enumerable: true, get: function () { return utils_1.doesYamlFileExist; } });
8
+ Object.defineProperty(exports, "isTruthy", { enumerable: true, get: function () { return utils_1.isTruthy; } });
8
9
  var oas3_1_1 = require("./types/oas3_1");
9
10
  Object.defineProperty(exports, "Oas3_1Types", { enumerable: true, get: function () { return oas3_1_1.Oas3_1Types; } });
10
11
  var oas3_1 = require("./types/oas3");
@@ -19,7 +20,7 @@ var stats_1 = require("./rules/other/stats");
19
20
  Object.defineProperty(exports, "Stats", { enumerable: true, get: function () { return stats_1.Stats; } });
20
21
  var config_1 = require("./config");
21
22
  Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return config_1.Config; } });
22
- Object.defineProperty(exports, "LintConfig", { enumerable: true, get: function () { return config_1.LintConfig; } });
23
+ Object.defineProperty(exports, "StyleguideConfig", { enumerable: true, get: function () { return config_1.StyleguideConfig; } });
23
24
  Object.defineProperty(exports, "IGNORE_FILE", { enumerable: true, get: function () { return config_1.IGNORE_FILE; } });
24
25
  Object.defineProperty(exports, "getMergedConfig", { enumerable: true, get: function () { return config_1.getMergedConfig; } });
25
26
  Object.defineProperty(exports, "transformConfig", { enumerable: true, get: function () { return config_1.transformConfig; } });
@@ -27,6 +28,7 @@ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function (
27
28
  Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return config_1.getConfig; } });
28
29
  Object.defineProperty(exports, "findConfig", { enumerable: true, get: function () { return config_1.findConfig; } });
29
30
  Object.defineProperty(exports, "CONFIG_FILE_NAMES", { enumerable: true, get: function () { return config_1.CONFIG_FILE_NAMES; } });
31
+ Object.defineProperty(exports, "createConfig", { enumerable: true, get: function () { return config_1.createConfig; } });
30
32
  var redocly_1 = require("./redocly");
31
33
  Object.defineProperty(exports, "RedoclyClient", { enumerable: true, get: function () { return redocly_1.RedoclyClient; } });
32
34
  Object.defineProperty(exports, "isRedoclyRegistryURL", { enumerable: true, get: function () { return redocly_1.isRedoclyRegistryURL; } });
@@ -2,16 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stringifyYaml = exports.parseYaml = void 0;
4
4
  // TODO: add a type for "types" https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/js-yaml/index.d.ts
5
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
5
6
  // @ts-ignore
6
7
  const js_yaml_1 = require("js-yaml");
7
8
  const DEFAULT_SCHEMA_WITHOUT_TIMESTAMP = js_yaml_1.JSON_SCHEMA.extend({
8
9
  implicit: [js_yaml_1.types.merge],
9
- explicit: [
10
- js_yaml_1.types.binary,
11
- js_yaml_1.types.omap,
12
- js_yaml_1.types.pairs,
13
- js_yaml_1.types.set,
14
- ],
10
+ explicit: [js_yaml_1.types.binary, js_yaml_1.types.omap, js_yaml_1.types.pairs, js_yaml_1.types.set],
15
11
  });
16
12
  const parseYaml = (str, opts) => js_yaml_1.load(str, Object.assign({ schema: DEFAULT_SCHEMA_WITHOUT_TIMESTAMP }, opts));
17
13
  exports.parseYaml = parseYaml;
package/lib/lint.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BaseResolver, Document } from './resolve';
2
2
  import { NodeType } from './types';
3
3
  import { ProblemSeverity } from './walk';
4
- import { LintConfig, Config } from './config';
4
+ import { StyleguideConfig, Config } from './config';
5
5
  export declare function lint(opts: {
6
6
  ref: string;
7
7
  config: Config;
@@ -15,7 +15,7 @@ export declare function lintFromString(opts: {
15
15
  }): Promise<import("./walk").NormalizedProblem[]>;
16
16
  export declare function lintDocument(opts: {
17
17
  document: Document;
18
- config: LintConfig;
18
+ config: StyleguideConfig;
19
19
  customTypes?: Record<string, NodeType>;
20
20
  externalRefResolver: BaseResolver;
21
21
  }): Promise<import("./walk").NormalizedProblem[]>;
package/lib/lint.js CHANGED
@@ -26,7 +26,7 @@ function lint(opts) {
26
26
  return __awaiter(this, void 0, void 0, function* () {
27
27
  const { ref, externalRefResolver = new resolve_1.BaseResolver(opts.config.resolve) } = opts;
28
28
  const document = (yield externalRefResolver.resolveDocument(null, ref, true));
29
- return lintDocument(Object.assign(Object.assign({ document }, opts), { externalRefResolver, config: opts.config.lint }));
29
+ return lintDocument(Object.assign(Object.assign({ document }, opts), { externalRefResolver, config: opts.config.styleguide }));
30
30
  });
31
31
  }
32
32
  exports.lint = lint;
@@ -34,7 +34,7 @@ function lintFromString(opts) {
34
34
  return __awaiter(this, void 0, void 0, function* () {
35
35
  const { source, absoluteRef, externalRefResolver = new resolve_1.BaseResolver(opts.config.resolve) } = opts;
36
36
  const document = resolve_1.makeDocumentFromString(source, absoluteRef || '/');
37
- return lintDocument(Object.assign(Object.assign({ document }, opts), { externalRefResolver, config: opts.config.lint }));
37
+ return lintDocument(Object.assign(Object.assign({ document }, opts), { externalRefResolver, config: opts.config.styleguide }));
38
38
  });
39
39
  }
40
40
  exports.lintFromString = lintFromString;
@@ -45,7 +45,11 @@ function lintDocument(opts) {
45
45
  const oasVersion = oas_types_1.detectOpenAPI(document.parsed);
46
46
  const oasMajorVersion = oas_types_1.openAPIMajor(oasVersion);
47
47
  const rules = config.getRulesForOasVersion(oasMajorVersion);
48
- const types = types_1.normalizeTypes(config.extendTypes((customTypes !== null && customTypes !== void 0 ? customTypes : oasMajorVersion === oas_types_1.OasMajorVersion.Version3) ? (oasVersion === oas_types_1.OasVersion.Version3_1 ? oas3_1_1.Oas3_1Types : oas3_1.Oas3Types) : oas2_1.Oas2Types, oasVersion), config);
48
+ const types = types_1.normalizeTypes(config.extendTypes((customTypes !== null && customTypes !== void 0 ? customTypes : oasMajorVersion === oas_types_1.OasMajorVersion.Version3)
49
+ ? oasVersion === oas_types_1.OasVersion.Version3_1
50
+ ? oas3_1_1.Oas3_1Types
51
+ : oas3_1.Oas3Types
52
+ : oas2_1.Oas2Types, oasVersion), config);
49
53
  const ctx = {
50
54
  problems: [],
51
55
  oasVersion: oasVersion,
@@ -57,7 +61,7 @@ function lintDocument(opts) {
57
61
  const resolvedRefMap = yield resolve_1.resolveDocument({
58
62
  rootDocument: document,
59
63
  rootType: types.DefinitionRoot,
60
- externalRefResolver
64
+ externalRefResolver,
61
65
  });
62
66
  walk_1.walkDocument({
63
67
  document,
@@ -79,12 +83,18 @@ function lintConfig(opts) {
79
83
  visitorsData: {},
80
84
  };
81
85
  const plugins = config_1.resolvePlugins([config_1.defaultPlugin]);
82
- const config = new config_1.LintConfig({
86
+ const config = new config_1.StyleguideConfig({
83
87
  plugins,
84
88
  rules: { spec: 'error' },
85
89
  });
86
90
  const types = types_1.normalizeTypes(redocly_yaml_1.ConfigTypes, config);
87
- const rules = [{ severity: severity || 'error', ruleId: 'configuration spec', visitor: spec_1.OasSpec({ severity: 'error' }) }];
91
+ const rules = [
92
+ {
93
+ severity: severity || 'error',
94
+ ruleId: 'configuration spec',
95
+ visitor: spec_1.OasSpec({ severity: 'error' }),
96
+ },
97
+ ];
88
98
  const normalizedVisitors = visitors_1.normalizeVisitors(rules, types);
89
99
  walk_1.walkDocument({
90
100
  document,
@@ -0,0 +1,10 @@
1
+ import * as colorette from 'colorette';
2
+ export { options as colorOptions } from 'colorette';
3
+ export declare const colorize: typeof colorette;
4
+ declare class Logger {
5
+ protected stderr(str: string): boolean;
6
+ info(str: string): boolean | void;
7
+ warn(str: string): boolean | void;
8
+ error(str: string): boolean | void;
9
+ }
10
+ export declare const logger: Logger;
package/lib/logger.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = exports.colorize = exports.colorOptions = void 0;
4
+ const colorette = require("colorette");
5
+ var colorette_1 = require("colorette");
6
+ Object.defineProperty(exports, "colorOptions", { enumerable: true, get: function () { return colorette_1.options; } });
7
+ const env_1 = require("./env");
8
+ const utils_1 = require("./utils");
9
+ exports.colorize = new Proxy(colorette, {
10
+ get(target, prop) {
11
+ if (env_1.isBrowser) {
12
+ return utils_1.identity;
13
+ }
14
+ return target[prop];
15
+ },
16
+ });
17
+ class Logger {
18
+ stderr(str) {
19
+ return process.stderr.write(str);
20
+ }
21
+ info(str) {
22
+ return env_1.isBrowser ? console.log(str) : this.stderr(str);
23
+ }
24
+ warn(str) {
25
+ return env_1.isBrowser ? console.warn(str) : this.stderr(exports.colorize.yellow(str));
26
+ }
27
+ error(str) {
28
+ return env_1.isBrowser ? console.error(str) : this.stderr(exports.colorize.red(str));
29
+ }
30
+ }
31
+ exports.logger = new Logger();
@@ -0,0 +1,3 @@
1
+ export declare const output: {
2
+ write(str: string): boolean | undefined;
3
+ };
package/lib/output.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.output = void 0;
4
+ const env_1 = require("./env");
5
+ exports.output = {
6
+ write(str) {
7
+ return env_1.isBrowser ? undefined : process.stdout.write(str);
8
+ },
9
+ };
@@ -13,26 +13,27 @@ exports.isRedoclyRegistryURL = exports.RedoclyClient = void 0;
13
13
  const fs_1 = require("fs");
14
14
  const path_1 = require("path");
15
15
  const os_1 = require("os");
16
- const colorette_1 = require("colorette");
17
16
  const registry_api_1 = require("./registry-api");
18
17
  const config_1 = require("../config/config");
18
+ const env_1 = require("../env");
19
19
  const utils_1 = require("../utils");
20
+ const logger_1 = require("../logger");
20
21
  const TOKEN_FILENAME = '.redocly-config.json';
21
22
  class RedoclyClient {
22
23
  constructor(region) {
23
24
  this.accessTokens = {};
24
25
  this.region = this.loadRegion(region);
25
26
  this.loadTokens();
26
- this.domain = region ? config_1.DOMAINS[region] : config_1.env.REDOCLY_DOMAIN || config_1.DOMAINS[config_1.DEFAULT_REGION];
27
- config_1.env.REDOCLY_DOMAIN = this.domain; // isRedoclyRegistryURL depends on the value to be set
27
+ this.domain = region ? config_1.DOMAINS[region] : env_1.env.REDOCLY_DOMAIN || config_1.DOMAINS[config_1.DEFAULT_REGION];
28
+ env_1.env.REDOCLY_DOMAIN = this.domain; // isRedoclyRegistryURL depends on the value to be set
28
29
  this.registryApi = new registry_api_1.RegistryApi(this.accessTokens, this.region);
29
30
  }
30
31
  loadRegion(region) {
31
32
  if (region && !config_1.DOMAINS[region]) {
32
- throw new Error(`Invalid argument: region in config file.\nGiven: ${colorette_1.green(region)}, choices: "us", "eu".`);
33
+ throw new Error(`Invalid argument: region in config file.\nGiven: ${logger_1.colorize.green(region)}, choices: "us", "eu".`);
33
34
  }
34
- if (config_1.env.REDOCLY_DOMAIN) {
35
- return (config_1.AVAILABLE_REGIONS.find((region) => config_1.DOMAINS[region] === config_1.env.REDOCLY_DOMAIN) || config_1.DEFAULT_REGION);
35
+ if (env_1.env.REDOCLY_DOMAIN) {
36
+ return (config_1.AVAILABLE_REGIONS.find((region) => config_1.DOMAINS[region] === env_1.env.REDOCLY_DOMAIN) || config_1.DEFAULT_REGION);
36
37
  }
37
38
  return region || config_1.DEFAULT_REGION;
38
39
  }
@@ -64,8 +65,8 @@ class RedoclyClient {
64
65
  [this.region]: credentials.token,
65
66
  })));
66
67
  }
67
- if (config_1.env.REDOCLY_AUTHORIZATION) {
68
- this.setAccessTokens(Object.assign(Object.assign({}, this.accessTokens), { [this.region]: config_1.env.REDOCLY_AUTHORIZATION }));
68
+ if (env_1.env.REDOCLY_AUTHORIZATION) {
69
+ this.setAccessTokens(Object.assign(Object.assign({}, this.accessTokens), { [this.region]: env_1.env.REDOCLY_AUTHORIZATION }));
69
70
  }
70
71
  }
71
72
  getAllTokens() {
@@ -142,7 +143,7 @@ class RedoclyClient {
142
143
  }
143
144
  exports.RedoclyClient = RedoclyClient;
144
145
  function isRedoclyRegistryURL(link) {
145
- const domain = config_1.env.REDOCLY_DOMAIN || config_1.DOMAINS[config_1.DEFAULT_REGION];
146
+ const domain = env_1.env.REDOCLY_DOMAIN || config_1.DOMAINS[config_1.DEFAULT_REGION];
146
147
  const legacyDomain = domain === 'redocly.com' ? 'redoc.ly' : domain;
147
148
  if (!link.startsWith(`https://api.${domain}/registry/`) &&
148
149
  !link.startsWith(`https://api.${legacyDomain}/registry/`)) {
@@ -1,31 +1,29 @@
1
- export declare namespace RegistryApiTypes {
2
- interface VersionParams {
3
- organizationId: string;
4
- name: string;
5
- version: string;
6
- }
7
- export interface PrepareFileuploadParams extends VersionParams {
8
- filesHash: string;
9
- filename: string;
10
- isUpsert?: boolean;
11
- }
12
- export interface PushApiParams extends VersionParams {
13
- rootFilePath: string;
14
- filePaths: string[];
15
- branch?: string;
16
- isUpsert?: boolean;
17
- isPublic?: boolean;
18
- batchId?: string;
19
- batchSize?: number;
20
- }
21
- export interface PrepareFileuploadOKResponse {
22
- filePath: string;
23
- signedUploadUrl: string;
24
- }
25
- export interface NotFoundProblemResponse {
26
- status: 404;
27
- title: 'Not Found';
28
- code: 'ORGANIZATION_NOT_FOUND' | 'API_VERSION_NOT_FOUND';
29
- }
30
- export {};
1
+ interface VersionParams {
2
+ organizationId: string;
3
+ name: string;
4
+ version: string;
31
5
  }
6
+ export interface PrepareFileuploadParams extends VersionParams {
7
+ filesHash: string;
8
+ filename: string;
9
+ isUpsert?: boolean;
10
+ }
11
+ export interface PushApiParams extends VersionParams {
12
+ rootFilePath: string;
13
+ filePaths: string[];
14
+ branch?: string;
15
+ isUpsert?: boolean;
16
+ isPublic?: boolean;
17
+ batchId?: string;
18
+ batchSize?: number;
19
+ }
20
+ export interface PrepareFileuploadOKResponse {
21
+ filePath: string;
22
+ signedUploadUrl: string;
23
+ }
24
+ export interface NotFoundProblemResponse {
25
+ status: 404;
26
+ title: 'Not Found';
27
+ code: 'ORGANIZATION_NOT_FOUND' | 'API_VERSION_NOT_FOUND';
28
+ }
29
+ export {};
@@ -1,5 +1,6 @@
1
- import { RegistryApiTypes } from './registry-api-types';
1
+ import type { PrepareFileuploadOKResponse, PrepareFileuploadParams, PushApiParams } from './registry-api-types';
2
2
  import type { AccessTokens, Region } from '../config/types';
3
+ export declare const currentCommand: string;
3
4
  export declare class RegistryApi {
4
5
  private accessTokens;
5
6
  private region;
@@ -12,6 +13,6 @@ export declare class RegistryApi {
12
13
  viewerId: string;
13
14
  organizations: string[];
14
15
  }>;
15
- prepareFileUpload({ organizationId, name, version, filesHash, filename, isUpsert, }: RegistryApiTypes.PrepareFileuploadParams): Promise<RegistryApiTypes.PrepareFileuploadOKResponse>;
16
- pushApi({ organizationId, name, version, rootFilePath, filePaths, branch, isUpsert, isPublic, batchId, batchSize }: RegistryApiTypes.PushApiParams): Promise<void>;
16
+ prepareFileUpload({ organizationId, name, version, filesHash, filename, isUpsert, }: PrepareFileuploadParams): Promise<PrepareFileuploadOKResponse>;
17
+ pushApi({ organizationId, name, version, rootFilePath, filePaths, branch, isUpsert, isPublic, batchId, batchSize, }: PushApiParams): Promise<void>;
17
18
  }
@@ -8,12 +8,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var _a;
11
12
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RegistryApi = void 0;
13
+ exports.RegistryApi = exports.currentCommand = void 0;
13
14
  const node_fetch_1 = require("node-fetch");
14
15
  const config_1 = require("../config/config");
15
16
  const utils_1 = require("../utils");
16
17
  const version = require('../../package.json').version;
18
+ exports.currentCommand = typeof process !== 'undefined' ? ((_a = process.env) === null || _a === void 0 ? void 0 : _a.REDOCLY_CLI_COMMAND) || '' : '';
17
19
  class RegistryApi {
18
20
  constructor(accessTokens, region) {
19
21
  this.accessTokens = accessTokens;
@@ -31,7 +33,10 @@ class RegistryApi {
31
33
  }
32
34
  request(path = '', options = {}, region) {
33
35
  return __awaiter(this, void 0, void 0, function* () {
34
- const headers = Object.assign({}, options.headers || {}, { 'x-redocly-cli-version': version });
36
+ const headers = Object.assign({}, options.headers || {}, {
37
+ 'x-redocly-cli-version': version,
38
+ 'user-agent': `redocly-cli / ${version} ${exports.currentCommand}`,
39
+ });
35
40
  if (!headers.hasOwnProperty('authorization')) {
36
41
  throw new Error('Unauthorized');
37
42
  }
@@ -80,7 +85,7 @@ class RegistryApi {
80
85
  throw new Error('Could not prepare file upload');
81
86
  });
82
87
  }
83
- pushApi({ organizationId, name, version, rootFilePath, filePaths, branch, isUpsert, isPublic, batchId, batchSize }) {
88
+ pushApi({ organizationId, name, version, rootFilePath, filePaths, branch, isUpsert, isPublic, batchId, batchSize, }) {
84
89
  return __awaiter(this, void 0, void 0, function* () {
85
90
  const response = yield this.request(`/${organizationId}/${name}/${version}`, {
86
91
  method: 'PUT',
@@ -95,7 +100,7 @@ class RegistryApi {
95
100
  isUpsert,
96
101
  isPublic,
97
102
  batchId,
98
- batchSize
103
+ batchSize,
99
104
  }),
100
105
  }, this.region);
101
106
  if (response.ok) {
package/lib/ref-utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isMappingRef = exports.isAbsoluteUrl = exports.refBaseName = exports.pointerBaseName = exports.parsePointer = exports.parseRef = exports.escapePointer = exports.unescapePointer = exports.Location = exports.isRef = exports.joinPointer = void 0;
4
+ const utils_1 = require("./utils");
4
5
  function joinPointer(base, key) {
5
6
  if (base === '')
6
7
  base = '#/';
@@ -41,7 +42,7 @@ function parseRef(ref) {
41
42
  const [uri, pointer] = ref.split('#/');
42
43
  return {
43
44
  uri: uri || null,
44
- pointer: pointer ? pointer.split('/').map(unescapePointer).filter(Boolean) : [],
45
+ pointer: pointer ? pointer.split('/').map(unescapePointer).filter(utils_1.isTruthy) : [],
45
46
  };
46
47
  }
47
48
  exports.parseRef = parseRef;
package/lib/resolve.d.ts CHANGED
@@ -33,7 +33,7 @@ export declare function makeDocumentFromString(sourceString: string, absoluteRef
33
33
  parsed: unknown;
34
34
  };
35
35
  export declare class BaseResolver {
36
- private config;
36
+ protected config: ResolveConfig;
37
37
  cache: Map<string, Promise<Document | ResolveError>>;
38
38
  constructor(config?: ResolveConfig);
39
39
  getFiles(): Set<string>;
package/lib/resolve.js CHANGED
@@ -271,7 +271,7 @@ function resolveDocument(opts) {
271
271
  };
272
272
  let target = targetDoc.parsed;
273
273
  const segments = pointer;
274
- for (let segment of segments) {
274
+ for (const segment of segments) {
275
275
  if (typeof target !== 'object') {
276
276
  target = undefined;
277
277
  break;
@@ -2,7 +2,7 @@ import { ErrorObject } from '@redocly/ajv';
2
2
  import { Location } from '../ref-utils';
3
3
  import { ResolveFn } from '../walk';
4
4
  export declare function releaseAjvInstance(): void;
5
- export declare function validateJsonSchema(data: any, schema: any, schemaLoc: Location, instancePath: string, resolve: ResolveFn, disallowAdditionalProperties: boolean): {
5
+ export declare function validateJsonSchema(data: any, schema: any, schemaLoc: Location, instancePath: string, resolve: ResolveFn, allowAdditionalProperties: boolean): {
6
6
  valid: boolean;
7
7
  errors: (ErrorObject & {
8
8
  suggest?: string[];