build(deps): removed @types/node and file-type
This commit is contained in:
parent
5e79dc32c5
commit
e0f4b0d7b5
7 changed files with 153 additions and 68 deletions
|
@ -30,7 +30,6 @@
|
||||||
"@types/chai": "4.3.5",
|
"@types/chai": "4.3.5",
|
||||||
"@types/chai-spies": "^1.0.4",
|
"@types/chai-spies": "^1.0.4",
|
||||||
"@types/mocha": "10.0.1",
|
"@types/mocha": "10.0.1",
|
||||||
"@types/node": "18.16.0",
|
|
||||||
"@types/node-forge": "1.3.2",
|
"@types/node-forge": "1.3.2",
|
||||||
"@types/ws": "8.5.4",
|
"@types/ws": "8.5.4",
|
||||||
"@typescript-eslint/eslint-plugin": "6.4.0",
|
"@typescript-eslint/eslint-plugin": "6.4.0",
|
||||||
|
|
|
@ -32,12 +32,12 @@
|
||||||
},
|
},
|
||||||
"browser": {
|
"browser": {
|
||||||
"./cjs/methods/files/_platform.js": "./cjs/methods/files/_platform.web.js",
|
"./cjs/methods/files/_platform.js": "./cjs/methods/files/_platform.web.js",
|
||||||
"./esm/methods/files/_platform.js": "./esm/methods/files/_platform.web.js"
|
"./esm/methods/files/_platform.js": "./esm/methods/files/_platform.web.js",
|
||||||
|
"./cjs/methods/files/download-file.js": "./cjs/methods/files/download-file.web.js",
|
||||||
|
"./esm/methods/files/download-file.js": "./esm/methods/files/download-file.web.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "18.16.0",
|
|
||||||
"@mtcute/core": "workspace:^",
|
"@mtcute/core": "workspace:^",
|
||||||
"@mtcute/file-id": "workspace:^",
|
"@mtcute/file-id": "workspace:^"
|
||||||
"file-type": "16.5.4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
5
packages/client/src/methods/files/download-file.web.ts
Normal file
5
packages/client/src/methods/files/download-file.web.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import { MtUnsupportedError } from '@mtcute/core'
|
||||||
|
|
||||||
|
export function downloadToFile() {
|
||||||
|
throw new MtUnsupportedError('Downloading to file is only supported in NodeJS')
|
||||||
|
}
|
|
@ -1,15 +1,12 @@
|
||||||
import fileType from 'file-type'
|
|
||||||
|
|
||||||
import { BaseTelegramClient, MtArgumentError, tl } from '@mtcute/core'
|
import { BaseTelegramClient, MtArgumentError, tl } from '@mtcute/core'
|
||||||
import { randomLong } from '@mtcute/core/utils.js'
|
import { randomLong } from '@mtcute/core/utils.js'
|
||||||
|
|
||||||
import { UploadedFile, UploadFileLike } from '../../types/index.js'
|
import { UploadedFile, UploadFileLike } from '../../types/index.js'
|
||||||
|
import { guessFileMime } from '../../utils/file-type.js'
|
||||||
import { determinePartSize, isProbablyPlainText } from '../../utils/file-utils.js'
|
import { determinePartSize, isProbablyPlainText } from '../../utils/file-utils.js'
|
||||||
import { bufferToStream, createChunkedReader, streamToBuffer } from '../../utils/stream-utils.js'
|
import { bufferToStream, createChunkedReader, streamToBuffer } from '../../utils/stream-utils.js'
|
||||||
import { _createFileStream, _extractFileStreamMeta, _handleNodeStream, _isFileStream } from './_platform.js'
|
import { _createFileStream, _extractFileStreamMeta, _handleNodeStream, _isFileStream } from './_platform.js'
|
||||||
|
|
||||||
const { fromBuffer: fileTypeFromBuffer } = fileType
|
|
||||||
|
|
||||||
const OVERRIDE_MIME: Record<string, string> = {
|
const OVERRIDE_MIME: Record<string, string> = {
|
||||||
// tg doesn't interpret `audio/opus` files as voice messages for some reason
|
// tg doesn't interpret `audio/opus` files as voice messages for some reason
|
||||||
'audio/opus': 'audio/ogg',
|
'audio/opus': 'audio/ogg',
|
||||||
|
@ -252,10 +249,11 @@ export async function uploadFile(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thisIdx === 0 && fileMime === undefined) {
|
if (thisIdx === 0 && fileMime === undefined) {
|
||||||
const fileType = await fileTypeFromBuffer(part)
|
const mime = guessFileMime(part)
|
||||||
fileMime = fileType?.mime
|
|
||||||
|
|
||||||
if (!fileMime) {
|
if (mime) {
|
||||||
|
fileMime = mime
|
||||||
|
} else {
|
||||||
// either plain text or random binary gibberish
|
// either plain text or random binary gibberish
|
||||||
// make an assumption based on the first 8 bytes
|
// make an assumption based on the first 8 bytes
|
||||||
// if all 8 bytes are printable ASCII characters,
|
// if all 8 bytes are printable ASCII characters,
|
||||||
|
|
138
packages/client/src/utils/file-type.ts
Normal file
138
packages/client/src/utils/file-type.ts
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
export function guessFileMime(chunk: Uint8Array): string | null {
|
||||||
|
if (chunk.length < 12) return null
|
||||||
|
|
||||||
|
// 2-byte magic numbers
|
||||||
|
const b0 = chunk[0]
|
||||||
|
const b1 = chunk[1]
|
||||||
|
if (b0 === 0x42 && b1 === 0x4d) return 'image/bmp'
|
||||||
|
if (b0 === 0x4d && b1 === 0x5a) return 'application/x-msdownload'
|
||||||
|
if (b0 === 0x1f && (b1 === 0x9d || b1 === 0xa0)) return 'application/x-compress'
|
||||||
|
if (b0 === 0x1f && b1 === 0x8b) return 'application/gzip'
|
||||||
|
|
||||||
|
// 3-byte magic numbers
|
||||||
|
const b2 = chunk[2]
|
||||||
|
if (b0 === 0x42 && b1 === 0x5a && b2 === 0x68) return 'application/x-bzip2'
|
||||||
|
if (b0 === 0x49 && b1 === 0x44 && b2 === 0x33) return 'audio/mpeg' // ID3v2
|
||||||
|
if (b0 === 0xff && (b1 === 0xfb || b1 === 0xf3 || b1 === 0xf2)) return 'audio/mpeg'
|
||||||
|
|
||||||
|
// 4-byte magic numbers
|
||||||
|
const b3 = chunk[3]
|
||||||
|
if (b0 === 0x50 && b1 === 0x4b && b2 === 0x03 && b3 === 0x04) return 'application/zip'
|
||||||
|
if (b0 === 0x38 && b1 === 0x42 && b2 === 0x50 && b3 === 0x53) return 'image/vnd.adobe.photoshop'
|
||||||
|
if (b0 === 0x7f && b1 === 0x45 && b2 === 0x4c && b3 === 0x46) return 'application/x-elf'
|
||||||
|
if (b0 === 0xfe && b1 === 0xed && b2 === 0xfa && b3 === 0xcf) return 'application/x-mach-binary'
|
||||||
|
if (b0 === 0x28 && b1 === 0xb5 && b2 === 0x2f && b3 === 0xfd) return 'application/zstd'
|
||||||
|
if (b0 === 0x66 && b1 === 0x4c && b2 === 0x61 && b3 === 0x43) return 'audio/x-flac'
|
||||||
|
|
||||||
|
if (b0 === 0xff && b1 === 0xd8 && b2 === 0xff && (b3 === 0xdb || b3 === 0xe0 || b3 === 0xee || b3 === 0xe1)) {
|
||||||
|
return 'image/jpeg'
|
||||||
|
}
|
||||||
|
|
||||||
|
// OggS
|
||||||
|
if (b0 === 0x4f && b1 === 0x67 && b2 === 0x67 && b3 === 0x53) {
|
||||||
|
// 28-36 bytes: type
|
||||||
|
if (chunk.length > 36) {
|
||||||
|
const type = String.fromCharCode(...chunk.subarray(28, 36))
|
||||||
|
if (type === 'OpusHead') return 'audio/ogg' // not audio/opus because Telegram is dumb
|
||||||
|
if (type.startsWith('\x80theora')) return 'video/ogg'
|
||||||
|
if (type.startsWith('\x01video')) return 'video/ogg'
|
||||||
|
if (type.startsWith('\x7fFLAC')) return 'audio/ogg'
|
||||||
|
if (type.startsWith('Speex ')) return 'audio/ogg'
|
||||||
|
if (type.startsWith('\x01vorbis')) return 'audio/ogg'
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'application/ogg'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5-byte magic numbers
|
||||||
|
const b4 = chunk[4]
|
||||||
|
if (b0 === 0x25 && b1 === 0x50 && b2 === 0x44 && b3 === 0x46 && b4 === 0x2d) return 'application/pdf'
|
||||||
|
|
||||||
|
// 6-byte magic numbers
|
||||||
|
const b5 = chunk[5]
|
||||||
|
|
||||||
|
if (b0 === 0x47 && b1 === 0x49 && b2 === 0x46 && b3 === 0x38) {
|
||||||
|
if ((b4 === 0x37 || b4 === 0x39) && b5 === 0x61) return 'image/gif'
|
||||||
|
}
|
||||||
|
if (b0 === 0x37 && b1 === 0x7a && b2 === 0xbc && b3 === 0xaf && b4 === 0x27 && b5 === 0x1c) {
|
||||||
|
return 'application/x-7z-compressed'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8-byte magic numbers
|
||||||
|
const b6 = chunk[6]
|
||||||
|
const b7 = chunk[7]
|
||||||
|
|
||||||
|
if (
|
||||||
|
b0 === 0x89 &&
|
||||||
|
b1 === 0x50 &&
|
||||||
|
b2 === 0x4e &&
|
||||||
|
b3 === 0x47 &&
|
||||||
|
b4 === 0x0d &&
|
||||||
|
b5 === 0x0a &&
|
||||||
|
b6 === 0x1a &&
|
||||||
|
b7 === 0x0a
|
||||||
|
) {
|
||||||
|
return 'image/png'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b0 === 0x52 && b1 === 0x61 && b2 === 0x72 && b3 === 0x21 && b4 === 0x1a && b5 === 0x07) {
|
||||||
|
if (chunk[6] === 0x00 || chunk[6] === 0x01) return 'application/x-rar-compressed'
|
||||||
|
}
|
||||||
|
|
||||||
|
// ftyp - iso container
|
||||||
|
if (b4 === 0x66 && b5 === 0x74 && b6 === 0x79 && b7 === 0x70 && chunk[8] & 0x60) {
|
||||||
|
const brandMajor = String.fromCharCode(...chunk.subarray(8, 12))
|
||||||
|
.replace('\0', ' ')
|
||||||
|
.trim()
|
||||||
|
|
||||||
|
switch (brandMajor) {
|
||||||
|
case 'avif':
|
||||||
|
case 'avis':
|
||||||
|
return 'image/avif'
|
||||||
|
case 'mif1':
|
||||||
|
return 'image/heif'
|
||||||
|
case 'msf1':
|
||||||
|
return 'image/heif-sequence'
|
||||||
|
case 'heic':
|
||||||
|
case 'heix':
|
||||||
|
return 'image/heic'
|
||||||
|
case 'hevc':
|
||||||
|
case 'hevx':
|
||||||
|
return 'image/heic-sequence'
|
||||||
|
case 'qt':
|
||||||
|
return 'video/quicktime'
|
||||||
|
case 'M4V':
|
||||||
|
case 'M4VH':
|
||||||
|
case 'M4VP':
|
||||||
|
return 'video/x-m4v'
|
||||||
|
case 'M4P':
|
||||||
|
return 'video/mp4'
|
||||||
|
case 'M4B':
|
||||||
|
return 'audio/mp4'
|
||||||
|
case 'M4A':
|
||||||
|
return 'audio/x-m4a'
|
||||||
|
case 'F4V':
|
||||||
|
return 'video/mp4'
|
||||||
|
case 'F4P':
|
||||||
|
return 'video/mp4'
|
||||||
|
case 'F4A':
|
||||||
|
return 'audio/mp4'
|
||||||
|
case 'F4B':
|
||||||
|
return 'audio/mp4'
|
||||||
|
case 'crx':
|
||||||
|
return 'image/x-canon-cr3'
|
||||||
|
default:
|
||||||
|
if (brandMajor.startsWith('3g')) {
|
||||||
|
if (brandMajor.startsWith('3g2')) {
|
||||||
|
return 'video/3gpp2'
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'video/3gpp'
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'video/mp4'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
|
@ -47,7 +47,6 @@
|
||||||
"@mtcute/tl": "workspace:^",
|
"@mtcute/tl": "workspace:^",
|
||||||
"@mtcute/tl-runtime": "workspace:^",
|
"@mtcute/tl-runtime": "workspace:^",
|
||||||
"@types/events": "3.0.0",
|
"@types/events": "3.0.0",
|
||||||
"@types/node": "18.16.0",
|
|
||||||
"big-integer": "1.6.51",
|
"big-integer": "1.6.51",
|
||||||
"events": "3.2.0",
|
"events": "3.2.0",
|
||||||
"long": "5.2.3"
|
"long": "5.2.3"
|
||||||
|
|
|
@ -27,9 +27,6 @@ importers:
|
||||||
'@types/mocha':
|
'@types/mocha':
|
||||||
specifier: 10.0.1
|
specifier: 10.0.1
|
||||||
version: 10.0.1
|
version: 10.0.1
|
||||||
'@types/node':
|
|
||||||
specifier: 18.16.0
|
|
||||||
version: 18.16.0
|
|
||||||
'@types/node-forge':
|
'@types/node-forge':
|
||||||
specifier: 1.3.2
|
specifier: 1.3.2
|
||||||
version: 1.3.2
|
version: 1.3.2
|
||||||
|
@ -120,12 +117,6 @@ importers:
|
||||||
'@mtcute/file-id':
|
'@mtcute/file-id':
|
||||||
specifier: workspace:^
|
specifier: workspace:^
|
||||||
version: link:../file-id
|
version: link:../file-id
|
||||||
'@types/node':
|
|
||||||
specifier: 18.16.0
|
|
||||||
version: 18.16.0
|
|
||||||
file-type:
|
|
||||||
specifier: 16.5.4
|
|
||||||
version: 16.5.4
|
|
||||||
|
|
||||||
packages/core:
|
packages/core:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -138,9 +129,6 @@ importers:
|
||||||
'@types/events':
|
'@types/events':
|
||||||
specifier: 3.0.0
|
specifier: 3.0.0
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
'@types/node':
|
|
||||||
specifier: 18.16.0
|
|
||||||
version: 18.16.0
|
|
||||||
big-integer:
|
big-integer:
|
||||||
specifier: 1.6.51
|
specifier: 1.6.51
|
||||||
version: 1.6.51
|
version: 1.6.51
|
||||||
|
@ -186,8 +174,6 @@ importers:
|
||||||
specifier: ^9.0.6
|
specifier: ^9.0.6
|
||||||
version: 9.0.6
|
version: 9.0.6
|
||||||
|
|
||||||
packages/crypto: {}
|
|
||||||
|
|
||||||
packages/crypto-node:
|
packages/crypto-node:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@mtcute/core':
|
'@mtcute/core':
|
||||||
|
@ -900,10 +886,6 @@ packages:
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@tokenizer/token@0.3.0:
|
|
||||||
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@tootallnate/once@2.0.0:
|
/@tootallnate/once@2.0.0:
|
||||||
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
|
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
|
@ -980,6 +962,7 @@ packages:
|
||||||
|
|
||||||
/@types/node@18.16.0:
|
/@types/node@18.16.0:
|
||||||
resolution: {integrity: sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==}
|
resolution: {integrity: sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/@types/normalize-package-data@2.4.1:
|
/@types/normalize-package-data@2.4.1:
|
||||||
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
||||||
|
@ -2599,15 +2582,6 @@ packages:
|
||||||
flat-cache: 3.0.4
|
flat-cache: 3.0.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/file-type@16.5.4:
|
|
||||||
resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
dependencies:
|
|
||||||
readable-web-to-node-stream: 3.0.2
|
|
||||||
strtok3: 6.3.0
|
|
||||||
token-types: 4.2.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/file-uri-to-path@1.0.0:
|
/file-uri-to-path@1.0.0:
|
||||||
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
|
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -4408,11 +4382,6 @@ packages:
|
||||||
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
|
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/peek-readable@4.1.0:
|
|
||||||
resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/picocolors@1.0.0:
|
/picocolors@1.0.0:
|
||||||
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
|
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -4581,13 +4550,6 @@ packages:
|
||||||
string_decoder: 1.3.0
|
string_decoder: 1.3.0
|
||||||
util-deprecate: 1.0.2
|
util-deprecate: 1.0.2
|
||||||
|
|
||||||
/readable-web-to-node-stream@3.0.2:
|
|
||||||
resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
dependencies:
|
|
||||||
readable-stream: 3.6.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/readdirp@3.6.0:
|
/readdirp@3.6.0:
|
||||||
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
||||||
engines: {node: '>=8.10.0'}
|
engines: {node: '>=8.10.0'}
|
||||||
|
@ -5077,14 +5039,6 @@ packages:
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/strtok3@6.3.0:
|
|
||||||
resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
dependencies:
|
|
||||||
'@tokenizer/token': 0.3.0
|
|
||||||
peek-readable: 4.1.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/supports-color@5.5.0:
|
/supports-color@5.5.0:
|
||||||
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
|
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
@ -5198,14 +5152,6 @@ packages:
|
||||||
is-number: 7.0.0
|
is-number: 7.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/token-types@4.2.1:
|
|
||||||
resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
dependencies:
|
|
||||||
'@tokenizer/token': 0.3.0
|
|
||||||
ieee754: 1.2.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/trim-newlines@3.0.1:
|
/trim-newlines@3.0.1:
|
||||||
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
Loading…
Reference in a new issue