Comparing version 0.0.6 to 0.0.7
# 0gql | ||
## 0.0.7 | ||
### Patch Changes | ||
- 8d24742: Add --remove option | ||
## 0.0.6 | ||
@@ -4,0 +10,0 @@ |
@@ -9,5 +9,6 @@ #!/usr/bin/env node | ||
.name("0gql") | ||
.version("0.0.1") | ||
.version("0.0.7") | ||
.option("-e, --extension <target extension>", "extension of the generated file/s", ".graphql") | ||
.option("-m, --modules <gql tag module/s>", "Module/s where gql tag could be imported from. Comma separated.", "graphql-tag") | ||
.option("-m, --modules <gql tag module/s>", "module/s where gql tag are imported from. Comma separated", "graphql-tag") | ||
.option("-r, --remove", "remove original gql tag usage") | ||
.argument("<file pattern>") | ||
@@ -20,3 +21,3 @@ .action((filePattern, options) => { | ||
} | ||
console.log(`"${filePattern}":`); | ||
console.log(`🔎 "${filePattern}":`); | ||
files.map((file) => console.log(file)); | ||
@@ -27,13 +28,5 @@ console.log(""); | ||
gqlTagModules: options.modules.split(","), | ||
shouldRemoveOriginalUsage: Boolean(options.remove), | ||
}) | ||
.then((files) => { | ||
if (files.length > 0) { | ||
console.log("Generated files:"); | ||
files.forEach((file) => console.log(file.filename)); | ||
} | ||
else { | ||
console.log("No generated files."); | ||
} | ||
process.exit(0); | ||
}) | ||
.then(() => process.exit(0)) | ||
.catch((e) => { | ||
@@ -40,0 +33,0 @@ console.error(e); |
@@ -1,10 +0,7 @@ | ||
interface GeneratedFile { | ||
filename: string; | ||
content: string; | ||
} | ||
interface ParsedOptions { | ||
targetExtension: string; | ||
gqlTagModules: string[]; | ||
shouldRemoveOriginalUsage: boolean; | ||
} | ||
export declare const main: (input: string[], options: ParsedOptions) => Promise<GeneratedFile[]>; | ||
export declare const main: (input: string[], options: ParsedOptions) => Promise<void>; | ||
export {}; |
@@ -34,6 +34,9 @@ "use strict"; | ||
}); | ||
files.length ? console.log("Input files:") : console.log("No input files."); | ||
files.length | ||
? console.log("🧐 Input files:") | ||
: console.log("🧐 No input files."); | ||
files.map((file) => console.log(file)); | ||
console.log(""); | ||
const targetFiles = []; | ||
const filesToGenerate = []; | ||
const filesToUpdate = []; | ||
const program = typescript_1.default.createProgram(files, { allowJs: false }); | ||
@@ -50,2 +53,3 @@ files.forEach((file) => { | ||
}; | ||
const nodesToRemove = []; | ||
const graphqlTemplates = []; | ||
@@ -81,2 +85,3 @@ typescript_1.default.forEachChild(sourceFile, (node) => { | ||
if (typescript_1.default.isNoSubstitutionTemplateLiteral(template)) { | ||
nodesToRemove.push(node); | ||
// If no subscription, use full template | ||
@@ -87,2 +92,3 @@ const tagTemplate = (0, trimBackTicks_1.trimBackTicks)(template.getText(sourceFile)); | ||
else if (typescript_1.default.isTemplateExpression(template)) { | ||
nodesToRemove.push(node); | ||
// If has subscription, ASSUME it's fragment. Replace usages and push template | ||
@@ -109,3 +115,3 @@ const convertedGraphqlImportLines = []; // ['#import "./a/b.graphql"','#import "./c/d.graphql"'] | ||
if (fileContent) { | ||
targetFiles.push({ | ||
filesToGenerate.push({ | ||
filename: targetFilename, | ||
@@ -115,6 +121,49 @@ content: fileContent, | ||
} | ||
if (options.shouldRemoveOriginalUsage && nodesToRemove.length > 0) { | ||
// Transformer to remove variable declaration nodes if matches nodesToRemove | ||
// How transformer work: https://github.com/madou/typescript-transformer-handbook | ||
const transformer = (context) => { | ||
return (src) => { | ||
const visitor = (node) => { | ||
// If found a node that's at the same position as the a node to remove, assume | ||
// they are the same and remove them ( by returning undefined ) | ||
if (typescript_1.default.isVariableStatement(node) && | ||
nodesToRemove.find((nodeToRemove) => nodeToRemove.pos === node.pos && nodeToRemove.end === node.end) !== undefined) { | ||
return undefined; | ||
} | ||
return typescript_1.default.visitEachChild(node, visitor, context); | ||
}; | ||
return typescript_1.default.visitNode(src, visitor); | ||
}; | ||
}; | ||
const { transformed } = typescript_1.default.transform(sourceFile, [transformer]); | ||
const newContent = typescript_1.default | ||
.createPrinter({ | ||
newLine: typescript_1.default.NewLineKind.LineFeed, | ||
removeComments: false, | ||
}) | ||
.printFile(transformed[0]); | ||
filesToUpdate.push({ content: newContent, filename: file }); | ||
} | ||
}); | ||
yield Promise.all(targetFiles.map((file) => (0, promises_1.writeFile)(file.filename, file.content))); | ||
return targetFiles; | ||
yield Promise.all([ | ||
...filesToGenerate.map((file) => (0, promises_1.writeFile)(file.filename, file.content)), | ||
...filesToUpdate.map((file) => (0, promises_1.writeFile)(file.filename, file.content)), | ||
]); | ||
if (filesToGenerate.length > 0) { | ||
console.log("✨ Generated files:"); | ||
filesToGenerate.forEach((file) => console.log(file.filename)); | ||
} | ||
else { | ||
console.log("✨ No generated files."); | ||
} | ||
console.log(""); | ||
if (filesToUpdate.length > 0) { | ||
console.log("✨ Updated files:"); | ||
filesToUpdate.forEach((file) => console.log(file.filename)); | ||
} | ||
else { | ||
console.log("✨ No updated files."); | ||
} | ||
}); | ||
exports.main = main; |
{ | ||
"name": "0gql", | ||
"version": "0.0.6", | ||
"version": "0.0.7", | ||
"description": "Migrate from gql tag", | ||
@@ -5,0 +5,0 @@ "repository": "git@github.com:eddeee888/nogql.git", |
@@ -11,3 +11,3 @@ # 0gql | ||
# This codemods all .ts and .tsx files under path/to/files that import and use gql tag | ||
$ npx 0gql "path/to/files/*.ts*" | ||
$ npx 0gql@latest "path/to/files/*.ts*" | ||
``` | ||
@@ -25,4 +25,5 @@ | ||
-e, --extension <target extension> extension of the generated file/s (default: ".graphql") | ||
-m, --modules <gql tag module/s> Module/s where gql tag could be imported from. Comma separated. (default: "graphql-tag") | ||
-m, --modules <gql tag module/s> module/s where gql tag are imported from. Comma separated (default: "graphql-tag") | ||
-r, --remove remove original gql tag usage | ||
-h, --help display help for command | ||
``` |
17124
293
28