@gql.tada/cli-utils 1.7.1 → 1.7.2
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/CHANGELOG.md +7 -0
- package/LICENSE.md +17 -5
- package/dist/chunks/index-chunk.js +25 -20
- package/dist/chunks/index-chunk.js.map +1 -1
- package/dist/chunks/index-chunk.mjs +24 -19
- package/dist/chunks/index-chunk.mjs.map +1 -1
- package/dist/chunks/thread-chunk2.js +23 -16
- package/dist/chunks/thread-chunk2.js.map +1 -1
- package/dist/chunks/thread-chunk2.mjs +47 -40
- package/dist/chunks/thread-chunk2.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -77,9 +77,9 @@ function resolveModulePath(r, a, t) {
|
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function collectImportsFromSourceFile(r, a, t, i) {
|
|
81
|
-
var
|
|
82
|
-
var
|
|
80
|
+
function collectImportsFromSourceFile(r, a, t, i, o) {
|
|
81
|
+
var s = [];
|
|
82
|
+
var l = function getTadaOutputPaths(e) {
|
|
83
83
|
var r = [];
|
|
84
84
|
if ("schema" in e && e.tadaOutputLocation) {
|
|
85
85
|
r.push(e.tadaOutputLocation);
|
|
@@ -88,7 +88,7 @@ function collectImportsFromSourceFile(r, a, t, i) {
|
|
|
88
88
|
}(a);
|
|
89
89
|
!function visit(a) {
|
|
90
90
|
if (e.isImportDeclaration(a) && e.isStringLiteral(a.moduleSpecifier)) {
|
|
91
|
-
var
|
|
91
|
+
var u = a.moduleSpecifier.text;
|
|
92
92
|
if (!function isTadaImport(e, r, a) {
|
|
93
93
|
if (e.startsWith(".")) {
|
|
94
94
|
var t = n.dirname(r);
|
|
@@ -99,27 +99,34 @@ function collectImportsFromSourceFile(r, a, t, i) {
|
|
|
99
99
|
}));
|
|
100
100
|
}
|
|
101
101
|
return a.some((r => e === r || e.startsWith(r + "/")));
|
|
102
|
-
}(
|
|
103
|
-
var
|
|
102
|
+
}(u, r.fileName, l)) {
|
|
103
|
+
var c = a.getFullText().trim();
|
|
104
104
|
if (i) {
|
|
105
|
-
var
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
var p = t(u, r.fileName, i);
|
|
106
|
+
if (o) {
|
|
107
|
+
if (p.endsWith(".ts") || p.endsWith(".tsx")) {
|
|
108
|
+
p = p.replace(/\.ts$/, ".js").replace(/\.tsx$/, ".js");
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
p = p.replace(/\.ts$/, "").replace(/\.tsx$/, "");
|
|
112
|
+
}
|
|
113
|
+
if (p && !p.includes("gql.tada")) {
|
|
114
|
+
s.push({
|
|
115
|
+
specifier: p,
|
|
116
|
+
importClause: c.replace(u, p)
|
|
110
117
|
});
|
|
111
118
|
}
|
|
112
119
|
} else {
|
|
113
|
-
|
|
114
|
-
specifier:
|
|
115
|
-
importClause:
|
|
120
|
+
s.push({
|
|
121
|
+
specifier: u,
|
|
122
|
+
importClause: c
|
|
116
123
|
});
|
|
117
124
|
}
|
|
118
125
|
}
|
|
119
126
|
}
|
|
120
127
|
e.forEachChild(a, visit);
|
|
121
128
|
}(r);
|
|
122
|
-
return
|
|
129
|
+
return s;
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
var s = i.expose((async function* _runTurbo(r) {
|
|
@@ -172,7 +179,7 @@ var s = i.expose((async function* _runTurbo(r) {
|
|
|
172
179
|
var u = c.program.getSourceFile(s);
|
|
173
180
|
if (u) {
|
|
174
181
|
var p = Array.isArray(r.turboOutputPath) ? r.turboOutputPath.find((e => e.schemaName === a.schema))?.path : r.turboOutputPath;
|
|
175
|
-
var f = collectImportsFromSourceFile(u, r.pluginConfig, n.resolveModuleName.bind(n), p);
|
|
182
|
+
var f = collectImportsFromSourceFile(u, r.pluginConfig, n.resolveModuleName.bind(n), p, !!n.wasOriginallyNodeNext);
|
|
176
183
|
m.set(s, {
|
|
177
184
|
absolutePath: s,
|
|
178
185
|
imports: f
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-chunk2.js","sources":["../../src/commands/turbo/thread.ts"],"sourcesContent":["import ts from 'typescript';\nimport * as path from 'node:path';\nimport type { GraphQLSPConfig } from '@gql.tada/internal';\n\nimport { getSchemaNamesFromConfig } from '@gql.tada/internal';\nimport { findAllCallExpressions } from '@0no-co/graphqlsp/api';\n\nimport { programFactory } from '../../ts';\nimport { expose } from '../../threads';\n\nimport type {\n TurboSignal,\n TurboWarning,\n TurboDocument,\n GraphQLSourceFile,\n GraphQLSourceImport,\n TurboPath,\n} from './types';\n\nexport interface TurboParams {\n rootPath: string;\n configPath: string;\n pluginConfig: GraphQLSPConfig;\n turboOutputPath: string | TurboPath[];\n}\n\nfunction traceCallToImportSource(\n callExpression: ts.CallExpression,\n sourceFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const typeChecker = program.getTypeChecker();\n const expression = callExpression.expression;\n\n let identifier: ts.Identifier | undefined;\n if (ts.isIdentifier(expression)) {\n identifier = expression;\n } else if (ts.isPropertyAccessExpression(expression) && ts.isIdentifier(expression.expression)) {\n identifier = expression.expression;\n }\n\n if (!identifier) return undefined;\n\n const symbol = typeChecker.getSymbolAtLocation(identifier);\n if (!symbol || !symbol.declarations) return undefined;\n\n for (const declaration of symbol.declarations) {\n const importDeclaration = findImportDeclaration(declaration);\n if (importDeclaration && ts.isStringLiteral(importDeclaration.moduleSpecifier)) {\n const moduleName = importDeclaration.moduleSpecifier.text;\n return resolveModulePath(moduleName, sourceFile, program);\n }\n }\n\n return undefined;\n}\n\nfunction findImportDeclaration(node: ts.Node): ts.ImportDeclaration | undefined {\n let current: ts.Node | undefined = node;\n\n while (current) {\n if (ts.isImportDeclaration(current)) {\n return current;\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\nfunction resolveModulePath(\n moduleName: string,\n containingFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const compilerOptions = program.getCompilerOptions();\n const host = ts.createCompilerHost(compilerOptions);\n\n const resolved = ts.resolveModuleName(moduleName, containingFile.fileName, compilerOptions, host);\n\n if (resolved.resolvedModule) {\n return resolved.resolvedModule.resolvedFileName;\n }\n\n return undefined;\n}\n\nfunction collectImportsFromSourceFile(\n sourceFile: ts.SourceFile,\n pluginConfig: GraphQLSPConfig,\n resolveModuleName: (importSpecifier: string, fromPath: string, toPath: string) => string,\n turboOutputPath?: string\n): GraphQLSourceImport[] {\n const imports: GraphQLSourceImport[] = [];\n\n const tadaImportPaths = getTadaOutputPaths(pluginConfig);\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n const specifier = node.moduleSpecifier.text;\n\n if (!isTadaImport(specifier, sourceFile.fileName, tadaImportPaths)) {\n const importClause = node.getFullText().trim();\n if (turboOutputPath) {\n // Adjust the import specifier to point to the turbo output path\n const adjustedSpecifier = resolveModuleName(\n specifier,\n sourceFile.fileName,\n turboOutputPath\n )\n .replace(/\\.ts$/, '')\n .replace(/\\.tsx$/, '');\n if (adjustedSpecifier && !adjustedSpecifier.includes('gql.tada')) {\n imports.push({\n specifier: adjustedSpecifier,\n importClause: importClause.replace(specifier, adjustedSpecifier),\n });\n }\n } else {\n imports.push({ specifier, importClause });\n }\n }\n }\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return imports;\n}\n\nfunction getTadaOutputPaths(pluginConfig: GraphQLSPConfig): string[] {\n const paths: string[] = [];\n\n if ('schema' in pluginConfig && pluginConfig.tadaOutputLocation) {\n paths.push(pluginConfig.tadaOutputLocation);\n } else {\n // Multiple schemas aren't supported in this context\n }\n\n return paths;\n}\n\nfunction isTadaImport(\n importSpecifier: string,\n sourceFilePath: string,\n tadaOutputLocationPaths: string[]\n): boolean {\n if (importSpecifier.startsWith('.')) {\n const sourceDir = path.dirname(sourceFilePath);\n const absoluteImportPath = path.resolve(sourceDir, importSpecifier);\n\n return tadaOutputLocationPaths.some((tadaOutputLocationPath) => {\n const absoluteTadaPath = path.resolve(tadaOutputLocationPath);\n return (\n absoluteImportPath === absoluteTadaPath ||\n absoluteImportPath.startsWith(absoluteTadaPath + path.sep)\n );\n });\n }\n\n return tadaOutputLocationPaths.some(\n (tadaPath) => importSpecifier === tadaPath || importSpecifier.startsWith(tadaPath + '/')\n );\n}\n\nasync function* _runTurbo(params: TurboParams): AsyncIterableIterator<TurboSignal> {\n const schemaNames = getSchemaNamesFromConfig(params.pluginConfig);\n const factory = programFactory(params);\n\n // NOTE: We add our override declaration here before loading all files\n // This sets `__cacheDisabled` on the turbo cache, which disables the cache temporarily\n // If we don't disable the cache then we couldn't regenerate it from inferred types\n factory.addSourceFile({\n fileId: '__gql-tada-override__.d.ts',\n sourceText: DECLARATION_OVERRIDE,\n scriptKind: ts.ScriptKind.TS,\n });\n\n const externalFiles = factory.createExternalFiles();\n if (externalFiles.length) {\n yield { kind: 'EXTERNAL_WARNING' };\n await factory.addVirtualFiles(externalFiles);\n }\n\n const container = factory.build();\n const pluginInfo = container.buildPluginInfo(params.pluginConfig);\n const sourceFiles = container.getSourceFiles();\n\n yield {\n kind: 'FILE_COUNT',\n fileCount: sourceFiles.length,\n };\n\n const checker = container.program.getTypeChecker();\n const uniqueGraphQLSources = new Map<string, GraphQLSourceFile>();\n\n for (const sourceFile of sourceFiles) {\n let filePath = sourceFile.fileName;\n const documents: TurboDocument[] = [];\n const warnings: TurboWarning[] = [];\n\n const calls = findAllCallExpressions(sourceFile, pluginInfo, false).nodes;\n for (const call of calls) {\n const callExpression = call.node.parent;\n if (!ts.isCallExpression(callExpression)) {\n continue;\n }\n\n const position = container.getSourcePosition(sourceFile, callExpression.getStart());\n filePath = position.fileName;\n if (!schemaNames.has(call.schema)) {\n warnings.push({\n message: call.schema\n ? `The '${call.schema}' schema is not in the configuration but was referenced by document.`\n : schemaNames.size > 1\n ? 'The document is not for a known schema. Have you re-generated the output file?'\n : 'Multiple schemas are configured, but the document is not for a specific schema.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const graphqlSourcePath = traceCallToImportSource(\n callExpression,\n sourceFile,\n container.program\n );\n\n if (graphqlSourcePath && !uniqueGraphQLSources.has(graphqlSourcePath)) {\n const graphqlSourceFile = container.program.getSourceFile(graphqlSourcePath);\n if (graphqlSourceFile) {\n const turboPath = Array.isArray(params.turboOutputPath)\n ? params.turboOutputPath.find((cfg) => cfg.schemaName === call.schema)?.path\n : params.turboOutputPath;\n const imports = collectImportsFromSourceFile(\n graphqlSourceFile,\n params.pluginConfig,\n factory.resolveModuleName.bind(factory),\n turboPath\n );\n uniqueGraphQLSources.set(graphqlSourcePath, {\n absolutePath: graphqlSourcePath,\n imports,\n });\n }\n }\n\n const returnType = checker.getTypeAtLocation(callExpression);\n const argumentType = checker.getTypeAtLocation(call.node);\n // NOTE: `returnType.symbol` is incorrectly typed and is in fact\n // optional and not always present\n if (!returnType.symbol || returnType.symbol.getEscapedName() !== 'TadaDocumentNode') {\n warnings.push({\n message:\n `The discovered document is not of type \"TadaDocumentNode\".\\n` +\n 'If this is unexpected, please file an issue describing your case.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const argumentKey: string =\n 'value' in argumentType &&\n typeof argumentType.value === 'string' &&\n (argumentType.flags & ts.TypeFlags.StringLiteral) === 0\n ? JSON.stringify(argumentType.value)\n : checker.typeToString(argumentType, callExpression, BUILDER_FLAGS);\n const documentType = checker.typeToString(returnType, callExpression, BUILDER_FLAGS);\n\n documents.push({\n schemaName: call.schema,\n argumentKey,\n documentType,\n });\n }\n\n yield {\n kind: 'FILE_TURBO',\n filePath,\n documents,\n warnings,\n };\n }\n\n if (uniqueGraphQLSources.size > 0) {\n yield {\n kind: 'GRAPHQL_SOURCES',\n sources: Array.from(uniqueGraphQLSources.values()),\n };\n }\n}\n\nexport const runTurbo = expose(_runTurbo);\n\nconst BUILDER_FLAGS: ts.TypeFormatFlags =\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.NoTypeReduction |\n ts.TypeFormatFlags.InTypeAlias |\n ts.TypeFormatFlags.UseFullyQualifiedType |\n ts.TypeFormatFlags.GenerateNamesForShadowedTypeParams |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope |\n ts.TypeFormatFlags.AllowUniqueESSymbolType |\n ts.TypeFormatFlags.WriteTypeArgumentsOfSignature;\n\nconst DECLARATION_OVERRIDE = `\nimport * as _gqlTada from 'gql.tada';\ndeclare module 'gql.tada' {\n interface setupCache {\n readonly __cacheDisabled: true;\n }\n}\n`.trim();\n"],"names":["traceCallToImportSource","callExpression","sourceFile","program","typeChecker","getTypeChecker","expression","identifier","ts","isIdentifier","isPropertyAccessExpression","symbol","getSymbolAtLocation","declarations","declaration","importDeclaration","findImportDeclaration","isStringLiteral","moduleSpecifier","resolveModulePath","text","node","current","isImportDeclaration","parent","moduleName","containingFile","compilerOptions","getCompilerOptions","host","createCompilerHost","resolved","resolveModuleName","fileName","resolvedModule","resolvedFileName","collectImportsFromSourceFile","pluginConfig","turboOutputPath","imports","tadaImportPaths","getTadaOutputPaths","paths","tadaOutputLocation","push","visit","specifier","isTadaImport","importSpecifier","sourceFilePath","tadaOutputLocationPaths","startsWith","sourceDir","path","dirname","absoluteImportPath","resolve","some","tadaOutputLocationPath","absoluteTadaPath","sep","tadaPath","importClause","getFullText","trim","adjustedSpecifier","replace","includes","forEachChild","runTurbo","expose","async","_runTurbo","params","schemaNames","getSchemaNamesFromConfig","factory","programFactory","addSourceFile","fileId","sourceText","DECLARATION_OVERRIDE","scriptKind","ScriptKind","TS","externalFiles","createExternalFiles","length","kind","addVirtualFiles","container","build","pluginInfo","buildPluginInfo","sourceFiles","getSourceFiles","fileCount","checker","uniqueGraphQLSources","Map","filePath","documents","warnings","calls","findAllCallExpressions","nodes","_loop","call","isCallExpression","position","getSourcePosition","getStart","has","schema","message","size","file","line","col","graphqlSourcePath","graphqlSourceFile","getSourceFile","turboPath","Array","isArray","find","cfg","schemaName","bind","set","absolutePath","returnType","getTypeAtLocation","argumentType","getEscapedName","argumentKey","value","flags","TypeFlags","StringLiteral","JSON","stringify","typeToString","BUILDER_FLAGS","documentType","sources","from","values","TypeFormatFlags","NoTruncation","NoTypeReduction","InTypeAlias","UseFullyQualifiedType","GenerateNamesForShadowedTypeParams","UseAliasDefinedOutsideCurrentScope","AllowUniqueESSymbolType","WriteTypeArgumentsOfSignature"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thread-chunk2.js","sources":["../../src/commands/turbo/thread.ts"],"sourcesContent":["import ts from 'typescript';\nimport * as path from 'node:path';\nimport type { GraphQLSPConfig } from '@gql.tada/internal';\n\nimport { getSchemaNamesFromConfig } from '@gql.tada/internal';\nimport { findAllCallExpressions } from '@0no-co/graphqlsp/api';\n\nimport { programFactory } from '../../ts';\nimport { expose } from '../../threads';\n\nimport type {\n TurboSignal,\n TurboWarning,\n TurboDocument,\n GraphQLSourceFile,\n GraphQLSourceImport,\n TurboPath,\n} from './types';\n\nexport interface TurboParams {\n rootPath: string;\n configPath: string;\n pluginConfig: GraphQLSPConfig;\n turboOutputPath: string | TurboPath[];\n}\n\nfunction traceCallToImportSource(\n callExpression: ts.CallExpression,\n sourceFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const typeChecker = program.getTypeChecker();\n const expression = callExpression.expression;\n\n let identifier: ts.Identifier | undefined;\n if (ts.isIdentifier(expression)) {\n identifier = expression;\n } else if (ts.isPropertyAccessExpression(expression) && ts.isIdentifier(expression.expression)) {\n identifier = expression.expression;\n }\n\n if (!identifier) return undefined;\n\n const symbol = typeChecker.getSymbolAtLocation(identifier);\n if (!symbol || !symbol.declarations) return undefined;\n\n for (const declaration of symbol.declarations) {\n const importDeclaration = findImportDeclaration(declaration);\n if (importDeclaration && ts.isStringLiteral(importDeclaration.moduleSpecifier)) {\n const moduleName = importDeclaration.moduleSpecifier.text;\n return resolveModulePath(moduleName, sourceFile, program);\n }\n }\n\n return undefined;\n}\n\nfunction findImportDeclaration(node: ts.Node): ts.ImportDeclaration | undefined {\n let current: ts.Node | undefined = node;\n\n while (current) {\n if (ts.isImportDeclaration(current)) {\n return current;\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\nfunction resolveModulePath(\n moduleName: string,\n containingFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const compilerOptions = program.getCompilerOptions();\n const host = ts.createCompilerHost(compilerOptions);\n\n const resolved = ts.resolveModuleName(moduleName, containingFile.fileName, compilerOptions, host);\n\n if (resolved.resolvedModule) {\n return resolved.resolvedModule.resolvedFileName;\n }\n\n return undefined;\n}\n\nfunction collectImportsFromSourceFile(\n sourceFile: ts.SourceFile,\n pluginConfig: GraphQLSPConfig,\n resolveModuleName: (importSpecifier: string, fromPath: string, toPath: string) => string,\n turboOutputPath?: string,\n shouldTreatImportsAsNodeNext?: boolean\n): GraphQLSourceImport[] {\n const imports: GraphQLSourceImport[] = [];\n\n const tadaImportPaths = getTadaOutputPaths(pluginConfig);\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n const specifier = node.moduleSpecifier.text;\n\n if (!isTadaImport(specifier, sourceFile.fileName, tadaImportPaths)) {\n const importClause = node.getFullText().trim();\n if (turboOutputPath) {\n // Adjust the import specifier to point to the turbo output path\n let adjustedSpecifier = resolveModuleName(\n specifier,\n sourceFile.fileName,\n turboOutputPath\n );\n\n if (shouldTreatImportsAsNodeNext) {\n if (adjustedSpecifier.endsWith('.ts') || adjustedSpecifier.endsWith('.tsx')) {\n adjustedSpecifier = adjustedSpecifier\n .replace(/\\.ts$/, '.js')\n .replace(/\\.tsx$/, '.js');\n }\n } else {\n adjustedSpecifier = adjustedSpecifier.replace(/\\.ts$/, '').replace(/\\.tsx$/, '');\n }\n\n if (adjustedSpecifier && !adjustedSpecifier.includes('gql.tada')) {\n imports.push({\n specifier: adjustedSpecifier,\n importClause: importClause.replace(specifier, adjustedSpecifier),\n });\n }\n } else {\n imports.push({ specifier, importClause });\n }\n }\n }\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return imports;\n}\n\nfunction getTadaOutputPaths(pluginConfig: GraphQLSPConfig): string[] {\n const paths: string[] = [];\n\n if ('schema' in pluginConfig && pluginConfig.tadaOutputLocation) {\n paths.push(pluginConfig.tadaOutputLocation);\n } else {\n // Multiple schemas aren't supported in this context\n }\n\n return paths;\n}\n\nfunction isTadaImport(\n importSpecifier: string,\n sourceFilePath: string,\n tadaOutputLocationPaths: string[]\n): boolean {\n if (importSpecifier.startsWith('.')) {\n const sourceDir = path.dirname(sourceFilePath);\n const absoluteImportPath = path.resolve(sourceDir, importSpecifier);\n\n return tadaOutputLocationPaths.some((tadaOutputLocationPath) => {\n const absoluteTadaPath = path.resolve(tadaOutputLocationPath);\n return (\n absoluteImportPath === absoluteTadaPath ||\n absoluteImportPath.startsWith(absoluteTadaPath + path.sep)\n );\n });\n }\n\n return tadaOutputLocationPaths.some(\n (tadaPath) => importSpecifier === tadaPath || importSpecifier.startsWith(tadaPath + '/')\n );\n}\n\nasync function* _runTurbo(params: TurboParams): AsyncIterableIterator<TurboSignal> {\n const schemaNames = getSchemaNamesFromConfig(params.pluginConfig);\n const factory = programFactory(params);\n\n // NOTE: We add our override declaration here before loading all files\n // This sets `__cacheDisabled` on the turbo cache, which disables the cache temporarily\n // If we don't disable the cache then we couldn't regenerate it from inferred types\n factory.addSourceFile({\n fileId: '__gql-tada-override__.d.ts',\n sourceText: DECLARATION_OVERRIDE,\n scriptKind: ts.ScriptKind.TS,\n });\n\n const externalFiles = factory.createExternalFiles();\n if (externalFiles.length) {\n yield { kind: 'EXTERNAL_WARNING' };\n await factory.addVirtualFiles(externalFiles);\n }\n\n const container = factory.build();\n const pluginInfo = container.buildPluginInfo(params.pluginConfig);\n const sourceFiles = container.getSourceFiles();\n\n yield {\n kind: 'FILE_COUNT',\n fileCount: sourceFiles.length,\n };\n\n const checker = container.program.getTypeChecker();\n const uniqueGraphQLSources = new Map<string, GraphQLSourceFile>();\n\n for (const sourceFile of sourceFiles) {\n let filePath = sourceFile.fileName;\n const documents: TurboDocument[] = [];\n const warnings: TurboWarning[] = [];\n\n const calls = findAllCallExpressions(sourceFile, pluginInfo, false).nodes;\n for (const call of calls) {\n const callExpression = call.node.parent;\n if (!ts.isCallExpression(callExpression)) {\n continue;\n }\n\n const position = container.getSourcePosition(sourceFile, callExpression.getStart());\n filePath = position.fileName;\n if (!schemaNames.has(call.schema)) {\n warnings.push({\n message: call.schema\n ? `The '${call.schema}' schema is not in the configuration but was referenced by document.`\n : schemaNames.size > 1\n ? 'The document is not for a known schema. Have you re-generated the output file?'\n : 'Multiple schemas are configured, but the document is not for a specific schema.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const graphqlSourcePath = traceCallToImportSource(\n callExpression,\n sourceFile,\n container.program\n );\n\n if (graphqlSourcePath && !uniqueGraphQLSources.has(graphqlSourcePath)) {\n const graphqlSourceFile = container.program.getSourceFile(graphqlSourcePath);\n if (graphqlSourceFile) {\n const turboPath = Array.isArray(params.turboOutputPath)\n ? params.turboOutputPath.find((cfg) => cfg.schemaName === call.schema)?.path\n : params.turboOutputPath;\n const imports = collectImportsFromSourceFile(\n graphqlSourceFile,\n params.pluginConfig,\n factory.resolveModuleName.bind(factory),\n turboPath,\n !!factory.wasOriginallyNodeNext\n );\n uniqueGraphQLSources.set(graphqlSourcePath, {\n absolutePath: graphqlSourcePath,\n imports,\n });\n }\n }\n\n const returnType = checker.getTypeAtLocation(callExpression);\n const argumentType = checker.getTypeAtLocation(call.node);\n // NOTE: `returnType.symbol` is incorrectly typed and is in fact\n // optional and not always present\n if (!returnType.symbol || returnType.symbol.getEscapedName() !== 'TadaDocumentNode') {\n warnings.push({\n message:\n `The discovered document is not of type \"TadaDocumentNode\".\\n` +\n 'If this is unexpected, please file an issue describing your case.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const argumentKey: string =\n 'value' in argumentType &&\n typeof argumentType.value === 'string' &&\n (argumentType.flags & ts.TypeFlags.StringLiteral) === 0\n ? JSON.stringify(argumentType.value)\n : checker.typeToString(argumentType, callExpression, BUILDER_FLAGS);\n const documentType = checker.typeToString(returnType, callExpression, BUILDER_FLAGS);\n\n documents.push({\n schemaName: call.schema,\n argumentKey,\n documentType,\n });\n }\n\n yield {\n kind: 'FILE_TURBO',\n filePath,\n documents,\n warnings,\n };\n }\n\n if (uniqueGraphQLSources.size > 0) {\n yield {\n kind: 'GRAPHQL_SOURCES',\n sources: Array.from(uniqueGraphQLSources.values()),\n };\n }\n}\n\nexport const runTurbo = expose(_runTurbo);\n\nconst BUILDER_FLAGS: ts.TypeFormatFlags =\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.NoTypeReduction |\n ts.TypeFormatFlags.InTypeAlias |\n ts.TypeFormatFlags.UseFullyQualifiedType |\n ts.TypeFormatFlags.GenerateNamesForShadowedTypeParams |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope |\n ts.TypeFormatFlags.AllowUniqueESSymbolType |\n ts.TypeFormatFlags.WriteTypeArgumentsOfSignature;\n\nconst DECLARATION_OVERRIDE = `\nimport * as _gqlTada from 'gql.tada';\ndeclare module 'gql.tada' {\n interface setupCache {\n readonly __cacheDisabled: true;\n }\n}\n`.trim();\n"],"names":["traceCallToImportSource","callExpression","sourceFile","program","typeChecker","getTypeChecker","expression","identifier","ts","isIdentifier","isPropertyAccessExpression","symbol","getSymbolAtLocation","declarations","declaration","importDeclaration","findImportDeclaration","isStringLiteral","moduleSpecifier","resolveModulePath","text","node","current","isImportDeclaration","parent","moduleName","containingFile","compilerOptions","getCompilerOptions","host","createCompilerHost","resolved","resolveModuleName","fileName","resolvedModule","resolvedFileName","collectImportsFromSourceFile","pluginConfig","turboOutputPath","shouldTreatImportsAsNodeNext","imports","tadaImportPaths","getTadaOutputPaths","paths","tadaOutputLocation","push","visit","specifier","isTadaImport","importSpecifier","sourceFilePath","tadaOutputLocationPaths","startsWith","sourceDir","path","dirname","absoluteImportPath","resolve","some","tadaOutputLocationPath","absoluteTadaPath","sep","tadaPath","importClause","getFullText","trim","adjustedSpecifier","endsWith","replace","includes","forEachChild","runTurbo","expose","async","_runTurbo","params","schemaNames","getSchemaNamesFromConfig","factory","programFactory","addSourceFile","fileId","sourceText","DECLARATION_OVERRIDE","scriptKind","ScriptKind","TS","externalFiles","createExternalFiles","length","kind","addVirtualFiles","container","build","pluginInfo","buildPluginInfo","sourceFiles","getSourceFiles","fileCount","checker","uniqueGraphQLSources","Map","filePath","documents","warnings","calls","findAllCallExpressions","nodes","_loop","call","isCallExpression","position","getSourcePosition","getStart","has","schema","message","size","file","line","col","graphqlSourcePath","graphqlSourceFile","getSourceFile","turboPath","Array","isArray","find","cfg","schemaName","bind","wasOriginallyNodeNext","set","absolutePath","returnType","getTypeAtLocation","argumentType","getEscapedName","argumentKey","value","flags","TypeFlags","StringLiteral","JSON","stringify","typeToString","BUILDER_FLAGS","documentType","sources","from","values","TypeFormatFlags","NoTruncation","NoTypeReduction","InTypeAlias","UseFullyQualifiedType","GenerateNamesForShadowedTypeParams","UseAliasDefinedOutsideCurrentScope","AllowUniqueESSymbolType","WriteTypeArgumentsOfSignature"],"mappings":"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"}
|
|
@@ -13,20 +13,20 @@ import { p as o } from "./index-chunk.mjs";
|
|
|
13
13
|
function traceCallToImportSource(r, a, t) {
|
|
14
14
|
var i = t.getTypeChecker();
|
|
15
15
|
var o = r.expression;
|
|
16
|
-
var
|
|
16
|
+
var s;
|
|
17
17
|
if (e.isIdentifier(o)) {
|
|
18
|
-
|
|
18
|
+
s = o;
|
|
19
19
|
} else if (e.isPropertyAccessExpression(o) && e.isIdentifier(o.expression)) {
|
|
20
|
-
|
|
20
|
+
s = o.expression;
|
|
21
21
|
}
|
|
22
|
-
if (!
|
|
22
|
+
if (!s) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
var
|
|
26
|
-
if (!
|
|
25
|
+
var n = i.getSymbolAtLocation(s);
|
|
26
|
+
if (!n || !n.declarations) {
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
|
-
for (var l of
|
|
29
|
+
for (var l of n.declarations) {
|
|
30
30
|
var u = findImportDeclaration(l);
|
|
31
31
|
if (u && e.isStringLiteral(u.moduleSpecifier)) {
|
|
32
32
|
return resolveModulePath(u.moduleSpecifier.text, a, t);
|
|
@@ -49,16 +49,16 @@ function findImportDeclaration(r) {
|
|
|
49
49
|
function resolveModulePath(r, a, t) {
|
|
50
50
|
var i = t.getCompilerOptions();
|
|
51
51
|
var o = e.createCompilerHost(i);
|
|
52
|
-
var
|
|
53
|
-
if (
|
|
54
|
-
return
|
|
52
|
+
var s = e.resolveModuleName(r, a.fileName, i, o);
|
|
53
|
+
if (s.resolvedModule) {
|
|
54
|
+
return s.resolvedModule.resolvedFileName;
|
|
55
55
|
}
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function collectImportsFromSourceFile(a, t, i, o) {
|
|
59
|
+
function collectImportsFromSourceFile(a, t, i, o, s) {
|
|
60
60
|
var n = [];
|
|
61
|
-
var
|
|
61
|
+
var l = function getTadaOutputPaths(e) {
|
|
62
62
|
var r = [];
|
|
63
63
|
if ("schema" in e && e.tadaOutputLocation) {
|
|
64
64
|
r.push(e.tadaOutputLocation);
|
|
@@ -67,7 +67,7 @@ function collectImportsFromSourceFile(a, t, i, o) {
|
|
|
67
67
|
}(t);
|
|
68
68
|
!function visit(t) {
|
|
69
69
|
if (e.isImportDeclaration(t) && e.isStringLiteral(t.moduleSpecifier)) {
|
|
70
|
-
var
|
|
70
|
+
var u = t.moduleSpecifier.text;
|
|
71
71
|
if (!function isTadaImport(e, a, t) {
|
|
72
72
|
if (e.startsWith(".")) {
|
|
73
73
|
var i = r.dirname(a);
|
|
@@ -78,20 +78,27 @@ function collectImportsFromSourceFile(a, t, i, o) {
|
|
|
78
78
|
}));
|
|
79
79
|
}
|
|
80
80
|
return t.some((r => e === r || e.startsWith(r + "/")));
|
|
81
|
-
}(
|
|
82
|
-
var
|
|
81
|
+
}(u, a.fileName, l)) {
|
|
82
|
+
var c = t.getFullText().trim();
|
|
83
83
|
if (o) {
|
|
84
|
-
var
|
|
85
|
-
if (
|
|
84
|
+
var p = i(u, a.fileName, o);
|
|
85
|
+
if (s) {
|
|
86
|
+
if (p.endsWith(".ts") || p.endsWith(".tsx")) {
|
|
87
|
+
p = p.replace(/\.ts$/, ".js").replace(/\.tsx$/, ".js");
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
p = p.replace(/\.ts$/, "").replace(/\.tsx$/, "");
|
|
91
|
+
}
|
|
92
|
+
if (p && !p.includes("gql.tada")) {
|
|
86
93
|
n.push({
|
|
87
|
-
specifier:
|
|
88
|
-
importClause:
|
|
94
|
+
specifier: p,
|
|
95
|
+
importClause: c.replace(u, p)
|
|
89
96
|
});
|
|
90
97
|
}
|
|
91
98
|
} else {
|
|
92
99
|
n.push({
|
|
93
|
-
specifier:
|
|
94
|
-
importClause:
|
|
100
|
+
specifier: u,
|
|
101
|
+
importClause: c
|
|
95
102
|
});
|
|
96
103
|
}
|
|
97
104
|
}
|
|
@@ -101,30 +108,30 @@ function collectImportsFromSourceFile(a, t, i, o) {
|
|
|
101
108
|
return n;
|
|
102
109
|
}
|
|
103
110
|
|
|
104
|
-
var
|
|
111
|
+
var s = i((async function* _runTurbo(r) {
|
|
105
112
|
var i = a(r.pluginConfig);
|
|
106
|
-
var
|
|
107
|
-
|
|
113
|
+
var s = o(r);
|
|
114
|
+
s.addSourceFile({
|
|
108
115
|
fileId: "__gql-tada-override__.d.ts",
|
|
109
116
|
sourceText: l,
|
|
110
117
|
scriptKind: e.ScriptKind.TS
|
|
111
118
|
});
|
|
112
|
-
var u =
|
|
119
|
+
var u = s.createExternalFiles();
|
|
113
120
|
if (u.length) {
|
|
114
121
|
yield {
|
|
115
122
|
kind: "EXTERNAL_WARNING"
|
|
116
123
|
};
|
|
117
|
-
await
|
|
124
|
+
await s.addVirtualFiles(u);
|
|
118
125
|
}
|
|
119
|
-
var c =
|
|
126
|
+
var c = s.build();
|
|
120
127
|
var p = c.buildPluginInfo(r.pluginConfig);
|
|
121
128
|
var m = c.getSourceFiles();
|
|
122
129
|
yield {
|
|
123
130
|
kind: "FILE_COUNT",
|
|
124
131
|
fileCount: m.length
|
|
125
132
|
};
|
|
126
|
-
var
|
|
127
|
-
var
|
|
133
|
+
var d = c.program.getTypeChecker();
|
|
134
|
+
var f = new Map;
|
|
128
135
|
for (var v of m) {
|
|
129
136
|
var g = v.fileName;
|
|
130
137
|
var h = [];
|
|
@@ -147,19 +154,19 @@ var n = i((async function* _runTurbo(r) {
|
|
|
147
154
|
return 0;
|
|
148
155
|
}
|
|
149
156
|
var l = traceCallToImportSource(t, v, c.program);
|
|
150
|
-
if (l && !
|
|
157
|
+
if (l && !f.has(l)) {
|
|
151
158
|
var u = c.program.getSourceFile(l);
|
|
152
159
|
if (u) {
|
|
153
160
|
var p = Array.isArray(r.turboOutputPath) ? r.turboOutputPath.find((e => e.schemaName === a.schema))?.path : r.turboOutputPath;
|
|
154
|
-
var m = collectImportsFromSourceFile(u, r.pluginConfig,
|
|
155
|
-
|
|
161
|
+
var m = collectImportsFromSourceFile(u, r.pluginConfig, s.resolveModuleName.bind(s), p, !!s.wasOriginallyNodeNext);
|
|
162
|
+
f.set(l, {
|
|
156
163
|
absolutePath: l,
|
|
157
164
|
imports: m
|
|
158
165
|
});
|
|
159
166
|
}
|
|
160
167
|
}
|
|
161
|
-
var T =
|
|
162
|
-
var F =
|
|
168
|
+
var T = d.getTypeAtLocation(t);
|
|
169
|
+
var F = d.getTypeAtLocation(a.node);
|
|
163
170
|
if (!T.symbol || "TadaDocumentNode" !== T.symbol.getEscapedName()) {
|
|
164
171
|
y.push({
|
|
165
172
|
message: 'The discovered document is not of type "TadaDocumentNode".\nIf this is unexpected, please file an issue describing your case.',
|
|
@@ -169,8 +176,8 @@ var n = i((async function* _runTurbo(r) {
|
|
|
169
176
|
});
|
|
170
177
|
return 0;
|
|
171
178
|
}
|
|
172
|
-
var S = "value" in F && "string" == typeof F.value && !(F.flags & e.TypeFlags.StringLiteral) ? JSON.stringify(F.value) :
|
|
173
|
-
var N =
|
|
179
|
+
var S = "value" in F && "string" == typeof F.value && !(F.flags & e.TypeFlags.StringLiteral) ? JSON.stringify(F.value) : d.typeToString(F, t, n);
|
|
180
|
+
var N = d.typeToString(T, t, n);
|
|
174
181
|
h.push({
|
|
175
182
|
schemaName: a.schema,
|
|
176
183
|
argumentKey: S,
|
|
@@ -189,17 +196,17 @@ var n = i((async function* _runTurbo(r) {
|
|
|
189
196
|
warnings: y
|
|
190
197
|
};
|
|
191
198
|
}
|
|
192
|
-
if (
|
|
199
|
+
if (f.size > 0) {
|
|
193
200
|
yield {
|
|
194
201
|
kind: "GRAPHQL_SOURCES",
|
|
195
|
-
sources: Array.from(
|
|
202
|
+
sources: Array.from(f.values())
|
|
196
203
|
};
|
|
197
204
|
}
|
|
198
205
|
}));
|
|
199
206
|
|
|
200
|
-
var
|
|
207
|
+
var n = e.TypeFormatFlags.NoTruncation | e.TypeFormatFlags.NoTypeReduction | e.TypeFormatFlags.InTypeAlias | e.TypeFormatFlags.UseFullyQualifiedType | e.TypeFormatFlags.GenerateNamesForShadowedTypeParams | e.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope | e.TypeFormatFlags.AllowUniqueESSymbolType | e.TypeFormatFlags.WriteTypeArgumentsOfSignature;
|
|
201
208
|
|
|
202
209
|
var l = "\nimport * as _gqlTada from 'gql.tada';\ndeclare module 'gql.tada' {\n interface setupCache {\n readonly __cacheDisabled: true;\n }\n}\n".trim();
|
|
203
210
|
|
|
204
|
-
export {
|
|
211
|
+
export { s as runTurbo };
|
|
205
212
|
//# sourceMappingURL=thread-chunk2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-chunk2.mjs","sources":["../../src/commands/turbo/thread.ts"],"sourcesContent":["import ts from 'typescript';\nimport * as path from 'node:path';\nimport type { GraphQLSPConfig } from '@gql.tada/internal';\n\nimport { getSchemaNamesFromConfig } from '@gql.tada/internal';\nimport { findAllCallExpressions } from '@0no-co/graphqlsp/api';\n\nimport { programFactory } from '../../ts';\nimport { expose } from '../../threads';\n\nimport type {\n TurboSignal,\n TurboWarning,\n TurboDocument,\n GraphQLSourceFile,\n GraphQLSourceImport,\n TurboPath,\n} from './types';\n\nexport interface TurboParams {\n rootPath: string;\n configPath: string;\n pluginConfig: GraphQLSPConfig;\n turboOutputPath: string | TurboPath[];\n}\n\nfunction traceCallToImportSource(\n callExpression: ts.CallExpression,\n sourceFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const typeChecker = program.getTypeChecker();\n const expression = callExpression.expression;\n\n let identifier: ts.Identifier | undefined;\n if (ts.isIdentifier(expression)) {\n identifier = expression;\n } else if (ts.isPropertyAccessExpression(expression) && ts.isIdentifier(expression.expression)) {\n identifier = expression.expression;\n }\n\n if (!identifier) return undefined;\n\n const symbol = typeChecker.getSymbolAtLocation(identifier);\n if (!symbol || !symbol.declarations) return undefined;\n\n for (const declaration of symbol.declarations) {\n const importDeclaration = findImportDeclaration(declaration);\n if (importDeclaration && ts.isStringLiteral(importDeclaration.moduleSpecifier)) {\n const moduleName = importDeclaration.moduleSpecifier.text;\n return resolveModulePath(moduleName, sourceFile, program);\n }\n }\n\n return undefined;\n}\n\nfunction findImportDeclaration(node: ts.Node): ts.ImportDeclaration | undefined {\n let current: ts.Node | undefined = node;\n\n while (current) {\n if (ts.isImportDeclaration(current)) {\n return current;\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\nfunction resolveModulePath(\n moduleName: string,\n containingFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const compilerOptions = program.getCompilerOptions();\n const host = ts.createCompilerHost(compilerOptions);\n\n const resolved = ts.resolveModuleName(moduleName, containingFile.fileName, compilerOptions, host);\n\n if (resolved.resolvedModule) {\n return resolved.resolvedModule.resolvedFileName;\n }\n\n return undefined;\n}\n\nfunction collectImportsFromSourceFile(\n sourceFile: ts.SourceFile,\n pluginConfig: GraphQLSPConfig,\n resolveModuleName: (importSpecifier: string, fromPath: string, toPath: string) => string,\n turboOutputPath?: string\n): GraphQLSourceImport[] {\n const imports: GraphQLSourceImport[] = [];\n\n const tadaImportPaths = getTadaOutputPaths(pluginConfig);\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n const specifier = node.moduleSpecifier.text;\n\n if (!isTadaImport(specifier, sourceFile.fileName, tadaImportPaths)) {\n const importClause = node.getFullText().trim();\n if (turboOutputPath) {\n // Adjust the import specifier to point to the turbo output path\n const adjustedSpecifier = resolveModuleName(\n specifier,\n sourceFile.fileName,\n turboOutputPath\n )\n .replace(/\\.ts$/, '')\n .replace(/\\.tsx$/, '');\n if (adjustedSpecifier && !adjustedSpecifier.includes('gql.tada')) {\n imports.push({\n specifier: adjustedSpecifier,\n importClause: importClause.replace(specifier, adjustedSpecifier),\n });\n }\n } else {\n imports.push({ specifier, importClause });\n }\n }\n }\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return imports;\n}\n\nfunction getTadaOutputPaths(pluginConfig: GraphQLSPConfig): string[] {\n const paths: string[] = [];\n\n if ('schema' in pluginConfig && pluginConfig.tadaOutputLocation) {\n paths.push(pluginConfig.tadaOutputLocation);\n } else {\n // Multiple schemas aren't supported in this context\n }\n\n return paths;\n}\n\nfunction isTadaImport(\n importSpecifier: string,\n sourceFilePath: string,\n tadaOutputLocationPaths: string[]\n): boolean {\n if (importSpecifier.startsWith('.')) {\n const sourceDir = path.dirname(sourceFilePath);\n const absoluteImportPath = path.resolve(sourceDir, importSpecifier);\n\n return tadaOutputLocationPaths.some((tadaOutputLocationPath) => {\n const absoluteTadaPath = path.resolve(tadaOutputLocationPath);\n return (\n absoluteImportPath === absoluteTadaPath ||\n absoluteImportPath.startsWith(absoluteTadaPath + path.sep)\n );\n });\n }\n\n return tadaOutputLocationPaths.some(\n (tadaPath) => importSpecifier === tadaPath || importSpecifier.startsWith(tadaPath + '/')\n );\n}\n\nasync function* _runTurbo(params: TurboParams): AsyncIterableIterator<TurboSignal> {\n const schemaNames = getSchemaNamesFromConfig(params.pluginConfig);\n const factory = programFactory(params);\n\n // NOTE: We add our override declaration here before loading all files\n // This sets `__cacheDisabled` on the turbo cache, which disables the cache temporarily\n // If we don't disable the cache then we couldn't regenerate it from inferred types\n factory.addSourceFile({\n fileId: '__gql-tada-override__.d.ts',\n sourceText: DECLARATION_OVERRIDE,\n scriptKind: ts.ScriptKind.TS,\n });\n\n const externalFiles = factory.createExternalFiles();\n if (externalFiles.length) {\n yield { kind: 'EXTERNAL_WARNING' };\n await factory.addVirtualFiles(externalFiles);\n }\n\n const container = factory.build();\n const pluginInfo = container.buildPluginInfo(params.pluginConfig);\n const sourceFiles = container.getSourceFiles();\n\n yield {\n kind: 'FILE_COUNT',\n fileCount: sourceFiles.length,\n };\n\n const checker = container.program.getTypeChecker();\n const uniqueGraphQLSources = new Map<string, GraphQLSourceFile>();\n\n for (const sourceFile of sourceFiles) {\n let filePath = sourceFile.fileName;\n const documents: TurboDocument[] = [];\n const warnings: TurboWarning[] = [];\n\n const calls = findAllCallExpressions(sourceFile, pluginInfo, false).nodes;\n for (const call of calls) {\n const callExpression = call.node.parent;\n if (!ts.isCallExpression(callExpression)) {\n continue;\n }\n\n const position = container.getSourcePosition(sourceFile, callExpression.getStart());\n filePath = position.fileName;\n if (!schemaNames.has(call.schema)) {\n warnings.push({\n message: call.schema\n ? `The '${call.schema}' schema is not in the configuration but was referenced by document.`\n : schemaNames.size > 1\n ? 'The document is not for a known schema. Have you re-generated the output file?'\n : 'Multiple schemas are configured, but the document is not for a specific schema.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const graphqlSourcePath = traceCallToImportSource(\n callExpression,\n sourceFile,\n container.program\n );\n\n if (graphqlSourcePath && !uniqueGraphQLSources.has(graphqlSourcePath)) {\n const graphqlSourceFile = container.program.getSourceFile(graphqlSourcePath);\n if (graphqlSourceFile) {\n const turboPath = Array.isArray(params.turboOutputPath)\n ? params.turboOutputPath.find((cfg) => cfg.schemaName === call.schema)?.path\n : params.turboOutputPath;\n const imports = collectImportsFromSourceFile(\n graphqlSourceFile,\n params.pluginConfig,\n factory.resolveModuleName.bind(factory),\n turboPath\n );\n uniqueGraphQLSources.set(graphqlSourcePath, {\n absolutePath: graphqlSourcePath,\n imports,\n });\n }\n }\n\n const returnType = checker.getTypeAtLocation(callExpression);\n const argumentType = checker.getTypeAtLocation(call.node);\n // NOTE: `returnType.symbol` is incorrectly typed and is in fact\n // optional and not always present\n if (!returnType.symbol || returnType.symbol.getEscapedName() !== 'TadaDocumentNode') {\n warnings.push({\n message:\n `The discovered document is not of type \"TadaDocumentNode\".\\n` +\n 'If this is unexpected, please file an issue describing your case.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const argumentKey: string =\n 'value' in argumentType &&\n typeof argumentType.value === 'string' &&\n (argumentType.flags & ts.TypeFlags.StringLiteral) === 0\n ? JSON.stringify(argumentType.value)\n : checker.typeToString(argumentType, callExpression, BUILDER_FLAGS);\n const documentType = checker.typeToString(returnType, callExpression, BUILDER_FLAGS);\n\n documents.push({\n schemaName: call.schema,\n argumentKey,\n documentType,\n });\n }\n\n yield {\n kind: 'FILE_TURBO',\n filePath,\n documents,\n warnings,\n };\n }\n\n if (uniqueGraphQLSources.size > 0) {\n yield {\n kind: 'GRAPHQL_SOURCES',\n sources: Array.from(uniqueGraphQLSources.values()),\n };\n }\n}\n\nexport const runTurbo = expose(_runTurbo);\n\nconst BUILDER_FLAGS: ts.TypeFormatFlags =\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.NoTypeReduction |\n ts.TypeFormatFlags.InTypeAlias |\n ts.TypeFormatFlags.UseFullyQualifiedType |\n ts.TypeFormatFlags.GenerateNamesForShadowedTypeParams |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope |\n ts.TypeFormatFlags.AllowUniqueESSymbolType |\n ts.TypeFormatFlags.WriteTypeArgumentsOfSignature;\n\nconst DECLARATION_OVERRIDE = `\nimport * as _gqlTada from 'gql.tada';\ndeclare module 'gql.tada' {\n interface setupCache {\n readonly __cacheDisabled: true;\n }\n}\n`.trim();\n"],"names":["traceCallToImportSource","callExpression","sourceFile","program","typeChecker","getTypeChecker","expression","identifier","ts","isIdentifier","isPropertyAccessExpression","symbol","getSymbolAtLocation","declarations","declaration","importDeclaration","findImportDeclaration","isStringLiteral","moduleSpecifier","resolveModulePath","text","node","current","isImportDeclaration","parent","moduleName","containingFile","compilerOptions","getCompilerOptions","host","createCompilerHost","resolved","resolveModuleName","fileName","resolvedModule","resolvedFileName","collectImportsFromSourceFile","pluginConfig","turboOutputPath","imports","tadaImportPaths","getTadaOutputPaths","paths","tadaOutputLocation","push","visit","specifier","isTadaImport","importSpecifier","sourceFilePath","tadaOutputLocationPaths","startsWith","sourceDir","path","dirname","absoluteImportPath","resolve","some","tadaOutputLocationPath","absoluteTadaPath","sep","tadaPath","importClause","getFullText","trim","adjustedSpecifier","replace","includes","forEachChild","runTurbo","expose","async","_runTurbo","params","schemaNames","getSchemaNamesFromConfig","factory","programFactory","addSourceFile","fileId","sourceText","DECLARATION_OVERRIDE","scriptKind","ScriptKind","TS","externalFiles","createExternalFiles","length","kind","addVirtualFiles","container","build","pluginInfo","buildPluginInfo","sourceFiles","getSourceFiles","fileCount","checker","uniqueGraphQLSources","Map","filePath","documents","warnings","calls","findAllCallExpressions","nodes","_loop","call","isCallExpression","position","getSourcePosition","getStart","has","schema","message","size","file","line","col","graphqlSourcePath","graphqlSourceFile","getSourceFile","turboPath","Array","isArray","find","cfg","schemaName","bind","set","absolutePath","returnType","getTypeAtLocation","argumentType","getEscapedName","argumentKey","value","flags","TypeFlags","StringLiteral","JSON","stringify","typeToString","BUILDER_FLAGS","documentType","sources","from","values","TypeFormatFlags","NoTruncation","NoTypeReduction","InTypeAlias","UseFullyQualifiedType","GenerateNamesForShadowedTypeParams","UseAliasDefinedOutsideCurrentScope","AllowUniqueESSymbolType","WriteTypeArgumentsOfSignature"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thread-chunk2.mjs","sources":["../../src/commands/turbo/thread.ts"],"sourcesContent":["import ts from 'typescript';\nimport * as path from 'node:path';\nimport type { GraphQLSPConfig } from '@gql.tada/internal';\n\nimport { getSchemaNamesFromConfig } from '@gql.tada/internal';\nimport { findAllCallExpressions } from '@0no-co/graphqlsp/api';\n\nimport { programFactory } from '../../ts';\nimport { expose } from '../../threads';\n\nimport type {\n TurboSignal,\n TurboWarning,\n TurboDocument,\n GraphQLSourceFile,\n GraphQLSourceImport,\n TurboPath,\n} from './types';\n\nexport interface TurboParams {\n rootPath: string;\n configPath: string;\n pluginConfig: GraphQLSPConfig;\n turboOutputPath: string | TurboPath[];\n}\n\nfunction traceCallToImportSource(\n callExpression: ts.CallExpression,\n sourceFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const typeChecker = program.getTypeChecker();\n const expression = callExpression.expression;\n\n let identifier: ts.Identifier | undefined;\n if (ts.isIdentifier(expression)) {\n identifier = expression;\n } else if (ts.isPropertyAccessExpression(expression) && ts.isIdentifier(expression.expression)) {\n identifier = expression.expression;\n }\n\n if (!identifier) return undefined;\n\n const symbol = typeChecker.getSymbolAtLocation(identifier);\n if (!symbol || !symbol.declarations) return undefined;\n\n for (const declaration of symbol.declarations) {\n const importDeclaration = findImportDeclaration(declaration);\n if (importDeclaration && ts.isStringLiteral(importDeclaration.moduleSpecifier)) {\n const moduleName = importDeclaration.moduleSpecifier.text;\n return resolveModulePath(moduleName, sourceFile, program);\n }\n }\n\n return undefined;\n}\n\nfunction findImportDeclaration(node: ts.Node): ts.ImportDeclaration | undefined {\n let current: ts.Node | undefined = node;\n\n while (current) {\n if (ts.isImportDeclaration(current)) {\n return current;\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\nfunction resolveModulePath(\n moduleName: string,\n containingFile: ts.SourceFile,\n program: ts.Program\n): string | undefined {\n const compilerOptions = program.getCompilerOptions();\n const host = ts.createCompilerHost(compilerOptions);\n\n const resolved = ts.resolveModuleName(moduleName, containingFile.fileName, compilerOptions, host);\n\n if (resolved.resolvedModule) {\n return resolved.resolvedModule.resolvedFileName;\n }\n\n return undefined;\n}\n\nfunction collectImportsFromSourceFile(\n sourceFile: ts.SourceFile,\n pluginConfig: GraphQLSPConfig,\n resolveModuleName: (importSpecifier: string, fromPath: string, toPath: string) => string,\n turboOutputPath?: string,\n shouldTreatImportsAsNodeNext?: boolean\n): GraphQLSourceImport[] {\n const imports: GraphQLSourceImport[] = [];\n\n const tadaImportPaths = getTadaOutputPaths(pluginConfig);\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n const specifier = node.moduleSpecifier.text;\n\n if (!isTadaImport(specifier, sourceFile.fileName, tadaImportPaths)) {\n const importClause = node.getFullText().trim();\n if (turboOutputPath) {\n // Adjust the import specifier to point to the turbo output path\n let adjustedSpecifier = resolveModuleName(\n specifier,\n sourceFile.fileName,\n turboOutputPath\n );\n\n if (shouldTreatImportsAsNodeNext) {\n if (adjustedSpecifier.endsWith('.ts') || adjustedSpecifier.endsWith('.tsx')) {\n adjustedSpecifier = adjustedSpecifier\n .replace(/\\.ts$/, '.js')\n .replace(/\\.tsx$/, '.js');\n }\n } else {\n adjustedSpecifier = adjustedSpecifier.replace(/\\.ts$/, '').replace(/\\.tsx$/, '');\n }\n\n if (adjustedSpecifier && !adjustedSpecifier.includes('gql.tada')) {\n imports.push({\n specifier: adjustedSpecifier,\n importClause: importClause.replace(specifier, adjustedSpecifier),\n });\n }\n } else {\n imports.push({ specifier, importClause });\n }\n }\n }\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return imports;\n}\n\nfunction getTadaOutputPaths(pluginConfig: GraphQLSPConfig): string[] {\n const paths: string[] = [];\n\n if ('schema' in pluginConfig && pluginConfig.tadaOutputLocation) {\n paths.push(pluginConfig.tadaOutputLocation);\n } else {\n // Multiple schemas aren't supported in this context\n }\n\n return paths;\n}\n\nfunction isTadaImport(\n importSpecifier: string,\n sourceFilePath: string,\n tadaOutputLocationPaths: string[]\n): boolean {\n if (importSpecifier.startsWith('.')) {\n const sourceDir = path.dirname(sourceFilePath);\n const absoluteImportPath = path.resolve(sourceDir, importSpecifier);\n\n return tadaOutputLocationPaths.some((tadaOutputLocationPath) => {\n const absoluteTadaPath = path.resolve(tadaOutputLocationPath);\n return (\n absoluteImportPath === absoluteTadaPath ||\n absoluteImportPath.startsWith(absoluteTadaPath + path.sep)\n );\n });\n }\n\n return tadaOutputLocationPaths.some(\n (tadaPath) => importSpecifier === tadaPath || importSpecifier.startsWith(tadaPath + '/')\n );\n}\n\nasync function* _runTurbo(params: TurboParams): AsyncIterableIterator<TurboSignal> {\n const schemaNames = getSchemaNamesFromConfig(params.pluginConfig);\n const factory = programFactory(params);\n\n // NOTE: We add our override declaration here before loading all files\n // This sets `__cacheDisabled` on the turbo cache, which disables the cache temporarily\n // If we don't disable the cache then we couldn't regenerate it from inferred types\n factory.addSourceFile({\n fileId: '__gql-tada-override__.d.ts',\n sourceText: DECLARATION_OVERRIDE,\n scriptKind: ts.ScriptKind.TS,\n });\n\n const externalFiles = factory.createExternalFiles();\n if (externalFiles.length) {\n yield { kind: 'EXTERNAL_WARNING' };\n await factory.addVirtualFiles(externalFiles);\n }\n\n const container = factory.build();\n const pluginInfo = container.buildPluginInfo(params.pluginConfig);\n const sourceFiles = container.getSourceFiles();\n\n yield {\n kind: 'FILE_COUNT',\n fileCount: sourceFiles.length,\n };\n\n const checker = container.program.getTypeChecker();\n const uniqueGraphQLSources = new Map<string, GraphQLSourceFile>();\n\n for (const sourceFile of sourceFiles) {\n let filePath = sourceFile.fileName;\n const documents: TurboDocument[] = [];\n const warnings: TurboWarning[] = [];\n\n const calls = findAllCallExpressions(sourceFile, pluginInfo, false).nodes;\n for (const call of calls) {\n const callExpression = call.node.parent;\n if (!ts.isCallExpression(callExpression)) {\n continue;\n }\n\n const position = container.getSourcePosition(sourceFile, callExpression.getStart());\n filePath = position.fileName;\n if (!schemaNames.has(call.schema)) {\n warnings.push({\n message: call.schema\n ? `The '${call.schema}' schema is not in the configuration but was referenced by document.`\n : schemaNames.size > 1\n ? 'The document is not for a known schema. Have you re-generated the output file?'\n : 'Multiple schemas are configured, but the document is not for a specific schema.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const graphqlSourcePath = traceCallToImportSource(\n callExpression,\n sourceFile,\n container.program\n );\n\n if (graphqlSourcePath && !uniqueGraphQLSources.has(graphqlSourcePath)) {\n const graphqlSourceFile = container.program.getSourceFile(graphqlSourcePath);\n if (graphqlSourceFile) {\n const turboPath = Array.isArray(params.turboOutputPath)\n ? params.turboOutputPath.find((cfg) => cfg.schemaName === call.schema)?.path\n : params.turboOutputPath;\n const imports = collectImportsFromSourceFile(\n graphqlSourceFile,\n params.pluginConfig,\n factory.resolveModuleName.bind(factory),\n turboPath,\n !!factory.wasOriginallyNodeNext\n );\n uniqueGraphQLSources.set(graphqlSourcePath, {\n absolutePath: graphqlSourcePath,\n imports,\n });\n }\n }\n\n const returnType = checker.getTypeAtLocation(callExpression);\n const argumentType = checker.getTypeAtLocation(call.node);\n // NOTE: `returnType.symbol` is incorrectly typed and is in fact\n // optional and not always present\n if (!returnType.symbol || returnType.symbol.getEscapedName() !== 'TadaDocumentNode') {\n warnings.push({\n message:\n `The discovered document is not of type \"TadaDocumentNode\".\\n` +\n 'If this is unexpected, please file an issue describing your case.',\n file: position.fileName,\n line: position.line,\n col: position.col,\n });\n continue;\n }\n\n const argumentKey: string =\n 'value' in argumentType &&\n typeof argumentType.value === 'string' &&\n (argumentType.flags & ts.TypeFlags.StringLiteral) === 0\n ? JSON.stringify(argumentType.value)\n : checker.typeToString(argumentType, callExpression, BUILDER_FLAGS);\n const documentType = checker.typeToString(returnType, callExpression, BUILDER_FLAGS);\n\n documents.push({\n schemaName: call.schema,\n argumentKey,\n documentType,\n });\n }\n\n yield {\n kind: 'FILE_TURBO',\n filePath,\n documents,\n warnings,\n };\n }\n\n if (uniqueGraphQLSources.size > 0) {\n yield {\n kind: 'GRAPHQL_SOURCES',\n sources: Array.from(uniqueGraphQLSources.values()),\n };\n }\n}\n\nexport const runTurbo = expose(_runTurbo);\n\nconst BUILDER_FLAGS: ts.TypeFormatFlags =\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.NoTypeReduction |\n ts.TypeFormatFlags.InTypeAlias |\n ts.TypeFormatFlags.UseFullyQualifiedType |\n ts.TypeFormatFlags.GenerateNamesForShadowedTypeParams |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope |\n ts.TypeFormatFlags.AllowUniqueESSymbolType |\n ts.TypeFormatFlags.WriteTypeArgumentsOfSignature;\n\nconst DECLARATION_OVERRIDE = `\nimport * as _gqlTada from 'gql.tada';\ndeclare module 'gql.tada' {\n interface setupCache {\n readonly __cacheDisabled: true;\n }\n}\n`.trim();\n"],"names":["traceCallToImportSource","callExpression","sourceFile","program","typeChecker","getTypeChecker","expression","identifier","ts","isIdentifier","isPropertyAccessExpression","symbol","getSymbolAtLocation","declarations","declaration","importDeclaration","findImportDeclaration","isStringLiteral","moduleSpecifier","resolveModulePath","text","node","current","isImportDeclaration","parent","moduleName","containingFile","compilerOptions","getCompilerOptions","host","createCompilerHost","resolved","resolveModuleName","fileName","resolvedModule","resolvedFileName","collectImportsFromSourceFile","pluginConfig","turboOutputPath","shouldTreatImportsAsNodeNext","imports","tadaImportPaths","getTadaOutputPaths","paths","tadaOutputLocation","push","visit","specifier","isTadaImport","importSpecifier","sourceFilePath","tadaOutputLocationPaths","startsWith","sourceDir","path","dirname","absoluteImportPath","resolve","some","tadaOutputLocationPath","absoluteTadaPath","sep","tadaPath","importClause","getFullText","trim","adjustedSpecifier","endsWith","replace","includes","forEachChild","runTurbo","expose","async","_runTurbo","params","schemaNames","getSchemaNamesFromConfig","factory","programFactory","addSourceFile","fileId","sourceText","DECLARATION_OVERRIDE","scriptKind","ScriptKind","TS","externalFiles","createExternalFiles","length","kind","addVirtualFiles","container","build","pluginInfo","buildPluginInfo","sourceFiles","getSourceFiles","fileCount","checker","uniqueGraphQLSources","Map","filePath","documents","warnings","calls","findAllCallExpressions","nodes","_loop","call","isCallExpression","position","getSourcePosition","getStart","has","schema","message","size","file","line","col","graphqlSourcePath","graphqlSourceFile","getSourceFile","turboPath","Array","isArray","find","cfg","schemaName","bind","wasOriginallyNodeNext","set","absolutePath","returnType","getTypeAtLocation","argumentType","getEscapedName","argumentKey","value","flags","TypeFlags","StringLiteral","JSON","stringify","typeToString","BUILDER_FLAGS","documentType","sources","from","values","TypeFormatFlags","NoTruncation","NoTypeReduction","InTypeAlias","UseFullyQualifiedType","GenerateNamesForShadowedTypeParams","UseAliasDefinedOutsideCurrentScope","AllowUniqueESSymbolType","WriteTypeArgumentsOfSignature"],"mappings":"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"}
|