tangled
alpha
login
or
join now
openstatus.dev
/
openstatus
6
fork
atom
Openstatus
www.openstatus.dev
6
fork
atom
overview
issues
pulls
pipelines
✏️ (#4)
* ✏️
* ✏️
authored by
Thibault Le Ouay
and committed by
GitHub
2 years ago
a9df6d40
9f32b432
+251
-81
10 changed files
expand all
collapse all
unified
split
apps
web
src
app
_components
hero-form.tsx
action.ts
api
send
route.ts
page.tsx
components
templates
email-template.tsx
ui
input.tsx
packages
eslint-config-custom
index.js
package.json
pnpm-lock.yaml
turbo.json
+35
apps/web/src/app/_components/hero-form.tsx
reviewed
···
1
1
+
"use client";
2
2
+
import { toast } from "@/components/ui/use-toast";
3
3
+
import { addToWaitlist } from "../action";
4
4
+
import { Input } from "@/components/ui/input";
5
5
+
import { SubmitButton } from "./submit-button";
6
6
+
7
7
+
export const HeroForm = () => {
8
8
+
return (
9
9
+
<form
10
10
+
action={async (data) => {
11
11
+
try {
12
12
+
const number = await addToWaitlist(data);
13
13
+
const formattedNumber = Intl.NumberFormat().format(number);
14
14
+
toast({
15
15
+
description: `Thank you, you're number ${formattedNumber} on the list.`,
16
16
+
});
17
17
+
} catch (e) {
18
18
+
toast({
19
19
+
description: "Something went wrong",
20
20
+
});
21
21
+
}
22
22
+
}}
23
23
+
className="flex gap-1.5"
24
24
+
>
25
25
+
<Input
26
26
+
id="email"
27
27
+
name="email"
28
28
+
type="email"
29
29
+
placeholder="me@domain.com"
30
30
+
required
31
31
+
/>
32
32
+
<SubmitButton />
33
33
+
</form>
34
34
+
);
35
35
+
};
+1
-1
apps/web/src/app/action.ts
reviewed
···
2
2
3
3
import { Resend } from "resend";
4
4
import { Redis } from "@upstash/redis";
5
5
+
import { EmailTemplate } from "@/components/templates/email-template";
5
6
import { env } from "@/env.mjs";
6
7
7
8
const redis = Redis.fromEnv();
···
51
52
from: "onboarding@openstatus.dev",
52
53
to: "maximilian@kaske.org",
53
54
subject: "Hello world",
54
54
-
// @ts-ignore FIXME:
55
55
react: EmailTemplate({ firstName: "John" }),
56
56
});
57
57
};
-1
apps/web/src/app/api/send/route.ts
reviewed
···
13
13
from: "onboarding@openstatus.dev",
14
14
to: "maximilian@kaske.org",
15
15
subject: "Hello world",
16
16
-
// @ts-ignore FIXME:
17
16
react: EmailTemplate({ firstName: "John" }),
18
17
});
19
18
+16
-38
apps/web/src/app/page.tsx
reviewed
···
1
1
-
"use client";
2
2
-
3
1
import { Badge } from "@/components/ui/badge";
4
4
-
import { Input } from "@/components/ui/input";
5
5
-
import { addToWaitlist } from "./action";
6
6
-
import { SubmitButton } from "./_components/submit-button";
7
7
-
import { toast } from "@/components/ui/use-toast";
2
2
+
3
3
+
import { Metadata } from "next";
4
4
+
import { HeroForm } from "./_components/hero-form";
5
5
+
6
6
+
export const metadata: Metadata = {
7
7
+
title: "Open-source monitoring service",
8
8
+
description:
9
9
+
"OpenStatus is an open source alternative to your current monitoring service with beautiful status page",
10
10
+
};
8
11
9
12
export default function Page() {
10
13
return (
11
14
<main className="min-h-screen w-full flex flex-col p-4 md:p-8 space-y-6">
12
15
<div className="flex-1 flex flex-col justify-center">
13
16
<div className="mx-auto max-w-xl text-center">
14
14
-
<div className="rounded-lg border border-border backdrop-blur-[2px] p-8 md:p-16">
17
17
+
<div className="rounded-lg border border-border backdrop-blur-[2px] p-8">
15
18
<Badge>Coming Soon</Badge>
16
16
-
<h1 className="text-5xl text-foreground font-cal mb-6 mt-2">
17
17
-
OpenStatus
19
19
+
<h1 className="text-3xl text-foreground font-cal mb-6 mt-2">
20
20
+
Open-source monitoring service
18
21
</h1>
19
19
-
<p className="text-muted-foreground text-lg mb-4">
20
20
-
{"Let's"} build a Saas together. Open for everyone. <br />
21
21
-
Managed or self-hosted. Pay-as-you go or plans. <br />
22
22
-
Choose your solution.
22
22
+
<p className="text-muted-foreground mb-4">
23
23
+
OpenStatus is an open source alternative to your current
24
24
+
monitoring service with beautiful status page.
23
25
</p>
24
24
-
<form
25
25
-
action={async (data) => {
26
26
-
try {
27
27
-
const number = await addToWaitlist(data);
28
28
-
const formattedNumber = Intl.NumberFormat().format(number);
29
29
-
toast({
30
30
-
description: `Thank you, you're number ${formattedNumber} on the list.`,
31
31
-
});
32
32
-
} catch (e) {
33
33
-
toast({
34
34
-
description: "Something went wrong",
35
35
-
});
36
36
-
}
37
37
-
}}
38
38
-
className="flex gap-1.5"
39
39
-
>
40
40
-
<Input
41
41
-
id="email"
42
42
-
name="email"
43
43
-
type="email"
44
44
-
placeholder="me@domain.com"
45
45
-
required
46
46
-
/>
47
47
-
<SubmitButton />
48
48
-
</form>
26
26
+
<HeroForm />
49
27
</div>
50
28
</div>
51
29
</div>
+1
-3
apps/web/src/components/templates/email-template.tsx
reviewed
···
5
5
}
6
6
7
7
// TODO: rename and content
8
8
-
export const EmailTemplate: React.FC<Readonly<EmailTemplateProps>> = ({
9
9
-
firstName,
10
10
-
}) => (
8
8
+
export const EmailTemplate = ({ firstName }: EmailTemplateProps) => (
11
9
<div>
12
10
<h1>Welcome, {firstName}!</h1>
13
11
</div>
+6
-6
apps/web/src/components/ui/input.tsx
reviewed
···
1
1
-
import * as React from "react"
1
1
+
import * as React from "react";
2
2
3
3
-
import { cn } from "@/lib/utils"
3
3
+
import { cn } from "@/lib/utils";
4
4
5
5
export interface InputProps
6
6
extends React.InputHTMLAttributes<HTMLInputElement> {}
···
17
17
ref={ref}
18
18
{...props}
19
19
/>
20
20
-
)
20
20
+
);
21
21
}
22
22
-
)
23
23
-
Input.displayName = "Input"
22
22
+
);
23
23
+
Input.displayName = "Input";
24
24
25
25
-
export { Input }
25
25
+
export { Input };
+8
-1
packages/eslint-config-custom/index.js
reviewed
···
1
1
module.exports = {
2
2
-
extends: ["next", "turbo", "prettier"],
2
2
+
extends: [
3
3
+
"next",
4
4
+
"turbo",
5
5
+
"eslint:recommended",
6
6
+
"plugin:@typescript-eslint/recommended",
7
7
+
"prettier",
8
8
+
],
3
9
rules: {
4
10
"@next/next/no-html-link-for-pages": "off",
11
11
+
"@typescript-eslint/no-empty-interface": "warn",
5
12
},
6
13
parserOptions: {
7
14
babelOptions: {
+8
packages/eslint-config-custom/package.json
reviewed
···
4
4
"main": "index.js",
5
5
"license": "MIT",
6
6
"dependencies": {
7
7
+
"@next/eslint-plugin-next": "13.4.4",
8
8
+
"@types/eslint": "8.40.0",
9
9
+
"@typescript-eslint/eslint-plugin": "5.59.7",
10
10
+
"@typescript-eslint/parser": "5.59.7",
7
11
"eslint-config-next": "13.4.6",
8
12
"eslint-config-prettier": "8.3.0",
9
13
"eslint-config-turbo": "1.10.3",
10
14
"eslint-plugin-react": "7.32.2"
15
15
+
},
16
16
+
"devDependencies": {
17
17
+
"eslint": "^8.42.0",
18
18
+
"typescript": "5.1.3"
11
19
},
12
20
"publishConfig": {
13
21
"access": "public"
+163
-30
pnpm-lock.yaml
reviewed
···
176
176
177
177
packages/eslint-config-custom:
178
178
dependencies:
179
179
+
'@next/eslint-plugin-next':
180
180
+
specifier: 13.4.4
181
181
+
version: 13.4.4
182
182
+
'@types/eslint':
183
183
+
specifier: 8.40.0
184
184
+
version: 8.40.0
185
185
+
'@typescript-eslint/eslint-plugin':
186
186
+
specifier: 5.59.7
187
187
+
version: 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.43.0)(typescript@5.1.3)
188
188
+
'@typescript-eslint/parser':
189
189
+
specifier: 5.59.7
190
190
+
version: 5.59.7(eslint@8.43.0)(typescript@5.1.3)
179
191
eslint-config-next:
180
192
specifier: 13.4.6
181
193
version: 13.4.6(eslint@8.43.0)(typescript@5.1.3)
···
188
200
eslint-plugin-react:
189
201
specifier: 7.32.2
190
202
version: 7.32.2(eslint@8.43.0)
203
203
+
devDependencies:
204
204
+
eslint:
205
205
+
specifier: ^8.42.0
206
206
+
version: 8.43.0
207
207
+
typescript:
208
208
+
specifier: 5.1.3
209
209
+
version: 5.1.3
191
210
192
211
packages/tsconfig: {}
193
212
···
416
435
417
436
/@next/env@13.4.6:
418
437
resolution: {integrity: sha512-nqUxEtvDqFhmV1/awSg0K2XHNwkftNaiUqCYO9e6+MYmqNObpKVl7OgMkGaQ2SZnFx5YqF0t60ZJTlyJIDAijg==}
438
438
+
dev: false
439
439
+
440
440
+
/@next/eslint-plugin-next@13.4.4:
441
441
+
resolution: {integrity: sha512-5jnh7q6I15efnjR/rR+/TGTc9hn53g3JTbEjAMjmeQiExKqEUgIXqrHI5zlTNlNyzCPkBB860/ctxXheZaF2Vw==}
442
442
+
dependencies:
443
443
+
glob: 7.1.7
419
444
dev: false
420
445
421
446
/@next/eslint-plugin-next@13.4.6:
···
946
971
'@types/node': 20.3.1
947
972
dev: false
948
973
974
974
+
/@types/eslint@8.40.0:
975
975
+
resolution: {integrity: sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==}
976
976
+
dependencies:
977
977
+
'@types/estree': 1.0.1
978
978
+
'@types/json-schema': 7.0.12
979
979
+
dev: false
980
980
+
981
981
+
/@types/estree@1.0.1:
982
982
+
resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
983
983
+
dev: false
984
984
+
949
985
/@types/express-serve-static-core@4.17.35:
950
986
resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==}
951
987
dependencies:
···
977
1013
'@types/through': 0.0.30
978
1014
rxjs: 6.6.7
979
1015
dev: true
1016
1016
+
1017
1017
+
/@types/json-schema@7.0.12:
1018
1018
+
resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
1019
1019
+
dev: false
980
1020
981
1021
/@types/json5@0.0.29:
982
1022
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
···
1038
1078
/@types/scheduler@0.16.3:
1039
1079
resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
1040
1080
1081
1081
+
/@types/semver@7.5.0:
1082
1082
+
resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
1083
1083
+
dev: false
1084
1084
+
1041
1085
/@types/send@0.17.1:
1042
1086
resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==}
1043
1087
dependencies:
···
1058
1102
'@types/node': 20.3.1
1059
1103
dev: true
1060
1104
1061
1061
-
/@typescript-eslint/parser@5.59.11(eslint@8.43.0)(typescript@5.1.3):
1062
1062
-
resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==}
1105
1105
+
/@typescript-eslint/eslint-plugin@5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.43.0)(typescript@5.1.3):
1106
1106
+
resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==}
1063
1107
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1064
1108
peerDependencies:
1109
1109
+
'@typescript-eslint/parser': ^5.0.0
1065
1110
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1066
1111
typescript: '*'
1067
1112
peerDependenciesMeta:
1068
1113
typescript:
1069
1114
optional: true
1070
1115
dependencies:
1071
1071
-
'@typescript-eslint/scope-manager': 5.59.11
1072
1072
-
'@typescript-eslint/types': 5.59.11
1073
1073
-
'@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3)
1116
1116
+
'@eslint-community/regexpp': 4.5.1
1117
1117
+
'@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
1118
1118
+
'@typescript-eslint/scope-manager': 5.59.7
1119
1119
+
'@typescript-eslint/type-utils': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
1120
1120
+
'@typescript-eslint/utils': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
1074
1121
debug: 4.3.4
1075
1122
eslint: 8.43.0
1123
1123
+
grapheme-splitter: 1.0.4
1124
1124
+
ignore: 5.2.4
1125
1125
+
natural-compare-lite: 1.4.0
1126
1126
+
semver: 7.5.2
1127
1127
+
tsutils: 3.21.0(typescript@5.1.3)
1076
1128
typescript: 5.1.3
1077
1129
transitivePeerDependencies:
1078
1130
- supports-color
1079
1131
dev: false
1080
1132
1081
1081
-
/@typescript-eslint/scope-manager@5.59.11:
1082
1082
-
resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==}
1133
1133
+
/@typescript-eslint/parser@5.59.7(eslint@8.43.0)(typescript@5.1.3):
1134
1134
+
resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==}
1083
1135
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1136
1136
+
peerDependencies:
1137
1137
+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1138
1138
+
typescript: '*'
1139
1139
+
peerDependenciesMeta:
1140
1140
+
typescript:
1141
1141
+
optional: true
1084
1142
dependencies:
1085
1085
-
'@typescript-eslint/types': 5.59.11
1086
1086
-
'@typescript-eslint/visitor-keys': 5.59.11
1143
1143
+
'@typescript-eslint/scope-manager': 5.59.7
1144
1144
+
'@typescript-eslint/types': 5.59.7
1145
1145
+
'@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.3)
1146
1146
+
debug: 4.3.4
1147
1147
+
eslint: 8.43.0
1148
1148
+
typescript: 5.1.3
1149
1149
+
transitivePeerDependencies:
1150
1150
+
- supports-color
1151
1151
+
dev: false
1152
1152
+
1153
1153
+
/@typescript-eslint/scope-manager@5.59.7:
1154
1154
+
resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==}
1155
1155
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1156
1156
+
dependencies:
1157
1157
+
'@typescript-eslint/types': 5.59.7
1158
1158
+
'@typescript-eslint/visitor-keys': 5.59.7
1159
1159
+
dev: false
1160
1160
+
1161
1161
+
/@typescript-eslint/type-utils@5.59.7(eslint@8.43.0)(typescript@5.1.3):
1162
1162
+
resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==}
1163
1163
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1164
1164
+
peerDependencies:
1165
1165
+
eslint: '*'
1166
1166
+
typescript: '*'
1167
1167
+
peerDependenciesMeta:
1168
1168
+
typescript:
1169
1169
+
optional: true
1170
1170
+
dependencies:
1171
1171
+
'@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.3)
1172
1172
+
'@typescript-eslint/utils': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
1173
1173
+
debug: 4.3.4
1174
1174
+
eslint: 8.43.0
1175
1175
+
tsutils: 3.21.0(typescript@5.1.3)
1176
1176
+
typescript: 5.1.3
1177
1177
+
transitivePeerDependencies:
1178
1178
+
- supports-color
1087
1179
dev: false
1088
1180
1089
1089
-
/@typescript-eslint/types@5.59.11:
1090
1090
-
resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==}
1181
1181
+
/@typescript-eslint/types@5.59.7:
1182
1182
+
resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==}
1091
1183
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1092
1184
dev: false
1093
1185
1094
1094
-
/@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.3):
1095
1095
-
resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==}
1186
1186
+
/@typescript-eslint/typescript-estree@5.59.7(typescript@5.1.3):
1187
1187
+
resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==}
1096
1188
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1097
1189
peerDependencies:
1098
1190
typescript: '*'
···
1100
1192
typescript:
1101
1193
optional: true
1102
1194
dependencies:
1103
1103
-
'@typescript-eslint/types': 5.59.11
1104
1104
-
'@typescript-eslint/visitor-keys': 5.59.11
1195
1195
+
'@typescript-eslint/types': 5.59.7
1196
1196
+
'@typescript-eslint/visitor-keys': 5.59.7
1105
1197
debug: 4.3.4
1106
1198
globby: 11.1.0
1107
1199
is-glob: 4.0.3
···
1112
1204
- supports-color
1113
1205
dev: false
1114
1206
1115
1115
-
/@typescript-eslint/visitor-keys@5.59.11:
1116
1116
-
resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==}
1207
1207
+
/@typescript-eslint/utils@5.59.7(eslint@8.43.0)(typescript@5.1.3):
1208
1208
+
resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==}
1117
1209
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1210
1210
+
peerDependencies:
1211
1211
+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1118
1212
dependencies:
1119
1119
-
'@typescript-eslint/types': 5.59.11
1213
1213
+
'@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0)
1214
1214
+
'@types/json-schema': 7.0.12
1215
1215
+
'@types/semver': 7.5.0
1216
1216
+
'@typescript-eslint/scope-manager': 5.59.7
1217
1217
+
'@typescript-eslint/types': 5.59.7
1218
1218
+
'@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.3)
1219
1219
+
eslint: 8.43.0
1220
1220
+
eslint-scope: 5.1.1
1221
1221
+
semver: 7.5.2
1222
1222
+
transitivePeerDependencies:
1223
1223
+
- supports-color
1224
1224
+
- typescript
1225
1225
+
dev: false
1226
1226
+
1227
1227
+
/@typescript-eslint/visitor-keys@5.59.7:
1228
1228
+
resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==}
1229
1229
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1230
1230
+
dependencies:
1231
1231
+
'@typescript-eslint/types': 5.59.7
1120
1232
eslint-visitor-keys: 3.4.1
1121
1233
dev: false
1122
1234
···
2333
2445
dependencies:
2334
2446
'@next/eslint-plugin-next': 13.4.6
2335
2447
'@rushstack/eslint-patch': 1.3.2
2336
2336
-
'@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3)
2448
2448
+
'@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
2337
2449
eslint: 8.43.0
2338
2450
eslint-import-resolver-node: 0.3.7
2339
2339
-
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0)
2340
2340
-
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2451
2451
+
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0)
2452
2452
+
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2341
2453
eslint-plugin-jsx-a11y: 6.7.1(eslint@8.43.0)
2342
2454
eslint-plugin-react: 7.32.2(eslint@8.43.0)
2343
2455
eslint-plugin-react-hooks: 4.6.0(eslint@8.43.0)
···
2375
2487
- supports-color
2376
2488
dev: false
2377
2489
2378
2378
-
/eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0):
2490
2490
+
/eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0):
2379
2491
resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==}
2380
2492
engines: {node: ^14.18.0 || >=16.0.0}
2381
2493
peerDependencies:
···
2385
2497
debug: 4.3.4
2386
2498
enhanced-resolve: 5.15.0
2387
2499
eslint: 8.43.0
2388
2388
-
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2389
2389
-
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2500
2500
+
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2501
2501
+
eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2390
2502
get-tsconfig: 4.6.0
2391
2503
globby: 13.1.4
2392
2504
is-core-module: 2.12.1
···
2399
2511
- supports-color
2400
2512
dev: false
2401
2513
2402
2402
-
/eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0):
2514
2514
+
/eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0):
2403
2515
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
2404
2516
engines: {node: '>=4'}
2405
2517
peerDependencies:
···
2420
2532
eslint-import-resolver-webpack:
2421
2533
optional: true
2422
2534
dependencies:
2423
2423
-
'@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3)
2535
2535
+
'@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
2424
2536
debug: 3.2.7
2425
2537
eslint: 8.43.0
2426
2538
eslint-import-resolver-node: 0.3.7
2427
2427
-
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0)
2539
2539
+
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0)
2428
2540
transitivePeerDependencies:
2429
2541
- supports-color
2430
2542
dev: false
2431
2543
2432
2432
-
/eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0):
2544
2544
+
/eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0):
2433
2545
resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
2434
2546
engines: {node: '>=4'}
2435
2547
peerDependencies:
···
2439
2551
'@typescript-eslint/parser':
2440
2552
optional: true
2441
2553
dependencies:
2442
2442
-
'@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3)
2554
2554
+
'@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3)
2443
2555
array-includes: 3.1.6
2444
2556
array.prototype.flat: 1.3.1
2445
2557
array.prototype.flatmap: 1.3.1
···
2447
2559
doctrine: 2.1.0
2448
2560
eslint: 8.43.0
2449
2561
eslint-import-resolver-node: 0.3.7
2450
2450
-
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2562
2562
+
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
2451
2563
has: 1.0.3
2452
2564
is-core-module: 2.12.1
2453
2565
is-glob: 4.0.3
···
2528
2640
eslint: 8.43.0
2529
2641
dev: false
2530
2642
2643
2643
+
/eslint-scope@5.1.1:
2644
2644
+
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
2645
2645
+
engines: {node: '>=8.0.0'}
2646
2646
+
dependencies:
2647
2647
+
esrecurse: 4.3.0
2648
2648
+
estraverse: 4.3.0
2649
2649
+
dev: false
2650
2650
+
2531
2651
/eslint-scope@7.2.0:
2532
2652
resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==}
2533
2653
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
···
2605
2725
engines: {node: '>=4.0'}
2606
2726
dependencies:
2607
2727
estraverse: 5.3.0
2728
2728
+
2729
2729
+
/estraverse@4.3.0:
2730
2730
+
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
2731
2731
+
engines: {node: '>=4.0'}
2732
2732
+
dev: false
2608
2733
2609
2734
/estraverse@5.3.0:
2610
2735
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
···
2950
3075
2951
3076
/graceful-fs@4.2.11:
2952
3077
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
3078
3078
+
3079
3079
+
/grapheme-splitter@1.0.4:
3080
3080
+
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
3081
3081
+
dev: false
2953
3082
2954
3083
/graphemer@1.4.0:
2955
3084
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
···
3667
3796
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
3668
3797
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
3669
3798
hasBin: true
3799
3799
+
3800
3800
+
/natural-compare-lite@1.4.0:
3801
3801
+
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
3802
3802
+
dev: false
3670
3803
3671
3804
/natural-compare@1.4.0:
3672
3805
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+13
-1
turbo.json
reviewed
···
4
4
"pipeline": {
5
5
"build": {
6
6
"dependsOn": ["^build"],
7
7
-
"env": ["*", "RESEND_API_KEY", "!NEXT_PUBLIC_GIT_*"],
7
7
+
"env": [
8
8
+
"*",
9
9
+
"RESEND_API_KEY",
10
10
+
"!NEXT_PUBLIC_GIT_*",
11
11
+
"DATABASE_URL",
12
12
+
"TINY_BIRD_API_KEY",
13
13
+
"CLERK_SECRET_KEY",
14
14
+
"NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY",
15
15
+
"NEXT_PUBLIC_CLERK_SIGN_IN_URL",
16
16
+
"NEXT_PUBLIC_CLERK_SIGN_UP_URL",
17
17
+
"NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL",
18
18
+
"NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL"
19
19
+
],
8
20
"outputs": [".next/**", "!.next/cache/**"]
9
21
},
10
22
"lint": {},