authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-28 23:14:17-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-03-01 20:06:21-08:00
log5144d32b771cb64c7e6e7aa0d109e480a4382a01
tree9a3ae351f8c5a36dd6724b5c3a9914395effb17e
parent128cc215167cfd2c9696cdc657c870954d972db2

nit


5 files changed, 11 insertions(+), 11 deletions(-)

apps/server/src/attachmentPaths.ts+2-6
......@@ -1,14 +1,10 @@
11import path from "node:path";
22
3import { ATTACHMENTS_ROUTE_PREFIX } from "./projectFaviconRoute.ts";
3import { ATTACHMENTS_ROUTE_PREFIX } from "./imageMime.ts";
44
55export function normalizeAttachmentRelativePath(rawRelativePath: string): string | null {
66 const normalized = path.normalize(rawRelativePath).replace(/^[/\\]+/, "");
7 if (
8 normalized.length === 0 ||
9 normalized.startsWith("..") ||
10 normalized.includes("\0")
11 ) {
7 if (normalized.length === 0 || normalized.startsWith("..") || normalized.includes("\0")) {
128 return null;
139 }
1410 return normalized.replace(/\\/g, "/");
apps/server/src/imageMime.ts+2
......@@ -1,5 +1,7 @@
11import Mime from "@effect/platform-node/Mime";
22
3export const ATTACHMENTS_ROUTE_PREFIX = "/attachments";
4
35export const IMAGE_EXTENSION_BY_MIME_TYPE: Record<string, string> = {
46 "image/avif": ".avif",
57 "image/bmp": ".bmp",
apps/server/src/orchestration/Layers/ProjectionPipeline.ts+5-2
......@@ -38,8 +38,11 @@ import {
3838 type OrchestrationProjectionPipelineShape,
3939} from "../Services/ProjectionPipeline.ts";
4040import { attachmentRouteToRelativePath } from "../../attachmentPaths.ts";
41import { ATTACHMENTS_ROUTE_PREFIX } from "../../projectFaviconRoute.ts";
42import { inferImageExtension, parseBase64DataUrl } from "../../imageMime.ts";
41import {
42 ATTACHMENTS_ROUTE_PREFIX,
43 inferImageExtension,
44 parseBase64DataUrl,
45} from "../../imageMime.ts";
4346
4447export const ORCHESTRATION_PROJECTOR_NAMES = {
4548 projects: "projection.projects",
apps/server/src/projectFaviconRoute.ts-2
......@@ -2,8 +2,6 @@ import fs from "node:fs";
22import http from "node:http";
33import path from "node:path";
44
5export const ATTACHMENTS_ROUTE_PREFIX = "/attachments";
6
75const FAVICON_MIME_TYPES: Record<string, string> = {
86 ".png": "image/png",
97 ".jpg": "image/jpeg",
apps/server/src/wsServer.ts+2-1
......@@ -54,8 +54,9 @@ import { clamp } from "effect/Number";
5454import { Open } from "./open";
5555import { ServerConfig } from "./config";
5656import { GitCore } from "./git/Services/GitCore.ts";
57import { ATTACHMENTS_ROUTE_PREFIX, tryHandleProjectFaviconRequest } from "./projectFaviconRoute";
57import { tryHandleProjectFaviconRequest } from "./projectFaviconRoute";
5858import { normalizeAttachmentRelativePath, resolveAttachmentRelativePath } from "./attachmentPaths";
59import { ATTACHMENTS_ROUTE_PREFIX } from "./imageMime.ts";
5960
6061/**
6162 * ServerShape - Service API for server lifecycle control.