@sentry/wizard 4.6.0 → 4.7.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 (137) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/bin.js +9 -0
  3. package/dist/bin.js.map +1 -1
  4. package/dist/e2e-tests/tests/flutter.test.js +16 -16
  5. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  6. package/dist/e2e-tests/tests/help-message.test.d.ts +1 -0
  7. package/dist/e2e-tests/tests/help-message.test.js +56 -0
  8. package/dist/e2e-tests/tests/help-message.test.js.map +1 -0
  9. package/dist/e2e-tests/tests/nextjs-14.test.js +15 -15
  10. package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
  11. package/dist/e2e-tests/tests/nextjs-15.test.js +15 -15
  12. package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
  13. package/dist/e2e-tests/tests/nuxt-3.test.js +13 -12
  14. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  15. package/dist/e2e-tests/tests/nuxt-4.test.js +13 -12
  16. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  17. package/dist/e2e-tests/tests/remix.test.js +20 -20
  18. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  19. package/dist/e2e-tests/tests/sveltekit.test.js +20 -20
  20. package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
  21. package/dist/e2e-tests/utils/index.js +15 -11
  22. package/dist/e2e-tests/utils/index.js.map +1 -1
  23. package/dist/lib/Constants.d.ts +5 -1
  24. package/dist/lib/Constants.js.map +1 -1
  25. package/dist/lib/Helper/Logging.d.ts +1 -1
  26. package/dist/lib/Helper/Logging.js.map +1 -1
  27. package/dist/lib/Helper/__tests__/File.js +9 -9
  28. package/dist/lib/Helper/__tests__/File.js.map +1 -1
  29. package/dist/lib/Helper/__tests__/MergeConfig.js +17 -17
  30. package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
  31. package/dist/lib/Helper/__tests__/SentryCli.js +23 -22
  32. package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
  33. package/dist/lib/Setup.d.ts +2 -1
  34. package/dist/lib/Setup.js +12 -2
  35. package/dist/lib/Setup.js.map +1 -1
  36. package/dist/lib/Steps/BaseStep.d.ts +1 -1
  37. package/dist/lib/Steps/BaseStep.js.map +1 -1
  38. package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
  39. package/dist/lib/Steps/Welcome.js +5 -0
  40. package/dist/lib/Steps/Welcome.js.map +1 -1
  41. package/dist/lib/__tests__/Env.js +4 -3
  42. package/dist/lib/__tests__/Env.js.map +1 -1
  43. package/dist/src/apple/apple-wizard.js +24 -64
  44. package/dist/src/apple/apple-wizard.js.map +1 -1
  45. package/dist/src/apple/configure-package-manager.d.ts +5 -0
  46. package/dist/src/apple/configure-package-manager.js +68 -0
  47. package/dist/src/apple/configure-package-manager.js.map +1 -0
  48. package/dist/src/apple/configure-sentry-cli.d.ts +4 -0
  49. package/dist/src/apple/configure-sentry-cli.js +47 -0
  50. package/dist/src/apple/configure-sentry-cli.js.map +1 -0
  51. package/dist/src/apple/configure-xcode-project.d.ts +8 -0
  52. package/dist/src/apple/configure-xcode-project.js +11 -0
  53. package/dist/src/apple/configure-xcode-project.js.map +1 -0
  54. package/dist/src/apple/inject-code-snippet.d.ts +6 -0
  55. package/dist/src/apple/inject-code-snippet.js +54 -0
  56. package/dist/src/apple/inject-code-snippet.js.map +1 -0
  57. package/dist/src/apple/templates.js +11 -7
  58. package/dist/src/apple/templates.js.map +1 -1
  59. package/dist/src/apple/xcode-manager.js +3 -6
  60. package/dist/src/apple/xcode-manager.js.map +1 -1
  61. package/dist/src/nextjs/templates.js +3 -1
  62. package/dist/src/nextjs/templates.js.map +1 -1
  63. package/dist/src/react-native/javascript.d.ts +6 -4
  64. package/dist/src/react-native/javascript.js +25 -9
  65. package/dist/src/react-native/javascript.js.map +1 -1
  66. package/dist/src/react-native/react-native-wizard.d.ts +4 -0
  67. package/dist/src/react-native/react-native-wizard.js +30 -5
  68. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  69. package/dist/src/react-native/xcode.d.ts +7 -3
  70. package/dist/src/react-native/xcode.js +64 -20
  71. package/dist/src/react-native/xcode.js.map +1 -1
  72. package/dist/src/run.js +2 -2
  73. package/dist/src/run.js.map +1 -1
  74. package/dist/src/utils/clack/index.js +3 -1
  75. package/dist/src/utils/clack/index.js.map +1 -1
  76. package/dist/src/utils/package-manager.d.ts +2 -0
  77. package/dist/src/utils/package-manager.js +55 -5
  78. package/dist/src/utils/package-manager.js.map +1 -1
  79. package/dist/src/version.d.ts +1 -1
  80. package/dist/src/version.js +1 -1
  81. package/dist/src/version.js.map +1 -1
  82. package/dist/test/android/code-tools.test.js +13 -12
  83. package/dist/test/android/code-tools.test.js.map +1 -1
  84. package/dist/test/apple/cocoapod.test.js +77 -72
  85. package/dist/test/apple/cocoapod.test.js.map +1 -1
  86. package/dist/test/apple/code-tools.test.js +173 -166
  87. package/dist/test/apple/code-tools.test.js.map +1 -1
  88. package/dist/test/apple/fastfile.test.js +86 -83
  89. package/dist/test/apple/fastfile.test.js.map +1 -1
  90. package/dist/test/apple/templates.test.js +32 -27
  91. package/dist/test/apple/templates.test.js.map +1 -1
  92. package/dist/test/apple/xcode-manager.test.js +182 -183
  93. package/dist/test/apple/xcode-manager.test.js.map +1 -1
  94. package/dist/test/flutter/code-tools.test.js +29 -28
  95. package/dist/test/flutter/code-tools.test.js.map +1 -1
  96. package/dist/test/flutter/templates.test.js +15 -14
  97. package/dist/test/flutter/templates.test.js.map +1 -1
  98. package/dist/test/nextjs/templates.test.js +43 -36
  99. package/dist/test/nextjs/templates.test.js.map +1 -1
  100. package/dist/test/nuxt/templates.test.js +25 -24
  101. package/dist/test/nuxt/templates.test.js.map +1 -1
  102. package/dist/test/react-native/expo-metro.test.js +11 -10
  103. package/dist/test/react-native/expo-metro.test.js.map +1 -1
  104. package/dist/test/react-native/expo.test.js +11 -10
  105. package/dist/test/react-native/expo.test.js.map +1 -1
  106. package/dist/test/react-native/gradle.test.js +27 -26
  107. package/dist/test/react-native/gradle.test.js.map +1 -1
  108. package/dist/test/react-native/javascript.test.js +108 -58
  109. package/dist/test/react-native/javascript.test.js.map +1 -1
  110. package/dist/test/react-native/metro.test.js +65 -64
  111. package/dist/test/react-native/metro.test.js.map +1 -1
  112. package/dist/test/react-native/xcode.test.js +138 -37
  113. package/dist/test/react-native/xcode.test.js.map +1 -1
  114. package/dist/test/remix/client-entry.test.js +8 -7
  115. package/dist/test/remix/client-entry.test.js.map +1 -1
  116. package/dist/test/remix/server-instrumentation.test.js +6 -5
  117. package/dist/test/remix/server-instrumentation.test.js.map +1 -1
  118. package/dist/test/sourcemaps/tools/sentry-cli.test.js +20 -20
  119. package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
  120. package/dist/test/sourcemaps/tools/tsc.test.js +13 -14
  121. package/dist/test/sourcemaps/tools/tsc.test.js.map +1 -1
  122. package/dist/test/sourcemaps/tools/vite.test.js +13 -14
  123. package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
  124. package/dist/test/sourcemaps/tools/webpack.test.js +19 -20
  125. package/dist/test/sourcemaps/tools/webpack.test.js.map +1 -1
  126. package/dist/test/sveltekit/templates.test.js +13 -12
  127. package/dist/test/sveltekit/templates.test.js.map +1 -1
  128. package/dist/test/utils/ast-utils.test.js +45 -44
  129. package/dist/test/utils/ast-utils.test.js.map +1 -1
  130. package/dist/test/utils/clack/index.test.js +140 -144
  131. package/dist/test/utils/clack/index.test.js.map +1 -1
  132. package/dist/test/utils/package-manager.test.js +8 -7
  133. package/dist/test/utils/package-manager.test.js.map +1 -1
  134. package/package.json +10 -38
  135. package/dist/e2e-tests/jest.config.d.ts +0 -17
  136. package/dist/e2e-tests/jest.config.js +0 -23
  137. package/dist/e2e-tests/jest.config.js.map +0 -1
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports._detectPackageManger = exports.packageManagers = exports.NPM = exports.PNPM = exports.YARN_V2 = exports.YARN_V1 = exports.BUN = void 0;
26
+ exports._detectPackageManger = exports.packageManagers = exports.NPM = exports.PNPM = exports.YARN_V2 = exports.YARN_V1 = exports.DENO = exports.BUN = void 0;
27
27
  const fs = __importStar(require("node:fs"));
