astro 5.16.1 → 5.16.2

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.
Files changed (56) hide show
  1. package/dist/assets/utils/remotePattern.d.ts +1 -3
  2. package/dist/cli/create-key/infra/crypto-key-generator.d.ts +3 -1
  3. package/dist/cli/create-key/infra/crypto-key-generator.js +7 -9
  4. package/dist/cli/definitions.d.ts +9 -8
  5. package/dist/cli/docs/infra/process-cloud-ide-provider.d.ts +4 -1
  6. package/dist/cli/docs/infra/process-cloud-ide-provider.js +3 -7
  7. package/dist/cli/index.js +35 -36
  8. package/dist/cli/info/core/get-package-manager.js +14 -15
  9. package/dist/cli/info/definitions.d.ts +3 -3
  10. package/dist/cli/info/infra/bun-package-manager.d.ts +4 -1
  11. package/dist/cli/info/infra/bun-package-manager.js +6 -10
  12. package/dist/cli/info/infra/cli-astro-config-resolver.d.ts +7 -4
  13. package/dist/cli/info/infra/cli-astro-config-resolver.js +32 -29
  14. package/dist/cli/info/infra/cli-clipboard.d.ts +9 -7
  15. package/dist/cli/info/infra/cli-clipboard.js +48 -37
  16. package/dist/cli/info/infra/cli-debug-info-provider.d.ts +11 -8
  17. package/dist/cli/info/infra/cli-debug-info-provider.js +46 -36
  18. package/dist/cli/info/infra/dev-debug-info-provider.d.ts +12 -9
  19. package/dist/cli/info/infra/dev-debug-info-provider.js +33 -23
  20. package/dist/cli/info/infra/noop-package-manager.d.ts +4 -1
  21. package/dist/cli/info/infra/noop-package-manager.js +6 -10
  22. package/dist/cli/info/infra/npm-package-manager.d.ts +7 -4
  23. package/dist/cli/info/infra/npm-package-manager.js +25 -25
  24. package/dist/cli/info/infra/pnpm-package-manager.d.ts +7 -4
  25. package/dist/cli/info/infra/pnpm-package-manager.js +24 -24
  26. package/dist/cli/info/infra/process-node-version-provider.d.ts +3 -1
  27. package/dist/cli/info/infra/process-node-version-provider.js +3 -7
  28. package/dist/cli/info/infra/process-package-manager-user-agent-provider.d.ts +3 -1
  29. package/dist/cli/info/infra/process-package-manager-user-agent-provider.js +4 -7
  30. package/dist/cli/info/infra/prompts-prompt.d.ts +9 -4
  31. package/dist/cli/info/infra/prompts-prompt.js +20 -15
  32. package/dist/cli/info/infra/styled-debug-info-formatter.d.ts +7 -4
  33. package/dist/cli/info/infra/styled-debug-info-formatter.js +23 -19
  34. package/dist/cli/info/infra/yarn-package-manager.d.ts +7 -4
  35. package/dist/cli/info/infra/yarn-package-manager.js +21 -21
  36. package/dist/cli/infra/build-time-astro-version-provider.d.ts +3 -1
  37. package/dist/cli/infra/build-time-astro-version-provider.js +4 -8
  38. package/dist/cli/infra/cli-command-runner.d.ts +7 -4
  39. package/dist/cli/infra/cli-command-runner.js +14 -10
  40. package/dist/cli/infra/logger-help-display.d.ts +11 -7
  41. package/dist/cli/infra/logger-help-display.js +62 -50
  42. package/dist/cli/infra/passthrough-text-styler.d.ts +8 -1
  43. package/dist/cli/infra/passthrough-text-styler.js +20 -10
  44. package/dist/cli/infra/piccolore-text-styler.d.ts +1 -1
  45. package/dist/cli/infra/piccolore-text-styler.js +2 -4
  46. package/dist/cli/infra/process-operating-system-provider.d.ts +5 -1
  47. package/dist/cli/infra/process-operating-system-provider.js +8 -16
  48. package/dist/cli/infra/tinyexec-command-executor.d.ts +6 -2
  49. package/dist/cli/infra/tinyexec-command-executor.js +28 -30
  50. package/dist/content/content-layer.js +3 -3
  51. package/dist/core/app/index.js +3 -1
  52. package/dist/core/constants.js +1 -1
  53. package/dist/core/dev/dev.js +1 -1
  54. package/dist/core/messages.js +2 -2
  55. package/dist/vite-plugin-astro-server/plugin.js +16 -16
  56. package/package.json +3 -3
