dirent-router 1.0.5 → 1.0.7

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/bin/router.d.ts CHANGED
@@ -18,7 +18,7 @@ export type RouteDefinition = {
18
18
  };
19
19
  export type FlatRouteDefinition = Omit<RouteDefinition, "children">;
20
20
  export declare const getRouteStructure: (path: string) => Promise<RouteStructure>;
21
- export declare const getNestedRoutes: (rootPath: string, structure: RouteStructure) => Promise<RouteDefinition>;
21
+ export declare const getNestedRoutes: (rootPath: string, structure: RouteStructure, seen?: Set<string>) => Promise<RouteDefinition>;
22
22
  export declare const flattenNestedRoutes: (defs: RouteDefinition) => Promise<FlatRouteDefinition[]>;
23
23
  export declare const getRoutes: (cfg: RouterConfig) => Promise<FlatRouteDefinition[]>;
24
24
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAIzD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAsBpE,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX,OAAO,CAAC,cAAc,CAsBxB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,WAAW,cAAc,KACxB,OAAO,CAAC,eAAe,CAoBzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,eAAe,KACpB,OAAO,CAAC,mBAAmB,EAAE,CA6B/B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,YAAY,KAChB,OAAO,CAAC,mBAAmB,EAAE,CAK/B,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAIzD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAsBpE,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX,OAAO,CAAC,cAAc,CAuCxB,CAAC;AAcF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,WAAW,cAAc,EACzB,OAAM,GAAG,CAAC,MAAM,CAAa,KAC5B,OAAO,CAAC,eAAe,CAuBzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,eAAe,KACpB,OAAO,CAAC,mBAAmB,EAAE,CAoC/B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,YAAY,KAChB,OAAO,CAAC,mBAAmB,EAAE,CAK/B,CAAC"}
package/bin/router.js CHANGED
@@ -23,37 +23,53 @@ const getEntries = async (path) => {
23
23
  return entries;
24
24
  };
25
25
  const getRouteStructure = async (path) => {
26
- const entries = await getEntries(path);
27
- const children = (await Promise.all(entries.map(async (entry) => {
28
- const abspath = path_1.default.join(entry.parentPath, entry.name);
29
- if (entry.isDirectory()) {
30
- return await (0, exports.getRouteStructure)(abspath);
31
- }
32
- return {
33
- filepath: abspath,
34
- children: [],
35
- };
36
- }))).flat();
26
+ const makeChildren = async (childrenpath) => {
27
+ const entries = await getEntries(childrenpath);
28
+ return (await Promise.all(entries.map(async (entry) => {
29
+ const abspath = path_1.default.join(entry.parentPath, entry.name);
30
+ if (entry.isDirectory()) {
31
+ const nextEntries = await getEntries(abspath);
32
+ const hasIndex = nextEntries.some((x) => x.name.match(/.*?index(\.ts)|(\.tsx)/));
33
+ if (hasIndex) {
34
+ return await makeChildren(abspath);
35
+ }
36
+ return await (0, exports.getRouteStructure)(abspath);
37
+ }
38
+ return {
39
+ filepath: abspath,
40
+ children: [],
41
+ };
42
+ }))).flat();
43
+ };
44
+ const children = await makeChildren(path);
37
45
  return {
38
46
  filepath: path,
39
47
  children: children,
40
48
  };
41
49
  };
42
50
  exports.getRouteStructure = getRouteStructure;
