@parcel/diagnostic 2.12.0 → 2.13.0

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.
@@ -37,6 +37,8 @@ export type DiagnosticCodeFrame = {
37
37
  language?: string;
38
38
  codeHighlights: Array<DiagnosticCodeHighlight>;
39
39
  };
40
+ /** A JSON object (as in "map") */
41
+ type JSONObject = Record<string, any>;
40
42
  /**
41
43
  * A style agnostic way of emitting errors, warnings and info.
42
44
  * Reporters are responsible for rendering the message, codeframes, hints, ...
@@ -58,6 +60,8 @@ export type Diagnostic = {
58
60
  skipFormatting?: boolean;
59
61
  /** A URL to documentation to learn more about the diagnostic. */
60
62
  documentationURL?: string;
63
+ /** Diagnostic specific metadata (optional) */
64
+ meta?: JSONObject;
61
65
  };
62
66
  export interface PrintableError extends Error {
63
67
  fileName?: string;
package/lib/diagnostic.js CHANGED
@@ -34,7 +34,7 @@ function _jsonSourcemap() {
34
34
  };
35
35
  return data;
36
36
  }
37
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
38
38
  /** These positions are 1-based (so <code>1</code> is the first line/column) */
39
39
  /**
40
40
  * Note: A tab character is always counted as a single character
@@ -45,6 +45,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
45
45
  * A code frame is a visualization of a piece of code with a certain amount of
46
46
  * code highlights that point to certain chunk(s) inside the code.
47
47
  */
48
+ /** A JSON object (as in "map") */
48
49
  /**
49
50
  * A style agnostic way of emitting errors, warnings and info.
50
51
  * Reporters are responsible for rendering the message, codeframes, hints, ...
@@ -54,7 +55,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
54
55
  /** Normalize the given value into a diagnostic. */
