feat: lru cache for complie typescript code
Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
@@ -113,6 +113,7 @@
|
|||||||
"jszip": "3.10.1",
|
"jszip": "3.10.1",
|
||||||
"linkedom": "0.14.12",
|
"linkedom": "0.14.12",
|
||||||
"lodash": "*",
|
"lodash": "*",
|
||||||
|
"lru-cache": "7.14.0",
|
||||||
"marked": "4.0.18",
|
"marked": "4.0.18",
|
||||||
"mime-types": "*",
|
"mime-types": "*",
|
||||||
"mkdirp": "*",
|
"mkdirp": "*",
|
||||||
@@ -177,7 +178,6 @@
|
|||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"socket.io": "*",
|
"socket.io": "*",
|
||||||
"ts-jest": "28.0.8",
|
"ts-jest": "28.0.8",
|
||||||
"ts-loader": "9.3.1",
|
|
||||||
"ts-node": "10.9.1",
|
"ts-node": "10.9.1",
|
||||||
"tsconfig-paths": "4.1.0",
|
"tsconfig-paths": "4.1.0",
|
||||||
"typescript": "4.7.4"
|
"typescript": "4.7.4"
|
||||||
|
|||||||
38
pnpm-lock.yaml
generated
38
pnpm-lock.yaml
generated
@@ -88,6 +88,7 @@ specifiers:
|
|||||||
linkedom: 0.14.12
|
linkedom: 0.14.12
|
||||||
lint-staged: 13.0.3
|
lint-staged: 13.0.3
|
||||||
lodash: '*'
|
lodash: '*'
|
||||||
|
lru-cache: 7.14.0
|
||||||
marked: 4.0.18
|
marked: 4.0.18
|
||||||
mime-types: '*'
|
mime-types: '*'
|
||||||
mkdirp: '*'
|
mkdirp: '*'
|
||||||
@@ -114,7 +115,6 @@ specifiers:
|
|||||||
snakecase-keys: 5.4.2
|
snakecase-keys: 5.4.2
|
||||||
socket.io: '*'
|
socket.io: '*'
|
||||||
ts-jest: 28.0.8
|
ts-jest: 28.0.8
|
||||||
ts-loader: 9.3.1
|
|
||||||
ts-node: 10.9.1
|
ts-node: 10.9.1
|
||||||
tsconfig-paths: 4.1.0
|
tsconfig-paths: 4.1.0
|
||||||
typescript: 4.7.4
|
typescript: 4.7.4
|
||||||
@@ -173,6 +173,7 @@ dependencies:
|
|||||||
jszip: 3.10.1
|
jszip: 3.10.1
|
||||||
linkedom: 0.14.12
|
linkedom: 0.14.12
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
|
lru-cache: 7.14.0
|
||||||
marked: 4.0.18
|
marked: 4.0.18
|
||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
mkdirp: 1.0.4
|
mkdirp: 1.0.4
|
||||||
@@ -204,7 +205,7 @@ optionalDependencies:
|
|||||||
redis-memory-server: 0.5.0
|
redis-memory-server: 0.5.0
|
||||||
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@innei/eslint-config-ts': 0.9.4_typescript@4.7.4
|
'@innei/eslint-config-ts': 0.9.4
|
||||||
'@innei/prettier': 0.9.4
|
'@innei/prettier': 0.9.4
|
||||||
'@nestjs/cli': 9.0.0
|
'@nestjs/cli': 9.0.0
|
||||||
'@nestjs/schematics': 9.0.1_typescript@4.7.4
|
'@nestjs/schematics': 9.0.1_typescript@4.7.4
|
||||||
@@ -241,7 +242,6 @@ devDependencies:
|
|||||||
rimraf: 3.0.2
|
rimraf: 3.0.2
|
||||||
socket.io: 4.5.1
|
socket.io: 4.5.1
|
||||||
ts-jest: 28.0.8_m5noci3hdgjcbp5i3skppiufvq
|
ts-jest: 28.0.8_m5noci3hdgjcbp5i3skppiufvq
|
||||||
ts-loader: 9.3.1_typescript@4.7.4
|
|
||||||
ts-node: 10.9.1_mc5obqbv5iw2qugqrfomepel3m
|
ts-node: 10.9.1_mc5obqbv5iw2qugqrfomepel3m
|
||||||
tsconfig-paths: 4.1.0
|
tsconfig-paths: 4.1.0
|
||||||
typescript: 4.7.4
|
typescript: 4.7.4
|
||||||
@@ -1018,10 +1018,8 @@ packages:
|
|||||||
tslib: 2.4.0
|
tslib: 2.4.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@innei/eslint-config-ts/0.9.4_typescript@4.7.4:
|
/@innei/eslint-config-ts/0.9.4:
|
||||||
resolution: {integrity: sha512-T52M6omBVNP6CbRN0sWNf8TjEEocuPTSN+FnVUY7c1P8JfgOTH9PFOG8fEt59UZLxZEIjy26pHGDqATv9inGVA==}
|
resolution: {integrity: sha512-T52M6omBVNP6CbRN0sWNf8TjEEocuPTSN+FnVUY7c1P8JfgOTH9PFOG8fEt59UZLxZEIjy26pHGDqATv9inGVA==}
|
||||||
peerDependencies:
|
|
||||||
typescript: '>=4'
|
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/eslint-plugin': 5.30.7_njno5y7ry2l2lcmiu4tywxkwnq
|
'@typescript-eslint/eslint-plugin': 5.30.7_njno5y7ry2l2lcmiu4tywxkwnq
|
||||||
'@typescript-eslint/parser': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq
|
'@typescript-eslint/parser': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq
|
||||||
@@ -2827,7 +2825,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
async: 3.2.3
|
async: 3.2.3
|
||||||
lodash.clonedeep: 4.5.0
|
lodash.clonedeep: 4.5.0
|
||||||
lru-cache: 7.12.0
|
lru-cache: 7.14.0
|
||||||
|
|
||||||
/call-bind/1.0.2:
|
/call-bind/1.0.2:
|
||||||
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
|
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
|
||||||
@@ -3578,14 +3576,6 @@ packages:
|
|||||||
tapable: 2.2.1
|
tapable: 2.2.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/enhanced-resolve/5.9.3:
|
|
||||||
resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==}
|
|
||||||
engines: {node: '>=10.13.0'}
|
|
||||||
dependencies:
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
tapable: 2.2.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/entities/1.1.2:
|
/entities/1.1.2:
|
||||||
resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
|
resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -5896,8 +5886,8 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
yallist: 4.0.0
|
yallist: 4.0.0
|
||||||
|
|
||||||
/lru-cache/7.12.0:
|
/lru-cache/7.14.0:
|
||||||
resolution: {integrity: sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==}
|
resolution: {integrity: sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
/luxon/1.28.0:
|
/luxon/1.28.0:
|
||||||
@@ -7693,20 +7683,6 @@ packages:
|
|||||||
yargs-parser: 21.0.1
|
yargs-parser: 21.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/ts-loader/9.3.1_typescript@4.7.4:
|
|
||||||
resolution: {integrity: sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==}
|
|
||||||
engines: {node: '>=12.0.0'}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: '*'
|
|
||||||
webpack: ^5.0.0
|
|
||||||
dependencies:
|
|
||||||
chalk: 4.1.2
|
|
||||||
enhanced-resolve: 5.9.3
|
|
||||||
micromatch: 4.0.5
|
|
||||||
semver: 7.3.7
|
|
||||||
typescript: 4.7.4
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/ts-node/10.9.1_mc5obqbv5iw2qugqrfomepel3m:
|
/ts-node/10.9.1_mc5obqbv5iw2qugqrfomepel3m:
|
||||||
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { isURL } from 'class-validator'
|
import { isURL } from 'class-validator'
|
||||||
import fs, { mkdir, stat } from 'fs/promises'
|
import fs, { mkdir, stat } from 'fs/promises'
|
||||||
|
import LRUCache from 'lru-cache'
|
||||||
import { mongo } from 'mongoose'
|
import { mongo } from 'mongoose'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { nextTick } from 'process'
|
import { nextTick } from 'process'
|
||||||
@@ -371,14 +372,29 @@ export class ServerlessService {
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private lruCache = new LRUCache({
|
||||||
|
max: 100,
|
||||||
|
ttl: 10 * 1000,
|
||||||
|
maxSize: 5000,
|
||||||
|
sizeCalculation: (value: string, key: string) => {
|
||||||
|
return value.length + key.length
|
||||||
|
},
|
||||||
|
})
|
||||||
private async convertTypescriptCode(
|
private async convertTypescriptCode(
|
||||||
code: string,
|
code: string,
|
||||||
): Promise<string | null | undefined> {
|
): Promise<string | null | undefined> {
|
||||||
|
if (this.lruCache.has(code)) {
|
||||||
|
return this.lruCache.get(code)
|
||||||
|
}
|
||||||
|
|
||||||
const res = await transformAsync(code, this.getBabelOptions())
|
const res = await transformAsync(code, this.getBabelOptions())
|
||||||
if (!res) {
|
if (!res) {
|
||||||
throw new InternalServerErrorException('convert code error')
|
throw new InternalServerErrorException('convert code error')
|
||||||
}
|
}
|
||||||
!isTest && console.debug(res.code)
|
!isTest && console.debug(res.code)
|
||||||
|
|
||||||
|
res.code && this.lruCache.set(code, res.code)
|
||||||
|
|
||||||
return res.code
|
return res.code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user