angular-instantsearch
Version:
Lightning-fast search for Angular apps, by Algolia.
96 lines • 16.1 kB
JavaScript
import * as algoliasearchProxy from 'algoliasearch/lite';
import * as encodeProxy from 'querystring-es3/encode';
import { VERSION as AngularVersion } from '@angular/core';
import { VERSION } from './version';
// compatibility with different typescript settings:
// - esModuleInterop
// - allowSyntheticDefaultImports
const algoliasearch = (typeof algoliasearchProxy.default === 'function'
? algoliasearchProxy.default
: algoliasearchProxy);
const encode = encodeProxy.default || encodeProxy;
export function createSSRSearchClient({ appId, apiKey, httpClient, HttpHeaders, transferState, makeStateKey, options = {}, }) {
// A custom network request needs to be done, using TransferState of Angular.
// This is done to make sure the request done backend for SSR doesn't get
// made again frontend during hydration.
// For compatibility with both v3 and v4 of algoliasearch, we are overriding the
// network request function in two places:
// v4: custom "requester"
// v3: override "_request" on the prototype
// since neither v3 uses the requester argument, and v4 use the _request, we
// can safely do this without checking the version
const searchClient = algoliasearch(appId, apiKey, Object.assign(Object.assign({}, options), { requester: {
send({ headers, method, url, data }) {
const transferStateKey = makeStateKey(`ngais(${data})`);
if (transferState.hasKey(transferStateKey)) {
const response = JSON.parse(transferState.get(transferStateKey, JSON.stringify({})));
return Promise.resolve({
status: response.status,
content: JSON.stringify(response.body),
isTimedOut: false,
});
}
return new Promise((resolve, reject) => {
httpClient
.request(method, url, {
headers,
body: data,
observe: 'response',
})
.subscribe(response => {
transferState.set(transferStateKey, JSON.stringify(response));
resolve({
status: response.status,
content: JSON.stringify(response.body),
isTimedOut: false,
});
}, response => reject({
status: response.status,
body: response.body,
}));
});
},
} }));
searchClient.addAlgoliaAgent(`angular (${AngularVersion.full})`);
searchClient.addAlgoliaAgent(`angular-instantsearch (${VERSION})`);
searchClient.addAlgoliaAgent(`angular-instantsearch-server (${VERSION})`);
searchClient._request = (rawUrl, options) => {
let headers = new HttpHeaders();
headers = headers.set('content-type', options.method === 'POST'
? 'application/x-www-form-urlencoded'
: 'application/json');
headers = headers.set('accept', 'application/json');
const url = rawUrl + (rawUrl.includes('?') ? '&' : '?') + encode(options.headers);
const transferStateKey = makeStateKey(`ngais(${options.body})`);
if (transferState.hasKey(transferStateKey)) {
const response = JSON.parse(transferState.get(transferStateKey, JSON.stringify({})));
return Promise.resolve({
statusCode: response.status,
body: response.body,
headers: response.headers,
});
}
return new Promise((resolve, reject) => {
httpClient
.request(options.method, url, {
headers,
body: options.body,
observe: 'response',
})
.subscribe(response => {
transferState.set(transferStateKey, JSON.stringify(response));
resolve({
statusCode: response.status,
body: response.body,
headers: response.headers,
});
}, response => reject({
statusCode: response.status,
body: response.body,
headers: response.headers,
}));
});
};
return searchClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNzci1zZWFyY2gtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyZWF0ZS1zc3Itc2VhcmNoLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssa0JBQWtCLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxJQUFJLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBb0JwQyxvREFBb0Q7QUFDcEQsb0JBQW9CO0FBQ3BCLGlDQUFpQztBQUNqQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxLQUFLLFVBQVU7SUFDckUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU87SUFDNUIsQ0FBQyxDQUFDLGtCQUFrQixDQUVPLENBQUM7QUFFOUIsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUM7QUFFbEQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQ3BDLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFdBQVcsRUFDWCxhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sR0FBRyxFQUFFLEdBQ1c7SUFDdkIsNkVBQTZFO0lBQzdFLHlFQUF5RTtJQUN6RSx3Q0FBd0M7SUFDeEMsZ0ZBQWdGO0lBQ2hGLDBDQUEwQztJQUMxQyx5QkFBeUI7SUFDekIsMkNBQTJDO0lBQzNDLDRFQUE0RTtJQUM1RSxrREFBa0Q7SUFDbEQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLGtDQUMzQyxPQUFPLEtBQ1YsU0FBUyxFQUFFO1lBQ1QsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO2dCQUNqQyxNQUFN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LEVBQUUsQ0FBQyxDQUFDLENBQ3hELENBQUM7WUFFRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTTtnQkFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87YUFDMUIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLFVBQVU7aUJBQ1AsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUM1QixPQUFPO2dCQUNQLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxFQUFFLFVBQVU7YUFDcEIsQ0FBQztpQkFDRCxTQUFTLENBQ1IsUUFBUSxDQUFDLEVBQUU7Z0JBQ1QsYUFBYSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBRTlELE9BQU8sQ0FBQztvQkFDTixVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQzNCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDLEVBQ0QsUUFBUSxDQUFDLEVBQUUsQ0FDVCxNQUFNLENBQUM7Z0JBQ0wsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTzthQUMxQixDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFsZ29saWFzZWFyY2hQcm94eSBmcm9tICdhbGdvbGlhc2VhcmNoL2xpdGUnO1xuaW1wb3J0ICogYXMgZW5jb2RlUHJveHkgZnJvbSAncXVlcnlzdHJpbmctZXMzL2VuY29kZSc7XG5pbXBvcnQgeyBWRVJTSU9OIGFzIEFuZ3VsYXJWZXJzaW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRyYW5zZmVyU3RhdGUsIFN0YXRlS2V5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnLi92ZXJzaW9uJztcblxudHlwZSBTU1JTZWFyY2hDbGllbnRPcHRpb25zID0ge1xuICBhcHBJZDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcbiAgSHR0cEhlYWRlcnM6IHR5cGVvZiBIdHRwSGVhZGVycztcbiAgdHJhbnNmZXJTdGF0ZTogVHJhbnNmZXJTdGF0ZTtcbiAgb3B0aW9ucz86IG9iamVjdDtcbiAgbWFrZVN0YXRlS2V5PFQgPSB2b2lkPihrZXk6IHN0cmluZyk6IFN0YXRlS2V5PFQ+O1xufTtcblxudHlwZSBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgLy8gQWxnb2xpYSBvbmx5IHVzZXMgR0VUIGFuZCBQT1NUIG1ldGhvZHMgZm9yIHNlYXJjaGluZy5cbiAgLy8gU2VlOiBodHRwczovL3d3dy5hbGdvbGlhLmNvbS9kb2MvcmVzdC1hcGkvc2VhcmNoLyNzZWFyY2gtZW5kcG9pbnRzXG4gIG1ldGhvZDogJ0dFVCcgfCAnUE9TVCc7XG4gIGhlYWRlcnM6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xufTtcblxuLy8gY29tcGF0aWJpbGl0eSB3aXRoIGRpZmZlcmVudCB0eXBlc2NyaXB0IHNldHRpbmdzOlxuLy8gLSBlc01vZHVsZUludGVyb3Bcbi8vIC0gYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0c1xuY29uc3QgYWxnb2xpYXNlYXJjaCA9ICh0eXBlb2YgYWxnb2xpYXNlYXJjaFByb3h5LmRlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgPyBhbGdvbGlhc2VhcmNoUHJveHkuZGVmYXVsdFxuICA6IGFsZ29saWFzZWFyY2hQcm94eSkgYXMgdHlwZW9mIGFsZ29saWFzZWFyY2hQcm94eS5kZWZhdWx0IGV4dGVuZHMgRnVuY3Rpb25cbiAgPyB0eXBlb2YgYWxnb2xpYXNlYXJjaFByb3h5LmRlZmF1bHRcbiAgOiB0eXBlb2YgYWxnb2xpYXNlYXJjaFByb3h5O1xuXG5jb25zdCBlbmNvZGUgPSBlbmNvZGVQcm94eS5kZWZhdWx0IHx8IGVuY29kZVByb3h5O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU1NSU2VhcmNoQ2xpZW50KHtcbiAgYXBwSWQsXG4gIGFwaUtleSxcbiAgaHR0cENsaWVudCxcbiAgSHR0cEhlYWRlcnMsXG4gIHRyYW5zZmVyU3RhdGUsXG4gIG1ha2VTdGF0ZUtleSxcbiAgb3B0aW9ucyA9IHt9LFxufTogU1NSU2VhcmNoQ2xpZW50T3B0aW9ucykge1xuICAvLyBBIGN1c3RvbSBuZXR3b3JrIHJlcXVlc3QgbmVlZHMgdG8gYmUgZG9uZSwgdXNpbmcgVHJhbnNmZXJTdGF0ZSBvZiBBbmd1bGFyLlxuICAvLyBUaGlzIGlzIGRvbmUgdG8gbWFrZSBzdXJlIHRoZSByZXF1ZXN0IGRvbmUgYmFja2VuZCBmb3IgU1NSIGRvZXNuJ3QgZ2V0XG4gIC8vIG1hZGUgYWdhaW4gZnJvbnRlbmQgZHVyaW5nIGh5ZHJhdGlvbi5cbiAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBib3RoIHYzIGFuZCB2NCBvZiBhbGdvbGlhc2VhcmNoLCB3ZSBhcmUgb3ZlcnJpZGluZyB0aGVcbiAgLy8gbmV0d29yayByZXF1ZXN0IGZ1bmN0aW9uIGluIHR3byBwbGFjZXM6XG4gIC8vIHY0OiBjdXN0b20gXCJyZXF1ZXN0ZXJcIlxuICAvLyB2Mzogb3ZlcnJpZGUgXCJfcmVxdWVzdFwiIG9uIHRoZSBwcm90b3R5cGVcbiAgLy8gc2luY2UgbmVpdGhlciB2MyB1c2VzIHRoZSByZXF1ZXN0ZXIgYXJndW1lbnQsIGFuZCB2NCB1c2UgdGhlIF9yZXF1ZXN0LCB3ZVxuICAvLyBjYW4gc2FmZWx5IGRvIHRoaXMgd2l0aG91dCBjaGVja2luZyB0aGUgdmVyc2lvblxuICBjb25zdCBzZWFyY2hDbGllbnQgPSBhbGdvbGlhc2VhcmNoKGFwcElkLCBhcGlLZXksIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHJlcXVlc3Rlcjoge1xuICAgICAgc2VuZCh7IGhlYWRlcnMsIG1ldGhvZCwgdXJsLCBkYXRhIH0pIHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJTdGF0ZUtleSA9IG1ha2VTdGF0ZUtleTxzdHJpbmc+KGBuZ2Fpcygke2RhdGF9KWApO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlclN0YXRlLmhhc0tleSh0cmFuc2ZlclN0YXRlS2V5KSkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgIHRyYW5zZmVyU3RhdGUuZ2V0KHRyYW5zZmVyU3RhdGVLZXksIEpTT04uc3RyaW5naWZ5KHt9KSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmJvZHkpLFxuICAgICAgICAgICAgaXNUaW1lZE91dDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGh0dHBDbGllbnRcbiAgICAgICAgICAgIC5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7XG4gICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRyYW5zZmVyU3RhdGUuc2V0KHRyYW5zZmVyU3RhdGVLZXksIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSk7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuYm9keSksXG4gICAgICAgICAgICAgICAgICBpc1RpbWVkT3V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZS5ib2R5LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgc2VhcmNoQ2xpZW50LmFkZEFsZ29saWFBZ2VudChgYW5ndWxhciAoJHtBbmd1bGFyVmVyc2lvbi5mdWxsfSlgKTtcbiAgc2VhcmNoQ2xpZW50LmFkZEFsZ29saWFBZ2VudChgYW5ndWxhci1pbnN0YW50c2VhcmNoICgke1ZFUlNJT059KWApO1xuICBzZWFyY2hDbGllbnQuYWRkQWxnb2xpYUFnZW50KGBhbmd1bGFyLWluc3RhbnRzZWFyY2gtc2VydmVyICgke1ZFUlNJT059KWApO1xuXG4gIChzZWFyY2hDbGllbnQgYXMgYW55KS5fcmVxdWVzdCA9IChcbiAgICByYXdVcmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9uc1xuICApID0+IHtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KFxuICAgICAgJ2NvbnRlbnQtdHlwZScsXG4gICAgICBvcHRpb25zLm1ldGhvZCA9PT0gJ1BPU1QnXG4gICAgICAgID8gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgICAgOiAnYXBwbGljYXRpb24vanNvbidcbiAgICApO1xuXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdhY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgY29uc3QgdXJsID1cbiAgICAgIHJhd1VybCArIChyYXdVcmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBlbmNvZGUob3B0aW9ucy5oZWFkZXJzKTtcblxuICAgIGNvbnN0IHRyYW5zZmVyU3RhdGVLZXkgPSBtYWtlU3RhdGVLZXk8c3RyaW5nPihgbmdhaXMoJHtvcHRpb25zLmJvZHl9KWApO1xuXG4gICAgaWYgKHRyYW5zZmVyU3RhdGUuaGFzS2V5KHRyYW5zZmVyU3RhdGVLZXkpKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoXG4gICAgICAgIHRyYW5zZmVyU3RhdGUuZ2V0KHRyYW5zZmVyU3RhdGVLZXksIEpTT04uc3RyaW5naWZ5KHt9KSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaHR0cENsaWVudFxuICAgICAgICAucmVxdWVzdChvcHRpb25zLm1ldGhvZCwgdXJsLCB7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLmJvZHksXG4gICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0cmFuc2ZlclN0YXRlLnNldCh0cmFuc2ZlclN0YXRlS2V5LCBKU09OLnN0cmluZ2lmeShyZXNwb25zZSkpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICBib2R5OiByZXNwb25zZS5ib2R5LFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZSA9PlxuICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICBib2R5OiByZXNwb25zZS5ib2R5LFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gc2VhcmNoQ2xpZW50O1xufVxuIl19