|
| 1 | +#! /usr/bin/env node |
| 2 | +import { spawn } from "child_process"; |
| 3 | +import { program } from "commander"; |
| 4 | +import { parse as semverParse } from "semver"; |
| 5 | +import { yellow, bgRed, bold } from "colorette"; |
| 6 | +// @ts-expect-error TODO add interface |
| 7 | +import pickManifest from "npm-pick-manifest"; |
| 8 | +import { discover } from "@apphosting/discover"; |
| 9 | + |
| 10 | +program |
| 11 | + // TODO: add framework option later. For now we support nextjs only. |
| 12 | + .argument("<directory>", "path to the project's root directory") |
| 13 | + .action(async () => { |
| 14 | + |
| 15 | + const projectRoot = program.args[0]; |
| 16 | + const framework = "nextjs"; |
| 17 | + // TODO: We are using the latest framework adapter versions, but in the future |
| 18 | + // we should parse the framework version and use the matching adapter version. |
| 19 | + const adapterName = `@apphosting/adapter-nextjs`; |
| 20 | + const packumentResponse = await fetch(`https://registry.npmjs.org/${adapterName}`); |
| 21 | + if (!packumentResponse.ok) throw new Error(`Something went wrong fetching ${adapterName}`); |
| 22 | + const packument = await packumentResponse.json(); |
| 23 | + const adapterVersion = packument["dist-tags"]["canary"]; |
| 24 | + // TODO: should check for existence of adapter in app's package.json and use that version instead. |
| 25 | + |
| 26 | + console.log(" 🔥", bgRed(` ${adapterName}@${yellow(bold(adapterVersion))} `), "\n"); |
| 27 | + |
| 28 | + // Call it via NPX |
| 29 | + const buildCommand = `apphosting-adapter-${framework}-build`; |
| 30 | + spawn("npx", ["-y", "-p", `${adapterName}@${adapterVersion}`, buildCommand], { |
| 31 | + cwd: projectRoot, |
| 32 | + shell: true, |
| 33 | + stdio: "inherit", |
| 34 | + }); |
| 35 | + }); |
| 36 | + |
| 37 | +program.parse(); |
0 commit comments