@fluid-app/fluid-cli-droplets 0.1.29 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-app/fluid-cli-droplets",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "description": "Fluid CLI commands for droplet management",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,20 +17,48 @@
17
17
  "access": "public"
18
18
  },
19
19
  "dependencies": {
20
- "commander": "^12.0.0",
21
- "@fluid-app/fluid-cli": "0.1.28"
20
+ "@fluid-app/fluid-cli": "0.1.30",
21
+ "commander": "^12.0.0"
22
22
  },
23
23
  "devDependencies": {
24
+ "@fluid-app/api-client-scripts": "0.0.0",
25
+ "@fluid-app/typescript-config": "0.0.0",
24
26
  "@types/node": "24.10.12",
25
27
  "tsdown": "^0.21.0",
26
28
  "tsx": "^4.21.0",
27
- "typescript": "^5",
28
- "@fluid-app/api-client-scripts": "0.0.0",
29
- "@fluid-app/typescript-config": "0.0.0"
29
+ "typescript": "^5"
30
30
  },
31
31
  "engines": {
32
32
  "node": ">=18.0.0"
33
33
  },
34
+ "nx": {
35
+ "implicitDependencies": [
36
+ "@fluid-app/fluid-cli-specs"
37
+ ],
38
+ "targets": {
39
+ "typecheck": {
40
+ "dependsOn": [
41
+ {
42
+ "target": "build",
43
+ "projects": [
44
+ "@fluid-app/fluid-cli"
45
+ ]
46
+ }
47
+ ]
48
+ },
49
+ "build": {
50
+ "dependsOn": [
51
+ "typecheck",
52
+ {
53
+ "target": "build",
54
+ "projects": [
55
+ "@fluid-app/fluid-cli"
56
+ ]
57
+ }
58
+ ]
59
+ }
60
+ }
61
+ },
34
62
  "scripts": {
35
63
  "build": "tsdown",
36
64
  "dev": "tsdown --watch",
@@ -10,9 +10,9 @@ export function registerCategories(parent: Command, ctx: CommandContext): void {
10
10
  .description("Returns a list of all droplet categories")
11
11
  .action(async () => {
12
12
  const client = await ctx.getClient();
13
- if (ctx.verbose)
14
- process.stderr.write("GET " + `/api/droplet_categories` + "\n");
13
+ if (ctx.verbose) process.stderr.write("GET " + `/api/droplet_categories` + "\n");
15
14
  const result = await client.get(`/api/droplet_categories`);
16
15
  ctx.output(result);
17
16
  });
17
+
18
18
  }
@@ -6,10 +6,7 @@ import { registerCategories } from "./categories.js";
6
6
  import { registerInstallations } from "./installations.js";
7
7
  import { registerPrimary } from "./primary.js";
8
8
 
9
- export function registerAllCommands(
10
- parent: Command,
11
- ctx: CommandContext,
12
- ): void {
9
+ export function registerAllCommands(parent: Command, ctx: CommandContext): void {
13
10
  registerCategories(parent, ctx);
14
11
  registerInstallations(parent, ctx);
15
12
  registerPrimary(parent, ctx);
@@ -2,10 +2,7 @@
2
2
  import { Command } from "commander";
3
3
  import type { CommandContext } from "@fluid-app/fluid-cli";
4
4
 
5
- export function registerInstallations(
6
- parent: Command,
7
- ctx: CommandContext,
8
- ): void {
5
+ export function registerInstallations(parent: Command, ctx: CommandContext): void {
9
6
  const resource = parent.command("installations").description("installations");
10
7
 
11
8
  resource
@@ -20,8 +17,7 @@ export function registerInstallations(
20
17
  if (opts.page !== undefined) params["page"] = Number(opts.page);
21
18
  if (opts.perPage !== undefined) params["per_page"] = Number(opts.perPage);
22
19
  if (opts.category !== undefined) params["category"] = opts.category;
23
- if (ctx.verbose)
24
- process.stderr.write("GET " + `/api/droplet_installations` + "\n");
20
+ if (ctx.verbose) process.stderr.write("GET " + `/api/droplet_installations` + "\n");
25
21
  const result = await client.get(`/api/droplet_installations`, params);
26
22
  ctx.output(result);
27
23
  });
@@ -40,8 +36,7 @@ export function registerInstallations(
40
36
  } else if (opts.body) {
41
37
  body = ctx.parseBody(opts.body);
42
38
  }
43
- if (ctx.verbose)
44
- process.stderr.write("POST " + `/api/droplet_installations` + "\n");
39
+ if (ctx.verbose) process.stderr.write("POST " + `/api/droplet_installations` + "\n");
45
40
  const result = await client.post(`/api/droplet_installations`, body);
46
41
  ctx.output(result);
47
42
  });
@@ -51,10 +46,7 @@ export function registerInstallations(
51
46
  .description("Show a droplet installation")
52
47
  .action(async (uuid) => {
53
48
  const client = await ctx.getClient();
54
- if (ctx.verbose)
55
- process.stderr.write(
56
- "GET " + `/api/droplet_installations/${uuid}` + "\n",
57
- );
49
+ if (ctx.verbose) process.stderr.write("GET " + `/api/droplet_installations/${uuid}` + "\n");
58
50
  const result = await client.get(`/api/droplet_installations/${uuid}`);
59
51
  ctx.output(result);
60
52
  });
@@ -73,14 +65,8 @@ export function registerInstallations(
73
65
  } else if (opts.body) {
74
66
  body = ctx.parseBody(opts.body);
75
67
  }
76
- if (ctx.verbose)
77
- process.stderr.write(
78
- "PUT " + `/api/droplet_installations/${uuid}` + "\n",
79
- );
80
- const result = await client.put(
81
- `/api/droplet_installations/${uuid}`,
82
- body,
83
- );
68
+ if (ctx.verbose) process.stderr.write("PUT " + `/api/droplet_installations/${uuid}` + "\n");
69
+ const result = await client.put(`/api/droplet_installations/${uuid}`, body);
84
70
  ctx.output(result);
85
71
  });
86
72
 
@@ -89,11 +75,9 @@ export function registerInstallations(
89
75
  .description("Delete a droplet installation")
90
76
  .action(async (uuid) => {
91
77
  const client = await ctx.getClient();
92
- if (ctx.verbose)
93
- process.stderr.write(
94
- "DELETE " + `/api/droplet_installations/${uuid}` + "\n",
95
- );
78
+ if (ctx.verbose) process.stderr.write("DELETE " + `/api/droplet_installations/${uuid}` + "\n");
96
79
  const result = await client.delete(`/api/droplet_installations/${uuid}`);
97
80
  ctx.output(result);
98
81
  });
82
+
99
83
  }
@@ -3,6 +3,7 @@ import { Command } from "commander";
3
3
  import type { CommandContext } from "@fluid-app/fluid-cli";
4
4
 
5
5
  export function registerPrimary(parent: Command, ctx: CommandContext): void {
6
+
6
7
  parent
7
8
  .command("get-companies <uuid>")
8
9
  .description("returns an array of companies using a droplet")
@@ -11,12 +12,8 @@ export function registerPrimary(parent: Command, ctx: CommandContext): void {
11
12
  const client = await ctx.getClient();
12
13
  const params: Record<string, unknown> = {};
13
14
  if (opts.pagination !== undefined) params["pagination"] = opts.pagination;
14
- if (ctx.verbose)
15
- process.stderr.write("GET " + `/api/droplets/${uuid}/companies` + "\n");
16
- const result = await client.get(
17
- `/api/droplets/${uuid}/companies`,
18
- params,
19
- );
15
+ if (ctx.verbose) process.stderr.write("GET " + `/api/droplets/${uuid}/companies` + "\n");
16
+ const result = await client.get(`/api/droplets/${uuid}/companies`, params);
20
17
  ctx.output(result);
21
18
  });
22
19
 
@@ -57,8 +54,7 @@ export function registerPrimary(parent: Command, ctx: CommandContext): void {
57
54
  .description("shows a droplet")
58
55
  .action(async (uuid) => {
59
56
  const client = await ctx.getClient();
60
- if (ctx.verbose)
61
- process.stderr.write("GET " + `/api/droplets/${uuid}` + "\n");
57
+ if (ctx.verbose) process.stderr.write("GET " + `/api/droplets/${uuid}` + "\n");
62
58
  const result = await client.get(`/api/droplets/${uuid}`);
63
59
  ctx.output(result);
64
60
  });
@@ -77,8 +73,7 @@ export function registerPrimary(parent: Command, ctx: CommandContext): void {
77
73
  } else if (opts.body) {
78
74
  body = ctx.parseBody(opts.body);
79
75
  }
80
- if (ctx.verbose)
81
- process.stderr.write("PUT " + `/api/droplets/${uuid}` + "\n");
76
+ if (ctx.verbose) process.stderr.write("PUT " + `/api/droplets/${uuid}` + "\n");
82
77
  const result = await client.put(`/api/droplets/${uuid}`, body);
83
78
  ctx.output(result);
84
79
  });
