UNPKG

ponder-client

Version:
122 lines 3.65 kB
function many(table) { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type return function (filter, columns, pagination) { return { type: 'many', table, filter, columns, pagination, }; }; } function one(table) { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type return function (filter, columns) { return { type: 'one', table, filter, columns, pagination: {}, }; }; } function serializeTableName(tableName) { const tableNameString = String(tableName); return tableNameString.charAt(0).toLowerCase() + tableNameString.slice(1); } function serializeWhereFilterValue(value) { switch (typeof value) { case 'string': return `"${value}"`; case 'number': return `${value}`; case 'bigint': return `"${value.toString()}"`; case 'boolean': return `${value}`; default: throw new Error(`Unsupported type: ${typeof value}`); } } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type function serializeWhereFilter(where) { const filterString = Object.entries(where) .filter(([, v]) => v !== undefined) .map(([k, v]) => `${k}: ${serializeWhereFilterValue(v)}`) .join(', '); return `{ ${filterString} }`; } function serializePart(name, part) { switch (part.type) { case 'many': return ` ${String(name)}: ${serializeTableName(part.table)}s( ${part.filter.limit ? `limit: ${part.filter.limit}` : ''} ${part.filter.orderBy ? `orderBy: "${String(part.filter.orderBy)}"` : ''} ${part.filter.orderDirection ? `orderDirection: "${part.filter.orderDirection}"` : ''} ${part.filter.before ? `before: "${part.filter.before}"` : ''} ${part.filter.after ? `after: "${part.filter.after}"` : ''} ${part.filter.where ? `where: ${serializeWhereFilter(part.filter.where)}` : ''} ) { items { ${Object.entries(part.columns) .filter(([, v]) => v) .map(([k]) => `${k}`) .join('\n')} } pageInfo { ${Object.entries(part.pagination) .filter(([, v]) => v) .map(([k]) => `${k}`) .join('\n')} } } `; case 'one': return ` ${String(name)}: ${serializeTableName(part.table)}( id: "${part.filter.id}" ) { ${Object.entries(part.columns) .filter(([, v]) => v) .map(([k]) => `${k}`) .join('\n')} } `; } } function serialize(q) { const qString = `{ ${Object.entries(q) .map(([name, part]) => { const partName = name; return serializePart(partName, part); }) .join('\n')} }`; return qString; } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type async function query(endpoint, q) { const res = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: serialize(q), }), }); const json = (await res.json()); return json.data; } export { one, many, query }; //# sourceMappingURL=index.js.map