{"version":3,"file":"query.cjs","names":["SQLiteAsyncRelationalQuery","Subquery","SQL","SQLiteTable","SQLiteView"],"sources":["../../src/expo-sqlite/query.ts"],"sourcesContent":["import { addDatabaseChangeListener } from 'expo-sqlite';\nimport { useEffect, useState } from 'react';\nimport { is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { SQLiteAsyncRelationalQuery } from '~/sqlite-core/async/query.ts';\nimport type { AnySQLiteAsyncSelect } from '~/sqlite-core/async/select.ts';\nimport { getTableConfig, getViewConfig, SQLiteTable, SQLiteView } from '~/sqlite-core/index.ts';\nimport { Subquery } from '~/subquery.ts';\n\nexport const useLiveQuery = <\n\tT extends\n\t\t| Pick<AnySQLiteAsyncSelect, '_' | 'then'>\n\t\t| SQLiteAsyncRelationalQuery<'sync', unknown>,\n>(\n\tquery: T,\n\tdeps: unknown[] = [],\n) => {\n\tconst [data, setData] = useState<Awaited<T>>(\n\t\t(is(query, SQLiteAsyncRelationalQuery) && query.mode === 'first'\n\t\t\t? undefined\n\t\t\t: []) as Awaited<T>,\n\t);\n\tconst [error, setError] = useState<Error>();\n\tconst [updatedAt, setUpdatedAt] = useState<Date>();\n\n\tuseEffect(() => {\n\t\tconst entity = is(query, SQLiteAsyncRelationalQuery)\n\t\t\t? query.table\n\t\t\t: (query as AnySQLiteAsyncSelect).config.table;\n\n\t\tif (is(entity, Subquery) || is(entity, SQL)) {\n\t\t\tsetError(new Error('Selecting from subqueries and SQL are not supported in useLiveQuery'));\n\t\t\treturn;\n\t\t}\n\n\t\tlet listener: ReturnType<typeof addDatabaseChangeListener> | undefined;\n\n\t\tconst handleData = (data: any) => {\n\t\t\tsetData(data);\n\t\t\tsetUpdatedAt(new Date());\n\t\t};\n\n\t\tquery.then(handleData).catch(setError);\n\n\t\tif (is(entity, SQLiteTable) || is(entity, SQLiteView)) {\n\t\t\tconst config = is(entity, SQLiteTable) ? getTableConfig(entity) : getViewConfig(entity);\n\t\t\tlistener = addDatabaseChangeListener(({ tableName }) => {\n\t\t\t\tif (config.name === tableName) {\n\t\t\t\t\tquery.then(handleData).catch(setError);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\tlistener?.remove();\n\t\t};\n\t}, deps);\n\n\treturn {\n\t\tdata,\n\t\terror,\n\t\tupdatedAt,\n\t} as const;\n};\n"],"mappings":";;;;;;;;;;;AASA,MAAa,gBAKZ,OACA,OAAkB,EAAE,KAChB;CACJ,MAAM,CAAC,MAAM,mDACR,OAAOA,wDAA2B,IAAI,MAAM,SAAS,UACtD,SACA,EAAE,CACL;CACD,MAAM,CAAC,OAAO,iCAA6B;CAC3C,MAAM,CAAC,WAAW,qCAAgC;AAElD,4BAAgB;EACf,MAAM,6BAAY,OAAOA,wDAA2B,GACjD,MAAM,QACL,MAA+B,OAAO;AAE1C,0BAAO,QAAQC,uBAAS,wBAAO,QAAQC,iBAAI,EAAE;AAC5C,4BAAS,IAAI,MAAM,sEAAsE,CAAC;AAC1F;;EAGD,IAAI;EAEJ,MAAM,cAAc,SAAc;AACjC,WAAQ,KAAK;AACb,gCAAa,IAAI,MAAM,CAAC;;AAGzB,QAAM,KAAK,WAAW,CAAC,MAAM,SAAS;AAEtC,0BAAO,QAAQC,mCAAY,wBAAO,QAAQC,kCAAW,EAAE;GACtD,MAAM,6BAAY,QAAQD,mCAAY,8CAAkB,OAAO,6CAAiB,OAAO;AACvF,0DAAsC,EAAE,gBAAgB;AACvD,QAAI,OAAO,SAAS,UACnB,OAAM,KAAK,WAAW,CAAC,MAAM,SAAS;KAEtC;;AAGH,eAAa;AACZ,aAAU,QAAQ;;IAEjB,KAAK;AAER,QAAO;EACN;EACA;EACA;EACA"}