-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcache.ts
100 lines (86 loc) · 2.92 KB
/
cache.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// @ts-ignore: declare own types on promisified stores
import fs from 'fs'
import path from 'path'
import Database, { Database as SqliteDatabase } from 'better-sqlite3'
const folder = 'storage'
const dbFilename = path.join(folder, 'cache.sqlite3')
if (!fs.existsSync(folder)) {
fs.mkdirSync(folder)
}
const db = new Database(dbFilename)
const HREF_SIZE = 'href_size'
db.prepare(`CREATE TABLE IF NOT EXISTS ${HREF_SIZE} (href text, size integer)`).run()
const hrefSizes = {
find: function (href: string): undefined | { size: number } {
// @ts-ignore
return db.prepare(`SELECT size FROM ${HREF_SIZE} WHERE href = ?`).get(href)
},
insert: function (hrefSize: HrefDownloadSize) {
db.prepare(`INSERT OR REPLACE INTO ${HREF_SIZE} (href, size) VALUES (?, ?)`)
.run(hrefSize.href, hrefSize.size)
}
}
const TARBALL = 'tarball'
db.prepare(`CREATE TABLE IF NOT EXISTS ${TARBALL} (name text, version text, tarballs text)`).run()
const tarballs = {
find: function (name: string, version: string): undefined | [string, string][] {
const result = db.prepare(`SELECT tarballs FROM ${TARBALL} WHERE name = ? AND version = ?`)
.get(name, version)
if (result === undefined) {
return undefined
}
// @ts-ignore
return JSON.parse(result.tarballs)
},
insert: function ({ name, version, tarballs }: CacheTarballs) {
db.prepare(`INSERT OR REPLACE INTO ${TARBALL} (name, version, tarballs) VALUES (?, ?, ?)`)
.run(name, version, JSON.stringify(tarballs))
}
}
const PACKAGE_SIZE = 'package_size'
db.prepare(`
CREATE TABLE IF NOT EXISTS ${PACKAGE_SIZE}
(
name text,
version text,
tarballSize integer,
totalDependencies integer,
size integer,
prettySize text,
dependencies text
)
`).run()
const pkgSizes = {
find: function (name: string, version: string): undefined | PkgDownloadSize {
const result = db.prepare(`
SELECT tarballSize, totalDependencies, size, prettySize, dependencies FROM ${PACKAGE_SIZE} WHERE name = ? AND version = ?
`).get(name, version)
if (result === undefined) {
return undefined
}
return {
name,
version,
wanted: '',
// @ts-ignore
tarballSize: result.tarballSize,
// @ts-ignore
totalDependencies: result.totalDependencies,
// @ts-ignore
size: result.size,
// @ts-ignore
prettySize: result.prettySize,
// @ts-ignore
dependencies: JSON.parse(result.dependencies)
}
},
insert: function ({ name, version, tarballSize, totalDependencies, size, prettySize, dependencies }: PkgDownloadSize) {
db.prepare(`
INSERT OR REPLACE INTO ${PACKAGE_SIZE}
(name, version, tarballSize, totalDependencies, size, prettySize, dependencies)
VALUES
(?, ?, ?, ?, ?, ?, ?)
`).run(name, version, tarballSize, totalDependencies, size, prettySize, JSON.stringify(dependencies))
}
}
export = { hrefSizes, tarballs, pkgSizes }