36 lines
947 B
TypeScript
36 lines
947 B
TypeScript
import { URL } from 'url'
|
|
import * as path from 'path'
|
|
|
|
const filenamify = require('filenamify')
|
|
const _sanitize = require("sanitize-filename")
|
|
|
|
const sanitize_ex = (f) => {
|
|
let str: string = filenamify(_sanitize(f)).replace(/[^\x00-\x7F]/g, "").replace('_', '');
|
|
return str;
|
|
}
|
|
|
|
export interface IDownloadUrl{
|
|
urlParts: URL
|
|
pathParts: path.ParsedPath
|
|
filename: string
|
|
path:string
|
|
url: string
|
|
}
|
|
|
|
export const parseForDownload = (url: string, dst: string) : IDownloadUrl => {
|
|
|
|
const parsed = new URL(url);
|
|
const parts = path.parse(parsed.pathname)
|
|
|
|
const filename = sanitize_ex(decodeURI(parts.base))
|
|
const downloadPath = path.resolve(`${dst}/${filename}`)
|
|
const downloadUrl = parsed.origin + parsed.pathname
|
|
|
|
return {
|
|
urlParts:parsed,
|
|
pathParts: parts,
|
|
filename: filename,
|
|
path: downloadPath,
|
|
url: downloadUrl
|
|
}
|
|
} |