@mnaoumov/typescript-dev-toolkit 5.1.0 → 5.2.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.
@@ -1,4 +1,5 @@
1
1
  /// <reference path="../../library-references.d.mts" />
2
+ export * as 'import-fix' from './import-fix.mjs';
2
3
  export * as 'in-house-plugin' from './in-house-plugin.mjs';
3
4
  export * as 'no-async-callback-to-unsafe-return' from './no-async-callback-to-unsafe-return.mjs';
4
5
  export * as 'no-keyword-identifiers' from './no-keyword-identifiers.mjs';
@@ -6,6 +7,7 @@ export * as 'no-unresolved-jsdoc-link' from './no-unresolved-jsdoc-link.mjs';
6
7
  export * as 'no-unused-params-members' from './no-unused-params-members.mjs';
7
8
  export * as 'no-used-underscore-variables' from './no-used-underscore-variables.mjs';
8
9
  export * as 'params-options-name-match' from './params-options-name-match.mjs';
10
+ export * as 'prefer-dedent' from './prefer-dedent.mjs';
9
11
  export * as 'prefer-logical-operator-over-ternary' from './prefer-logical-operator-over-ternary.mjs';
10
12
  export * as 'prefer-noop-async' from './prefer-noop-async.mjs';
11
13
  export * as 'readonly-interface-members' from './readonly-interface-members.mjs';
@@ -3,6 +3,7 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
+ import * as import_fix from "./import-fix.mjs";
6
7
  import * as in_house_plugin from "./in-house-plugin.mjs";
7
8
  import * as no_async_callback_to_unsafe_return from "./no-async-callback-to-unsafe-return.mjs";
8
9
  import * as no_keyword_identifiers from "./no-keyword-identifiers.mjs";
@@ -10,6 +11,7 @@ import * as no_unresolved_jsdoc_link from "./no-unresolved-jsdoc-link.mjs";
10
11
  import * as no_unused_params_members from "./no-unused-params-members.mjs";
11
12
  import * as no_used_underscore_variables from "./no-used-underscore-variables.mjs";
12
13
  import * as params_options_name_match from "./params-options-name-match.mjs";
14
+ import * as prefer_dedent from "./prefer-dedent.mjs";
13
15
  import * as prefer_logical_operator_over_ternary from "./prefer-logical-operator-over-ternary.mjs";
14
16
  import * as prefer_noop_async from "./prefer-noop-async.mjs";
15
17
  import * as readonly_interface_members from "./readonly-interface-members.mjs";
@@ -19,6 +21,7 @@ import * as require_super_call from "./require-super-call.mjs";
19
21
  import * as rule_tester_helper from "./rule-tester-helper.mjs";
20
22
  import * as ts_estree_node from "./ts-estree-node.mjs";