@@ -88,9 +83,9 @@ export function registerPrimary(parent: Command, ctx: CommandContext): void {
88
83
  .description("deletes a droplet")
89
84
  .action(async (uuid) => {
90
85
  const client = await ctx.getClient();
91
- if (ctx.verbose)
92
- process.stderr.write("DELETE " + `/api/droplets/${uuid}` + "\n");
86
+ if (ctx.verbose) process.stderr.write("DELETE " + `/api/droplets/${uuid}` + "\n");
93
87
  const result = await client.delete(`/api/droplets/${uuid}`);
94
88
  ctx.output(result);
95
89
  });
90
+
96
91
  }
@@ -1,18 +0,0 @@
1
-
2
- > @fluid-app/fluid-cli-droplets@0.1.29 build /home/runner/_work/fluid-mono/fluid-mono/packages/cli/droplets
3
- > tsdown
4
-
5
- ℹ tsdown v0.21.0 powered by rolldown v1.0.0-rc.7
6
- ℹ config file: /home/runner/_work/fluid-mono/fluid-mono/packages/cli/droplets/tsdown.config.ts
7
- ℹ entry: src/index.ts
8
- ℹ target: node24
9
- ℹ tsconfig: tsconfig.json
10
- ℹ Build start
11
- ℹ dist/index.mjs  6.70 kB │ gzip: 1.17 kB
12
- ℹ dist/index.mjs.map 13.57 kB │ gzip: 2.30 kB
13
- ℹ dist/index.d.mts.map  0.11 kB │ gzip: 0.12 kB
14
- ℹ dist/index.d.mts  0.19 kB │ gzip: 0.16 kB
15
- ℹ 4 files, total: 20.58 kB
16
- ✔ Build complete in 5125ms
17
- [PLUGIN_TIMINGS] Warning: Your build spent significant time in plugin `rolldown-plugin-dts:generate`. See https://rolldown.rs/options/checks#plugintimings for more details.
18
-
@@ -1,4 +0,0 @@
1
-
2
- > @fluid-app/fluid-cli-droplets@0.1.29 typecheck /home/runner/_work/fluid-mono/fluid-mono/packages/cli/droplets
3
- > tsgo --noEmit
4
-
package/dist/index.d.mts DELETED
@@ -1,7 +0,0 @@
1
- import { FluidPlugin } from "@fluid-app/fluid-cli";
2
-
3
- //#region src/index.d.ts
4
- declare const plugin: FluidPlugin;
5
- //#endregion
6
- export { plugin as default };
7
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;cAKM,MAAA,EAAQ,WAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/generated/categories.ts","../src/generated/installations.ts","../src/generated/primary.ts","../src/generated/index.ts","../src/index.ts"],"sourcesContent":["// categories.ts — AUTO-GENERATED, DO NOT EDIT\nimport { Command } from \"commander\";\nimport type { CommandContext } from \"@fluid-app/fluid-cli\";\n\nexport function registerCategories(parent: Command, ctx: CommandContext): void {\n const resource = parent.command(\"categories\").description(\"categories\");\n\n resource\n .command(\"list\")\n .description(\"Returns a list of all droplet categories\")\n .action(async () => {\n const client = await ctx.getClient();\n if (ctx.verbose)\n process.stderr.write(\"GET \" + `/api/droplet_categories` + \"\\n\");\n const result = await client.get(`/api/droplet_categories`);\n ctx.output(result);\n });\n}\n","// installations.ts — AUTO-GENERATED, DO NOT EDIT\nimport { Command } from \"commander\";\nimport type { CommandContext } from \"@fluid-app/fluid-cli\";\n\nexport function registerInstallations(\n parent: Command,\n ctx: CommandContext,\n): void {\n const resource = parent.command(\"installations\").description(\"installations\");\n\n resource\n .command(\"list\")\n .description(\"List droplet installations\")\n .option(\"--page <value>\", \"Page number for pagination\")\n .option(\"--per-page <value>\", \"Number of records per page (max: 100)\")\n .option(\"--category <value>\", \"Filter by droplet category\")\n .action(async (opts) => {\n const client = await ctx.getClient();\n const params: Record<string, unknown> = {};\n if (opts.page !== undefined) params[\"page\"] = Number(opts.page);\n if (opts.perPage !== undefined) params[\"per_page\"] = Number(opts.perPage);\n if (opts.category !== undefined) params[\"category\"] = opts.category;\n if (ctx.verbose)\n process.stderr.write(\"GET \" + `/api/droplet_installations` + \"\\n\");\n const result = await client.get(`/api/droplet_installations`, params);\n ctx.output(result);\n });\n\n resource\n .command(\"create\")\n .description(\"Create a droplet installation\")\n .option(\"--body <json>\", \"Request body as JSON string\")\n .option(\"--body-file <path>\", \"Read request body from file\")\n .action(async (opts) => {\n const client = await ctx.getClient();\n let body: unknown;\n if (opts.bodyFile) {\n const { readFileSync } = await import(\"fs\");\n body = ctx.parseBody(readFileSync(opts.bodyFile, \"utf-8\"));\n } else if (opts.body) {\n body = ctx.parseBody(opts.body);\n }\n if (ctx.verbose)\n process.stderr.write(\"POST \" + `/api/droplet_installations` + \"\\n\");\n const result = await client.post(`/api/droplet_installations`, body);\n ctx.output(result);\n });\n\n resource\n .command(\"get <uuid>\")\n .description(\"Show a droplet installation\")\n .action(async (uuid) => {\n const client = await ctx.getClient();\n if (ctx.verbose)\n process.stderr.write(\n \"GET \" + `/api/droplet_installations/${uuid}` + \"\\n\",\n );\n const result = await client.get(`/api/droplet_installations/${uuid}`);\n ctx.output(result);\n });\n\n resource\n .command(\"update <uuid>\")\n .description(\"Update a droplet installation\")\n .option(\"--body <json>\", \"Request body as JSON string\")\n .option(\"--body-file <path>\", \"Read request body from file\")\n .action(async (uuid, opts) => {\n const client = await ctx.getClient();\n let body: unknown;\n if (opts.bodyFile) {\n const { readFileSync } = await import(\"fs\");\n body = ctx.parseBody(readFileSync(opts.bodyFile, \"utf-8\"));\n } else if (opts.body) {\n body = ctx.parseBody(opts.body);\n }\n if (ctx.verbose)\n process.stderr.write(\n \"PUT \" + `/api/droplet_installations/${uuid}` + \"\\n\",\n );\n const result = await client.put(\n `/api/droplet_installations/${uuid}`,\n body,\n );\n ctx.output(result);\n });\n\n resource\n .command(\"delete <uuid>\")\n .description(\"Delete a droplet installation\")\n .action(async (uuid) => {\n const client = await ctx.getClient();\n if (ctx.verbose)\n process.stderr.write(\n \"DELETE \" + `/api/droplet_installations/${uuid}` + \"\\n\",\n );\n const result = await client.delete(`/api/droplet_installations/${uuid}`);\n ctx.output(result);\n });\n}\n","// primary.ts — AUTO-GENERATED, DO NOT EDIT\nimport { Command } from \"commander\";\nimport type { CommandContext } from \"@fluid-app/fluid-cli\";\n\nexport function registerPrimary(parent: Command, ctx: CommandContext): void {\n parent\n .command(\"get-companies <uuid>\")\n .description(\"returns an array of companies using a droplet\")\n .option(\"--pagination <value>\", \"pagination\")\n .action(async (uuid, opts) => {\n const client = await ctx.getClient();\n const params: Record<string, unknown> = {};\n if (opts.pagination !== undefined) params[\"pagination\"] = opts.pagination;\n if (ctx.verbose)\n process.stderr.write(\"GET \" + `/api/droplets/${uuid}/companies` + \"\\n\");\n const result = await client.get(\n `/api/droplets/${uuid}/companies`,\n params,\n );\n ctx.output(result);\n });\n\n parent\n .command(\"list\")\n .description(\"An array of available droplets\")\n .option(\"--pagination <value>\", \"pagination\")\n .action(async (opts) => {\n const client = await ctx.getClient();\n const params: Record<string, unknown> = {};\n if (opts.pagination !== undefined) params[\"pagination\"] = opts.pagination;\n if (ctx.verbose) process.stderr.write(\"GET \" + `/api/droplets` + \"\\n\");\n const result = await client.get(`/api/droplets`, params);\n ctx.output(result);\n });\n\n parent\n .command(\"create\")\n .description(\"creates a droplet\")\n .option(\"--body <json>\", \"Request body as JSON string\")\n .option(\"--body-file <path>\", \"Read request body from file\")\n .action(async (opts) => {\n const client = await ctx.getClient();\n let body: unknown;\n if (opts.bodyFile) {\n const { readFileSync } = await import(\"fs\");\n body = ctx.parseBody(readFileSync(opts.bodyFile, \"utf-8\"));\n } else if (opts.body) {\n body = ctx.parseBody(opts.body);\n }\n if (ctx.verbose) process.stderr.write(\"POST \" + `/api/droplets` + \"\\n\");\n const result = await client.post(`/api/droplets`, body);\n ctx.output(result);\n });\n\n parent\n .command(\"get <uuid>\")\n .description(\"shows a droplet\")\n .action(async (uuid) => {\n const client = await ctx.getClient();\n if (ctx.verbose)\n process.stderr.write(\"GET \" + `/api/droplets/${uuid}` + \"\\n\");\n const result = await client.get(`/api/droplets/${uuid}`);\n ctx.output(result);\n });\n\n parent\n .command(\"update <uuid>\")\n .description(\"updates a droplet\")\n .option(\"--body <json>\", \"Request body as JSON string\")\n .option(\"--body-file <path>\", \"Read request body from file\")\n .action(async (uuid, opts) => {\n const client = await ctx.getClient();\n let body: unknown;\n if (opts.bodyFile) {\n const { readFileSync } = await import(\"fs\");\n body = ctx.parseBody(readFileSync(opts.bodyFile, \"utf-8\"));\n } else if (opts.body) {\n body = ctx.parseBody(opts.body);\n }\n if (ctx.verbose)\n process.stderr.write(\"PUT \" + `/api/droplets/${uuid}` + \"\\n\");\n const result = await client.put(`/api/droplets/${uuid}`, body);\n ctx.output(result);\n });\n\n parent\n .command(\"delete <uuid>\")\n .description(\"deletes a droplet\")\n .action(async (uuid) => {\n const client = await ctx.getClient();\n if (ctx.verbose)\n process.stderr.write(\"DELETE \" + `/api/droplets/${uuid}` + \"\\n\");\n const result = await client.delete(`/api/droplets/${uuid}`);\n ctx.output(result);\n });\n}\n","// index.ts — AUTO-GENERATED, DO NOT EDIT\nimport { Command } from \"commander\";\nimport type { CommandContext } from \"@fluid-app/fluid-cli\";\n\nimport { registerCategories } from \"./categories.js\";\nimport { registerInstallations } from \"./installations.js\";\nimport { registerPrimary } from \"./primary.js\";\n\nexport function registerAllCommands(\n parent: Command,\n ctx: CommandContext,\n): void {\n registerCategories(parent, ctx);\n registerInstallations(parent, ctx);\n registerPrimary(parent, ctx);\n}\n","import type { FluidPlugin } from \"@fluid-app/fluid-cli\";\nimport { createDomainCommand } from \"@fluid-app/fluid-cli\";\n\nimport { registerAllCommands } from \"./generated/index.js\";\n\nconst plugin: FluidPlugin = {\n name: \"@fluid-app/fluid-cli-droplets\",\n version: \"0.1.0\",\n register(ctx) {\n ctx.program.addCommand(\n createDomainCommand(\n \"droplets\",\n \"Manage Fluid droplets and installations\",\n registerAllCommands,\n ),\n );\n },\n};\n\nexport default plugin;\n"],"mappings":"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"}