Skip to content

Commit a9b7bef

Browse files
Merge pull request #16 from CodeshiftCommunity/new-publishing
New publishing approach
2 parents 7de8478 + f40b4eb commit a9b7bef

File tree

22 files changed

+115
-26
lines changed

22 files changed

+115
-26
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'18.0.0': require('./18.0.0/transform'),
5+
'19.0.0': require('./19.0.0/transform'),
6+
},
37
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'11.0.0': require('./11.0.0/transform'),
5+
},
36
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'15.0.0': require('./15.0.0/transform'),
5+
'15.1.1': require('./15.1.1/transform'),
6+
},
37
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'11.0.0': require('./11.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'12.0.0': require('./12.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'21.2.0': require('./21.2.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'0.7.0': require('./0.7.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'5.0.0': require('./5.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'1.0.0': require('./1.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'9.0.0': require('./9.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'4.0.0': require('./4.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'6.0.0': require('./6.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'0.8.0': require('./0.8.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'13.0.0': require('./13.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'11.0.0': require('./11.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'4.0.0': require('./4.0.0/transform'),
5+
},
36
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'5.0.0': require('./5.0.0/transform'),
5+
},
36
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
export default {
22
maintainers: ['danieldelcore'],
3+
transforms: {
4+
'11.0.0': require('./11.0.0/transform'),
5+
'12.0.0': require('./12.0.0/transform'),
6+
},
37
};

packages/initializer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
},
1212
"dependencies": {
1313
"fs-extra": "^9.1.0",
14+
"recast": "^0.20.4",
1415
"semver": "^7.3.5",
1516
"ts-node": "^9.1.1"
1617
}

packages/initializer/src/index.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import fs from 'fs-extra';
22
import semver from 'semver';
3+
import * as recast from 'recast';
34

45
function transformPackageName(packageName: string) {
56
return packageName.replace('/', '__');
@@ -38,10 +39,51 @@ function main(packageName: string, version: string) {
3839
fs.writeFileSync(
3940
configPath,
4041
`export default {
41-
maintainers: ['danieldelcore'],
42+
maintainers: [],
43+
transforms: {
44+
'${version}': require('./${version}/transform'),
45+
}
4246
};
4347
`,
4448
);
49+
} else {
50+
const source = fs.readFileSync(configPath, 'utf8');
51+
const ast = recast.parse(source);
52+
const b = recast.types.builders;
53+
54+
recast.visit(ast, {
55+
visitProperty(path) {
56+
// @ts-ignore
57+
if (path.node.key.name !== 'transforms') return false;
58+
// @ts-ignore
59+
const properties = path.node.value.properties;
60+
// @ts-ignore
61+
properties.forEach(property => {
62+
if (semver.eq(property.key.value, version)) {
63+
throw new Error(
64+
`Transform for ${packageName} version ${version} already exists`,
65+
);
66+
}
67+
});
68+
69+
properties.push(
70+
b.property(
71+
'init',
72+
b.stringLiteral(version),
73+
b.callExpression(b.identifier('require'), [
74+
b.stringLiteral(`./${version}/transform`),
75+
]),
76+
),
77+
);
78+
79+
return false;
80+
},
81+
});
82+
83+
fs.writeFileSync(
84+
configPath,
85+
recast.prettyPrint(ast, { quote: 'single', trailingComma: true }).code,
86+
);
4587
}
4688

4789
fs.copyFileSync(

packages/publisher/src/generate.ts

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,28 +45,15 @@ function getPackageJson(packageName: string, version: string) {
4545
);
4646
}
4747

48-
function getIndexFile(path: string) {
49-
return fs
50-
.readdirSync(path)
51-
.filter(subDirPath => fs.lstatSync(`${path}/${subDirPath}`).isDirectory())
52-
.map(
53-
transformDir =>
54-
`export { default as transform${transformDir.replace(
55-
/\./gi,
56-
'_',
57-
)} } from \'./${transformDir}/transform\';\n`,
58-
)
59-
.join('')
60-
.trim();
61-
}
62-
6348
export default async function generatePackages(
6449
sourcePath: string,
6550
targetPath: string,
6651
changedPackages: string[],
6752
) {
68-
fs.mkdirSync(targetPath);
69-
fs.readdirSync(sourcePath)
53+
await fs.mkdir(targetPath);
54+
const directories = await fs.readdir(sourcePath);
55+
56+
directories
7057
.filter(dir => changedPackages.includes(dir))
7158
.forEach(async dir => {
7259
const packageName = `@codeshift/mod-${dir
@@ -77,20 +64,20 @@ export default async function generatePackages(
7764
const nextPackageVersion = semver.inc(packageVersion, 'patch');
7865

7966
const basePath = `${targetPath}/${dir}`;
80-
fs.copySync(`${sourcePath}/${dir}`, `${basePath}/src`);
81-
fs.copyFileSync(
67+
await fs.copy(`${sourcePath}/${dir}`, `${basePath}/src`);
68+
await fs.copyFile(
8269
`${__dirname}/../template/LICENSE`,
8370
`${basePath}/LICENSE`,
8471
);
85-
fs.copyFileSync(
72+
await fs.copyFile(
8673
`${__dirname}/../template/.npmignore`,
8774
`${basePath}/.npmignore`,
8875
);
89-
fs.writeFileSync(
90-
`${basePath}/src/index.ts`,
91-
getIndexFile(`${basePath}/src`),
76+
await fs.rename(
77+
`${basePath}/src/codeshift.config.js`,
78+
`${basePath}/src/index.js`,
9279
);
93-
fs.writeFileSync(
80+
await fs.writeFile(
9481
`${basePath}/package.json`,
9582
getPackageJson(packageName, nextPackageVersion!),
9683
);

packages/publisher/src/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ async function main(sourcePath: string, targetPath: string) {
2929
cleanTargetDir(targetPath);
3030
}
3131

32-
main(process.argv[2], process.argv[3]);
32+
main(process.argv[2], process.argv[3]).catch(error => {
33+
console.error('Publishing error:', error.message);
34+
});

0 commit comments

Comments
 (0)