@rxap/plugin-web3-storage
Version:
This plugin provides an executor to deploy your application to web3 storage. It also includes a generator to initialize the plugin. It simplifies the process of deploying web applications to decentralized storage.
118 lines (117 loc) • 4.38 kB
JavaScript
import {
addDependenciesToPackageJson,
formatFiles,
installPackagesTask
} from "@nx/devkit";
import { join, relative } from "path";
async function initGenerator(tree, options) {
const packageJsonFilePath = relative(
tree.root,
join(__dirname, "..", "..", "..", "package.json")
);
if (!tree.exists(packageJsonFilePath)) {
console.error("package.json not found in: " + packageJsonFilePath);
return;
}
const { peerDependencies, name: packageName } = JSON.parse(
tree.read(packageJsonFilePath, "utf-8")
);
console.log(`Coerce peer dependencies for package: ${packageName}`);
if (!peerDependencies || !Object.keys(peerDependencies).length) {
console.log("No peer dependencies found");
return;
}
console.log(`Peer dependencies: ${Object.keys(peerDependencies).join(", ")}`);
const rootPackageJson = JSON.parse(tree.read("package.json", "utf-8"));
let isDevDependency = !!rootPackageJson.devDependencies?.[packageName];
if (isDevDependency && [/^@rxap\/ngx/, /^@rxap\/nest/].some((rx) => rx.test(packageName))) {
rootPackageJson.dependencies ??= {};
rootPackageJson.dependencies[packageName] = rootPackageJson.devDependencies[packageName];
delete rootPackageJson.devDependencies[packageName];
isDevDependency = false;
tree.write("package.json", JSON.stringify(rootPackageJson, null, 2));
}
if (!isDevDependency && [
/^@rxap\/plugin/,
/^@rxap\/workspace/,
/@rxap\/schematic/
]) {
rootPackageJson.devDependencies ??= {};
rootPackageJson.devDependencies[packageName] = rootPackageJson.dependencies[packageName];
delete rootPackageJson.dependencies[packageName];
isDevDependency = true;
tree.write("package.json", JSON.stringify(rootPackageJson, null, 2));
}
const missingPeerDependencies = Object.entries(peerDependencies).filter(
([dep]) => !rootPackageJson.dependencies?.[dep] && !rootPackageJson.devDependencies?.[dep]
).reduce((acc, [dep, version]) => ({ ...acc, [dep]: version }), {});
if (!Object.keys(missingPeerDependencies).length) {
console.log("No missing peer dependencies");
return;
}
if (isDevDependency) {
addDependenciesToPackageJson(tree, {}, missingPeerDependencies);
} else {
addDependenciesToPackageJson(tree, missingPeerDependencies, {});
}
await formatFiles(tree);
installPackagesTask(tree);
for (const peer of Object.keys(missingPeerDependencies)) {
console.log(`Peer dependency ${peer} added to package.json`);
const peerPackageJsonFilePath = join(
"node_modules",
...peer.split("/"),
"package.json"
);
if (!tree.exists(peerPackageJsonFilePath)) {
console.log(`Peer dependency ${peer} has no package.json`);
continue;
}
const { generators, schematics } = JSON.parse(
tree.read(peerPackageJsonFilePath, "utf-8")
);
if (!generators && !schematics) {
console.log(`Peer dependency ${peer} has no generators or schematics`);
continue;
}
const configFile = generators || schematics;
if (!tree.exists(join("node_modules", ...peer.split("/"), configFile))) {
console.log(
`Peer dependency ${peer} has no generators or schematics file`
);
continue;
}
const config = JSON.parse(
tree.read(join("node_modules", ...peer.split("/"), configFile), "utf-8")
);
if (!config.generators?.init) {
console.log(`Peer dependency ${peer} has no init generator`);
continue;
}
const initGeneratorFilePath = config.generators.init.factory;
const fullInitGeneratorFilePath = join("node_modules", ...peer.split("/"), initGeneratorFilePath) + ".js";
if (!tree.exists(fullInitGeneratorFilePath)) {
console.log(
`Peer dependency ${peer} has no init generator file: ` + fullInitGeneratorFilePath
);
continue;
}
const initGenerator2 = require(join(
"node_modules",
...peer.split("/"),
initGeneratorFilePath
))?.default;
if (typeof initGenerator2 !== "function") {
console.log(`Peer dependency ${peer} has no init generator function`);
continue;
}
console.log(`Run init generator for peer dependency ${peer}`);
await initGenerator2(tree, options);
}
}
var generator_default = initGenerator;
export {
generator_default as default,
initGenerator
};
//# sourceMappingURL=generator.js.map