@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.
- package/README.md +7 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/block-search.d.ts +2 -0
- package/dist/lib/block-search.d.ts.map +1 -0
- package/dist/lib/block-search.js +5 -0
- package/dist/lib/block-search.js.map +1 -0
- package/dist/lib/mappers/index.d.ts +3 -0
- package/dist/lib/mappers/index.d.ts.map +1 -0
- package/dist/lib/mappers/index.js +4 -0
- package/dist/lib/mappers/index.js.map +1 -0
- package/dist/lib/mappers/search.mapper.d.ts +23 -0
- package/dist/lib/mappers/search.mapper.d.ts.map +1 -0
- package/dist/lib/mappers/search.mapper.js +174 -0
- package/dist/lib/mappers/search.mapper.js.map +1 -0
- package/dist/lib/mappers/utils.d.ts +21 -0
- package/dist/lib/mappers/utils.d.ts.map +1 -0
- package/dist/lib/mappers/utils.js +57 -0
- package/dist/lib/mappers/utils.js.map +1 -0
- package/dist/lib/search.block.d.ts +78 -0
- package/dist/lib/search.block.d.ts.map +1 -0
- package/dist/lib/search.block.js +62 -0
- package/dist/lib/search.block.js.map +1 -0
- package/dist/lib/services/index.d.ts +2 -0
- package/dist/lib/services/index.d.ts.map +1 -0
- package/dist/lib/services/index.js +3 -0
- package/dist/lib/services/index.js.map +1 -0
- package/dist/lib/services/search.service.d.ts +79 -0
- package/dist/lib/services/search.service.d.ts.map +1 -0
- package/dist/lib/services/search.service.js +209 -0
- package/dist/lib/services/search.service.js.map +1 -0
- package/dist/lib/types/index.d.ts +2 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/types/index.js +3 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/types/search.d.ts +152 -0
- package/dist/lib/types/search.d.ts.map +1 -0
- package/dist/lib/types/search.js +5 -0
- package/dist/lib/types/search.js.map +1 -0
- package/package.json +63 -0
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|