Skip to content

Instantly share code, notes, and snippets.

@LussacZheng
Last active May 5, 2020 11:54
Show Gist options
  • Save LussacZheng/c6b006d98978b91b0985340946430723 to your computer and use it in GitHub Desktop.
Save LussacZheng/c6b006d98978b91b0985340946430723 to your computer and use it in GitHub Desktop.
Distribution for the built script of "vdao-api". (https://github.com/LussacZheng/vdao-api)
/**
* @description Distribution for the built script of "vdao-api".
* Source code on https://github.com/LussacZheng/vdao-api
* @author LussacZheng
* @file `vdao-api_worker.dist.js`
* @link https://gist.github.com/LussacZheng/c6b006d98978b91b0985340946430723
*/
!(function(e) {
var t = {}
function n(o) {
if (t[o]) return t[o].exports
var i = (t[o] = { i: o, l: !1, exports: {} })
return e[o].call(i.exports, i, i.exports, n), (i.l = !0), i.exports
}
;(n.m = e),
(n.c = t),
(n.d = function(e, t, o) {
n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: o })
}),
(n.r = function(e) {
'undefined' != typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }),
Object.defineProperty(e, '__esModule', { value: !0 })
}),
(n.t = function(e, t) {
if ((1 & t && (e = n(e)), 8 & t)) return e
if (4 & t && 'object' == typeof e && e && e.__esModule) return e
var o = Object.create(null)
if ((n.r(o), Object.defineProperty(o, 'default', { enumerable: !0, value: e }), 2 & t && 'string' != typeof e))
for (var i in e)
n.d(
o,
i,
function(t) {
return e[t]
}.bind(null, i),
)
return o
}),
(n.n = function(e) {
var t =
e && e.__esModule
? function() {
return e.default
}
: function() {
return e
}
return n.d(t, 'a', t), t
}),
(n.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t)
}),
(n.p = ''),
n((n.s = 1))
})([
function(e) {
e.exports = { a: 'https://github.com/LussacZheng/vdao-api' }
},
function(e, t, n) {
'use strict'
n.r(t)
const o = e => t => t.method.toLowerCase() === e.toLowerCase(),
i = o('connect'),
r = o('delete'),
s = o('get'),
a = o('head'),
l = o('options'),
u = o('patch'),
p = o('post'),
c = o('put'),
d = o('trace'),
h = e => t => {
const n = new URL(t.url).pathname
return (n.match(e) || [])[0] === n
}
class g {
constructor() {
this.routes = []
}
handle(e, t) {
return this.routes.push({ conditions: e, handler: t }), this
}
connect(e, t) {
return this.handle([i, h(e)], t)
}
delete(e, t) {
return this.handle([r, h(e)], t)
}
get(e, t) {
return this.handle([s, h(e)], t)
}
head(e, t) {
return this.handle([a, h(e)], t)
}
options(e, t) {
return this.handle([l, h(e)], t)
}
patch(e, t) {
return this.handle([u, h(e)], t)
}
post(e, t) {
return this.handle([p, h(e)], t)
}
put(e, t) {
return this.handle([c, h(e)], t)
}
trace(e, t) {
return this.handle([d, h(e)], t)
}
all(e) {
return this.handle([], e)
}
route(e) {
const t = this.resolve(e)
return t
? t.handler(e)
: new Response('resource not found', {
status: 404,
statusText: 'not found',
headers: { 'content-type': 'text/plain' },
})
}
resolve(e) {
return this.routes.find(
t =>
!(t.conditions && (!Array.isArray(t) || t.conditions.length)) ||
('function' == typeof t.conditions ? t.conditions(e) : t.conditions.every(t => t(e))),
)
}
}
const y = { headers: new Headers({ 'content-type': 'application/json;charset=utf-8' }) },
m = { headers: new Headers({ 'content-type': 'text/plain;charset=utf-8' }) },
f =
(new Headers({
'content-type': 'application/json;charset=utf-8',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
}),
new Headers({
'content-type': 'text/html;charset=utf-8',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
}),
'Request Error'),
w = 'Parser Error',
b = 'The respone data is NOT the expected type (JSON).',
_ = 'success',
v = 'failed',
z =
(new Headers({ 'content-type': 'application/json;charset=utf-8' }),
new Headers({ 'content-type': 'text/plain;charset=utf-8' }),
{
headers: new Headers({
'content-type': 'application/json;charset=utf-8',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
}),
}),
$ = {
headers: new Headers({
'content-type': 'text/html;charset=utf-8',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
}),
},
L = {
status: !1,
message: v,
info: {
name: 'video-downloader-deploy',
version: '2.0.0-alpha',
description: 'Video Downloaders (you-get, youtube-dl, annie) One-Click Deployment Batch.',
author: 'LussacZheng',
repository: { type: 'git', url: 'git+https://github.com/LussacZheng/video-downloader-deploy.git' },
homepage: 'https://github.com/LussacZheng/video-downloader-deploy',
keywords: [
'video-downloader',
'one-click-deploy',
'python-embeddable',
'you-get',
'youtube-dl',
'annie',
'ffmpeg',
],
},
sources: [],
}
async function O(e, t = z) {
const n = await fetch(decodeURI(e), t)
return await (async function(e) {
const { headers: t } = e,
n = t.get('content-type')
return n.includes('application/json')
? await e.json()
: (n.includes('application/text') || n.includes('text/html'), await e.text())
})(n)
}
const x = {
LATEST_32: 'latest-32',
LATEST_64: 'latest-64',
LATEST_BOTH: 'latest',
STABLE_32: 'stable-32',
STABLE_64: 'stable-64',
STABLE_BOTH: 'stable',
UNKNOWN: 'system-unknown',
},
T = { ZIP: 'format-zip', TAR: 'format-tar', EXE: 'format-exe', UNKNOWN: 'format-unknown' }
const R = {
getLabel: function(e, t, n = both) {
let o, i
switch (e) {
case 'zip':
o = T.ZIP
break
case 'tar':
o = T.TAR
break
case 'exe':
o = T.EXE
break
default:
o = T.UNKNOWN
}
if ('latest' === t)
switch (n) {
case '32':
i = x.LATEST_32
break
case '64':
i = x.LATEST_64
break
case 'both':
i = x.LATEST_BOTH
break
default:
i = x.UNKNOWN
}
else if ('stable' === t)
switch (n) {
case '32':
i = x.STABLE_32
break
case '64':
i = x.STABLE_64
break
case 'both':
i = x.STABLE_BOTH
break
default:
i = x.UNKNOWN
}
else i = x.UNKNOWN
return o + '/' + i
},
}
class S {
constructor() {}
static getKeyByName(e) {
for (const t in S.PROJs) if (S.PROJs[t] === e) return t
}
static includes(e) {
return S.NamesList.includes(e)
}
}
;(S.PROJs = {
you_get: 'you-get',
youtube_dl: 'youtube-dl',
annie: 'annie',
python_embed: 'python-embed',
ffmpeg: 'ffmpeg',
pypi_you_get: 'pypi_you-get',
pypi_youtube_dl: 'pypi_youtube_dl',
}),
(S.NamesList = []),
(S.KeysList = [])
for (const e in S.PROJs) S.NamesList.push(S.PROJs[e]), S.KeysList.push(e)
let E = { overview: !1, details: {} }
for (const e of S.KeysList) E.details[e] = !1
const k = {
getSingleStatus: function(e) {
if (S.includes(e)) {
const t = S.getKeyByName(e)
return E.details[t]
}
},
getOverviewStatus: function() {
const e = E.details
for (const t in e) if (!e[t]) return !1
return !0
},
setStatus: function(e, t) {
if (S.includes(e)) {
const n = S.getKeyByName(e)
E.details[n] = t
}
},
}
function N(e) {
let t = new Date(e),
n = {
formatMatcher: 'best fit',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: !1,
timeZone: 'UTC',
}
const o = {
zh_cn: { locale: 'zh-CN', timeZone: 'Asia/Shanghai' },
en_us: { locale: 'en-US', timeZone: 'America/New_York' },
}
let i = {}
for (const e in o) {
const r = o[e].timeZone,
s = Object.assign({}, n, { timeZone: r })
i[e] = t.toLocaleString(o[e].locale, s)
}
return i
}
function U(e) {
return new Date(e + ' UTC').toISOString().substr(0, 10)
}
function P(e) {
return new Date(e).toISOString().substr(0, 19) + 'Z'
}
function q(e, t) {
return e.replace(/\$\{(\w+)\}/gi, (e, n) => t[n])
}
function A(e, t) {
if (t instanceof Array) return e instanceof Array ? e.concat(t) : t
if ('[object Object]' !== t.toString()) return t
for (const n in t) e[n] ? (e[n] = A(e[n], t[n])) : (e[n] = t[n])
return e
}
const j = {
you_get: {
name: S.PROJs.you_get,
repo: 'soimort/you-get',
api: 'https://api.github.com/repos/soimort/you-get/releases/latest',
required_files: /^you-get-[\d\.]+\.tar\.gz$/i,
labelHandler: e => R.getLabel('tar', 'latest', 'both'),
},
youtube_dl: {
name: S.PROJs.youtube_dl,
repo: 'ytdl-org/youtube-dl',
api: 'https://api.github.com/repos/ytdl-org/youtube-dl/releases/latest',
required_files: /^youtube-dl(-[\d\.]+\.tar\.gz|\.exe)$/i,
labelHandler(e) {
const t = /gz$/i.test(e) ? 'tar' : 'exe'
return R.getLabel(t, 'latest', 'both')
},
},
annie: {
name: S.PROJs.annie,
repo: 'iawia002/annie',
api: 'https://api.github.com/repos/iawia002/annie/releases/latest',
required_files: /^annie_[\d\.]+_Windows_(32|64)-bit\.zip$/i,
labelHandler(e) {
const t = /64-bit/i.test(e) ? '64' : '32'
return R.getLabel('zip', 'latest', t)
},
},
},
J = 'github.com'
async function H(e) {
const t = (function(e) {
for (const t in j) if (j[t].name === e) return j[t]
return {}
})(e)
let n,
o,
i = { name: t.name, status: !1 }
try {
n = await O(t.api)
} catch (e) {
return console.error(e), (i.error = f), i
}
try {
o = (function(e, t) {
if (!/^{.*}$/i.test(JSON.stringify(e))) throw new TypeError(b)
let n = []
return (
e.assets
.filter(e => t.required_files.test(e.name))
.forEach(e => {
const o = {
label: t.labelHandler(e.name),
filename: e.name,
host: J,
urls: { origin: e.browser_download_url },
content_type: e.content_type,
size: e.size,
}
n.push(o)
}),
{
name: t.name,
status: !1,
version: e.tag_name.replace('v', ''),
time: e.published_at,
localetime: N(e.published_at),
releases: n,
}
)
})(n, t)
} catch (e) {
return console.error(e), (i.error = w), i
}
return k.setStatus(t.name, !0), (o.status = !0), Object.assign(i, o)
}
function W(e, t, n) {
let o = t.exec(e),
i = {}
return (
null !== o &&
((o.input = ''),
n.length > o.length - 1 && n.splice(o.length - 1),
n.forEach((e, t) => {
i[e] = o[t + 1]
})),
(t.lastIndex = 0),
i
)
}
var B = function(e, t, n, o = 'first') {
return 'last' === o
? (function(e, t, n) {
const o = e.match(t)
if (null !== o) {
return W(o[o.length - 1], t, n)
}
return {}
})(e, t, n)
: W(e, t, n)
}
const D = 'python-embed',
Z = 'https://www.python.org/downloads/mac-osx/',
K = '3.7',
M = { win32: 'python-${version}-embed-win32.zip', win64: 'python-${version}-embed-amd64.zip' },
I = 'python.org',
F = {
win32: {
origin: 'https://www.python.org/ftp/python/${version}/python-${version}-embed-win32.zip',
cn: 'https://mirrors.huaweicloud.com/python/${version}/python-${version}-embed-win32.zip',
cn2: 'https://npm.taobao.org/mirrors/python/${version}/python-${version}-embed-win32.zip',
},
win64: {
origin: 'https://www.python.org/ftp/python/${version}/python-${version}-embed-amd64.zip',
cn: 'https://mirrors.huaweicloud.com/python/${version}/python-${version}-embed-amd64.zip',
cn2: 'https://npm.taobao.org/mirrors/python/${version}/python-${version}-embed-amd64.zip',
},
}
async function C() {
let e,
t,
n = { name: D, status: !1 }
try {
e = await O(Z, $)
} catch (e) {
return console.error(e), (n.error = f), n
}
try {
t = (function(e) {
const { version: t } = B(e, /Latest Python 3 Release - Python ([\d\.]+)/gim, ['version']),
n = new RegExp(`Python ${t} - ([\\w\\d .,]+)`, 'gim'),
{ date: o } = B(e, n, ['date']),
i = new RegExp(`Python (${K}\\.\\d) - ([\\w\\d .,]+)`, 'gim'),
{ stableVersion: r, stableDate: s } = B(e, i, ['stableVersion', 'stableDate'])
return {
name: D,
status: !1,
version: t,
time: U(o),
stable: { version: r, time: U(s) },
releases: [
{
label: R.getLabel('zip', 'latest', '32'),
filename: q(M.win32, { version: t }),
host: I,
urls: {
origin: q(F.win32.origin, { version: t }),
cn: q(F.win32.cn, { version: t }),
cn2: q(F.win32.cn2, { version: t }),
},
content_type: 'application/zip',
},
{
label: R.getLabel('zip', 'latest', '64'),
filename: q(M.win64, { version: t }),
host: I,
urls: {
origin: q(F.win64.origin, { version: t }),
cn: q(F.win64.cn, { version: t }),
cn2: q(F.win64.cn2, { version: t }),
},
content_type: 'application/zip',
},
{
label: R.getLabel('zip', 'stable', '32'),
filename: q(M.win32, { version: r }),
host: I,
urls: {
origin: q(F.win32.origin, { version: r }),
cn: q(F.win32.cn, { version: r }),
cn2: q(F.win32.cn2, { version: r }),
},
content_type: 'application/zip',
},
{
label: R.getLabel('zip', 'stable', '64'),
filename: q(M.win64, { version: r }),
host: I,
urls: {
origin: q(F.win64.origin, { version: r }),
cn: q(F.win64.cn, { version: r }),
cn2: q(F.win64.cn2, { version: r }),
},
content_type: 'application/zip',
},
],
}
})(e)
} catch (e) {
return console.error(e), (n.error = w), n
}
return k.setStatus(D, !0), (t.status = !0), Object.assign(n, t)
}
const G = 'ffmpeg',
X = 'https://ffmpeg.zeranoe.com/builds/win64/static/',
V = { win32: 'ffmpeg-${version}-win32-static.zip', win64: 'ffmpeg-${version}-win64-static.zip' },
Y = 'zeranoe.com',
Q = {
win32: { origin: 'https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-${version}-win32-static.zip' },
win64: { origin: 'https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-${version}-win64-static.zip' },
}
async function ee() {
let e,
t,
n = { name: G, status: !1 }
try {
e = await O(X, $)
} catch (e) {
return console.error(e), (n.error = f), n
}
try {
t = (function(e) {
const { version: t } = B(e, /ffmpeg-(\d{8}-\w{7})-win64-static.zip/gim, ['version'], 'last'),
n = new RegExp(`(?<=ffmpeg-${t}-win64-static\\.zip).*(\\d{4}-[A-Za-z\\.]+-\\d{2} \\d{2}:\\d{2})`, 'gim'),
{ date: o } = B(e, n, ['date']),
{ stableVersion: i } = B(e, /ffmpeg-([\d\.]+)-win64-static.zip/gim, ['stableVersion'], 'last'),
r = new RegExp(`(?<=ffmpeg-${i}-win64-static\\.zip).*(\\d{4}-[A-Za-z\\.]+-\\d{2} \\d{2}:\\d{2})`, 'gim'),
{ stableDate: s } = B(e, r, ['stableDate'])
return {
name: G,
status: !1,
version: t,
time: U(o),
stable: { version: i, time: U(s) },
releases: [
{
label: R.getLabel('zip', 'latest', '32'),
filename: q(V.win32, { version: t }),
host: Y,
urls: { origin: q(Q.win32.origin, { version: t }) },
content_type: 'application/zip',
},
{
label: R.getLabel('zip', 'latest', '64'),
filename: q(V.win64, { version: t }),
host: Y,
urls: { origin: q(Q.win64.origin, { version: t }) },
content_type: 'application/zip',
},
{
label: R.getLabel('zip', 'stable', '32'),
filename: q(V.win32, { version: i }),
host: Y,
urls: { origin: q(Q.win32.origin, { version: i }) },
content_type: 'application/zip',
},
{
label: R.getLabel('zip', 'stable', '64'),
filename: q(V.win64, { version: i }),
host: Y,
urls: { origin: q(Q.win64.origin, { version: i }) },
content_type: 'application/zip',
},
],
}
})(e)
} catch (e) {
return console.error(e), (n.error = w), n
}
return k.setStatus(G, !0), (t.status = !0), Object.assign(n, t)
}
const te = {
pypi_you_get: {
name: S.PROJs.pypi_you_get,
repo: 'soimort/you-get',
api: 'https://pypi.org/pypi/you-get/json',
required_files: /^you-get-[\d\.]+\.tar\.gz$/i,
labelHandler: e => R.getLabel('tar', 'latest', 'both'),
},
pypi_youtube_dl: {
name: S.PROJs.pypi_youtube_dl,
repo: 'ytdl-org/youtube-dl',
api: 'https://pypi.org/pypi/youtube_dl/json',
required_files: /^youtube_dl-[\d\.]+\.tar\.gz$/i,
labelHandler: e => R.getLabel('tar', 'latest', 'both'),
},
},
ne = 'pypi.org',
oe = {
origin: 'https://files.pythonhosted.org/packages/${uniqueUrl}',
cn: 'https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/${uniqueUrl}',
cn2: 'https://mirrors.aliyun.com/pypi/packages/${uniqueUrl}',
cn3: 'https://mirrors.huaweicloud.com/repository/pypi/packages/${uniqueUrl}',
test: 'http://mirrors.163.com/pypi/packages/${uniqueUrl}',
REGEX: /(?<=packages\/)([a-z\d\/]{66})/gim,
}
async function ie(e) {
const t = (function(e) {
for (const t in te) if (te[t].name === e) return te[t]
return {}
})(e)
let n,
o,
i = { name: t.name, status: !1 }
try {
n = await O(t.api)
} catch (e) {
return console.error(e), (i.error = f), i
}
try {
o = (function(e, t) {
try {
e.releases = ''
} catch (e) {
throw new TypeError(b)
}
let n = []
const o = e.urls.find(e => t.required_files.test(e.filename)),
{ BLAKE2_256: i } = B(o.url, oe.REGEX, ['BLAKE2_256']),
r = `${i}/${o.filename}`,
s = {
label: t.labelHandler(o.filename),
filename: o.filename,
host: ne,
urls: {
origin: q(oe.origin, { uniqueUrl: r }),
cn: q(oe.cn, { uniqueUrl: r }),
cn2: q(oe.cn2, { uniqueUrl: r }),
cn3: q(oe.cn3, { uniqueUrl: r }),
test: q(oe.test, { uniqueUrl: r }),
},
content_type: 'application/x-tar',
size: o.size,
}
return (
n.push(s),
{
name: t.name,
status: !1,
version: e.info.version,
time: P(o.upload_time_iso_8601),
localetime: N(o.upload_time_iso_8601),
releases: n,
}
)
})(n, t)
} catch (e) {
return console.error(e), (i.error = w), i
}
return k.setStatus(t.name, !0), (o.status = !0), Object.assign(i, o)
}
var re = n(0)
async function se(e) {
const t = new g()
return (
t.get('.*/json', async () => {
const e = await (async function() {
let e = Object.create(null)
e = JSON.parse(JSON.stringify(L))
const t = await H(S.PROJs.you_get),
n = await H(S.PROJs.youtube_dl),
o = await H(S.PROJs.annie),
i = await C(),
r = await ee()
let s = await ie(S.PROJs.pypi_you_get),
a = await ie(S.PROJs.pypi_youtube_dl)
const l = A(s, t),
u = A(a, n)
e.sources.push(l, u, o, i, r)
const p = k.getOverviewStatus()
return (e.status = p), p && (e.message = _), e
})()
return new Response(JSON.stringify(e), y)
}),
t.get('.*/text', async () => {
const e = await (async function() {
const e = await H(S.PROJs.you_get),
t = await H(S.PROJs.youtube_dl),
n = await H(S.PROJs.annie),
o = await C(),
i = await ee(),
r = await ie(S.PROJs.pypi_you_get),
{ uniqueUrl: s } = B(r.releases[0].urls.origin, /(?<=packages\/)([a-z\d\/]{66}\/.*\.tar\.gz)/gim, [
'uniqueUrl',
])
let a = Object.create(null)
const l = N(Date.now()).zh_cn
var u
return (
(a = {
generatedTime:
((u = l),
new Date(u + ' UTC')
.toISOString()
.substr(0, 19)
.replace('T', ' ')),
python_time: o.stable.time,
python_version: o.stable.version,
youget_time: U(e.localetime.zh_cn),
youget_uniqueUrl: s,
youget_version: e.version,
youtubedl_time: U(t.localetime.zh_cn),
youtubedl_version: t.version,
annie_time: U(n.localetime.zh_cn),
annie_version: n.version,
ffmpeg_time: i.stable.time,
ffmpeg_version: i.stable.version,
}),
q(
'## Sources List of "video-downloader-deploy"\n## https://api.vdao.workers.dev/text --\x3e sources.txt\n## For Initial Deployment; Deployment of FFmpeg; Upgrade of You-Get.\n## ( Auto-Generated by "vdao-api" at ${generatedTime} )\n\n\x3c!-- DO NOT EDIT THIS FILE unless you understand the EXAMPLE. --\x3e\n\nEXAMPLE\n## Title or Info\n # Content that already downloaded or existing.\n Content to be downlaoded.\n $ Another (optional) source of the same content above. But the script will ignore this line. Exchange the URLs at your own risk.\nMirrors{\n [origin]\n URL of the content from original source. NO \'@\', called "switch on".\n [%region1%]\n @ URL of the content from mirror source in %region1%.\n $ "@ URL", that content will not to be downlaoded by this URL, called "switch off".\n [%region2%]\n @ For a same content in { }, only one URL is switched on at one time.\n}\n\n<skip>\n\n\n[common]\n## wget.exe , v1.20.3 , win32\n # https://eternallybored.org/misc/wget/1.20.3/32/wget.exe\n $ https://raw.githubusercontent.com/LussacZheng/video-downloader-deploy/master/res/wget.exe\n\n## 7za.exe , v19.00 , win32\n # https://raw.githubusercontent.com/LussacZheng/video-downloader-deploy/master/res/7za.exe\n[/common]\n\n\n[portable][quickstart][withpip]\n## Release log - Python\n## https://www.python.org/downloads/ or https://www.python.org/downloads/windows/\n## Last released: ${python_time}\n\n## python-embed.zip , v${python_version} , win32\nMirrors{\n [origin]\n https://www.python.org/ftp/python/${python_version}/python-${python_version}-embed-win32.zip\n [cn]\n @ https://mirrors.huaweicloud.com/python/${python_version}/python-${python_version}-embed-win32.zip\n $ https://npm.taobao.org/mirrors/python/${python_version}/python-${python_version}-embed-win32.zip\n [test]\n @ https://mirrors.huaweicloud.com/python/${python_version}/python-${python_version}-embed-win32.zip\n}\n[/portable][/quickstart][/withpip]\n\n\n[youget][portable][quickstart]\n## Release log - YouGet\n## https://pypi.org/project/you-get/#history or https://pypi.org/project/you-get/#files\n## Last released: ${youget_time}\n\n## you-get.tar.gz , v${youget_version}\nMirrors{\n [origin]\n https://files.pythonhosted.org/packages/${youget_uniqueUrl}\n $ https://github.com/soimort/you-get/releases/download/v${youget_version}/you-get-${youget_version}.tar.gz\n [cn]\n @ https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/${youget_uniqueUrl}\n $ https://mirrors.aliyun.com/pypi/packages/${youget_uniqueUrl}\n [test]\n @ https://mirrors.huaweicloud.com/repository/pypi/packages/${youget_uniqueUrl}\n $ http://mirrors.163.com/pypi/packages/${youget_uniqueUrl}\n}\n[/youget][/portable][/quickstart]\n\n\n[portable]\n## Release log - YoutubeDL\n## https://github.com/ytdl-org/youtube-dl/releases/latest\n## Last released: ${youtubedl_time}\n\n## youtube-dl.tar.gz , ${youtubedl_version}\n https://github.com/ytdl-org/youtube-dl/releases/download/${youtubedl_version}/youtube-dl-${youtubedl_version}.tar.gz\n[/portable]\n\n\n[portable][withpip]\n## Release log - Annie\n## https://github.com/iawia002/annie/releases/latest\n## Last released: ${annie_time}\n\n## annie_Windows.zip , v${annie_version}\nSystemType{\n [64]\n https://github.com/iawia002/annie/releases/download/${annie_version}/annie_${annie_version}_Windows_64-bit.zip\n [32]\n @ https://github.com/iawia002/annie/releases/download/${annie_version}/annie_${annie_version}_Windows_32-bit.zip\n}\n[/portable][/withpip]\n\n\n[withpip]\n## get-pip.py\n https://bootstrap.pypa.io/get-pip.py\n[/withpip]\n\n\n[ffmpeg]\n## Release log - FFmpeg\n## https://ffmpeg.org/download.html#releases or https://ffmpeg.zeranoe.com/builds/win64/static/\n## Last released: ${ffmpeg_time}\n\n## ffmpeg-static.zip , v${ffmpeg_version}\nSystemType{\n [64]\n https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-${ffmpeg_version}-win64-static.zip\n [32]\n @ https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-${ffmpeg_version}-win32-static.zip\n}\n[/ffmpeg]\n\n',
a,
)
)
})()
return new Response(e, m)
}),
t.get('/', () => new Response('Status: success\nUsage Instruction: ' + re.a)),
await t.route(e)
)
}
addEventListener('fetch', e => e.respondWith(se(e.request)))
},
])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment