@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 CHANGED
@@ -32,7 +32,7 @@ function generateRoutesFromFiles(files) {
32
32
  route.path += getRoutePath(tokens);
33
33
  }
34
34
  }
35
- route.path = file.module.mkRoute.path || route.path;
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
  }
@@ -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.path || route.path;
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
  }
@@ -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.9",
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.path || route.path;
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
- delete route.key;
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);