@@ -1,3 +1 @@
1
- import { isRemoteAllowed, matchHostname, matchPathname, matchPattern, matchPort, matchProtocol, type RemotePattern } from '@astrojs/internal-helpers/remote';
2
- export { isRemoteAllowed, matchHostname, matchPort, matchPathname, matchProtocol, matchPattern };
3
- export type { RemotePattern };
1
+ export { isRemoteAllowed, matchHostname, matchPathname, matchPattern, matchPort, matchProtocol, type RemotePattern, } from '@astrojs/internal-helpers/remote';
@@ -1,2 +1,4 @@
1
1
  import type { KeyGenerator } from '../definitions.js';
2
- export declare function createCryptoKeyGenerator(): KeyGenerator;
2
+ export declare class CryptoKeyGenerator implements KeyGenerator {
3
+ generate(): Promise<string>;
4
+ }
@@ -1,13 +1,11 @@
1
1
  import { createKey, encodeKey } from "../../../core/encryption.js";
2
- function createCryptoKeyGenerator() {
3
- return {
4
- async generate() {
5
- const key = await createKey();
6
- const encoded = await encodeKey(key);
7
- return encoded;
8
- }
9
- };
2
+ class CryptoKeyGenerator {
3
+ async generate() {
4
+ const key = await createKey();
5
+ const encoded = await encodeKey(key);
6
+ return encoded;
7
+ }
10
8
  }
11
9
  export {
12
- createCryptoKeyGenerator
10
+ CryptoKeyGenerator
13
11
  };
@@ -17,16 +17,17 @@ export interface AstroVersionProvider {
17
17
  readonly version: string;
18
18
  }
19
19
  export interface CommandRunner {
20
- run: <T extends AnyCommand>(command: T, ...args: Parameters<T['run']>) => ReturnType<T['run']>;
20
+ run: <T extends AnyCommand>(command: T, ...args: Parameters<T['run']>) => ReturnType<T['run']> | undefined;
21
+ }
22
+ export interface CommandExecutorOptions {
23
+ cwd?: string;
24
+ env?: Record<string, string | undefined>;
25
+ shell?: boolean;
26
+ input?: string;
27
+ stdio?: StdioOptions;
21
28
  }
22
29
  export interface CommandExecutor {
23
- execute: (command: string, args?: Array<string>, options?: {
24
- cwd?: string;
25
- env?: Record<string, string | undefined>;
26
- shell?: boolean;
27
- input?: string;
28
- stdio?: StdioOptions;
29
- }) => Promise<{
30
+ execute: (command: string, args?: Array<string>, options?: CommandExecutorOptions) => Promise<{
30
31
  stdout: string;
31
32
  }>;
32
33
  }
@@ -1,2 +1,5 @@
1
1
  import type { CloudIdeProvider } from '../definitions.js';
2
- export declare function createProcessCloudIdeProvider(): CloudIdeProvider;
2
+ import type { CloudIde } from '../domain/cloud-ide.js';
3
+ export declare class ProcessCloudIdeProvider implements CloudIdeProvider {
4
+ readonly name: CloudIde | null;
5
+ }
@@ -1,10 +1,6 @@
1
- function createProcessCloudIdeProvider() {
2
- return {
3
- get name() {
4
- return Boolean(process.env.GITPOD_REPO_ROOT) ? "gitpod" : null;
5
- }
6
- };
1
+ class ProcessCloudIdeProvider {
2
+ name = Boolean(process.env.GITPOD_REPO_ROOT) ? "gitpod" : null;
7
3
  }
8
4
  export {
9
- createProcessCloudIdeProvider
5
+ ProcessCloudIdeProvider
10
6
  };
package/dist/cli/index.js CHANGED
@@ -30,10 +30,10 @@ async function runCommand(cmd, flags) {
30
30
  applyPolyfill();
31
31
  const [
32
32
  { createLoggerFromFlags },
33
- { createPiccoloreTextStyler },
34
- { createBuildTimeAstroVersionProvider },
35
- { createLoggerHelpDisplay },
36
- { createCliCommandRunner }
33
+ { piccoloreTextStyler: textStyler },
34
+ { BuildTimeAstroVersionProvider },
35
+ { LoggerHelpDisplay },
36
+ { CliCommandRunner }
37
37
  ] = await Promise.all([
38
38
  import("./flags.js"),
39
39
  import("./infra/piccolore-text-styler.js"),
@@ -42,15 +42,14 @@ async function runCommand(cmd, flags) {
42
42
  import("./infra/cli-command-runner.js")
43
43
  ]);
44
44
  const logger = createLoggerFromFlags(flags);
45
- const textStyler = createPiccoloreTextStyler();
46
- const astroVersionProvider = createBuildTimeAstroVersionProvider();
47
- const helpDisplay = createLoggerHelpDisplay({
45
+ const astroVersionProvider = new BuildTimeAstroVersionProvider();
46
+ const helpDisplay = new LoggerHelpDisplay({
48
47
  logger,
49
48
  flags,
50
49
  textStyler,
51
50
  astroVersionProvider
52
51
  });
53
- const runner = createCliCommandRunner({ helpDisplay });
52
+ const runner = new CliCommandRunner({ helpDisplay });
54
53
  switch (cmd) {
55
54
  /** Display --help flag */
56
55
  case "help": {
@@ -69,17 +68,17 @@ async function runCommand(cmd, flags) {
69
68
  }
70
69
  case "info": {
71
70
  const [
72
- { createProcessOperatingSystemProvider },
73
- { createCliAstroConfigResolver },
74
- { createProcessPackageManagerUserAgentProvider },
75
- { createProcessNodeVersionProvider },
76
- { createCliDebugInfoProvider },
77
- { createTinyexecCommandExecutor },
71
+ { ProcessOperatingSystemProvider },
72
+ { CliAstroConfigResolver },
73
+ { ProcessPackageManagerUserAgentProvider },
74
+ { ProcessNodeVersionProvider },
75
+ { CliDebugInfoProvider },
76
+ { TinyexecCommandExecutor },
78
77
  { getPackageManager },
79
- { createStyledDebugInfoFormatter },
80
- { createPromptsPrompt },
81
- { createCliClipboard },
82
- { createPassthroughTextStyler },
78
+ { StyledDebugInfoFormatter },
79
+ { PromptsPrompt },
80
+ { CliClipboard },
81
+ { PassthroughTextStyler },
83
82
  { infoCommand }
84
83
  ] = await Promise.all([
85
84
  import("./infra/process-operating-system-provider.js"),
@@ -95,12 +94,12 @@ async function runCommand(cmd, flags) {
95
94
  import("./infra/passthrough-text-styler.js"),
96
95
  import("./info/core/info.js")
97
96
  ]);
98
- const operatingSystemProvider = createProcessOperatingSystemProvider();
99
- const astroConfigResolver = createCliAstroConfigResolver({ flags });
100
- const commandExecutor = createTinyexecCommandExecutor();
101
- const packageManagerUserAgentProvider = createProcessPackageManagerUserAgentProvider();
102
- const nodeVersionProvider = createProcessNodeVersionProvider();
103
- const debugInfoProvider = createCliDebugInfoProvider({
97
+ const operatingSystemProvider = new ProcessOperatingSystemProvider();
98
+ const astroConfigResolver = new CliAstroConfigResolver({ flags });
99
+ const commandExecutor = new TinyexecCommandExecutor();
100
+ const packageManagerUserAgentProvider = new ProcessPackageManagerUserAgentProvider();
101
+ const nodeVersionProvider = new ProcessNodeVersionProvider();
102
+ const debugInfoProvider = new CliDebugInfoProvider({
104
103
  config: await astroConfigResolver.resolve(),
105
104
  astroVersionProvider,
106
105
  operatingSystemProvider,
@@ -110,8 +109,8 @@ async function runCommand(cmd, flags) {
110
109
  }),
111
110
  nodeVersionProvider
112
111
  });
113
- const prompt = createPromptsPrompt({ force: flags.copy });
114
- const clipboard = createCliClipboard({
112
+ const prompt = new PromptsPrompt({ force: flags.copy });
113
+ const clipboard = new CliClipboard({
115
114
  commandExecutor,
116
115
  logger,
117
116
  operatingSystemProvider,
@@ -120,25 +119,25 @@ async function runCommand(cmd, flags) {
120
119
  return await runner.run(infoCommand, {
121
120
  logger,
122
121
  debugInfoProvider,
123
- getDebugInfoFormatter: ({ pretty }) => createStyledDebugInfoFormatter({
124
- textStyler: pretty ? textStyler : createPassthroughTextStyler()
122
+ getDebugInfoFormatter: ({ pretty }) => new StyledDebugInfoFormatter({
123
+ textStyler: pretty ? textStyler : new PassthroughTextStyler()
125
124
  }),
126
125
  clipboard
127
126
  });
128
127
  }
129
128
  case "create-key": {
130
- const [{ createCryptoKeyGenerator }, { createKeyCommand }] = await Promise.all([
129
+ const [{ CryptoKeyGenerator }, { createKeyCommand }] = await Promise.all([
131
130
  import("./create-key/infra/crypto-key-generator.js"),
132
131
  import("./create-key/core/create-key.js")
133
132
  ]);
134
- const keyGenerator = createCryptoKeyGenerator();
133
+ const keyGenerator = new CryptoKeyGenerator();
135
134
  return await runner.run(createKeyCommand, { logger, keyGenerator });
136
135
  }
137
136
  case "docs": {
138
137
  const [
139
- { createTinyexecCommandExecutor },
140
- { createProcessOperatingSystemProvider },
141
- { createProcessCloudIdeProvider },
138
+ { TinyexecCommandExecutor },
139
+ { ProcessOperatingSystemProvider },
140
+ { ProcessCloudIdeProvider },
142
141
  { openDocsCommand }
143
142
  ] = await Promise.all([
144
143
  import("./infra/tinyexec-command-executor.js"),
@@ -146,9 +145,9 @@ async function runCommand(cmd, flags) {
146
145
  import("./docs/infra/process-cloud-ide-provider.js"),
147
146
  import("./docs/core/open-docs.js")
148
147
  ]);
149
- const commandExecutor = createTinyexecCommandExecutor();
150
- const operatingSystemProvider = createProcessOperatingSystemProvider();
151
- const cloudIdeProvider = createProcessCloudIdeProvider();
148
+ const commandExecutor = new TinyexecCommandExecutor();
149
+ const operatingSystemProvider = new ProcessOperatingSystemProvider();
150
+ const cloudIdeProvider = new ProcessCloudIdeProvider();
152
151
  return await runner.run(openDocsCommand, {
153
152
  url: "https://docs.astro.build/",
154
153
  logger,
@@ -2,34 +2,33 @@ async function getPackageManager({
2
2
  packageManagerUserAgentProvider,
3
3
  commandExecutor
4
4
  }) {
5
- const userAgent = packageManagerUserAgentProvider.getUserAgent();
6
- if (!userAgent) {
7
- const { createNoopPackageManager } = await import("../infra/noop-package-manager.js");
8
- return createNoopPackageManager();
5
+ if (!packageManagerUserAgentProvider.userAgent) {
6
+ const { NoopPackageManager } = await import("../infra/noop-package-manager.js");
7
+ return new NoopPackageManager();
9
8
  }
10
- const specifier = userAgent.split(" ")[0];
9
+ const specifier = packageManagerUserAgentProvider.userAgent.split(" ")[0];
11
10
  const _name = specifier.substring(0, specifier.lastIndexOf("/"));
12
11
  const name = _name === "npminstall" ? "cnpm" : _name;
13
12
  switch (name) {
14
13
  case "pnpm": {
15
- const { createPnpmPackageManager } = await import("../infra/pnpm-package-manager.js");
16
- return createPnpmPackageManager({ commandExecutor });
14
+ const { PnpmPackageManager } = await import("../infra/pnpm-package-manager.js");
15
+ return new PnpmPackageManager({ commandExecutor });
17
16
  }
18
17
  case "npm": {
19
- const { createNpmPackageManager } = await import("../infra/npm-package-manager.js");
20
- return createNpmPackageManager({ commandExecutor });
18
+ const { NpmPackageManager } = await import("../infra/npm-package-manager.js");
19
+ return new NpmPackageManager({ commandExecutor });
21
20
  }
22
21
  case "yarn": {
23
- const { createYarnPackageManager } = await import("../infra/yarn-package-manager.js");
24
- return createYarnPackageManager({ commandExecutor });
22
+ const { YarnPackageManager } = await import("../infra/yarn-package-manager.js");
23
+ return new YarnPackageManager({ commandExecutor });
25
24
  }
26
25
  case "bun": {
27
- const { createBunPackageManager } = await import("../infra/bun-package-manager.js");
28
- return createBunPackageManager();
26
+ const { BunPackageManager } = await import("../infra/bun-package-manager.js");
27
+ return new BunPackageManager();
29
28
  }
30
29
  default: {
31
- const { createNoopPackageManager } = await import("../infra/noop-package-manager.js");
32
- return createNoopPackageManager();
30
+ const { NoopPackageManager } = await import("../infra/noop-package-manager.js");
31
+ return new NoopPackageManager();
33
32
  }
34
33
  }
35
34
  }
@@ -10,7 +10,7 @@ export interface Clipboard {
10
10
  copy: (text: string) => Promise<void>;
11
11
  }
12
12
  export interface PackageManager {
13
- getName: () => string;
13
+ readonly name: string;
14
14
  getPackageVersion: (name: string) => Promise<string | undefined>;
15
15
  }
16
16
  export interface AstroConfigResolver {
@@ -23,8 +23,8 @@ export interface Prompt {
23
23
  }) => Promise<boolean>;
24
24
  }
25
25
  export interface PackageManagerUserAgentProvider {
26
- getUserAgent: () => string | null;
26
+ readonly userAgent: string | null;
27
27
  }
28
28
  export interface NodeVersionProvider {
29
- get: () => string;
29
+ readonly version: string;
30
30
  }
@@ -1,2 +1,5 @@
1
1
  import type { PackageManager } from '../definitions.js';
2
- export declare function createBunPackageManager(): PackageManager;
2
+ export declare class BunPackageManager implements PackageManager {
3
+ readonly name: string;
4
+ getPackageVersion(): Promise<string | undefined>;
5
+ }
@@ -1,13 +1,9 @@
1
- function createBunPackageManager() {
2
- return {
3
- getName() {
4
- return "bun";
5
- },
6
- async getPackageVersion() {
7
- return void 0;
8
- }
9
- };
1
+ class BunPackageManager {
2
+ name = "bun";
3
+ async getPackageVersion() {
4
+ return void 0;
5
+ }
10
6
  }
11
7
  export {
12
- createBunPackageManager
8
+ BunPackageManager
13
9
  };
@@ -1,7 +1,10 @@
1
+ import type { AstroConfig } from '../../../types/public/index.js';
1
2
  import type { Flags } from '../../flags.js';
2
3
  import type { AstroConfigResolver } from '../definitions.js';
3
- interface Options {
4
- flags: Flags;
4
+ export declare class CliAstroConfigResolver implements AstroConfigResolver {
5
+ #private;
6
+ constructor({ flags }: {
7
+ flags: Flags;
8
+ });
9
+ resolve(): Promise<AstroConfig>;
5
10
  }
6
- export declare function createCliAstroConfigResolver({ flags }: Options): AstroConfigResolver;
7
- export {};
@@ -1,33 +1,36 @@
1
1
  import { resolveConfig } from "../../../core/config/config.js";
2
- function createCliAstroConfigResolver({ flags }) {
3
- return {
4
- async resolve() {
5
- const { astroConfig } = await resolveConfig(
6
- // TODO: consider testing flags => astro inline config
7
- {
8
- // Inline-only configs
9
- configFile: typeof flags.config === "string" ? flags.config : void 0,
10
- mode: typeof flags.mode === "string" ? flags.mode : void 0,
11
- logLevel: flags.verbose ? "debug" : flags.silent ? "silent" : void 0,
12
- force: flags.force ? true : void 0,
13
- // Astro user configs
14
- root: typeof flags.root === "string" ? flags.root : void 0,
15
- site: typeof flags.site === "string" ? flags.site : void 0,
16
- base: typeof flags.base === "string" ? flags.base : void 0,
17
- outDir: typeof flags.outDir === "string" ? flags.outDir : void 0,
18
- server: {
19
- port: typeof flags.port === "number" ? flags.port : void 0,
20
- host: typeof flags.host === "string" || typeof flags.host === "boolean" ? flags.host : void 0,
21
- open: typeof flags.open === "string" || typeof flags.open === "boolean" ? flags.open : void 0,
22
- allowedHosts: typeof flags.allowedHosts === "string" ? flags.allowedHosts.split(",") : typeof flags.allowedHosts === "boolean" && flags.allowedHosts === true ? flags.allowedHosts : []
23
- }
24
- },
25
- "info"
26
- );
27
- return astroConfig;
28
- }
29
- };
2
+ class CliAstroConfigResolver {
3
+ // TODO: find something better
4
+ #flags;
5
+ constructor({ flags }) {
6
+ this.#flags = flags;
7
+ }
8
+ async resolve() {
9
+ const { astroConfig } = await resolveConfig(
10
+ // TODO: consider testing flags => astro inline config
11
+ {
12
+ // Inline-only configs
13
+ configFile: typeof this.#flags.config === "string" ? this.#flags.config : void 0,
14
+ mode: typeof this.#flags.mode === "string" ? this.#flags.mode : void 0,
15
+ logLevel: this.#flags.verbose ? "debug" : this.#flags.silent ? "silent" : void 0,
16
+ force: this.#flags.force ? true : void 0,
17
+ // Astro user configs
18
+ root: typeof this.#flags.root === "string" ? this.#flags.root : void 0,
19
+ site: typeof this.#flags.site === "string" ? this.#flags.site : void 0,
20
+ base: typeof this.#flags.base === "string" ? this.#flags.base : void 0,
21
+ outDir: typeof this.#flags.outDir === "string" ? this.#flags.outDir : void 0,
22
+ server: {
23
+ port: typeof this.#flags.port === "number" ? this.#flags.port : void 0,
24
+ host: typeof this.#flags.host === "string" || typeof this.#flags.host === "boolean" ? this.#flags.host : void 0,
25
+ open: typeof this.#flags.open === "string" || typeof this.#flags.open === "boolean" ? this.#flags.open : void 0,
26
+ allowedHosts: typeof this.#flags.allowedHosts === "string" ? this.#flags.allowedHosts.split(",") : typeof this.#flags.allowedHosts === "boolean" && this.#flags.allowedHosts === true ? this.#flags.allowedHosts : []
27
+ }
28
+ },
29
+ "info"
30
+ );
31
+ return astroConfig;
32
+ }
30
33
  }
31
34
  export {
32
- createCliAstroConfigResolver
35
+ CliAstroConfigResolver
33
36
  };
@@ -1,11 +1,13 @@
1
1
  import type { Logger } from '../../../core/logger/core.js';
2
2
  import type { CommandExecutor, OperatingSystemProvider } from '../../definitions.js';
3
3
  import type { Clipboard, Prompt } from '../definitions.js';
4
- interface Options {
5
- operatingSystemProvider: OperatingSystemProvider;
6
- commandExecutor: CommandExecutor;
7
- logger: Logger;
8
- prompt: Prompt;
4
+ export declare class CliClipboard implements Clipboard {
5
+ #private;
6
+ constructor({ operatingSystemProvider, commandExecutor, logger, prompt, }: {
7
+ operatingSystemProvider: OperatingSystemProvider;
8
+ commandExecutor: CommandExecutor;
9
+ logger: Logger;
10
+ prompt: Prompt;
11
+ });
12
+ copy(text: string): Promise<void>;
9
13
  }
10
- export declare function createCliClipboard({ operatingSystemProvider, commandExecutor, logger, prompt, }: Options): Clipboard;
11
- export {};
@@ -24,44 +24,55 @@ async function getExecInputForPlatform({
24
24
  }
25
25
  return null;
26
26
  }
27
- function createCliClipboard({
28
- operatingSystemProvider,
29
- commandExecutor,
30
- logger,
31
- prompt
32
- }) {
33
- return {
34
- async copy(text) {
35
- text = text.trim();
36
- const platform = operatingSystemProvider.name;
37
- const input = await getExecInputForPlatform({ platform, commandExecutor });
38
- if (!input) {
39
- logger.warn("SKIP_FORMAT", "Clipboard command not found!");
40
- logger.info("SKIP_FORMAT", "Please manually copy the text above.");
41
- return;
42
- }
43
- if (!await prompt.confirm({
44
- message: "Copy to clipboard?",
45
- defaultValue: true
46
- })) {
47
- return;
48
- }
49
- try {
50
- const [command, args] = input;
51
- await commandExecutor.execute(command, args, {
52
- input: text,
53
- stdio: ["pipe", "ignore", "ignore"]
54
- });
55
- logger.info("SKIP_FORMAT", "Copied to clipboard!");
56
- } catch {
57
- logger.error(
58
- "SKIP_FORMAT",
59
- "Sorry, something went wrong! Please copy the text above manually."
60
- );
61
- }
27
+ class CliClipboard {
28
+ #operatingSystemProvider;
29
+ #commandExecutor;
30
+ #logger;
31
+ #prompt;
32
+ constructor({
33
+ operatingSystemProvider,
34
+ commandExecutor,
35
+ logger,
36
+ prompt
37
+ }) {
38
+ this.#operatingSystemProvider = operatingSystemProvider;
39
+ this.#commandExecutor = commandExecutor;
40
+ this.#logger = logger;
41
+ this.#prompt = prompt;
42
+ }
43
+ async copy(text) {
44
+ text = text.trim();
45
+ const platform = this.#operatingSystemProvider.name;
46
+ const input = await getExecInputForPlatform({
47
+ platform,
48
+ commandExecutor: this.#commandExecutor
49
+ });
50
+ if (!input) {
51
+ this.#logger.warn("SKIP_FORMAT", "Clipboard command not found!");
52
+ this.#logger.info("SKIP_FORMAT", "Please manually copy the text above.");
53
+ return;
62
54
  }
63
- };
55
+ if (!await this.#prompt.confirm({
56
+ message: "Copy to clipboard?",
57
+ defaultValue: true
58
+ })) {
59
+ return;
60
+ }
61
+ try {
62
+ const [command, args] = input;
63
+ await this.#commandExecutor.execute(command, args, {
64
+ input: text,
65
+ stdio: ["pipe", "ignore", "ignore"]
66
+ });
67
+ this.#logger.info("SKIP_FORMAT", "Copied to clipboard!");
68
+ } catch {
69
+ this.#logger.error(
70
+ "SKIP_FORMAT",
71
+ "Sorry, something went wrong! Please copy the text above manually."
72
+ );
73
+ }
74
+ }
64
75
  }
65
76
  export {
66
- createCliClipboard
77
+ CliClipboard
67
78
  };
@@ -1,12 +1,15 @@
1
1
  import type { AstroConfig } from '../../../types/public/index.js';
2
2
  import type { AstroVersionProvider, OperatingSystemProvider } from '../../definitions.js';
3
3
  import type { DebugInfoProvider, NodeVersionProvider, PackageManager } from '../definitions.js';
4
- interface Options {
5
- config: Pick<AstroConfig, 'output' | 'adapter' | 'integrations'>;
6
- astroVersionProvider: AstroVersionProvider;
7
- packageManager: PackageManager;
8
- operatingSystemProvider: OperatingSystemProvider;
9
- nodeVersionProvider: NodeVersionProvider;
4
+ import type { DebugInfo } from '../domain/debug-info.js';
5
+ export declare class CliDebugInfoProvider implements DebugInfoProvider {
6
+ #private;
7
+ constructor({ config, astroVersionProvider, packageManager, operatingSystemProvider, nodeVersionProvider, }: {
8
+ config: Pick<AstroConfig, 'output' | 'adapter' | 'integrations'>;
9
+ astroVersionProvider: AstroVersionProvider;
10
+ packageManager: PackageManager;
11
+ operatingSystemProvider: OperatingSystemProvider;
12
+ nodeVersionProvider: NodeVersionProvider;
13
+ });
14
+ get(): Promise<DebugInfo>;
10
15
  }
11
- export declare function createCliDebugInfoProvider({ config, astroVersionProvider, packageManager, operatingSystemProvider, nodeVersionProvider, }: Options): DebugInfoProvider;
12
- export {};
@@ -5,43 +5,53 @@ function withVersion(name, version) {
5
5
  }
6
6
  return result;
7
7
  }
8
- function createCliDebugInfoProvider({
9
- config,
10
- astroVersionProvider,
11
- packageManager,
12
- operatingSystemProvider,
13
- nodeVersionProvider
14
- }) {
15
- return {
16
- async get() {
17
- const debugInfo = [
18
- ["Astro", `v${astroVersionProvider.version}`],
19
- ["Node", nodeVersionProvider.get()],
20
- ["System", operatingSystemProvider.displayName],
21
- ["Package Manager", packageManager.getName()],
22
- ["Output", config.output]
23
- ];
24
- const viteVersion = await packageManager.getPackageVersion("vite");
25
- if (viteVersion) {
26
- debugInfo.splice(1, 0, ["Vite", viteVersion]);
27
- }
28
- debugInfo.push([
29
- "Adapter",
30
- config.adapter ? withVersion(
31
- config.adapter.name,
32
- await packageManager.getPackageVersion(config.adapter.name)
33
- ) : "none"
34
- ]);
35
- const integrations = await Promise.all(
36
- config.integrations.map(
37
- async ({ name }) => withVersion(name, await packageManager.getPackageVersion(name))
38
- )
39
- );
40
- debugInfo.push(["Integrations", integrations.length > 0 ? integrations : "none"]);
41
- return debugInfo;
8
+ class CliDebugInfoProvider {
9
+ #config;
10
+ #astroVersionProvider;
11
+ #packageManager;
12
+ #operatingSystemProvider;
13
+ #nodeVersionProvider;
14
+ constructor({
15
+ config,
16
+ astroVersionProvider,
17
+ packageManager,
18
+ operatingSystemProvider,
19
+ nodeVersionProvider
20
+ }) {
21
+ this.#config = config;
22
+ this.#astroVersionProvider = astroVersionProvider;
23
+ this.#packageManager = packageManager;
24
+ this.#operatingSystemProvider = operatingSystemProvider;
25
+ this.#nodeVersionProvider = nodeVersionProvider;
26
+ }
27
+ async get() {
28
+ const debugInfo = [
29
+ ["Astro", `v${this.#astroVersionProvider.version}`],
30
+ ["Node", this.#nodeVersionProvider.version],
31
+ ["System", this.#operatingSystemProvider.displayName],
32
+ ["Package Manager", this.#packageManager.name],
33
+ ["Output", this.#config.output]
34
+ ];
35
+ const viteVersion = await this.#packageManager.getPackageVersion("vite");
36
+ if (viteVersion) {
37
+ debugInfo.splice(1, 0, ["Vite", viteVersion]);
42
38
  }
43
- };
39
+ debugInfo.push([
40
+ "Adapter",
41
+ this.#config.adapter ? withVersion(
42
+ this.#config.adapter.name,
43
+ await this.#packageManager.getPackageVersion(this.#config.adapter.name)
44
+ ) : "none"
45
+ ]);
46
+ const integrations = await Promise.all(
47
+ this.#config.integrations.map(
48
+ async ({ name }) => withVersion(name, await this.#packageManager.getPackageVersion(name))
49
+ )
50
+ );
51
+ debugInfo.push(["Integrations", integrations.length > 0 ? integrations : "none"]);
52
+ return debugInfo;
53
+ }
44
54
  }
45
55
  export {
46
- createCliDebugInfoProvider
56
+ CliDebugInfoProvider
47
57
  };