@google/gemini-cli 0.9.0-nightly.20251007.4f53919a → 0.9.0-preview.0

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 (64) hide show
  1. package/dist/package.json +8 -2
  2. package/dist/src/commands/extensions/examples/context/gemini-extension.json +1 -2
  3. package/dist/src/commands/extensions/install.d.ts +1 -2
  4. package/dist/src/commands/extensions/install.js +27 -34
  5. package/dist/src/commands/extensions/install.js.map +1 -1
  6. package/dist/src/commands/extensions/install.test.js +13 -22
  7. package/dist/src/commands/extensions/install.test.js.map +1 -1
  8. package/dist/src/commands/extensions/new.js +22 -7
  9. package/dist/src/commands/extensions/new.js.map +1 -1
  10. package/dist/src/commands/extensions/new.test.js +10 -4
  11. package/dist/src/commands/extensions/new.test.js.map +1 -1
  12. package/dist/src/config/extensions/github.d.ts +1 -0
  13. package/dist/src/config/extensions/github.js +9 -16
  14. package/dist/src/config/extensions/github.js.map +1 -1
  15. package/dist/src/config/extensions/github.test.js +64 -1
  16. package/dist/src/config/extensions/github.test.js.map +1 -1
  17. package/dist/src/config/keyBindings.js +1 -1
  18. package/dist/src/config/keyBindings.js.map +1 -1
  19. package/dist/src/generated/git-commit.d.ts +2 -2
  20. package/dist/src/generated/git-commit.js +2 -2
  21. package/dist/src/generated/git-commit.js.map +1 -1
  22. package/dist/src/services/BuiltinCommandLoader.js +3 -0
  23. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  24. package/dist/src/services/BuiltinCommandLoader.test.js +37 -0
  25. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  26. package/dist/src/ui/AppContainer.js +6 -0
  27. package/dist/src/ui/AppContainer.js.map +1 -1
  28. package/dist/src/ui/auth/AuthInProgress.js +2 -2
  29. package/dist/src/ui/auth/AuthInProgress.js.map +1 -1
  30. package/dist/src/ui/commands/profileCommand.d.ts +7 -0
  31. package/dist/src/ui/commands/profileCommand.js +23 -0
  32. package/dist/src/ui/commands/profileCommand.js.map +1 -0
  33. package/dist/src/ui/commands/types.d.ts +1 -0
  34. package/dist/src/ui/commands/types.js.map +1 -1
  35. package/dist/src/ui/components/CliSpinner.d.ts +10 -0
  36. package/dist/src/ui/components/CliSpinner.js +20 -0
  37. package/dist/src/ui/components/CliSpinner.js.map +1 -0
  38. package/dist/src/ui/components/DebugProfiler.d.ts +15 -0
  39. package/dist/src/ui/components/DebugProfiler.js +136 -12
  40. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  41. package/dist/src/ui/components/DebugProfiler.test.d.ts +6 -0
  42. package/dist/src/ui/components/DebugProfiler.test.js +131 -0
  43. package/dist/src/ui/components/DebugProfiler.test.js.map +1 -0
  44. package/dist/src/ui/components/FolderTrustDialog.test.js +2 -2
  45. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  46. package/dist/src/ui/components/Footer.js +3 -1
  47. package/dist/src/ui/components/Footer.js.map +1 -1
  48. package/dist/src/ui/components/GeminiRespondingSpinner.js +2 -2
  49. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  50. package/dist/src/ui/components/messages/CompressionMessage.js +2 -2
  51. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
  52. package/dist/src/ui/contexts/UIStateContext.d.ts +1 -0
  53. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  54. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -0
  55. package/dist/src/ui/hooks/slashCommandProcessor.js +1 -0
  56. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  57. package/dist/src/ui/noninteractive/nonInteractiveUi.js +1 -0
  58. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  59. package/dist/src/utils/installationInfo.d.ts +1 -0
  60. package/dist/src/utils/installationInfo.js +2 -0
  61. package/dist/src/utils/installationInfo.js.map +1 -1
  62. package/dist/src/zed-integration/schema.d.ts +18 -18
  63. package/dist/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +9 -3
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google/gemini-cli",
3
- "version": "0.9.0-nightly.20251007.4f53919a",
3
+ "version": "0.9.0-preview.0",
4
4
  "description": "Gemini CLI",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,7 +25,7 @@
