@maketribe/ms-app 3.0.9 → 3.0.10
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/cjs/utils.js +1 -4
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/utils.js +1 -4
- package/dist/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/utils.ts +4 -4
package/dist/cjs/utils.js
CHANGED
|
@@ -32,7 +32,7 @@ function generateRoutesFromFiles(files) {
|
|
|
32
32
|
route.path += getRoutePath(tokens);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
route.path = file.module.mkRoute
|
|
35
|
+
route.path = file.module.mkRoute?.path || route.path;
|
|
36
36
|
parent.push(route);
|
|
37
37
|
}
|
|
38
38
|
return prepareRoutes(routes);
|
|
@@ -137,9 +137,6 @@ function prepareRoutes(routes, parent, keys = /* @__PURE__ */ new Set()) {
|
|
|
137
137
|
if (route.children?.length) {
|
|
138
138
|
route.children = prepareRoutes(route.children, route, keys);
|
|
139
139
|
}
|
|
140
|
-
if (route.children?.find((childRoute) => childRoute.path === "")) {
|
|
141
|
-
delete route.key;
|
|
142
|
-
}
|
|
143
140
|
if (route.key) {
|
|
144
141
|
keys.add(route.key);
|
|
145
142
|
}
|
package/dist/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import { encodePath } from \"ufo\";\n\nenum SegmentParserState {\n initial,\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface ScannedFile {\n path: string;\n module: any;\n}\n\nenum SegmentTokenType {\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface SegmentToken {\n type: SegmentTokenType;\n value: string;\n}\n\nexport function generateRoutesFromFiles(files: ScannedFile[]) {\n const routes: any[] = [];\n\n for (const file of files) {\n const segments = file.path.split(\"/\");\n\n const route: Record<string, any> = {\n meta: {},\n ...file.module.mkRoute,\n key: \"\",\n path: \"\",\n component: async () => file.module,\n children: [],\n };\n\n let parent = routes;\n\n for (const segment of segments) {\n const tokens = parseSegment(segment);\n const segmentName = tokens.map(({ value }) => value).join(\"\");\n\n route.key += (route.key && \"/\") + segmentName;\n\n const path = route.path + getRoutePath(tokens).replace(/\\/index$/, \"/\");\n const child = parent.find(\n (parentRoute) =>\n parentRoute.key === route.key && parentRoute.path === path\n );\n\n if (child && child.children) {\n parent = child.children;\n route.path = \"\";\n } else if (segmentName === \"index\" && !route.path) {\n route.path += \"/\";\n } else if (segmentName !== \"index\") {\n route.path += getRoutePath(tokens);\n }\n }\n\n route.path = file.module.mkRoute.path || route.path;\n\n parent.push(route);\n }\n\n return prepareRoutes(routes);\n}\n\nfunction getRoutePath(tokens: SegmentToken[]) {\n return tokens.reduce((path, token) => {\n return (\n path +\n (token.type === SegmentTokenType.optional\n ? `:${token.value}?`\n : token.type === SegmentTokenType.dynamic\n ? `:${token.value}()`\n : token.type === SegmentTokenType.catchall\n ? `:${token.value}(.*)*`\n : encodePath(token.value).replace(/:/g, \"\\\\:\"))\n );\n }, \"/\");\n}\n\nconst PARAM_CHAR_RE = /[\\w\\d_.]/;\n\nfunction parseSegment(segment: string) {\n let state: SegmentParserState = SegmentParserState.initial;\n\n let i = 0;\n\n let buffer = \"\";\n const tokens: SegmentToken[] = [];\n\n function consumeBuffer() {\n if (!buffer) {\n return;\n }\n\n if (state === SegmentParserState.initial) {\n throw new Error(\"错误的状态\");\n }\n\n tokens.push({\n type:\n state === SegmentParserState.static\n ? SegmentTokenType.static\n : state === SegmentParserState.dynamic\n ? SegmentTokenType.dynamic\n : state === SegmentParserState.optional\n ? SegmentTokenType.optional\n : SegmentTokenType.catchall,\n value: buffer,\n });\n\n buffer = \"\";\n }\n\n while (i < segment.length) {\n const c = segment[i];\n\n switch (state) {\n case SegmentParserState.initial:\n buffer = \"\";\n\n if (c === \"[\") {\n state = SegmentParserState.dynamic;\n } else {\n i--;\n state = SegmentParserState.static;\n }\n\n break;\n case SegmentParserState.static:\n if (c === \"[\") {\n consumeBuffer();\n state = SegmentParserState.dynamic;\n } else {\n buffer += c;\n }\n break;\n case SegmentParserState.catchall:\n case SegmentParserState.dynamic:\n case SegmentParserState.optional:\n if (buffer === \"...\") {\n buffer = \"\";\n state = SegmentParserState.catchall;\n }\n\n if (c === \"[\" && state === SegmentParserState.dynamic) {\n state = SegmentParserState.optional;\n }\n\n if (\n c === \"]\" &&\n (state !== SegmentParserState.optional || segment[i - 1] === \"]\")\n ) {\n if (!buffer) {\n throw new Error(\"空参数\");\n }\n consumeBuffer();\n state = SegmentParserState.initial;\n } else if (PARAM_CHAR_RE.test(c)) {\n buffer += c;\n }\n break;\n }\n\n i++;\n }\n\n if (state === SegmentParserState.dynamic) {\n throw new Error(`Unfinished param \"${buffer}\"`);\n }\n\n consumeBuffer();\n\n return tokens;\n}\n\nfunction findRouteByKey(key: string, routes: any[]): any | undefined {\n for (const route of routes) {\n if (route.key === key) {\n return route;\n }\n }\n return findRouteByKey(key, routes);\n}\n\nfunction prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {\n for (const route of routes) {\n // Remove -index\n if (route.key) {\n route.key = route.key.replace(/\\/index$/, \"\").replace(/\\//g, \"-\");\n\n if (keys.has(route.key)) {\n const existingRoute = findRouteByKey(route.key, routes);\n const extra = existingRoute?.name\n ? `is the same as \\`${existingRoute.file}\\``\n : \"is a duplicate\";\n console.warn(\n `Route name generated for \\`${route.file}\\` ${extra}. You may wish to set a custom name using \\`definePageMeta\\` within the page file.`\n );\n }\n }\n\n route.path = route.path.replace(/\\/\\//g, \"/\");\n\n // Remove leading / if children route\n if (parent && route.path.startsWith(\"/\")) {\n route.path = route.path.slice(1);\n }\n\n if (route.children?.length) {\n route.children = prepareRoutes(route.children, route, keys);\n }\n\n if (route.children?.find((childRoute: any) => childRoute.path === \"\")) {\n delete route.key;\n }\n\n if (route.key) {\n keys.add(route.key);\n }\n }\n\n return routes;\n}\n"],"names":["encodePath"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import { encodePath } from \"ufo\";\n\nenum SegmentParserState {\n initial,\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface ScannedFile {\n path: string;\n module: any;\n}\n\nenum SegmentTokenType {\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface SegmentToken {\n type: SegmentTokenType;\n value: string;\n}\n\nexport function generateRoutesFromFiles(files: ScannedFile[]) {\n const routes: any[] = [];\n\n for (const file of files) {\n const segments = file.path.split(\"/\");\n\n const route: Record<string, any> = {\n meta: {},\n ...file.module.mkRoute,\n key: \"\",\n path: \"\",\n component: async () => file.module,\n children: [],\n };\n\n let parent = routes;\n\n for (const segment of segments) {\n const tokens = parseSegment(segment);\n const segmentName = tokens.map(({ value }) => value).join(\"\");\n\n route.key += (route.key && \"/\") + segmentName;\n\n const path = route.path + getRoutePath(tokens).replace(/\\/index$/, \"/\");\n const child = parent.find(\n (parentRoute) =>\n parentRoute.key === route.key && parentRoute.path === path\n );\n\n if (child && child.children) {\n parent = child.children;\n route.path = \"\";\n } else if (segmentName === \"index\" && !route.path) {\n route.path += \"/\";\n } else if (segmentName !== \"index\") {\n route.path += getRoutePath(tokens);\n }\n }\n\n route.path = file.module.mkRoute?.path || route.path;\n\n parent.push(route);\n }\n\n return prepareRoutes(routes);\n}\n\nfunction getRoutePath(tokens: SegmentToken[]) {\n return tokens.reduce((path, token) => {\n return (\n path +\n (token.type === SegmentTokenType.optional\n ? `:${token.value}?`\n : token.type === SegmentTokenType.dynamic\n ? `:${token.value}()`\n : token.type === SegmentTokenType.catchall\n ? `:${token.value}(.*)*`\n : encodePath(token.value).replace(/:/g, \"\\\\:\"))\n );\n }, \"/\");\n}\n\nconst PARAM_CHAR_RE = /[\\w\\d_.]/;\n\nfunction parseSegment(segment: string) {\n let state: SegmentParserState = SegmentParserState.initial;\n\n let i = 0;\n\n let buffer = \"\";\n const tokens: SegmentToken[] = [];\n\n function consumeBuffer() {\n if (!buffer) {\n return;\n }\n\n if (state === SegmentParserState.initial) {\n throw new Error(\"错误的状态\");\n }\n\n tokens.push({\n type:\n state === SegmentParserState.static\n ? SegmentTokenType.static\n : state === SegmentParserState.dynamic\n ? SegmentTokenType.dynamic\n : state === SegmentParserState.optional\n ? SegmentTokenType.optional\n : SegmentTokenType.catchall,\n value: buffer,\n });\n\n buffer = \"\";\n }\n\n while (i < segment.length) {\n const c = segment[i];\n\n switch (state) {\n case SegmentParserState.initial:\n buffer = \"\";\n\n if (c === \"[\") {\n state = SegmentParserState.dynamic;\n } else {\n i--;\n state = SegmentParserState.static;\n }\n\n break;\n case SegmentParserState.static:\n if (c === \"[\") {\n consumeBuffer();\n state = SegmentParserState.dynamic;\n } else {\n buffer += c;\n }\n break;\n case SegmentParserState.catchall:\n case SegmentParserState.dynamic:\n case SegmentParserState.optional:\n if (buffer === \"...\") {\n buffer = \"\";\n state = SegmentParserState.catchall;\n }\n\n if (c === \"[\" && state === SegmentParserState.dynamic) {\n state = SegmentParserState.optional;\n }\n\n if (\n c === \"]\" &&\n (state !== SegmentParserState.optional || segment[i - 1] === \"]\")\n ) {\n if (!buffer) {\n throw new Error(\"空参数\");\n }\n consumeBuffer();\n state = SegmentParserState.initial;\n } else if (PARAM_CHAR_RE.test(c)) {\n buffer += c;\n }\n break;\n }\n\n i++;\n }\n\n if (state === SegmentParserState.dynamic) {\n throw new Error(`Unfinished param \"${buffer}\"`);\n }\n\n consumeBuffer();\n\n return tokens;\n}\n\nfunction findRouteByKey(key: string, routes: any[]): any | undefined {\n for (const route of routes) {\n if (route.key === key) {\n return route;\n }\n }\n return findRouteByKey(key, routes);\n}\n\nfunction prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {\n for (const route of routes) {\n // Remove -index\n if (route.key) {\n route.key = route.key.replace(/\\/index$/, \"\").replace(/\\//g, \"-\");\n\n if (keys.has(route.key)) {\n const existingRoute = findRouteByKey(route.key, routes);\n const extra = existingRoute?.name\n ? `is the same as \\`${existingRoute.file}\\``\n : \"is a duplicate\";\n console.warn(\n `Route name generated for \\`${route.file}\\` ${extra}. You may wish to set a custom name using \\`definePageMeta\\` within the page file.`\n );\n }\n }\n\n route.path = route.path.replace(/\\/\\//g, \"/\");\n\n // Remove leading / if children route\n if (parent && route.path.startsWith(\"/\")) {\n route.path = route.path.slice(1);\n }\n\n if (route.children?.length) {\n route.children = prepareRoutes(route.children, route, keys);\n }\n\n // if (route.children?.find((childRoute: any) => childRoute.path === \"\")) {\n // delete route.key;\n // }\n\n if (route.key) {\n keys.add(route.key);\n }\n }\n\n return routes;\n}\n"],"names":["encodePath"],"mappings":"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"}
|
package/dist/esm/utils.js
CHANGED
|
@@ -30,7 +30,7 @@ function generateRoutesFromFiles(files) {
|
|
|
30
30
|
route.path += getRoutePath(tokens);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
route.path = file.module.mkRoute
|
|
33
|
+
route.path = file.module.mkRoute?.path || route.path;
|
|
34
34
|
parent.push(route);
|
|
35
35
|
}
|
|
36
36
|
return prepareRoutes(routes);
|
|
@@ -135,9 +135,6 @@ function prepareRoutes(routes, parent, keys = /* @__PURE__ */ new Set()) {
|
|
|
135
135
|
if (route.children?.length) {
|
|
136
136
|
route.children = prepareRoutes(route.children, route, keys);
|
|
137
137
|
}
|
|
138
|
-
if (route.children?.find((childRoute) => childRoute.path === "")) {
|
|
139
|
-
delete route.key;
|
|
140
|
-
}
|
|
141
138
|
if (route.key) {
|
|
142
139
|
keys.add(route.key);
|
|
143
140
|
}
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import { encodePath } from \"ufo\";\n\nenum SegmentParserState {\n initial,\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface ScannedFile {\n path: string;\n module: any;\n}\n\nenum SegmentTokenType {\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface SegmentToken {\n type: SegmentTokenType;\n value: string;\n}\n\nexport function generateRoutesFromFiles(files: ScannedFile[]) {\n const routes: any[] = [];\n\n for (const file of files) {\n const segments = file.path.split(\"/\");\n\n const route: Record<string, any> = {\n meta: {},\n ...file.module.mkRoute,\n key: \"\",\n path: \"\",\n component: async () => file.module,\n children: [],\n };\n\n let parent = routes;\n\n for (const segment of segments) {\n const tokens = parseSegment(segment);\n const segmentName = tokens.map(({ value }) => value).join(\"\");\n\n route.key += (route.key && \"/\") + segmentName;\n\n const path = route.path + getRoutePath(tokens).replace(/\\/index$/, \"/\");\n const child = parent.find(\n (parentRoute) =>\n parentRoute.key === route.key && parentRoute.path === path\n );\n\n if (child && child.children) {\n parent = child.children;\n route.path = \"\";\n } else if (segmentName === \"index\" && !route.path) {\n route.path += \"/\";\n } else if (segmentName !== \"index\") {\n route.path += getRoutePath(tokens);\n }\n }\n\n route.path = file.module.mkRoute.path || route.path;\n\n parent.push(route);\n }\n\n return prepareRoutes(routes);\n}\n\nfunction getRoutePath(tokens: SegmentToken[]) {\n return tokens.reduce((path, token) => {\n return (\n path +\n (token.type === SegmentTokenType.optional\n ? `:${token.value}?`\n : token.type === SegmentTokenType.dynamic\n ? `:${token.value}()`\n : token.type === SegmentTokenType.catchall\n ? `:${token.value}(.*)*`\n : encodePath(token.value).replace(/:/g, \"\\\\:\"))\n );\n }, \"/\");\n}\n\nconst PARAM_CHAR_RE = /[\\w\\d_.]/;\n\nfunction parseSegment(segment: string) {\n let state: SegmentParserState = SegmentParserState.initial;\n\n let i = 0;\n\n let buffer = \"\";\n const tokens: SegmentToken[] = [];\n\n function consumeBuffer() {\n if (!buffer) {\n return;\n }\n\n if (state === SegmentParserState.initial) {\n throw new Error(\"错误的状态\");\n }\n\n tokens.push({\n type:\n state === SegmentParserState.static\n ? SegmentTokenType.static\n : state === SegmentParserState.dynamic\n ? SegmentTokenType.dynamic\n : state === SegmentParserState.optional\n ? SegmentTokenType.optional\n : SegmentTokenType.catchall,\n value: buffer,\n });\n\n buffer = \"\";\n }\n\n while (i < segment.length) {\n const c = segment[i];\n\n switch (state) {\n case SegmentParserState.initial:\n buffer = \"\";\n\n if (c === \"[\") {\n state = SegmentParserState.dynamic;\n } else {\n i--;\n state = SegmentParserState.static;\n }\n\n break;\n case SegmentParserState.static:\n if (c === \"[\") {\n consumeBuffer();\n state = SegmentParserState.dynamic;\n } else {\n buffer += c;\n }\n break;\n case SegmentParserState.catchall:\n case SegmentParserState.dynamic:\n case SegmentParserState.optional:\n if (buffer === \"...\") {\n buffer = \"\";\n state = SegmentParserState.catchall;\n }\n\n if (c === \"[\" && state === SegmentParserState.dynamic) {\n state = SegmentParserState.optional;\n }\n\n if (\n c === \"]\" &&\n (state !== SegmentParserState.optional || segment[i - 1] === \"]\")\n ) {\n if (!buffer) {\n throw new Error(\"空参数\");\n }\n consumeBuffer();\n state = SegmentParserState.initial;\n } else if (PARAM_CHAR_RE.test(c)) {\n buffer += c;\n }\n break;\n }\n\n i++;\n }\n\n if (state === SegmentParserState.dynamic) {\n throw new Error(`Unfinished param \"${buffer}\"`);\n }\n\n consumeBuffer();\n\n return tokens;\n}\n\nfunction findRouteByKey(key: string, routes: any[]): any | undefined {\n for (const route of routes) {\n if (route.key === key) {\n return route;\n }\n }\n return findRouteByKey(key, routes);\n}\n\nfunction prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {\n for (const route of routes) {\n // Remove -index\n if (route.key) {\n route.key = route.key.replace(/\\/index$/, \"\").replace(/\\//g, \"-\");\n\n if (keys.has(route.key)) {\n const existingRoute = findRouteByKey(route.key, routes);\n const extra = existingRoute?.name\n ? `is the same as \\`${existingRoute.file}\\``\n : \"is a duplicate\";\n console.warn(\n `Route name generated for \\`${route.file}\\` ${extra}. You may wish to set a custom name using \\`definePageMeta\\` within the page file.`\n );\n }\n }\n\n route.path = route.path.replace(/\\/\\//g, \"/\");\n\n // Remove leading / if children route\n if (parent && route.path.startsWith(\"/\")) {\n route.path = route.path.slice(1);\n }\n\n if (route.children?.length) {\n route.children = prepareRoutes(route.children, route, keys);\n }\n\n if (route.children?.find((childRoute: any) => childRoute.path === \"\")) {\n delete route.key;\n }\n\n if (route.key) {\n keys.add(route.key);\n }\n }\n\n return routes;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import { encodePath } from \"ufo\";\n\nenum SegmentParserState {\n initial,\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface ScannedFile {\n path: string;\n module: any;\n}\n\nenum SegmentTokenType {\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface SegmentToken {\n type: SegmentTokenType;\n value: string;\n}\n\nexport function generateRoutesFromFiles(files: ScannedFile[]) {\n const routes: any[] = [];\n\n for (const file of files) {\n const segments = file.path.split(\"/\");\n\n const route: Record<string, any> = {\n meta: {},\n ...file.module.mkRoute,\n key: \"\",\n path: \"\",\n component: async () => file.module,\n children: [],\n };\n\n let parent = routes;\n\n for (const segment of segments) {\n const tokens = parseSegment(segment);\n const segmentName = tokens.map(({ value }) => value).join(\"\");\n\n route.key += (route.key && \"/\") + segmentName;\n\n const path = route.path + getRoutePath(tokens).replace(/\\/index$/, \"/\");\n const child = parent.find(\n (parentRoute) =>\n parentRoute.key === route.key && parentRoute.path === path\n );\n\n if (child && child.children) {\n parent = child.children;\n route.path = \"\";\n } else if (segmentName === \"index\" && !route.path) {\n route.path += \"/\";\n } else if (segmentName !== \"index\") {\n route.path += getRoutePath(tokens);\n }\n }\n\n route.path = file.module.mkRoute?.path || route.path;\n\n parent.push(route);\n }\n\n return prepareRoutes(routes);\n}\n\nfunction getRoutePath(tokens: SegmentToken[]) {\n return tokens.reduce((path, token) => {\n return (\n path +\n (token.type === SegmentTokenType.optional\n ? `:${token.value}?`\n : token.type === SegmentTokenType.dynamic\n ? `:${token.value}()`\n : token.type === SegmentTokenType.catchall\n ? `:${token.value}(.*)*`\n : encodePath(token.value).replace(/:/g, \"\\\\:\"))\n );\n }, \"/\");\n}\n\nconst PARAM_CHAR_RE = /[\\w\\d_.]/;\n\nfunction parseSegment(segment: string) {\n let state: SegmentParserState = SegmentParserState.initial;\n\n let i = 0;\n\n let buffer = \"\";\n const tokens: SegmentToken[] = [];\n\n function consumeBuffer() {\n if (!buffer) {\n return;\n }\n\n if (state === SegmentParserState.initial) {\n throw new Error(\"错误的状态\");\n }\n\n tokens.push({\n type:\n state === SegmentParserState.static\n ? SegmentTokenType.static\n : state === SegmentParserState.dynamic\n ? SegmentTokenType.dynamic\n : state === SegmentParserState.optional\n ? SegmentTokenType.optional\n : SegmentTokenType.catchall,\n value: buffer,\n });\n\n buffer = \"\";\n }\n\n while (i < segment.length) {\n const c = segment[i];\n\n switch (state) {\n case SegmentParserState.initial:\n buffer = \"\";\n\n if (c === \"[\") {\n state = SegmentParserState.dynamic;\n } else {\n i--;\n state = SegmentParserState.static;\n }\n\n break;\n case SegmentParserState.static:\n if (c === \"[\") {\n consumeBuffer();\n state = SegmentParserState.dynamic;\n } else {\n buffer += c;\n }\n break;\n case SegmentParserState.catchall:\n case SegmentParserState.dynamic:\n case SegmentParserState.optional:\n if (buffer === \"...\") {\n buffer = \"\";\n state = SegmentParserState.catchall;\n }\n\n if (c === \"[\" && state === SegmentParserState.dynamic) {\n state = SegmentParserState.optional;\n }\n\n if (\n c === \"]\" &&\n (state !== SegmentParserState.optional || segment[i - 1] === \"]\")\n ) {\n if (!buffer) {\n throw new Error(\"空参数\");\n }\n consumeBuffer();\n state = SegmentParserState.initial;\n } else if (PARAM_CHAR_RE.test(c)) {\n buffer += c;\n }\n break;\n }\n\n i++;\n }\n\n if (state === SegmentParserState.dynamic) {\n throw new Error(`Unfinished param \"${buffer}\"`);\n }\n\n consumeBuffer();\n\n return tokens;\n}\n\nfunction findRouteByKey(key: string, routes: any[]): any | undefined {\n for (const route of routes) {\n if (route.key === key) {\n return route;\n }\n }\n return findRouteByKey(key, routes);\n}\n\nfunction prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {\n for (const route of routes) {\n // Remove -index\n if (route.key) {\n route.key = route.key.replace(/\\/index$/, \"\").replace(/\\//g, \"-\");\n\n if (keys.has(route.key)) {\n const existingRoute = findRouteByKey(route.key, routes);\n const extra = existingRoute?.name\n ? `is the same as \\`${existingRoute.file}\\``\n : \"is a duplicate\";\n console.warn(\n `Route name generated for \\`${route.file}\\` ${extra}. You may wish to set a custom name using \\`definePageMeta\\` within the page file.`\n );\n }\n }\n\n route.path = route.path.replace(/\\/\\//g, \"/\");\n\n // Remove leading / if children route\n if (parent && route.path.startsWith(\"/\")) {\n route.path = route.path.slice(1);\n }\n\n if (route.children?.length) {\n route.children = prepareRoutes(route.children, route, keys);\n }\n\n // if (route.children?.find((childRoute: any) => childRoute.path === \"\")) {\n // delete route.key;\n // }\n\n if (route.key) {\n keys.add(route.key);\n }\n }\n\n return routes;\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maketribe/ms-app",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/cjs",
|
|
6
6
|
"files": [
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"vue-codemirror": "^6.1.1",
|
|
22
22
|
"vue-router": "^4.2.4",
|
|
23
23
|
"@maketribe/dm": "^3.0.7",
|
|
24
|
-
"@maketribe/utils": "^1.1.1",
|
|
25
24
|
"@maketribe/locale": "^1.0.5",
|
|
25
|
+
"@maketribe/utils": "^1.1.1",
|
|
26
26
|
"@maketribe/request": "^1.1.8"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
package/src/utils.ts
CHANGED
|
@@ -64,7 +64,7 @@ export function generateRoutesFromFiles(files: ScannedFile[]) {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
route.path = file.module.mkRoute
|
|
67
|
+
route.path = file.module.mkRoute?.path || route.path;
|
|
68
68
|
|
|
69
69
|
parent.push(route);
|
|
70
70
|
}
|
|
@@ -220,9 +220,9 @@ function prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {
|
|
|
220
220
|
route.children = prepareRoutes(route.children, route, keys);
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
if (route.children?.find((childRoute: any) => childRoute.path === "")) {
|
|
224
|
-
|
|
225
|
-
}
|
|
223
|
+
// if (route.children?.find((childRoute: any) => childRoute.path === "")) {
|
|
224
|
+
// delete route.key;
|
|
225
|
+
// }
|
|
226
226
|
|
|
227
227
|
if (route.key) {
|
|
228
228
|
keys.add(route.key);
|