43
- const getNestedRoutes = async (rootPath, structure) => {
51
+ const makeEndpoint = (relativepath) => "/" +
52
+ [relativepath]
53
+ .map((x) => x
54
+ .replace("index.tsx", "")
55
+ .replace("index.ts", "")
56
+ .replace(".tsx", "")
57
+ .replace(".ts", ""))
58
+ .map((x) => (x.endsWith("/") ? x.slice(0, -1) : x))[0];
59
+ const getNestedRoutes = async (rootPath, structure, seen = new Set()) => {
44
60
  const relativepath = path_1.default.relative(rootPath, structure.filepath);
45
- const endpoint = "/" +
46
- [relativepath]
47
- .map((x) => x.replace("index.tsx", "").replace("index.ts", "").replace(".tsx", "").replace(".ts", ""))
48
- .map((x) => (x.endsWith("/") ? x.slice(0, -1) : x))[0];
61
+ const endpoint = makeEndpoint(relativepath);
62
+ seen.add(endpoint);
49
63
  return {
50
64
  filepath: structure.filepath,
51
65
  relativepath: relativepath,
52
66
  endpoint: endpoint,
53
67
  args: (0, endpoint_1.parseEndpoint)(endpoint),
54
68
  methods: {},
55
- children: await Promise.all(structure.children.map(async (child) => {
56
- return (0, exports.getNestedRoutes)(rootPath, child);
69
+ children: await Promise.all(structure.children
70
+ .filter((x) => !seen.has(makeEndpoint(path_1.default.relative(rootPath, x.filepath))))
71
+ .map(async (child) => {
72
+ return (0, exports.getNestedRoutes)(rootPath, child, seen);
57
73
  })),
58
74
  };
59
75
  };
@@ -74,6 +90,14 @@ const flattenNestedRoutes = async (defs) => {
74
90
  if (typeof v === "function") {
75
91
  methods[k] = v;
76
92
  }
93
+ else if (typeof v === 'object' && v !== null) {
94
+ const obj = v;
95
+ for (const [k2, v2] of Object.entries(obj)) {
96
+ if (typeof v2 === 'function') {
97
+ methods[k2] = v2;
98
+ }
99
+ }
100
+ }
77
101
  }
78
102
  }
79
103
  catch (e) {
package/bin/router.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
package/dist/router.d.ts CHANGED
@@ -18,7 +18,7 @@ export type RouteDefinition = {
18
18
  };
19
19
  export type FlatRouteDefinition = Omit<RouteDefinition, "children">;
20
20
  export declare const getRouteStructure: (path: string) => Promise<RouteStructure>;
21
- export declare const getNestedRoutes: (rootPath: string, structure: RouteStructure) => Promise<RouteDefinition>;
21
+ export declare const getNestedRoutes: (rootPath: string, structure: RouteStructure, seen?: Set<string>) => Promise<RouteDefinition>;
22
22
  export declare const flattenNestedRoutes: (defs: RouteDefinition) => Promise<FlatRouteDefinition[]>;
23
23
  export declare const getRoutes: (cfg: RouterConfig) => Promise<FlatRouteDefinition[]>;
24
24
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAIzD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAsBpE,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX,OAAO,CAAC,cAAc,CAsBxB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,WAAW,cAAc,KACxB,OAAO,CAAC,eAAe,CAoBzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,eAAe,KACpB,OAAO,CAAC,mBAAmB,EAAE,CA6B/B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,YAAY,KAChB,OAAO,CAAC,mBAAmB,EAAE,CAK/B,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAIzD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAsBpE,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX,OAAO,CAAC,cAAc,CAuCxB,CAAC;AAcF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,WAAW,cAAc,EACzB,OAAM,GAAG,CAAC,MAAM,CAAa,KAC5B,OAAO,CAAC,eAAe,CAuBzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,eAAe,KACpB,OAAO,CAAC,mBAAmB,EAAE,CAoC/B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,YAAY,KAChB,OAAO,CAAC,mBAAmB,EAAE,CAK/B,CAAC"}
package/dist/router.js CHANGED
@@ -23,37 +23,53 @@ const getEntries = async (path) => {
23
23
  return entries;
24
24
  };
25
25
  const getRouteStructure = async (path) => {
26
- const entries = await getEntries(path);
27
- const children = (await Promise.all(entries.map(async (entry) => {
28
- const abspath = path_1.default.join(entry.parentPath, entry.name);
29
- if (entry.isDirectory()) {
30
- return await (0, exports.getRouteStructure)(abspath);
31
- }
32
- return {
33
- filepath: abspath,
34
- children: [],
35
- };
36
- }))).flat();
26
+ const makeChildren = async (childrenpath) => {
27
+ const entries = await getEntries(childrenpath);
28
+ return (await Promise.all(entries.map(async (entry) => {
29
+ const abspath = path_1.default.join(entry.parentPath, entry.name);
30
+ if (entry.isDirectory()) {
31
+ const nextEntries = await getEntries(abspath);
32
+ const hasIndex = nextEntries.some((x) => x.name.match(/.*?index(\.ts)|(\.tsx)/));
33
+ if (hasIndex) {
34
+ return await makeChildren(abspath);
35
+ }
36
+ return await (0, exports.getRouteStructure)(abspath);
37
+ }
38
+ return {
39
+ filepath: abspath,
40
+ children: [],
41
+ };
42
+ }))).flat();
43
+ };
44
+ const children = await makeChildren(path);
37
45
  return {
38
46
  filepath: path,
39
47
  children: children,
40
48
  };
41
49
  };
42
50
  exports.getRouteStructure = getRouteStructure;
43
- const getNestedRoutes = async (rootPath, structure) => {
51
+ const makeEndpoint = (relativepath) => "/" +
52
+ [relativepath]
53
+ .map((x) => x
54
+ .replace("index.tsx", "")
55
+ .replace("index.ts", "")
56
+ .replace(".tsx", "")
57
+ .replace(".ts", ""))
58
+ .map((x) => (x.endsWith("/") ? x.slice(0, -1) : x))[0];
59
+ const getNestedRoutes = async (rootPath, structure, seen = new Set()) => {
44
60
  const relativepath = path_1.default.relative(rootPath, structure.filepath);
45
- const endpoint = "/" +
46
- [relativepath]
47
- .map((x) => x.replace("index.tsx", "").replace("index.ts", "").replace(".tsx", "").replace(".ts", ""))
48
- .map((x) => (x.endsWith("/") ? x.slice(0, -1) : x))[0];
61
+ const endpoint = makeEndpoint(relativepath);
62
+ seen.add(endpoint);
49
63
  return {
50
64
  filepath: structure.filepath,
51
65
  relativepath: relativepath,
52
66
  endpoint: endpoint,
53
67
  args: (0, endpoint_1.parseEndpoint)(endpoint),
54
68
  methods: {},
55
- children: await Promise.all(structure.children.map(async (child) => {
56
- return (0, exports.getNestedRoutes)(rootPath, child);
69
+ children: await Promise.all(structure.children
70
+ .filter((x) => !seen.has(makeEndpoint(path_1.default.relative(rootPath, x.filepath))))
71
+ .map(async (child) => {
72
+ return (0, exports.getNestedRoutes)(rootPath, child, seen);
57
73
  })),
58
74
  };
59
75
  };
@@ -74,6 +90,14 @@ const flattenNestedRoutes = async (defs) => {
74
90
  if (typeof v === "function") {
75
91
  methods[k] = v;
76
92
  }
93
+ else if (typeof v === 'object' && v !== null) {
94
+ const obj = v;
95
+ for (const [k2, v2] of Object.entries(obj)) {
96
+ if (typeof v2 === 'function') {
97
+ methods[k2] = v2;
98
+ }
99
+ }
100
+ }
77
101
  }
78
102
  }
79
103
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":";;;;;;AAAA,iCAAwC;AAExC,2DAA6B;AAC7B,gDAA2B;AAE3B,yCAAyD;AA0BzD,2BAA2B;AAE3B,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IACxC,MAAM,OAAO,GAAqB,CAChC,MAAM,kBAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,IAAI;KACpB,CAAC,CACH,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,CACL,CAAC,KAAK,CAAC,WAAW,EAAE;YAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACzB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,KAAK,EACpC,IAAY,EACa,EAAE;IAC3B,MAAM,YAAY,GAAG,KAAK,EACxB,YAAoB,EACO,EAAE;QAC7B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAC/C,OAAO,CACL,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CACT,KAAK,EAAE,KAAK,EAA8C,EAAE;YAC1D,MAAM,OAAO,GAAG,cAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CACvC,CAAC;gBAEF,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;gBACrC,CAAC;gBAED,OAAO,MAAM,IAAA,yBAAiB,EAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC,CACF,CACF,CACF,CAAC,IAAI,EAAE,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAE1C,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,QAAQ;KACnB,CAAC;AACJ,CAAC,CAAC;AAzCW,QAAA,iBAAiB,qBAyC5B;AAEF,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAU,EAAE,CACpD,GAAG;IACH,CAAC,YAAY,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC;SACE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;AAErD,MAAM,eAAe,GAAG,KAAK,EAClC,QAAgB,EAChB,SAAyB,EACzB,OAAoB,IAAI,GAAG,EAAE,EACH,EAAE;IAC5B,MAAM,YAAY,GAAG,cAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEnB,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,IAAA,wBAAa,EAAC,QAAQ,CAAC;QAC7B,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CACzB,SAAS,CAAC,QAAQ;aACf,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClE;aACA,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACnB,OAAO,IAAA,uBAAe,EAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CACL;KACF,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,eAAe,mBA2B1B;AAEK,MAAM,mBAAmB,GAAG,KAAK,EACtC,IAAqB,EACW,EAAE;IAClC,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,MAAM,CAAC,GAA2B,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExB,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;oBAC3B,OAAmC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/C,MAAM,GAAG,GAAG,CAA4B,CAAC;oBACzC,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3C,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;4BAC5B,OAAmC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAA,WAAI,EAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,IAAA,eAAQ,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC;AAtCW,QAAA,mBAAmB,uBAsC9B;AAEK,MAAM,SAAS,GAAG,KAAK,EAC5B,GAAiB,EACe,EAAE;IAClC,MAAM,QAAQ,GAAG,cAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,IAAA,yBAAiB,EAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,IAAA,uBAAe,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,MAAM,IAAA,2BAAmB,EAAC,IAAI,CAAC,CAAC;AACzC,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dirent-router",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./dist/index.d.ts",
package/src/router.ts CHANGED
@@ -52,22 +52,39 @@ const getEntries = async (path: string) => {
52
52
  export const getRouteStructure = async (
53
53
  path: string,
54
54
  ): Promise<RouteStructure> => {
55
- const entries = await getEntries(path);
56
- const children = (
57
- await Promise.all(
58
- entries.map(async (entry): Promise<RouteStructure> => {
59
- const abspath = pathlib.join(entry.parentPath, entry.name);
60
- if (entry.isDirectory()) {
61
- return await getRouteStructure(abspath);
62
- }
55
+ const makeChildren = async (
56
+ childrenpath: string,
57
+ ): Promise<RouteStructure[]> => {
58
+ const entries = await getEntries(childrenpath);
59
+ return (
60
+ await Promise.all(
61
+ entries.map(
62
+ async (entry): Promise<RouteStructure | RouteStructure[]> => {
63
+ const abspath = pathlib.join(entry.parentPath, entry.name);
64
+ if (entry.isDirectory()) {
65
+ const nextEntries = await getEntries(abspath);
66
+ const hasIndex = nextEntries.some((x) =>
67
+ x.name.match(/.*?index(\.ts)|(\.tsx)/),
68
+ );
69
+
70
+ if (hasIndex) {
71
+ return await makeChildren(abspath);
72
+ }
73
+
74
+ return await getRouteStructure(abspath);
75
+ }
76
+
77
+ return {
78
+ filepath: abspath,
79
+ children: [],
80
+ };
81
+ },
82
+ ),
83
+ )
84
+ ).flat();
85
+ };
63
86
 
64
- return {
65
- filepath: abspath,
66
- children: [],
67
- };
68
- }),
69
- )
70
- ).flat();
87
+ const children = await makeChildren(path);
71
88
 
72
89
  return {
73
90
  filepath: path,
@@ -75,16 +92,27 @@ export const getRouteStructure = async (
75
92
  };
76
93
  };
77
94
 
95
+ const makeEndpoint = (relativepath: string): string =>
96
+ "/" +
97
+ [relativepath]
98
+ .map((x) =>
99
+ x
100
+ .replace("index.tsx", "")
101
+ .replace("index.ts", "")
102
+ .replace(".tsx", "")
103
+ .replace(".ts", ""),
104
+ )
105
+ .map((x) => (x.endsWith("/") ? x.slice(0, -1) : x))[0]!;
106
+
78
107
  export const getNestedRoutes = async (
79
108
  rootPath: string,
80
109
  structure: RouteStructure,
110
+ seen: Set<string> = new Set(),
81
111
  ): Promise<RouteDefinition> => {
82
112
  const relativepath = pathlib.relative(rootPath, structure.filepath);
83
- const endpoint =
84
- "/" +
85
- [relativepath]
86
- .map((x) => x.replace("index.tsx", "").replace("index.ts", "").replace(".tsx", "").replace(".ts", ""))
87
- .map((x) => (x.endsWith("/") ? x.slice(0, -1) : x))[0]!;
113
+ const endpoint = makeEndpoint(relativepath);
114
+
115
+ seen.add(endpoint);
88
116
 
89
117
  return {
90
118
  filepath: structure.filepath,
@@ -93,9 +121,14 @@ export const getNestedRoutes = async (
93
121
  args: parseEndpoint(endpoint),
94
122
  methods: {},
95
123
  children: await Promise.all(
96
- structure.children.map(async (child) => {
97
- return getNestedRoutes(rootPath, child);
98
- }),
124
+ structure.children
125
+ .filter(
126
+ (x) =>
127
+ !seen.has(makeEndpoint(pathlib.relative(rootPath, x.filepath))),
128
+ )
129
+ .map(async (child) => {
130
+ return getNestedRoutes(rootPath, child, seen);
131
+ }),
99
132
  ),
100
133
  };
101
134
  };
@@ -120,6 +153,13 @@ export const flattenNestedRoutes = async (
120
153
  for (const [k, v] of Object.entries(module)) {
121
154
  if (typeof v === "function") {
122
155
  (methods as Record<string, unknown>)[k] = v;
156
+ } else if (typeof v === 'object' && v !== null) {
157
+ const obj = v as Record<string, unknown>;
158
+ for (const [k2, v2] of Object.entries(obj)) {
159
+ if (typeof v2 === 'function') {
160
+ (methods as Record<string, unknown>)[k2] = v2;
161
+ }
162
+ }
123
163
  }
124
164
  }
125
165
  } catch (e) {