21
23
  export {
24
+ import_fix as "import-fix",
22
25
  in_house_plugin as "in-house-plugin",
23
26
  no_async_callback_to_unsafe_return as "no-async-callback-to-unsafe-return",
24
27
  no_keyword_identifiers as "no-keyword-identifiers",
@@ -26,6 +29,7 @@ export {
26
29
  no_unused_params_members as "no-unused-params-members",
27
30
  no_used_underscore_variables as "no-used-underscore-variables",
28
31
  params_options_name_match as "params-options-name-match",
32
+ prefer_dedent as "prefer-dedent",
29
33
  prefer_logical_operator_over_ternary as "prefer-logical-operator-over-ternary",
30
34
  prefer_noop_async as "prefer-noop-async",
31
35
  readonly_interface_members as "readonly-interface-members",
@@ -35,4 +39,4 @@ export {
35
39
  rule_tester_helper as "rule-tester-helper",
36
40
  ts_estree_node as "ts-estree-node"
37
41
  };
38
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2luLWhvdXNlLXBsdWdpbicgZnJvbSAnLi9pbi1ob3VzZS1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nIGZyb20gJy4vbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybi50cyc7XG5leHBvcnQgKiBhcyAnbm8ta2V5d29yZC1pZGVudGlmaWVycycgZnJvbSAnLi9uby1rZXl3b3JkLWlkZW50aWZpZXJzLnRzJztcbmV4cG9ydCAqIGFzICduby11bnJlc29sdmVkLWpzZG9jLWxpbmsnIGZyb20gJy4vbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rLnRzJztcbmV4cG9ydCAqIGFzICduby11bnVzZWQtcGFyYW1zLW1lbWJlcnMnIGZyb20gJy4vbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzLnRzJztcbmV4cG9ydCAqIGFzICduby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzJyBmcm9tICcuL25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMudHMnO1xuZXhwb3J0ICogYXMgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnIGZyb20gJy4vcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaC50cyc7XG5leHBvcnQgKiBhcyAncHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5JyBmcm9tICcuL3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeS50cyc7XG5leHBvcnQgKiBhcyAncHJlZmVyLW5vb3AtYXN5bmMnIGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuZXhwb3J0ICogYXMgJ3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzJyBmcm9tICcuL3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzLnRzJztcbmV4cG9ydCAqIGFzICdyZWFkb25seS1tZW1iZXItYXJyYXlzJyBmcm9tICcuL3JlYWRvbmx5LW1lbWJlci1hcnJheXMudHMnO1xuZXhwb3J0ICogYXMgJ3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlJyBmcm9tICcuL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlLnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLXN1cGVyLWNhbGwnIGZyb20gJy4vcmVxdWlyZS1zdXBlci1jYWxsLnRzJztcbmV4cG9ydCAqIGFzICdydWxlLXRlc3Rlci1oZWxwZXInIGZyb20gJy4vcnVsZS10ZXN0ZXItaGVscGVyLnRzJztcbmV4cG9ydCAqIGFzICd0cy1lc3RyZWUtbm9kZScgZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVlBLHFCQUF1QjtBQUNuQyxZQUFZQyx3Q0FBMEM7QUFDdEQsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsa0NBQW9DO0FBQ2hELFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQywwQ0FBNEM7QUFDeEQsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLGdDQUFrQztBQUM5QyxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMsb0JBQXNCOyIsCiAgIm5hbWVzIjogWyJpbi1ob3VzZS1wbHVnaW4iLCAibm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybiIsICJuby1rZXl3b3JkLWlkZW50aWZpZXJzIiwgIm5vLXVucmVzb2x2ZWQtanNkb2MtbGluayIsICJuby11bnVzZWQtcGFyYW1zLW1lbWJlcnMiLCAibm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyIsICJwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIiwgInByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeSIsICJwcmVmZXItbm9vcC1hc3luYyIsICJyZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyIsICJyZWFkb25seS1tZW1iZXItYXJyYXlzIiwgInJlcXVpcmUtbWV0aG9kLXRlbXBsYXRlIiwgInJlcXVpcmUtc3VwZXItY2FsbCIsICJydWxlLXRlc3Rlci1oZWxwZXIiLCAidHMtZXN0cmVlLW5vZGUiXQp9Cg==
42
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2ltcG9ydC1maXgnIGZyb20gJy4vaW1wb3J0LWZpeC50cyc7XG5leHBvcnQgKiBhcyAnaW4taG91c2UtcGx1Z2luJyBmcm9tICcuL2luLWhvdXNlLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybicgZnJvbSAnLi9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzJztcbmV4cG9ydCAqIGFzICduby1rZXl3b3JkLWlkZW50aWZpZXJzJyBmcm9tICcuL25vLWtleXdvcmQtaWRlbnRpZmllcnMudHMnO1xuZXhwb3J0ICogYXMgJ25vLXVucmVzb2x2ZWQtanNkb2MtbGluaycgZnJvbSAnLi9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMnO1xuZXhwb3J0ICogYXMgJ25vLXVudXNlZC1wYXJhbXMtbWVtYmVycycgZnJvbSAnLi9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMnO1xuZXhwb3J0ICogYXMgJ25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMnIGZyb20gJy4vbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcy50cyc7XG5leHBvcnQgKiBhcyAncGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCcgZnJvbSAnLi9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoLnRzJztcbmV4cG9ydCAqIGFzICdwcmVmZXItZGVkZW50JyBmcm9tICcuL3ByZWZlci1kZWRlbnQudHMnO1xuZXhwb3J0ICogYXMgJ3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeScgZnJvbSAnLi9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnkudHMnO1xuZXhwb3J0ICogYXMgJ3ByZWZlci1ub29wLWFzeW5jJyBmcm9tICcuL3ByZWZlci1ub29wLWFzeW5jLnRzJztcbmV4cG9ydCAqIGFzICdyZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycycgZnJvbSAnLi9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAncmVhZG9ubHktbWVtYmVyLWFycmF5cycgZnJvbSAnLi9yZWFkb25seS1tZW1iZXItYXJyYXlzLnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZScgZnJvbSAnLi9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1zdXBlci1jYWxsJyBmcm9tICcuL3JlcXVpcmUtc3VwZXItY2FsbC50cyc7XG5leHBvcnQgKiBhcyAncnVsZS10ZXN0ZXItaGVscGVyJyBmcm9tICcuL3J1bGUtdGVzdGVyLWhlbHBlci50cyc7XG5leHBvcnQgKiBhcyAndHMtZXN0cmVlLW5vZGUnIGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZQSxnQkFBa0I7QUFDOUIsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLHdDQUEwQztBQUN0RCxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMsOEJBQWdDO0FBQzVDLFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZQywwQ0FBNEM7QUFDeEQsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLGdDQUFrQztBQUM5QyxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMsb0JBQXNCOyIsCiAgIm5hbWVzIjogWyJpbXBvcnQtZml4IiwgImluLWhvdXNlLXBsdWdpbiIsICJuby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuIiwgIm5vLWtleXdvcmQtaWRlbnRpZmllcnMiLCAibm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rIiwgIm5vLXVudXNlZC1wYXJhbXMtbWVtYmVycyIsICJuby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzIiwgInBhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2giLCAicHJlZmVyLWRlZGVudCIsICJwcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnkiLCAicHJlZmVyLW5vb3AtYXN5bmMiLCAicmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMiLCAicmVhZG9ubHktbWVtYmVyLWFycmF5cyIsICJyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSIsICJyZXF1aXJlLXN1cGVyLWNhbGwiLCAicnVsZS10ZXN0ZXItaGVscGVyIiwgInRzLWVzdHJlZS1ub2RlIl0KfQo=
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ import type { Rule } from 'eslint';
3
+ /**
4
+ * Message ID reported when an array of string literals is joined with a newline instead of written as a `dedent` template.
5
+ */
6
+ export declare const MESSAGE_ID = "preferDedent";
7
+ /**
8
+ * ESLint rule preferring a `dedent` template over an array of string literals joined with a newline.
9
+ */
10
+ export declare const preferDedent: Rule.RuleModule;
@@ -0,0 +1,168 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
40
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
41
+ import {
42
+ findVisibleImportName,
43
+ getUnusedName,
44
+ insertImport
45
+ } from "./import-fix.mjs";
46
+ import { toTSESTreeNode } from "./ts-estree-node.mjs";
47
+ const DEDENT_MODULE = "dedent";
48
+ const INDENT = " ";
49
+ const LINE_BREAK_SEPARATORS = /* @__PURE__ */ new Set(["\n", "\r\n"]);
50
+ const MINIMUM_ELEMENTS_WITH_A_LINE_BREAK = 2;
51
+ const MESSAGE_ID = "preferDedent";
52
+ const preferDedent = {
53
+ create(context) {
54
+ return {
55
+ "CallExpression"(node) {
56
+ const callNode = toTSESTreeNode(node);
57
+ const joined = getJoinedStringElements(callNode);
58
+ if (!joined) {
59
+ return;
60
+ }
61
+ context.report({
62
+ fix(fixer) {
63
+ const sourceCode = context.sourceCode;
64
+ if (sourceCode.getCommentsInside(node).length > 0) {
65
+ return null;
66
+ }
67
+ const text = getJoinedText(joined.elements, joined.separator);
68
+ const lines = text === null ? null : toDedentLines(text);
69
+ if (lines === null) {
70
+ return null;
71
+ }
72
+ const fixes = [];
73
+ let name = findVisibleImportName({ importedName: "default", moduleName: DEDENT_MODULE, node, sourceCode });
74
+ if (name === null) {
75
+ if (sourceCode.ast.sourceType !== "module") {
76
+ return null;
77
+ }
78
+ name = getUnusedName(sourceCode, "dedent");
79
+ fixes.push(insertImport(fixer, sourceCode, `import ${name} from '${DEDENT_MODULE}';`));
80
+ }
81
+ const linePrefix = sourceCode.text.slice(sourceCode.getIndexFromLoc({ column: 0, line: callNode.loc.start.line }), callNode.range[0]);
82
+ const lineIndent = linePrefix.slice(0, linePrefix.length - linePrefix.trimStart().length);
83
+ const body = lines.map((line) => line === "" ? "" : `${lineIndent}${INDENT}${line}`).join("\n");
84
+ fixes.push(fixer.replaceText(node, `${name}\`
85
+ ${body}
86
+ ${lineIndent}\``));
87
+ return fixes;
88
+ },
89
+ messageId: MESSAGE_ID,
90
+ node
91
+ });
92
+ }
93
+ };
94
+ },
95
+ meta: {
96
+ docs: {
97
+ description: "Prefer a `dedent` template over an array of string literals joined with a newline"
98
+ },
99
+ fixable: "code",
100
+ messages: {
101
+ [MESSAGE_ID]: "Write this multiline string as a `dedent` template instead of joining an array of string literals with a newline."
102
+ },
103
+ schema: [],
104
+ type: "suggestion"
105
+ }
106
+ };
107
+ function escapeLineBreaks(text) {
108
+ return text.replaceAll("\r", String.raw`\r`).replaceAll("\n", String.raw`\n`);
109
+ }
110
+ function escapeTemplateText(text) {
111
+ return text.replaceAll("`", "\\`").replaceAll("${", "\\${").replaceAll("\r", String.raw`\r`);
112
+ }
113
+ function getJoinedStringElements(node) {
114
+ const callee = node.callee;
115
+ if (node.optional || node.arguments.length !== 1 || callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional || callee.computed || callee.property.type !== AST_NODE_TYPES.Identifier || callee.property.name !== "join" || callee.object.type !== AST_NODE_TYPES.ArrayExpression) {
116
+ return null;
117
+ }
118
+ const separator = getStaticString(ensureNonNullable(node.arguments[0]));
119
+ if (separator === null || !LINE_BREAK_SEPARATORS.has(separator)) {
120
+ return null;
121
+ }
122
+ const elements = [];
123
+ for (const element of callee.object.elements) {
124
+ if (!isStringElement(element)) {
125
+ return null;
126
+ }
127
+ elements.push(element);
128
+ }
129
+ return elements.length < MINIMUM_ELEMENTS_WITH_A_LINE_BREAK ? null : { elements, separator };
130
+ }
131
+ function getJoinedText(elements, separator) {
132
+ const values = [];
133
+ for (const element of elements) {
134
+ const value = getStaticString(element);
135
+ if (value === null) {
136
+ return null;
137
+ }
138
+ values.push(value);
139
+ }
140
+ return values.join(separator);
141
+ }
142
+ function getStaticString(node) {
143
+ if (node.type === AST_NODE_TYPES.Literal) {
144
+ return typeof node.value === "string" ? node.value : null;
145
+ }
146
+ return node.type === AST_NODE_TYPES.TemplateLiteral && node.expressions.length === 0 ? ensureNonNullable(node.quasis[0]).value.cooked : null;
147
+ }
148
+ function isStringElement(element) {
149
+ return element?.type === AST_NODE_TYPES.TemplateLiteral || element?.type === AST_NODE_TYPES.Literal && typeof element.value === "string";
150
+ }
151
+ function toDedentLines(text) {
152
+ if (text.includes("\\")) {
153
+ return null;
154
+ }
155
+ const rest = text.replace(/^[\r\n]+/, "");
156
+ const leading = text.slice(0, text.length - rest.length);
157
+ const core = rest.replace(/[\r\n]+$/, "");
158
+ const trailing = rest.slice(core.length);
159
+ if (core === "" || leading === "" && /^\s/.test(core) || trailing === "" && /\s$/.test(core)) {
160
+ return null;
161
+ }
162
+ return `${escapeLineBreaks(leading)}${escapeTemplateText(core)}${escapeLineBreaks(trailing)}`.split("\n");
163
+ }
164
+ export {
165
+ MESSAGE_ID,
166
+ preferDedent
167
+ };
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICAnQ2FsbEV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsTm9kZSA9IHRvVFNFU1RyZWVOb2RlKG5vZGUpIGFzIFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBqb2luZWQgPSBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhjYWxsTm9kZSk7XG4gICAgICAgIGlmICgham9pbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeChmaXhlcikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmdldENvbW1lbnRzSW5zaWRlKG5vZGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0Sm9pbmVkVGV4dChqb2luZWQuZWxlbWVudHMsIGpvaW5lZC5zZXBhcmF0b3IpO1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSB0ZXh0ID09PSBudWxsID8gbnVsbCA6IHRvRGVkZW50TGluZXModGV4dCk7XG4gICAgICAgICAgICBpZiAobGluZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpeGVzOiBSdWxlLkZpeFtdID0gW107XG4gICAgICAgICAgICBsZXQgbmFtZSA9IGZpbmRWaXNpYmxlSW1wb3J0TmFtZSh7IGltcG9ydGVkTmFtZTogJ2RlZmF1bHQnLCBtb2R1bGVOYW1lOiBERURFTlRfTU9EVUxFLCBub2RlLCBzb3VyY2VDb2RlIH0pO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgY2Fubm90IGFjY2VwdCBhbiBFU00gaW1wb3J0LiBMZWF2ZSBpdHMgZGlhZ25vc3RpYyBmb3IgYSBtYW51YWwgZWRpdC5cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGUuYXN0LnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmFtZSA9IGdldFVudXNlZE5hbWUoc291cmNlQ29kZSwgJ2RlZGVudCcpO1xuICAgICAgICAgICAgICBmaXhlcy5wdXNoKGluc2VydEltcG9ydChmaXhlciwgc291cmNlQ29kZSwgYGltcG9ydCAke25hbWV9IGZyb20gJyR7REVERU5UX01PRFVMRX0nO2ApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGluZVByZWZpeCA9IHNvdXJjZUNvZGUudGV4dC5zbGljZShzb3VyY2VDb2RlLmdldEluZGV4RnJvbUxvYyh7IGNvbHVtbjogMCwgbGluZTogY2FsbE5vZGUubG9jLnN0YXJ0LmxpbmUgfSksIGNhbGxOb2RlLnJhbmdlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSBsaW5lUHJlZml4LnNsaWNlKDAsIGxpbmVQcmVmaXgubGVuZ3RoIC0gbGluZVByZWZpeC50cmltU3RhcnQoKS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGxpbmVzLm1hcCgobGluZSkgPT4gbGluZSA9PT0gJycgPyAnJyA6IGAke2xpbmVJbmRlbnR9JHtJTkRFTlR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHtuYW1lfVxcYFxcbiR7Ym9keX1cXG4ke2xpbmVJbmRlbnR9XFxgYCkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlZmVyIGEgYGRlZGVudGAgdGVtcGxhdGUgb3ZlciBhbiBhcnJheSBvZiBzdHJpbmcgbGl0ZXJhbHMgam9pbmVkIHdpdGggYSBuZXdsaW5lJ1xuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdXcml0ZSB0aGlzIG11bHRpbGluZSBzdHJpbmcgYXMgYSBgZGVkZW50YCB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIGpvaW5pbmcgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIHdpdGggYSBuZXdsaW5lLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbmludGVyZmFjZSBKb2luZWRTdHJpbmdFbGVtZW50cyB7XG4gIHJlYWRvbmx5IGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W107XG4gIHJlYWRvbmx5IHNlcGFyYXRvcjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVMaW5lQnJlYWtzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCkucmVwbGFjZUFsbCgnXFxuJywgU3RyaW5nLnJhd2BcXG5gKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVGVtcGxhdGVUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ2AnLCAnXFxcXGAnKS5yZXBsYWNlQWxsKCckeycsICdcXFxcJHsnKS5yZXBsYWNlQWxsKCdcXHInLCBTdHJpbmcucmF3YFxccmApO1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IEpvaW5lZFN0cmluZ0VsZW1lbnRzIHwgbnVsbCB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICBpZiAoXG4gICAgbm9kZS5vcHRpb25hbCB8fCBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDFcbiAgICB8fCBjYWxsZWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuTWVtYmVyRXhwcmVzc2lvbiB8fCBjYWxsZWUub3B0aW9uYWwgfHwgY2FsbGVlLmNvbXB1dGVkXG4gICAgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT09ICdqb2luJ1xuICAgIHx8IGNhbGxlZS5vYmplY3QudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuQXJyYXlFeHByZXNzaW9uXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VwYXJhdG9yID0gZ2V0U3RhdGljU3RyaW5nKGVuc3VyZU5vbk51bGxhYmxlKG5vZGUuYXJndW1lbnRzWzBdKSk7XG4gIGlmIChzZXBhcmF0b3IgPT09IG51bGwgfHwgIUxJTkVfQlJFQUtfU0VQQVJBVE9SUy5oYXMoc2VwYXJhdG9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudHM6IFN0cmluZ0VsZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2FsbGVlLm9iamVjdC5lbGVtZW50cykge1xuICAgIGlmICghaXNTdHJpbmdFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgfVxuICAvLyBBIHNpbmdsZSBlbGVtZW50IGpvaW5zIHRvIGl0c2VsZjsgdGhlcmUgaXMgbm8gbGluZSBicmVhayB0byByZXdyaXRlLlxuICByZXR1cm4gZWxlbWVudHMubGVuZ3RoIDwgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA/IG51bGwgOiB7IGVsZW1lbnRzLCBzZXBhcmF0b3IgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Sm9pbmVkVGV4dChlbGVtZW50czogcmVhZG9ubHkgU3RyaW5nRWxlbWVudFtdLCBzZXBhcmF0b3I6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U3RhdGljU3RyaW5nKGVsZW1lbnQpO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGljU3RyaW5nKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBudWxsIHwgc3RyaW5nIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgPyBub2RlLnZhbHVlIDogbnVsbDtcbiAgfVxuICAvLyBBbiB1bnRhZ2dlZCB0ZW1wbGF0ZSB3aXRoIGFuIGludmFsaWQgZXNjYXBlIGlzIGEgc3ludGF4IGVycm9yLCBzbyBpdHMgY29va2VkIHRleHQgYWx3YXlzIGV4aXN0cy5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsICYmIG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwID8gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5xdWFzaXNbMF0pLnZhbHVlLmNvb2tlZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nRWxlbWVudChlbGVtZW50OiBudWxsIHwgVFNFU1RyZWUuTm9kZSk6IGVsZW1lbnQgaXMgU3RyaW5nRWxlbWVudCB7XG4gIHJldHVybiBlbGVtZW50Py50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWxcbiAgICB8fCAoZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2YgZWxlbWVudC52YWx1ZSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGV4dCBhcyB0aGUgbGluZXMgb2YgYSBgZGVkZW50YCB0ZW1wbGF0ZSBib2R5LCBiZWZvcmUgaW5kZW50YXRpb24uXG4gKlxuICogYGRlZGVudGAgdHJpbXMgdGhlIHdob2xlIHJlc3VsdCBhbmQgb25seSB0aGVuIGRlY29kZXMgYFxcbmAgYW5kIGBcXHJgIGVzY2FwZXMsIHNvIGFuIGVkZ2UgcnVuIG9mIGxpbmUgYnJlYWtzIHN1cnZpdmVzXG4gKiB3aGVuIHdyaXR0ZW4gYXMgZXNjYXBlcywgYW5kIGFueSBvdGhlciBlZGdlIHdoaXRlc3BhY2UgZG9lcyBub3Qgc3Vydml2ZSBhdCBhbGwuIEl0IHN0cmlwcyB0aGUgc21hbGxlc3QgaW5kZW50YXRpb25cbiAqIG9mIHRoZSBsaW5lcywgYW5kIHRoZSBmaXJzdCBsaW5lIGhlcmUgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbm9uLWJsYW5rIGNoYXJhY3Rlciwgc28gZXZlcnkgbGluZSBrZWVwcyBpdHMgb3duLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdGhlIHRlbXBsYXRlIG11c3QgcHJvZHVjZS5cbiAqIEByZXR1cm5zIFRoZSBib2R5IGxpbmVzLCBvciBgbnVsbGAgd2hlbiBgZGVkZW50YCBjYW5ub3QgcHJvZHVjZSB0aGUgdGV4dCBmcm9tIGEgcGxhaW4gdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIHRvRGVkZW50TGluZXModGV4dDogc3RyaW5nKTogbnVsbCB8IHN0cmluZ1tdIHtcbiAgaWYgKHRleHQuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlc3QgPSB0ZXh0LnJlcGxhY2UoL15bXFxyXFxuXSsvLCAnJyk7XG4gIGNvbnN0IGxlYWRpbmcgPSB0ZXh0LnNsaWNlKDAsIHRleHQubGVuZ3RoIC0gcmVzdC5sZW5ndGgpO1xuICBjb25zdCBjb3JlID0gcmVzdC5yZXBsYWNlKC9bXFxyXFxuXSskLywgJycpO1xuICBjb25zdCB0cmFpbGluZyA9IHJlc3Quc2xpY2UoY29yZS5sZW5ndGgpO1xuICBpZiAoY29yZSA9PT0gJycgfHwgKGxlYWRpbmcgPT09ICcnICYmIC9eXFxzLy50ZXN0KGNvcmUpKSB8fCAodHJhaWxpbmcgPT09ICcnICYmIC9cXHMkLy50ZXN0KGNvcmUpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gVGhlIGVzY2FwZXMgaG9sZCBubyBsaW5lIGJyZWFrLCBzbyBzcGxpdHRpbmcgYWZ0ZXIgZXNjYXBpbmcgc3BsaXRzIG9ubHkgdGhlIGxpbmUgYnJlYWtzIG9mIHRoZSBjb3JlLlxuICByZXR1cm4gYCR7ZXNjYXBlTGluZUJyZWFrcyhsZWFkaW5nKX0ke2VzY2FwZVRlbXBsYXRlVGV4dChjb3JlKX0ke2VzY2FwZUxpbmVCcmVha3ModHJhaWxpbmcpfWAuc3BsaXQoJ1xcbicpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFTLHlCQUF5QjtBQUNsQyxTQUFT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
@@ -37,7 +37,11 @@ ensureBrowserProcess();
37
37
  })();