25
25
  "dist"
26
26
  ],
27
27
  "config": {
28
- "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.9.0-nightly.20251007.4f53919a"
28
+ "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.9.0-preview.0"
29
29
  },
30
30
  "dependencies": {
31
31
  "@google/gemini-cli-core": "file:../core",
@@ -45,6 +45,7 @@
45
45
  "ink-gradient": "^3.0.0",
46
46
  "ink-spinner": "^5.0.0",
47
47
  "lowlight": "^3.3.0",
48
+ "mnemonist": "^0.40.3",
48
49
  "open": "^10.1.2",
49
50
  "react": "^19.1.0",
50
51
  "read-package-up": "^11.0.0",
@@ -53,7 +54,9 @@
53
54
  "string-width": "^7.1.0",
54
55
  "strip-ansi": "^7.1.0",
55
56
  "strip-json-comments": "^3.1.1",
57
+ "tar": "^7.5.1",
56
58
  "undici": "^7.10.0",
59
+ "extract-zip": "^2.0.1",
57
60
  "update-notifier": "^7.3.1",
58
61
  "wrap-ansi": "9.0.2",
59
62
  "yargs": "^17.7.2",
@@ -63,6 +66,7 @@
63
66
  "@babel/runtime": "^7.27.6",
64
67
  "@google/gemini-cli-test-utils": "file:../test-utils",
65
68
  "@testing-library/react": "^16.3.0",
69
+ "@types/archiver": "^6.0.3",
66
70
  "@types/command-exists": "^1.2.3",
67
71
  "@types/diff": "^7.0.2",
68
72
  "@types/dotenv": "^6.1.1",
@@ -71,7 +75,9 @@
71
75
  "@types/react-dom": "^19.1.6",
72
76
  "@types/semver": "^7.7.0",
73
77
  "@types/shell-quote": "^1.7.5",
78
+ "@types/tar": "^6.1.13",
74
79
  "@types/yargs": "^17.0.32",
80
+ "archiver": "^7.0.1",
75
81
  "ink-testing-library": "^4.0.0",
76
82
  "jsdom": "^26.1.0",
77
83
  "pretty-format": "^30.0.2",
@@ -1,5 +1,4 @@
1
1
  {
2
2
  "name": "context-example",
3
- "version": "1.0.0",
4
- "contextFileName": "GEMINI.md"
3
+ "version": "1.0.0"
5
4
  }
@@ -5,8 +5,7 @@
5
5
  */
6
6
  import type { CommandModule } from 'yargs';
7
7
  interface InstallArgs {
8
- source?: string;
9
- path?: string;
8
+ source: string;
10
9
  ref?: string;
11
10
  autoUpdate?: boolean;
12
11
  }
@@ -5,36 +5,36 @@
5
5
  */
6
6
  import { installExtension, requestConsentNonInteractive, } from '../../config/extension.js';
7
7
  import { getErrorMessage } from '../../utils/errors.js';
8
+ import { stat } from 'node:fs/promises';
8
9
  export async function handleInstall(args) {
9
10
  try {
10
11
  let installMetadata;
11
- if (args.source) {
12
- const { source } = args;
13
- if (source.startsWith('http://') ||
14
- source.startsWith('https://') ||
15
- source.startsWith('git@') ||
16
- source.startsWith('sso://')) {
17
- installMetadata = {
18
- source,
19
- type: 'git',
20
- ref: args.ref,
21
- autoUpdate: args.autoUpdate,
22
- };
23
- }
24
- else {
25
- throw new Error(`The source "${source}" is not a valid URL format.`);
26
- }
27
- }
28
- else if (args.path) {
12
+ const { source } = args;
13
+ if (source.startsWith('http://') ||
14
+ source.startsWith('https://') ||
15
+ source.startsWith('git@') ||
16
+ source.startsWith('sso://')) {
29
17
  installMetadata = {
30
- source: args.path,
31
- type: 'local',
18
+ source,
19
+ type: 'git',
20
+ ref: args.ref,
32
21
  autoUpdate: args.autoUpdate,
33
22
  };
34
23
  }
35
24
  else {
36
- // This should not be reached due to the yargs check.
37
- throw new Error('Either --source or --path must be provided.');
25
+ if (args.ref || args.autoUpdate) {
26
+ throw new Error('--ref and --auto-update are not applicable for local extensions.');
27
+ }
28
+ try {
29
+ await stat(source);
30
+ installMetadata = {
31
+ source,
32
+ type: 'local',
33
+ };
34
+ }
35
+ catch {
36
+ throw new Error('Install source not found.');
37
+ }
38
38
  }
39
39
  const name = await installExtension(installMetadata, requestConsentNonInteractive);
40
40
  console.log(`Extension "${name}" installed successfully and enabled.`);
@@ -45,16 +45,13 @@ export async function handleInstall(args) {
45
45
  }
46
46
  }
47
47
  export const installCommand = {
48
- command: 'install [<source>] [--path] [--ref] [--auto-update]',
48
+ command: 'install <source>',
49
49
  describe: 'Installs an extension from a git repository URL or a local path.',
50
50
  builder: (yargs) => yargs
51
51
  .positional('source', {
52
- describe: 'The github URL of the extension to install.',
53
- type: 'string',
54
- })
55
- .option('path', {
56
- describe: 'Path to a local extension directory.',
52
+ describe: 'The github URL or local path of the extension to install.',
57
53
  type: 'string',
54
+ demandOption: true,
58
55
  })
59
56
  .option('ref', {
60
57
  describe: 'The git ref to install from.',
@@ -64,19 +61,15 @@ export const installCommand = {
64
61
  describe: 'Enable auto-update for this extension.',
65
62
  type: 'boolean',
66
63
  })
67
- .conflicts('source', 'path')
68
- .conflicts('path', 'ref')
69
- .conflicts('path', 'auto-update')
70
64
  .check((argv) => {
71
- if (!argv.source && !argv.path) {
72
- throw new Error('Either source or --path must be provided.');
65
+ if (!argv.source) {
66
+ throw new Error('The source argument must be provided.');
73
67
  }
74
68
  return true;
75
69
  }),
76
70
  handler: async (argv) => {
77
71
  await handleInstall({
78
72
  source: argv['source'],
79
- path: argv['path'],
80
73
  ref: argv['ref'],
81
74
  autoUpdate: argv['auto-update'],
82
75
  });
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAQxC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAiB;IACnD,IAAI,CAAC;QACH,IAAI,eAAyC,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,IACE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YAC5B,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;YAC7B,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YACzB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3B,CAAC;YACD,eAAe,GAAG;gBAChB,MAAM;gBACN,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,eAAe,GAAG;oBAChB,MAAM;oBACN,IAAI,EAAE,OAAO;iBACd,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,eAAe,EACf,4BAA4B,CAC7B,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uCAAuC,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,kEAAkE;IAC5E,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,QAAQ,EAAE;QACpB,QAAQ,EAAE,2DAA2D;QACrE,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,8BAA8B;QACxC,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,QAAQ,EAAE,wCAAwC;QAClD,IAAI,EAAE,SAAS;KAChB,CAAC;SACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,aAAa,CAAC;YAClB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAW;YAChC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAuB;YACtC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAwB;SACvD,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -8,6 +8,7 @@ import { handleInstall, installCommand } from './install.js';
8
8
  import yargs from 'yargs';
9
9
  const mockInstallExtension = vi.hoisted(() => vi.fn());
10
10
  const mockRequestConsentNonInteractive = vi.hoisted(() => vi.fn());
11
+ const mockStat = vi.hoisted(() => vi.fn());
11
12
  vi.mock('../../config/extension.js', () => ({
12
13
  installExtension: mockInstallExtension,
13
14
  requestConsentNonInteractive: mockRequestConsentNonInteractive,
@@ -15,24 +16,16 @@ vi.mock('../../config/extension.js', () => ({
15
16
  vi.mock('../../utils/errors.js', () => ({
16
17
  getErrorMessage: vi.fn((error) => error.message),
17
18
  }));
19
+ vi.mock('node:fs/promises', () => ({
20
+ stat: mockStat,
21
+ default: {
22
+ stat: mockStat,
23
+ },
24
+ }));
18
25
  describe('extensions install command', () => {
19
26
  it('should fail if no source is provided', () => {
20
27
  const validationParser = yargs([]).command(installCommand).fail(false);
21
- expect(() => validationParser.parse('install')).toThrow('Either source or --path must be provided.');
22
- });
23
- it('should fail if both git source and local path are provided', () => {
24
- const validationParser = yargs([])
25
- .command(installCommand)
26
- .fail(false)
27
- .locale('en');
28
- expect(() => validationParser.parse('install some-url --path /some/path')).toThrow('Arguments source and path are mutually exclusive');
29
- });
30
- it('should fail if both auto update and local path are provided', () => {
31
- const validationParser = yargs([])
32
- .command(installCommand)
33
- .fail(false)
34
- .locale('en');
35
- expect(() => validationParser.parse('install some-url --path /some/path --auto-update')).toThrow('Arguments path and auto-update are mutually exclusive');
28
+ expect(() => validationParser.parse('install')).toThrow('Not enough non-option arguments: got 0, need at least 1');
36
29
  });
37
30
  });
38
31
  describe('handleInstall', () => {
@@ -49,6 +42,7 @@ describe('handleInstall', () => {
49
42
  afterEach(() => {
50
43
  mockInstallExtension.mockClear();
51
44
  mockRequestConsentNonInteractive.mockClear();
45
+ mockStat.mockClear();
52
46
  vi.resetAllMocks();
53
47
  });
54
48
  it('should install an extension from a http source', async () => {
@@ -73,10 +67,11 @@ describe('handleInstall', () => {
73
67
  expect(consoleLogSpy).toHaveBeenCalledWith('Extension "git-extension" installed successfully and enabled.');
74
68
  });
75
69
  it('throws an error from an unknown source', async () => {
70
+ mockStat.mockRejectedValue(new Error('ENOENT: no such file or directory'));
76
71
  await handleInstall({
77
72
  source: 'test://google.com',
78
73
  });
79
- expect(consoleErrorSpy).toHaveBeenCalledWith('The source "test://google.com" is not a valid URL format.');
74
+ expect(consoleErrorSpy).toHaveBeenCalledWith('Install source not found.');
80
75
  expect(processSpy).toHaveBeenCalledWith(1);
81
76
  });
82
77
  it('should install an extension from a sso source', async () => {
@@ -88,16 +83,12 @@ describe('handleInstall', () => {
88
83
  });
89
84
  it('should install an extension from a local path', async () => {
90
85
  mockInstallExtension.mockResolvedValue('local-extension');
86
+ mockStat.mockResolvedValue({});
91
87
  await handleInstall({
92
- path: '/some/path',
88
+ source: '/some/path',
93
89
  });
94
90
  expect(consoleLogSpy).toHaveBeenCalledWith('Extension "local-extension" installed successfully and enabled.');
95
91
  });
96
- it('should throw an error if no source or path is provided', async () => {
97
- await handleInstall({});
98
- expect(consoleErrorSpy).toHaveBeenCalledWith('Either --source or --path must be provided.');
99
- expect(processSpy).toHaveBeenCalledWith(1);
100
- });
101
92
  it('should throw an error if install extension fails', async () => {
102
93
  mockInstallExtension.mockRejectedValue(new Error('Install extension failed'));
103
94
  await handleInstall({ source: 'git@some-url' });
@@ -1 +1 @@
1
- {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.test.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { access, cp, mkdir, readdir } from 'node:fs/promises';
7
- import { join, dirname } from 'node:path';
6
+ import { access, cp, mkdir, readdir, writeFile } from 'node:fs/promises';
7
+ import { join, dirname, basename } from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { getErrorMessage } from '../../utils/errors.js';
10
10
  const __filename = fileURLToPath(import.meta.url);
@@ -19,12 +19,15 @@ async function pathExists(path) {
19
19
  return false;
20
20
  }
21
21
  }
22
- async function copyDirectory(template, path) {
22
+ async function createDirectory(path) {
23
23
  if (await pathExists(path)) {
24
24
  throw new Error(`Path already exists: ${path}`);
25
25
  }
26
- const examplePath = join(EXAMPLES_PATH, template);
27
26
  await mkdir(path, { recursive: true });
27
+ }
28
+ async function copyDirectory(template, path) {
29
+ await createDirectory(path);
30
+ const examplePath = join(EXAMPLES_PATH, template);
28
31
  const entries = await readdir(examplePath, { withFileTypes: true });
29
32
  for (const entry of entries) {
30
33
  const srcPath = join(examplePath, entry.name);
@@ -34,8 +37,20 @@ async function copyDirectory(template, path) {
34
37
  }
35
38
  async function handleNew(args) {
36
39
  try {
37
- await copyDirectory(args.template, args.path);
38
- console.log(`Successfully created new extension from template "${args.template}" at ${args.path}.`);
40
+ if (args.template) {
41
+ await copyDirectory(args.template, args.path);
42
+ console.log(`Successfully created new extension from template "${args.template}" at ${args.path}.`);
43
+ }
44
+ else {
45
+ await createDirectory(args.path);
46
+ const extensionName = basename(args.path);
47
+ const manifest = {
48
+ name: extensionName,
49
+ version: '1.0.0',
50
+ };
51
+ await writeFile(join(args.path, 'gemini-extension.json'), JSON.stringify(manifest, null, 2));
52
+ console.log(`Successfully created new extension at ${args.path}.`);
53
+ }
39
54
  console.log(`You can install this using "gemini extensions link ${args.path}" to test it out.`);
40
55
  }
41
56
  catch (error) {
@@ -50,7 +65,7 @@ async function getBoilerplateChoices() {
50
65
  .map((entry) => entry.name);
51
66
  }
52
67
  export const newCommand = {
53
- command: 'new <path> <template>',
68
+ command: 'new <path> [template]',
54
69
  describe: 'Create a new extension from a boilerplate example.',
55
70
  builder: async (yargs) => {
56
71
  const choices = await getBoilerplateChoices();
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../../../src/commands/extensions/new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../../../src/commands/extensions/new.ts"],"names":[],"mappings":"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"}
@@ -23,11 +23,17 @@ describe('extensions new command', () => {
23
23
  });
24
24
  it('should fail if no path is provided', async () => {
25
25
  const parser = yargs([]).command(newCommand).fail(false).locale('en');
26
- await expect(parser.parseAsync('new')).rejects.toThrow('Not enough non-option arguments: got 0, need at least 2');
26
+ await expect(parser.parseAsync('new')).rejects.toThrow('Not enough non-option arguments: got 0, need at least 1');
27
27
  });
28
- it('should fail if no template is provided', async () => {
29
- const parser = yargs([]).command(newCommand).fail(false).locale('en');
30
- await expect(parser.parseAsync('new /some/path')).rejects.toThrow('Not enough non-option arguments: got 1, need at least 2');
28
+ it('should create directory when no template is provided', async () => {
29
+ mockedFs.access.mockRejectedValue(new Error('ENOENT'));
30
+ mockedFs.mkdir.mockResolvedValue(undefined);
31
+ const parser = yargs([]).command(newCommand).fail(false);
32
+ await parser.parseAsync('new /some/path');
33
+ expect(mockedFs.mkdir).toHaveBeenCalledWith('/some/path', {
34
+ recursive: true,
35
+ });
36
+ expect(mockedFs.cp).not.toHaveBeenCalled();
31
37
  });
32
38
  it('should create directory and copy files when path does not exist', async () => {
33
39
  mockedFs.access.mockRejectedValue(new Error('ENOENT'));
@@ -1 +1 @@
1
- {"version":3,"file":"new.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/new.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/new.test.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,5 @@ interface Asset {
26
26
  browser_download_url: string;
27
27
  }
28
28
  export declare function findReleaseAsset(assets: Asset[]): Asset | undefined;
29
+ export declare function extractFile(file: string, dest: string): Promise<void>;
29
30
  export {};
@@ -10,8 +10,9 @@ import * as os from 'node:os';
10
10
  import * as https from 'node:https';
11
11
  import * as fs from 'node:fs';
12
12
  import * as path from 'node:path';
13
- import { spawnSync } from 'node:child_process';
14
13
  import { EXTENSIONS_CONFIG_FILENAME, loadExtension } from '../extension.js';
14
+ import * as tar from 'tar';
15
+ import extract from 'extract-zip';
15
16
  function getGitHubToken() {
16
17
  return process.env['GITHUB_TOKEN'];
17
18
  }
@@ -189,7 +190,7 @@ export async function downloadFromGitHubRelease(installMetadata, destination) {
189
190
  downloadedAssetPath += '.zip';
190
191
  }
191
192
  await downloadFile(archiveUrl, downloadedAssetPath);
192
- extractFile(downloadedAssetPath, destination);
193
+ await extractFile(downloadedAssetPath, destination);
193
194
  // For regular github releases, the repository is put inside of a top level
194
195
  // directory. In this case we should see exactly two file in the destination
195
196
  // dir, the archive and the directory. If we see that, validate that the
@@ -293,26 +294,18 @@ async function downloadFile(url, dest) {
293
294
  .on('error', reject);
294
295
  });
295
296
  }
296
- function extractFile(file, dest) {
297
- let args;
298
- let command;
297
+ export async function extractFile(file, dest) {
299
298
  if (file.endsWith('.tar.gz')) {
300
- args = ['-xzf', file, '-C', dest];
301
- command = 'tar';
299
+ await tar.x({
300
+ file,
301
+ cwd: dest,
302
+ });
302
303
  }
303
304
  else if (file.endsWith('.zip')) {
304
- args = [file, '-d', dest];
305
- command = 'unzip';
305
+ await extract(file, { dir: dest });
306
306
  }
307
307
  else {
308
308
  throw new Error(`Unsupported file extension for extraction: ${file}`);
309
309
  }
310
- const result = spawnSync(command, args, { stdio: 'pipe' });
311
- if (result.status !== 0) {
312
- if (result.error) {
313
- throw new Error(`Failed to spawn '${command}': ${result.error.message}`);
314
- }
315
- throw new Error(`'${command}' command failed with exit code ${result.status}: ${result.stderr.toString()}`);
316
- }
317
310
  }
318
311
  //# sourceMappingURL=github.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/config/extensions/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE5E,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,eAAyC,EACzC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC;QACvC,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrC,IACE,SAAS,CAAC,QAAQ,KAAK,QAAQ;oBAC/B,SAAS,CAAC,QAAQ,KAAK,YAAY,EACnC,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;wBACxB,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;oBAC7B,CAAC;oBACD,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;gBAC3D,sCAAsC;YACxC,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,uCAAuC,eAAe,CAAC,MAAM,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,IAAI,MAAM,CAAC;QAEjD,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE7C,6EAA6E;QAC7E,yEAAyE;QACzE,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,uCAAuC,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,EACzF;YACE,KAAK,EAAE,KAAK;SACb,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc;IAIvD,qEAAqE;IACrE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC1D,wCAAwC;IACxC,MAAM,KAAK,GAAG,SAAS,EAAE,QAAQ;SAC9B,SAAS,CAAC,CAAC,CAAC;SACZ,KAAK,CAAC,GAAG,CAAC;QACX,oDAAoD;SACnD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,SAAS,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,+CAA+C,CAC3F,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1C,IAAI,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,sRAAsR,CACvR,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,KAAa,EACb,IAAY,EACZ,GAAY;IAEZ,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAClE,MAAM,GAAG,GAAG,gCAAgC,KAAK,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;IACxE,OAAO,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAA6B,EAC7B,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;IAClD,IAAI,eAAe,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,aAAa,CAAC;YACjC,YAAY,EAAE,eAAe,CAAC,MAAM;YACpC,YAAY,EAAE,GAAG;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CACX,mDAAmD,SAAS,CAAC,IAAI,iDAAiD,eAAe,CAAC,MAAM,EAAE,CAC3I,CAAC;YACF,OAAO,oBAAoB,CAAC,KAAK,CAAC;QACpC,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;YACtD,OAAO,oBAAoB,CAAC,gBAAgB,CAAC;QAC/C,CAAC;QACD,OAAO,oBAAoB,CAAC,UAAU,CAAC;IACzC,CAAC;IACD,IACE,CAAC,eAAe;QAChB,CAAC,eAAe,CAAC,IAAI,KAAK,KAAK;YAC7B,eAAe,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAC5C,CAAC;QACD,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC;QACH,IAAI,eAAe,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACvC,OAAO,oBAAoB,CAAC,KAAK,CAAC;YACpC,CAAC;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBACvE,OAAO,oBAAoB,CAAC,KAAK,CAAC;YACpC,CAAC;YAED,4CAA4C;YAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,IAAI,MAAM,CAAC;YAEjD,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;YAErE,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;gBAClD,OAAO,oBAAoB,CAAC,KAAK,CAAC;YACpC,CAAC;YAED,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CACX,mDAAmD,cAAc,GAAG,CACrE,CAAC;gBACF,OAAO,oBAAoB,CAAC,KAAK,CAAC;YACpC,CAAC;YACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,oBAAoB,CAAC,UAAU,CAAC;YACzC,CAAC;YACD,OAAO,oBAAoB,CAAC,gBAAgB,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,oBAAoB,CAAC,KAAK,CAAC;YACpC,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAE3D,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAC9C,KAAK,EACL,IAAI,EACJ,eAAe,CAAC,GAAG,CACpB,CAAC;YACF,IAAI,WAAW,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAO,oBAAoB,CAAC,gBAAgB,CAAC;YAC/C,CAAC;YACD,OAAO,oBAAoB,CAAC,UAAU,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,8CAA8C,eAAe,CAAC,MAAM,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,CACnG,CAAC;QACF,OAAO,oBAAoB,CAAC,KAAK,CAAC;IACpC,CAAC;AACH,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,eAAyC,EACzC,WAAmB;IAEnB,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC;IACxC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,IAAI,IAAI,WAAW,GAAG,EAAE,CAC3D,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,UAA8B,CAAC;QACnC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC5B,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC;gBACrC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBACnC,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC;gBACrC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,wCAAwC,WAAW,CAAC,QAAQ,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,IAAI,mBAAmB,GAAG,IAAI,CAAC,IAAI,CACjC,WAAW,EACX,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAC5C,CAAC;QACF,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,mBAAmB,IAAI,SAAS,CAAC;QACnC,CAAC;aAAM,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,mBAAmB,IAAI,MAAM,CAAC;QAChC,CAAC;QAED,MAAM,YAAY,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAEpD,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;QAE9C,2EAA2E;QAC3E,4EAA4E;QAC5E,wEAAwE;QACxE,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;YACrD,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,IACE,SAAS;gBACT,EAAE,CAAC,UAAU,CACX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,EAAE,0BAA0B,CAAC,CACnE,EACD,CAAC;gBACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChE,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBACtE,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;oBACrC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CACtB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EACjC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAC7B,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE,WAAW,CAAC,QAAQ;YAC7B,IAAI,EAAE,gBAAgB;SACvB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,mCAAmC,eAAe,CAAC,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CACvF,CAAC;IACJ,CAAC;AACH,CAAC;AAcD,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAEvB,MAAM,kBAAkB,GAAG,GAAG,QAAQ,IAAI,IAAI,GAAG,CAAC;IAClD,MAAM,cAAc,GAAG,GAAG,QAAQ,GAAG,CAAC;IAEtC,mDAAmD;IACnD,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9C,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CACxD,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1C,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CACpD,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC9B,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5C,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC3C,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC9C,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,SAAS,CAAI,GAAW;IACrC,MAAM,OAAO,GAAqD;QAChE,YAAY,EAAE,YAAY;KAC3B,CAAC;IACF,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,aAAa,GAAG,SAAS,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK;aACF,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,OAAO,MAAM,CACX,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,UAAU,EAAE,CAAC,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,IAAY;IACnD,MAAM,OAAO,GAAqD;QAChE,YAAY,EAAE,YAAY;KAC3B,CAAC;IACF,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,aAAa,GAAG,SAAS,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK;aACF,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACrD,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,QAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,OAAO,MAAM,CACX,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,UAAU,EAAE,CAAC,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAqB,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,IAAI,IAAc,CAAC;IACnB,IAAI,OAAwB,CAAC;IAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,KAAK,CACb,IAAI,OAAO,mCAAmC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAC3F,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/config/extensions/github.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,15 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
7
- import { checkForExtensionUpdate, cloneFromGit, findReleaseAsset, parseGitHubRepoForReleases, } from './github.js';
7
+ import { checkForExtensionUpdate, cloneFromGit, extractFile, findReleaseAsset, parseGitHubRepoForReleases, } from './github.js';
8
8
  import { simpleGit } from 'simple-git';
9
9
  import { ExtensionUpdateState } from '../../ui/state/extensions.js';
10
+ import * as os from 'node:os';
11
+ import * as fs from 'node:fs/promises';
12
+ import * as fsSync from 'node:fs';
13
+ import * as path from 'node:path';
14
+ import * as tar from 'tar';
15
+ import * as archiver from 'archiver';
10
16
  const mockPlatform = vi.hoisted(() => vi.fn());
11
17
  const mockArch = vi.hoisted(() => vi.fn());
12
18
  vi.mock('node:os', async (importOriginal) => {
@@ -268,5 +274,62 @@ describe('git extension helpers', () => {
268
274
  expect(() => parseGitHubRepoForReleases(source)).toThrow('Invalid GitHub repository source: https://github.com/owner/repo/extra. Expected "owner/repo" or a github repo uri.');
269
275
  });
270
276
  });
277
+ describe('extractFile', () => {
278
+ let tempDir;
279
+ beforeEach(async () => {
280
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gemini-test-'));
281
+ });
282
+ afterEach(async () => {
283
+ await fs.rm(tempDir, { recursive: true, force: true });
284
+ });
285
+ it('should extract a .tar.gz file', async () => {
286
+ const archivePath = path.join(tempDir, 'test.tar.gz');
287
+ const extractionDest = path.join(tempDir, 'extracted');
288
+ await fs.mkdir(extractionDest);
289
+ // Create a dummy file to be archived
290
+ const dummyFilePath = path.join(tempDir, 'test.txt');
291
+ await fs.writeFile(dummyFilePath, 'hello tar');
292
+ // Create the tar.gz file
293
+ await tar.c({
294
+ gzip: true,
295
+ file: archivePath,
296
+ cwd: tempDir,
297
+ }, ['test.txt']);
298
+ await extractFile(archivePath, extractionDest);
299
+ const extractedFilePath = path.join(extractionDest, 'test.txt');
300
+ const content = await fs.readFile(extractedFilePath, 'utf-8');
301
+ expect(content).toBe('hello tar');
302
+ });
303
+ it('should extract a .zip file', async () => {
304
+ const archivePath = path.join(tempDir, 'test.zip');
305
+ const extractionDest = path.join(tempDir, 'extracted');
306
+ await fs.mkdir(extractionDest);
307
+ // Create a dummy file to be archived
308
+ const dummyFilePath = path.join(tempDir, 'test.txt');
309
+ await fs.writeFile(dummyFilePath, 'hello zip');
310
+ // Create the zip file
311
+ const output = fsSync.createWriteStream(archivePath);
312
+ const archive = archiver.create('zip');
313
+ const streamFinished = new Promise((resolve, reject) => {
314
+ output.on('close', () => resolve(null));
315
+ archive.on('error', reject);
316
+ });
317
+ archive.pipe(output);
318
+ archive.file(dummyFilePath, { name: 'test.txt' });
319
+ await archive.finalize();
320
+ await streamFinished;
321
+ await extractFile(archivePath, extractionDest);
322
+ const extractedFilePath = path.join(extractionDest, 'test.txt');
323
+ const content = await fs.readFile(extractedFilePath, 'utf-8');
324
+ expect(content).toBe('hello zip');
325
+ });
326
+ it('should throw an error for unsupported file types', async () => {
327
+ const unsupportedFilePath = path.join(tempDir, 'test.txt');
328
+ await fs.writeFile(unsupportedFilePath, 'some content');
329
+ const extractionDest = path.join(tempDir, 'extracted');
330
+ await fs.mkdir(extractionDest);
331
+ await expect(extractFile(unsupportedFilePath, extractionDest)).rejects.toThrow('Unsupported file extension for extraction:');
332
+ });
333
+ });
271
334
  });
272
335
  //# sourceMappingURL=github.test.js.map