@epic-web/workshop-utils 0.0.0-semantically-released
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/README.md +3 -0
- package/dist/esm/apps.server.d.ts +4205 -0
- package/dist/esm/apps.server.d.ts.map +1 -0
- package/dist/esm/apps.server.js +1198 -0
- package/dist/esm/apps.server.js.map +1 -0
- package/dist/esm/cache.server.d.ts +940 -0
- package/dist/esm/cache.server.d.ts.map +1 -0
- package/dist/esm/cache.server.js +161 -0
- package/dist/esm/cache.server.js.map +1 -0
- package/dist/esm/compile-mdx.server.d.ts +12 -0
- package/dist/esm/compile-mdx.server.d.ts.map +1 -0
- package/dist/esm/compile-mdx.server.js +285 -0
- package/dist/esm/compile-mdx.server.js.map +1 -0
- package/dist/esm/config.server.d.ts +348 -0
- package/dist/esm/config.server.d.ts.map +1 -0
- package/dist/esm/config.server.js +231 -0
- package/dist/esm/config.server.js.map +1 -0
- package/dist/esm/db.server.d.ts +463 -0
- package/dist/esm/db.server.d.ts.map +1 -0
- package/dist/esm/db.server.js +260 -0
- package/dist/esm/db.server.js.map +1 -0
- package/dist/esm/diff.server.d.ts +18 -0
- package/dist/esm/diff.server.d.ts.map +1 -0
- package/dist/esm/diff.server.js +437 -0
- package/dist/esm/diff.server.js.map +1 -0
- package/dist/esm/env.server.d.ts +61 -0
- package/dist/esm/env.server.d.ts.map +1 -0
- package/dist/esm/env.server.js +42 -0
- package/dist/esm/env.server.js.map +1 -0
- package/dist/esm/epic-api.server.d.ts +227 -0
- package/dist/esm/epic-api.server.d.ts.map +1 -0
- package/dist/esm/epic-api.server.js +529 -0
- package/dist/esm/epic-api.server.js.map +1 -0
- package/dist/esm/git.server.d.ts +49 -0
- package/dist/esm/git.server.d.ts.map +1 -0
- package/dist/esm/git.server.js +135 -0
- package/dist/esm/git.server.js.map +1 -0
- package/dist/esm/iframe-sync.d.ts +10 -0
- package/dist/esm/iframe-sync.d.ts.map +1 -0
- package/dist/esm/iframe-sync.js +97 -0
- package/dist/esm/iframe-sync.js.map +1 -0
- package/dist/esm/modified-time.server.d.ts +7 -0
- package/dist/esm/modified-time.server.d.ts.map +1 -0
- package/dist/esm/modified-time.server.js +80 -0
- package/dist/esm/modified-time.server.js.map +1 -0
- package/dist/esm/notifications.server.d.ts +56 -0
- package/dist/esm/notifications.server.d.ts.map +1 -0
- package/dist/esm/notifications.server.js +65 -0
- package/dist/esm/notifications.server.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/playwright.server.d.ts +6 -0
- package/dist/esm/playwright.server.d.ts.map +1 -0
- package/dist/esm/playwright.server.js +95 -0
- package/dist/esm/playwright.server.js.map +1 -0
- package/dist/esm/process-manager.server.d.ts +77 -0
- package/dist/esm/process-manager.server.d.ts.map +1 -0
- package/dist/esm/process-manager.server.js +266 -0
- package/dist/esm/process-manager.server.js.map +1 -0
- package/dist/esm/test.d.ts +16 -0
- package/dist/esm/test.d.ts.map +1 -0
- package/dist/esm/test.js +56 -0
- package/dist/esm/test.js.map +1 -0
- package/dist/esm/timing.server.d.ts +20 -0
- package/dist/esm/timing.server.d.ts.map +1 -0
- package/dist/esm/timing.server.js +88 -0
- package/dist/esm/timing.server.js.map +1 -0
- package/dist/esm/user.server.d.ts +17 -0
- package/dist/esm/user.server.d.ts.map +1 -0
- package/dist/esm/user.server.js +38 -0
- package/dist/esm/user.server.js.map +1 -0
- package/dist/esm/utils.d.ts +2 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +13 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/utils.server.d.ts +9 -0
- package/dist/esm/utils.server.d.ts.map +1 -0
- package/dist/esm/utils.server.js +45 -0
- package/dist/esm/utils.server.js.map +1 -0
- package/package.json +221 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { createId as cuid } from '@paralleldrive/cuid2';
|
|
4
|
+
import fsExtra from 'fs-extra';
|
|
5
|
+
import { redirect } from 'react-router';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { getWorkshopConfig } from './config.server.js';
|
|
8
|
+
const TokenSetSchema = z.object({
|
|
9
|
+
access_token: z.string(),
|
|
10
|
+
token_type: z.string(),
|
|
11
|
+
scope: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export const PlayerPreferencesSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
minResolution: z.number().optional(),
|
|
16
|
+
maxResolution: z.number().optional(),
|
|
17
|
+
volumeRate: z.number().optional(),
|
|
18
|
+
playbackRate: z.number().optional(),
|
|
19
|
+
autoplay: z.boolean().optional(),
|
|
20
|
+
subtitle: z
|
|
21
|
+
.object({
|
|
22
|
+
id: z.string().nullable().default(null),
|
|
23
|
+
mode: z
|
|
24
|
+
.literal('disabled')
|
|
25
|
+
.or(z.literal('hidden'))
|
|
26
|
+
.or(z.literal('showing'))
|
|
27
|
+
.nullable()
|
|
28
|
+
.default('disabled'),
|
|
29
|
+
})
|
|
30
|
+
.optional()
|
|
31
|
+
.default({}),
|
|
32
|
+
muted: z.boolean().optional(),
|
|
33
|
+
theater: z.boolean().optional(),
|
|
34
|
+
defaultView: z.string().optional(),
|
|
35
|
+
activeSidebarTab: z.number().optional(),
|
|
36
|
+
})
|
|
37
|
+
.optional()
|
|
38
|
+
.default({});
|
|
39
|
+
const PresencePreferencesSchema = z
|
|
40
|
+
.object({
|
|
41
|
+
optOut: z.boolean(),
|
|
42
|
+
})
|
|
43
|
+
.optional()
|
|
44
|
+
.default({ optOut: false });
|
|
45
|
+
const AuthInfoSchema = z.object({
|
|
46
|
+
id: z.string(),
|
|
47
|
+
tokenSet: TokenSetSchema,
|
|
48
|
+
email: z.string(),
|
|
49
|
+
name: z.string().nullable().optional(),
|
|
50
|
+
});
|
|
51
|
+
const MutedNotificationSchema = z.array(z.string()).default([]);
|
|
52
|
+
const DataSchema = z.object({
|
|
53
|
+
onboarding: z
|
|
54
|
+
.object({
|
|
55
|
+
tourVideosWatched: z.array(z.string()).default([]),
|
|
56
|
+
})
|
|
57
|
+
.passthrough()
|
|
58
|
+
.optional()
|
|
59
|
+
.default({ tourVideosWatched: [] }),
|
|
60
|
+
preferences: z
|
|
61
|
+
.object({
|
|
62
|
+
player: PlayerPreferencesSchema,
|
|
63
|
+
presence: PresencePreferencesSchema,
|
|
64
|
+
playground: z
|
|
65
|
+
.object({
|
|
66
|
+
persist: z.boolean().default(false),
|
|
67
|
+
})
|
|
68
|
+
.optional(),
|
|
69
|
+
fontSize: z.number().optional(),
|
|
70
|
+
})
|
|
71
|
+
.optional()
|
|
72
|
+
.default({}),
|
|
73
|
+
// deprecated. Probably safe to remove in May 2026:
|
|
74
|
+
authInfo: AuthInfoSchema.optional(),
|
|
75
|
+
// new:
|
|
76
|
+
authInfos: z.record(z.string(), AuthInfoSchema).optional(),
|
|
77
|
+
clientId: z.string().optional(),
|
|
78
|
+
mutedNotifications: MutedNotificationSchema.optional(),
|
|
79
|
+
});
|
|
80
|
+
const appDir = path.join(os.homedir(), '.epicshop');
|
|
81
|
+
const dbPath = path.join(appDir, 'data.json');
|
|
82
|
+
export async function getClientId() {
|
|
83
|
+
const data = await readDb();
|
|
84
|
+
if (data?.clientId)
|
|
85
|
+
return data.clientId;
|
|
86
|
+
const clientId = cuid();
|
|
87
|
+
await fsExtra.ensureDir(appDir);
|
|
88
|
+
await fsExtra.writeJSON(dbPath, { ...data, clientId });
|
|
89
|
+
return clientId;
|
|
90
|
+
}
|
|
91
|
+
export async function logout() {
|
|
92
|
+
const config = getWorkshopConfig();
|
|
93
|
+
const host = config.product.host;
|
|
94
|
+
if (host) {
|
|
95
|
+
const data = await readDb();
|
|
96
|
+
const newAuthInfos = { ...data?.authInfos };
|
|
97
|
+
delete newAuthInfos[host];
|
|
98
|
+
await fsExtra.writeJSON(dbPath, {
|
|
99
|
+
...data,
|
|
100
|
+
authInfos: newAuthInfos,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export async function deleteDb() {
|
|
105
|
+
if (process.env.EPICSHOP_DEPLOYED)
|
|
106
|
+
return null;
|
|
107
|
+
try {
|
|
108
|
+
if (await fsExtra.exists(dbPath)) {
|
|
109
|
+
await fsExtra.remove(dbPath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error(`Error deleting the database in ${dbPath}`, error);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async function readDb() {
|
|
117
|
+
if (process.env.EPICSHOP_DEPLOYED)
|
|
118
|
+
return null;
|
|
119
|
+
try {
|
|
120
|
+
if (await fsExtra.exists(dbPath)) {
|
|
121
|
+
const db = DataSchema.parse(await fsExtra.readJSON(dbPath));
|
|
122
|
+
return db;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error(`Error reading the database in ${dbPath}, moving it to a .bkp file to avoid parsing errors in the future`, error);
|
|
127
|
+
void fsExtra.move(dbPath, `${dbPath}.bkp`).catch(() => { });
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
export async function getAuthInfo() {
|
|
132
|
+
const config = getWorkshopConfig();
|
|
133
|
+
const data = await readDb();
|
|
134
|
+
if (config.product.host && typeof data?.authInfos === 'object') {
|
|
135
|
+
if (config.product.host in data.authInfos) {
|
|
136
|
+
return data.authInfos[config.product.host];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// special case for non-epicweb/epicreact workshops
|
|
140
|
+
if (!config.product.host ||
|
|
141
|
+
config.product.host === 'epicweb.dev' ||
|
|
142
|
+
config.product.host === 'epicreact.dev') {
|
|
143
|
+
// upgrade from old authInfo to new authInfos
|
|
144
|
+
if (data?.authInfo && config.product.host) {
|
|
145
|
+
await setAuthInfo(data.authInfo);
|
|
146
|
+
}
|
|
147
|
+
return data?.authInfo ?? null;
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
export async function requireAuthInfo({ request, redirectTo, }) {
|
|
152
|
+
const authInfo = await getAuthInfo();
|
|
153
|
+
if (!authInfo) {
|
|
154
|
+
const requestUrl = new URL(request.url);
|
|
155
|
+
redirectTo =
|
|
156
|
+
redirectTo === null
|
|
157
|
+
? null
|
|
158
|
+
: (redirectTo ?? `${requestUrl.pathname}${requestUrl.search}`);
|
|
159
|
+
const loginParams = redirectTo ? new URLSearchParams({ redirectTo }) : null;
|
|
160
|
+
const loginRedirect = ['/login', loginParams?.toString()]
|
|
161
|
+
.filter(Boolean)
|
|
162
|
+
.join('?');
|
|
163
|
+
throw redirect(loginRedirect);
|
|
164
|
+
}
|
|
165
|
+
return authInfo;
|
|
166
|
+
}
|
|
167
|
+
export async function setAuthInfo({ id, tokenSet, email = 'unknown@example.com', name, }) {
|
|
168
|
+
const data = await readDb();
|
|
169
|
+
const authInfo = AuthInfoSchema.parse({ id, tokenSet, email, name });
|
|
170
|
+
await fsExtra.ensureDir(appDir);
|
|
171
|
+
const config = getWorkshopConfig();
|
|
172
|
+
if (config.product.host) {
|
|
173
|
+
await fsExtra.writeJSON(dbPath, {
|
|
174
|
+
...data,
|
|
175
|
+
authInfos: {
|
|
176
|
+
...data?.authInfos,
|
|
177
|
+
[config.product.host]: authInfo,
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
await fsExtra.writeJSON(dbPath, { ...data, authInfo });
|
|
183
|
+
}
|
|
184
|
+
return authInfo;
|
|
185
|
+
}
|
|
186
|
+
export async function getPreferences() {
|
|
187
|
+
const data = await readDb();
|
|
188
|
+
return data?.preferences ?? null;
|
|
189
|
+
}
|
|
190
|
+
export async function setPreferences(preferences) {
|
|
191
|
+
const data = await readDb();
|
|
192
|
+
const updatedData = {
|
|
193
|
+
...data,
|
|
194
|
+
preferences: {
|
|
195
|
+
...data?.preferences,
|
|
196
|
+
...preferences,
|
|
197
|
+
player: {
|
|
198
|
+
...data?.preferences?.player,
|
|
199
|
+
...preferences?.player,
|
|
200
|
+
},
|
|
201
|
+
presence: {
|
|
202
|
+
...data?.preferences?.presence,
|
|
203
|
+
...preferences?.presence,
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
await fsExtra.ensureDir(appDir);
|
|
208
|
+
await fsExtra.writeJSON(dbPath, updatedData);
|
|
209
|
+
return updatedData.preferences;
|
|
210
|
+
}
|
|
211
|
+
export async function getMutedNotifications() {
|
|
212
|
+
const data = await readDb();
|
|
213
|
+
return data?.mutedNotifications ?? [];
|
|
214
|
+
}
|
|
215
|
+
export async function muteNotification(id) {
|
|
216
|
+
const data = await readDb();
|
|
217
|
+
const mutedNotifications = Array.from(new Set([...(data?.mutedNotifications ?? []), id]));
|
|
218
|
+
const updatedData = {
|
|
219
|
+
...data,
|
|
220
|
+
mutedNotifications,
|
|
221
|
+
};
|
|
222
|
+
await fsExtra.ensureDir(appDir);
|
|
223
|
+
await fsExtra.writeJSON(dbPath, updatedData);
|
|
224
|
+
return mutedNotifications;
|
|
225
|
+
}
|
|
226
|
+
export async function setFontSizePreference(fontSize) {
|
|
227
|
+
const data = await readDb();
|
|
228
|
+
const updatedData = {
|
|
229
|
+
...data,
|
|
230
|
+
preferences: { ...data?.preferences, fontSize },
|
|
231
|
+
};
|
|
232
|
+
await fsExtra.ensureDir(appDir);
|
|
233
|
+
await fsExtra.writeJSON(dbPath, updatedData);
|
|
234
|
+
return updatedData.preferences.fontSize;
|
|
235
|
+
}
|
|
236
|
+
export async function getFontSizePreference() {
|
|
237
|
+
const data = await readDb();
|
|
238
|
+
return data?.preferences?.fontSize ?? null;
|
|
239
|
+
}
|
|
240
|
+
export async function readOnboardingData() {
|
|
241
|
+
const data = await readDb();
|
|
242
|
+
return data?.onboarding ?? null;
|
|
243
|
+
}
|
|
244
|
+
export async function markOnboardingVideoWatched(videoUrl) {
|
|
245
|
+
const data = await readDb();
|
|
246
|
+
const updatedData = {
|
|
247
|
+
...data,
|
|
248
|
+
onboarding: {
|
|
249
|
+
...data?.onboarding,
|
|
250
|
+
tourVideosWatched: [
|
|
251
|
+
...(data?.onboarding.tourVideosWatched ?? []),
|
|
252
|
+
videoUrl,
|
|
253
|
+
].filter(Boolean),
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
await fsExtra.ensureDir(appDir);
|
|
257
|
+
await fsExtra.writeJSON(dbPath, updatedData);
|
|
258
|
+
return updatedData.onboarding;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=db.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.server.js","sourceRoot":"","sources":["../../src/db.server.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'os'\nimport path from 'path'\nimport { createId as cuid } from '@paralleldrive/cuid2'\nimport fsExtra from 'fs-extra'\nimport { redirect } from 'react-router'\nimport { z } from 'zod'\nimport { getWorkshopConfig } from './config.server.js'\n\nconst TokenSetSchema = z.object({\n\taccess_token: z.string(),\n\ttoken_type: z.string(),\n\tscope: z.string(),\n})\nexport const PlayerPreferencesSchema = z\n\t.object({\n\t\tminResolution: z.number().optional(),\n\t\tmaxResolution: z.number().optional(),\n\t\tvolumeRate: z.number().optional(),\n\t\tplaybackRate: z.number().optional(),\n\t\tautoplay: z.boolean().optional(),\n\t\tsubtitle: z\n\t\t\t.object({\n\t\t\t\tid: z.string().nullable().default(null),\n\t\t\t\tmode: z\n\t\t\t\t\t.literal('disabled')\n\t\t\t\t\t.or(z.literal('hidden'))\n\t\t\t\t\t.or(z.literal('showing'))\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.default('disabled'),\n\t\t\t})\n\t\t\t.optional()\n\t\t\t.default({}),\n\t\tmuted: z.boolean().optional(),\n\t\ttheater: z.boolean().optional(),\n\t\tdefaultView: z.string().optional(),\n\t\tactiveSidebarTab: z.number().optional(),\n\t})\n\t.optional()\n\t.default({})\n\nconst PresencePreferencesSchema = z\n\t.object({\n\t\toptOut: z.boolean(),\n\t})\n\t.optional()\n\t.default({ optOut: false })\n\nconst AuthInfoSchema = z.object({\n\tid: z.string(),\n\ttokenSet: TokenSetSchema,\n\temail: z.string(),\n\tname: z.string().nullable().optional(),\n})\n\nconst MutedNotificationSchema = z.array(z.string()).default([])\n\nconst DataSchema = z.object({\n\tonboarding: z\n\t\t.object({\n\t\t\ttourVideosWatched: z.array(z.string()).default([]),\n\t\t})\n\t\t.passthrough()\n\t\t.optional()\n\t\t.default({ tourVideosWatched: [] }),\n\tpreferences: z\n\t\t.object({\n\t\t\tplayer: PlayerPreferencesSchema,\n\t\t\tpresence: PresencePreferencesSchema,\n\t\t\tplayground: z\n\t\t\t\t.object({\n\t\t\t\t\tpersist: z.boolean().default(false),\n\t\t\t\t})\n\t\t\t\t.optional(),\n\t\t\tfontSize: z.number().optional(),\n\t\t})\n\t\t.optional()\n\t\t.default({}),\n\t// deprecated. Probably safe to remove in May 2026:\n\tauthInfo: AuthInfoSchema.optional(),\n\t// new:\n\tauthInfos: z.record(z.string(), AuthInfoSchema).optional(),\n\tclientId: z.string().optional(),\n\tmutedNotifications: MutedNotificationSchema.optional(),\n})\n\nconst appDir = path.join(os.homedir(), '.epicshop')\nconst dbPath = path.join(appDir, 'data.json')\n\nexport async function getClientId() {\n\tconst data = await readDb()\n\tif (data?.clientId) return data.clientId\n\n\tconst clientId = cuid()\n\tawait fsExtra.ensureDir(appDir)\n\tawait fsExtra.writeJSON(dbPath, { ...data, clientId })\n\treturn clientId\n}\n\nexport async function logout() {\n\tconst config = getWorkshopConfig()\n\tconst host = config.product.host\n\tif (host) {\n\t\tconst data = await readDb()\n\t\tconst newAuthInfos = { ...data?.authInfos }\n\t\tdelete newAuthInfos[host]\n\t\tawait fsExtra.writeJSON(dbPath, {\n\t\t\t...data,\n\t\t\tauthInfos: newAuthInfos,\n\t\t})\n\t}\n}\n\nexport async function deleteDb() {\n\tif (process.env.EPICSHOP_DEPLOYED) return null\n\n\ttry {\n\t\tif (await fsExtra.exists(dbPath)) {\n\t\t\tawait fsExtra.remove(dbPath)\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(`Error deleting the database in ${dbPath}`, error)\n\t}\n}\n\nasync function readDb() {\n\tif (process.env.EPICSHOP_DEPLOYED) return null\n\n\ttry {\n\t\tif (await fsExtra.exists(dbPath)) {\n\t\t\tconst db = DataSchema.parse(await fsExtra.readJSON(dbPath))\n\t\t\treturn db\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Error reading the database in ${dbPath}, moving it to a .bkp file to avoid parsing errors in the future`,\n\t\t\terror,\n\t\t)\n\t\tvoid fsExtra.move(dbPath, `${dbPath}.bkp`).catch(() => {})\n\t}\n\treturn null\n}\n\nexport async function getAuthInfo() {\n\tconst config = getWorkshopConfig()\n\tconst data = await readDb()\n\tif (config.product.host && typeof data?.authInfos === 'object') {\n\t\tif (config.product.host in data.authInfos) {\n\t\t\treturn data.authInfos[config.product.host]\n\t\t}\n\t}\n\n\t// special case for non-epicweb/epicreact workshops\n\tif (\n\t\t!config.product.host ||\n\t\tconfig.product.host === 'epicweb.dev' ||\n\t\tconfig.product.host === 'epicreact.dev'\n\t) {\n\t\t// upgrade from old authInfo to new authInfos\n\t\tif (data?.authInfo && config.product.host) {\n\t\t\tawait setAuthInfo(data.authInfo)\n\t\t}\n\t\treturn data?.authInfo ?? null\n\t}\n\n\treturn null\n}\n\nexport async function requireAuthInfo({\n\trequest,\n\tredirectTo,\n}: {\n\trequest: Request\n\tredirectTo?: string | null\n}) {\n\tconst authInfo = await getAuthInfo()\n\tif (!authInfo) {\n\t\tconst requestUrl = new URL(request.url)\n\t\tredirectTo =\n\t\t\tredirectTo === null\n\t\t\t\t? null\n\t\t\t\t: (redirectTo ?? `${requestUrl.pathname}${requestUrl.search}`)\n\t\tconst loginParams = redirectTo ? new URLSearchParams({ redirectTo }) : null\n\t\tconst loginRedirect = ['/login', loginParams?.toString()]\n\t\t\t.filter(Boolean)\n\t\t\t.join('?')\n\t\tthrow redirect(loginRedirect)\n\t}\n\treturn authInfo\n}\n\nexport async function setAuthInfo({\n\tid,\n\ttokenSet,\n\temail = 'unknown@example.com',\n\tname,\n}: {\n\tid: string\n\ttokenSet: Partial<z.infer<typeof TokenSetSchema>>\n\temail?: string | null\n\tname?: string | null\n}) {\n\tconst data = await readDb()\n\tconst authInfo = AuthInfoSchema.parse({ id, tokenSet, email, name })\n\tawait fsExtra.ensureDir(appDir)\n\tconst config = getWorkshopConfig()\n\tif (config.product.host) {\n\t\tawait fsExtra.writeJSON(dbPath, {\n\t\t\t...data,\n\t\t\tauthInfos: {\n\t\t\t\t...data?.authInfos,\n\t\t\t\t[config.product.host]: authInfo,\n\t\t\t},\n\t\t})\n\t} else {\n\t\tawait fsExtra.writeJSON(dbPath, { ...data, authInfo })\n\t}\n\treturn authInfo\n}\n\nexport async function getPreferences() {\n\tconst data = await readDb()\n\treturn data?.preferences ?? null\n}\n\nexport async function setPreferences(\n\tpreferences: z.input<typeof DataSchema>['preferences'],\n) {\n\tconst data = await readDb()\n\tconst updatedData = {\n\t\t...data,\n\t\tpreferences: {\n\t\t\t...data?.preferences,\n\t\t\t...preferences,\n\t\t\tplayer: {\n\t\t\t\t...data?.preferences?.player,\n\t\t\t\t...preferences?.player,\n\t\t\t},\n\t\t\tpresence: {\n\t\t\t\t...data?.preferences?.presence,\n\t\t\t\t...preferences?.presence,\n\t\t\t},\n\t\t},\n\t}\n\tawait fsExtra.ensureDir(appDir)\n\tawait fsExtra.writeJSON(dbPath, updatedData)\n\treturn updatedData.preferences\n}\n\nexport async function getMutedNotifications() {\n\tconst data = await readDb()\n\treturn data?.mutedNotifications ?? []\n}\n\nexport async function muteNotification(id: string) {\n\tconst data = await readDb()\n\tconst mutedNotifications = Array.from(\n\t\tnew Set([...(data?.mutedNotifications ?? []), id]),\n\t)\n\tconst updatedData = {\n\t\t...data,\n\t\tmutedNotifications,\n\t}\n\tawait fsExtra.ensureDir(appDir)\n\tawait fsExtra.writeJSON(dbPath, updatedData)\n\treturn mutedNotifications\n}\n\nexport async function setFontSizePreference(fontSize: number | undefined) {\n\tconst data = await readDb()\n\tconst updatedData = {\n\t\t...data,\n\t\tpreferences: { ...data?.preferences, fontSize },\n\t}\n\tawait fsExtra.ensureDir(appDir)\n\tawait fsExtra.writeJSON(dbPath, updatedData)\n\treturn updatedData.preferences.fontSize\n}\n\nexport async function getFontSizePreference() {\n\tconst data = await readDb()\n\treturn data?.preferences?.fontSize ?? null\n}\n\nexport async function readOnboardingData() {\n\tconst data = await readDb()\n\treturn data?.onboarding ?? null\n}\n\nexport async function markOnboardingVideoWatched(videoUrl: string) {\n\tconst data = await readDb()\n\tconst updatedData = {\n\t\t...data,\n\t\tonboarding: {\n\t\t\t...data?.onboarding,\n\t\t\ttourVideosWatched: [\n\t\t\t\t...(data?.onboarding.tourVideosWatched ?? []),\n\t\t\t\tvideoUrl,\n\t\t\t].filter(Boolean),\n\t\t},\n\t}\n\tawait fsExtra.ensureDir(appDir)\n\tawait fsExtra.writeJSON(dbPath, updatedData)\n\treturn updatedData.onboarding\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type App } from './apps.server.js';
|
|
2
|
+
import { type Timings } from './timing.server.js';
|
|
3
|
+
export declare function getDiffFiles(app1: App, app2: App, { forceFresh, timings, request, }?: {
|
|
4
|
+
forceFresh?: boolean;
|
|
5
|
+
timings?: Timings;
|
|
6
|
+
request?: Request;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
status: "renamed" | "modified" | "deleted" | "added" | "unknown";
|
|
9
|
+
path: string;
|
|
10
|
+
line: number;
|
|
11
|
+
}[]>;
|
|
12
|
+
export declare function getDiffCode(app1: App, app2: App, { forceFresh, timings, request, }?: {
|
|
13
|
+
forceFresh?: boolean;
|
|
14
|
+
timings?: Timings;
|
|
15
|
+
request?: Request;
|
|
16
|
+
}): Promise<string>;
|
|
17
|
+
export declare function getDiffOutputWithRelativePaths(app1: App, app2: App): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=diff.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.server.d.ts","sourceRoot":"","sources":["../../src/diff.server.ts"],"names":[],"mappings":"AAQA,OAAO,EAKN,KAAK,GAAG,EACR,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AA8TjD,wBAAsB,YAAY,CACjC,IAAI,EAAE,GAAG,EACT,IAAI,EAAE,GAAG,EACT,EACC,UAAU,EACV,OAAO,EACP,OAAO,GACP,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO;YAwEtB,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS;;;KA1DxG;AAmED,wBAAsB,WAAW,CAChC,IAAI,EAAE,GAAG,EACT,IAAI,EAAE,GAAG,EACT,EACC,UAAU,EACV,OAAO,EACP,OAAO,GACP,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,mBActE;AAiHD,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,mBA0BxE"}
|