Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -83,7 +83,7 @@ function makeEngine() {
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -102,7 +102,7 @@ function makeEngine() {
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/security/api-key.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ function makeQl(rows: any[]) {
find: async (object: string, opts: any) => {
if (object !== 'sys_api_key') return [];
const where = opts?.where ?? {};
return rows.filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
return rows.filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
},
};
}
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/security/resolve-authz-context.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ function makeQl(tables: Record<string, any[]>) {
const rows = tables[object] ?? [];
const where = opts?.where ?? {};
return rows.filter((r) =>
Object.entries(where).every(([k, v]) => {
Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`);
if (v && typeof v === 'object' && '$in' in (v as any)) return (v as any).$in.includes(r[k]);
return r[k] === v;
}),
Expand DownExpand Up@@ -123,7 +123,7 @@ function makeCountingQl(tables: Record<string, any[]>) {
const rows = tables[object] ?? [];
const where = opts?.where ?? {};
return rows.filter((r) =>
Object.entries(where).every(([k, v]) => {
Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`);
if (v && typeof v === 'object' && '$in' in (v as any)) return (v as any).$in.includes(r[k]);
return r[k] === v;
}),
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/utils/migration-journal.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,7 +81,7 @@ class FakeEngine {

async find(objectName: string, query?: { where?: Record<string, unknown> }): Promise<FakeRow[]> {
const where = query?.where ?? {};
return this.rows(objectName).filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
return this.rows(objectName).filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
}

async findOne(objectName: string, query?: { where?: Record<string, unknown> }): Promise<FakeRow | null> {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,7 @@ class FakeEngine {

async find(objectName: string, query?: { where?: Record<string, unknown> }): Promise<FakeRow[]> {
const where = query?.where ?? {};
return this.rows(objectName).filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
return this.rows(objectName).filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
}

async findOne(objectName: string, query?: { where?: Record<string, unknown> }): Promise<FakeRow | null> {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,7 +35,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -44,7 +44,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,7 +29,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -210,7 +210,7 @@ describe('[#8442] raw driver text is withheld from the seed `errors[].message`',
find: vi.fn(async (o: string, q?: any) => {
const rows = store[o] || [];
return q?.where
? rows.filter((r) => Object.entries(q.where).every(([k, v]) => r[k] === v))
? rows.filter((r) => Object.entries(q.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }))
: rows;
}),
findOne: vi.fn(async (o: string, q?: any) => {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -39,7 +39,7 @@ function createFaithfulEngine(schemas: Record<string, any>) {
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,7 +43,7 @@ function createEngine() {
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,7 +36,7 @@ function createEngine(schemas: Record<string, any>) {
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
2 changes: 1 addition & 1 deletion packages/metadata-protocol/src/seed-loader-replay.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') {
Expand Down
2 changes: 1 addition & 1 deletion packages/metadata-protocol/src/seed-loader-retry.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,7 +25,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -68,7 +68,7 @@ function createEnforcingEngine(): { engine: IDataEngine; store: Record<string, a
find: vi.fn(async (objectName: string, query?: any) => {
let rows = store[objectName] || [];
if (query?.where) {
rows = rows.filter((r) => Object.entries(query.where).every(([k, v]) => r[k] === v));
rows = rows.filter((r) => Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
}
if (typeof query?.limit === 'number') rows = rows.slice(0, query.limit);
return rows;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,7 +37,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -48,7 +48,7 @@ function createFaithfulEngine(): { engine: IDataEngine; store: Record<string, an
let records = store[objectName] || [];
if (query?.where) {
records = records.filter((r) =>
Object.entries(query.where).every(([k, v]) => r[k] === v),
Object.entries(query.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
}
if (typeof query?.limit === 'number') records = records.slice(0, query.limit);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,13 +22,13 @@ function install(opts: {
},
find: async (_object, options: any) => {
const rows = (opts.comments ?? []).filter((r) =>
Object.entries(options?.where ?? {}).every(([k, v]) => r[k] === v),
Object.entries(options?.where ?? {}).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
return typeof options?.limit === 'number' ? rows.slice(0, options.limit) : rows;
},
findOne: async (_object, options: any) =>
(opts.comments ?? []).find((r) =>
Object.entries(options?.where ?? {}).every(([k, v]) => r[k] === v),
Object.entries(options?.where ?? {}).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
) ?? null,
};
installCommentAccessHooks(engine, () => opts.sharing, silentLogger());
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,7 +81,7 @@ function makeQl(row: Record<string, any>) {
const where = query?.where ?? {};
return (tables[object] ?? []).filter((r) =>
Object.entries(where).every(([field, value]) =>
value === null ? r[field] == null : r[field] === value,
{ if (field.startsWith('$')) throw new Error(`fake driver: unsupported operator ${field}`); return value === null ? r[field] == null : r[field] === value; },
),
);
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -33,7 +33,7 @@ function makeDeps(opts: {
});
const find = vi.fn(async (_obj: string, q: any) => {
const where = q?.where ?? {};
return existing.filter((u) => Object.entries(where).every(([k, v]) => u[k] === v));
return existing.filter((u) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return u[k] === v; }));
});
const update = vi.fn(async () => ({}));
const insert = vi.fn(async () => ({}));
Expand Down
2 changes: 1 addition & 1 deletion packages/plugins/plugin-auth/src/auth-manager.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -3862,7 +3862,7 @@ describe('isOrgOrPlatformAdmin – one grade ruler for "is this membership an ad
if (object === 'sys_member') {
const where = query?.where ?? {};
return (opts.members ?? []).filter((row) =>
Object.entries(where).every(([k, v]) => row[k] === v),
Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return row[k] === v; }),
);
}
return [];
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ function makeQl(tables: Record<string, any[]>) {
const where = query?.where ?? {};
return rows.filter((row) =>
Object.entries(where).every(([field, value]) =>
value === null ? row[field] == null : row[field] === value,
{ if (field.startsWith('$')) throw new Error(`fake driver: unsupported operator ${field}`); return value === null ? row[field] == null : row[field] === value; },
),
);
}),
Expand Down
8 changes: 6 additions & 2 deletions packages/plugins/plugin-email/src/attachment-reclaim.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,7 +55,7 @@ function fakeEngine(rows: Array<Record<string, any>>) {
updates: [] as Array<Record<string, any>>,
async find(table: string, o: any = {}) {
const where = o?.where ?? {};
let out = rowsOf(table).filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
let out = rowsOf(table).filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
if (o.limit) out = out.slice(0, o.limit);
return out;
},
Expand All@@ -73,7 +73,11 @@ function fakeEngine(rows: Array<Record<string, any>>) {
const dispatch = assertEngineDeleteDispatch(o);
if (dispatch.kind === 'multi') {
const survivors = rowsOf(table).filter(
(r) => !Object.entries(o?.where ?? {}).every(([k, v]) => r[k] === v),
(r) =>
!Object.entries(o?.where ?? {}).every(([k, v]) => {
if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`);
return r[k] === v;
}),
);
const deleted = rowsOf(table).length - survivors.length;
tables.set(table, survivors);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,7 +30,7 @@ function makeQl(declared: any[] = []) {
// `organization_id: null`, which strict `===` would make unsatisfiable
// here while it works in production.
return rows.filter((r) =>
Object.entries(where).every(([k, v]) => (v === null ? r[k] == null : r[k] === v)),
Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return (v === null ? r[k] == null : r[k] === v); }),
);
},
async insert(object: string, data: any) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@ function makeQl(declared: any[] = []) {
async find(object: string, q: any) {
if (object !== 'sys_permission_set') return [];
const where = q?.where ?? {};
return rows.filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
return rows.filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
},
async insert(object: string, data: any) {
if (object !== 'sys_permission_set') return null;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ function makeQl(declared: any[] = []) {
async find(object: string, q: any) {
if (object !== 'sys_position') return [];
const where = q?.where ?? {};
return rows.filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
return rows.filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
},
async insert(object: string, data: any) {
if (object !== 'sys_position') return null;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,7 +27,7 @@ function makeQl(seedRows: any[] = []) {
async find(object: string, q: any) {
if (object !== 'sys_permission_set') return [];
const where = q?.where ?? {};
return rows.filter((r) => Object.entries(where).every(([k, v]) => r[k] === v));
return rows.filter((r) => Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
},
async insert(object: string, data: any) {
if (object !== 'sys_permission_set') return null;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,7 @@ function makeQl() {
const where = q?.where ?? {};
const matched = rows.filter((r) =>
// (2) `null` is IS NULL, not `=== null`.
Object.entries(where).every(([k, v]) => (v === null ? r[k] == null : r[k] === v)),
Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return (v === null ? r[k] == null : r[k] === v); }),
);
if (q?.limit === undefined) return matched;
// (1) The #4363 tie-breaker. BINARY collation, as SQLite compares ids.
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,7 @@ function makeGrantQl(tables: Rows) {
async find(object: string, opts: any) {
const where = opts?.where ?? {};
return (tables[object] ?? []).filter((row) =>
Object.entries(where).every(([key, cond]) => {
Object.entries(where).every(([key, cond]) => { if (key.startsWith('$')) throw new Error(`fake driver: unsupported operator ${key}`);
const cell = row[key];
if (cond && typeof cond === 'object' && '$in' in (cond as any)) {
return ((cond as any).$in as unknown[]).includes(cell);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -32,9 +32,9 @@ function makeQl(tables: Record<string, any[]> = {}) {
const where = opts?.where ?? {};
return rows.filter((row) =>
Object.entries(where).every(([k, v]) =>
v && typeof v === 'object' && '$in' in (v as any)
{ if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return v && typeof v === 'object' && '$in' in (v as any)
? (v as any).$in.includes(row[k])
: row[k] === v,
: row[k] === v; },
),
);
}),
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,7 @@ function makeQl() {
async find(object: string, opts: any) {
const where = opts?.where ?? {};
return (tables[object] ?? []).filter((r) =>
Object.entries(where).every(([k, v]) => r[k] === v),
Object.entries(where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }),
);
},
async update(object: string, data: any) {
Expand Down
11 changes: 9 additions & 2 deletions packages/plugins/plugin-webhooks/src/auto-enqueuer.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,7 +81,7 @@ class FakeEngine implements IDataEngine {
async find(name: string, q?: any): Promise<any[]> {
const all = this.rows[name] ?? [];
if (!q?.where) return all;
return all.filter((r) => Object.entries(q.where).every(([k, v]) => r[k] === v));
return all.filter((r) => Object.entries(q.where).every(([k, v]) => { if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`); return r[k] === v; }));
}
async findOne(name: string, q?: any): Promise<any> {
return (await this.find(name, q))[0] ?? null;
Expand All@@ -104,7 +104,14 @@ class FakeEngine implements IDataEngine {
const arr = this.rows[name] ?? [];
const before = arr.length;
this.rows[name] = arr.filter(
(r) => !(opts?.where && Object.entries(opts.where).every(([k, v]) => r[k] === v)),
(r) =>
!(
opts?.where &&
Object.entries(opts.where).every(([k, v]) => {
if (k.startsWith('$')) throw new Error(`fake driver: unsupported operator ${k}`);
return r[k] === v;
})
),
);
return { affected: before - this.rows[name].length };
}
Expand Down
Loading
Loading