Skip to content

Consultas & Filtros — JavaScript / TypeScript

Índice

Filtragem e Descida Recursiva

Expressões de filtro

Use [?campo operador valor] para filtrar arrays:

typescript
const data = {
    products: [
        { name: "Laptop", price: 1200, category: "electronics" },
        { name: "Phone", price: 800, category: "electronics" },
        { name: "Book", price: 25, category: "education" },
    ],
};

const accessor = SafeAccess.fromObject(data);

// Filtrar por igualdade
accessor.get("products[?category=='electronics'].name");
// ["Laptop", "Phone"]

// Filtrar por comparação numérica
accessor.get("products[?price>500].name");
// ["Laptop", "Phone"]

// Combinar com AND / OR
accessor.get("products[?price>100 && category=='electronics'].name");
// ["Laptop", "Phone"]

accessor.get("products[?price>1000 || category=='education'].name");
// ["Laptop", "Book"]

Descida recursiva

Use ..key para coletar todos os valores com essa chave em qualquer profundidade:

typescript
const org = {
    name: "Corp",
    departments: {
        engineering: {
            name: "Engineering",
            teams: {
                frontend: { name: "Frontend", members: 5 },
                backend: { name: "Backend", members: 8 },
            },
        },
        marketing: { name: "Marketing", members: 3 },
    },
};

const accessor = SafeAccess.fromObject(org);
accessor.get("..name");
// ["Corp", "Engineering", "Frontend", "Backend", "Marketing"]

accessor.get("..members");
// [5, 8, 3]

Combinando filtros com descida

typescript
const data = {
    region1: {
        stores: [
            { name: "Store A", revenue: 50000, active: true },
            { name: "Store B", revenue: 20000, active: false },
        ],
    },
    region2: {
        stores: [{ name: "Store C", revenue: 80000, active: true }],
    },
};

const accessor = SafeAccess.fromObject(data);

// Nomes de todas as lojas ativas em todas as regiões
accessor.get("..stores[?active==true].name");
// ["Store A", "Store C"]

Deep Merge

O método merge() faz deep-merge de objetos. Arrays e escalares são substituídos, objetos aninhados são mesclados recursivamente:

typescript
const accessor = SafeAccess.fromObject({
    user: { name: "Ana", settings: { theme: "light", lang: "en" } },
});

// Merge em um caminho específico
const updated = accessor.merge("user.settings", {
    theme: "dark",
    notifications: true,
});
updated.get("user.settings.theme"); // "dark"
updated.get("user.settings.lang"); // "en" (preservado)
updated.get("user.settings.notifications"); // true

// Merge na raiz
const withMeta = accessor.merge({ version: "2.0", debug: false });
withMeta.get("version"); // "2.0"
withMeta.get("user.name"); // "Ana" (preservado)

Released under the MIT License.