55
56
  function anyToDiagnostic(input) {
56
57
  if (Array.isArray(input)) {
57
- return input;
58
+ return input.flatMap(e => anyToDiagnostic(e));
58
59
  } else if (input instanceof ThrowableDiagnostic) {
59
60
  return input.diagnostics;
60
61
  } else if (input instanceof Error) {
@@ -72,28 +73,24 @@ function anyToDiagnostic(input) {
72
73
 
73
74
  /** Normalize the given error into a diagnostic. */
74
75
  function errorToDiagnostic(error, defaultValues) {
75
- var _defaultValues$origin2, _ref4, _error$highlightedCod;
76
76
  let codeFrames = undefined;
77
77
  if (typeof error === 'string') {
78
- var _defaultValues$origin;
79
78
  return [{
80
- origin: (_defaultValues$origin = defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.origin) !== null && _defaultValues$origin !== void 0 ? _defaultValues$origin : 'Error',
79
+ origin: (defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.origin) ?? 'Error',
81
80
  message: escapeMarkdown(error)
82
81
  }];
83
82
  }
84
83
  if (error instanceof ThrowableDiagnostic) {
85
84
  return error.diagnostics.map(d => {
86
- var _ref, _d$origin;
87
85
  return {
88
86
  ...d,
89
- origin: (_ref = (_d$origin = d.origin) !== null && _d$origin !== void 0 ? _d$origin : defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.origin) !== null && _ref !== void 0 ? _ref : 'unknown'
87
+ origin: d.origin ?? (defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.origin) ?? 'unknown'
90
88
  };
91
89
  });
92
90
  }
93
91
  if (error.loc && error.source != null) {
94
- var _ref2, _ref3, _error$filePath;
95
92
  codeFrames = [{
96
- filePath: (_ref2 = (_ref3 = (_error$filePath = error.filePath) !== null && _error$filePath !== void 0 ? _error$filePath : error.fileName) !== null && _ref3 !== void 0 ? _ref3 : defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.filePath) !== null && _ref2 !== void 0 ? _ref2 : undefined,
93
+ filePath: error.filePath ?? error.fileName ?? (defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.filePath) ?? undefined,
97
94
  code: error.source,
98
95
  codeHighlights: [{
99
96
  start: {
@@ -108,10 +105,10 @@ function errorToDiagnostic(error, defaultValues) {
108
105
  }];
109
106
  }
110
107
  return [{
111
- origin: (_defaultValues$origin2 = defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.origin) !== null && _defaultValues$origin2 !== void 0 ? _defaultValues$origin2 : 'Error',
108
+ origin: (defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.origin) ?? 'Error',
112
109
  message: escapeMarkdown(error.message),
113
110
  name: error.name,
114
- stack: codeFrames == null ? (_ref4 = (_error$highlightedCod = error.highlightedCodeFrame) !== null && _error$highlightedCod !== void 0 ? _error$highlightedCod : error.codeFrame) !== null && _ref4 !== void 0 ? _ref4 : error.stack : undefined,
111
+ stack: codeFrames == null ? error.highlightedCodeFrame ?? error.codeFrame ?? error.stack : undefined,
115
112
  codeFrames
116
113
  }];
117
114
  }
@@ -121,15 +118,14 @@ function errorToDiagnostic(error, defaultValues) {
121
118
  */
122
119
  class ThrowableDiagnostic extends Error {
123
120
  constructor(opts) {
124
- var _diagnostics$0$stack, _diagnostics$0$name;
125
121
  let diagnostics = Array.isArray(opts.diagnostic) ? opts.diagnostic : [opts.diagnostic];
126
122
 
127
123
  // Construct error from diagnostics
128
124
  super(diagnostics[0].message);
129
125
  // @ts-ignore
130
- this.stack = (_diagnostics$0$stack = diagnostics[0].stack) !== null && _diagnostics$0$stack !== void 0 ? _diagnostics$0$stack : super.stack;
126
+ this.stack = diagnostics[0].stack ?? super.stack;
131
127
  // @ts-ignore
132
- this.name = (_diagnostics$0$name = diagnostics[0].name) !== null && _diagnostics$0$name !== void 0 ? _diagnostics$0$name : super.name;
128
+ this.name = diagnostics[0].name ?? super.name;
133
129
  this.diagnostics = diagnostics;
134
130
  }
135
131
  }
@@ -251,15 +247,14 @@ function md(strings, ...params) {
251
247
  let param = params[i];
252
248
  if (Array.isArray(param)) {
253
249
  for (let j = 0; j < param.length; j++) {
254
- var _param$j$mdVerbatim, _param$j;
255
- result.push((_param$j$mdVerbatim = (_param$j = param[j]) === null || _param$j === void 0 ? void 0 : _param$j[mdVerbatim]) !== null && _param$j$mdVerbatim !== void 0 ? _param$j$mdVerbatim : escapeMarkdown(`${param[j]}`));
250
+ var _param$j;
251
+ result.push(((_param$j = param[j]) === null || _param$j === void 0 ? void 0 : _param$j[mdVerbatim]) ?? escapeMarkdown(`${param[j]}`));
256
252
  if (j < param.length - 1) {
257
253
  result.push(', ');
258
254
  }
259
255
  }
260
256
  } else {
261
- var _param$mdVerbatim;
262
- result.push((_param$mdVerbatim = param === null || param === void 0 ? void 0 : param[mdVerbatim]) !== null && _param$mdVerbatim !== void 0 ? _param$mdVerbatim : escapeMarkdown(`${param}`));
257
+ result.push((param === null || param === void 0 ? void 0 : param[mdVerbatim]) ?? escapeMarkdown(`${param}`));
263
258
  }
264
259
  }
265
260
  return result.join('') + strings[strings.length - 1];
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@parcel/diagnostic",
3
- "version": "2.12.0",
3
+ "version": "2.13.0",
4
+ "description": "Types and utilities for printing source-code located errors, warning and information messages.",
4
5
  "license": "MIT",
5
6
  "publishConfig": {
6
7
  "access": "public"
@@ -17,7 +18,7 @@
17
18
  "source": "src/diagnostic.js",
18
19
  "types": "lib/diagnostic.d.ts",
19
20
  "engines": {
20
- "node": ">= 12.0.0"
21
+ "node": ">= 16.0.0"
21
22
  },
22
23
  "scripts": {
23
24
  "build-ts": "flow-to-ts src/*.js --write && tsc --emitDeclarationOnly --declaration --esModuleInterop src/*.ts && mkdir -p lib && mv src/*.d.ts lib/. && rm src/*.ts",
@@ -27,5 +28,5 @@
27
28
  "@mischnic/json-sourcemap": "^0.1.0",
28
29
  "nullthrows": "^1.1.1"
29
30
  },
30
- "gitHead": "2059029ee91e5f03a273b0954d3e629d7375f986"
31
+ "gitHead": "a53f8f3ba1025c7ea8653e9719e0a61ef9717079"
31
32
  }
package/src/diagnostic.js CHANGED
@@ -46,6 +46,12 @@ export type DiagnosticCodeFrame = {|
46
46
  codeHighlights: Array<DiagnosticCodeHighlight>,
47
47
  |};
48
48
 
49
+ /** A JSON object (as in "map") */
50
+ type JSONObject = {
51
+ // $FlowFixMe
52
+ [key: string]: any,
53
+ };
54
+
49
55
  /**
50
56
  * A style agnostic way of emitting errors, warnings and info.
51
57
  * Reporters are responsible for rendering the message, codeframes, hints, ...
@@ -72,6 +78,9 @@ export type Diagnostic = {|
72
78
 
73
79
  /** A URL to documentation to learn more about the diagnostic. */
74
80
  documentationURL?: string,
81
+
82
+ /** Diagnostic specific metadata (optional) */
83
+ meta?: JSONObject,
75
84
  |};
76
85
 
77
86
  // This type should represent all error formats Parcel can encounter...
@@ -105,7 +114,7 @@ export type Diagnostifiable =
105
114
  /** Normalize the given value into a diagnostic. */
106
115
  export function anyToDiagnostic(input: Diagnostifiable): Array<Diagnostic> {
107
116
  if (Array.isArray(input)) {
108
- return input;
117
+ return input.flatMap(e => anyToDiagnostic(e));
109
118
  } else if (input instanceof ThrowableDiagnostic) {
110
119
  return input.diagnostics;
111
120
  } else if (input instanceof Error) {