everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
206 lines (204 loc) • 11.1 kB
JavaScript
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
const require_catalog = require('../workspace/catalog.cjs');
const require_timing = require('../../utils/timing.cjs');
const require_init = require('./init.cjs');
const require_sync = require('./sync.cjs');
const require_json_file = require('../../utils/json-file.cjs');
const require_upgrade_packages = require('./upgrade-packages.cjs');
const require_upgrade_source = require('./upgrade-source.cjs');
const require_upgrade_migration = require('./upgrade-migration.cjs');
let node_fs = require("node:fs");
let node_path = require("node:path");
let node_child_process = require("node:child_process");
let node_process = require("node:process");
node_process = require_runtime.__toESM(node_process, 1);
//#region src/services/scaffold/upgrade.ts
const UPSTREAM_ISSUE_URL = "https://github.com/NEARBuilders/everything-dev/issues";
async function upgradeTemplate(projectDir, options) {
const timings = [];
if (options.check) options.dryRun = true;
const pkgPath = (0, node_path.join)(require_upgrade_packages.workspaceDirOf(projectDir), "package.json");
if (!(0, node_fs.existsSync)(pkgPath)) return {
status: "error",
packages: [],
timings,
error: "No package.json found in current directory"
};
const parentSource = await require_upgrade_source.readExtendedRootSource(projectDir);
const sourceRootCatalog = parentSource.catalog;
const inheritedCatalogPackageNames = Object.keys(sourceRootCatalog);
const currentCatalogEntries = require_catalog.readWorkspaceCatalog(require_upgrade_packages.workspaceDirOf(projectDir));
const workspacePkgPaths = await require_upgrade_packages.findWorkspacePackageJsons(projectDir);
const hasCatalogRefRewrites = inheritedCatalogPackageNames.length > 0 && (require_upgrade_packages.packageObjectNeedsCatalogRefs(require_upgrade_packages.readRootPackageJson(projectDir), inheritedCatalogPackageNames) || workspacePkgPaths.some((pkgPath) => require_upgrade_packages.packageFileNeedsCatalogRefs(pkgPath, inheritedCatalogPackageNames)));
const hasAuthCoreRefRewrites = require_upgrade_packages.packageObjectNeedsAuthCoreCatalogRef(require_upgrade_packages.readRootPackageJson(projectDir)) || workspacePkgPaths.some((pkgPath) => require_upgrade_packages.packageObjectNeedsAuthCoreCatalogRef(require_json_file.readJsonFile(pkgPath)));
const { packages, catalogVersionUpdates } = await require_timing.timePhase(timings, "check package versions", async () => {
const nextPackages = [];
for (const name of require_upgrade_packages.FRAMEWORK_PACKAGES) {
const current = require_upgrade_packages.readCurrentPackageSpecifier(projectDir, name);
const target = sourceRootCatalog[name] ?? current ?? "unknown";
nextPackages.push({
name,
from: current,
to: target
});
}
return {
packages: nextPackages,
catalogVersionUpdates: require_upgrade_packages.diffCatalogEntries(sourceRootCatalog, currentCatalogEntries)
};
});
const hasFrameworkUpdates = packages.some((p) => p.from !== p.to && p.from !== void 0);
const hasCatalogUpdates = catalogVersionUpdates.some((u) => u.from !== void 0);
const hasUpdates = hasFrameworkUpdates || hasCatalogUpdates || hasCatalogRefRewrites || hasAuthCoreRefRewrites;
if (options.dryRun) {
let changelogUrl;
const pluginOptions = options.noSync ? null : await require_timing.timePhase(timings, "list parent plugins", () => require_upgrade_source.loadParentPluginOptions(projectDir));
if (hasUpdates) {
const mainPkg = packages.find((p) => p.name === "everything-dev");
if (mainPkg?.from && mainPkg.from !== mainPkg.to) changelogUrl = require_upgrade_source.buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);
}
return {
status: "dry-run",
packages: [...packages, ...catalogVersionUpdates.map((u) => ({
name: u.name,
from: u.from,
to: u.to
}))],
availablePlugins: pluginOptions?.newPluginKeys,
platform: {
resolved: parentSource.platform.manifest.frameworkVersion,
source: `bos://${parentSource.platform.source.account}/${parentSource.platform.source.gateway}`,
fromCache: parentSource.platform.fromCache
},
updatesAvailable: hasUpdates,
timings,
changelogUrl
};
}
const targetMainVersion = packages.find((p) => p.name === "everything-dev")?.to;
const versionDelta = options.migrationsOnly && !options.from ? false : options.from !== void 0 && targetMainVersion !== void 0 ? options.from !== targetMainVersion : hasFrameworkUpdates;
if (options.migrationsOnly) return await require_upgrade_migration.runMigrationPhase(projectDir, options, parentSource, { versionDelta });
if (versionDelta && !options.noSync && !options.force) {
const preflight = await require_timing.timePhase(timings, "preflight template sync", () => require_sync.syncTemplate(projectDir, { dryRun: true }));
if (preflight.status === "conflicted" || (preflight.conflicted?.length ?? 0) > 0) return {
status: "error",
packages,
timings,
error: `Template files conflict with the upstream release — nothing was applied. Review the conflicts or run \`bos upgrade --force\` to overwrite (current copies are backed up). To make a local change permanent, file an issue: ${UPSTREAM_ISSUE_URL}. Conflicted: ${(preflight.conflicted ?? []).join(", ")}`
};
}
await require_timing.timePhase(timings, "apply package updates", async () => {
if (inheritedCatalogPackageNames.length > 0) require_upgrade_packages.syncRootCatalogWithParent(projectDir, sourceRootCatalog);
if (inheritedCatalogPackageNames.length > 0) for (const pkgPath of workspacePkgPaths) require_upgrade_packages.updatePackageFileCatalogRefs(pkgPath, inheritedCatalogPackageNames);
const rootPkgPath = (0, node_path.join)(require_upgrade_packages.workspaceDirOf(projectDir), "package.json");
const rootPkg = require_json_file.readJsonFile(rootPkgPath);
if (require_upgrade_packages.ensureAuthCoreCatalogRef(rootPkg)) (0, node_fs.writeFileSync)(rootPkgPath, `${JSON.stringify(rootPkg, null, 2)}\n`);
for (const pkgPath of workspacePkgPaths) require_upgrade_packages.updatePackageFileAuthCoreRef(pkgPath);
});
const needsInstall = (hasUpdates || hasCatalogUpdates) && !options.noInstall;
if (needsInstall) await require_timing.timePhase(timings, "install dependencies", () => require_init.runPnpmInstallForUpgrade(require_upgrade_packages.workspaceDirOf(projectDir)));
if (needsInstall && hasFrameworkUpdates) {
const bosPath = (0, node_path.join)(require_upgrade_packages.workspaceDirOf(projectDir), "node_modules", ".bin", "bos");
const childArgs = [
"upgrade",
"--migrations-only",
"--no-install",
"--from",
packages.find((p) => p.name === "everything-dev")?.from ?? "unknown",
...options.noSync ? ["--no-sync"] : [],
...options.force ? ["--force"] : [],
"--json"
];
const childResult = (0, node_child_process.spawnSync)(bosPath, childArgs, {
cwd: projectDir,
stdio: [
"inherit",
"pipe",
"pipe"
],
encoding: "utf-8",
env: {
...node_process.default.env,
BOS_NO_BANNER: "1"
}
});
if (childResult.status !== 0) return {
status: "error",
packages: [...packages, ...catalogVersionUpdates.map((u) => ({
name: u.name,
from: u.from,
to: u.to
}))],
timings,
error: `Migration phase failed: ${require_upgrade_migration.describeMigrationFailure(childResult.stdout, childResult.stderr)}`
};
try {
const childUpgrade = JSON.parse(childResult.stdout);
const mainPkg = packages.find((p) => p.name === "everything-dev");
const changelogUrl = mainPkg?.from && mainPkg.from !== mainPkg.to ? require_upgrade_source.buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository) : void 0;
return {
...childUpgrade,
packages: [...packages, ...catalogVersionUpdates.map((u) => ({
name: u.name,
from: u.from,
to: u.to
}))],
timings: [...timings, ...childUpgrade.timings ?? []],
changelogUrl
};
} catch {
return {
status: "error",
packages: [...packages, ...catalogVersionUpdates.map((u) => ({
name: u.name,
from: u.from,
to: u.to
}))],
timings,
error: "Failed to parse migration phase output"
};
}
}
const migrationResult = await require_upgrade_migration.runMigrationPhase(projectDir, options, parentSource, { versionDelta });
const mainPkg = packages.find((p) => p.name === "everything-dev");
const changelogUrl = mainPkg?.from && mainPkg.from !== mainPkg.to ? require_upgrade_source.buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository) : void 0;
return {
...migrationResult,
packages: [...packages, ...catalogVersionUpdates.map((u) => ({
name: u.name,
from: u.from,
to: u.to
}))],
timings: [...timings, ...migrationResult.timings ?? []],
changelogUrl
};
}
//#endregion
exports.AUTH_CORE_PACKAGE = require_upgrade_packages.AUTH_CORE_PACKAGE;
exports.AUTH_CORE_TRIGGER_PACKAGES = require_upgrade_packages.AUTH_CORE_TRIGGER_PACKAGES;
exports.FRAMEWORK_PACKAGES = require_upgrade_packages.FRAMEWORK_PACKAGES;
exports.applyPlatformPin = require_upgrade_migration.applyPlatformPin;
exports.buildChangelogUrl = require_upgrade_source.buildChangelogUrl;
exports.describeMigrationFailure = require_upgrade_migration.describeMigrationFailure;
exports.diffCatalogEntries = require_upgrade_packages.diffCatalogEntries;
exports.ensureAuthCoreCatalogRef = require_upgrade_packages.ensureAuthCoreCatalogRef;
exports.findWorkspacePackageJsons = require_upgrade_packages.findWorkspacePackageJsons;
exports.loadParentPluginOptions = require_upgrade_source.loadParentPluginOptions;
exports.migrateChildRootPackageJson = require_upgrade_packages.migrateChildRootPackageJson;
exports.packageFileNeedsCatalogRefs = require_upgrade_packages.packageFileNeedsCatalogRefs;
exports.packageObjectNeedsAuthCoreCatalogRef = require_upgrade_packages.packageObjectNeedsAuthCoreCatalogRef;
exports.packageObjectNeedsCatalogRefs = require_upgrade_packages.packageObjectNeedsCatalogRefs;
exports.readCurrentPackageSpecifier = require_upgrade_packages.readCurrentPackageSpecifier;
exports.readExtendedRootSource = require_upgrade_source.readExtendedRootSource;
exports.readInstalledVersion = require_upgrade_packages.readInstalledVersion;
exports.readRootCatalogEntry = require_upgrade_packages.readRootCatalogEntry;
exports.readRootPackageJson = require_upgrade_packages.readRootPackageJson;
exports.runMigrationPhase = require_upgrade_migration.runMigrationPhase;
exports.setCatalogRef = require_upgrade_packages.setCatalogRef;
exports.stampPlatformPin = require_upgrade_migration.stampPlatformPin;
exports.syncRootCatalogWithParent = require_upgrade_packages.syncRootCatalogWithParent;
exports.updatePackageFileAuthCoreRef = require_upgrade_packages.updatePackageFileAuthCoreRef;
exports.updatePackageFileCatalogRefs = require_upgrade_packages.updatePackageFileCatalogRefs;
exports.upgradeTemplate = upgradeTemplate;
exports.workspaceDirOf = require_upgrade_packages.workspaceDirOf;
//# sourceMappingURL=upgrade.cjs.map