@23blocks/block-search 0.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.
Files changed (42) hide show
  1. package/README.md +7 -0
  2. package/dist/index.d.ts +5 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +6 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/block-search.d.ts +2 -0
  7. package/dist/lib/block-search.d.ts.map +1 -0
  8. package/dist/lib/block-search.js +5 -0
  9. package/dist/lib/block-search.js.map +1 -0
  10. package/dist/lib/mappers/index.d.ts +3 -0
  11. package/dist/lib/mappers/index.d.ts.map +1 -0
  12. package/dist/lib/mappers/index.js +4 -0
  13. package/dist/lib/mappers/index.js.map +1 -0
  14. package/dist/lib/mappers/search.mapper.d.ts +23 -0
  15. package/dist/lib/mappers/search.mapper.d.ts.map +1 -0
  16. package/dist/lib/mappers/search.mapper.js +174 -0
  17. package/dist/lib/mappers/search.mapper.js.map +1 -0
  18. package/dist/lib/mappers/utils.d.ts +21 -0
  19. package/dist/lib/mappers/utils.d.ts.map +1 -0
  20. package/dist/lib/mappers/utils.js +57 -0
  21. package/dist/lib/mappers/utils.js.map +1 -0
  22. package/dist/lib/search.block.d.ts +78 -0
  23. package/dist/lib/search.block.d.ts.map +1 -0
  24. package/dist/lib/search.block.js +62 -0
  25. package/dist/lib/search.block.js.map +1 -0
  26. package/dist/lib/services/index.d.ts +2 -0
  27. package/dist/lib/services/index.d.ts.map +1 -0
  28. package/dist/lib/services/index.js +3 -0
  29. package/dist/lib/services/index.js.map +1 -0
  30. package/dist/lib/services/search.service.d.ts +79 -0
  31. package/dist/lib/services/search.service.d.ts.map +1 -0
  32. package/dist/lib/services/search.service.js +209 -0
  33. package/dist/lib/services/search.service.js.map +1 -0
  34. package/dist/lib/types/index.d.ts +2 -0
  35. package/dist/lib/types/index.d.ts.map +1 -0
  36. package/dist/lib/types/index.js +3 -0
  37. package/dist/lib/types/index.js.map +1 -0
  38. package/dist/lib/types/search.d.ts +152 -0
  39. package/dist/lib/types/search.d.ts.map +1 -0
  40. package/dist/lib/types/search.js +5 -0
  41. package/dist/lib/types/search.js.map +1 -0
  42. package/package.json +63 -0
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # block-search
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build block-search` to build the library.
@@ -0,0 +1,5 @@
1
+ export { createSearchBlock, searchBlockMetadata, type SearchBlock, type SearchBlockConfig, } from './lib/search.block.js';
2
+ export type { SearchResult, SearchQuery, LastQuery, FavoriteEntity, EntityType, SearchRequest, SearchResponse, AddFavoriteRequest, } from './lib/types/index.js';
3
+ export type { SearchService, SearchHistoryService, FavoritesService, } from './lib/services/index.js';
4
+ export { searchResultMapper, searchQueryMapper, lastQueryMapper, favoriteEntityMapper, entityTypeMapper, } from './lib/mappers/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // Block factory and config
2
+ export { createSearchBlock, searchBlockMetadata } from './lib/search.block.js';
3
+ // Mappers (for advanced use cases)
4
+ export { searchResultMapper, searchQueryMapper, lastQueryMapper, favoriteEntityMapper, entityTypeMapper } from './lib/mappers/index.js';
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Block factory and config\nexport {\n createSearchBlock,\n searchBlockMetadata,\n type SearchBlock,\n type SearchBlockConfig,\n} from './lib/search.block.js';\n\n// Types\nexport type {\n SearchResult,\n SearchQuery,\n LastQuery,\n FavoriteEntity,\n EntityType,\n SearchRequest,\n SearchResponse,\n AddFavoriteRequest,\n} from './lib/types/index.js';\n\n// Services\nexport type {\n SearchService,\n SearchHistoryService,\n FavoritesService,\n} from './lib/services/index.js';\n\n// Mappers (for advanced use cases)\nexport {\n searchResultMapper,\n searchQueryMapper,\n lastQueryMapper,\n favoriteEntityMapper,\n entityTypeMapper,\n} from './lib/mappers/index.js';\n"],"names":["createSearchBlock","searchBlockMetadata","searchResultMapper","searchQueryMapper","lastQueryMapper","favoriteEntityMapper","entityTypeMapper"],"rangeMappings":";;;","mappings":"AAAA,2BAA2B;AAC3B,SACEA,iBAAiB,EACjBC,mBAAmB,QAGd,wBAAwB;AAqB/B,mCAAmC;AACnC,SACEC,kBAAkB,EAClBC,iBAAiB,EACjBC,eAAe,EACfC,oBAAoB,EACpBC,gBAAgB,QACX,yBAAyB"}
@@ -0,0 +1,2 @@
1
+ export declare function blockSearch(): string;
2
+ //# sourceMappingURL=block-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-search.d.ts","sourceRoot":"","sources":["../../src/lib/block-search.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
@@ -0,0 +1,5 @@
1
+ export function blockSearch() {
2
+ return 'block-search';
3
+ }
4
+
5
+ //# sourceMappingURL=block-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/block-search.ts"],"sourcesContent":["export function blockSearch(): string {\n return 'block-search';\n}\n"],"names":["blockSearch"],"rangeMappings":";;","mappings":"AAAA,OAAO,SAASA;IACd,OAAO;AACT"}
@@ -0,0 +1,3 @@
1
+ export { searchResultMapper, searchQueryMapper, lastQueryMapper, favoriteEntityMapper, entityTypeMapper, } from './search.mapper.js';
2
+ export { parseString, parseDate, parseBoolean, parseNumber, parseStringArray } from './utils.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/mappers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { searchResultMapper, searchQueryMapper, lastQueryMapper, favoriteEntityMapper, entityTypeMapper } from './search.mapper.js';
2
+ export { parseString, parseDate, parseBoolean, parseNumber, parseStringArray } from './utils.js';
3
+
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/index.ts"],"sourcesContent":["export {\n searchResultMapper,\n searchQueryMapper,\n lastQueryMapper,\n favoriteEntityMapper,\n entityTypeMapper,\n} from './search.mapper.js';\n\nexport { parseString, parseDate, parseBoolean, parseNumber, parseStringArray } from './utils.js';\n"],"names":["searchResultMapper","searchQueryMapper","lastQueryMapper","favoriteEntityMapper","entityTypeMapper","parseString","parseDate","parseBoolean","parseNumber","parseStringArray"],"rangeMappings":";","mappings":"AAAA,SACEA,kBAAkB,EAClBC,iBAAiB,EACjBC,eAAe,EACfC,oBAAoB,EACpBC,gBAAgB,QACX,qBAAqB;AAE5B,SAASC,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,EAAEC,gBAAgB,QAAQ,aAAa"}
@@ -0,0 +1,23 @@
1
+ import type { ResourceMapper } from '@23blocks/jsonapi-codec';
2
+ import type { SearchResult, SearchQuery, LastQuery, FavoriteEntity, EntityType } from '../types/index.js';
3
+ /**
4
+ * Mapper for SearchResult resources
5
+ */
6
+ export declare const searchResultMapper: ResourceMapper<SearchResult>;
7
+ /**
8
+ * Mapper for SearchQuery resources
9
+ */
10
+ export declare const searchQueryMapper: ResourceMapper<SearchQuery>;
11
+ /**
12
+ * Mapper for LastQuery resources
13
+ */
14
+ export declare const lastQueryMapper: ResourceMapper<LastQuery>;
15
+ /**
16
+ * Mapper for FavoriteEntity resources
17
+ */
18
+ export declare const favoriteEntityMapper: ResourceMapper<FavoriteEntity>;
19
+ /**
20
+ * Mapper for EntityType resources
21
+ */
22
+ export declare const entityTypeMapper: ResourceMapper<EntityType>;
23
+ //# sourceMappingURL=search.mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.mapper.d.ts","sourceRoot":"","sources":["../../../src/lib/mappers/search.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAgC,MAAM,yBAAyB,CAAC;AAE5F,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACX,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CA8B3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,WAAW,CA2CzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,SAAS,CA2CrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,cAAc,CA4B/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,UAAU,CAYvD,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { parseString, parseDate, parseNumber, parseBoolean, parseStringArray } from './utils.js';
2
+ /**
3
+ * Mapper for SearchResult resources
4
+ */ export const searchResultMapper = {
5
+ type: 'SearchResult',
6
+ map (resource, _included) {
7
+ var _resource_attributes;
8
+ const attrs = (_resource_attributes = resource.attributes) != null ? _resource_attributes : {};
9
+ var _parseString, _parseDate, _parseDate1, _attrs_entity_unique_id, _attrs_entity_type, _parseString1;
10
+ return {
11
+ id: resource.id,
12
+ uniqueId: (_parseString = parseString(attrs.unique_id)) != null ? _parseString : resource.id,
13
+ createdAt: (_parseDate = parseDate(attrs.created_at)) != null ? _parseDate : new Date(),
14
+ updatedAt: (_parseDate1 = parseDate(attrs.updated_at)) != null ? _parseDate1 : new Date(),
15
+ partition: parseString(attrs.partition),
16
+ key: parseString(attrs.key),
17
+ weight: parseNumber(attrs.weight),
18
+ relevance: parseNumber(attrs.relevance),
19
+ uri: parseString(attrs.uri),
20
+ origin: parseString(attrs.origin),
21
+ entityUniqueId: String((_attrs_entity_unique_id = attrs.entity_unique_id) != null ? _attrs_entity_unique_id : ''),
22
+ entityAlias: parseString(attrs.entity_alias),
23
+ entityDescription: parseString(attrs.entity_description),
24
+ entityAvatarUrl: parseString(attrs.entity_avatar_url),
25
+ entityType: String((_attrs_entity_type = attrs.entity_type) != null ? _attrs_entity_type : ''),
26
+ entitySource: parseString(attrs.entity_source),
27
+ entityUrl: parseString(attrs.entity_url),
28
+ counter: parseNumber(attrs.counter),
29
+ favorite: parseBoolean(attrs.favorite),
30
+ status: (_parseString1 = parseString(attrs.status)) != null ? _parseString1 : 'active',
31
+ payload: attrs.payload
32
+ };
33
+ }
34
+ };
35
+ /**
36
+ * Mapper for SearchQuery resources
37
+ */ export const searchQueryMapper = {
38
+ type: 'Query',
39
+ map (resource, _included) {
40
+ var _resource_attributes;
41
+ const attrs = (_resource_attributes = resource.attributes) != null ? _resource_attributes : {};
42
+ var _parseString, _parseDate, _parseDate1, _attrs_query;
43
+ return {
44
+ id: resource.id,
45
+ uniqueId: (_parseString = parseString(attrs.unique_id)) != null ? _parseString : resource.id,
46
+ createdAt: (_parseDate = parseDate(attrs.created_at)) != null ? _parseDate : new Date(),
47
+ updatedAt: (_parseDate1 = parseDate(attrs.updated_at)) != null ? _parseDate1 : new Date(),
48
+ partition: parseString(attrs.partition),
49
+ key: parseString(attrs.key),
50
+ query: String((_attrs_query = attrs.query) != null ? _attrs_query : ''),
51
+ include: parseStringArray(attrs.include),
52
+ exclude: parseStringArray(attrs.exclude),
53
+ payload: attrs.payload,
54
+ userUniqueId: parseString(attrs.user_unique_id),
55
+ userProviderName: parseString(attrs.user_provider_name),
56
+ userName: parseString(attrs.user_name),
57
+ userEmail: parseString(attrs.user_email),
58
+ userRole: parseString(attrs.user_role),
59
+ userRoleUniqueId: parseString(attrs.user_role_unique_id),
60
+ userRoleName: parseString(attrs.user_role_name),
61
+ queryString: parseString(attrs.query_string),
62
+ userAgent: parseString(attrs.user_agent),
63
+ url: parseString(attrs.url),
64
+ path: parseString(attrs.path),
65
+ ipaddress: parseString(attrs.ipaddress),
66
+ origin: parseString(attrs.origin),
67
+ source: parseString(attrs.source),
68
+ submittedAt: parseDate(attrs.submitted_at),
69
+ device: parseString(attrs.device),
70
+ browser: parseString(attrs.browser),
71
+ hash: parseString(attrs.hash),
72
+ elapsedTime: attrs.elapsed_time != null ? parseNumber(attrs.elapsed_time) : null,
73
+ startedAt: parseDate(attrs.started_at),
74
+ endedAt: parseDate(attrs.ended_at),
75
+ totalRecords: parseNumber(attrs.total_records),
76
+ totalRecordsReturned: parseNumber(attrs.total_records_returned),
77
+ queryOrigin: parseString(attrs.query_origin)
78
+ };
79
+ }
80
+ };
81
+ /**
82
+ * Mapper for LastQuery resources
83
+ */ export const lastQueryMapper = {
84
+ type: 'LastQuery',
85
+ map (resource, _included) {
86
+ var _resource_attributes;
87
+ const attrs = (_resource_attributes = resource.attributes) != null ? _resource_attributes : {};
88
+ var _parseString, _parseDate, _parseDate1, _attrs_query;
89
+ return {
90
+ id: resource.id,
91
+ uniqueId: (_parseString = parseString(attrs.unique_id)) != null ? _parseString : resource.id,
92
+ createdAt: (_parseDate = parseDate(attrs.created_at)) != null ? _parseDate : new Date(),
93
+ updatedAt: (_parseDate1 = parseDate(attrs.updated_at)) != null ? _parseDate1 : new Date(),
94
+ partition: parseString(attrs.partition),
95
+ key: parseString(attrs.key),
96
+ query: String((_attrs_query = attrs.query) != null ? _attrs_query : ''),
97
+ include: parseStringArray(attrs.include),
98
+ exclude: parseStringArray(attrs.exclude),
99
+ payload: attrs.payload,
100
+ userUniqueId: parseString(attrs.user_unique_id),
101
+ userProviderName: parseString(attrs.user_provider_name),
102
+ userName: parseString(attrs.user_name),
103
+ userEmail: parseString(attrs.user_email),
104
+ userRole: parseString(attrs.user_role),
105
+ userRoleUniqueId: parseString(attrs.user_role_unique_id),
106
+ userRoleName: parseString(attrs.user_role_name),
107
+ queryString: parseString(attrs.query_string),
108
+ userAgent: parseString(attrs.user_agent),
109
+ url: parseString(attrs.url),
110
+ path: parseString(attrs.path),
111
+ ipaddress: parseString(attrs.ipaddress),
112
+ origin: parseString(attrs.origin),
113
+ source: parseString(attrs.source),
114
+ submittedAt: parseDate(attrs.submitted_at),
115
+ device: parseString(attrs.device),
116
+ browser: parseString(attrs.browser),
117
+ hash: parseString(attrs.hash),
118
+ elapsedTime: attrs.elapsed_time != null ? parseNumber(attrs.elapsed_time) : null,
119
+ startedAt: parseDate(attrs.started_at),
120
+ endedAt: parseDate(attrs.ended_at),
121
+ totalRecords: parseNumber(attrs.total_records),
122
+ totalRecordsReturned: parseNumber(attrs.total_records_returned),
123
+ queryOrigin: parseString(attrs.query_origin)
124
+ };
125
+ }
126
+ };
127
+ /**
128
+ * Mapper for FavoriteEntity resources
129
+ */ export const favoriteEntityMapper = {
130
+ type: 'FavoriteEntity',
131
+ map (resource, _included) {
132
+ var _resource_attributes;
133
+ const attrs = (_resource_attributes = resource.attributes) != null ? _resource_attributes : {};
134
+ var _parseString, _parseDate, _parseDate1, _attrs_entity_unique_id, _attrs_entity_type, _parseString1;
135
+ return {
136
+ id: resource.id,
137
+ uniqueId: (_parseString = parseString(attrs.unique_id)) != null ? _parseString : resource.id,
138
+ createdAt: (_parseDate = parseDate(attrs.created_at)) != null ? _parseDate : new Date(),
139
+ updatedAt: (_parseDate1 = parseDate(attrs.updated_at)) != null ? _parseDate1 : new Date(),
140
+ partition: parseString(attrs.partition),
141
+ key: parseString(attrs.key),
142
+ weight: parseNumber(attrs.weight),
143
+ relevance: parseNumber(attrs.relevance),
144
+ uri: parseString(attrs.uri),
145
+ origin: parseString(attrs.origin),
146
+ entityUniqueId: String((_attrs_entity_unique_id = attrs.entity_unique_id) != null ? _attrs_entity_unique_id : ''),
147
+ entityType: String((_attrs_entity_type = attrs.entity_type) != null ? _attrs_entity_type : ''),
148
+ entityAlias: parseString(attrs.entity_alias),
149
+ entitySource: parseString(attrs.entity_source),
150
+ entityUrl: parseString(attrs.entity_url),
151
+ entityAvatarUrl: parseString(attrs.entity_avatar_url),
152
+ counter: parseNumber(attrs.counter),
153
+ favorite: parseBoolean(attrs.favorite),
154
+ status: (_parseString1 = parseString(attrs.status)) != null ? _parseString1 : 'active'
155
+ };
156
+ }
157
+ };
158
+ /**
159
+ * Mapper for EntityType resources
160
+ */ export const entityTypeMapper = {
161
+ type: 'EntityType',
162
+ map (resource, _included) {
163
+ var _resource_attributes;
164
+ const attrs = (_resource_attributes = resource.attributes) != null ? _resource_attributes : {};
165
+ var _attrs_entity_type;
166
+ return {
167
+ id: resource.id,
168
+ entityType: String((_attrs_entity_type = attrs.entity_type) != null ? _attrs_entity_type : ''),
169
+ entitySource: parseString(attrs.entity_source)
170
+ };
171
+ }
172
+ };
173
+
174
+ //# sourceMappingURL=search.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/search.mapper.ts"],"sourcesContent":["import type { ResourceMapper, IncludedMap, JsonApiResource } from '@23blocks/jsonapi-codec';\nimport type { EntityStatus } from '@23blocks/contracts';\nimport type {\n SearchResult,\n SearchQuery,\n LastQuery,\n FavoriteEntity,\n EntityType,\n} from '../types/index.js';\nimport { parseString, parseDate, parseNumber, parseBoolean, parseStringArray } from './utils.js';\n\n/**\n * Mapper for SearchResult resources\n */\nexport const searchResultMapper: ResourceMapper<SearchResult> = {\n type: 'SearchResult',\n\n map(resource: JsonApiResource, _included: IncludedMap): SearchResult {\n const attrs = resource.attributes ?? {};\n\n return {\n id: resource.id,\n uniqueId: parseString(attrs.unique_id) ?? resource.id,\n createdAt: parseDate(attrs.created_at) ?? new Date(),\n updatedAt: parseDate(attrs.updated_at) ?? new Date(),\n partition: parseString(attrs.partition),\n key: parseString(attrs.key),\n weight: parseNumber(attrs.weight),\n relevance: parseNumber(attrs.relevance),\n uri: parseString(attrs.uri),\n origin: parseString(attrs.origin),\n entityUniqueId: String(attrs.entity_unique_id ?? ''),\n entityAlias: parseString(attrs.entity_alias),\n entityDescription: parseString(attrs.entity_description),\n entityAvatarUrl: parseString(attrs.entity_avatar_url),\n entityType: String(attrs.entity_type ?? ''),\n entitySource: parseString(attrs.entity_source),\n entityUrl: parseString(attrs.entity_url),\n counter: parseNumber(attrs.counter),\n favorite: parseBoolean(attrs.favorite),\n status: (parseString(attrs.status) ?? 'active') as EntityStatus,\n payload: attrs.payload as Record<string, unknown> | null,\n };\n },\n};\n\n/**\n * Mapper for SearchQuery resources\n */\nexport const searchQueryMapper: ResourceMapper<SearchQuery> = {\n type: 'Query',\n\n map(resource: JsonApiResource, _included: IncludedMap): SearchQuery {\n const attrs = resource.attributes ?? {};\n\n return {\n id: resource.id,\n uniqueId: parseString(attrs.unique_id) ?? resource.id,\n createdAt: parseDate(attrs.created_at) ?? new Date(),\n updatedAt: parseDate(attrs.updated_at) ?? new Date(),\n partition: parseString(attrs.partition),\n key: parseString(attrs.key),\n query: String(attrs.query ?? ''),\n include: parseStringArray(attrs.include),\n exclude: parseStringArray(attrs.exclude),\n payload: attrs.payload as Record<string, unknown> | null,\n userUniqueId: parseString(attrs.user_unique_id),\n userProviderName: parseString(attrs.user_provider_name),\n userName: parseString(attrs.user_name),\n userEmail: parseString(attrs.user_email),\n userRole: parseString(attrs.user_role),\n userRoleUniqueId: parseString(attrs.user_role_unique_id),\n userRoleName: parseString(attrs.user_role_name),\n queryString: parseString(attrs.query_string),\n userAgent: parseString(attrs.user_agent),\n url: parseString(attrs.url),\n path: parseString(attrs.path),\n ipaddress: parseString(attrs.ipaddress),\n origin: parseString(attrs.origin),\n source: parseString(attrs.source),\n submittedAt: parseDate(attrs.submitted_at),\n device: parseString(attrs.device),\n browser: parseString(attrs.browser),\n hash: parseString(attrs.hash),\n elapsedTime: attrs.elapsed_time != null ? parseNumber(attrs.elapsed_time) : null,\n startedAt: parseDate(attrs.started_at),\n endedAt: parseDate(attrs.ended_at),\n totalRecords: parseNumber(attrs.total_records),\n totalRecordsReturned: parseNumber(attrs.total_records_returned),\n queryOrigin: parseString(attrs.query_origin),\n };\n },\n};\n\n/**\n * Mapper for LastQuery resources\n */\nexport const lastQueryMapper: ResourceMapper<LastQuery> = {\n type: 'LastQuery',\n\n map(resource: JsonApiResource, _included: IncludedMap): LastQuery {\n const attrs = resource.attributes ?? {};\n\n return {\n id: resource.id,\n uniqueId: parseString(attrs.unique_id) ?? resource.id,\n createdAt: parseDate(attrs.created_at) ?? new Date(),\n updatedAt: parseDate(attrs.updated_at) ?? new Date(),\n partition: parseString(attrs.partition),\n key: parseString(attrs.key),\n query: String(attrs.query ?? ''),\n include: parseStringArray(attrs.include),\n exclude: parseStringArray(attrs.exclude),\n payload: attrs.payload as Record<string, unknown> | null,\n userUniqueId: parseString(attrs.user_unique_id),\n userProviderName: parseString(attrs.user_provider_name),\n userName: parseString(attrs.user_name),\n userEmail: parseString(attrs.user_email),\n userRole: parseString(attrs.user_role),\n userRoleUniqueId: parseString(attrs.user_role_unique_id),\n userRoleName: parseString(attrs.user_role_name),\n queryString: parseString(attrs.query_string),\n userAgent: parseString(attrs.user_agent),\n url: parseString(attrs.url),\n path: parseString(attrs.path),\n ipaddress: parseString(attrs.ipaddress),\n origin: parseString(attrs.origin),\n source: parseString(attrs.source),\n submittedAt: parseDate(attrs.submitted_at),\n device: parseString(attrs.device),\n browser: parseString(attrs.browser),\n hash: parseString(attrs.hash),\n elapsedTime: attrs.elapsed_time != null ? parseNumber(attrs.elapsed_time) : null,\n startedAt: parseDate(attrs.started_at),\n endedAt: parseDate(attrs.ended_at),\n totalRecords: parseNumber(attrs.total_records),\n totalRecordsReturned: parseNumber(attrs.total_records_returned),\n queryOrigin: parseString(attrs.query_origin),\n };\n },\n};\n\n/**\n * Mapper for FavoriteEntity resources\n */\nexport const favoriteEntityMapper: ResourceMapper<FavoriteEntity> = {\n type: 'FavoriteEntity',\n\n map(resource: JsonApiResource, _included: IncludedMap): FavoriteEntity {\n const attrs = resource.attributes ?? {};\n\n return {\n id: resource.id,\n uniqueId: parseString(attrs.unique_id) ?? resource.id,\n createdAt: parseDate(attrs.created_at) ?? new Date(),\n updatedAt: parseDate(attrs.updated_at) ?? new Date(),\n partition: parseString(attrs.partition),\n key: parseString(attrs.key),\n weight: parseNumber(attrs.weight),\n relevance: parseNumber(attrs.relevance),\n uri: parseString(attrs.uri),\n origin: parseString(attrs.origin),\n entityUniqueId: String(attrs.entity_unique_id ?? ''),\n entityType: String(attrs.entity_type ?? ''),\n entityAlias: parseString(attrs.entity_alias),\n entitySource: parseString(attrs.entity_source),\n entityUrl: parseString(attrs.entity_url),\n entityAvatarUrl: parseString(attrs.entity_avatar_url),\n counter: parseNumber(attrs.counter),\n favorite: parseBoolean(attrs.favorite),\n status: (parseString(attrs.status) ?? 'active') as EntityStatus,\n };\n },\n};\n\n/**\n * Mapper for EntityType resources\n */\nexport const entityTypeMapper: ResourceMapper<EntityType> = {\n type: 'EntityType',\n\n map(resource: JsonApiResource, _included: IncludedMap): EntityType {\n const attrs = resource.attributes ?? {};\n\n return {\n id: resource.id,\n entityType: String(attrs.entity_type ?? ''),\n entitySource: parseString(attrs.entity_source),\n };\n },\n};\n"],"names":["parseString","parseDate","parseNumber","parseBoolean","parseStringArray","searchResultMapper","type","map","resource","_included","attrs","attributes","id","uniqueId","unique_id","createdAt","created_at","Date","updatedAt","updated_at","partition","key","weight","relevance","uri","origin","entityUniqueId","String","entity_unique_id","entityAlias","entity_alias","entityDescription","entity_description","entityAvatarUrl","entity_avatar_url","entityType","entity_type","entitySource","entity_source","entityUrl","entity_url","counter","favorite","status","payload","searchQueryMapper","query","include","exclude","userUniqueId","user_unique_id","userProviderName","user_provider_name","userName","user_name","userEmail","user_email","userRole","user_role","userRoleUniqueId","user_role_unique_id","userRoleName","user_role_name","queryString","query_string","userAgent","user_agent","url","path","ipaddress","source","submittedAt","submitted_at","device","browser","hash","elapsedTime","elapsed_time","startedAt","started_at","endedAt","ended_at","totalRecords","total_records","totalRecordsReturned","total_records_returned","queryOrigin","query_origin","lastQueryMapper","favoriteEntityMapper","entityTypeMapper"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AASA,SAASA,WAAW,EAAEC,SAAS,EAAEC,WAAW,EAAEC,YAAY,EAAEC,gBAAgB,QAAQ,aAAa;AAEjG;;CAEC,GACD,OAAO,MAAMC,qBAAmD;IAC9DC,MAAM;IAENC,KAAIC,QAAyB,EAAEC,SAAsB;YACrCD;QAAd,MAAME,QAAQF,CAAAA,uBAAAA,SAASG,UAAU,YAAnBH,uBAAuB,CAAC;YAI1BR,cACCC,YACAA,aAOYS,yBAIJA,oBAKVV;QApBX,OAAO;YACLY,IAAIJ,SAASI,EAAE;YACfC,UAAUb,CAAAA,eAAAA,YAAYU,MAAMI,SAAS,aAA3Bd,eAAgCQ,SAASI,EAAE;YACrDG,WAAWd,CAAAA,aAAAA,UAAUS,MAAMM,UAAU,aAA1Bf,aAA+B,IAAIgB;YAC9CC,WAAWjB,CAAAA,cAAAA,UAAUS,MAAMS,UAAU,aAA1BlB,cAA+B,IAAIgB;YAC9CG,WAAWpB,YAAYU,MAAMU,SAAS;YACtCC,KAAKrB,YAAYU,MAAMW,GAAG;YAC1BC,QAAQpB,YAAYQ,MAAMY,MAAM;YAChCC,WAAWrB,YAAYQ,MAAMa,SAAS;YACtCC,KAAKxB,YAAYU,MAAMc,GAAG;YAC1BC,QAAQzB,YAAYU,MAAMe,MAAM;YAChCC,gBAAgBC,OAAOjB,CAAAA,0BAAAA,MAAMkB,gBAAgB,YAAtBlB,0BAA0B;YACjDmB,aAAa7B,YAAYU,MAAMoB,YAAY;YAC3CC,mBAAmB/B,YAAYU,MAAMsB,kBAAkB;YACvDC,iBAAiBjC,YAAYU,MAAMwB,iBAAiB;YACpDC,YAAYR,OAAOjB,CAAAA,qBAAAA,MAAM0B,WAAW,YAAjB1B,qBAAqB;YACxC2B,cAAcrC,YAAYU,MAAM4B,aAAa;YAC7CC,WAAWvC,YAAYU,MAAM8B,UAAU;YACvCC,SAASvC,YAAYQ,MAAM+B,OAAO;YAClCC,UAAUvC,aAAaO,MAAMgC,QAAQ;YACrCC,QAAS3C,CAAAA,gBAAAA,YAAYU,MAAMiC,MAAM,aAAxB3C,gBAA6B;YACtC4C,SAASlC,MAAMkC,OAAO;QACxB;IACF;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMC,oBAAiD;IAC5DvC,MAAM;IAENC,KAAIC,QAAyB,EAAEC,SAAsB;YACrCD;QAAd,MAAME,QAAQF,CAAAA,uBAAAA,SAASG,UAAU,YAAnBH,uBAAuB,CAAC;YAI1BR,cACCC,YACAA,aAGGS;QAPhB,OAAO;YACLE,IAAIJ,SAASI,EAAE;YACfC,UAAUb,CAAAA,eAAAA,YAAYU,MAAMI,SAAS,aAA3Bd,eAAgCQ,SAASI,EAAE;YACrDG,WAAWd,CAAAA,aAAAA,UAAUS,MAAMM,UAAU,aAA1Bf,aAA+B,IAAIgB;YAC9CC,WAAWjB,CAAAA,cAAAA,UAAUS,MAAMS,UAAU,aAA1BlB,cAA+B,IAAIgB;YAC9CG,WAAWpB,YAAYU,MAAMU,SAAS;YACtCC,KAAKrB,YAAYU,MAAMW,GAAG;YAC1ByB,OAAOnB,OAAOjB,CAAAA,eAAAA,MAAMoC,KAAK,YAAXpC,eAAe;YAC7BqC,SAAS3C,iBAAiBM,MAAMqC,OAAO;YACvCC,SAAS5C,iBAAiBM,MAAMsC,OAAO;YACvCJ,SAASlC,MAAMkC,OAAO;YACtBK,cAAcjD,YAAYU,MAAMwC,cAAc;YAC9CC,kBAAkBnD,YAAYU,MAAM0C,kBAAkB;YACtDC,UAAUrD,YAAYU,MAAM4C,SAAS;YACrCC,WAAWvD,YAAYU,MAAM8C,UAAU;YACvCC,UAAUzD,YAAYU,MAAMgD,SAAS;YACrCC,kBAAkB3D,YAAYU,MAAMkD,mBAAmB;YACvDC,cAAc7D,YAAYU,MAAMoD,cAAc;YAC9CC,aAAa/D,YAAYU,MAAMsD,YAAY;YAC3CC,WAAWjE,YAAYU,MAAMwD,UAAU;YACvCC,KAAKnE,YAAYU,MAAMyD,GAAG;YAC1BC,MAAMpE,YAAYU,MAAM0D,IAAI;YAC5BC,WAAWrE,YAAYU,MAAM2D,SAAS;YACtC5C,QAAQzB,YAAYU,MAAMe,MAAM;YAChC6C,QAAQtE,YAAYU,MAAM4D,MAAM;YAChCC,aAAatE,UAAUS,MAAM8D,YAAY;YACzCC,QAAQzE,YAAYU,MAAM+D,MAAM;YAChCC,SAAS1E,YAAYU,MAAMgE,OAAO;YAClCC,MAAM3E,YAAYU,MAAMiE,IAAI;YAC5BC,aAAalE,MAAMmE,YAAY,IAAI,OAAO3E,YAAYQ,MAAMmE,YAAY,IAAI;YAC5EC,WAAW7E,UAAUS,MAAMqE,UAAU;YACrCC,SAAS/E,UAAUS,MAAMuE,QAAQ;YACjCC,cAAchF,YAAYQ,MAAMyE,aAAa;YAC7CC,sBAAsBlF,YAAYQ,MAAM2E,sBAAsB;YAC9DC,aAAatF,YAAYU,MAAM6E,YAAY;QAC7C;IACF;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMC,kBAA6C;IACxDlF,MAAM;IAENC,KAAIC,QAAyB,EAAEC,SAAsB;YACrCD;QAAd,MAAME,QAAQF,CAAAA,uBAAAA,SAASG,UAAU,YAAnBH,uBAAuB,CAAC;YAI1BR,cACCC,YACAA,aAGGS;QAPhB,OAAO;YACLE,IAAIJ,SAASI,EAAE;YACfC,UAAUb,CAAAA,eAAAA,YAAYU,MAAMI,SAAS,aAA3Bd,eAAgCQ,SAASI,EAAE;YACrDG,WAAWd,CAAAA,aAAAA,UAAUS,MAAMM,UAAU,aAA1Bf,aAA+B,IAAIgB;YAC9CC,WAAWjB,CAAAA,cAAAA,UAAUS,MAAMS,UAAU,aAA1BlB,cAA+B,IAAIgB;YAC9CG,WAAWpB,YAAYU,MAAMU,SAAS;YACtCC,KAAKrB,YAAYU,MAAMW,GAAG;YAC1ByB,OAAOnB,OAAOjB,CAAAA,eAAAA,MAAMoC,KAAK,YAAXpC,eAAe;YAC7BqC,SAAS3C,iBAAiBM,MAAMqC,OAAO;YACvCC,SAAS5C,iBAAiBM,MAAMsC,OAAO;YACvCJ,SAASlC,MAAMkC,OAAO;YACtBK,cAAcjD,YAAYU,MAAMwC,cAAc;YAC9CC,kBAAkBnD,YAAYU,MAAM0C,kBAAkB;YACtDC,UAAUrD,YAAYU,MAAM4C,SAAS;YACrCC,WAAWvD,YAAYU,MAAM8C,UAAU;YACvCC,UAAUzD,YAAYU,MAAMgD,SAAS;YACrCC,kBAAkB3D,YAAYU,MAAMkD,mBAAmB;YACvDC,cAAc7D,YAAYU,MAAMoD,cAAc;YAC9CC,aAAa/D,YAAYU,MAAMsD,YAAY;YAC3CC,WAAWjE,YAAYU,MAAMwD,UAAU;YACvCC,KAAKnE,YAAYU,MAAMyD,GAAG;YAC1BC,MAAMpE,YAAYU,MAAM0D,IAAI;YAC5BC,WAAWrE,YAAYU,MAAM2D,SAAS;YACtC5C,QAAQzB,YAAYU,MAAMe,MAAM;YAChC6C,QAAQtE,YAAYU,MAAM4D,MAAM;YAChCC,aAAatE,UAAUS,MAAM8D,YAAY;YACzCC,QAAQzE,YAAYU,MAAM+D,MAAM;YAChCC,SAAS1E,YAAYU,MAAMgE,OAAO;YAClCC,MAAM3E,YAAYU,MAAMiE,IAAI;YAC5BC,aAAalE,MAAMmE,YAAY,IAAI,OAAO3E,YAAYQ,MAAMmE,YAAY,IAAI;YAC5EC,WAAW7E,UAAUS,MAAMqE,UAAU;YACrCC,SAAS/E,UAAUS,MAAMuE,QAAQ;YACjCC,cAAchF,YAAYQ,MAAMyE,aAAa;YAC7CC,sBAAsBlF,YAAYQ,MAAM2E,sBAAsB;YAC9DC,aAAatF,YAAYU,MAAM6E,YAAY;QAC7C;IACF;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAME,uBAAuD;IAClEnF,MAAM;IAENC,KAAIC,QAAyB,EAAEC,SAAsB;YACrCD;QAAd,MAAME,QAAQF,CAAAA,uBAAAA,SAASG,UAAU,YAAnBH,uBAAuB,CAAC;YAI1BR,cACCC,YACAA,aAOYS,yBACJA,oBAOVV;QAnBX,OAAO;YACLY,IAAIJ,SAASI,EAAE;YACfC,UAAUb,CAAAA,eAAAA,YAAYU,MAAMI,SAAS,aAA3Bd,eAAgCQ,SAASI,EAAE;YACrDG,WAAWd,CAAAA,aAAAA,UAAUS,MAAMM,UAAU,aAA1Bf,aAA+B,IAAIgB;YAC9CC,WAAWjB,CAAAA,cAAAA,UAAUS,MAAMS,UAAU,aAA1BlB,cAA+B,IAAIgB;YAC9CG,WAAWpB,YAAYU,MAAMU,SAAS;YACtCC,KAAKrB,YAAYU,MAAMW,GAAG;YAC1BC,QAAQpB,YAAYQ,MAAMY,MAAM;YAChCC,WAAWrB,YAAYQ,MAAMa,SAAS;YACtCC,KAAKxB,YAAYU,MAAMc,GAAG;YAC1BC,QAAQzB,YAAYU,MAAMe,MAAM;YAChCC,gBAAgBC,OAAOjB,CAAAA,0BAAAA,MAAMkB,gBAAgB,YAAtBlB,0BAA0B;YACjDyB,YAAYR,OAAOjB,CAAAA,qBAAAA,MAAM0B,WAAW,YAAjB1B,qBAAqB;YACxCmB,aAAa7B,YAAYU,MAAMoB,YAAY;YAC3CO,cAAcrC,YAAYU,MAAM4B,aAAa;YAC7CC,WAAWvC,YAAYU,MAAM8B,UAAU;YACvCP,iBAAiBjC,YAAYU,MAAMwB,iBAAiB;YACpDO,SAASvC,YAAYQ,MAAM+B,OAAO;YAClCC,UAAUvC,aAAaO,MAAMgC,QAAQ;YACrCC,QAAS3C,CAAAA,gBAAAA,YAAYU,MAAMiC,MAAM,aAAxB3C,gBAA6B;QACxC;IACF;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAM0F,mBAA+C;IAC1DpF,MAAM;IAENC,KAAIC,QAAyB,EAAEC,SAAsB;YACrCD;QAAd,MAAME,QAAQF,CAAAA,uBAAAA,SAASG,UAAU,YAAnBH,uBAAuB,CAAC;YAIjBE;QAFrB,OAAO;YACLE,IAAIJ,SAASI,EAAE;YACfuB,YAAYR,OAAOjB,CAAAA,qBAAAA,MAAM0B,WAAW,YAAjB1B,qBAAqB;YACxC2B,cAAcrC,YAAYU,MAAM4B,aAAa;QAC/C;IACF;AACF,EAAE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Parse a string value, returning null for empty/undefined
3
+ */
4
+ export declare function parseString(value: unknown): string | null;
5
+ /**
6
+ * Parse a date value
7
+ */
8
+ export declare function parseDate(value: unknown): Date | null;
9
+ /**
10
+ * Parse a boolean value
11
+ */
12
+ export declare function parseBoolean(value: unknown): boolean;
13
+ /**
14
+ * Parse an array of strings
15
+ */
16
+ export declare function parseStringArray(value: unknown): string[] | null;
17
+ /**
18
+ * Parse a number value
19
+ */
20
+ export declare function parseNumber(value: unknown): number;
21
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/mappers/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAerD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAQhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Parse a string value, returning null for empty/undefined
3
+ */ export function parseString(value) {
4
+ if (value === null || value === undefined) {
5
+ return null;
6
+ }
7
+ const str = String(value);
8
+ return str.length > 0 ? str : null;
9
+ }
10
+ /**
11
+ * Parse a date value
12
+ */ export function parseDate(value) {
13
+ if (value === null || value === undefined) {
14
+ return null;
15
+ }
16
+ if (value instanceof Date) {
17
+ return value;
18
+ }
19
+ if (typeof value === 'string' || typeof value === 'number') {
20
+ const date = new Date(value);
21
+ return isNaN(date.getTime()) ? null : date;
22
+ }
23
+ return null;
24
+ }
25
+ /**
26
+ * Parse a boolean value
27
+ */ export function parseBoolean(value) {
28
+ if (typeof value === 'boolean') {
29
+ return value;
30
+ }
31
+ if (value === 'true' || value === '1' || value === 1) {
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ /**
37
+ * Parse an array of strings
38
+ */ export function parseStringArray(value) {
39
+ if (value === null || value === undefined) {
40
+ return null;
41
+ }
42
+ if (Array.isArray(value)) {
43
+ return value.map(String);
44
+ }
45
+ return null;
46
+ }
47
+ /**
48
+ * Parse a number value
49
+ */ export function parseNumber(value) {
50
+ if (value === null || value === undefined) {
51
+ return 0;
52
+ }
53
+ const num = Number(value);
54
+ return isNaN(num) ? 0 : num;
55
+ }
56
+
57
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/utils.ts"],"sourcesContent":["/**\n * Parse a string value, returning null for empty/undefined\n */\nexport function parseString(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n const str = String(value);\n return str.length > 0 ? str : null;\n}\n\n/**\n * Parse a date value\n */\nexport function parseDate(value: unknown): Date | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n const date = new Date(value);\n return isNaN(date.getTime()) ? null : date;\n }\n\n return null;\n}\n\n/**\n * Parse a boolean value\n */\nexport function parseBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (value === 'true' || value === '1' || value === 1) {\n return true;\n }\n return false;\n}\n\n/**\n * Parse an array of strings\n */\nexport function parseStringArray(value: unknown): string[] | null {\n if (value === null || value === undefined) {\n return null;\n }\n if (Array.isArray(value)) {\n return value.map(String);\n }\n return null;\n}\n\n/**\n * Parse a number value\n */\nexport function parseNumber(value: unknown): number {\n if (value === null || value === undefined) {\n return 0;\n }\n const num = Number(value);\n return isNaN(num) ? 0 : num;\n}\n"],"names":["parseString","value","undefined","str","String","length","parseDate","Date","date","isNaN","getTime","parseBoolean","parseStringArray","Array","isArray","map","parseNumber","num","Number"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,YAAYC,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAO;IACT;IACA,MAAMC,MAAMC,OAAOH;IACnB,OAAOE,IAAIE,MAAM,GAAG,IAAIF,MAAM;AAChC;AAEA;;CAEC,GACD,OAAO,SAASG,UAAUL,KAAc;IACtC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAO;IACT;IAEA,IAAID,iBAAiBM,MAAM;QACzB,OAAON;IACT;IAEA,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,UAAU;QAC1D,MAAMO,OAAO,IAAID,KAAKN;QACtB,OAAOQ,MAAMD,KAAKE,OAAO,MAAM,OAAOF;IACxC;IAEA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASG,aAAaV,KAAc;IACzC,IAAI,OAAOA,UAAU,WAAW;QAC9B,OAAOA;IACT;IACA,IAAIA,UAAU,UAAUA,UAAU,OAAOA,UAAU,GAAG;QACpD,OAAO;IACT;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASW,iBAAiBX,KAAc;IAC7C,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAO;IACT;IACA,IAAIW,MAAMC,OAAO,CAACb,QAAQ;QACxB,OAAOA,MAAMc,GAAG,CAACX;IACnB;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASY,YAAYf,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAO;IACT;IACA,MAAMe,MAAMC,OAAOjB;IACnB,OAAOQ,MAAMQ,OAAO,IAAIA;AAC1B"}
@@ -0,0 +1,78 @@
1
+ import type { Transport, BlockConfig } from '@23blocks/contracts';
2
+ import { type SearchService, type SearchHistoryService, type FavoritesService } from './services/index.js';
3
+ /**
4
+ * Configuration for the Search block
5
+ */
6
+ export interface SearchBlockConfig extends BlockConfig {
7
+ /** Application ID */
8
+ appId: string;
9
+ /** Default entity types to search (optional) */
10
+ defaultEntityTypes?: string[];
11
+ }
12
+ /**
13
+ * Search block interface
14
+ */
15
+ export interface SearchBlock {
16
+ /**
17
+ * Core search operations
18
+ */
19
+ search: SearchService;
20
+ /**
21
+ * Search history management
22
+ */
23
+ history: SearchHistoryService;
24
+ /**
25
+ * Favorites/bookmarks management
26
+ */
27
+ favorites: FavoritesService;
28
+ }
29
+ /**
30
+ * Create the Search block
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * import { createSearchBlock } from '@23blocks/block-search';
35
+ * import { createHttpTransport } from '@23blocks/transport-http';
36
+ *
37
+ * const transport = createHttpTransport({
38
+ * baseUrl: 'https://api.example.com',
39
+ * headers: () => ({
40
+ * 'Authorization': `Bearer ${getToken()}`,
41
+ * 'appid': 'your-app-id',
42
+ * }),
43
+ * });
44
+ *
45
+ * const searchBlock = createSearchBlock(transport, { appId: 'your-app-id' });
46
+ *
47
+ * // Execute a search
48
+ * const { results, totalRecords } = await searchBlock.search.search({
49
+ * query: 'hello world',
50
+ * entityTypes: ['Product', 'Article'],
51
+ * limit: 20,
52
+ * });
53
+ *
54
+ * // Get suggestions
55
+ * const suggestions = await searchBlock.search.suggest('hel');
56
+ *
57
+ * // Get recent searches
58
+ * const recent = await searchBlock.history.recent(10);
59
+ *
60
+ * // Add to favorites
61
+ * await searchBlock.favorites.add({
62
+ * entityUniqueId: 'product-123',
63
+ * entityType: 'Product',
64
+ * entityAlias: 'My Favorite Product',
65
+ * });
66
+ * ```
67
+ */
68
+ export declare function createSearchBlock(transport: Transport, config: SearchBlockConfig): SearchBlock;
69
+ /**
70
+ * Block metadata
71
+ */
72
+ export declare const searchBlockMetadata: {
73
+ name: string;
74
+ version: string;
75
+ description: string;
76
+ resourceTypes: string[];
77
+ };
78
+ //# sourceMappingURL=search.block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.block.d.ts","sourceRoot":"","sources":["../../src/lib/search.block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;IAEtB;;OAEG;IACH,OAAO,EAAE,oBAAoB,CAAC;IAE9B;;OAEG;IACH,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,iBAAiB,GACxB,WAAW,CAMb;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;CAW/B,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { createSearchService, createSearchHistoryService, createFavoritesService } from './services/index.js';
2
+ /**
3
+ * Create the Search block
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { createSearchBlock } from '@23blocks/block-search';
8
+ * import { createHttpTransport } from '@23blocks/transport-http';
9
+ *
10
+ * const transport = createHttpTransport({
11
+ * baseUrl: 'https://api.example.com',
12
+ * headers: () => ({
13
+ * 'Authorization': `Bearer ${getToken()}`,
14
+ * 'appid': 'your-app-id',
15
+ * }),
16
+ * });
17
+ *
18
+ * const searchBlock = createSearchBlock(transport, { appId: 'your-app-id' });
19
+ *
20
+ * // Execute a search
21
+ * const { results, totalRecords } = await searchBlock.search.search({
22
+ * query: 'hello world',
23
+ * entityTypes: ['Product', 'Article'],
24
+ * limit: 20,
25
+ * });
26
+ *
27
+ * // Get suggestions
28
+ * const suggestions = await searchBlock.search.suggest('hel');
29
+ *
30
+ * // Get recent searches
31
+ * const recent = await searchBlock.history.recent(10);
32
+ *
33
+ * // Add to favorites
34
+ * await searchBlock.favorites.add({
35
+ * entityUniqueId: 'product-123',
36
+ * entityType: 'Product',
37
+ * entityAlias: 'My Favorite Product',
38
+ * });
39
+ * ```
40
+ */ export function createSearchBlock(transport, config) {
41
+ return {
42
+ search: createSearchService(transport, config),
43
+ history: createSearchHistoryService(transport, config),
44
+ favorites: createFavoritesService(transport, config)
45
+ };
46
+ }
47
+ /**
48
+ * Block metadata
49
+ */ export const searchBlockMetadata = {
50
+ name: 'search',
51
+ version: '0.0.1',
52
+ description: 'Full-text search, suggestions, history, and favorites',
53
+ resourceTypes: [
54
+ 'SearchResult',
55
+ 'SearchQuery',
56
+ 'LastQuery',
57
+ 'FavoriteEntity',
58
+ 'EntityType'
59
+ ]
60
+ };
61
+
62
+ //# sourceMappingURL=search.block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/search.block.ts"],"sourcesContent":["import type { Transport, BlockConfig } from '@23blocks/contracts';\nimport {\n createSearchService,\n createSearchHistoryService,\n createFavoritesService,\n type SearchService,\n type SearchHistoryService,\n type FavoritesService,\n} from './services/index.js';\n\n/**\n * Configuration for the Search block\n */\nexport interface SearchBlockConfig extends BlockConfig {\n /** Application ID */\n appId: string;\n /** Default entity types to search (optional) */\n defaultEntityTypes?: string[];\n}\n\n/**\n * Search block interface\n */\nexport interface SearchBlock {\n /**\n * Core search operations\n */\n search: SearchService;\n\n /**\n * Search history management\n */\n history: SearchHistoryService;\n\n /**\n * Favorites/bookmarks management\n */\n favorites: FavoritesService;\n}\n\n/**\n * Create the Search block\n *\n * @example\n * ```typescript\n * import { createSearchBlock } from '@23blocks/block-search';\n * import { createHttpTransport } from '@23blocks/transport-http';\n *\n * const transport = createHttpTransport({\n * baseUrl: 'https://api.example.com',\n * headers: () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * 'appid': 'your-app-id',\n * }),\n * });\n *\n * const searchBlock = createSearchBlock(transport, { appId: 'your-app-id' });\n *\n * // Execute a search\n * const { results, totalRecords } = await searchBlock.search.search({\n * query: 'hello world',\n * entityTypes: ['Product', 'Article'],\n * limit: 20,\n * });\n *\n * // Get suggestions\n * const suggestions = await searchBlock.search.suggest('hel');\n *\n * // Get recent searches\n * const recent = await searchBlock.history.recent(10);\n *\n * // Add to favorites\n * await searchBlock.favorites.add({\n * entityUniqueId: 'product-123',\n * entityType: 'Product',\n * entityAlias: 'My Favorite Product',\n * });\n * ```\n */\nexport function createSearchBlock(\n transport: Transport,\n config: SearchBlockConfig\n): SearchBlock {\n return {\n search: createSearchService(transport, config),\n history: createSearchHistoryService(transport, config),\n favorites: createFavoritesService(transport, config),\n };\n}\n\n/**\n * Block metadata\n */\nexport const searchBlockMetadata = {\n name: 'search',\n version: '0.0.1',\n description: 'Full-text search, suggestions, history, and favorites',\n resourceTypes: [\n 'SearchResult',\n 'SearchQuery',\n 'LastQuery',\n 'FavoriteEntity',\n 'EntityType',\n ],\n};\n"],"names":["createSearchService","createSearchHistoryService","createFavoritesService","createSearchBlock","transport","config","search","history","favorites","searchBlockMetadata","name","version","description","resourceTypes"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SACEA,mBAAmB,EACnBC,0BAA0B,EAC1BC,sBAAsB,QAIjB,sBAAsB;AAgC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCC,GACD,OAAO,SAASC,kBACdC,SAAoB,EACpBC,MAAyB;IAEzB,OAAO;QACLC,QAAQN,oBAAoBI,WAAWC;QACvCE,SAASN,2BAA2BG,WAAWC;QAC/CG,WAAWN,uBAAuBE,WAAWC;IAC/C;AACF;AAEA;;CAEC,GACD,OAAO,MAAMI,sBAAsB;IACjCC,MAAM;IACNC,SAAS;IACTC,aAAa;IACbC,eAAe;QACb;QACA;QACA;QACA;QACA;KACD;AACH,EAAE"}
@@ -0,0 +1,2 @@
1
+ export { createSearchService, createSearchHistoryService, createFavoritesService, type SearchService, type SearchHistoryService, type FavoritesService, } from './search.service.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createSearchService, createSearchHistoryService, createFavoritesService } from './search.service.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/index.ts"],"sourcesContent":["export {\n createSearchService,\n createSearchHistoryService,\n createFavoritesService,\n type SearchService,\n type SearchHistoryService,\n type FavoritesService,\n} from './search.service.js';\n"],"names":["createSearchService","createSearchHistoryService","createFavoritesService"],"rangeMappings":"","mappings":"AAAA,SACEA,mBAAmB,EACnBC,0BAA0B,EAC1BC,sBAAsB,QAIjB,sBAAsB"}
@@ -0,0 +1,79 @@
1
+ import type { Transport, PageResult, ListParams } from '@23blocks/contracts';
2
+ import type { SearchResult, SearchQuery, LastQuery, FavoriteEntity, EntityType, SearchRequest, SearchResponse, AddFavoriteRequest } from '../types/index.js';
3
+ import type { SearchBlockConfig } from '../search.block.js';
4
+ /**
5
+ * Search service interface
6
+ */
7
+ export interface SearchService {
8
+ /**
9
+ * Execute a search query
10
+ */
11
+ search(request: SearchRequest): Promise<SearchResponse>;
12
+ /**
13
+ * Get search suggestions/autocomplete
14
+ */
15
+ suggest(query: string, limit?: number): Promise<SearchResult[]>;
16
+ /**
17
+ * Get available entity types
18
+ */
19
+ entityTypes(): Promise<EntityType[]>;
20
+ }
21
+ /**
22
+ * Search history service interface
23
+ */
24
+ export interface SearchHistoryService {
25
+ /**
26
+ * Get recent searches for the current user
27
+ */
28
+ recent(limit?: number): Promise<LastQuery[]>;
29
+ /**
30
+ * Get a specific query by ID
31
+ */
32
+ get(id: string): Promise<SearchQuery>;
33
+ /**
34
+ * Clear search history
35
+ */
36
+ clear(): Promise<void>;
37
+ /**
38
+ * Delete a specific query from history
39
+ */
40
+ delete(id: string): Promise<void>;
41
+ }
42
+ /**
43
+ * Favorites service interface
44
+ */
45
+ export interface FavoritesService {
46
+ /**
47
+ * List user's favorites
48
+ */
49
+ list(params?: ListParams): Promise<PageResult<FavoriteEntity>>;
50
+ /**
51
+ * Get a favorite by ID
52
+ */
53
+ get(id: string): Promise<FavoriteEntity>;
54
+ /**
55
+ * Add a favorite
56
+ */
57
+ add(request: AddFavoriteRequest): Promise<FavoriteEntity>;
58
+ /**
59
+ * Remove a favorite
60
+ */
61
+ remove(id: string): Promise<void>;
62
+ /**
63
+ * Check if an entity is favorited
64
+ */
65
+ isFavorite(entityUniqueId: string): Promise<boolean>;
66
+ }
67
+ /**
68
+ * Create the search service
69
+ */
70
+ export declare function createSearchService(transport: Transport, _config: SearchBlockConfig): SearchService;
71
+ /**
72
+ * Create the search history service
73
+ */
74
+ export declare function createSearchHistoryService(transport: Transport, _config: SearchBlockConfig): SearchHistoryService;
75
+ /**
76
+ * Create the favorites service
77
+ */
78
+ export declare function createFavoritesService(transport: Transport, _config: SearchBlockConfig): FavoritesService;
79
+ //# sourceMappingURL=search.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/search.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7E,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAExD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE7C;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAE/D;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEzC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1D;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;OAEG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAiCD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAwHf;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB,GACzB,oBAAoB,CAuBtB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CAyClB"}
@@ -0,0 +1,209 @@
1
+ import { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';
2
+ import { searchResultMapper, searchQueryMapper, lastQueryMapper, favoriteEntityMapper, entityTypeMapper } from '../mappers/index.js';
3
+ /**
4
+ * Build filter params for list operations
5
+ */ function buildListParams(params) {
6
+ if (!params) return {};
7
+ const queryParams = {};
8
+ if (params.page) {
9
+ queryParams['page[number]'] = params.page;
10
+ }
11
+ if (params.perPage) {
12
+ queryParams['page[size]'] = params.perPage;
13
+ }
14
+ if (params.sort) {
15
+ const sorts = Array.isArray(params.sort) ? params.sort : [
16
+ params.sort
17
+ ];
18
+ queryParams['sort'] = sorts.map((s)=>s.direction === 'desc' ? `-${s.field}` : s.field).join(',');
19
+ }
20
+ if (params.filter) {
21
+ for (const [key, value] of Object.entries(params.filter)){
22
+ queryParams[`filter[${key}]`] = value;
23
+ }
24
+ }
25
+ return queryParams;
26
+ }
27
+ /**
28
+ * Create the search service
29
+ */ export function createSearchService(transport, _config) {
30
+ return {
31
+ async search (request) {
32
+ var _response_meta, _response_meta1, _response_meta2;
33
+ const response = await transport.post('/search', {
34
+ query: request.query,
35
+ entity_types: request.entityTypes,
36
+ include: request.include,
37
+ exclude: request.exclude,
38
+ limit: request.limit,
39
+ offset: request.offset
40
+ });
41
+ const results = decodeMany(response, searchResultMapper);
42
+ // Extract query from meta if available
43
+ let query;
44
+ if ((_response_meta = response.meta) == null ? void 0 : _response_meta.query) {
45
+ var _request_include, _request_exclude, _response_meta_elapsed_time, _response_meta_total_records;
46
+ // The query comes in meta for search responses
47
+ query = {
48
+ id: '',
49
+ uniqueId: '',
50
+ createdAt: new Date(),
51
+ updatedAt: new Date(),
52
+ partition: null,
53
+ key: null,
54
+ query: request.query,
55
+ include: (_request_include = request.include) != null ? _request_include : null,
56
+ exclude: (_request_exclude = request.exclude) != null ? _request_exclude : null,
57
+ payload: null,
58
+ userUniqueId: null,
59
+ userProviderName: null,
60
+ userName: null,
61
+ userEmail: null,
62
+ userRole: null,
63
+ userRoleUniqueId: null,
64
+ userRoleName: null,
65
+ queryString: null,
66
+ userAgent: null,
67
+ url: null,
68
+ path: null,
69
+ ipaddress: null,
70
+ origin: null,
71
+ source: null,
72
+ submittedAt: new Date(),
73
+ device: null,
74
+ browser: null,
75
+ hash: null,
76
+ elapsedTime: (_response_meta_elapsed_time = response.meta.elapsed_time) != null ? _response_meta_elapsed_time : null,
77
+ startedAt: null,
78
+ endedAt: null,
79
+ totalRecords: (_response_meta_total_records = response.meta.total_records) != null ? _response_meta_total_records : results.length,
80
+ totalRecordsReturned: results.length,
81
+ queryOrigin: null
82
+ };
83
+ } else {
84
+ var _request_include1, _request_exclude1;
85
+ query = {
86
+ id: '',
87
+ uniqueId: '',
88
+ createdAt: new Date(),
89
+ updatedAt: new Date(),
90
+ partition: null,
91
+ key: null,
92
+ query: request.query,
93
+ include: (_request_include1 = request.include) != null ? _request_include1 : null,
94
+ exclude: (_request_exclude1 = request.exclude) != null ? _request_exclude1 : null,
95
+ payload: null,
96
+ userUniqueId: null,
97
+ userProviderName: null,
98
+ userName: null,
99
+ userEmail: null,
100
+ userRole: null,
101
+ userRoleUniqueId: null,
102
+ userRoleName: null,
103
+ queryString: null,
104
+ userAgent: null,
105
+ url: null,
106
+ path: null,
107
+ ipaddress: null,
108
+ origin: null,
109
+ source: null,
110
+ submittedAt: new Date(),
111
+ device: null,
112
+ browser: null,
113
+ hash: null,
114
+ elapsedTime: null,
115
+ startedAt: null,
116
+ endedAt: null,
117
+ totalRecords: results.length,
118
+ totalRecordsReturned: results.length,
119
+ queryOrigin: null
120
+ };
121
+ }
122
+ var _response_meta_total_records1, _response_meta_elapsed_time1;
123
+ return {
124
+ results,
125
+ query,
126
+ totalRecords: (_response_meta_total_records1 = (_response_meta1 = response.meta) == null ? void 0 : _response_meta1.total_records) != null ? _response_meta_total_records1 : results.length,
127
+ elapsedTime: (_response_meta_elapsed_time1 = (_response_meta2 = response.meta) == null ? void 0 : _response_meta2.elapsed_time) != null ? _response_meta_elapsed_time1 : 0
128
+ };
129
+ },
130
+ async suggest (query, limit = 10) {
131
+ const response = await transport.get('/search/suggest', {
132
+ params: {
133
+ q: query,
134
+ limit
135
+ }
136
+ });
137
+ return decodeMany(response, searchResultMapper);
138
+ },
139
+ async entityTypes () {
140
+ const response = await transport.get('/search/entity_types');
141
+ return decodeMany(response, entityTypeMapper);
142
+ }
143
+ };
144
+ }
145
+ /**
146
+ * Create the search history service
147
+ */ export function createSearchHistoryService(transport, _config) {
148
+ return {
149
+ async recent (limit = 20) {
150
+ const response = await transport.get('/search/history', {
151
+ params: {
152
+ limit
153
+ }
154
+ });
155
+ return decodeMany(response, lastQueryMapper);
156
+ },
157
+ async get (id) {
158
+ const response = await transport.get(`/search/queries/${id}`);
159
+ return decodeOne(response, searchQueryMapper);
160
+ },
161
+ async clear () {
162
+ await transport.delete('/search/history');
163
+ },
164
+ async delete (id) {
165
+ await transport.delete(`/search/history/${id}`);
166
+ }
167
+ };
168
+ }
169
+ /**
170
+ * Create the favorites service
171
+ */ export function createFavoritesService(transport, _config) {
172
+ return {
173
+ async list (params) {
174
+ const response = await transport.get('/search/favorites', {
175
+ params: buildListParams(params)
176
+ });
177
+ return decodePageResult(response, favoriteEntityMapper);
178
+ },
179
+ async get (id) {
180
+ const response = await transport.get(`/search/favorites/${id}`);
181
+ return decodeOne(response, favoriteEntityMapper);
182
+ },
183
+ async add (request) {
184
+ const response = await transport.post('/search/favorites', {
185
+ entity_unique_id: request.entityUniqueId,
186
+ entity_type: request.entityType,
187
+ entity_alias: request.entityAlias,
188
+ entity_url: request.entityUrl,
189
+ entity_avatar_url: request.entityAvatarUrl
190
+ });
191
+ return decodeOne(response, favoriteEntityMapper);
192
+ },
193
+ async remove (id) {
194
+ await transport.delete(`/search/favorites/${id}`);
195
+ },
196
+ async isFavorite (entityUniqueId) {
197
+ try {
198
+ var _response_data;
199
+ const response = await transport.get(`/search/favorites/check/${entityUniqueId}`);
200
+ var _response_data_favorite;
201
+ return (_response_data_favorite = (_response_data = response.data) == null ? void 0 : _response_data.favorite) != null ? _response_data_favorite : false;
202
+ } catch (e) {
203
+ return false;
204
+ }
205
+ }
206
+ };
207
+ }
208
+
209
+ //# sourceMappingURL=search.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/search.service.ts"],"sourcesContent":["import type { Transport, PageResult, ListParams } from '@23blocks/contracts';\nimport type { JsonApiDocument } from '@23blocks/jsonapi-codec';\nimport { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n SearchResult,\n SearchQuery,\n LastQuery,\n FavoriteEntity,\n EntityType,\n SearchRequest,\n SearchResponse,\n AddFavoriteRequest,\n} from '../types/index.js';\nimport {\n searchResultMapper,\n searchQueryMapper,\n lastQueryMapper,\n favoriteEntityMapper,\n entityTypeMapper,\n} from '../mappers/index.js';\nimport type { SearchBlockConfig } from '../search.block.js';\n\n/**\n * Search service interface\n */\nexport interface SearchService {\n /**\n * Execute a search query\n */\n search(request: SearchRequest): Promise<SearchResponse>;\n\n /**\n * Get search suggestions/autocomplete\n */\n suggest(query: string, limit?: number): Promise<SearchResult[]>;\n\n /**\n * Get available entity types\n */\n entityTypes(): Promise<EntityType[]>;\n}\n\n/**\n * Search history service interface\n */\nexport interface SearchHistoryService {\n /**\n * Get recent searches for the current user\n */\n recent(limit?: number): Promise<LastQuery[]>;\n\n /**\n * Get a specific query by ID\n */\n get(id: string): Promise<SearchQuery>;\n\n /**\n * Clear search history\n */\n clear(): Promise<void>;\n\n /**\n * Delete a specific query from history\n */\n delete(id: string): Promise<void>;\n}\n\n/**\n * Favorites service interface\n */\nexport interface FavoritesService {\n /**\n * List user's favorites\n */\n list(params?: ListParams): Promise<PageResult<FavoriteEntity>>;\n\n /**\n * Get a favorite by ID\n */\n get(id: string): Promise<FavoriteEntity>;\n\n /**\n * Add a favorite\n */\n add(request: AddFavoriteRequest): Promise<FavoriteEntity>;\n\n /**\n * Remove a favorite\n */\n remove(id: string): Promise<void>;\n\n /**\n * Check if an entity is favorited\n */\n isFavorite(entityUniqueId: string): Promise<boolean>;\n}\n\n/**\n * Build filter params for list operations\n */\nfunction buildListParams(params?: ListParams): Record<string, string | number | boolean | string[] | undefined> {\n if (!params) return {};\n\n const queryParams: Record<string, string | number | boolean | string[] | undefined> = {};\n\n if (params.page) {\n queryParams['page[number]'] = params.page;\n }\n if (params.perPage) {\n queryParams['page[size]'] = params.perPage;\n }\n\n if (params.sort) {\n const sorts = Array.isArray(params.sort) ? params.sort : [params.sort];\n queryParams['sort'] = sorts\n .map((s) => (s.direction === 'desc' ? `-${s.field}` : s.field))\n .join(',');\n }\n\n if (params.filter) {\n for (const [key, value] of Object.entries(params.filter)) {\n queryParams[`filter[${key}]`] = value;\n }\n }\n\n return queryParams;\n}\n\n/**\n * Create the search service\n */\nexport function createSearchService(\n transport: Transport,\n _config: SearchBlockConfig\n): SearchService {\n return {\n async search(request: SearchRequest): Promise<SearchResponse> {\n const response = await transport.post<JsonApiDocument & {\n meta?: {\n total_records?: number;\n elapsed_time?: number;\n query?: unknown;\n };\n }>('/search', {\n query: request.query,\n entity_types: request.entityTypes,\n include: request.include,\n exclude: request.exclude,\n limit: request.limit,\n offset: request.offset,\n });\n\n const results = decodeMany(response, searchResultMapper);\n\n // Extract query from meta if available\n let query: SearchQuery;\n if (response.meta?.query) {\n // The query comes in meta for search responses\n query = {\n id: '',\n uniqueId: '',\n createdAt: new Date(),\n updatedAt: new Date(),\n partition: null,\n key: null,\n query: request.query,\n include: request.include ?? null,\n exclude: request.exclude ?? null,\n payload: null,\n userUniqueId: null,\n userProviderName: null,\n userName: null,\n userEmail: null,\n userRole: null,\n userRoleUniqueId: null,\n userRoleName: null,\n queryString: null,\n userAgent: null,\n url: null,\n path: null,\n ipaddress: null,\n origin: null,\n source: null,\n submittedAt: new Date(),\n device: null,\n browser: null,\n hash: null,\n elapsedTime: response.meta.elapsed_time ?? null,\n startedAt: null,\n endedAt: null,\n totalRecords: response.meta.total_records ?? results.length,\n totalRecordsReturned: results.length,\n queryOrigin: null,\n };\n } else {\n query = {\n id: '',\n uniqueId: '',\n createdAt: new Date(),\n updatedAt: new Date(),\n partition: null,\n key: null,\n query: request.query,\n include: request.include ?? null,\n exclude: request.exclude ?? null,\n payload: null,\n userUniqueId: null,\n userProviderName: null,\n userName: null,\n userEmail: null,\n userRole: null,\n userRoleUniqueId: null,\n userRoleName: null,\n queryString: null,\n userAgent: null,\n url: null,\n path: null,\n ipaddress: null,\n origin: null,\n source: null,\n submittedAt: new Date(),\n device: null,\n browser: null,\n hash: null,\n elapsedTime: null,\n startedAt: null,\n endedAt: null,\n totalRecords: results.length,\n totalRecordsReturned: results.length,\n queryOrigin: null,\n };\n }\n\n return {\n results,\n query,\n totalRecords: response.meta?.total_records ?? results.length,\n elapsedTime: response.meta?.elapsed_time ?? 0,\n };\n },\n\n async suggest(query: string, limit = 10): Promise<SearchResult[]> {\n const response = await transport.get<JsonApiDocument>(\n '/search/suggest',\n { params: { q: query, limit } }\n );\n return decodeMany(response, searchResultMapper);\n },\n\n async entityTypes(): Promise<EntityType[]> {\n const response = await transport.get<JsonApiDocument>('/search/entity_types');\n return decodeMany(response, entityTypeMapper);\n },\n };\n}\n\n/**\n * Create the search history service\n */\nexport function createSearchHistoryService(\n transport: Transport,\n _config: SearchBlockConfig\n): SearchHistoryService {\n return {\n async recent(limit = 20): Promise<LastQuery[]> {\n const response = await transport.get<JsonApiDocument>(\n '/search/history',\n { params: { limit } }\n );\n return decodeMany(response, lastQueryMapper);\n },\n\n async get(id: string): Promise<SearchQuery> {\n const response = await transport.get<JsonApiDocument>(`/search/queries/${id}`);\n return decodeOne(response, searchQueryMapper);\n },\n\n async clear(): Promise<void> {\n await transport.delete('/search/history');\n },\n\n async delete(id: string): Promise<void> {\n await transport.delete(`/search/history/${id}`);\n },\n };\n}\n\n/**\n * Create the favorites service\n */\nexport function createFavoritesService(\n transport: Transport,\n _config: SearchBlockConfig\n): FavoritesService {\n return {\n async list(params?: ListParams): Promise<PageResult<FavoriteEntity>> {\n const response = await transport.get<JsonApiDocument>(\n '/search/favorites',\n { params: buildListParams(params) }\n );\n return decodePageResult(response, favoriteEntityMapper);\n },\n\n async get(id: string): Promise<FavoriteEntity> {\n const response = await transport.get<JsonApiDocument>(`/search/favorites/${id}`);\n return decodeOne(response, favoriteEntityMapper);\n },\n\n async add(request: AddFavoriteRequest): Promise<FavoriteEntity> {\n const response = await transport.post<JsonApiDocument>('/search/favorites', {\n entity_unique_id: request.entityUniqueId,\n entity_type: request.entityType,\n entity_alias: request.entityAlias,\n entity_url: request.entityUrl,\n entity_avatar_url: request.entityAvatarUrl,\n });\n return decodeOne(response, favoriteEntityMapper);\n },\n\n async remove(id: string): Promise<void> {\n await transport.delete(`/search/favorites/${id}`);\n },\n\n async isFavorite(entityUniqueId: string): Promise<boolean> {\n try {\n const response = await transport.get<{ data: { favorite: boolean } }>(\n `/search/favorites/check/${entityUniqueId}`\n );\n return response.data?.favorite ?? false;\n } catch {\n return false;\n }\n },\n };\n}\n"],"names":["decodeOne","decodeMany","decodePageResult","searchResultMapper","searchQueryMapper","lastQueryMapper","favoriteEntityMapper","entityTypeMapper","buildListParams","params","queryParams","page","perPage","sort","sorts","Array","isArray","map","s","direction","field","join","filter","key","value","Object","entries","createSearchService","transport","_config","search","request","response","post","query","entity_types","entityTypes","include","exclude","limit","offset","results","meta","id","uniqueId","createdAt","Date","updatedAt","partition","payload","userUniqueId","userProviderName","userName","userEmail","userRole","userRoleUniqueId","userRoleName","queryString","userAgent","url","path","ipaddress","origin","source","submittedAt","device","browser","hash","elapsedTime","elapsed_time","startedAt","endedAt","totalRecords","total_records","length","totalRecordsReturned","queryOrigin","suggest","get","q","createSearchHistoryService","recent","clear","delete","createFavoritesService","list","add","entity_unique_id","entityUniqueId","entity_type","entityType","entity_alias","entityAlias","entity_url","entityUrl","entity_avatar_url","entityAvatarUrl","remove","isFavorite","data","favorite"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { SearchResult, SearchQuery, LastQuery, FavoriteEntity, EntityType, SearchRequest, SearchResponse, AddFavoriteRequest, } from './search.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/index.ts"],"sourcesContent":["export type {\n SearchResult,\n SearchQuery,\n LastQuery,\n FavoriteEntity,\n EntityType,\n SearchRequest,\n SearchResponse,\n AddFavoriteRequest,\n} from './search.js';\n"],"names":[],"rangeMappings":"","mappings":"AAAA,WASqB"}
@@ -0,0 +1,152 @@
1
+ import type { IdentityCore, EntityStatus } from '@23blocks/contracts';
2
+ /**
3
+ * Search result entity
4
+ */
5
+ export interface SearchResult extends IdentityCore {
6
+ partition: string | null;
7
+ key: string | null;
8
+ weight: number;
9
+ relevance: number;
10
+ uri: string | null;
11
+ origin: string | null;
12
+ entityUniqueId: string;
13
+ entityAlias: string | null;
14
+ entityDescription: string | null;
15
+ entityAvatarUrl: string | null;
16
+ entityType: string;
17
+ entitySource: string | null;
18
+ entityUrl: string | null;
19
+ counter: number;
20
+ favorite: boolean;
21
+ status: EntityStatus;
22
+ payload: Record<string, unknown> | null;
23
+ }
24
+ /**
25
+ * Search query (saved/executed query)
26
+ */
27
+ export interface SearchQuery extends IdentityCore {
28
+ partition: string | null;
29
+ key: string | null;
30
+ query: string;
31
+ include: string[] | null;
32
+ exclude: string[] | null;
33
+ payload: Record<string, unknown> | null;
34
+ userUniqueId: string | null;
35
+ userProviderName: string | null;
36
+ userName: string | null;
37
+ userEmail: string | null;
38
+ userRole: string | null;
39
+ userRoleUniqueId: string | null;
40
+ userRoleName: string | null;
41
+ queryString: string | null;
42
+ userAgent: string | null;
43
+ url: string | null;
44
+ path: string | null;
45
+ ipaddress: string | null;
46
+ origin: string | null;
47
+ source: string | null;
48
+ submittedAt: Date | null;
49
+ device: string | null;
50
+ browser: string | null;
51
+ hash: string | null;
52
+ elapsedTime: number | null;
53
+ startedAt: Date | null;
54
+ endedAt: Date | null;
55
+ totalRecords: number;
56
+ totalRecordsReturned: number;
57
+ queryOrigin: string | null;
58
+ }
59
+ /**
60
+ * Last query (recent search history)
61
+ */
62
+ export interface LastQuery extends IdentityCore {
63
+ partition: string | null;
64
+ key: string | null;
65
+ query: string;
66
+ include: string[] | null;
67
+ exclude: string[] | null;
68
+ payload: Record<string, unknown> | null;
69
+ userUniqueId: string | null;
70
+ userProviderName: string | null;
71
+ userName: string | null;
72
+ userEmail: string | null;
73
+ userRole: string | null;
74
+ userRoleUniqueId: string | null;
75
+ userRoleName: string | null;
76
+ queryString: string | null;
77
+ userAgent: string | null;
78
+ url: string | null;
79
+ path: string | null;
80
+ ipaddress: string | null;
81
+ origin: string | null;
82
+ source: string | null;
83
+ submittedAt: Date | null;
84
+ device: string | null;
85
+ browser: string | null;
86
+ hash: string | null;
87
+ elapsedTime: number | null;
88
+ startedAt: Date | null;
89
+ endedAt: Date | null;
90
+ totalRecords: number;
91
+ totalRecordsReturned: number;
92
+ queryOrigin: string | null;
93
+ }
94
+ /**
95
+ * Favorite entity (bookmarked search result)
96
+ */
97
+ export interface FavoriteEntity extends IdentityCore {
98
+ partition: string | null;
99
+ key: string | null;
100
+ weight: number;
101
+ relevance: number;
102
+ uri: string | null;
103
+ origin: string | null;
104
+ entityUniqueId: string;
105
+ entityType: string;
106
+ entityAlias: string | null;
107
+ entitySource: string | null;
108
+ entityUrl: string | null;
109
+ entityAvatarUrl: string | null;
110
+ counter: number;
111
+ favorite: boolean;
112
+ status: EntityStatus;
113
+ }
114
+ /**
115
+ * Entity type (categorization of searchable entities)
116
+ */
117
+ export interface EntityType {
118
+ id: string;
119
+ entityType: string;
120
+ entitySource: string | null;
121
+ }
122
+ /**
123
+ * Search request parameters
124
+ */
125
+ export interface SearchRequest {
126
+ query: string;
127
+ entityTypes?: string[];
128
+ include?: string[];
129
+ exclude?: string[];
130
+ limit?: number;
131
+ offset?: number;
132
+ }
133
+ /**
134
+ * Search response with results and metadata
135
+ */
136
+ export interface SearchResponse {
137
+ results: SearchResult[];
138
+ query: SearchQuery;
139
+ totalRecords: number;
140
+ elapsedTime: number;
141
+ }
142
+ /**
143
+ * Add favorite request
144
+ */
145
+ export interface AddFavoriteRequest {
146
+ entityUniqueId: string;
147
+ entityType: string;
148
+ entityAlias?: string;
149
+ entityUrl?: string;
150
+ entityAvatarUrl?: string;
151
+ }
152
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/lib/types/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Add favorite request
3
+ */ export { };
4
+
5
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/search.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\n/**\n * Search result entity\n */\nexport interface SearchResult extends IdentityCore {\n partition: string | null;\n key: string | null;\n weight: number;\n relevance: number;\n uri: string | null;\n origin: string | null;\n entityUniqueId: string;\n entityAlias: string | null;\n entityDescription: string | null;\n entityAvatarUrl: string | null;\n entityType: string;\n entitySource: string | null;\n entityUrl: string | null;\n counter: number;\n favorite: boolean;\n status: EntityStatus;\n payload: Record<string, unknown> | null;\n}\n\n/**\n * Search query (saved/executed query)\n */\nexport interface SearchQuery extends IdentityCore {\n partition: string | null;\n key: string | null;\n query: string;\n include: string[] | null;\n exclude: string[] | null;\n payload: Record<string, unknown> | null;\n userUniqueId: string | null;\n userProviderName: string | null;\n userName: string | null;\n userEmail: string | null;\n userRole: string | null;\n userRoleUniqueId: string | null;\n userRoleName: string | null;\n queryString: string | null;\n userAgent: string | null;\n url: string | null;\n path: string | null;\n ipaddress: string | null;\n origin: string | null;\n source: string | null;\n submittedAt: Date | null;\n device: string | null;\n browser: string | null;\n hash: string | null;\n elapsedTime: number | null;\n startedAt: Date | null;\n endedAt: Date | null;\n totalRecords: number;\n totalRecordsReturned: number;\n queryOrigin: string | null;\n}\n\n/**\n * Last query (recent search history)\n */\nexport interface LastQuery extends IdentityCore {\n partition: string | null;\n key: string | null;\n query: string;\n include: string[] | null;\n exclude: string[] | null;\n payload: Record<string, unknown> | null;\n userUniqueId: string | null;\n userProviderName: string | null;\n userName: string | null;\n userEmail: string | null;\n userRole: string | null;\n userRoleUniqueId: string | null;\n userRoleName: string | null;\n queryString: string | null;\n userAgent: string | null;\n url: string | null;\n path: string | null;\n ipaddress: string | null;\n origin: string | null;\n source: string | null;\n submittedAt: Date | null;\n device: string | null;\n browser: string | null;\n hash: string | null;\n elapsedTime: number | null;\n startedAt: Date | null;\n endedAt: Date | null;\n totalRecords: number;\n totalRecordsReturned: number;\n queryOrigin: string | null;\n}\n\n/**\n * Favorite entity (bookmarked search result)\n */\nexport interface FavoriteEntity extends IdentityCore {\n partition: string | null;\n key: string | null;\n weight: number;\n relevance: number;\n uri: string | null;\n origin: string | null;\n entityUniqueId: string;\n entityType: string;\n entityAlias: string | null;\n entitySource: string | null;\n entityUrl: string | null;\n entityAvatarUrl: string | null;\n counter: number;\n favorite: boolean;\n status: EntityStatus;\n}\n\n/**\n * Entity type (categorization of searchable entities)\n */\nexport interface EntityType {\n id: string;\n entityType: string;\n entitySource: string | null;\n}\n\n/**\n * Search request parameters\n */\nexport interface SearchRequest {\n query: string;\n entityTypes?: string[];\n include?: string[];\n exclude?: string[];\n limit?: number;\n offset?: number;\n}\n\n/**\n * Search response with results and metadata\n */\nexport interface SearchResponse {\n results: SearchResult[];\n query: SearchQuery;\n totalRecords: number;\n elapsedTime: number;\n}\n\n/**\n * Add favorite request\n */\nexport interface AddFavoriteRequest {\n entityUniqueId: string;\n entityType: string;\n entityAlias?: string;\n entityUrl?: string;\n entityAvatarUrl?: string;\n}\n"],"names":[],"rangeMappings":";;","mappings":"AAqJA;;CAEC,GACD,WAMC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@23blocks/block-search",
3
+ "version": "0.1.0",
4
+ "description": "Search block for 23blocks SDK - full-text search, history, favorites",
5
+ "license": "MIT",
6
+ "author": "23blocks <hello@23blocks.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/23blocks-OS/frontend-sdk.git",
10
+ "directory": "packages/block-search"
11
+ },
12
+ "homepage": "https://github.com/23blocks-OS/frontend-sdk/tree/main/packages/block-search",
13
+ "bugs": {
14
+ "url": "https://github.com/23blocks-OS/frontend-sdk/issues"
15
+ },
16
+ "keywords": [
17
+ "23blocks",
18
+ "sdk",
19
+ "search",
20
+ "full-text",
21
+ "favorites",
22
+ "history"
23
+ ],
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ "./package.json": "./package.json",
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js",
33
+ "default": "./dist/index.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "!**/*.tsbuildinfo"
39
+ ],
40
+ "nx": {
41
+ "sourceRoot": "packages/block-search/src",
42
+ "targets": {
43
+ "build": {
44
+ "executor": "@nx/js:swc",
45
+ "outputs": [
46
+ "{options.outputPath}"
47
+ ],
48
+ "options": {
49
+ "outputPath": "packages/block-search/dist",
50
+ "main": "packages/block-search/src/index.ts",
51
+ "tsConfig": "packages/block-search/tsconfig.lib.json",
52
+ "skipTypeCheck": true,
53
+ "stripLeadingPaths": true
54
+ }
55
+ }
56
+ }
57
+ },
58
+ "dependencies": {
59
+ "@23blocks/contracts": "*",
60
+ "@23blocks/jsonapi-codec": "*",
61
+ "@swc/helpers": "~0.5.11"
62
+ }
63
+ }