Skip to content

Commit 2e7f208

Browse files
authored
feat(javascript): add cache layer (#274)
1 parent 7c07d99 commit 2e7f208

27 files changed

+820
-69
lines changed

.github/actions/cache/action.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ runs:
153153
key: |
154154
${{ env.CACHE_VERSION }}-${{
155155
hashFiles(
156-
'clients/algoliasearch-client-javascript/packages/client-common/**'
156+
'clients/algoliasearch-client-javascript/packages/client-common/src/**'
157157
)}}
158158
159159
- name: Restore built JavaScript node requester
@@ -164,7 +164,7 @@ runs:
164164
key: |
165165
${{ env.CACHE_VERSION }}-${{
166166
hashFiles(
167-
'clients/algoliasearch-client-javascript/packages/requester-node-http/**'
167+
'clients/algoliasearch-client-javascript/packages/requester-node-http/src/**'
168168
)}}
169169
170170
- name: Restore built JavaScript browser requester
@@ -175,7 +175,7 @@ runs:
175175
key: |
176176
${{ env.CACHE_VERSION }}-${{
177177
hashFiles(
178-
'clients/algoliasearch-client-javascript/packages/requester-browser-xhr/**'
178+
'clients/algoliasearch-client-javascript/packages/requester-browser-xhr/src/**'
179179
)}}
180180
181181
# Restore JavaScript clients: used during 'cts' or 'codegen'

.github/actions/setup/action.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ runs:
5858
echo "::set-output name=JS_CLIENT_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript | wc -l)"
5959
echo "::set-output name=JS_ALGOLIASEARCH_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript/packages/algoliasearch clients/algoliasearch-client-javascript/packages/client-search clients/algoliasearch-client-javascript/packages/client-analytics clients/algoliasearch-client-javascript/packages/client-personalization | wc -l)"
6060
echo "::set-output name=JS_COMMON_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript/packages/client-common clients/algoliasearch-client-javascript/packages/requester-browser-xhr clients/algoliasearch-client-javascript/packages/requester-node-http | wc -l)"
61+
echo "::set-output name=JS_COMMON_TESTS_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript/packages/client-common/src/__tests__ | wc -l)"
6162
echo "::set-output name=JS_TEMPLATE_CHANGED::$(git diff --shortstat $origin..HEAD -- templates/javascript | wc -l)"
6263
6364
echo "::set-output name=JAVA_CLIENT_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-java-2 | wc -l)"
@@ -208,6 +209,10 @@ outputs:
208209
description: The generated `client-php` matrix
209210
value: ${{ steps.php-matrix.outputs.MATRIX }}
210211

212+
RUN_JS_TESTS:
213+
description: Determine if the `client_javascript_tests` job should run
214+
value: ${{ steps.diff.outputs.JS_COMMON_TESTS_CHANGED > 0 }}
215+
211216
RUN_CTS:
212217
description: Determine if the `cts` job should run
213218
value: ${{

.github/workflows/check.yml

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ jobs:
3636
RUN_JS: ${{ steps.setup.outputs.RUN_JS }}
3737
RUN_JS_ALGOLIASEARCH: ${{ steps.setup.outputs.RUN_JS_ALGOLIASEARCH }}
3838
RUN_JS_COMMON: ${{ steps.setup.outputs.RUN_JS_COMMON }}
39+
RUN_JS_TESTS: ${{ steps.setup.outputs.RUN_JS_TESTS }}
3940
JS_MATRIX: ${{ steps.setup.outputs.JS_MATRIX }}
4041

4142
RUN_JAVA: ${{ steps.setup.outputs.RUN_JAVA }}
@@ -119,7 +120,7 @@ jobs:
119120
key: |
120121
${{ env.CACHE_VERSION }}-${{
121122
hashFiles(
122-
format('clients/algoliasearch-client-javascript/packages/{0}/**', matrix.client)
123+
format('clients/algoliasearch-client-javascript/packages/{0}/src/**', matrix.client)
123124
)}}
124125
125126
- name: Build '${{ matrix.client }}' client
@@ -299,6 +300,28 @@ jobs:
299300
if: steps.cache.outputs.cache-hit != 'true'
300301
run: yarn cli build clients php ${{ matrix.client.name }}
301302

303+
client_javascript_tests:
304+
runs-on: ubuntu-20.04
305+
timeout-minutes: 10
306+
needs:
307+
- client_javascript
308+
- client_javascript_algoliasearch
309+
if: |
310+
always() &&
311+
needs.setup.outputs.RUN_JS_TESTS == 'true' &&
312+
contains(needs.*.result, 'success') &&
313+
!contains(needs.*.result, 'failure')
314+
steps:
315+
- uses: actions/checkout@v2
316+
317+
- name: Restore cache
318+
uses: ./.github/actions/cache
319+
with:
320+
job: cts
321+
322+
- name: Run client-common tests
323+
run: yarn workspace @experimental-api-clients-automation/client-common test
324+
302325
cts:
303326
runs-on: ubuntu-20.04
304327
timeout-minutes: 20
@@ -320,6 +343,9 @@ jobs:
320343
with:
321344
job: cts
322345

346+
- name: Check JavaScript client size
347+
run: exit $(yarn workspace algoliasearch-client-javascript test:size | echo $?)
348+
323349
- name: Generate
324350
run: yarn cli cts generate
325351

@@ -334,7 +360,9 @@ jobs:
334360
codegen:
335361
runs-on: ubuntu-20.04
336362
timeout-minutes: 10
337-
needs: cts
363+
needs:
364+
- cts
365+
- client_javascript_tests
338366
if: |
339367
always() &&
340368
needs.setup.outputs.RUN_CODEGEN == 'true' &&

clients/algoliasearch-client-javascript/bundlesize.config.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,51 @@
22
"files": [
33
{
44
"path": "packages/algoliasearch/dist/algoliasearch.umd.browser.js",
5-
"maxSize": "6.50KB"
5+
"maxSize": "6.90KB"
66
},
77
{
88
"path": "packages/client-abtesting/dist/client-abtesting.umd.browser.js",
9-
"maxSize": "3.25KB"
9+
"maxSize": "3.65KB"
1010
},
1111
{
1212
"path": "packages/client-analytics/dist/client-analytics.umd.browser.js",
13-
"maxSize": "4.00KB"
13+
"maxSize": "4.20KB"
1414
},
1515
{
1616
"path": "packages/client-insights/dist/client-insights.umd.browser.js",
17-
"maxSize": "3.25KB"
17+
"maxSize": "3.45KB"
1818
},
1919
{
2020
"path": "packages/client-personalization/dist/client-personalization.umd.browser.js",
21-
"maxSize": "3.25KB"
21+
"maxSize": "3.60KB"
2222
},
2323
{
2424
"path": "packages/client-query-suggestions/dist/client-query-suggestions.umd.browser.js",
25-
"maxSize": "3.25KB"
25+
"maxSize": "3.65KB"
2626
},
2727
{
2828
"path": "packages/client-search/dist/client-search.umd.browser.js",
29-
"maxSize": "5.25KB"
29+
"maxSize": "5.65KB"
3030
},
3131
{
3232
"path": "packages/client-sources/dist/client-sources.umd.browser.js",
33-
"maxSize": "3.25KB"
33+
"maxSize": "3.50KB"
3434
},
3535
{
3636
"path": "packages/recommend/dist/recommend.umd.browser.js",
37-
"maxSize": "3.25KB"
37+
"maxSize": "3.55KB"
3838
},
3939
{
4040
"path": "packages/client-common/dist/client-common.esm.node.js",
41-
"maxSize": "3.00KB"
41+
"maxSize": "3.45KB"
4242
},
4343
{
4444
"path": "packages/requester-browser-xhr/dist/requester-browser-xhr.esm.node.js",
45-
"maxSize": "1.00KB"
45+
"maxSize": "900B"
4646
},
4747
{
4848
"path": "packages/requester-node-http/dist/requester-node-http.esm.node.js",
49-
"maxSize": "1.00KB"
49+
"maxSize": "1.10KB"
5050
}
5151
]
5252
}

clients/algoliasearch-client-javascript/packages/algoliasearch/builds/browser.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,20 @@ import type {
88
Host,
99
Requester,
1010
} from '@experimental-api-clients-automation/client-common';
11+
import {
12+
createMemoryCache,
13+
createFallbackableCache,
14+
createBrowserLocalStorageCache,
15+
} from '@experimental-api-clients-automation/client-common';
1116
import type {
1217
PersonalizationApi,
1318
Region as PersonalizationRegion,
1419
} from '@experimental-api-clients-automation/client-personalization/src/personalizationApi';
1520
import { createPersonalizationApi } from '@experimental-api-clients-automation/client-personalization/src/personalizationApi';
16-
import { createSearchApi } from '@experimental-api-clients-automation/client-search/src/searchApi';
21+
import {
22+
createSearchApi,
23+
apiClientVersion,
24+
} from '@experimental-api-clients-automation/client-search/src/searchApi';
1725
import { createXhrRequester } from '@experimental-api-clients-automation/requester-browser-xhr';
1826

1927
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
@@ -39,6 +47,14 @@ export function algoliasearch(
3947
requester: options?.requester ?? createXhrRequester(),
4048
userAgents: [{ segment: 'Browser' }],
4149
authMode: 'WithinQueryParameters',
50+
responsesCache: createMemoryCache(),
51+
requestsCache: createMemoryCache({ serializable: false }),
52+
hostsCache: createFallbackableCache({
53+
caches: [
54+
createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }),
55+
createMemoryCache(),
56+
],
57+
}),
4258
...options,
4359
};
4460

