@sentry/wizard 3.32.0 → 3.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +1 -1
  3. package/bin.ts +59 -27
  4. package/dist/bin.js +97 -70
  5. package/dist/bin.js.map +1 -1
  6. package/dist/e2e-tests/jest.config.d.ts +15 -0
  7. package/dist/e2e-tests/jest.config.js +17 -0
  8. package/dist/e2e-tests/jest.config.js.map +1 -0
  9. package/dist/e2e-tests/tests/remix.test.d.ts +1 -0
  10. package/dist/e2e-tests/tests/remix.test.js +187 -0
  11. package/dist/e2e-tests/tests/remix.test.js.map +1 -0
  12. package/dist/e2e-tests/utils/index.d.ts +117 -0
  13. package/dist/e2e-tests/utils/index.js +353 -0
  14. package/dist/e2e-tests/utils/index.js.map +1 -0
  15. package/dist/lib/Steps/SentryProjectSelector.js +1 -1
  16. package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
  17. package/dist/package.json +7 -3
  18. package/dist/src/remix/sdk-example.js +5 -1
  19. package/dist/src/remix/sdk-example.js.map +1 -1
  20. package/dist/src/run.d.ts +12 -1
  21. package/dist/src/run.js +27 -1
  22. package/dist/src/run.js.map +1 -1
  23. package/dist/src/sourcemaps/sourcemaps-wizard.d.ts +2 -2
  24. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  25. package/dist/src/sourcemaps/tools/remix.d.ts +2 -2
  26. package/dist/src/sourcemaps/tools/remix.js.map +1 -1
  27. package/dist/src/utils/clack-utils.js +22 -17
  28. package/dist/src/utils/clack-utils.js.map +1 -1
  29. package/dist/src/utils/types.d.ts +6 -14
  30. package/dist/src/utils/types.js.map +1 -1
  31. package/e2e-tests/jest.config.ts +14 -0
  32. package/e2e-tests/test-applications/remix-test-app/app/entry.client.tsx +18 -0
  33. package/e2e-tests/test-applications/remix-test-app/app/entry.server.tsx +140 -0
  34. package/e2e-tests/test-applications/remix-test-app/app/root.tsx +30 -0
  35. package/e2e-tests/test-applications/remix-test-app/app/routes/_index.tsx +48 -0
  36. package/e2e-tests/test-applications/remix-test-app/app/tailwind.css +3 -0
  37. package/e2e-tests/test-applications/remix-test-app/package.json +37 -0
  38. package/e2e-tests/test-applications/remix-test-app/postcss.config.js +6 -0
  39. package/e2e-tests/test-applications/remix-test-app/tailwind.config.ts +9 -0
  40. package/e2e-tests/test-applications/remix-test-app/vite.config.ts +16 -0
  41. package/e2e-tests/tests/remix.test.ts +163 -0
  42. package/e2e-tests/utils/index.ts +302 -0
  43. package/lib/Steps/SentryProjectSelector.ts +1 -1
  44. package/package.json +7 -3
  45. package/src/remix/sdk-example.ts +6 -0
  46. package/src/run.ts +45 -5
  47. package/src/sourcemaps/sourcemaps-wizard.ts +4 -3
  48. package/src/sourcemaps/tools/remix.ts +2 -2
  49. package/src/utils/clack-utils.ts +17 -8
  50. package/src/utils/types.ts +8 -14
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.33.0
4
+
5
+ - feat: Only format changed files with Prettier ([#670](https://github.com/getsentry/sentry-wizard/pull/670))
6
+ - ref(remix): Use recursive true in error example creation ([#681](https://github.com/getsentry/sentry-wizard/pull/681))
7
+ - ref(remix): Fix creation sentry example when no routes folder ([#680](https://github.com/getsentry/sentry-wizard/pull/680))
8
+ - build(deps): bump axios from 1.6.0 to 1.7.4 ([#655](https://github.com/getsentry/sentry-wizard/pull/655))
9
+ - build(deps): bump micromatch from 4.0.5 to 4.0.8 ([#654](https://github.com/getsentry/sentry-wizard/pull/654))
10
+
3
11
  ## 3.32.0
4
12
 
5
13
  - feat: Add `--saas` CLI arg to skip self-hosted or SaaS selection step (#678)
package/README.md CHANGED
@@ -49,7 +49,7 @@ yarn sentry-wizard
49
49
  npx @sentry/wizard
50
50
  ```
51
51
 
52
- At the current moment, the wizard is meant to be used for React Native, Cordova, Electron or Next.js. If you have other platforms you would like the wizard to support, please open a [GitHub issue](https://github.com/getsentry/sentry-wizard/issues)!
52
+ At the current moment, the wizard is meant to be used for React Native, Cordova, Electron, Next.js, Remix and Sveltekit. If you have other platforms you would like the wizard to support, please open a [GitHub issue](https://github.com/getsentry/sentry-wizard/issues)!
53
53
 
54
54
  # Options
55
55
 
package/bin.ts CHANGED
@@ -21,79 +21,111 @@ import { run } from './src/run';
21
21
 
22
22
  export * from './lib/Setup';
23
23
 
24
+ const PRESELECTED_PROJECT_OPTIONS = {
25
+ 'preSelectedProject.authToken': {
26
+ describe: 'Preselected project auth token',
27
+ },
28
+ 'preSelectedProject.selfHosted': {
29
+ describe: 'Preselected project is self-hosted',
30
+ },
31
+ 'preSelectedProject.dsn': {
32
+ describe: 'Preselected project DSN',
33
+ },
34
+ 'preSelectedProject.id': {
35
+ describe: 'Preselected project id',
36
+ },
37
+ 'preSelectedProject.projectSlug': {
38
+ describe: 'Preselected project slug',
39
+ },
40
+ 'preSelectedProject.projectName': {
41
+ describe: 'Preselected project name',
42
+ },
43
+ 'preSelectedProject.orgId': {
44
+ describe: 'Preselected organization id',
45
+ },
46
+ 'preSelectedProject.orgName': {
47
+ describe: 'Preselected organization name',
48
+ },
49
+ 'preSelectedProject.orgSlug': {
50
+ describe: 'Preselected organization slug',
51
+ },
52
+ };
53
+
24
54
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
25
- const argv = yargs(hideBin(process.argv))
26
- .option('debug', {
55
+ const argv = yargs(hideBin(process.argv)).options({
56
+ debug: {
27
57
  default: false,
28
58
  describe: 'Enable verbose logging\nenv: SENTRY_WIZARD_DEBUG',
29
59
  type: 'boolean',
30
- })
31
- .option('uninstall', {
60
+ },
61
+ uninstall: {
32
62
  default: false,
33
63
  describe: 'Revert project setup process\nenv: SENTRY_WIZARD_UNINSTALL',
34
64
  type: 'boolean',
35
- })
36
- .option('skip-connect', {
65
+ },
66
+ 'skip-connect': {
37
67
  default: false,
38
68
  describe:
39
69
  'Skips the connection to the server\nenv: SENTRY_WIZARD_SKIP_CONNECT',
40
70
  type: 'boolean',
41
- })
42
- .option('quiet', {
71
+ },
72
+ quiet: {
43
73
  default: false,
44
74
  describe:
45
75
  'Do not fallback to prompting user asking questions\nenv: SENTRY_WIZARD_QUIET',
46
76
  type: 'boolean',
47
- })
48
- .option('i', {
77
+ },
78
+ i: {
49
79
  alias: 'integration',
50
80
  choices: Object.keys(Integration),
51
81
  describe: 'Choose the integration to setup\nenv: SENTRY_WIZARD_INTEGRATION',
52
- })
53
- .option('p', {
82
+ },
83
+ p: {
54
84
  alias: 'platform',
55
85
  choices: Object.keys(Platform),
56
86
  describe: 'Choose platform(s)\nenv: SENTRY_WIZARD_PLATFORM',
57
87
  type: 'array',
58
- })
59
- .option('u', {
88
+ },
89
+ u: {
60
90
  alias: 'url',
61
91
  describe: 'The url to your Sentry installation\nenv: SENTRY_WIZARD_URL',
62
- })
63
- .option('project', {
92
+ },
93
+ project: {
64
94
  type: 'string',
65
95
  describe: 'The Sentry project slug to use',
66
96
  defaultDescription: 'Select project during setup',
67
97
  default: undefined,
68
- })
69
- .option('org', {
98
+ },
99
+ org: {
70
100
  type: 'string',
71
101
  describe: 'The Sentry org slug to use',
72
102
  defaultDescription: 'Select org during setup',
73
103
  default: undefined,
74
- })
75
- .option('saas', {
104
+ },
105
+ saas: {
76
106
  default: false,
77
107
  describe: 'Skip the self-hosted or SaaS URL selection process',
78
108
  defaultDescription: 'Select self-hosted or SaaS during setup',
79
109
  type: 'boolean',
80
- })
81
- .option('s', {
110
+ },
111
+ s: {
82
112
  alias: 'signup',
83
113
  default: false,
84
114
  describe: 'Redirect to signup page if not logged in',
85
115
  type: 'boolean',
86
- })
87
- .option('disable-telemetry', {
116
+ },
117
+ 'disable-telemetry': {
88
118
  default: false,
89
119
  describe: "Don't send telemetry data to Sentry",
90
120
  type: 'boolean',
91
- })
92
- .option('promo-code', {
121
+ },
122
+ 'promo-code': {
93
123
  alias: 'promo-code',
94
124
  describe: 'A promo code that will be applied during signup',
95
125
  type: 'string',
96
- }).argv;
126
+ },
127
+ ...PRESELECTED_PROJECT_OPTIONS,
128
+ }).argv;
97
129
 
98
130
  // @ts-expect-error - for some reason TS doesn't recognize the aliases as valid properties
99
131
  // meaning it only knows e.g. u but not url. Maybe a bug in this old version of yargs?
package/dist/bin.js CHANGED
@@ -1,5 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __assign = (this && this.__assign) || function () {
4
+ __assign = Object.assign || function(t) {
5
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6
+ s = arguments[i];
7
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
+ t[p] = s[p];
9
+ }
10
+ return t;
11
+ };
12
+ return __assign.apply(this, arguments);
13
+ };
3
14
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
15
  if (k2 === undefined) k2 = k;
5
16
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -32,77 +43,93 @@ if (!(0, semver_1.satisfies)(process.version, NODE_VERSION_RANGE)) {
32
43
  var Constants_1 = require("./lib/Constants");
33
44
  var run_1 = require("./src/run");
34
45
  __exportStar(require("./lib/Setup"), exports);
46
+ var PRESELECTED_PROJECT_OPTIONS = {
47
+ 'preSelectedProject.authToken': {
48
+ describe: 'Preselected project auth token',
49
+ },
50
+ 'preSelectedProject.selfHosted': {
51
+ describe: 'Preselected project is self-hosted',
52
+ },
53
+ 'preSelectedProject.dsn': {
54
+ describe: 'Preselected project DSN',
55
+ },
56
+ 'preSelectedProject.id': {
57
+ describe: 'Preselected project id',
58
+ },
59
+ 'preSelectedProject.projectSlug': {
60
+ describe: 'Preselected project slug',
61
+ },
62
+ 'preSelectedProject.projectName': {
63
+ describe: 'Preselected project name',
64
+ },
65
+ 'preSelectedProject.orgId': {
66
+ describe: 'Preselected organization id',
67
+ },
68
+ 'preSelectedProject.orgName': {
69
+ describe: 'Preselected organization name',
70
+ },
71
+ 'preSelectedProject.orgSlug': {
72
+ describe: 'Preselected organization slug',
73
+ },
74
+ };
35
75
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
36
- var argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
37
- .option('debug', {
38
- default: false,
39
- describe: 'Enable verbose logging\nenv: SENTRY_WIZARD_DEBUG',
40
- type: 'boolean',
41
- })
42
- .option('uninstall', {
43
- default: false,
44
- describe: 'Revert project setup process\nenv: SENTRY_WIZARD_UNINSTALL',
45
- type: 'boolean',
46
- })
47
- .option('skip-connect', {
48
- default: false,
49
- describe: 'Skips the connection to the server\nenv: SENTRY_WIZARD_SKIP_CONNECT',
50
- type: 'boolean',
51
- })
52
- .option('quiet', {
53
- default: false,
54
- describe: 'Do not fallback to prompting user asking questions\nenv: SENTRY_WIZARD_QUIET',
55
- type: 'boolean',
56
- })
57
- .option('i', {
58
- alias: 'integration',
59
- choices: Object.keys(Constants_1.Integration),
60
- describe: 'Choose the integration to setup\nenv: SENTRY_WIZARD_INTEGRATION',
61
- })
62
- .option('p', {
63
- alias: 'platform',
64
- choices: Object.keys(Constants_1.Platform),
65
- describe: 'Choose platform(s)\nenv: SENTRY_WIZARD_PLATFORM',
66
- type: 'array',
67
- })
68
- .option('u', {
69
- alias: 'url',
70
- describe: 'The url to your Sentry installation\nenv: SENTRY_WIZARD_URL',
71
- })
72
- .option('project', {
73
- type: 'string',
74
- describe: 'The Sentry project slug to use',
75
- defaultDescription: 'Select project during setup',
76
- default: undefined,
77
- })
78
- .option('org', {
79
- type: 'string',
80
- describe: 'The Sentry org slug to use',
81
- defaultDescription: 'Select org during setup',
82
- default: undefined,
83
- })
84
- .option('saas', {
85
- default: false,
86
- describe: 'Skip the self-hosted or SaaS URL selection process',
87
- defaultDescription: 'Select self-hosted or SaaS during setup',
88
- type: 'boolean',
89
- })
90
- .option('s', {
91
- alias: 'signup',
92
- default: false,
93
- describe: 'Redirect to signup page if not logged in',
94
- type: 'boolean',
95
- })
96
- .option('disable-telemetry', {
97
- default: false,
98
- describe: "Don't send telemetry data to Sentry",
99
- type: 'boolean',
100
- })
101
- .option('promo-code', {
102
- alias: 'promo-code',
103
- describe: 'A promo code that will be applied during signup',
104
- type: 'string',
105
- }).argv;
76
+ var argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv)).options(__assign({ debug: {
77
+ default: false,
78
+ describe: 'Enable verbose logging\nenv: SENTRY_WIZARD_DEBUG',
79
+ type: 'boolean',
80
+ }, uninstall: {
81
+ default: false,
82
+ describe: 'Revert project setup process\nenv: SENTRY_WIZARD_UNINSTALL',
83
+ type: 'boolean',
84
+ }, 'skip-connect': {
85
+ default: false,
86
+ describe: 'Skips the connection to the server\nenv: SENTRY_WIZARD_SKIP_CONNECT',
87
+ type: 'boolean',
88
+ }, quiet: {
89
+ default: false,
90
+ describe: 'Do not fallback to prompting user asking questions\nenv: SENTRY_WIZARD_QUIET',
91
+ type: 'boolean',
92
+ }, i: {
93
+ alias: 'integration',
94
+ choices: Object.keys(Constants_1.Integration),
95
+ describe: 'Choose the integration to setup\nenv: SENTRY_WIZARD_INTEGRATION',
96
+ }, p: {
97
+ alias: 'platform',
98
+ choices: Object.keys(Constants_1.Platform),
99
+ describe: 'Choose platform(s)\nenv: SENTRY_WIZARD_PLATFORM',
100
+ type: 'array',
101
+ }, u: {
102
+ alias: 'url',
103
+ describe: 'The url to your Sentry installation\nenv: SENTRY_WIZARD_URL',
104
+ }, project: {
105
+ type: 'string',
106
+ describe: 'The Sentry project slug to use',
107
+ defaultDescription: 'Select project during setup',
108
+ default: undefined,
109
+ }, org: {
110
+ type: 'string',
111
+ describe: 'The Sentry org slug to use',
112
+ defaultDescription: 'Select org during setup',
113
+ default: undefined,
114
+ }, saas: {
115
+ default: false,
116
+ describe: 'Skip the self-hosted or SaaS URL selection process',
117
+ defaultDescription: 'Select self-hosted or SaaS during setup',
118
+ type: 'boolean',
119
+ }, s: {
120
+ alias: 'signup',
121
+ default: false,
122
+ describe: 'Redirect to signup page if not logged in',
123
+ type: 'boolean',
124
+ }, 'disable-telemetry': {
125
+ default: false,
126
+ describe: "Don't send telemetry data to Sentry",
127
+ type: 'boolean',
128
+ }, 'promo-code': {
129
+ alias: 'promo-code',
130
+ describe: 'A promo code that will be applied during signup',
131
+ type: 'string',
132
+ } }, PRESELECTED_PROJECT_OPTIONS)).argv;
106
133
  // @ts-expect-error - for some reason TS doesn't recognize the aliases as valid properties
107
134
  // meaning it only knows e.g. u but not url. Maybe a bug in this old version of yargs?
108
135
  // Can't upgrade yargs though without dropping support for Node 14.
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,iCAAmC;AACnC,gDAA2C;AAE3C,gDAA0B;AAC1B,yCAAwC;AAExC,IAAM,kBAAkB,GAAG,WAAW,CAAC;AAEvC,iFAAiF;AACjF,+BAA+B;AAC/B,IAAI,CAAC,IAAA,kBAAS,EAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE;IACnD,IAAA,aAAG,EACD,yCAAkC,kBAAkB,qCAA2B,OAAO,CAAC,OAAO,2CAAwC,CACvI,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,6CAAwD;AACxD,iCAAgC;AAEhC,8CAA4B;AAE5B,kJAAkJ;AAClJ,IAAM,IAAI,GAAG,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACtC,MAAM,CAAC,OAAO,EAAE;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,kDAAkD;IAC5D,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,WAAW,EAAE;IACnB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,4DAA4D;IACtE,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,cAAc,EAAE;IACtB,OAAO,EAAE,KAAK;IACd,QAAQ,EACN,qEAAqE;IACvE,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EACN,8EAA8E;IAChF,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,GAAG,EAAE;IACX,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,uBAAW,CAAC;IACjC,QAAQ,EAAE,iEAAiE;CAC5E,CAAC;KACD,MAAM,CAAC,GAAG,EAAE;IACX,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAQ,CAAC;IAC9B,QAAQ,EAAE,iDAAiD;IAC3D,IAAI,EAAE,OAAO;CACd,CAAC;KACD,MAAM,CAAC,GAAG,EAAE;IACX,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,6DAA6D;CACxE,CAAC;KACD,MAAM,CAAC,SAAS,EAAE;IACjB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,gCAAgC;IAC1C,kBAAkB,EAAE,6BAA6B;IACjD,OAAO,EAAE,SAAS;CACnB,CAAC;KACD,MAAM,CAAC,KAAK,EAAE;IACb,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,4BAA4B;IACtC,kBAAkB,EAAE,yBAAyB;IAC7C,OAAO,EAAE,SAAS;CACnB,CAAC;KACD,MAAM,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,oDAAoD;IAC9D,kBAAkB,EAAE,yCAAyC;IAC7D,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,GAAG,EAAE;IACX,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,0CAA0C;IACpD,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,mBAAmB,EAAE;IAC3B,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,qCAAqC;IAC/C,IAAI,EAAE,SAAS;CAChB,CAAC;KACD,MAAM,CAAC,YAAY,EAAE;IACpB,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,iDAAiD;IAC3D,IAAI,EAAE,QAAQ;CACf,CAAC,CAAC,IAAI,CAAC;AAEV,0FAA0F;AAC1F,sFAAsF;AACtF,mEAAmE;AACnE,KAAK,IAAA,SAAG,EAAC,IAAI,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { satisfies } from 'semver';\nimport { red } from './lib/Helper/Logging';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nconst NODE_VERSION_RANGE = '>=14.18.0';\n\n// Have to run this above the other imports because they are importing clack that\n// has the problematic imports.\nif (!satisfies(process.version, NODE_VERSION_RANGE)) {\n red(\n `Sentry wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`,\n );\n process.exit(1);\n}\n\nimport { Integration, Platform } from './lib/Constants';\nimport { run } from './src/run';\n\nexport * from './lib/Setup';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\nconst argv = yargs(hideBin(process.argv))\n .option('debug', {\n default: false,\n describe: 'Enable verbose logging\\nenv: SENTRY_WIZARD_DEBUG',\n type: 'boolean',\n })\n .option('uninstall', {\n default: false,\n describe: 'Revert project setup process\\nenv: SENTRY_WIZARD_UNINSTALL',\n type: 'boolean',\n })\n .option('skip-connect', {\n default: false,\n describe:\n 'Skips the connection to the server\\nenv: SENTRY_WIZARD_SKIP_CONNECT',\n type: 'boolean',\n })\n .option('quiet', {\n default: false,\n describe:\n 'Do not fallback to prompting user asking questions\\nenv: SENTRY_WIZARD_QUIET',\n type: 'boolean',\n })\n .option('i', {\n alias: 'integration',\n choices: Object.keys(Integration),\n describe: 'Choose the integration to setup\\nenv: SENTRY_WIZARD_INTEGRATION',\n })\n .option('p', {\n alias: 'platform',\n choices: Object.keys(Platform),\n describe: 'Choose platform(s)\\nenv: SENTRY_WIZARD_PLATFORM',\n type: 'array',\n })\n .option('u', {\n alias: 'url',\n describe: 'The url to your Sentry installation\\nenv: SENTRY_WIZARD_URL',\n })\n .option('project', {\n type: 'string',\n describe: 'The Sentry project slug to use',\n defaultDescription: 'Select project during setup',\n default: undefined,\n })\n .option('org', {\n type: 'string',\n describe: 'The Sentry org slug to use',\n defaultDescription: 'Select org during setup',\n default: undefined,\n })\n .option('saas', {\n default: false,\n describe: 'Skip the self-hosted or SaaS URL selection process',\n defaultDescription: 'Select self-hosted or SaaS during setup',\n type: 'boolean',\n })\n .option('s', {\n alias: 'signup',\n default: false,\n describe: 'Redirect to signup page if not logged in',\n type: 'boolean',\n })\n .option('disable-telemetry', {\n default: false,\n describe: \"Don't send telemetry data to Sentry\",\n type: 'boolean',\n })\n .option('promo-code', {\n alias: 'promo-code',\n describe: 'A promo code that will be applied during signup',\n type: 'string',\n }).argv;\n\n// @ts-expect-error - for some reason TS doesn't recognize the aliases as valid properties\n// meaning it only knows e.g. u but not url. Maybe a bug in this old version of yargs?\n// Can't upgrade yargs though without dropping support for Node 14.\nvoid run(argv);\n"]}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { satisfies } from 'semver';\nimport { red } from './lib/Helper/Logging';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nconst NODE_VERSION_RANGE = '>=14.18.0';\n\n// Have to run this above the other imports because they are importing clack that\n// has the problematic imports.\nif (!satisfies(process.version, NODE_VERSION_RANGE)) {\n red(\n `Sentry wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`,\n );\n process.exit(1);\n}\n\nimport { Integration, Platform } from './lib/Constants';\nimport { run } from './src/run';\n\nexport * from './lib/Setup';\n\nconst PRESELECTED_PROJECT_OPTIONS = {\n 'preSelectedProject.authToken': {\n describe: 'Preselected project auth token',\n },\n 'preSelectedProject.selfHosted': {\n describe: 'Preselected project is self-hosted',\n },\n 'preSelectedProject.dsn': {\n describe: 'Preselected project DSN',\n },\n 'preSelectedProject.id': {\n describe: 'Preselected project id',\n },\n 'preSelectedProject.projectSlug': {\n describe: 'Preselected project slug',\n },\n 'preSelectedProject.projectName': {\n describe: 'Preselected project name',\n },\n 'preSelectedProject.orgId': {\n describe: 'Preselected organization id',\n },\n 'preSelectedProject.orgName': {\n describe: 'Preselected organization name',\n },\n 'preSelectedProject.orgSlug': {\n describe: 'Preselected organization slug',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\nconst argv = yargs(hideBin(process.argv)).options({\n debug: {\n default: false,\n describe: 'Enable verbose logging\\nenv: SENTRY_WIZARD_DEBUG',\n type: 'boolean',\n },\n uninstall: {\n default: false,\n describe: 'Revert project setup process\\nenv: SENTRY_WIZARD_UNINSTALL',\n type: 'boolean',\n },\n 'skip-connect': {\n default: false,\n describe:\n 'Skips the connection to the server\\nenv: SENTRY_WIZARD_SKIP_CONNECT',\n type: 'boolean',\n },\n quiet: {\n default: false,\n describe:\n 'Do not fallback to prompting user asking questions\\nenv: SENTRY_WIZARD_QUIET',\n type: 'boolean',\n },\n i: {\n alias: 'integration',\n choices: Object.keys(Integration),\n describe: 'Choose the integration to setup\\nenv: SENTRY_WIZARD_INTEGRATION',\n },\n p: {\n alias: 'platform',\n choices: Object.keys(Platform),\n describe: 'Choose platform(s)\\nenv: SENTRY_WIZARD_PLATFORM',\n type: 'array',\n },\n u: {\n alias: 'url',\n describe: 'The url to your Sentry installation\\nenv: SENTRY_WIZARD_URL',\n },\n project: {\n type: 'string',\n describe: 'The Sentry project slug to use',\n defaultDescription: 'Select project during setup',\n default: undefined,\n },\n org: {\n type: 'string',\n describe: 'The Sentry org slug to use',\n defaultDescription: 'Select org during setup',\n default: undefined,\n },\n saas: {\n default: false,\n describe: 'Skip the self-hosted or SaaS URL selection process',\n defaultDescription: 'Select self-hosted or SaaS during setup',\n type: 'boolean',\n },\n s: {\n alias: 'signup',\n default: false,\n describe: 'Redirect to signup page if not logged in',\n type: 'boolean',\n },\n 'disable-telemetry': {\n default: false,\n describe: \"Don't send telemetry data to Sentry\",\n type: 'boolean',\n },\n 'promo-code': {\n alias: 'promo-code',\n describe: 'A promo code that will be applied during signup',\n type: 'string',\n },\n ...PRESELECTED_PROJECT_OPTIONS,\n}).argv;\n\n// @ts-expect-error - for some reason TS doesn't recognize the aliases as valid properties\n// meaning it only knows e.g. u but not url. Maybe a bug in this old version of yargs?\n// Can't upgrade yargs though without dropping support for Node 14.\nvoid run(argv);\n"]}
@@ -0,0 +1,15 @@
1
+ declare const _default: {
2
+ testTimeout: number;
3
+ testEnvironment: string;
4
+ testMatch: string[];
5
+ transform: {
6
+ '^.+\\.tsx?$': string;
7
+ };
8
+ moduleFileExtensions: string[];
9
+ globals: {
10
+ 'ts-jest': {
11
+ tsconfig: string;
12
+ };
13
+ };
14
+ };
15
+ export default _default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ testTimeout: 360000,
5
+ testEnvironment: 'node',
6
+ testMatch: ['**/*.test.ts'],
7
+ transform: {
8
+ '^.+\\.tsx?$': 'ts-jest',
9
+ },
10
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
11
+ globals: {
12
+ 'ts-jest': {
13
+ tsconfig: 'tsconfig.json',
14
+ },
15
+ },
16
+ };
17
+ //# sourceMappingURL=jest.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../../e2e-tests/jest.config.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,MAAM;IACvB,SAAS,EAAE,CAAC,cAAc,CAAC;IAC3B,SAAS,EAAE;QACT,aAAa,EAAE,SAAS;KACzB;IACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,OAAO,EAAE;QACP,SAAS,EAAE;YACT,QAAQ,EAAE,eAAe;SAC1B;KACF;CACF,CAAA","sourcesContent":["export default {\n testTimeout: 360000,\n testEnvironment: 'node',\n testMatch: ['**/*.test.ts'],\n transform: {\n '^.+\\\\.tsx?$': 'ts-jest',\n },\n moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],\n globals: {\n 'ts-jest': {\n tsconfig: 'tsconfig.json',\n },\n },\n}"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,187 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ /* eslint-disable jest/expect-expect */
63
+ var Constants_1 = require("../../lib/Constants");
64
+ var utils_1 = require("../utils");
65
+ var utils_2 = require("../utils");
66
+ var utils_3 = require("../utils");
67
+ var path = __importStar(require("path"));
68
+ describe('Remix', function () {
69
+ var integration = Constants_1.Integration.remix;
70
+ var projectDir = path.resolve(__dirname, '../test-applications/remix-test-app');
71
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
72
+ var wizardInstance, packageManagerPrompted, tracingOptionPrompted, replayOptionPrompted, examplePagePrompted;
73
+ return __generator(this, function (_a) {
74
+ switch (_a.label) {
75
+ case 0:
76
+ wizardInstance = (0, utils_2.startWizardInstance)(integration, projectDir);
77
+ return [4 /*yield*/, wizardInstance.waitForOutput('Please select your package manager.')];
78
+ case 1:
79
+ packageManagerPrompted = _a.sent();
80
+ if (packageManagerPrompted) {
81
+ // Selecting `yarn` as the package manager
82
+ wizardInstance.sendStdin(utils_1.KEYS.DOWN);
83
+ wizardInstance.sendStdin(utils_1.KEYS.ENTER);
84
+ }
85
+ return [4 /*yield*/, wizardInstance.waitForOutput('Do you want to enable Tracing', {
86
+ timeout: 240000,
87
+ })];
88
+ case 2:
89
+ tracingOptionPrompted = _a.sent();
90
+ if (tracingOptionPrompted) {
91
+ wizardInstance.sendStdin(utils_1.KEYS.ENTER);
92
+ }
93
+ return [4 /*yield*/, wizardInstance.waitForOutput('Do you want to enable Sentry Session Replay')];
94
+ case 3:
95
+ replayOptionPrompted = _a.sent();
96
+ if (replayOptionPrompted) {
97
+ wizardInstance.sendStdin(utils_1.KEYS.ENTER);
98
+ }
99
+ return [4 /*yield*/, wizardInstance.waitForOutput('Do you want to create an example page', {
100
+ optional: true,
101
+ })];
102
+ case 4:
103
+ examplePagePrompted = _a.sent();
104
+ if (examplePagePrompted) {
105
+ wizardInstance.sendStdin(utils_1.KEYS.ENTER);
106
+ wizardInstance.sendStdin(utils_1.KEYS.ENTER);
107
+ }
108
+ return [4 /*yield*/, wizardInstance.waitForOutput('Sentry has been successfully configured for your Remix project')];
109
+ case 5:
110
+ _a.sent();
111
+ wizardInstance.kill();
112
+ return [2 /*return*/];
113
+ }
114
+ });
115
+ }); });
116
+ afterAll(function () {
117
+ (0, utils_1.revertLocalChanges)(projectDir);
118
+ (0, utils_1.cleanupGit)(projectDir);
119
+ });
120
+ test('package.json is updated correctly', function () {
121
+ (0, utils_3.checkPackageJson)(projectDir, integration);
122
+ });
123
+ test('.env-sentry-build-plugin is created and contains the auth token', function () {
124
+ (0, utils_1.checkEnvBuildPlugin)(projectDir);
125
+ });
126
+ test('example page exists', function () {
127
+ (0, utils_3.checkFileExists)("".concat(projectDir, "/app/routes/sentry-example-page.tsx"));
128
+ });
129
+ test('instrumentation.server file exists', function () {
130
+ (0, utils_3.checkFileExists)("".concat(projectDir, "/instrumentation.server.mjs"));
131
+ });
132
+ test('entry.client file contains Sentry initialization', function () {
133
+ (0, utils_3.checkFileContents)("".concat(projectDir, "/app/entry.client.tsx"), [
134
+ 'import * as Sentry from "@sentry/remix";',
135
+ "Sentry.init({\n dsn: \"".concat(utils_3.TEST_ARGS.PROJECT_DSN, "\",\n tracesSampleRate: 1,\n\n integrations: [Sentry.browserTracingIntegration({\n useEffect,\n useLocation,\n useMatches\n }), Sentry.replayIntegration({\n maskAllText: true,\n blockAllMedia: true\n })],\n\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1\n})"),
136
+ ]);
137
+ });
138
+ test('entry.server file contains Sentry code', function () {
139
+ (0, utils_3.checkFileContents)("".concat(projectDir, "/app/entry.server.tsx"), [
140
+ 'import * as Sentry from "@sentry/remix";',
141
+ "export const handleError = Sentry.wrapHandleErrorWithSentry((error, { request }) => {\n // Custom handleError implementation\n});",
142
+ ]);
143
+ });
144
+ test('instrumentation.server file contains Sentry initialization', function () {
145
+ (0, utils_3.checkFileContents)("".concat(projectDir, "/instrumentation.server.mjs"), [
146
+ 'import * as Sentry from "@sentry/remix";',
147
+ "Sentry.init({\n dsn: \"".concat(utils_3.TEST_ARGS.PROJECT_DSN, "\",\n tracesSampleRate: 1,\n autoInstrumentRemix: true\n})"),
148
+ ]);
149
+ });
150
+ test('root file contains Sentry ErrorBoundary', function () {
151
+ (0, utils_3.checkFileContents)("".concat(projectDir, "/app/root.tsx"), [
152
+ 'import { captureRemixErrorBoundaryError } from "@sentry/remix";',
153
+ "export const ErrorBoundary = () => {\n const error = useRouteError();\n captureRemixErrorBoundaryError(error);\n return <div>Something went wrong</div>;\n};",
154
+ ]);
155
+ });
156
+ test('builds correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
157
+ return __generator(this, function (_a) {
158
+ switch (_a.label) {
159
+ case 0: return [4 /*yield*/, (0, utils_3.checkIfBuilds)(projectDir, 'built')];
160
+ case 1:
161
+ _a.sent();
162
+ return [2 /*return*/];
163
+ }
164
+ });
165
+ }); });
166
+ test('runs on dev mode correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
167
+ return __generator(this, function (_a) {
168
+ switch (_a.label) {
169
+ case 0: return [4 /*yield*/, (0, utils_3.checkIfRunsOnDevMode)(projectDir, 'to expose')];
170
+ case 1:
171
+ _a.sent();
172
+ return [2 /*return*/];
173
+ }
174
+ });
175
+ }); });
176
+ test('runs on prod mode correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
177
+ return __generator(this, function (_a) {
178
+ switch (_a.label) {
179
+ case 0: return [4 /*yield*/, (0, utils_3.checkIfRunsOnProdMode)(projectDir, '[remix-serve]')];
180
+ case 1:
181
+ _a.sent();
182
+ return [2 /*return*/];
183
+ }
184
+ });
185
+ }); });
186
+ });
187
+ //# sourceMappingURL=remix.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remix.test.js","sourceRoot":"","sources":["../../../e2e-tests/tests/remix.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jest/expect-expect */\nimport { Integration } from '../../lib/Constants';\nimport {\n checkEnvBuildPlugin,\n cleanupGit,\n KEYS,\n revertLocalChanges,\n} from '../utils';\nimport { startWizardInstance } from '../utils';\nimport {\n checkFileContents,\n checkFileExists,\n checkIfBuilds,\n checkIfRunsOnDevMode,\n checkIfRunsOnProdMode,\n checkPackageJson,\n TEST_ARGS,\n} from '../utils';\nimport * as path from 'path';\n\ndescribe('Remix', () => {\n const integration = Integration.remix;\n const projectDir = path.resolve(\n __dirname,\n '../test-applications/remix-test-app',\n );\n\n beforeAll(async () => {\n const wizardInstance = startWizardInstance(integration, projectDir);\n const packageManagerPrompted = await wizardInstance.waitForOutput(\n 'Please select your package manager.',\n );\n\n if (packageManagerPrompted) {\n // Selecting `yarn` as the package manager\n wizardInstance.sendStdin(KEYS.DOWN);\n wizardInstance.sendStdin(KEYS.ENTER);\n }\n\n const tracingOptionPrompted = await wizardInstance.waitForOutput(\n 'Do you want to enable Tracing',\n {\n timeout: 240_000,\n },\n );\n\n if (tracingOptionPrompted) {\n wizardInstance.sendStdin(KEYS.ENTER);\n }\n\n const replayOptionPrompted = await wizardInstance.waitForOutput(\n 'Do you want to enable Sentry Session Replay',\n );\n\n if (replayOptionPrompted) {\n wizardInstance.sendStdin(KEYS.ENTER);\n }\n\n const examplePagePrompted = await wizardInstance.waitForOutput(\n 'Do you want to create an example page',\n {\n optional: true,\n },\n );\n\n if (examplePagePrompted) {\n wizardInstance.sendStdin(KEYS.ENTER);\n wizardInstance.sendStdin(KEYS.ENTER);\n }\n\n await wizardInstance.waitForOutput(\n 'Sentry has been successfully configured for your Remix project',\n );\n\n wizardInstance.kill();\n });\n\n afterAll(() => {\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n });\n\n test('package.json is updated correctly', () => {\n checkPackageJson(projectDir, integration);\n });\n\n test('.env-sentry-build-plugin is created and contains the auth token', () => {\n checkEnvBuildPlugin(projectDir);\n });\n\n test('example page exists', () => {\n checkFileExists(`${projectDir}/app/routes/sentry-example-page.tsx`);\n });\n\n test('instrumentation.server file exists', () => {\n checkFileExists(`${projectDir}/instrumentation.server.mjs`);\n });\n\n test('entry.client file contains Sentry initialization', () => {\n checkFileContents(`${projectDir}/app/entry.client.tsx`, [\n 'import * as Sentry from \"@sentry/remix\";',\n `Sentry.init({\n dsn: \"${TEST_ARGS.PROJECT_DSN}\",\n tracesSampleRate: 1,\n\n integrations: [Sentry.browserTracingIntegration({\n useEffect,\n useLocation,\n useMatches\n }), Sentry.replayIntegration({\n maskAllText: true,\n blockAllMedia: true\n })],\n\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1\n})`,\n ]);\n });\n\n test('entry.server file contains Sentry code', () => {\n checkFileContents(`${projectDir}/app/entry.server.tsx`, [\n 'import * as Sentry from \"@sentry/remix\";',\n `export const handleError = Sentry.wrapHandleErrorWithSentry((error, { request }) => {\n // Custom handleError implementation\n});`,\n ]);\n });\n\n test('instrumentation.server file contains Sentry initialization', () => {\n checkFileContents(`${projectDir}/instrumentation.server.mjs`, [\n 'import * as Sentry from \"@sentry/remix\";',\n `Sentry.init({\n dsn: \"${TEST_ARGS.PROJECT_DSN}\",\n tracesSampleRate: 1,\n autoInstrumentRemix: true\n})`,\n ]);\n });\n\n test('root file contains Sentry ErrorBoundary', () => {\n checkFileContents(`${projectDir}/app/root.tsx`, [\n 'import { captureRemixErrorBoundaryError } from \"@sentry/remix\";',\n `export const ErrorBoundary = () => {\n const error = useRouteError();\n captureRemixErrorBoundaryError(error);\n return <div>Something went wrong</div>;\n};`,\n ]);\n });\n\n test('builds correctly', async () => {\n await checkIfBuilds(projectDir, 'built');\n });\n\n test('runs on dev mode correctly', async () => {\n await checkIfRunsOnDevMode(projectDir, 'to expose');\n });\n\n test('runs on prod mode correctly', async () => {\n await checkIfRunsOnProdMode(projectDir, '[remix-serve]');\n });\n});\n"]}