@vaadin/hilla-generator-utils 24.7.0-alpha9 → 24.7.0-beta1
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/LoggerFactory.d.ts +7 -8
- package/LoggerFactory.js +24 -32
- package/LoggerFactory.js.map +1 -7
- package/PluginError.d.ts +1 -2
- package/PluginError.js +5 -8
- package/PluginError.js.map +1 -7
- package/ast.d.ts +1 -2
- package/ast.js +30 -39
- package/ast.js.map +1 -7
- package/createFullyUniqueIdentifier.d.ts +1 -2
- package/createFullyUniqueIdentifier.js +8 -11
- package/createFullyUniqueIdentifier.js.map +1 -7
- package/createSourceFile.d.ts +1 -2
- package/createSourceFile.js +5 -8
- package/createSourceFile.js.map +1 -7
- package/dependencies/CodeConvertable.d.ts +2 -2
- package/dependencies/DependencyManager.d.ts +7 -8
- package/dependencies/DependencyManager.js +10 -13
- package/dependencies/DependencyManager.js.map +1 -7
- package/dependencies/ExportManager.d.ts +33 -34
- package/dependencies/ExportManager.js +115 -136
- package/dependencies/ExportManager.js.map +1 -7
- package/dependencies/ImportManager.d.ts +45 -46
- package/dependencies/ImportManager.js +202 -232
- package/dependencies/ImportManager.js.map +1 -7
- package/dependencies/PathManager.d.ts +9 -10
- package/dependencies/PathManager.js +37 -43
- package/dependencies/PathManager.js.map +1 -7
- package/dependencies/StatementRecordManager.d.ts +9 -10
- package/dependencies/StatementRecordManager.js +22 -25
- package/dependencies/StatementRecordManager.js.map +1 -7
- package/dependencies/utils.d.ts +3 -4
- package/dependencies/utils.js +6 -9
- package/dependencies/utils.js.map +1 -7
- package/memoize.d.ts +0 -1
- package/memoize.js +11 -14
- package/memoize.js.map +1 -7
- package/package.json +7 -26
- package/testing/snapshotMatcher.d.ts +5 -6
- package/testing/snapshotMatcher.js +23 -29
- package/testing/snapshotMatcher.js.map +1 -7
- package/LoggerFactory.d.ts.map +0 -1
- package/PluginError.d.ts.map +0 -1
- package/ast.d.ts.map +0 -1
- package/createFullyUniqueIdentifier.d.ts.map +0 -1
- package/createSourceFile.d.ts.map +0 -1
- package/dependencies/DependencyManager.d.ts.map +0 -1
- package/dependencies/ExportManager.d.ts.map +0 -1
- package/dependencies/ImportManager.d.ts.map +0 -1
- package/dependencies/PathManager.d.ts.map +0 -1
- package/dependencies/StatementRecordManager.d.ts.map +0 -1
- package/dependencies/utils.d.ts.map +0 -1
- package/memoize.d.ts.map +0 -1
- package/testing/snapshotMatcher.d.ts.map +0 -1
|
@@ -1,238 +1,208 @@
|
|
|
1
|
-
import ts
|
|
1
|
+
import ts from "typescript";
|
|
2
2
|
import createFullyUniqueIdentifier from "../createFullyUniqueIdentifier.js";
|
|
3
|
-
import StatementRecordManager
|
|
3
|
+
import StatementRecordManager from "./StatementRecordManager.js";
|
|
4
4
|
import { createDependencyRecord } from "./utils.js";
|
|
5
|
-
class NamedImportManager extends StatementRecordManager {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
ts.factory.createStringLiteral(path)
|
|
79
|
-
)
|
|
80
|
-
];
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
*[Symbol.iterator]() {
|
|
84
|
-
for (const [path, specifiers] of this.#map) {
|
|
85
|
-
for (const [specifier, { id, isType }] of specifiers) {
|
|
86
|
-
yield [path, specifier, id, isType];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
5
|
+
export class NamedImportManager extends StatementRecordManager {
|
|
6
|
+
#collator;
|
|
7
|
+
#map = new Map();
|
|
8
|
+
constructor(collator) {
|
|
9
|
+
super(collator);
|
|
10
|
+
this.#collator = collator;
|
|
11
|
+
}
|
|
12
|
+
get size() {
|
|
13
|
+
return this.#map.size;
|
|
14
|
+
}
|
|
15
|
+
add(path, specifier, isType, uniqueId) {
|
|
16
|
+
const record = createDependencyRecord(uniqueId ?? createFullyUniqueIdentifier(specifier), isType);
|
|
17
|
+
if (this.#map.has(path)) {
|
|
18
|
+
this.#map.get(path).set(specifier, record);
|
|
19
|
+
} else {
|
|
20
|
+
this.#map.set(path, new Map([[specifier, record]]));
|
|
21
|
+
}
|
|
22
|
+
return record.id;
|
|
23
|
+
}
|
|
24
|
+
remove(path, specifier) {
|
|
25
|
+
const specifiers = this.#map.get(path);
|
|
26
|
+
if (specifiers) {
|
|
27
|
+
specifiers.delete(specifier);
|
|
28
|
+
if (specifiers.size === 0) {
|
|
29
|
+
this.#map.delete(path);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
clear() {
|
|
34
|
+
this.#map.clear();
|
|
35
|
+
}
|
|
36
|
+
getIdentifier(path, specifier) {
|
|
37
|
+
return this.#map.get(path)?.get(specifier)?.id;
|
|
38
|
+
}
|
|
39
|
+
iter() {
|
|
40
|
+
return this[Symbol.iterator]();
|
|
41
|
+
}
|
|
42
|
+
isType(path, specifier) {
|
|
43
|
+
return this.#map.get(path)?.get(specifier)?.isType;
|
|
44
|
+
}
|
|
45
|
+
paths() {
|
|
46
|
+
return this.#map.keys();
|
|
47
|
+
}
|
|
48
|
+
*specifiers() {
|
|
49
|
+
for (const [path, specifiers] of this.#map) {
|
|
50
|
+
for (const specifier of specifiers.keys()) {
|
|
51
|
+
yield [path, specifier];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
*statementRecords() {
|
|
56
|
+
for (const [path, specifiers] of this.#map) {
|
|
57
|
+
const names = [...specifiers.keys()];
|
|
58
|
+
names.sort(this.#collator.compare);
|
|
59
|
+
const isTypeOnly = names.every((name) => specifiers.get(name).isType);
|
|
60
|
+
yield [path, ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(isTypeOnly, undefined, ts.factory.createNamedImports(names.map((name) => {
|
|
61
|
+
const { id, isType } = specifiers.get(name);
|
|
62
|
+
return ts.factory.createImportSpecifier(isTypeOnly ? false : isType, ts.factory.createIdentifier(name), id);
|
|
63
|
+
}))), ts.factory.createStringLiteral(path))];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
*[Symbol.iterator]() {
|
|
67
|
+
for (const [path, specifiers] of this.#map) {
|
|
68
|
+
for (const [specifier, { id, isType }] of specifiers) {
|
|
69
|
+
yield [
|
|
70
|
+
path,
|
|
71
|
+
specifier,
|
|
72
|
+
id,
|
|
73
|
+
isType
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
90
78
|
}
|
|
91
|
-
class NamespaceImportManager extends StatementRecordManager {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
this.#map.delete(path);
|
|
127
|
-
}
|
|
128
|
-
*[Symbol.iterator]() {
|
|
129
|
-
for (const [path, id] of this.#map) {
|
|
130
|
-
yield [path, id];
|
|
131
|
-
}
|
|
132
|
-
}
|
|
79
|
+
export class NamespaceImportManager extends StatementRecordManager {
|
|
80
|
+
#map = new Map();
|
|
81
|
+
get size() {
|
|
82
|
+
return this.#map.size;
|
|
83
|
+
}
|
|
84
|
+
add(path, name, uniqueId) {
|
|
85
|
+
const id = uniqueId ?? createFullyUniqueIdentifier(name);
|
|
86
|
+
this.#map.set(path, id);
|
|
87
|
+
return id;
|
|
88
|
+
}
|
|
89
|
+
clear() {
|
|
90
|
+
this.#map.clear();
|
|
91
|
+
}
|
|
92
|
+
getIdentifier(path) {
|
|
93
|
+
return this.#map.get(path);
|
|
94
|
+
}
|
|
95
|
+
iter() {
|
|
96
|
+
return this[Symbol.iterator]();
|
|
97
|
+
}
|
|
98
|
+
paths() {
|
|
99
|
+
return this.#map.keys();
|
|
100
|
+
}
|
|
101
|
+
*statementRecords() {
|
|
102
|
+
for (const [path, id] of this.#map) {
|
|
103
|
+
yield [path, ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(id)), ts.factory.createStringLiteral(path))];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
remove(path) {
|
|
107
|
+
this.#map.delete(path);
|
|
108
|
+
}
|
|
109
|
+
*[Symbol.iterator]() {
|
|
110
|
+
for (const [path, id] of this.#map) {
|
|
111
|
+
yield [path, id];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
133
114
|
}
|
|
134
|
-
class DefaultImportManager extends StatementRecordManager {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
yield [path, id, isType];
|
|
179
|
-
}
|
|
180
|
-
}
|
|
115
|
+
export class DefaultImportManager extends StatementRecordManager {
|
|
116
|
+
#map = new Map();
|
|
117
|
+
get size() {
|
|
118
|
+
return this.#map.size;
|
|
119
|
+
}
|
|
120
|
+
add(path, name, isType, uniqueId) {
|
|
121
|
+
const id = uniqueId ?? createFullyUniqueIdentifier(name);
|
|
122
|
+
this.#map.set(path, createDependencyRecord(id, isType));
|
|
123
|
+
return id;
|
|
124
|
+
}
|
|
125
|
+
getIdentifier(path) {
|
|
126
|
+
return this.#map.get(path)?.id;
|
|
127
|
+
}
|
|
128
|
+
remove(path) {
|
|
129
|
+
if (this.#map.has(path)) {
|
|
130
|
+
this.#map.delete(path);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
clear() {
|
|
134
|
+
this.#map.clear();
|
|
135
|
+
}
|
|
136
|
+
iter() {
|
|
137
|
+
return this[Symbol.iterator]();
|
|
138
|
+
}
|
|
139
|
+
isType(path) {
|
|
140
|
+
return this.#map.get(path)?.isType;
|
|
141
|
+
}
|
|
142
|
+
paths() {
|
|
143
|
+
return this.#map.keys();
|
|
144
|
+
}
|
|
145
|
+
*statementRecords() {
|
|
146
|
+
for (const [path, { id, isType }] of this.#map) {
|
|
147
|
+
yield [path, ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(isType, id, undefined), ts.factory.createStringLiteral(path))];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
*[Symbol.iterator]() {
|
|
151
|
+
for (const [path, { id, isType }] of this.#map) {
|
|
152
|
+
yield [
|
|
153
|
+
path,
|
|
154
|
+
id,
|
|
155
|
+
isType
|
|
156
|
+
];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
181
159
|
}
|
|
182
|
-
class ImportManager {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
}
|
|
160
|
+
export default class ImportManager {
|
|
161
|
+
default;
|
|
162
|
+
named;
|
|
163
|
+
namespace;
|
|
164
|
+
#collator;
|
|
165
|
+
constructor(collator) {
|
|
166
|
+
this.default = new DefaultImportManager(collator);
|
|
167
|
+
this.named = new NamedImportManager(collator);
|
|
168
|
+
this.namespace = new NamespaceImportManager(collator);
|
|
169
|
+
this.#collator = collator;
|
|
170
|
+
}
|
|
171
|
+
get size() {
|
|
172
|
+
return this.default.size + this.named.size + this.namespace.size;
|
|
173
|
+
}
|
|
174
|
+
toCode() {
|
|
175
|
+
const records = [
|
|
176
|
+
...this.default.statementRecords(),
|
|
177
|
+
...this.named.statementRecords(),
|
|
178
|
+
...this.namespace.statementRecords()
|
|
179
|
+
];
|
|
180
|
+
records.sort(StatementRecordManager.createComparator(this.#collator));
|
|
181
|
+
return records.map(([, statement]) => statement);
|
|
182
|
+
}
|
|
183
|
+
fromCode(source) {
|
|
184
|
+
this.default.clear();
|
|
185
|
+
this.named.clear();
|
|
186
|
+
this.namespace.clear();
|
|
187
|
+
const imports = source.statements.filter((statement) => ts.isImportDeclaration(statement));
|
|
188
|
+
for (const { importClause, moduleSpecifier } of imports) {
|
|
189
|
+
if (!importClause) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const { name, namedBindings } = importClause;
|
|
193
|
+
const path = moduleSpecifier.text;
|
|
194
|
+
if (namedBindings) {
|
|
195
|
+
if (ts.isNamespaceImport(namedBindings)) {
|
|
196
|
+
this.namespace.add(path, namedBindings.name.text, namedBindings.name);
|
|
197
|
+
} else {
|
|
198
|
+
for (const { isTypeOnly, name: specifier } of namedBindings.elements) {
|
|
199
|
+
this.named.add(path, specifier.text, isTypeOnly, specifier);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
} else if (name) {
|
|
203
|
+
this.default.add(path, name.text, importClause.isTypeOnly, name);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
231
207
|
}
|
|
232
|
-
|
|
233
|
-
DefaultImportManager,
|
|
234
|
-
NamedImportManager,
|
|
235
|
-
NamespaceImportManager,
|
|
236
|
-
ImportManager as default
|
|
237
|
-
};
|
|
238
|
-
//# sourceMappingURL=ImportManager.js.map
|
|
208
|
+
//# sourceMappingURL=./ImportManager.js.map
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/dependencies/ImportManager.ts"],
|
|
4
|
-
"sourcesContent": ["import ts, { type Identifier, type ImportDeclaration, type Statement } from 'typescript';\nimport createFullyUniqueIdentifier from '../createFullyUniqueIdentifier.js';\nimport type CodeConvertable from './CodeConvertable.js';\nimport StatementRecordManager, { type StatementRecord } from './StatementRecordManager.js';\nimport { createDependencyRecord, type DependencyRecord } from './utils.js';\n\nexport class NamedImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #collator: Intl.Collator;\n readonly #map = new Map<string, Map<string, DependencyRecord>>();\n\n constructor(collator: Intl.Collator) {\n super(collator);\n this.#collator = collator;\n }\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, specifier: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const record = createDependencyRecord(uniqueId ?? createFullyUniqueIdentifier(specifier), isType);\n\n if (this.#map.has(path)) {\n this.#map.get(path)!.set(specifier, record);\n } else {\n this.#map.set(path, new Map([[specifier, record]]));\n }\n\n return record.id;\n }\n\n remove(path: string, specifier: string): void {\n const specifiers = this.#map.get(path);\n\n if (specifiers) {\n specifiers.delete(specifier);\n\n if (specifiers.size === 0) {\n this.#map.delete(path);\n }\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string, specifier: string): Identifier | undefined {\n return this.#map.get(path)?.get(specifier)?.id;\n }\n\n iter(): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string, specifier: string): boolean | undefined {\n return this.#map.get(path)?.get(specifier)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n *specifiers(): IterableIterator<readonly [path: string, specifier: string]> {\n for (const [path, specifiers] of this.#map) {\n for (const specifier of specifiers.keys()) {\n yield [path, specifier];\n }\n }\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, specifiers] of this.#map) {\n const names = [...specifiers.keys()];\n // eslint-disable-next-line @typescript-eslint/unbound-method\n names.sort(this.#collator.compare);\n\n const isTypeOnly = names.every((name) => specifiers.get(name)!.isType);\n\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n isTypeOnly,\n undefined,\n ts.factory.createNamedImports(\n names.map((name) => {\n const { id, isType } = specifiers.get(name)!;\n return ts.factory.createImportSpecifier(\n isTypeOnly ? false : isType,\n ts.factory.createIdentifier(name),\n id,\n );\n }),\n ),\n ),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n for (const [path, specifiers] of this.#map) {\n for (const [specifier, { id, isType }] of specifiers) {\n yield [path, specifier, id, isType];\n }\n }\n }\n}\n\nexport class NamespaceImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, Identifier>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, id);\n return id;\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path);\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier]> {\n return this[Symbol.iterator]();\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, id] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(id)),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n remove(path: string): void {\n this.#map.delete(path);\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier]> {\n for (const [path, id] of this.#map) {\n yield [path, id];\n }\n }\n}\n\nexport class DefaultImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, DependencyRecord>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, createDependencyRecord(id, isType));\n return id;\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path)?.id;\n }\n\n remove(path: string): void {\n if (this.#map.has(path)) {\n this.#map.delete(path);\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string): boolean | undefined {\n return this.#map.get(path)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, { id, isType }] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(isType, id, undefined),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n for (const [path, { id, isType }] of this.#map) {\n yield [path, id, isType];\n }\n }\n}\n\nexport default class ImportManager implements CodeConvertable<readonly Statement[]> {\n readonly default: DefaultImportManager;\n readonly named: NamedImportManager;\n readonly namespace: NamespaceImportManager;\n\n readonly #collator: Intl.Collator;\n\n constructor(collator: Intl.Collator) {\n this.default = new DefaultImportManager(collator);\n this.named = new NamedImportManager(collator);\n this.namespace = new NamespaceImportManager(collator);\n this.#collator = collator;\n }\n\n get size(): number {\n return this.default.size + this.named.size + this.namespace.size;\n }\n\n toCode(): readonly Statement[] {\n const records = [\n ...this.default.statementRecords(),\n ...this.named.statementRecords(),\n ...this.namespace.statementRecords(),\n ];\n records.sort(StatementRecordManager.createComparator(this.#collator));\n\n return records.map(([, statement]) => statement);\n }\n\n fromCode(source: ts.SourceFile): void {\n this.default.clear();\n this.named.clear();\n this.namespace.clear();\n\n const imports = source.statements.filter((statement): statement is ImportDeclaration =>\n ts.isImportDeclaration(statement),\n );\n\n for (const { importClause, moduleSpecifier } of imports) {\n if (!importClause) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const { name, namedBindings } = importClause;\n const path = (moduleSpecifier as ts.StringLiteral).text;\n\n if (namedBindings) {\n if (ts.isNamespaceImport(namedBindings)) {\n this.namespace.add(path, namedBindings.name.text, namedBindings.name);\n } else {\n for (const { isTypeOnly, name: specifier } of namedBindings.elements) {\n this.named.add(path, specifier.text, isTypeOnly, specifier);\n }\n }\n } else if (name) {\n this.default.add(path, name.text, importClause.isTypeOnly, name);\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
1
|
+
{"mappings":"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","names":["#collator","#map","collator: Intl.Collator","path: string","specifier: string","isType?: boolean","uniqueId?: Identifier","name: string","source: ts.SourceFile"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/ImportManager.ts"],"sourcesContent":["import ts, { type Identifier, type ImportDeclaration, type Statement } from 'typescript';\nimport createFullyUniqueIdentifier from '../createFullyUniqueIdentifier.js';\nimport type CodeConvertable from './CodeConvertable.js';\nimport StatementRecordManager, { type StatementRecord } from './StatementRecordManager.js';\nimport { createDependencyRecord, type DependencyRecord } from './utils.js';\n\nexport class NamedImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #collator: Intl.Collator;\n readonly #map = new Map<string, Map<string, DependencyRecord>>();\n\n constructor(collator: Intl.Collator) {\n super(collator);\n this.#collator = collator;\n }\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, specifier: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const record = createDependencyRecord(uniqueId ?? createFullyUniqueIdentifier(specifier), isType);\n\n if (this.#map.has(path)) {\n this.#map.get(path)!.set(specifier, record);\n } else {\n this.#map.set(path, new Map([[specifier, record]]));\n }\n\n return record.id;\n }\n\n remove(path: string, specifier: string): void {\n const specifiers = this.#map.get(path);\n\n if (specifiers) {\n specifiers.delete(specifier);\n\n if (specifiers.size === 0) {\n this.#map.delete(path);\n }\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string, specifier: string): Identifier | undefined {\n return this.#map.get(path)?.get(specifier)?.id;\n }\n\n iter(): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string, specifier: string): boolean | undefined {\n return this.#map.get(path)?.get(specifier)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n *specifiers(): IterableIterator<readonly [path: string, specifier: string]> {\n for (const [path, specifiers] of this.#map) {\n for (const specifier of specifiers.keys()) {\n yield [path, specifier];\n }\n }\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, specifiers] of this.#map) {\n const names = [...specifiers.keys()];\n // eslint-disable-next-line @typescript-eslint/unbound-method\n names.sort(this.#collator.compare);\n\n const isTypeOnly = names.every((name) => specifiers.get(name)!.isType);\n\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n isTypeOnly,\n undefined,\n ts.factory.createNamedImports(\n names.map((name) => {\n const { id, isType } = specifiers.get(name)!;\n return ts.factory.createImportSpecifier(\n isTypeOnly ? false : isType,\n ts.factory.createIdentifier(name),\n id,\n );\n }),\n ),\n ),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n for (const [path, specifiers] of this.#map) {\n for (const [specifier, { id, isType }] of specifiers) {\n yield [path, specifier, id, isType];\n }\n }\n }\n}\n\nexport class NamespaceImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, Identifier>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, id);\n return id;\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path);\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier]> {\n return this[Symbol.iterator]();\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, id] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(id)),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n remove(path: string): void {\n this.#map.delete(path);\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier]> {\n for (const [path, id] of this.#map) {\n yield [path, id];\n }\n }\n}\n\nexport class DefaultImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, DependencyRecord>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, createDependencyRecord(id, isType));\n return id;\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path)?.id;\n }\n\n remove(path: string): void {\n if (this.#map.has(path)) {\n this.#map.delete(path);\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string): boolean | undefined {\n return this.#map.get(path)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, { id, isType }] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(isType, id, undefined),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n for (const [path, { id, isType }] of this.#map) {\n yield [path, id, isType];\n }\n }\n}\n\nexport default class ImportManager implements CodeConvertable<readonly Statement[]> {\n readonly default: DefaultImportManager;\n readonly named: NamedImportManager;\n readonly namespace: NamespaceImportManager;\n\n readonly #collator: Intl.Collator;\n\n constructor(collator: Intl.Collator) {\n this.default = new DefaultImportManager(collator);\n this.named = new NamedImportManager(collator);\n this.namespace = new NamespaceImportManager(collator);\n this.#collator = collator;\n }\n\n get size(): number {\n return this.default.size + this.named.size + this.namespace.size;\n }\n\n toCode(): readonly Statement[] {\n const records = [\n ...this.default.statementRecords(),\n ...this.named.statementRecords(),\n ...this.namespace.statementRecords(),\n ];\n records.sort(StatementRecordManager.createComparator(this.#collator));\n\n return records.map(([, statement]) => statement);\n }\n\n fromCode(source: ts.SourceFile): void {\n this.default.clear();\n this.named.clear();\n this.namespace.clear();\n\n const imports = source.statements.filter((statement): statement is ImportDeclaration =>\n ts.isImportDeclaration(statement),\n );\n\n for (const { importClause, moduleSpecifier } of imports) {\n if (!importClause) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const { name, namedBindings } = importClause;\n const path = (moduleSpecifier as ts.StringLiteral).text;\n\n if (namedBindings) {\n if (ts.isNamespaceImport(namedBindings)) {\n this.namespace.add(path, namedBindings.name.text, namedBindings.name);\n } else {\n for (const { isTypeOnly, name: specifier } of namedBindings.elements) {\n this.named.add(path, specifier.text, isTypeOnly, specifier);\n }\n }\n } else if (name) {\n this.default.add(path, name.text, importClause.isTypeOnly, name);\n }\n }\n }\n}\n"],"version":3}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
export type PathManagerOptions = Readonly<{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
aliasRoot?: string
|
|
3
|
+
extension?: string
|
|
4
|
+
relativeTo?: URL | string
|
|
5
5
|
}>;
|
|
6
6
|
export default class PathManager {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options?: PathManagerOptions);
|
|
9
|
+
get aliasRoot(): string | undefined;
|
|
10
|
+
createBareModulePath(path: string, isFile?: boolean): string;
|
|
11
|
+
createRelativePath(path: URL | string, fileExtension?: string, relativeTo?: string | URL): string;
|
|
12
|
+
createTSAliasModulePath(path: string, root?: string | undefined): string;
|
|
13
13
|
}
|
|
14
|
-
//# sourceMappingURL=PathManager.d.ts.map
|
|
@@ -1,46 +1,40 @@
|
|
|
1
1
|
import { basename, dirname, posix, relative, sep } from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
class PathManager {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
createTSAliasModulePath(path, root = this.#options.aliasRoot) {
|
|
40
|
-
return root ? `${root}/${path}` : path;
|
|
41
|
-
}
|
|
3
|
+
export default class PathManager {
|
|
4
|
+
#options;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
let extension;
|
|
7
|
+
if (options?.extension) {
|
|
8
|
+
extension = options.extension.startsWith(".") ? options.extension : `.${options.extension}`;
|
|
9
|
+
}
|
|
10
|
+
this.#options = {
|
|
11
|
+
...options,
|
|
12
|
+
extension,
|
|
13
|
+
relativeTo: options?.relativeTo ?? "."
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
get aliasRoot() {
|
|
17
|
+
return this.#options.aliasRoot;
|
|
18
|
+
}
|
|
19
|
+
createBareModulePath(path, isFile = false) {
|
|
20
|
+
const { extension } = this.#options;
|
|
21
|
+
if (extension && isFile) {
|
|
22
|
+
return `${path}.${extension}`;
|
|
23
|
+
}
|
|
24
|
+
return path;
|
|
25
|
+
}
|
|
26
|
+
createRelativePath(path, fileExtension, relativeTo = this.#options.relativeTo) {
|
|
27
|
+
const { extension } = this.#options;
|
|
28
|
+
const _path = path instanceof URL ? fileURLToPath(path) : path;
|
|
29
|
+
let result = _path;
|
|
30
|
+
if (extension && !_path.endsWith(extension)) {
|
|
31
|
+
result = `${dirname(result)}/${basename(result, fileExtension)}${extension}`;
|
|
32
|
+
}
|
|
33
|
+
result = relative(relativeTo instanceof URL ? fileURLToPath(relativeTo) : relativeTo, result).replaceAll(sep, posix.sep);
|
|
34
|
+
return result.startsWith(".") ? result : `./${result}`;
|
|
35
|
+
}
|
|
36
|
+
createTSAliasModulePath(path, root = this.#options.aliasRoot) {
|
|
37
|
+
return root ? `${root}/${path}` : path;
|
|
38
|
+
}
|
|
42
39
|
}
|
|
43
|
-
|
|
44
|
-
PathManager as default
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=PathManager.js.map
|
|
40
|
+
//# sourceMappingURL=./PathManager.js.map
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/dependencies/PathManager.ts"],
|
|
4
|
-
"sourcesContent": ["import { basename, dirname, posix, relative, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { SetRequired } from 'type-fest';\n\nexport type PathManagerOptions = Readonly<{\n aliasRoot?: string;\n extension?: string;\n relativeTo?: URL | string;\n}>;\n\nexport default class PathManager {\n readonly #options: SetRequired<PathManagerOptions, 'relativeTo'>;\n\n constructor(options?: PathManagerOptions) {\n let extension: string | undefined;\n\n if (options?.extension) {\n extension = options.extension.startsWith('.') ? options.extension : `.${options.extension}`;\n }\n\n this.#options = {\n ...options,\n extension,\n relativeTo: options?.relativeTo ?? '.',\n };\n }\n\n get aliasRoot(): string | undefined {\n return this.#options.aliasRoot;\n }\n\n createBareModulePath(path: string, isFile = false): string {\n const { extension } = this.#options;\n\n if (extension && isFile) {\n return `${path}.${extension}`;\n }\n\n return path;\n }\n\n createRelativePath(path: URL | string, fileExtension?: string, relativeTo = this.#options.relativeTo): string {\n const { extension } = this.#options;\n const _path = path instanceof URL ? fileURLToPath(path) : path;\n let result = _path;\n\n if (extension && !_path.endsWith(extension)) {\n result = `${dirname(result)}/${basename(result, fileExtension)}${extension}`;\n }\n\n result = relative(relativeTo instanceof URL ? fileURLToPath(relativeTo) : relativeTo, result).replaceAll(\n sep,\n posix.sep,\n );\n return result.startsWith('.') ? result : `./${result}`;\n }\n\n createTSAliasModulePath(path: string, root = this.#options.aliasRoot): string {\n return root ? `${root}/${path}` : path;\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,SAAS,OAAO,UAAU,WAAW;AACxD,SAAS,qBAAqB;AAS9B,MAAO,YAA0B;AAAA,EACtB;AAAA,EAET,YAAY,SAA8B;AACxC,QAAI;AAEJ,QAAI,SAAS,WAAW;AACtB,kBAAY,QAAQ,UAAU,WAAW,GAAG,IAAI,QAAQ,YAAY,IAAI,QAAQ,SAAS;AAAA,IAC3F;AAEA,SAAK,WAAW;AAAA,MACd,GAAG;AAAA,MACH;AAAA,MACA,YAAY,SAAS,cAAc;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,IAAI,YAAgC;AAClC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,qBAAqB,MAAc,SAAS,OAAe;AACzD,UAAM,EAAE,UAAU,IAAI,KAAK;AAE3B,QAAI,aAAa,QAAQ;AACvB,aAAO,GAAG,IAAI,IAAI,SAAS;AAAA,IAC7B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,MAAoB,eAAwB,aAAa,KAAK,SAAS,YAAoB;AAC5G,UAAM,EAAE,UAAU,IAAI,KAAK;AAC3B,UAAM,QAAQ,gBAAgB,MAAM,cAAc,IAAI,IAAI;AAC1D,QAAI,SAAS;AAEb,QAAI,aAAa,CAAC,MAAM,SAAS,SAAS,GAAG;AAC3C,eAAS,GAAG,QAAQ,MAAM,CAAC,IAAI,SAAS,QAAQ,aAAa,CAAC,GAAG,SAAS;AAAA,IAC5E;AAEA,aAAS,SAAS,sBAAsB,MAAM,cAAc,UAAU,IAAI,YAAY,MAAM,EAAE;AAAA,MAC5F;AAAA,MACA,MAAM;AAAA,IACR;AACA,WAAO,OAAO,WAAW,GAAG,IAAI,SAAS,KAAK,MAAM;AAAA,EACtD;AAAA,EAEA,wBAAwB,MAAc,OAAO,KAAK,SAAS,WAAmB;AAC5E,WAAO,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK;AAAA,EACpC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
1
|
+
{"mappings":"AAAA,SAAS,UAAU,SAAS,OAAO,UAAU,sBAAuB;AACpE,SAAS,+BAAgC;AASzC,eAAe,MAAM,YAAY;CAC/B,AAASA;CAET,YAAYC,SAA8B;EACxC,IAAIC;AAEJ,MAAI,SAAS,WAAW;AACtB,eAAY,QAAQ,UAAU,WAAW,IAAI,GAAG,QAAQ,aAAa,GAAG,QAAQ,UAAU;EAC3F;AAED,OAAKF,WAAW;GACd,GAAG;GACH;GACA,YAAY,SAAS,cAAc;EACpC;CACF;CAED,IAAI,YAAgC;AAClC,SAAO,KAAKA,SAAS;CACtB;CAED,qBAAqBG,MAAc,SAAS,OAAe;EACzD,MAAM,EAAE,WAAW,GAAG,KAAKH;AAE3B,MAAI,aAAa,QAAQ;AACvB,WAAQ,EAAE,KAAK,GAAG,UAAU;EAC7B;AAED,SAAO;CACR;CAED,mBACEI,MACAC,eACAC,aAA2B,KAAKN,SAAS,YACjC;EACR,MAAM,EAAE,WAAW,GAAG,KAAKA;EAC3B,MAAM,QAAQ,gBAAgB,MAAM,cAAc,KAAK,GAAG;EAC1D,IAAI,SAAS;AAEb,MAAI,cAAc,MAAM,SAAS,UAAU,EAAE;AAC3C,aAAU,EAAE,QAAQ,OAAO,CAAC,GAAG,SAAS,QAAQ,cAAc,CAAC,EAAE,UAAU;EAC5E;AAED,WAAS,SAAS,sBAAsB,MAAM,cAAc,WAAW,GAAG,YAAY,OAAO,CAAC,WAC5F,KACA,MAAM,IACP;AACD,SAAO,OAAO,WAAW,IAAI,GAAG,UAAU,IAAI,OAAO;CACtD;CAED,wBAAwBG,MAAcI,OAA2B,KAAKP,SAAS,WAAmB;AAChG,SAAO,QAAQ,EAAE,KAAK,GAAG,KAAK,IAAI;CACnC;AACF","names":["#options","options?: PathManagerOptions","extension: string | undefined","path: string","path: URL | string","fileExtension?: string","relativeTo: string | URL","root: string | undefined"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/PathManager.ts"],"sourcesContent":["import { basename, dirname, posix, relative, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { SetRequired } from 'type-fest';\n\nexport type PathManagerOptions = Readonly<{\n aliasRoot?: string;\n extension?: string;\n relativeTo?: URL | string;\n}>;\n\nexport default class PathManager {\n readonly #options: SetRequired<PathManagerOptions, 'relativeTo'>;\n\n constructor(options?: PathManagerOptions) {\n let extension: string | undefined;\n\n if (options?.extension) {\n extension = options.extension.startsWith('.') ? options.extension : `.${options.extension}`;\n }\n\n this.#options = {\n ...options,\n extension,\n relativeTo: options?.relativeTo ?? '.',\n };\n }\n\n get aliasRoot(): string | undefined {\n return this.#options.aliasRoot;\n }\n\n createBareModulePath(path: string, isFile = false): string {\n const { extension } = this.#options;\n\n if (extension && isFile) {\n return `${path}.${extension}`;\n }\n\n return path;\n }\n\n createRelativePath(\n path: URL | string,\n fileExtension?: string,\n relativeTo: string | URL = this.#options.relativeTo,\n ): string {\n const { extension } = this.#options;\n const _path = path instanceof URL ? fileURLToPath(path) : path;\n let result = _path;\n\n if (extension && !_path.endsWith(extension)) {\n result = `${dirname(result)}/${basename(result, fileExtension)}${extension}`;\n }\n\n result = relative(relativeTo instanceof URL ? fileURLToPath(relativeTo) : relativeTo, result).replaceAll(\n sep,\n posix.sep,\n );\n return result.startsWith('.') ? result : `./${result}`;\n }\n\n createTSAliasModulePath(path: string, root: string | undefined = this.#options.aliasRoot): string {\n return root ? `${root}/${path}` : path;\n }\n}\n"],"version":3}
|