@sentry/wizard 6.7.0 → 6.8.1

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 (41) hide show
  1. package/CHANGELOG.md +16 -3
  2. package/dist/e2e-tests/tests/pnpm-workspace.test.d.ts +1 -0
  3. package/dist/e2e-tests/tests/pnpm-workspace.test.js +206 -0
  4. package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -0
  5. package/dist/e2e-tests/tests/sveltekit-hooks.test.js +70 -84
  6. package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
  7. package/dist/e2e-tests/tests/sveltekit-tracing.test.js +3 -0
  8. package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
  9. package/dist/src/apple/fastlane.js +3 -1
  10. package/dist/src/apple/fastlane.js.map +1 -1
  11. package/dist/src/apple/templates.js +1 -1
  12. package/dist/src/apple/templates.js.map +1 -1
  13. package/dist/src/sveltekit/sdk-example.d.ts +1 -0
  14. package/dist/src/sveltekit/sdk-example.js +3 -1
  15. package/dist/src/sveltekit/sdk-example.js.map +1 -1
  16. package/dist/src/sveltekit/sveltekit-wizard.js +4 -2
  17. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  18. package/dist/src/sveltekit/templates.d.ts +1 -0
  19. package/dist/src/sveltekit/templates.js +2 -4
  20. package/dist/src/sveltekit/templates.js.map +1 -1
  21. package/dist/src/sveltekit/utils.d.ts +1 -1
  22. package/dist/src/sveltekit/utils.js +45 -32
  23. package/dist/src/sveltekit/utils.js.map +1 -1
  24. package/dist/src/utils/package-json.js +86 -2
  25. package/dist/src/utils/package-json.js.map +1 -1
  26. package/dist/src/version.d.ts +1 -1
  27. package/dist/src/version.js +1 -1
  28. package/dist/src/version.js.map +1 -1
  29. package/dist/test/apple/fastfile.test.js +8 -8
  30. package/dist/test/apple/fastfile.test.js.map +1 -1
  31. package/dist/test/apple/templates.test.js +1 -1
  32. package/dist/test/apple/templates.test.js.map +1 -1
  33. package/dist/test/sveltekit/templates.test.js +478 -0
  34. package/dist/test/sveltekit/templates.test.js.map +1 -1
  35. package/dist/test/sveltekit/utils.test.d.ts +1 -0
  36. package/dist/test/sveltekit/utils.test.js +68 -0
  37. package/dist/test/sveltekit/utils.test.js.map +1 -0
  38. package/dist/test/utils/package-json.test.d.ts +1 -0
  39. package/dist/test/utils/package-json.test.js +428 -0
  40. package/dist/test/utils/package-json.test.js.map +1 -0
  41. package/package.json +3 -1
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const utils_1 = require("../../src/sveltekit/utils");
5
+ (0, vitest_1.describe)('getKitVersionBucket', () => {
6
+ (0, vitest_1.it)('returns "none" if version is undefined', () => {
7
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)(undefined)).toBe('none');
8
+ });
9
+ (0, vitest_1.it)('returns "none" if version is empty string', () => {
10
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)('')).toBe('none');
11
+ });
12
+ (0, vitest_1.it)('returns "invalid" if version is contradictory', () => {
13
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)('>1.0.0 <1.0.0')).toBe('invalid');
14
+ });
15
+ (0, vitest_1.it)('returns "invalid" if version is invalid', () => {
16
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)('latest')).toBe('invalid');
17
+ });
18
+ vitest_1.it.each(['0.1.0', '0.9.9', '^0.5.0', '~0.12.0', '0'])('returns "0.x" for versions < 1.0.0', (version) => {
19
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)(version)).toBe('0.x');
20
+ });
21
+ vitest_1.it.each(['1.0.0', '1.1.0', '1.23.9', '^1.0.0', '~1.20.0', '>=1.0.0 <1.24.0'])('returns ">=1.0.0 <1.24.0" for versions >= 1.0.0 and < 1.24.0', (version) => {
22
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)(version)).toBe('>=1.0.0 <1.24.0');
23
+ });
24
+ vitest_1.it.each([
25
+ '1.24.0',
26
+ '1.25.0',
27
+ '2.0.0',
28
+ '2.30.9',
29
+ '^1.24.0',
30
+ '~2.0.0',
31
+ '>=1.24.0 <2.31.0',
32
+ ])('returns ">=1.24.0 <2.31.0" for versions >= 1.24.0 and < 2.31.0', (version) => {
33
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)(version)).toBe('>=1.24.0 <2.31.0');
34
+ });
35
+ vitest_1.it.each(['2.31.0', '2.32.0', '3.0.0', '^2.31.0', '~3.0.0', '>=2.31.0'])('returns ">=2.31.0" for versions >= 2.31.0', (version) => {
36
+ (0, vitest_1.expect)((0, utils_1.getKitVersionBucket)(version)).toBe('>=2.31.0');
37
+ });
38
+ });
39
+ (0, vitest_1.describe)('getSvelteVersionBucket', () => {
40
+ (0, vitest_1.it)('returns "none" if version is undefined', () => {
41
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)(undefined)).toBe('none');
42
+ });
43
+ (0, vitest_1.it)('returns "none" if version is empty string', () => {
44
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)('')).toBe('none');
45
+ });
46
+ (0, vitest_1.it)('returns "invalid" if version is contradictory', () => {
47
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)('>1.0.0 <1.0.0')).toBe('invalid');
48
+ });
49
+ (0, vitest_1.it)('returns "invalid" if version is invalid', () => {
50
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)('latest')).toBe('invalid');
51
+ });
52
+ vitest_1.it.each(['0.1.0', '1.0.0', '2.9.9', '^2.5.0', '~2.0.0'])('returns "<3.0.0" for versions < 3.0.0', (version) => {
53
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)(version)).toBe('<3.0.0');
54
+ });
55
+ vitest_1.it.each(['3.0.0', '3.1.0', '3.59.9', '^3.0.0', '~3.50.0'])('returns "3.x" for versions >= 3.0.0 and < 4.0.0', (version) => {
56
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)(version)).toBe('3.x');
57
+ });
58
+ vitest_1.it.each(['4.0.0', '4.1.0', '4.99.9', '^4.0.0', '~4.50.0'])('returns "4.x" for versions >= 4.0.0 and < 5.0.0', (version) => {
59
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)(version)).toBe('4.x');
60
+ });
61
+ vitest_1.it.each(['5.0.0', '5.1.0', '5.99.9', '^5.0.0', '~5.50.0'])('returns "5.x" for versions >= 5.0.0 and < 6.0.0', (version) => {
62
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)(version)).toBe('5.x');
63
+ });
64
+ vitest_1.it.each(['6.0.0', '6.1.0', '10.0.0', '^6.0.0', '~10.0.0'])('returns ">5.x" for versions >= 6.0.0', (version) => {
65
+ (0, vitest_1.expect)((0, utils_1.getSvelteVersionBucket)(version)).toBe('>5.x');
66
+ });
67
+ });
68
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../test/sveltekit/utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from 'vitest';\nimport {\n getKitVersionBucket,\n getSvelteVersionBucket,\n} from '../../src/sveltekit/utils';\n\ndescribe('getKitVersionBucket', () => {\n it('returns \"none\" if version is undefined', () => {\n expect(getKitVersionBucket(undefined)).toBe('none');\n });\n\n it('returns \"none\" if version is empty string', () => {\n expect(getKitVersionBucket('')).toBe('none');\n });\n\n it('returns \"invalid\" if version is contradictory', () => {\n expect(getKitVersionBucket('>1.0.0 <1.0.0')).toBe('invalid');\n });\n\n it('returns \"invalid\" if version is invalid', () => {\n expect(getKitVersionBucket('latest')).toBe('invalid');\n });\n\n it.each(['0.1.0', '0.9.9', '^0.5.0', '~0.12.0', '0'])(\n 'returns \"0.x\" for versions < 1.0.0',\n (version: string) => {\n expect(getKitVersionBucket(version)).toBe('0.x');\n },\n );\n\n it.each(['1.0.0', '1.1.0', '1.23.9', '^1.0.0', '~1.20.0', '>=1.0.0 <1.24.0'])(\n 'returns \">=1.0.0 <1.24.0\" for versions >= 1.0.0 and < 1.24.0',\n (version: string) => {\n expect(getKitVersionBucket(version)).toBe('>=1.0.0 <1.24.0');\n },\n );\n\n it.each([\n '1.24.0',\n '1.25.0',\n '2.0.0',\n '2.30.9',\n '^1.24.0',\n '~2.0.0',\n '>=1.24.0 <2.31.0',\n ])(\n 'returns \">=1.24.0 <2.31.0\" for versions >= 1.24.0 and < 2.31.0',\n (version: string) => {\n expect(getKitVersionBucket(version)).toBe('>=1.24.0 <2.31.0');\n },\n );\n\n it.each(['2.31.0', '2.32.0', '3.0.0', '^2.31.0', '~3.0.0', '>=2.31.0'])(\n 'returns \">=2.31.0\" for versions >= 2.31.0',\n (version: string) => {\n expect(getKitVersionBucket(version)).toBe('>=2.31.0');\n },\n );\n});\n\ndescribe('getSvelteVersionBucket', () => {\n it('returns \"none\" if version is undefined', () => {\n expect(getSvelteVersionBucket(undefined)).toBe('none');\n });\n\n it('returns \"none\" if version is empty string', () => {\n expect(getSvelteVersionBucket('')).toBe('none');\n });\n\n it('returns \"invalid\" if version is contradictory', () => {\n expect(getSvelteVersionBucket('>1.0.0 <1.0.0')).toBe('invalid');\n });\n\n it('returns \"invalid\" if version is invalid', () => {\n expect(getSvelteVersionBucket('latest')).toBe('invalid');\n });\n\n it.each(['0.1.0', '1.0.0', '2.9.9', '^2.5.0', '~2.0.0'])(\n 'returns \"<3.0.0\" for versions < 3.0.0',\n (version: string) => {\n expect(getSvelteVersionBucket(version)).toBe('<3.0.0');\n },\n );\n\n it.each(['3.0.0', '3.1.0', '3.59.9', '^3.0.0', '~3.50.0'])(\n 'returns \"3.x\" for versions >= 3.0.0 and < 4.0.0',\n (version: string) => {\n expect(getSvelteVersionBucket(version)).toBe('3.x');\n },\n );\n\n it.each(['4.0.0', '4.1.0', '4.99.9', '^4.0.0', '~4.50.0'])(\n 'returns \"4.x\" for versions >= 4.0.0 and < 5.0.0',\n (version: string) => {\n expect(getSvelteVersionBucket(version)).toBe('4.x');\n },\n );\n\n it.each(['5.0.0', '5.1.0', '5.99.9', '^5.0.0', '~5.50.0'])(\n 'returns \"5.x\" for versions >= 5.0.0 and < 6.0.0',\n (version: string) => {\n expect(getSvelteVersionBucket(version)).toBe('5.x');\n },\n );\n\n it.each(['6.0.0', '6.1.0', '10.0.0', '^6.0.0', '~10.0.0'])(\n 'returns \">5.x\" for versions >= 6.0.0',\n (version: string) => {\n expect(getSvelteVersionBucket(version)).toBe('>5.x');\n },\n );\n});\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,428 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const vitest_1 = require("vitest");
27
+ const path = __importStar(require("path"));
28
+ const package_json_1 = require("../../src/utils/package-json");
29
+ const { mockedFs, mockedClack } = vitest_1.vi.hoisted(() => {
30
+ return {
31
+ mockedFs: {
32
+ existsSync: vitest_1.vi.fn(),
33
+ readFileSync: vitest_1.vi.fn(),
34
+ },
35
+ mockedClack: {
36
+ log: {
37
+ error: vitest_1.vi.fn(),
38
+ },
39
+ },
40
+ };
41
+ });
42
+ vitest_1.vi.mock(import('fs'), async (importOriginal) => ({
43
+ ...(await importOriginal()),
44
+ existsSync: mockedFs.existsSync,
45
+ readFileSync: mockedFs.readFileSync,
46
+ }));
47
+ vitest_1.vi.mock(import('@clack/prompts'), async (importOriginal) => ({
48
+ ...(await importOriginal()),
49
+ log: {
50
+ ...(await importOriginal()).log,
51
+ error: mockedClack.log.error,
52
+ },
53
+ }));
54
+ (0, vitest_1.describe)('package-json utils', () => {
55
+ (0, vitest_1.beforeEach)(() => {
56
+ vitest_1.vi.clearAllMocks();
57
+ });
58
+ (0, vitest_1.describe)('getPackageVersion', () => {
59
+ (0, vitest_1.it)('returns version from dependencies', () => {
60
+ const packageJson = {
61
+ dependencies: {
62
+ '@sentry/node': '^7.0.0',
63
+ },
64
+ };
65
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBe('^7.0.0');
66
+ });
67
+ (0, vitest_1.it)('returns version from devDependencies', () => {
68
+ const packageJson = {
69
+ devDependencies: {
70
+ '@sentry/cli': '^2.0.0',
71
+ },
72
+ };
73
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/cli', packageJson)).toBe('^2.0.0');
74
+ });
75
+ (0, vitest_1.it)('prioritizes dependencies over devDependencies', () => {
76
+ const packageJson = {
77
+ dependencies: {
78
+ '@sentry/node': '^7.0.0',
79
+ },
80
+ devDependencies: {
81
+ '@sentry/node': '^6.0.0',
82
+ },
83
+ };
84
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBe('^7.0.0');
85
+ });
86
+ (0, vitest_1.it)('returns undefined if package is not found', () => {
87
+ const packageJson = {
88
+ dependencies: {},
89
+ };
90
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBeUndefined();
91
+ });
92
+ (0, vitest_1.it)('returns undefined if packageJson has no dependencies', () => {
93
+ const packageJson = {};
94
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBeUndefined();
95
+ });
96
+ (0, vitest_1.describe)('pnpm catalog resolution', () => {
97
+ (0, vitest_1.beforeEach)(() => {
98
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue('/test/workspace/packages/app');
99
+ });
100
+ (0, vitest_1.afterEach)(() => {
101
+ vitest_1.vi.clearAllMocks();
102
+ });
103
+ (0, vitest_1.it)('resolves default catalog reference', () => {
104
+ mockedFs.existsSync.mockImplementation((filepath) => {
105
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
106
+ });
107
+ mockedFs.readFileSync.mockReturnValue(`
108
+ catalog:
109
+ '@sentry/node': ^7.100.0
110
+ '@sentry/react': ^7.100.0
111
+ `);
112
+ const packageJson = {
113
+ dependencies: {
114
+ '@sentry/node': 'catalog:',
115
+ },
116
+ };
117
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBe('^7.100.0');
118
+ });
119
+ (0, vitest_1.it)('resolves named catalog reference', () => {
120
+ mockedFs.existsSync.mockImplementation((filepath) => {
121
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
122
+ });
123
+ mockedFs.readFileSync.mockReturnValue(`
124
+ catalogs:
125
+ sveltekit:
126
+ '@sentry/sveltekit': ^7.100.0
127
+ '@sentry/node': ^7.100.0
128
+ `);
129
+ const packageJson = {
130
+ dependencies: {
131
+ '@sentry/sveltekit': 'catalog:sveltekit',
132
+ },
133
+ };
134
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/sveltekit', packageJson)).toBe('^7.100.0');
135
+ });
136
+ (0, vitest_1.it)('searches parent directories for pnpm-workspace.yaml', () => {
137
+ const mockCwd = '/test/workspace/packages/app/src';
138
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);
139
+ mockedFs.existsSync.mockImplementation((filepath) => {
140
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
141
+ });
142
+ mockedFs.readFileSync.mockReturnValue(`
143
+ catalog:
144
+ '@sentry/node': ^7.100.0
145
+ `);
146
+ const packageJson = {
147
+ dependencies: {
148
+ '@sentry/node': 'catalog:',
149
+ },
150
+ };
151
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBe('^7.100.0');
152
+ });
153
+ (0, vitest_1.it)('returns undefined if catalog does not contain the package', () => {
154
+ mockedFs.existsSync.mockImplementation((filepath) => {
155
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
156
+ });
157
+ mockedFs.readFileSync.mockReturnValue(`
158
+ catalog:
159
+ '@sentry/react': ^7.100.0
160
+ `);
161
+ const packageJson = {
162
+ dependencies: {
163
+ '@sentry/node': 'catalog:',
164
+ },
165
+ };
166
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBeUndefined();
167
+ });
168
+ (0, vitest_1.it)('returns undefined if named catalog does not exist', () => {
169
+ mockedFs.existsSync.mockImplementation((filepath) => {
170
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
171
+ });
172
+ mockedFs.readFileSync.mockReturnValue(`
173
+ catalog:
174
+ '@sentry/node': ^7.100.0
175
+ `);
176
+ const packageJson = {
177
+ dependencies: {
178
+ '@sentry/sveltekit': 'catalog:sveltekit',
179
+ },
180
+ };
181
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/sveltekit', packageJson)).toBeUndefined();
182
+ });
183
+ (0, vitest_1.it)('returns undefined if pnpm-workspace.yaml is not found', () => {
184
+ mockedFs.existsSync.mockReturnValue(false);
185
+ const packageJson = {
186
+ dependencies: {
187
+ '@sentry/node': 'catalog:',
188
+ },
189
+ };
190
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBeUndefined();
191
+ (0, vitest_1.expect)(mockedClack.log.error).toHaveBeenCalledWith('Could not find pnpm-workspace.yaml.');
192
+ });
193
+ (0, vitest_1.it)('stops searching at root directory', () => {
194
+ const mockCwd = '/test';
195
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);
196
+ mockedFs.existsSync.mockReturnValue(false);
197
+ const packageJson = {
198
+ dependencies: {
199
+ '@sentry/node': 'catalog:',
200
+ },
201
+ };
202
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBeUndefined();
203
+ });
204
+ (0, vitest_1.it)('handles both default catalog and named catalogs together', () => {
205
+ mockedFs.existsSync.mockImplementation((filepath) => {
206
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
207
+ });
208
+ mockedFs.readFileSync.mockReturnValue(`
209
+ catalog:
210
+ '@sentry/node': ^7.100.0
211
+ catalogs:
212
+ sveltekit:
213
+ '@sentry/sveltekit': ^7.200.0
214
+ `);
215
+ const packageJson = {
216
+ dependencies: {
217
+ '@sentry/node': 'catalog:',
218
+ '@sentry/sveltekit': 'catalog:sveltekit',
219
+ },
220
+ };
221
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBe('^7.100.0');
222
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/sveltekit', packageJson)).toBe('^7.200.0');
223
+ });
224
+ (0, vitest_1.it)('handles the correct catalog namespace', () => {
225
+ mockedFs.existsSync.mockImplementation((filepath) => {
226
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
227
+ });
228
+ mockedFs.readFileSync.mockReturnValue(`
229
+ catalog:
230
+ '@sveltejs/kit': ^1.0.0
231
+ catalogs:
232
+ sveltekit:
233
+ '@sveltejs/kit': ^2.31.0
234
+ `);
235
+ const packageJson = {
236
+ dependencies: {
237
+ '@sveltejs/kit': 'catalog:sveltekit',
238
+ },
239
+ };
240
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sveltejs/kit', packageJson)).toBe('^2.31.0');
241
+ });
242
+ (0, vitest_1.it)('returns null if pnpm-workspace.yaml has invalid YAML', () => {
243
+ mockedFs.existsSync.mockImplementation((filepath) => {
244
+ return (filepath === path.join('/test/workspace', 'pnpm-workspace.yaml'));
245
+ });
246
+ mockedFs.readFileSync.mockReturnValue('invalid: yaml: content: [');
247
+ const packageJson = {
248
+ dependencies: {
249
+ '@sentry/node': 'catalog:',
250
+ },
251
+ };
252
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBeUndefined();
253
+ (0, vitest_1.expect)(mockedClack.log.error).toHaveBeenCalledWith('Could not parse pnpm-workspace.yaml.');
254
+ });
255
+ (0, vitest_1.it)('handles regular version strings without catalog lookup', () => {
256
+ const packageJson = {
257
+ dependencies: {
258
+ '@sentry/node': '^7.0.0',
259
+ '@sentry/react': '~7.1.0',
260
+ '@sentry/cli': '2.0.0',
261
+ },
262
+ };
263
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/node', packageJson)).toBe('^7.0.0');
264
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/react', packageJson)).toBe('~7.1.0');
265
+ (0, vitest_1.expect)((0, package_json_1.getPackageVersion)('@sentry/cli', packageJson)).toBe('2.0.0');
266
+ (0, vitest_1.expect)(mockedFs.existsSync).not.toHaveBeenCalled();
267
+ });
268
+ });
269
+ });
270
+ (0, vitest_1.describe)('hasPackageInstalled', () => {
271
+ (0, vitest_1.it)('returns true if package is in dependencies', () => {
272
+ const packageJson = {
273
+ dependencies: {
274
+ '@sentry/node': '^7.0.0',
275
+ },
276
+ };
277
+ (0, vitest_1.expect)((0, package_json_1.hasPackageInstalled)('@sentry/node', packageJson)).toBe(true);
278
+ });
279
+ (0, vitest_1.it)('returns true if package is in devDependencies', () => {
280
+ const packageJson = {
281
+ devDependencies: {
282
+ '@sentry/cli': '^2.0.0',
283
+ },
284
+ };
285
+ (0, vitest_1.expect)((0, package_json_1.hasPackageInstalled)('@sentry/cli', packageJson)).toBe(true);
286
+ });
287
+ (0, vitest_1.it)('returns false if package is not installed', () => {
288
+ const packageJson = {
289
+ dependencies: {},
290
+ };
291
+ (0, vitest_1.expect)((0, package_json_1.hasPackageInstalled)('@sentry/node', packageJson)).toBe(false);
292
+ });
293
+ (0, vitest_1.it)('returns true if package uses catalog reference', () => {
294
+ const mockCwd = '/test/workspace/packages/app';
295
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);
296
+ mockedFs.existsSync.mockImplementation((filepath) => {
297
+ return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');
298
+ });
299
+ mockedFs.readFileSync.mockReturnValue(`
300
+ catalog:
301
+ '@sentry/node': ^7.100.0
302
+ `);
303
+ const packageJson = {
304
+ dependencies: {
305
+ '@sentry/node': 'catalog:',
306
+ },
307
+ };
308
+ (0, vitest_1.expect)((0, package_json_1.hasPackageInstalled)('@sentry/node', packageJson)).toBe(true);
309
+ });
310
+ (0, vitest_1.it)('returns false if package uses catalog reference but catalog does not have it', () => {
311
+ const mockCwd = '/test/workspace/packages/app';
312
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);
313
+ mockedFs.existsSync.mockImplementation((filepath) => {
314
+ return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');
315
+ });
316
+ mockedFs.readFileSync.mockReturnValue(`
317
+ catalog:
318
+ '@sentry/react': ^7.100.0
319
+ `);
320
+ const packageJson = {
321
+ dependencies: {
322
+ '@sentry/node': 'catalog:',
323
+ },
324
+ };
325
+ (0, vitest_1.expect)((0, package_json_1.hasPackageInstalled)('@sentry/node', packageJson)).toBe(false);
326
+ });
327
+ });
328
+ (0, vitest_1.describe)('findInstalledPackageFromList', () => {
329
+ (0, vitest_1.it)('returns the first installed package from the list', () => {
330
+ const packageJson = {
331
+ dependencies: {
332
+ '@sentry/node': '^7.0.0',
333
+ },
334
+ };
335
+ const result = (0, package_json_1.findInstalledPackageFromList)(['@sentry/cli', '@sentry/node', '@sentry/react'], packageJson);
336
+ (0, vitest_1.expect)(result).toEqual({
337
+ name: '@sentry/node',
338
+ version: '^7.0.0',
339
+ });
340
+ });
341
+ (0, vitest_1.it)('returns undefined if no packages are installed', () => {
342
+ const packageJson = {
343
+ dependencies: {},
344
+ };
345
+ const result = (0, package_json_1.findInstalledPackageFromList)(['@sentry/cli', '@sentry/node', '@sentry/react'], packageJson);
346
+ (0, vitest_1.expect)(result).toBeUndefined();
347
+ });
348
+ (0, vitest_1.it)('checks both dependencies and devDependencies', () => {
349
+ const packageJson = {
350
+ devDependencies: {
351
+ '@sentry/cli': '^2.0.0',
352
+ },
353
+ };
354
+ const result = (0, package_json_1.findInstalledPackageFromList)(['@sentry/node', '@sentry/cli'], packageJson);
355
+ (0, vitest_1.expect)(result).toEqual({
356
+ name: '@sentry/cli',
357
+ version: '^2.0.0',
358
+ });
359
+ });
360
+ (0, vitest_1.it)('returns first match in order provided', () => {
361
+ const packageJson = {
362
+ dependencies: {
363
+ '@sentry/node': '^7.0.0',
364
+ '@sentry/react': '^7.0.0',
365
+ },
366
+ };
367
+ const result = (0, package_json_1.findInstalledPackageFromList)(['@sentry/react', '@sentry/node'], packageJson);
368
+ (0, vitest_1.expect)(result).toEqual({
369
+ name: '@sentry/react',
370
+ version: '^7.0.0',
371
+ });
372
+ });
373
+ (0, vitest_1.it)('works with catalog references', () => {
374
+ const mockCwd = '/test/workspace/packages/app';
375
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);
376
+ mockedFs.existsSync.mockImplementation((filepath) => {
377
+ return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');
378
+ });
379
+ mockedFs.readFileSync.mockReturnValue(`
380
+ catalog:
381
+ '@sentry/node': ^7.100.0
382
+ `);
383
+ const packageJson = {
384
+ dependencies: {
385
+ '@sentry/node': 'catalog:',
386
+ },
387
+ };
388
+ const result = (0, package_json_1.findInstalledPackageFromList)(['@sentry/cli', '@sentry/node'], packageJson);
389
+ (0, vitest_1.expect)(result).toEqual({
390
+ name: '@sentry/node',
391
+ version: '^7.100.0',
392
+ });
393
+ });
394
+ (0, vitest_1.it)('returns undefined for empty package list', () => {
395
+ const packageJson = {
396
+ dependencies: {
397
+ '@sentry/node': '^7.0.0',
398
+ },
399
+ };
400
+ const result = (0, package_json_1.findInstalledPackageFromList)([], packageJson);
401
+ (0, vitest_1.expect)(result).toBeUndefined();
402
+ });
403
+ (0, vitest_1.it)('skips packages with unresolvable catalog references', () => {
404
+ const mockCwd = '/test/workspace/packages/app';
405
+ vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);
406
+ mockedFs.existsSync.mockImplementation((filepath) => {
407
+ return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');
408
+ });
409
+ mockedFs.readFileSync.mockReturnValue(`
410
+ catalog:
411
+ '@sentry/react': ^7.100.0
412
+ `);
413
+ const packageJson = {
414
+ dependencies: {
415
+ '@sentry/node': 'catalog:',
416
+ '@sentry/react': 'catalog:',
417
+ },
418
+ };
419
+ const result = (0, package_json_1.findInstalledPackageFromList)(['@sentry/node', '@sentry/react'], packageJson);
420
+ // Should skip @sentry/node (unresolvable) and return @sentry/react
421
+ (0, vitest_1.expect)(result).toEqual({
422
+ name: '@sentry/react',
423
+ version: '^7.100.0',
424
+ });
425
+ });
426
+ });
427
+ });
428
+ //# sourceMappingURL=package-json.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.test.js","sourceRoot":"","sources":["../../../test/utils/package-json.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { beforeEach, describe, it, vi, expect, afterEach } from 'vitest';\nimport * as path from 'path';\n\nimport {\n findInstalledPackageFromList,\n hasPackageInstalled,\n getPackageVersion,\n type PackageDotJson,\n} from '../../src/utils/package-json';\n\nconst { mockedFs, mockedClack } = vi.hoisted(() => {\n return {\n mockedFs: {\n existsSync: vi.fn(),\n readFileSync: vi.fn(),\n },\n mockedClack: {\n log: {\n error: vi.fn(),\n },\n },\n };\n});\n\nvi.mock(import('fs'), async (importOriginal) => ({\n ...(await importOriginal()),\n existsSync: mockedFs.existsSync,\n readFileSync: mockedFs.readFileSync,\n}));\n\nvi.mock(import('@clack/prompts'), async (importOriginal) => ({\n ...(await importOriginal()),\n log: {\n ...(await importOriginal()).log,\n error: mockedClack.log.error,\n },\n}));\n\ndescribe('package-json utils', () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe('getPackageVersion', () => {\n it('returns version from dependencies', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBe('^7.0.0');\n });\n\n it('returns version from devDependencies', () => {\n const packageJson: PackageDotJson = {\n devDependencies: {\n '@sentry/cli': '^2.0.0',\n },\n };\n\n expect(getPackageVersion('@sentry/cli', packageJson)).toBe('^2.0.0');\n });\n\n it('prioritizes dependencies over devDependencies', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n },\n devDependencies: {\n '@sentry/node': '^6.0.0',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBe('^7.0.0');\n });\n\n it('returns undefined if package is not found', () => {\n const packageJson: PackageDotJson = {\n dependencies: {},\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBeUndefined();\n });\n\n it('returns undefined if packageJson has no dependencies', () => {\n const packageJson: PackageDotJson = {};\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBeUndefined();\n });\n\n describe('pnpm catalog resolution', () => {\n beforeEach(() => {\n vi.spyOn(process, 'cwd').mockReturnValue(\n '/test/workspace/packages/app',\n );\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it('resolves default catalog reference', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/node': ^7.100.0\n '@sentry/react': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBe('^7.100.0');\n });\n\n it('resolves named catalog reference', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalogs:\n sveltekit:\n '@sentry/sveltekit': ^7.100.0\n '@sentry/node': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/sveltekit': 'catalog:sveltekit',\n },\n };\n\n expect(getPackageVersion('@sentry/sveltekit', packageJson)).toBe(\n '^7.100.0',\n );\n });\n\n it('searches parent directories for pnpm-workspace.yaml', () => {\n const mockCwd = '/test/workspace/packages/app/src';\n vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);\n\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/node': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBe('^7.100.0');\n });\n\n it('returns undefined if catalog does not contain the package', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/react': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBeUndefined();\n });\n\n it('returns undefined if named catalog does not exist', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/node': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/sveltekit': 'catalog:sveltekit',\n },\n };\n\n expect(\n getPackageVersion('@sentry/sveltekit', packageJson),\n ).toBeUndefined();\n });\n\n it('returns undefined if pnpm-workspace.yaml is not found', () => {\n mockedFs.existsSync.mockReturnValue(false);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBeUndefined();\n expect(mockedClack.log.error).toHaveBeenCalledWith(\n 'Could not find pnpm-workspace.yaml.',\n );\n });\n\n it('stops searching at root directory', () => {\n const mockCwd = '/test';\n vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);\n\n mockedFs.existsSync.mockReturnValue(false);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBeUndefined();\n });\n\n it('handles both default catalog and named catalogs together', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/node': ^7.100.0\ncatalogs:\n sveltekit:\n '@sentry/sveltekit': ^7.200.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n '@sentry/sveltekit': 'catalog:sveltekit',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBe('^7.100.0');\n expect(getPackageVersion('@sentry/sveltekit', packageJson)).toBe(\n '^7.200.0',\n );\n });\n\n it('handles the correct catalog namespace', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sveltejs/kit': ^1.0.0\ncatalogs:\n sveltekit:\n '@sveltejs/kit': ^2.31.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sveltejs/kit': 'catalog:sveltekit',\n },\n };\n\n expect(getPackageVersion('@sveltejs/kit', packageJson)).toBe('^2.31.0');\n });\n\n it('returns null if pnpm-workspace.yaml has invalid YAML', () => {\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return (\n filepath === path.join('/test/workspace', 'pnpm-workspace.yaml')\n );\n });\n\n mockedFs.readFileSync.mockReturnValue('invalid: yaml: content: [');\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBeUndefined();\n expect(mockedClack.log.error).toHaveBeenCalledWith(\n 'Could not parse pnpm-workspace.yaml.',\n );\n });\n\n it('handles regular version strings without catalog lookup', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n '@sentry/react': '~7.1.0',\n '@sentry/cli': '2.0.0',\n },\n };\n\n expect(getPackageVersion('@sentry/node', packageJson)).toBe('^7.0.0');\n expect(getPackageVersion('@sentry/react', packageJson)).toBe('~7.1.0');\n expect(getPackageVersion('@sentry/cli', packageJson)).toBe('2.0.0');\n expect(mockedFs.existsSync).not.toHaveBeenCalled();\n });\n });\n });\n\n describe('hasPackageInstalled', () => {\n it('returns true if package is in dependencies', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n },\n };\n\n expect(hasPackageInstalled('@sentry/node', packageJson)).toBe(true);\n });\n\n it('returns true if package is in devDependencies', () => {\n const packageJson: PackageDotJson = {\n devDependencies: {\n '@sentry/cli': '^2.0.0',\n },\n };\n\n expect(hasPackageInstalled('@sentry/cli', packageJson)).toBe(true);\n });\n\n it('returns false if package is not installed', () => {\n const packageJson: PackageDotJson = {\n dependencies: {},\n };\n\n expect(hasPackageInstalled('@sentry/node', packageJson)).toBe(false);\n });\n\n it('returns true if package uses catalog reference', () => {\n const mockCwd = '/test/workspace/packages/app';\n vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);\n\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/node': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(hasPackageInstalled('@sentry/node', packageJson)).toBe(true);\n });\n\n it('returns false if package uses catalog reference but catalog does not have it', () => {\n const mockCwd = '/test/workspace/packages/app';\n vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);\n\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/react': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n expect(hasPackageInstalled('@sentry/node', packageJson)).toBe(false);\n });\n });\n\n describe('findInstalledPackageFromList', () => {\n it('returns the first installed package from the list', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n },\n };\n\n const result = findInstalledPackageFromList(\n ['@sentry/cli', '@sentry/node', '@sentry/react'],\n packageJson,\n );\n\n expect(result).toEqual({\n name: '@sentry/node',\n version: '^7.0.0',\n });\n });\n\n it('returns undefined if no packages are installed', () => {\n const packageJson: PackageDotJson = {\n dependencies: {},\n };\n\n const result = findInstalledPackageFromList(\n ['@sentry/cli', '@sentry/node', '@sentry/react'],\n packageJson,\n );\n\n expect(result).toBeUndefined();\n });\n\n it('checks both dependencies and devDependencies', () => {\n const packageJson: PackageDotJson = {\n devDependencies: {\n '@sentry/cli': '^2.0.0',\n },\n };\n\n const result = findInstalledPackageFromList(\n ['@sentry/node', '@sentry/cli'],\n packageJson,\n );\n\n expect(result).toEqual({\n name: '@sentry/cli',\n version: '^2.0.0',\n });\n });\n\n it('returns first match in order provided', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n '@sentry/react': '^7.0.0',\n },\n };\n\n const result = findInstalledPackageFromList(\n ['@sentry/react', '@sentry/node'],\n packageJson,\n );\n\n expect(result).toEqual({\n name: '@sentry/react',\n version: '^7.0.0',\n });\n });\n\n it('works with catalog references', () => {\n const mockCwd = '/test/workspace/packages/app';\n vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);\n\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/node': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n },\n };\n\n const result = findInstalledPackageFromList(\n ['@sentry/cli', '@sentry/node'],\n packageJson,\n );\n\n expect(result).toEqual({\n name: '@sentry/node',\n version: '^7.100.0',\n });\n });\n\n it('returns undefined for empty package list', () => {\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': '^7.0.0',\n },\n };\n\n const result = findInstalledPackageFromList([], packageJson);\n\n expect(result).toBeUndefined();\n });\n\n it('skips packages with unresolvable catalog references', () => {\n const mockCwd = '/test/workspace/packages/app';\n vi.spyOn(process, 'cwd').mockReturnValue(mockCwd);\n\n mockedFs.existsSync.mockImplementation((filepath: string) => {\n return filepath === path.join('/test/workspace', 'pnpm-workspace.yaml');\n });\n\n mockedFs.readFileSync.mockReturnValue(`\ncatalog:\n '@sentry/react': ^7.100.0\n`);\n\n const packageJson: PackageDotJson = {\n dependencies: {\n '@sentry/node': 'catalog:',\n '@sentry/react': 'catalog:',\n },\n };\n\n const result = findInstalledPackageFromList(\n ['@sentry/node', '@sentry/react'],\n packageJson,\n );\n\n // Should skip @sentry/node (unresolvable) and return @sentry/react\n expect(result).toEqual({\n name: '@sentry/react',\n version: '^7.100.0',\n });\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/wizard",
3
- "version": "6.7.0",
3
+ "version": "6.8.1",
4
4
  "homepage": "https://github.com/getsentry/sentry-wizard",
5
5
  "repository": "https://github.com/getsentry/sentry-wizard",
6
6
  "description": "Sentry wizard helping you to configure your project",
@@ -32,6 +32,7 @@
32
32
  "chalk": "^2.4.1",
33
33
  "glob": "9.3.5",
34
34
  "inquirer": "^6.2.0",
35
+ "js-yaml": "^4.1.1",
35
36
  "magicast": "^0.2.10",
36
37
  "opn": "^5.4.0",
37
38
  "read-env": "^1.3.0",
@@ -45,6 +46,7 @@
45
46
  "@babel/types": "~7.21.4",
46
47
  "@types/glob": "^7.2.0",
47
48
  "@types/inquirer": "^0.0.43",
49
+ "@types/js-yaml": "^4.0.9",
48
50
  "@types/node": "^18.19.76",
49
51
  "@types/opn": "5.1.0",
50
52
  "@types/semver": "^7.3.7",