@tamagui/language-service 0.0.0-bootstrap.0 → 3.0.0-beta.643.1
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/README.md +140 -1
- package/dist/cjs/check.cjs +173 -0
- package/dist/cjs/check.native.cjs +369 -0
- package/dist/cjs/check.native.js +371 -0
- package/dist/cjs/check.native.js.map +1 -0
- package/dist/cjs/core.cjs +221 -0
- package/dist/cjs/core.native.cjs +305 -0
- package/dist/cjs/core.native.js +307 -0
- package/dist/cjs/core.native.js.map +1 -0
- package/dist/cjs/document.cjs +82 -0
- package/dist/cjs/document.native.cjs +158 -0
- package/dist/cjs/document.native.js +160 -0
- package/dist/cjs/document.native.js.map +1 -0
- package/dist/cjs/extract-estree.cjs +193 -0
- package/dist/cjs/extract-estree.native.cjs +296 -0
- package/dist/cjs/extract-estree.native.js +298 -0
- package/dist/cjs/extract-estree.native.js.map +1 -0
- package/dist/cjs/extract-sucrase.cjs +222 -0
- package/dist/cjs/extract-sucrase.native.cjs +256 -0
- package/dist/cjs/extract-sucrase.native.js +258 -0
- package/dist/cjs/extract-sucrase.native.js.map +1 -0
- package/dist/cjs/host.cjs +38 -0
- package/dist/cjs/host.native.cjs +61 -0
- package/dist/cjs/host.native.js +63 -0
- package/dist/cjs/host.native.js.map +1 -0
- package/dist/cjs/index.cjs +301 -0
- package/dist/cjs/index.native.cjs +414 -0
- package/dist/cjs/index.native.js +416 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/esm/check.mjs +148 -0
- package/dist/esm/check.mjs.map +1 -0
- package/dist/esm/check.native.js +342 -0
- package/dist/esm/check.native.js.map +1 -0
- package/dist/esm/core.mjs +198 -0
- package/dist/esm/core.mjs.map +1 -0
- package/dist/esm/core.native.js +280 -0
- package/dist/esm/core.native.js.map +1 -0
- package/dist/esm/document.mjs +61 -0
- package/dist/esm/document.mjs.map +1 -0
- package/dist/esm/document.native.js +135 -0
- package/dist/esm/document.native.js.map +1 -0
- package/dist/esm/extract-estree.mjs +172 -0
- package/dist/esm/extract-estree.mjs.map +1 -0
- package/dist/esm/extract-estree.native.js +273 -0
- package/dist/esm/extract-estree.native.js.map +1 -0
- package/dist/esm/extract-sucrase.mjs +201 -0
- package/dist/esm/extract-sucrase.mjs.map +1 -0
- package/dist/esm/extract-sucrase.native.js +233 -0
- package/dist/esm/extract-sucrase.native.js.map +1 -0
- package/dist/esm/host.mjs +17 -0
- package/dist/esm/host.mjs.map +1 -0
- package/dist/esm/host.native.js +38 -0
- package/dist/esm/host.native.js.map +1 -0
- package/dist/esm/index.mjs +281 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +392 -0
- package/dist/esm/index.native.js.map +1 -0
- package/index.cjs +1 -0
- package/package.json +79 -7
- package/src/check.ts +204 -0
- package/src/core.ts +355 -0
- package/src/document.ts +140 -0
- package/src/extract-estree.ts +251 -0
- package/src/extract-sucrase.ts +308 -0
- package/src/host.ts +32 -0
- package/src/index.ts +452 -0
- package/types/check.d.ts +31 -0
- package/types/check.d.ts.map +11 -0
- package/types/core.d.ts +68 -0
- package/types/core.d.ts.map +11 -0
- package/types/document.d.ts +42 -0
- package/types/document.d.ts.map +11 -0
- package/types/extract-estree.d.ts +19 -0
- package/types/extract-estree.d.ts.map +11 -0
- package/types/extract-sucrase.d.ts +26 -0
- package/types/extract-sucrase.d.ts.map +11 -0
- package/types/host.d.ts +10 -0
- package/types/host.d.ts.map +11 -0
- package/types/index.d.ts +9 -0
- package/types/index.d.ts.map +11 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all) __defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
17
|
+
get: () => from[key],
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var index_exports = {};
|
|
25
|
+
__export(index_exports, { default: () => index_default });
|
|
26
|
+
module.exports = __toCommonJS(index_exports);
|
|
27
|
+
var import_path = require("path");
|
|
28
|
+
var import_core = require("./core.native.js");
|
|
29
|
+
var import_host = require("./host.native.js");
|
|
30
|
+
var completionSource = "@tamagui/language-service";
|
|
31
|
+
var diagnosticCode = 78711;
|
|
32
|
+
var defaultConfigPath = ".tamagui/tamagui.config.json";
|
|
33
|
+
var flatStyledModules = /* @__PURE__ */ new Set([
|
|
34
|
+
"tamagui",
|
|
35
|
+
"tamagui/unstyled",
|
|
36
|
+
"@tamagui/core",
|
|
37
|
+
"@tamagui/ui",
|
|
38
|
+
"@tamagui/web"
|
|
39
|
+
]);
|
|
40
|
+
function loadTooling(info, configPath) {
|
|
41
|
+
var contents = info.serverHost.readFile(configPath);
|
|
42
|
+
if (contents === void 0) return null;
|
|
43
|
+
try {
|
|
44
|
+
return (0, import_core.createStyleTooling)(JSON.parse(contents));
|
|
45
|
+
} catch (e) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function findStringLiteralAtPosition(typescript, sourceFile, position) {
|
|
50
|
+
var found = null;
|
|
51
|
+
var visit = function(node) {
|
|
52
|
+
if (position < node.getFullStart() || position > node.getEnd()) return;
|
|
53
|
+
if (typescript.isStringLiteralLike(node) && position >= node.getStart(sourceFile) + 1 && position <= node.getEnd() - 1) {
|
|
54
|
+
found = node;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
typescript.forEachChild(node, visit);
|
|
58
|
+
};
|
|
59
|
+
visit(sourceFile);
|
|
60
|
+
return found;
|
|
61
|
+
}
|
|
62
|
+
function importedBindings(typescript, sourceFile) {
|
|
63
|
+
var styled = /* @__PURE__ */ new Set();
|
|
64
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
65
|
+
try {
|
|
66
|
+
for (var _iterator = sourceFile.statements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
67
|
+
var statement = _step.value;
|
|
68
|
+
var _statement_importClause;
|
|
69
|
+
if (!typescript.isImportDeclaration(statement) || !typescript.isStringLiteral(statement.moduleSpecifier)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
var source = statement.moduleSpecifier.text;
|
|
73
|
+
if (!flatStyledModules.has(source)) continue;
|
|
74
|
+
var bindings = (_statement_importClause = statement.importClause) === null || _statement_importClause === void 0 ? void 0 : _statement_importClause.namedBindings;
|
|
75
|
+
if (!bindings) continue;
|
|
76
|
+
if (typescript.isNamespaceImport(bindings)) continue;
|
|
77
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
78
|
+
try {
|
|
79
|
+
for (var _iterator1 = bindings.elements[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
80
|
+
var element = _step1.value;
|
|
81
|
+
var _element_propertyName;
|
|
82
|
+
var imported = ((_element_propertyName = element.propertyName) === null || _element_propertyName === void 0 ? void 0 : _element_propertyName.text) || element.name.text;
|
|
83
|
+
if (imported === "styled") styled.add(element.name.text);
|
|
84
|
+
}
|
|
85
|
+
} catch (err) {
|
|
86
|
+
_didIteratorError1 = true;
|
|
87
|
+
_iteratorError1 = err;
|
|
88
|
+
} finally {
|
|
89
|
+
try {
|
|
90
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
91
|
+
_iterator1.return();
|
|
92
|
+
}
|
|
93
|
+
} finally {
|
|
94
|
+
if (_didIteratorError1) {
|
|
95
|
+
throw _iteratorError1;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
} catch (err) {
|
|
101
|
+
_didIteratorError = true;
|
|
102
|
+
_iteratorError = err;
|
|
103
|
+
} finally {
|
|
104
|
+
try {
|
|
105
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
106
|
+
_iterator.return();
|
|
107
|
+
}
|
|
108
|
+
} finally {
|
|
109
|
+
if (_didIteratorError) {
|
|
110
|
+
throw _iteratorError;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { styled };
|
|
115
|
+
}
|
|
116
|
+
function propertyName(typescript, name) {
|
|
117
|
+
if (typescript.isIdentifier(name) || typescript.isStringLiteral(name)) {
|
|
118
|
+
return name.text;
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
function completionProperty(typescript, literal, tooling, checker, bindings) {
|
|
123
|
+
var parent = literal.parent;
|
|
124
|
+
if (typescript.isJsxExpression(parent)) parent = parent.parent;
|
|
125
|
+
if (typescript.isJsxAttribute(parent)) {
|
|
126
|
+
if (!typescript.isIdentifier(parent.name)) return null;
|
|
127
|
+
var property = parent.name.text;
|
|
128
|
+
if (!tooling.styleProps.has(property)) return null;
|
|
129
|
+
var opening = parent.parent.parent;
|
|
130
|
+
if (!typescript.isJsxOpeningLikeElement(opening)) return null;
|
|
131
|
+
var host = (0, import_host.resolveTamaguiHost)(checker, opening.tagName);
|
|
132
|
+
if (!(host === null || host === void 0 ? void 0 : host.accepts(property))) return null;
|
|
133
|
+
return { property };
|
|
134
|
+
}
|
|
135
|
+
if (!typescript.isPropertyAssignment(parent)) return null;
|
|
136
|
+
var property1 = propertyName(typescript, parent.name);
|
|
137
|
+
if (!property1 || !tooling.styleProps.has(property1)) return null;
|
|
138
|
+
var current = parent;
|
|
139
|
+
while (current.parent && !typescript.isCallExpression(current.parent)) {
|
|
140
|
+
current = current.parent;
|
|
141
|
+
}
|
|
142
|
+
if (!current.parent || !typescript.isCallExpression(current.parent)) return null;
|
|
143
|
+
var call = current.parent;
|
|
144
|
+
if (call.arguments[1] !== current || !typescript.isIdentifier(call.expression) || !bindings.styled.has(call.expression.text)) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
var component = call.arguments[0];
|
|
148
|
+
var host1 = component && (0, import_host.resolveTamaguiHost)(checker, component);
|
|
149
|
+
if (!(host1 === null || host1 === void 0 ? void 0 : host1.accepts(property1))) return null;
|
|
150
|
+
return { property: property1 };
|
|
151
|
+
}
|
|
152
|
+
function siteForLiteral(typescript, sourceFile, literal, tooling, checker, bindings) {
|
|
153
|
+
var site = completionProperty(typescript, literal, tooling, checker, bindings);
|
|
154
|
+
if (!site) return null;
|
|
155
|
+
var contentStart = literal.getStart(sourceFile) + 1;
|
|
156
|
+
var contentEnd = literal.getEnd() - 1;
|
|
157
|
+
var sourceInput = sourceFile.text.slice(contentStart, contentEnd);
|
|
158
|
+
if (literal.text !== sourceInput) return null;
|
|
159
|
+
return {
|
|
160
|
+
property: site.property,
|
|
161
|
+
value: literal.text,
|
|
162
|
+
contentStart,
|
|
163
|
+
literal
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function collectLiteralSites(typescript, sourceFile, tooling, checker, bindings) {
|
|
167
|
+
var sites = [];
|
|
168
|
+
var visit = function(node) {
|
|
169
|
+
if (typescript.isStringLiteralLike(node)) {
|
|
170
|
+
var site = siteForLiteral(typescript, sourceFile, node, tooling, checker, bindings);
|
|
171
|
+
if (site) sites.push(site);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
typescript.forEachChild(node, visit);
|
|
175
|
+
};
|
|
176
|
+
visit(sourceFile);
|
|
177
|
+
return sites;
|
|
178
|
+
}
|
|
179
|
+
function copyLanguageService(service) {
|
|
180
|
+
var proxy = /* @__PURE__ */ Object.create(null);
|
|
181
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
182
|
+
try {
|
|
183
|
+
for (var _iterator = Object.keys(service)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
184
|
+
var key = _step.value;
|
|
185
|
+
var value = service[key];
|
|
186
|
+
proxy[key] = typeof value === "function" ? value.bind(service) : value;
|
|
187
|
+
}
|
|
188
|
+
} catch (err) {
|
|
189
|
+
_didIteratorError = true;
|
|
190
|
+
_iteratorError = err;
|
|
191
|
+
} finally {
|
|
192
|
+
try {
|
|
193
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
194
|
+
_iterator.return();
|
|
195
|
+
}
|
|
196
|
+
} finally {
|
|
197
|
+
if (_didIteratorError) {
|
|
198
|
+
throw _iteratorError;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return proxy;
|
|
203
|
+
}
|
|
204
|
+
var init = function(param) {
|
|
205
|
+
var { typescript } = param;
|
|
206
|
+
return { create(info) {
|
|
207
|
+
var pluginConfig = info.config;
|
|
208
|
+
var configuredPath = (pluginConfig === null || pluginConfig === void 0 ? void 0 : pluginConfig.configPath) || defaultConfigPath;
|
|
209
|
+
var configPath = (0, import_path.isAbsolute)(configuredPath) ? configuredPath : (0, import_path.resolve)(info.project.getCurrentDirectory(), configuredPath);
|
|
210
|
+
var tooling = loadTooling(info, configPath);
|
|
211
|
+
var watcher = info.serverHost.watchFile(configPath, function() {
|
|
212
|
+
tooling = loadTooling(info, configPath);
|
|
213
|
+
});
|
|
214
|
+
var proxy = copyLanguageService(info.languageService);
|
|
215
|
+
var baseCompletions = info.languageService.getCompletionsAtPosition.bind(info.languageService);
|
|
216
|
+
var baseDetails = info.languageService.getCompletionEntryDetails.bind(info.languageService);
|
|
217
|
+
var baseSemanticDiagnostics = info.languageService.getSemanticDiagnostics.bind(info.languageService);
|
|
218
|
+
var baseQuickInfo = info.languageService.getQuickInfoAtPosition.bind(info.languageService);
|
|
219
|
+
var baseDispose = info.languageService.dispose.bind(info.languageService);
|
|
220
|
+
var bindingsBySourceFile = /* @__PURE__ */ new WeakMap();
|
|
221
|
+
var fileContext = function(fileName) {
|
|
222
|
+
var program = info.languageService.getProgram();
|
|
223
|
+
var sourceFile = program === null || program === void 0 ? void 0 : program.getSourceFile(fileName);
|
|
224
|
+
if (!program || !sourceFile) return null;
|
|
225
|
+
var bindings = bindingsBySourceFile.get(sourceFile);
|
|
226
|
+
if (!bindings) {
|
|
227
|
+
bindings = importedBindings(typescript, sourceFile);
|
|
228
|
+
bindingsBySourceFile.set(sourceFile, bindings);
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
sourceFile,
|
|
232
|
+
checker: program.getTypeChecker(),
|
|
233
|
+
bindings
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
proxy.getCompletionsAtPosition = function(fileName, position, options, formattingSettings) {
|
|
237
|
+
var getBaseCompletions = function() {
|
|
238
|
+
return baseCompletions(fileName, position, options, formattingSettings);
|
|
239
|
+
};
|
|
240
|
+
if (!tooling) return getBaseCompletions();
|
|
241
|
+
var context = fileContext(fileName);
|
|
242
|
+
if (!context) return getBaseCompletions();
|
|
243
|
+
var { sourceFile, checker, bindings } = context;
|
|
244
|
+
var literal = findStringLiteralAtPosition(typescript, sourceFile, position);
|
|
245
|
+
if (!literal) return getBaseCompletions();
|
|
246
|
+
var site = siteForLiteral(typescript, sourceFile, literal, tooling, checker, bindings);
|
|
247
|
+
if (!site) return getBaseCompletions();
|
|
248
|
+
var cursorCompletions = tooling.completions(site.property, site.value, position - site.contentStart);
|
|
249
|
+
if (!cursorCompletions) return getBaseCompletions();
|
|
250
|
+
var replacementSpan = {
|
|
251
|
+
start: site.contentStart + cursorCompletions.replaceStart,
|
|
252
|
+
length: cursorCompletions.replaceLength
|
|
253
|
+
};
|
|
254
|
+
var entries = [];
|
|
255
|
+
var contextualType;
|
|
256
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
257
|
+
try {
|
|
258
|
+
for (var _iterator = cursorCompletions.completions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
259
|
+
var completion = _step.value;
|
|
260
|
+
var insertText = completion.insertText || completion.value;
|
|
261
|
+
var modifierKind = completion.kind === "modifier" ? tooling.modifierKind(completion.value) : void 0;
|
|
262
|
+
if (completion.kind === "keyword") {
|
|
263
|
+
contextualType || (contextualType = checker.getContextualType(literal));
|
|
264
|
+
if (!contextualType || !checker.isTypeAssignableTo(checker.getStringLiteralType(insertText), contextualType)) {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
entries.push({
|
|
269
|
+
name: completion.value,
|
|
270
|
+
kind: typescript.ScriptElementKind.string,
|
|
271
|
+
kindModifiers: "",
|
|
272
|
+
sortText: (0, import_core.completionSortText)(completion, modifierKind),
|
|
273
|
+
insertText,
|
|
274
|
+
replacementSpan,
|
|
275
|
+
source: completionSource,
|
|
276
|
+
labelDetails: { description: modifierKind ? `Tamagui ${modifierKind} modifier` : completion.kind === "configured" ? "Tamagui configured value" : "Tamagui style keyword" }
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
} catch (err) {
|
|
280
|
+
_didIteratorError = true;
|
|
281
|
+
_iteratorError = err;
|
|
282
|
+
} finally {
|
|
283
|
+
try {
|
|
284
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
285
|
+
_iterator.return();
|
|
286
|
+
}
|
|
287
|
+
} finally {
|
|
288
|
+
if (_didIteratorError) {
|
|
289
|
+
throw _iteratorError;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (entries.length === 0) return getBaseCompletions();
|
|
294
|
+
return {
|
|
295
|
+
isGlobalCompletion: false,
|
|
296
|
+
isMemberCompletion: false,
|
|
297
|
+
isNewIdentifierLocation: true,
|
|
298
|
+
isIncomplete: true,
|
|
299
|
+
entries
|
|
300
|
+
};
|
|
301
|
+
};
|
|
302
|
+
proxy.getCompletionEntryDetails = function(fileName, position, entryName, formatOptions, source, preferences, data) {
|
|
303
|
+
if (source === completionSource) {
|
|
304
|
+
return {
|
|
305
|
+
name: entryName,
|
|
306
|
+
kind: typescript.ScriptElementKind.string,
|
|
307
|
+
kindModifiers: "",
|
|
308
|
+
displayParts: [{
|
|
309
|
+
text: entryName,
|
|
310
|
+
kind: "stringLiteral"
|
|
311
|
+
}],
|
|
312
|
+
documentation: [{
|
|
313
|
+
text: "Resolved from the active Tamagui config.",
|
|
314
|
+
kind: "text"
|
|
315
|
+
}],
|
|
316
|
+
tags: []
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
return baseDetails(fileName, position, entryName, formatOptions, source, preferences, data);
|
|
320
|
+
};
|
|
321
|
+
proxy.getSemanticDiagnostics = function(fileName) {
|
|
322
|
+
var diagnostics = [...baseSemanticDiagnostics(fileName)];
|
|
323
|
+
if (!tooling) return diagnostics;
|
|
324
|
+
var context = fileContext(fileName);
|
|
325
|
+
if (!context) return diagnostics;
|
|
326
|
+
var { sourceFile, checker, bindings } = context;
|
|
327
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
328
|
+
try {
|
|
329
|
+
for (var _iterator = collectLiteralSites(typescript, sourceFile, tooling, checker, bindings)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
330
|
+
var site = _step.value;
|
|
331
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
332
|
+
try {
|
|
333
|
+
for (var _iterator1 = tooling.diagnostics(site.property, site.value)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
334
|
+
var diagnostic = _step1.value;
|
|
335
|
+
diagnostics.push({
|
|
336
|
+
file: sourceFile,
|
|
337
|
+
start: site.contentStart + diagnostic.start,
|
|
338
|
+
length: Math.max(1, diagnostic.end - diagnostic.start),
|
|
339
|
+
messageText: diagnostic.message,
|
|
340
|
+
category: typescript.DiagnosticCategory.Error,
|
|
341
|
+
code: diagnosticCode,
|
|
342
|
+
source: completionSource
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
} catch (err) {
|
|
346
|
+
_didIteratorError1 = true;
|
|
347
|
+
_iteratorError1 = err;
|
|
348
|
+
} finally {
|
|
349
|
+
try {
|
|
350
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
351
|
+
_iterator1.return();
|
|
352
|
+
}
|
|
353
|
+
} finally {
|
|
354
|
+
if (_didIteratorError1) {
|
|
355
|
+
throw _iteratorError1;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
} catch (err) {
|
|
361
|
+
_didIteratorError = true;
|
|
362
|
+
_iteratorError = err;
|
|
363
|
+
} finally {
|
|
364
|
+
try {
|
|
365
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
366
|
+
_iterator.return();
|
|
367
|
+
}
|
|
368
|
+
} finally {
|
|
369
|
+
if (_didIteratorError) {
|
|
370
|
+
throw _iteratorError;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return diagnostics;
|
|
375
|
+
};
|
|
376
|
+
proxy.getQuickInfoAtPosition = function(fileName, position) {
|
|
377
|
+
var getBaseQuickInfo = function() {
|
|
378
|
+
return baseQuickInfo(fileName, position);
|
|
379
|
+
};
|
|
380
|
+
if (!tooling) return getBaseQuickInfo();
|
|
381
|
+
var context = fileContext(fileName);
|
|
382
|
+
if (!context) return getBaseQuickInfo();
|
|
383
|
+
var { sourceFile, checker, bindings } = context;
|
|
384
|
+
var literal = findStringLiteralAtPosition(typescript, sourceFile, position);
|
|
385
|
+
if (!literal) return getBaseQuickInfo();
|
|
386
|
+
var site = siteForLiteral(typescript, sourceFile, literal, tooling, checker, bindings);
|
|
387
|
+
if (!site) return getBaseQuickInfo();
|
|
388
|
+
var hover = tooling.hover(site.property, site.value, position - site.contentStart);
|
|
389
|
+
if (!hover) return getBaseQuickInfo();
|
|
390
|
+
return {
|
|
391
|
+
kind: typescript.ScriptElementKind.string,
|
|
392
|
+
kindModifiers: "",
|
|
393
|
+
textSpan: {
|
|
394
|
+
start: site.contentStart + hover.start,
|
|
395
|
+
length: hover.end - hover.start
|
|
396
|
+
},
|
|
397
|
+
displayParts: [{
|
|
398
|
+
text: hover.text,
|
|
399
|
+
kind: "stringLiteral"
|
|
400
|
+
}],
|
|
401
|
+
documentation: [{
|
|
402
|
+
text: hover.markdown,
|
|
403
|
+
kind: "text"
|
|
404
|
+
}]
|
|
405
|
+
};
|
|
406
|
+
};
|
|
407
|
+
proxy.dispose = function() {
|
|
408
|
+
watcher.close();
|
|
409
|
+
baseDispose();
|
|
410
|
+
};
|
|
411
|
+
return proxy;
|
|
412
|
+
} };
|
|
413
|
+
};
|
|
414
|
+
var index_default = init;
|
|
415
|
+
|
|
416
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.native.js","names":[],"sources":["cjs/index.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar index_exports = {};\n__export(index_exports, {\n default: () => index_default\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_path = require(\"path\");\nvar import_core = require(\"./core\");\nvar import_host = require(\"./host\");\nvar completionSource = \"@tamagui/language-service\";\nvar diagnosticCode = 78711;\nvar defaultConfigPath = \".tamagui/tamagui.config.json\";\nvar flatStyledModules = /* @__PURE__ */ new Set([\n \"tamagui\",\n \"tamagui/unstyled\",\n \"@tamagui/core\",\n \"@tamagui/ui\",\n \"@tamagui/web\"\n]);\nfunction loadTooling(info, configPath) {\n var contents = info.serverHost.readFile(configPath);\n if (contents === void 0) return null;\n try {\n return (0, import_core.createStyleTooling)(JSON.parse(contents));\n } catch (e) {\n return null;\n }\n}\nfunction findStringLiteralAtPosition(typescript, sourceFile, position) {\n var found = null;\n var visit = function(node) {\n if (position < node.getFullStart() || position > node.getEnd()) return;\n if (typescript.isStringLiteralLike(node) && position >= node.getStart(sourceFile) + 1 && position <= node.getEnd() - 1) {\n found = node;\n return;\n }\n typescript.forEachChild(node, visit);\n };\n visit(sourceFile);\n return found;\n}\nfunction importedBindings(typescript, sourceFile) {\n var styled = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = sourceFile.statements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var statement = _step.value;\n var _statement_importClause;\n if (!typescript.isImportDeclaration(statement) || !typescript.isStringLiteral(statement.moduleSpecifier)) {\n continue;\n }\n var source = statement.moduleSpecifier.text;\n if (!flatStyledModules.has(source)) continue;\n var bindings = (_statement_importClause = statement.importClause) === null || _statement_importClause === void 0 ? void 0 : _statement_importClause.namedBindings;\n if (!bindings) continue;\n if (typescript.isNamespaceImport(bindings)) continue;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = bindings.elements[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var element = _step1.value;\n var _element_propertyName;\n var imported = ((_element_propertyName = element.propertyName) === null || _element_propertyName === void 0 ? void 0 : _element_propertyName.text) || element.name.text;\n if (imported === \"styled\") styled.add(element.name.text);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return {\n styled\n };\n}\nfunction propertyName(typescript, name) {\n if (typescript.isIdentifier(name) || typescript.isStringLiteral(name)) {\n return name.text;\n }\n return null;\n}\nfunction completionProperty(typescript, literal, tooling, checker, bindings) {\n var parent = literal.parent;\n if (typescript.isJsxExpression(parent)) parent = parent.parent;\n if (typescript.isJsxAttribute(parent)) {\n if (!typescript.isIdentifier(parent.name)) return null;\n var property = parent.name.text;\n if (!tooling.styleProps.has(property)) return null;\n var opening = parent.parent.parent;\n if (!typescript.isJsxOpeningLikeElement(opening)) return null;\n var host = (0, import_host.resolveTamaguiHost)(checker, opening.tagName);\n if (!(host === null || host === void 0 ? void 0 : host.accepts(property))) return null;\n return {\n property\n };\n }\n if (!typescript.isPropertyAssignment(parent)) return null;\n var property1 = propertyName(typescript, parent.name);\n if (!property1 || !tooling.styleProps.has(property1)) return null;\n var current = parent;\n while (current.parent && !typescript.isCallExpression(current.parent)) {\n current = current.parent;\n }\n if (!current.parent || !typescript.isCallExpression(current.parent)) return null;\n var call = current.parent;\n if (call.arguments[1] !== current || !typescript.isIdentifier(call.expression) || !bindings.styled.has(call.expression.text)) {\n return null;\n }\n var component = call.arguments[0];\n var host1 = component && (0, import_host.resolveTamaguiHost)(checker, component);\n if (!(host1 === null || host1 === void 0 ? void 0 : host1.accepts(property1))) return null;\n return {\n property: property1\n };\n}\nfunction siteForLiteral(typescript, sourceFile, literal, tooling, checker, bindings) {\n var site = completionProperty(typescript, literal, tooling, checker, bindings);\n if (!site) return null;\n var contentStart = literal.getStart(sourceFile) + 1;\n var contentEnd = literal.getEnd() - 1;\n var sourceInput = sourceFile.text.slice(contentStart, contentEnd);\n if (literal.text !== sourceInput) return null;\n return {\n property: site.property,\n value: literal.text,\n contentStart,\n literal\n };\n}\nfunction collectLiteralSites(typescript, sourceFile, tooling, checker, bindings) {\n var sites = [];\n var visit = function(node) {\n if (typescript.isStringLiteralLike(node)) {\n var site = siteForLiteral(typescript, sourceFile, node, tooling, checker, bindings);\n if (site) sites.push(site);\n return;\n }\n typescript.forEachChild(node, visit);\n };\n visit(sourceFile);\n return sites;\n}\nfunction copyLanguageService(service) {\n var proxy = /* @__PURE__ */ Object.create(null);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = Object.keys(service)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n var value = service[key];\n proxy[key] = typeof value === \"function\" ? value.bind(service) : value;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return proxy;\n}\nvar init = function(param) {\n var { typescript } = param;\n return {\n create(info) {\n var pluginConfig = info.config;\n var configuredPath = (pluginConfig === null || pluginConfig === void 0 ? void 0 : pluginConfig.configPath) || defaultConfigPath;\n var configPath = (0, import_path.isAbsolute)(configuredPath) ? configuredPath : (0, import_path.resolve)(info.project.getCurrentDirectory(), configuredPath);\n var tooling = loadTooling(info, configPath);\n var watcher = info.serverHost.watchFile(configPath, function() {\n tooling = loadTooling(info, configPath);\n });\n var proxy = copyLanguageService(info.languageService);\n var baseCompletions = info.languageService.getCompletionsAtPosition.bind(info.languageService);\n var baseDetails = info.languageService.getCompletionEntryDetails.bind(info.languageService);\n var baseSemanticDiagnostics = info.languageService.getSemanticDiagnostics.bind(info.languageService);\n var baseQuickInfo = info.languageService.getQuickInfoAtPosition.bind(info.languageService);\n var baseDispose = info.languageService.dispose.bind(info.languageService);\n var bindingsBySourceFile = /* @__PURE__ */ new WeakMap();\n var fileContext = function(fileName) {\n var program = info.languageService.getProgram();\n var sourceFile = program === null || program === void 0 ? void 0 : program.getSourceFile(fileName);\n if (!program || !sourceFile) return null;\n var bindings = bindingsBySourceFile.get(sourceFile);\n if (!bindings) {\n bindings = importedBindings(typescript, sourceFile);\n bindingsBySourceFile.set(sourceFile, bindings);\n }\n return {\n sourceFile,\n checker: program.getTypeChecker(),\n bindings\n };\n };\n proxy.getCompletionsAtPosition = function(fileName, position, options, formattingSettings) {\n var getBaseCompletions = function() {\n return baseCompletions(fileName, position, options, formattingSettings);\n };\n if (!tooling) return getBaseCompletions();\n var context = fileContext(fileName);\n if (!context) return getBaseCompletions();\n var { sourceFile, checker, bindings } = context;\n var literal = findStringLiteralAtPosition(typescript, sourceFile, position);\n if (!literal) return getBaseCompletions();\n var site = siteForLiteral(typescript, sourceFile, literal, tooling, checker, bindings);\n if (!site) return getBaseCompletions();\n var cursorCompletions = tooling.completions(site.property, site.value, position - site.contentStart);\n if (!cursorCompletions) return getBaseCompletions();\n var replacementSpan = {\n start: site.contentStart + cursorCompletions.replaceStart,\n length: cursorCompletions.replaceLength\n };\n var entries = [];\n var contextualType;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = cursorCompletions.completions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var completion = _step.value;\n var insertText = completion.insertText || completion.value;\n var modifierKind = completion.kind === \"modifier\" ? tooling.modifierKind(completion.value) : void 0;\n if (completion.kind === \"keyword\") {\n contextualType || (contextualType = checker.getContextualType(literal));\n if (!contextualType || !checker.isTypeAssignableTo(checker.getStringLiteralType(insertText), contextualType)) {\n continue;\n }\n }\n entries.push({\n name: completion.value,\n kind: typescript.ScriptElementKind.string,\n kindModifiers: \"\",\n sortText: (0, import_core.completionSortText)(completion, modifierKind),\n insertText,\n replacementSpan,\n source: completionSource,\n labelDetails: {\n description: modifierKind ? `Tamagui ${modifierKind} modifier` : completion.kind === \"configured\" ? \"Tamagui configured value\" : \"Tamagui style keyword\"\n }\n });\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (entries.length === 0) return getBaseCompletions();\n return {\n isGlobalCompletion: false,\n isMemberCompletion: false,\n isNewIdentifierLocation: true,\n // A completion requested immediately after whitespace has an empty\n // replacement span. Ask the editor to request again as the modifier\n // prefix grows instead of dismissing suggestions when the cursor\n // moves beyond that initial span.\n isIncomplete: true,\n entries\n };\n };\n proxy.getCompletionEntryDetails = function(fileName, position, entryName, formatOptions, source, preferences, data) {\n if (source === completionSource) {\n return {\n name: entryName,\n kind: typescript.ScriptElementKind.string,\n kindModifiers: \"\",\n displayParts: [\n {\n text: entryName,\n kind: \"stringLiteral\"\n }\n ],\n documentation: [\n {\n text: \"Resolved from the active Tamagui config.\",\n kind: \"text\"\n }\n ],\n tags: []\n };\n }\n return baseDetails(fileName, position, entryName, formatOptions, source, preferences, data);\n };\n proxy.getSemanticDiagnostics = function(fileName) {\n var diagnostics = [\n ...baseSemanticDiagnostics(fileName)\n ];\n if (!tooling) return diagnostics;\n var context = fileContext(fileName);\n if (!context) return diagnostics;\n var { sourceFile, checker, bindings } = context;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = collectLiteralSites(typescript, sourceFile, tooling, checker, bindings)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var site = _step.value;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = tooling.diagnostics(site.property, site.value)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var diagnostic = _step1.value;\n diagnostics.push({\n file: sourceFile,\n start: site.contentStart + diagnostic.start,\n length: Math.max(1, diagnostic.end - diagnostic.start),\n messageText: diagnostic.message,\n category: typescript.DiagnosticCategory.Error,\n code: diagnosticCode,\n source: completionSource\n });\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return diagnostics;\n };\n proxy.getQuickInfoAtPosition = function(fileName, position) {\n var getBaseQuickInfo = function() {\n return baseQuickInfo(fileName, position);\n };\n if (!tooling) return getBaseQuickInfo();\n var context = fileContext(fileName);\n if (!context) return getBaseQuickInfo();\n var { sourceFile, checker, bindings } = context;\n var literal = findStringLiteralAtPosition(typescript, sourceFile, position);\n if (!literal) return getBaseQuickInfo();\n var site = siteForLiteral(typescript, sourceFile, literal, tooling, checker, bindings);\n if (!site) return getBaseQuickInfo();\n var hover = tooling.hover(site.property, site.value, position - site.contentStart);\n if (!hover) return getBaseQuickInfo();\n return {\n kind: typescript.ScriptElementKind.string,\n kindModifiers: \"\",\n textSpan: {\n start: site.contentStart + hover.start,\n length: hover.end - hover.start\n },\n displayParts: [\n {\n text: hover.text,\n kind: \"stringLiteral\"\n }\n ],\n documentation: [\n {\n text: hover.markdown,\n kind: \"text\"\n }\n ]\n };\n };\n proxy.dispose = function() {\n watcher.close();\n baseDispose();\n };\n return proxy;\n }\n };\n};\nvar index_default = init;\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
|
+
import { parse } from "sucrase/dist/parser/index.js";
|
|
4
|
+
import { TokenType } from "sucrase/dist/parser/tokenizer/types.js";
|
|
5
|
+
import { createStyleTooling } from "./core.mjs";
|
|
6
|
+
import { createDocumentStyleTooling } from "./document.mjs";
|
|
7
|
+
import { createSucraseStyleSiteExtractor } from "./extract-sucrase.mjs";
|
|
8
|
+
|
|
9
|
+
const sourceExtensions = /\.(tsx|jsx)$/;
|
|
10
|
+
const skippedDirectories = /* @__PURE__ */ new Set([
|
|
11
|
+
"node_modules",
|
|
12
|
+
"dist",
|
|
13
|
+
"build",
|
|
14
|
+
"out",
|
|
15
|
+
"coverage",
|
|
16
|
+
".git",
|
|
17
|
+
".next",
|
|
18
|
+
".expo",
|
|
19
|
+
".tamagui"
|
|
20
|
+
]);
|
|
21
|
+
var MissingConfigArtifactError = class extends Error {
|
|
22
|
+
constructor(configPath) {
|
|
23
|
+
super(`no Tamagui config artifact at ${configPath} \u2014 run your dev server or \`tamagui generate\` once so the compiler emits it`);
|
|
24
|
+
this.name = "MissingConfigArtifactError";
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
function walkSourceFiles(directory, results) {
|
|
28
|
+
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
29
|
+
if (entry.isDirectory()) {
|
|
30
|
+
if (!skippedDirectories.has(entry.name) && !entry.name.startsWith(".")) {
|
|
31
|
+
walkSourceFiles(join(directory, entry.name), results);
|
|
32
|
+
}
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (sourceExtensions.test(entry.name)) results.push(join(directory, entry.name));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function createProjectExtractor(isStyleProp) {
|
|
39
|
+
return createSucraseStyleSiteExtractor({
|
|
40
|
+
parse,
|
|
41
|
+
TokenType
|
|
42
|
+
}, { isStyleProp });
|
|
43
|
+
}
|
|
44
|
+
function checkStyleFiles(options) {
|
|
45
|
+
const configPath = options.configPath ?? join(options.root, ".tamagui", "tamagui.config.json");
|
|
46
|
+
let contents;
|
|
47
|
+
try {
|
|
48
|
+
contents = readFileSync(configPath, "utf8");
|
|
49
|
+
} catch {
|
|
50
|
+
throw new MissingConfigArtifactError(configPath);
|
|
51
|
+
}
|
|
52
|
+
const tooling = createStyleTooling(JSON.parse(contents));
|
|
53
|
+
if (!tooling) throw new MissingConfigArtifactError(configPath);
|
|
54
|
+
const document = createDocumentStyleTooling(tooling, createProjectExtractor((name) => tooling.isStyleProp(name)));
|
|
55
|
+
let files;
|
|
56
|
+
if (options.files) {
|
|
57
|
+
files = [...options.files];
|
|
58
|
+
} else {
|
|
59
|
+
files = [];
|
|
60
|
+
walkSourceFiles(options.root, files);
|
|
61
|
+
files.sort();
|
|
62
|
+
}
|
|
63
|
+
const checked = [];
|
|
64
|
+
let diagnosticCount = 0;
|
|
65
|
+
for (const file of files) {
|
|
66
|
+
let source;
|
|
67
|
+
try {
|
|
68
|
+
source = readFileSync(file, "utf8");
|
|
69
|
+
} catch {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
let diagnostics;
|
|
73
|
+
try {
|
|
74
|
+
diagnostics = document.diagnostics(source);
|
|
75
|
+
} catch {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (diagnostics.length === 0) continue;
|
|
79
|
+
diagnosticCount += diagnostics.length;
|
|
80
|
+
checked.push({
|
|
81
|
+
file: relative(options.root, file),
|
|
82
|
+
source,
|
|
83
|
+
diagnostics
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
files: checked,
|
|
88
|
+
checkedFileCount: files.length,
|
|
89
|
+
diagnosticCount
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const ansi = {
|
|
93
|
+
red: (text) => `\x1B[31m${text}\x1B[39m`,
|
|
94
|
+
dim: (text) => `\x1B[2m${text}\x1B[22m`,
|
|
95
|
+
bold: (text) => `\x1B[1m${text}\x1B[22m`,
|
|
96
|
+
cyan: (text) => `\x1B[36m${text}\x1B[39m`
|
|
97
|
+
};
|
|
98
|
+
const plain = {
|
|
99
|
+
red: (text) => text,
|
|
100
|
+
dim: (text) => text,
|
|
101
|
+
bold: (text) => text,
|
|
102
|
+
cyan: (text) => text
|
|
103
|
+
};
|
|
104
|
+
function lineStarts(source) {
|
|
105
|
+
const starts = [0];
|
|
106
|
+
for (let index = 0; index < source.length; index++) {
|
|
107
|
+
if (source.charCodeAt(index) === 10) starts.push(index + 1);
|
|
108
|
+
}
|
|
109
|
+
return starts;
|
|
110
|
+
}
|
|
111
|
+
function positionOf(starts, offset) {
|
|
112
|
+
let low = 0;
|
|
113
|
+
let high = starts.length - 1;
|
|
114
|
+
while (low < high) {
|
|
115
|
+
const mid = low + high + 1 >> 1;
|
|
116
|
+
if (starts[mid] <= offset) low = mid;
|
|
117
|
+
else high = mid - 1;
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
line: low,
|
|
121
|
+
column: offset - starts[low]
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function formatCheckResults(result, options = {}) {
|
|
125
|
+
const paint = options.color === false ? plain : ansi;
|
|
126
|
+
const output = [];
|
|
127
|
+
for (const checked of result.files) {
|
|
128
|
+
const starts = lineStarts(checked.source);
|
|
129
|
+
const lines = checked.source.split("\n");
|
|
130
|
+
for (const diagnostic of checked.diagnostics) {
|
|
131
|
+
const start = positionOf(starts, diagnostic.start);
|
|
132
|
+
const end = positionOf(starts, diagnostic.end);
|
|
133
|
+
output.push(`${paint.bold(checked.file)}${paint.dim(`:${start.line + 1}:${start.column + 1}`)} ${paint.red("error")} ${diagnostic.message}`);
|
|
134
|
+
const line = lines[start.line] ?? "";
|
|
135
|
+
const gutter = String(start.line + 1);
|
|
136
|
+
output.push(` ${paint.dim(`${gutter} \u2502`)} ${line}`);
|
|
137
|
+
const underlineLength = end.line === start.line ? Math.max(1, end.column - start.column) : Math.max(1, line.length - start.column);
|
|
138
|
+
output.push(` ${paint.dim(`${" ".repeat(gutter.length)} \u2502`)} ${" ".repeat(start.column)}${paint.red("^".repeat(underlineLength))}`);
|
|
139
|
+
output.push("");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const summary = result.diagnosticCount === 0 ? `${paint.bold("✓")} ${result.checkedFileCount} files, no flat value problems` : `${paint.red(paint.bold(`\u2717 ${result.diagnosticCount} problem${result.diagnosticCount === 1 ? "" : "s"}`))} in ${result.files.length} file${result.files.length === 1 ? "" : "s"} ${paint.dim(`(${result.checkedFileCount} checked)`)}`;
|
|
143
|
+
output.push(summary);
|
|
144
|
+
return output.join("\n");
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export { MissingConfigArtifactError, checkStyleFiles, createProjectExtractor, formatCheckResults };
|
|
148
|
+
//# sourceMappingURL=check.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","names":[],"sources":["esm/check.js"],"sourcesContent":["import { readdirSync, readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport { parse } from \"sucrase/dist/parser/index.js\";\nimport { TokenType } from \"sucrase/dist/parser/tokenizer/types.js\";\nimport { createStyleTooling } from \"./core\";\nimport {\n createDocumentStyleTooling\n} from \"./document\";\nimport { createSucraseStyleSiteExtractor } from \"./extract-sucrase\";\nconst sourceExtensions = /\\.(tsx|jsx)$/;\nconst skippedDirectories = /* @__PURE__ */ new Set([\n \"node_modules\",\n \"dist\",\n \"build\",\n \"out\",\n \"coverage\",\n \".git\",\n \".next\",\n \".expo\",\n \".tamagui\"\n]);\nclass MissingConfigArtifactError extends Error {\n constructor(configPath) {\n super(\n `no Tamagui config artifact at ${configPath} \\u2014 run your dev server or \\`tamagui generate\\` once so the compiler emits it`\n );\n this.name = \"MissingConfigArtifactError\";\n }\n}\nfunction walkSourceFiles(directory, results) {\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (entry.isDirectory()) {\n if (!skippedDirectories.has(entry.name) && !entry.name.startsWith(\".\")) {\n walkSourceFiles(join(directory, entry.name), results);\n }\n continue;\n }\n if (sourceExtensions.test(entry.name)) results.push(join(directory, entry.name));\n }\n}\nfunction createProjectExtractor(isStyleProp) {\n return createSucraseStyleSiteExtractor({ parse, TokenType }, { isStyleProp });\n}\nfunction checkStyleFiles(options) {\n const configPath = options.configPath ?? join(options.root, \".tamagui\", \"tamagui.config.json\");\n let contents;\n try {\n contents = readFileSync(configPath, \"utf8\");\n } catch {\n throw new MissingConfigArtifactError(configPath);\n }\n const tooling = createStyleTooling(JSON.parse(contents));\n if (!tooling) throw new MissingConfigArtifactError(configPath);\n const document = createDocumentStyleTooling(\n tooling,\n createProjectExtractor((name) => tooling.isStyleProp(name))\n );\n let files;\n if (options.files) {\n files = [...options.files];\n } else {\n files = [];\n walkSourceFiles(options.root, files);\n files.sort();\n }\n const checked = [];\n let diagnosticCount = 0;\n for (const file of files) {\n let source;\n try {\n source = readFileSync(file, \"utf8\");\n } catch {\n continue;\n }\n let diagnostics;\n try {\n diagnostics = document.diagnostics(source);\n } catch {\n continue;\n }\n if (diagnostics.length === 0) continue;\n diagnosticCount += diagnostics.length;\n checked.push({ file: relative(options.root, file), source, diagnostics });\n }\n return { files: checked, checkedFileCount: files.length, diagnosticCount };\n}\nconst ansi = {\n red: (text) => `\\x1B[31m${text}\\x1B[39m`,\n dim: (text) => `\\x1B[2m${text}\\x1B[22m`,\n bold: (text) => `\\x1B[1m${text}\\x1B[22m`,\n cyan: (text) => `\\x1B[36m${text}\\x1B[39m`\n};\nconst plain = {\n red: (text) => text,\n dim: (text) => text,\n bold: (text) => text,\n cyan: (text) => text\n};\nfunction lineStarts(source) {\n const starts = [0];\n for (let index = 0; index < source.length; index++) {\n if (source.charCodeAt(index) === 10) starts.push(index + 1);\n }\n return starts;\n}\nfunction positionOf(starts, offset) {\n let low = 0;\n let high = starts.length - 1;\n while (low < high) {\n const mid = low + high + 1 >> 1;\n if (starts[mid] <= offset) low = mid;\n else high = mid - 1;\n }\n return { line: low, column: offset - starts[low] };\n}\nfunction formatCheckResults(result, options = {}) {\n const paint = options.color === false ? plain : ansi;\n const output = [];\n for (const checked of result.files) {\n const starts = lineStarts(checked.source);\n const lines = checked.source.split(\"\\n\");\n for (const diagnostic of checked.diagnostics) {\n const start = positionOf(starts, diagnostic.start);\n const end = positionOf(starts, diagnostic.end);\n output.push(\n `${paint.bold(checked.file)}${paint.dim(`:${start.line + 1}:${start.column + 1}`)} ${paint.red(\"error\")} ${diagnostic.message}`\n );\n const line = lines[start.line] ?? \"\";\n const gutter = String(start.line + 1);\n output.push(` ${paint.dim(`${gutter} \\u2502`)} ${line}`);\n const underlineLength = end.line === start.line ? Math.max(1, end.column - start.column) : Math.max(1, line.length - start.column);\n output.push(\n ` ${paint.dim(`${\" \".repeat(gutter.length)} \\u2502`)} ${\" \".repeat(start.column)}${paint.red(\"^\".repeat(underlineLength))}`\n );\n output.push(\"\");\n }\n }\n const summary = result.diagnosticCount === 0 ? `${paint.bold(\"\\u2713\")} ${result.checkedFileCount} files, no flat value problems` : `${paint.red(paint.bold(`\\u2717 ${result.diagnosticCount} problem${result.diagnosticCount === 1 ? \"\" : \"s\"}`))} in ${result.files.length} file${result.files.length === 1 ? \"\" : \"s\"} ${paint.dim(`(${result.checkedFileCount} checked)`)}`;\n output.push(summary);\n return output.join(\"\\n\");\n}\nexport {\n MissingConfigArtifactError,\n checkStyleFiles,\n createProjectExtractor,\n formatCheckResults\n};\n//# sourceMappingURL=check.js.map\n"],"mappings":"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"}
|