From c292ddcd6a39066fa117838c8275728d34e95e05 Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Tue, 23 Jun 2026 14:41:44 -0500 Subject: [PATCH] update decorators --- packages/website-ue/astro.config.ts | 6 +--- packages/website-ue/src/api/abstract.ts | 30 ++++++++++--------- packages/website-ue/src/api/client.ts | 38 ++++++++++++++----------- tsconfig.json | 5 ++-- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/packages/website-ue/astro.config.ts b/packages/website-ue/astro.config.ts index e18a130a9..03b06d23c 100644 --- a/packages/website-ue/astro.config.ts +++ b/packages/website-ue/astro.config.ts @@ -11,11 +11,7 @@ export default defineConfig({ vite: { server: { allowedHosts: [] }, - esbuild: { - minifyIdentifiers: true, - minifySyntax: false, - minifyWhitespace: true, - }, + esbuild: { target: "es2022" }, build: { rollupOptions: { diff --git a/packages/website-ue/src/api/abstract.ts b/packages/website-ue/src/api/abstract.ts index 5c2db88f7..5bdb5e840 100644 --- a/packages/website-ue/src/api/abstract.ts +++ b/packages/website-ue/src/api/abstract.ts @@ -82,35 +82,37 @@ export abstract class AbstractAPI { } } -export function Cache(disableInDev = false) { +export function Cache(disableInDev = false) { const cache = new WeakMap>>(); - return function ( - _target: unknown, - _propertyKey: string, - descriptor: PropertyDescriptor, + return function ( + target: (this: This, ...args: Arguments) => Promise, + // TODO: evaluate if we need context to make the error trace easier + // context: ClassMethodDecoratorContext< + // This, + // (this: This, ...args: Arguments) => Promise + // >, ) { - const original = descriptor.value; - - descriptor.value = function (...args: Arguments) { + return async function replacementMethod(this: This, ...args: Arguments) { const key = args.join("-"); + let thisCache: Map>; - let thisCache = cache.get(this); - - if (!thisCache) { + if (cache.has(this as object)) { + thisCache = cache.get(this as object) as Map>; + } else { thisCache = new Map(); - cache.set(this, thisCache); + cache.set(this as object, thisCache); } const disabled = disableInDev && import.meta.env.DEV; if (thisCache.has(key) && !disabled) { - return thisCache.get(key); + return thisCache.get(key)!; } const promise = (async () => { try { - return await original.apply(this, args); + return await target.apply(this, args); } catch (error) { thisCache!.delete(key); throw error; diff --git a/packages/website-ue/src/api/client.ts b/packages/website-ue/src/api/client.ts index f2f28e486..cd5854215 100644 --- a/packages/website-ue/src/api/client.ts +++ b/packages/website-ue/src/api/client.ts @@ -21,7 +21,7 @@ export class ClientAPI extends AbstractAPI { throw new Error("MetadataAccessor is inaccessible on the client"); } - @UnimplementedOnClient + @UnimplementedOnClient() mediaPrefix(): never { throw rejected(); } @@ -85,7 +85,7 @@ export class ClientAPI extends AbstractAPI { return json; } - @UnimplementedOnClient + @UnimplementedOnClient() gameStrings() { return rejected(); } @@ -98,12 +98,12 @@ export class ClientAPI extends AbstractAPI { return json; } - @UnimplementedOnClient + @UnimplementedOnClient() gameStringGroups() { return rejected(); } - @UnimplementedOnClient + @UnimplementedOnClient() avatar() { return rejected(); } @@ -112,38 +112,44 @@ export class ClientAPI extends AbstractAPI { return fetchPB("/api/avatars/all.pb", Avatars); } - @UnimplementedOnClient + @UnimplementedOnClient() avatarList() { return rejected(); } - @UnimplementedOnClient + @UnimplementedOnClient() background() { return rejected(); } - @UnimplementedOnClient + @UnimplementedOnClient() backgrounds() { return rejected(); } - @UnimplementedOnClient + @UnimplementedOnClient() currencyIcon() { return rejected(); } - @UnimplementedOnClient + @UnimplementedOnClient() stuffIcon() { return rejected(); } } -function UnimplementedOnClient( - _target: unknown, - propertyKey: string, - descriptor: PropertyDescriptor, -) { - descriptor.value = function () { - throw new Error(`${propertyKey} is not implemented on the client`); +export function UnimplementedOnClient() { + return function ( + _target: (this: This, ...args: Arguments) => Promise, + context: ClassMethodDecoratorContext< + This, + (this: This, ...args: Arguments) => Promise + >, + ) { + return function () { + throw new Error( + `${String(context.name)} is not implemented on the client`, + ); + }; }; } diff --git a/tsconfig.json b/tsconfig.json index c7327a6a3..ae2e56c75 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,10 +15,9 @@ "incremental": true, "isolatedModules": true, "paths": { - "@protos/*": ["./packages/closed/protos/*"] + "@protos/*": ["./packages/closed/protos/*"], }, "strictNullChecks": true, - "experimentalDecorators": true }, - "exclude": ["node_modules/**/*", "dist"] + "exclude": ["node_modules/**/*", "dist"], }