{"_id":"@aiao/rxdb-plugin-search-angular","_rev":"6-6193345f814ae3576f9eb3d8be7aed8c","name":"@aiao/rxdb-plugin-search-angular","dist-tags":{"latest":"0.0.25"},"versions":{"0.0.20":{"name":"@aiao/rxdb-plugin-search-angular","version":"0.0.20","_id":"@aiao/rxdb-plugin-search-angular@0.0.20","maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"dist":{"shasum":"5be7876a1789e47d7254fa7ba2b11c7fa6cb16bf","tarball":"https://registry.npmjs.org/@aiao/rxdb-plugin-search-angular/-/rxdb-plugin-search-angular-0.0.20.tgz","fileCount":14,"integrity":"sha512-rTqqsb/1H74vopQJPyvk3CJg7CO+l/LVntM891XBWTp/dDoXU8F2q0sD/7+mwhryqv6g4d4Q+/OBgb3WPN+WfQ==","signatures":[{"sig":"MEQCIBA0f8FKMeAirCfhjHReLR5BrE6XxbKWEQ8SVlAd5U5ZAiBbEFhyI77YaFGHK+Al7Hduxepa3h8TTtEPRCuRF2BuVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14148},"type":"module","_from":"file:aiao-rxdb-plugin-search-angular-0.0.20.tgz","_npmUser":{"name":"aiao","email":"hero63418@gmail.com"},"_resolved":"/private/var/folders/1s/1sk5kvms7jj4z6glj40__v300000gn/T/bd6ea963a744023d7bec21e3e60207ff/aiao-rxdb-plugin-search-angular-0.0.20.tgz","_integrity":"sha512-rTqqsb/1H74vopQJPyvk3CJg7CO+l/LVntM891XBWTp/dDoXU8F2q0sD/7+mwhryqv6g4d4Q+/OBgb3WPN+WfQ==","_npmVersion":"11.9.0","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.2","@aiao/rxdb":"*","@aiao/utils":"*","@angular/core":">=19.0.0","@aiao/rxdb-plugin-search":"0.0.20"},"_npmOperationalInternal":{"tmp":"tmp/rxdb-plugin-search-angular_0.0.20_1779246563610_0.28791646406693405","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"@aiao/rxdb-plugin-search-angular","version":"0.0.21","_id":"@aiao/rxdb-plugin-search-angular@0.0.21","maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"dist":{"shasum":"dffb6c3f29b5ce8afc64a621396fb7568b553efb","tarball":"https://registry.npmjs.org/@aiao/rxdb-plugin-search-angular/-/rxdb-plugin-search-angular-0.0.21.tgz","fileCount":15,"integrity":"sha512-WczKZyoDd3vpolxElNslYZHFokIn386o9h5pWD5acU/kztCXGm2mx18PIZoYMsIQKfTU/YSsF/RVgKjrrMTgJw==","signatures":[{"sig":"MEUCIBi8lWI6WKJFPSf+aA6mI0QJTnIBudwHPiHoXNsC8y62AiEAxEXIKlEdfzuzVYXGr28ZLNHGeVDef6/GPZ9dN2s/BOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15906},"type":"module","_from":"file:aiao-rxdb-plugin-search-angular-0.0.21.tgz","_npmUser":{"name":"aiao","email":"hero63418@gmail.com"},"_resolved":"/private/var/folders/1s/1sk5kvms7jj4z6glj40__v300000gn/T/9b203abc67e516dd964c921d6af0f2ab/aiao-rxdb-plugin-search-angular-0.0.21.tgz","_integrity":"sha512-WczKZyoDd3vpolxElNslYZHFokIn386o9h5pWD5acU/kztCXGm2mx18PIZoYMsIQKfTU/YSsF/RVgKjrrMTgJw==","_npmVersion":"11.16.0","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","@angular/core":"22.0.5","@angular/common":"22.0.5","@angular/compiler":"22.0.5","@angular/platform-browser":"22.0.5"},"peerDependencies":{"rxjs":"^7.8.2","@aiao/rxdb":"*","@aiao/utils":"*","@angular/core":">=19.0.0","@aiao/rxdb-plugin-search":"0.0.21"},"_npmOperationalInternal":{"tmp":"tmp/rxdb-plugin-search-angular_0.0.21_1784362971506_0.5819601310730074","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"@aiao/rxdb-plugin-search-angular","version":"0.0.22","_id":"@aiao/rxdb-plugin-search-angular@0.0.22","maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"dist":{"shasum":"2b46d18db8a8212c200814b50447cf5d20126b01","tarball":"https://registry.npmjs.org/@aiao/rxdb-plugin-search-angular/-/rxdb-plugin-search-angular-0.0.22.tgz","fileCount":15,"integrity":"sha512-8sIp7NEHIQ6+SzEtQhsKiZEPHklm03E4Bwvb6kya33PbbjcUVer6Z8BjMtUvDgWV4K17VbAiZkAe8uyd7GCOcA==","signatures":[{"sig":"MEYCIQDAxkFbuh555lHLp7HjQu1gOr/GOMPoC8uYKK8i6HmjBgIhAPHw27EZrhd4oTa8z8U3C7kxcQR3drl2f4jr/lYDMtZt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15906},"type":"module","_from":"file:aiao-rxdb-plugin-search-angular-0.0.22.tgz","_npmUser":{"name":"aiao","email":"hero63418@gmail.com"},"_resolved":"/private/var/folders/1s/1sk5kvms7jj4z6glj40__v300000gn/T/ba7317224d4564cb13859ef10f8e039b/aiao-rxdb-plugin-search-angular-0.0.22.tgz","_integrity":"sha512-8sIp7NEHIQ6+SzEtQhsKiZEPHklm03E4Bwvb6kya33PbbjcUVer6Z8BjMtUvDgWV4K17VbAiZkAe8uyd7GCOcA==","_npmVersion":"10.9.2","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","@angular/core":"22.0.5","@angular/common":"22.0.5","@angular/compiler":"22.0.5","@angular/platform-browser":"22.0.5"},"peerDependencies":{"rxjs":"^7.8.2","@aiao/rxdb":"*","@aiao/utils":"*","@angular/core":">=19.0.0","@aiao/rxdb-plugin-search":"0.0.22"},"_npmOperationalInternal":{"tmp":"tmp/rxdb-plugin-search-angular_0.0.22_1785482928359_0.9981602329948751","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"@aiao/rxdb-plugin-search-angular","version":"0.0.23","_id":"@aiao/rxdb-plugin-search-angular@0.0.23","maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"dist":{"shasum":"a55ce4557768d48be7614b6b1fe32a20cea4d440","tarball":"https://registry.npmjs.org/@aiao/rxdb-plugin-search-angular/-/rxdb-plugin-search-angular-0.0.23.tgz","fileCount":15,"integrity":"sha512-f78CmitBPP9PE4gS4Wm9/cMLWvzdB5ihAzw1/E6id4anXxJ2KrXcgScq5VMBHJWizoELCT9XAfgL7/KJl3GPIg==","signatures":[{"sig":"MEQCIFxllY/3SLv90iDsYIJK8NsOCShD8H5YQqZ4eMuoxDzmAiAdkMCNtrFgNtYmM3zBQt0lMCaxBCQV/kjPE2q3lxZUAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15906},"type":"module","_from":"file:aiao-rxdb-plugin-search-angular-0.0.23.tgz","_npmUser":{"name":"aiao","email":"hero63418@gmail.com"},"_resolved":"/private/var/folders/1s/1sk5kvms7jj4z6glj40__v300000gn/T/fbd5ee1e6d9f5073c6afe2b9ba981204/aiao-rxdb-plugin-search-angular-0.0.23.tgz","_integrity":"sha512-f78CmitBPP9PE4gS4Wm9/cMLWvzdB5ihAzw1/E6id4anXxJ2KrXcgScq5VMBHJWizoELCT9XAfgL7/KJl3GPIg==","_npmVersion":"10.9.2","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.5","@angular/core":"22.0.5","@angular/common":"22.0.5","@angular/compiler":"22.0.5","@angular/platform-browser":"22.0.5"},"peerDependencies":{"rxjs":"^7.8.2","@aiao/rxdb":"*","@aiao/utils":"*","@angular/core":">=19.0.0","@aiao/rxdb-plugin-search":"0.0.23"},"_npmOperationalInternal":{"tmp":"tmp/rxdb-plugin-search-angular_0.0.23_1785736194615_0.3661036237608746","host":"s3://npm-registry-packages-npm-production"}},"0.0.24":{"name":"@aiao/rxdb-plugin-search-angular","version":"0.0.24","license":"MIT","_id":"@aiao/rxdb-plugin-search-angular@0.0.24","maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"dist":{"shasum":"5466183868828a6eb93d45c63c9e11f63136a932","tarball":"https://registry.npmjs.org/@aiao/rxdb-plugin-search-angular/-/rxdb-plugin-search-angular-0.0.24.tgz","fileCount":6,"integrity":"sha512-PgLQne6XazHWAx0AJ+YgvR7d6oqKsmn6Wtm9Q0IgiqD8PonkMWKn0PQ71yldoPGSrIJKShQWLIDpsCFurSxV1Q==","signatures":[{"sig":"MEUCIFTm00yKpcs3qSbdzQseG0BGL5iHnsPDic5iCUnUvk6nAiEA6UbXfB8oYdc+JBAV2txJ52/oDdNmSOmTh0E8kzysqjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27350},"type":"module","_from":"file:aiao-rxdb-plugin-search-angular-0.0.24.tgz","module":"fesm2022/aiao-rxdb-plugin-search-angular.mjs","exports":{".":{"types":"./types/aiao-rxdb-plugin-search-angular.d.ts","default":"./fesm2022/aiao-rxdb-plugin-search-angular.mjs"},"./package.json":{"default":"./package.json"}},"typings":"types/aiao-rxdb-plugin-search-angular.d.ts","_npmUser":{"name":"aiao","email":"hero63418@gmail.com"},"_resolved":"/private/var/folders/1s/1sk5kvms7jj4z6glj40__v300000gn/T/cb58eac1a27f367cdfca6fbeadf3b5d1/aiao-rxdb-plugin-search-angular-0.0.24.tgz","_integrity":"sha512-PgLQne6XazHWAx0AJ+YgvR7d6oqKsmn6Wtm9Q0IgiqD8PonkMWKn0PQ71yldoPGSrIJKShQWLIDpsCFurSxV1Q==","_npmVersion":"11.19.0","description":"[`@aiao/rxdb-plugin-search`](../rxdb-plugin-search) 的 Angular 集成层。提供 `useSearch()`，将搜索插件的 `SearchHandle` 适配为 Angular signal 消费接口。","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.2","@aiao/rxdb":"*","@angular/core":">=19.0.0","@aiao/rxdb-plugin-search":"*"},"_npmOperationalInternal":{"tmp":"tmp/rxdb-plugin-search-angular_0.0.24_1786441645274_0.7576947282270086","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"@aiao/rxdb-plugin-search-angular","version":"0.0.25","license":"MIT","repository":{"type":"git","url":"git+https://github.com/aiao-io/rxdb.git","directory":"packages/rxdb-plugin-search-angular"},"type":"module","peerDependencies":{"@aiao/rxdb":"*","@aiao/rxdb-plugin-search":"*","@angular/core":"^22.0.0","rxjs":"^7.8.2"},"publishConfig":{"access":"public"},"sideEffects":false,"module":"fesm2022/aiao-rxdb-plugin-search-angular.mjs","typings":"types/aiao-rxdb-plugin-search-angular.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./types/aiao-rxdb-plugin-search-angular.d.ts","default":"./fesm2022/aiao-rxdb-plugin-search-angular.mjs"}},"dependencies":{"tslib":"^2.3.0"},"_id":"@aiao/rxdb-plugin-search-angular@0.0.25","description":"[`@aiao/rxdb-plugin-search`](../rxdb-plugin-search) 的 Angular 集成层。提供 `useSearch()`，将搜索插件的 `SearchHandle` 适配为 Angular signal 消费接口。","bugs":{"url":"https://github.com/aiao-io/rxdb/issues"},"homepage":"https://github.com/aiao-io/rxdb#readme","_integrity":"sha512-0X9t4w8PFHSBnLIscZPg7I4pXfiZFmKb+7wpymQEuEoD4tW4rd5Qs1RB+GPGdNlhye75oYleY2TOa7WsRtgw2g==","_resolved":"/tmp/1c0d638e949cccbbe097372c59020293/aiao-rxdb-plugin-search-angular-0.0.25.tgz","_from":"file:aiao-rxdb-plugin-search-angular-0.0.25.tgz","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-0X9t4w8PFHSBnLIscZPg7I4pXfiZFmKb+7wpymQEuEoD4tW4rd5Qs1RB+GPGdNlhye75oYleY2TOa7WsRtgw2g==","shasum":"630a6809eb040bae9fae304bed18a0396431500c","tarball":"https://registry.npmjs.org/@aiao/rxdb-plugin-search-angular/-/rxdb-plugin-search-angular-0.0.25.tgz","fileCount":6,"unpackedSize":27500,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiao%2frxdb-plugin-search-angular@0.0.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCSACSR3x++2Rv6Z7fYyQ/ObSSL3sEInNpHqd5XCaQJlQIhAJi5JZFGNm5Kak7mVIpqlXPZTXanMdKbtFq5MEu1HbBE"}]},"_npmUser":{"name":"aiao","email":"hero63418@gmail.com"},"directories":{},"maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rxdb-plugin-search-angular_0.0.25_1786694795759_0.49534222129438676"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-20T03:09:23.469Z","modified":"2026-08-14T08:06:36.183Z","0.0.20":"2026-05-20T03:09:23.771Z","0.0.21":"2026-07-18T08:22:51.643Z","0.0.22":"2026-07-31T07:28:48.501Z","0.0.23":"2026-08-03T05:49:54.807Z","0.0.24":"2026-08-11T09:47:25.420Z","0.0.25":"2026-08-14T08:06:35.885Z"},"license":"MIT","description":"[`@aiao/rxdb-plugin-search`](../rxdb-plugin-search) 的 Angular 集成层。提供 `useSearch()`，将搜索插件的 `SearchHandle` 适配为 Angular signal 消费接口。","maintainers":[{"name":"aiao","email":"hero63418@gmail.com"}],"readme":"# @aiao/rxdb-plugin-search-angular\n\n[`@aiao/rxdb-plugin-search`](../rxdb-plugin-search) 的 Angular 集成层。提供 `useSearch()`，将搜索插件的 `SearchHandle` 适配为 Angular signal 消费接口。\n\n## 安装\n\n```bash\npnpm add @aiao/rxdb @aiao/rxdb-plugin-search @aiao/rxdb-plugin-search-angular @angular/core rxjs\n```\n\n## 用法\n\n```typescript\nimport { Component, input } from '@angular/core';\nimport type { RxDB } from '@aiao/rxdb';\nimport { rxDBPluginSearch } from '@aiao/rxdb-plugin-search';\nimport { useSearch, type UseSearchReturn } from '@aiao/rxdb-plugin-search-angular';\n\nexport async function startSearch(database: RxDB): Promise<void> {\n  database.use(rxDBPluginSearch, { debounce: 200, pageSize: 20 });\n  await database.connect('sqlite-wasm');\n  await database.searchPlugin.ready;\n}\n\n@Component({\n  selector: 'app-search-page',\n  template: `\n    <label>\n      Search\n      <input [value]=\"search.query()\" (input)=\"search.query.set($any($event.target).value)\" />\n    </label>\n    @if (search.error(); as error) {\n      <p role=\"alert\">{{ error.message }}</p>\n    }\n    <ul>\n      @for (result of search.results(); track result.collection + ':' + result.id) {\n        <li>{{ result.snippet }}</li>\n      }\n    </ul>\n    @if (search.hasMore()) {\n      <button (click)=\"search.loadMore()\" type=\"button\">Load more</button>\n    }\n    <button (click)=\"search.retry()\" type=\"button\">Retry</button>\n    <button (click)=\"search.clear()\" type=\"button\">Clear</button>\n  `\n})\nexport class SearchPage {\n  readonly database = input.required<RxDB>();\n  readonly search: UseSearchReturn = useSearch(this.database, {\n    collections: ['Article'],\n    initialQuery: ''\n  });\n}\n```\n\n`startSearch()` 必须在创建 `SearchPage` 前完成。`connect()` 会触发插件安装；\n`database.searchPlugin.ready` 等待 FTS 安装与回填，未安装、安装失败或销毁后都会 reject。\n\n`useSearch` 返回 `UseSearchReturn`。绑定层持有底层 `SearchHandle`，组件销毁或输入重建时自动\n`destroy()`；调用方不应再次销毁 handle。\n\n### Signal 入参与重建契约（三端一致）\n\n`source` 与 `options` 都接受普通值或 `Signal`。解析值变化时旧 `SearchHandle` 被销毁、\n新 handle 以**用户当前 query** 播种：\n\n- `initialQuery` **只在首次创建时**作种子，此后不再参与重建判据，\n  因此传 `initialQuery: query()` 不会导致每次击键重建 handle；\n- `options` 按语义（`collections` / `debounce` / `pageSize` / `snippetLength`）而非引用比较，\n  每次重算新建的字面量不触发重建；\n- 重建后 `loadMore` / `clear` / `retry` 一律路由到最新 handle，旧 handle 的晚到 emission 不再写入 signal；\n- 旧 handle 由重建路径自己 `destroy()`，不会堆积到 `DestroyRef` 上。\n\n判据由 core 的 `searchOptionsEqual` 三端共用，重建时机不会因框架而异。\n\n三框架同功能对称：React 用 `useSearch`（[`@aiao/rxdb-plugin-search-react`](../rxdb-plugin-search-react)），Vue 用 `useSearch`（[`@aiao/rxdb-plugin-search-vue`](../rxdb-plugin-search-vue)）。\n\n## 文档\n\n- 仓库主页：[https://github.com/aiao-io/rxdb](https://github.com/aiao-io/rxdb)\n- 框架集成与搜索指南见项目文档站\n\n## License\n\n[MIT](https://github.com/aiao-io/rxdb/blob/main/LICENSE)\n","readmeFilename":"README.md","homepage":"https://github.com/aiao-io/rxdb#readme","repository":{"type":"git","url":"git+https://github.com/aiao-io/rxdb.git","directory":"packages/rxdb-plugin-search-angular"},"bugs":{"url":"https://github.com/aiao-io/rxdb/issues"}}