@makroz/web 1.2.5 → 1.2.6-rc14
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 +1 -1
- package/dist/auth/AuthStorageAdapter.d.ts +74 -0
- package/dist/auth/AuthStorageAdapter.d.ts.map +1 -0
- package/dist/auth/AuthStorageAdapter.js +140 -0
- package/dist/auth/AuthStorageAdapter.js.map +1 -0
- package/dist/auth/MkAuthProvider.d.ts +11 -2
- package/dist/auth/MkAuthProvider.d.ts.map +1 -1
- package/dist/auth/MkAuthProvider.js +15 -25
- package/dist/auth/MkAuthProvider.js.map +1 -1
- package/dist/components/MkFileUpload.d.ts.map +1 -1
- package/dist/components/MkFileUpload.js +36 -2
- package/dist/components/MkFileUpload.js.map +1 -1
- package/dist/components/MkTable.d.ts +8 -1
- package/dist/components/MkTable.d.ts.map +1 -1
- package/dist/components/MkTable.js +28 -2
- package/dist/components/MkTable.js.map +1 -1
- package/dist/hooks/useApi.d.ts +21 -5
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useApi.js +83 -63
- package/dist/hooks/useApi.js.map +1 -1
- package/dist/hooks/useMkInfiniteList.d.ts +1 -1
- package/dist/hooks/useMkList.d.ts +8 -12
- package/dist/hooks/useMkList.d.ts.map +1 -1
- package/dist/hooks/useMkList.js +23 -9
- package/dist/hooks/useMkList.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/theme/MkThemeProvider.d.ts.map +1 -1
- package/dist/theme/MkThemeProvider.js.map +1 -1
- package/eslint-plugin-mk/__tests__/no-cross-module-import-dynamic.test.js +89 -0
- package/eslint-plugin-mk/rules/no-cross-module-import.js +16 -0
- package/package.json +2 -2
package/dist/hooks/useApi.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ApiStatus, MkResponse } from '@makroz/core';
|
|
2
|
+
import { type MkQueryParams } from '@makroz/core';
|
|
3
|
+
/**
|
|
4
|
+
* Web `useApi` hook.
|
|
5
|
+
*
|
|
6
|
+
* State, refs, and lifecycle are owned here (web-local) while the
|
|
7
|
+
* actual fetch execution + AbortController + response.ok logic lives
|
|
8
|
+
* in `@makroz/core`'s `executeApiRequest`. The mobile wrapper follows
|
|
9
|
+
* the same shape, so both packages share semantics without sharing a
|
|
10
|
+
* React instance (pnpm strict-mode hoisting would otherwise create
|
|
11
|
+
* two React copies and trip `Invalid hook call`).
|
|
12
|
+
*
|
|
13
|
+
* Public return shape is byte-compatible with v1.2.5 so consumer
|
|
14
|
+
* call sites do not need to change.
|
|
15
|
+
*/
|
|
2
16
|
interface UseApiOptions {
|
|
3
17
|
baseUrl?: string;
|
|
4
18
|
headers?: Record<string, string>;
|
|
@@ -6,14 +20,16 @@ interface UseApiOptions {
|
|
|
6
20
|
export declare function useApi<T = unknown>(options?: UseApiOptions): {
|
|
7
21
|
status: ApiStatus;
|
|
8
22
|
data: T | null;
|
|
9
|
-
error:
|
|
23
|
+
error: string | null;
|
|
10
24
|
waiting: number;
|
|
11
25
|
loading: boolean;
|
|
12
|
-
get: <R = T>(endpoint: string, params?:
|
|
13
|
-
post: <R = T>(endpoint: string, body:
|
|
14
|
-
put: <R = T>(endpoint: string, body:
|
|
26
|
+
get: <R = T>(endpoint: string, params?: MkQueryParams) => Promise<MkResponse<R>>;
|
|
27
|
+
post: <R = T>(endpoint: string, body: unknown) => Promise<MkResponse<R>>;
|
|
28
|
+
put: <R = T>(endpoint: string, body: unknown) => Promise<MkResponse<R>>;
|
|
15
29
|
delete: (endpoint: string) => Promise<MkResponse<void>>;
|
|
16
30
|
remove: (endpoint: string) => Promise<MkResponse<void>>;
|
|
31
|
+
abort: () => void;
|
|
32
|
+
refetch: () => void;
|
|
17
33
|
};
|
|
18
34
|
export {};
|
|
19
35
|
//# sourceMappingURL=useApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGnF;;;;;;;;;;;;GAYG;AAEH,UAAU,aAAa;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,wBAAgB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAE,aAAkB;;;;;;UAwHtD,CAAC,gBAAgB,MAAM,WAAW,aAAa;WAK/C,CAAC,gBAAgB,MAAM,QAAQ,OAAO;UAKtC,CAAC,gBAAgB,MAAM,QAAQ,OAAO;uBAK5B,MAAM;uBAAN,MAAM;;;EAkBxB"}
|
package/dist/hooks/useApi.js
CHANGED
|
@@ -1,83 +1,101 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { executeApiRequest, ApiCoreError } from '@makroz/core';
|
|
2
3
|
import { useMkApiContext } from '../context/MkApiContext';
|
|
3
|
-
const buildQueryParams = (params) => {
|
|
4
|
-
const query = new URLSearchParams();
|
|
5
|
-
if (!params)
|
|
6
|
-
return "";
|
|
7
|
-
// Specific MK-Director mappings
|
|
8
|
-
if (params.q)
|
|
9
|
-
query.append('q', String(params.q));
|
|
10
|
-
if (params.sort)
|
|
11
|
-
query.append('sort', String(params.sort));
|
|
12
|
-
if (params.page)
|
|
13
|
-
query.append('page', String(params.page));
|
|
14
|
-
if (params.per_page)
|
|
15
|
-
query.append('per_page', String(params.per_page));
|
|
16
|
-
// Advanced Filtering mapping: { filter: { status: 'A', price: { gt: 100 } } }
|
|
17
|
-
if (params.filter && typeof params.filter === 'object') {
|
|
18
|
-
Object.entries(params.filter).forEach(([field, value]) => {
|
|
19
|
-
if (typeof value === 'object' && value !== null) {
|
|
20
|
-
Object.entries(value).forEach(([op, opVal]) => {
|
|
21
|
-
query.append(`filter[${field}][${op}]`, String(opVal));
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
query.append(`filter[${field}]`, String(value));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
const queryString = query.toString();
|
|
30
|
-
return queryString ? `?${queryString}` : "";
|
|
31
|
-
};
|
|
32
4
|
export function useApi(options = {}) {
|
|
33
5
|
const context = useMkApiContext();
|
|
6
|
+
const baseUrl = options.baseUrl || context.baseUrl;
|
|
7
|
+
const mergedHeaders = useMemo(() => { var _a, _b; return (Object.assign(Object.assign({}, ((_a = context.headers) !== null && _a !== void 0 ? _a : {})), ((_b = options.headers) !== null && _b !== void 0 ? _b : {}))); }, [context.headers, options.headers]);
|
|
8
|
+
// Resolve fetch ONCE per provider, not per call. We deliberately
|
|
9
|
+
// prefer `globalThis.fetch` (browser global) so the same lookup
|
|
10
|
+
// path works in dev, prod, and jsdom-test envs. Note: do NOT
|
|
11
|
+
// `.bind(globalThis)` here — vi.fn() mocks in tests are sensitive
|
|
12
|
+
// to `this` rebinding, and the bare global already has the right
|
|
13
|
+
// receiver.
|
|
14
|
+
const fetchImpl = useMemo(() => globalThis.fetch, []);
|
|
34
15
|
const [status, setStatus] = useState('idle');
|
|
35
16
|
const [data, setData] = useState(null);
|
|
36
17
|
const [error, setError] = useState(null);
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
18
|
+
const controllerRef = useRef(null);
|
|
19
|
+
const lastRequestRef = useRef(null);
|
|
20
|
+
const abort = useCallback(() => {
|
|
21
|
+
var _a;
|
|
22
|
+
(_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
23
|
+
controllerRef.current = null;
|
|
24
|
+
}, []);
|
|
25
|
+
const call = useCallback(async (req) => {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
// Cancel any prior in-flight request so the newest wins.
|
|
28
|
+
(_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
29
|
+
const controller = new AbortController();
|
|
30
|
+
controllerRef.current = controller;
|
|
31
|
+
lastRequestRef.current = req;
|
|
32
|
+
context.setWaiting(1, `call:${req.endpoint}`);
|
|
48
33
|
try {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
method,
|
|
55
|
-
|
|
56
|
-
|
|
34
|
+
setStatus('loading');
|
|
35
|
+
setError(null);
|
|
36
|
+
const result = await executeApiRequest({
|
|
37
|
+
baseUrl,
|
|
38
|
+
endpoint: req.endpoint,
|
|
39
|
+
method: req.method,
|
|
40
|
+
body: req.body,
|
|
41
|
+
params: req.params,
|
|
42
|
+
headers: mergedHeaders,
|
|
43
|
+
signal: controller.signal,
|
|
44
|
+
timeoutMs: req.timeoutMs,
|
|
45
|
+
fetchImpl,
|
|
57
46
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
// Stale-response guard: if a newer call started while
|
|
48
|
+
// we were awaiting, drop this response silently.
|
|
49
|
+
if (controller.signal.aborted && controllerRef.current !== controller) {
|
|
50
|
+
return result;
|
|
61
51
|
}
|
|
62
52
|
setData(result.data);
|
|
63
53
|
setStatus('success');
|
|
64
54
|
return result;
|
|
65
55
|
}
|
|
66
56
|
catch (err) {
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
if (controllerRef.current !== controller) {
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
const message = err instanceof Error
|
|
64
|
+
? err.message
|
|
65
|
+
: typeof err === 'string'
|
|
66
|
+
? err
|
|
67
|
+
: 'Unknown fetch error';
|
|
68
|
+
// BC: state stores the message string (what v1.2.5 consumers
|
|
69
|
+
// expect). The thrown value is the full ApiCoreError so
|
|
70
|
+
// callers using `.rejects.toThrow(...)` still get the
|
|
71
|
+
// structured info via `instanceof ApiCoreError`.
|
|
72
|
+
setError(message);
|
|
69
73
|
setStatus('error');
|
|
70
|
-
throw err
|
|
74
|
+
throw err instanceof Error
|
|
75
|
+
? err
|
|
76
|
+
: new ApiCoreError(message, {
|
|
77
|
+
status: 0,
|
|
78
|
+
statusText: 'unknown',
|
|
79
|
+
endpoint: req.endpoint,
|
|
80
|
+
method: ((_b = req.method) !== null && _b !== void 0 ? _b : 'GET'),
|
|
81
|
+
});
|
|
71
82
|
}
|
|
72
83
|
finally {
|
|
73
|
-
context.setWaiting(-1, `-call:${endpoint}`);
|
|
84
|
+
context.setWaiting(-1, `-call:${req.endpoint}`);
|
|
85
|
+
if (controllerRef.current === controller) {
|
|
86
|
+
controllerRef.current = null;
|
|
87
|
+
}
|
|
74
88
|
}
|
|
75
|
-
}, [context]);
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
}, [baseUrl, mergedHeaders, fetchImpl, context]);
|
|
90
|
+
const refetch = useCallback(() => {
|
|
91
|
+
const last = lastRequestRef.current;
|
|
92
|
+
if (last)
|
|
93
|
+
void call(last);
|
|
94
|
+
}, [call]);
|
|
95
|
+
const get = useCallback((endpoint, params) => call({ endpoint, method: 'GET', params }), [call]);
|
|
96
|
+
const post = useCallback((endpoint, body) => call({ endpoint, method: 'POST', body }), [call]);
|
|
97
|
+
const put = useCallback((endpoint, body) => call({ endpoint, method: 'PUT', body }), [call]);
|
|
98
|
+
const deleteFn = useCallback((endpoint) => call({ endpoint, method: 'DELETE' }), [call]);
|
|
81
99
|
return {
|
|
82
100
|
status,
|
|
83
101
|
data,
|
|
@@ -88,7 +106,9 @@ export function useApi(options = {}) {
|
|
|
88
106
|
post,
|
|
89
107
|
put,
|
|
90
108
|
delete: deleteFn,
|
|
91
|
-
remove:
|
|
109
|
+
remove: deleteFn,
|
|
110
|
+
abort,
|
|
111
|
+
refetch,
|
|
92
112
|
};
|
|
93
113
|
}
|
|
94
114
|
//# sourceMappingURL=useApi.js.map
|
package/dist/hooks/useApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export interface InfiniteListOptions {
|
|
|
7
7
|
export declare function useMkInfiniteList(endpoint: string, options?: InfiniteListOptions): {
|
|
8
8
|
items: any[];
|
|
9
9
|
loading: boolean;
|
|
10
|
-
error:
|
|
10
|
+
error: string | null;
|
|
11
11
|
hasMore: boolean;
|
|
12
12
|
loadMore: () => void;
|
|
13
13
|
reset: () => void;
|
|
@@ -57,23 +57,19 @@ export declare function useMkList(endpoint: string, options?: MkListOptions): {
|
|
|
57
57
|
setPerPage: (per_page: number) => void;
|
|
58
58
|
resetFilters: () => void;
|
|
59
59
|
refresh: (extraParams?: MkListParams) => Promise<import("@makroz/core").MkResponse<MkListResponse<unknown>>>;
|
|
60
|
-
/** Pagination meta from __extraData */
|
|
61
|
-
pagination:
|
|
62
|
-
[key: string]: unknown;
|
|
63
|
-
current_page?: number;
|
|
64
|
-
last_page?: number;
|
|
65
|
-
per_page?: number;
|
|
66
|
-
total?: number;
|
|
67
|
-
};
|
|
60
|
+
/** Pagination meta from __extraData (R-PKG-023: top-level, fallback to legacy nested) */
|
|
61
|
+
pagination: Record<string, unknown>;
|
|
68
62
|
status: import("@makroz/core").ApiStatus;
|
|
69
63
|
data: MkListResponse<unknown> | null;
|
|
70
|
-
error:
|
|
64
|
+
error: string | null;
|
|
71
65
|
waiting: number;
|
|
72
66
|
loading: boolean;
|
|
73
|
-
get: <R = MkListResponse<unknown>>(endpoint: string, params?:
|
|
74
|
-
post: <R = MkListResponse<unknown>>(endpoint: string, body:
|
|
75
|
-
put: <R = MkListResponse<unknown>>(endpoint: string, body:
|
|
67
|
+
get: <R = MkListResponse<unknown>>(endpoint: string, params?: import("@makroz/core").MkQueryParams) => Promise<import("@makroz/core").MkResponse<R>>;
|
|
68
|
+
post: <R = MkListResponse<unknown>>(endpoint: string, body: unknown) => Promise<import("@makroz/core").MkResponse<R>>;
|
|
69
|
+
put: <R = MkListResponse<unknown>>(endpoint: string, body: unknown) => Promise<import("@makroz/core").MkResponse<R>>;
|
|
76
70
|
delete: (endpoint: string) => Promise<import("@makroz/core").MkResponse<void>>;
|
|
77
71
|
remove: (endpoint: string) => Promise<import("@makroz/core").MkResponse<void>>;
|
|
72
|
+
abort: () => void;
|
|
73
|
+
refetch: () => void;
|
|
78
74
|
};
|
|
79
75
|
//# sourceMappingURL=useMkList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;
|
|
1
|
+
{"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;uBA+B7B,MAAM,SAAS,OAAO;oBAQzB,MAAM;mBAIP,MAAM;oBAIL,MAAM;2BAIC,MAAM;;4BAjCxB,YAAY;IAgEhC,yFAAyF;;;;;;;;;;;;;;EAGhG"}
|
package/dist/hooks/useMkList.js
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
import { useApi } from './useApi';
|
|
3
3
|
export function useMkList(endpoint, options = {}) {
|
|
4
|
-
var _a;
|
|
5
4
|
const { initialParams = {}, autoFetch = true } = options;
|
|
6
5
|
const api = useApi();
|
|
7
6
|
const [params, setParams] = useState(Object.assign({ page: 1, per_page: 15 }, initialParams));
|
|
7
|
+
// R-PKG-023 (rc12): capture __extraData from the response envelope
|
|
8
|
+
// (top-level, sibling of `data`, per the @makroz/core MkResponse<T>
|
|
9
|
+
// contract). The previous implementation read from `api.data?.__extraData`
|
|
10
|
+
// which worked for the legacy nested shape but breaks once the Laravel
|
|
11
|
+
// backend emits the canonical top-level shape. We auto-detect: top-level
|
|
12
|
+
// first, then fallback to legacy nested.
|
|
13
|
+
const [extraData, setExtraData] = useState({});
|
|
8
14
|
const mountedRef = useRef(false);
|
|
9
|
-
const refresh = useCallback((extraParams = {}) => {
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
const refresh = useCallback(async (extraParams = {}) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const response = await api.get(endpoint, Object.assign(Object.assign({}, params), extraParams));
|
|
18
|
+
// Auto-detect response shape (R-PKG-023):
|
|
19
|
+
// - Top-level (rc12+ with flag): `response.__extraData` exists.
|
|
20
|
+
// - Legacy nested (rc11 and earlier): `response.data?.__extraData`.
|
|
21
|
+
const topLevel = response.__extraData;
|
|
22
|
+
const nested = (_a = response.data) === null || _a === void 0 ? void 0 : _a.__extraData;
|
|
23
|
+
setExtraData((_b = topLevel !== null && topLevel !== void 0 ? topLevel : nested) !== null && _b !== void 0 ? _b : {});
|
|
24
|
+
return response;
|
|
25
|
+
}, [endpoint, params, api]);
|
|
12
26
|
const setFilter = useCallback((field, value) => {
|
|
13
27
|
setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, filter: Object.assign(Object.assign({}, prev.filter), { [field]: value }) })));
|
|
14
28
|
}, []);
|
|
@@ -33,11 +47,11 @@ export function useMkList(endpoint, options = {}) {
|
|
|
33
47
|
return;
|
|
34
48
|
if (!mountedRef.current) {
|
|
35
49
|
mountedRef.current = true;
|
|
36
|
-
refresh();
|
|
50
|
+
void refresh();
|
|
37
51
|
return;
|
|
38
52
|
}
|
|
39
|
-
refresh();
|
|
40
|
-
}, [params]);
|
|
53
|
+
void refresh();
|
|
54
|
+
}, [params, refresh]);
|
|
41
55
|
return Object.assign(Object.assign({}, api), { params,
|
|
42
56
|
setParams,
|
|
43
57
|
setFilter,
|
|
@@ -47,7 +61,7 @@ export function useMkList(endpoint, options = {}) {
|
|
|
47
61
|
setPerPage,
|
|
48
62
|
resetFilters,
|
|
49
63
|
refresh,
|
|
50
|
-
/** Pagination meta from __extraData */
|
|
51
|
-
pagination:
|
|
64
|
+
/** Pagination meta from __extraData (R-PKG-023: top-level, fallback to legacy nested) */
|
|
65
|
+
pagination: extraData });
|
|
52
66
|
}
|
|
53
67
|
//# sourceMappingURL=useMkList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAuDlC,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,UAAyB,EAAE
|
|
1
|
+
{"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export { useMkAuth } from './auth/useMkAuth';
|
|
|
28
28
|
export { MkAuthForm } from './auth/MkAuthForm';
|
|
29
29
|
export type { MkAuthFormProps } from './auth/MkAuthForm';
|
|
30
30
|
export type { MkAuthContextValue } from './auth/MkAuthContext';
|
|
31
|
-
export type { AdminDto, AuthTokens, LoginInput, LoginResponse, RefreshResponse, } from './auth/types';
|
|
31
|
+
export type { AdminDto, AuthTokens, AuthStorageAdapter, LoginInput, LoginResponse, RefreshResponse, } from './auth/types';
|
|
32
|
+
export { CookieStorageAdapter, LocalStorageAdapter, getDefaultAuthStorage, type CookieStorageAdapterOptions, } from './auth/AuthStorageAdapter';
|
|
32
33
|
export * from './utils/images';
|
|
33
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGtE,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,GAClB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGtE,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export * from './hooks/useMkStore';
|
|
|
28
28
|
export { MkAuthProvider } from './auth/MkAuthProvider';
|
|
29
29
|
export { useMkAuth } from './auth/useMkAuth';
|
|
30
30
|
export { MkAuthForm } from './auth/MkAuthForm';
|
|
31
|
+
export { CookieStorageAdapter, LocalStorageAdapter, getDefaultAuthStorage, } from './auth/AuthStorageAdapter';
|
|
31
32
|
// Utils
|
|
32
33
|
export * from './utils/images';
|
|
33
34
|
// Note: Global CSS (`@makroz/web/styles/index.css`) MUST be imported by the
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtE,WAAW;AACX,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AAExC,QAAQ;AACR,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAW/C,QAAQ;AACR,cAAc,gBAAgB,CAAC;AAE/B,4EAA4E;AAC5E,uEAAuE;AACvE,qEAAqE;AACrE,2EAA2E"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtE,WAAW;AACX,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AAExC,QAAQ;AACR,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAW/C,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GAExB,MAAM,2BAA2B,CAAC;AAEnC,QAAQ;AACR,cAAc,gBAAgB,CAAC;AAE/B,4EAA4E;AAC5E,uEAAuE;AACvE,qEAAqE;AACrE,2EAA2E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+E,MAAM,OAAO,CAAC;AACpG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAID,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,WAAmB,EACnB,YAAY,
|
|
1
|
+
{"version":3,"file":"MkThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+E,MAAM,OAAO,CAAC;AACpG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAID,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,WAAmB,EACnB,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2FpB;AAED,eAAO,MAAM,UAAU,wBAMtB,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkThemeProvider.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpG,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAatC,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAE5E,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,YAAY,
|
|
1
|
+
{"version":3,"file":"MkThemeProvider.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment node
|
|
3
|
+
*
|
|
4
|
+
* Dynamic import() coverage for the MME enforcer (R-MK-001).
|
|
5
|
+
* Blocked in rc12 because the original rule only handled
|
|
6
|
+
* `ImportDeclaration` and `ExportNamedDeclaration`/`ExportAllDeclaration`,
|
|
7
|
+
* letting `await import('@/modules/admin/...')` bypass the boundary check.
|
|
8
|
+
*
|
|
9
|
+
* Companion to `no-cross-module-import.test.js`. We keep this as a
|
|
10
|
+
* separate file so the failure mode ("dynamic imports leak") is
|
|
11
|
+
* obvious from the file name at PR review time.
|
|
12
|
+
*/
|
|
13
|
+
import { describe, it, expect } from 'vitest';
|
|
14
|
+
import { RuleTester } from 'eslint';
|
|
15
|
+
import rule from '../rules/no-cross-module-import.js';
|
|
16
|
+
|
|
17
|
+
const ruleTester = new RuleTester({
|
|
18
|
+
languageOptions: {
|
|
19
|
+
ecmaVersion: 2022,
|
|
20
|
+
sourceType: 'module',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe('no-cross-module-import — dynamic import()', () => {
|
|
25
|
+
ruleTester.run('no-cross-module-import (dynamic)', rule, {
|
|
26
|
+
valid: [
|
|
27
|
+
// Dynamic import of same module's deep path — OK
|
|
28
|
+
{
|
|
29
|
+
filename: '/app/src/modules/payments/hooks/usePayment.ts',
|
|
30
|
+
code: "const m = await import('@/modules/payments/components/PaymentForm');",
|
|
31
|
+
},
|
|
32
|
+
// Dynamic import of another module's public index — OK
|
|
33
|
+
{
|
|
34
|
+
filename: '/app/src/modules/payments/hooks/usePayment.ts',
|
|
35
|
+
code: "const m = await import('@/modules/admin');",
|
|
36
|
+
},
|
|
37
|
+
// Dynamic import outside any module — OK
|
|
38
|
+
{
|
|
39
|
+
filename: '/app/src/app/admin/page.tsx',
|
|
40
|
+
code: "const m = await import('@/modules/admin/components/AdminForm');",
|
|
41
|
+
},
|
|
42
|
+
// Dynamic import with non-literal expression — silently skipped
|
|
43
|
+
// (cannot be analyzed statically). This is an accepted gap, not a bug.
|
|
44
|
+
{
|
|
45
|
+
filename: '/app/src/modules/payments/hooks/usePayment.ts',
|
|
46
|
+
code: "const m = await import(someDynamicPath);",
|
|
47
|
+
},
|
|
48
|
+
// Dynamic import in test file pointing cross-module — OK (tests excluded)
|
|
49
|
+
{
|
|
50
|
+
filename: '/app/src/modules/payments/__tests__/usePayment.test.ts',
|
|
51
|
+
code: "const m = await import('@/modules/admin/components/AdminForm');",
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
|
|
55
|
+
invalid: [
|
|
56
|
+
// Dynamic import cross-module deep path — should fail
|
|
57
|
+
{
|
|
58
|
+
filename: '/app/src/modules/payments/hooks/usePayment.ts',
|
|
59
|
+
code: "const m = await import('@/modules/admin/components/AdminForm');",
|
|
60
|
+
errors: [{ messageId: 'forbidden' }],
|
|
61
|
+
},
|
|
62
|
+
// Dynamic import cross-module via relative path — should fail
|
|
63
|
+
{
|
|
64
|
+
filename: '/app/src/modules/payments/hooks/usePayment.ts',
|
|
65
|
+
code: "const m = await import('../../admin/components/AdminForm');",
|
|
66
|
+
errors: [{ messageId: 'forbidden' }],
|
|
67
|
+
},
|
|
68
|
+
// Synchronous dynamic import (top-level await) cross-module — should fail
|
|
69
|
+
{
|
|
70
|
+
filename: '/app/src/modules/payments/hooks/usePayment.ts',
|
|
71
|
+
code: "const m = import('@/modules/admin/components/AdminForm');",
|
|
72
|
+
errors: [{ messageId: 'forbidden' }],
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('registers the dynamic-import visitor', () => {
|
|
78
|
+
// Sanity check: the rule's create() returns an ImportExpression
|
|
79
|
+
// visitor. If a future refactor drops it, this test fails loudly
|
|
80
|
+
// instead of silently letting dynamic imports bypass the rule.
|
|
81
|
+
const sandboxFilename = '/app/src/modules/payments/hooks/usePayment.ts';
|
|
82
|
+
const context = {
|
|
83
|
+
getFilename: () => sandboxFilename,
|
|
84
|
+
report: () => {},
|
|
85
|
+
};
|
|
86
|
+
const visitors = rule.create(context);
|
|
87
|
+
expect(typeof visitors.ImportExpression).toBe('function');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* inside another module. Only `@/modules/{X}` (the index/public API)
|
|
6
6
|
* is allowed.
|
|
7
7
|
*
|
|
8
|
+
* Covers both static `import ... from '...'` and dynamic
|
|
9
|
+
* `import('...')` (await import() for code splitting) so that
|
|
10
|
+
* R-MK-001 cannot be bypassed via dynamic imports.
|
|
11
|
+
*
|
|
8
12
|
* Scenarios:
|
|
9
13
|
* Given file src/modules/payments/hooks/usePayment.ts
|
|
10
14
|
* When it imports '@/modules/admin/components/AdminForm'
|
|
@@ -14,6 +18,9 @@
|
|
|
14
18
|
* Given the same file imports '@/modules/admin'
|
|
15
19
|
* Then the lint passes.
|
|
16
20
|
*
|
|
21
|
+
* Given the same file does `await import('@/modules/admin/components/AdminForm')`
|
|
22
|
+
* Then the lint also fails (dynamic imports are caught).
|
|
23
|
+
*
|
|
17
24
|
* Given a file OUTSIDE any module (e.g. src/app/admin/page.tsx)
|
|
18
25
|
* When it imports '@/modules/admin/...'
|
|
19
26
|
* Then the lint passes — the app is the consumer of the public API.
|
|
@@ -58,6 +65,12 @@ export default {
|
|
|
58
65
|
const sourceModule = moduleMatch[1];
|
|
59
66
|
|
|
60
67
|
function checkImport(node) {
|
|
68
|
+
// Both ImportDeclaration and ImportExpression (dynamic import())
|
|
69
|
+
// carry the literal source string at `node.source.value` when the
|
|
70
|
+
// argument is a string literal. For dynamic imports with a
|
|
71
|
+
// non-literal expression (e.g. `import(someVar)`), this is
|
|
72
|
+
// `undefined` and we skip the check — those cases need static
|
|
73
|
+
// analysis beyond ESLint.
|
|
61
74
|
const importPath = node.source?.value;
|
|
62
75
|
if (typeof importPath !== 'string') return;
|
|
63
76
|
|
|
@@ -92,6 +105,9 @@ export default {
|
|
|
92
105
|
|
|
93
106
|
return {
|
|
94
107
|
ImportDeclaration: checkImport,
|
|
108
|
+
// Catches `await import('...')` and `import('...')` so R-MK-001
|
|
109
|
+
// cannot be bypassed via dynamic imports for code splitting.
|
|
110
|
+
ImportExpression: checkImport,
|
|
95
111
|
// Also catch `export ... from '...'` re-exports.
|
|
96
112
|
ExportNamedDeclaration: checkImport,
|
|
97
113
|
ExportAllDeclaration: checkImport,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@makroz/web",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6-rc14",
|
|
4
4
|
"description": "React UI components and hooks for MK-Director web applications",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@tanstack/react-query": "^5.62.0",
|
|
36
|
-
"@makroz/core": "1.1.
|
|
36
|
+
"@makroz/core": "1.1.6-rc14"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"next": "^16.0.0",
|