@sentry/wizard 6.9.0 → 6.11.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.
- package/CHANGELOG.md +56 -1
- package/dist/ci-ensure-runtime-loaded.sh +82 -0
- package/dist/e2e-tests/tests/angular-17.test.js +72 -82
- package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
- package/dist/e2e-tests/tests/angular-19.test.js +71 -80
- package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
- package/dist/e2e-tests/tests/cloudflare-worker.test.d.ts +1 -0
- package/dist/e2e-tests/tests/cloudflare-worker.test.js +64 -0
- package/dist/e2e-tests/tests/cloudflare-worker.test.js.map +1 -0
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js +2 -5
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js.map +1 -1
- package/dist/e2e-tests/tests/expo.test.js +36 -61
- package/dist/e2e-tests/tests/expo.test.js.map +1 -1
- package/dist/e2e-tests/tests/flutter.test.js +63 -70
- package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
- package/dist/e2e-tests/tests/help-message.test.js +2 -2
- package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-14.test.js +54 -82
- package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-15.test.js +95 -105
- package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-16.test.d.ts +1 -0
- package/dist/e2e-tests/tests/nextjs-16.test.js +123 -0
- package/dist/e2e-tests/tests/nextjs-16.test.js.map +1 -0
- package/dist/e2e-tests/tests/nuxt-3.test.js +45 -58
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +59 -73
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/tests/pnpm-workspace.test.js +4 -7
- package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-native.test.js +44 -80
- package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-router.test.js +163 -145
- package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
- package/dist/e2e-tests/tests/remix.test.js +162 -132
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit-hooks.test.js +48 -36
- package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit-tracing.test.js +3 -6
- package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.d.ts +21 -43
- package/dist/e2e-tests/utils/index.js +108 -183
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/get-e2e-test-matrix.mjs +11 -0
- package/dist/lib/Constants.d.ts +1 -0
- package/dist/lib/Constants.js +5 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/src/android/android-wizard.js +2 -4
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/angular/angular-wizard.js +4 -6
- package/dist/src/angular/angular-wizard.js.map +1 -1
- package/dist/src/angular/sdk-setup.js +1 -1
- package/dist/src/angular/sdk-setup.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +2 -4
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/cloudflare/cloudflare-wizard.d.ts +3 -0
- package/dist/src/cloudflare/cloudflare-wizard.js +99 -0
- package/dist/src/cloudflare/cloudflare-wizard.js.map +1 -0
- package/dist/src/cloudflare/sdk-setup.d.ts +7 -0
- package/dist/src/cloudflare/sdk-setup.js +47 -0
- package/dist/src/cloudflare/sdk-setup.js.map +1 -0
- package/dist/src/cloudflare/templates.d.ts +4 -0
- package/dist/src/cloudflare/templates.js +44 -0
- package/dist/src/cloudflare/templates.js.map +1 -0
- package/dist/src/cloudflare/wrangler/create-wrangler-config.d.ts +4 -0
- package/dist/src/cloudflare/wrangler/create-wrangler-config.js +27 -0
- package/dist/src/cloudflare/wrangler/create-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/ensure-wrangler-config.d.ts +4 -0
- package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js +25 -0
- package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/find-wrangler-config.d.ts +4 -0
- package/dist/src/cloudflare/wrangler/find-wrangler-config.js +23 -0
- package/dist/src/cloudflare/wrangler/find-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.d.ts +6 -0
- package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js +52 -0
- package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/update-wrangler-config.d.ts +17 -0
- package/dist/src/cloudflare/wrangler/update-wrangler-config.js +173 -0
- package/dist/src/cloudflare/wrangler/update-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrap-worker.d.ts +32 -0
- package/dist/src/cloudflare/wrap-worker.js +109 -0
- package/dist/src/cloudflare/wrap-worker.js.map +1 -0
- package/dist/src/flutter/flutter-wizard.js +3 -6
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +46 -10
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +6 -3
- package/dist/src/nextjs/templates.js +144 -93
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +3 -5
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +2 -4
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-router/codemods/client.entry.js +4 -1
- package/dist/src/react-router/codemods/client.entry.js.map +1 -1
- package/dist/src/react-router/react-router-wizard.js +3 -5
- package/dist/src/react-router/react-router-wizard.js.map +1 -1
- package/dist/src/react-router/sdk-example.js +5 -2
- package/dist/src/react-router/sdk-example.js.map +1 -1
- package/dist/src/react-router/sdk-setup.d.ts +1 -1
- package/dist/src/react-router/sdk-setup.js +3 -4
- package/dist/src/react-router/sdk-setup.js.map +1 -1
- package/dist/src/remix/remix-wizard.js +2 -4
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/run.d.ts +1 -1
- package/dist/src/run.js +5 -0
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/wrangler.js +1 -1
- package/dist/src/sourcemaps/tools/wrangler.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +4 -6
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/telemetry.d.ts +1 -1
- package/dist/src/telemetry.js +52 -31
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/abort-if-sportlight-not-supported.d.ts +5 -0
- package/dist/src/utils/abort-if-sportlight-not-supported.js +40 -0
- package/dist/src/utils/abort-if-sportlight-not-supported.js.map +1 -0
- package/dist/src/utils/ast-utils.d.ts +1 -1
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack/index.d.ts +19 -2
- package/dist/src/utils/clack/index.js +174 -12
- package/dist/src/utils/clack/index.js.map +1 -1
- package/dist/src/utils/clack/mcp-config.js +117 -59
- package/dist/src/utils/clack/mcp-config.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/angular/angular-wizard.test.js +2 -4
- package/dist/test/angular/angular-wizard.test.js.map +1 -1
- package/dist/test/apple/cocoapod.test.js +7 -3
- package/dist/test/apple/cocoapod.test.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +8 -2
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/cloudflare/create-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/create-wrangler-config.test.js +48 -0
- package/dist/test/cloudflare/create-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/ensure-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/ensure-wrangler-config.test.js +61 -0
- package/dist/test/cloudflare/ensure-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/find-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/find-wrangler-config.test.js +77 -0
- package/dist/test/cloudflare/find-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js +81 -0
- package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/sdk-setup.test.d.ts +1 -0
- package/dist/test/cloudflare/sdk-setup.test.js +152 -0
- package/dist/test/cloudflare/sdk-setup.test.js.map +1 -0
- package/dist/test/cloudflare/templates.test.d.ts +1 -0
- package/dist/test/cloudflare/templates.test.js +68 -0
- package/dist/test/cloudflare/templates.test.js.map +1 -0
- package/dist/test/cloudflare/update-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/update-wrangler-config.test.js +216 -0
- package/dist/test/cloudflare/update-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/wrap-worker.test.d.ts +1 -0
- package/dist/test/cloudflare/wrap-worker.test.js +143 -0
- package/dist/test/cloudflare/wrap-worker.test.js.map +1 -0
- package/dist/test/nextjs/templates.test.js +156 -87
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.js +12 -7
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.js.map +1 -1
- package/dist/test/react-router/sdk-setup.test.js +2 -2
- package/dist/test/react-router/sdk-setup.test.js.map +1 -1
- package/dist/test/utils/clack/index.test.js +37 -29
- package/dist/test/utils/clack/index.test.js.map +1 -1
- package/dist/test/utils/clack/mcp-config.test.js +176 -51
- package/dist/test/utils/clack/mcp-config.test.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,81 @@
|
|
|
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 fs = __importStar(require("node:fs"));
|
|
28
|
+
const path = __importStar(require("node:path"));
|
|
29
|
+
const os = __importStar(require("node:os"));
|
|
30
|
+
const get_entry_point_from_wrangler_config_1 = require("../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config");
|
|
31
|
+
(0, vitest_1.describe)('getEntryPointFromWranglerConfig', () => {
|
|
32
|
+
let tmpDir;
|
|
33
|
+
(0, vitest_1.beforeEach)(() => {
|
|
34
|
+
vitest_1.vi.clearAllMocks();
|
|
35
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'get-entry-point-from-wrangler-config-'));
|
|
36
|
+
vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.afterEach)(() => {
|
|
39
|
+
if (fs.existsSync(tmpDir)) {
|
|
40
|
+
fs.rmSync(tmpDir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
vitest_1.vi.restoreAllMocks();
|
|
43
|
+
});
|
|
44
|
+
(0, vitest_1.it)('returns undefined if no config file exists', () => {
|
|
45
|
+
const result = (0, get_entry_point_from_wrangler_config_1.getEntryPointFromWranglerConfig)();
|
|
46
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)('parses main from wrangler.toml', () => {
|
|
49
|
+
fs.writeFileSync(path.join(tmpDir, 'wrangler.toml'), `name = "my-worker"
|
|
50
|
+
main = "src/worker.ts"
|
|
51
|
+
compatibility_date = "2024-01-01"`);
|
|
52
|
+
const result = (0, get_entry_point_from_wrangler_config_1.getEntryPointFromWranglerConfig)();
|
|
53
|
+
(0, vitest_1.expect)(result).toBe('src/worker.ts');
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)('parses main from wrangler.json', () => {
|
|
56
|
+
fs.writeFileSync(path.join(tmpDir, 'wrangler.json'), JSON.stringify({ name: 'my-worker', main: 'src/deeplink/index.ts' }));
|
|
57
|
+
const result = (0, get_entry_point_from_wrangler_config_1.getEntryPointFromWranglerConfig)();
|
|
58
|
+
(0, vitest_1.expect)(result).toBe('src/deeplink/index.ts');
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.it)('parses main from wrangler.jsonc with comments', () => {
|
|
61
|
+
fs.writeFileSync(path.join(tmpDir, 'wrangler.jsonc'), `{
|
|
62
|
+
// Comment
|
|
63
|
+
"name": "my-worker",
|
|
64
|
+
"main": "src/inside-app/index.ts"
|
|
65
|
+
}`);
|
|
66
|
+
const result = (0, get_entry_point_from_wrangler_config_1.getEntryPointFromWranglerConfig)();
|
|
67
|
+
(0, vitest_1.expect)(result).toBe('src/inside-app/index.ts');
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.it)('returns undefined if main field is not specified', () => {
|
|
70
|
+
fs.writeFileSync(path.join(tmpDir, 'wrangler.toml'), `name = "my-worker"
|
|
71
|
+
compatibility_date = "2024-01-01"`);
|
|
72
|
+
const result = (0, get_entry_point_from_wrangler_config_1.getEntryPointFromWranglerConfig)();
|
|
73
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)('returns undefined if JSON parsing fails', () => {
|
|
76
|
+
fs.writeFileSync(path.join(tmpDir, 'wrangler.json'), '{ invalid json }');
|
|
77
|
+
const result = (0, get_entry_point_from_wrangler_config_1.getEntryPointFromWranglerConfig)();
|
|
78
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=get-entry-point-from-wrangler-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-entry-point-from-wrangler-config.test.js","sourceRoot":"","sources":["../../../test/cloudflare/get-entry-point-from-wrangler-config.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { getEntryPointFromWranglerConfig } from '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config';\n\ndescribe('getEntryPointFromWranglerConfig', () => {\n let tmpDir: string;\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'get-entry-point-from-wrangler-config-'),\n );\n\n vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n it('returns undefined if no config file exists', () => {\n const result = getEntryPointFromWranglerConfig();\n\n expect(result).toBeUndefined();\n });\n\n it('parses main from wrangler.toml', () => {\n fs.writeFileSync(\n path.join(tmpDir, 'wrangler.toml'),\n `name = \"my-worker\"\nmain = \"src/worker.ts\"\ncompatibility_date = \"2024-01-01\"`,\n );\n\n const result = getEntryPointFromWranglerConfig();\n\n expect(result).toBe('src/worker.ts');\n });\n\n it('parses main from wrangler.json', () => {\n fs.writeFileSync(\n path.join(tmpDir, 'wrangler.json'),\n JSON.stringify({ name: 'my-worker', main: 'src/deeplink/index.ts' }),\n );\n\n const result = getEntryPointFromWranglerConfig();\n\n expect(result).toBe('src/deeplink/index.ts');\n });\n\n it('parses main from wrangler.jsonc with comments', () => {\n fs.writeFileSync(\n path.join(tmpDir, 'wrangler.jsonc'),\n `{\n // Comment\n \"name\": \"my-worker\",\n \"main\": \"src/inside-app/index.ts\"\n}`,\n );\n\n const result = getEntryPointFromWranglerConfig();\n\n expect(result).toBe('src/inside-app/index.ts');\n });\n\n it('returns undefined if main field is not specified', () => {\n fs.writeFileSync(\n path.join(tmpDir, 'wrangler.toml'),\n `name = \"my-worker\"\ncompatibility_date = \"2024-01-01\"`,\n );\n\n const result = getEntryPointFromWranglerConfig();\n\n expect(result).toBeUndefined();\n });\n\n it('returns undefined if JSON parsing fails', () => {\n fs.writeFileSync(path.join(tmpDir, 'wrangler.json'), '{ invalid json }');\n\n const result = getEntryPointFromWranglerConfig();\n\n expect(result).toBeUndefined();\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,152 @@
|
|
|
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 fs = __importStar(require("node:fs"));
|
|
28
|
+
const path = __importStar(require("node:path"));
|
|
29
|
+
const os = __importStar(require("node:os"));
|
|
30
|
+
const sdk_setup_1 = require("../../src/cloudflare/sdk-setup");
|
|
31
|
+
const get_entry_point_from_wrangler_config_1 = require("../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config");
|
|
32
|
+
const templates = __importStar(require("../../src/cloudflare/templates"));
|
|
33
|
+
const wrapWorker = __importStar(require("../../src/cloudflare/wrap-worker"));
|
|
34
|
+
const { clackMocks } = vitest_1.vi.hoisted(() => {
|
|
35
|
+
const info = vitest_1.vi.fn();
|
|
36
|
+
const warn = vitest_1.vi.fn();
|
|
37
|
+
const success = vitest_1.vi.fn();
|
|
38
|
+
const step = vitest_1.vi.fn();
|
|
39
|
+
const note = vitest_1.vi.fn();
|
|
40
|
+
return {
|
|
41
|
+
clackMocks: {
|
|
42
|
+
info,
|
|
43
|
+
warn,
|
|
44
|
+
success,
|
|
45
|
+
step,
|
|
46
|
+
note,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
vitest_1.vi.mock('@clack/prompts', () => ({
|
|
51
|
+
__esModule: true,
|
|
52
|
+
default: {
|
|
53
|
+
log: {
|
|
54
|
+
info: clackMocks.info,
|
|
55
|
+
warn: clackMocks.warn,
|
|
56
|
+
success: clackMocks.success,
|
|
57
|
+
step: clackMocks.step,
|
|
58
|
+
},
|
|
59
|
+
note: clackMocks.note,
|
|
60
|
+
},
|
|
61
|
+
}));
|
|
62
|
+
const { getEntryPointFromWranglerConfigMock } = vitest_1.vi.hoisted(() => ({
|
|
63
|
+
getEntryPointFromWranglerConfigMock: vitest_1.vi.fn(),
|
|
64
|
+
}));
|
|
65
|
+
vitest_1.vi.mock('../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config', () => ({
|
|
66
|
+
getEntryPointFromWranglerConfig: getEntryPointFromWranglerConfigMock,
|
|
67
|
+
defaultEntryPoint: 'src/index.ts',
|
|
68
|
+
}));
|
|
69
|
+
(0, vitest_1.describe)('createSentryInitFile', () => {
|
|
70
|
+
let tmpDir;
|
|
71
|
+
const testDsn = 'https://example@sentry.io/123';
|
|
72
|
+
const testFeatures = {
|
|
73
|
+
performance: true,
|
|
74
|
+
};
|
|
75
|
+
(0, vitest_1.beforeEach)(() => {
|
|
76
|
+
vitest_1.vi.clearAllMocks();
|
|
77
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sdk-setup-test-'));
|
|
78
|
+
vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.afterEach)(() => {
|
|
81
|
+
if (fs.existsSync(tmpDir)) {
|
|
82
|
+
fs.rmSync(tmpDir, { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
vitest_1.vi.restoreAllMocks();
|
|
85
|
+
});
|
|
86
|
+
(0, vitest_1.it)('creates a new default entry point file', async () => {
|
|
87
|
+
const template = 'export default { async fetch() { return new Response("ᕕ(⌐■_■)ᕗ ♪♬"); } }';
|
|
88
|
+
const getCloudflareWorkerTemplateWithHandlerSpy = vitest_1.vi
|
|
89
|
+
.spyOn(templates, 'getCloudflareWorkerTemplateWithHandler')
|
|
90
|
+
.mockReturnValue(template);
|
|
91
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures);
|
|
92
|
+
const expectedPath = path.join(tmpDir, 'src/index.ts');
|
|
93
|
+
const content = fs.readFileSync(expectedPath, 'utf-8');
|
|
94
|
+
(0, vitest_1.expect)(clackMocks.info).toHaveBeenCalledWith('No entry point found in wrangler config, creating a new one.');
|
|
95
|
+
(0, vitest_1.expect)(fs.existsSync(expectedPath)).toBe(true);
|
|
96
|
+
(0, vitest_1.expect)(content).toBe(template);
|
|
97
|
+
(0, vitest_1.expect)(clackMocks.success).toHaveBeenCalledWith('Created src/index.ts.');
|
|
98
|
+
(0, vitest_1.expect)(getCloudflareWorkerTemplateWithHandlerSpy).toHaveBeenCalled();
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.describe)('when entry point is found in wrangler config', () => {
|
|
101
|
+
(0, vitest_1.describe)('and the entry point file exists', () => {
|
|
102
|
+
(0, vitest_1.beforeEach)(async () => {
|
|
103
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures);
|
|
104
|
+
getEntryPointFromWranglerConfigMock.mockReturnValue(get_entry_point_from_wrangler_config_1.defaultEntryPoint);
|
|
105
|
+
});
|
|
106
|
+
(0, vitest_1.it)('wraps the worker with Sentry when wrapping succeeds', async () => {
|
|
107
|
+
const wrapWorkerWithSentrySpy = vitest_1.vi
|
|
108
|
+
.spyOn(wrapWorker, 'wrapWorkerWithSentry')
|
|
109
|
+
.mockResolvedValue(undefined);
|
|
110
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures);
|
|
111
|
+
(0, vitest_1.expect)(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(path.join(tmpDir, get_entry_point_from_wrangler_config_1.defaultEntryPoint), testDsn, testFeatures);
|
|
112
|
+
});
|
|
113
|
+
(0, vitest_1.it)('handles wrapping failure gracefully', async () => {
|
|
114
|
+
vitest_1.vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(new Error('Wrapping failed'));
|
|
115
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures);
|
|
116
|
+
(0, vitest_1.expect)(clackMocks.warn).toHaveBeenCalledWith('Failed to wrap worker automatically.');
|
|
117
|
+
(0, vitest_1.expect)(clackMocks.step).toHaveBeenCalledWith('Please wrap your handler with Sentry initialization:');
|
|
118
|
+
(0, vitest_1.expect)(clackMocks.note).toHaveBeenCalledWith(vitest_1.expect.stringContaining('import * as Sentry'));
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('shows template with correct DSN when wrapping fails', async () => {
|
|
121
|
+
vitest_1.vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(new Error('Failed'));
|
|
122
|
+
const getCloudflareWorkerTemplateSpy = vitest_1.vi
|
|
123
|
+
.spyOn(templates, 'getCloudflareWorkerTemplate')
|
|
124
|
+
.mockReturnValue('template with dsn');
|
|
125
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures);
|
|
126
|
+
(0, vitest_1.expect)(getCloudflareWorkerTemplateSpy).toHaveBeenCalledWith(testDsn, testFeatures);
|
|
127
|
+
(0, vitest_1.expect)(clackMocks.note).toHaveBeenCalledWith('template with dsn');
|
|
128
|
+
});
|
|
129
|
+
(0, vitest_1.it)('passes performance feature flag correctly', async () => {
|
|
130
|
+
const wrapWorkerWithSentrySpy = vitest_1.vi
|
|
131
|
+
.spyOn(wrapWorker, 'wrapWorkerWithSentry')
|
|
132
|
+
.mockResolvedValue(undefined);
|
|
133
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, { performance: false });
|
|
134
|
+
(0, vitest_1.expect)(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(path.join(tmpDir, get_entry_point_from_wrangler_config_1.defaultEntryPoint), testDsn, { performance: false });
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
(0, vitest_1.describe)('and the entry point file does not exist', () => {
|
|
138
|
+
(0, vitest_1.it)('does not throw an error', async () => {
|
|
139
|
+
vitest_1.vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockResolvedValue(undefined);
|
|
140
|
+
await (0, vitest_1.expect)((0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures)).resolves.not.toThrow();
|
|
141
|
+
});
|
|
142
|
+
(0, vitest_1.it)('does not call wrapWorkerWithSentry', async () => {
|
|
143
|
+
const wrapWorkerWithSentrySpy = vitest_1.vi
|
|
144
|
+
.spyOn(wrapWorker, 'wrapWorkerWithSentry')
|
|
145
|
+
.mockResolvedValue(undefined);
|
|
146
|
+
await (0, sdk_setup_1.createSentryInitFile)(testDsn, testFeatures);
|
|
147
|
+
(0, vitest_1.expect)(wrapWorkerWithSentrySpy).not.toHaveBeenCalled();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=sdk-setup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-setup.test.js","sourceRoot":"","sources":["../../../test/cloudflare/sdk-setup.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { createSentryInitFile } from '../../src/cloudflare/sdk-setup';\nimport { defaultEntryPoint } from '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config';\nimport * as templates from '../../src/cloudflare/templates';\nimport * as wrapWorker from '../../src/cloudflare/wrap-worker';\n\nconst { clackMocks } = vi.hoisted(() => {\n const info = vi.fn();\n const warn = vi.fn();\n const success = vi.fn();\n const step = vi.fn();\n const note = vi.fn();\n\n return {\n clackMocks: {\n info,\n warn,\n success,\n step,\n note,\n },\n };\n});\n\nvi.mock('@clack/prompts', () => ({\n __esModule: true,\n default: {\n log: {\n info: clackMocks.info,\n warn: clackMocks.warn,\n success: clackMocks.success,\n step: clackMocks.step,\n },\n note: clackMocks.note,\n },\n}));\n\nconst { getEntryPointFromWranglerConfigMock } = vi.hoisted(() => ({\n getEntryPointFromWranglerConfigMock: vi.fn(),\n}));\n\nvi.mock(\n '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config',\n () => ({\n getEntryPointFromWranglerConfig: getEntryPointFromWranglerConfigMock,\n defaultEntryPoint: 'src/index.ts',\n }),\n);\n\ndescribe('createSentryInitFile', () => {\n let tmpDir: string;\n const testDsn = 'https://example@sentry.io/123';\n const testFeatures = {\n performance: true,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sdk-setup-test-'));\n\n vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n it('creates a new default entry point file', async () => {\n const template =\n 'export default { async fetch() { return new Response(\"ᕕ(⌐■_■)ᕗ ♪♬\"); } }';\n const getCloudflareWorkerTemplateWithHandlerSpy = vi\n .spyOn(templates, 'getCloudflareWorkerTemplateWithHandler')\n .mockReturnValue(template);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n const expectedPath = path.join(tmpDir, 'src/index.ts');\n const content = fs.readFileSync(expectedPath, 'utf-8');\n\n expect(clackMocks.info).toHaveBeenCalledWith(\n 'No entry point found in wrangler config, creating a new one.',\n );\n expect(fs.existsSync(expectedPath)).toBe(true);\n expect(content).toBe(template);\n expect(clackMocks.success).toHaveBeenCalledWith('Created src/index.ts.');\n expect(getCloudflareWorkerTemplateWithHandlerSpy).toHaveBeenCalled();\n });\n\n describe('when entry point is found in wrangler config', () => {\n describe('and the entry point file exists', () => {\n beforeEach(async () => {\n await createSentryInitFile(testDsn, testFeatures);\n getEntryPointFromWranglerConfigMock.mockReturnValue(defaultEntryPoint);\n });\n\n it('wraps the worker with Sentry when wrapping succeeds', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n testFeatures,\n );\n });\n\n it('handles wrapping failure gracefully', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(\n new Error('Wrapping failed'),\n );\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(clackMocks.warn).toHaveBeenCalledWith(\n 'Failed to wrap worker automatically.',\n );\n expect(clackMocks.step).toHaveBeenCalledWith(\n 'Please wrap your handler with Sentry initialization:',\n );\n expect(clackMocks.note).toHaveBeenCalledWith(\n expect.stringContaining('import * as Sentry'),\n );\n });\n\n it('shows template with correct DSN when wrapping fails', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(\n new Error('Failed'),\n );\n const getCloudflareWorkerTemplateSpy = vi\n .spyOn(templates, 'getCloudflareWorkerTemplate')\n .mockReturnValue('template with dsn');\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(getCloudflareWorkerTemplateSpy).toHaveBeenCalledWith(\n testDsn,\n testFeatures,\n );\n expect(clackMocks.note).toHaveBeenCalledWith('template with dsn');\n });\n\n it('passes performance feature flag correctly', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, { performance: false });\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n { performance: false },\n );\n });\n });\n\n describe('and the entry point file does not exist', () => {\n it('does not throw an error', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockResolvedValue(\n undefined,\n );\n\n await expect(\n createSentryInitFile(testDsn, testFeatures),\n ).resolves.not.toThrow();\n });\n\n it('does not call wrapWorkerWithSentry', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(wrapWorkerWithSentrySpy).not.toHaveBeenCalled();\n });\n });\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const templates_1 = require("../../src/cloudflare/templates");
|
|
5
|
+
(0, vitest_1.describe)('Cloudflare code templates', () => {
|
|
6
|
+
(0, vitest_1.describe)('getCloudflareWorkerTemplate', () => {
|
|
7
|
+
(0, vitest_1.it)('generates worker template with performance monitoring enabled', () => {
|
|
8
|
+
const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
|
|
9
|
+
performance: true,
|
|
10
|
+
});
|
|
11
|
+
(0, vitest_1.expect)(template).toMatchInlineSnapshot(`
|
|
12
|
+
"import * as Sentry from '@sentry/cloudflare';
|
|
13
|
+
|
|
14
|
+
export default Sentry.withSentry(
|
|
15
|
+
(env) => ({
|
|
16
|
+
dsn: 'my-dsn',
|
|
17
|
+
// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
|
|
18
|
+
tracesSampleRate: 1,
|
|
19
|
+
}),
|
|
20
|
+
{
|
|
21
|
+
async fetch(request, env, ctx): Promise<Response> {
|
|
22
|
+
// Your worker logic here
|
|
23
|
+
return new Response('Hello World!');
|
|
24
|
+
},
|
|
25
|
+
} satisfies ExportedHandler<Env>,
|
|
26
|
+
);
|
|
27
|
+
"
|
|
28
|
+
`);
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)('generates worker template with performance monitoring disabled', () => {
|
|
31
|
+
const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
|
|
32
|
+
performance: false,
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.expect)(template).toMatchInlineSnapshot(`
|
|
35
|
+
"import * as Sentry from '@sentry/cloudflare';
|
|
36
|
+
|
|
37
|
+
export default Sentry.withSentry(
|
|
38
|
+
(env) => ({
|
|
39
|
+
dsn: 'my-dsn',
|
|
40
|
+
}),
|
|
41
|
+
{
|
|
42
|
+
async fetch(request, env, ctx): Promise<Response> {
|
|
43
|
+
// Your worker logic here
|
|
44
|
+
return new Response('Hello World!');
|
|
45
|
+
},
|
|
46
|
+
} satisfies ExportedHandler<Env>,
|
|
47
|
+
);
|
|
48
|
+
"
|
|
49
|
+
`);
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.it)('includes the correct DSN', () => {
|
|
52
|
+
const dsn = 'https://example@sentry.io/123';
|
|
53
|
+
const template = (0, templates_1.getCloudflareWorkerTemplate)(dsn, {
|
|
54
|
+
performance: true,
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.expect)(template).toContain(`dsn: '${dsn}'`);
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('wraps handler with Sentry.withSentry', () => {
|
|
59
|
+
const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
|
|
60
|
+
performance: false,
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.expect)(template).toContain('Sentry.withSentry');
|
|
63
|
+
(0, vitest_1.expect)(template).toContain('async fetch(request, env, ctx)');
|
|
64
|
+
(0, vitest_1.expect)(template).toContain('satisfies ExportedHandler<Env>');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=templates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/cloudflare/templates.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,8DAA6E;AAE7E,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,IAAA,WAAE,EAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;OAiBtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;OAetC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,GAAG,EAAE;gBAChD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAChD,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC7D,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { getCloudflareWorkerTemplate } from '../../src/cloudflare/templates';\n\ndescribe('Cloudflare code templates', () => {\n describe('getCloudflareWorkerTemplate', () => {\n it('generates worker template with performance monitoring enabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: true,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t\t// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.\n \t\ttracesSampleRate: 1,\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('generates worker template with performance monitoring disabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('includes the correct DSN', () => {\n const dsn = 'https://example@sentry.io/123';\n const template = getCloudflareWorkerTemplate(dsn, {\n performance: true,\n });\n\n expect(template).toContain(`dsn: '${dsn}'`);\n });\n\n it('wraps handler with Sentry.withSentry', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n });\n\n expect(template).toContain('Sentry.withSentry');\n expect(template).toContain('async fetch(request, env, ctx)');\n expect(template).toContain('satisfies ExportedHandler<Env>');\n });\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,216 @@
|
|
|
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 fs = __importStar(require("node:fs"));
|
|
28
|
+
const path = __importStar(require("node:path"));
|
|
29
|
+
const os = __importStar(require("node:os"));
|
|
30
|
+
const update_wrangler_config_1 = require("../../src/cloudflare/wrangler/update-wrangler-config");
|
|
31
|
+
const { clackMocks } = vitest_1.vi.hoisted(() => {
|
|
32
|
+
return {
|
|
33
|
+
clackMocks: {
|
|
34
|
+
log: {
|
|
35
|
+
success: vitest_1.vi.fn(),
|
|
36
|
+
info: vitest_1.vi.fn(),
|
|
37
|
+
step: vitest_1.vi.fn(),
|
|
38
|
+
warn: vitest_1.vi.fn(),
|
|
39
|
+
error: vitest_1.vi.fn(),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
vitest_1.vi.mock('@clack/prompts', () => ({
|
|
45
|
+
default: clackMocks,
|
|
46
|
+
}));
|
|
47
|
+
(0, vitest_1.describe)('updateWranglerConfig', () => {
|
|
48
|
+
const fixturesDir = path.join(__dirname, 'fixtures', 'wrangler');
|
|
49
|
+
let tmpDir;
|
|
50
|
+
function copyFixture(fixtureName, targetName) {
|
|
51
|
+
const content = fs.readFileSync(path.join(fixturesDir, fixtureName), 'utf-8');
|
|
52
|
+
fs.writeFileSync(path.join(tmpDir, targetName), content);
|
|
53
|
+
}
|
|
54
|
+
function readResult(fileName) {
|
|
55
|
+
return fs.readFileSync(path.join(tmpDir, fileName), 'utf-8');
|
|
56
|
+
}
|
|
57
|
+
(0, vitest_1.beforeEach)(() => {
|
|
58
|
+
vitest_1.vi.clearAllMocks();
|
|
59
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'update-wrangler-config-'));
|
|
60
|
+
vitest_1.vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.afterEach)(() => {
|
|
63
|
+
if (fs.existsSync(tmpDir)) {
|
|
64
|
+
fs.rmSync(tmpDir, { recursive: true });
|
|
65
|
+
}
|
|
66
|
+
vitest_1.vi.restoreAllMocks();
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.describe)('JSON/JSONC format', () => {
|
|
69
|
+
(0, vitest_1.it)('adds new fields to JSON config', async () => {
|
|
70
|
+
copyFixture('wrangler-basic.json', 'wrangler.json');
|
|
71
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
72
|
+
compatibility_flags: ['nodejs_als'],
|
|
73
|
+
version_metadata: { binding: 'CF_VERSION_METADATA' },
|
|
74
|
+
});
|
|
75
|
+
const writtenContent = readResult('wrangler.json');
|
|
76
|
+
const parsed = JSON.parse(writtenContent);
|
|
77
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
78
|
+
(0, vitest_1.expect)(parsed.compatibility_flags).toEqual(['nodejs_als']);
|
|
79
|
+
(0, vitest_1.expect)(parsed.version_metadata).toEqual({
|
|
80
|
+
binding: 'CF_VERSION_METADATA',
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.expect)(parsed.name).toBe('my-worker');
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)('overrides existing fields in JSON config', async () => {
|
|
85
|
+
copyFixture('wrangler-basic.json', 'wrangler.json');
|
|
86
|
+
const initialContent = readResult('wrangler.json');
|
|
87
|
+
const initialParsed = JSON.parse(initialContent);
|
|
88
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
89
|
+
compatibility_date: '1337-01-01',
|
|
90
|
+
});
|
|
91
|
+
const writtenContent = readResult('wrangler.json');
|
|
92
|
+
const parsed = JSON.parse(writtenContent);
|
|
93
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
94
|
+
(0, vitest_1.expect)(parsed.compatibility_date).not.toEqual(initialParsed.compatibility_date);
|
|
95
|
+
(0, vitest_1.expect)(parsed.compatibility_date).toEqual('1337-01-01');
|
|
96
|
+
});
|
|
97
|
+
(0, vitest_1.it)('merges array fields in JSON config', async () => {
|
|
98
|
+
copyFixture('wrangler-with-flags.json', 'wrangler.json');
|
|
99
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
100
|
+
compatibility_flags: ['nodejs_als', 'nodejs_compat'],
|
|
101
|
+
});
|
|
102
|
+
const writtenContent = readResult('wrangler.json');
|
|
103
|
+
const parsed = JSON.parse(writtenContent);
|
|
104
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
105
|
+
(0, vitest_1.expect)(parsed.compatibility_flags).toEqual([
|
|
106
|
+
'old_flag',
|
|
107
|
+
'nodejs_als',
|
|
108
|
+
'nodejs_compat',
|
|
109
|
+
]);
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.it)('deduplicates array values in JSON', async () => {
|
|
112
|
+
copyFixture('wrangler-with-duplicate-flags.json', 'wrangler.json');
|
|
113
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
114
|
+
compatibility_flags: ['nodejs_als', 'new_flag'],
|
|
115
|
+
});
|
|
116
|
+
const writtenContent = readResult('wrangler.json');
|
|
117
|
+
const parsed = JSON.parse(writtenContent);
|
|
118
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
119
|
+
(0, vitest_1.expect)(parsed.compatibility_flags).toEqual([
|
|
120
|
+
'nodejs_als',
|
|
121
|
+
'old_flag',
|
|
122
|
+
'new_flag',
|
|
123
|
+
]);
|
|
124
|
+
});
|
|
125
|
+
(0, vitest_1.it)('preserves comments in JSONC config', async () => {
|
|
126
|
+
copyFixture('wrangler-with-comment.jsonc', 'wrangler.jsonc');
|
|
127
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
128
|
+
compatibility_flags: ['nodejs_als'],
|
|
129
|
+
});
|
|
130
|
+
const writtenContent = readResult('wrangler.jsonc');
|
|
131
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
132
|
+
(0, vitest_1.expect)(writtenContent).toMatchSnapshot();
|
|
133
|
+
});
|
|
134
|
+
(0, vitest_1.it)('merges multi-line array fields in JSON config', async () => {
|
|
135
|
+
copyFixture('wrangler-multi-line-array.json', 'wrangler.json');
|
|
136
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
137
|
+
compatibility_flags: ['nodejs_als'],
|
|
138
|
+
});
|
|
139
|
+
const writtenContent = readResult('wrangler.json');
|
|
140
|
+
const parsed = JSON.parse(writtenContent);
|
|
141
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
142
|
+
(0, vitest_1.expect)(parsed.compatibility_flags).toEqual([
|
|
143
|
+
'global_fetch_strictly_public',
|
|
144
|
+
'nodejs_als',
|
|
145
|
+
]);
|
|
146
|
+
});
|
|
147
|
+
vitest_1.it.skip('merges multiple fields including arrays with comments', async () => {
|
|
148
|
+
copyFixture('wrangler-complex-with-comments.jsonc', 'wrangler.jsonc');
|
|
149
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
150
|
+
compatibility_flags: ['nodejs_als'],
|
|
151
|
+
version_metadata: { binding: 'CF_VERSION_METADATA' },
|
|
152
|
+
});
|
|
153
|
+
const writtenContent = readResult('wrangler.jsonc');
|
|
154
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
155
|
+
(0, vitest_1.expect)(writtenContent).toMatchSnapshot();
|
|
156
|
+
});
|
|
157
|
+
(0, vitest_1.it)('adds new fields to JSONC in object', async () => {
|
|
158
|
+
copyFixture('wrangler-with-metadata.jsonc', 'wrangler.jsonc');
|
|
159
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
160
|
+
version_metadata: { binding: 'CF_VERSION_METADATA' },
|
|
161
|
+
});
|
|
162
|
+
const writtenContent = readResult('wrangler.jsonc');
|
|
163
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
164
|
+
(0, vitest_1.expect)(writtenContent).toMatchSnapshot();
|
|
165
|
+
});
|
|
166
|
+
(0, vitest_1.it)('preserves all comment types in JSONC', async () => {
|
|
167
|
+
copyFixture('wrangler-all-comment-types.jsonc', 'wrangler.jsonc');
|
|
168
|
+
await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
169
|
+
version_metadata: { binding: 'CF_VERSION_METADATA' },
|
|
170
|
+
});
|
|
171
|
+
const writtenContent = readResult('wrangler.jsonc');
|
|
172
|
+
(0, vitest_1.expect)(writtenContent).toMatchSnapshot();
|
|
173
|
+
});
|
|
174
|
+
(0, vitest_1.it)('handles empty JSON object', async () => {
|
|
175
|
+
copyFixture('wrangler-empty.json', 'wrangler.json');
|
|
176
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
177
|
+
compatibility_flags: ['nodejs_als'],
|
|
178
|
+
});
|
|
179
|
+
const writtenContent = readResult('wrangler.json');
|
|
180
|
+
const parsed = JSON.parse(writtenContent);
|
|
181
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
182
|
+
(0, vitest_1.expect)(parsed.compatibility_flags).toEqual(['nodejs_als']);
|
|
183
|
+
});
|
|
184
|
+
(0, vitest_1.it)('adds nested objects to JSON', async () => {
|
|
185
|
+
copyFixture('wrangler-minimal.json', 'wrangler.json');
|
|
186
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
187
|
+
version_metadata: { binding: 'CF_VERSION_METADATA' },
|
|
188
|
+
});
|
|
189
|
+
const writtenContent = readResult('wrangler.json');
|
|
190
|
+
const parsed = JSON.parse(writtenContent);
|
|
191
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
192
|
+
(0, vitest_1.expect)(parsed.version_metadata).toEqual({
|
|
193
|
+
binding: 'CF_VERSION_METADATA',
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
(0, vitest_1.it)('handles JSONC with trailing comma', async () => {
|
|
197
|
+
copyFixture('wrangler-trailing-comma.jsonc', 'wrangler.jsonc');
|
|
198
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
199
|
+
compatibility_flags: ['nodejs_als'],
|
|
200
|
+
});
|
|
201
|
+
const writtenContent = readResult('wrangler.jsonc');
|
|
202
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
203
|
+
(0, vitest_1.expect)(writtenContent).toContain('compatibility_flags');
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
(0, vitest_1.describe)('error handling', () => {
|
|
207
|
+
(0, vitest_1.it)('returns false when no config file exists', async () => {
|
|
208
|
+
const result = await (0, update_wrangler_config_1.updateWranglerConfig)({
|
|
209
|
+
compatibility_flags: ['nodejs_als'],
|
|
210
|
+
});
|
|
211
|
+
(0, vitest_1.expect)(result).toBe(false);
|
|
212
|
+
(0, vitest_1.expect)(clackMocks.log.warn).toHaveBeenCalledWith('No wrangler config file found.');
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=update-wrangler-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-wrangler-config.test.js","sourceRoot":"","sources":["../../../test/cloudflare/update-wrangler-config.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { updateWranglerConfig } from '../../src/cloudflare/wrangler/update-wrangler-config';\n\nconst { clackMocks } = vi.hoisted(() => {\n return {\n clackMocks: {\n log: {\n success: vi.fn(),\n info: vi.fn(),\n step: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n },\n },\n };\n});\n\nvi.mock('@clack/prompts', () => ({\n default: clackMocks,\n}));\n\ndescribe('updateWranglerConfig', () => {\n const fixturesDir = path.join(__dirname, 'fixtures', 'wrangler');\n let tmpDir: string;\n\n function copyFixture(fixtureName: string, targetName: string): void {\n const content = fs.readFileSync(\n path.join(fixturesDir, fixtureName),\n 'utf-8',\n );\n fs.writeFileSync(path.join(tmpDir, targetName), content);\n }\n\n function readResult(fileName: string): string {\n return fs.readFileSync(path.join(tmpDir, fileName), 'utf-8');\n }\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'update-wrangler-config-'));\n\n vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n describe('JSON/JSONC format', () => {\n it('adds new fields to JSON config', async () => {\n copyFixture('wrangler-basic.json', 'wrangler.json');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n version_metadata: { binding: 'CF_VERSION_METADATA' },\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.compatibility_flags).toEqual(['nodejs_als']);\n expect(parsed.version_metadata).toEqual({\n binding: 'CF_VERSION_METADATA',\n });\n expect(parsed.name).toBe('my-worker');\n });\n\n it('overrides existing fields in JSON config', async () => {\n copyFixture('wrangler-basic.json', 'wrangler.json');\n\n const initialContent = readResult('wrangler.json');\n const initialParsed = JSON.parse(initialContent) as Record<\n string,\n unknown\n >;\n\n const result = await updateWranglerConfig({\n compatibility_date: '1337-01-01',\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.compatibility_date).not.toEqual(\n initialParsed.compatibility_date,\n );\n expect(parsed.compatibility_date).toEqual('1337-01-01');\n });\n\n it('merges array fields in JSON config', async () => {\n copyFixture('wrangler-with-flags.json', 'wrangler.json');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als', 'nodejs_compat'],\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.compatibility_flags).toEqual([\n 'old_flag',\n 'nodejs_als',\n 'nodejs_compat',\n ]);\n });\n\n it('deduplicates array values in JSON', async () => {\n copyFixture('wrangler-with-duplicate-flags.json', 'wrangler.json');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als', 'new_flag'],\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.compatibility_flags).toEqual([\n 'nodejs_als',\n 'old_flag',\n 'new_flag',\n ]);\n });\n\n it('preserves comments in JSONC config', async () => {\n copyFixture('wrangler-with-comment.jsonc', 'wrangler.jsonc');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n });\n\n const writtenContent = readResult('wrangler.jsonc');\n\n expect(result).toBe(true);\n expect(writtenContent).toMatchSnapshot();\n });\n\n it('merges multi-line array fields in JSON config', async () => {\n copyFixture('wrangler-multi-line-array.json', 'wrangler.json');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.compatibility_flags).toEqual([\n 'global_fetch_strictly_public',\n 'nodejs_als',\n ]);\n });\n\n it.skip('merges multiple fields including arrays with comments', async () => {\n copyFixture('wrangler-complex-with-comments.jsonc', 'wrangler.jsonc');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n version_metadata: { binding: 'CF_VERSION_METADATA' },\n });\n\n const writtenContent = readResult('wrangler.jsonc');\n\n expect(result).toBe(true);\n expect(writtenContent).toMatchSnapshot();\n });\n\n it('adds new fields to JSONC in object', async () => {\n copyFixture('wrangler-with-metadata.jsonc', 'wrangler.jsonc');\n\n const result = await updateWranglerConfig({\n version_metadata: { binding: 'CF_VERSION_METADATA' },\n });\n\n const writtenContent = readResult('wrangler.jsonc');\n\n expect(result).toBe(true);\n expect(writtenContent).toMatchSnapshot();\n });\n\n it('preserves all comment types in JSONC', async () => {\n copyFixture('wrangler-all-comment-types.jsonc', 'wrangler.jsonc');\n\n await updateWranglerConfig({\n version_metadata: { binding: 'CF_VERSION_METADATA' },\n });\n\n const writtenContent = readResult('wrangler.jsonc');\n\n expect(writtenContent).toMatchSnapshot();\n });\n\n it('handles empty JSON object', async () => {\n copyFixture('wrangler-empty.json', 'wrangler.json');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.compatibility_flags).toEqual(['nodejs_als']);\n });\n\n it('adds nested objects to JSON', async () => {\n copyFixture('wrangler-minimal.json', 'wrangler.json');\n\n const result = await updateWranglerConfig({\n version_metadata: { binding: 'CF_VERSION_METADATA' },\n });\n\n const writtenContent = readResult('wrangler.json');\n const parsed = JSON.parse(writtenContent) as Record<string, unknown>;\n\n expect(result).toBe(true);\n expect(parsed.version_metadata).toEqual({\n binding: 'CF_VERSION_METADATA',\n });\n });\n\n it('handles JSONC with trailing comma', async () => {\n copyFixture('wrangler-trailing-comma.jsonc', 'wrangler.jsonc');\n\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n });\n\n const writtenContent = readResult('wrangler.jsonc');\n\n expect(result).toBe(true);\n expect(writtenContent).toContain('compatibility_flags');\n });\n });\n\n describe('error handling', () => {\n it('returns false when no config file exists', async () => {\n const result = await updateWranglerConfig({\n compatibility_flags: ['nodejs_als'],\n });\n\n expect(result).toBe(false);\n expect(clackMocks.log.warn).toHaveBeenCalledWith(\n 'No wrangler config file found.',\n );\n });\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|