|
1 | 1 | import fs from 'fs-extra'; |
2 | 2 | import semver from 'semver'; |
| 3 | +import * as recast from 'recast'; |
3 | 4 |
|
4 | 5 | function transformPackageName(packageName: string) { |
5 | 6 | return packageName.replace('/', '__'); |
@@ -38,10 +39,51 @@ function main(packageName: string, version: string) { |
38 | 39 | fs.writeFileSync( |
39 | 40 | configPath, |
40 | 41 | `export default { |
41 | | - maintainers: ['danieldelcore'], |
| 42 | + maintainers: [], |
| 43 | + transforms: { |
| 44 | + '${version}': require('./${version}/transform'), |
| 45 | + } |
42 | 46 | }; |
43 | 47 | `, |
44 | 48 | ); |
| 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 | + ); |
45 | 87 | } |
46 | 88 |
|
47 | 89 | fs.copyFileSync( |
|
0 commit comments