@azure-net/kit 5.0.0-4 → 5.0.1
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/dist/infra/http-service/HttpServiceInstance.js +1 -1
- package/dist/shared/app/App.d.ts +2 -0
- package/dist/shared/app/App.js +3 -1
- package/dist/shared/app/index.d.ts +1 -1
- package/dist/shared/app/middleware/ClientMiddleware.d.ts +2 -1
- package/dist/shared/app/middleware/ClientMiddleware.js +3 -1
- package/dist/shared/app/middleware/ServerMiddleware.d.ts +2 -1
- package/dist/shared/app/middleware/ServerMiddleware.js +3 -1
- package/dist/shared/app/middleware/Shared.d.ts +4 -0
- package/dist/shared/app/middleware/Shared.js +31 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/logger/index.d.ts +23 -0
- package/dist/shared/logger/index.js +73 -0
- package/package.json +2 -1
|
@@ -213,7 +213,7 @@ const parseResponse = async (response, request) => {
|
|
|
213
213
|
if (!response.ok || parseError) {
|
|
214
214
|
const message = !response.ok
|
|
215
215
|
? `Request failed with status code ${response.status}. ${response.statusText}`
|
|
216
|
-
: (parseError?.message ??
|
|
216
|
+
: (parseError?.message ?? `Internal error. Request failed. ${response?.status ?? ''} ${response?.statusText ?? ''}`);
|
|
217
217
|
throw new HttpServiceError({
|
|
218
218
|
status: response.status,
|
|
219
219
|
data,
|
package/dist/shared/app/App.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type ContextData } from '../../external/edges/ServerContext.js';
|
|
|
2
2
|
import { type IServerMiddleware } from './middleware/ServerMiddleware.js';
|
|
3
3
|
import type { Handle, HandleClientError, HandleServerError, RequestEvent, ServerInit } from '@sveltejs/kit';
|
|
4
4
|
import { type IClientMiddleware } from './middleware/ClientMiddleware.js';
|
|
5
|
+
import { useLogger } from '../logger/index.js';
|
|
5
6
|
type MaybePromise<T> = T | Promise<T>;
|
|
6
7
|
type HandleInput = Parameters<Handle>[0];
|
|
7
8
|
type Resolve = HandleInput['resolve'];
|
|
@@ -54,6 +55,7 @@ export interface AppServerErrorContext<TDependencies extends Record<string, unkn
|
|
|
54
55
|
event: RequestEvent;
|
|
55
56
|
status: number;
|
|
56
57
|
message: string;
|
|
58
|
+
useLogger: typeof useLogger;
|
|
57
59
|
}
|
|
58
60
|
export type AppUniversalLifecycleCallback<TDependencies extends Record<string, unknown>> = (context: AppUniversalLifecycleContext<TDependencies>) => MaybePromise<void>;
|
|
59
61
|
export type AppClientLifecycleCallback<TDependencies extends Record<string, unknown>> = (context: AppClientLifecycleContext<TDependencies>) => MaybePromise<void>;
|
package/dist/shared/app/App.js
CHANGED
|
@@ -5,6 +5,7 @@ import { AzureNetKitInternalError } from '../app-error/AppError.js';
|
|
|
5
5
|
import { executeServerMiddlewares } from './middleware/ServerMiddleware.js';
|
|
6
6
|
import { beforeNavigate } from '$app/navigation';
|
|
7
7
|
import { executeClientMiddlewares } from './middleware/ClientMiddleware.js';
|
|
8
|
+
import { useLogger } from '../logger/index.js';
|
|
8
9
|
const DEFAULT_APP_NAME = '__AzureNetKitGlobalAppContainer__';
|
|
9
10
|
const clientLifecycleFlags = new WeakMap();
|
|
10
11
|
const serverInitLifecycleFlags = new WeakMap();
|
|
@@ -189,7 +190,8 @@ export const createApp = (callback, name = DEFAULT_APP_NAME) => {
|
|
|
189
190
|
error,
|
|
190
191
|
event,
|
|
191
192
|
status,
|
|
192
|
-
message
|
|
193
|
+
message,
|
|
194
|
+
useLogger
|
|
193
195
|
});
|
|
194
196
|
};
|
|
195
197
|
const runClientError = ({ error, event, status, message }) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createApp, type AppClientErrorCallback, type AppClientErrorContext, type AppClientInitLifecycleCallback, type AppClientInitLifecycleContext, type AppClientLifecycleCallback, type AppClientLifecycleContext, type AppContainer, type AppRegistrar, type AppServerErrorCallback, type AppServerErrorContext, type AppServerInitLifecycleCallback, type AppServerInitLifecycleContext, type AppServerLifecycleCallback, type AppServerLifecycleContext, type AppUniversalLifecycleCallback, type AppUniversalLifecycleContext, type CreateAppInstance } from './App.js';
|
|
2
2
|
export type { IClientMiddleware } from './middleware/ClientMiddleware.js';
|
|
3
3
|
export type { IServerMiddleware } from './middleware/ServerMiddleware.js';
|
|
4
|
-
export type { RedirectStatus } from './middleware/Shared.js';
|
|
4
|
+
export type { EnsureRoute, EnsureRouteSource, EnsureRouteTarget, RedirectStatus } from './middleware/Shared.js';
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type BeforeNavigate } from '@sveltejs/kit';
|
|
2
|
-
import type
|
|
2
|
+
import { type EnsureRoute, type RedirectStatus } from './Shared.js';
|
|
3
3
|
export type IClientMiddleware = (middlewareData: {
|
|
4
4
|
to: URL;
|
|
5
5
|
from?: URL;
|
|
6
6
|
next: (location?: string | URL, status?: RedirectStatus) => void;
|
|
7
|
+
ensureRoute: EnsureRoute;
|
|
7
8
|
}) => Promise<void> | void;
|
|
8
9
|
export declare const executeClientMiddlewares: (middlewares: IClientMiddleware[], navigation?: BeforeNavigate) => Promise<void>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {} from '@sveltejs/kit';
|
|
2
|
+
import { ensureRoute } from './Shared.js';
|
|
2
3
|
import { page } from '$app/state';
|
|
3
4
|
import { goto } from '$app/navigation';
|
|
4
5
|
export const executeClientMiddlewares = async (middlewares, navigation) => {
|
|
@@ -18,7 +19,8 @@ export const executeClientMiddlewares = async (middlewares, navigation) => {
|
|
|
18
19
|
await middleware({
|
|
19
20
|
to,
|
|
20
21
|
from,
|
|
21
|
-
next
|
|
22
|
+
next,
|
|
23
|
+
ensureRoute
|
|
22
24
|
});
|
|
23
25
|
if (!shouldContinue) {
|
|
24
26
|
navigation?.cancel();
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type RequestEvent } from '@sveltejs/kit';
|
|
2
|
-
import type
|
|
2
|
+
import { type EnsureRoute, type RedirectStatus } from './Shared.js';
|
|
3
3
|
export type IServerMiddleware = (middlewareData: {
|
|
4
4
|
to: RequestEvent['url'];
|
|
5
5
|
from?: RequestEvent['url'];
|
|
6
6
|
next: (location?: string | URL, status?: RedirectStatus) => void;
|
|
7
7
|
event?: RequestEvent;
|
|
8
|
+
ensureRoute: EnsureRoute;
|
|
8
9
|
}) => Promise<void> | void;
|
|
9
10
|
export declare const executeServerMiddlewares: (middlewares: IServerMiddleware[]) => Promise<void>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { error, redirect } from '@sveltejs/kit';
|
|
2
|
+
import { ensureRoute } from './Shared.js';
|
|
2
3
|
import { BROWSER } from '../../../external/tools/index.js';
|
|
3
4
|
import { RequestContext } from '../../../external/edges/ServerContext.js';
|
|
4
5
|
export const executeServerMiddlewares = async (middlewares) => {
|
|
@@ -20,7 +21,8 @@ export const executeServerMiddlewares = async (middlewares) => {
|
|
|
20
21
|
event,
|
|
21
22
|
to,
|
|
22
23
|
from,
|
|
23
|
-
next
|
|
24
|
+
next,
|
|
25
|
+
ensureRoute
|
|
24
26
|
});
|
|
25
27
|
if (!shouldContinue) {
|
|
26
28
|
error(403, 'Navigation blocked: middleware chain stopped (next() not called).');
|
|
@@ -1 +1,5 @@
|
|
|
1
1
|
export type RedirectStatus = 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308;
|
|
2
|
+
export type EnsureRouteSource = string | readonly string[];
|
|
3
|
+
export type EnsureRouteTarget = string | URL;
|
|
4
|
+
export type EnsureRoute = (route: EnsureRouteSource, target: EnsureRouteTarget) => boolean;
|
|
5
|
+
export declare const ensureRoute: EnsureRoute;
|
|
@@ -1 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
const trimSlashes = (value) => value.replace(/^\/+|\/+$/g, '');
|
|
2
|
+
const normalizePathname = (value) => {
|
|
3
|
+
const pathname = value instanceof URL ? value.pathname : value;
|
|
4
|
+
const normalized = `/${trimSlashes(pathname.split('?')[0] ?? '/')}`;
|
|
5
|
+
return normalized === '//' ? '/' : normalized;
|
|
6
|
+
};
|
|
7
|
+
const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
8
|
+
const routeToRegex = (route) => {
|
|
9
|
+
const normalizedRoute = normalizePathname(route);
|
|
10
|
+
if (normalizedRoute === '/')
|
|
11
|
+
return /^\/$/;
|
|
12
|
+
const segments = trimSlashes(normalizedRoute).split('/');
|
|
13
|
+
const pattern = segments
|
|
14
|
+
.map((segment) => {
|
|
15
|
+
if (/^\{[^/{}]+\}$/.test(segment)) {
|
|
16
|
+
return '[^/]+';
|
|
17
|
+
}
|
|
18
|
+
return escapeRegex(segment).replace(/\\\{[^/{}]+\\\}/g, '[^/]+');
|
|
19
|
+
})
|
|
20
|
+
.join('\\/');
|
|
21
|
+
return new RegExp(`^\\/${pattern}$`);
|
|
22
|
+
};
|
|
23
|
+
export const ensureRoute = (route, target) => {
|
|
24
|
+
const pathname = normalizePathname(target);
|
|
25
|
+
const routes = Array.isArray(route) ? route : [route];
|
|
26
|
+
for (const item of routes) {
|
|
27
|
+
if (routeToRegex(item).test(pathname))
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
};
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { AppEvents } from './event-bus/index.js';
|
|
|
3
3
|
export { ClassMirror } from './class-mirror/index.js';
|
|
4
4
|
export { createBoundaryProvider, cleanupProvider, type ProviderSettings } from './boundary-provider/index.js';
|
|
5
5
|
export { createApp, type AppContainer, type CreateAppInstance, type IServerMiddleware, type IClientMiddleware } from './app/index.js';
|
|
6
|
+
export { useLogger, LoggerErrors, type ILoggerError, type ILoggerSettings } from './logger/index.js';
|
package/dist/shared/index.js
CHANGED
|
@@ -3,3 +3,4 @@ export { AppEvents } from './event-bus/index.js';
|
|
|
3
3
|
export { ClassMirror } from './class-mirror/index.js';
|
|
4
4
|
export { createBoundaryProvider, cleanupProvider } from './boundary-provider/index.js';
|
|
5
5
|
export { createApp } from './app/index.js';
|
|
6
|
+
export { useLogger, LoggerErrors } from './logger/index.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AppError, type IAppError } from '../app-error/index.js';
|
|
2
|
+
export declare enum LoggerErrors {
|
|
3
|
+
AzureNetKitInternal = 0,
|
|
4
|
+
AzureNetAppError = 1,
|
|
5
|
+
ProjectError = 2,
|
|
6
|
+
UnknownError = 3
|
|
7
|
+
}
|
|
8
|
+
export interface ILoggerError {
|
|
9
|
+
message: string;
|
|
10
|
+
type: LoggerErrors;
|
|
11
|
+
original: Error | IAppError | AppError;
|
|
12
|
+
}
|
|
13
|
+
export interface ILoggerSettings {
|
|
14
|
+
collector?: {
|
|
15
|
+
request: (error: ILoggerError) => Request;
|
|
16
|
+
onError?: (error: unknown) => void;
|
|
17
|
+
};
|
|
18
|
+
prefix?: string;
|
|
19
|
+
joinToLog?: (error: ILoggerError) => string;
|
|
20
|
+
filterLog?: (error: ILoggerError) => boolean;
|
|
21
|
+
includeOnly?: LoggerErrors[];
|
|
22
|
+
}
|
|
23
|
+
export declare const useLogger: (error: unknown, settings: ILoggerSettings) => void;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AppError, AzureNetKitInternalError } from '../app-error/index.js';
|
|
2
|
+
import { BROWSER } from '../../external/tools/index.js';
|
|
3
|
+
import { RequestContext } from '../../external/edges/ServerContext.js';
|
|
4
|
+
export var LoggerErrors;
|
|
5
|
+
(function (LoggerErrors) {
|
|
6
|
+
LoggerErrors[LoggerErrors["AzureNetKitInternal"] = 0] = "AzureNetKitInternal";
|
|
7
|
+
LoggerErrors[LoggerErrors["AzureNetAppError"] = 1] = "AzureNetAppError";
|
|
8
|
+
LoggerErrors[LoggerErrors["ProjectError"] = 2] = "ProjectError";
|
|
9
|
+
LoggerErrors[LoggerErrors["UnknownError"] = 3] = "UnknownError";
|
|
10
|
+
})(LoggerErrors || (LoggerErrors = {}));
|
|
11
|
+
const prepareError = (error) => {
|
|
12
|
+
if (error instanceof AppError || (error && typeof error === 'object' && 'appErrorConvert' in error)) {
|
|
13
|
+
const typedError = error;
|
|
14
|
+
return {
|
|
15
|
+
original: typedError,
|
|
16
|
+
message: `[AppError ${typedError.type}] ${typedError.message}`,
|
|
17
|
+
type: LoggerErrors.AzureNetAppError
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (error instanceof AzureNetKitInternalError) {
|
|
21
|
+
return {
|
|
22
|
+
original: error,
|
|
23
|
+
message: `[AzureNetInternalError] ${error.message}`,
|
|
24
|
+
type: LoggerErrors.AzureNetKitInternal
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (error instanceof Error) {
|
|
28
|
+
return {
|
|
29
|
+
original: error,
|
|
30
|
+
message: error.message,
|
|
31
|
+
type: LoggerErrors.ProjectError
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
original: new Error('Unknown error occurred'),
|
|
36
|
+
message: 'Unknown error occurred',
|
|
37
|
+
type: LoggerErrors.UnknownError
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const getFetcher = () => {
|
|
41
|
+
if (BROWSER)
|
|
42
|
+
return fetch;
|
|
43
|
+
try {
|
|
44
|
+
return RequestContext.current()?.event?.fetch ?? fetch;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return fetch;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export const useLogger = (error, settings) => {
|
|
51
|
+
const preparedError = prepareError(error);
|
|
52
|
+
if (settings.filterLog && settings.filterLog(preparedError)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (settings.includeOnly && !settings.includeOnly.includes(preparedError.type)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const prefix = settings?.prefix ?? '[Logger]';
|
|
59
|
+
const errorMessage = prefix + preparedError.message + (settings?.joinToLog ? settings.joinToLog(preparedError) : '');
|
|
60
|
+
console.log(errorMessage);
|
|
61
|
+
if (settings.collector) {
|
|
62
|
+
const fetcher = getFetcher();
|
|
63
|
+
try {
|
|
64
|
+
void fetcher(settings.collector.request(preparedError)).catch((err) => {
|
|
65
|
+
settings.collector?.onError?.(err);
|
|
66
|
+
return;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
settings.collector.onError?.(err);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure-net/kit",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Pixel1917",
|
|
6
6
|
"description": "Universal toolkit and library collection, developed as part of the Azure-net ecosystem",
|
|
@@ -88,6 +88,7 @@
|
|
|
88
88
|
"@testing-library/jest-dom": "^6.9.1",
|
|
89
89
|
"@testing-library/svelte": "^5.3.1",
|
|
90
90
|
"commitizen": "^4.3.1",
|
|
91
|
+
"env-cmd": "^11.0.0",
|
|
91
92
|
"eslint": "^10.2.1",
|
|
92
93
|
"eslint-config-prettier": "^10.1.8",
|
|
93
94
|
"eslint-plugin-svelte": "^3.17.0",
|