067e19fec9
* Attach webhook to http endpoint * Create internal webhook handler job * Fix delivery * Add webhook trigger * Index webhooks * Fix webhook connect * Webhook activation * Rename to TriggerWebhook * Save webhooks to index * Extend register payload * Revert attachSource * Add update webhook helper * Use crud interface for registration * Remove filter from params * Destructure options * Missing ohash dep * Chainable trigger filter * Optional request verification * Handler call with context * Update config on register success * Rename to webhookData * Add basic key-value store * Improve kv store * Webhook trigger UI * Webhook delivery UI * Some fixes * Airtable experiments * Fix tabs transitions * Only run register if config differs * Use subtasks for delivery * Missing dep * Error handing and fixes * Namespace cursor * Fix hmac verification * Gut Airtable * Lockfile * Template optional api key * Template event sources and icons * Template remove filter from params * Fix models template * Template fixme * Fix webhook trigger header * Actually send params for registration.. * Add back oauthed client * Verify signature header encoding param * Fix delivery context * Webhook create retry with prior delete * Webhook source type fixes * Webhook config merge * Update webhook icon * Verify webhook task options * Rename handler to generateEvents * Send event icons * Shopify with webhooks * Shopify job-catalog entry * Lockfile * Add webhook migration * Better icons * Type fixes * Make param type optional * Scope type * More examples * More schemas * Trigger catalog * Bump versions * Just a few more events they said * Simplify session and config * Typed serializer * Fix payload type * Remove unused getters * Reduce logging output * Rest resource tasks * Lockfile * Bump version * Remaining triggers * Fix event types * Fix import * Link from webhook trigger to http endpoint * Use rest resource tasks for crud * Fix rest save type * Improve KV types * Improve attach webhook logging * Make header schema more lenient * Fix save type again * Final error callback * Shorten keys * Remove ohash diff * Disable Airtable webhooks * Webhook environments * Fix shopify error import * Link to integration and http endpoint * Integration catalog entry * Disable oauth * Require api key, simplify client secret * Move trigger types * Update catalog example * Small KV endpoint refactor * Fix custom migration * Webhook environment migration * Improve crud types * Remove unused schema * Fix crud context type * KV limits and HTTP verbs * KV improvements * Jobless webhook delivery * Airtable delivery fixes * Make deliveries sexy again * Some docs * Fix payload types.. again * Final payload pass * Schema cleanup * Refactor handler service * Remove more stale schemas * registerJobNamespace import * Expose KV on TriggerClient * Remove dummy click handler * Remove unused components * Fix delivery pagination * Enable registration rerun button * Comment out registration route action handler * Rename KV as not tied to IO anymore * Swap api with trigger client * Disabled fields param * KV docs * Changeset * Shopify docs fixes
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
// EventFilter is typed as type EventFilter = { [key: string]: EventFilter | string[] | number[] | boolean[] }
|
|
|
|
import { EventFilter } from "./schemas";
|
|
|
|
// This function should take any number of EventFilters and return a new EventFilter that is the result of merging of them.
|
|
export function deepMergeFilters(...filters: EventFilter[]): EventFilter {
|
|
const result: EventFilter = {};
|
|
|
|
for (const filter of filters) {
|
|
for (const key in filter) {
|
|
if (filter.hasOwnProperty(key)) {
|
|
const filterValue = filter[key];
|
|
const existingValue = result[key];
|
|
|
|
if (
|
|
existingValue &&
|
|
typeof existingValue === "object" &&
|
|
typeof filterValue === "object" &&
|
|
!Array.isArray(existingValue) &&
|
|
!Array.isArray(filterValue) &&
|
|
existingValue !== null &&
|
|
filterValue !== null
|
|
) {
|
|
result[key] = deepMergeFilters(existingValue, filterValue);
|
|
} else {
|
|
result[key] = filterValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
export function assertExhaustive(x: never): never {
|
|
throw new Error("Unexpected object: " + x);
|
|
}
|