mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
update decorators
This commit is contained in:
1 parent
81cc43bd08
commit
c292ddcd6a
4 files changed
+41
-38
No files matched your search
@@ -11,11 +11,7 @@ export default defineConfig({
|
|||||||
vite: {
|
vite: {
|
||||||
server: { allowedHosts: [] },
|
server: { allowedHosts: [] },
|
||||||
|
|
||||||
esbuild: {
|
esbuild: { target: "es2022" },
|
||||||
minifyIdentifiers: true,
|
|
||||||
minifySyntax: false,
|
|
||||||
minifyWhitespace: true,
|
|
||||||
},
|
|
||||||
|
|
||||||
build: {
|
build: {
|
||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
|
|||||||
@@ -82,35 +82,37 @@ export abstract class AbstractAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Cache<Arguments extends unknown[]>(disableInDev = false) {
|
export function Cache(disableInDev = false) {
|
||||||
const cache = new WeakMap<object, Map<string, Promise<unknown>>>();
|
const cache = new WeakMap<object, Map<string, Promise<unknown>>>();
|
||||||
|
|
||||||
return function (
|
return function <This, Arguments extends any[], Return>(
|
||||||
_target: unknown,
|
target: (this: This, ...args: Arguments) => Promise<Return>,
|
||||||
_propertyKey: string,
|
// TODO: evaluate if we need context to make the error trace easier
|
||||||
descriptor: PropertyDescriptor,
|
// context: ClassMethodDecoratorContext<
|
||||||
|
// This,
|
||||||
|
// (this: This, ...args: Arguments) => Promise<Return>
|
||||||
|
// >,
|
||||||
) {
|
) {
|
||||||
const original = descriptor.value;
|
return async function replacementMethod(this: This, ...args: Arguments) {
|
||||||
|
|
||||||
descriptor.value = function (...args: Arguments) {
|
|
||||||
const key = args.join("-");
|
const key = args.join("-");
|
||||||
|
let thisCache: Map<string, Promise<Return>>;
|
||||||
|
|
||||||
let thisCache = cache.get(this);
|
if (cache.has(this as object)) {
|
||||||
|
thisCache = cache.get(this as object) as Map<string, Promise<Return>>;
|
||||||
if (!thisCache) {
|
} else {
|
||||||
thisCache = new Map();
|
thisCache = new Map();
|
||||||
cache.set(this, thisCache);
|
cache.set(this as object, thisCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
const disabled = disableInDev && import.meta.env.DEV;
|
const disabled = disableInDev && import.meta.env.DEV;
|
||||||
|
|
||||||
if (thisCache.has(key) && !disabled) {
|
if (thisCache.has(key) && !disabled) {
|
||||||
return thisCache.get(key);
|
return thisCache.get(key)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
const promise = (async () => {
|
const promise = (async () => {
|
||||||
try {
|
try {
|
||||||
return await original.apply(this, args);
|
return await target.apply(this, args);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
thisCache!.delete(key);
|
thisCache!.delete(key);
|
||||||
throw error;
|
throw error;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export class ClientAPI extends AbstractAPI {
|
|||||||
throw new Error("MetadataAccessor is inaccessible on the client");
|
throw new Error("MetadataAccessor is inaccessible on the client");
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
mediaPrefix(): never {
|
mediaPrefix(): never {
|
||||||
throw rejected();
|
throw rejected();
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ export class ClientAPI extends AbstractAPI {
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
gameStrings() {
|
gameStrings() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
@@ -98,12 +98,12 @@ export class ClientAPI extends AbstractAPI {
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
gameStringGroups() {
|
gameStringGroups() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
avatar() {
|
avatar() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
@@ -112,38 +112,44 @@ export class ClientAPI extends AbstractAPI {
|
|||||||
return fetchPB("/api/avatars/all.pb", Avatars);
|
return fetchPB("/api/avatars/all.pb", Avatars);
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
avatarList() {
|
avatarList() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
background() {
|
background() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
backgrounds() {
|
backgrounds() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
currencyIcon() {
|
currencyIcon() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnimplementedOnClient
|
@UnimplementedOnClient()
|
||||||
stuffIcon() {
|
stuffIcon() {
|
||||||
return rejected();
|
return rejected();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function UnimplementedOnClient(
|
export function UnimplementedOnClient() {
|
||||||
_target: unknown,
|
return function <This, Arguments extends any[], Return>(
|
||||||
propertyKey: string,
|
_target: (this: This, ...args: Arguments) => Promise<Return>,
|
||||||
descriptor: PropertyDescriptor,
|
context: ClassMethodDecoratorContext<
|
||||||
) {
|
This,
|
||||||
descriptor.value = function () {
|
(this: This, ...args: Arguments) => Promise<Return>
|
||||||
throw new Error(`${propertyKey} is not implemented on the client`);
|
>,
|
||||||
|
) {
|
||||||
|
return function () {
|
||||||
|
throw new Error(
|
||||||
|
`${String(context.name)} is not implemented on the client`,
|
||||||
|
);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
+2
-3
@@ -15,10 +15,9 @@
|
|||||||
"incremental": true,
|
"incremental": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"@protos/*": ["./packages/closed/protos/*"]
|
"@protos/*": ["./packages/closed/protos/*"],
|
||||||
},
|
},
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"experimentalDecorators": true
|
|
||||||
},
|
},
|
||||||
"exclude": ["node_modules/**/*", "dist"]
|
"exclude": ["node_modules/**/*", "dist"],
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user