Skip to content

Commit f12bbe3

Browse files
committed
description
1 parent 2ce0e07 commit f12bbe3

14 files changed

+1334
-37
lines changed

LICENSE.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,34 @@ Info by Google: https://developers.google.com/web/fundamentals/instant-and-offli
1212

1313
## Usage
1414

15+
### as `<script>`
16+
17+
```html
18+
<script src="dist/cache-api-keyval-iife.js"></script>
19+
```
20+
21+
```js
22+
// set JSON object data
23+
CacheApiDB.set('key', { json: 'object' });
24+
25+
// set text data with expiration in 24 hours
26+
CacheApiDB.set('key2', 'string', 86400);
27+
28+
// get data from cache
29+
CacheApiDB.get('key').then(function(json) {
30+
console.log('json object', json);
31+
});
32+
33+
// delete key from database
34+
CacheApiDB.del('key2');
35+
36+
// clear database
37+
CacheApiDB.clear();
38+
39+
// prune expired cache entries
40+
CacheApiDB.prune();
41+
```
42+
1543

1644
### set:
1745

cache-api-keyval.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function cacheGet(cache: any, cache_key: string) {
2424
return cache.match(cache_key).then(function(cachedata) {
2525

2626
// expired check
27-
if (cacheExpired(cache, cache_key, cachedata)) {
27+
if (!cachedata || cacheExpired(cache, cache_key, cachedata)) {
2828
return;
2929
}
3030

@@ -61,17 +61,20 @@ function cacheSet(cache: any, cache_key: string, value: any, expire?: number) {
6161

6262
// delete expired
6363
function cacheExpired(cache: any, cache_key: string, cachedata: any) {
64-
var headers = cachedata.headers;
64+
if (cachedata) {
6565

66-
// expired check
67-
var exp = INT(headers.get(expireHeader));
68-
var date = INT(headers.get(dateHeader));
69-
if (IS_INT(exp)) {
66+
var headers = cachedata.headers;
7067

71-
// expired
72-
if ((date + exp) < timestamp()) {
73-
cacheDelete(cache, cache_key)
74-
return 1;
68+
// expired check
69+
var exp = INT(headers.get(expireHeader));
70+
var date = INT(headers.get(dateHeader));
71+
if (IS_INT(exp)) {
72+
73+
// expired
74+
if ((date + exp) < timestamp()) {
75+
cacheDelete(cache, cache_key)
76+
return 1;
77+
}
7578
}
7679
}
7780
}
@@ -127,7 +130,7 @@ function INT(num) {
127130

128131
// return INTEGER
129132
function IS_INT(num) {
130-
return isNaN(num);
133+
return !isNaN(num);
131134
}
132135

133136
export function get<Type>(key: string, store?: string): Promise<void> {
@@ -143,13 +146,13 @@ export function del(key: string, store?: string): Promise<void> {
143146
}
144147

145148
export function clear(store?: string): Promise<void> {
146-
return cacheClear(store);
149+
return getStore(store, '', cacheClear);
147150
}
148151

149152
export function prune(store?: string): Promise<void> {
150-
return cachePrune(store);
153+
return getStore(store, '', cachePrune);
151154
}
152155

153-
export function keys(store?: string): Promise<String[]> {
154-
return cacheKeys(store);
156+
export function keys(store?: string): Promise<void> {
157+
return getStore(store, '', cacheKeys);
155158
}

dist/cache-api-keyval-amd.js

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
define(['exports'], function (exports) { 'use strict';
2+
3+
/**
4+
* Cache API key/value store - github.com/optimalisatie/Cache-API-Key-Value-Store
5+
* Released under the terms of MIT license
6+
*
7+
* Copyright (C) 2018 github.com/optimalisatie
8+
*/
9+
var defaultStore = '--keyval';
10+
var dateHeader = 'x-d';
11+
var expireHeader = 'x-e';
12+
var contentTypeHeader = 'Content-Type';
13+
var slashKey = '/';
14+
// open store
15+
function getStore(store, key, callback, value, expire) {
16+
store = store || defaultStore;
17+
return caches.open(store).then(function (cache) {
18+
callback(cache, new Request(['', defaultStore, key || ''].join(slashKey)), value, expire);
19+
});
20+
}
21+
// get entry from cache
22+
function cacheGet(cache, cache_key) {
23+
return cache.match(cache_key).then(function (cachedata) {
24+
// expired check
25+
if (cacheExpired(cache, cache_key, cachedata)) {
26+
return;
27+
}
28+
return cachedata.json();
29+
});
30+
}
31+
// delete entry from cache
32+
function cacheDel(cache, cache_key) {
33+
cacheDelete(cache, cache_key);
34+
}
35+
// set entry in cache
36+
function cacheSet(cache, cache_key, value, expire) {
37+
var headers = {};
38+
// JSON
39+
headers[contentTypeHeader] = 'application/json';
40+
value = JSON.stringify(value);
41+
// expire time
42+
if (IS_INT(expire)) {
43+
headers[dateHeader] = timestamp();
44+
headers[expireHeader] = expire;
45+
}
46+
var data = new Response(data, {
47+
headers: headers
48+
});
49+
return cache.put(cache_key, data);
50+
}
51+
// delete expired
52+
function cacheExpired(cache, cache_key, cachedata) {
53+
var headers = cachedata.headers;
54+
// expired check
55+
var exp = INT(headers.get(expireHeader));
56+
var date = INT(headers.get(dateHeader));
57+
if (IS_INT(exp)) {
58+
// expired
59+
if ((date + exp) < timestamp()) {
60+
cacheDelete(cache, cache_key);
61+
return 1;
62+
}
63+
}
64+
}
65+
// return keys
66+
function cacheKeys(cache) {
67+
return cache.keys().then(function (rawKeys) {
68+
var keys = [];
69+
rawKeys.forEach(function (key) {
70+
key = new URL(key.url).pathname.split(slashKey);
71+
key.shift();
72+
key.shift();
73+
keys.push(key.join(slashKey));
74+
});
75+
return keys;
76+
});
77+
}
78+
// clear store
79+
function cacheClear(cache) {
80+
return cache.keys().then(function (keys) {
81+
keys.forEach(function (key) {
82+
cacheDelete(cache, key);
83+
});
84+
});
85+
}
86+
// prune expired entries
87+
function cachePrune(cache) {
88+
return cache.keys().then(function (keys) {
89+
// read all entries which automatically verifies the expire date
90+
keys.forEach(function (cache_key) {
91+
cacheGet(cache, cache_key);
92+
});
93+
});
94+
}
95+
// delete from cache
96+
function cacheDelete(cache, cache_key) {
97+
cache["delete"](cache_key);
98+
}
99+
// return timestamp
100+
function timestamp() {
101+
return Math.round(Date.now() / 1000);
102+
}
103+
// return INTEGER
104+
function INT(num) {
105+
return parseInt(num);
106+
}
107+
// return INTEGER
108+
function IS_INT(num) {
109+
return isNaN(num);
110+
}
111+
function get(key, store) {
112+
return getStore(store, key, cacheGet);
113+
}
114+
function set(key, value, expire, store) {
115+
return getStore(store, key, cacheSet, value, expire);
116+
}
117+
function del(key, store) {
118+
return getStore(store, key, cacheDel);
119+
}
120+
function clear(store) {
121+
return cacheClear(store);
122+
}
123+
function prune(store) {
124+
return cachePrune(store);
125+
}
126+
function keys(store) {
127+
return cacheKeys(store);
128+
}
129+
130+
exports.get = get;
131+
exports.set = set;
132+
exports.del = del;
133+
exports.clear = clear;
134+
exports.prune = prune;
135+
exports.keys = keys;
136+
137+
Object.defineProperty(exports, '__esModule', { value: true });
138+
139+
});

dist/cache-api-keyval-amd.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)