diff --git a/assets/data/cdn/jsdelivr.yml b/assets/data/cdn/jsdelivr.yml index 31f6d51d..725fea5e 100644 --- a/assets/data/cdn/jsdelivr.yml +++ b/assets/data/cdn/jsdelivr.yml @@ -7,7 +7,7 @@ prefix: simpleIcons: https://cdn.jsdelivr.net/npm/simple-icons@16.22.0/icons/ libFiles: # algoliasearch@5.53.0 https://github.com/algolia/algoliasearch-client-javascript - algoliasearchJS: algoliasearch@5.53.0/dist/algoliasearch-lite.umd.min.js + algoliasearchJS: algoliasearch@5.53.0/dist/lite/builds/browser.umd.js # animate.css@4.1.1 https://github.com/daneden/animate.css animateCSS: animate.css@4.1.1/animate.min.css # aplayer@1.10.1 https://github.com/MoePlayer/APlayer diff --git a/assets/data/cdn/unpkg.yml b/assets/data/cdn/unpkg.yml index 75b12bd3..2d3274c5 100644 --- a/assets/data/cdn/unpkg.yml +++ b/assets/data/cdn/unpkg.yml @@ -7,7 +7,7 @@ prefix: simpleIcons: https://unpkg.com/simple-icons@16.22.0/icons/ libFiles: # algoliasearch@5.53.0 https://github.com/algolia/algoliasearch-client-javascript - algoliasearchJS: algoliasearch@5.53.0/dist/algoliasearch-lite.umd.js + algoliasearchJS: algoliasearch@5.53.0/dist/lite/builds/browser.umd.js # animate.css@4.1.1 https://github.com/daneden/animate.css animateCSS: animate.css@4.1.1/animate.min.css # aplayer@1.10.1 https://github.com/MoePlayer/APlayer diff --git a/assets/js/modules/search.ts b/assets/js/modules/search.ts index c7da1d40..14462e94 100644 --- a/assets/js/modules/search.ts +++ b/assets/js/modules/search.ts @@ -177,12 +177,37 @@ export class SearchModule implements SearchService { callback(results) } if (searchConfig.type === 'algolia') { - this.#algoliaIndex - = this.#algoliaIndex - || window.algoliasearch!( - searchConfig.algoliaAppID, - searchConfig.algoliaSearchKey, - ).initIndex(searchConfig.algoliaIndex) + if (!this.#algoliaIndex) { + // Algolia v5 lite UMD exposes window['algoliasearch/lite'].liteClient. + const liteClient = (window as any)['algoliasearch/lite']?.liteClient + if (!liteClient) { + console.error('Algolia client is not available on window') + finish([]) + return + } + const client = liteClient(searchConfig.algoliaAppID, searchConfig.algoliaSearchKey) + this.#algoliaIndex = { + search: (queryText: string, params: Record = {}) => { + const { + offset, + length, + ...rest + } = params + const request: Record = { + indexName: searchConfig.algoliaIndex, + query: queryText, + ...rest, + } + if (typeof length === 'number') + request.hitsPerPage = length + if (typeof offset === 'number' && typeof length === 'number' && length > 0) + request.page = Math.floor(offset / length) + return client + .search({ requests: [request] }) + .then((response: any) => ({ hits: response.results?.[0]?.hits ?? [] })) + }, + } + } this.#algoliaIndex .search(query, { offset: 0, diff --git a/assets/js/types/ui.ts b/assets/js/types/ui.ts index 8d003db1..6f432238 100644 --- a/assets/js/types/ui.ts +++ b/assets/js/types/ui.ts @@ -36,44 +36,44 @@ declare global { interface Window { // Third-party libraries - autocomplete?: any - algoliasearch?: any - Artalk?: any - APlayer?: any - CellTooltip?: any - cookieconsent?: any - CryptoJS?: any - echarts?: any - Fuse?: any - Gitalk?: any - JsonViewerElement?: any - lgThumbnail?: any - lgZoom?: any - lightGallery?: any - mapboxgl?: any - MapboxLanguage?: any - MathJax?: any - objectFitImages?: () => void - pangu?: any - postChatUser?: any - postChatConfig?: any - postChat_theme?: string - twemoji?: any - twikoo?: any - TypeIt?: any - Valine?: any - Waline?: any - Watermark?: any - xxhash?: any - Panzoom?: (element: SVGElement, options?: Record) => PanzoomInstance + 'autocomplete'?: any + 'algoliasearch/lite'?: { liteClient: (...args: any[]) => any } + 'Artalk'?: any + 'APlayer'?: any + 'CellTooltip'?: any + 'cookieconsent'?: any + 'CryptoJS'?: any + 'echarts'?: any + 'Fuse'?: any + 'Gitalk'?: any + 'JsonViewerElement'?: any + 'lgThumbnail'?: any + 'lgZoom'?: any + 'lightGallery'?: any + 'mapboxgl'?: any + 'MapboxLanguage'?: any + 'MathJax'?: any + 'objectFitImages'?: () => void + 'pangu'?: any + 'postChatUser'?: any + 'postChatConfig'?: any + 'postChat_theme'?: string + 'twemoji'?: any + 'twikoo'?: any + 'TypeIt'?: any + 'Valine'?: any + 'Waline'?: any + 'Watermark'?: any + 'xxhash'?: any + 'Panzoom'?: (element: SVGElement, options?: Record) => PanzoomInstance // FixIt theme - fixit: FixItPublicAPI - config: FixItConfig - mermaid?: MermaidRuntimeModule - _fuseIndex?: any - _searchMobile?: any - _searchDesktop?: any - FixItDecryptor?: any + 'fixit': FixItPublicAPI + 'config': FixItConfig + 'mermaid'?: MermaidRuntimeModule + '_fuseIndex'?: any + '_searchMobile'?: any + '_searchDesktop'?: any + 'FixItDecryptor'?: any } } diff --git a/assets/lib/algoliasearch/algoliasearch-lite.umd.min.js b/assets/lib/algoliasearch/algoliasearch-lite.umd.min.js deleted file mode 100644 index bb6f8d62..00000000 --- a/assets/lib/algoliasearch/algoliasearch-lite.umd.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Skipped minification because the original files appears to be already minified. - * Original file: /npm/algoliasearch@4.20.0/dist/algoliasearch-lite.umd.js - * - * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - */ -/*! algoliasearch-lite.umd.js | 4.20.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).algoliasearch=t()}(this,(function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,o=!1,a=void 0;try{for(var u,i=e[Symbol.iterator]();!(n=(u=i.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(o)throw a}}return r}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){i();var t=JSON.stringify(e);return a()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=o(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var o=a();return o[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(o)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function i(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=t();return n.then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,o).catch((function(){return i({caches:t}).get(e,n,o)}))},set:function(e,n){return r.set(e,n).catch((function(){return i({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return i({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return i({caches:t}).clear()}))}}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var u=n(),i=o&&o.miss||function(){return Promise.resolve()};return u.then((function(e){return i(e)})).then((function(){return u}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function c(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function l(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function b(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var O="GET",P="POST";function q(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),o=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:o.length>0?o.map((function(e){return b(e)})):t}}))}function j(e,t,n,o){var u=[],i=function(e,t){if(e.method===O||void 0===e.data&&void 0===t.data)return;var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}(n,o),s=function(e,t){var n=r(r({},e.headers),t.headers),o={};return Object.keys(n).forEach((function(e){var t=n[e];o[e.toLowerCase()]=t})),o}(e,o),c=n.method,l=n.method!==O?{}:r(r({},n.data),o.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),l),o.queryParameters),m=0,h=function t(r,a){var l=r.pop();if(void 0===l)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:A(u)};var h={data:i,headers:s,method:c,url:S(l,n.path,f),connectTimeout:a(m,e.timeouts.connect),responseTimeout:a(m,o.timeout)},d=function(e){var t={request:h,response:e,host:l,triesLeft:r.length};return u.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var o=d(n);return n.isTimedOut&&m++,Promise.all([e.logger.info("Retryable failure",N(o)),e.hostsCache.set(l,y(l,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,o=r;try{o=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(o,n,t)}(e,A(u))}};return e.requester.send(h).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return q(e.hostsCache,t).then((function(e){return h(a(e.statelessHosts).reverse(),e.getTimeout)}))}function w(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function S(e,t,r){var n=T(r),o="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(o+="?".concat(n)),o}function T(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function A(e){return e.map((function(e){return N(e)}))}function N(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var x=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===m.WithinHeaders?n:{}},queryParameters:function(){return e===m.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:m.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,u=e.responsesCache,i=e.timeouts,s=e.userAgent,c=e.hosts,l=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:u,timeouts:i,userAgent:s,headers:e.headers,queryParameters:l,hosts:c.map((function(e){return b(e)})),read:function(e,t){var r=h(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=o(e,2);t[0];return t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,h(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(c([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return l({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},C=function(e){return function(t,r){return t.method===O?e.transporter.read(t,r):e.transporter.write(t,r)}},E=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:e.transporter,appId:e.appId,indexName:t};return l(n,r.methods)}},J=function(e){return function(t,n){var o=t.map((function(e){return r(r({},e),{},{params:T(e.params||{})})}));return e.transporter.read({method:P,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},n)}},k=function(e){return function(t,o){return Promise.all(t.map((function(t){var a=t.params,u=a.facetName,i=a.facetQuery,s=n(a,["facetName","facetQuery"]);return E(e)(t.indexName,{methods:{searchForFacetValues:R}}).searchForFacetValues(u,i,r(r({},o),s))})))}},I=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},F=function(e){return function(t,r){return e.transporter.read({method:P,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},R=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,W=2,H=3;function Q(e,t,n){var o,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,o=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=o(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=o(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(o=H,{debug:function(e,t){return D>=o&&console.debug(e,t),Promise.resolve()},info:function(e,t){return W>=o&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:i({caches:[u({key:"".concat("4.20.0","-").concat(e)}),s()]}),userAgent:w("4.20.0").add({segment:"Browser",version:"lite"}),authMode:m.WithinQueryParameters};return x(r(r(r({},a),n),{},{methods:{search:J,searchForFacetValues:k,multipleQueries:J,multipleSearchForFacetValues:k,customRequest:C,initIndex:function(e){return function(t){return E(e)(t,{methods:{search:F,searchForFacetValues:R,findAnswers:I}})}}}}))}return Q.version="4.20.0",Q})); diff --git a/assets/lib/algoliasearch/browser.umd.js b/assets/lib/algoliasearch/browser.umd.js new file mode 100644 index 00000000..fa40b359 --- /dev/null +++ b/assets/lib/algoliasearch/browser.umd.js @@ -0,0 +1,12 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["algoliasearch/lite"] = {})); +})(this, (function (exports) { 'use strict'; + + function z(r){let e,o=`algolia-client-js-${r.key}`;function t(){return e===void 0&&(e=r.localStorage||window.localStorage),e}function a(){return JSON.parse(t().getItem(o)||"{}")}function c(n){t().setItem(o,JSON.stringify(n));}function i(){return new Promise(n=>setTimeout(n,0))}function s(){let n=r.timeToLive?r.timeToLive*1e3:null,l=a(),f=new Date().getTime(),h=false;return {namespace:Object.fromEntries(Object.entries(l).filter(([,x])=>!x||x.timestamp===void 0||n&&x.timestamp+nPromise.resolve()}){return i().then(()=>{let{namespace:h,changed:y}=s(),x=h[JSON.stringify(n)];return y&&c(h),x?x.value:l().then(P=>f.miss(P).then(()=>P))})},set(n,l){return i().then(()=>{let f=a();return f[JSON.stringify(n)]={timestamp:new Date().getTime(),value:l},t().setItem(o,JSON.stringify(f)),l})},delete(n){return i().then(()=>{let l=a();delete l[JSON.stringify(n)],t().setItem(o,JSON.stringify(l));})},clear(){return Promise.resolve().then(()=>{t().removeItem(o);})}}}function te(){return {get(r,e,o={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,o.miss(a)])).then(([a])=>a)},set(r,e){return Promise.resolve(e)},delete(r){return Promise.resolve()},clear(){return Promise.resolve()}}}function R(r){let e=[...r.caches],o=e.shift();return o===void 0?te():{get(t,a,c={miss:()=>Promise.resolve()}){return o.get(t,a,c).catch(()=>R({caches:e}).get(t,a,c))},set(t,a){return o.set(t,a).catch(()=>R({caches:e}).set(t,a))},delete(t){return o.delete(t).catch(()=>R({caches:e}).delete(t))},clear(){return o.clear().catch(()=>R({caches:e}).clear())}}}function b(r={serializable:true}){let e={};return {get(o,t,a={miss:()=>Promise.resolve()}){let c=JSON.stringify(o);if(c in e)return Promise.resolve(r.serializable?JSON.parse(e[c]):e[c]);let i=t();return i.then(s=>a.miss(s)).then(()=>i)},set(o,t){return e[JSON.stringify(o)]=r.serializable?JSON.stringify(t):t,Promise.resolve(t)},delete(o){return delete e[JSON.stringify(o)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}function oe(r){let e={value:`Algolia for JavaScript (${r})`,add(o){let t=`; ${o.segment}${o.version!==void 0?` (${o.version})`:""}`;return e.value.indexOf(t)===-1&&(e.value=`${e.value}${t}`),e}};return e}function J(r,e,o="WithinHeaders"){let t={"x-algolia-api-key":e,"x-algolia-application-id":r};return {headers(){return o==="WithinHeaders"?t:{}},queryParameters(){return o==="WithinQueryParameters"?t:{}}}}function j({algoliaAgents:r,client:e,version:o}){let t=oe(o).add({segment:e,version:o});return r.forEach(a=>t.add(a)),t}function G(){return {debug(r,e){return Promise.resolve()},info(r,e){return Promise.resolve()},error(r,e){return Promise.resolve()}}}var ae=750,M=120*1e3;function W(r,e="up"){let o=Date.now();function t(){return e==="up"||Date.now()-o>M}function a(){return e==="timed out"&&Date.now()-o<=M}return {...r,status:e,lastUpdate:o,isUp:t,isTimedOut:a}}var Q=class extends Error{name="AlgoliaError";constructor(r,e){super(r),e&&(this.name=e);}};var B=class extends Q{stackTrace;constructor(r,e,o){super(r,o),this.stackTrace=e;}},se=class extends B{constructor(r){super("Unreachable hosts - your application id may be incorrect. If the error persists, please visit our help center https://alg.li/support-unreachable-hosts or reach out to the Algolia Support team: https://alg.li/support",r,"RetryError");}},D=class extends B{status;constructor(r,e,o,t="ApiError"){super(r,o,t),this.status=e;}},ne=class extends Q{response;constructor(r,e){super(r,"DeserializationError"),this.response=e;}},ie=class extends D{error;constructor(r,e,o,t){super(r,e,t,"DetailedApiError"),this.error=o;}};function V(r){let e=r;for(let o=r.length-1;o>0;o--){let t=Math.floor(Math.random()*(o+1)),a=r[o];e[o]=r[t],e[t]=a;}return e}function ce(r,e,o){let t=me(o),a=`${r.protocol}://${r.url}${r.port?`:${r.port}`:""}/${e.charAt(0)==="/"?e.substring(1):e}`;return t.length&&(a+=`?${t}`),a}function me(r){return Object.keys(r).filter(e=>r[e]!==void 0).sort().map(e=>`${e}=${encodeURIComponent(Object.prototype.toString.call(r[e])==="[object Array]"?r[e].join(","):r[e]).replace(/\+/g,"%20")}`).join("&")}function ue(r,e){if(r.method==="GET"||r.data===void 0&&e.data===void 0)return;let o=Array.isArray(r.data)?r.data:{...r.data,...e.data};return JSON.stringify(o)}function le(r,e,o){let t={Accept:"application/json",...r,...e,...o},a={};return Object.keys(t).forEach(c=>{let i=t[c];a[c.toLowerCase()]=i;}),a}function pe(r){try{return JSON.parse(r.content)}catch(e){throw new ne(e.message,r)}}function fe({content:r,status:e},o){try{let t=JSON.parse(r);return "error"in t?new ie(t.message,e,t.error,o):new D(t.message,e,o)}catch{}return new D(r,e,o)}function de({isTimedOut:r,status:e}){return !r&&~~e===0}function he({isTimedOut:r,status:e}){return r||de({isTimedOut:r,status:e})||~~(e/100)!==2&&~~(e/100)!==4}function xe({status:r}){return ~~(r/100)===2}function ge(r){return r.map(e=>X(e))}function X(r){let e=r.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return {...r,request:{...r.request,headers:{...r.request.headers,...e}}}}function K({hosts:r,hostsCache:e,baseHeaders:o,logger:t,baseQueryParameters:a,algoliaAgent:c,timeouts:i,requester:s,requestsCache:n,responsesCache:l,compress:f,compression:h}){async function y(m){let p=await Promise.all(m.map(u=>e.get(u,()=>Promise.resolve(W(u))))),w=p.filter(u=>u.isUp()),T=p.filter(u=>u.isTimedOut()),v=[...w,...T];return {hosts:v.length>0?v:m,getTimeout(u,S){return (T.length===0&&u===0?1:T.length+3+u)*S}}}async function x(m,p,w){let T=[],v=ue(m,p),g=le(o,m.headers,p.headers),u=h==="gzip"&&v!==void 0&&v.length>ae&&(m.method==="POST"||m.method==="PUT");u&&f===void 0&&t.info("Compression is disabled because no compress method is available.");let S=u&&f!==void 0,$=S?await f(v):v;S&&(g["content-encoding"]="gzip");let ee=m.method==="GET"?{...m.data,...p.data}:{},O={...a,...m.queryParameters,...ee};if(c.value&&(O["x-algolia-agent"]=c.value),p&&p.queryParameters)for(let d of Object.keys(p.queryParameters))!p.queryParameters[d]||Object.prototype.toString.call(p.queryParameters[d])==="[object Object]"?O[d]=p.queryParameters[d]:O[d]=p.queryParameters[d].toString();let C=0,I=async(d,N)=>{let A=d.pop();if(A===void 0)throw new se(ge(T));let L={...i,...p.timeouts},H={data:$,headers:g,method:m.method,url:ce(A,m.path,O),connectTimeout:N(C,L.connect),responseTimeout:N(C,w?L.read:L.write)},k=_=>{let U={request:H,response:_,host:A,triesLeft:d.length};return T.push(U),U},E=await s.send(H);if(he(E)){let _=k(E);return E.isTimedOut&&C++,t.info("Retryable failure",X(_)),await e.set(A,W(A,E.isTimedOut?"timed out":"down")),I(d,N)}if(xe(E))return pe(E);throw k(E),fe(E,T)},re=r.filter(d=>d.accept==="readWrite"||(w?d.accept==="read":d.accept==="write")),F=await y(re);return I([...F.hosts].reverse(),F.getTimeout)}function P(m,p={}){let w=()=>x(m,p,T),T=m.useReadTransporter||m.method==="GET";if((p.cacheable||m.cacheable)!==true)return w();let g={request:m,requestOptions:p,transporter:{queryParameters:a,headers:o}};return l.get(g,()=>n.get(g,()=>n.set(g,w()).then(u=>Promise.all([n.delete(g),u]),u=>Promise.all([n.delete(g),Promise.reject(u)])).then(([u,S])=>S)),{miss:u=>l.set(g,u)})}return {hostsCache:e,requester:s,timeouts:i,logger:t,algoliaAgent:c,baseHeaders:o,baseQueryParameters:a,hosts:r,request:P,requestsCache:n,responsesCache:l}}function Y(){function r(e){return new Promise(o=>{let t=new XMLHttpRequest;t.open(e.method,e.url,true),Object.keys(e.headers).forEach(s=>t.setRequestHeader(s,e.headers[s]));let a=(s,n)=>setTimeout(()=>{t.abort(),o({status:0,content:n,isTimedOut:true});},s),c=a(e.connectTimeout,"Connection timeout"),i;t.onreadystatechange=()=>{t.readyState>t.OPENED&&i===void 0&&(clearTimeout(c),i=a(e.responseTimeout,"Socket timeout"));},t.onerror=()=>{t.status===0&&(clearTimeout(c),clearTimeout(i),o({content:t.responseText||"Network request failed",status:t.status,isTimedOut:false}));},t.onload=()=>{clearTimeout(c),clearTimeout(i),o({content:t.responseText,status:t.status,isTimedOut:false});},t.send(e.data);})}return {send:r}}var q="5.53.0";function ye(r){return [{url:`${r}-dsn.algolia.net`,accept:"read",protocol:"https"},{url:`${r}.algolia.net`,accept:"write",protocol:"https"}].concat(V([{url:`${r}-1.algolianet.com`,accept:"readWrite",protocol:"https"},{url:`${r}-2.algolianet.com`,accept:"readWrite",protocol:"https"},{url:`${r}-3.algolianet.com`,accept:"readWrite",protocol:"https"}]))}function Z({appId:r,apiKey:e,authMode:o,algoliaAgents:t,...a}){let c=J(r,e,o),i=K({hosts:ye(r),...a,algoliaAgent:j({algoliaAgents:t,client:"Lite",version:q}),baseHeaders:{"content-type":"text/plain",...c.headers(),...a.baseHeaders},baseQueryParameters:{...c.queryParameters(),...a.baseQueryParameters}});return {transporter:i,appId:r,apiKey:e,clearCache(){return Promise.all([i.requestsCache.clear(),i.responsesCache.clear()]).then(()=>{})},get _ua(){return i.algoliaAgent.value},addAlgoliaAgent(s,n){i.algoliaAgent.add({segment:s,version:n});},setClientApiKey({apiKey:s}){!o||o==="WithinHeaders"?i.baseHeaders["x-algolia-api-key"]=s:i.baseQueryParameters["x-algolia-api-key"]=s;},searchForHits(s,n){return this.search(s,n)},searchForFacets(s,n){return this.search(s,n)},customPost({path:s,parameters:n,body:l},f){if(!s)throw new Error("Parameter `path` is required when calling `customPost`.");let P={method:"POST",path:"/{path}".replace("{path}",s),queryParameters:n||{},headers:{},data:l||{}};return i.request(P,f)},getRecommendations(s,n){if(s&&Array.isArray(s)&&(s={requests:s}),!s)throw new Error("Parameter `getRecommendationsParams` is required when calling `getRecommendations`.");if(!s.requests)throw new Error("Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.");let y={method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:s,useReadTransporter:true,cacheable:true};return i.request(y,n)},search(s,n){if(s&&Array.isArray(s)&&(s={requests:s.map(({params:P,...m})=>m.type==="facet"?{...m,...P,type:"facet"}:{...m,...P,facet:void 0,maxFacetHits:void 0,facetQuery:void 0})}),!s)throw new Error("Parameter `searchMethodParams` is required when calling `search`.");if(!s.requests)throw new Error("Parameter `searchMethodParams.requests` is required when calling `search`.");let y={method:"POST",path:"/1/indexes/*/queries",queryParameters:{},headers:{},data:s,useReadTransporter:true,cacheable:true};return i.request(y,n)}}}function no(r,e,o){if(!r||typeof r!="string")throw new Error("`appId` is missing.");if(!e||typeof e!="string")throw new Error("`apiKey` is missing.");let{compression:t,...a}=o||{};return Z({appId:r,apiKey:e,timeouts:{connect:1e3,read:2e3,write:3e4},logger:G(),requester:Y(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:b(),requestsCache:b({serializable:false}),hostsCache:R({caches:[z({key:`${q}-${r}`}),b()]}),...a})} + + exports.apiClientVersion = q; + exports.liteClient = no; + +})); diff --git a/layouts/_partials/base/assets.html b/layouts/_partials/base/assets.html index 58433099..27d71f90 100644 --- a/layouts/_partials/base/assets.html +++ b/layouts/_partials/base/assets.html @@ -35,7 +35,7 @@ {{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}} {{- $config = dict "maxResultLength" $search.maxResultLength "snippetLength" $search.snippetLength "highlightTag" $search.highlightTag "noResultsFound" (T "assets.noResultsFound") | dict "search" | merge $config -}} {{- if eq $search.type "algolia" -}} - {{- $source := $cdn.algoliasearchJS | default "lib/algoliasearch/algoliasearch-lite.umd.min.js" -}} + {{- $source := $cdn.algoliasearchJS | default "lib/algoliasearch/browser.umd.js" -}} {{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}} {{- $config = dict "type" "algolia" "algoliaIndex" $search.algolia.index "algoliaAppID" $search.algolia.appID "algoliaSearchKey" $search.algolia.searchKey | dict "search" | merge $config -}} {{- else if eq $search.type "fuse" -}} diff --git a/layouts/_partials/init/index.html b/layouts/_partials/init/index.html index b69de23b..6ac704ef 100644 --- a/layouts/_partials/init/index.html +++ b/layouts/_partials/init/index.html @@ -1,4 +1,4 @@ -{{- hugo.Store.Set "version" "v1.0.0-mq7w5yzw" -}} +{{- hugo.Store.Set "version" "v1.0.0-mq8yc9xg" -}} {{- .Store.Set "this" dict -}} {{- partial "init/detection-env.html" . -}} diff --git a/librarybot.yml b/librarybot.yml index 3b3b1d9d..2c3c458a 100644 --- a/librarybot.yml +++ b/librarybot.yml @@ -3,6 +3,10 @@ baseDir: assets/lib libraries: - npm: algoliasearch version: 5.53.0 + local: + items: + - from: dist/lite/builds/browser.umd.js + to: algoliasearch/browser.umd.js - npm: animate.css version: 4.1.1 local: @@ -63,8 +67,8 @@ libraries: version: 7.3.0 local: items: - - from: dist/fuse.cjs - to: fuse/fuse.js + - from: dist/fuse.min.js + to: fuse/fuse.min.js - npm: gitalk version: 1.8.0 local: