diff --git a/gatsby-node.ts b/gatsby-node.ts index c02c9c75..9bcb1216 100644 --- a/gatsby-node.ts +++ b/gatsby-node.ts @@ -3,7 +3,6 @@ import path from "path"; import { formatInTimeZone } from "date-fns-tz"; -import { createOgpImage } from "./src/utils/createOgpImage"; import { fetchLaprasActivity } from "./src/utils/fetchLaprasActivity"; import { isDefined } from "./src/utils/typeguard"; @@ -129,7 +128,6 @@ export const createPages: GatsbyNode["createPages"] = async ({ /** * Add Search nodes - * Create OGP images */ export const createPagesStatefully: GatsbyNode["createPagesStatefully"] = async ({ graphql, reporter, actions, createNodeId, createContentDigest }) => { @@ -257,29 +255,6 @@ export const createPagesStatefully: GatsbyNode["createPagesStatefully"] = reporter.success( `onCreatePagesStatefully: Created ${timelineList.length} search nodes`, ); - - /** - * Create OGP images - */ - - const blogPostList = result?.data?.blogPosts?.nodes.map((node) => ({ - title: node.frontmatter.title, - slug: node.frontmatter.slug, - excerpt: node.frontmatter.excerpt, - })); - - if (!isDefined(blogPostList)) throw new Error("blogPostList is undefined"); - - for (const blogPost of blogPostList) { - await createOgpImage({ - title: blogPost.title, - slug: blogPost.slug, - }); - } - - reporter.success( - `onCreatePagesStatefully: Created ${blogPostList.length} blog ogp images`, - ); }; /** diff --git a/package.json b/package.json index 4b5caee2..366f043f 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,6 @@ "@types/react-dom": "18.2.19", "@typescript-eslint/eslint-plugin": "7.0.2", "@typescript-eslint/parser": "7.0.2", - "canvas": "2.11.2", "dotenv": "16.4.5", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", diff --git a/src/layouts/HeadTemplate.tsx b/src/layouts/HeadTemplate.tsx index be2e4c4a..083c7160 100644 --- a/src/layouts/HeadTemplate.tsx +++ b/src/layouts/HeadTemplate.tsx @@ -121,7 +121,7 @@ export const HeadTemplate = (props: { - + diff --git a/src/pages/outputs.tsx b/src/pages/outputs.tsx index 86dfd290..de0ef358 100644 --- a/src/pages/outputs.tsx +++ b/src/pages/outputs.tsx @@ -68,10 +68,7 @@ export const Head: HeadFC = ({ location, data }) => { ...outputsItems.map((item) => ({ "@type": "BlogPosting", headline: item.title, - image: - item.__typename === "Mdx" - ? `${SITE_METADATA.siteUrl}/ogp/${item.slug}.png` - : SITE_METADATA.logoImage, + image: SITE_METADATA.logoImage, datePublished: item.date, author: { "@type": "Person", diff --git a/src/templates/BlogPost.tsx b/src/templates/BlogPost.tsx index 163a5e04..4c910094 100644 --- a/src/templates/BlogPost.tsx +++ b/src/templates/BlogPost.tsx @@ -63,7 +63,7 @@ export const Head: HeadFC = ({ location, data }) => { location={location} title={title} description={post.frontmatter.excerpt} - image={`${SITE_METADATA.siteUrl}/ogp/${post.frontmatter.slug}.png`} + image={SITE_METADATA.logoImage} imageAlt={SITE_METADATA.title} type="article" /> @@ -85,9 +85,7 @@ export const Head: HeadFC = ({ location, data }) => { "@context": "https://schema.org", "@type": "BlogPosting", headline: title, - image: [ - `${SITE_METADATA.siteUrl}/ogp/${post.frontmatter.slug}.png`, - ], + image: [SITE_METADATA.logoImage], datePublished: post.frontmatter.date, dateModified: post.frontmatter.updateDate, dateCreated: post.frontmatter.date, diff --git a/src/utils/createOgpImage/UDGothic/Bold.ttf b/src/utils/createOgpImage/UDGothic/Bold.ttf deleted file mode 100644 index ae6dc1f7..00000000 Binary files a/src/utils/createOgpImage/UDGothic/Bold.ttf and /dev/null differ diff --git a/src/utils/createOgpImage/UDGothic/LICENSE b/src/utils/createOgpImage/UDGothic/LICENSE deleted file mode 100644 index da83fec6..00000000 --- a/src/utils/createOgpImage/UDGothic/LICENSE +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2022 The BIZ UDGothic Project Authors (https://github.com/googlefonts/morisawa-biz-ud-mincho) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/utils/createOgpImage/UDGothic/Regular.ttf b/src/utils/createOgpImage/UDGothic/Regular.ttf deleted file mode 100644 index 9a3f215a..00000000 Binary files a/src/utils/createOgpImage/UDGothic/Regular.ttf and /dev/null differ diff --git a/src/utils/createOgpImage/background.png b/src/utils/createOgpImage/background.png deleted file mode 100644 index 2cb5c7f2..00000000 Binary files a/src/utils/createOgpImage/background.png and /dev/null differ diff --git a/src/utils/createOgpImage/calculateTextPositionIntoRectangle.ts b/src/utils/createOgpImage/calculateTextPositionIntoRectangle.ts deleted file mode 100644 index c3253e89..00000000 --- a/src/utils/createOgpImage/calculateTextPositionIntoRectangle.ts +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Calculate text positions to draw texts into rectangle - * - * forked from https://github.com/kentaro-m/catchy-image/blob/6eb20df1bc1f9042c9e229f7f6e1100f90bb538f/src/index.js - * MIT License Copyright (c) 2020 Kentaro Matsushita - */ - -import { isDefined } from "../typeguard"; - -import type { CanvasRenderingContext2D } from "canvas"; - -export const calculateTextPositionIntoRectangle = ({ - ctx, - text, - paddingTop, - paddingLeft, - font, - width, - height, -}: { - ctx: CanvasRenderingContext2D; - text: string; - paddingTop: number; - paddingLeft: number; - font: string; - width: number; - height: number; -}): { - lines: Array<{ - y: number; - text: string; - x: number; - }>; -} => { - const lines: Array<{ text: string; x: number; y: number }> = []; - ctx.font = font; - - let words: string[] = [...text]; - let top = paddingTop; - - while (words.length > 0) { - let i: number | undefined; - let slicedText: string | undefined; - let textSize: TextMetrics | undefined; - - for (i = words.length; i >= 0; i -= 1) { - slicedText = words.slice(0, i).join(""); - textSize = ctx.measureText(slicedText); - - if (textSize.width <= width) { - break; - } - } - - if (!isDefined(i) || !isDefined(slicedText) || !isDefined(textSize)) { - throw new Error("Title is not provided."); - } - - const lineHeight = - (textSize.actualBoundingBoxAscent + textSize.actualBoundingBoxDescent) * - 1.2; - - lines.push({ - text: slicedText, - x: paddingLeft, - y: top + lineHeight, - }); - - words = words.slice(i); - top += lineHeight; - } - - const space = paddingTop + height - top; - if (words.length === 0 && space >= 0) { - const centeredLines = lines.map((line) => { - return { - ...line, - y: line.y + space / 2, - }; - }); - return { - lines: centeredLines, - }; - } - - throw new Error( - "Failed draw title into a rectangle. Shorten title and retry.", - ); -}; diff --git a/src/utils/createOgpImage/generateImage.ts b/src/utils/createOgpImage/generateImage.ts deleted file mode 100644 index 5af37a2c..00000000 --- a/src/utils/createOgpImage/generateImage.ts +++ /dev/null @@ -1,135 +0,0 @@ -/** - * forked from https://github.com/kentaro-m/catchy-image/blob/6eb20df1bc1f9042c9e229f7f6e1100f90bb538f/src/index.js - * MIT License Copyright (c) 2020 Kentaro Matsushita - */ - -import { promises as fs } from "fs"; -import path from "path"; - -import { createCanvas, registerFont, Image } from "canvas"; - -import { SITE_METADATA } from "../../constants/SITE_METADATA"; - -import { calculateTextPositionIntoRectangle } from "./calculateTextPositionIntoRectangle"; - -const IMAGE_WIDTH = 1200; -const IMAGE_HEIGHT = 630; - -const PADDING_TOP = 90; -const PADDING_RIGHT = 190; -const PADDING_BOTTOM = 200; -const PADDING_LEFT = 200; - -const ICON_WIDTH = 80; -const ICON_HEIGHT = 80; -const ICON_PADDING_RIGHT = 20; -const ICON_PADDING_BOTTOM = 90; - -const ROOT_DIR = path.resolve(__dirname, "..", "..", ".."); -const STATIC_DIR = path.resolve(ROOT_DIR, "static"); -const OUTPUT_DIR = path.resolve(STATIC_DIR, "ogp"); - -const FONT_FAMILY = "UDGothic"; -const FONT_FILES = [ - { - path: path.resolve(__dirname, FONT_FAMILY, "Bold.ttf"), - family: FONT_FAMILY, - weight: "bold", - }, - { - path: path.resolve(__dirname, FONT_FAMILY, "Regular.ttf"), - family: FONT_FAMILY, - weight: "400", - }, -]; - -const STYLES = { - bold: { - font: `bold 60px "${FONT_FAMILY}"`, - fontColor: "rgba(0, 0, 0, 0.87)", - }, - regular: { - font: `400 40px "${FONT_FAMILY}"`, - fontColor: "rgba(0, 0, 0, 0.65)", - }, -}; - -const ICON_FILE = path.resolve(STATIC_DIR, "android-chrome-512x512.png"); -const BACKGROUND_IMAGE_FILE = path.resolve(__dirname, "background.png"); - -const AUTHOR_TEXT = `${SITE_METADATA.lastName} ${SITE_METADATA.firstName} (@${SITE_METADATA.author})`; - -interface GenerateImageOptions { - fileName: string; - title: string; -} - -/** - * Generate Open Graph images. - */ -export const generateImage = async ({ - fileName, - title, -}: GenerateImageOptions): Promise => { - // RegisterFont - FONT_FILES.forEach(({ path, family, weight }) => { - registerFont(path, { - family, - weight, - }); - }); - - // Create canvas - const canvas = createCanvas(IMAGE_WIDTH, IMAGE_HEIGHT); - const ctx = canvas.getContext("2d"); - - // Draw a background - ctx.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); - - const imageFile = await fs.readFile(BACKGROUND_IMAGE_FILE); - const image = new Image(); - image.src = imageFile; - ctx.drawImage(image, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); - - // Draw title texts - const { lines } = calculateTextPositionIntoRectangle({ - ctx, - text: title, - paddingTop: PADDING_TOP, - paddingLeft: PADDING_LEFT, - font: STYLES.bold.font, - width: IMAGE_WIDTH - PADDING_LEFT - PADDING_RIGHT, - height: IMAGE_HEIGHT - PADDING_TOP - PADDING_BOTTOM, - }); - - lines.forEach(({ text, x, y }) => { - ctx.fillStyle = STYLES.bold.fontColor; - ctx.fillText(text, x, y); - }); - - // Draw an author text - ctx.font = STYLES.regular.font; - ctx.fillStyle = STYLES.regular.fontColor; - ctx.fillText( - AUTHOR_TEXT, - PADDING_LEFT + ICON_WIDTH + ICON_PADDING_RIGHT, - IMAGE_HEIGHT - ICON_PADDING_BOTTOM - 22, - ); - - // Draw a icon - const iconFile = await fs.readFile(ICON_FILE); - const icon = new Image(); - icon.src = iconFile; - ctx.drawImage( - icon, - PADDING_LEFT, - IMAGE_HEIGHT - ICON_PADDING_BOTTOM - ICON_HEIGHT, - ICON_WIDTH, - ICON_HEIGHT, - ); - - // Write to file - const buffer = canvas.toBuffer(); - await fs.mkdir(OUTPUT_DIR, { recursive: true }); - await fs.writeFile(path.join(OUTPUT_DIR, fileName), buffer); -}; diff --git a/src/utils/createOgpImage/index.ts b/src/utils/createOgpImage/index.ts deleted file mode 100644 index 88ace1f0..00000000 --- a/src/utils/createOgpImage/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { generateImage } from "./generateImage"; - -export interface CreateOgpImageProps { - title: string; - slug: string; -} - -export const createOgpImage = async ({ - title, - slug, -}: CreateOgpImageProps): Promise => { - await generateImage({ - fileName: `${slug}.png`, - title, - }); -}; diff --git a/yarn.lock b/yarn.lock index eef0070e..457bdc30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3077,25 +3077,6 @@ __metadata: languageName: node linkType: hard -"@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: "npm:^2.0.0" - https-proxy-agent: "npm:^5.0.0" - make-dir: "npm:^3.1.0" - node-fetch: "npm:^2.6.7" - nopt: "npm:^5.0.0" - npmlog: "npm:^5.0.1" - rimraf: "npm:^3.0.2" - semver: "npm:^7.3.5" - tar: "npm:^6.1.11" - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc - languageName: node - linkType: hard - "@mdx-js/mdx@npm:2.3.0, @mdx-js/mdx@npm:^2.3.0": version: 2.3.0 resolution: "@mdx-js/mdx@npm:2.3.0" @@ -5303,13 +5284,6 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 - languageName: node - linkType: hard - "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -5602,23 +5576,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c - languageName: node - linkType: hard - "arg@npm:^5.0.0": version: 5.0.2 resolution: "arg@npm:5.0.2" @@ -6229,7 +6186,6 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:7.0.2" "@typescript-eslint/parser": "npm:7.0.2" bicstone: "npm:1.0.0" - canvas: "npm:2.11.2" date-fns: "npm:2.30.0" date-fns-tz: "npm:2.0.0" dotenv: "npm:16.4.5" @@ -6629,18 +6585,6 @@ __metadata: languageName: node linkType: hard -"canvas@npm:2.11.2": - version: 2.11.2 - resolution: "canvas@npm:2.11.2" - dependencies: - "@mapbox/node-pre-gyp": "npm:^1.0.0" - nan: "npm:^2.17.0" - node-gyp: "npm:latest" - simple-get: "npm:^3.0.3" - checksum: 10c0/943368798ad1b66b18633aa34b6181e1038dac5433fc9727cd07be35f0a633f572b60d9edb95f5ff90b6a9128e86d5312035f91a2934101c73185b15d906230a - languageName: node - linkType: hard - "capital-case@npm:^1.0.4": version: 1.0.4 resolution: "capital-case@npm:1.0.4" @@ -7040,15 +6984,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 - languageName: node - linkType: hard - "color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" @@ -7219,13 +7154,6 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 - languageName: node - linkType: hard - "constant-case@npm:^3.0.4": version: 3.0.4 resolution: "constant-case@npm:3.0.4" @@ -7769,15 +7697,6 @@ __metadata: languageName: node linkType: hard -"decompress-response@npm:^4.2.0": - version: 4.2.1 - resolution: "decompress-response@npm:4.2.1" - dependencies: - mimic-response: "npm:^2.0.0" - checksum: 10c0/5e4821be332e80e3639acee2441c41d245fc07ac3ee85a6f28893c10c079d66d9bf09e8d84bffeae5656a4625e09e9b93fb4a5705adbe6b07202eea64fae1c8d - languageName: node - linkType: hard - "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -7878,13 +7797,6 @@ __metadata: languageName: node linkType: hard -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 - languageName: node - linkType: hard - "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -10687,23 +10599,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: "npm:^1.0.3 || ^2.0.0" - color-support: "npm:^1.1.2" - console-control-strings: "npm:^1.0.0" - has-unicode: "npm:^2.0.1" - object-assign: "npm:^4.1.1" - signal-exit: "npm:^3.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - wide-align: "npm:^1.1.2" - checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 - languageName: node - linkType: hard - "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -11230,13 +11125,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c - languageName: node - linkType: hard - "hash-wasm@npm:^4.9.0": version: 4.11.0 resolution: "hash-wasm@npm:4.11.0" @@ -14128,13 +14016,6 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^2.0.0": - version: 2.1.0 - resolution: "mimic-response@npm:2.1.0" - checksum: 10c0/717475c840f20deca87a16cb2f7561f9115f5de225ea2377739e09890c81aec72f43c81fd4984650c4044e66be5a846fa7a517ac7908f01009e1e624e19864d5 - languageName: node - linkType: hard - "mimic-response@npm:^3.1.0": version: 3.1.0 resolution: "mimic-response@npm:3.1.0" @@ -14421,15 +14302,6 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.17.0": - version: 2.18.0 - resolution: "nan@npm:2.18.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/9209d80134fdb98c0afe35c1372d2b930a0a8d3c52706cb5e4257a27e9845c375f7a8daedadadec8d6403ca2eebb3b37d362ff5d1ec03249462abf65fef2a148 - languageName: node - linkType: hard - "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -14547,7 +14419,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.12": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -14634,17 +14506,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: "npm:1" - bin: - nopt: bin/nopt.js - checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 - languageName: node - linkType: hard - "nopt@npm:^7.0.0": version: 7.2.0 resolution: "nopt@npm:7.2.0" @@ -14725,18 +14586,6 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: "npm:^2.0.0" - console-control-strings: "npm:^1.1.0" - gauge: "npm:^3.0.0" - set-blocking: "npm:^2.0.0" - checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa - languageName: node - linkType: hard - "nth-check@npm:^2.0.0, nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -17411,7 +17260,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -17439,17 +17288,6 @@ __metadata: languageName: node linkType: hard -"simple-get@npm:^3.0.3": - version: 3.1.1 - resolution: "simple-get@npm:3.1.1" - dependencies: - decompress-response: "npm:^4.2.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10c0/438c78844ea1b1e7268d13ee0b3a39c7d644183367aec916aed3b676b45d3037a61d9f975c200a49b42eb851f29f03745118af1e13c01e60a7b4044f2fd60be7 - languageName: node - linkType: hard - "simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": version: 4.0.1 resolution: "simple-get@npm:4.0.1" @@ -17851,7 +17689,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -19504,15 +19342,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.2": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 - languageName: node - linkType: hard - "widest-line@npm:^3.1.0": version: 3.1.0 resolution: "widest-line@npm:3.1.0"