[Utils] Merge from pre-rewrite
This commit is contained in:
parent
ae616da565
commit
110181b6fd
5 changed files with 68 additions and 1 deletions
7
src/def.d.ts
vendored
7
src/def.d.ts
vendored
|
@ -18,6 +18,13 @@ interface Logger {
|
|||
verbose: LoggerFunction,
|
||||
}
|
||||
|
||||
type SearchFilter = (tree: any) => boolean;
|
||||
interface FindInTreeOptions {
|
||||
walkable?: string[];
|
||||
ignore?: string[];
|
||||
maxDepth?: number;
|
||||
}
|
||||
|
||||
interface VendettaObject {
|
||||
patcher: {
|
||||
after: typeof _spitroast.after;
|
||||
|
|
11
src/lib/utils/copyText.ts
Normal file
11
src/lib/utils/copyText.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { findByProps } from "@metro/filters";
|
||||
|
||||
const clipboard = findByProps("setString", "getString");
|
||||
|
||||
export default function copyText(content: string) {
|
||||
try {
|
||||
clipboard.setString(content);
|
||||
} catch (e) {
|
||||
throw new Error("Failed to set clipboard content.")
|
||||
}
|
||||
}
|
8
src/lib/utils/findInReactTree.ts
Normal file
8
src/lib/utils/findInReactTree.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
import { SearchFilter } from "@types";
|
||||
import findInTree from "@utils/findInTree";
|
||||
|
||||
export default function findInReactTree(tree: { [key: string]: any }, filter: SearchFilter): any {
|
||||
return findInTree(tree, filter, {
|
||||
walkable: ["props", "children", "child", "sibling"],
|
||||
});
|
||||
}
|
40
src/lib/utils/findInTree.ts
Normal file
40
src/lib/utils/findInTree.ts
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
Disclaimer: https://github.com/Cordwood/Cordwood/blob/91c0b971bbf05e112927df75415df99fa105e1e7/src/lib/utils/findInTree.ts
|
||||
*/
|
||||
|
||||
import { FindInTreeOptions, SearchFilter } from "@types";
|
||||
|
||||
export default function findInTree(tree: { [key: string]: any }, filter: SearchFilter, { walkable = [], ignore = [], maxDepth = 100 }: FindInTreeOptions = {}): any {
|
||||
let iteration = 0;
|
||||
|
||||
function doSearch(tree: { [key: string]: any }, filter: SearchFilter, { walkable = [], ignore = [] }: FindInTreeOptions = {}): any {
|
||||
iteration += 1;
|
||||
if (iteration > maxDepth) return;
|
||||
|
||||
if (typeof filter === "string") {
|
||||
if (tree.hasOwnProperty(filter)) return tree[filter];
|
||||
} else if (filter(tree)) return tree;
|
||||
|
||||
if (!tree) return;
|
||||
|
||||
if (Array.isArray(tree)) {
|
||||
for (const item of tree) {
|
||||
const found = doSearch(item, filter, { walkable, ignore });
|
||||
if (found) return found;
|
||||
}
|
||||
} else if (typeof tree === "object") {
|
||||
for (const key of Object.keys(tree)) {
|
||||
if (walkable != null && walkable.includes(key)) continue;
|
||||
|
||||
if (ignore.includes(key)) continue;
|
||||
|
||||
try {
|
||||
const found = doSearch(tree[key], filter, { walkable, ignore });
|
||||
if (found) return found;
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return doSearch(tree, filter, { walkable, ignore });
|
||||
}
|
|
@ -16,7 +16,8 @@
|
|||
"@/*": ["src/*"],
|
||||
"@types": ["src/def.d.ts"],
|
||||
"@lib/*": ["src/lib/*"],
|
||||
"@metro/*": ["src/lib/metro/*"]
|
||||
"@metro/*": ["src/lib/metro/*"],
|
||||
"@utils/*": ["src/lib/utils/*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue