|
1 |
| -import { cliExtendMonorepo, extendCli, HarkMonorepoCommandContext } from "@hark/cli"; |
| 1 | +import { makeHarkMonorepoCommands } from "@hark/clipanion"; |
| 2 | +import { OpinionatedMonorepo, OpinionatedPackage, OpinionatedRootProject } from "@hark/opinionated"; |
2 | 3 | import { plugin } from "@hark/plugin";
|
3 |
| -import { monorepo } from "@hark/plugin-monorepo"; |
4 |
| -import { spawn } from "@hark/plugin-spawn"; |
5 |
| -import { BaseCommand, MyMonorepo, MyPackage } from "../harkfile"; |
| 4 | +import { monorepoBuilderPlugin } from "@hark/plugin-monorepo"; |
| 5 | +import reporterVerbose from "@hark/reporter-verbose"; |
| 6 | +import { Cli, Command } from "clipanion"; |
6 | 7 |
|
7 |
| -export default extendCli<HarkMonorepoCommandContext<MyMonorepo>, HarkMonorepoCommandContext<MyMonorepo>>(async ({ cli }) => { |
8 |
| - return { |
9 |
| - ...(await cliExtendMonorepo(BaseCommand)({ cli })), |
10 |
| - monorepo: monorepo( |
11 |
| - ["foo", "bar"], |
12 |
| - plugin.map(({ packages }) => { |
13 |
| - const myMonorepo = new MyMonorepo(packages.map((p) => new MyPackage(p.packageJson.name, p.path))); |
14 |
| - const foo = myMonorepo.getProject("hark-example-foo"); |
15 |
| - const bar = myMonorepo.getProject("hark-example-bar"); |
16 |
| - foo.registerTask("dev", () => |
17 |
| - plugin.pipe( |
18 |
| - // |
19 |
| - foo.task.build(), |
20 |
| - spawn(`node -r @babel/register foo/dist/index.js`), |
21 |
| - ), |
22 |
| - ); |
23 |
| - return myMonorepo; |
24 |
| - }), |
25 |
| - ), |
26 |
| - }; |
27 |
| -}); |
| 8 | +export const monorepoBuilder = monorepoBuilderPlugin( |
| 9 | + ["foo", "bar"], |
| 10 | + plugin.map(({ packages }) => { |
| 11 | + const packageProjects = packages.map((p) => { |
| 12 | + const name = p.packageJson.name; |
| 13 | + const myPackage = new OpinionatedPackage(name, p.path); |
| 14 | + return myPackage; |
| 15 | + }); |
| 16 | + const projects = [new OpinionatedRootProject(), ...packageProjects]; |
| 17 | + const myMonorepo = new OpinionatedMonorepo(projects); |
| 18 | + return myMonorepo; |
| 19 | + }), |
| 20 | +); |
| 21 | + |
| 22 | +export const runCli = (args: string[]) => { |
| 23 | + // |
| 24 | + // Root Monad |
| 25 | + // |
| 26 | + const topPackage = require("./package.json"); |
| 27 | + const rootMonad = plugin.monadRoot(reporterVerbose({ logLevel: 2 }), [], { |
| 28 | + version: topPackage.version as string, |
| 29 | + gitRepositoryUrl: topPackage?.repository?.url, |
| 30 | + devDebounceTime: 100, |
| 31 | + release: false, |
| 32 | + watchMode: false, |
| 33 | + }); |
| 34 | + |
| 35 | + // |
| 36 | + // CLI |
| 37 | + // |
| 38 | + const cli = new Cli({ binaryLabel: "Hark", binaryName: "hark" }); |
| 39 | + |
| 40 | + // Help - CLI |
| 41 | + class HelpCommand extends Command { |
| 42 | + @Command.Path(`--help`) |
| 43 | + @Command.Path(`-h`) |
| 44 | + async execute() { |
| 45 | + this.context.stdout.write(this.cli.usage(null)); |
| 46 | + } |
| 47 | + } |
| 48 | + cli.register(HelpCommand); |
| 49 | + |
| 50 | + // Monorepo - CLI |
| 51 | + makeHarkMonorepoCommands({ |
| 52 | + monorepoBuilder, |
| 53 | + rootMonad, |
| 54 | + autoRegisterCommands: true, |
| 55 | + cli, |
| 56 | + }); |
| 57 | + |
| 58 | + // Run |
| 59 | + return cli.run(args, { ...Cli.defaultContext }); |
| 60 | +}; |
0 commit comments