├── iptv ├── .npmignore ├── assets │ ├── prefs.json │ └── icon.svg ├── .jshintrc ├── README.md ├── .gitignore ├── components │ ├── all.js │ ├── cctv.js │ ├── search.js │ └── index.js ├── main.js ├── package.json ├── .jsbeautifyrc └── yarn.lock ├── bilibili ├── .npmignore ├── .jshintrc ├── README.md ├── assets │ ├── icon.png │ └── prefs.json ├── .gitignore ├── .prettierrc ├── components │ ├── index.js │ ├── area.js │ ├── recommend.js │ ├── search.js │ ├── category.js │ └── video.js ├── main.js └── package.json ├── addon-index ├── .npmignore ├── .jshintrc ├── .gitignore ├── README.md ├── .prettierrc ├── main.js ├── package.json ├── .jsbeautifyrc ├── components │ └── index.js └── assets │ └── icon.svg ├── goudai ├── assets │ ├── prefs.json │ └── icon.png ├── .jshintrc ├── README.md ├── main.js ├── components │ ├── player.js │ ├── index.js │ ├── episode.js │ ├── search.js │ └── list.js ├── package.json ├── .jsbeautifyrc └── yarn.lock ├── README.md ├── package.json ├── .gitignore └── yarn.lock /iptv/.npmignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | dist/ -------------------------------------------------------------------------------- /bilibili/.npmignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | dist/ -------------------------------------------------------------------------------- /addon-index/.npmignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | dist/ -------------------------------------------------------------------------------- /goudai/assets/prefs.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /iptv/assets/prefs.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /iptv/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi": true, 3 | "esversion": 8, 4 | "indent": true 5 | } -------------------------------------------------------------------------------- /bilibili/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi": true, 3 | "esversion": 8, 4 | "indent": true 5 | } -------------------------------------------------------------------------------- /goudai/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi": true, 3 | "esversion": 8, 4 | "indent": true 5 | } -------------------------------------------------------------------------------- /addon-index/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi": true, 3 | "esversion": 8, 4 | "indent": true 5 | } -------------------------------------------------------------------------------- /iptv/README.md: -------------------------------------------------------------------------------- 1 | # IPTV 2 | 3 | ❤️ An awesome addon project for [Dora.js](https://dorajs.com/). -------------------------------------------------------------------------------- /bilibili/README.md: -------------------------------------------------------------------------------- 1 | # Bilibili 2 | 3 | ❤️ An awesome addon project for [Dora](https://dorajs.com/). -------------------------------------------------------------------------------- /goudai/README.md: -------------------------------------------------------------------------------- 1 | # 狗带TV 2 | 3 | ❤️ An awesome addon project for [Dora.js](https://dorajs.com/). -------------------------------------------------------------------------------- /iptv/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | .DS_Store 4 | npm-debug.log 5 | .yarn-integrity 6 | -------------------------------------------------------------------------------- /addon-index/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | .DS_Store 4 | npm-debug.log 5 | .yarn-integrity 6 | -------------------------------------------------------------------------------- /addon-index/README.md: -------------------------------------------------------------------------------- 1 | # 扩展检索 2 | 3 | ❤️ An awesome addon project of [Dora.js](https://dorajs.com/). -------------------------------------------------------------------------------- /goudai/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1024-js/awesome-dora/HEAD/goudai/assets/icon.png -------------------------------------------------------------------------------- /bilibili/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1024-js/awesome-dora/HEAD/bilibili/assets/icon.png -------------------------------------------------------------------------------- /bilibili/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | .DS_Store 4 | npm-debug.log 5 | yarn.lock 6 | .yarn-integrity 7 | package-lock.json -------------------------------------------------------------------------------- /iptv/components/all.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | fetch() { 3 | return playlist.items.map(item => convert(item)) 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # awesome-dora 2 | 收集 Dora.js 的仓库源、扩展 3 | 4 | 欢迎大家创建 PR 提交你的扩展! 5 | 本仓库源的地址:`https://1024-js.github.io/awesome-dora/index.json` 6 | -------------------------------------------------------------------------------- /iptv/components/cctv.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | fetch() { 3 | return playlist.items.filter(item => item.name.includes('CCTV')).map(item => convert(item)) 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /iptv/components/search.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | fetch({ args }) { 3 | return playlist.items 4 | .filter(item => item.name.includes(args.keyword)) 5 | .map(item => convert(item)) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "displayName": "1024-js", 3 | "license": "MIT", 4 | "scripts": { 5 | "build": "dora repo" 6 | }, 7 | "dependencies": { 8 | "@dora-app/cli": "^1.1.3" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bilibili/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "semi": false, 5 | "singleQuote": true, 6 | "trailingComma": "none", 7 | "bracketSpacing": true, 8 | "arrowParens": "avoid" 9 | } 10 | -------------------------------------------------------------------------------- /addon-index/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "semi": false, 5 | "singleQuote": true, 6 | "trailingComma": "none", 7 | "bracketSpacing": true, 8 | "arrowParens": "avoid", 9 | "endOfLine": "lf" 10 | } 11 | -------------------------------------------------------------------------------- /goudai/main.js: -------------------------------------------------------------------------------- 1 | if (typeof $dora == undefined) { 2 | console.log('This project can only run on Dora app, please visit https://dorajs.com for more information') 3 | process.exit(-1) 4 | } 5 | module.exports = { 6 | cheerio: require('cheerio') 7 | } 8 | -------------------------------------------------------------------------------- /goudai/components/player.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'video', 3 | async fetch({ args }) { 4 | let resp = await $http.get(args.url) 5 | $ = cheerio.load(resp.data) 6 | return { 7 | url: $('#fed-play-iframe').attr('data-play') 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /iptv/components/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'topTab', 3 | searchRoute: $route('search'), 4 | fetch() { 5 | return [{ 6 | title: '全部', 7 | route: $route('all') 8 | }, { 9 | title: 'cctv', 10 | route: $route('cctv') 11 | }] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /addon-index/main.js: -------------------------------------------------------------------------------- 1 | if (typeof $dora == 'undefined') { 2 | console.error('This project runs only in Dora.js.') 3 | console.error('Please visit https://dorajs.com/ for more information.') 4 | process.exit(-1) 5 | } 6 | 7 | console.info('Congratulation, your addon runs successfully!') 8 | const arr = $storage.get('blacklist') || [] 9 | 10 | global.blacklist = new Set() 11 | arr.forEach(element => { 12 | blacklist.add(element) 13 | }) 14 | console.log(blacklist) 15 | -------------------------------------------------------------------------------- /bilibili/assets/prefs.json: -------------------------------------------------------------------------------- 1 | { 2 | "cover": { 3 | "type": "string", 4 | "default": "system", 5 | "title": "封面图", 6 | "options": [{ 7 | "value": "system", 8 | "title": "系统截图" 9 | }, { 10 | "value": "user", 11 | "title": "主播设置" 12 | }] 13 | }, 14 | "recommend": { 15 | "type": "boolean", 16 | "default": true, 17 | "title": "是否显示推荐" 18 | } 19 | } -------------------------------------------------------------------------------- /bilibili/components/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'topTab', 3 | async fetch() { 4 | let areas = await this.getAreas(); 5 | let items = areas.map(item => { 6 | return { 7 | title: item.name, 8 | route: $route('area', { 9 | id: item.id 10 | }), 11 | } 12 | }) 13 | if ($prefs.get('recommend')) { 14 | items.splice(0, 0, { 15 | title: '推荐', 16 | route: $route('recommend', {}), 17 | }) 18 | } 19 | return { 20 | nextPage: null, 21 | items: items 22 | } 23 | }, 24 | created() {} 25 | } 26 | -------------------------------------------------------------------------------- /addon-index/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dorajs-index", 3 | "displayName": "扩展检索", 4 | "version": "1.0.0", 5 | "uuid": "50c482bd-9a5a-480a-9f3c-3fb054485111", 6 | "description": "扩展检索", 7 | "icon": "assets/icon.svg", 8 | "prefs": "assets/prefs.json", 9 | "main": "main.js", 10 | "license": "UNLICENSED", 11 | "author": { 12 | "name": "1024.js" 13 | }, 14 | "engineStrick": true, 15 | "repository": { 16 | "type": "git", 17 | "url": "" 18 | }, 19 | "homepage": "", 20 | "engines": { 21 | "Dora.js": ">=1.5.1" 22 | }, 23 | "keywords": [ 24 | "Dora.js" 25 | ], 26 | "dependencies": {} 27 | } 28 | -------------------------------------------------------------------------------- /goudai/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dorajs-gou-dai", 3 | "displayName": "狗带TV", 4 | "version": "1.1.0", 5 | "uuid": "86add9e4-5e28-497a-b7bc-c478af9b4aeb", 6 | "description": "狗带TV:电影、电视剧、动漫、综艺", 7 | "icon": "assets/icon.png", 8 | "prefs": "assets/prefs.json", 9 | "main": "main.js", 10 | "license": "UNLICENSED", 11 | "author": { 12 | "name": "1024.js" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "" 17 | }, 18 | "homepage": "", 19 | "engines": { 20 | "dora": ">=1.0.1" 21 | }, 22 | "keywords": [ 23 | "Dora.js" 24 | ], 25 | "dependencies": { 26 | "cheerio": "^1.0.0-rc.3" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /iptv/main.js: -------------------------------------------------------------------------------- 1 | if (typeof $dora == undefined) { 2 | console.log('This project can only run on Dora app, please visit https://dorajs.com for more information') 3 | process.exit(-1) 4 | } 5 | 6 | console.log('Congratulation, your addon run successfully!') 7 | 8 | const fs = require('fs') 9 | const parser = require('iptv-playlist-parser') 10 | 11 | const data = fs.readFileSync('assets/cn.m3u', { encoding: 'utf-8' }) 12 | 13 | module.exports = { 14 | playlist: parser.parse(data), 15 | convert(item) { 16 | return { 17 | title: item.name, 18 | route: $route('@video', { 19 | url: item.url, 20 | isLive: true 21 | }) 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /iptv/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dorajs-iptv", 3 | "displayName": "IPTV", 4 | "version": "1.0.1", 5 | "uuid": "a363fa50-6c1b-4f3a-931a-44ee86c26abe", 6 | "description": "列表节选自 GitHub 上超级🔥的 iptv-org/iptv 项目,包含数千个电视节目", 7 | "icon": "assets/icon.svg", 8 | "prefs": "assets/prefs.json", 9 | "main": "main.js", 10 | "license": "UNLICENSED", 11 | "author": { 12 | "name": "1024.js" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "" 17 | }, 18 | "homepage": "", 19 | "engines": { 20 | "dora": ">=1.0.1" 21 | }, 22 | "keywords": [ 23 | "Dora.js" 24 | ], 25 | "dependencies": { 26 | "iptv-playlist-parser": "^0.3.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /bilibili/main.js: -------------------------------------------------------------------------------- 1 | var _areas = null; 2 | $dora.mixin({ 3 | async getAreas() { 4 | if (_areas === null) { 5 | const response = await $http.get(`${endpoint}/v1/Area/getList`); 6 | _areas = response.data.data; 7 | console.log('fetch areas success.') 8 | return _areas; 9 | } 10 | return _areas; 11 | }, 12 | beforeCreate() { 13 | console.log(this.args) 14 | } 15 | }) 16 | $http.defaults.headers.common["User-Agent"] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' 17 | $http.defaults.headers.common["Accept"] = '*/*' 18 | module.exports = { 19 | endpoint: 'https://api.live.bilibili.com/room' 20 | } 21 | -------------------------------------------------------------------------------- /goudai/components/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'bottomTab', 3 | searchRoute: $route('search'), 4 | fetch() { 5 | return [{ 6 | title: '电影', 7 | image: $icon('movie'), 8 | route: $route('list', { 9 | type: 1 10 | }) 11 | }, { 12 | title: '电视剧', 13 | image: $icon('tv'), 14 | route: $route('list', { 15 | type: 2 16 | }) 17 | }, { 18 | title: '动漫', 19 | image: $icon('games'), 20 | route: $route('list', { 21 | type: 42 22 | }) 23 | }, { 24 | title: '综艺', 25 | image: $icon('music_video'), 26 | route: $route('list', { 27 | type: 44 28 | }) 29 | }] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /goudai/.jsbeautifyrc: -------------------------------------------------------------------------------- 1 | { 2 | "allowed_file_extensions": ["js", "json", "jshintrc", "jsbeautifyrc"], 3 | "brace_style": "collapse,preserve-inline", 4 | "break_chained_methods": false, 5 | "e4x": false, 6 | "end_with_newline": true, 7 | "indent_char": " ", 8 | "indent_level": 0, 9 | "indent_size": 2, 10 | "indent_with_tabs": false, 11 | "jslint_happy": false, 12 | "keep_array_indentation": false, 13 | "keep_function_indentation": false, 14 | "max_preserve_newlines": 0, 15 | "preserve_newlines": true, 16 | "space_after_anon_function": false, 17 | "space_before_conditional": true, 18 | "space_in_empty_paren": false, 19 | "space_in_paren": false, 20 | "unescape_strings": false, 21 | "wrap_line_length": 0 22 | } 23 | -------------------------------------------------------------------------------- /iptv/.jsbeautifyrc: -------------------------------------------------------------------------------- 1 | { 2 | "allowed_file_extensions": ["js", "json", "jshintrc", "jsbeautifyrc"], 3 | "brace_style": "collapse,preserve-inline", 4 | "break_chained_methods": false, 5 | "e4x": false, 6 | "end_with_newline": true, 7 | "indent_char": " ", 8 | "indent_level": 0, 9 | "indent_size": 2, 10 | "indent_with_tabs": false, 11 | "jslint_happy": false, 12 | "keep_array_indentation": false, 13 | "keep_function_indentation": false, 14 | "max_preserve_newlines": 0, 15 | "preserve_newlines": true, 16 | "space_after_anon_function": false, 17 | "space_before_conditional": true, 18 | "space_in_empty_paren": false, 19 | "space_in_paren": false, 20 | "unescape_strings": false, 21 | "wrap_line_length": 0 22 | } 23 | -------------------------------------------------------------------------------- /addon-index/.jsbeautifyrc: -------------------------------------------------------------------------------- 1 | { 2 | "allowed_file_extensions": ["js", "json", "jshintrc", "jsbeautifyrc"], 3 | "brace_style": "collapse,preserve-inline", 4 | "break_chained_methods": false, 5 | "e4x": false, 6 | "end_with_newline": true, 7 | "indent_char": " ", 8 | "indent_level": 0, 9 | "indent_size": 2, 10 | "indent_with_tabs": false, 11 | "jslint_happy": false, 12 | "keep_array_indentation": false, 13 | "keep_function_indentation": false, 14 | "max_preserve_newlines": 0, 15 | "preserve_newlines": true, 16 | "space_after_anon_function": false, 17 | "space_before_conditional": true, 18 | "space_in_empty_paren": false, 19 | "space_in_paren": false, 20 | "unescape_strings": false, 21 | "wrap_line_length": 0 22 | } 23 | -------------------------------------------------------------------------------- /bilibili/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dorajs-bililive", 3 | "displayName": "B 直播", 4 | "version": "1.2.0", 5 | "uuid": "a5ae5c73-d95f-4380-8f33-c3328462e1b3", 6 | "description": "哔哩哔哩 (゜-゜)つロ 干杯~", 7 | "icon": "assets/icon.png", 8 | "prefs": "assets/prefs.json", 9 | "main": "main.js", 10 | "updates": "适配 Dora.js 1.4.0\n修复弹幕重新打开后无法加载弹幕的问题", 11 | "license": "MIT", 12 | "author": { 13 | "name": "1024.js" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "" 18 | }, 19 | "homepage": "", 20 | "engines": { 21 | "dora": ">=1.4.0" 22 | }, 23 | "keywords": [ 24 | "Dora.js" 25 | ], 26 | "categories": [ 27 | "video" 28 | ], 29 | "dependencies": { 30 | "bilibili-danmaku-client": "^2.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /goudai/components/episode.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'list', 3 | async fetch() { 4 | let resp = await $http.get(this.args.url) 5 | $ = cheerio.load(resp.data) 6 | var parent = $('.fed-part-rows') 7 | let links = $('a', parent).filter(function(i, el) { 8 | let t = $(el) 9 | if (!t.has('href')) { 10 | return false 11 | } 12 | return $(el).attr('href').startsWith('/vodplay') 13 | }) 14 | let items = [] 15 | 16 | links.each((index, el) => { 17 | let link = $(el) 18 | let url = `http://www.byjsj.cn${link.attr('href')}` 19 | items.push({ 20 | title: link.text(), 21 | link: url, 22 | route: $route('player', { 23 | url: url 24 | }) 25 | }) 26 | }) 27 | return { 28 | items: items 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /bilibili/components/area.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'list', 3 | async fetch() { 4 | const areas = await this.getAreas(); 5 | let area = areas.find(area => { 6 | return area.id == this.args.id 7 | }) 8 | if (area == null) { 9 | throw Error(`${this.args.id} area not found`) 10 | } 11 | return { 12 | next_page: null, 13 | items: area.list.map(item => { 14 | return { 15 | title: item.name, 16 | route: $route('category', { 17 | areaId: item.id, 18 | parentId: this.args.id 19 | }), 20 | style: 'icon', 21 | link: `https://live.bilibili.com/p/eden/area-tags?parentAreaId=${this.args.id}&areaId=${item.id}`, 22 | image: item.pic 23 | } 24 | }) 25 | } 26 | }, 27 | beforeCreated() { 28 | this.title = this.args.title 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /goudai/components/search.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | async fetch({ page, args }) { 3 | let url = `http://www.byjsj.cn/vodsearch/${encodeURI(args.keyword)}----------${page||''}---.html` 4 | let resp = await $http.get(url) 5 | $ = cheerio.load(resp.data) 6 | var dls = $('dl') 7 | let items = [] 8 | dls.each((i, dl) => { 9 | let h1 = $('h1', dl) 10 | let link = $('a', h1) 11 | let title = link.text() 12 | let url = `http://www.byjsj.cn${link.attr('href')}` 13 | items.push({ 14 | link: url, 15 | title: title, 16 | style: 'vod', 17 | image: $('.fed-lazy', dl).attr('data-original'), 18 | summary: $('.fed-part-esan').text(), 19 | route: $route('episode', { 20 | url: url 21 | }) 22 | }) 23 | }) 24 | return { 25 | nextPage: (page || 1) + 1, 26 | items: items 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /goudai/components/list.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | async fetch({ page, args }) { 3 | let resp = await $http.get(`http://www.byjsj.cn/vodshow/${args.type}--------${page || ''}---.html`) 4 | let html = resp.data 5 | const $ = cheerio.load(html) 6 | let list = $('li', '.fed-list-info') 7 | let items = [] 8 | list.each((index, li) => { 9 | let link = $('.fed-list-pics', li) 10 | let title = $('.fed-list-title', li).text() 11 | let url = `http://www.byjsj.cn/${link.attr('href')}` 12 | items.push({ 13 | link: url, 14 | style: 'vod', 15 | image: link.attr('data-original'), 16 | title: title, 17 | summary: $('.fed-list-desc', li).text(), 18 | label: $('span', link).text(), 19 | route: $route('episode', { 20 | url: url 21 | }) 22 | }) 23 | }) 24 | return { 25 | nextPage: (page || 1) + 1, 26 | items: items 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /bilibili/components/recommend.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'list', 3 | async fetch({ page }) { 4 | page = page || 1 5 | const url = `${endpoint}/v1/room/get_user_recommend?page=${page}` 6 | let response = await $http.get(url) 7 | let data = response.data.data 8 | let cover_type = $prefs.get('cover') 9 | let items = data.map(item => { 10 | return { 11 | title: item.title, 12 | route: $route('video', { 13 | roomId: item.roomid 14 | }), 15 | style: 'live', 16 | image: cover_type == 'system' ? item.system_cover : item.user_cover, 17 | author: { 18 | name: item.uname, 19 | avatar: item.face, 20 | route: $route(`https://space.bilibili.com/${item.uid}`) 21 | }, 22 | link: `https://live.bilibili.com${item.link}`, 23 | label: item.areaName, 24 | viewerCount: item.online 25 | } 26 | }) 27 | return { 28 | nextPage: page + 1, 29 | items: items 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /bilibili/components/search.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'folder', 3 | style: 'live', 4 | async fetch({page}) { 5 | this.subtitle = this.args.keyword 6 | page = page || 1 7 | const url = `${endpoint}/v1/room/get_user_recommend?page=${page}` 8 | let response = await $http.get(url) 9 | let data = response.data.data 10 | let cover_type = $prefs.get('cover') 11 | let items = data.map(item => { 12 | return { 13 | title: item.title, 14 | route: $route.video('video', { 15 | roomId: item.roomid 16 | }), 17 | image: cover_type == 'system' ? item.system_cover : item.user_cover, 18 | author: { 19 | name: item.uname, 20 | avatar: item.face, 21 | route: $route.url(`https://space.bilibili.com/${item.uid}`) 22 | }, 23 | link: `https://live.bilibili.com${item.link}`, 24 | label: item.areaName, 25 | number: item.online 26 | } 27 | }) 28 | return { 29 | nextPage: page + 1, 30 | items: items 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /bilibili/components/category.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'list', 3 | async fetch({ page }) { 4 | page = page || 1 5 | let url = `${endpoint}/v3/area/getRoomList?platform=web&parent_area_id=${this.args.parentId}&cate_id=0&area_id=${this.args.areaId}&sort_type=online&page=${page}&page_size=30&tag_version=1` 6 | let response = await $http.get(url) 7 | let items = response.data.data.list 8 | let cover_type = $prefs.get('cover') 9 | return { 10 | nextPage: page, 11 | items: items.map(item => { 12 | return { 13 | title: item.title, 14 | route: $route('video', { 15 | roomId: item.roomid 16 | }), 17 | link: `https://live.bilibili.com${item.link}`, 18 | image: cover_type == 'system' ? item.system_cover : item.user_cover, 19 | style: 'live', 20 | author: { 21 | name: item.uname, 22 | avatar: item.face, 23 | route: $route(`https://space.bilibili.com/${item.uid}`) 24 | }, 25 | label: item.area_name, 26 | viewerCount: item.online 27 | } 28 | }) 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /addon-index/components/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: 'list', 3 | created() { 4 | if (!$storage.has('notice')) { 5 | $storage.put('notice', true) 6 | $input.confirm('长按可加入黑名单') 7 | } 8 | }, 9 | async fetch({ args, page }) { 10 | offset = page || 0 11 | const resp = await $http.get( 12 | `http://registry.npmjs.com/-/v1/search?text=Dora.js&from=${offset}` 13 | ) 14 | const count = resp.data.objects.length 15 | return { 16 | items: resp.data.objects 17 | .map(item => item.package) 18 | .filter(package => !blacklist.has(package.name)) 19 | .map(package => ({ 20 | title: package.name, 21 | summary: package.description, 22 | onClick: async () => { 23 | $dora.install(`npm://${package.name}`) 24 | }, 25 | onLongClick: () => { 26 | this.showOptions(package) 27 | } 28 | })), 29 | nextPage: resp.data.total > count + offset ? count : null 30 | } 31 | }, 32 | async showOptions(package) { 33 | const option = await $input.select({ 34 | title: '选项', 35 | options: [ 36 | { 37 | title: '加入黑名单', 38 | onClick: () => { 39 | blacklist.add(package.name) 40 | $storage.put('blacklist', Array.from(blacklist)) 41 | $ui.toast(`added ${package.name} to backlist`) 42 | } 43 | }, 44 | { 45 | title: `@${package.publisher.username}`, 46 | onClick: () => { 47 | $ui.viewUser(package.publisher.username) 48 | } 49 | } 50 | ] 51 | }) 52 | if (option) { 53 | option.onClick() 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | lerna-debug.log* 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 13 | 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | *.lcov 26 | 27 | # nyc test coverage 28 | .nyc_output 29 | 30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 31 | .grunt 32 | 33 | # Bower dependency directory (https://bower.io/) 34 | bower_components 35 | 36 | # node-waf configuration 37 | .lock-wscript 38 | 39 | # Compiled binary addons (https://nodejs.org/api/addons.html) 40 | build/Release 41 | 42 | # Dependency directories 43 | node_modules/ 44 | jspm_packages/ 45 | 46 | # TypeScript v1 declaration files 47 | typings/ 48 | 49 | # TypeScript cache 50 | *.tsbuildinfo 51 | 52 | # Optional npm cache directory 53 | .npm 54 | 55 | # Optional eslint cache 56 | .eslintcache 57 | 58 | # Optional REPL history 59 | .node_repl_history 60 | 61 | # Output of 'npm pack' 62 | *.tgz 63 | 64 | # Yarn Integrity file 65 | .yarn-integrity 66 | 67 | # dotenv environment variables file 68 | .env 69 | .env.test 70 | 71 | # parcel-bundler cache (https://parceljs.org/) 72 | .cache 73 | 74 | # next.js build output 75 | .next 76 | 77 | # nuxt.js build output 78 | .nuxt 79 | 80 | # vuepress build output 81 | .vuepress/dist 82 | 83 | # Serverless directories 84 | .serverless/ 85 | 86 | # FuseBox cache 87 | .fusebox/ 88 | 89 | # DynamoDB Local files 90 | .dynamodb/ 91 | 92 | .output 93 | 94 | *.log 95 | dist/ 96 | package-lock.json 97 | .vscode 98 | -------------------------------------------------------------------------------- /iptv/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime-corejs2@^7.2.0": 6 | version "7.7.6" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.6.tgz#50b7cd4eab929b4cb66167c4972d35eaceaa124b" 8 | integrity sha512-QYp/8xdH8iMin3pH5gtT/rUuttVfIcOhWBC3wh9Eh/qs4jEe39+3DpCDLgWXhMQgiCTOH8mrLSvQ0OHOCcox9g== 9 | dependencies: 10 | core-js "^2.6.5" 11 | regenerator-runtime "^0.13.2" 12 | 13 | core-js@^2.6.5: 14 | version "2.6.11" 15 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" 16 | integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== 17 | 18 | decamelize@^3.2.0: 19 | version "3.2.0" 20 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851" 21 | integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw== 22 | dependencies: 23 | xregexp "^4.2.4" 24 | 25 | iptv-playlist-parser@^0.3.0: 26 | version "0.3.0" 27 | resolved "https://registry.yarnpkg.com/iptv-playlist-parser/-/iptv-playlist-parser-0.3.0.tgz#d08129fa2d7bb03fbef1767d96fca902928e8301" 28 | integrity sha512-FA9B+8Lh+0KtWWXDaxzFf1DY3QJI+mGCZP/E51XoJcfahnajyyqdfI1ClpQquFHok2CLNqnfbeW6rzJN9TCREg== 29 | dependencies: 30 | decamelize "^3.2.0" 31 | m3u8-file-parser "^0.2.2" 32 | 33 | m3u8-file-parser@^0.2.2: 34 | version "0.2.2" 35 | resolved "https://registry.yarnpkg.com/m3u8-file-parser/-/m3u8-file-parser-0.2.2.tgz#6e3f31524a4b0c4d3f6c517d6706c7b17ee776e6" 36 | integrity sha512-OW2m2wcVh4g55MKpe5jxp4AOkpUVQEuaXEF8YTnIP1eAPmLtmuzfk+QcHqA+raqK3zdkz/nHjNvoCKn0k6UgzA== 37 | 38 | regenerator-runtime@^0.13.2: 39 | version "0.13.3" 40 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" 41 | integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== 42 | 43 | xregexp@^4.2.4: 44 | version "4.2.4" 45 | resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.2.4.tgz#02a4aea056d65a42632c02f0233eab8e4d7e57ed" 46 | integrity sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA== 47 | dependencies: 48 | "@babel/runtime-corejs2" "^7.2.0" 49 | -------------------------------------------------------------------------------- /addon-index/assets/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /bilibili/components/video.js: -------------------------------------------------------------------------------- 1 | const qualityLevels = { 2 | '1': 'low', 3 | '2': 'super', 4 | '3': 'high', 5 | '4': 'blue' 6 | } 7 | const DanmakuClient = require('bilibili-danmaku-client') 8 | module.exports = { 9 | quality: null, 10 | line_id: 0, 11 | type: 'video', 12 | async fetch({ args }) { 13 | let url = `${endpoint}/v1/Room/playUrl?cid=${args.roomId}&platform=android&otype=json` 14 | if (this.quality) { 15 | url += `&quality=${this.quality}` 16 | } 17 | const resp = await $http.get(url) 18 | let data = resp.data.data 19 | if (!data.quality_description) { 20 | throw new Error('获取视频流信息失败 :(') 21 | } 22 | let clarifyIndex = 0 23 | let lineIndex = 0 24 | let clarifies = data.quality_description.map((quality, index) => { 25 | if (quality.qn == this.quality) { 26 | clarifyIndex = index 27 | } 28 | return { 29 | // 'level': qualityLevels[quality.qn] || 'unknown', 30 | title: quality.desc, 31 | args: { 32 | quality: quality.qn 33 | } 34 | } 35 | }) 36 | let lines = data.durl.map((durl, index) => { 37 | if (index == this.line_id) { 38 | lineIndex = index 39 | } 40 | return { 41 | title: index == 0 ? '主线路' : `线路 ${index + 1}`, 42 | args: { 43 | url: durl.url 44 | } 45 | } 46 | }) 47 | // this.client = new DanmakuClient(5441); 48 | return { 49 | url: data.durl[this.line_id].url || data.durl[0].url, 50 | selectors: [ 51 | { 52 | title: '清晰度', 53 | select: clarifyIndex, 54 | options: clarifies, 55 | onSelect: option => { 56 | console.log(option) 57 | this.quality = option.args.quality 58 | this.refresh() 59 | } 60 | }, 61 | { 62 | title: '线路', 63 | select: lineIndex, 64 | options: lines, 65 | onSelect: option => { 66 | this.url = option.args.url 67 | } 68 | } 69 | ] 70 | } 71 | }, 72 | startDanmaku() { 73 | console.log(`startDanmaku: roomId=${this.args.roomId}`) 74 | if (this.client) { 75 | this.client.terminate() 76 | } 77 | this.client = new DanmakuClient(parseInt(this.args.roomId)) 78 | this.client.start() 79 | this.client.on('event', ({ name, content }) => { 80 | switch (name) { 81 | case 'danmaku': 82 | console.log(content) 83 | this.addDanmaku({ 84 | nick: content.sender.name, 85 | uid: content.sender.uid, 86 | content: content.content 87 | }) 88 | break 89 | case 'gift': 90 | break 91 | } 92 | }) 93 | this.client.on('open', () => console.log('Client opened.')) 94 | this.client.on('close', () => console.log('Client closed.')) 95 | this.client.on('error', () => console.log('Client error.')) 96 | }, 97 | stopDanmaku() { 98 | if (this.client) { 99 | this.client.terminate() 100 | this.client = null 101 | } 102 | }, 103 | // sendDanmaku(content) { 104 | // $ui.toast(`TODO: content=${content}`) 105 | // } 106 | } 107 | -------------------------------------------------------------------------------- /iptv/assets/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icon 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /goudai/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@*": 6 | version "12.12.17" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.17.tgz#191b71e7f4c325ee0fb23bc4a996477d92b8c39b" 8 | integrity sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA== 9 | 10 | boolbase@~1.0.0: 11 | version "1.0.0" 12 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 13 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 14 | 15 | cheerio@^1.0.0-rc.3: 16 | version "1.0.0-rc.3" 17 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" 18 | integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== 19 | dependencies: 20 | css-select "~1.2.0" 21 | dom-serializer "~0.1.1" 22 | entities "~1.1.1" 23 | htmlparser2 "^3.9.1" 24 | lodash "^4.15.0" 25 | parse5 "^3.0.1" 26 | 27 | css-select@~1.2.0: 28 | version "1.2.0" 29 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 30 | integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= 31 | dependencies: 32 | boolbase "~1.0.0" 33 | css-what "2.1" 34 | domutils "1.5.1" 35 | nth-check "~1.0.1" 36 | 37 | css-what@2.1: 38 | version "2.1.3" 39 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" 40 | integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== 41 | 42 | dom-serializer@0: 43 | version "0.2.2" 44 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 45 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 46 | dependencies: 47 | domelementtype "^2.0.1" 48 | entities "^2.0.0" 49 | 50 | dom-serializer@~0.1.1: 51 | version "0.1.1" 52 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" 53 | integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== 54 | dependencies: 55 | domelementtype "^1.3.0" 56 | entities "^1.1.1" 57 | 58 | domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: 59 | version "1.3.1" 60 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 61 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 62 | 63 | domelementtype@^2.0.1: 64 | version "2.0.1" 65 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" 66 | integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== 67 | 68 | domhandler@^2.3.0: 69 | version "2.4.2" 70 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 71 | integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== 72 | dependencies: 73 | domelementtype "1" 74 | 75 | domutils@1.5.1: 76 | version "1.5.1" 77 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 78 | integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= 79 | dependencies: 80 | dom-serializer "0" 81 | domelementtype "1" 82 | 83 | domutils@^1.5.1: 84 | version "1.7.0" 85 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 86 | integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== 87 | dependencies: 88 | dom-serializer "0" 89 | domelementtype "1" 90 | 91 | entities@^1.1.1, entities@~1.1.1: 92 | version "1.1.2" 93 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 94 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 95 | 96 | entities@^2.0.0: 97 | version "2.0.0" 98 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" 99 | integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== 100 | 101 | htmlparser2@^3.9.1: 102 | version "3.10.1" 103 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" 104 | integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== 105 | dependencies: 106 | domelementtype "^1.3.1" 107 | domhandler "^2.3.0" 108 | domutils "^1.5.1" 109 | entities "^1.1.1" 110 | inherits "^2.0.1" 111 | readable-stream "^3.1.1" 112 | 113 | inherits@^2.0.1, inherits@^2.0.3: 114 | version "2.0.4" 115 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 116 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 117 | 118 | lodash@^4.15.0: 119 | version "4.17.15" 120 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 121 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 122 | 123 | nth-check@~1.0.1: 124 | version "1.0.2" 125 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" 126 | integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== 127 | dependencies: 128 | boolbase "~1.0.0" 129 | 130 | parse5@^3.0.1: 131 | version "3.0.3" 132 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" 133 | integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== 134 | dependencies: 135 | "@types/node" "*" 136 | 137 | readable-stream@^3.1.1: 138 | version "3.4.0" 139 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" 140 | integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== 141 | dependencies: 142 | inherits "^2.0.3" 143 | string_decoder "^1.1.1" 144 | util-deprecate "^1.0.1" 145 | 146 | safe-buffer@~5.2.0: 147 | version "5.2.0" 148 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 149 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 150 | 151 | string_decoder@^1.1.1: 152 | version "1.3.0" 153 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 154 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 155 | dependencies: 156 | safe-buffer "~5.2.0" 157 | 158 | util-deprecate@^1.0.1: 159 | version "1.0.2" 160 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 161 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 162 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@dora-app/cli@^1.1.3": 6 | version "1.2.0" 7 | resolved "https://registry.yarnpkg.com/@dora-app/cli/-/cli-1.2.0.tgz#c4c9f6e625f60d3470e6ceaf9a63fd8240881766" 8 | integrity sha512-8cf275z1kcn4UR5o+Sgi0wlF5bs3XGOvtRw9fw+lVUs2zEoY4JaEkt6PTxSTd10SvDwXpUwYp9Ybb0N8kbspOw== 9 | dependencies: 10 | argparse "^1.0.10" 11 | chalk "^2.4.2" 12 | read-package-json "^2.1.0" 13 | 14 | ansi-styles@^3.2.1: 15 | version "3.2.1" 16 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 17 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 18 | dependencies: 19 | color-convert "^1.9.0" 20 | 21 | argparse@^1.0.10: 22 | version "1.0.10" 23 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 24 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 25 | dependencies: 26 | sprintf-js "~1.0.2" 27 | 28 | balanced-match@^1.0.0: 29 | version "1.0.0" 30 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 31 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 32 | 33 | brace-expansion@^1.1.7: 34 | version "1.1.11" 35 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 36 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 37 | dependencies: 38 | balanced-match "^1.0.0" 39 | concat-map "0.0.1" 40 | 41 | chalk@^2.4.2: 42 | version "2.4.2" 43 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 44 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 45 | dependencies: 46 | ansi-styles "^3.2.1" 47 | escape-string-regexp "^1.0.5" 48 | supports-color "^5.3.0" 49 | 50 | color-convert@^1.9.0: 51 | version "1.9.3" 52 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 53 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 54 | dependencies: 55 | color-name "1.1.3" 56 | 57 | color-name@1.1.3: 58 | version "1.1.3" 59 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 60 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 61 | 62 | concat-map@0.0.1: 63 | version "0.0.1" 64 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 65 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 66 | 67 | escape-string-regexp@^1.0.5: 68 | version "1.0.5" 69 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 70 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 71 | 72 | fs.realpath@^1.0.0: 73 | version "1.0.0" 74 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 75 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 76 | 77 | glob@^7.1.1: 78 | version "7.1.6" 79 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 80 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 81 | dependencies: 82 | fs.realpath "^1.0.0" 83 | inflight "^1.0.4" 84 | inherits "2" 85 | minimatch "^3.0.4" 86 | once "^1.3.0" 87 | path-is-absolute "^1.0.0" 88 | 89 | graceful-fs@^4.1.2: 90 | version "4.2.3" 91 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 92 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 93 | 94 | has-flag@^3.0.0: 95 | version "3.0.0" 96 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 97 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 98 | 99 | hosted-git-info@^2.1.4: 100 | version "2.8.5" 101 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" 102 | integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== 103 | 104 | inflight@^1.0.4: 105 | version "1.0.6" 106 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 107 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 108 | dependencies: 109 | once "^1.3.0" 110 | wrappy "1" 111 | 112 | inherits@2: 113 | version "2.0.4" 114 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 115 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 116 | 117 | json-parse-better-errors@^1.0.1: 118 | version "1.0.2" 119 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 120 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 121 | 122 | minimatch@^3.0.4: 123 | version "3.0.4" 124 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 125 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 126 | dependencies: 127 | brace-expansion "^1.1.7" 128 | 129 | normalize-package-data@^2.0.0: 130 | version "2.5.0" 131 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 132 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 133 | dependencies: 134 | hosted-git-info "^2.1.4" 135 | resolve "^1.10.0" 136 | semver "2 || 3 || 4 || 5" 137 | validate-npm-package-license "^3.0.1" 138 | 139 | once@^1.3.0: 140 | version "1.4.0" 141 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 142 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 143 | dependencies: 144 | wrappy "1" 145 | 146 | path-is-absolute@^1.0.0: 147 | version "1.0.1" 148 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 149 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 150 | 151 | path-parse@^1.0.6: 152 | version "1.0.6" 153 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 154 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 155 | 156 | read-package-json@^2.1.0: 157 | version "2.1.0" 158 | resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.0.tgz#e3d42e6c35ea5ae820d9a03ab0c7291217fc51d5" 159 | integrity sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A== 160 | dependencies: 161 | glob "^7.1.1" 162 | json-parse-better-errors "^1.0.1" 163 | normalize-package-data "^2.0.0" 164 | slash "^1.0.0" 165 | optionalDependencies: 166 | graceful-fs "^4.1.2" 167 | 168 | resolve@^1.10.0: 169 | version "1.13.1" 170 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" 171 | integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== 172 | dependencies: 173 | path-parse "^1.0.6" 174 | 175 | "semver@2 || 3 || 4 || 5": 176 | version "5.7.1" 177 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 178 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 179 | 180 | slash@^1.0.0: 181 | version "1.0.0" 182 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 183 | integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= 184 | 185 | spdx-correct@^3.0.0: 186 | version "3.1.0" 187 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 188 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 189 | dependencies: 190 | spdx-expression-parse "^3.0.0" 191 | spdx-license-ids "^3.0.0" 192 | 193 | spdx-exceptions@^2.1.0: 194 | version "2.2.0" 195 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 196 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 197 | 198 | spdx-expression-parse@^3.0.0: 199 | version "3.0.0" 200 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 201 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 202 | dependencies: 203 | spdx-exceptions "^2.1.0" 204 | spdx-license-ids "^3.0.0" 205 | 206 | spdx-license-ids@^3.0.0: 207 | version "3.0.5" 208 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" 209 | integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== 210 | 211 | sprintf-js@~1.0.2: 212 | version "1.0.3" 213 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 214 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 215 | 216 | supports-color@^5.3.0: 217 | version "5.5.0" 218 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 219 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 220 | dependencies: 221 | has-flag "^3.0.0" 222 | 223 | validate-npm-package-license@^3.0.1: 224 | version "3.0.4" 225 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 226 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 227 | dependencies: 228 | spdx-correct "^3.0.0" 229 | spdx-expression-parse "^3.0.0" 230 | 231 | wrappy@1: 232 | version "1.0.2" 233 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 234 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 235 | --------------------------------------------------------------------------------