clients/algoliasearch-client-javascript/packages/algoliasearch/builds/node.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import type {
88
Host,
99
Requester,
1010
} from '@experimental-api-clients-automation/client-common';
11+
import {
12+
createMemoryCache,
13+
createNullCache,
14+
} from '@experimental-api-clients-automation/client-common';
1115
import type {
1216
PersonalizationApi,
1317
Region as PersonalizationRegion,
@@ -38,6 +42,9 @@ export function algoliasearch(
3842
},
3943
requester: options?.requester ?? createHttpRequester(),
4044
userAgents: [{ segment: 'Node.js', version: process.versions.node }],
45+
responsesCache: createNullCache(),
46+
requestsCache: createNullCache(),
47+
hostsCache: createMemoryCache(),
4148
...options,
4249
};
4350

clients/algoliasearch-client-javascript/packages/client-common/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export * from './src/createAuth';
22
export * from './src/createEchoRequester';
3-
export * from './src/createMemoryCache';
3+
export * from './src/cache';
44
export * from './src/createStatefulHost';
55
export * from './src/createTransporter';
66
export * from './src/createUserAgent';
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import type { Config } from '@jest/types';
2+
3+
const baseConfig: Config.InitialOptions = {
4+
preset: 'ts-jest',
5+
roots: ['src/__tests__'],
6+
};
7+
8+
const config: Config.InitialOptions = {
9+
projects: [
10+
{
11+
...baseConfig,
12+
testEnvironment: 'jsdom',
13+
testPathIgnorePatterns: [
14+
'src/__tests__/cache/null-cache.test.ts',
15+
'src/__tests__/cache/memory-cache.test.ts',
16+
],
17+
},
18+
{
19+
...baseConfig,
20+
testEnvironment: 'node',
21+
testPathIgnorePatterns: [
22+
'src/__tests__/cache/browser-local-storage-cache.test.ts',
23+
'src/__tests__/cache/fallbackable-cache.test.ts',
24+
],
25+
},
26+
],
27+
};
28+
29+
export default config;

clients/algoliasearch-client-javascript/packages/client-common/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99
"module": "dist/client-common.esm.node.js",
1010
"types": "dist/index.d.ts",
1111
"scripts": {
12-
"clean": "rm -rf dist/"
12+
"clean": "rm -rf dist/",
13+
"test": "jest"
1314
},
1415
"engines": {
1516
"node": ">= 14.0.0"
1617
},
1718
"devDependencies": {
19+
"@types/jest": "27.4.1",
1820
"@types/node": "16.11.11",
21+
"jest": "27.4.7",
1922
"typescript": "4.5.4"
2023
}
2124
}

0 commit comments

Comments
 (0)