fix(nx): fix migration script

This commit is contained in:
Victor Savkin 2019-11-22 18:43:43 -05:00
parent 11b92d0b9f
commit f916379007
2 changed files with 53 additions and 71 deletions

View File

@ -73,8 +73,8 @@ export class Migrator {
return Object.keys(migrationsJson.schematics) return Object.keys(migrationsJson.schematics)
.filter( .filter(
r => r =>
gt(migrationsJson.schematics[r].version, currentVersion) & this.gt(migrationsJson.schematics[r].version, currentVersion) &
lte(migrationsJson.schematics[r].version, target.version) this.lte(migrationsJson.schematics[r].version, target.version)
) )
.map(r => ({ .map(r => ({
...migrationsJson.schematics[r], ...migrationsJson.schematics[r],
@ -132,7 +132,7 @@ export class Migrator {
.filter(r => { .filter(r => {
return ( return (
!collectedVersions[r] || !collectedVersions[r] ||
gt(packages[r].version, collectedVersions[r].version) this.gt(packages[r].version, collectedVersions[r].version)
); );
}) })
.map(u => .map(u =>
@ -145,7 +145,7 @@ export class Migrator {
return childCalls.reduce( return childCalls.reduce(
(m, c) => { (m, c) => {
Object.keys(c).forEach(r => { Object.keys(c).forEach(r => {
if (!m[r] || gt(c[r].version, m[r].version)) { if (!m[r] || this.gt(c[r].version, m[r].version)) {
m[r] = c[r]; m[r] = c[r];
} }
}); });
@ -189,19 +189,21 @@ export class Migrator {
].reduce( ].reduce(
(m, c) => ({ (m, c) => ({
...m, ...m,
[c]: { verson: targetVersion, alwaysAddToPackageJson: false } [c]: { version: targetVersion, alwaysAddToPackageJson: false }
}), }),
{} {}
) )
}; };
} }
if (!m.packageJsonUpdates) return {}; if (!m.packageJsonUpdates || !this.versions(packageName)) return {};
return Object.keys(m.packageJsonUpdates) return Object.keys(m.packageJsonUpdates)
.filter(r => { .filter(r => {
return ( return (
gt(m.packageJsonUpdates[r].version, this.versions(packageName)) && this.gt(
lte(m.packageJsonUpdates[r].version, targetVersion) m.packageJsonUpdates[r].version,
this.versions(packageName)
) && this.lte(m.packageJsonUpdates[r].version, targetVersion)
); );
}) })
.map(r => m.packageJsonUpdates[r].packages) .map(r => m.packageJsonUpdates[r].packages)
@ -227,6 +229,22 @@ export class Migrator {
}) })
.reduce((m, c) => ({ ...m, ...c }), {}); .reduce((m, c) => ({ ...m, ...c }), {});
} }
private gt(v1: string, v2: string) {
return gt(this.normalizeVersion(v1), this.normalizeVersion(v2));
}
private lte(v1: string, v2: string) {
return lte(this.normalizeVersion(v1), this.normalizeVersion(v2));
}
private normalizeVersion(v: string) {
if (v.startsWith('8-')) return '8.0.0-beta.1';
if (v.startsWith('9-')) return '9.0.0-beta.1';
if (v.startsWith('10-')) return '9.0.0-beta.1';
if (v.startsWith('11-')) return '9.0.0-beta.1';
return v;
}
} }
type GenerateMigrations = { type GenerateMigrations = {
@ -294,9 +312,12 @@ function parseMigrationsOptions(
} }
} }
function versions(root: string) { function versions(root: string, from: { [p: string]: string }) {
return (packageName: string) => { return (packageName: string) => {
try { try {
if (from[packageName]) {
return from[packageName];
}
const content = readFileSync( const content = readFileSync(
path.join(root, `./node_modules/${packageName}/package.json`) path.join(root, `./node_modules/${packageName}/package.json`)
); );
@ -337,20 +358,29 @@ function createFetcher(logger: logging.Logger) {
// packageVersion can be a tag, resolvedVersion works with semver // packageVersion can be a tag, resolvedVersion works with semver
const resolvedVersion = json.version; const resolvedVersion = json.version;
if (migrationsFile) { try {
const json = JSON.parse( if (migrationsFile && typeof migrationsFile === 'string') {
stripJsonComments( const json = JSON.parse(
readFileSync( stripJsonComments(
path.join(dir, 'node_modules', packageName, migrationsFile) readFileSync(
).toString() path.join(dir, 'node_modules', packageName, migrationsFile)
) ).toString()
)
);
cache[`${packageName}-${packageVersion}`] = {
version: resolvedVersion,
schematics: json.schematics,
packageJsonUpdates: json.packageJsonUpdates
};
} else {
cache[`${packageName}-${packageVersion}`] = {
version: resolvedVersion
};
}
} catch (e) {
logger.warn(
`Could not find '${migrationsFile}' in '${packageName}'. Skipping it`
); );
cache[`${packageName}-${packageVersion}`] = {
version: resolvedVersion,
schematics: json.schematics,
packageJsonUpdates: json.packageJsonUpdates
};
} else {
cache[`${packageName}-${packageVersion}`] = { cache[`${packageName}-${packageVersion}`] = {
version: resolvedVersion version: resolvedVersion
}; };
@ -404,7 +434,7 @@ async function generateMigrationsJsonAndUpdatePackageJson(
logger.info(`Fetching meta data about packages.`); logger.info(`Fetching meta data about packages.`);
logger.info(`It may take a few minutes.`); logger.info(`It may take a few minutes.`);
const migrator = new Migrator({ const migrator = new Migrator({
versions: versions(root), versions: versions(root, opts.from),
fetch: createFetcher(logger), fetch: createFetcher(logger),
from: opts.from, from: opts.from,
to: opts.to to: opts.to

View File

@ -194,54 +194,6 @@
"880": { "880": {
"version": "8.8.0", "version": "8.8.0",
"packages": { "packages": {
"@nrwl/angular": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/cypress": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/eslint-plugin-nx": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/express": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/jest": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/linter": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/nest": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/next": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/node": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/react": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/tao": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@nrwl/web": {
"version": "8.8.0",
"alwaysAddToPackageJson": false
},
"@ngrx/store": { "@ngrx/store": {
"version": "8.5.0", "version": "8.5.0",
"alwaysAddToPackageJson": false "alwaysAddToPackageJson": false