Use ES6 modules
This commit is contained in:
parent
e7d87e3bbd
commit
e352cca4d8
|
@ -1,17 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
const util = require('util');
|
||||
const request = require('request');
|
||||
const cheerio = require('cheerio');
|
||||
import util from 'util';
|
||||
import request from 'request';
|
||||
|
||||
const YOUTUBE_BASE = 'https://www.youtube.com/%s';
|
||||
const WATCH_BASE = util.format(YOUTUBE_BASE, 'watch?v=%s');
|
||||
|
||||
const VIDEO_ID_REGEX = /watch\?v=([^&]*)/i;
|
||||
// const END_SCREEN_BASE = util.format(YOUTUBE_BASE, 'get_endscreen?v=%s');
|
||||
// const CARD_BASE = util.format(YOUTUBE_BASE, 'annotations_invideo?video_id=%s');
|
||||
|
||||
const playerRegex = /ytplayer\.config = (\{.*?\});/;
|
||||
const PLAYER_REGEX = /ytplayer\.config = (\{.*?\});/;
|
||||
|
||||
/**
|
||||
* Fetch the `ytplayer.config` object for a YouTube video.
|
||||
|
@ -20,7 +12,7 @@ const playerRegex = /ytplayer\.config = (\{.*?\});/;
|
|||
* @param videoId Identifier of the video to fetch.
|
||||
* @return The player configuration object.
|
||||
*/
|
||||
const getPlayerConfig = videoId =>
|
||||
export const getPlayerConfig = videoId =>
|
||||
{
|
||||
const url = util.format(WATCH_BASE, videoId);
|
||||
|
||||
|
@ -38,7 +30,7 @@ const getPlayerConfig = videoId =>
|
|||
// and the player_response subobject
|
||||
try
|
||||
{
|
||||
const playerConfig = JSON.parse(body.match(playerRegex)[1]);
|
||||
const playerConfig = JSON.parse(body.match(PLAYER_REGEX)[1]);
|
||||
playerConfig.args.player_response
|
||||
= JSON.parse(playerConfig.args.player_response);
|
||||
resolve(playerConfig);
|
||||
|
@ -51,8 +43,6 @@ const getPlayerConfig = videoId =>
|
|||
});
|
||||
};
|
||||
|
||||
exports.getPlayerConfig = getPlayerConfig;
|
||||
|
||||
/**
|
||||
* Get metadata about a YouTube video.
|
||||
*
|
||||
|
@ -60,13 +50,11 @@ exports.getPlayerConfig = getPlayerConfig;
|
|||
* YouTube video, as obtained from `getPlayerConfig`.
|
||||
* @return Object containing the video metadata.
|
||||
*/
|
||||
const getVideoMeta = playerConfig => ({
|
||||
export const getVideoMeta = playerConfig => ({
|
||||
videoId: playerConfig.args.player_response.videoDetails.videoId,
|
||||
title: playerConfig.args.player_response.videoDetails.title,
|
||||
});
|
||||
|
||||
exports.getVideoMeta = getVideoMeta;
|
||||
|
||||
/**
|
||||
* Find videos linked from the endscreen of a YouTube video.
|
||||
*
|
||||
|
@ -74,7 +62,7 @@ exports.getVideoMeta = getVideoMeta;
|
|||
* YouTube video, as obtained from `getPlayerConfig`.
|
||||
* @return List of identifiers of linked videos.
|
||||
*/
|
||||
const getEndScreenVideos = playerConfig =>
|
||||
export const getEndScreenVideos = playerConfig =>
|
||||
{
|
||||
const response = playerConfig.args.player_response;
|
||||
|
||||
|
@ -89,8 +77,6 @@ const getEndScreenVideos = playerConfig =>
|
|||
.map(rdr => rdr.endpoint.watchEndpoint.videoId);
|
||||
};
|
||||
|
||||
exports.getEndScreenVideos = getEndScreenVideos;
|
||||
|
||||
/**
|
||||
* Find videos linked from as cards from a YouTube video.
|
||||
*
|
||||
|
@ -98,7 +84,7 @@ exports.getEndScreenVideos = getEndScreenVideos;
|
|||
* YouTube video, as obtained from `getPlayerConfig`.
|
||||
* @return List of identifiers of linked videos.
|
||||
*/
|
||||
const getCardVideos = playerConfig =>
|
||||
export const getCardVideos = playerConfig =>
|
||||
{
|
||||
const response = playerConfig.args.player_response;
|
||||
|
||||
|
@ -113,5 +99,3 @@ const getCardVideos = playerConfig =>
|
|||
.map(content => content.videoInfoCardContentRenderer)
|
||||
.map(rdr => rdr.action.watchEndpoint.videoId);
|
||||
};
|
||||
|
||||
exports.getCardVideos = getCardVideos;
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
const util = require('util');
|
||||
import util from 'util';
|
||||
|
||||
const GRAPH_NODE = ' "%s" [label="%s"]';
|
||||
const GRAPH_NODE_URL = ' "%s" [label="%s", URL="%s", fontcolor=blue]';
|
||||
|
@ -15,7 +15,7 @@ const GRAPH_LINK = ' "%s" -> "%s"';
|
|||
* if a node has no URL.
|
||||
* @return DOT representation of the graph.
|
||||
*/
|
||||
const graphToDOT = (graph, title = id => id, url = () => '') =>
|
||||
export const graphToDOT = (graph, title = id => id, url = () => '') =>
|
||||
{
|
||||
const ser = graph.serialize();
|
||||
|
||||
|
@ -49,5 +49,3 @@ const graphToDOT = (graph, title = id => id, url = () => '') =>
|
|||
+ '\n}'
|
||||
);
|
||||
};
|
||||
|
||||
exports.graphToDOT = graphToDOT;
|
|
@ -1,12 +1,10 @@
|
|||
'use strict';
|
||||
import Graph from 'graph-data-structure';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import util from 'util';
|
||||
|
||||
const Graph = require('graph-data-structure');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const util = require('util');
|
||||
|
||||
const api = require('./api');
|
||||
const {graphToDOT} = require('./graph');
|
||||
import * as api from './api.mjs';
|
||||
import {graphToDOT} from './graph.mjs';
|
||||
|
||||
const YOUTUBE_WATCH = 'https://youtu.be/%s';
|
||||
|
|
@ -4,11 +4,6 @@
|
|||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "12.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.12.tgz",
|
||||
"integrity": "sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ=="
|
||||
},
|
||||
"ajv": {
|
||||
"version": "6.12.3",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
|
||||
|
@ -56,29 +51,11 @@
|
|||
"tweetnacl": "^0.14.3"
|
||||
}
|
||||
},
|
||||
"boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||
},
|
||||
"cheerio": {
|
||||
"version": "1.0.0-rc.3",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
|
||||
"integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
|
||||
"requires": {
|
||||
"css-select": "~1.2.0",
|
||||
"dom-serializer": "~0.1.1",
|
||||
"entities": "~1.1.1",
|
||||
"htmlparser2": "^3.9.1",
|
||||
"lodash": "^4.15.0",
|
||||
"parse5": "^3.0.1"
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
|
@ -92,22 +69,6 @@
|
|||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"css-select": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
|
||||
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
|
||||
"requires": {
|
||||
"boolbase": "~1.0.0",
|
||||
"css-what": "2.1",
|
||||
"domutils": "1.5.1",
|
||||
"nth-check": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"css-what": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
|
||||
"integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
|
@ -121,37 +82,6 @@
|
|||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"dom-serializer": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
|
||||
"integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
|
||||
"requires": {
|
||||
"domelementtype": "^1.3.0",
|
||||
"entities": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"domelementtype": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
|
||||
"integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
|
||||
},
|
||||
"domhandler": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
|
||||
"integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
|
||||
"requires": {
|
||||
"domelementtype": "1"
|
||||
}
|
||||
},
|
||||
"domutils": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
|
||||
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
|
||||
"requires": {
|
||||
"dom-serializer": "0",
|
||||
"domelementtype": "1"
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
|
@ -161,11 +91,6 @@
|
|||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"entities": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
||||
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
|
@ -228,19 +153,6 @@
|
|||
"har-schema": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
|
||||
"integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
|
||||
"requires": {
|
||||
"domelementtype": "^1.3.1",
|
||||
"domhandler": "^2.3.0",
|
||||
"domutils": "^1.5.1",
|
||||
"entities": "^1.1.1",
|
||||
"inherits": "^2.0.1",
|
||||
"readable-stream": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"http-signature": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
|
||||
|
@ -251,11 +163,6 @@
|
|||
"sshpk": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
|
@ -297,11 +204,6 @@
|
|||
"verror": "1.10.0"
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.19",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.44.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
|
||||
|
@ -315,27 +217,11 @@
|
|||
"mime-db": "1.44.0"
|
||||
}
|
||||
},
|
||||
"nth-check": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
|
||||
"integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
|
||||
"requires": {
|
||||
"boolbase": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"parse5": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
|
||||
"integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
|
@ -356,16 +242,6 @@
|
|||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
|
||||
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"request": {
|
||||
"version": "2.88.2",
|
||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
|
||||
|
@ -419,14 +295,6 @@
|
|||
"tweetnacl": "~0.14.0"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
|
||||
"integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
|
@ -457,11 +325,6 @@
|
|||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
|
|
|
@ -5,10 +5,9 @@
|
|||
"main": "src/index.js",
|
||||
"license": "CC0",
|
||||
"scripts": {
|
||||
"build": "mkdir -p build && node explore build/maze.dot && dot -Tsvg build/maze.dot -o build/maze.svg"
|
||||
"build": "mkdir -p build && node explore/index.mjs build/maze.dot && dot -Tsvg build/maze.dot -o build/maze.svg"
|
||||
},
|
||||
"dependencies": {
|
||||
"cheerio": "1.0.0-rc.3",
|
||||
"graph-data-structure": "^1.12.1",
|
||||
"request": "^2.88.2"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue