@vielzeug/sourcerer 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asyncSource.cjs.map +1 -1
- package/dist/asyncSource.d.ts.map +1 -1
- package/dist/asyncSource.js.map +1 -1
- package/dist/cursorSource.cjs.map +1 -1
- package/dist/cursorSource.d.ts.map +1 -1
- package/dist/cursorSource.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/infiniteSource.cjs.map +1 -1
- package/dist/infiniteSource.d.ts.map +1 -1
- package/dist/infiniteSource.js.map +1 -1
- package/dist/localSource.cjs +1 -1
- package/dist/localSource.cjs.map +1 -1
- package/dist/localSource.d.ts.map +1 -1
- package/dist/localSource.js +7 -7
- package/dist/localSource.js.map +1 -1
- package/dist/pageSource.cjs.map +1 -1
- package/dist/pageSource.d.ts.map +1 -1
- package/dist/pageSource.js.map +1 -1
- package/dist/sourcerer.cjs +1 -1
- package/dist/sourcerer.cjs.map +1 -1
- package/dist/sourcerer.iife.js +1 -1
- package/dist/sourcerer.iife.js.map +1 -1
- package/dist/sourcerer.js +1 -1
- package/dist/sourcerer.js.map +1 -1
- package/dist/types.d.ts +10 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +16 -23
- package/dist/devtools.cjs +0 -2
- package/dist/devtools.cjs.map +0 -1
- package/dist/devtools.d.ts +0 -6
- package/dist/devtools.d.ts.map +0 -1
- package/dist/devtools.js +0 -8
- package/dist/devtools.js.map +0 -1
package/dist/asyncSource.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncSource.cjs","names":[],"sources":["../src/asyncSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"asyncSource.cjs","names":[],"sources":["../src/asyncSource.ts"],"sourcesContent":["import { createRequestController, toError } from './requestController';\nimport { createSourceStore } from './sourceStore';\nimport type { AnyPagination, SourceSnapshot } from './types';\n\ntype AsyncSource<T, TQuery, TPagination extends AnyPagination> = Readonly<{\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n fetch<TResult>(options: {\n failure(previous: SourceSnapshot<T, TQuery, TPagination>, error: Error): SourceSnapshot<T, TQuery, TPagination>;\n load(signal: AbortSignal): Promise<TResult>;\n pending(previous: SourceSnapshot<T, TQuery, TPagination>): SourceSnapshot<T, TQuery, TPagination>;\n success(result: TResult): SourceSnapshot<T, TQuery, TPagination>;\n }): Promise<void>;\n readonly snapshot: SourceSnapshot<T, TQuery, TPagination>;\n subscribe(listener: (snapshot: SourceSnapshot<T, TQuery, TPagination>) => void): () => void;\n}>;\n\n/** Request failures and observer failures stay separate so observers cannot corrupt source state. */\nexport function createAsyncSource<T, TQuery, TPagination extends AnyPagination>(\n initial: SourceSnapshot<T, TQuery, TPagination>,\n): AsyncSource<T, TQuery, TPagination> {\n const store = createSourceStore(initial);\n const requests = createRequestController();\n\n return {\n get disposalSignal() {\n return store.disposalSignal;\n },\n\n dispose() {\n requests.dispose();\n store.dispose();\n },\n\n get disposed() {\n return store.disposed;\n },\n\n async fetch(options) {\n if (store.disposed) return;\n\n const request = requests.begin();\n const previous = store.value;\n\n store.set(options.pending(previous));\n\n let next: SourceSnapshot<T, TQuery, TPagination>;\n\n try {\n next = options.success(await options.load(request.signal));\n } catch (reason: unknown) {\n if (!request.isCurrent() || store.disposed) return;\n\n const error = toError(reason);\n\n store.set(options.failure(previous, error));\n throw error;\n } finally {\n request.finish();\n }\n\n if (!request.isCurrent() || store.disposed) return;\n\n store.set(next);\n },\n\n get snapshot() {\n return store.value;\n },\n\n subscribe: store.subscribe,\n };\n}\n"],"mappings":"0EAmBA,SAAgB,EACd,EACqC,CACrC,IAAM,EAAQ,EAAA,kBAAkB,CAAO,EACjC,EAAW,EAAA,wBAAwB,EAEzC,MAAO,CACL,IAAI,gBAAiB,CACnB,OAAO,EAAM,cACf,EAEA,SAAU,CACR,EAAS,QAAQ,EACjB,EAAM,QAAQ,CAChB,EAEA,IAAI,UAAW,CACb,OAAO,EAAM,QACf,EAEA,MAAM,MAAM,EAAS,CACnB,GAAI,EAAM,SAAU,OAEpB,IAAM,EAAU,EAAS,MAAM,EACzB,EAAW,EAAM,MAEvB,EAAM,IAAI,EAAQ,QAAQ,CAAQ,CAAC,EAEnC,IAAI,EAEJ,GAAI,CACF,EAAO,EAAQ,QAAQ,MAAM,EAAQ,KAAK,EAAQ,MAAM,CAAC,CAC3D,OAAS,EAAiB,CACxB,GAAI,CAAC,EAAQ,UAAU,GAAK,EAAM,SAAU,OAE5C,IAAM,EAAQ,EAAA,QAAQ,CAAM,EAG5B,MADA,EAAM,IAAI,EAAQ,QAAQ,EAAU,CAAK,CAAC,EACpC,CACR,QAAU,CACR,EAAQ,OAAO,CACjB,CAEI,CAAC,EAAQ,UAAU,GAAK,EAAM,UAElC,EAAM,IAAI,CAAI,CAChB,EAEA,IAAI,UAAW,CACb,OAAO,EAAM,KACf,EAEA,UAAW,EAAM,SACnB,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncSource.d.ts","sourceRoot":"","sources":["../src/asyncSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"asyncSource.d.ts","sourceRoot":"","sources":["../src/asyncSource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7D,KAAK,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,aAAa,IAAI,QAAQ,CAAC;IACxE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;QACtB,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAChH,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAClG,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KAClE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1D,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7F,CAAC,CAAC;AAEH,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,aAAa,EAC5E,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAC9C,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAoDrC"}
|
package/dist/asyncSource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncSource.js","names":[],"sources":["../src/asyncSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"asyncSource.js","names":[],"sources":["../src/asyncSource.ts"],"sourcesContent":["import { createRequestController, toError } from './requestController';\nimport { createSourceStore } from './sourceStore';\nimport type { AnyPagination, SourceSnapshot } from './types';\n\ntype AsyncSource<T, TQuery, TPagination extends AnyPagination> = Readonly<{\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n fetch<TResult>(options: {\n failure(previous: SourceSnapshot<T, TQuery, TPagination>, error: Error): SourceSnapshot<T, TQuery, TPagination>;\n load(signal: AbortSignal): Promise<TResult>;\n pending(previous: SourceSnapshot<T, TQuery, TPagination>): SourceSnapshot<T, TQuery, TPagination>;\n success(result: TResult): SourceSnapshot<T, TQuery, TPagination>;\n }): Promise<void>;\n readonly snapshot: SourceSnapshot<T, TQuery, TPagination>;\n subscribe(listener: (snapshot: SourceSnapshot<T, TQuery, TPagination>) => void): () => void;\n}>;\n\n/** Request failures and observer failures stay separate so observers cannot corrupt source state. */\nexport function createAsyncSource<T, TQuery, TPagination extends AnyPagination>(\n initial: SourceSnapshot<T, TQuery, TPagination>,\n): AsyncSource<T, TQuery, TPagination> {\n const store = createSourceStore(initial);\n const requests = createRequestController();\n\n return {\n get disposalSignal() {\n return store.disposalSignal;\n },\n\n dispose() {\n requests.dispose();\n store.dispose();\n },\n\n get disposed() {\n return store.disposed;\n },\n\n async fetch(options) {\n if (store.disposed) return;\n\n const request = requests.begin();\n const previous = store.value;\n\n store.set(options.pending(previous));\n\n let next: SourceSnapshot<T, TQuery, TPagination>;\n\n try {\n next = options.success(await options.load(request.signal));\n } catch (reason: unknown) {\n if (!request.isCurrent() || store.disposed) return;\n\n const error = toError(reason);\n\n store.set(options.failure(previous, error));\n throw error;\n } finally {\n request.finish();\n }\n\n if (!request.isCurrent() || store.disposed) return;\n\n store.set(next);\n },\n\n get snapshot() {\n return store.value;\n },\n\n subscribe: store.subscribe,\n };\n}\n"],"mappings":";;;AAmBA,SAAgB,EACd,GACqC;CACrC,IAAM,IAAQ,EAAkB,CAAO,GACjC,IAAW,EAAwB;CAEzC,OAAO;EACL,IAAI,iBAAiB;GACnB,OAAO,EAAM;EACf;EAEA,UAAU;GAER,AADA,EAAS,QAAQ,GACjB,EAAM,QAAQ;EAChB;EAEA,IAAI,WAAW;GACb,OAAO,EAAM;EACf;EAEA,MAAM,MAAM,GAAS;GACnB,IAAI,EAAM,UAAU;GAEpB,IAAM,IAAU,EAAS,MAAM,GACzB,IAAW,EAAM;GAEvB,EAAM,IAAI,EAAQ,QAAQ,CAAQ,CAAC;GAEnC,IAAI;GAEJ,IAAI;IACF,IAAO,EAAQ,QAAQ,MAAM,EAAQ,KAAK,EAAQ,MAAM,CAAC;GAC3D,SAAS,GAAiB;IACxB,IAAI,CAAC,EAAQ,UAAU,KAAK,EAAM,UAAU;IAE5C,IAAM,IAAQ,EAAQ,CAAM;IAG5B,MADA,EAAM,IAAI,EAAQ,QAAQ,GAAU,CAAK,CAAC,GACpC;GACR,UAAU;IACR,EAAQ,OAAO;GACjB;GAEI,CAAC,EAAQ,UAAU,KAAK,EAAM,YAElC,EAAM,IAAI,CAAI;EAChB;EAEA,IAAI,WAAW;GACb,OAAO,EAAM;EACf;EAEA,WAAW,EAAM;CACnB;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursorSource.cjs","names":[],"sources":["../src/cursorSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"cursorSource.cjs","names":[],"sources":["../src/cursorSource.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { createAsyncSource } from './asyncSource';\nimport { positiveInteger, sameQuery, totalItems } from './pagination';\nimport type { CursorPagination, CursorQuery, CursorQueryPatch, CursorSource, CursorSourceConfig } from './types';\n\nconst createPagination = <TCursor>(result?: {\n nextCursor?: TCursor;\n previousCursor?: TCursor;\n total?: number;\n}): CursorPagination<TCursor> => ({\n hasNext: result?.nextCursor !== undefined,\n hasPrevious: result?.previousCursor !== undefined,\n kind: 'cursor',\n ...(result?.nextCursor !== undefined && { nextCursor: result.nextCursor }),\n ...(result?.previousCursor !== undefined && { previousCursor: result.previousCursor }),\n ...(result?.total !== undefined && { total: totalItems(result.total) }),\n});\n\nconst normalizeQuery = <TCursor>(\n current: CursorQuery<TCursor>,\n patch: CursorQueryPatch<TCursor> = {},\n): CursorQuery<TCursor> => {\n if (patch.after !== undefined && patch.before !== undefined) {\n throw new RangeError('Cursor query cannot include both after and before');\n }\n\n const resetsCursor = patch.pageSize !== undefined || patch.search !== undefined;\n const after = resetsCursor || 'before' in patch ? undefined : 'after' in patch ? patch.after : current.after;\n const before = resetsCursor || 'after' in patch ? undefined : 'before' in patch ? patch.before : current.before;\n\n return {\n ...(after !== undefined && { after }),\n ...(before !== undefined && { before }),\n pageSize: positiveInteger(patch.pageSize ?? current.pageSize, 'pageSize'),\n search: patch.search ?? current.search,\n };\n};\n\n/** Cursor sources retain loaded cursors while pendingQuery records newer navigation. */\nexport function createCursorSource<T, TCursor = string>(\n config: CursorSourceConfig<T, TCursor>,\n): CursorSource<T, TCursor> {\n const initialQuery: CursorQuery<TCursor> = { pageSize: 20, search: '' };\n let requestedQuery = normalizeQuery(initialQuery, config.initialQuery);\n const asyncSource = createAsyncSource<T, CursorQuery<TCursor>, CursorPagination<TCursor>>({\n data: [],\n error: null,\n isFetching: false,\n pagination: createPagination(),\n query: requestedQuery,\n });\n\n const fetch = (query: CursorQuery<TCursor>): Promise<void> =>\n asyncSource.fetch({\n failure: (previous, error) => ({ ...previous, error, isFetching: false, pendingQuery: undefined }),\n load: (signal) => config.load({ query, signal }),\n pending: (previous) => ({ ...previous, error: null, isFetching: true, pendingQuery: query }),\n success: (result) => ({\n data: result.data,\n error: null,\n isFetching: false,\n pagination: createPagination(result),\n query,\n }),\n });\n\n const reload = (): Promise<void> => fetch(requestedQuery);\n\n const setQuery = async (patch: CursorQueryPatch<TCursor>): Promise<void> => {\n const current = asyncSource.snapshot.pendingQuery ?? asyncSource.snapshot.query;\n const next = normalizeQuery(current, patch);\n\n if (sameQuery(next, requestedQuery)) return;\n\n requestedQuery = next;\n await fetch(next);\n };\n\n const source: CursorSource<T, TCursor> = {\n get disposalSignal() {\n return asyncSource.disposalSignal;\n },\n\n dispose: asyncSource.dispose,\n\n get disposed() {\n return asyncSource.disposed;\n },\n\n page: {\n next() {\n const cursor = asyncSource.snapshot.pagination.nextCursor;\n\n return asyncSource.snapshot.isFetching || cursor === undefined\n ? Promise.resolve()\n : setQuery({ after: cursor });\n },\n\n previous() {\n const cursor = asyncSource.snapshot.pagination.previousCursor;\n\n return asyncSource.snapshot.isFetching || cursor === undefined\n ? Promise.resolve()\n : setQuery({ before: cursor });\n },\n },\n\n reload,\n setQuery,\n\n get snapshot() {\n return asyncSource.snapshot;\n },\n\n subscribe: asyncSource.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n if (config.autoStart !== false)\n void reload().catch(() => warn('Initial load failed. Inspect source.snapshot.error.'));\n\n return source;\n}\n"],"mappings":"2FAKA,IAAM,EAA6B,IAID,CAChC,QAAS,GAAQ,aAAe,IAAA,GAChC,YAAa,GAAQ,iBAAmB,IAAA,GACxC,KAAM,SACN,GAAI,GAAQ,aAAe,IAAA,IAAa,CAAE,WAAY,EAAO,UAAW,EACxE,GAAI,GAAQ,iBAAmB,IAAA,IAAa,CAAE,eAAgB,EAAO,cAAe,EACpF,GAAI,GAAQ,QAAU,IAAA,IAAa,CAAE,MAAO,EAAA,WAAW,EAAO,KAAK,CAAE,CACvE,GAEM,GACJ,EACA,EAAmC,CAAC,IACX,CACzB,GAAI,EAAM,QAAU,IAAA,IAAa,EAAM,SAAW,IAAA,GAChD,MAAU,WAAW,mDAAmD,EAG1E,IAAM,EAAe,EAAM,WAAa,IAAA,IAAa,EAAM,SAAW,IAAA,GAChE,EAAQ,GAAgB,WAAY,EAAQ,IAAA,GAAY,UAAW,EAAQ,EAAM,MAAQ,EAAQ,MACjG,EAAS,GAAgB,UAAW,EAAQ,IAAA,GAAY,WAAY,EAAQ,EAAM,OAAS,EAAQ,OAEzG,MAAO,CACL,GAAI,IAAU,IAAA,IAAa,CAAE,OAAM,EACnC,GAAI,IAAW,IAAA,IAAa,CAAE,QAAO,EACrC,SAAU,EAAA,gBAAgB,EAAM,UAAY,EAAQ,SAAU,UAAU,EACxE,OAAQ,EAAM,QAAU,EAAQ,MAClC,CACF,EAGA,SAAgB,EACd,EAC0B,CAE1B,IAAI,EAAiB,EAAe,CADS,SAAU,GAAI,OAAQ,EAC/B,EAAc,EAAO,YAAY,EAC/D,EAAc,EAAA,kBAAsE,CACxF,KAAM,CAAC,EACP,MAAO,KACP,WAAY,GACZ,WAAY,EAAiB,EAC7B,MAAO,CACT,CAAC,EAEK,EAAS,GACb,EAAY,MAAM,CAChB,SAAU,EAAU,KAAW,CAAE,GAAG,EAAU,QAAO,WAAY,GAAO,aAAc,IAAA,EAAU,GAChG,KAAO,GAAW,EAAO,KAAK,CAAE,QAAO,QAAO,CAAC,EAC/C,QAAU,IAAc,CAAE,GAAG,EAAU,MAAO,KAAM,WAAY,GAAM,aAAc,CAAM,GAC1F,QAAU,IAAY,CACpB,KAAM,EAAO,KACb,MAAO,KACP,WAAY,GACZ,WAAY,EAAiB,CAAM,EACnC,OACF,EACF,CAAC,EAEG,MAA8B,EAAM,CAAc,EAElD,EAAW,KAAO,IAAoD,CAE1E,IAAM,EAAO,EADG,EAAY,SAAS,cAAgB,EAAY,SAAS,MACrC,CAAK,EAEtC,EAAA,UAAU,EAAM,CAAc,IAElC,EAAiB,EACjB,MAAM,EAAM,CAAI,EAClB,EAEM,EAAmC,CACvC,IAAI,gBAAiB,CACnB,OAAO,EAAY,cACrB,EAEA,QAAS,EAAY,QAErB,IAAI,UAAW,CACb,OAAO,EAAY,QACrB,EAEA,KAAM,CACJ,MAAO,CACL,IAAM,EAAS,EAAY,SAAS,WAAW,WAE/C,OAAO,EAAY,SAAS,YAAc,IAAW,IAAA,GACjD,QAAQ,QAAQ,EAChB,EAAS,CAAE,MAAO,CAAO,CAAC,CAChC,EAEA,UAAW,CACT,IAAM,EAAS,EAAY,SAAS,WAAW,eAE/C,OAAO,EAAY,SAAS,YAAc,IAAW,IAAA,GACjD,QAAQ,QAAQ,EAChB,EAAS,CAAE,OAAQ,CAAO,CAAC,CACjC,CACF,EAEA,SACA,WAEA,IAAI,UAAW,CACb,OAAO,EAAY,QACrB,EAEA,UAAW,EAAY,UAEvB,CAAC,OAAO,UAAW,CACjB,EAAO,QAAQ,CACjB,CACF,EAKA,OAHI,EAAO,YAAc,IACvB,EAAY,CAAC,CAAC,UAAY,EAAA,KAAK,qDAAqD,CAAC,EAEhF,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursorSource.d.ts","sourceRoot":"","sources":["../src/cursorSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cursorSource.d.ts","sourceRoot":"","sources":["../src/cursorSource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmD,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAmCjH,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EACpD,MAAM,EAAE,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,GACrC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAoF1B"}
|
package/dist/cursorSource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursorSource.js","names":[],"sources":["../src/cursorSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"cursorSource.js","names":[],"sources":["../src/cursorSource.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { createAsyncSource } from './asyncSource';\nimport { positiveInteger, sameQuery, totalItems } from './pagination';\nimport type { CursorPagination, CursorQuery, CursorQueryPatch, CursorSource, CursorSourceConfig } from './types';\n\nconst createPagination = <TCursor>(result?: {\n nextCursor?: TCursor;\n previousCursor?: TCursor;\n total?: number;\n}): CursorPagination<TCursor> => ({\n hasNext: result?.nextCursor !== undefined,\n hasPrevious: result?.previousCursor !== undefined,\n kind: 'cursor',\n ...(result?.nextCursor !== undefined && { nextCursor: result.nextCursor }),\n ...(result?.previousCursor !== undefined && { previousCursor: result.previousCursor }),\n ...(result?.total !== undefined && { total: totalItems(result.total) }),\n});\n\nconst normalizeQuery = <TCursor>(\n current: CursorQuery<TCursor>,\n patch: CursorQueryPatch<TCursor> = {},\n): CursorQuery<TCursor> => {\n if (patch.after !== undefined && patch.before !== undefined) {\n throw new RangeError('Cursor query cannot include both after and before');\n }\n\n const resetsCursor = patch.pageSize !== undefined || patch.search !== undefined;\n const after = resetsCursor || 'before' in patch ? undefined : 'after' in patch ? patch.after : current.after;\n const before = resetsCursor || 'after' in patch ? undefined : 'before' in patch ? patch.before : current.before;\n\n return {\n ...(after !== undefined && { after }),\n ...(before !== undefined && { before }),\n pageSize: positiveInteger(patch.pageSize ?? current.pageSize, 'pageSize'),\n search: patch.search ?? current.search,\n };\n};\n\n/** Cursor sources retain loaded cursors while pendingQuery records newer navigation. */\nexport function createCursorSource<T, TCursor = string>(\n config: CursorSourceConfig<T, TCursor>,\n): CursorSource<T, TCursor> {\n const initialQuery: CursorQuery<TCursor> = { pageSize: 20, search: '' };\n let requestedQuery = normalizeQuery(initialQuery, config.initialQuery);\n const asyncSource = createAsyncSource<T, CursorQuery<TCursor>, CursorPagination<TCursor>>({\n data: [],\n error: null,\n isFetching: false,\n pagination: createPagination(),\n query: requestedQuery,\n });\n\n const fetch = (query: CursorQuery<TCursor>): Promise<void> =>\n asyncSource.fetch({\n failure: (previous, error) => ({ ...previous, error, isFetching: false, pendingQuery: undefined }),\n load: (signal) => config.load({ query, signal }),\n pending: (previous) => ({ ...previous, error: null, isFetching: true, pendingQuery: query }),\n success: (result) => ({\n data: result.data,\n error: null,\n isFetching: false,\n pagination: createPagination(result),\n query,\n }),\n });\n\n const reload = (): Promise<void> => fetch(requestedQuery);\n\n const setQuery = async (patch: CursorQueryPatch<TCursor>): Promise<void> => {\n const current = asyncSource.snapshot.pendingQuery ?? asyncSource.snapshot.query;\n const next = normalizeQuery(current, patch);\n\n if (sameQuery(next, requestedQuery)) return;\n\n requestedQuery = next;\n await fetch(next);\n };\n\n const source: CursorSource<T, TCursor> = {\n get disposalSignal() {\n return asyncSource.disposalSignal;\n },\n\n dispose: asyncSource.dispose,\n\n get disposed() {\n return asyncSource.disposed;\n },\n\n page: {\n next() {\n const cursor = asyncSource.snapshot.pagination.nextCursor;\n\n return asyncSource.snapshot.isFetching || cursor === undefined\n ? Promise.resolve()\n : setQuery({ after: cursor });\n },\n\n previous() {\n const cursor = asyncSource.snapshot.pagination.previousCursor;\n\n return asyncSource.snapshot.isFetching || cursor === undefined\n ? Promise.resolve()\n : setQuery({ before: cursor });\n },\n },\n\n reload,\n setQuery,\n\n get snapshot() {\n return asyncSource.snapshot;\n },\n\n subscribe: asyncSource.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n if (config.autoStart !== false)\n void reload().catch(() => warn('Initial load failed. Inspect source.snapshot.error.'));\n\n return source;\n}\n"],"mappings":";;;;AAKA,IAAM,KAA6B,OAID;CAChC,SAAS,GAAQ,eAAe,KAAA;CAChC,aAAa,GAAQ,mBAAmB,KAAA;CACxC,MAAM;CACN,GAAI,GAAQ,eAAe,KAAA,KAAa,EAAE,YAAY,EAAO,WAAW;CACxE,GAAI,GAAQ,mBAAmB,KAAA,KAAa,EAAE,gBAAgB,EAAO,eAAe;CACpF,GAAI,GAAQ,UAAU,KAAA,KAAa,EAAE,OAAO,EAAW,EAAO,KAAK,EAAE;AACvE,IAEM,KACJ,GACA,IAAmC,CAAC,MACX;CACzB,IAAI,EAAM,UAAU,KAAA,KAAa,EAAM,WAAW,KAAA,GAChD,MAAU,WAAW,mDAAmD;CAG1E,IAAM,IAAe,EAAM,aAAa,KAAA,KAAa,EAAM,WAAW,KAAA,GAChE,IAAQ,KAAgB,YAAY,IAAQ,KAAA,IAAY,WAAW,IAAQ,EAAM,QAAQ,EAAQ,OACjG,IAAS,KAAgB,WAAW,IAAQ,KAAA,IAAY,YAAY,IAAQ,EAAM,SAAS,EAAQ;CAEzG,OAAO;EACL,GAAI,MAAU,KAAA,KAAa,EAAE,SAAM;EACnC,GAAI,MAAW,KAAA,KAAa,EAAE,UAAO;EACrC,UAAU,EAAgB,EAAM,YAAY,EAAQ,UAAU,UAAU;EACxE,QAAQ,EAAM,UAAU,EAAQ;CAClC;AACF;AAGA,SAAgB,EACd,GAC0B;CAE1B,IAAI,IAAiB,EAAe;EADS,UAAU;EAAI,QAAQ;CAC/B,GAAc,EAAO,YAAY,GAC/D,IAAc,EAAsE;EACxF,MAAM,CAAC;EACP,OAAO;EACP,YAAY;EACZ,YAAY,EAAiB;EAC7B,OAAO;CACT,CAAC,GAEK,KAAS,MACb,EAAY,MAAM;EAChB,UAAU,GAAU,OAAW;GAAE,GAAG;GAAU;GAAO,YAAY;GAAO,cAAc,KAAA;EAAU;EAChG,OAAO,MAAW,EAAO,KAAK;GAAE;GAAO;EAAO,CAAC;EAC/C,UAAU,OAAc;GAAE,GAAG;GAAU,OAAO;GAAM,YAAY;GAAM,cAAc;EAAM;EAC1F,UAAU,OAAY;GACpB,MAAM,EAAO;GACb,OAAO;GACP,YAAY;GACZ,YAAY,EAAiB,CAAM;GACnC;EACF;CACF,CAAC,GAEG,UAA8B,EAAM,CAAc,GAElD,IAAW,OAAO,MAAoD;EAE1E,IAAM,IAAO,EADG,EAAY,SAAS,gBAAgB,EAAY,SAAS,OACrC,CAAK;EAEtC,EAAU,GAAM,CAAc,MAElC,IAAiB,GACjB,MAAM,EAAM,CAAI;CAClB,GAEM,IAAmC;EACvC,IAAI,iBAAiB;GACnB,OAAO,EAAY;EACrB;EAEA,SAAS,EAAY;EAErB,IAAI,WAAW;GACb,OAAO,EAAY;EACrB;EAEA,MAAM;GACJ,OAAO;IACL,IAAM,IAAS,EAAY,SAAS,WAAW;IAE/C,OAAO,EAAY,SAAS,cAAc,MAAW,KAAA,IACjD,QAAQ,QAAQ,IAChB,EAAS,EAAE,OAAO,EAAO,CAAC;GAChC;GAEA,WAAW;IACT,IAAM,IAAS,EAAY,SAAS,WAAW;IAE/C,OAAO,EAAY,SAAS,cAAc,MAAW,KAAA,IACjD,QAAQ,QAAQ,IAChB,EAAS,EAAE,QAAQ,EAAO,CAAC;GACjC;EACF;EAEA;EACA;EAEA,IAAI,WAAW;GACb,OAAO,EAAY;EACrB;EAEA,WAAW,EAAY;EAEvB,CAAC,OAAO,WAAW;GACjB,EAAO,QAAQ;EACjB;CACF;CAKA,OAHI,EAAO,cAAc,MACvB,EAAY,CAAC,CAAC,YAAY,kBAAK,qDAAqD,CAAC,GAEhF;AACT"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export { createCursorSource } from './cursorSource';
|
|
|
2
2
|
export { createInfiniteSource } from './infiniteSource';
|
|
3
3
|
export { createLocalSource } from './localSource';
|
|
4
4
|
export { createPageSource } from './pageSource';
|
|
5
|
-
export type { CursorPagination, CursorQuery, CursorQueryPatch, CursorResult, CursorSource, CursorSourceConfig, InfinitePagination, InfiniteQuery, InfiniteQueryPatch, InfiniteSource, InfiniteSourceConfig, LocalQuery, LocalQueryPatch, LocalSource, LocalSourceConfig,
|
|
5
|
+
export type { AnyPagination, CursorPagination, CursorQuery, CursorQueryPatch, CursorResult, CursorSource, CursorSourceConfig, InfinitePagination, InfiniteQuery, InfiniteQueryPatch, InfiniteSource, InfiniteSourceConfig, LoadContext, LocalQuery, LocalQueryPatch, LocalSource, LocalSourceConfig, PagePagination, PageQuery, PageQueryPatch, PageResult, PageSource, PageSourceConfig, Source, SourceSnapshot, } from './types';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteSource.cjs","names":[],"sources":["../src/infiniteSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"infiniteSource.cjs","names":[],"sources":["../src/infiniteSource.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { createAsyncSource } from './asyncSource';\nimport { positiveInteger, sameQuery, totalItems } from './pagination';\nimport type {\n InfinitePagination,\n InfiniteQuery,\n InfiniteQueryPatch,\n InfiniteSource,\n InfiniteSourceConfig,\n} from './types';\n\nconst createPagination = (loaded: number, total: number, isLoadingMore: boolean): InfinitePagination => ({\n hasMore: loaded < total,\n isLoadingMore,\n kind: 'infinite',\n loaded,\n total,\n});\n\nconst normalizeQuery = (current: InfiniteQuery, patch: InfiniteQueryPatch = {}): InfiniteQuery => ({\n pageSize: positiveInteger(patch.pageSize ?? current.pageSize, 'pageSize'),\n search: patch.search ?? current.search,\n});\n\n/** Infinite sources preserve loaded collection state while a pending query replaces it. */\nexport function createInfiniteSource<T>(config: InfiniteSourceConfig<T>): InfiniteSource<T> {\n const initialQuery: InfiniteQuery = { pageSize: 20, search: '' };\n let requestedQuery = normalizeQuery(initialQuery, config.initialQuery);\n let nextPage = 1;\n const asyncSource = createAsyncSource<T, InfiniteQuery, InfinitePagination>({\n data: [],\n error: null,\n isFetching: false,\n pagination: createPagination(0, 0, false),\n query: requestedQuery,\n });\n\n const fetch = (query: InfiniteQuery, page: number, append: boolean): Promise<void> => {\n const loadedData = asyncSource.snapshot.data;\n\n return asyncSource.fetch({\n failure: (previous, error) => ({ ...previous, error, isFetching: false, pendingQuery: undefined }),\n load: (signal) => config.load({ query: { ...query, page, pageSize: query.pageSize }, signal }),\n pending: (previous) => ({\n ...previous,\n error: null,\n isFetching: true,\n pagination: createPagination(previous.data.length, previous.pagination.total, append),\n pendingQuery: query,\n }),\n success: (result) => {\n const total = totalItems(result.total);\n const data = append ? [...loadedData, ...result.data] : result.data;\n\n nextPage = page + 1;\n\n return {\n data,\n error: null,\n isFetching: false,\n pagination: createPagination(data.length, total, false),\n query,\n };\n },\n });\n };\n\n const reload = (): Promise<void> => {\n nextPage = 1;\n\n return fetch(requestedQuery, 1, false);\n };\n\n const setQuery = async (patch: InfiniteQueryPatch): Promise<void> => {\n const current = asyncSource.snapshot.pendingQuery ?? asyncSource.snapshot.query;\n const next = normalizeQuery(current, patch);\n\n if (sameQuery(next, requestedQuery)) return;\n\n requestedQuery = next;\n nextPage = 1;\n await fetch(next, 1, false);\n };\n\n const source: InfiniteSource<T> = {\n get disposalSignal() {\n return asyncSource.disposalSignal;\n },\n\n dispose: asyncSource.dispose,\n\n get disposed() {\n return asyncSource.disposed;\n },\n\n loadMore() {\n const { isFetching, pagination } = asyncSource.snapshot;\n\n return isFetching || (asyncSource.snapshot.data.length > 0 && !pagination.hasMore)\n ? Promise.resolve()\n : fetch(requestedQuery, nextPage, true);\n },\n\n reload,\n setQuery,\n\n get snapshot() {\n return asyncSource.snapshot;\n },\n\n subscribe: asyncSource.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n if (config.autoStart !== false)\n void reload().catch(() => warn('Initial load failed. Inspect source.snapshot.error.'));\n\n return source;\n}\n"],"mappings":"2FAWA,IAAM,GAAoB,EAAgB,EAAe,KAAgD,CACvG,QAAS,EAAS,EAClB,gBACA,KAAM,WACN,SACA,OACF,GAEM,GAAkB,EAAwB,EAA4B,CAAC,KAAsB,CACjG,SAAU,EAAA,gBAAgB,EAAM,UAAY,EAAQ,SAAU,UAAU,EACxE,OAAQ,EAAM,QAAU,EAAQ,MAClC,GAGA,SAAgB,EAAwB,EAAoD,CAE1F,IAAI,EAAiB,EAAe,CADE,SAAU,GAAI,OAAQ,EACxB,EAAc,EAAO,YAAY,EACjE,EAAW,EACT,EAAc,EAAA,kBAAwD,CAC1E,KAAM,CAAC,EACP,MAAO,KACP,WAAY,GACZ,WAAY,EAAiB,EAAG,EAAG,EAAK,EACxC,MAAO,CACT,CAAC,EAEK,GAAS,EAAsB,EAAc,IAAmC,CACpF,IAAM,EAAa,EAAY,SAAS,KAExC,OAAO,EAAY,MAAM,CACvB,SAAU,EAAU,KAAW,CAAE,GAAG,EAAU,QAAO,WAAY,GAAO,aAAc,IAAA,EAAU,GAChG,KAAO,GAAW,EAAO,KAAK,CAAE,MAAO,CAAE,GAAG,EAAO,OAAM,SAAU,EAAM,QAAS,EAAG,QAAO,CAAC,EAC7F,QAAU,IAAc,CACtB,GAAG,EACH,MAAO,KACP,WAAY,GACZ,WAAY,EAAiB,EAAS,KAAK,OAAQ,EAAS,WAAW,MAAO,CAAM,EACpF,aAAc,CAChB,GACA,QAAU,GAAW,CACnB,IAAM,EAAQ,EAAA,WAAW,EAAO,KAAK,EAC/B,EAAO,EAAS,CAAC,GAAG,EAAY,GAAG,EAAO,IAAI,EAAI,EAAO,KAI/D,MAFA,GAAW,EAAO,EAEX,CACL,OACA,MAAO,KACP,WAAY,GACZ,WAAY,EAAiB,EAAK,OAAQ,EAAO,EAAK,EACtD,OACF,CACF,CACF,CAAC,CACH,EAEM,OACJ,EAAW,EAEJ,EAAM,EAAgB,EAAG,EAAK,GAcjC,EAA4B,CAChC,IAAI,gBAAiB,CACnB,OAAO,EAAY,cACrB,EAEA,QAAS,EAAY,QAErB,IAAI,UAAW,CACb,OAAO,EAAY,QACrB,EAEA,UAAW,CACT,GAAM,CAAE,aAAY,cAAe,EAAY,SAE/C,OAAO,GAAe,EAAY,SAAS,KAAK,OAAS,GAAK,CAAC,EAAW,QACtE,QAAQ,QAAQ,EAChB,EAAM,EAAgB,EAAU,EAAI,CAC1C,EAEA,SACA,cA/BsB,IAA6C,CAEnE,IAAM,EAAO,EADG,EAAY,SAAS,cAAgB,EAAY,SAAS,MACrC,CAAK,EAEtC,EAAA,UAAU,EAAM,CAAc,IAElC,EAAiB,EACjB,EAAW,EACX,MAAM,EAAM,EAAM,EAAG,EAAK,EAC5B,EAwBE,IAAI,UAAW,CACb,OAAO,EAAY,QACrB,EAEA,UAAW,EAAY,UAEvB,CAAC,OAAO,UAAW,CACjB,EAAO,QAAQ,CACjB,CACF,EAKA,OAHI,EAAO,YAAc,IACvB,EAAY,CAAC,CAAC,UAAY,EAAA,KAAK,qDAAqD,CAAC,EAEhF,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteSource.d.ts","sourceRoot":"","sources":["../src/infiniteSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"infiniteSource.d.ts","sourceRoot":"","sources":["../src/infiniteSource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAIV,cAAc,EACd,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAejB,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAgG1F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteSource.js","names":[],"sources":["../src/infiniteSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"infiniteSource.js","names":[],"sources":["../src/infiniteSource.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { createAsyncSource } from './asyncSource';\nimport { positiveInteger, sameQuery, totalItems } from './pagination';\nimport type {\n InfinitePagination,\n InfiniteQuery,\n InfiniteQueryPatch,\n InfiniteSource,\n InfiniteSourceConfig,\n} from './types';\n\nconst createPagination = (loaded: number, total: number, isLoadingMore: boolean): InfinitePagination => ({\n hasMore: loaded < total,\n isLoadingMore,\n kind: 'infinite',\n loaded,\n total,\n});\n\nconst normalizeQuery = (current: InfiniteQuery, patch: InfiniteQueryPatch = {}): InfiniteQuery => ({\n pageSize: positiveInteger(patch.pageSize ?? current.pageSize, 'pageSize'),\n search: patch.search ?? current.search,\n});\n\n/** Infinite sources preserve loaded collection state while a pending query replaces it. */\nexport function createInfiniteSource<T>(config: InfiniteSourceConfig<T>): InfiniteSource<T> {\n const initialQuery: InfiniteQuery = { pageSize: 20, search: '' };\n let requestedQuery = normalizeQuery(initialQuery, config.initialQuery);\n let nextPage = 1;\n const asyncSource = createAsyncSource<T, InfiniteQuery, InfinitePagination>({\n data: [],\n error: null,\n isFetching: false,\n pagination: createPagination(0, 0, false),\n query: requestedQuery,\n });\n\n const fetch = (query: InfiniteQuery, page: number, append: boolean): Promise<void> => {\n const loadedData = asyncSource.snapshot.data;\n\n return asyncSource.fetch({\n failure: (previous, error) => ({ ...previous, error, isFetching: false, pendingQuery: undefined }),\n load: (signal) => config.load({ query: { ...query, page, pageSize: query.pageSize }, signal }),\n pending: (previous) => ({\n ...previous,\n error: null,\n isFetching: true,\n pagination: createPagination(previous.data.length, previous.pagination.total, append),\n pendingQuery: query,\n }),\n success: (result) => {\n const total = totalItems(result.total);\n const data = append ? [...loadedData, ...result.data] : result.data;\n\n nextPage = page + 1;\n\n return {\n data,\n error: null,\n isFetching: false,\n pagination: createPagination(data.length, total, false),\n query,\n };\n },\n });\n };\n\n const reload = (): Promise<void> => {\n nextPage = 1;\n\n return fetch(requestedQuery, 1, false);\n };\n\n const setQuery = async (patch: InfiniteQueryPatch): Promise<void> => {\n const current = asyncSource.snapshot.pendingQuery ?? asyncSource.snapshot.query;\n const next = normalizeQuery(current, patch);\n\n if (sameQuery(next, requestedQuery)) return;\n\n requestedQuery = next;\n nextPage = 1;\n await fetch(next, 1, false);\n };\n\n const source: InfiniteSource<T> = {\n get disposalSignal() {\n return asyncSource.disposalSignal;\n },\n\n dispose: asyncSource.dispose,\n\n get disposed() {\n return asyncSource.disposed;\n },\n\n loadMore() {\n const { isFetching, pagination } = asyncSource.snapshot;\n\n return isFetching || (asyncSource.snapshot.data.length > 0 && !pagination.hasMore)\n ? Promise.resolve()\n : fetch(requestedQuery, nextPage, true);\n },\n\n reload,\n setQuery,\n\n get snapshot() {\n return asyncSource.snapshot;\n },\n\n subscribe: asyncSource.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n if (config.autoStart !== false)\n void reload().catch(() => warn('Initial load failed. Inspect source.snapshot.error.'));\n\n return source;\n}\n"],"mappings":";;;;AAWA,IAAM,KAAoB,GAAgB,GAAe,OAAgD;CACvG,SAAS,IAAS;CAClB;CACA,MAAM;CACN;CACA;AACF,IAEM,KAAkB,GAAwB,IAA4B,CAAC,OAAsB;CACjG,UAAU,EAAgB,EAAM,YAAY,EAAQ,UAAU,UAAU;CACxE,QAAQ,EAAM,UAAU,EAAQ;AAClC;AAGA,SAAgB,EAAwB,GAAoD;CAE1F,IAAI,IAAiB,EAAe;EADE,UAAU;EAAI,QAAQ;CACxB,GAAc,EAAO,YAAY,GACjE,IAAW,GACT,IAAc,EAAwD;EAC1E,MAAM,CAAC;EACP,OAAO;EACP,YAAY;EACZ,YAAY,EAAiB,GAAG,GAAG,EAAK;EACxC,OAAO;CACT,CAAC,GAEK,KAAS,GAAsB,GAAc,MAAmC;EACpF,IAAM,IAAa,EAAY,SAAS;EAExC,OAAO,EAAY,MAAM;GACvB,UAAU,GAAU,OAAW;IAAE,GAAG;IAAU;IAAO,YAAY;IAAO,cAAc,KAAA;GAAU;GAChG,OAAO,MAAW,EAAO,KAAK;IAAE,OAAO;KAAE,GAAG;KAAO;KAAM,UAAU,EAAM;IAAS;IAAG;GAAO,CAAC;GAC7F,UAAU,OAAc;IACtB,GAAG;IACH,OAAO;IACP,YAAY;IACZ,YAAY,EAAiB,EAAS,KAAK,QAAQ,EAAS,WAAW,OAAO,CAAM;IACpF,cAAc;GAChB;GACA,UAAU,MAAW;IACnB,IAAM,IAAQ,EAAW,EAAO,KAAK,GAC/B,IAAO,IAAS,CAAC,GAAG,GAAY,GAAG,EAAO,IAAI,IAAI,EAAO;IAI/D,OAFA,IAAW,IAAO,GAEX;KACL;KACA,OAAO;KACP,YAAY;KACZ,YAAY,EAAiB,EAAK,QAAQ,GAAO,EAAK;KACtD;IACF;GACF;EACF,CAAC;CACH,GAEM,WACJ,IAAW,GAEJ,EAAM,GAAgB,GAAG,EAAK,IAcjC,IAA4B;EAChC,IAAI,iBAAiB;GACnB,OAAO,EAAY;EACrB;EAEA,SAAS,EAAY;EAErB,IAAI,WAAW;GACb,OAAO,EAAY;EACrB;EAEA,WAAW;GACT,IAAM,EAAE,eAAY,kBAAe,EAAY;GAE/C,OAAO,KAAe,EAAY,SAAS,KAAK,SAAS,KAAK,CAAC,EAAW,UACtE,QAAQ,QAAQ,IAChB,EAAM,GAAgB,GAAU,EAAI;EAC1C;EAEA;EACA,iBA/BsB,MAA6C;GAEnE,IAAM,IAAO,EADG,EAAY,SAAS,gBAAgB,EAAY,SAAS,OACrC,CAAK;GAEtC,EAAU,GAAM,CAAc,MAElC,IAAiB,GACjB,IAAW,GACX,MAAM,EAAM,GAAM,GAAG,EAAK;EAC5B;EAwBE,IAAI,WAAW;GACb,OAAO,EAAY;EACrB;EAEA,WAAW,EAAY;EAEvB,CAAC,OAAO,WAAW;GACjB,EAAO,QAAQ;EACjB;CACF;CAKA,OAHI,EAAO,cAAc,MACvB,EAAY,CAAC,CAAC,YAAY,kBAAK,qDAAqD,CAAC,GAEhF;AACT"}
|
package/dist/localSource.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./sourceStore.cjs"),t=require("./pagination.cjs");var n=(e,n={},r)=>{let i=n.page??e.page,a=n.pageSize??e.pageSize,o=n.search??e.search,s=n.pageSize!==void 0||n.search!==void 0,c=n.page??(s?1:i);return{page:r===void 0?t.positiveInteger(c,`page`):Math.min(t.positiveInteger(c,`page`),r),pageSize:t.positiveInteger(a,`pageSize`),search:o}};function r(r,i={}){let a=r,o=n({page:1,pageSize:20,search:``},i.initialQuery),s=()=>{let e=o.search.length>0&&i.match?a.filter(e=>i.match(e,o.search)):a,n=t.totalItems(e.length),r=t.createPagePagination(o.page,o.pageSize,n),s=(r.index-1)*r.size;return o={...o,page:r.index},{data:e.slice(s,s+r.size),error:null,isFetching:!1,pagination:r,query:o}},c=e.createSourceStore(s()),l=()=>{let e=s();return t.sameQuery(e.query,c.value.query)&&e.data===c.value.data&&e.pagination===c.value.pagination?!1:(c.set(e),!0)},u=e=>{let r=n(o,e,c.value.pagination.count);
|
|
1
|
+
const e=require("./sourceStore.cjs"),t=require("./pagination.cjs");var n=(e,n={},r)=>{let i=n.page??e.page,a=n.pageSize??e.pageSize,o=n.search??e.search,s=n.pageSize!==void 0||n.search!==void 0,c=n.page??(s?1:i);return{page:r===void 0?t.positiveInteger(c,`page`):Math.min(t.positiveInteger(c,`page`),r),pageSize:t.positiveInteger(a,`pageSize`),search:o}};function r(r,i={}){let a=r,o=n({page:1,pageSize:20,search:``},i.initialQuery),s=()=>{let e=o.search.length>0&&i.match?a.filter(e=>i.match?.(e,o.search)):a,n=t.totalItems(e.length),r=t.createPagePagination(o.page,o.pageSize,n),s=(r.index-1)*r.size;return o={...o,page:r.index},{data:e.slice(s,s+r.size),error:null,isFetching:!1,pagination:r,query:o}},c=e.createSourceStore(s()),l=()=>{let e=s();return t.sameQuery(e.query,c.value.query)&&e.data===c.value.data&&e.pagination===c.value.pagination?!1:(c.set(e),!0)},u=e=>{let r=n(o,e,c.value.pagination.count);t.sameQuery(r,o)||(o=r,l())},d={get disposalSignal(){return c.disposalSignal},dispose:c.dispose,get disposed(){return c.disposed},page:{go(e){u({page:e})},last(){u({page:c.value.pagination.count})},next(){c.value.pagination.hasNext&&u({page:c.value.pagination.index+1})},previous(){c.value.pagination.hasPrevious&&u({page:c.value.pagination.index-1})}},setData(e){e!==a&&(a=e,l())},setQuery:u,get snapshot(){return c.value},subscribe:c.subscribe,[Symbol.dispose](){d.dispose()}};return d}exports.createLocalSource=r;
|
|
2
2
|
//# sourceMappingURL=localSource.cjs.map
|
package/dist/localSource.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localSource.cjs","names":[],"sources":["../src/localSource.ts"],"sourcesContent":["import type {\n LocalQuery,\n LocalQueryPatch,\n LocalSource,\n LocalSourceConfig,\n PagePagination,\n SourceSnapshot,\n} from './types';\n\
|
|
1
|
+
{"version":3,"file":"localSource.cjs","names":[],"sources":["../src/localSource.ts"],"sourcesContent":["import { createPagePagination, positiveInteger, sameQuery, totalItems } from './pagination';\nimport { createSourceStore } from './sourceStore';\nimport type {\n LocalQuery,\n LocalQueryPatch,\n LocalSource,\n LocalSourceConfig,\n PagePagination,\n SourceSnapshot,\n} from './types';\n\nconst normalizeQuery = (current: LocalQuery, patch: LocalQueryPatch = {}, maxPage?: number): LocalQuery => {\n const page = patch.page ?? current.page;\n const pageSize = patch.pageSize ?? current.pageSize;\n const search = patch.search ?? current.search;\n const resetsPage = patch.pageSize !== undefined || patch.search !== undefined;\n\n const requestedPage = patch.page ?? (resetsPage ? 1 : page);\n\n return {\n page:\n maxPage === undefined\n ? positiveInteger(requestedPage, 'page')\n : Math.min(positiveInteger(requestedPage, 'page'), maxPage),\n pageSize: positiveInteger(pageSize, 'pageSize'),\n search,\n };\n};\n\n/** Local sources own only search and pagination; callers prepare filtering and ranking. */\nexport function createLocalSource<T>(data: readonly T[], config: LocalSourceConfig<T> = {}): LocalSource<T> {\n let allData = data;\n let query = normalizeQuery({ page: 1, pageSize: 20, search: '' }, config.initialQuery);\n\n const buildSnapshot = (): SourceSnapshot<T, LocalQuery, PagePagination> => {\n const matched =\n query.search.length > 0 && config.match ? allData.filter((item) => config.match?.(item, query.search)) : allData;\n const total = totalItems(matched.length);\n const pagination = createPagePagination(query.page, query.pageSize, total);\n const start = (pagination.index - 1) * pagination.size;\n\n query = { ...query, page: pagination.index };\n\n return {\n data: matched.slice(start, start + pagination.size),\n error: null,\n isFetching: false,\n pagination,\n query,\n };\n };\n\n const store = createSourceStore(buildSnapshot());\n\n const commit = (): boolean => {\n const next = buildSnapshot();\n\n if (\n sameQuery(next.query, store.value.query) &&\n next.data === store.value.data &&\n next.pagination === store.value.pagination\n ) {\n return false;\n }\n\n store.set(next);\n\n return true;\n };\n\n const setQuery = (patch: LocalQueryPatch): void => {\n const next = normalizeQuery(query, patch, store.value.pagination.count);\n\n if (sameQuery(next, query)) return;\n\n query = next;\n\n commit();\n };\n\n const source: LocalSource<T> = {\n get disposalSignal() {\n return store.disposalSignal;\n },\n\n dispose: store.dispose,\n\n get disposed() {\n return store.disposed;\n },\n\n page: {\n go(index) {\n setQuery({ page: index });\n },\n\n last() {\n setQuery({ page: store.value.pagination.count });\n },\n\n next() {\n if (store.value.pagination.hasNext) setQuery({ page: store.value.pagination.index + 1 });\n },\n\n previous() {\n if (store.value.pagination.hasPrevious) setQuery({ page: store.value.pagination.index - 1 });\n },\n },\n\n setData(nextData) {\n if (nextData === allData) return;\n\n allData = nextData;\n\n commit();\n },\n\n setQuery,\n\n get snapshot() {\n return store.value;\n },\n\n subscribe: store.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n return source;\n}\n"],"mappings":"mEAWA,IAAM,GAAkB,EAAqB,EAAyB,CAAC,EAAG,IAAiC,CACzG,IAAM,EAAO,EAAM,MAAQ,EAAQ,KAC7B,EAAW,EAAM,UAAY,EAAQ,SACrC,EAAS,EAAM,QAAU,EAAQ,OACjC,EAAa,EAAM,WAAa,IAAA,IAAa,EAAM,SAAW,IAAA,GAE9D,EAAgB,EAAM,OAAS,EAAa,EAAI,GAEtD,MAAO,CACL,KACE,IAAY,IAAA,GACR,EAAA,gBAAgB,EAAe,MAAM,EACrC,KAAK,IAAI,EAAA,gBAAgB,EAAe,MAAM,EAAG,CAAO,EAC9D,SAAU,EAAA,gBAAgB,EAAU,UAAU,EAC9C,QACF,CACF,EAGA,SAAgB,EAAqB,EAAoB,EAA+B,CAAC,EAAmB,CAC1G,IAAI,EAAU,EACV,EAAQ,EAAe,CAAE,KAAM,EAAG,SAAU,GAAI,OAAQ,EAAG,EAAG,EAAO,YAAY,EAE/E,MAAqE,CACzE,IAAM,EACJ,EAAM,OAAO,OAAS,GAAK,EAAO,MAAQ,EAAQ,OAAQ,GAAS,EAAO,QAAQ,EAAM,EAAM,MAAM,CAAC,EAAI,EACrG,EAAQ,EAAA,WAAW,EAAQ,MAAM,EACjC,EAAa,EAAA,qBAAqB,EAAM,KAAM,EAAM,SAAU,CAAK,EACnE,GAAS,EAAW,MAAQ,GAAK,EAAW,KAIlD,MAFA,GAAQ,CAAE,GAAG,EAAO,KAAM,EAAW,KAAM,EAEpC,CACL,KAAM,EAAQ,MAAM,EAAO,EAAQ,EAAW,IAAI,EAClD,MAAO,KACP,WAAY,GACZ,aACA,OACF,CACF,EAEM,EAAQ,EAAA,kBAAkB,EAAc,CAAC,EAEzC,MAAwB,CAC5B,IAAM,EAAO,EAAc,EAY3B,OATE,EAAA,UAAU,EAAK,MAAO,EAAM,MAAM,KAAK,GACvC,EAAK,OAAS,EAAM,MAAM,MAC1B,EAAK,aAAe,EAAM,MAAM,WAEzB,IAGT,EAAM,IAAI,CAAI,EAEP,GACT,EAEM,EAAY,GAAiC,CACjD,IAAM,EAAO,EAAe,EAAO,EAAO,EAAM,MAAM,WAAW,KAAK,EAElE,EAAA,UAAU,EAAM,CAAK,IAEzB,EAAQ,EAER,EAAO,EACT,EAEM,EAAyB,CAC7B,IAAI,gBAAiB,CACnB,OAAO,EAAM,cACf,EAEA,QAAS,EAAM,QAEf,IAAI,UAAW,CACb,OAAO,EAAM,QACf,EAEA,KAAM,CACJ,GAAG,EAAO,CACR,EAAS,CAAE,KAAM,CAAM,CAAC,CAC1B,EAEA,MAAO,CACL,EAAS,CAAE,KAAM,EAAM,MAAM,WAAW,KAAM,CAAC,CACjD,EAEA,MAAO,CACD,EAAM,MAAM,WAAW,SAAS,EAAS,CAAE,KAAM,EAAM,MAAM,WAAW,MAAQ,CAAE,CAAC,CACzF,EAEA,UAAW,CACL,EAAM,MAAM,WAAW,aAAa,EAAS,CAAE,KAAM,EAAM,MAAM,WAAW,MAAQ,CAAE,CAAC,CAC7F,CACF,EAEA,QAAQ,EAAU,CACZ,IAAa,IAEjB,EAAU,EAEV,EAAO,EACT,EAEA,WAEA,IAAI,UAAW,CACb,OAAO,EAAM,KACf,EAEA,UAAW,EAAM,UAEjB,CAAC,OAAO,UAAW,CACjB,EAAO,QAAQ,CACjB,CACF,EAEA,OAAO,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localSource.d.ts","sourceRoot":"","sources":["../src/localSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"localSource.d.ts","sourceRoot":"","sources":["../src/localSource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,WAAW,EACX,iBAAiB,EAGlB,MAAM,SAAS,CAAC;AAoBjB,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAE,iBAAiB,CAAC,CAAC,CAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAqG1G"}
|
package/dist/localSource.js
CHANGED
|
@@ -15,7 +15,7 @@ function o(n, o = {}) {
|
|
|
15
15
|
pageSize: 20,
|
|
16
16
|
search: ""
|
|
17
17
|
}, o.initialQuery), l = () => {
|
|
18
|
-
let e = c.search.length > 0 && o.match ? s.filter((e) => o.match(e, c.search)) : s, n = i(e.length), r = t(c.page, c.pageSize, n), a = (r.index - 1) * r.size;
|
|
18
|
+
let e = c.search.length > 0 && o.match ? s.filter((e) => o.match?.(e, c.search)) : s, n = i(e.length), r = t(c.page, c.pageSize, n), a = (r.index - 1) * r.size;
|
|
19
19
|
return c = {
|
|
20
20
|
...c,
|
|
21
21
|
page: r.index
|
|
@@ -31,7 +31,7 @@ function o(n, o = {}) {
|
|
|
31
31
|
return r(e.query, u.value.query) && e.data === u.value.data && e.pagination === u.value.pagination ? !1 : (u.set(e), !0);
|
|
32
32
|
}, f = (e) => {
|
|
33
33
|
let t = a(c, e, u.value.pagination.count);
|
|
34
|
-
|
|
34
|
+
r(t, c) || (c = t, d());
|
|
35
35
|
}, p = {
|
|
36
36
|
get disposalSignal() {
|
|
37
37
|
return u.disposalSignal;
|
|
@@ -42,20 +42,20 @@ function o(n, o = {}) {
|
|
|
42
42
|
},
|
|
43
43
|
page: {
|
|
44
44
|
go(e) {
|
|
45
|
-
|
|
45
|
+
f({ page: e });
|
|
46
46
|
},
|
|
47
47
|
last() {
|
|
48
|
-
|
|
48
|
+
f({ page: u.value.pagination.count });
|
|
49
49
|
},
|
|
50
50
|
next() {
|
|
51
|
-
|
|
51
|
+
u.value.pagination.hasNext && f({ page: u.value.pagination.index + 1 });
|
|
52
52
|
},
|
|
53
53
|
previous() {
|
|
54
|
-
|
|
54
|
+
u.value.pagination.hasPrevious && f({ page: u.value.pagination.index - 1 });
|
|
55
55
|
}
|
|
56
56
|
},
|
|
57
57
|
setData(e) {
|
|
58
|
-
|
|
58
|
+
e !== s && (s = e, d());
|
|
59
59
|
},
|
|
60
60
|
setQuery: f,
|
|
61
61
|
get snapshot() {
|
package/dist/localSource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localSource.js","names":[],"sources":["../src/localSource.ts"],"sourcesContent":["import type {\n LocalQuery,\n LocalQueryPatch,\n LocalSource,\n LocalSourceConfig,\n PagePagination,\n SourceSnapshot,\n} from './types';\n\
|
|
1
|
+
{"version":3,"file":"localSource.js","names":[],"sources":["../src/localSource.ts"],"sourcesContent":["import { createPagePagination, positiveInteger, sameQuery, totalItems } from './pagination';\nimport { createSourceStore } from './sourceStore';\nimport type {\n LocalQuery,\n LocalQueryPatch,\n LocalSource,\n LocalSourceConfig,\n PagePagination,\n SourceSnapshot,\n} from './types';\n\nconst normalizeQuery = (current: LocalQuery, patch: LocalQueryPatch = {}, maxPage?: number): LocalQuery => {\n const page = patch.page ?? current.page;\n const pageSize = patch.pageSize ?? current.pageSize;\n const search = patch.search ?? current.search;\n const resetsPage = patch.pageSize !== undefined || patch.search !== undefined;\n\n const requestedPage = patch.page ?? (resetsPage ? 1 : page);\n\n return {\n page:\n maxPage === undefined\n ? positiveInteger(requestedPage, 'page')\n : Math.min(positiveInteger(requestedPage, 'page'), maxPage),\n pageSize: positiveInteger(pageSize, 'pageSize'),\n search,\n };\n};\n\n/** Local sources own only search and pagination; callers prepare filtering and ranking. */\nexport function createLocalSource<T>(data: readonly T[], config: LocalSourceConfig<T> = {}): LocalSource<T> {\n let allData = data;\n let query = normalizeQuery({ page: 1, pageSize: 20, search: '' }, config.initialQuery);\n\n const buildSnapshot = (): SourceSnapshot<T, LocalQuery, PagePagination> => {\n const matched =\n query.search.length > 0 && config.match ? allData.filter((item) => config.match?.(item, query.search)) : allData;\n const total = totalItems(matched.length);\n const pagination = createPagePagination(query.page, query.pageSize, total);\n const start = (pagination.index - 1) * pagination.size;\n\n query = { ...query, page: pagination.index };\n\n return {\n data: matched.slice(start, start + pagination.size),\n error: null,\n isFetching: false,\n pagination,\n query,\n };\n };\n\n const store = createSourceStore(buildSnapshot());\n\n const commit = (): boolean => {\n const next = buildSnapshot();\n\n if (\n sameQuery(next.query, store.value.query) &&\n next.data === store.value.data &&\n next.pagination === store.value.pagination\n ) {\n return false;\n }\n\n store.set(next);\n\n return true;\n };\n\n const setQuery = (patch: LocalQueryPatch): void => {\n const next = normalizeQuery(query, patch, store.value.pagination.count);\n\n if (sameQuery(next, query)) return;\n\n query = next;\n\n commit();\n };\n\n const source: LocalSource<T> = {\n get disposalSignal() {\n return store.disposalSignal;\n },\n\n dispose: store.dispose,\n\n get disposed() {\n return store.disposed;\n },\n\n page: {\n go(index) {\n setQuery({ page: index });\n },\n\n last() {\n setQuery({ page: store.value.pagination.count });\n },\n\n next() {\n if (store.value.pagination.hasNext) setQuery({ page: store.value.pagination.index + 1 });\n },\n\n previous() {\n if (store.value.pagination.hasPrevious) setQuery({ page: store.value.pagination.index - 1 });\n },\n },\n\n setData(nextData) {\n if (nextData === allData) return;\n\n allData = nextData;\n\n commit();\n },\n\n setQuery,\n\n get snapshot() {\n return store.value;\n },\n\n subscribe: store.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n return source;\n}\n"],"mappings":";;;AAWA,IAAM,KAAkB,GAAqB,IAAyB,CAAC,GAAG,MAAiC;CACzG,IAAM,IAAO,EAAM,QAAQ,EAAQ,MAC7B,IAAW,EAAM,YAAY,EAAQ,UACrC,IAAS,EAAM,UAAU,EAAQ,QACjC,IAAa,EAAM,aAAa,KAAA,KAAa,EAAM,WAAW,KAAA,GAE9D,IAAgB,EAAM,SAAS,IAAa,IAAI;CAEtD,OAAO;EACL,MACE,MAAY,KAAA,IACR,EAAgB,GAAe,MAAM,IACrC,KAAK,IAAI,EAAgB,GAAe,MAAM,GAAG,CAAO;EAC9D,UAAU,EAAgB,GAAU,UAAU;EAC9C;CACF;AACF;AAGA,SAAgB,EAAqB,GAAoB,IAA+B,CAAC,GAAmB;CAC1G,IAAI,IAAU,GACV,IAAQ,EAAe;EAAE,MAAM;EAAG,UAAU;EAAI,QAAQ;CAAG,GAAG,EAAO,YAAY,GAE/E,UAAqE;EACzE,IAAM,IACJ,EAAM,OAAO,SAAS,KAAK,EAAO,QAAQ,EAAQ,QAAQ,MAAS,EAAO,QAAQ,GAAM,EAAM,MAAM,CAAC,IAAI,GACrG,IAAQ,EAAW,EAAQ,MAAM,GACjC,IAAa,EAAqB,EAAM,MAAM,EAAM,UAAU,CAAK,GACnE,KAAS,EAAW,QAAQ,KAAK,EAAW;EAIlD,OAFA,IAAQ;GAAE,GAAG;GAAO,MAAM,EAAW;EAAM,GAEpC;GACL,MAAM,EAAQ,MAAM,GAAO,IAAQ,EAAW,IAAI;GAClD,OAAO;GACP,YAAY;GACZ;GACA;EACF;CACF,GAEM,IAAQ,EAAkB,EAAc,CAAC,GAEzC,UAAwB;EAC5B,IAAM,IAAO,EAAc;EAY3B,OATE,EAAU,EAAK,OAAO,EAAM,MAAM,KAAK,KACvC,EAAK,SAAS,EAAM,MAAM,QAC1B,EAAK,eAAe,EAAM,MAAM,aAEzB,MAGT,EAAM,IAAI,CAAI,GAEP;CACT,GAEM,KAAY,MAAiC;EACjD,IAAM,IAAO,EAAe,GAAO,GAAO,EAAM,MAAM,WAAW,KAAK;EAElE,EAAU,GAAM,CAAK,MAEzB,IAAQ,GAER,EAAO;CACT,GAEM,IAAyB;EAC7B,IAAI,iBAAiB;GACnB,OAAO,EAAM;EACf;EAEA,SAAS,EAAM;EAEf,IAAI,WAAW;GACb,OAAO,EAAM;EACf;EAEA,MAAM;GACJ,GAAG,GAAO;IACR,EAAS,EAAE,MAAM,EAAM,CAAC;GAC1B;GAEA,OAAO;IACL,EAAS,EAAE,MAAM,EAAM,MAAM,WAAW,MAAM,CAAC;GACjD;GAEA,OAAO;IACL,AAAI,EAAM,MAAM,WAAW,WAAS,EAAS,EAAE,MAAM,EAAM,MAAM,WAAW,QAAQ,EAAE,CAAC;GACzF;GAEA,WAAW;IACT,AAAI,EAAM,MAAM,WAAW,eAAa,EAAS,EAAE,MAAM,EAAM,MAAM,WAAW,QAAQ,EAAE,CAAC;GAC7F;EACF;EAEA,QAAQ,GAAU;GACZ,MAAa,MAEjB,IAAU,GAEV,EAAO;EACT;EAEA;EAEA,IAAI,WAAW;GACb,OAAO,EAAM;EACf;EAEA,WAAW,EAAM;EAEjB,CAAC,OAAO,WAAW;GACjB,EAAO,QAAQ;EACjB;CACF;CAEA,OAAO;AACT"}
|
package/dist/pageSource.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageSource.cjs","names":[],"sources":["../src/pageSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"pageSource.cjs","names":[],"sources":["../src/pageSource.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { createAsyncSource } from './asyncSource';\nimport { createPagePagination, positiveInteger, sameQuery, totalItems } from './pagination';\nimport type { PagePagination, PageQuery, PageQueryPatch, PageSource, PageSourceConfig } from './types';\n\nconst normalizeQuery = <TFilter, TSort>(\n current: PageQuery<TFilter, TSort>,\n patch: PageQueryPatch<TFilter, TSort> = {},\n maxPage?: number,\n): PageQuery<TFilter, TSort> => {\n const page = patch.page ?? current.page;\n const pageSize = patch.pageSize ?? current.pageSize;\n const search = patch.search ?? current.search;\n const resetsPage = 'filter' in patch || patch.pageSize !== undefined || patch.search !== undefined || 'sort' in patch;\n\n const requestedPage = patch.page ?? (resetsPage ? 1 : page);\n\n return {\n ...('filter' in patch\n ? patch.filter !== undefined && { filter: patch.filter }\n : current.filter !== undefined && { filter: current.filter }),\n ...('sort' in patch\n ? patch.sort !== undefined && { sort: patch.sort }\n : current.sort !== undefined && { sort: current.sort }),\n page:\n maxPage === undefined\n ? positiveInteger(requestedPage, 'page')\n : Math.min(positiveInteger(requestedPage, 'page'), maxPage),\n pageSize: positiveInteger(pageSize, 'pageSize'),\n search,\n };\n};\n\n/** Page sources retain loaded state while pendingQuery records newer work. */\nexport function createPageSource<T, TFilter = unknown, TSort = unknown>(\n config: PageSourceConfig<T, TFilter, TSort>,\n): PageSource<T, TFilter, TSort> {\n const initialQuery: PageQuery<TFilter, TSort> = {\n page: 1,\n pageSize: 20,\n search: '',\n };\n let requestedQuery = normalizeQuery(initialQuery, config.initialQuery);\n const asyncSource = createAsyncSource<T, PageQuery<TFilter, TSort>, PagePagination>({\n data: [],\n error: null,\n isFetching: false,\n pagination: createPagePagination(requestedQuery.page, requestedQuery.pageSize, 0),\n query: requestedQuery,\n });\n\n const fetch = (query: PageQuery<TFilter, TSort>): Promise<void> =>\n asyncSource.fetch({\n failure: (previous, error) => ({ ...previous, error, isFetching: false, pendingQuery: undefined }),\n load: (signal) => config.load({ query, signal }),\n pending: (previous) => ({ ...previous, error: null, isFetching: true, pendingQuery: query }),\n success: (result) => {\n const total = totalItems(result.total);\n const pagination = createPagePagination(query.page, query.pageSize, total);\n const loadedQuery = { ...query, page: pagination.index };\n\n requestedQuery = loadedQuery;\n\n return {\n data: result.data,\n error: null,\n isFetching: false,\n pagination,\n query: loadedQuery,\n };\n },\n });\n\n const reload = (): Promise<void> => fetch(requestedQuery);\n\n const setQuery = async (patch: PageQueryPatch<TFilter, TSort>): Promise<void> => {\n const current = asyncSource.snapshot.pendingQuery ?? asyncSource.snapshot.query;\n const next = normalizeQuery(\n current,\n patch,\n asyncSource.snapshot.pagination.total > 0 ? asyncSource.snapshot.pagination.count : undefined,\n );\n\n if (sameQuery(next, requestedQuery)) return;\n\n requestedQuery = next;\n await fetch(next);\n };\n\n const source: PageSource<T, TFilter, TSort> = {\n get disposalSignal() {\n return asyncSource.disposalSignal;\n },\n\n dispose: asyncSource.dispose,\n\n get disposed() {\n return asyncSource.disposed;\n },\n\n page: {\n go(index) {\n return asyncSource.snapshot.isFetching ? Promise.resolve() : setQuery({ page: index });\n },\n\n last() {\n return asyncSource.snapshot.isFetching\n ? Promise.resolve()\n : setQuery({ page: asyncSource.snapshot.pagination.count });\n },\n\n next() {\n return asyncSource.snapshot.isFetching || !asyncSource.snapshot.pagination.hasNext\n ? Promise.resolve()\n : setQuery({ page: asyncSource.snapshot.pagination.index + 1 });\n },\n\n previous() {\n return asyncSource.snapshot.isFetching || !asyncSource.snapshot.pagination.hasPrevious\n ? Promise.resolve()\n : setQuery({ page: asyncSource.snapshot.pagination.index - 1 });\n },\n },\n\n reload,\n setQuery,\n\n get snapshot() {\n return asyncSource.snapshot;\n },\n\n subscribe: asyncSource.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n if (config.autoStart !== false)\n void reload().catch(() => warn('Initial load failed. Inspect source.snapshot.error.'));\n\n return source;\n}\n"],"mappings":"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"}
|
package/dist/pageSource.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageSource.d.ts","sourceRoot":"","sources":["../src/pageSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pageSource.d.ts","sourceRoot":"","sources":["../src/pageSource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA6C,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA8BvG,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACpE,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAC1C,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CA0G/B"}
|
package/dist/pageSource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageSource.js","names":[],"sources":["../src/pageSource.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"pageSource.js","names":[],"sources":["../src/pageSource.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { createAsyncSource } from './asyncSource';\nimport { createPagePagination, positiveInteger, sameQuery, totalItems } from './pagination';\nimport type { PagePagination, PageQuery, PageQueryPatch, PageSource, PageSourceConfig } from './types';\n\nconst normalizeQuery = <TFilter, TSort>(\n current: PageQuery<TFilter, TSort>,\n patch: PageQueryPatch<TFilter, TSort> = {},\n maxPage?: number,\n): PageQuery<TFilter, TSort> => {\n const page = patch.page ?? current.page;\n const pageSize = patch.pageSize ?? current.pageSize;\n const search = patch.search ?? current.search;\n const resetsPage = 'filter' in patch || patch.pageSize !== undefined || patch.search !== undefined || 'sort' in patch;\n\n const requestedPage = patch.page ?? (resetsPage ? 1 : page);\n\n return {\n ...('filter' in patch\n ? patch.filter !== undefined && { filter: patch.filter }\n : current.filter !== undefined && { filter: current.filter }),\n ...('sort' in patch\n ? patch.sort !== undefined && { sort: patch.sort }\n : current.sort !== undefined && { sort: current.sort }),\n page:\n maxPage === undefined\n ? positiveInteger(requestedPage, 'page')\n : Math.min(positiveInteger(requestedPage, 'page'), maxPage),\n pageSize: positiveInteger(pageSize, 'pageSize'),\n search,\n };\n};\n\n/** Page sources retain loaded state while pendingQuery records newer work. */\nexport function createPageSource<T, TFilter = unknown, TSort = unknown>(\n config: PageSourceConfig<T, TFilter, TSort>,\n): PageSource<T, TFilter, TSort> {\n const initialQuery: PageQuery<TFilter, TSort> = {\n page: 1,\n pageSize: 20,\n search: '',\n };\n let requestedQuery = normalizeQuery(initialQuery, config.initialQuery);\n const asyncSource = createAsyncSource<T, PageQuery<TFilter, TSort>, PagePagination>({\n data: [],\n error: null,\n isFetching: false,\n pagination: createPagePagination(requestedQuery.page, requestedQuery.pageSize, 0),\n query: requestedQuery,\n });\n\n const fetch = (query: PageQuery<TFilter, TSort>): Promise<void> =>\n asyncSource.fetch({\n failure: (previous, error) => ({ ...previous, error, isFetching: false, pendingQuery: undefined }),\n load: (signal) => config.load({ query, signal }),\n pending: (previous) => ({ ...previous, error: null, isFetching: true, pendingQuery: query }),\n success: (result) => {\n const total = totalItems(result.total);\n const pagination = createPagePagination(query.page, query.pageSize, total);\n const loadedQuery = { ...query, page: pagination.index };\n\n requestedQuery = loadedQuery;\n\n return {\n data: result.data,\n error: null,\n isFetching: false,\n pagination,\n query: loadedQuery,\n };\n },\n });\n\n const reload = (): Promise<void> => fetch(requestedQuery);\n\n const setQuery = async (patch: PageQueryPatch<TFilter, TSort>): Promise<void> => {\n const current = asyncSource.snapshot.pendingQuery ?? asyncSource.snapshot.query;\n const next = normalizeQuery(\n current,\n patch,\n asyncSource.snapshot.pagination.total > 0 ? asyncSource.snapshot.pagination.count : undefined,\n );\n\n if (sameQuery(next, requestedQuery)) return;\n\n requestedQuery = next;\n await fetch(next);\n };\n\n const source: PageSource<T, TFilter, TSort> = {\n get disposalSignal() {\n return asyncSource.disposalSignal;\n },\n\n dispose: asyncSource.dispose,\n\n get disposed() {\n return asyncSource.disposed;\n },\n\n page: {\n go(index) {\n return asyncSource.snapshot.isFetching ? Promise.resolve() : setQuery({ page: index });\n },\n\n last() {\n return asyncSource.snapshot.isFetching\n ? Promise.resolve()\n : setQuery({ page: asyncSource.snapshot.pagination.count });\n },\n\n next() {\n return asyncSource.snapshot.isFetching || !asyncSource.snapshot.pagination.hasNext\n ? Promise.resolve()\n : setQuery({ page: asyncSource.snapshot.pagination.index + 1 });\n },\n\n previous() {\n return asyncSource.snapshot.isFetching || !asyncSource.snapshot.pagination.hasPrevious\n ? Promise.resolve()\n : setQuery({ page: asyncSource.snapshot.pagination.index - 1 });\n },\n },\n\n reload,\n setQuery,\n\n get snapshot() {\n return asyncSource.snapshot;\n },\n\n subscribe: asyncSource.subscribe,\n\n [Symbol.dispose]() {\n source.dispose();\n },\n };\n\n if (config.autoStart !== false)\n void reload().catch(() => warn('Initial load failed. Inspect source.snapshot.error.'));\n\n return source;\n}\n"],"mappings":"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"}
|
package/dist/sourcerer.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(){let e,t=0;return{begin(){e?.abort();let n=new AbortController,r=++t;return e=n,{finish(){r===t&&(e=void 0)},isCurrent(){return r===t},signal:n.signal}},dispose(){e?.abort(),e=void 0,t++}}}function t(e){return e instanceof Error?e:Error(typeof e==`string`&&e.length>0?e:`Source request failed`)}function n(e){let t=new AbortController,n=new Set,r=!1,i=e,a=()=>{r||(r=!0,n.clear(),t.abort())};return{get disposalSignal(){return t.signal},dispose:a,get disposed(){return r},set(e){if(!r){i=e;for(let e of n)try{e(i)}catch(e){queueMicrotask(()=>{throw e})}}},subscribe(e){return r?()=>{}:(n.add(e),()=>n.delete(e))},[Symbol.dispose]:a,get value(){return i}}}function r(r){let i=n(r),a=e();return{get disposalSignal(){return i.disposalSignal},dispose(){a.dispose(),i.dispose()},get disposed(){return i.disposed},async fetch(e){if(i.disposed)return;let n=a.begin(),r=i.value;i.set(e.pending(r));let o;try{o=e.success(await e.load(n.signal))}catch(a){if(!n.isCurrent()||i.disposed)return;let o=t(a);throw i.set(e.failure(r,o)),o}finally{n.finish()}!n.isCurrent()||i.disposed||i.set(o)},get snapshot(){return i.value},subscribe:i.subscribe}}function i(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`);return e}function a(e){if(!Number.isInteger(e)||e<0)throw RangeError(`Source loader total must be a non-negative integer`);return e}function o(e,t,n){let r=Math.max(1,Math.ceil(n/t)),i=Math.min(e,r);return{count:r,hasNext:i<r,hasPrevious:i>1,index:i,kind:`page`,size:t,total:n}}function s(e,t){return[...new Set([...Object.keys(e),...Object.keys(t)])].every(n=>Object.is(e[n],t[n]))}var c=e=>({hasNext:e?.nextCursor!==void 0,hasPrevious:e?.previousCursor!==void 0,kind:`cursor`,...e?.nextCursor!==void 0&&{nextCursor:e.nextCursor},...e?.previousCursor!==void 0&&{previousCursor:e.previousCursor},...e?.total!==void 0&&{total:a(e.total)}}),l=(e,t={})=>{if(t.after!==void 0&&t.before!==void 0)throw RangeError(`Cursor query cannot include both after and before`);let n=t.pageSize!==void 0||t.search!==void 0,r=n||`before`in t?void 0:`after`in t?t.after:e.after,a=n||`after`in t?void 0:`before`in t?t.before:e.before;return{...r!==void 0&&{after:r},...a!==void 0&&{before:a},pageSize:i(t.pageSize??e.pageSize,`pageSize`),search:t.search??e.search}};function u(e){let t=l({pageSize:20,search:``},e.initialQuery),n=r({data:[],error:null,isFetching:!1,pagination:c(),query:t}),i=t=>n.fetch({failure:(e,t)=>({...e,error:t,isFetching:!1,pendingQuery:void 0}),load:n=>e.load({query:t,signal:n}),pending:e=>({...e,error:null,isFetching:!0,pendingQuery:t}),success:e=>({data:e.data,error:null,isFetching:!1,pagination:c(e),query:t})}),a=()=>i(t),o=async e=>{let r=l(n.snapshot.pendingQuery??n.snapshot.query,e);s(r,t)||(t=r,await i(r))},u={get disposalSignal(){return n.disposalSignal},dispose:n.dispose,get disposed(){return n.disposed},page:{next(){let e=n.snapshot.pagination.nextCursor;return n.snapshot.isFetching||e===void 0?Promise.resolve():o({after:e})},previous(){let e=n.snapshot.pagination.previousCursor;return n.snapshot.isFetching||e===void 0?Promise.resolve():o({before:e})}},reload:a,setQuery:o,get snapshot(){return n.snapshot},subscribe:n.subscribe,[Symbol.dispose](){u.dispose()}};return e.autoStart!==!1&&a().catch(()=>void 0),u}var d=(e,t,n)=>({hasMore:e<t,isLoadingMore:n,kind:`infinite`,loaded:e,total:t}),f=(e,t={})=>({pageSize:i(t.pageSize??e.pageSize,`pageSize`),search:t.search??e.search});function p(e){let t=f({pageSize:20,search:``},e.initialQuery),n=1,i=r({data:[],error:null,isFetching:!1,pagination:d(0,0,!1),query:t}),o=(t,r,o)=>{let s=i.snapshot.data;return i.fetch({failure:(e,t)=>({...e,error:t,isFetching:!1,pendingQuery:void 0}),load:n=>e.load({query:{...t,page:r,pageSize:t.pageSize},signal:n}),pending:e=>({...e,error:null,isFetching:!0,pagination:d(e.data.length,e.pagination.total,o),pendingQuery:t}),success:e=>{let i=a(e.total),c=o?[...s,...e.data]:e.data;return n=r+1,{data:c,error:null,isFetching:!1,pagination:d(c.length,i,!1),query:t}}})},c=()=>(n=1,o(t,1,!1)),l={get disposalSignal(){return i.disposalSignal},dispose:i.dispose,get disposed(){return i.disposed},loadMore(){let{isFetching:e,pagination:r}=i.snapshot;return e||i.snapshot.data.length>0&&!r.hasMore?Promise.resolve():o(t,n,!0)},reload:c,setQuery:async e=>{let r=f(i.snapshot.pendingQuery??i.snapshot.query,e);s(r,t)||(t=r,n=1,await o(r,1,!1))},get snapshot(){return i.snapshot},subscribe:i.subscribe,[Symbol.dispose](){l.dispose()}};return e.autoStart!==!1&&c().catch(()=>void 0),l}var m=(e,t={},n)=>{let r=t.page??e.page,a=t.pageSize??e.pageSize,o=t.search??e.search,s=t.pageSize!==void 0||t.search!==void 0,c=t.page??(s?1:r);return{page:n===void 0?i(c,`page`):Math.min(i(c,`page`),n),pageSize:i(a,`pageSize`),search:o}};function h(e,t={}){let r=e,i=m({page:1,pageSize:20,search:``},t.initialQuery),c=()=>{let e=i.search.length>0&&t.match?r.filter(e=>t.match(e,i.search)):r,n=a(e.length),s=o(i.page,i.pageSize,n),c=(s.index-1)*s.size;return i={...i,page:s.index},{data:e.slice(c,c+s.size),error:null,isFetching:!1,pagination:s,query:i}},l=n(c()),u=()=>{let e=c();return s(e.query,l.value.query)&&e.data===l.value.data&&e.pagination===l.value.pagination?!1:(l.set(e),!0)},d=e=>{let t=m(i,e,l.value.pagination.count);
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(){let e,t=0;return{begin(){e?.abort();let n=new AbortController,r=++t;return e=n,{finish(){r===t&&(e=void 0)},isCurrent(){return r===t},signal:n.signal}},dispose(){e?.abort(),e=void 0,t++}}}function t(e){return e instanceof Error?e:Error(typeof e==`string`&&e.length>0?e:`Source request failed`)}function n(e){let t=new AbortController,n=new Set,r=!1,i=e,a=()=>{r||(r=!0,n.clear(),t.abort())};return{get disposalSignal(){return t.signal},dispose:a,get disposed(){return r},set(e){if(!r){i=e;for(let e of n)try{e(i)}catch(e){queueMicrotask(()=>{throw e})}}},subscribe(e){return r?()=>{}:(n.add(e),()=>n.delete(e))},[Symbol.dispose]:a,get value(){return i}}}function r(r){let i=n(r),a=e();return{get disposalSignal(){return i.disposalSignal},dispose(){a.dispose(),i.dispose()},get disposed(){return i.disposed},async fetch(e){if(i.disposed)return;let n=a.begin(),r=i.value;i.set(e.pending(r));let o;try{o=e.success(await e.load(n.signal))}catch(a){if(!n.isCurrent()||i.disposed)return;let o=t(a);throw i.set(e.failure(r,o)),o}finally{n.finish()}!n.isCurrent()||i.disposed||i.set(o)},get snapshot(){return i.value},subscribe:i.subscribe}}function i(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`);return e}function a(e){if(!Number.isInteger(e)||e<0)throw RangeError(`Source loader total must be a non-negative integer`);return e}function o(e,t,n){let r=Math.max(1,Math.ceil(n/t)),i=Math.min(e,r);return{count:r,hasNext:i<r,hasPrevious:i>1,index:i,kind:`page`,size:t,total:n}}function s(e,t){return[...new Set([...Object.keys(e),...Object.keys(t)])].every(n=>Object.is(e[n],t[n]))}var c=e=>({hasNext:e?.nextCursor!==void 0,hasPrevious:e?.previousCursor!==void 0,kind:`cursor`,...e?.nextCursor!==void 0&&{nextCursor:e.nextCursor},...e?.previousCursor!==void 0&&{previousCursor:e.previousCursor},...e?.total!==void 0&&{total:a(e.total)}}),l=(e,t={})=>{if(t.after!==void 0&&t.before!==void 0)throw RangeError(`Cursor query cannot include both after and before`);let n=t.pageSize!==void 0||t.search!==void 0,r=n||`before`in t?void 0:`after`in t?t.after:e.after,a=n||`after`in t?void 0:`before`in t?t.before:e.before;return{...r!==void 0&&{after:r},...a!==void 0&&{before:a},pageSize:i(t.pageSize??e.pageSize,`pageSize`),search:t.search??e.search}};function u(e){let t=l({pageSize:20,search:``},e.initialQuery),n=r({data:[],error:null,isFetching:!1,pagination:c(),query:t}),i=t=>n.fetch({failure:(e,t)=>({...e,error:t,isFetching:!1,pendingQuery:void 0}),load:n=>e.load({query:t,signal:n}),pending:e=>({...e,error:null,isFetching:!0,pendingQuery:t}),success:e=>({data:e.data,error:null,isFetching:!1,pagination:c(e),query:t})}),a=()=>i(t),o=async e=>{let r=l(n.snapshot.pendingQuery??n.snapshot.query,e);s(r,t)||(t=r,await i(r))},u={get disposalSignal(){return n.disposalSignal},dispose:n.dispose,get disposed(){return n.disposed},page:{next(){let e=n.snapshot.pagination.nextCursor;return n.snapshot.isFetching||e===void 0?Promise.resolve():o({after:e})},previous(){let e=n.snapshot.pagination.previousCursor;return n.snapshot.isFetching||e===void 0?Promise.resolve():o({before:e})}},reload:a,setQuery:o,get snapshot(){return n.snapshot},subscribe:n.subscribe,[Symbol.dispose](){u.dispose()}};return e.autoStart!==!1&&a().catch(()=>void 0),u}var d=(e,t,n)=>({hasMore:e<t,isLoadingMore:n,kind:`infinite`,loaded:e,total:t}),f=(e,t={})=>({pageSize:i(t.pageSize??e.pageSize,`pageSize`),search:t.search??e.search});function p(e){let t=f({pageSize:20,search:``},e.initialQuery),n=1,i=r({data:[],error:null,isFetching:!1,pagination:d(0,0,!1),query:t}),o=(t,r,o)=>{let s=i.snapshot.data;return i.fetch({failure:(e,t)=>({...e,error:t,isFetching:!1,pendingQuery:void 0}),load:n=>e.load({query:{...t,page:r,pageSize:t.pageSize},signal:n}),pending:e=>({...e,error:null,isFetching:!0,pagination:d(e.data.length,e.pagination.total,o),pendingQuery:t}),success:e=>{let i=a(e.total),c=o?[...s,...e.data]:e.data;return n=r+1,{data:c,error:null,isFetching:!1,pagination:d(c.length,i,!1),query:t}}})},c=()=>(n=1,o(t,1,!1)),l={get disposalSignal(){return i.disposalSignal},dispose:i.dispose,get disposed(){return i.disposed},loadMore(){let{isFetching:e,pagination:r}=i.snapshot;return e||i.snapshot.data.length>0&&!r.hasMore?Promise.resolve():o(t,n,!0)},reload:c,setQuery:async e=>{let r=f(i.snapshot.pendingQuery??i.snapshot.query,e);s(r,t)||(t=r,n=1,await o(r,1,!1))},get snapshot(){return i.snapshot},subscribe:i.subscribe,[Symbol.dispose](){l.dispose()}};return e.autoStart!==!1&&c().catch(()=>void 0),l}var m=(e,t={},n)=>{let r=t.page??e.page,a=t.pageSize??e.pageSize,o=t.search??e.search,s=t.pageSize!==void 0||t.search!==void 0,c=t.page??(s?1:r);return{page:n===void 0?i(c,`page`):Math.min(i(c,`page`),n),pageSize:i(a,`pageSize`),search:o}};function h(e,t={}){let r=e,i=m({page:1,pageSize:20,search:``},t.initialQuery),c=()=>{let e=i.search.length>0&&t.match?r.filter(e=>t.match?.(e,i.search)):r,n=a(e.length),s=o(i.page,i.pageSize,n),c=(s.index-1)*s.size;return i={...i,page:s.index},{data:e.slice(c,c+s.size),error:null,isFetching:!1,pagination:s,query:i}},l=n(c()),u=()=>{let e=c();return s(e.query,l.value.query)&&e.data===l.value.data&&e.pagination===l.value.pagination?!1:(l.set(e),!0)},d=e=>{let t=m(i,e,l.value.pagination.count);s(t,i)||(i=t,u())},f={get disposalSignal(){return l.disposalSignal},dispose:l.dispose,get disposed(){return l.disposed},page:{go(e){d({page:e})},last(){d({page:l.value.pagination.count})},next(){l.value.pagination.hasNext&&d({page:l.value.pagination.index+1})},previous(){l.value.pagination.hasPrevious&&d({page:l.value.pagination.index-1})}},setData(e){e!==r&&(r=e,u())},setQuery:d,get snapshot(){return l.value},subscribe:l.subscribe,[Symbol.dispose](){f.dispose()}};return f}var g=(e,t={},n)=>{let r=t.page??e.page,a=t.pageSize??e.pageSize,o=t.search??e.search,s=`filter`in t||t.pageSize!==void 0||t.search!==void 0||`sort`in t,c=t.page??(s?1:r);return{...`filter`in t?t.filter!==void 0&&{filter:t.filter}:e.filter!==void 0&&{filter:e.filter},...`sort`in t?t.sort!==void 0&&{sort:t.sort}:e.sort!==void 0&&{sort:e.sort},page:n===void 0?i(c,`page`):Math.min(i(c,`page`),n),pageSize:i(a,`pageSize`),search:o}};function _(e){let t=g({page:1,pageSize:20,search:``},e.initialQuery),n=r({data:[],error:null,isFetching:!1,pagination:o(t.page,t.pageSize,0),query:t}),i=r=>n.fetch({failure:(e,t)=>({...e,error:t,isFetching:!1,pendingQuery:void 0}),load:t=>e.load({query:r,signal:t}),pending:e=>({...e,error:null,isFetching:!0,pendingQuery:r}),success:e=>{let n=a(e.total),i=o(r.page,r.pageSize,n),s={...r,page:i.index};return t=s,{data:e.data,error:null,isFetching:!1,pagination:i,query:s}}}),c=()=>i(t),l=async e=>{let r=g(n.snapshot.pendingQuery??n.snapshot.query,e,n.snapshot.pagination.total>0?n.snapshot.pagination.count:void 0);s(r,t)||(t=r,await i(r))},u={get disposalSignal(){return n.disposalSignal},dispose:n.dispose,get disposed(){return n.disposed},page:{go(e){return n.snapshot.isFetching?Promise.resolve():l({page:e})},last(){return n.snapshot.isFetching?Promise.resolve():l({page:n.snapshot.pagination.count})},next(){return n.snapshot.isFetching||!n.snapshot.pagination.hasNext?Promise.resolve():l({page:n.snapshot.pagination.index+1})},previous(){return n.snapshot.isFetching||!n.snapshot.pagination.hasPrevious?Promise.resolve():l({page:n.snapshot.pagination.index-1})}},reload:c,setQuery:l,get snapshot(){return n.snapshot},subscribe:n.subscribe,[Symbol.dispose](){u.dispose()}};return e.autoStart!==!1&&c().catch(()=>void 0),u}exports.createCursorSource=u,exports.createInfiniteSource=p,exports.createLocalSource=h,exports.createPageSource=_;
|
|
2
2
|
//# sourceMappingURL=sourcerer.cjs.map
|