@aws-amplify/cli-internal
Version:
Amplify CLI
111 lines • 4.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RootPackageJsonGenerator = void 0;
const node_path_1 = __importDefault(require("node:path"));
const promises_1 = __importDefault(require("node:fs/promises"));
const semver_1 = require("semver");
const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core");
const GEN2_DEV_DEPENDENCIES = {
'@aws-amplify/backend': '^1.18.0',
'@aws-amplify/backend-cli': '^1.8.0',
'@aws-amplify/backend-data': '^1.6.2',
'@types/node': '*',
'aws-cdk': '^2',
'aws-cdk-lib': '^2',
'ci-info': '^4.3.1',
constructs: '^10.0.0',
esbuild: '^0.27.0',
tsx: '^4.20.6',
};
function sortKeys(obj) {
return Object.keys(obj)
.sort()
.reduce((sorted, key) => {
sorted[key] = obj[key];
return sorted;
}, {});
}
function maxVersion(existing, incoming) {
if (!existing) {
return incoming;
}
const coercedExisting = (0, semver_1.coerce)(existing);
const coercedIncoming = (0, semver_1.coerce)(incoming);
if (coercedExisting && coercedIncoming) {
return (0, semver_1.gt)(coercedIncoming, coercedExisting) ? incoming : existing;
}
return incoming;
}
class RootPackageJsonGenerator {
constructor(outputDir) {
this.dependencies = {};
this.devDependencies = {};
this.outputDir = outputDir;
}
addDependency(name, version) {
this.dependencies[name] = maxVersion(this.dependencies[name], version);
}
addDevDependency(name, version) {
this.devDependencies[name] = maxVersion(this.devDependencies[name], version);
}
async plan() {
const packageJsonPath = node_path_1.default.join(this.outputDir, 'package.json');
return [
{
validate: () => undefined,
describe: async () => ['Update package.json with Gen2 dependencies'],
execute: async () => {
var _a, _b;
const defaultName = 'amplify-gen2';
let packageJson = { name: defaultName };
try {
const existing = amplify_cli_core_1.JSONUtilities.readJson('./package.json');
if (existing) {
packageJson = existing;
}
}
catch (e) {
if (!(e instanceof Error && e.message.includes('does not exist'))) {
throw e;
}
}
const mergedDevDependencies = {
...((_a = packageJson.devDependencies) !== null && _a !== void 0 ? _a : {}),
};
for (const [name, version] of Object.entries(this.devDependencies)) {
mergedDevDependencies[name] = maxVersion(mergedDevDependencies[name], version);
}
for (const [name, version] of Object.entries(GEN2_DEV_DEPENDENCIES)) {
mergedDevDependencies[name] = maxVersion(mergedDevDependencies[name], version);
}
const mergedDependencies = {
...((_b = packageJson.dependencies) !== null && _b !== void 0 ? _b : {}),
};
for (const [name, version] of Object.entries(this.dependencies)) {
mergedDependencies[name] = maxVersion(mergedDependencies[name], version);
}
for (const name of Object.keys(mergedDependencies)) {
delete mergedDevDependencies[name];
}
for (const name of Object.keys(mergedDependencies)) {
if (name.startsWith('@aws-cdk/') || name === '@aws-amplify/cli-extensibility-helper') {
delete mergedDependencies[name];
}
}
const patched = {
...packageJson,
dependencies: sortKeys(mergedDependencies),
devDependencies: sortKeys(mergedDevDependencies),
};
await promises_1.default.mkdir(node_path_1.default.dirname(packageJsonPath), { recursive: true });
await promises_1.default.writeFile(packageJsonPath, JSON.stringify(patched, null, 2) + '\n', 'utf-8');
},
},
];
}
}
exports.RootPackageJsonGenerator = RootPackageJsonGenerator;
//# sourceMappingURL=package.json.generator.js.map