mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Add registry server
This commit is contained in:
parent
aed7ab70ab
commit
768c818908
@ -1,28 +1,23 @@
|
||||
import * as webpack from 'webpack'
|
||||
import * as webpackConfig from '../../webpack/webpack.dev'
|
||||
import { sendMessage } from './server'
|
||||
import webpack from 'webpack'
|
||||
import exitHook from 'async-exit-hook'
|
||||
import webpackConfig from '../../webpack/webpack.dev'
|
||||
import { sendMessage } from './web-socket-server'
|
||||
import { defaultWatcherHandler } from './watcher-common'
|
||||
|
||||
export const startCoreWatcher = () => {
|
||||
const compiler = webpack(webpackConfig as webpack.Configuration)
|
||||
let lastHash = ''
|
||||
console.log('Starting core watcher')
|
||||
const instance = compiler.watch({}, (error, result) => {
|
||||
if (error) {
|
||||
console.error(error)
|
||||
process.exit(1)
|
||||
}
|
||||
if (result.hash === lastHash) {
|
||||
return
|
||||
}
|
||||
if (!lastHash) {
|
||||
console.log('Core watcher started')
|
||||
}
|
||||
lastHash = result.hash
|
||||
sendMessage({
|
||||
type: 'coreUpdate',
|
||||
})
|
||||
})
|
||||
process.on('beforeExit', () => instance.close(() => {
|
||||
const instance = compiler.watch({}, defaultWatcherHandler(
|
||||
() => console.log('Core watcher started'),
|
||||
result => {
|
||||
console.log('coreUpdate:', result.hash)
|
||||
sendMessage({
|
||||
type: 'coreUpdate',
|
||||
})
|
||||
},
|
||||
))
|
||||
exitHook(exit => instance.close(() => {
|
||||
console.log('Core watcher stopped')
|
||||
exit()
|
||||
}))
|
||||
}
|
||||
|
||||
@ -30,10 +30,7 @@ Send Messages:
|
||||
```json
|
||||
{
|
||||
"type": "itemUpdate",
|
||||
"name": "name",
|
||||
"itemType": "component",
|
||||
"displayName": "Display Name",
|
||||
"path": "registry/components/feeds/copy-link.js"
|
||||
"path": "http://localhost:2333/registry/components/style/auto-hide-sidebar.js"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { startCoreWatcher } from './core-watcher'
|
||||
import { startWebSocketServer } from './server'
|
||||
import { startRegistryWatcher } from './registry-watcher'
|
||||
import { startWebSocketServer } from './web-socket-server'
|
||||
|
||||
startWebSocketServer().then(() => {
|
||||
startRegistryWatcher().then(server => {
|
||||
startCoreWatcher()
|
||||
startWebSocketServer(server)
|
||||
})
|
||||
|
||||
@ -4,9 +4,6 @@ export interface PayloadBase<Type extends string = string> {
|
||||
export type StartPayload = PayloadBase<'start'>
|
||||
export type CoreUpdatePayload = PayloadBase<'coreUpdate'>
|
||||
export type ItemUpdatePayload = PayloadBase<'itemUpdate'> & {
|
||||
name: string
|
||||
displayName: string
|
||||
itemType: string
|
||||
path: string
|
||||
}
|
||||
export type StopPayload = PayloadBase<'stop'>
|
||||
|
||||
@ -1,50 +1,108 @@
|
||||
import { createServer } from 'http'
|
||||
import { Watching } from 'webpack'
|
||||
import * as webpack from 'webpack'
|
||||
import { createServer, Server } from 'http'
|
||||
import webpack, { Watching, Configuration } from 'webpack'
|
||||
import exitHook from 'async-exit-hook'
|
||||
import handler from 'serve-handler'
|
||||
import path from 'path'
|
||||
import { devServerConfig } from './config'
|
||||
import { buildByEntry } from '../../registry/webpack/config'
|
||||
import { fromId } from '../../registry/webpack/id'
|
||||
import { defaultWatcherHandler } from './watcher-common'
|
||||
import { sendMessage } from './web-socket-server'
|
||||
|
||||
export const startRegistryWatcher = () => {
|
||||
export const startRegistryWatcher = () => new Promise<Server>(resolve => {
|
||||
const { maxWatchers, port } = devServerConfig
|
||||
const watchers: Record<string, Watching> = {}
|
||||
const watchers: { url: string; instance: Watching }[] = []
|
||||
const parseRegistryUrl = (url: string) => {
|
||||
/* example: http://localhost:2333/registry/components/style/auto-hide-sidebar.js
|
||||
-> src: ./registry/lib/components/
|
||||
-> type: component
|
||||
-> entry: ./registry/lib/components/style/auto-hide-sidebar/index.ts
|
||||
*/
|
||||
const regex = new RegExp('http://[^/]+/registry/(.+)s/(.+)\\.js')
|
||||
const match = url.match(regex)
|
||||
if (!match) {
|
||||
return null
|
||||
}
|
||||
const [, type, id] = match
|
||||
const src = `./registry/lib/${type}s/`
|
||||
return {
|
||||
src,
|
||||
type,
|
||||
entry: fromId(src, id),
|
||||
}
|
||||
}
|
||||
|
||||
const createWatcher = (url: string): Promise<void> => {
|
||||
const watcher = webpack(buildByEntry())
|
||||
const createWatcher = async (url: string, config: Configuration) => {
|
||||
const watcher = webpack(config)
|
||||
const instance = watcher.watch({}, defaultWatcherHandler(
|
||||
() => console.log(`Registry watcher started, url = ${url}`),
|
||||
result => {
|
||||
console.log('itemUpdate', result.hash, url)
|
||||
sendMessage({
|
||||
type: 'itemUpdate',
|
||||
path: url,
|
||||
})
|
||||
},
|
||||
))
|
||||
exitHook(exit => {
|
||||
if (!instance.closed) {
|
||||
instance.close(() => {
|
||||
console.log(`Registry watcher stopped, url = ${url}`)
|
||||
exit()
|
||||
})
|
||||
}
|
||||
})
|
||||
if (watchers.length >= maxWatchers) {
|
||||
const oldInstance = watchers.shift()
|
||||
if (!oldInstance.instance.closed) {
|
||||
oldInstance.instance.close(() => {
|
||||
console.log(`Registry watcher stopped, url = ${oldInstance.url}`)
|
||||
})
|
||||
}
|
||||
}
|
||||
watchers.push({ url, instance })
|
||||
}
|
||||
|
||||
const server = createServer((request, response) => {
|
||||
const { url } = request
|
||||
if (url.startsWith('/core/')) {
|
||||
if (url.startsWith('/core')) {
|
||||
request.url = url.replace(/^\/core/, '')
|
||||
console.log('request from', request.url)
|
||||
handler(request, response, {
|
||||
public: './dist/',
|
||||
public: path.resolve('./dist/'),
|
||||
})
|
||||
}
|
||||
if (url.startsWith('/registry/')) {
|
||||
if (url.startsWith('/registry')) {
|
||||
request.url = url.replace(/^\/registry/, '')
|
||||
const existingWatcher = watchers[url]
|
||||
const registryRoot = './registry/dist/'
|
||||
if (existingWatcher) {
|
||||
const registryInfo = parseRegistryUrl(url)
|
||||
const registryRoot = path.resolve('./registry/dist/')
|
||||
if (existingWatcher || !registryInfo) {
|
||||
handler(request, response, {
|
||||
public: registryRoot,
|
||||
})
|
||||
} else {
|
||||
createWatcher(url, buildByEntry(registryInfo) as Configuration).then(
|
||||
() => handler(request, response, {
|
||||
public: registryRoot,
|
||||
}),
|
||||
)
|
||||
}
|
||||
createWatcher(url).then(
|
||||
() => handler(request, response, {
|
||||
public: registryRoot,
|
||||
}),
|
||||
)
|
||||
}
|
||||
})
|
||||
process.on('beforeExit', () => {
|
||||
exitHook(exit => {
|
||||
server.close(error => {
|
||||
if (error) {
|
||||
console.error(error)
|
||||
exit()
|
||||
return
|
||||
}
|
||||
console.log('Registry watcher stopped')
|
||||
console.log('Registry server stopped')
|
||||
exit()
|
||||
})
|
||||
})
|
||||
server.listen(port, () => {
|
||||
console.log('Registry watcher started')
|
||||
console.log(`Registry server listening at ${port}`)
|
||||
resolve(server)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
7
dev-tools/dev-server/tsconfig.json
Normal file
7
dev-tools/dev-server/tsconfig.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "CommonJS",
|
||||
"noEmit": true,
|
||||
}
|
||||
}
|
||||
22
dev-tools/dev-server/watcher-common.ts
Normal file
22
dev-tools/dev-server/watcher-common.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { Stats } from 'webpack'
|
||||
|
||||
export const defaultWatcherHandler = (
|
||||
initCallback: (result: Stats) => void,
|
||||
updateCallback: (result: Stats) => void,
|
||||
) => {
|
||||
let lastHash = ''
|
||||
return (error: Error, result: Stats) => {
|
||||
if (error) {
|
||||
console.error(error)
|
||||
return
|
||||
}
|
||||
if (result.hash === lastHash) {
|
||||
return
|
||||
}
|
||||
if (!lastHash) {
|
||||
initCallback(result)
|
||||
}
|
||||
lastHash = result.hash
|
||||
updateCallback(result)
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,4 @@
|
||||
import { Server } from 'http'
|
||||
import { WebSocketServer } from 'ws'
|
||||
import { devServerConfig } from './config'
|
||||
import { Payload } from './payload'
|
||||
@ -13,10 +14,13 @@ export const sendMessage = (message: Payload) => {
|
||||
client.send(text)
|
||||
})
|
||||
}
|
||||
export const startWebSocketServer = () => new Promise<void>((resolve, reject) => {
|
||||
export const startWebSocketServer = (httpServer: Server) => new Promise<void>((resolve, reject) => {
|
||||
const { port } = devServerConfig
|
||||
server = new WebSocketServer({ port })
|
||||
server = new WebSocketServer({ server: httpServer })
|
||||
server.on('close', () => sendMessage({ type: 'stop' }))
|
||||
server.on('listening', () => resolve())
|
||||
server.on('listening', () => {
|
||||
console.log(`WebSocket server listening ${port}`)
|
||||
resolve()
|
||||
})
|
||||
server.on('error', () => reject())
|
||||
})
|
||||
@ -16,9 +16,11 @@
|
||||
"@babel/plugin-proposal-class-properties": "^7.8.3",
|
||||
"@babel/preset-env": "^7.9.6",
|
||||
"@babel/preset-typescript": "^7.9.0",
|
||||
"@types/async-exit-hook": "^2.0.0",
|
||||
"@types/color": "^3.0.1",
|
||||
"@types/lodash": "^4.14.172",
|
||||
"@types/marked": "^1.2.0",
|
||||
"@types/node": "^17.0.31",
|
||||
"@types/serve-handler": "^6.1.1",
|
||||
"@types/sortablejs": "^1.10.7",
|
||||
"@types/webpack": "^4.41.6",
|
||||
@ -26,6 +28,7 @@
|
||||
"@types/ws": "^8.2.3",
|
||||
"@typescript-eslint/eslint-plugin": "^5.9.1",
|
||||
"@typescript-eslint/parser": "^5.9.1",
|
||||
"async-exit-hook": "^2.0.1",
|
||||
"autoprefixer": "^10.0.1",
|
||||
"babel-loader": "^8.1.0",
|
||||
"css-loader": "^5.0.0",
|
||||
@ -45,6 +48,7 @@
|
||||
"terser": ">=5.3.8 <6",
|
||||
"terser-webpack-plugin": "^5.0.1",
|
||||
"to-string-loader": "^1.2.0",
|
||||
"ts-node": "^10.7.0",
|
||||
"typescript": "^4.4.4",
|
||||
"vue-loader": "^15.8.3",
|
||||
"vue-template-compiler": "^2.6.11",
|
||||
|
||||
@ -8,7 +8,7 @@ module.exports = Object.fromEntries(['component', 'plugin', 'doc'].map(type => {
|
||||
|
||||
if (buildAll) {
|
||||
console.log(`[build all] discovered ${entries.length} ${type}s`)
|
||||
return entries.map(entry => buildByEntry(entry))
|
||||
return entries.map(entry => buildByEntry({ src, type, entry }))
|
||||
}
|
||||
|
||||
let entry
|
||||
@ -24,6 +24,6 @@ module.exports = Object.fromEntries(['component', 'plugin', 'doc'].map(type => {
|
||||
[entry] = entries
|
||||
console.log(`Build target · ${entry}`)
|
||||
}
|
||||
return buildByEntry(src, entry)
|
||||
return buildByEntry({ src, type, entry })
|
||||
}]
|
||||
}))
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
const buildByEntry = (entry: string) => {
|
||||
const match = entry.match(/\/?registry\/dist\/([^\/]+)\/(.+)\/index\.ts/)
|
||||
if (!match) {
|
||||
throw new Error(`Invalid entry path: ${entry}`)
|
||||
}
|
||||
const
|
||||
const buildByEntry = ({ src, type, entry }) => {
|
||||
// const match = entry.match(/\/?registry\/dist\/([^\/]+)\/(.+)\/index\.ts/)
|
||||
// if (!match) {
|
||||
// throw new Error(`Invalid entry path: ${entry}`)
|
||||
// }
|
||||
const path = require('path')
|
||||
const { getId } = require('./id')
|
||||
const id = getId(src, entry)
|
||||
1
registry/webpack/id.d.ts
vendored
1
registry/webpack/id.d.ts
vendored
@ -1 +1,2 @@
|
||||
export const getId: (root: string, entry: string) => string
|
||||
export const fromId: (root: string, id: string, filename?: string) => string
|
||||
|
||||
@ -1,7 +1,21 @@
|
||||
/** Runs both in Node.js and browser (without path module).
|
||||
/**
|
||||
* Runs both in Node.js and browser (without path module).
|
||||
* Paths are case-sensitive.
|
||||
*/
|
||||
module.exports.getId = (root, entry) => {
|
||||
const relative = entry.replace(root, '').replace(/\\/g, '/')
|
||||
return relative.replace(/\/[^\/]+$/, '')
|
||||
module.exports = {
|
||||
/**
|
||||
* Generate id from relative path and remove filename
|
||||
* @example getId('folder1/', 'folder1/folder2/index.ts') -> 'folder2'
|
||||
*/
|
||||
getId: (root, entry) => {
|
||||
const relative = entry.replace(root, '').replace(/\\/g, '/')
|
||||
return relative.replace(/\/[^\/]+$/, '')
|
||||
},
|
||||
/**
|
||||
* Reverse method for `getId`
|
||||
* @example getId('folder1/', 'folder2') -> 'folder1/folder2/index.ts'
|
||||
*/
|
||||
fromId: (root, id, filename = 'index.ts') => {
|
||||
return `${root.replace(/\\/g, '/')}${id.replace(/\\/g, '/')}/${filename}`
|
||||
}
|
||||
}
|
||||
|
||||
111
yarn.lock
111
yarn.lock
@ -920,6 +920,18 @@
|
||||
"@babel/helper-validator-identifier" "^7.16.7"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@cspotcode/source-map-consumer@0.8.0":
|
||||
version "0.8.0"
|
||||
resolved "https://registry.npmmirror.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
|
||||
integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==
|
||||
|
||||
"@cspotcode/source-map-support@0.7.0":
|
||||
version "0.7.0"
|
||||
resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5"
|
||||
integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==
|
||||
dependencies:
|
||||
"@cspotcode/source-map-consumer" "0.8.0"
|
||||
|
||||
"@csstools/postcss-color-function@^1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz#229966327747f58fbe586de35daa139db3ce1e5d"
|
||||
@ -1140,6 +1152,31 @@
|
||||
resolved "https://registry.npmmirror.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
|
||||
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
|
||||
|
||||
"@tsconfig/node10@^1.0.7":
|
||||
version "1.0.8"
|
||||
resolved "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
|
||||
integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
|
||||
|
||||
"@tsconfig/node12@^1.0.7":
|
||||
version "1.0.9"
|
||||
resolved "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
|
||||
integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
|
||||
|
||||
"@tsconfig/node14@^1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
|
||||
integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
|
||||
|
||||
"@tsconfig/node16@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
|
||||
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
|
||||
|
||||
"@types/async-exit-hook@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/@types/async-exit-hook/-/async-exit-hook-2.0.0.tgz#162623f74b7018ec0da99a810d2284d697230837"
|
||||
integrity sha512-RNjIyjnVZdcP5a1zeIPb5c0hq2nbJc/NOCLNKUAqeCw+J5z2zMcINISn9wybCWhczHnUu3VSUFy7ZCO6ir4ZRw==
|
||||
|
||||
"@types/color-convert@*":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/@types/color-convert/-/color-convert-2.0.0.tgz#8f5ee6b9e863dcbee5703f5a517ffb13d3ea4e22"
|
||||
@ -1210,7 +1247,7 @@
|
||||
resolved "https://registry.npmmirror.com/@types/marked/-/marked-1.2.2.tgz#1f858a0e690247ecf3b2eef576f98f86e8d960d4"
|
||||
integrity sha512-wLfw1hnuuDYrFz97IzJja0pdVsC0oedtS4QsKH1/inyW9qkLQbXgMUqEQT0MVtUBx3twjWeInUfjQbhBVLECXw==
|
||||
|
||||
"@types/node@*", "@types/node@>=13.7.0":
|
||||
"@types/node@*", "@types/node@>=13.7.0", "@types/node@^17.0.31":
|
||||
version "17.0.31"
|
||||
resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d"
|
||||
integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==
|
||||
@ -1549,7 +1586,7 @@ acorn-jsx@^5.2.0, acorn-jsx@^5.3.1:
|
||||
resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||
|
||||
acorn-walk@^8.0.0:
|
||||
acorn-walk@^8.0.0, acorn-walk@^8.1.1:
|
||||
version "8.2.0"
|
||||
resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
|
||||
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
|
||||
@ -1648,6 +1685,11 @@ arg@2.0.0:
|
||||
resolved "https://registry.npmmirror.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545"
|
||||
integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==
|
||||
|
||||
arg@^4.1.0:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
||||
|
||||
argparse@^1.0.7:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||
@ -1686,6 +1728,11 @@ astral-regex@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||
|
||||
async-exit-hook@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
|
||||
integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==
|
||||
|
||||
async@^2.0.1:
|
||||
version "2.6.4"
|
||||
resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
|
||||
@ -2089,6 +2136,11 @@ cosmiconfig@^7.0.0:
|
||||
path-type "^4.0.0"
|
||||
yaml "^1.10.0"
|
||||
|
||||
create-require@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
||||
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
||||
|
||||
cross-spawn@^6.0.0:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
@ -2214,6 +2266,11 @@ define-properties@^1.1.3, define-properties@^1.1.4:
|
||||
has-property-descriptors "^1.0.0"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
diff@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
|
||||
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
|
||||
|
||||
dir-glob@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
|
||||
@ -3434,6 +3491,11 @@ make-dir@^3.0.2, make-dir@^3.1.0:
|
||||
dependencies:
|
||||
semver "^6.0.0"
|
||||
|
||||
make-error@^1.1.1:
|
||||
version "1.3.6"
|
||||
resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
|
||||
marked@^1.2.5:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.npmmirror.com/marked/-/marked-1.2.9.tgz#53786f8b05d4c01a2a5a76b7d1ec9943d29d72dc"
|
||||
@ -4454,21 +4516,7 @@ serialize-javascript@^6.0.0:
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
serve-handler@6.1.3:
|
||||
version "6.1.3"
|
||||
resolved "https://registry.npmmirror.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8"
|
||||
integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==
|
||||
dependencies:
|
||||
bytes "3.0.0"
|
||||
content-disposition "0.5.2"
|
||||
fast-url-parser "1.1.3"
|
||||
mime-types "2.1.18"
|
||||
minimatch "3.0.4"
|
||||
path-is-inside "1.0.2"
|
||||
path-to-regexp "2.2.1"
|
||||
range-parser "1.2.0"
|
||||
|
||||
serve-handler@^6.1.3:
|
||||
serve-handler@6.1.3, serve-handler@^6.1.3:
|
||||
version "6.1.3"
|
||||
resolved "https://registry.npmmirror.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8"
|
||||
integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==
|
||||
@ -4804,6 +4852,25 @@ tr46@^1.0.1:
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
ts-node@^10.7.0:
|
||||
version "10.7.0"
|
||||
resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5"
|
||||
integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==
|
||||
dependencies:
|
||||
"@cspotcode/source-map-support" "0.7.0"
|
||||
"@tsconfig/node10" "^1.0.7"
|
||||
"@tsconfig/node12" "^1.0.7"
|
||||
"@tsconfig/node14" "^1.0.0"
|
||||
"@tsconfig/node16" "^1.0.2"
|
||||
acorn "^8.4.1"
|
||||
acorn-walk "^8.1.1"
|
||||
arg "^4.1.0"
|
||||
create-require "^1.1.0"
|
||||
diff "^4.0.1"
|
||||
make-error "^1.1.1"
|
||||
v8-compile-cache-lib "^3.0.0"
|
||||
yn "3.1.1"
|
||||
|
||||
tsconfig-paths@^3.14.1:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
|
||||
@ -4911,6 +4978,11 @@ utila@~0.4:
|
||||
resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
|
||||
integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
|
||||
|
||||
v8-compile-cache-lib@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
|
||||
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
|
||||
|
||||
v8-compile-cache@^2.0.3:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
|
||||
@ -5159,3 +5231,8 @@ yaml@^1.10.0:
|
||||
version "1.10.2"
|
||||
resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||
|
||||
yn@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
||||
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
|
||||
|
||||
Loading…
Reference in New Issue
Block a user