@mokup/shared 1.1.3 → 2.0.0

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.
Files changed (143) hide show
  1. package/README.md +58 -0
  2. package/dist/chokidar.d.mts +3 -8
  3. package/dist/chokidar.d.ts +3 -9
  4. package/dist/chokidar.mjs +2 -1
  5. package/dist/chunk-_iGcCiPk.mjs +28 -0
  6. package/dist/config-core-dqVMz7on.d.mts +5 -0
  7. package/dist/config-core-dqVMz7on.d.ts +5 -0
  8. package/dist/config-core.d.mts +2 -4
  9. package/dist/config-core.d.ts +2 -4
  10. package/dist/config-core.mjs +3 -2
  11. package/dist/config-utils-DFu0_9tl.d.mts +59 -0
  12. package/dist/config-utils-DFu0_9tl.d.ts +59 -0
  13. package/dist/config-utils.d.mts +3 -62
  14. package/dist/config-utils.d.ts +3 -62
  15. package/dist/config-utils.mjs +143 -159
  16. package/dist/define-config-CzB1-X1m.d.mts +20 -0
  17. package/dist/define-config-CzB1-X1m.d.ts +20 -0
  18. package/dist/define-config.d.mts +2 -20
  19. package/dist/define-config.d.ts +2 -20
  20. package/dist/define-config.mjs +146 -161
  21. package/dist/diagnostic-types-DqAzUbgn.d.mts +39 -0
  22. package/dist/diagnostic-types-DqAzUbgn.d.ts +39 -0
  23. package/dist/diagnostic-types.d.mts +2 -0
  24. package/dist/diagnostic-types.d.ts +2 -0
  25. package/dist/diagnostic-types.mjs +29 -0
  26. package/dist/diagnostics-C3QaEtqE.d.mts +101 -0
  27. package/dist/diagnostics-C3QaEtqE.d.ts +101 -0
  28. package/dist/diagnostics.d.mts +2 -0
  29. package/dist/diagnostics.d.ts +2 -0
  30. package/dist/diagnostics.mjs +129 -0
  31. package/dist/hono.d.mts +4 -3
  32. package/dist/hono.d.ts +4 -3
  33. package/dist/hono.mjs +4 -3
  34. package/dist/index-5prVUGOX.d.mts +113 -0
  35. package/dist/index-5prVUGOX.d.ts +113 -0
  36. package/dist/index.d.mts +13 -10
  37. package/dist/index.d.ts +13 -10
  38. package/dist/index.mjs +13 -18
  39. package/dist/jsonc-parser.d.mts +1 -1
  40. package/dist/jsonc-parser.d.ts +1 -1
  41. package/dist/jsonc-parser.mjs +8 -1
  42. package/dist/jsonc-utils-_Hs6a39T.d.mts +7 -0
  43. package/dist/jsonc-utils-_Hs6a39T.d.ts +7 -0
  44. package/dist/jsonc-utils.d.mts +2 -7
  45. package/dist/jsonc-utils.d.ts +2 -7
  46. package/dist/jsonc-utils.mjs +20 -20
  47. package/dist/load-rules-D_kCpu9I.d.mts +14 -0
  48. package/dist/load-rules-D_kCpu9I.d.ts +14 -0
  49. package/dist/load-rules.d.mts +2 -14
  50. package/dist/load-rules.d.ts +2 -14
  51. package/dist/load-rules.mjs +16 -34
  52. package/dist/logger-types-BbqYCr6j.d.mts +50 -0
  53. package/dist/logger-types-BbqYCr6j.d.ts +50 -0
  54. package/dist/logger.browser.d.mts +4 -3
  55. package/dist/logger.browser.d.ts +4 -3
  56. package/dist/logger.browser.mjs +49 -48
  57. package/dist/logger.d.mts +4 -3
  58. package/dist/logger.d.ts +4 -3
  59. package/dist/logger.mjs +49 -48
  60. package/dist/{mock-files.d.cts → mock-files-DfGigWmY.d.mts} +5 -5
  61. package/dist/mock-files-DfGigWmY.d.ts +10 -0
  62. package/dist/mock-files.d.mts +2 -10
  63. package/dist/mock-files.d.ts +2 -10
  64. package/dist/mock-files.mjs +38 -50
  65. package/dist/{module-loader.d.cts → module-loader-nAQlwo3D.d.mts} +7 -6
  66. package/dist/module-loader-nAQlwo3D.d.ts +14 -0
  67. package/dist/module-loader.d.mts +2 -13
  68. package/dist/module-loader.d.ts +2 -13
  69. package/dist/module-loader.mjs +60 -69
  70. package/dist/path-utils.d.mts +3 -2
  71. package/dist/path-utils.d.ts +3 -2
  72. package/dist/path-utils.mjs +25 -35
  73. package/dist/pathe.d.mts +1 -1
  74. package/dist/pathe.d.ts +1 -1
  75. package/dist/pathe.mjs +8 -1
  76. package/dist/playground-grouping.d.mts +6 -6
  77. package/dist/playground-grouping.d.ts +6 -6
  78. package/dist/playground-grouping.mjs +57 -77
  79. package/dist/rolldown.d.mts +37 -0
  80. package/dist/rolldown.d.ts +37 -0
  81. package/dist/rolldown.mjs +81 -0
  82. package/dist/{route-constants.d.cts → route-constants-BUi36iYR.d.mts} +3 -2
  83. package/dist/route-constants-BUi36iYR.d.ts +8 -0
  84. package/dist/route-constants.d.mts +2 -7
  85. package/dist/route-constants.d.ts +2 -7
  86. package/dist/route-constants.mjs +25 -21
  87. package/dist/route-utils-BiWFUqo-.d.mts +42 -0
  88. package/dist/route-utils-BiWFUqo-.d.ts +42 -0
  89. package/dist/route-utils.d.mts +2 -42
  90. package/dist/route-utils.d.ts +2 -42
  91. package/dist/route-utils.mjs +94 -121
  92. package/dist/scan-utils.d.mts +2 -114
  93. package/dist/scan-utils.d.ts +2 -114
  94. package/dist/scan-utils.mjs +14 -25
  95. package/dist/timing.d.mts +3 -2
  96. package/dist/timing.d.ts +3 -2
  97. package/dist/timing.mjs +11 -12
  98. package/package.json +88 -128
  99. package/dist/chokidar.cjs +0 -11
  100. package/dist/chokidar.d.cts +0 -9
  101. package/dist/config-core.cjs +0 -9
  102. package/dist/config-core.d.cts +0 -4
  103. package/dist/config-utils.cjs +0 -179
  104. package/dist/config-utils.d.cts +0 -62
  105. package/dist/define-config.cjs +0 -168
  106. package/dist/define-config.d.cts +0 -20
  107. package/dist/esbuild.cjs +0 -16
  108. package/dist/esbuild.d.cts +0 -1
  109. package/dist/esbuild.d.mts +0 -1
  110. package/dist/esbuild.d.ts +0 -1
  111. package/dist/esbuild.mjs +0 -1
  112. package/dist/hono.cjs +0 -20
  113. package/dist/hono.d.cts +0 -3
  114. package/dist/index.cjs +0 -50
  115. package/dist/index.d.cts +0 -10
  116. package/dist/jsonc-parser.cjs +0 -16
  117. package/dist/jsonc-parser.d.cts +0 -1
  118. package/dist/jsonc-utils.cjs +0 -25
  119. package/dist/jsonc-utils.d.cts +0 -7
  120. package/dist/load-rules.cjs +0 -39
  121. package/dist/load-rules.d.cts +0 -14
  122. package/dist/logger.browser.cjs +0 -55
  123. package/dist/logger.browser.d.cts +0 -21
  124. package/dist/logger.cjs +0 -55
  125. package/dist/logger.d.cts +0 -21
  126. package/dist/mock-files.cjs +0 -65
  127. package/dist/module-loader.cjs +0 -93
  128. package/dist/path-utils.cjs +0 -57
  129. package/dist/path-utils.d.cts +0 -7
  130. package/dist/pathe.cjs +0 -16
  131. package/dist/pathe.d.cts +0 -1
  132. package/dist/playground-grouping.cjs +0 -95
  133. package/dist/playground-grouping.d.cts +0 -12
  134. package/dist/route-constants.cjs +0 -30
  135. package/dist/route-utils.cjs +0 -126
  136. package/dist/route-utils.d.cts +0 -42
  137. package/dist/scan-utils.cjs +0 -39
  138. package/dist/scan-utils.d.cts +0 -114
  139. package/dist/shared/shared.DazgCdsk.d.cts +0 -49
  140. package/dist/shared/shared.DazgCdsk.d.mts +0 -49
  141. package/dist/shared/shared.DazgCdsk.d.ts +0 -49
  142. package/dist/timing.cjs +0 -20
  143. package/dist/timing.d.cts +0 -4