28
28
  const path = __importStar(require("node:path"));
29
29
  const Sentry = __importStar(require("@sentry/node"));
@@ -37,7 +37,43 @@ exports.BUN = {
37
37
  runScriptCommand: 'bun run',
38
38
  flags: '',
39
39
  forceInstallFlag: '--force',
40
- detect: () => ['bun.lockb', 'bun.lock'].some((lockFile) => fs.existsSync(path.join(process.cwd(), lockFile))),
40
+ detect: () => ['bun.lockb', 'bun.lock'].some((lockFile) => {
41
+ try {
42
+ return fs.existsSync(path.join(process.cwd(), lockFile));
43
+ }
44
+ catch (e) {
45
+ return false;
46
+ }
47
+ }),
48
+ addOverride: async (pkgName, pkgVersion) => {
49
+ const packageDotJson = await (0, clack_1.getPackageDotJson)();
50
+ const overrides = packageDotJson.overrides || {};
51
+ await (0, clack_1.updatePackageDotJson)({
52
+ ...packageDotJson,
53
+ overrides: {
54
+ ...overrides,
55
+ [pkgName]: pkgVersion,
56
+ },
57
+ });
58
+ },
59
+ };
60
+ exports.DENO = {
61
+ name: 'deno',
62
+ label: 'Deno',
63
+ installCommand: 'install',
64
+ buildCommand: 'deno task build',
65
+ runScriptCommand: 'deno task',
66
+ flags: '',
67
+ forceInstallFlag: '--force',
68
+ registry: 'npm',
69
+ detect: () => {
70
+ try {
71
+ return fs.existsSync(path.join(process.cwd(), 'deno.lock'));
72
+ }
73
+ catch (e) {
74
+ return false;
75
+ }
76
+ },
41
77
  addOverride: async (pkgName, pkgVersion) => {
42
78
  const packageDotJson = await (0, clack_1.getPackageDotJson)();
43
79
  const overrides = packageDotJson.overrides || {};
@@ -121,7 +157,14 @@ exports.PNPM = {
121
157
  runScriptCommand: 'pnpm',
122
158
  flags: '--ignore-workspace-root-check',
123
159
  forceInstallFlag: '--force',
124
- detect: () => fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml')),
160
+ detect: () => {
161
+ try {
162
+ return fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml'));
163
+ }
164
+ catch (e) {
165
+ return false;
166
+ }
167
+ },
125
168
  addOverride: async (pkgName, pkgVersion) => {
126
169
  const packageDotJson = await (0, clack_1.getPackageDotJson)();
127
170
  const pnpm = packageDotJson.pnpm || {};
@@ -146,7 +189,14 @@ exports.NPM = {
146
189
  runScriptCommand: 'npm run',
147
190
  flags: '',
148
191
  forceInstallFlag: '--force',
149
- detect: () => fs.existsSync(path.join(process.cwd(), 'package-lock.json')),
192
+ detect: () => {
193
+ try {
194
+ return fs.existsSync(path.join(process.cwd(), 'package-lock.json'));
195
+ }
196
+ catch (e) {
197
+ return false;
198
+ }
199
+ },
150
200
  addOverride: async (pkgName, pkgVersion) => {
151
201
  const packageDotJson = await (0, clack_1.getPackageDotJson)();
152
202
  const overrides = packageDotJson.overrides || {};
@@ -159,7 +209,7 @@ exports.NPM = {
159
209
  });
160
210
  },
161
211
  };
162
- exports.packageManagers = [exports.BUN, exports.YARN_V1, exports.YARN_V2, exports.PNPM, exports.NPM];
212
+ exports.packageManagers = [exports.NPM, exports.YARN_V1, exports.YARN_V2, exports.PNPM, exports.BUN, exports.DENO];
163
213
  /**
164
214
  * Exported only for testing.
165
215
  * DO NOT call this function directly!
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport * as Sentry from '@sentry/node';\nimport { traceStep } from '../telemetry';\nimport { getPackageDotJson, updatePackageDotJson } from './clack';\n\nexport interface PackageManager {\n name: string;\n label: string;\n installCommand: string;\n buildCommand: string;\n /* The command that the package manager uses to run a script from package.json */\n runScriptCommand: string;\n flags: string;\n forceInstallFlag: string;\n detect: () => boolean;\n addOverride: (pkgName: string, pkgVersion: string) => Promise<void>;\n}\n\nexport const BUN: PackageManager = {\n name: 'bun',\n label: 'Bun',\n installCommand: 'add',\n buildCommand: 'bun run build',\n runScriptCommand: 'bun run',\n flags: '',\n forceInstallFlag: '--force',\n detect: () =>\n ['bun.lockb', 'bun.lock'].some((lockFile) =>\n fs.existsSync(path.join(process.cwd(), lockFile)),\n ),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const YARN_V1: PackageManager = {\n name: 'yarn',\n label: 'Yarn V1',\n installCommand: 'add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), 'yarn.lock'), 'utf-8')\n .slice(0, 500)\n .includes('yarn lockfile v1');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\n/** YARN V2/3/4 */\nexport const YARN_V2: PackageManager = {\n name: 'yarn',\n label: 'Yarn V2/3/4',\n installCommand: 'add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '',\n forceInstallFlag: '--force',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), 'yarn.lock'), 'utf-8')\n .slice(0, 500)\n .includes('__metadata');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const PNPM: PackageManager = {\n name: 'pnpm',\n label: 'PNPM',\n installCommand: 'add',\n buildCommand: 'pnpm build',\n runScriptCommand: 'pnpm',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: () => fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml')),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const pnpm = packageDotJson.pnpm || {};\n const overrides = pnpm.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n pnpm: {\n ...pnpm,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n });\n },\n};\nexport const NPM: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: () => fs.existsSync(path.join(process.cwd(), 'package-lock.json')),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\n\nexport const packageManagers = [BUN, YARN_V1, YARN_V2, PNPM, NPM];\n\n/**\n * Exported only for testing.\n * DO NOT call this function directly!\n * Use `getPackageManger` instead.\n */\nexport function _detectPackageManger(\n managers?: PackageManager[],\n): PackageManager | null {\n return traceStep('detect-package-manager', () => {\n const foundPackageMangers = (managers ?? packageManagers).filter(\n (packageManager) => packageManager.detect(),\n );\n\n // Only consider a package manager detected if we found exactly one.\n // If we find more than one, we should not make any assumptions.\n if (foundPackageMangers.length === 1) {\n Sentry.setTag('package-manager', foundPackageMangers[0].name);\n return foundPackageMangers[0];\n }\n\n Sentry.setTag('package-manager', 'not-detected');\n return null;\n });\n}\n"]}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport * as Sentry from '@sentry/node';\nimport { traceStep } from '../telemetry';\nimport { getPackageDotJson, updatePackageDotJson } from './clack';\n\nexport interface PackageManager {\n name: string;\n label: string;\n installCommand: string;\n buildCommand: string;\n /* The command that the package manager uses to run a script from package.json */\n runScriptCommand: string;\n flags: string;\n forceInstallFlag: string;\n registry?: string;\n detect: () => boolean;\n addOverride: (pkgName: string, pkgVersion: string) => Promise<void>;\n}\n\nexport const BUN: PackageManager = {\n name: 'bun',\n label: 'Bun',\n installCommand: 'add',\n buildCommand: 'bun run build',\n runScriptCommand: 'bun run',\n flags: '',\n forceInstallFlag: '--force',\n detect: () =>\n ['bun.lockb', 'bun.lock'].some((lockFile) => {\n try {\n return fs.existsSync(path.join(process.cwd(), lockFile));\n } catch (e) {\n return false;\n }\n }),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const DENO: PackageManager = {\n name: 'deno',\n label: 'Deno',\n installCommand: 'install',\n buildCommand: 'deno task build',\n runScriptCommand: 'deno task',\n flags: '',\n forceInstallFlag: '--force',\n registry: 'npm',\n detect: () => {\n try {\n return fs.existsSync(path.join(process.cwd(), 'deno.lock'));\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const YARN_V1: PackageManager = {\n name: 'yarn',\n label: 'Yarn V1',\n installCommand: 'add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), 'yarn.lock'), 'utf-8')\n .slice(0, 500)\n .includes('yarn lockfile v1');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\n/** YARN V2/3/4 */\nexport const YARN_V2: PackageManager = {\n name: 'yarn',\n label: 'Yarn V2/3/4',\n installCommand: 'add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '',\n forceInstallFlag: '--force',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), 'yarn.lock'), 'utf-8')\n .slice(0, 500)\n .includes('__metadata');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const PNPM: PackageManager = {\n name: 'pnpm',\n label: 'PNPM',\n installCommand: 'add',\n buildCommand: 'pnpm build',\n runScriptCommand: 'pnpm',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: () => {\n try {\n return fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml'));\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const pnpm = packageDotJson.pnpm || {};\n const overrides = pnpm.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n pnpm: {\n ...pnpm,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n });\n },\n};\nexport const NPM: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: () => {\n try {\n return fs.existsSync(path.join(process.cwd(), 'package-lock.json'));\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\n\nexport const packageManagers = [NPM, YARN_V1, YARN_V2, PNPM, BUN, DENO];\n\n/**\n * Exported only for testing.\n * DO NOT call this function directly!\n * Use `getPackageManger` instead.\n */\nexport function _detectPackageManger(\n managers?: PackageManager[],\n): PackageManager | null {\n return traceStep('detect-package-manager', () => {\n const foundPackageMangers = (managers ?? packageManagers).filter(\n (packageManager) => packageManager.detect(),\n );\n\n // Only consider a package manager detected if we found exactly one.\n // If we find more than one, we should not make any assumptions.\n if (foundPackageMangers.length === 1) {\n Sentry.setTag('package-manager', foundPackageMangers[0].name);\n return foundPackageMangers[0];\n }\n\n Sentry.setTag('package-manager', 'not-detected');\n return null;\n });\n}\n"]}
@@ -1 +1 @@
1
- export declare const WIZARD_VERSION = "4.6.0";
1
+ export declare const WIZARD_VERSION = "4.7.0";
@@ -3,5 +3,5 @@
3
3
  // This is file is updated at release time.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.WIZARD_VERSION = void 0;
6
- exports.WIZARD_VERSION = '4.6.0';
6
+ exports.WIZARD_VERSION = '4.7.0';
7
7
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA,oCAAoC;AACpC,2CAA2C;;;AAE9B,QAAA,cAAc,GAAG,OAAO,CAAC","sourcesContent":["// DO NOT modify this file manually!\n// This is file is updated at release time.\n\nexport const WIZARD_VERSION = '4.6.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA,oCAAoC;AACpC,2CAA2C;;;AAE9B,QAAA,cAAc,GAAG,OAAO,CAAC","sourcesContent":["// DO NOT modify this file manually!\n// This is file is updated at release time.\n\nexport const WIZARD_VERSION = '4.7.0';\n"]}
@@ -1,32 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
3
4
  const code_tools_1 = require("../../src/android/code-tools");
4
- describe('code-tools', () => {
5
- describe('getLastImportLineLocation', () => {
6
- it('returns proper line index', () => {
5
+ (0, vitest_1.describe)('code-tools', () => {
6
+ (0, vitest_1.describe)('getLastImportLineLocation', () => {
7
+ (0, vitest_1.it)('returns proper line index', () => {
7
8
  const code = `import a.b.c;\n` + `//<insert-location>\n` + `class X {}`;
8
- expect((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
9
+ (0, vitest_1.expect)((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
9
10
  });
10
- it('returns proper line index when static import is used', () => {
11
+ (0, vitest_1.it)('returns proper line index when static import is used', () => {
11
12
  const code = `import static a.b.c;\n` + `//<insert-location>\n` + `class X {}`;
12
- expect((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
13
+ (0, vitest_1.expect)((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
13
14
  });
14
- it('returns proper line index when wildcard import is used', () => {
15
+ (0, vitest_1.it)('returns proper line index when wildcard import is used', () => {
15
16
  const code = `import a.b.*\n` + `//<insert-location>\n` + `class X {}`;
16
- expect((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
17
+ (0, vitest_1.expect)((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
17
18
  });
18
- it('returns proper line index when alias import is used', () => {
19
+ (0, vitest_1.it)('returns proper line index when alias import is used', () => {
19
20
  const code = `import static a.b.c as d\n` + `//<insert-location>\n` + `class X {}`;
20
- expect((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
21
+ (0, vitest_1.expect)((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
21
22
  });
22
- it('returns proper line index when multiple imports are present', () => {
23
+ (0, vitest_1.it)('returns proper line index when multiple imports are present', () => {
23
24
  const code = `import static a.b.c as d\n` +
24
25
  `import a.b.*\n` +
25
26
  `import static a.b.c;\n` +
26
27
  `import a.b.c;\n` +
27
28
  `//<insert-location>\n` +
28
29
  `class X {}`;
29
- expect((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
30
+ (0, vitest_1.expect)((0, code_tools_1.getLastImportLineLocation)(code)).toBe(code.indexOf('//<insert-location>'));
30
31
  });
31
32
  });
32
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"code-tools.test.js","sourceRoot":"","sources":["../../../test/android/code-tools.test.ts"],"names":[],"mappings":";;AAAA,6DAAyE;AAEzE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,IAAI,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACxE,MAAM,CAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,IAAI,GACR,wBAAwB,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACpE,MAAM,CAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,IAAI,GAAG,gBAAgB,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACvE,MAAM,CAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GACR,4BAA4B,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACxE,MAAM,CAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,IAAI,GACR,4BAA4B;gBAC5B,gBAAgB;gBAChB,wBAAwB;gBACxB,iBAAiB;gBACjB,uBAAuB;gBACvB,YAAY,CAAC;YACf,MAAM,CAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { getLastImportLineLocation } from '../../src/android/code-tools';\n\ndescribe('code-tools', () => {\n describe('getLastImportLineLocation', () => {\n it('returns proper line index', () => {\n const code = `import a.b.c;\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when static import is used', () => {\n const code =\n `import static a.b.c;\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when wildcard import is used', () => {\n const code = `import a.b.*\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when alias import is used', () => {\n const code =\n `import static a.b.c as d\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when multiple imports are present', () => {\n const code =\n `import static a.b.c as d\\n` +\n `import a.b.*\\n` +\n `import static a.b.c;\\n` +\n `import a.b.c;\\n` +\n `//<insert-location>\\n` +\n `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n });\n});\n"]}
1
+ {"version":3,"file":"code-tools.test.js","sourceRoot":"","sources":["../../../test/android/code-tools.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,6DAAyE;AAEzE,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,IAAI,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACxE,IAAA,eAAM,EAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,IAAI,GACR,wBAAwB,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACpE,IAAA,eAAM,EAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,IAAI,GAAG,gBAAgB,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACvE,IAAA,eAAM,EAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GACR,4BAA4B,GAAG,uBAAuB,GAAG,YAAY,CAAC;YACxE,IAAA,eAAM,EAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,IAAI,GACR,4BAA4B;gBAC5B,gBAAgB;gBAChB,wBAAwB;gBACxB,iBAAiB;gBACjB,uBAAuB;gBACvB,YAAY,CAAC;YACf,IAAA,eAAM,EAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { getLastImportLineLocation } from '../../src/android/code-tools';\n\ndescribe('code-tools', () => {\n describe('getLastImportLineLocation', () => {\n it('returns proper line index', () => {\n const code = `import a.b.c;\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when static import is used', () => {\n const code =\n `import static a.b.c;\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when wildcard import is used', () => {\n const code = `import a.b.*\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when alias import is used', () => {\n const code =\n `import static a.b.c as d\\n` + `//<insert-location>\\n` + `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n\n it('returns proper line index when multiple imports are present', () => {\n const code =\n `import static a.b.c as d\\n` +\n `import a.b.*\\n` +\n `import static a.b.c;\\n` +\n `import a.b.c;\\n` +\n `//<insert-location>\\n` +\n `class X {}`;\n expect(getLastImportLineLocation(code)).toBe(\n code.indexOf('//<insert-location>'),\n );\n });\n });\n});\n"]}
@@ -31,29 +31,34 @@ const cocoapod_1 = require("../../src/apple/cocoapod");
31
31
  const bash = __importStar(require("../../src/utils/bash"));
32
32
  // @ts-expect-error - clack is ESM and TS complains about that. It works though
33
33
  const clack = __importStar(require("@clack/prompts"));
34
- jest.mock('@clack/prompts', () => ({
34
+ const vitest_1 = require("vitest");
35
+ vitest_1.vi.mock('@clack/prompts', async () => ({
35
36
  __esModule: true,
36
- ...jest.requireActual('@clack/prompts'),
37
+ ...(await vitest_1.vi.importActual('@clack/prompts')),
37
38
  }));
38
- jest.mock('../../src/utils/bash');
39
- jest.spyOn(Sentry, 'setTag').mockImplementation();
40
- jest.spyOn(Sentry, 'captureException').mockImplementation();
39
+ vitest_1.vi.mock('../../src/utils/bash');
40
+ vitest_1.vi.spyOn(Sentry, 'setTag').mockImplementation(() => {
41
+ /* empty */
42
+ });
43
+ vitest_1.vi.spyOn(Sentry, 'captureException').mockImplementation(() => 'id');
41
44
  const clackSpinnerMock = {
42
- start: jest.fn(),
43
- stop: jest.fn(),
44
- message: jest.fn(),
45
+ start: vitest_1.vi.fn(),
46
+ stop: vitest_1.vi.fn(),
47
+ message: vitest_1.vi.fn(),
45
48
  };
46
- describe('cocoapod', () => {
47
- beforeEach(() => {
48
- jest.spyOn(clack, 'spinner').mockReturnValue(clackSpinnerMock);
49
- jest.spyOn(clack.log, 'error').mockImplementation();
49
+ (0, vitest_1.describe)('cocoapod', () => {
50
+ (0, vitest_1.beforeEach)(() => {
51
+ vitest_1.vi.spyOn(clack, 'spinner').mockReturnValue(clackSpinnerMock);
52
+ vitest_1.vi.spyOn(clack.log, 'error').mockImplementation(() => {
53
+ /* empty */
54
+ });
50
55
  });
51
- afterEach(() => {
52
- jest.clearAllMocks();
56
+ (0, vitest_1.afterEach)(() => {
57
+ vitest_1.vi.clearAllMocks();
53
58
  });
54
- describe('usesCocoaPod', () => {
55
- describe('Podfile exists', () => {
56
- it('should return true', () => {
59
+ (0, vitest_1.describe)('usesCocoaPod', () => {
60
+ (0, vitest_1.describe)('Podfile exists', () => {
61
+ (0, vitest_1.it)('should return true', () => {
57
62
  // -- Arrange --
58
63
  const projPath = path.join(os.tmpdir(), 'test-project-with-podfile');
59
64
  const tempDir = fs.mkdtempSync(projPath);
@@ -62,33 +67,33 @@ describe('cocoapod', () => {
62
67
  // -- Act --
63
68
  const result = (0, cocoapod_1.usesCocoaPod)(tempDir);
64
69
  // -- Assert --
65
- expect(result).toBeTruthy();
70
+ (0, vitest_1.expect)(result).toBeTruthy();
66
71
  });
67
72
  });
68
- describe('Podfile does not exist', () => {
69
- it('should return false', () => {
73
+ (0, vitest_1.describe)('Podfile does not exist', () => {
74
+ (0, vitest_1.it)('should return false', () => {
70
75
  // -- Arrange --
71
76
  const projPath = path.join(os.tmpdir(), 'test-project-without-podfile');
72
77
  const tempDir = fs.mkdtempSync(projPath);
73
78
  // -- Act --
74
79
  const result = (0, cocoapod_1.usesCocoaPod)(tempDir);
75
80
  // -- Assert --
76
- expect(result).toBeFalsy();
81
+ (0, vitest_1.expect)(result).toBeFalsy();
77
82
  });
78
83
  });
79
84
  });
80
- describe('addCocoaPods', () => {
81
- describe('Podfile does not exist', () => {
82
- it('should throw an error', async () => {
85
+ (0, vitest_1.describe)('addCocoaPods', () => {
86
+ (0, vitest_1.describe)('Podfile does not exist', () => {
87
+ (0, vitest_1.it)('should throw an error', async () => {
83
88
  // -- Arrange --
84
89
  const projPath = path.join(os.tmpdir(), 'test-project-without-podfile');
85
90
  const tempDir = fs.mkdtempSync(projPath);
86
91
  // -- Act & Assert --
87
- await expect((0, cocoapod_1.addCocoaPods)(tempDir)).rejects.toThrow('ENOENT: no such file or directory, open');
92
+ await (0, vitest_1.expect)((0, cocoapod_1.addCocoaPods)(tempDir)).rejects.toThrow('ENOENT: no such file or directory, open');
88
93
  });
89
94
  });
90
- describe('Podfile exists', () => {
91
- describe('Podfile includes Sentry pod', () => {
95
+ (0, vitest_1.describe)('Podfile exists', () => {
96
+ (0, vitest_1.describe)('Podfile includes Sentry pod', () => {
92
97
  const variations = [
93
98
  {
94
99
  case: 'simple',
@@ -124,7 +129,7 @@ describe('cocoapod', () => {
124
129
  },
125
130
  ];
126
131
  for (const variation of variations) {
127
- it(`should not change the Podfile for ${variation.case}`, async () => {
132
+ (0, vitest_1.it)(`should not change the Podfile for ${variation.case}`, async () => {
128
133
  // -- Arrange --
129
134
  const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));
130
135
  fs.mkdirSync(projPath, {
@@ -135,14 +140,14 @@ describe('cocoapod', () => {
135
140
  // -- Act --
136
141
  const result = await (0, cocoapod_1.addCocoaPods)(projPath);
137
142
  // -- Assert --
138
- expect(result).toBeTruthy();
139
- expect(fs.readFileSync(podfile, 'utf8')).toBe(variation.content);
143
+ (0, vitest_1.expect)(result).toBeTruthy();
144
+ (0, vitest_1.expect)(fs.readFileSync(podfile, 'utf8')).toBe(variation.content);
140
145
  });
141
146
  }
142
147
  });
143
- describe('Podfile includes no other pods', () => {
144
- describe('Podfile does not include use_frameworks!', () => {
145
- it('should not change the Podfile', async () => {
148
+ (0, vitest_1.describe)('Podfile includes no other pods', () => {
149
+ (0, vitest_1.describe)('Podfile does not include use_frameworks!', () => {
150
+ (0, vitest_1.it)('should not change the Podfile', async () => {
146
151
  // -- Arrange --
147
152
  const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));
148
153
  fs.mkdirSync(projPath, {
@@ -153,12 +158,12 @@ describe('cocoapod', () => {
153
158
  // -- Act --
154
159
  const result = await (0, cocoapod_1.addCocoaPods)(projPath);
155
160
  // -- Assert --
156
- expect(result).toBeFalsy();
157
- expect(fs.readFileSync(podfile, 'utf8')).toBe('');
161
+ (0, vitest_1.expect)(result).toBeFalsy();
162
+ (0, vitest_1.expect)(fs.readFileSync(podfile, 'utf8')).toBe('');
158
163
  });
159
164
  });
160
- describe('Podfile includes use_frameworks!', () => {
161
- it('should change the Podfile', async () => {
165
+ (0, vitest_1.describe)('Podfile includes use_frameworks!', () => {
166
+ (0, vitest_1.it)('should change the Podfile', async () => {
162
167
  // -- Arrange --
163
168
  const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));
164
169
  fs.mkdirSync(projPath, {
@@ -169,13 +174,13 @@ describe('cocoapod', () => {
169
174
  // -- Act --
170
175
  const result = await (0, cocoapod_1.addCocoaPods)(projPath);
171
176
  // -- Assert --
172
- expect(result).toBeTruthy();
173
- expect(fs.readFileSync(podfile, 'utf8')).toBe(`use_frameworks!\npod 'Sentry'\n`);
177
+ (0, vitest_1.expect)(result).toBeTruthy();
178
+ (0, vitest_1.expect)(fs.readFileSync(podfile, 'utf8')).toBe(`use_frameworks!\npod 'Sentry'\n`);
174
179
  });
175
180
  });
176
181
  });
177
- describe('Podfile includes other pods', () => {
178
- it('should append Sentry pod after last pod', async () => {
182
+ (0, vitest_1.describe)('Podfile includes other pods', () => {
183
+ (0, vitest_1.it)('should append Sentry pod after last pod', async () => {
179
184
  // -- Arrange --
180
185
  const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));
181
186
  fs.mkdirSync(projPath, {
@@ -186,77 +191,77 @@ describe('cocoapod', () => {
186
191
  // -- Act --
187
192
  const result = await (0, cocoapod_1.addCocoaPods)(projPath);
188
193
  // -- Assert --
189
- expect(result).toBeTruthy();
190
- expect(fs.readFileSync(podfile, 'utf8')).toBe(`pod "OtherPod"\npod 'Sentry'\n`);
194
+ (0, vitest_1.expect)(result).toBeTruthy();
195
+ (0, vitest_1.expect)(fs.readFileSync(podfile, 'utf8')).toBe(`pod "OtherPod"\npod 'Sentry'\n`);
191
196
  });
192
197
  });
193
198
  });
194
199
  });
195
- describe('podInstall', () => {
200
+ (0, vitest_1.describe)('podInstall', () => {
196
201
  let workDir;
197
- beforeEach(() => {
202
+ (0, vitest_1.beforeEach)(() => {
198
203
  workDir = path.join(os.tmpdir(), 'test-project');
199
204
  });
200
- describe('any bash scripts fail', () => {
201
- beforeEach(() => {
202
- jest.spyOn(bash, 'execute').mockRejectedValue(new Error('test error'));
205
+ (0, vitest_1.describe)('any bash scripts fail', () => {
206
+ (0, vitest_1.beforeEach)(() => {
207
+ vitest_1.vi.spyOn(bash, 'execute').mockRejectedValue(new Error('test error'));
203
208
  });
204
- it('should not throw an error', async () => {
209
+ (0, vitest_1.it)('should not throw an error', async () => {
205
210
  // -- Act & Assert --
206
- await expect((0, cocoapod_1.podInstall)(workDir)).resolves.not.toThrow();
211
+ await (0, vitest_1.expect)((0, cocoapod_1.podInstall)(workDir)).resolves.not.toThrow();
207
212
  });
208
- it('should set tag', async () => {
213
+ (0, vitest_1.it)('should set tag', async () => {
209
214
  // -- Act --
210
215
  await (0, cocoapod_1.podInstall)(workDir);
211
216
  // -- Assert --
212
- expect(Sentry.setTag).toHaveBeenCalledWith('pods-installed', false);
217
+ (0, vitest_1.expect)(Sentry.setTag).toHaveBeenCalledWith('pods-installed', false);
213
218
  });
214
- it('should capture exception', async () => {
219
+ (0, vitest_1.it)('should capture exception', async () => {
215
220
  // -- Act --
216
221
  await (0, cocoapod_1.podInstall)(workDir);
217
222
  // -- Assert --
218
- expect(Sentry.captureException).toHaveBeenCalledWith('Sentry pod install failed.');
223
+ (0, vitest_1.expect)(Sentry.captureException).toHaveBeenCalledWith('Sentry pod install failed.');
219
224
  });
220
- it('should start and stop spinner', async () => {
225
+ (0, vitest_1.it)('should start and stop spinner', async () => {
221
226
  // -- Act --
222
227
  await (0, cocoapod_1.podInstall)(workDir);
223
228
  // -- Assert --
224
- expect(clackSpinnerMock.start).toHaveBeenCalledWith("Running 'pod install'. This may take a few minutes...");
225
- expect(clackSpinnerMock.stop).toHaveBeenCalledWith('Failed to install pods.');
229
+ (0, vitest_1.expect)(clackSpinnerMock.start).toHaveBeenCalledWith("Running 'pod install'. This may take a few minutes...");
230
+ (0, vitest_1.expect)(clackSpinnerMock.stop).toHaveBeenCalledWith('Failed to install pods.');
226
231
  });
227
232
  });
228
- describe('all bash scripts work', () => {
229
- beforeEach(() => {
230
- jest.spyOn(bash, 'execute').mockResolvedValue('');
233
+ (0, vitest_1.describe)('all bash scripts work', () => {
234
+ (0, vitest_1.beforeEach)(() => {
235
+ vitest_1.vi.spyOn(bash, 'execute').mockResolvedValue('');
231
236
  });
232
- it('should call pod update and install', async () => {
237
+ (0, vitest_1.it)('should call pod update and install', async () => {
233
238
  // -- Act --
234
239
  await (0, cocoapod_1.podInstall)(workDir);
235
240
  // -- Assert --
236
- expect(bash.execute).toHaveBeenCalledWith(`cd ${workDir} && pod repo update`);
237
- expect(bash.execute).toHaveBeenCalledWith(`cd ${workDir} && pod install --silent`);
241
+ (0, vitest_1.expect)(bash.execute).toHaveBeenCalledWith(`cd ${workDir} && pod repo update`);
242
+ (0, vitest_1.expect)(bash.execute).toHaveBeenCalledWith(`cd ${workDir} && pod install --silent`);
238
243
  });
239
- it('should set tag', async () => {
244
+ (0, vitest_1.it)('should set tag', async () => {
240
245
  // -- Act --
241
246
  await (0, cocoapod_1.podInstall)(workDir);
242
247
  // -- Assert --
243
- expect(Sentry.setTag).toHaveBeenCalledWith('pods-installed', true);
248
+ (0, vitest_1.expect)(Sentry.setTag).toHaveBeenCalledWith('pods-installed', true);
244
249
  });
245
- it('should start and stop spinner', async () => {
250
+ (0, vitest_1.it)('should start and stop spinner', async () => {
246
251
  // -- Act --
247
252
  await (0, cocoapod_1.podInstall)(workDir);
248
253
  // -- Assert --
249
- expect(clackSpinnerMock.start).toHaveBeenCalledWith("Running 'pod install'. This may take a few minutes...");
250
- expect(clackSpinnerMock.stop).toHaveBeenCalledWith('Pods installed.');
254
+ (0, vitest_1.expect)(clackSpinnerMock.start).toHaveBeenCalledWith("Running 'pod install'. This may take a few minutes...");
255
+ (0, vitest_1.expect)(clackSpinnerMock.stop).toHaveBeenCalledWith('Pods installed.');
251
256
  });
252
257
  });
253
- describe('dir not given', () => {
254
- it('should use current directory', async () => {
258
+ (0, vitest_1.describe)('dir not given', () => {
259
+ (0, vitest_1.it)('should use current directory', async () => {
255
260
  // -- Act --
256
261
  await (0, cocoapod_1.podInstall)();
257
262
  // -- Assert --
258
- expect(bash.execute).toHaveBeenCalledWith(`cd . && pod repo update`);
259
- expect(bash.execute).toHaveBeenCalledWith(`cd . && pod install --silent`);
263
+ (0, vitest_1.expect)(bash.execute).toHaveBeenCalledWith(`cd . && pod repo update`);
264
+ (0, vitest_1.expect)(bash.execute).toHaveBeenCalledWith(`cd . && pod install --silent`);
260
265
  });
261
266
  });
262
267
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cocoapod.test.js","sourceRoot":"","sources":["../../../test/apple/cocoapod.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from '@sentry/node';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport {\n addCocoaPods,\n podInstall,\n usesCocoaPod,\n} from '../../src/apple/cocoapod';\nimport * as bash from '../../src/utils/bash';\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\njest.mock('@clack/prompts', () => ({\n __esModule: true,\n ...jest.requireActual<typeof clack>('@clack/prompts'),\n}));\n\njest.mock('../../src/utils/bash');\njest.spyOn(Sentry, 'setTag').mockImplementation();\njest.spyOn(Sentry, 'captureException').mockImplementation();\n\nconst clackSpinnerMock = {\n start: jest.fn(),\n stop: jest.fn(),\n message: jest.fn(),\n};\n\ndescribe('cocoapod', () => {\n beforeEach(() => {\n jest.spyOn(clack, 'spinner').mockReturnValue(clackSpinnerMock);\n jest.spyOn(clack.log, 'error').mockImplementation();\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('usesCocoaPod', () => {\n describe('Podfile exists', () => {\n it('should return true', () => {\n // -- Arrange --\n const projPath = path.join(os.tmpdir(), 'test-project-with-podfile');\n const tempDir = fs.mkdtempSync(projPath);\n\n const podfile = path.join(tempDir, 'Podfile');\n fs.writeFileSync(podfile, '');\n\n // -- Act --\n const result = usesCocoaPod(tempDir);\n\n // -- Assert --\n expect(result).toBeTruthy();\n });\n });\n\n describe('Podfile does not exist', () => {\n it('should return false', () => {\n // -- Arrange --\n const projPath = path.join(os.tmpdir(), 'test-project-without-podfile');\n const tempDir = fs.mkdtempSync(projPath);\n\n // -- Act --\n const result = usesCocoaPod(tempDir);\n\n // -- Assert --\n expect(result).toBeFalsy();\n });\n });\n });\n\n describe('addCocoaPods', () => {\n describe('Podfile does not exist', () => {\n it('should throw an error', async () => {\n // -- Arrange --\n const projPath = path.join(os.tmpdir(), 'test-project-without-podfile');\n const tempDir = fs.mkdtempSync(projPath);\n\n // -- Act & Assert --\n await expect(addCocoaPods(tempDir)).rejects.toThrow(\n 'ENOENT: no such file or directory, open',\n );\n });\n });\n\n describe('Podfile exists', () => {\n describe('Podfile includes Sentry pod', () => {\n const variations = [\n {\n case: 'simple',\n content: 'pod \"Sentry\"',\n },\n {\n case: 'with-swiftui',\n content: 'pod \"SentrySwiftUI\"',\n },\n {\n case: 'leading-space',\n content: ' pod \"Sentry\"',\n },\n {\n case: 'leading-space-and-swiftui',\n content: ' pod \"SentrySwiftUI\"',\n },\n {\n case: 'trailing-space',\n content: 'pod \"Sentry\" ',\n },\n {\n case: 'trailing-space-and-swiftui',\n content: 'pod \"SentrySwiftUI\" ',\n },\n {\n case: 'single-quotes',\n content: \"pod 'Sentry'\",\n },\n {\n case: 'double-quotes',\n content: 'pod \"Sentry\"',\n },\n ];\n for (const variation of variations) {\n it(`should not change the Podfile for ${variation.case}`, async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, variation.content, 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeTruthy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe(variation.content);\n });\n }\n });\n\n describe('Podfile includes no other pods', () => {\n describe('Podfile does not include use_frameworks!', () => {\n it('should not change the Podfile', async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, '', 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeFalsy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe('');\n });\n });\n\n describe('Podfile includes use_frameworks!', () => {\n it('should change the Podfile', async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, `use_frameworks!`, 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeTruthy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe(\n `use_frameworks!\\npod 'Sentry'\\n`,\n );\n });\n });\n });\n\n describe('Podfile includes other pods', () => {\n it('should append Sentry pod after last pod', async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, 'pod \"OtherPod\"', 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeTruthy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe(\n `pod \"OtherPod\"\\npod 'Sentry'\\n`,\n );\n });\n });\n });\n });\n\n describe('podInstall', () => {\n let workDir: string;\n\n beforeEach(() => {\n workDir = path.join(os.tmpdir(), 'test-project');\n });\n\n describe('any bash scripts fail', () => {\n beforeEach(() => {\n jest.spyOn(bash, 'execute').mockRejectedValue(new Error('test error'));\n });\n\n it('should not throw an error', async () => {\n // -- Act & Assert --\n await expect(podInstall(workDir)).resolves.not.toThrow();\n });\n\n it('should set tag', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(Sentry.setTag).toHaveBeenCalledWith('pods-installed', false);\n });\n\n it('should capture exception', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(Sentry.captureException).toHaveBeenCalledWith(\n 'Sentry pod install failed.',\n );\n });\n\n it('should start and stop spinner', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(clackSpinnerMock.start).toHaveBeenCalledWith(\n \"Running 'pod install'. This may take a few minutes...\",\n );\n expect(clackSpinnerMock.stop).toHaveBeenCalledWith(\n 'Failed to install pods.',\n );\n });\n });\n\n describe('all bash scripts work', () => {\n beforeEach(() => {\n jest.spyOn(bash, 'execute').mockResolvedValue('');\n });\n\n it('should call pod update and install', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(bash.execute).toHaveBeenCalledWith(\n `cd ${workDir} && pod repo update`,\n );\n expect(bash.execute).toHaveBeenCalledWith(\n `cd ${workDir} && pod install --silent`,\n );\n });\n\n it('should set tag', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(Sentry.setTag).toHaveBeenCalledWith('pods-installed', true);\n });\n\n it('should start and stop spinner', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(clackSpinnerMock.start).toHaveBeenCalledWith(\n \"Running 'pod install'. This may take a few minutes...\",\n );\n expect(clackSpinnerMock.stop).toHaveBeenCalledWith('Pods installed.');\n });\n });\n\n describe('dir not given', () => {\n it('should use current directory', async () => {\n // -- Act --\n await podInstall();\n\n // -- Assert --\n expect(bash.execute).toHaveBeenCalledWith(`cd . && pod repo update`);\n expect(bash.execute).toHaveBeenCalledWith(\n `cd . && pod install --silent`,\n );\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"cocoapod.test.js","sourceRoot":"","sources":["../../../test/apple/cocoapod.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from '@sentry/node';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport {\n addCocoaPods,\n podInstall,\n usesCocoaPod,\n} from '../../src/apple/cocoapod';\nimport * as bash from '../../src/utils/bash';\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nvi.mock('@clack/prompts', async () => ({\n __esModule: true,\n ...(await vi.importActual<typeof clack>('@clack/prompts')),\n}));\n\nvi.mock('../../src/utils/bash');\nvi.spyOn(Sentry, 'setTag').mockImplementation(() => {\n /* empty */\n});\nvi.spyOn(Sentry, 'captureException').mockImplementation(() => 'id');\n\nconst clackSpinnerMock = {\n start: vi.fn(),\n stop: vi.fn(),\n message: vi.fn(),\n};\n\ndescribe('cocoapod', () => {\n beforeEach(() => {\n vi.spyOn(clack, 'spinner').mockReturnValue(clackSpinnerMock);\n vi.spyOn(clack.log, 'error').mockImplementation(() => {\n /* empty */\n });\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n describe('usesCocoaPod', () => {\n describe('Podfile exists', () => {\n it('should return true', () => {\n // -- Arrange --\n const projPath = path.join(os.tmpdir(), 'test-project-with-podfile');\n const tempDir = fs.mkdtempSync(projPath);\n\n const podfile = path.join(tempDir, 'Podfile');\n fs.writeFileSync(podfile, '');\n\n // -- Act --\n const result = usesCocoaPod(tempDir);\n\n // -- Assert --\n expect(result).toBeTruthy();\n });\n });\n\n describe('Podfile does not exist', () => {\n it('should return false', () => {\n // -- Arrange --\n const projPath = path.join(os.tmpdir(), 'test-project-without-podfile');\n const tempDir = fs.mkdtempSync(projPath);\n\n // -- Act --\n const result = usesCocoaPod(tempDir);\n\n // -- Assert --\n expect(result).toBeFalsy();\n });\n });\n });\n\n describe('addCocoaPods', () => {\n describe('Podfile does not exist', () => {\n it('should throw an error', async () => {\n // -- Arrange --\n const projPath = path.join(os.tmpdir(), 'test-project-without-podfile');\n const tempDir = fs.mkdtempSync(projPath);\n\n // -- Act & Assert --\n await expect(addCocoaPods(tempDir)).rejects.toThrow(\n 'ENOENT: no such file or directory, open',\n );\n });\n });\n\n describe('Podfile exists', () => {\n describe('Podfile includes Sentry pod', () => {\n const variations = [\n {\n case: 'simple',\n content: 'pod \"Sentry\"',\n },\n {\n case: 'with-swiftui',\n content: 'pod \"SentrySwiftUI\"',\n },\n {\n case: 'leading-space',\n content: ' pod \"Sentry\"',\n },\n {\n case: 'leading-space-and-swiftui',\n content: ' pod \"SentrySwiftUI\"',\n },\n {\n case: 'trailing-space',\n content: 'pod \"Sentry\" ',\n },\n {\n case: 'trailing-space-and-swiftui',\n content: 'pod \"SentrySwiftUI\" ',\n },\n {\n case: 'single-quotes',\n content: \"pod 'Sentry'\",\n },\n {\n case: 'double-quotes',\n content: 'pod \"Sentry\"',\n },\n ];\n for (const variation of variations) {\n it(`should not change the Podfile for ${variation.case}`, async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, variation.content, 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeTruthy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe(variation.content);\n });\n }\n });\n\n describe('Podfile includes no other pods', () => {\n describe('Podfile does not include use_frameworks!', () => {\n it('should not change the Podfile', async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, '', 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeFalsy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe('');\n });\n });\n\n describe('Podfile includes use_frameworks!', () => {\n it('should change the Podfile', async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, `use_frameworks!`, 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeTruthy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe(\n `use_frameworks!\\npod 'Sentry'\\n`,\n );\n });\n });\n });\n\n describe('Podfile includes other pods', () => {\n it('should append Sentry pod after last pod', async () => {\n // -- Arrange --\n const projPath = fs.mkdtempSync(path.join(os.tmpdir(), 'project'));\n fs.mkdirSync(projPath, {\n recursive: true,\n });\n\n const podfile = path.join(projPath, 'Podfile');\n fs.writeFileSync(podfile, 'pod \"OtherPod\"', 'utf8');\n\n // -- Act --\n const result = await addCocoaPods(projPath);\n\n // -- Assert --\n expect(result).toBeTruthy();\n expect(fs.readFileSync(podfile, 'utf8')).toBe(\n `pod \"OtherPod\"\\npod 'Sentry'\\n`,\n );\n });\n });\n });\n });\n\n describe('podInstall', () => {\n let workDir: string;\n\n beforeEach(() => {\n workDir = path.join(os.tmpdir(), 'test-project');\n });\n\n describe('any bash scripts fail', () => {\n beforeEach(() => {\n vi.spyOn(bash, 'execute').mockRejectedValue(new Error('test error'));\n });\n\n it('should not throw an error', async () => {\n // -- Act & Assert --\n await expect(podInstall(workDir)).resolves.not.toThrow();\n });\n\n it('should set tag', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(Sentry.setTag).toHaveBeenCalledWith('pods-installed', false);\n });\n\n it('should capture exception', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(Sentry.captureException).toHaveBeenCalledWith(\n 'Sentry pod install failed.',\n );\n });\n\n it('should start and stop spinner', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(clackSpinnerMock.start).toHaveBeenCalledWith(\n \"Running 'pod install'. This may take a few minutes...\",\n );\n expect(clackSpinnerMock.stop).toHaveBeenCalledWith(\n 'Failed to install pods.',\n );\n });\n });\n\n describe('all bash scripts work', () => {\n beforeEach(() => {\n vi.spyOn(bash, 'execute').mockResolvedValue('');\n });\n\n it('should call pod update and install', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(bash.execute).toHaveBeenCalledWith(\n `cd ${workDir} && pod repo update`,\n );\n expect(bash.execute).toHaveBeenCalledWith(\n `cd ${workDir} && pod install --silent`,\n );\n });\n\n it('should set tag', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(Sentry.setTag).toHaveBeenCalledWith('pods-installed', true);\n });\n\n it('should start and stop spinner', async () => {\n // -- Act --\n await podInstall(workDir);\n\n // -- Assert --\n expect(clackSpinnerMock.start).toHaveBeenCalledWith(\n \"Running 'pod install'. This may take a few minutes...\",\n );\n expect(clackSpinnerMock.stop).toHaveBeenCalledWith('Pods installed.');\n });\n });\n\n describe('dir not given', () => {\n it('should use current directory', async () => {\n // -- Act --\n await podInstall();\n\n // -- Assert --\n expect(bash.execute).toHaveBeenCalledWith(`cd . && pod repo update`);\n expect(bash.execute).toHaveBeenCalledWith(\n `cd . && pod install --silent`,\n );\n });\n });\n });\n});\n"]}