@gitwand/core 1.6.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.
- package/LICENSE +21 -0
- package/README.md +52 -0
- package/dist/__tests__/bench.bench.d.ts +14 -0
- package/dist/__tests__/bench.bench.d.ts.map +1 -0
- package/dist/__tests__/bench.bench.js +137 -0
- package/dist/__tests__/bench.bench.js.map +1 -0
- package/dist/__tests__/confidence-v14.test.d.ts +13 -0
- package/dist/__tests__/confidence-v14.test.d.ts.map +1 -0
- package/dist/__tests__/confidence-v14.test.js +284 -0
- package/dist/__tests__/confidence-v14.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +317 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/corpus.d.ts +36 -0
- package/dist/__tests__/corpus.d.ts.map +1 -0
- package/dist/__tests__/corpus.js +541 -0
- package/dist/__tests__/corpus.js.map +1 -0
- package/dist/__tests__/corpus.test.d.ts +17 -0
- package/dist/__tests__/corpus.test.d.ts.map +1 -0
- package/dist/__tests__/corpus.test.js +179 -0
- package/dist/__tests__/corpus.test.js.map +1 -0
- package/dist/__tests__/diff.test.d.ts +10 -0
- package/dist/__tests__/diff.test.d.ts.map +1 -0
- package/dist/__tests__/diff.test.js +178 -0
- package/dist/__tests__/diff.test.js.map +1 -0
- package/dist/__tests__/format-resolvers.test.d.ts +2 -0
- package/dist/__tests__/format-resolvers.test.d.ts.map +1 -0
- package/dist/__tests__/format-resolvers.test.js +577 -0
- package/dist/__tests__/format-resolvers.test.js.map +1 -0
- package/dist/__tests__/imports-extended.test.d.ts +2 -0
- package/dist/__tests__/imports-extended.test.d.ts.map +1 -0
- package/dist/__tests__/imports-extended.test.js +94 -0
- package/dist/__tests__/imports-extended.test.js.map +1 -0
- package/dist/__tests__/lockfile-resolvers.test.d.ts +2 -0
- package/dist/__tests__/lockfile-resolvers.test.d.ts.map +1 -0
- package/dist/__tests__/lockfile-resolvers.test.js +200 -0
- package/dist/__tests__/lockfile-resolvers.test.js.map +1 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts +10 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.js +185 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.js.map +1 -0
- package/dist/__tests__/patterns/reorder-only.test.d.ts +10 -0
- package/dist/__tests__/patterns/reorder-only.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/reorder-only.test.js +181 -0
- package/dist/__tests__/patterns/reorder-only.test.js.map +1 -0
- package/dist/__tests__/phase-7-2-3b.test.d.ts +6 -0
- package/dist/__tests__/phase-7-2-3b.test.d.ts.map +1 -0
- package/dist/__tests__/phase-7-2-3b.test.js +730 -0
- package/dist/__tests__/phase-7-2-3b.test.js.map +1 -0
- package/dist/__tests__/resolver.test.d.ts +2 -0
- package/dist/__tests__/resolver.test.d.ts.map +1 -0
- package/dist/__tests__/resolver.test.js +927 -0
- package/dist/__tests__/resolver.test.js.map +1 -0
- package/dist/__tests__/resolvers/cargo.test.d.ts +10 -0
- package/dist/__tests__/resolvers/cargo.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/cargo.test.js +158 -0
- package/dist/__tests__/resolvers/cargo.test.js.map +1 -0
- package/dist/__tests__/resolvers/dockerfile.test.d.ts +8 -0
- package/dist/__tests__/resolvers/dockerfile.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/dockerfile.test.js +120 -0
- package/dist/__tests__/resolvers/dockerfile.test.js.map +1 -0
- package/dist/__tests__/resolvers/dotenv.test.d.ts +9 -0
- package/dist/__tests__/resolvers/dotenv.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/dotenv.test.js +113 -0
- package/dist/__tests__/resolvers/dotenv.test.js.map +1 -0
- package/dist/__tests__/resolvers/improvements-v14.test.d.ts +8 -0
- package/dist/__tests__/resolvers/improvements-v14.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/improvements-v14.test.js +306 -0
- package/dist/__tests__/resolvers/improvements-v14.test.js.map +1 -0
- package/dist/__tests__/validation.test.d.ts +12 -0
- package/dist/__tests__/validation.test.d.ts.map +1 -0
- package/dist/__tests__/validation.test.js +136 -0
- package/dist/__tests__/validation.test.js.map +1 -0
- package/dist/classifier.d.ts +21 -0
- package/dist/classifier.d.ts.map +1 -0
- package/dist/classifier.js +127 -0
- package/dist/classifier.js.map +1 -0
- package/dist/config.d.ts +108 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +200 -0
- package/dist/config.js.map +1 -0
- package/dist/diff.d.ts +69 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +328 -0
- package/dist/diff.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +39 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +164 -0
- package/dist/parser.js.map +1 -0
- package/dist/patterns/complex.d.ts +5 -0
- package/dist/patterns/complex.d.ts.map +1 -0
- package/dist/patterns/complex.js +27 -0
- package/dist/patterns/complex.js.map +1 -0
- package/dist/patterns/delete-no-change.d.ts +4 -0
- package/dist/patterns/delete-no-change.d.ts.map +1 -0
- package/dist/patterns/delete-no-change.js +75 -0
- package/dist/patterns/delete-no-change.js.map +1 -0
- package/dist/patterns/insertion-at-boundary.d.ts +22 -0
- package/dist/patterns/insertion-at-boundary.d.ts.map +1 -0
- package/dist/patterns/insertion-at-boundary.js +164 -0
- package/dist/patterns/insertion-at-boundary.js.map +1 -0
- package/dist/patterns/non-overlapping.d.ts +4 -0
- package/dist/patterns/non-overlapping.d.ts.map +1 -0
- package/dist/patterns/non-overlapping.js +28 -0
- package/dist/patterns/non-overlapping.js.map +1 -0
- package/dist/patterns/one-side-change.d.ts +4 -0
- package/dist/patterns/one-side-change.d.ts.map +1 -0
- package/dist/patterns/one-side-change.js +45 -0
- package/dist/patterns/one-side-change.js.map +1 -0
- package/dist/patterns/reorder-only.d.ts +14 -0
- package/dist/patterns/reorder-only.d.ts.map +1 -0
- package/dist/patterns/reorder-only.js +81 -0
- package/dist/patterns/reorder-only.js.map +1 -0
- package/dist/patterns/same-change.d.ts +4 -0
- package/dist/patterns/same-change.d.ts.map +1 -0
- package/dist/patterns/same-change.js +25 -0
- package/dist/patterns/same-change.js.map +1 -0
- package/dist/patterns/utils.d.ts +70 -0
- package/dist/patterns/utils.d.ts.map +1 -0
- package/dist/patterns/utils.js +206 -0
- package/dist/patterns/utils.js.map +1 -0
- package/dist/patterns/value-only-change.d.ts +4 -0
- package/dist/patterns/value-only-change.d.ts.map +1 -0
- package/dist/patterns/value-only-change.js +34 -0
- package/dist/patterns/value-only-change.js.map +1 -0
- package/dist/patterns/whitespace-only.d.ts +4 -0
- package/dist/patterns/whitespace-only.d.ts.map +1 -0
- package/dist/patterns/whitespace-only.js +32 -0
- package/dist/patterns/whitespace-only.js.map +1 -0
- package/dist/resolver/assemble.d.ts +25 -0
- package/dist/resolver/assemble.d.ts.map +1 -0
- package/dist/resolver/assemble.js +170 -0
- package/dist/resolver/assemble.js.map +1 -0
- package/dist/resolver/format-dispatch.d.ts +40 -0
- package/dist/resolver/format-dispatch.d.ts.map +1 -0
- package/dist/resolver/format-dispatch.js +51 -0
- package/dist/resolver/format-dispatch.js.map +1 -0
- package/dist/resolver/generated-detection.d.ts +48 -0
- package/dist/resolver/generated-detection.d.ts.map +1 -0
- package/dist/resolver/generated-detection.js +123 -0
- package/dist/resolver/generated-detection.js.map +1 -0
- package/dist/resolver/index.d.ts +26 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +147 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/policy.d.ts +53 -0
- package/dist/resolver/policy.d.ts.map +1 -0
- package/dist/resolver/policy.js +99 -0
- package/dist/resolver/policy.js.map +1 -0
- package/dist/resolver/validation.d.ts +28 -0
- package/dist/resolver/validation.d.ts.map +1 -0
- package/dist/resolver/validation.js +96 -0
- package/dist/resolver/validation.js.map +1 -0
- package/dist/resolver.d.ts +18 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +18 -0
- package/dist/resolver.js.map +1 -0
- package/dist/resolvers/cargo.d.ts +34 -0
- package/dist/resolvers/cargo.d.ts.map +1 -0
- package/dist/resolvers/cargo.js +262 -0
- package/dist/resolvers/cargo.js.map +1 -0
- package/dist/resolvers/css.d.ts +60 -0
- package/dist/resolvers/css.d.ts.map +1 -0
- package/dist/resolvers/css.js +531 -0
- package/dist/resolvers/css.js.map +1 -0
- package/dist/resolvers/dispatcher.d.ts +78 -0
- package/dist/resolvers/dispatcher.d.ts.map +1 -0
- package/dist/resolvers/dispatcher.js +290 -0
- package/dist/resolvers/dispatcher.js.map +1 -0
- package/dist/resolvers/dockerfile.d.ts +24 -0
- package/dist/resolvers/dockerfile.d.ts.map +1 -0
- package/dist/resolvers/dockerfile.js +221 -0
- package/dist/resolvers/dockerfile.js.map +1 -0
- package/dist/resolvers/dotenv.d.ts +27 -0
- package/dist/resolvers/dotenv.d.ts.map +1 -0
- package/dist/resolvers/dotenv.js +114 -0
- package/dist/resolvers/dotenv.js.map +1 -0
- package/dist/resolvers/imports.d.ts +63 -0
- package/dist/resolvers/imports.d.ts.map +1 -0
- package/dist/resolvers/imports.js +513 -0
- package/dist/resolvers/imports.js.map +1 -0
- package/dist/resolvers/json.d.ts +48 -0
- package/dist/resolvers/json.d.ts.map +1 -0
- package/dist/resolvers/json.js +363 -0
- package/dist/resolvers/json.js.map +1 -0
- package/dist/resolvers/lockfile-npm.d.ts +38 -0
- package/dist/resolvers/lockfile-npm.d.ts.map +1 -0
- package/dist/resolvers/lockfile-npm.js +267 -0
- package/dist/resolvers/lockfile-npm.js.map +1 -0
- package/dist/resolvers/lockfile-pnpm.d.ts +44 -0
- package/dist/resolvers/lockfile-pnpm.d.ts.map +1 -0
- package/dist/resolvers/lockfile-pnpm.js +277 -0
- package/dist/resolvers/lockfile-pnpm.js.map +1 -0
- package/dist/resolvers/lockfile-yarn.d.ts +40 -0
- package/dist/resolvers/lockfile-yarn.d.ts.map +1 -0
- package/dist/resolvers/lockfile-yarn.js +184 -0
- package/dist/resolvers/lockfile-yarn.js.map +1 -0
- package/dist/resolvers/markdown.d.ts +64 -0
- package/dist/resolvers/markdown.d.ts.map +1 -0
- package/dist/resolvers/markdown.js +335 -0
- package/dist/resolvers/markdown.js.map +1 -0
- package/dist/resolvers/vue.d.ts +65 -0
- package/dist/resolvers/vue.d.ts.map +1 -0
- package/dist/resolvers/vue.js +258 -0
- package/dist/resolvers/vue.js.map +1 -0
- package/dist/resolvers/yaml.d.ts +65 -0
- package/dist/resolvers/yaml.d.ts.map +1 -0
- package/dist/resolvers/yaml.js +405 -0
- package/dist/resolvers/yaml.js.map +1 -0
- package/dist/types.d.ts +256 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Resolver .env (v1.4)
|
|
3
|
+
*
|
|
4
|
+
* Merge de fichiers .env, .env.*, *.env par clé.
|
|
5
|
+
* Zéro dépendance externe.
|
|
6
|
+
*
|
|
7
|
+
* Grammaire supportée :
|
|
8
|
+
* LINE = COMMENT | BLANK | EXPORT? KEY '=' VALUE
|
|
9
|
+
* COMMENT = '#' ...
|
|
10
|
+
* EXPORT = 'export '
|
|
11
|
+
* KEY = [A-Z_][A-Z0-9_]* (insensible à la casse pour la détection)
|
|
12
|
+
* VALUE = QUOTED | UNQUOTED
|
|
13
|
+
*
|
|
14
|
+
* Limitations :
|
|
15
|
+
* - Valeurs multilignes (backslash continuation) → fallback textuel
|
|
16
|
+
* - Nested quotes complexes → fallback textuel
|
|
17
|
+
*/
|
|
18
|
+
// ─── Parser ──────────────────────────────────────────────────
|
|
19
|
+
const KEY_PATTERN = /^(export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=(.*)$/;
|
|
20
|
+
const COMMENT_PATTERN = /^\s*#/;
|
|
21
|
+
/**
|
|
22
|
+
* Parse un tableau de lignes .env en Map<key, EnvEntry>.
|
|
23
|
+
* Les commentaires et lignes vides sont préservés dans leur entrée "précédente".
|
|
24
|
+
* Retourne null si une ligne multiline (backslash) est détectée.
|
|
25
|
+
*/
|
|
26
|
+
function parseEnvLines(lines) {
|
|
27
|
+
const result = new Map();
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
// Backslash continuation → non supporté
|
|
30
|
+
if (line.endsWith("\\"))
|
|
31
|
+
return null;
|
|
32
|
+
const trimmed = line.trim();
|
|
33
|
+
if (!trimmed || COMMENT_PATTERN.test(trimmed)) {
|
|
34
|
+
// Commentaire ou ligne vide : on les associe à une clé spéciale __COMMENT__N
|
|
35
|
+
result.set(`__BLANK__${result.size}`, {
|
|
36
|
+
key: "__BLANK__",
|
|
37
|
+
value: "",
|
|
38
|
+
raw: line,
|
|
39
|
+
comment: "",
|
|
40
|
+
export: false,
|
|
41
|
+
});
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const m = trimmed.match(KEY_PATTERN);
|
|
45
|
+
if (!m)
|
|
46
|
+
continue; // ligne non reconnue → skip
|
|
47
|
+
const isExport = !!m[1];
|
|
48
|
+
const key = m[2];
|
|
49
|
+
const rawValue = m[3].trim();
|
|
50
|
+
// Séparer valeur et commentaire inline (hors guillemets)
|
|
51
|
+
let value = rawValue;
|
|
52
|
+
let comment = "";
|
|
53
|
+
if (!rawValue.startsWith('"') && !rawValue.startsWith("'")) {
|
|
54
|
+
const commentIdx = rawValue.indexOf(" #");
|
|
55
|
+
if (commentIdx >= 0) {
|
|
56
|
+
value = rawValue.slice(0, commentIdx).trim();
|
|
57
|
+
comment = rawValue.slice(commentIdx).trim();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
result.set(key, { key, value, raw: line, comment, export: isExport });
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
// ─── Résolution ──────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Tente de résoudre un conflit dans un fichier .env.
|
|
67
|
+
*/
|
|
68
|
+
export function tryResolveDotenvConflict(_baseLines, oursLines, theirsLines) {
|
|
69
|
+
const oursParsed = parseEnvLines(oursLines);
|
|
70
|
+
const theirsParsed = parseEnvLines(theirsLines);
|
|
71
|
+
if (!oursParsed || !theirsParsed) {
|
|
72
|
+
return {
|
|
73
|
+
lines: null,
|
|
74
|
+
reason: "[dotenv] Valeurs multilignes détectées — fallback textuel.",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const result = [];
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
// Parcourir ours en premier
|
|
80
|
+
for (const [mapKey, entry] of oursParsed) {
|
|
81
|
+
if (mapKey.startsWith("__BLANK__")) {
|
|
82
|
+
// Ligne vide ou commentaire — inclure si pas déjà dans theirs
|
|
83
|
+
result.push(entry.raw);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
seen.add(entry.key);
|
|
87
|
+
const theirsEntry = theirsParsed.get(entry.key);
|
|
88
|
+
if (!theirsEntry) {
|
|
89
|
+
// Clé seulement dans ours → inclure
|
|
90
|
+
result.push(entry.raw);
|
|
91
|
+
}
|
|
92
|
+
else if (entry.value === theirsEntry.value) {
|
|
93
|
+
// Même valeur → inclure une fois (ours)
|
|
94
|
+
result.push(entry.raw);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Valeur différente → prefer theirs (version plus récente / entrante)
|
|
98
|
+
result.push(theirsEntry.raw);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Clés seulement dans theirs → les ajouter à la fin
|
|
102
|
+
for (const [mapKey, entry] of theirsParsed) {
|
|
103
|
+
if (mapKey.startsWith("__BLANK__"))
|
|
104
|
+
continue; // commentaires déjà gérés
|
|
105
|
+
if (!seen.has(entry.key)) {
|
|
106
|
+
result.push(entry.raw);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
lines: result,
|
|
111
|
+
reason: "Format key=value — merge par clé (.env). Nouvelles clés ajoutées des deux côtés ; conflits de valeur résolus en faveur de theirs.",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=dotenv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../../src/resolvers/dotenv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Résolveur d'imports TS/JS/TSX/JSX
|
|
3
|
+
*
|
|
4
|
+
* Résout les conflits dans les blocs d'imports ES/CommonJS/dynamic.
|
|
5
|
+
* C'est l'un des types de conflits les plus courants en pratique : deux branches
|
|
6
|
+
* ajoutent des imports différents en tête de fichier.
|
|
7
|
+
*
|
|
8
|
+
* Stratégie :
|
|
9
|
+
* 1. Vérifier que le bloc de conflit est entièrement composé d'imports
|
|
10
|
+
* (+ lignes vides et commentaires — tolérés)
|
|
11
|
+
* 2. Parser les imports des trois versions en statements normalisés
|
|
12
|
+
* 3. Calculer l'union : imports de base + delta ours + delta theirs
|
|
13
|
+
* 4. Si les deltas sont non-conflictuels → produire le bloc fusionné, trié
|
|
14
|
+
* 5. Si conflit (même module importé différemment des deux côtés) → null (fallback)
|
|
15
|
+
*
|
|
16
|
+
* Formats supportés :
|
|
17
|
+
* - `import X from 'y'`
|
|
18
|
+
* - `import { X, Y } from 'y'`
|
|
19
|
+
* - `import * as X from 'y'`
|
|
20
|
+
* - `import 'y'` (side-effect import)
|
|
21
|
+
* - `import type { X } from 'y'` (TypeScript)
|
|
22
|
+
* - `const X = require('y')` (CommonJS — détecté mais pas déstructuré)
|
|
23
|
+
* - `export { X } from 'y'` (re-exports)
|
|
24
|
+
*/
|
|
25
|
+
/** Un import ES parsé */
|
|
26
|
+
export interface ImportStatement {
|
|
27
|
+
/** Ligne source normalisée (sans whitespace de fin) */
|
|
28
|
+
raw: string;
|
|
29
|
+
/** Module source (ex: 'react', '../utils') */
|
|
30
|
+
source: string;
|
|
31
|
+
/** Type d'import : 'named', 'default', 'namespace', 'side-effect', 'require', 'export' */
|
|
32
|
+
kind: "named" | "default" | "namespace" | "side-effect" | "require" | "export" | "unknown";
|
|
33
|
+
/** Noms importés pour les named imports (ex: ['useState', 'useEffect']) */
|
|
34
|
+
names: string[];
|
|
35
|
+
/** `true` si c'est un `import type` TypeScript */
|
|
36
|
+
isType: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Vérifie que toutes les lignes d'un bloc sont des imports/commentaires.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isImportBlock(lines: string[]): boolean;
|
|
42
|
+
/** Résultat du merge d'imports */
|
|
43
|
+
export interface ImportMergeResult {
|
|
44
|
+
/** Lignes fusionnées (null = conflit non résolvable) */
|
|
45
|
+
mergedLines: string[] | null;
|
|
46
|
+
/** Description de la fusion */
|
|
47
|
+
reason: string;
|
|
48
|
+
/** Nombre d'imports fusionnés */
|
|
49
|
+
resolvedImports: number;
|
|
50
|
+
/** Nombre de conflits non résolus */
|
|
51
|
+
unresolvedImports: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Fusionne deux blocs d'imports.
|
|
55
|
+
*
|
|
56
|
+
* @param baseLines - Lignes de la version base (peut être vide pour diff2)
|
|
57
|
+
* @param oursLines - Lignes de la version ours
|
|
58
|
+
* @param theirsLines - Lignes de la version theirs
|
|
59
|
+
*/
|
|
60
|
+
export declare function tryResolveImportConflict(baseLines: string[], oursLines: string[], theirsLines: string[]): ImportMergeResult;
|
|
61
|
+
/** Stratégies de tri d'imports configurables */
|
|
62
|
+
export type ImportSortStrategy = "default" | "eslint-import" | "type-last";
|
|
63
|
+
//# sourceMappingURL=imports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/resolvers/imports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3F,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,OAAO,CAAC;CACjB;AAkCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEtD;AAyDD,kCAAkC;AAClC,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA0HD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,iBAAiB,CA+LnB;AAeD,gDAAgD;AAChD,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,eAAe,GACf,WAAW,CAAC"}
|