@@ -1,7 +1,2 @@
1
- declare const methodSet: Set<string>;
2
- declare const methodSuffixSet: Set<string>;
3
- declare const supportedExtensions: Set<string>;
4
- declare const configExtensions: readonly [".ts", ".js", ".mjs", ".cjs"];
5
- declare const jsonExtensions: Set<string>;
6
-
7
- export { configExtensions, jsonExtensions, methodSet, methodSuffixSet, supportedExtensions };
1
+ import { a as supportedExtensions, i as methodSuffixSet, n as jsonExtensions, r as methodSet, t as configExtensions } from "./route-constants-BUi36iYR.mjs";
2
+ export { configExtensions, jsonExtensions, methodSet, methodSuffixSet, supportedExtensions };
@@ -1,24 +1,28 @@
1
- const methodSet = /* @__PURE__ */ new Set([
2
- "GET",
3
- "POST",
4
- "PUT",
5
- "PATCH",
6
- "DELETE",
7
- "OPTIONS",
8
- "HEAD"
1
+ //#region src/route-constants.ts
2
+ const methodSet = new Set([
3
+ "GET",
4
+ "POST",
5
+ "PUT",
6
+ "PATCH",
7
+ "DELETE",
8
+ "OPTIONS",
9
+ "HEAD"
9
10
  ]);
10
- const methodSuffixSet = new Set(
11
- Array.from(methodSet, (method) => method.toLowerCase())
12
- );
13
- const supportedExtensions = /* @__PURE__ */ new Set([
14
- ".json",
15
- ".jsonc",
16
- ".ts",
17
- ".js",
18
- ".mjs",
19
- ".cjs"
11
+ const methodSuffixSet = new Set(Array.from(methodSet, (method) => method.toLowerCase()));
12
+ const supportedExtensions = new Set([
13
+ ".json",
14
+ ".jsonc",
15
+ ".ts",
16
+ ".js",
17
+ ".mjs",
18
+ ".cjs"
20
19
  ]);
21
- const configExtensions = [".ts", ".js", ".mjs", ".cjs"];
22
- const jsonExtensions = /* @__PURE__ */ new Set([".json", ".jsonc"]);
23
-
20
+ const configExtensions = [
21
+ ".ts",
22
+ ".js",
23
+ ".mjs",
24
+ ".cjs"
25
+ ];
26
+ const jsonExtensions = new Set([".json", ".jsonc"]);
27
+ //#endregion
24
28
  export { configExtensions, jsonExtensions, methodSet, methodSuffixSet, supportedExtensions };
@@ -0,0 +1,42 @@
1
+ //#region src/route-utils.d.ts
2
+ interface RouteParserResult<TToken = unknown> {
3
+ template: string;
4
+ tokens: TToken[];
5
+ score: number[];
6
+ errors: string[];
7
+ warnings: string[];
8
+ }
9
+ type RouteParser<TToken = unknown> = (template: string) => RouteParserResult<TToken>;
10
+ type RouteScoreComparator = (a: number[], b: number[]) => number;
11
+ interface DerivedRoute<TToken = unknown, TMethod extends string = string> {
12
+ template: string;
13
+ method: TMethod;
14
+ tokens: TToken[];
15
+ score: number[];
16
+ }
17
+ declare function createRouteUtils<TToken = unknown, TRule extends {
18
+ handler: unknown;
19
+ } = {
20
+ handler: unknown;
21
+ }, TMethod extends string = string>(params: {
22
+ parseRouteTemplate: RouteParser<TToken>;
23
+ compareRouteScore: RouteScoreComparator;
24
+ }): {
25
+ deriveRouteFromFile: (file: string, rootDir: string, warn?: (message: string) => void) => DerivedRoute<TToken, TMethod> | null;
26
+ resolveRule: <TOutput = DerivedRoute<TToken, TMethod>>(input: {
27
+ rule: TRule;
28
+ derivedTemplate: string;
29
+ derivedMethod?: TMethod | undefined;
30
+ prefix: string;
31
+ file: string;
32
+ warn?: (message: string) => void;
33
+ build?: (base: DerivedRoute<TToken, TMethod>, rule: TRule) => TOutput;
34
+ }) => TOutput | null;
35
+ sortRoutes: <TRoute extends {
36
+ method: string;
37
+ score: number[];
38
+ template: string;
39
+ }>(routes: TRoute[]) => TRoute[];
40
+ };
41
+ //#endregion
42
+ export { createRouteUtils as a, RouteScoreComparator as i, RouteParser as n, RouteParserResult as r, DerivedRoute as t };
@@ -0,0 +1,42 @@
1
+ //#region src/route-utils.d.ts
2
+ interface RouteParserResult<TToken = unknown> {
3
+ template: string;
4
+ tokens: TToken[];
5
+ score: number[];
6
+ errors: string[];
7
+ warnings: string[];
8
+ }
9
+ type RouteParser<TToken = unknown> = (template: string) => RouteParserResult<TToken>;
10
+ type RouteScoreComparator = (a: number[], b: number[]) => number;
11
+ interface DerivedRoute<TToken = unknown, TMethod extends string = string> {
12
+ template: string;
13
+ method: TMethod;
14
+ tokens: TToken[];
15
+ score: number[];
16
+ }
17
+ declare function createRouteUtils<TToken = unknown, TRule extends {
18
+ handler: unknown;
19
+ } = {
20
+ handler: unknown;
21
+ }, TMethod extends string = string>(params: {
22
+ parseRouteTemplate: RouteParser<TToken>;
23
+ compareRouteScore: RouteScoreComparator;
24
+ }): {
25
+ deriveRouteFromFile: (file: string, rootDir: string, warn?: (message: string) => void) => DerivedRoute<TToken, TMethod> | null;
26
+ resolveRule: <TOutput = DerivedRoute<TToken, TMethod>>(input: {
27
+ rule: TRule;
28
+ derivedTemplate: string;
29
+ derivedMethod?: TMethod | undefined;
30
+ prefix: string;
31
+ file: string;
32
+ warn?: (message: string) => void;
33
+ build?: (base: DerivedRoute<TToken, TMethod>, rule: TRule) => TOutput;
34
+ }) => TOutput | null;
35
+ sortRoutes: <TRoute extends {
36
+ method: string;
37
+ score: number[];
38
+ template: string;
39
+ }>(routes: TRoute[]) => TRoute[];
40
+ };
41
+ //#endregion
42
+ export { createRouteUtils as a, RouteScoreComparator as i, RouteParser as n, RouteParserResult as r, DerivedRoute as t };
@@ -1,42 +1,2 @@
1
- interface RouteParserResult<TToken = unknown> {
2
- template: string;
3
- tokens: TToken[];
4
- score: number[];
5
- errors: string[];
6
- warnings: string[];
7
- }
8
- type RouteParser<TToken = unknown> = (template: string) => RouteParserResult<TToken>;
9
- type RouteScoreComparator = (a: number[], b: number[]) => number;
10
- interface DerivedRoute<TToken = unknown> {
11
- template: string;
12
- method: string;
13
- tokens: TToken[];
14
- score: number[];
15
- }
16
- declare function createRouteUtils<TToken = unknown, TRule extends {
17
- handler: unknown;
18
- } = {
19
- handler: unknown;
20
- }>(params: {
21
- parseRouteTemplate: RouteParser<TToken>;
22
- compareRouteScore: RouteScoreComparator;
23
- }): {
24
- deriveRouteFromFile: (file: string, rootDir: string, warn?: (message: string) => void) => DerivedRoute<TToken> | null;
25
- resolveRule: <TOutput = DerivedRoute<TToken>>(input: {
26
- rule: TRule;
27
- derivedTemplate: string;
28
- derivedMethod?: string;
29
- prefix: string;
30
- file: string;
31
- warn?: (message: string) => void;
32
- build?: (base: DerivedRoute<TToken>, rule: TRule) => TOutput;
33
- }) => TOutput | null;
34
- sortRoutes: <TRoute extends {
35
- method: string;
36
- score: number[];
37
- template: string;
38
- }>(routes: TRoute[]) => TRoute[];
39
- };
40
-
41
- export { createRouteUtils };
42
- export type { DerivedRoute, RouteParser, RouteParserResult, RouteScoreComparator };
1
+ import { a as createRouteUtils, i as RouteScoreComparator, n as RouteParser, r as RouteParserResult, t as DerivedRoute } from "./route-utils-BiWFUqo-.mjs";
2
+ export { DerivedRoute, RouteParser, RouteParserResult, RouteScoreComparator, createRouteUtils };
@@ -1,42 +1,2 @@
1
- interface RouteParserResult<TToken = unknown> {
2
- template: string;
3
- tokens: TToken[];
4
- score: number[];
5
- errors: string[];
6
- warnings: string[];
7
- }
8
- type RouteParser<TToken = unknown> = (template: string) => RouteParserResult<TToken>;
9
- type RouteScoreComparator = (a: number[], b: number[]) => number;
10
- interface DerivedRoute<TToken = unknown> {
11
- template: string;
12
- method: string;
13
- tokens: TToken[];
14
- score: number[];
15
- }
16
- declare function createRouteUtils<TToken = unknown, TRule extends {
17
- handler: unknown;
18
- } = {
19
- handler: unknown;
20
- }>(params: {
21
- parseRouteTemplate: RouteParser<TToken>;
22
- compareRouteScore: RouteScoreComparator;
23
- }): {
24
- deriveRouteFromFile: (file: string, rootDir: string, warn?: (message: string) => void) => DerivedRoute<TToken> | null;
25
- resolveRule: <TOutput = DerivedRoute<TToken>>(input: {
26
- rule: TRule;
27
- derivedTemplate: string;
28
- derivedMethod?: string;
29
- prefix: string;
30
- file: string;
31
- warn?: (message: string) => void;
32
- build?: (base: DerivedRoute<TToken>, rule: TRule) => TOutput;
33
- }) => TOutput | null;
34
- sortRoutes: <TRoute extends {
35
- method: string;
36
- score: number[];
37
- template: string;
38
- }>(routes: TRoute[]) => TRoute[];
39
- };
40
-
41
- export { createRouteUtils };
42
- export type { DerivedRoute, RouteParser, RouteParserResult, RouteScoreComparator };
1
+ import { a as createRouteUtils, i as RouteScoreComparator, n as RouteParser, r as RouteParserResult, t as DerivedRoute } from "./route-utils-BiWFUqo-.mjs";
2
+ export { DerivedRoute, RouteParser, RouteParserResult, RouteScoreComparator, createRouteUtils };
@@ -1,124 +1,97 @@
1
- import { toPosix } from './path-utils.mjs';
2
- import { relative, extname, dirname, basename, join } from 'pathe';
3
- import { jsonExtensions, methodSuffixSet } from './route-constants.mjs';
4
- import { normalizePrefix } from './scan-utils.mjs';
5
- import 'node:process';
6
-
1
+ import { t as pathe_exports } from "./pathe.mjs";
2
+ import { jsonExtensions, methodSuffixSet } from "./route-constants.mjs";
3
+ import { toPosix } from "./path-utils.mjs";
4
+ import { normalizePrefix } from "./scan-utils.mjs";
5
+ //#region src/route-utils.ts
7
6
  function createRouteUtils(params) {
8
- const { parseRouteTemplate, compareRouteScore } = params;
9
- function resolveTemplate(template, prefix) {
10
- const normalized = template.startsWith("/") ? template : `/${template}`;
11
- if (!prefix) {
12
- return normalized;
13
- }
14
- const normalizedPrefix = normalizePrefix(prefix);
15
- if (!normalizedPrefix) {
16
- return normalized;
17
- }
18
- if (normalized === normalizedPrefix || normalized.startsWith(`${normalizedPrefix}/`)) {
19
- return normalized;
20
- }
21
- if (normalized === "/") {
22
- return `${normalizedPrefix}/`;
23
- }
24
- return `${normalizedPrefix}${normalized}`;
25
- }
26
- function stripMethodSuffix(base) {
27
- const segments = base.split(".");
28
- const last = segments.at(-1);
29
- if (last && methodSuffixSet.has(last.toLowerCase())) {
30
- segments.pop();
31
- return {
32
- name: segments.join("."),
33
- method: last.toUpperCase()
34
- };
35
- }
36
- return {
37
- name: base,
38
- method: void 0
39
- };
40
- }
41
- function deriveRouteFromFile(file, rootDir, warn) {
42
- const rel = toPosix(relative(rootDir, file));
43
- const ext = extname(rel);
44
- const withoutExt = rel.slice(0, rel.length - ext.length);
45
- const dir = dirname(withoutExt);
46
- const base = basename(withoutExt);
47
- const { name, method } = stripMethodSuffix(base);
48
- const resolvedMethod = method ?? (jsonExtensions.has(ext) ? "GET" : void 0);
49
- if (!resolvedMethod) {
50
- warn?.(`Skip mock without method suffix: ${file}`);
51
- return null;
52
- }
53
- if (!name) {
54
- warn?.(`Skip mock with empty route name: ${file}`);
55
- return null;
56
- }
57
- const joined = dir === "." ? name : join(dir, name);
58
- const segments = toPosix(joined).split("/");
59
- if (segments.at(-1) === "index") {
60
- segments.pop();
61
- }
62
- const template = segments.length === 0 ? "/" : `/${segments.join("/")}`;
63
- const parsed = parseRouteTemplate(template);
64
- if (parsed.errors.length > 0) {
65
- for (const error of parsed.errors) {
66
- warn?.(`${error} in ${file}`);
67
- }
68
- return null;
69
- }
70
- for (const warning of parsed.warnings) {
71
- warn?.(`${warning} in ${file}`);
72
- }
73
- return {
74
- template: parsed.template,
75
- method: resolvedMethod,
76
- tokens: parsed.tokens,
77
- score: parsed.score
78
- };
79
- }
80
- function resolveRule(input) {
81
- const method = input.derivedMethod;
82
- if (!method) {
83
- input.warn?.(`Skip mock without method suffix: ${input.file}`);
84
- return null;
85
- }
86
- const template = resolveTemplate(input.derivedTemplate, input.prefix);
87
- const parsed = parseRouteTemplate(template);
88
- if (parsed.errors.length > 0) {
89
- for (const error of parsed.errors) {
90
- input.warn?.(`${error} in ${input.file}`);
91
- }
92
- return null;
93
- }
94
- for (const warning of parsed.warnings) {
95
- input.warn?.(`${warning} in ${input.file}`);
96
- }
97
- const base = {
98
- template: parsed.template,
99
- method,
100
- tokens: parsed.tokens,
101
- score: parsed.score
102
- };
103
- return input.build ? input.build(base, input.rule) : base;
104
- }
105
- function sortRoutes(routes) {
106
- return routes.sort((a, b) => {
107
- if (a.method !== b.method) {
108
- return a.method.localeCompare(b.method);
109
- }
110
- const scoreCompare = compareRouteScore(a.score, b.score);
111
- if (scoreCompare !== 0) {
112
- return scoreCompare;
113
- }
114
- return a.template.localeCompare(b.template);
115
- });
116
- }
117
- return {
118
- deriveRouteFromFile,
119
- resolveRule,
120
- sortRoutes
121
- };
7
+ const { parseRouteTemplate, compareRouteScore } = params;
8
+ function resolveTemplate(template, prefix) {
9
+ const normalized = template.startsWith("/") ? template : `/${template}`;
10
+ if (!prefix) return normalized;
11
+ const normalizedPrefix = normalizePrefix(prefix);
12
+ if (!normalizedPrefix) return normalized;
13
+ if (normalized === normalizedPrefix || normalized.startsWith(`${normalizedPrefix}/`)) return normalized;
14
+ if (normalized === "/") return `${normalizedPrefix}/`;
15
+ return `${normalizedPrefix}${normalized}`;
16
+ }
17
+ function stripMethodSuffix(base) {
18
+ const segments = base.split(".");
19
+ const last = segments.at(-1);
20
+ if (last && methodSuffixSet.has(last.toLowerCase())) {
21
+ segments.pop();
22
+ return {
23
+ name: segments.join("."),
24
+ method: last.toUpperCase()
25
+ };
26
+ }
27
+ return {
28
+ name: base,
29
+ method: void 0
30
+ };
31
+ }
32
+ function deriveRouteFromFile(file, rootDir, warn) {
33
+ const rel = toPosix((0, pathe_exports.relative)(rootDir, file));
34
+ const ext = (0, pathe_exports.extname)(rel);
35
+ const withoutExt = rel.slice(0, rel.length - ext.length);
36
+ const dir = (0, pathe_exports.dirname)(withoutExt);
37
+ const { name, method } = stripMethodSuffix((0, pathe_exports.basename)(withoutExt));
38
+ const resolvedMethod = method ?? (jsonExtensions.has(ext) ? "GET" : void 0);
39
+ if (!resolvedMethod) {
40
+ warn?.(`Skip mock without method suffix: ${file}`);
41
+ return null;
42
+ }
43
+ if (!name) {
44
+ warn?.(`Skip mock with empty route name: ${file}`);
45
+ return null;
46
+ }
47
+ const segments = toPosix(dir === "." ? name : (0, pathe_exports.join)(dir, name)).split("/");
48
+ if (segments.at(-1) === "index") segments.pop();
49
+ const parsed = parseRouteTemplate(segments.length === 0 ? "/" : `/${segments.join("/")}`);
50
+ if (parsed.errors.length > 0) {
51
+ for (const error of parsed.errors) warn?.(`${error} in ${file}`);
52
+ return null;
53
+ }
54
+ for (const warning of parsed.warnings) warn?.(`${warning} in ${file}`);
55
+ return {
56
+ template: parsed.template,
57
+ method: resolvedMethod,
58
+ tokens: parsed.tokens,
59
+ score: parsed.score
60
+ };
61
+ }
62
+ function resolveRule(input) {
63
+ const method = input.derivedMethod;
64
+ if (!method) {
65
+ input.warn?.(`Skip mock without method suffix: ${input.file}`);
66
+ return null;
67
+ }
68
+ const parsed = parseRouteTemplate(resolveTemplate(input.derivedTemplate, input.prefix));
69
+ if (parsed.errors.length > 0) {
70
+ for (const error of parsed.errors) input.warn?.(`${error} in ${input.file}`);
71
+ return null;
72
+ }
73
+ for (const warning of parsed.warnings) input.warn?.(`${warning} in ${input.file}`);
74
+ const base = {
75
+ template: parsed.template,
76
+ method,
77
+ tokens: parsed.tokens,
78
+ score: parsed.score
79
+ };
80
+ return input.build ? input.build(base, input.rule) : base;
81
+ }
82
+ function sortRoutes(routes) {
83
+ return routes.sort((a, b) => {
84
+ if (a.method !== b.method) return a.method.localeCompare(b.method);
85
+ const scoreCompare = compareRouteScore(a.score, b.score);
86
+ if (scoreCompare !== 0) return scoreCompare;
87
+ return a.template.localeCompare(b.template);
88
+ });
89
+ }
90
+ return {
91
+ deriveRouteFromFile,
92
+ resolveRule,
93
+ sortRoutes
94
+ };
122
95
  }
123
-
96
+ //#endregion
124
97
  export { createRouteUtils };
@@ -1,114 +1,2 @@
1
- import './config-core.mjs';
2
- import './config-utils.mjs';
3
- import './define-config.mjs';
4
- import './jsonc-utils.mjs';
5
- import './load-rules.mjs';
6
- import './mock-files.mjs';
7
- import './module-loader.mjs';
8
- import './route-constants.mjs';
9
- import './route-utils.mjs';
10
-
11
- declare function normalizeMethod(method?: string | null): string | undefined;
12
- declare function normalizePrefix(prefix: string): string;
13
- declare function resolveDirs(dir: DirInput, root: string): string[];
14
- declare function normalizeIgnorePrefix(value: string | string[] | undefined, fallback?: string[]): string[];
15
-
16
- /**
17
- * Directory input for mock scanning.
18
- *
19
- * @example
20
- * import type { DirInput } from '@mokup/shared'
21
- *
22
- * const dir: DirInput = ['mock', 'fixtures']
23
- */
24
- type DirInput = string | string[] | ((root: string) => string | string[]) | undefined;
25
- /**
26
- * Shared entry options for mokup scanners and plugins.
27
- *
28
- * @example
29
- * import type { MockEntryOptions } from '@mokup/shared'
30
- *
31
- * const entry: MockEntryOptions = {
32
- * dir: 'mock',
33
- * prefix: '/api',
34
- * watch: true,
35
- * }
36
- */
37
- interface MockEntryOptions {
38
- /**
39
- * Directory (or directories) to scan for mock routes.
40
- *
41
- * @default "mock" (resolved by Vite/webpack plugins)
42
- */
43
- dir?: DirInput;
44
- /**
45
- * Request path prefix to mount mock routes under.
46
- *
47
- * @default ""
48
- */
49
- prefix?: string;
50
- /**
51
- * Include filter for files to scan.
52
- *
53
- * @default undefined
54
- */
55
- include?: RegExp | RegExp[];
56
- /**
57
- * Exclude filter for files to scan.
58
- *
59
- * @default undefined
60
- */
61
- exclude?: RegExp | RegExp[];
62
- /**
63
- * Ignore file or folder prefixes when scanning.
64
- *
65
- * @default ["."]
66
- */
67
- ignorePrefix?: string | string[];
68
- /**
69
- * Enable file watching for live route updates.
70
- *
71
- * @default true
72
- */
73
- watch?: boolean;
74
- /**
75
- * Enable mokup logging.
76
- *
77
- * @default true
78
- */
79
- log?: boolean;
80
- }
81
- /**
82
- * Playground configuration input.
83
- *
84
- * @example
85
- * import type { PlaygroundOptionsInput } from '@mokup/shared'
86
- *
87
- * const playground: PlaygroundOptionsInput = {
88
- * path: '/__mokup',
89
- * enabled: true,
90
- * }
91
- */
92
- type PlaygroundOptionsInput = boolean | {
93
- /**
94
- * Base path for the playground UI.
95
- *
96
- * @default "/__mokup"
97
- */
98
- path?: string;
99
- /**
100
- * Emit playground assets during production builds.
101
- *
102
- * @default false
103
- */
104
- build?: boolean;
105
- /**
106
- * Enable or disable the playground routes.
107
- *
108
- * @default true
109
- */
110
- enabled?: boolean;
111
- } | undefined;
112
-
113
- export { normalizeIgnorePrefix, normalizeMethod, normalizePrefix, resolveDirs };
114
- export type { DirInput as D, MockEntryOptions as M, PlaygroundOptionsInput as P };
1
+ import { a as normalizeMethod, i as normalizeIgnorePrefix, o as normalizePrefix, s as resolveDirs } from "./index-5prVUGOX.mjs";
2
+ export { normalizeIgnorePrefix, normalizeMethod, normalizePrefix, resolveDirs };