38
38
 
39
39
  import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
40
- import { AST_NODE_TYPES } from "@typescript-eslint/utils";
40
+ import {
41
+ findVisibleImportName,
42
+ getUnusedName,
43
+ insertImport
44
+ } from "./import-fix.mjs";
41
45
  import { toTSESTreeNode } from "./ts-estree-node.mjs";
42
46
  const FUNCTION_MODULE = "@mnaoumov/typescript-lib/function";
43
47
  const MESSAGE_ID = "preferNoopAsync";
@@ -52,40 +56,17 @@ const preferNoopAsync = {
52
56
  context.report({
53
57
  fix(fixer) {
54
58
  const sourceCode = context.sourceCode;
55
- const seen = /* @__PURE__ */ new Set();
56
- for (let scope = sourceCode.getScope(node); scope; scope = scope.upper) {
57
- for (const variable of scope.variables) {
58
- if (seen.has(variable.name)) {
59
- continue;
60
- }
61
- seen.add(variable.name);
62
- for (const definition of variable.defs) {
63
- if (definition.type !== "ImportBinding") {
64
- continue;
65
- }
66
- const specifier = toTSESTreeNode(definition.node);
67
- const declaration = toTSESTreeNode(definition.parent);
68
- if (specifier.type === AST_NODE_TYPES.ImportSpecifier && specifier.importKind !== "type" && declaration.importKind !== "type" && declaration.source.value === FUNCTION_MODULE && specifier.imported.type === AST_NODE_TYPES.Identifier && specifier.imported.name === "noopAsync") {
69
- return fixer.replaceText(node, `${variable.name}()`);
70
- }
71
- }
72
- }
59
+ const importedName = findVisibleImportName({ importedName: "noopAsync", moduleName: FUNCTION_MODULE, node, sourceCode });
60
+ if (importedName !== null) {
61
+ return fixer.replaceText(node, `${importedName}()`);
73
62
  }
74
63
  if (sourceCode.ast.sourceType !== "module") {
75
64
  return null;
76
65
  }
77
- const names = new Set(sourceCode.getTokens(sourceCode.ast).map((token) => token.value));
78
- let name = "noopAsync";
79
- let suffix = 0;
80
- while (names.has(name)) {
81
- name = `noopAsync${String(++suffix)}`;
82
- }
66
+ const name = getUnusedName(sourceCode, "noopAsync");
83
67
  const binding = name === "noopAsync" ? name : `noopAsync as ${name}`;
84
- const firstStatement = ensureNonNullable(sourceCode.ast.body.find((statement) => !("directive" in statement && typeof statement.directive === "string")));
85
- const firstToken = sourceCode.getFirstToken(firstStatement);
86
68
  return [
87
- fixer.insertTextBefore(firstToken, `import { ${binding} } from '${FUNCTION_MODULE}';
88
- `),
69
+ insertImport(fixer, sourceCode, `import { ${binding} } from '${FUNCTION_MODULE}';`),
89
70
  fixer.replaceText(node, `${name}()`)
90
71
  ];
91
72
  },
@@ -120,4 +101,4 @@ export {
120
101
  MESSAGE_ID,
121
102
  preferNoopAsync
122
103
  };
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItbm9vcC1hc3luYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHByZWZlci1ub29wLWFzeW5jXG4gKlxuICogUmVwb3J0cyBgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClgIGFuZCBzdWdnZXN0cyByZXBsYWNpbmcgaXQgd2l0aFxuICogYGF3YWl0IG5vb3BBc3luYygpYCBmb3IgY29uc2lzdGVuY3kgYW5kIHJlYWRhYmlsaXR5LlxuICpcbiAqIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSB2YWx1ZSBpbXBvcnQgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uYCxcbiAqIG9yIGFkZHMgYSBjb2xsaXNpb24tZnJlZSBpbXBvcnQuIFNjcmlwdHMgd2l0aG91dCBvbmUgcmV0YWluIHRoZSBkaWFnbm9zdGljIG9ubHkuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUge1xuICBSdWxlLFxuICBTY29wZVxufSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBBU1RfTk9ERV9UWVBFUyB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbmNvbnN0IEZVTkNUSU9OX01PRFVMRSA9ICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZnVuY3Rpb24nO1xuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYFByb21pc2UucmVzb2x2ZSgpYCBpcyB1c2VkIGZvciBhbiBhc3luYyBuby1vcCBpbnN0ZWFkIG9mIGBub29wQXN5bmMoKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlck5vb3BBc3luYyc7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBgbm9vcEFzeW5jKClgIG92ZXIgYFByb21pc2UucmVzb2x2ZSgpYCBmb3IgYW4gYXN5bmMgbm8tb3AuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmVmZXJOb29wQXN5bmM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0NhbGxFeHByZXNzaW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcblxuICAgICAgICBpZiAoIWlzUHJvbWlzZVJlc29sdmVXaXRoTm9Bcmd1bWVudHMoY2FsbE5vZGUpIHx8IGlzTG9jYWxseUJvdW5kUHJvbWlzZShjb250ZXh0LnNvdXJjZUNvZGUuZ2V0U2NvcGUobm9kZSksIGNhbGxOb2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gICAgICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBzY29wZTogbnVsbCB8IFNjb3BlLlNjb3BlID0gc291cmNlQ29kZS5nZXRTY29wZShub2RlKTsgc2NvcGU7IHNjb3BlID0gc2NvcGUudXBwZXIpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiBzY29wZS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFyaWFibGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWVuLmFkZCh2YXJpYWJsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgdmFyaWFibGUuZGVmcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gJ0ltcG9ydEJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gdG9UU0VTVHJlZU5vZGUoZGVmaW5pdGlvbi5ub2RlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdG9UU0VTVHJlZU5vZGUoZGVmaW5pdGlvbi5wYXJlbnQpIGFzIFRTRVNUcmVlLkltcG9ydERlY2xhcmF0aW9uO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXIudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSW1wb3J0U3BlY2lmaWVyXG4gICAgICAgICAgICAgICAgICAgICYmIHNwZWNpZmllci5pbXBvcnRLaW5kICE9PSAndHlwZScgJiYgZGVjbGFyYXRpb24uaW1wb3J0S2luZCAhPT0gJ3R5cGUnXG4gICAgICAgICAgICAgICAgICAgICYmIGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSA9PT0gRlVOQ1RJT05fTU9EVUxFXG4gICAgICAgICAgICAgICAgICAgICYmIHNwZWNpZmllci5pbXBvcnRlZC50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyICYmIHNwZWNpZmllci5pbXBvcnRlZC5uYW1lID09PSAnbm9vcEFzeW5jJ1xuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHt2YXJpYWJsZS5uYW1lfSgpYCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEEgc2NyaXB0IGNhbm5vdCBhY2NlcHQgYW4gRVNNIGltcG9ydC4gTGVhdmUgaXRzIGRpYWdub3N0aWMgZm9yIGEgbWFudWFsIGVkaXQuXG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZS5hc3Quc291cmNlVHlwZSAhPT0gJ21vZHVsZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJbmNsdWRlIHJlZmVyZW5jZXMgYXMgd2VsbCBhcyBkZWNsYXJhdGlvbnMsIHNvIGFuIGltcG9ydCBuZXZlciBjYXB0dXJlcyBhbiBleGlzdGluZyBmcmVlIHJlYWQuXG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoc291cmNlQ29kZS5nZXRUb2tlbnMoc291cmNlQ29kZS5hc3QpLm1hcCgodG9rZW4pID0+IHRva2VuLnZhbHVlKSk7XG4gICAgICAgICAgICBsZXQgbmFtZSA9ICdub29wQXN5bmMnO1xuICAgICAgICAgICAgbGV0IHN1ZmZpeCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgIG5hbWUgPSBgbm9vcEFzeW5jJHtTdHJpbmcoKytzdWZmaXgpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gbmFtZSA9PT0gJ25vb3BBc3luYycgPyBuYW1lIDogYG5vb3BBc3luYyBhcyAke25hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U3RhdGVtZW50ID0gZW5zdXJlTm9uTnVsbGFibGUoc291cmNlQ29kZS5hc3QuYm9keS5maW5kKChzdGF0ZW1lbnQpID0+ICEoJ2RpcmVjdGl2ZScgaW4gc3RhdGVtZW50ICYmIHR5cGVvZiBzdGF0ZW1lbnQuZGlyZWN0aXZlID09PSAnc3RyaW5nJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBzb3VyY2VDb2RlLmdldEZpcnN0VG9rZW4oZmlyc3RTdGF0ZW1lbnQpO1xuICAgICAgICAgICAgLy8gVGhlIHJlcG9ydGVkIGNhbGwgZ3VhcmFudGVlcyBhIG5vbi1lbXB0eSBwcm9ncmFtLCBpbmNsdWRpbmcgd2hlbiBhIGhhc2hiYW5nIHByZWNlZGVzIGl0LlxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShmaXJzdFRva2VuLCBgaW1wb3J0IHsgJHtiaW5kaW5nfSB9IGZyb20gJyR7RlVOQ1RJT05fTU9EVUxFfSc7XFxuYCksXG4gICAgICAgICAgICAgIGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsIGAke25hbWV9KClgKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZWZlciBgbm9vcEFzeW5jKClgIG92ZXIgYFByb21pc2UucmVzb2x2ZSgpYCdcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnVXNlIGBub29wQXN5bmMoKWAgaW5zdGVhZCBvZiBgUHJvbWlzZS5yZXNvbHZlKClgIGZvciBhc3luYyBuby1vcHMuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbidcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYFByb21pc2VgIG9mIGEgYFByb21pc2UucmVzb2x2ZSgpYCBjYWxsIHJlc29sdmVzIHRvIGEgYmluZGluZyB0aGUgY29kZSBkZWNsYXJlcyBpdHNlbGYsXG4gKiBzdWNoIGFzIGEgbG9jYWwgdmFyaWFibGUsIGEgcGFyYW1ldGVyIG9yIGFuIGltcG9ydCwgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgZW5jbG9zaW5nIHRoZSBjYWxsLlxuICogQHBhcmFtIG5vZGUgLSBUaGUgYFByb21pc2UucmVzb2x2ZSgpYCBjYWxsIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYFByb21pc2VgIGlzIGJvdW5kIGJ5IGEgZGVjbGFyYXRpb24gaW4gdGhlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTG9jYWxseUJvdW5kUHJvbWlzZShzY29wZTogU2NvcGUuU2NvcGUsIG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlIGFzIFRTRVNUcmVlLk1lbWJlckV4cHJlc3Npb247XG4gIGNvbnN0IHJlZmVyZW5jZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNjb3BlLnJlZmVyZW5jZXMuZmluZCgoY2FuZGlkYXRlKSA9PiB0b1RTRVNUcmVlTm9kZShjYW5kaWRhdGUuaWRlbnRpZmllcikgPT09IGNhbGxlZS5vYmplY3QpKTtcbiAgLy8gQSBnbG9iYWwgYFByb21pc2VgIHJlc29sdmVzIHRvIGEgdmFyaWFibGUgd2l0aG91dCBkZWZpbml0aW9ucywgb3IgdG8gbm90aGluZyB3aGVuIG5vIGdsb2JhbHMgYXJlIGNvbmZpZ3VyZWQuXG4gIHJldHVybiAocmVmZXJlbmNlLnJlc29sdmVkPy5kZWZzLmxlbmd0aCA/PyAwKSA+IDA7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjYWxsIGV4cHJlc3Npb24gaXMgYFByb21pc2UucmVzb2x2ZSgpYCB3aXRoIG5vIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjYWxsIGV4cHJlc3Npb24gbm9kZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBgUHJvbWlzZS5yZXNvbHZlKClgIHdpdGggbm8gYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBpc1Byb21pc2VSZXNvbHZlV2l0aE5vQXJndW1lbnRzKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy4gKi9cbiAgcmV0dXJuIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICYmIGNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbidcbiAgICAmJiBjYWxsZWUub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBjYWxsZWUub2JqZWN0Lm5hbWUgPT09ICdQcm9taXNlJ1xuICAgICYmIGNhbGxlZS5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgJiYgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICdyZXNvbHZlJztcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuICovXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsc0JBQXNCO0FBRS9CLFNBQVMsc0JBQXNCO0FBRS9CLE1BQU0sa0JBQWtCO0FBSWpCLE1BQU0sYUFBYTtBQUtuQixNQUFNLGtCQUFtQztBQUFBLEVBQzlDLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLGlC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
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItbm9vcC1hc3luYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHByZWZlci1ub29wLWFzeW5jXG4gKlxuICogUmVwb3J0cyBgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClgIGFuZCBzdWdnZXN0cyByZXBsYWNpbmcgaXQgd2l0aFxuICogYGF3YWl0IG5vb3BBc3luYygpYCBmb3IgY29uc2lzdGVuY3kgYW5kIHJlYWRhYmlsaXR5LlxuICpcbiAqIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSB2YWx1ZSBpbXBvcnQgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uYCxcbiAqIG9yIGFkZHMgYSBjb2xsaXNpb24tZnJlZSBpbXBvcnQuIFNjcmlwdHMgd2l0aG91dCBvbmUgcmV0YWluIHRoZSBkaWFnbm9zdGljIG9ubHkuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUge1xuICBSdWxlLFxuICBTY29wZVxufSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB7XG4gIGZpbmRWaXNpYmxlSW1wb3J0TmFtZSxcbiAgZ2V0VW51c2VkTmFtZSxcbiAgaW5zZXJ0SW1wb3J0XG59IGZyb20gJy4vaW1wb3J0LWZpeC50cyc7XG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG5jb25zdCBGVU5DVElPTl9NT0RVTEUgPSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGBQcm9taXNlLnJlc29sdmUoKWAgaXMgdXNlZCBmb3IgYW4gYXN5bmMgbm8tb3AgaW5zdGVhZCBvZiBgbm9vcEFzeW5jKClgLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdwcmVmZXJOb29wQXN5bmMnO1xuXG4vKipcbiAqIEVTTGludCBydWxlIHByZWZlcnJpbmcgYG5vb3BBc3luYygpYCBvdmVyIGBQcm9taXNlLnJlc29sdmUoKWAgZm9yIGFuIGFzeW5jIG5vLW9wLlxuICovXG5leHBvcnQgY29uc3QgcHJlZmVyTm9vcEFzeW5jOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDYWxsRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgaWYgKCFpc1Byb21pc2VSZXNvbHZlV2l0aE5vQXJndW1lbnRzKGNhbGxOb2RlKSB8fCBpc0xvY2FsbHlCb3VuZFByb21pc2UoY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpLCBjYWxsTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgZml4KGZpeGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5zb3VyY2VDb2RlO1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0ZWROYW1lID0gZmluZFZpc2libGVJbXBvcnROYW1lKHsgaW1wb3J0ZWROYW1lOiAnbm9vcEFzeW5jJywgbW9kdWxlTmFtZTogRlVOQ1RJT05fTU9EVUxFLCBub2RlLCBzb3VyY2VDb2RlIH0pO1xuICAgICAgICAgICAgaWYgKGltcG9ydGVkTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYCR7aW1wb3J0ZWROYW1lfSgpYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEEgc2NyaXB0IGNhbm5vdCBhY2NlcHQgYW4gRVNNIGltcG9ydC4gTGVhdmUgaXRzIGRpYWdub3N0aWMgZm9yIGEgbWFudWFsIGVkaXQuXG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZS5hc3Quc291cmNlVHlwZSAhPT0gJ21vZHVsZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZ2V0VW51c2VkTmFtZShzb3VyY2VDb2RlLCAnbm9vcEFzeW5jJyk7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gbmFtZSA9PT0gJ25vb3BBc3luYycgPyBuYW1lIDogYG5vb3BBc3luYyBhcyAke25hbWV9YDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGluc2VydEltcG9ydChmaXhlciwgc291cmNlQ29kZSwgYGltcG9ydCB7ICR7YmluZGluZ30gfSBmcm9tICcke0ZVTkNUSU9OX01PRFVMRX0nO2ApLFxuICAgICAgICAgICAgICBmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHtuYW1lfSgpYClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSUQsXG4gICAgICAgICAgbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdQcmVmZXIgYG5vb3BBc3luYygpYCBvdmVyIGBQcm9taXNlLnJlc29sdmUoKWAnXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ1VzZSBgbm9vcEFzeW5jKClgIGluc3RlYWQgb2YgYFByb21pc2UucmVzb2x2ZSgpYCBmb3IgYXN5bmMgbm8tb3BzLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGBQcm9taXNlYCBvZiBhIGBQcm9taXNlLnJlc29sdmUoKWAgY2FsbCByZXNvbHZlcyB0byBhIGJpbmRpbmcgdGhlIGNvZGUgZGVjbGFyZXMgaXRzZWxmLFxuICogc3VjaCBhcyBhIGxvY2FsIHZhcmlhYmxlLCBhIHBhcmFtZXRlciBvciBhbiBpbXBvcnQsIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGVuY2xvc2luZyB0aGUgY2FsbC5cbiAqIEBwYXJhbSBub2RlIC0gVGhlIGBQcm9taXNlLnJlc29sdmUoKWAgY2FsbCBleHByZXNzaW9uLlxuICogQHJldHVybnMgYHRydWVgIGlmIGBQcm9taXNlYCBpcyBib3VuZCBieSBhIGRlY2xhcmF0aW9uIGluIHRoZSBjb2RlLlxuICovXG5mdW5jdGlvbiBpc0xvY2FsbHlCb3VuZFByb21pc2Uoc2NvcGU6IFNjb3BlLlNjb3BlLCBub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZSBhcyBUU0VTVHJlZS5NZW1iZXJFeHByZXNzaW9uO1xuICBjb25zdCByZWZlcmVuY2UgPSBlbnN1cmVOb25OdWxsYWJsZShzY29wZS5yZWZlcmVuY2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gdG9UU0VTVHJlZU5vZGUoY2FuZGlkYXRlLmlkZW50aWZpZXIpID09PSBjYWxsZWUub2JqZWN0KSk7XG4gIC8vIEEgZ2xvYmFsIGBQcm9taXNlYCByZXNvbHZlcyB0byBhIHZhcmlhYmxlIHdpdGhvdXQgZGVmaW5pdGlvbnMsIG9yIHRvIG5vdGhpbmcgd2hlbiBubyBnbG9iYWxzIGFyZSBjb25maWd1cmVkLlxuICByZXR1cm4gKHJlZmVyZW5jZS5yZXNvbHZlZD8uZGVmcy5sZW5ndGggPz8gMCkgPiAwO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCBleHByZXNzaW9uIGlzIGBQcm9taXNlLnJlc29sdmUoKWAgd2l0aCBubyBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgY2FsbCBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYFByb21pc2UucmVzb2x2ZSgpYCB3aXRoIG5vIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gaXNQcm9taXNlUmVzb2x2ZVdpdGhOb0FyZ3VtZW50cyhub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuICovXG4gIHJldHVybiBub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDBcbiAgICAmJiBjYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgJiYgY2FsbGVlLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiYgY2FsbGVlLm9iamVjdC5uYW1lID09PSAnUHJvbWlzZSdcbiAgICAmJiBjYWxsZWUucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmIGNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSAncmVzb2x2ZSc7XG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLiAqL1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxTQUFTLHlCQUF5QjtBQUVsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHNCQUFzQjtBQUUvQixNQUFNLGtCQUFrQjtBQUlqQixNQUFNLGFBQWE7QUFLbkIsTUFBTSxrQkFBbUM7QUFBQSxFQUM5QyxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxpQkFBaUIsTUFBdUI7QUFDdEMsY0FBTSxXQUFXLGVBQWUsSUFBSTtBQUVwQyxZQUFJLENBQUMsZ0NBQWdDLFFBQVEsS0FBSyxzQkFBc0IsUUFBUSxXQUFXLFNBQVMsSUFBSSxHQUFHLFFBQVEsR0FBRztBQUNwSDtBQUFBLFFBQ0Y7QUFFQSxnQkFBUSxPQUFPO0FBQUEsVUFDYixJQUFJLE9BQU87QUFDVCxrQkFBTSxhQUFhLFFBQVE7QUFDM0Isa0JBQU0sZUFBZSxzQkFBc0IsRUFBRSxjQUFjLGFBQWEsWUFBWSxpQkFBaUIsTUFBTSxXQUFXLENBQUM7QUFDdkgsZ0JBQUksaUJBQWlCLE1BQU07QUFDekIscUJBQU8sTUFBTSxZQUFZLE1BQU0sR0FBRyxZQUFZLElBQUk7QUFBQSxZQUNwRDtBQUdBLGdCQUFJLFdBQVcsSUFBSSxlQUFlLFVBQVU7QUFDMUMscUJBQU87QUFBQSxZQUNUO0FBQ0Esa0JBQU0sT0FBTyxjQUFjLFlBQVksV0FBVztBQUNsRCxrQkFBTSxVQUFVLFNBQVMsY0FBYyxPQUFPLGdCQUFnQixJQUFJO0FBQ2xFLG1CQUFPO0FBQUEsY0FDTCxhQUFhLE9BQU8sWUFBWSxZQUFZLE9BQU8sWUFBWSxlQUFlLElBQUk7QUFBQSxjQUNsRixNQUFNLFlBQVksTUFBTSxHQUFHLElBQUksSUFBSTtBQUFBLFlBQ3JDO0FBQUEsVUFDRjtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7QUFVQSxTQUFTLHNCQUFzQixPQUFvQixNQUF3QztBQUN6RixRQUFNLFNBQVMsS0FBSztBQUNwQixRQUFNLFlBQVksa0JBQWtCLE1BQU0sV0FBVyxLQUFLLENBQUMsY0FBYyxlQUFlLFVBQVUsVUFBVSxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBRWhJLFVBQVEsVUFBVSxVQUFVLEtBQUssVUFBVSxLQUFLO0FBQ2xEO0FBUUEsU0FBUyxnQ0FBZ0MsTUFBd0M7QUFDL0UsUUFBTSxTQUFTLEtBQUs7QUFHcEIsU0FBTyxLQUFLLFVBQVUsV0FBVyxLQUM1QixPQUFPLFNBQVMsc0JBQ2hCLE9BQU8sT0FBTyxTQUFTLGdCQUFnQixPQUFPLE9BQU8sU0FBUyxhQUM5RCxPQUFPLFNBQVMsU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLFNBQVM7QUFFekU7IiwibmFtZXMiOltdfQ==
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../dist/lib/cjs/linters/eslint-rules/import-fix.cjs",
3
+ "module": "../../../dist/lib/esm/linters/eslint-rules/import-fix.mjs",
4
+ "type": "module",
5
+ "types": "../../../dist/lib/cjs/linters/eslint-rules/import-fix.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../dist/lib/cjs/linters/eslint-rules/prefer-dedent.cjs",
3
+ "module": "../../../dist/lib/esm/linters/eslint-rules/prefer-dedent.mjs",
4
+ "type": "module",
5
+ "types": "../../../dist/lib/cjs/linters/eslint-rules/prefer-dedent.d.cts"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/typescript-dev-toolkit",
3
- "version": "5.1.0",
3
+ "version": "5.2.0",
4
4
  "description": "Generic TypeScript project tooling: build, lint, format, spellcheck, test, gate and release scripts.",
5
5
  "keywords": [
6
6
  "typescript",