@litsx/typescript 0.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/README.md +85 -0
- package/dist/authored-semantics.cjs +18567 -0
- package/dist/authored-semantics.cjs.map +1 -0
- package/dist/editor-session.cjs +1345 -0
- package/dist/editor-session.cjs.map +1 -0
- package/dist/index.cjs +841 -0
- package/dist/index.cjs.map +1 -0
- package/dist/litsx-tsc.js +18025 -0
- package/dist/typecheck.cjs +931 -0
- package/dist/typecheck.cjs.map +1 -0
- package/dist/virtualization.cjs +113 -0
- package/dist/virtualization.cjs.map +1 -0
- package/package.json +76 -0
- package/src/authored-semantics.js +1543 -0
- package/src/editor-session.js +1360 -0
- package/src/index.js +844 -0
- package/src/litsx-tsc.js +4 -0
- package/src/typecheck.js +535 -0
- package/src/virtualization.js +125 -0
- package/tsserver-plugin.cjs +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typecheck.cjs","sources":["../../typescript-session/src/index.js","../src/typecheck.js"],"sourcesContent":["import { createRequire } from \"module\";\n\nconst PROJECT_SESSION_CACHE = new Map();\nconst STANDALONE_SESSION_CACHE = new Map();\nconst SESSION_CACHE_LIMIT = 50;\nconst DISK_SOURCE_TEXT_CACHE = new Map();\nconst DISK_SOURCE_FILE_CACHE = new Map();\nconst DISK_FILE_CACHE_LIMIT = 500;\nconst EXTRA_FILE_EXTENSIONS = [\n {\n extension: \".litsx\",\n isMixedContent: false,\n scriptKind: 4,\n },\n {\n extension: \".litsx.jsx\",\n isMixedContent: false,\n scriptKind: 2,\n },\n];\nconst nodeRequire = (() => {\n try {\n return createRequire(import.meta.url);\n } catch {\n return null;\n }\n})();\nlet nodeFs = null;\n\nfunction getNodeFs() {\n if (nodeFs) {\n return nodeFs;\n }\n if (!nodeRequire) {\n return null;\n }\n try {\n nodeFs = nodeRequire(\"fs\");\n return nodeFs;\n } catch {\n return null;\n }\n}\n\nfunction trimCacheToLimit(cache, limit) {\n while (cache.size > limit) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey == null) break;\n cache.delete(oldestKey);\n }\n}\n\nfunction normalizeFilePath(value) {\n if (!value) return \"\";\n return String(value).replace(/\\\\/g, \"/\").replace(/\\/+/g, \"/\");\n}\n\nfunction dirname(filePath) {\n const normalized = normalizeFilePath(filePath);\n const lastSlash = normalized.lastIndexOf(\"/\");\n if (lastSlash <= 0) {\n return \"/\";\n }\n return normalized.slice(0, lastSlash);\n}\n\nfunction inferScriptKind(ts, filePath) {\n const normalized = normalizeFilePath(filePath);\n\n if (normalized.endsWith(\".litsx\")) {\n return ts.ScriptKind.TSX;\n }\n\n if (normalized.endsWith(\".litsx.jsx\")) {\n return ts.ScriptKind.JSX;\n }\n\n if (normalized.endsWith(\".tsx\")) {\n return ts.ScriptKind.TSX;\n }\n\n if (normalized.endsWith(\".jsx\")) {\n return ts.ScriptKind.JSX;\n }\n\n if (normalized.endsWith(\".ts\")) {\n return ts.ScriptKind.TS;\n }\n\n if (normalized.endsWith(\".js\")) {\n return ts.ScriptKind.JS;\n }\n\n return undefined;\n}\n\nfunction defaultReadFile(filePath) {\n const fs = getNodeFs();\n if (!fs) {\n throw new Error(\"Disk-backed TypeScript sessions require Node fs access.\");\n }\n return fs.readFileSync(filePath, \"utf8\");\n}\n\nfunction getDiskFileVersion(filePath) {\n const fs = getNodeFs();\n if (!fs) {\n return null;\n }\n try {\n const stats = fs.statSync(filePath);\n return `${stats.mtimeMs}:${stats.size}`;\n } catch {\n return null;\n }\n}\n\nfunction getCachedDiskSourceText(filePath, readFile = defaultReadFile) {\n const normalizedPath = normalizeFilePath(filePath);\n const version = getDiskFileVersion(filePath);\n if (!version) {\n DISK_SOURCE_TEXT_CACHE.delete(normalizedPath);\n return undefined;\n }\n\n const cached = DISK_SOURCE_TEXT_CACHE.get(normalizedPath);\n if (cached?.version === version) {\n DISK_SOURCE_TEXT_CACHE.delete(normalizedPath);\n DISK_SOURCE_TEXT_CACHE.set(normalizedPath, cached);\n return cached.sourceText;\n }\n\n const sourceText = readFile(filePath);\n if (typeof sourceText !== \"string\") {\n DISK_SOURCE_TEXT_CACHE.delete(normalizedPath);\n return sourceText;\n }\n\n const record = { version, sourceText };\n DISK_SOURCE_TEXT_CACHE.set(normalizedPath, record);\n trimCacheToLimit(DISK_SOURCE_TEXT_CACHE, DISK_FILE_CACHE_LIMIT);\n return sourceText;\n}\n\nfunction getCachedDiskSourceFile(\n filePath,\n languageVersion,\n createSourceFile,\n readFile = defaultReadFile,\n getScriptKind = () => undefined,\n) {\n const normalizedPath = normalizeFilePath(filePath);\n const version = getDiskFileVersion(filePath);\n if (!version) {\n DISK_SOURCE_FILE_CACHE.delete(`${normalizedPath}:${languageVersion}`);\n return undefined;\n }\n\n const cacheKey = `${normalizedPath}:${languageVersion}`;\n const cached = DISK_SOURCE_FILE_CACHE.get(cacheKey);\n if (cached?.version === version) {\n DISK_SOURCE_FILE_CACHE.delete(cacheKey);\n DISK_SOURCE_FILE_CACHE.set(cacheKey, cached);\n return cached.sourceFile;\n }\n\n const sourceText = getCachedDiskSourceText(filePath, readFile);\n if (typeof sourceText !== \"string\") {\n DISK_SOURCE_FILE_CACHE.delete(cacheKey);\n return undefined;\n }\n\n const sourceFile = createSourceFile(\n filePath,\n sourceText,\n languageVersion,\n true,\n getScriptKind(filePath),\n );\n const record = { version, sourceFile };\n DISK_SOURCE_FILE_CACHE.set(cacheKey, record);\n trimCacheToLimit(DISK_SOURCE_FILE_CACHE, DISK_FILE_CACHE_LIMIT);\n return sourceFile;\n}\n\nfunction createSourceTextCache() {\n return new Map();\n}\n\nfunction createSourceFileCache() {\n return new Map();\n}\n\nfunction createSessionBase({\n kind,\n key,\n typescript,\n}) {\n return {\n kind,\n key,\n typescript,\n host: null,\n hostConfigKey: null,\n program: null,\n programKey: null,\n overlayFiles: new Map(),\n semanticCaches: new Map(),\n sourceTextCache: createSourceTextCache(),\n sourceFileCache: createSourceFileCache(),\n invalidate({ host = false } = {}) {\n this.program = null;\n this.programKey = null;\n this.semanticCaches.clear();\n if (host) {\n this.host = null;\n this.hostConfigKey = null;\n this.sourceTextCache.clear();\n this.sourceFileCache.clear();\n }\n },\n getSemanticCache(name, factory = () => new Map()) {\n if (!this.semanticCaches.has(name)) {\n this.semanticCaches.set(name, factory());\n }\n return this.semanticCaches.get(name);\n },\n setOverlayFile(fileName, sourceText) {\n this.overlayFiles.set(normalizeFilePath(fileName), sourceText);\n },\n clearOverlayFile(fileName) {\n this.overlayFiles.delete(normalizeFilePath(fileName));\n },\n clearOverlayFiles() {\n this.overlayFiles.clear();\n },\n };\n}\n\nfunction getCachedSourceText(session, fileName, sourceText, transformKey, transform) {\n const normalizedFileName = normalizeFilePath(fileName);\n const cacheKey = `${normalizedFileName}:${transformKey}`;\n const cached = session.sourceTextCache.get(cacheKey);\n if (cached?.sourceText === sourceText) {\n return cached.transformedText;\n }\n const transformedText = transform ? transform(fileName, sourceText) : sourceText;\n session.sourceTextCache.set(cacheKey, {\n sourceText,\n transformedText,\n });\n return transformedText;\n}\n\nfunction getCachedSourceFile(session, fileName, sourceText, languageVersion, scriptKind, transformKey, transform) {\n const normalizedFileName = normalizeFilePath(fileName);\n const transformedText = getCachedSourceText(\n session,\n fileName,\n sourceText,\n transformKey,\n transform,\n );\n const cacheKey = `${normalizedFileName}:${String(languageVersion)}:${String(scriptKind ?? \"\")}:${transformKey}`;\n let fileCache = session.sourceFileCache.get(cacheKey);\n if (!fileCache) {\n fileCache = new Map();\n session.sourceFileCache.set(cacheKey, fileCache);\n }\n\n const cachedSourceFile = fileCache.get(sourceText);\n if (cachedSourceFile) {\n return cachedSourceFile;\n }\n\n const sourceFile = session.typescript.createSourceFile(\n fileName,\n transformedText,\n languageVersion,\n true,\n scriptKind ?? inferScriptKind(session.typescript, fileName),\n );\n fileCache.set(sourceText, sourceFile);\n return sourceFile;\n}\n\nfunction attachSourceFileVersion(sourceFile, version) {\n if (!sourceFile || typeof sourceFile !== \"object\") {\n return sourceFile;\n }\n\n if (sourceFile.version == null) {\n sourceFile.version = version;\n }\n\n return sourceFile;\n}\n\nfunction createProjectHost(session, config) {\n const ts = session.typescript;\n const host =\n typeof ts.createIncrementalCompilerHost === \"function\"\n ? ts.createIncrementalCompilerHost(config.parsedCommandLine.options)\n : ts.createCompilerHost(config.parsedCommandLine.options);\n const originalReadFile = host.readFile.bind(host);\n const originalGetSourceFile = host.getSourceFile.bind(host);\n host.extraFileExtensions = EXTRA_FILE_EXTENSIONS;\n\n if (typeof host.useCaseSensitiveFileNames !== \"function\") {\n host.useCaseSensitiveFileNames = () => ts.sys.useCaseSensitiveFileNames;\n }\n\n session.readFile = (fileName) => originalReadFile(fileName);\n\n host.readFile = (fileName) => {\n const normalizedFileName = normalizeFilePath(fileName);\n if (session.overlayFiles.has(normalizedFileName)) {\n return session.overlayFiles.get(normalizedFileName);\n }\n\n const sourceText = originalReadFile(fileName);\n if (typeof sourceText !== \"string\") {\n return sourceText;\n }\n\n return getCachedSourceText(session, fileName, sourceText, \"project\", null);\n };\n\n host.getSourceFile = (\n fileName,\n languageVersion,\n onError,\n shouldCreateNewSourceFile,\n scriptKind,\n ) => {\n const normalizedFileName = normalizeFilePath(fileName);\n if (session.overlayFiles.has(normalizedFileName)) {\n const sourceText = session.overlayFiles.get(normalizedFileName);\n return attachSourceFileVersion(\n getCachedSourceFile(\n session,\n fileName,\n sourceText,\n languageVersion,\n scriptKind,\n \"overlay\",\n null,\n ),\n sourceText,\n );\n }\n\n const sourceText = originalReadFile(fileName);\n if (typeof sourceText !== \"string\") {\n return attachSourceFileVersion(\n originalGetSourceFile(\n fileName,\n languageVersion,\n onError,\n shouldCreateNewSourceFile,\n scriptKind,\n ),\n \"\",\n );\n }\n\n return attachSourceFileVersion(\n getCachedSourceFile(\n session,\n fileName,\n sourceText,\n languageVersion,\n scriptKind,\n \"project\",\n null,\n ),\n sourceText,\n );\n };\n\n return host;\n}\n\nfunction createStandaloneHost(session, config) {\n const ts = session.typescript;\n const host = ts.createCompilerHost(config.compilerOptions, true);\n const originalReadFile = host.readFile.bind(host);\n const originalFileExists = host.fileExists.bind(host);\n host.extraFileExtensions = EXTRA_FILE_EXTENSIONS;\n\n host.readFile = (filePath) => {\n const normalizedPath = normalizeFilePath(filePath);\n if (session.overlayFiles.has(normalizedPath)) {\n return session.overlayFiles.get(normalizedPath);\n }\n return getCachedDiskSourceText(filePath, originalReadFile);\n };\n\n host.fileExists = (filePath) => {\n const normalizedPath = normalizeFilePath(filePath);\n if (session.overlayFiles.has(normalizedPath)) {\n return true;\n }\n return originalFileExists(filePath);\n };\n\n host.getSourceFile = (filePath, languageVersion) => {\n const normalizedPath = normalizeFilePath(filePath);\n if (session.overlayFiles.has(normalizedPath)) {\n const sourceText = session.overlayFiles.get(normalizedPath);\n return ts.createSourceFile(\n filePath,\n sourceText,\n languageVersion,\n true,\n inferScriptKind(ts, filePath),\n );\n }\n return getCachedDiskSourceFile(\n filePath,\n languageVersion,\n ts.createSourceFile,\n originalReadFile,\n (nextFilePath) => inferScriptKind(ts, nextFilePath),\n );\n };\n\n return host;\n}\n\nfunction createInMemoryHost(session, config) {\n const ts = session.typescript;\n const files = new Map(\n Object.entries(config.files || {}).map(([filePath, sourceText]) => [\n normalizeFilePath(filePath),\n sourceText,\n ]),\n );\n const sourceDir = dirname(config.sourceFilename);\n\n return {\n extraFileExtensions: EXTRA_FILE_EXTENSIONS,\n getSourceFile(filePath, languageVersion) {\n const normalizedPath = normalizeFilePath(filePath);\n const overlaySource = session.overlayFiles.get(normalizedPath);\n const fileSource = overlaySource ?? files.get(normalizedPath);\n if (fileSource == null) return undefined;\n return ts.createSourceFile(\n normalizedPath,\n fileSource,\n languageVersion,\n true,\n inferScriptKind(ts, normalizedPath),\n );\n },\n readFile(filePath) {\n const normalizedPath = normalizeFilePath(filePath);\n return session.overlayFiles.get(normalizedPath) ?? files.get(normalizedPath);\n },\n fileExists(filePath) {\n const normalizedPath = normalizeFilePath(filePath);\n return session.overlayFiles.has(normalizedPath) || files.has(normalizedPath);\n },\n writeFile() {},\n getDefaultLibFileName() {\n return config.defaultLibFileName;\n },\n getCurrentDirectory() {\n return sourceDir;\n },\n getDirectories() {\n return [];\n },\n directoryExists(dirPath) {\n const normalizedPath = normalizeFilePath(dirPath);\n return normalizedPath === sourceDir || normalizedPath === dirname(config.defaultLibFileName);\n },\n getCanonicalFileName(filePath) {\n return normalizeFilePath(filePath);\n },\n useCaseSensitiveFileNames() {\n return true;\n },\n getNewLine() {\n return \"\\n\";\n },\n };\n}\n\nfunction createProjectProgramKey(parsedCommandLine) {\n return JSON.stringify({\n options: parsedCommandLine.options,\n fileNames: parsedCommandLine.fileNames,\n projectReferences: parsedCommandLine.projectReferences?.map((reference) => reference.path),\n projectVersion: parsedCommandLine.projectVersion,\n });\n}\n\nfunction createProjectHostKey(config) {\n return JSON.stringify({\n options: config.parsedCommandLine.options,\n fileNames: config.parsedCommandLine.fileNames,\n projectReferences: config.parsedCommandLine.projectReferences?.map((reference) => reference.path),\n });\n}\n\nfunction createStandaloneProgramKey(config, entryFileName) {\n return JSON.stringify({\n options: config.compilerOptions,\n entryFileName,\n });\n}\n\nfunction createInMemoryProgramKey(config, sourceText) {\n return JSON.stringify({\n options: config.compilerOptions,\n sourceFilename: config.sourceFilename,\n rootNames: config.rootNames,\n sourceLength: sourceText.length,\n });\n}\n\nfunction attachProjectSessionMethods(session, config) {\n function ensureHost() {\n const hostKey = createProjectHostKey(config);\n if (!session.host || session.hostConfigKey !== hostKey) {\n session.host = createProjectHost(session, config);\n session.hostConfigKey = hostKey;\n session.program = null;\n session.programKey = null;\n session.semanticCaches.clear();\n }\n return session.host;\n }\n\n session.refresh = (nextConfig = {}) => {\n config = {\n ...config,\n ...nextConfig,\n };\n ensureHost();\n return session;\n };\n\n session.getProgram = () => {\n const programKey = createProjectProgramKey(config.parsedCommandLine);\n ensureHost();\n\n const builderProgram =\n session.program &&\n typeof session.typescript.createIncrementalProgram === \"function\"\n ? session.typescript.createIncrementalProgram({\n rootNames: config.parsedCommandLine.fileNames,\n options: config.parsedCommandLine.options,\n projectReferences: config.parsedCommandLine.projectReferences,\n host: session.host,\n oldProgram: session.program,\n })\n : null;\n\n const program = builderProgram\n ? (typeof builderProgram.getProgram === \"function\"\n ? builderProgram.getProgram()\n : builderProgram)\n : session.typescript.createProgram({\n rootNames: config.parsedCommandLine.fileNames,\n options: config.parsedCommandLine.options,\n projectReferences: config.parsedCommandLine.projectReferences,\n host: session.host,\n });\n\n if (session.program !== program) {\n session.semanticCaches.clear();\n }\n session.program = program;\n session.programKey = programKey;\n return program;\n };\n};\n\nfunction attachStandaloneSessionMethods(session, config) {\n session.refresh = (nextConfig = {}) => {\n config = {\n ...config,\n ...nextConfig,\n };\n return session;\n };\n\n session.getProgram = (entryFileName) => {\n const normalizedEntryFileName = normalizeFilePath(entryFileName);\n if (!session.host) {\n session.host = createStandaloneHost(session, config);\n }\n const programKey = createStandaloneProgramKey(config, normalizedEntryFileName);\n const program = session.typescript.createProgram(\n [normalizedEntryFileName],\n config.compilerOptions,\n session.host,\n session.program ?? undefined,\n );\n\n if (session.program !== program) {\n session.semanticCaches.clear();\n }\n session.program = program;\n session.programKey = programKey;\n return program;\n };\n};\n\nfunction attachInMemorySessionMethods(session, config) {\n session.refresh = (nextConfig = {}) => {\n config = {\n ...config,\n ...nextConfig,\n };\n session.invalidate({ host: true });\n return session;\n };\n\n session.getProgram = (sourceText) => {\n if (!session.host) {\n session.host = createInMemoryHost(session, config);\n }\n const programKey = createInMemoryProgramKey(config, sourceText);\n if (session.program && session.programKey === programKey) {\n return session.program;\n }\n\n session.setOverlayFile(config.sourceFilename, sourceText);\n const program = session.typescript.createProgram(\n config.rootNames,\n config.compilerOptions,\n session.host,\n );\n\n if (session.program !== program) {\n session.semanticCaches.clear();\n }\n session.program = program;\n session.programKey = programKey;\n return program;\n };\n}\n\nfunction attachCommonSessionMethods(session) {\n session.getChecker = (...args) => session.getProgram(...args).getTypeChecker();\n session.getSourceFile = (fileName, ...args) => session.getProgram(...args).getSourceFile(fileName);\n session.getTypeResolver = (fileName, sourceText) => {\n session.setOverlayFile(fileName, sourceText);\n const program =\n session.kind === \"project\"\n ? session.getProgram()\n : session.kind === \"standalone\"\n ? session.getProgram(fileName)\n : session.getProgram(sourceText);\n const sourceFile = program.getSourceFile(fileName);\n if (!sourceFile) {\n session.clearOverlayFile(fileName);\n return null;\n }\n return {\n filename: normalizeFilePath(fileName),\n sourceFile,\n checker: program.getTypeChecker(),\n program,\n getSemanticCache(name, factory) {\n return session.getSemanticCache(name, factory);\n },\n };\n };\n}\n\nexport function createProjectTsSession(config) {\n const session = createSessionBase({\n kind: \"project\",\n key: config.sessionKey,\n typescript: config.typescript,\n });\n attachProjectSessionMethods(session, config);\n attachCommonSessionMethods(session);\n return session;\n}\n\nexport function getOrCreateProjectTsSession(key, config) {\n const cached = PROJECT_SESSION_CACHE.get(key);\n if (cached) {\n PROJECT_SESSION_CACHE.delete(key);\n PROJECT_SESSION_CACHE.set(key, cached);\n cached.refresh(config);\n return cached;\n }\n\n const session = createProjectTsSession({\n ...config,\n sessionKey: key,\n });\n PROJECT_SESSION_CACHE.set(key, session);\n trimCacheToLimit(PROJECT_SESSION_CACHE, SESSION_CACHE_LIMIT);\n return session;\n}\n\nexport function createStandaloneTsSession(config) {\n const session = createSessionBase({\n kind: \"standalone\",\n key: config.sessionKey,\n typescript: config.typescript,\n });\n attachStandaloneSessionMethods(session, config);\n attachCommonSessionMethods(session);\n return session;\n}\n\nexport function getOrCreateStandaloneTsSession(key, config) {\n const cached = STANDALONE_SESSION_CACHE.get(key);\n if (cached) {\n STANDALONE_SESSION_CACHE.delete(key);\n STANDALONE_SESSION_CACHE.set(key, cached);\n cached.refresh(config);\n return cached;\n }\n\n const session = createStandaloneTsSession({\n ...config,\n sessionKey: key,\n });\n STANDALONE_SESSION_CACHE.set(key, session);\n trimCacheToLimit(STANDALONE_SESSION_CACHE, SESSION_CACHE_LIMIT);\n return session;\n}\n\nexport function createInMemoryTsSession(config) {\n const session = createSessionBase({\n kind: \"in-memory\",\n key: config.sessionKey || `in-memory:${config.sourceFilename}`,\n typescript: config.typescript,\n });\n attachInMemorySessionMethods(session, config);\n attachCommonSessionMethods(session);\n return session;\n}\n\nexport {\n dirname,\n normalizeFilePath,\n};\n","import { fileURLToPath } from \"url\";\nimport path from \"path\";\nimport ts from \"typescript\";\nimport { getOrCreateProjectTsSession } from \"@litsx/typescript-session\";\n\nimport {\n createToolingVirtualLitsxSource,\n looksLikeLitsxJsx,\n remapToolingTextSpanToOriginal,\n remapVirtualText,\n} from \"./virtualization.js\";\n\nconst PROFILE_ENABLED = process.env.LITSX_PROFILE === \"1\";\nconst PARSED_COMMAND_LINE_CACHE = new Map();\nconst TYPECHECK_SESSION_BY_PROJECT = new Map();\nconst TYPECHECK_SESSION_CACHE_LIMIT = 20;\nconst FORMAT_HOST = createFormatHost();\nconst LITSX_EXTRA_FILE_EXTENSIONS = [\n {\n extension: \".litsx\",\n isMixedContent: false,\n scriptKind: ts.ScriptKind.TSX,\n },\n {\n extension: \".litsx.jsx\",\n isMixedContent: false,\n scriptKind: ts.ScriptKind.JSX,\n },\n];\n\nfunction profilePhase(namespace, name, callback) {\n if (!PROFILE_ENABLED) {\n return callback();\n }\n\n const start = performance.now();\n try {\n return callback();\n } finally {\n globalThis.__litsxProfileEvents ??= [];\n globalThis.__litsxProfileEvents.push({\n namespace,\n name,\n durationMs: performance.now() - start,\n });\n }\n}\n\nfunction isRelevantFile(fileName) {\n return /\\.(jsx|tsx|litsx)$/.test(fileName) || fileName.endsWith(\".litsx.jsx\");\n}\n\nfunction getPluginsForFile(fileName) {\n return (fileName.endsWith(\".tsx\") || fileName.endsWith(\".litsx\")) ? [\"typescript\"] : [];\n}\n\nfunction getAdditionalLitsxFileNames(tsconfigPath, configJson, basePath) {\n const configuredFiles = Array.isArray(configJson?.files)\n ? configJson.files\n .filter((file) => file.endsWith(\".litsx\") || file.endsWith(\".litsx.jsx\"))\n .map((file) => path.resolve(basePath, file))\n : [];\n\n const explicitlyIncludedFiles = Array.isArray(configJson?.include)\n ? configJson.include\n .filter((pattern) => pattern.endsWith(\".litsx\") || pattern.endsWith(\".litsx.jsx\"))\n .map((pattern) => path.resolve(basePath, pattern))\n .filter((fileName) => ts.sys.fileExists(fileName))\n : [];\n\n const includedFiles = ts.sys.readDirectory(\n basePath,\n [\".litsx\", \".litsx.jsx\"],\n configJson?.exclude,\n configJson?.include ?? [\"**/*\"],\n );\n\n return [...new Set([...configuredFiles, ...explicitlyIncludedFiles, ...includedFiles])]\n .filter((fileName) => fileName !== tsconfigPath)\n .sort();\n}\n\nfunction trimCacheToLimit(cache, limit) {\n while (cache.size > limit) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey == null) break;\n cache.delete(oldestKey);\n }\n}\n\nfunction getFileVersion(filePath) {\n try {\n const stats = ts.sys.getModifiedTime?.(filePath);\n if (stats instanceof Date) {\n return String(stats.getTime());\n }\n } catch {}\n\n try {\n const content = ts.sys.readFile(filePath);\n return typeof content === \"string\" ? String(content.length) : null;\n } catch {\n return null;\n }\n}\n\nfunction createNormalizedArgKey(rawArgs) {\n return rawArgs.join(\"\\0\");\n}\n\nfunction createSessionKey(projectPath, rawArgs) {\n return `${projectPath || \"<no-project>\"}:${createNormalizedArgKey(rawArgs)}`;\n}\n\nfunction createVirtualizationState() {\n const cache = new Map();\n const sourceFileCache = new Map();\n\n function normalizeFileName(fileName) {\n return path.resolve(fileName);\n }\n\n function get(fileName) {\n return cache.get(normalizeFileName(fileName)) ?? null;\n }\n\n function clear(fileName) {\n const normalizedFileName = normalizeFileName(fileName);\n cache.delete(normalizedFileName);\n sourceFileCache.delete(normalizedFileName);\n }\n\n function buildVirtualizationRecord(fileName, sourceText) {\n const normalizedFileName = normalizeFileName(fileName);\n const cachedRecord = cache.get(normalizedFileName) ?? null;\n\n if (cachedRecord?.sourceText === sourceText) {\n return cachedRecord;\n }\n\n if (!isRelevantFile(fileName) || !looksLikeLitsxJsx(sourceText)) {\n clear(fileName);\n return null;\n }\n\n const parserPlugins = getPluginsForFile(fileName);\n const virtualization = profilePhase(\n \"typescript-typecheck\",\n \"tooling-virtualization\",\n () => createToolingVirtualLitsxSource(sourceText, {\n plugins: parserPlugins,\n }),\n );\n\n if (virtualization.code === sourceText) {\n clear(fileName);\n return null;\n }\n\n const record = {\n ...virtualization,\n sourceText,\n parserPlugins,\n virtualizedText: virtualization.code,\n };\n cache.set(normalizedFileName, record);\n return record;\n }\n\n return {\n get,\n getOrBuild(fileName, sourceText) {\n return buildVirtualizationRecord(fileName, sourceText);\n },\n getVirtualizedText(fileName, sourceText) {\n const virtualization = buildVirtualizationRecord(fileName, sourceText);\n return virtualization?.virtualizedText ?? sourceText;\n },\n getOrCreateSourceFile(fileName, sourceText, languageVersion, scriptKind) {\n const normalizedFileName = normalizeFileName(fileName);\n const virtualizedText = this.getVirtualizedText(fileName, sourceText);\n const cacheKey = `${String(languageVersion)}:${String(scriptKind ?? \"\")}:${sourceText}`;\n let fileCache = sourceFileCache.get(normalizedFileName);\n if (!fileCache) {\n fileCache = new Map();\n sourceFileCache.set(normalizedFileName, fileCache);\n }\n\n const cachedSourceFile = fileCache.get(cacheKey);\n if (cachedSourceFile) {\n return cachedSourceFile;\n }\n\n const sourceFile = ts.createSourceFile(\n fileName,\n virtualizedText,\n languageVersion,\n true,\n scriptKind,\n );\n fileCache.set(cacheKey, sourceFile);\n return sourceFile;\n },\n };\n}\n\nfunction remapMessageText(messageText) {\n if (typeof messageText === \"string\") {\n return remapVirtualText(messageText);\n }\n\n if (!messageText || typeof messageText !== \"object\") {\n return messageText;\n }\n\n return {\n ...messageText,\n messageText: remapMessageText(messageText.messageText),\n next: messageText.next?.map(remapMessageText),\n };\n}\n\nfunction remapDiagnostic(diagnostic, virtualizationState) {\n const fileName = diagnostic.file?.fileName;\n const virtualization = fileName ? virtualizationState.get(fileName) : null;\n\n if (!virtualization || typeof diagnostic.start !== \"number\") {\n return {\n ...diagnostic,\n messageText: remapMessageText(diagnostic.messageText),\n };\n }\n\n const remappedSpan = remapToolingTextSpanToOriginal(\n {\n start: diagnostic.start,\n length: diagnostic.length ?? 0,\n },\n virtualization,\n );\n\n return {\n ...diagnostic,\n start: remappedSpan.start,\n length: remappedSpan.length,\n messageText: remapMessageText(diagnostic.messageText),\n relatedInformation: diagnostic.relatedInformation?.map((info) => {\n if (!info.file || typeof info.start !== \"number\") {\n return {\n ...info,\n messageText: remapMessageText(info.messageText),\n };\n }\n\n const infoVirtualization = virtualizationState.get(info.file.fileName);\n if (!infoVirtualization) {\n return {\n ...info,\n messageText: remapMessageText(info.messageText),\n };\n }\n\n const infoSpan = remapToolingTextSpanToOriginal(\n {\n start: info.start,\n length: info.length ?? 0,\n },\n infoVirtualization,\n );\n\n return {\n ...info,\n start: infoSpan.start,\n length: infoSpan.length,\n messageText: remapMessageText(info.messageText),\n };\n }),\n };\n}\n\nfunction createFormatHost() {\n return {\n getCanonicalFileName(fileName) {\n return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();\n },\n getCurrentDirectory() {\n return ts.sys.getCurrentDirectory();\n },\n getNewLine() {\n return ts.sys.newLine;\n },\n };\n}\n\nfunction resolveParsedCommandLine(rawArgs) {\n const parsedCommandLine = ts.parseCommandLine(rawArgs);\n\n if (parsedCommandLine.errors.length > 0) {\n return parsedCommandLine;\n }\n\n const projectPath = parsedCommandLine.options.project\n ? path.resolve(parsedCommandLine.options.project)\n : ts.findConfigFile(process.cwd(), ts.sys.fileExists, \"tsconfig.json\");\n\n if (!projectPath) {\n return {\n ...parsedCommandLine,\n errors: [\n {\n category: ts.DiagnosticCategory.Error,\n code: 5083,\n file: undefined,\n start: undefined,\n length: undefined,\n messageText: \"Cannot find a tsconfig.json file.\",\n },\n ],\n };\n }\n\n const configFile = ts.readConfigFile(projectPath, ts.sys.readFile);\n if (configFile.error) {\n return {\n ...parsedCommandLine,\n errors: [configFile.error],\n };\n }\n\n const configHost = {\n ...ts.sys,\n onUnRecoverableConfigFileDiagnostic() {},\n };\n const projectVersion = getFileVersion(projectPath) ?? \"unknown\";\n const cacheKey = `${projectPath}:${projectVersion}:${createNormalizedArgKey(rawArgs)}`;\n const cached = PARSED_COMMAND_LINE_CACHE.get(cacheKey);\n if (cached) {\n PARSED_COMMAND_LINE_CACHE.delete(cacheKey);\n PARSED_COMMAND_LINE_CACHE.set(cacheKey, cached);\n return cached;\n }\n\n const resolved = {\n ...ts.parseJsonConfigFileContent(\n configFile.config,\n configHost,\n path.dirname(projectPath),\n parsedCommandLine.options,\n projectPath,\n undefined,\n LITSX_EXTRA_FILE_EXTENSIONS,\n ),\n projectPath,\n projectVersion,\n __litsxSessionKey: createSessionKey(projectPath, rawArgs),\n };\n\n if (!Object.hasOwn(configFile.config?.compilerOptions || {}, \"types\")) {\n resolved.options = {\n ...resolved.options,\n // Preserve TypeScript 5.x ambient @types loading for litsx-tsc when\n // projects haven't opted into an explicit `types` list yet.\n types: [\"*\"],\n };\n }\n\n resolved.fileNames = [\n ...new Set([\n ...resolved.fileNames,\n ...getAdditionalLitsxFileNames(projectPath, configFile.config, path.dirname(projectPath)),\n ]),\n ].sort();\n\n if (resolved.fileNames.some((fileName) => fileName.endsWith(\".litsx\") || fileName.endsWith(\".litsx.jsx\"))) {\n resolved.options = {\n ...resolved.options,\n allowNonTsExtensions: true,\n };\n }\n\n if (resolved.fileNames.length > 0 && Array.isArray(resolved.errors)) {\n resolved.errors = resolved.errors.filter((error) => error?.code !== 18003);\n }\n\n PARSED_COMMAND_LINE_CACHE.set(cacheKey, resolved);\n trimCacheToLimit(PARSED_COMMAND_LINE_CACHE, TYPECHECK_SESSION_CACHE_LIMIT);\n return resolved;\n}\n\nfunction createTypecheckSession(parsedCommandLine, projectSession = null) {\n const virtualizationState = createVirtualizationState();\n return {\n parsedCommandLine,\n sessionKey: parsedCommandLine.__litsxSessionKey,\n virtualizationState,\n diagnosticsCacheKey: null,\n diagnosticsCacheResult: null,\n projectSession: projectSession || getOrCreateProjectTsSession(parsedCommandLine.__litsxSessionKey, {\n typescript: ts,\n parsedCommandLine,\n }),\n };\n}\n\nfunction getTypecheckSession(parsedCommandLine, projectSession = null) {\n const sessionKey =\n parsedCommandLine.__litsxSessionKey ||\n createSessionKey(parsedCommandLine.projectPath, []);\n const cached = TYPECHECK_SESSION_BY_PROJECT.get(sessionKey);\n if (cached) {\n cached.parsedCommandLine = parsedCommandLine;\n if (projectSession) {\n cached.projectSession = projectSession;\n cached.diagnosticsCacheKey = null;\n cached.diagnosticsCacheResult = null;\n }\n cached.projectSession.refresh({\n parsedCommandLine,\n });\n TYPECHECK_SESSION_BY_PROJECT.delete(sessionKey);\n TYPECHECK_SESSION_BY_PROJECT.set(sessionKey, cached);\n return cached;\n }\n\n const session = createTypecheckSession(parsedCommandLine, projectSession);\n TYPECHECK_SESSION_BY_PROJECT.set(sessionKey, session);\n trimCacheToLimit(TYPECHECK_SESSION_BY_PROJECT, TYPECHECK_SESSION_CACHE_LIMIT);\n return session;\n}\n\nexport function createLitsxTypecheckSession(rawArgs = process.argv.slice(2), options = {}) {\n const parsedCommandLine = resolveParsedCommandLine(rawArgs);\n return getTypecheckSession(parsedCommandLine, options.projectSession);\n}\n\nfunction createDiagnosticsCacheKey(session) {\n const parsedCommandLine = session.parsedCommandLine;\n const fileVersions = parsedCommandLine.fileNames.map((fileName) => (\n `${fileName}:${getFileVersion(fileName) ?? \"missing\"}`\n ));\n return `${parsedCommandLine.projectVersion || \"unknown\"}\\0${fileVersions.join(\"\\0\")}`;\n}\n\nfunction runTypecheckSession(session) {\n const parsedCommandLine = session.parsedCommandLine;\n\n if (parsedCommandLine.errors?.length) {\n const output = ts.formatDiagnosticsWithColorAndContext(parsedCommandLine.errors, FORMAT_HOST);\n if (output) {\n process.stderr.write(output);\n }\n return 1;\n }\n\n const virtualizationState = session.virtualizationState;\n session.projectSession.refresh({\n parsedCommandLine,\n });\n for (const fileName of parsedCommandLine.fileNames) {\n const sourceText = session.projectSession.readFile?.(fileName) ?? ts.sys.readFile(fileName);\n if (typeof sourceText !== \"string\") {\n session.projectSession.clearOverlayFile(fileName);\n continue;\n }\n\n const virtualizedText = virtualizationState.getVirtualizedText(fileName, sourceText);\n if (virtualizedText === sourceText) {\n session.projectSession.clearOverlayFile(fileName);\n continue;\n }\n\n session.projectSession.setOverlayFile(fileName, virtualizedText);\n }\n\n const program = profilePhase(\n \"typescript-typecheck\",\n \"create-program\",\n () => session.projectSession.getProgram(),\n );\n\n const diagnosticsCacheKey = profilePhase(\n \"typescript-typecheck\",\n \"diagnostic-cache-key\",\n () => createDiagnosticsCacheKey(session),\n );\n\n if (\n session.diagnosticsCacheKey === diagnosticsCacheKey &&\n session.diagnosticsCacheResult\n ) {\n const cachedResult = session.diagnosticsCacheResult;\n if (cachedResult.output) {\n process.stderr.write(cachedResult.output);\n }\n return cachedResult.exitCode;\n }\n\n const diagnostics = profilePhase(\n \"typescript-typecheck\",\n \"diagnostics\",\n () => ts.getPreEmitDiagnostics(program),\n )\n .map((diagnostic) => remapDiagnostic(diagnostic, virtualizationState));\n\n if (diagnostics.length > 0) {\n const output = ts.formatDiagnosticsWithColorAndContext(diagnostics, FORMAT_HOST);\n if (output) {\n process.stderr.write(output);\n }\n session.diagnosticsCacheKey = diagnosticsCacheKey;\n session.diagnosticsCacheResult = {\n exitCode: 1,\n output,\n };\n return 1;\n }\n\n session.diagnosticsCacheKey = diagnosticsCacheKey;\n session.diagnosticsCacheResult = {\n exitCode: 0,\n output: \"\",\n };\n return 0;\n}\n\nexport function runLitsxTypecheck(rawArgs = process.argv.slice(2)) {\n const session = Array.isArray(rawArgs)\n ? createLitsxTypecheckSession(rawArgs)\n : rawArgs;\n return runTypecheckSession(session);\n}\n\nif (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {\n process.exitCode = runLitsxTypecheck(process.argv.slice(2));\n}\n"],"names":["createRequire","trimCacheToLimit","looksLikeLitsxJsx","virtualization","createToolingVirtualLitsxSource","remapVirtualText","remapToolingTextSpanToOriginal","fileURLToPath"],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var authoredSemantics = require('./authored-semantics.cjs');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TypeScript-facing virtualization helpers for LitSX authored syntax.
|
|
7
|
+
*
|
|
8
|
+
* The tsserver plugin, CLI typechecker, editor sessions, and lint tooling use
|
|
9
|
+
* this module to translate LitSX-only forms into TypeScript-safe source text,
|
|
10
|
+
* then remap diagnostics, hovers, and completions back to authored positions.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
function createToolingVirtualLitsxSource(sourceText, options = {}) {
|
|
14
|
+
const virtualization = authoredSemantics.createVirtualLitsxJsxSource(sourceText, options);
|
|
15
|
+
const hoistNames = new Set();
|
|
16
|
+
const usesTypeScriptSyntax = options.plugins?.includes("typescript");
|
|
17
|
+
|
|
18
|
+
for (const match of virtualization.code.matchAll(authoredSemantics.STATIC_HOIST_CALL_RE)) {
|
|
19
|
+
hoistNames.add(match[1]);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (hoistNames.size === 0) {
|
|
23
|
+
return {
|
|
24
|
+
...virtualization,
|
|
25
|
+
toolingPreamble: "",
|
|
26
|
+
toolingPreambleLength: 0,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const toolingDeclarations = [];
|
|
31
|
+
|
|
32
|
+
toolingDeclarations.push(
|
|
33
|
+
...Array.from(hoistNames)
|
|
34
|
+
.sort()
|
|
35
|
+
.map((name) => (
|
|
36
|
+
usesTypeScriptSyntax
|
|
37
|
+
? (
|
|
38
|
+
name === "__litsx_static_lightDom"
|
|
39
|
+
? "declare function __litsx_static_lightDom(): void;\n"
|
|
40
|
+
: `declare function ${name}<T = unknown>(value: T): T;\n`
|
|
41
|
+
)
|
|
42
|
+
: (
|
|
43
|
+
name === "__litsx_static_lightDom"
|
|
44
|
+
? "function __litsx_static_lightDom() {}\n"
|
|
45
|
+
: `/** @template T @param {T} value @returns {T} */\nfunction ${name}(value) { return value; }\n`
|
|
46
|
+
)
|
|
47
|
+
))
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const toolingPreamble = toolingDeclarations.join("");
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
...virtualization,
|
|
54
|
+
code: `${toolingPreamble}${virtualization.code}`,
|
|
55
|
+
toolingPreamble,
|
|
56
|
+
toolingPreambleLength: toolingPreamble.length,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function mapOriginalPositionToToolingVirtual(position, virtualization) {
|
|
61
|
+
return authoredSemantics.mapOriginalPositionToVirtual(position, virtualization.replacements) + (virtualization.toolingPreambleLength ?? 0);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function remapToolingTextSpanToOriginal(span, virtualization) {
|
|
65
|
+
if (!span) {
|
|
66
|
+
return span;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const preambleLength = virtualization.toolingPreambleLength ?? 0;
|
|
70
|
+
const start = Math.max(0, (span.start ?? 0) - preambleLength);
|
|
71
|
+
|
|
72
|
+
return authoredSemantics.remapTextSpanToOriginal(
|
|
73
|
+
{
|
|
74
|
+
start,
|
|
75
|
+
length: span.length ?? 0,
|
|
76
|
+
},
|
|
77
|
+
virtualization.replacements,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function collectLitsxAuthoredDiagnostics(sourceText, ts, options = {}) {
|
|
82
|
+
return authoredSemantics.collectLitsxAuthoredIssues(sourceText, options).map((issue) => ({
|
|
83
|
+
start: issue.start,
|
|
84
|
+
length: issue.length,
|
|
85
|
+
category: issue.severity === "warning"
|
|
86
|
+
? (ts?.DiagnosticCategory?.Warning ?? 0)
|
|
87
|
+
: (ts?.DiagnosticCategory?.Error ?? 1),
|
|
88
|
+
code: issue.code,
|
|
89
|
+
source: "@litsx/typescript",
|
|
90
|
+
messageText: issue.message,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
exports.collectLitsxAuthoredIssues = authoredSemantics.collectLitsxAuthoredIssues;
|
|
95
|
+
exports.createVirtualLitsxJsxSource = authoredSemantics.createVirtualLitsxJsxSource;
|
|
96
|
+
exports.decodeVirtualAttributeName = authoredSemantics.decodeVirtualAttributeName;
|
|
97
|
+
exports.getLitsxAttributeCompletionNames = authoredSemantics.getLitsxAttributeCompletionNames;
|
|
98
|
+
exports.getLitsxMarkupCompletionNames = authoredSemantics.getLitsxMarkupCompletionNames;
|
|
99
|
+
exports.inferLitsxAttributeCompletionContext = authoredSemantics.inferLitsxAttributeCompletionContext;
|
|
100
|
+
exports.inferLitsxAttributeInfoAtPosition = authoredSemantics.inferLitsxAttributeInfoAtPosition;
|
|
101
|
+
exports.inferLitsxComponentEventNames = authoredSemantics.inferLitsxComponentEventNames;
|
|
102
|
+
exports.inferLitsxComponentPropNames = authoredSemantics.inferLitsxComponentPropNames;
|
|
103
|
+
exports.inferLitsxMarkupCompletionContext = authoredSemantics.inferLitsxMarkupCompletionContext;
|
|
104
|
+
exports.inferLitsxStaticHoistInfoAtPosition = authoredSemantics.inferLitsxStaticHoistInfoAtPosition;
|
|
105
|
+
exports.looksLikeLitsxJsx = authoredSemantics.looksLikeLitsxJsx;
|
|
106
|
+
exports.mapOriginalPositionToVirtual = authoredSemantics.mapOriginalPositionToVirtual;
|
|
107
|
+
exports.remapTextSpanToOriginal = authoredSemantics.remapTextSpanToOriginal;
|
|
108
|
+
exports.remapVirtualText = authoredSemantics.remapVirtualText;
|
|
109
|
+
exports.collectLitsxAuthoredDiagnostics = collectLitsxAuthoredDiagnostics;
|
|
110
|
+
exports.createToolingVirtualLitsxSource = createToolingVirtualLitsxSource;
|
|
111
|
+
exports.mapOriginalPositionToToolingVirtual = mapOriginalPositionToToolingVirtual;
|
|
112
|
+
exports.remapToolingTextSpanToOriginal = remapToolingTextSpanToOriginal;
|
|
113
|
+
//# sourceMappingURL=virtualization.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualization.cjs","sources":["../src/virtualization.js"],"sourcesContent":["import {\n collectLitsxAuthoredIssues,\n createVirtualLitsxJsxSource,\n decodeVirtualAttributeName,\n inferLitsxStaticHoistInfoAtPosition,\n getLitsxAttributeCompletionNames,\n inferLitsxComponentPropNames,\n inferLitsxComponentEventNames,\n inferLitsxAttributeCompletionContext,\n inferLitsxAttributeInfoAtPosition,\n inferLitsxMarkupCompletionContext,\n getLitsxMarkupCompletionNames,\n looksLikeLitsxJsx,\n mapOriginalPositionToVirtual,\n remapTextSpanToOriginal,\n remapVirtualText,\n STATIC_HOIST_CALL_RE,\n} from \"./authored-semantics.js\";\n\n/**\n * TypeScript-facing virtualization helpers for LitSX authored syntax.\n *\n * The tsserver plugin, CLI typechecker, editor sessions, and lint tooling use\n * this module to translate LitSX-only forms into TypeScript-safe source text,\n * then remap diagnostics, hovers, and completions back to authored positions.\n */\n\nexport function createToolingVirtualLitsxSource(sourceText, options = {}) {\n const virtualization = createVirtualLitsxJsxSource(sourceText, options);\n const hoistNames = new Set();\n const usesTypeScriptSyntax = options.plugins?.includes(\"typescript\");\n\n for (const match of virtualization.code.matchAll(STATIC_HOIST_CALL_RE)) {\n hoistNames.add(match[1]);\n }\n\n if (hoistNames.size === 0) {\n return {\n ...virtualization,\n toolingPreamble: \"\",\n toolingPreambleLength: 0,\n };\n }\n\n const toolingDeclarations = [];\n\n toolingDeclarations.push(\n ...Array.from(hoistNames)\n .sort()\n .map((name) => (\n usesTypeScriptSyntax\n ? (\n name === \"__litsx_static_lightDom\"\n ? \"declare function __litsx_static_lightDom(): void;\\n\"\n : `declare function ${name}<T = unknown>(value: T): T;\\n`\n )\n : (\n name === \"__litsx_static_lightDom\"\n ? \"function __litsx_static_lightDom() {}\\n\"\n : `/** @template T @param {T} value @returns {T} */\\nfunction ${name}(value) { return value; }\\n`\n )\n ))\n );\n\n const toolingPreamble = toolingDeclarations.join(\"\");\n\n return {\n ...virtualization,\n code: `${toolingPreamble}${virtualization.code}`,\n toolingPreamble,\n toolingPreambleLength: toolingPreamble.length,\n };\n}\n\nexport function mapOriginalPositionToToolingVirtual(position, virtualization) {\n return mapOriginalPositionToVirtual(position, virtualization.replacements) + (virtualization.toolingPreambleLength ?? 0);\n}\n\nexport function remapToolingTextSpanToOriginal(span, virtualization) {\n if (!span) {\n return span;\n }\n\n const preambleLength = virtualization.toolingPreambleLength ?? 0;\n const start = Math.max(0, (span.start ?? 0) - preambleLength);\n\n return remapTextSpanToOriginal(\n {\n start,\n length: span.length ?? 0,\n },\n virtualization.replacements,\n );\n}\n\nexport function collectLitsxAuthoredDiagnostics(sourceText, ts, options = {}) {\n return collectLitsxAuthoredIssues(sourceText, options).map((issue) => ({\n start: issue.start,\n length: issue.length,\n category: issue.severity === \"warning\"\n ? (ts?.DiagnosticCategory?.Warning ?? 0)\n : (ts?.DiagnosticCategory?.Error ?? 1),\n code: issue.code,\n source: \"@litsx/typescript\",\n messageText: issue.message,\n }));\n}\n\nexport {\n collectLitsxAuthoredIssues,\n createVirtualLitsxJsxSource,\n decodeVirtualAttributeName,\n inferLitsxStaticHoistInfoAtPosition,\n getLitsxAttributeCompletionNames,\n inferLitsxComponentPropNames,\n inferLitsxComponentEventNames,\n inferLitsxAttributeCompletionContext,\n inferLitsxAttributeInfoAtPosition,\n inferLitsxMarkupCompletionContext,\n getLitsxMarkupCompletionNames,\n looksLikeLitsxJsx,\n mapOriginalPositionToVirtual,\n remapTextSpanToOriginal,\n remapVirtualText,\n};\n"],"names":["createVirtualLitsxJsxSource","STATIC_HOIST_CALL_RE","mapOriginalPositionToVirtual","remapTextSpanToOriginal","collectLitsxAuthoredIssues"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@litsx/typescript",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "TypeScript language-service, typecheck, and editor support for LitSX authored syntax",
|
|
5
|
+
"author": "LitSX Team",
|
|
6
|
+
"homepage": "https://litsx.dev/",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/litsxdev/litsx/issues"
|
|
9
|
+
},
|
|
10
|
+
"license": "Apache-2.0",
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public",
|
|
13
|
+
"provenance": true
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"typescript",
|
|
17
|
+
"tsserver",
|
|
18
|
+
"jsx",
|
|
19
|
+
"lit",
|
|
20
|
+
"litsx"
|
|
21
|
+
],
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/litsxdev/litsx.git",
|
|
25
|
+
"directory": "packages/typescript"
|
|
26
|
+
},
|
|
27
|
+
"type": "module",
|
|
28
|
+
"main": "./tsserver-plugin.cjs",
|
|
29
|
+
"module": "./src/index.js",
|
|
30
|
+
"bin": {
|
|
31
|
+
"litsx-tsc": "./dist/litsx-tsc.js"
|
|
32
|
+
},
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"require": "./tsserver-plugin.cjs",
|
|
36
|
+
"import": "./src/index.js",
|
|
37
|
+
"default": "./src/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./authored-semantics": {
|
|
40
|
+
"require": "./dist/authored-semantics.cjs",
|
|
41
|
+
"import": "./src/authored-semantics.js",
|
|
42
|
+
"default": "./src/authored-semantics.js"
|
|
43
|
+
},
|
|
44
|
+
"./virtualization": {
|
|
45
|
+
"require": "./dist/virtualization.cjs",
|
|
46
|
+
"import": "./src/virtualization.js",
|
|
47
|
+
"default": "./src/virtualization.js"
|
|
48
|
+
},
|
|
49
|
+
"./typecheck": {
|
|
50
|
+
"require": "./dist/typecheck.cjs",
|
|
51
|
+
"import": "./src/typecheck.js",
|
|
52
|
+
"default": "./src/typecheck.js"
|
|
53
|
+
},
|
|
54
|
+
"./editor-session": {
|
|
55
|
+
"require": "./dist/editor-session.cjs",
|
|
56
|
+
"import": "./src/editor-session.js",
|
|
57
|
+
"default": "./src/editor-session.js"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"files": [
|
|
61
|
+
"dist",
|
|
62
|
+
"src",
|
|
63
|
+
"tsserver-plugin.cjs",
|
|
64
|
+
"README.md"
|
|
65
|
+
],
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@babel/parser": "^7.29.3"
|
|
68
|
+
},
|
|
69
|
+
"peerDependencies": {
|
|
70
|
+
"typescript": ">=5"
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "../../node_modules/.bin/rollup --config rollup.config.js",
|
|
74
|
+
"prepack": "yarn build"
|
|
75
|
+
}
|
|
76
|
+
}
|