Skip to content

Commit 88b6aaf

Browse files
fix: update cache when scanning via cli (#447)
1 parent 5f2f2b4 commit 88b6aaf

6 files changed

Lines changed: 52 additions & 16 deletions

File tree

public/components/views/search/search.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ input:-webkit-autofill {
234234
border: 1px solid #54688424;
235235
padding: 10px;
236236
border-radius: 4px;
237+
max-height: calc(100vh - 380px);
238+
overflow: auto;
237239
}
238240

239241
.cache-packages h1 {

src/commands/scanner.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import * as Scanner from "@nodesecure/scanner";
1313

1414
// Import Internal Dependencies
1515
import * as http from "./http.js";
16+
import { appCache } from "../http-server/cache.js";
1617

1718
export async function auto(spec, options) {
1819
const { keep, ...commandOptions } = options;
@@ -59,7 +60,7 @@ export async function cwd(options) {
5960
initLogger(void 0, !silent)
6061
);
6162

62-
return logAndWrite(payload, output);
63+
return await logAndWrite(payload, output);
6364
}
6465

6566
export async function from(spec, options) {
@@ -71,7 +72,7 @@ export async function from(spec, options) {
7172
initLogger(spec, !silent)
7273
);
7374

74-
return logAndWrite(payload, output);
75+
return await logAndWrite(payload, output);
7576
}
7677

7778
function initLogger(spec, verbose = true) {
@@ -153,7 +154,7 @@ function initLogger(spec, verbose = true) {
153154
return logger;
154155
}
155156

156-
function logAndWrite(payload, output = "nsecure-result") {
157+
async function logAndWrite(payload, output = "nsecure-result") {
157158
if (payload === null) {
158159
console.log(i18n.getTokenSync("cli.no_dep_to_proceed"));
159160

@@ -179,5 +180,7 @@ function logAndWrite(payload, output = "nsecure-result") {
179180
console.log(kleur.white().bold(i18n.getTokenSync("cli.successfully_written_json", kleur.green().bold(filePath))));
180181
console.log("");
181182

183+
await appCache.setRootPayload(payload, { logging: false });
184+
182185
return filePath;
183186
}

src/http-server/cache.js

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class _AppCache {
3434
}
3535

3636
updatePayload(pkg, payload) {
37-
fs.writeFileSync(path.join(kPayloadsPath, pkg), JSON.stringify(payload));
37+
fs.writeFileSync(path.join(kPayloadsPath, pkg.replaceAll("/", "-")), JSON.stringify(payload));
3838
}
3939

4040
async getPayload(pkg) {
@@ -90,25 +90,37 @@ class _AppCache {
9090

9191
logger.info(`[cache|init](dep: ${formatted}|version: ${version}|rootDependencyName: ${payload.rootDependencyName})`);
9292
await cacache.put(CACHE_PATH, kPayloadsCache, JSON.stringify(payloadsList));
93-
this.updatePayload(formatted.replaceAll("/", "-"), payload);
93+
this.updatePayload(formatted, payload);
9494
}
9595

96-
async initPayloadsList() {
96+
async initPayloadsList(options = {}) {
97+
const { logging = true } = options;
98+
99+
try {
100+
// prevent re-initialization of the cache
101+
await cacache.get(CACHE_PATH, kPayloadsCache);
102+
103+
return;
104+
}
105+
catch {
106+
// Do nothing.
107+
}
97108
const packagesInFolder = fs.readdirSync(kPayloadsPath);
98109
if (packagesInFolder.length === 0) {
99-
this.#initDefaultPayloadsList();
110+
await this.#initDefaultPayloadsList();
100111

101112
return;
102113
}
103114

104-
const list = packagesInFolder.map(({ name }) => name);
105-
logger.info(`[cache|init](list: ${list})`);
115+
if (logging) {
116+
logger.info(`[cache|init](packagesInFolder: ${packagesInFolder})`);
117+
}
106118

107-
await cacache.put(CACHE_PATH, kPayloadsCache, JSON.stringify({ list, current: list[0] }));
119+
await cacache.put(CACHE_PATH, kPayloadsCache, JSON.stringify({ older: packagesInFolder, current: null, lru: [] }));
108120
}
109121

110122
removePayload(pkg) {
111-
fs.rmSync(path.join(kPayloadsPath, pkg));
123+
fs.rmSync(path.join(kPayloadsPath, pkg.replaceAll("/", "-")));
112124
}
113125

114126
async removeLastLRU() {
@@ -127,6 +139,26 @@ class _AppCache {
127139
root
128140
};
129141
}
142+
143+
async setRootPayload(payload, options) {
144+
const { logging = true } = options;
145+
146+
const version = Object.keys(payload.dependencies[payload.rootDependencyName].versions)[0];
147+
const pkg = `${payload.rootDependencyName}@${version}`;
148+
this.updatePayload(pkg, payload);
149+
150+
await this.initPayloadsList({ logging });
151+
152+
const { lru, older, lastUsed } = await this.removeLastLRU();
153+
const updatedPayloadsCache = {
154+
lru: [...new Set([...lru, pkg])],
155+
older,
156+
lastUsed: { ...lastUsed, [pkg]: Date.now() },
157+
current: pkg,
158+
root: pkg
159+
};
160+
await this.updatePayloadsList(updatedPayloadsCache);
161+
}
130162
}
131163

132164
export const appCache = new _AppCache();

src/http-server/endpoints/data.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ export async function get(_req, res) {
1818
logger.info(`[data|get](current: ${current})`);
1919
logger.debug(`[data|get](lru: ${lru})`);
2020

21-
const formatted = current.replaceAll("/", "-");
22-
send(res, 200, await appCache.getPayload(formatted));
21+
send(res, 200, await appCache.getPayload(current));
2322
}
2423
catch {
2524
logger.error(`[data|get](No cache yet. Creating one...)`);
@@ -39,7 +38,7 @@ export async function get(_req, res) {
3938
logger.info(`[data|get](dep: ${formatted}|version: ${version}|rootDependencyName: ${payload.rootDependencyName})`);
4039

4140
await appCache.updatePayloadsList(payloadsList);
42-
appCache.updatePayload(formatted.replaceAll("/", "-"), payload);
41+
appCache.updatePayload(formatted, payload);
4342
logger.info(`[data|get](cache: created|payloadsList: ${payloadsList.lru})`);
4443

4544
send(res, 200, payload);

src/http-server/websocket/remove.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export async function remove(ws, pkg) {
7474
}));
7575
}
7676

77-
appCache.removePayload(formattedPkg.replaceAll("/", "-"));
77+
appCache.removePayload(formattedPkg);
7878
}
7979
catch (error) {
8080
logger.error(`[ws|remove](error: ${error.message})`);

src/http-server/websocket/search.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export async function search(ws, pkg) {
5959
// update the payloads list
6060
const { lru, older, lastUsed, root } = await appCache.removeLastLRU();
6161
lru.push(pkg);
62-
appCache.updatePayload(pkg.replaceAll("/", "-"), payload);
62+
appCache.updatePayload(pkg, payload);
6363
const updatedList = {
6464
lru: [...new Set(lru)],
6565
older,

0 commit comments

Comments
 (0)