aaex-file-router 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A file-based routing system for React projects that automatically generates routes from your file structure. Similar to Next.js App Router or Remix file conventions.
4
4
 
5
- ## V. 1.3.1
5
+ ## V. 1.3.2
6
6
 
7
7
  Routes are now able to be infinitely nested
8
8
 
@@ -10,10 +10,20 @@ export declare class FileScanner {
10
10
  constructor(pages_dir: string);
11
11
  /**
12
12
  * Recursively scan directory and return nested FileData
13
+ * - Scans files of a given folder
14
+ * - converts and returns as usable data
15
+ * - Format:
16
+ * {name: string,
17
+ * relative_path: string,
18
+ * parent_path: string,
19
+ * isDirectory: string
20
+ * }
21
+ * @param dir string
22
+ * @returns FileData[]
13
23
  */
14
24
  private scan_files;
15
25
  /**
16
- * Public entry point: returns nested FileData structure
26
+ * Public file point: returns nested FileData structure
17
27
  */
18
28
  get_file_data(): Promise<FileData[]>;
19
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FileScanner.d.ts","sourceRoot":"","sources":["../../src/core/FileScanner.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,QAAQ,EAAE,MAAM,CAAC;gBAEL,SAAS,EAAE,MAAM;IAI7B;;OAEG;YACW,UAAU;IA0BxB;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAKlD"}
1
+ {"version":3,"file":"FileScanner.d.ts","sourceRoot":"","sources":["../../src/core/FileScanner.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,QAAQ,EAAE,MAAM,CAAC;gBAEL,SAAS,EAAE,MAAM;IAI7B;;;;;;;;;;;;OAYG;YACW,UAAU;IA+BxB;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAKlD"}
@@ -7,21 +7,36 @@ export class FileScanner {
7
7
  }
8
8
  /**
9
9
  * Recursively scan directory and return nested FileData
10
+ * - Scans files of a given folder
11
+ * - converts and returns as usable data
12
+ * - Format:
13
+ * {name: string,
14
+ * relative_path: string,
15
+ * parent_path: string,
16
+ * isDirectory: string
17
+ * }
18
+ * @param dir string
19
+ * @returns FileData[]
10
20
  */
11
21
  async scan_files(dir) {
12
- const entries = await fs.readdir(dir, { withFileTypes: true });
22
+ //scans the parent folder and outputs an array of files
23
+ const files = await fs.readdir(dir, { withFileTypes: true });
13
24
  const result = [];
14
- for (const entry of entries) {
15
- const fullPath = path.join(dir, entry.name);
16
- const relativePath = path.relative(process.cwd(), fullPath).replace(/\\/g, "/");
25
+ for (const file of files) {
26
+ const fullPath = path.join(dir, file.name);
27
+ const relativePath = path
28
+ .relative(process.cwd(), fullPath)
29
+ .replace(/\\/g, "/");
17
30
  const parentPath = path.relative(process.cwd(), dir).replace(/\\/g, "/") + "/";
31
+ // convert to usable data
18
32
  const fileData = {
19
- name: entry.name,
33
+ name: file.name,
20
34
  relative_path: relativePath,
21
35
  parent_path: parentPath,
22
- isDirectory: entry.isDirectory(),
36
+ isDirectory: file.isDirectory(),
23
37
  };
24
- if (entry.isDirectory()) {
38
+ //recurivly scan directories for more files
39
+ if (file.isDirectory()) {
25
40
  fileData.children = await this.scan_files(fullPath);
26
41
  }
27
42
  result.push(fileData);
@@ -29,7 +44,7 @@ export class FileScanner {
29
44
  return result;
30
45
  }
31
46
  /**
32
- * Public entry point: returns nested FileData structure
47
+ * Public file point: returns nested FileData structure
33
48
  */
34
49
  async get_file_data() {
35
50
  const fullDir = path.join(process.cwd(), this.page_dir);
@@ -1 +1 @@
1
- {"version":3,"file":"FileScanner.js","sourceRoot":"","sources":["../../src/core/FileScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAS;IAEjB,YAAY,SAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,GAAW;QAClC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YAE/E,MAAM,QAAQ,GAAa;gBACzB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,aAAa,EAAE,YAAY;gBAC3B,WAAW,EAAE,UAAU;gBACvB,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;aACjC,CAAC;YAEF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,QAAQ,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"FileScanner.js","sourceRoot":"","sources":["../../src/core/FileScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAS;IAEjB,YAAY,SAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,UAAU,CAAC,GAAW;QAClC,uDAAuD;QACvD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI;iBACtB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC;iBACjC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvB,MAAM,UAAU,GACd,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YAE9D,yBAAyB;YACzB,MAAM,QAAQ,GAAa;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa,EAAE,YAAY;gBAC3B,WAAW,EAAE,UAAU;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;aAChC,CAAC;YACF,2CAA2C;YAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,QAAQ,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -8,21 +8,21 @@ interface FileNode {
8
8
  export declare class RouteGenerator {
9
9
  private topLevelImports;
10
10
  private importSet;
11
- /**
12
- * Converts a FileData-like tree into React Router routes
13
- * @param files - Array of file/folder objects passed externally
14
- * @param parentPath - Current path for recursion
15
- */
11
+ /** Converts filenames/folders to URL-friendly paths, e.g., [id] -> :id */
12
+ private normalizeSegment;
13
+ /** Converts string to PascalCase for React component names */
14
+ private toPascal;
15
+ /** Adds import statement for codegen, avoiding duplicates */
16
+ private addImport;
17
+ /** Generates PascalCase import name, handles nested index files */
18
+ private getImportName;
19
+ private createDirectoryRoute;
20
+ private createFileRoute;
21
+ /** Converts file tree to nested RouteConfig array */
16
22
  private fileDataToRoutes;
17
- /**
18
- * Generates a React Router routes file as a string
19
- * @param fileData - FileData-like tree
20
- */
23
+ /** Generates a TypeScript routes file as a string */
21
24
  generateRoutesFile(fileData: FileNode[]): Promise<string>;
22
- /**
23
- * Generates TypeScript type definition for all route paths
24
- * @param fileData - FileData-like tree
25
- */
25
+ /** Generates a TypeScript union type for all routes */
26
26
  generateRoutesTypeDef(fileData: FileNode[]): Promise<string>;
27
27
  }
28
28
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"AAMA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,SAAS,CAA0B;IAE3C;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAgGxB;;;OAGG;IACU,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBtE;;;OAGG;IACU,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA8B1E"}
1
+ {"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"AAMA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,SAAS,CAA0B;IAI3C,0EAA0E;IAC1E,OAAO,CAAC,gBAAgB;IAIxB,8DAA8D;IAC9D,OAAO,CAAC,QAAQ;IAMhB,6DAA6D;IAC7D,OAAO,CAAC,SAAS;IAQjB,mEAAmE;IACnE,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,eAAe;IAmBvB,qDAAqD;IACrD,OAAO,CAAC,gBAAgB;IAcxB,qDAAqD;IACxC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBtE,uDAAuD;IAC1C,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA6B1E"}
@@ -1,87 +1,77 @@
1
1
  export class RouteGenerator {
2
2
  topLevelImports = [];
3
- importSet = new Set();
4
- /**
5
- * Converts a FileData-like tree into React Router routes
6
- * @param files - Array of file/folder objects passed externally
7
- * @param parentPath - Current path for recursion
8
- */
9
- fileDataToRoutes(files, parentPath = "", isChild = false) {
10
- const routes = [];
11
- const normalizeSegment = (name) => name.replace(/\[([^\]]+)\]/g, ":$1").toLowerCase();
12
- const toPascal = (str) => str
3
+ importSet = new Set(); // avoids duplicate imports
4
+ // ---------------- Helpers ----------------
5
+ /** Converts filenames/folders to URL-friendly paths, e.g., [id] -> :id */
6
+ normalizeSegment(name) {
7
+ return name.replace(/\[([^\]]+)\]/g, ":$1").toLowerCase();
8
+ }
9
+ /** Converts string to PascalCase for React component names */
10
+ toPascal(str) {
11
+ return str
13
12
  .replace(/\[|\]/g, "")
14
13
  .replace(/(^\w|[-_]\w)/g, (m) => m.replace(/[-_]/, "").toUpperCase());
15
- const getImportName = (file, parentPath) => {
16
- const nameWithoutExt = file.name.replace(/\.[jt]sx?$/, "");
17
- if (nameWithoutExt.toLowerCase() === "index" && parentPath) {
18
- // Use parent folder prefix for nested index
19
- const segments = parentPath.split("/").filter(Boolean);
20
- return toPascal(segments.join("")) + "Index";
21
- }
22
- return toPascal(nameWithoutExt);
23
- };
24
- for (const file of files) {
25
- if (file.isDirectory) {
26
- const layout = file.children?.find((f) => !f.isDirectory && /^layout\.(tsx|jsx|ts|js)$/i.test(f.name));
27
- const route = {
28
- path: normalizeSegment(file.name),
29
- };
30
- if (layout) {
31
- const importName = `${toPascal(file.name)}Layout`;
32
- const importPath = `./${layout.relative_path.replace(/^src[\/\\]/, "")}`;
33
- if (!this.importSet.has(layout.relative_path)) {
34
- this.topLevelImports.push(`import ${importName} from '${importPath}';`);
35
- this.importSet.add(layout.relative_path);
36
- }
37
- route.element = `React.createElement(${importName})`;
38
- }
39
- if (file.children?.length) {
40
- const children = file.children.filter((f) => !/^layout\.(tsx|jsx|ts|js)$/i.test(f.name));
41
- if (children.length) {
42
- // Pass true for isChild to make children paths relative
43
- route.children = this.fileDataToRoutes(children, route.path, true);
44
- }
45
- }
46
- routes.push(route);
47
- }
48
- else {
49
- const nameWithoutExt = file.name.replace(/\.[jt]sx?$/, "");
50
- const isIndex = nameWithoutExt.toLowerCase() === "index";
51
- // If child, path is relative; otherwise, top-level gets full path
52
- let pathSegment = isIndex ? "" : normalizeSegment(nameWithoutExt);
53
- if (isChild) {
54
- // Children always use relative paths
55
- pathSegment = pathSegment;
56
- }
57
- else {
58
- pathSegment = parentPath
59
- ? `${parentPath}/${pathSegment}`
60
- : pathSegment;
61
- }
62
- const importName = getImportName(file, parentPath);
63
- ;
64
- const importPath = `./${file.relative_path.replace(/^src[\/\\]/, "")}`;
65
- if (!this.importSet.has(file.relative_path)) {
66
- this.topLevelImports.push(`import ${importName} from '${importPath}';`);
67
- this.importSet.add(file.relative_path);
68
- }
69
- routes.push({
70
- path: pathSegment,
71
- element: `React.createElement(${importName})`,
72
- });
14
+ }
15
+ /** Adds import statement for codegen, avoiding duplicates */
16
+ addImport(file, importName) {
17
+ if (!this.importSet.has(file.relative_path)) {
18
+ const importPath = `./${file.relative_path.replace(/^src[\/\\]/, "")}`;
19
+ this.topLevelImports.push(`import ${importName} from '${importPath}';`);
20
+ this.importSet.add(file.relative_path);
21
+ }
22
+ }
23
+ /** Generates PascalCase import name, handles nested index files */
24
+ getImportName(file, parentPath) {
25
+ const nameWithoutExt = file.name.replace(/\.[jt]sx?$/, "");
26
+ if (nameWithoutExt.toLowerCase() === "index" && parentPath) {
27
+ const segments = parentPath.split("/").filter(Boolean);
28
+ return this.toPascal(segments.join("")) + "Index";
29
+ }
30
+ return this.toPascal(nameWithoutExt);
31
+ }
32
+ // ---------------- Route Creation ----------------
33
+ createDirectoryRoute(file) {
34
+ const route = { path: this.normalizeSegment(file.name) };
35
+ // Use layout if present
36
+ const layout = file.children?.find((f) => !f.isDirectory && /^layout\.(tsx|jsx|ts|js)$/i.test(f.name));
37
+ if (layout) {
38
+ const importName = `${this.toPascal(file.name)}Layout`;
39
+ this.addImport(layout, importName);
40
+ route.element = `React.createElement(${importName})`;
41
+ }
42
+ // Recursively add children routes
43
+ if (file.children?.length) {
44
+ const children = file.children.filter((f) => !/^layout\.(tsx|jsx|ts|js)$/i.test(f.name));
45
+ if (children.length) {
46
+ route.children = this.fileDataToRoutes(children, route.path, true);
73
47
  }
74
48
  }
75
- return routes;
49
+ return route;
50
+ }
51
+ createFileRoute(file, parentPath, isChild) {
52
+ const nameWithoutExt = file.name.replace(/\.[jt]sx?$/, "");
53
+ const isIndex = nameWithoutExt.toLowerCase() === "index";
54
+ let pathSegment = isIndex ? "" : this.normalizeSegment(nameWithoutExt);
55
+ if (!isChild && parentPath)
56
+ pathSegment = `${parentPath}/${pathSegment}`;
57
+ const importName = this.getImportName(file, parentPath);
58
+ this.addImport(file, importName);
59
+ return { path: pathSegment, element: `React.createElement(${importName})` };
60
+ }
61
+ // ---------------- Recursion ----------------
62
+ /** Converts file tree to nested RouteConfig array */
63
+ fileDataToRoutes(files, parentPath = "", isChild = false) {
64
+ return files.map((file) => file.isDirectory
65
+ ? this.createDirectoryRoute(file)
66
+ : this.createFileRoute(file, parentPath, isChild));
76
67
  }
77
- /**
78
- * Generates a React Router routes file as a string
79
- * @param fileData - FileData-like tree
80
- */
68
+ // ---------------- Code Generation ----------------
69
+ /** Generates a TypeScript routes file as a string */
81
70
  async generateRoutesFile(fileData) {
82
71
  this.topLevelImports = [];
83
- this.importSet = new Set();
72
+ this.importSet.clear();
84
73
  const routes = this.fileDataToRoutes(fileData);
74
+ // Replace quotes around element strings with actual React code
85
75
  const routesString = JSON.stringify(routes, null, 2).replace(/"React\.createElement\((\w+)\)"/g, "React.createElement($1)");
86
76
  return `//* AUTO GENERATED: DO NOT EDIT
87
77
  import React from 'react';
@@ -93,10 +83,7 @@ const routes: RouteObject[] = ${routesString};
93
83
  export default routes;
94
84
  `;
95
85
  }
96
- /**
97
- * Generates TypeScript type definition for all route paths
98
- * @param fileData - FileData-like tree
99
- */
86
+ /** Generates a TypeScript union type for all routes */
100
87
  async generateRoutesTypeDef(fileData) {
101
88
  const routes = this.fileDataToRoutes(fileData);
102
89
  const paths = [];
@@ -1 +1 @@
1
- {"version":3,"file":"RouteGenerator.js","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteGenerator.js","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aaex-file-router",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "A file-based routing system for React projects that automatically generates routes from your file structure. Similar to Next.js App Router or Remix file conventions.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {