From d01fa53d5544b398a19d4b89b60eb11b6b48ecc7 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Fri, 29 Jan 2021 16:20:17 +0530 Subject: [PATCH 01/91] chore: Minor fixes --- packages/webembeds-core/src/modules/Platform.ts | 2 +- packages/webembeds-core/test/index.js | 8 +++++++- packages/webembeds-website/pages/api/embed.ts | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/webembeds-core/src/modules/Platform.ts b/packages/webembeds-core/src/modules/Platform.ts index 1d6107b..4cf1d0a 100644 --- a/packages/webembeds-core/src/modules/Platform.ts +++ b/packages/webembeds-core/src/modules/Platform.ts @@ -66,7 +66,7 @@ class Platform { return { version: 0.1, type: "rich", - title: "Twitch", + title: "WebEmbed", html, }; } diff --git a/packages/webembeds-core/test/index.js b/packages/webembeds-core/test/index.js index ea77701..a1d556d 100644 --- a/packages/webembeds-core/test/index.js +++ b/packages/webembeds-core/test/index.js @@ -19,11 +19,17 @@ const links = { giphy: "https://giphy.com/gifs/cbsnews-inauguration-2021-XEMbxm9vl9JIIMcE7M", // glitch: "https://glitch.com/edit/#!/remote-hands?path=README.md%3A1%3A0", metascraper: "https://metascraper.js.org/", + runkit: "https://runkit.com/runkit/welcome", + repl: "https://repl.it/@GirishPatil4/AdvancedRespectfulGigahertz", + soundcloud: "https://soundcloud.com/hit-jatt/jatt-disde-arjan-dhillon", + anchor: "https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft", + loom: "https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184", + vimeo: "https://vimeo.com/124283821", }; (async function () { try { - const url = links.twitter; + const url = links.vimeo; const l = await webembed.default(url); console.log("Test Result ", l); } catch (error) { diff --git a/packages/webembeds-website/pages/api/embed.ts b/packages/webembeds-website/pages/api/embed.ts index 73b5628..947323b 100644 --- a/packages/webembeds-website/pages/api/embed.ts +++ b/packages/webembeds-website/pages/api/embed.ts @@ -19,6 +19,6 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Access-Control-Allow-Headers", "*"); // res.setHeader("Content-Type", "text/html"); - const embedResponse = await webembed(embedURL); + const embedResponse = await webembed.default(embedURL); res.json({ data: embedResponse }); } From 7d9e39ad61d791aaeeaa74f63eadd7dd1db58e60 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Mon, 1 Feb 2021 18:16:31 +0530 Subject: [PATCH 02/91] feat: fix irregularities and stablize embeds Also has updates to Giphy size fix, Minimal error handling, Full width frames --- packages/webembeds-core/package.json | 2 + .../webembeds-core/src/modules/Platform.ts | 13 +- .../src/modules/WebembedHandler.ts | 88 +++++---- .../webembeds-core/src/utils/html.utils.ts | 181 ++++++++---------- .../src/utils/providers/codepen.provider.ts | 21 ++ .../src/utils/providers/expo.provider.ts | 9 +- .../src/utils/providers/giphy.provider.ts | 35 +++- .../src/utils/providers/gist.provider.ts | 7 +- .../src/utils/providers/glitch.provider.ts | 8 +- .../src/utils/providers/instagram.provider.ts | 2 +- .../src/utils/providers/loom.provider.ts | 19 ++ .../src/utils/providers/oembed.providers.js | 89 ++++++--- .../src/utils/requestHandler.ts | 12 +- packages/webembeds-core/test/index.js | 63 ++++-- yarn.lock | 9 +- 15 files changed, 351 insertions(+), 207 deletions(-) create mode 100644 packages/webembeds-core/src/utils/providers/codepen.provider.ts create mode 100644 packages/webembeds-core/src/utils/providers/loom.provider.ts diff --git a/packages/webembeds-core/package.json b/packages/webembeds-core/package.json index 7435eba..4d627ab 100644 --- a/packages/webembeds-core/package.json +++ b/packages/webembeds-core/package.json @@ -27,7 +27,9 @@ "axios": "^0.21.1", "cheerio": "^1.0.0-rc.5", "fastimage": "^3.2.0", + "node-fetch": "^2.6.1", "oembed": "^0.1.2", + "request": "^2.88.2", "url-metadata": "^2.5.0", "url-parse": "^1.4.7" } diff --git a/packages/webembeds-core/src/modules/Platform.ts b/packages/webembeds-core/src/modules/Platform.ts index 4cf1d0a..2f61ac7 100644 --- a/packages/webembeds-core/src/modules/Platform.ts +++ b/packages/webembeds-core/src/modules/Platform.ts @@ -2,6 +2,12 @@ import cheerio from "cheerio"; import { makeRequest, RequestResponseType } from "../utils/requestHandler"; import { wrapHTML } from "../utils/html.utils"; +type OembedRequestQueryParamsType = { + theme: string, + maxwidth: number, + maxheight: number, +} | {}; + /* eslint-disable camelcase */ // eslint-disable-next-line no-unused-vars type OEmbedResponseType = { @@ -44,7 +50,7 @@ class Platform { response: RequestResponseType = null; - queryParams: {}; + queryParams: OembedRequestQueryParamsType = {}; cheerio: any; @@ -58,9 +64,10 @@ class Platform { this.cheerio = cheerio; } - run = async (): Promise => { - const response = await makeRequest(`${this.targetURL || this.embedURL}?url=${encodeURIComponent(this.embedURL)}`); + async run(): Promise { + const response = await makeRequest(`${this.targetURL}?url=${encodeURIComponent(this.embedURL)}`); this.response = response; + if (response && response.data) { const html = wrapHTML(response.data.html); return { diff --git a/packages/webembeds-core/src/modules/WebembedHandler.ts b/packages/webembeds-core/src/modules/WebembedHandler.ts index b247435..3e83667 100644 --- a/packages/webembeds-core/src/modules/WebembedHandler.ts +++ b/packages/webembeds-core/src/modules/WebembedHandler.ts @@ -15,6 +15,15 @@ type EmbedErrorType = { code?: number, }; +type ProviderDetails = { + provider: { + custom? : boolean, + customClass?: any, + discover: boolean, + } | null, + targetURL: string +}; + export default class WebembedHandler { // The main embed URL embedURL: string @@ -27,10 +36,13 @@ export default class WebembedHandler { matchedPlatform: {} | null = null; + providerDetails: ProviderDetails; + constructor(incomingURL: string) { this.embedURL = incomingURL; const url = new UrlParse(this.embedURL); this.queryParams = url.query; + this.providerDetails = this.detectProvider(); } detectProvider = () => { @@ -43,12 +55,8 @@ export default class WebembedHandler { endpoint.schemes.forEach((scheme: string) => { // eslint-disable-next-line no-useless-escape if (this.embedURL.match(scheme.replace(/\*/g, ".*").replace(/\//g, "\/").replace(/\//g, "\\/"))) { - if (endpoint.url.indexOf("*") > -1) { - targetURL = endpoint.url; - } else { - targetURL = endpoint.url; - } - + // TODO: Pattern match here + targetURL = endpoint.url; destinationProvider = provider; } }); @@ -68,54 +76,60 @@ export default class WebembedHandler { } generateOEmbed = (callback: any) => { - console.log("Running generateOEmbed"); const { embedURL } = this; - oembed.fetch(embedURL, { format: "json" }, (error: any, result: OEmbedResponseType): any => { + const { provider, targetURL } = this.providerDetails; + + if(provider && !provider.discover) { + console.log("no discover"); + callback(true); + return; + } + + oembed.fetch(embedURL, { format: "json", maxwidth: 800, ...this.queryParams }, (error: any, result: OEmbedResponseType): any => { if (error) { - console.log("Running generateOEmbed", !!error); + callback(true); + return; } - callback(true); + callback(null, result); }); } generateManually = async (callback: any) => { - const providerDetails = this.detectProvider(); + return new Promise(async (resolve, reject) => { + + const { provider, targetURL } = this.providerDetails; - const { provider = {}, targetURL }: { provider: { - custom? : boolean, - customClass?: any, - } | null, targetURL: string } = providerDetails; - const { embedURL, queryParams } = this; + const { embedURL, queryParams } = this; - if (!provider || !targetURL) { - return null; - } - // This should fetch an oembed response - if (provider && provider.custom) { - const CustomClass = provider.customClass; - this.platform = new CustomClass({ - provider, targetURL, embedURL, queryParams, - }); - } else { - this.platform = new Platform({ - provider, targetURL, embedURL, queryParams, - }); - } - const finalResponse = await this.platform.run(); - // callback(null, finalResponse); - return finalResponse; + if (!provider || !targetURL) { + return reject(); + } + + // This should fetch an oembed response + if (provider && provider.custom) { + const CustomClass = provider.customClass; + this.platform = new CustomClass({ + provider, targetURL, embedURL, queryParams, + }); + } else { + this.platform = new Platform({ + provider, targetURL, embedURL, queryParams, + }); + } + + const finalResponse = await this.platform.run(); + resolve(finalResponse); + }) } // Generate a common fallback here by scraping for the common metadata from the platform // Use this.platform to generate fallback as it already has a response object generateFallback = async (callback: any) => { - console.log("Running Fallback wqeqwe "); try { const data = await getMetaData(this.embedURL); - const html = wrapFallbackHTML(data); + const html = await wrapFallbackHTML(data); return { ...data, html }; } catch (error) { - console.log("12312321", error) return null; } }; @@ -133,7 +147,7 @@ export default class WebembedHandler { If this fails too, return a fatal error */ generateOutput = async (): Promise => new Promise((resolve, reject) => { - tryEach([this.generateOEmbed, this.generateManually], + tryEach([this.generateOEmbed, this.generateManually, this.generateFallback], (error: any, results: any): void => { if (error) { reject(error); diff --git a/packages/webembeds-core/src/utils/html.utils.ts b/packages/webembeds-core/src/utils/html.utils.ts index c034913..213813a 100644 --- a/packages/webembeds-core/src/utils/html.utils.ts +++ b/packages/webembeds-core/src/utils/html.utils.ts @@ -1,6 +1,8 @@ /* eslint-disable no-tabs */ +import request from "request"; import urlMetadata from "url-metadata"; import cheerio from "cheerio"; +import fetch from "node-fetch"; // interface MetaTagType { // name: string, @@ -126,103 +128,86 @@ export const wrapHTML = (htmlContent: string, customAtrributes?: CustomAtrribute return $.html(); }; -export const wrapFallbackHTML = (data: urlMetadata.Result) => ` - - +/** + * Promise based request + * @param {*} url + */ +function doRequest(url) { + return new Promise((resolve, reject) => { + request.get({ url, encoding: "binary" }, ( + error: any, + imageResponse: { headers: { [x: string]: any; }; }, + imageBody: string, + ) => { + if (error) { + return reject(error); + } + const imageType = imageResponse.headers["content-type"]; + const base64 = new Buffer(imageBody, "binary").toString("base64"); + const dataURI = `data:${imageType};base64,${base64}`; + const payload = { + data: dataURI, + isDev: process.env.NODE_ENV === "development", + }; + const hnURL = "https://uploads.hashnode.com/api/upload"; + const cdnURL = "https://cdn.hashnode.com/"; + fetch(hnURL, { + method: "POST", + headers: { + "content-type": "application/json", + "Cloudmate-Authorization": process.env.cloudmateKey || "", + Accept: "*/*", + }, + body: JSON.stringify(payload), + }) + .then((response) => response.json()) + .then((data) => { + if (!data.Key) { + console.log("No cloudmate key"); + return; + } + const imageUrl = cdnURL + data.Key; + resolve(imageUrl); + }); + }); + }); +} + +export const wrapFallbackHTML = async (data: urlMetadata.Result) => { + const coverImage = (await doRequest(data["og:image"])) || data["og:image"]; // Download the image and upload to our CDN + let mainURL; + + try { + mainURL = new URL(data["og:url"]).hostname; + } catch (error) { + mainURL = "/"; + } + + const description = `${data["og:description"].substring(0, 150)}${data["og:description"].length > 150 ? "..." : ""}`; + + return ` + - - - ${data["og:title"]} - - - - - - - -`; + + + ${data["og:title"]} + + + + + + + + + ` +}; diff --git a/packages/webembeds-core/src/utils/providers/codepen.provider.ts b/packages/webembeds-core/src/utils/providers/codepen.provider.ts new file mode 100644 index 0000000..dff8c7b --- /dev/null +++ b/packages/webembeds-core/src/utils/providers/codepen.provider.ts @@ -0,0 +1,21 @@ +import Platform, { OEmbedResponseType, PlatformType } from "../../modules/Platform"; + +export default class Giphy extends Platform { + // eslint-disable-next-line no-useless-constructor + constructor(args: PlatformType) { + super(args); + } + + run = async (): Promise => { + const host = "https://codepen.io/"; + let path = this.embedURL.split(host)[1]; + path = path.replace("pen", "embed"); + + return { + version: 0.1, + type: "rich", + title: "Codepen", + html: ``, + }; + } +} diff --git a/packages/webembeds-core/src/utils/providers/expo.provider.ts b/packages/webembeds-core/src/utils/providers/expo.provider.ts index e26cf55..9715a5d 100644 --- a/packages/webembeds-core/src/utils/providers/expo.provider.ts +++ b/packages/webembeds-core/src/utils/providers/expo.provider.ts @@ -8,8 +8,6 @@ export default class ExpoSnack extends Platform { } run = async (): Promise => { - console.log("Custom expo snack"); - const { cheerio } = this; const url = UrlParse(this.embedURL); @@ -17,9 +15,10 @@ export default class ExpoSnack extends Platform { const $ = cheerio.load("
"); $("div").attr("data-snack-id", snackId); - $("div").attr("data-snack-platform", "data-snack-platform"); - $("div").attr("data-snack-preview", "overflow:hidden;background:#F9F9F9;border:1px solid var(--color-border);border-radius:4px;height:505px;width:100%"); - $("div").attr("stye", "light"); + $("div").attr("data-snack-platform", "web"); + $("div").attr("data-snack-preview", "true"); + $("div").attr("style", "overflow:hidden;background:#F9F9F9;border:1px solid var(--color-border);border-radius:4px;height:505px;width:100%"); + $("div").attr("data-snack-theme", this.queryParams.theme ? this.queryParams.theme : "light"); $("body").append("`, }; } } diff --git a/packages/webembeds-core/src/utils/providers/glitch.provider.ts b/packages/webembeds-core/src/utils/providers/glitch.provider.ts index 13dd27d..a2e7136 100644 --- a/packages/webembeds-core/src/utils/providers/glitch.provider.ts +++ b/packages/webembeds-core/src/utils/providers/glitch.provider.ts @@ -17,12 +17,16 @@ export default class Glitch extends Platform { // https://glitch.com/edit/#!/remote-hands?path=README.md%3A1%3A0 // https://glitch.com/embed/#!/embed/remote-hands?previewSize=100&previewFirst=true&sidebarCollapsed=true run = async (): Promise => { - console.log(this.embedURL.replace("/edit/", "/embed/#!/embed/")); return { version: 0.1, type: "rich", title: "Glitch", - html: ``, }; } } diff --git a/packages/webembeds-core/src/utils/providers/instagram.provider.ts b/packages/webembeds-core/src/utils/providers/instagram.provider.ts index 56d2a7f..418323b 100644 --- a/packages/webembeds-core/src/utils/providers/instagram.provider.ts +++ b/packages/webembeds-core/src/utils/providers/instagram.provider.ts @@ -13,7 +13,7 @@ export default class Instagram extends Platform { version: 0.1, type: "rich", title: "Instagram", - html: `
`, + }; + } +} diff --git a/packages/webembeds-core/src/utils/providers/oembed.providers.js b/packages/webembeds-core/src/utils/providers/oembed.providers.js index ce3c8c0..6b2565f 100644 --- a/packages/webembeds-core/src/utils/providers/oembed.providers.js +++ b/packages/webembeds-core/src/utils/providers/oembed.providers.js @@ -4,6 +4,8 @@ import Giphy from "./giphy.provider"; import Instagram from "./instagram.provider"; import Twitch from "./twitch.provider"; import Glitch from "./glitch.provider"; +import Loom from "./loom.provider"; +import Codepen from "./codepen.provider"; const oEmbedProviders = [ { @@ -174,7 +176,7 @@ const oEmbedProviders = [ "https://audioboom.com/channel/*", "https://audioboom.com/posts/*", ], - url: "https://audioboom.com/publishing/oembed/v4.{format}", + url: "https://audioboom.com/publishing/oembed/v4.json", // TODO formats: [ "json", "xml", @@ -506,19 +508,19 @@ const oEmbedProviders = [ }, ], }, - { - provider_name: "Codepen", - provider_url: "https://codepen.io", - endpoints: [ - { - schemes: [ - "http://codepen.io/*", - "https://codepen.io/*", - ], - url: "https://codepen.io/api/oembed", - }, - ], - }, + // { + // provider_name: "Codepen", + // provider_url: "https://codepen.io", + // endpoints: [ + // { + // schemes: [ + // "http://codepen.io/*", + // "https://codepen.io/*", + // ], + // url: "https://codepen.io/api/oembed", + // }, + // ], + // }, // TODO { provider_name: "Codepoints", provider_url: "https://codepoints.net", @@ -3762,34 +3764,35 @@ const oEmbedProviders = [ }, ], }, -]; - -const additionalOEmbedProviders = [ { - provider_name: "Anchor", - provider_url: "https://anchor.fm", + provider_name: "Canva", + provider_url: "https://canva.com", endpoints: [ { schemes: [ - "https://anchor.fm/*", + "https://www.canva.com/design/*", ], - url: "https://anchor.fm", + url: "https://www.canva.com/_oembed", discovery: true, }, ], }, +]; + +const additionalOEmbedProviders = [ { - provider_name: "Canva", - provider_url: "https://canva.com", + provider_name: "Anchor", + provider_url: "https://anchor.fm", endpoints: [ { schemes: [ - "https://www.canva.com/design/*", + "https://anchor.fm/*", ], - url: "https://www.canva.com/design/*/view", + url: "https://anchor.fm", + discovery: true, }, ], - } + }, ]; const customProviders = [ @@ -3804,6 +3807,7 @@ const customProviders = [ "https://gist.github.com/*", ], url: "https://gist.github.com", + discovery: false, }, ], }, @@ -3862,7 +3866,38 @@ const customProviders = [ "https://media.giphy.com/media/*/giphy.gif", ], url: "https://giphy.com/services/oembed", - discovery: true, + discovery: false, + }, + ], + }, + { + provider_name: "Loom", + provider_url: "https://loom.com", + custom: true, + customClass: Loom, + endpoints: [ + { + schemes: [ + "https://www.loom.com/share/*", + ], + url: "https://loom.com", + discovery: false, + }, + ], + }, + { + provider_name: "Codepen", + provider_url: "https://codepen.io", + custom: true, + customClass: Codepen, + endpoints: [ + { + schemes: [ + "http://codepen.io/*", + "https://codepen.io/*", + ], + url: "https://codepen.io/api/oembed", + discovery: false, }, ], }, diff --git a/packages/webembeds-core/src/utils/requestHandler.ts b/packages/webembeds-core/src/utils/requestHandler.ts index 498a871..38776a6 100644 --- a/packages/webembeds-core/src/utils/requestHandler.ts +++ b/packages/webembeds-core/src/utils/requestHandler.ts @@ -11,6 +11,8 @@ import urlMetaData, { Result } from "url-metadata"; type RequestResponseType = { data: { html: string, + width?: number, + height?: number, } } | null; @@ -25,15 +27,14 @@ export const makeRequest = async (url: string): Promise => format: "json", }, headers: { - "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36", - Connection: "keep-alive", - Accept: "*/*", - "accept-encoding": "gzip, deflate, br", + // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36", + // Connection: "keep-alive", + // Accept: "*/*", + // "accept-encoding": "gzip, deflate, br", }, }); return response; } catch (error) { - console.log("Request error", error); return null; } }; @@ -43,7 +44,6 @@ export const getMetaData = (url: string): Promise => { return new Promise((resolve, reject) => { urlMetaData(url).then( (metadata: urlMetaData.Result) => { // success handler - console.log(metadata); // if (!metadata["og:image:width"] || !metadata["og:image:height"]) { // FastImage(metadata["og:image"], (error: any, imageData: any): any => { // if (error) { diff --git a/packages/webembeds-core/test/index.js b/packages/webembeds-core/test/index.js index a1d556d..a6f37a4 100644 --- a/packages/webembeds-core/test/index.js +++ b/packages/webembeds-core/test/index.js @@ -5,10 +5,52 @@ const webembed = require("../build/bundle"); // https://www.youtube.com/watch?v=32I0Qso4sDg&width=720&height=480 // const l = await webembed("https://twitter.com/tapasadhikary/status/1343081386173874177"); +/** +Markdown samples +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +%[https://hashnode.com] + +%[https://codesandbox.io/s/y2lrywpk21] + +%[https://codepen.io/szs/pen/JhgKC] + +%[https://vimeo.com/336812660] + +%[https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184] + +%[https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft] + +%[https://soundcloud.com/hit-jatt/jatt-disde-arjan-dhillon] + +%[https://repl.it/@GirishPatil4/AdvancedRespectfulGigahertz] + +%[https://runkit.com/runkit/welcome] + +%[https://open.spotify.com/track/3G8o2zm7LaF6eeVuvLlrkJ?si=Sx1sCnhDT6GXqSLIwSLOeQ] + +%[https://gist.github.com/theevilhead/7ac2fbc3cda897ebd87dbe9aeac130d6] + +%[https://www.canva.com/design/DAET1m0_11c/jFBlYrKc8CQCb2boU9KC-A/view] + +%[https://www.youtube.com/watch?v=32I0Qso4sDg] + +%[https://www.instagram.com/p/CJ2ja7Tl3S5] + +%[https://glitch.com/edit/#!/remote-hands] + +%[https://snack.expo.io/@girishhashnode/unnamed-snack] + +%[https://www.twitch.tv/fresh] + +%[https://twitter.com/hashnode/status/1352525138659430400] + + */ + const links = { spotify: "https://open.spotify.com/track/3G8o2zm7LaF6eeVuvLlrkJ?si=Sx1sCnhDT6GXqSLIwSLOeQ", gist: "https://gist.github.com/theevilhead/7ac2fbc3cda897ebd87dbe9aeac130d6", - canva: "https://www.canva.com/design/DAET1m0_11c", + canva: "https://www.canva.com/design/DAET1m0_11c/jFBlYrKc8CQCb2boU9KC-A/view", codepen: "https://codepen.io/bsehovac/pen/EMyWVv", youtube: "https://www.youtube.com/watch?v=32I0Qso4sDg", twitter: "https://twitter.com/hashnode/status/1352525138659430400", @@ -17,7 +59,6 @@ const links = { expo: "https://snack.expo.io/@girishhashnode/unnamed-snack", twitch: "https://www.twitch.tv/fresh", giphy: "https://giphy.com/gifs/cbsnews-inauguration-2021-XEMbxm9vl9JIIMcE7M", - // glitch: "https://glitch.com/edit/#!/remote-hands?path=README.md%3A1%3A0", metascraper: "https://metascraper.js.org/", runkit: "https://runkit.com/runkit/welcome", repl: "https://repl.it/@GirishPatil4/AdvancedRespectfulGigahertz", @@ -25,11 +66,13 @@ const links = { anchor: "https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft", loom: "https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184", vimeo: "https://vimeo.com/124283821", + facebook: "https://www.facebook.com/MoHFWIndia/posts/1757090964450303", + fallback: "https://hashnode.com", }; (async function () { try { - const url = links.vimeo; + const url = links.giphy; const l = await webembed.default(url); console.log("Test Result ", l); } catch (error) { @@ -37,13 +80,11 @@ const links = { } }()); -// oembed.fetch( -// links.twitter, -// { maxwidth: 1920, format: "json" }, -// function (error, result) { -// if (error) console.error(error); -// else console.log('oEmbed result', result); -// } -// ); +// oembed.fetch(links.repl, { format: "json" }, +// (error, result) => { +// if (error) console.error(error); +// else console.log("oEmbed result", result); +// }); +// https://www.youtube.com/oembed //* *** */ https://api.instagram.com/oembed/?url=https://www.instagram.com/p/CKQWst1A3my&hidecaption=0&maxwidth=540 diff --git a/yarn.lock b/yarn.lock index f187e96..42b451b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -222,6 +222,11 @@ dependencies: defer-to-connect "^2.0.0" +"@types/async@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.5.tgz#febca3166039b8946eb162a14a91e8de9a373ebc" + integrity sha512-fdtHUdfIxSfU6crUgUOEb6vxdquAOa75bh1sQVL/ePkmQDNo8Aj1056eGGI9cPls5tLRhnAyfoXljEk+hmhbxg== + "@types/axios@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46" @@ -4742,7 +4747,7 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== -node-fetch@2.6.1: +node-fetch@2.6.1, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -5771,7 +5776,7 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request@>=2.2.9, request@^2.88.0: +request@>=2.2.9, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== From 7fe5094f057ce9772665ee2c7bce647107f67a21 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Tue, 2 Feb 2021 10:34:47 +0530 Subject: [PATCH 03/91] feat: Setup tailwind --- packages/webembeds-core/test/index.js | 2 +- .../webembeds-website/components/Layout.tsx | 15 + packages/webembeds-website/package.json | 5 +- packages/webembeds-website/pages/_app.tsx | 10 + packages/webembeds-website/pages/index.tsx | 2 +- packages/webembeds-website/postcss.config.js | 6 + packages/webembeds-website/styles/main.css | 3 + packages/webembeds-website/tailwind.config.js | 1123 +++++++++++++++++ yarn.lock | 279 +++- 9 files changed, 1428 insertions(+), 17 deletions(-) create mode 100644 packages/webembeds-website/components/Layout.tsx create mode 100644 packages/webembeds-website/pages/_app.tsx create mode 100644 packages/webembeds-website/postcss.config.js create mode 100644 packages/webembeds-website/styles/main.css create mode 100644 packages/webembeds-website/tailwind.config.js diff --git a/packages/webembeds-core/test/index.js b/packages/webembeds-core/test/index.js index a6f37a4..226b479 100644 --- a/packages/webembeds-core/test/index.js +++ b/packages/webembeds-core/test/index.js @@ -66,7 +66,7 @@ const links = { anchor: "https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft", loom: "https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184", vimeo: "https://vimeo.com/124283821", - facebook: "https://www.facebook.com/MoHFWIndia/posts/1757090964450303", + // facebook: "https://www.facebook.com/MoHFWIndia/posts/1757090964450303", fallback: "https://hashnode.com", }; diff --git a/packages/webembeds-website/components/Layout.tsx b/packages/webembeds-website/components/Layout.tsx new file mode 100644 index 0000000..e916903 --- /dev/null +++ b/packages/webembeds-website/components/Layout.tsx @@ -0,0 +1,15 @@ +import React from 'react' + +interface Props {} + +function Layout(props: Props) { + const {} = props + + return ( +
+ +
+ ) +} + +export default Layout diff --git a/packages/webembeds-website/package.json b/packages/webembeds-website/package.json index cfd2aa8..0c36415 100644 --- a/packages/webembeds-website/package.json +++ b/packages/webembeds-website/package.json @@ -10,11 +10,14 @@ }, "dependencies": { "@webembeds/core": "0.0.1", + "autoprefixer": "^10.2.4", "axios": "^0.21.1", "express": "^4.17.1", "next": "^10.0.4", + "postcss": "^8.2.4", "react": "^17.0.1", - "react-dom": "^17.0.1" + "react-dom": "^17.0.1", + "tailwindcss": "^2.0.2" }, "devDependencies": { "@types/node": "^14.14.20", diff --git a/packages/webembeds-website/pages/_app.tsx b/packages/webembeds-website/pages/_app.tsx new file mode 100644 index 0000000..5828744 --- /dev/null +++ b/packages/webembeds-website/pages/_app.tsx @@ -0,0 +1,10 @@ +import React from "react"; + +import { AppProps } from "next/app"; + +import "../styles/main.css"; + +// eslint-disable-next-line react/jsx-props-no-spreading +const WebembedsApp = ({ Component, pageProps }: AppProps) => ; + +export default WebembedsApp; \ No newline at end of file diff --git a/packages/webembeds-website/pages/index.tsx b/packages/webembeds-website/pages/index.tsx index 26c978c..09dc360 100644 --- a/packages/webembeds-website/pages/index.tsx +++ b/packages/webembeds-website/pages/index.tsx @@ -4,7 +4,7 @@ import React from "react"; function Index() { return ( <> -

Webembeds

+

Webembeds

); } diff --git a/packages/webembeds-website/postcss.config.js b/packages/webembeds-website/postcss.config.js new file mode 100644 index 0000000..96bb01e --- /dev/null +++ b/packages/webembeds-website/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/packages/webembeds-website/styles/main.css b/packages/webembeds-website/styles/main.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/packages/webembeds-website/styles/main.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/packages/webembeds-website/tailwind.config.js b/packages/webembeds-website/tailwind.config.js new file mode 100644 index 0000000..93d85ec --- /dev/null +++ b/packages/webembeds-website/tailwind.config.js @@ -0,0 +1,1123 @@ +const colors = { + black: "#000", + white: "#fff", + rose: { + 50: "#fff1f2", + 100: "#ffe4e6", + 200: "#fecdd3", + 300: "#fda4af", + 400: "#fb7185", + 500: "#f43f5e", + 600: "#e11d48", + 700: "#be123c", + 800: "#9f1239", + 900: "#881337", + }, + pink: { + 50: "#fdf2f8", + 100: "#fce7f3", + 200: "#fbcfe8", + 300: "#f9a8d4", + 400: "#f472b6", + 500: "#ec4899", + 600: "#db2777", + 700: "#be185d", + 800: "#9d174d", + 900: "#831843", + }, + fuchsia: { + 50: "#fdf4ff", + 100: "#fae8ff", + 200: "#f5d0fe", + 300: "#f0abfc", + 400: "#e879f9", + 500: "#d946ef", + 600: "#c026d3", + 700: "#a21caf", + 800: "#86198f", + 900: "#701a75", + }, + purple: { + 50: "#faf5ff", + 100: "#f3e8ff", + 200: "#e9d5ff", + 300: "#d8b4fe", + 400: "#c084fc", + 500: "#a855f7", + 600: "#9333ea", + 700: "#7e22ce", + 800: "#6b21a8", + 900: "#581c87", + }, + violet: { + 50: "#f5f3ff", + 100: "#ede9fe", + 200: "#ddd6fe", + 300: "#c4b5fd", + 400: "#a78bfa", + 500: "#8b5cf6", + 600: "#7c3aed", + 700: "#6d28d9", + 800: "#5b21b6", + 900: "#4c1d95", + }, + indigo: { + 50: "#eef2ff", + 100: "#e0e7ff", + 200: "#c7d2fe", + 300: "#a5b4fc", + 400: "#818cf8", + 500: "#6366f1", + 600: "#4f46e5", + 700: "#4338ca", + 800: "#3730a3", + 900: "#312e81", + }, + blue: { + 50: "#eff6ff", + 100: "#dbeafe", + 200: "#bfdbfe", + 300: "#93c5fd", + 400: "#60a5fa", + 500: "#3b82f6", + 600: "#2563eb", + 700: "#1d4ed8", + 800: "#1e40af", + 900: "#1e3a8a", + }, + lightBlue: { + 50: "#f0f9ff", + 100: "#e0f2fe", + 200: "#bae6fd", + 300: "#7dd3fc", + 400: "#38bdf8", + 500: "#0ea5e9", + 600: "#0284c7", + 700: "#0369a1", + 800: "#075985", + 900: "#0c4a6e", + }, + cyan: { + 50: "#ecfeff", + 100: "#cffafe", + 200: "#a5f3fc", + 300: "#67e8f9", + 400: "#22d3ee", + 500: "#06b6d4", + 600: "#0891b2", + 700: "#0e7490", + 800: "#155e75", + 900: "#164e63", + }, + teal: { + 50: "#f0fdfa", + 100: "#ccfbf1", + 200: "#99f6e4", + 300: "#5eead4", + 400: "#2dd4bf", + 500: "#14b8a6", + 600: "#0d9488", + 700: "#0f766e", + 800: "#115e59", + 900: "#134e4a", + }, + emerald: { + 50: "#ecfdf5", + 100: "#d1fae5", + 200: "#a7f3d0", + 300: "#6ee7b7", + 400: "#34d399", + 500: "#10b981", + 600: "#059669", + 700: "#047857", + 800: "#065f46", + 900: "#064e3b", + }, + green: { + 50: "#f0fdf4", + 100: "#dcfce7", + 200: "#bbf7d0", + 300: "#86efac", + 400: "#4ade80", + 500: "#22c55e", + 600: "#16a34a", + 700: "#15803d", + 800: "#166534", + 900: "#14532d", + }, + lime: { + 50: "#f7fee7", + 100: "#ecfccb", + 200: "#d9f99d", + 300: "#bef264", + 400: "#a3e635", + 500: "#84cc16", + 600: "#65a30d", + 700: "#4d7c0f", + 800: "#3f6212", + 900: "#365314", + }, + yellow: { + 50: "#fefce8", + 100: "#fef9c3", + 200: "#fef08a", + 300: "#fde047", + 400: "#facc15", + 500: "#eab308", + 600: "#ca8a04", + 700: "#a16207", + 800: "#854d0e", + 900: "#713f12", + }, + amber: { + 50: "#fffbeb", + 100: "#fef3c7", + 200: "#fde68a", + 300: "#fcd34d", + 400: "#fbbf24", + 500: "#f59e0b", + 600: "#d97706", + 700: "#b45309", + 800: "#92400e", + 900: "#78350f", + }, + orange: { + 50: "#fff7ed", + 100: "#ffedd5", + 200: "#fed7aa", + 300: "#fdba74", + 400: "#fb923c", + 500: "#f97316", + 600: "#ea580c", + 700: "#c2410c", + 800: "#9a3412", + 900: "#7c2d12", + }, + red: { + 50: "#fef2f2", + 100: "#fee2e2", + 200: "#fecaca", + 300: "#fca5a5", + 400: "#f87171", + 500: "#ef4444", + 600: "#dc2626", + 700: "#b91c1c", + 800: "#991b1b", + 900: "#7f1d1d", + }, + warmGray: { + 50: "#fafaf9", + 100: "#f5f5f4", + 200: "#e7e5e4", + 300: "#d6d3d1", + 400: "#a8a29e", + 500: "#78716c", + 600: "#57534e", + 700: "#44403c", + 800: "#292524", + 900: "#1c1917", + }, + trueGray: { + 50: "#fafafa", + 100: "#f5f5f5", + 200: "#e5e5e5", + 300: "#d4d4d4", + 400: "#a3a3a3", + 500: "#737373", + 600: "#525252", + 700: "#404040", + 800: "#262626", + 900: "#171717", + }, + gray: { + 50: "#fafafa", + 100: "#f4f4f5", + 200: "#e4e4e7", + 300: "#d4d4d8", + 400: "#a1a1aa", + 500: "#71717a", + 600: "#52525b", + 700: "#3f3f46", + 800: "#27272a", + 900: "#18181b", + }, + coolGray: { + 50: "#f9fafb", + 100: "#f3f4f6", + 200: "#e5e7eb", + 300: "#d1d5db", + 400: "#9ca3af", + 500: "#6b7280", + 600: "#4b5563", + 700: "#374151", + 800: "#1f2937", + 900: "#111827", + }, + blueGray: { + 50: "#f8fafc", + 100: "#f1f5f9", + 200: "#e2e8f0", + 300: "#cbd5e1", + 400: "#94a3b8", + 500: "#64748b", + 600: "#475569", + 700: "#334155", + 800: "#1e293b", + 900: "#0f172a", + }, +}; + +module.exports = { + purge: ["./pages/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"], + presets: [], + darkMode: false, // or 'media' or 'class' + theme: { + screens: { + sm: "640px", + md: "768px", + lg: "1024px", + xl: "1280px", + "2xl": "1536px", + }, + colors: { + transparent: "transparent", + current: "currentColor", + + black: colors.black, + white: colors.white, + gray: colors.coolGray, + red: colors.red, + yellow: colors.amber, + green: colors.emerald, + blue: colors.blue, + indigo: colors.indigo, + purple: colors.violet, + pink: colors.pink, + }, + spacing: { + px: "1px", + 0: "0px", + 0.5: "0.125rem", + 1: "0.25rem", + 1.5: "0.375rem", + 2: "0.5rem", + 2.5: "0.625rem", + 3: "0.75rem", + 3.5: "0.875rem", + 4: "1rem", + 5: "1.25rem", + 6: "1.5rem", + 7: "1.75rem", + 8: "2rem", + 9: "2.25rem", + 10: "2.5rem", + 11: "2.75rem", + 12: "3rem", + 14: "3.5rem", + 16: "4rem", + 20: "5rem", + 24: "6rem", + 28: "7rem", + 32: "8rem", + 36: "9rem", + 40: "10rem", + 44: "11rem", + 48: "12rem", + 52: "13rem", + 56: "14rem", + 60: "15rem", + 64: "16rem", + 72: "18rem", + 80: "20rem", + 96: "24rem", + }, + animation: { + none: "none", + spin: "spin 1s linear infinite", + ping: "ping 1s cubic-bezier(0, 0, 0.2, 1) infinite", + pulse: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite", + bounce: "bounce 1s infinite", + }, + backgroundColor: (theme) => theme("colors"), + backgroundImage: { + none: "none", + "gradient-to-t": "linear-gradient(to top, var(--tw-gradient-stops))", + "gradient-to-tr": "linear-gradient(to top right, var(--tw-gradient-stops))", + "gradient-to-r": "linear-gradient(to right, var(--tw-gradient-stops))", + "gradient-to-br": "linear-gradient(to bottom right, var(--tw-gradient-stops))", + "gradient-to-b": "linear-gradient(to bottom, var(--tw-gradient-stops))", + "gradient-to-bl": "linear-gradient(to bottom left, var(--tw-gradient-stops))", + "gradient-to-l": "linear-gradient(to left, var(--tw-gradient-stops))", + "gradient-to-tl": "linear-gradient(to top left, var(--tw-gradient-stops))", + }, + backgroundOpacity: (theme) => theme("opacity"), + backgroundPosition: { + bottom: "bottom", + center: "center", + left: "left", + "left-bottom": "left bottom", + "left-top": "left top", + right: "right", + "right-bottom": "right bottom", + "right-top": "right top", + top: "top", + }, + backgroundSize: { + auto: "auto", + cover: "cover", + contain: "contain", + }, + borderColor: (theme) => ({ + ...theme("colors"), + DEFAULT: theme("colors.gray.200", "currentColor"), + }), + borderOpacity: (theme) => theme("opacity"), + borderRadius: { + none: "0px", + sm: "0.125rem", + DEFAULT: "0.25rem", + md: "0.375rem", + lg: "0.5rem", + xl: "0.75rem", + "2xl": "1rem", + "3xl": "1.5rem", + full: "9999px", + }, + borderWidth: { + DEFAULT: "1px", + 0: "0px", + 2: "2px", + 4: "4px", + 8: "8px", + }, + boxShadow: { + sm: "0 1px 2px 0 rgba(0, 0, 0, 0.05)", + DEFAULT: "0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)", + md: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", + lg: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)", + xl: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)", + "2xl": "0 25px 50px -12px rgba(0, 0, 0, 0.25)", + inner: "inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)", + none: "none", + }, + container: {}, + cursor: { + auto: "auto", + default: "default", + pointer: "pointer", + wait: "wait", + text: "text", + move: "move", + help: "help", + "not-allowed": "not-allowed", + }, + divideColor: (theme) => theme("borderColor"), + divideOpacity: (theme) => theme("borderOpacity"), + divideWidth: (theme) => theme("borderWidth"), + fill: { current: "currentColor" }, + flex: { + 1: "1 1 0%", + auto: "1 1 auto", + initial: "0 1 auto", + none: "none", + }, + flexGrow: { + 0: "0", + DEFAULT: "1", + }, + flexShrink: { + 0: "0", + DEFAULT: "1", + }, + fontFamily: { + sans: [ + "ui-sans-serif", + "system-ui", + "-apple-system", + "BlinkMacSystemFont", + "\"Segoe UI\"", + "Roboto", + "\"Helvetica Neue\"", + "Arial", + "\"Noto Sans\"", + "sans-serif", + "\"Apple Color Emoji\"", + "\"Segoe UI Emoji\"", + "\"Segoe UI Symbol\"", + "\"Noto Color Emoji\"", + ], + serif: ["ui-serif", "Georgia", "Cambria", "\"Times New Roman\"", "Times", "serif"], + mono: [ + "ui-monospace", + "SFMono-Regular", + "Menlo", + "Monaco", + "Consolas", + "\"Liberation Mono\"", + "\"Courier New\"", + "monospace", + ], + }, + fontSize: { + xs: ["0.75rem", { lineHeight: "1rem" }], + sm: ["0.875rem", { lineHeight: "1.25rem" }], + base: ["1rem", { lineHeight: "1.5rem" }], + lg: ["1.125rem", { lineHeight: "1.75rem" }], + xl: ["1.25rem", { lineHeight: "1.75rem" }], + "2xl": ["1.5rem", { lineHeight: "2rem" }], + "3xl": ["1.875rem", { lineHeight: "2.25rem" }], + "4xl": ["2.25rem", { lineHeight: "2.5rem" }], + "5xl": ["3rem", { lineHeight: "1" }], + "6xl": ["3.75rem", { lineHeight: "1" }], + "7xl": ["4.5rem", { lineHeight: "1" }], + "8xl": ["6rem", { lineHeight: "1" }], + "9xl": ["8rem", { lineHeight: "1" }], + }, + fontWeight: { + thin: "100", + extralight: "200", + light: "300", + normal: "400", + medium: "500", + semibold: "600", + bold: "700", + extrabold: "800", + black: "900", + }, + gap: (theme) => theme("spacing"), + gradientColorStops: (theme) => theme("colors"), + gridAutoColumns: { + auto: "auto", + min: "min-content", + max: "max-content", + fr: "minmax(0, 1fr)", + }, + gridAutoRows: { + auto: "auto", + min: "min-content", + max: "max-content", + fr: "minmax(0, 1fr)", + }, + gridColumn: { + auto: "auto", + "span-1": "span 1 / span 1", + "span-2": "span 2 / span 2", + "span-3": "span 3 / span 3", + "span-4": "span 4 / span 4", + "span-5": "span 5 / span 5", + "span-6": "span 6 / span 6", + "span-7": "span 7 / span 7", + "span-8": "span 8 / span 8", + "span-9": "span 9 / span 9", + "span-10": "span 10 / span 10", + "span-11": "span 11 / span 11", + "span-12": "span 12 / span 12", + "span-full": "1 / -1", + }, + gridColumnEnd: { + auto: "auto", + 1: "1", + 2: "2", + 3: "3", + 4: "4", + 5: "5", + 6: "6", + 7: "7", + 8: "8", + 9: "9", + 10: "10", + 11: "11", + 12: "12", + 13: "13", + }, + gridColumnStart: { + auto: "auto", + 1: "1", + 2: "2", + 3: "3", + 4: "4", + 5: "5", + 6: "6", + 7: "7", + 8: "8", + 9: "9", + 10: "10", + 11: "11", + 12: "12", + 13: "13", + }, + gridRow: { + auto: "auto", + "span-1": "span 1 / span 1", + "span-2": "span 2 / span 2", + "span-3": "span 3 / span 3", + "span-4": "span 4 / span 4", + "span-5": "span 5 / span 5", + "span-6": "span 6 / span 6", + "span-full": "1 / -1", + }, + gridRowStart: { + auto: "auto", + 1: "1", + 2: "2", + 3: "3", + 4: "4", + 5: "5", + 6: "6", + 7: "7", + }, + gridRowEnd: { + auto: "auto", + 1: "1", + 2: "2", + 3: "3", + 4: "4", + 5: "5", + 6: "6", + 7: "7", + }, + transformOrigin: { + center: "center", + top: "top", + "top-right": "top right", + right: "right", + "bottom-right": "bottom right", + bottom: "bottom", + "bottom-left": "bottom left", + left: "left", + "top-left": "top left", + }, + gridTemplateColumns: { + none: "none", + 1: "repeat(1, minmax(0, 1fr))", + 2: "repeat(2, minmax(0, 1fr))", + 3: "repeat(3, minmax(0, 1fr))", + 4: "repeat(4, minmax(0, 1fr))", + 5: "repeat(5, minmax(0, 1fr))", + 6: "repeat(6, minmax(0, 1fr))", + 7: "repeat(7, minmax(0, 1fr))", + 8: "repeat(8, minmax(0, 1fr))", + 9: "repeat(9, minmax(0, 1fr))", + 10: "repeat(10, minmax(0, 1fr))", + 11: "repeat(11, minmax(0, 1fr))", + 12: "repeat(12, minmax(0, 1fr))", + }, + gridTemplateRows: { + none: "none", + 1: "repeat(1, minmax(0, 1fr))", + 2: "repeat(2, minmax(0, 1fr))", + 3: "repeat(3, minmax(0, 1fr))", + 4: "repeat(4, minmax(0, 1fr))", + 5: "repeat(5, minmax(0, 1fr))", + 6: "repeat(6, minmax(0, 1fr))", + }, + height: (theme) => ({ + auto: "auto", + ...theme("spacing"), + "1/2": "50%", + "1/3": "33.333333%", + "2/3": "66.666667%", + "1/4": "25%", + "2/4": "50%", + "3/4": "75%", + "1/5": "20%", + "2/5": "40%", + "3/5": "60%", + "4/5": "80%", + "1/6": "16.666667%", + "2/6": "33.333333%", + "3/6": "50%", + "4/6": "66.666667%", + "5/6": "83.333333%", + full: "100%", + screen: "100vh", + }), + inset: (theme, { negative }) => ({ + auto: "auto", + ...theme("spacing"), + ...negative(theme("spacing")), + "1/2": "50%", + "1/3": "33.333333%", + "2/3": "66.666667%", + "1/4": "25%", + "2/4": "50%", + "3/4": "75%", + full: "100%", + "-1/2": "-50%", + "-1/3": "-33.333333%", + "-2/3": "-66.666667%", + "-1/4": "-25%", + "-2/4": "-50%", + "-3/4": "-75%", + "-full": "-100%", + }), + keyframes: { + spin: { + to: { + transform: "rotate(360deg)", + }, + }, + ping: { + "75%, 100%": { + transform: "scale(2)", + opacity: "0", + }, + }, + pulse: { + "50%": { + opacity: ".5", + }, + }, + bounce: { + "0%, 100%": { + transform: "translateY(-25%)", + animationTimingFunction: "cubic-bezier(0.8,0,1,1)", + }, + "50%": { + transform: "none", + animationTimingFunction: "cubic-bezier(0,0,0.2,1)", + }, + }, + }, + letterSpacing: { + tighter: "-0.05em", + tight: "-0.025em", + normal: "0em", + wide: "0.025em", + wider: "0.05em", + widest: "0.1em", + }, + lineHeight: { + none: "1", + tight: "1.25", + snug: "1.375", + normal: "1.5", + relaxed: "1.625", + loose: "2", + 3: ".75rem", + 4: "1rem", + 5: "1.25rem", + 6: "1.5rem", + 7: "1.75rem", + 8: "2rem", + 9: "2.25rem", + 10: "2.5rem", + }, + listStyleType: { + none: "none", + disc: "disc", + decimal: "decimal", + }, + margin: (theme, { negative }) => ({ + auto: "auto", + ...theme("spacing"), + ...negative(theme("spacing")), + }), + maxHeight: (theme) => ({ + ...theme("spacing"), + full: "100%", + screen: "100vh", + }), + maxWidth: (theme, { breakpoints }) => ({ + none: "none", + 0: "0rem", + xs: "20rem", + sm: "24rem", + md: "28rem", + lg: "32rem", + xl: "36rem", + "2xl": "42rem", + "3xl": "48rem", + "4xl": "56rem", + "5xl": "64rem", + "6xl": "72rem", + "7xl": "80rem", + full: "100%", + min: "min-content", + max: "max-content", + prose: "65ch", + ...breakpoints(theme("screens")), + }), + minHeight: { + 0: "0px", + full: "100%", + screen: "100vh", + }, + minWidth: { + 0: "0px", + full: "100%", + min: "min-content", + max: "max-content", + }, + objectPosition: { + bottom: "bottom", + center: "center", + left: "left", + "left-bottom": "left bottom", + "left-top": "left top", + right: "right", + "right-bottom": "right bottom", + "right-top": "right top", + top: "top", + }, + opacity: { + 0: "0", + 5: "0.05", + 10: "0.1", + 20: "0.2", + 25: "0.25", + 30: "0.3", + 40: "0.4", + 50: "0.5", + 60: "0.6", + 70: "0.7", + 75: "0.75", + 80: "0.8", + 90: "0.9", + 95: "0.95", + 100: "1", + }, + order: { + first: "-9999", + last: "9999", + none: "0", + 1: "1", + 2: "2", + 3: "3", + 4: "4", + 5: "5", + 6: "6", + 7: "7", + 8: "8", + 9: "9", + 10: "10", + 11: "11", + 12: "12", + }, + outline: { + none: ["2px solid transparent", "2px"], + white: ["2px dotted white", "2px"], + black: ["2px dotted black", "2px"], + }, + padding: (theme) => theme("spacing"), + placeholderColor: (theme) => theme("colors"), + placeholderOpacity: (theme) => theme("opacity"), + ringColor: (theme) => ({ + DEFAULT: theme("colors.blue.500", "#3b82f6"), + ...theme("colors"), + }), + ringOffsetColor: (theme) => theme("colors"), + ringOffsetWidth: { + 0: "0px", + 1: "1px", + 2: "2px", + 4: "4px", + 8: "8px", + }, + ringOpacity: (theme) => ({ + DEFAULT: "0.5", + ...theme("opacity"), + }), + ringWidth: { + DEFAULT: "3px", + 0: "0px", + 1: "1px", + 2: "2px", + 4: "4px", + 8: "8px", + }, + rotate: { + "-180": "-180deg", + "-90": "-90deg", + "-45": "-45deg", + "-12": "-12deg", + "-6": "-6deg", + "-3": "-3deg", + "-2": "-2deg", + "-1": "-1deg", + 0: "0deg", + 1: "1deg", + 2: "2deg", + 3: "3deg", + 6: "6deg", + 12: "12deg", + 45: "45deg", + 90: "90deg", + 180: "180deg", + }, + scale: { + 0: "0", + 50: ".5", + 75: ".75", + 90: ".9", + 95: ".95", + 100: "1", + 105: "1.05", + 110: "1.1", + 125: "1.25", + 150: "1.5", + }, + skew: { + "-12": "-12deg", + "-6": "-6deg", + "-3": "-3deg", + "-2": "-2deg", + "-1": "-1deg", + 0: "0deg", + 1: "1deg", + 2: "2deg", + 3: "3deg", + 6: "6deg", + 12: "12deg", + }, + space: (theme, { negative }) => ({ + ...theme("spacing"), + ...negative(theme("spacing")), + }), + stroke: { + current: "currentColor", + }, + strokeWidth: { + 0: "0", + 1: "1", + 2: "2", + }, + textColor: (theme) => theme("colors"), + textOpacity: (theme) => theme("opacity"), + transitionDuration: { + DEFAULT: "150ms", + 75: "75ms", + 100: "100ms", + 150: "150ms", + 200: "200ms", + 300: "300ms", + 500: "500ms", + 700: "700ms", + 1000: "1000ms", + }, + transitionDelay: { + 75: "75ms", + 100: "100ms", + 150: "150ms", + 200: "200ms", + 300: "300ms", + 500: "500ms", + 700: "700ms", + 1000: "1000ms", + }, + transitionProperty: { + none: "none", + all: "all", + DEFAULT: "background-color, border-color, color, fill, stroke, opacity, box-shadow, transform", + colors: "background-color, border-color, color, fill, stroke", + opacity: "opacity", + shadow: "box-shadow", + transform: "transform", + }, + transitionTimingFunction: { + DEFAULT: "cubic-bezier(0.4, 0, 0.2, 1)", + linear: "linear", + in: "cubic-bezier(0.4, 0, 1, 1)", + out: "cubic-bezier(0, 0, 0.2, 1)", + "in-out": "cubic-bezier(0.4, 0, 0.2, 1)", + }, + translate: (theme, { negative }) => ({ + ...theme("spacing"), + ...negative(theme("spacing")), + "1/2": "50%", + "1/3": "33.333333%", + "2/3": "66.666667%", + "1/4": "25%", + "2/4": "50%", + "3/4": "75%", + full: "100%", + "-1/2": "-50%", + "-1/3": "-33.333333%", + "-2/3": "-66.666667%", + "-1/4": "-25%", + "-2/4": "-50%", + "-3/4": "-75%", + "-full": "-100%", + }), + width: (theme) => ({ + auto: "auto", + ...theme("spacing"), + "1/2": "50%", + "1/3": "33.333333%", + "2/3": "66.666667%", + "1/4": "25%", + "2/4": "50%", + "3/4": "75%", + "1/5": "20%", + "2/5": "40%", + "3/5": "60%", + "4/5": "80%", + "1/6": "16.666667%", + "2/6": "33.333333%", + "3/6": "50%", + "4/6": "66.666667%", + "5/6": "83.333333%", + "1/12": "8.333333%", + "2/12": "16.666667%", + "3/12": "25%", + "4/12": "33.333333%", + "5/12": "41.666667%", + "6/12": "50%", + "7/12": "58.333333%", + "8/12": "66.666667%", + "9/12": "75%", + "10/12": "83.333333%", + "11/12": "91.666667%", + full: "100%", + screen: "100vw", + min: "min-content", + max: "max-content", + }), + zIndex: { + auto: "auto", + 0: "0", + 10: "10", + 20: "20", + 30: "30", + 40: "40", + 50: "50", + }, + }, + variantOrder: [ + "first", + "last", + "odd", + "even", + "visited", + "checked", + "group-hover", + "group-focus", + "focus-within", + "hover", + "focus", + "focus-visible", + "active", + "disabled", + ], + variants: { + accessibility: ["responsive", "focus-within", "focus"], + alignContent: ["responsive"], + alignItems: ["responsive"], + alignSelf: ["responsive"], + animation: ["responsive"], + appearance: ["responsive"], + backgroundAttachment: ["responsive"], + backgroundClip: ["responsive"], + backgroundColor: ["responsive", "dark", "group-hover", "focus-within", "hover", "focus"], + backgroundImage: ["responsive"], + backgroundOpacity: ["responsive", "group-hover", "focus-within", "hover", "focus"], + backgroundPosition: ["responsive"], + backgroundRepeat: ["responsive"], + backgroundSize: ["responsive"], + borderCollapse: ["responsive"], + borderColor: ["responsive", "dark", "group-hover", "focus-within", "hover", "focus"], + borderOpacity: ["responsive", "group-hover", "focus-within", "hover", "focus"], + borderRadius: ["responsive"], + borderStyle: ["responsive"], + borderWidth: ["responsive"], + boxShadow: ["responsive", "group-hover", "focus-within", "hover", "focus"], + boxSizing: ["responsive"], + clear: ["responsive"], + container: ["responsive"], + cursor: ["responsive"], + display: ["responsive"], + divideColor: ["responsive", "dark"], + divideOpacity: ["responsive"], + divideStyle: ["responsive"], + divideWidth: ["responsive"], + fill: ["responsive"], + flex: ["responsive"], + flexDirection: ["responsive"], + flexGrow: ["responsive"], + flexShrink: ["responsive"], + flexWrap: ["responsive"], + float: ["responsive"], + fontFamily: ["responsive"], + fontSize: ["responsive"], + fontSmoothing: ["responsive"], + fontStyle: ["responsive"], + fontVariantNumeric: ["responsive"], + fontWeight: ["responsive"], + gap: ["responsive"], + gradientColorStops: ["responsive", "dark", "hover", "focus"], + gridAutoColumns: ["responsive"], + gridAutoFlow: ["responsive"], + gridAutoRows: ["responsive"], + gridColumn: ["responsive"], + gridColumnEnd: ["responsive"], + gridColumnStart: ["responsive"], + gridRow: ["responsive"], + gridRowEnd: ["responsive"], + gridRowStart: ["responsive"], + gridTemplateColumns: ["responsive"], + gridTemplateRows: ["responsive"], + height: ["responsive"], + inset: ["responsive"], + justifyContent: ["responsive"], + justifyItems: ["responsive"], + justifySelf: ["responsive"], + letterSpacing: ["responsive"], + lineHeight: ["responsive"], + listStylePosition: ["responsive"], + listStyleType: ["responsive"], + margin: ["responsive"], + maxHeight: ["responsive"], + maxWidth: ["responsive"], + minHeight: ["responsive"], + minWidth: ["responsive"], + objectFit: ["responsive"], + objectPosition: ["responsive"], + opacity: ["responsive", "group-hover", "focus-within", "hover", "focus"], + order: ["responsive"], + outline: ["responsive", "focus-within", "focus"], + overflow: ["responsive"], + overscrollBehavior: ["responsive"], + padding: ["responsive"], + placeContent: ["responsive"], + placeItems: ["responsive"], + placeSelf: ["responsive"], + placeholderColor: ["responsive", "dark", "focus"], + placeholderOpacity: ["responsive", "focus"], + pointerEvents: ["responsive"], + position: ["responsive"], + resize: ["responsive"], + ringColor: ["responsive", "dark", "focus-within", "focus"], + ringOffsetColor: ["responsive", "dark", "focus-within", "focus"], + ringOffsetWidth: ["responsive", "focus-within", "focus"], + ringOpacity: ["responsive", "focus-within", "focus"], + ringWidth: ["responsive", "focus-within", "focus"], + rotate: ["responsive", "hover", "focus"], + scale: ["responsive", "hover", "focus"], + skew: ["responsive", "hover", "focus"], + space: ["responsive"], + stroke: ["responsive"], + strokeWidth: ["responsive"], + tableLayout: ["responsive"], + textAlign: ["responsive"], + textColor: ["responsive", "dark", "group-hover", "focus-within", "hover", "focus"], + textDecoration: ["responsive", "group-hover", "focus-within", "hover", "focus"], + textOpacity: ["responsive", "group-hover", "focus-within", "hover", "focus"], + textOverflow: ["responsive"], + textTransform: ["responsive"], + transform: ["responsive"], + transformOrigin: ["responsive"], + transitionDelay: ["responsive"], + transitionDuration: ["responsive"], + transitionProperty: ["responsive"], + transitionTimingFunction: ["responsive"], + translate: ["responsive", "hover", "focus"], + userSelect: ["responsive"], + verticalAlign: ["responsive"], + visibility: ["responsive"], + whitespace: ["responsive"], + width: ["responsive"], + wordBreak: ["responsive"], + zIndex: ["responsive", "focus-within", "focus"], + }, + plugins: [], +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 42b451b..d9a7926 100644 --- a/yarn.lock +++ b/yarn.lock @@ -126,6 +126,13 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@fullhuman/postcss-purgecss@^3.0.0": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz#47af7b87c9bfb3de4bc94a38f875b928fffdf339" + integrity sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA== + dependencies: + purgecss "^3.1.3" + "@hapi/accept@5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" @@ -731,12 +738,26 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn@^6.0.2, acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.4.0: +acorn@^7.0.0, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -1022,11 +1043,28 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^10.2.4: + version "10.2.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.4.tgz#c0e7cf24fcc6a1ae5d6250c623f0cb8beef2f7e1" + integrity sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw== + dependencies: + browserslist "^4.16.1" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + fraction.js "^4.0.13" + normalize-range "^0.1.2" + postcss-value-parser "^4.1.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1296,6 +1334,17 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.67" +browserslist@^4.16.1: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + buffer-from@^1.0.0, buffer-from@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1336,7 +1385,7 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bytes@3.1.0: +bytes@3.1.0, bytes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== @@ -1420,6 +1469,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + camelcase@5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -1435,12 +1489,17 @@ caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001113, caniuse-lite@^1.0.300011 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== +caniuse-lite@^1.0.30001181: + version "1.0.30001181" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001181.tgz#4f0e5184e1ea7c3bf2727e735cbe7ca9a451d673" + integrity sha512-m5ul/ARCX50JB8BSNM+oiPmQrR5UmngaQ3QThTTp5HcIIQGP/nPBs82BYLE+tigzm3VW+F4BJIhUyaVtEweelQ== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1468,7 +1527,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -1665,7 +1724,7 @@ color-string@^1.5.4: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^3.1.2: +color@^3.1.2, color@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== @@ -1690,7 +1749,7 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.0: +commander@^6.0.0, commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -1927,6 +1986,11 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" +css-unit-converter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" + integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== + css-what@2.1: version "2.1.3" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" @@ -2099,6 +2163,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + deglob@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.1.tgz#d268e168727799862e8eac07042e165957c1f3be" @@ -2144,6 +2213,20 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + +didyoumean@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" + integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -2314,6 +2397,11 @@ electron-to-chromium@^1.3.585, electron-to-chromium@^1.3.621: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz#82ea400f520f739c4f6ff00c1f7524827a917d25" integrity sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw== +electron-to-chromium@^1.3.649: + version "1.3.649" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.649.tgz#3aa8be052d4d268ede45d8e98d0cd60ffefad607" + integrity sha512-ojGDupQ3UMkvPWcTICe4JYe17+o9OLiFMPoduoR72Zp2ILt1mRVeqnxBEd6s/ptekrnsFU+0A4lStfBe/wyG/A== + elliptic@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" @@ -3209,6 +3297,11 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fraction.js@^4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe" + integrity sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -3234,6 +3327,16 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3349,7 +3452,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3402,7 +3505,7 @@ got@^11.8.1: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -3521,6 +3624,11 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + htmlparser2@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" @@ -4087,6 +4195,15 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4337,6 +4454,11 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" @@ -4539,7 +4661,7 @@ minimatch@^3.0.3, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -4580,6 +4702,11 @@ mkdirp@^0.5.1, mkdirp@^0.5.3: dependencies: minimist "^1.2.5" +modern-normalize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.0.0.tgz#539d84a1e141338b01b346f3e27396d0ed17601e" + integrity sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -4622,7 +4749,7 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.16: +nanoid@^3.1.16, nanoid@^3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== @@ -4747,6 +4874,13 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== +node-emoji@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + node-fetch@2.6.1, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -4793,6 +4927,11 @@ node-releases@^1.1.65, node-releases@^1.1.67: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== +node-releases@^1.1.70: + version "1.1.70" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" + integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== + noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" @@ -4825,6 +4964,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + normalize-url@^4.1.0: version "4.5.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" @@ -4885,6 +5029,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-hash@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" + integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== + object-inspect@^1.8.0, object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -5322,6 +5471,24 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-functions@^3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" + integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= + dependencies: + glob "^7.1.2" + object-assign "^4.1.1" + postcss "^6.0.9" + postcss-value-parser "^3.3.0" + +postcss-js@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33" + integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw== + dependencies: + camelcase-css "^2.0.1" + postcss "^8.1.6" + postcss-modules-extract-imports@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" @@ -5355,6 +5522,13 @@ postcss-modules-values@^3.0.0: icss-utils "^4.0.0" postcss "^7.0.6" +postcss-nested@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.3.tgz#2f46d77a06fc98d9c22344fd097396f5431386db" + integrity sha512-R2LHPw+u5hFfDgJG748KpGbJyTv7Yr33/2tIMWxquYuHTd9EXu27PYnKi7BxMXLtzKC0a0WVsqHtd7qIluQu/g== + dependencies: + postcss-selector-parser "^6.0.4" + postcss-safe-parser@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" @@ -5362,7 +5536,7 @@ postcss-safe-parser@4.0.2: dependencies: postcss "^7.0.26" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== @@ -5372,6 +5546,11 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: uniq "^1.0.1" util-deprecate "^1.0.2" +postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" @@ -5405,6 +5584,15 @@ postcss@8.1.7: nanoid "^3.1.16" source-map "^0.6.1" +postcss@^6.0.9: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" @@ -5414,6 +5602,15 @@ postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0. source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04" + integrity sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg== + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + prebuild-install@^5.3.5: version "5.3.6" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" @@ -5445,6 +5642,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -5544,6 +5746,16 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +purgecss@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-3.1.3.tgz#26987ec09d12eeadc318e22f6e5a9eb0be094f41" + integrity sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ== + dependencies: + commander "^6.0.0" + glob "^7.0.0" + postcss "^8.2.1" + postcss-selector-parser "^6.0.2" + q@^1.4.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -5725,6 +5937,14 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +reduce-css-calc@^2.1.6: + version "2.1.8" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" + integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== + dependencies: + css-unit-converter "^1.1.1" + postcss-value-parser "^3.3.0" + regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" @@ -5868,7 +6088,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.6.0, resolve@^1.8.1, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.6.0, resolve@^1.8.1, resolve@^1.9.0: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -6615,7 +6835,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -6663,6 +6883,32 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" +tailwindcss@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.0.2.tgz#28e1573d29dd4547b26782facb05bcfaa92be366" + integrity sha512-nO9JRE1pO7SF9RnYAl6g7uzeHdrmKAFqNjT9NtZUfxqimJZAOOLOEyIEUiMq12+xIc7mC2Ey3Vf90XjHpWKfbw== + dependencies: + "@fullhuman/postcss-purgecss" "^3.0.0" + bytes "^3.0.0" + chalk "^4.1.0" + color "^3.1.3" + detective "^5.2.0" + didyoumean "^1.2.1" + fs-extra "^9.0.1" + html-tags "^3.1.0" + lodash "^4.17.20" + modern-normalize "^1.0.0" + node-emoji "^1.8.1" + object-hash "^2.0.3" + postcss-functions "^3" + postcss-js "^3.0.3" + postcss-nested "^5.0.1" + postcss-selector-parser "^6.0.4" + postcss-value-parser "^4.1.0" + pretty-hrtime "^1.0.3" + reduce-css-calc "^2.1.6" + resolve "^1.19.0" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -6979,6 +7225,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7308,7 +7559,7 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From b651ac39344b85447d93fa7c019d637ad8970065 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Tue, 2 Feb 2021 11:43:37 +0530 Subject: [PATCH 04/91] feat: Add demos in homepage --- packages/webembeds-website/pages/index.tsx | 98 ++++++++++++++++++++-- 1 file changed, 92 insertions(+), 6 deletions(-) diff --git a/packages/webembeds-website/pages/index.tsx b/packages/webembeds-website/pages/index.tsx index 09dc360..efae85a 100644 --- a/packages/webembeds-website/pages/index.tsx +++ b/packages/webembeds-website/pages/index.tsx @@ -1,12 +1,98 @@ /* eslint-disable no-console */ -import React from "react"; +import React, { useState, useEffect, useRef } from "react"; + +const links = { + spotify: "https://open.spotify.com/track/3G8o2zm7LaF6eeVuvLlrkJ?si=Sx1sCnhDT6GXqSLIwSLOeQ", + gist: "https://gist.github.com/theevilhead/7ac2fbc3cda897ebd87dbe9aeac130d6", + canva: "https://www.canva.com/design/DAET1m0_11c/jFBlYrKc8CQCb2boU9KC-A/view", + codepen: "https://codepen.io/bsehovac/pen/EMyWVv", + youtube: "https://www.youtube.com/watch?v=32I0Qso4sDg", + twitter: "https://twitter.com/hashnode/status/1352525138659430400", + instagram: "https://www.instagram.com/p/CJ2ja7Tl3S5/", + glitch: "https://glitch.com/edit/#!/remote-hands", + expo: "https://snack.expo.io/@girishhashnode/unnamed-snack", + twitch: "https://www.twitch.tv/fresh", + giphy: "https://giphy.com/gifs/cbsnews-inauguration-2021-XEMbxm9vl9JIIMcE7M", + metascraper: "https://metascraper.js.org/", + runkit: "https://runkit.com/runkit/welcome", + repl: "https://repl.it/@GirishPatil4/AdvancedRespectfulGigahertz", + soundcloud: "https://soundcloud.com/hit-jatt/jatt-disde-arjan-dhillon", + anchor: "https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft", + loom: "https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184", + vimeo: "https://vimeo.com/124283821", + // facebook: "https://www.facebook.com/MoHFWIndia/posts/1757090964450303", + fallback: "https://hashnode.com", +}; function Index() { - return ( - <> -

Webembeds

- - ); + const urlRef = useRef(null); + const [result, setResult] = useState(null); + + const handleURL = async (incomingURL?: string) => { + const url = incomingURL || urlRef.current.value; + + if (!url) { + return; + } + + // https://webembeds.com + const requestURL = `/api/embed?url=${encodeURIComponent(url)}`; + console.log(requestURL); + const response = await fetch(requestURL, { + method: "GET", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + }); + const json = await response.json(); + console.log(json) + setResult(json ? json.data : null); + }; + + return ( +
+

Webembeds

+
+ + +
+ +

Or select from below

+ +
+ {Object.keys(links).map((key, index) => { + return ( + + ); + })} +
+ +
+ +
+
+ {result ?
{JSON.stringify(result)}
: "No result"} +
+
+ {result && !result.error ? ( +
+ ) : null} + { + result && result.error ? "Something went wrong" : "" + } +
+
+
+ ); } export default Index; From 3588e27cd2d92ce2db37c4b77f90c7f66f81b27a Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Tue, 2 Feb 2021 12:28:43 +0530 Subject: [PATCH 05/91] chore: fix types --- .../webembeds-core/src/modules/Platform.ts | 9 ++++---- .../src/utils/providers/expo.provider.ts | 5 ++-- packages/webembeds-website/pages/index.tsx | 23 ++++++++++++------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/packages/webembeds-core/src/modules/Platform.ts b/packages/webembeds-core/src/modules/Platform.ts index 2f61ac7..608faed 100644 --- a/packages/webembeds-core/src/modules/Platform.ts +++ b/packages/webembeds-core/src/modules/Platform.ts @@ -3,9 +3,9 @@ import { makeRequest, RequestResponseType } from "../utils/requestHandler"; import { wrapHTML } from "../utils/html.utils"; type OembedRequestQueryParamsType = { - theme: string, - maxwidth: number, - maxheight: number, + theme?: string | null, + maxwidth?: number, + maxheight?: number, } | {}; /* eslint-disable camelcase */ @@ -33,12 +33,13 @@ type PlatformType = { provider: {}, targetURL?: string, embedURL: string, - queryParams: {}, + queryParams: OembedRequestQueryParamsType, }; export type { OEmbedResponseType, PlatformType, + OembedRequestQueryParamsType, }; class Platform { diff --git a/packages/webembeds-core/src/utils/providers/expo.provider.ts b/packages/webembeds-core/src/utils/providers/expo.provider.ts index 9715a5d..6352573 100644 --- a/packages/webembeds-core/src/utils/providers/expo.provider.ts +++ b/packages/webembeds-core/src/utils/providers/expo.provider.ts @@ -1,5 +1,5 @@ import UrlParse from "url-parse"; -import Platform, { OEmbedResponseType, PlatformType } from "../../modules/Platform"; +import Platform, { OEmbedResponseType, PlatformType, OembedRequestQueryParamsType } from "../../modules/Platform"; export default class ExpoSnack extends Platform { // eslint-disable-next-line no-useless-constructor @@ -9,6 +9,7 @@ export default class ExpoSnack extends Platform { run = async (): Promise => { const { cheerio } = this; + const { theme = null }: any = this.queryParams; const url = UrlParse(this.embedURL); const snackId = url.pathname.replace(/^\/|\/$/g, ""); @@ -18,7 +19,7 @@ export default class ExpoSnack extends Platform { $("div").attr("data-snack-platform", "web"); $("div").attr("data-snack-preview", "true"); $("div").attr("style", "overflow:hidden;background:#F9F9F9;border:1px solid var(--color-border);border-radius:4px;height:505px;width:100%"); - $("div").attr("data-snack-theme", this.queryParams.theme ? this.queryParams.theme : "light"); + $("div").attr("data-snack-theme", theme || "light"); $("body").append("`, - }; - } + run = async (): Promise => ({ + version: 0.1, + type: "rich", + title: "Github Gist", + html: ``, + }) } diff --git a/packages/webembeds-core/src/utils/providers/twitch.provider.ts b/packages/webembeds-core/src/utils/providers/twitch.provider.ts index 8d4d38a..427dd75 100644 --- a/packages/webembeds-core/src/utils/providers/twitch.provider.ts +++ b/packages/webembeds-core/src/utils/providers/twitch.provider.ts @@ -4,9 +4,22 @@ export default class Twitch extends Platform { // eslint-disable-next-line no-useless-constructor run = async (): Promise => { + const { host } = this.options; + + let parentURL: string | null; + + try { + if (host) { + const hostURL = new URL(host); + parentURL = hostURL.hostname; + } + } catch (error) { + parentURL = null; + } + try { const url = new URL(this.embedURL); - let href = "https://player.twitch.tv/?autoplay=false&parent=localhost"; + let href = `https://player.twitch.tv/?autoplay=false&parent=${parentURL || "localhost"}`; // Supports // Channel Ex, https://www.twitch.tv/lck // Video Ex: https://www.twitch.tv/videos/668650517 @@ -19,7 +32,7 @@ export default class Twitch extends Platform { url.hostname = "clips.twitch.tv"; url.pathname = "embed"; url.searchParams.set("clip", clipId); - url.searchParams.set("parent", "localhost"); + url.searchParams.set("parent", parentURL || "localhost"); url.searchParams.set("autoplay", "false"); href = url.toString(); } else { diff --git a/packages/webembeds-core/test/index.js b/packages/webembeds-core/test/index.js index 226b479..daa4bd5 100644 --- a/packages/webembeds-core/test/index.js +++ b/packages/webembeds-core/test/index.js @@ -72,8 +72,10 @@ const links = { (async function () { try { - const url = links.giphy; - const l = await webembed.default(url); + const url = links.twitch; + const l = await webembed.default(url, { + host: "hashnode.com", + }); console.log("Test Result ", l); } catch (error) { console.log("final", JSON.stringify(error)); diff --git a/packages/webembeds-website/pages/api/embed.ts b/packages/webembeds-website/pages/api/embed.ts index 947323b..d33a048 100644 --- a/packages/webembeds-website/pages/api/embed.ts +++ b/packages/webembeds-website/pages/api/embed.ts @@ -18,7 +18,10 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< res.setHeader("Content-Type", "application/json"); res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Access-Control-Allow-Headers", "*"); - // res.setHeader("Content-Type", "text/html"); - const embedResponse = await webembed.default(embedURL); + + // Twitch needs a parent url where the embed is being used. + const host = req.headers.host; + + const embedResponse = await webembed.default(embedURL, { host: host }); res.json({ data: embedResponse }); } From 732a2fa0224a9e9b0916a600d686aa69fac8d6c9 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Tue, 2 Feb 2021 16:57:31 +0530 Subject: [PATCH 07/91] chore: minor fix --- packages/webembeds-core/src/utils/providers/twitch.provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webembeds-core/src/utils/providers/twitch.provider.ts b/packages/webembeds-core/src/utils/providers/twitch.provider.ts index 427dd75..1906268 100644 --- a/packages/webembeds-core/src/utils/providers/twitch.provider.ts +++ b/packages/webembeds-core/src/utils/providers/twitch.provider.ts @@ -6,7 +6,7 @@ export default class Twitch extends Platform { run = async (): Promise => { const { host } = this.options; - let parentURL: string | null; + let parentURL; try { if (host) { From 17443178e7ed815ff7e12463de2fd645cfc2b11f Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Tue, 2 Feb 2021 17:05:54 +0530 Subject: [PATCH 08/91] fix: parent url param for twitch in prod --- .../src/utils/providers/twitch.provider.ts | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/webembeds-core/src/utils/providers/twitch.provider.ts b/packages/webembeds-core/src/utils/providers/twitch.provider.ts index 1906268..0437bd3 100644 --- a/packages/webembeds-core/src/utils/providers/twitch.provider.ts +++ b/packages/webembeds-core/src/utils/providers/twitch.provider.ts @@ -6,20 +6,11 @@ export default class Twitch extends Platform { run = async (): Promise => { const { host } = this.options; - let parentURL; - - try { - if (host) { - const hostURL = new URL(host); - parentURL = hostURL.hostname; - } - } catch (error) { - parentURL = null; - } + const parentURL = host || "localhost"; try { const url = new URL(this.embedURL); - let href = `https://player.twitch.tv/?autoplay=false&parent=${parentURL || "localhost"}`; + let href = `https://player.twitch.tv/?autoplay=false&parent=${parentURL}`; // Supports // Channel Ex, https://www.twitch.tv/lck // Video Ex: https://www.twitch.tv/videos/668650517 @@ -32,7 +23,7 @@ export default class Twitch extends Platform { url.hostname = "clips.twitch.tv"; url.pathname = "embed"; url.searchParams.set("clip", clipId); - url.searchParams.set("parent", parentURL || "localhost"); + url.searchParams.set("parent", parentURL); url.searchParams.set("autoplay", "false"); href = url.toString(); } else { From 01cb23e5ba2d669180d5e73f0647efa5b7b30ca7 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Tue, 2 Feb 2021 17:38:10 +0530 Subject: [PATCH 09/91] fix: Update vimeo invalid video url in demo --- .../src/modules/WebembedHandler.ts | 2 +- packages/webembeds-core/test/index.js | 16 +++++++--------- packages/webembeds-website/pages/index.tsx | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/webembeds-core/src/modules/WebembedHandler.ts b/packages/webembeds-core/src/modules/WebembedHandler.ts index 7dc48a5..307b7a5 100644 --- a/packages/webembeds-core/src/modules/WebembedHandler.ts +++ b/packages/webembeds-core/src/modules/WebembedHandler.ts @@ -82,7 +82,7 @@ export default class WebembedHandler { const { embedURL } = this; const { provider } = this.providerDetails; - if (provider && !provider.discover) { + if (provider && provider.custom) { callback(true); return; } diff --git a/packages/webembeds-core/test/index.js b/packages/webembeds-core/test/index.js index daa4bd5..0904a6b 100644 --- a/packages/webembeds-core/test/index.js +++ b/packages/webembeds-core/test/index.js @@ -1,9 +1,10 @@ const oembed = require("oembed"); const webembed = require("../build/bundle"); -// // eslint-disable-next-line no-unused-expressions +// eslint-disable-next-line no-unused-expressions // https://www.youtube.com/watch?v=32I0Qso4sDg&width=720&height=480 -// const l = await webembed("https://twitter.com/tapasadhikary/status/1343081386173874177"); +// https://www.youtube.com/oembed +// https://api.instagram.com/oembed/?url=https://www.instagram.com/p/CKQWst1A3my&hidecaption=0&maxwidth=540 /** Markdown samples @@ -65,14 +66,14 @@ const links = { soundcloud: "https://soundcloud.com/hit-jatt/jatt-disde-arjan-dhillon", anchor: "https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft", loom: "https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184", - vimeo: "https://vimeo.com/124283821", + vimeo: "https://vimeo.com/336812660", // facebook: "https://www.facebook.com/MoHFWIndia/posts/1757090964450303", fallback: "https://hashnode.com", }; (async function () { try { - const url = links.twitch; + const url = links.vimeo; const l = await webembed.default(url, { host: "hashnode.com", }); @@ -82,11 +83,8 @@ const links = { } }()); -// oembed.fetch(links.repl, { format: "json" }, +// oembed.fetch("https://vimeo.com/124283821", { format: "json" }, // (error, result) => { -// if (error) console.error(error); +// if (error) console.error("test", error); // else console.log("oEmbed result", result); // }); - -// https://www.youtube.com/oembed -//* *** */ https://api.instagram.com/oembed/?url=https://www.instagram.com/p/CKQWst1A3my&hidecaption=0&maxwidth=540 diff --git a/packages/webembeds-website/pages/index.tsx b/packages/webembeds-website/pages/index.tsx index 0a50372..3a5cf0b 100644 --- a/packages/webembeds-website/pages/index.tsx +++ b/packages/webembeds-website/pages/index.tsx @@ -19,7 +19,7 @@ const links: any = { soundcloud: "https://soundcloud.com/hit-jatt/jatt-disde-arjan-dhillon", anchor: "https://anchor.fm/startapodcast/episodes/Whats-your-podcast-about-e17krq/a-a2q3ft", loom: "https://www.loom.com/share/0281766fa2d04bb788eaf19e65135184", - vimeo: "https://vimeo.com/124283821", + vimeo: "https://vimeo.com/336812660", // facebook: "https://www.facebook.com/MoHFWIndia/posts/1757090964450303", fallback: "https://hashnode.com", }; From 8ca87fd1b4da77735a40559c82be766bd1a307a1 Mon Sep 17 00:00:00 2001 From: Girish Patil Date: Wed, 3 Feb 2021 14:27:45 +0530 Subject: [PATCH 10/91] fix: Minor fixes with custom params --- packages/webembeds-core/src/index.ts | 17 +- .../webembeds-core/src/modules/Platform.ts | 1 + .../src/modules/WebembedHandler.ts | 6 +- .../webembeds-core/src/utils/html.utils.ts | 20 +- .../src/utils/providers/expo.provider.ts | 2 +- .../src/utils/providers/instagram.provider.ts | 5 +- .../src/utils/providers/oembed.providers.js | 200 +++++++++--------- packages/webembeds-core/test/index.js | 19 +- packages/webembeds-website/package.json | 3 +- packages/webembeds-website/pages/api/embed.ts | 12 +- packages/webembeds-website/pages/index.tsx | 2 +- 11 files changed, 156 insertions(+), 131 deletions(-) diff --git a/packages/webembeds-core/src/index.ts b/packages/webembeds-core/src/index.ts index b15bd2c..f8f028d 100644 --- a/packages/webembeds-core/src/index.ts +++ b/packages/webembeds-core/src/index.ts @@ -2,16 +2,27 @@ import WebembedHandler from "./modules/WebembedHandler"; type WebEmbedInitOptions = { host: string | null, + queryParams: {}, }; async function init(incomingURL: string, options?: WebEmbedInitOptions) { + console.log(incomingURL, options) + try { + // eslint-disable-next-line no-new + new URL(incomingURL); + } catch (error) { + console.log("Invalid url", error); + return { + output: null, + error: true, + }; + } + const handler = new WebembedHandler(incomingURL, options || {}); return handler.generateResponse(); } -export type { - WebEmbedInitOptions, -}; +export type { WebEmbedInitOptions }; export default init; diff --git a/packages/webembeds-core/src/modules/Platform.ts b/packages/webembeds-core/src/modules/Platform.ts index 19cab5a..a81e062 100644 --- a/packages/webembeds-core/src/modules/Platform.ts +++ b/packages/webembeds-core/src/modules/Platform.ts @@ -70,6 +70,7 @@ class Platform { this.options = { host: options.host ?? null, + queryParams: {}, }; } diff --git a/packages/webembeds-core/src/modules/WebembedHandler.ts b/packages/webembeds-core/src/modules/WebembedHandler.ts index 307b7a5..eaf1f60 100644 --- a/packages/webembeds-core/src/modules/WebembedHandler.ts +++ b/packages/webembeds-core/src/modules/WebembedHandler.ts @@ -41,10 +41,10 @@ export default class WebembedHandler { options: any; constructor(incomingURL: string, options: any) { + const { queryParams = {}, ...restOfTheOptions } = options; this.embedURL = incomingURL; - this.options = options; - const url = new UrlParse(this.embedURL); - this.queryParams = url.query; + this.options = restOfTheOptions; + this.queryParams = queryParams; this.providerDetails = this.detectProvider(); } diff --git a/packages/webembeds-core/src/utils/html.utils.ts b/packages/webembeds-core/src/utils/html.utils.ts index 213813a..8d72fa6 100644 --- a/packages/webembeds-core/src/utils/html.utils.ts +++ b/packages/webembeds-core/src/utils/html.utils.ts @@ -174,18 +174,18 @@ function doRequest(url) { } export const wrapFallbackHTML = async (data: urlMetadata.Result) => { - const coverImage = (await doRequest(data["og:image"])) || data["og:image"]; // Download the image and upload to our CDN - let mainURL; + const coverImage = (await doRequest(data["og:image"])) || data["og:image"]; // Download the image and upload to our CDN + let mainURL; - try { - mainURL = new URL(data["og:url"]).hostname; - } catch (error) { - mainURL = "/"; - } + try { + mainURL = new URL(data["og:url"]).hostname; + } catch (error) { + mainURL = "/"; + } - const description = `${data["og:description"].substring(0, 150)}${data["og:description"].length > 150 ? "..." : ""}`; + const description = `${data["og:description"].substring(0, 150)}${data["og:description"].length > 150 ? "..." : ""}`; - return ` + return ` @@ -196,11 +196,9 @@ export const wrapFallbackHTML = async (data: urlMetadata.Result) => { - +