From 6b80bb8ce032786b22d5c06a55d5fdc13caff44e Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:19:14 -0300 Subject: [PATCH 01/47] =?UTF-8?q?chore(vscode):=20=F0=9F=94=A7=20add=20wor?= =?UTF-8?q?kspace=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f54b539 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "prettier.enable": false, + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "unocss.root": "apps/www" +} From df4e7dfa6d2090288f6a3cc63a53a70dd0aad467 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:21:19 -0300 Subject: [PATCH 02/47] =?UTF-8?q?fix(eslint):=20=F0=9F=90=9B=20svelte's=20?= =?UTF-8?q?mutable=20props?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed props, exported such as "export let foo;", being wrongly linted with "import/no-mutable-exports" --- .eslintrc.cjs | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 0a50c47..204d07c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -31,6 +31,7 @@ module.exports = { }, rules: { 'no-undef': ['warn'], + 'import/no-mutable-exports': 'off', }, }, { From 85ed4ff9cf95eff6975feb2dc8c53c8d5c18c7ba Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:22:00 -0300 Subject: [PATCH 03/47] =?UTF-8?q?chore:=20=F0=9F=94=A7=20change=20version?= =?UTF-8?q?=20to=200.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 62f4f10..6357428 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "marknow", - "version": "1.0.0", + "version": "0.0.0", "packageManager": "pnpm@8.0.0", "description": "", "author": "", From a8b84229734fabb9c459690f6ef300ccdf5889ef Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:25:59 -0300 Subject: [PATCH 04/47] =?UTF-8?q?fix:=20=F0=9F=90=9B=20mdsvex=20unplugin-s?= =?UTF-8?q?velte-components=20comp.=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed error between mdsvex and unplugin-svelte-components when transforming svelte files --- apps/www/package.json | 1 + apps/www/svelte.config.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/www/package.json b/apps/www/package.json index 91ee886..754c4a3 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -35,6 +35,7 @@ "sass": "^1.63.4", "svelte": "^3.59.1", "svelte-check": "^3.4.3", + "svelte-preprocess": "^5.0.4", "tslib": "^2.5.3", "typescript": "^5.1.3", "unocss": "^0.52.7", diff --git a/apps/www/svelte.config.js b/apps/www/svelte.config.js index 754bf00..410e9d2 100644 --- a/apps/www/svelte.config.js +++ b/apps/www/svelte.config.js @@ -1,19 +1,19 @@ import adapter from '@sveltejs/adapter-vercel'; -import { vitePreprocess } from '@sveltejs/kit/vite'; +import sveltePreprocess from 'svelte-preprocess'; import { mdsvex } from 'mdsvex'; import rhExternalLinks from 'rehype-external-links'; /** @type {import('@sveltejs/kit').Config} */ const config = { extensions: ['.svelte', '.svx', '.md'], - preprocess: [vitePreprocess(), mdsvex({ + preprocess: [sveltePreprocess(), mdsvex({ rehypePlugins: [ [rhExternalLinks, { target: '_blank', rel: ['nofollow', 'noopener', 'noreferrer'], }], ], - extensions: ['.svelte', '.svx', '.md'], + extensions: ['.svx', '.md'], })], kit: { adapter: adapter(), From e21b2ea6263ce5711f0bc2531b2108fa01f02a37 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:27:59 -0300 Subject: [PATCH 05/47] =?UTF-8?q?chore(unocss):=20=F0=9F=94=A7=20update=20?= =?UTF-8?q?fonts,=20change=20to=20Mono=20Sans?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/package.json | 2 -- apps/www/src/routes/+layout.svelte | 9 +++++++++ apps/www/unocss.config.ts | 6 +----- 3 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 apps/www/src/routes/+layout.svelte diff --git a/apps/www/package.json b/apps/www/package.json index 754c4a3..f6d30b8 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -18,7 +18,6 @@ }, "devDependencies": { "@fontsource-variable/fira-code": "^5.0.3", - "@fontsource-variable/inter": "^5.0.3", "@iconify-json/solar": "^1.1.1", "@iconify-json/svg-spinners": "^1.1.1", "@iconify/types": "^2.0.0", @@ -29,7 +28,6 @@ "@typescript-eslint/eslint-plugin": "^5.59.11", "@typescript-eslint/parser": "^5.59.11", "@unocss/extractor-svelte": "^0.52.7", - "cal-sans": "^1.0.1", "mdsvex": "^0.10.6", "rehype-external-links": "^2.1.0", "sass": "^1.63.4", diff --git a/apps/www/src/routes/+layout.svelte b/apps/www/src/routes/+layout.svelte new file mode 100644 index 0000000..2805c76 --- /dev/null +++ b/apps/www/src/routes/+layout.svelte @@ -0,0 +1,9 @@ + + +
+ +
diff --git a/apps/www/unocss.config.ts b/apps/www/unocss.config.ts index 1cd7d33..a3b8bc7 100644 --- a/apps/www/unocss.config.ts +++ b/apps/www/unocss.config.ts @@ -36,17 +36,13 @@ export default defineConfig({ presetWebFonts({ fonts: { sans: { - name: 'Inter', + name: 'Mona Sans', provider: 'none', }, code: { name: 'Fira Code', provider: 'none', }, - cal: { - name: 'Cal Sans', - provider: 'none', - }, }, }), // @ts-expect-error It seems that this preset From 8410201e4e3b6f7015496d0c19f188d5ec4b78df Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:34:02 -0300 Subject: [PATCH 06/47] =?UTF-8?q?chore:=20=F0=9F=94=A7=20update=20eslint?= =?UTF-8?q?=20ignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index 888bc4c..8ea6ffc 100644 --- a/.eslintignore +++ b/.eslintignore @@ -12,3 +12,4 @@ build .svelte-kit .turbo .vercel +*.woff From b89f290d158b57ece2d08522e662c922f9bd4f6b Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:47:26 -0300 Subject: [PATCH 07/47] =?UTF-8?q?chore:=20=F0=9F=94=A7=20improve/fix=20lin?= =?UTF-8?q?t-staged=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .lintstagedrc | 4 ++++ apps/www/.lintstagedrc | 4 ++++ package.json | 3 --- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .lintstagedrc create mode 100644 apps/www/.lintstagedrc diff --git a/.lintstagedrc b/.lintstagedrc new file mode 100644 index 0000000..c13adf4 --- /dev/null +++ b/.lintstagedrc @@ -0,0 +1,4 @@ +{ + "gitDir": "./.git", + "*": "eslint --fix", +} diff --git a/apps/www/.lintstagedrc b/apps/www/.lintstagedrc new file mode 100644 index 0000000..c768074 --- /dev/null +++ b/apps/www/.lintstagedrc @@ -0,0 +1,4 @@ +{ + "gitDir": "../../.git", + "*": "eslint --fix" +} diff --git a/package.json b/package.json index 6357428..24f5674 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,5 @@ "husky": "^8.0.3", "turbo": "^1.10.3", "vercel": "^30.2.2" - }, - "lint-staged": { - "*": "eslint --fix" } } From bac87a78fe8c598c76be0f335178215db25024a8 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:48:06 -0300 Subject: [PATCH 08/47] =?UTF-8?q?chore:=20=F0=9F=94=A7=20remove=20trailing?= =?UTF-8?q?=20comma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .lintstagedrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.lintstagedrc b/.lintstagedrc index c13adf4..c4d0a50 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -1,4 +1,4 @@ { "gitDir": "./.git", - "*": "eslint --fix", + "*": "eslint --fix" } From 41f72af999b138dc8987f8dd5bdcdfe8946bfea1 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:48:48 -0300 Subject: [PATCH 09/47] =?UTF-8?q?fix:=20=F0=9F=90=9B=20unplugin-svelte-com?= =?UTF-8?q?ponents=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/vite.config.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/apps/www/vite.config.ts b/apps/www/vite.config.ts index 6062f69..ef39c44 100644 --- a/apps/www/vite.config.ts +++ b/apps/www/vite.config.ts @@ -14,8 +14,7 @@ export default defineConfig({ plugins: [ SvelteImport({ include: [ - /\.svelte/, - /\.svelte\?svelte/, + /\.svelte$/, ], external: [ ...findPathsByExtension(path.join(__dirname, 'src'), '.svx').map((filePath) => { @@ -47,21 +46,18 @@ export default defineConfig({ }), ], dirs: [ - './src/**/*', + './src/lib', ], importPathTransform: (importPath) => { if (path.extname(importPath) === '.svg') return `${importPath}?component`; - if (getFileName(importPath).startsWith('+')) - return ''; else return importPath; }, dts: './src/lib/components.d.ts', }), AutoImport({ include: [ - /\.svelte/, - /\.svelte\?svelte/, + /\.svelte$/, /.[tj]sx?$/, ], imports: [ From 8691634ded4690ff86d12f6d3f574b49882bc19e Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:50:54 -0300 Subject: [PATCH 10/47] =?UTF-8?q?feat:=20=E2=9C=A8=20prototype=20api=20end?= =?UTF-8?q?point=20and=20svg=20banner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 1 - apps/www/.eslintignore | 2 + apps/www/package.json | 2 + .../www/src/lib/assets/Mona-Sans-Regular.woff | Bin 0 -> 19832 bytes .../src/lib/assets/Mona-Sans-SemiBold.woff | Bin 0 -> 19832 bytes apps/www/src/lib/assets/Mona-Sans.woff2 | Bin 0 -> 133748 bytes apps/www/src/routes/api.svg/+server.ts | 36 +++++++++++++ apps/www/src/routes/api.svg/Banner.html | 48 ++++++++++++++++++ 8 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 apps/www/src/lib/assets/Mona-Sans-Regular.woff create mode 100644 apps/www/src/lib/assets/Mona-Sans-SemiBold.woff create mode 100644 apps/www/src/lib/assets/Mona-Sans.woff2 create mode 100644 apps/www/src/routes/api.svg/+server.ts create mode 100644 apps/www/src/routes/api.svg/Banner.html diff --git a/.eslintignore b/.eslintignore index 8ea6ffc..888bc4c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -12,4 +12,3 @@ build .svelte-kit .turbo .vercel -*.woff diff --git a/apps/www/.eslintignore b/apps/www/.eslintignore index 7c1958c..c191179 100644 --- a/apps/www/.eslintignore +++ b/apps/www/.eslintignore @@ -1,3 +1,5 @@ /src/lib/components.d.ts /src/lib/imports.d.ts /.eslint-auto-import.json +*.woff +*.woff2 diff --git a/apps/www/package.json b/apps/www/package.json index f6d30b8..ef6360b 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -31,6 +31,8 @@ "mdsvex": "^0.10.6", "rehype-external-links": "^2.1.0", "sass": "^1.63.4", + "satori": "^0.10.1", + "satori-html": "^0.3.2", "svelte": "^3.59.1", "svelte-check": "^3.4.3", "svelte-preprocess": "^5.0.4", diff --git a/apps/www/src/lib/assets/Mona-Sans-Regular.woff b/apps/www/src/lib/assets/Mona-Sans-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d31c6ed0ee68b64d87b3811fc390f1ce3b007b2f GIT binary patch literal 19832 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¨$-|_@;LxR| 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 CoZJ8a literal 0 HcmV?d00001 diff --git a/apps/www/src/lib/assets/Mona-Sans-SemiBold.woff b/apps/www/src/lib/assets/Mona-Sans-SemiBold.woff new file mode 100644 index 0000000000000000000000000000000000000000..b57fb154f4edde4319c05d83f31171a54906a32b GIT binary patch literal 19832 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 to4Y+)MvW^&?oYtq)mERE-}gzY => { + const html = satoriHtml(Banner); + + const banner = await satori(html, + { + width: 650, + height: 180, + fonts: [ + { + name: 'Mona Sans', + weight: 400, + style: 'normal', + data: await (await fetch(font400)).arrayBuffer(), + }, + { + name: 'Mona Sans', + weight: 600, + style: 'normal', + data: await (await fetch(font600)).arrayBuffer(), + }], + }); + + return new Response(banner, { + status: 200, + headers: { + 'Content-type': 'image/svg+xml', + }, + }); +}) satisfies RequestHandler; diff --git a/apps/www/src/routes/api.svg/Banner.html b/apps/www/src/routes/api.svg/Banner.html new file mode 100644 index 0000000..a3d9ea8 --- /dev/null +++ b/apps/www/src/routes/api.svg/Banner.html @@ -0,0 +1,48 @@ +

From 290ff6e8bea01041e82ec16a1ee0def62d72f1fe Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:51:40 -0300 Subject: [PATCH 11/47] =?UTF-8?q?feat:=20=E2=9C=A8=20prototype=20preview?= =?UTF-8?q?=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/src/app.css | 11 +++++++++++ apps/www/src/app.html | 2 +- apps/www/src/routes/+page.svelte | 30 ++++++++++++++++++++++++++---- apps/www/src/routes/+page.ts | 6 ++++++ 4 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 apps/www/src/app.css create mode 100644 apps/www/src/routes/+page.ts diff --git a/apps/www/src/app.css b/apps/www/src/app.css new file mode 100644 index 0000000..81106f2 --- /dev/null +++ b/apps/www/src/app.css @@ -0,0 +1,11 @@ +@font-face { + font-family: "Mona Sans"; + src: url("$lib/assets/Mona-Sans.woff2") format("woff2 supports variations"), + url("$lib/assets/Mona-Sans.woff2") format("woff2-variations"); + font-weight: 200 900; + font-stretch: 75% 125%; +} + +html { + font-family: "Mona Sans"; +} diff --git a/apps/www/src/app.html b/apps/www/src/app.html index effe0d0..979e324 100644 --- a/apps/www/src/app.html +++ b/apps/www/src/app.html @@ -6,7 +6,7 @@ %sveltekit.head% - +
%sveltekit.body%
diff --git a/apps/www/src/routes/+page.svelte b/apps/www/src/routes/+page.svelte index bcc8a9f..12fee3d 100644 --- a/apps/www/src/routes/+page.svelte +++ b/apps/www/src/routes/+page.svelte @@ -1,6 +1,28 @@ - -

Welcome to SvelteKit

-

Visit kit.svelte.dev to read the documentation

+
+
+ + {@html data.banner} +
+
+ + {@html data.banner} +
+
+ + {@html data.banner} +
+
+ + {@html data.banner} +
+
+ + {@html data.banner} +
+
diff --git a/apps/www/src/routes/+page.ts b/apps/www/src/routes/+page.ts new file mode 100644 index 0000000..472c77b --- /dev/null +++ b/apps/www/src/routes/+page.ts @@ -0,0 +1,6 @@ +import type { PageLoad } from './$types'; + +export const load = (async ({ fetch }): Promise<{ banner: string }> => { + const banner = await (await fetch('/api.svg')).text(); + return { banner }; +}) satisfies PageLoad; From 8057db23648ac1feb181f7a4d587aee3d054795f Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:52:22 -0300 Subject: [PATCH 12/47] =?UTF-8?q?chore(deps):=20=F0=9F=94=97=20update=20lo?= =?UTF-8?q?ckfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-lock.yaml | 192 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 165 insertions(+), 27 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07738fd..5448cc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,9 +41,6 @@ importers: '@fontsource-variable/fira-code': specifier: ^5.0.3 version: 5.0.3 - '@fontsource-variable/inter': - specifier: ^5.0.3 - version: 5.0.3 '@iconify-json/solar': specifier: ^1.1.1 version: 1.1.1 @@ -74,9 +71,6 @@ importers: '@unocss/extractor-svelte': specifier: ^0.52.7 version: 0.52.7 - cal-sans: - specifier: ^1.0.1 - version: 1.0.1 mdsvex: specifier: ^0.10.6 version: 0.10.6(svelte@3.59.1) @@ -86,12 +80,21 @@ importers: sass: specifier: ^1.63.4 version: 1.63.4 + satori: + specifier: ^0.10.1 + version: 0.10.1 + satori-html: + specifier: ^0.3.2 + version: 0.3.2 svelte: specifier: ^3.59.1 version: 3.59.1 svelte-check: specifier: ^3.4.3 - version: 3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) + version: 3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) + svelte-preprocess: + specifier: ^5.0.4 + version: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) tslib: specifier: ^2.5.3 version: 2.5.3 @@ -115,7 +118,7 @@ importers: version: 0.2.8 vite: specifier: ^4.3.9 - version: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + version: 4.3.9(sass@1.63.4) packages: @@ -1995,10 +1998,6 @@ packages: resolution: {integrity: sha512-OfishGTVN3fUM8M27P0NYV4UvugpLigP8DjMHnG9kars9ZRbRPTnfW4lGJELGCXFf6IQVJ2uRyjUKWNIx/Sd2w==} dev: true - /@fontsource-variable/inter@5.0.3: - resolution: {integrity: sha512-AIE1Lm2/cNkCD4oAJ3JVY54tGhlUS7NnAiqGmE045v+7XHqmUhSYjhQNUgnBGcenth4bN75l+KIeTDbcGc7Emw==} - dev: true - /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true @@ -2176,7 +2175,7 @@ packages: dependencies: svelte: 3.59.1 svgo: 3.0.2 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) dev: true /@radix-ui/colors@0.1.8: @@ -2221,6 +2220,15 @@ packages: picomatch: 2.3.1 dev: true + /@shuding/opentype.js@1.4.0-beta.0: + resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} + engines: {node: '>= 8.0.0'} + hasBin: true + dependencies: + fflate: 0.7.4 + string.prototype.codepointat: 0.2.1 + dev: true + /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true @@ -2266,7 +2274,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) transitivePeerDependencies: - supports-color dev: true @@ -2282,7 +2290,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) transitivePeerDependencies: - supports-color dev: true @@ -2301,7 +2309,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -2808,7 +2816,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) transitivePeerDependencies: - rollup dev: true @@ -3404,6 +3412,11 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base64-js@0.0.8: + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} + engines: {node: '>= 0.4'} + dev: true + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true @@ -3579,10 +3592,6 @@ packages: responselike: 2.0.1 dev: true - /cal-sans@1.0.1: - resolution: {integrity: sha512-XwN3/7jez8WmFVcNnNqO2K9lh133KiIcURCyGFnSM+ZmNZ8zIcOTNfr3SpenLAkRceYsq+fQNX/PL4C1rIkEPQ==} - dev: true - /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -3595,6 +3604,10 @@ packages: engines: {node: '>=6'} dev: true + /camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + dev: true + /caniuse-lite@1.0.30001503: resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} dev: true @@ -3853,6 +3866,19 @@ packages: which: 2.0.2 dev: true + /css-background-parser@0.1.0: + resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} + dev: true + + /css-box-shadow@1.0.0-3: + resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} + dev: true + + /css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + dev: true + /css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} dependencies: @@ -3863,6 +3889,14 @@ packages: nth-check: 2.1.1 dev: true + /css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + dev: true + /css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -4163,6 +4197,10 @@ packages: resolution: {integrity: sha512-m232JTVmCawA2vG+1azVxhKZ9Sv1Q//xxNv5PkP5rWxGgQE8c3CiZFrh8Xnp+d1NmNxlu3QQrGIfdeW5TtXX5w==} dev: true + /emoji-regex@10.2.1: + resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -5170,6 +5208,10 @@ packages: format: 0.2.2 dev: true + /fflate@0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + dev: true + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -5640,6 +5682,11 @@ packages: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: true + /hex-rgb@4.3.0: + resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} + engines: {node: '>=6'} + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -6223,6 +6270,13 @@ packages: engines: {node: '>=10'} dev: true + /linebreak@1.1.0: + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + dependencies: + base64-js: 0.0.8 + unicode-trie: 2.0.0 + dev: true + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -6329,7 +6383,7 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.1.1 + semver: 6.3.0 dev: true /make-error@1.3.6: @@ -7280,6 +7334,13 @@ packages: callsites: 3.1.0 dev: true + /parse-css-color@0.2.1: + resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} + dependencies: + color-name: 1.1.4 + hex-rgb: 4.3.0 + dev: true + /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: @@ -8019,6 +8080,28 @@ packages: source-map-js: 1.0.2 dev: true + /satori-html@0.3.2: + resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} + dependencies: + ultrahtml: 1.2.0 + dev: true + + /satori@0.10.1: + resolution: {integrity: sha512-F4bTCkDp931tLb7+UCNPBuSQwXhikrUkI4fBQo6fA8lF0Evqqgg3nDyUpRktQpR5Ry1DIiIVqLyEwkAms87ykg==} + engines: {node: '>=16'} + dependencies: + '@shuding/opentype.js': 1.4.0-beta.0 + css-background-parser: 0.1.0 + css-box-shadow: 1.0.0-3 + css-to-react-native: 3.2.0 + emoji-regex: 10.2.1 + escape-html: 1.0.3 + linebreak: 1.1.0 + parse-css-color: 0.2.1 + postcss-value-parser: 4.2.0 + yoga-wasm-web: 0.3.3 + dev: true + /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} dev: true @@ -8269,6 +8352,10 @@ packages: strip-ansi: 6.0.1 dev: true + /string.prototype.codepointat@0.2.1: + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + dev: true + /string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} @@ -8377,7 +8464,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): + /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} hasBin: true peerDependencies: @@ -8390,7 +8477,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - '@babel/core' @@ -8427,7 +8514,7 @@ packages: svelte: 3.59.1 dev: true - /svelte-preprocess@5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): + /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -8465,7 +8552,6 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.22.5 '@types/pug': 2.0.6 detect-indent: 6.1.0 magic-string: 0.27.0 @@ -8556,6 +8642,10 @@ packages: globrex: 0.1.2 dev: true + /tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -8802,6 +8892,10 @@ packages: resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} dev: true + /ultrahtml@1.2.0: + resolution: {integrity: sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==} + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -8849,6 +8943,13 @@ packages: engines: {node: '>=4'} dev: true + /unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + dev: true + /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: @@ -9236,6 +9337,39 @@ packages: fsevents: 2.3.2 dev: true + /vite@4.3.9(sass@1.63.4): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.1 + sass: 1.63.4 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vitefu@0.2.4(vite@4.3.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -9244,7 +9378,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) dev: true /vm2@3.9.19: @@ -9465,6 +9599,10 @@ packages: engines: {node: '>=10'} dev: true + /yoga-wasm-web@0.3.3: + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + dev: true + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: true From 743a29fddca8417d1f70819fc2f89b509ec90462 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:52:50 -0300 Subject: [PATCH 13/47] =?UTF-8?q?chore:=20=F0=9F=94=A7=20add=20prototype?= =?UTF-8?q?=20banner=20to=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..91bdb58 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +![](https://mdnow.vercel.app/api.svg) From 584e8a462434641af8f912a3a1919b56d5a4e379 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 19 Jun 2023 15:03:36 -0300 Subject: [PATCH 14/47] =?UTF-8?q?fix:=20=F0=9F=90=9B=20banner=20width?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/src/routes/api.svg/+server.ts | 2 +- apps/www/src/routes/api.svg/Banner.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index 587020c..da95891 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -10,7 +10,7 @@ export const GET = (async ({ fetch }): Promise => { const banner = await satori(html, { - width: 650, + width: 1000, height: 180, fonts: [ { diff --git a/apps/www/src/routes/api.svg/Banner.html b/apps/www/src/routes/api.svg/Banner.html index a3d9ea8..a0066b4 100644 --- a/apps/www/src/routes/api.svg/Banner.html +++ b/apps/www/src/routes/api.svg/Banner.html @@ -2,7 +2,7 @@ display: flex; justify-items: center; align-items: center; - width: 650px; + width: 1000px; height: 180px; ">
From 807fdb9c23065b0c3d5e9522df3ccd697314ef7d Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:09:54 -0300 Subject: [PATCH 15/47] =?UTF-8?q?chore(banners):=20=F0=9F=94=A7=20create?= =?UTF-8?q?=20@maknow/banners=20package?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created the boilerplate/config files for the @marknow/banners package --- apps/www/package.json | 1 + packages/banners/.eslintignore | 1 + packages/banners/.eslintrc.cjs | 3 + packages/banners/.gitignore | 1 + packages/banners/.lintstagedrc | 4 + packages/banners/jsconfig.json | 17 + packages/banners/package.json | 32 + pnpm-lock.yaml | 1341 ++++++++++++++++++++++++++++++-- 8 files changed, 1336 insertions(+), 64 deletions(-) create mode 100644 packages/banners/.eslintignore create mode 100644 packages/banners/.eslintrc.cjs create mode 100644 packages/banners/.gitignore create mode 100644 packages/banners/.lintstagedrc create mode 100644 packages/banners/jsconfig.json create mode 100644 packages/banners/package.json diff --git a/apps/www/package.json b/apps/www/package.json index ef6360b..9089796 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -22,6 +22,7 @@ "@iconify-json/svg-spinners": "^1.1.1", "@iconify/types": "^2.0.0", "@iconify/utils": "^2.1.6", + "@marknow/banners": "workspace:*", "@poppanator/sveltekit-svg": "^3.0.1", "@sveltejs/adapter-vercel": "^3.0.1", "@sveltejs/kit": "^1.20.2", diff --git a/packages/banners/.eslintignore b/packages/banners/.eslintignore new file mode 100644 index 0000000..9b1c8b1 --- /dev/null +++ b/packages/banners/.eslintignore @@ -0,0 +1 @@ +/dist diff --git a/packages/banners/.eslintrc.cjs b/packages/banners/.eslintrc.cjs new file mode 100644 index 0000000..b053888 --- /dev/null +++ b/packages/banners/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + root: false, +}; diff --git a/packages/banners/.gitignore b/packages/banners/.gitignore new file mode 100644 index 0000000..9b1c8b1 --- /dev/null +++ b/packages/banners/.gitignore @@ -0,0 +1 @@ +/dist diff --git a/packages/banners/.lintstagedrc b/packages/banners/.lintstagedrc new file mode 100644 index 0000000..c768074 --- /dev/null +++ b/packages/banners/.lintstagedrc @@ -0,0 +1,4 @@ +{ + "gitDir": "../../.git", + "*": "eslint --fix" +} diff --git a/packages/banners/jsconfig.json b/packages/banners/jsconfig.json new file mode 100644 index 0000000..4bcf596 --- /dev/null +++ b/packages/banners/jsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "checkJs": true, + "allowJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "module": "ES2022", + "target": "ES2022", + "alwaysStrict": true + }, + "include": ["./src/**/*"], + "exclude": ["./node_modules/**", "./dist/**"] +} diff --git a/packages/banners/package.json b/packages/banners/package.json new file mode 100644 index 0000000..66c04eb --- /dev/null +++ b/packages/banners/package.json @@ -0,0 +1,32 @@ +{ + "name": "@marknow/banners", + "type": "module", + "version": "1.0.0", + "description": "", + "source": "./src/index.js", + "author": "", + "license": "ISC", + "keywords": [], + "exports": { + "types": "./src/index.d.ts", + "require": "./dist/index.cjs", + "import": "./src/index.js", + "default": "./src/index.js" + }, + "main": "./dist/index.cjs", + "module": "./src/index.js", + "types": "./src/index.d.ts", + "scripts": { + "build:cjs": "microbundle --compress false --pkg-main false --strict --tsconfig ./jsconfig.json --generateTypes false -f cjs --target node", + "build": "pnpm run build:cjs", + "dev": "microbundle -w --compress false" + }, + "dependencies": { + "satori": "^0.10.1", + "satori-html": "^0.3.2" + }, + "devDependencies": { + "@types/node": "^20.3.1", + "microbundle": "^0.15.1" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5448cc4..5bf9a80 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,9 @@ importers: '@iconify/utils': specifier: ^2.1.6 version: 2.1.6 + '@marknow/banners': + specifier: workspace:* + version: link:../../packages/banners '@poppanator/sveltekit-svg': specifier: ^3.0.1 version: 3.0.1(svelte@3.59.1)(vite@4.3.9) @@ -91,10 +94,10 @@ importers: version: 3.59.1 svelte-check: specifier: ^3.4.3 - version: 3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) + version: 3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) svelte-preprocess: specifier: ^5.0.4 - version: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + version: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) tslib: specifier: ^2.5.3 version: 2.5.3 @@ -118,7 +121,23 @@ importers: version: 0.2.8 vite: specifier: ^4.3.9 - version: 4.3.9(sass@1.63.4) + version: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + + packages/banners: + dependencies: + satori: + specifier: ^0.10.1 + version: 0.10.1 + satori-html: + specifier: ^0.3.2 + version: 0.3.2 + devDependencies: + '@types/node': + specifier: ^20.3.1 + version: 20.3.1 + microbundle: + specifier: ^0.15.1 + version: 0.15.1 packages: @@ -551,6 +570,18 @@ packages: '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) dev: true + /@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.22.5): + resolution: {integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -617,6 +648,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} @@ -941,6 +982,17 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) dev: true + /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) + dev: true + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} @@ -1201,6 +1253,51 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} @@ -1422,6 +1519,18 @@ packages: - supports-color dev: true + /@babel/preset-flow@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) + dev: true + /@babel/preset-modules@0.1.5(@babel/core@7.22.5): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: @@ -1435,6 +1544,21 @@ packages: esutils: 2.0.3 dev: true + /@babel/preset-react@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.22.5) + dev: true + /@babel/preset-typescript@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} engines: {node: '>=6.9.0'} @@ -2075,6 +2199,13 @@ packages: engines: {node: '>=6.0.0'} dev: true + /@jridgewell/source-map@0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true @@ -2175,7 +2306,7 @@ packages: dependencies: svelte: 3.59.1 svgo: 3.0.2 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) dev: true /@radix-ui/colors@0.1.8: @@ -2198,6 +2329,85 @@ packages: source-map: 0.7.4 dev: true + /@rollup/plugin-alias@3.1.9(rollup@2.79.1): + resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 2.79.1 + slash: 3.0.0 + dev: true + + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-commonjs@17.1.0(rollup@2.79.1): + resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.30.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-json@4.1.0(rollup@2.79.1): + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@rollup/pluginutils@4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -2227,7 +2437,6 @@ packages: dependencies: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 - dev: true /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} @@ -2238,6 +2447,15 @@ packages: engines: {node: '>=10'} dev: true + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: true + /@sveltejs/adapter-vercel@3.0.1(@sveltejs/kit@1.20.2): resolution: {integrity: sha512-PBY3YRm7Q7Prax07mxD/rvcho2CntGkYncAIkz2DtG5NTcVG5JZ1RM627it5zYYtc2/RB3YjMkZuCMBqDCiPkA==} peerDependencies: @@ -2274,7 +2492,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) transitivePeerDependencies: - supports-color dev: true @@ -2290,7 +2508,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) transitivePeerDependencies: - supports-color dev: true @@ -2309,7 +2527,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -2394,6 +2612,10 @@ packages: '@types/estree': 1.0.1 dev: true + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true @@ -2450,7 +2672,7 @@ packages: /@types/node-fetch@2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: - '@types/node': 14.18.33 + '@types/node': 20.3.1 form-data: 3.0.1 dev: true @@ -2466,10 +2688,20 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/parse-json@4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + /@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} dev: true + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.3.1 + dev: true + /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -2816,7 +3048,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) transitivePeerDependencies: - rollup dev: true @@ -3224,11 +3456,21 @@ packages: type-fest: 0.21.3 dev: true + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -3359,15 +3601,48 @@ packages: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} dev: true + /async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true + /asyncro@3.0.0: + resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} + dev: true + + /autoprefixer@10.4.14(postcss@8.4.24): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.9 + caniuse-lite: 1.0.30001503 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.22.5 + cosmiconfig: 7.1.0 + resolve: 1.22.2 + dev: true + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5): resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} peerDependencies: @@ -3404,6 +3679,19 @@ packages: - supports-color dev: true + /babel-plugin-transform-async-to-promises@0.8.18: + resolution: {integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==} + dev: true + + /babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.22.5): + resolution: {integrity: sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 + dev: true + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: true @@ -3415,7 +3703,6 @@ packages: /base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} engines: {node: '>= 0.4'} - dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3488,6 +3775,13 @@ packages: fill-range: 7.0.1 dev: true + /brotli-size@4.0.0: + resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} + engines: {node: '>= 10.16.0'} + dependencies: + duplexer: 0.1.1 + dev: true + /browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} dependencies: @@ -3604,14 +3898,38 @@ packages: engines: {node: '>=6'} dev: true + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.21.9 + caniuse-lite: 1.0.30001503 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 dev: true /caniuse-lite@1.0.30001503: resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} dev: true + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3719,6 +4037,15 @@ packages: engines: {node: '>= 10'} dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: @@ -3753,13 +4080,16 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true dev: true + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -3775,11 +4105,19 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} dev: true + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -3791,6 +4129,12 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + /consola@3.1.0: resolution: {integrity: sha512-rrrJE6rP0qzl/Srg+C9x/AE5Kxfux7reVm1Wh0wCjuXvih6DqZgqDZe8auTD28fzJ9TF0mHlSDrPpWlujQRo1Q==} dev: true @@ -3853,6 +4197,17 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -3868,15 +4223,31 @@ packages: /css-background-parser@0.1.0: resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} - dev: true /css-box-shadow@1.0.0-3: resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} - dev: true /css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} + + /css-declaration-sorter@6.4.0(postcss@8.4.24): + resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.24 + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 dev: true /css-select@5.1.0: @@ -3895,6 +4266,13 @@ packages: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 dev: true /css-tree@2.2.1: @@ -3924,6 +4302,72 @@ packages: hasBin: true dev: true + /cssnano-preset-default@5.2.14(postcss@8.4.24): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.0(postcss@8.4.24) + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-calc: 8.2.4(postcss@8.4.24) + postcss-colormin: 5.3.1(postcss@8.4.24) + postcss-convert-values: 5.1.3(postcss@8.4.24) + postcss-discard-comments: 5.1.2(postcss@8.4.24) + postcss-discard-duplicates: 5.1.0(postcss@8.4.24) + postcss-discard-empty: 5.1.1(postcss@8.4.24) + postcss-discard-overridden: 5.1.0(postcss@8.4.24) + postcss-merge-longhand: 5.1.7(postcss@8.4.24) + postcss-merge-rules: 5.1.4(postcss@8.4.24) + postcss-minify-font-values: 5.1.0(postcss@8.4.24) + postcss-minify-gradients: 5.1.1(postcss@8.4.24) + postcss-minify-params: 5.1.4(postcss@8.4.24) + postcss-minify-selectors: 5.2.1(postcss@8.4.24) + postcss-normalize-charset: 5.1.0(postcss@8.4.24) + postcss-normalize-display-values: 5.1.0(postcss@8.4.24) + postcss-normalize-positions: 5.1.1(postcss@8.4.24) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.24) + postcss-normalize-string: 5.1.0(postcss@8.4.24) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.24) + postcss-normalize-unicode: 5.1.1(postcss@8.4.24) + postcss-normalize-url: 5.1.0(postcss@8.4.24) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.24) + postcss-ordered-values: 5.1.3(postcss@8.4.24) + postcss-reduce-initial: 5.1.2(postcss@8.4.24) + postcss-reduce-transforms: 5.1.0(postcss@8.4.24) + postcss-svgo: 5.1.0(postcss@8.4.24) + postcss-unique-selectors: 5.1.1(postcss@8.4.24) + dev: true + + /cssnano-utils@3.1.0(postcss@8.4.24): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + + /cssnano@5.1.15(postcss@8.4.24): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.24) + lilconfig: 2.1.0 + postcss: 8.4.24 + yaml: 1.10.2 + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -4021,6 +4465,11 @@ packages: engines: {node: '>=10'} dev: true + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -4121,6 +4570,14 @@ packages: esutils: 2.0.3 dev: true + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -4133,6 +4590,13 @@ packages: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: true + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} @@ -4140,6 +4604,14 @@ packages: domelementtype: 2.3.0 dev: true + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + /domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: @@ -4160,6 +4632,10 @@ packages: engines: {node: '>=12'} dev: true + /duplexer@0.1.1: + resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -4193,13 +4669,20 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + /electron-to-chromium@1.4.431: resolution: {integrity: sha512-m232JTVmCawA2vG+1azVxhKZ9Sv1Q//xxNv5PkP5rWxGgQE8c3CiZFrh8Xnp+d1NmNxlu3QQrGIfdeW5TtXX5w==} dev: true /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} - dev: true /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4221,6 +4704,10 @@ packages: once: 1.4.0 dev: true + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -4585,7 +5072,6 @@ packages: /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -5063,6 +5549,14 @@ packages: '@types/unist': 2.0.6 dev: true + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -5090,6 +5584,10 @@ packages: require-like: 0.1.2 dev: true + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -5210,6 +5708,13 @@ packages: /fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + + /figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 dev: true /figures@3.2.0: @@ -5235,6 +5740,17 @@ packages: engines: {node: '>= 6'} dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + + /filesize@6.4.0: + resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} + engines: {node: '>= 0.4.0'} + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -5257,6 +5773,15 @@ packages: - supports-color dev: true + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -5310,6 +5835,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /fraction.js@4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -5417,6 +5946,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: @@ -5594,6 +6128,13 @@ packages: through2: 2.0.5 dev: true + /gzip-size@3.0.0: + resolution: {integrity: sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==} + engines: {node: '>=0.12.0'} + dependencies: + duplexer: 0.1.2 + dev: true + /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -5601,6 +6142,13 @@ packages: duplexer: 0.1.2 dev: true + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true @@ -5685,7 +6233,6 @@ packages: /hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} - dev: true /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -5767,6 +6314,10 @@ packages: safer-buffer: 2.1.2 dev: true + /icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + dev: true + /icss-utils@5.1.0(postcss@8.4.24): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -5789,6 +6340,13 @@ packages: resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} dev: true + /import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -5797,6 +6355,13 @@ packages: resolve-from: 4.0.0 dev: true + /import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /import-meta-resolve@2.2.2: resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} dev: true @@ -5975,6 +6540,12 @@ packages: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} dev: true + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -6010,6 +6581,10 @@ packages: engines: {node: '>=8'} dev: true + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -6052,6 +6627,12 @@ packages: engines: {node: '>=12'} dev: true + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.1 + dev: true + /is-reference@3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} dependencies: @@ -6113,6 +6694,13 @@ packages: call-bind: 1.0.2 dev: true + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} dev: true @@ -6125,10 +6713,30 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} dev: true + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.3.1 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + /jiti@1.18.2: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} hasBin: true @@ -6275,7 +6883,6 @@ packages: dependencies: base64-js: 0.0.8 unicode-trie: 2.0.0 - dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -6322,10 +6929,18 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -6365,6 +6980,12 @@ packages: engines: {node: '>=12'} dev: true + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -6395,6 +7016,16 @@ packages: engines: {node: '>=0.10.0'} dev: true + /maxmin@2.1.0: + resolution: {integrity: sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==} + engines: {node: '>=0.12'} + dependencies: + chalk: 1.1.3 + figures: 1.7.0 + gzip-size: 3.0.0 + pretty-bytes: 3.0.1 + dev: true + /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -6533,6 +7164,10 @@ packages: '@types/mdast': 3.0.11 dev: true + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + /mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} dev: true @@ -6586,6 +7221,58 @@ packages: engines: {node: '>= 0.6'} dev: true + /microbundle@0.15.1: + resolution: {integrity: sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==} + hasBin: true + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@babel/preset-flow': 7.22.5(@babel/core@7.22.5) + '@babel/preset-react': 7.22.5(@babel/core@7.22.5) + '@rollup/plugin-alias': 3.1.9(rollup@2.79.1) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) + '@rollup/plugin-commonjs': 17.1.0(rollup@2.79.1) + '@rollup/plugin-json': 4.1.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + asyncro: 3.0.0 + autoprefixer: 10.4.14(postcss@8.4.24) + babel-plugin-macros: 3.1.0 + babel-plugin-transform-async-to-promises: 0.8.18 + babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.22.5) + brotli-size: 4.0.0 + builtin-modules: 3.3.0 + camelcase: 6.3.0 + escape-string-regexp: 4.0.0 + filesize: 6.4.0 + gzip-size: 6.0.0 + kleur: 4.1.5 + lodash.merge: 4.6.2 + postcss: 8.4.24 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-bundle-size: 1.0.3 + rollup-plugin-postcss: 4.0.2(postcss@8.4.24) + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + rollup-plugin-typescript2: 0.32.1(rollup@2.79.1)(typescript@4.9.5) + rollup-plugin-visualizer: 5.9.2(rollup@2.79.1) + sade: 1.8.1 + terser: 5.18.1 + tiny-glob: 0.2.9 + tslib: 2.5.3 + typescript: 4.9.5 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + - ts-node + dev: true + /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: @@ -6924,6 +7611,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -7116,6 +7810,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} @@ -7143,6 +7842,11 @@ packages: boolbase: 1.0.0 dev: true + /number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7204,6 +7908,15 @@ packages: mimic-fn: 2.1.0 dev: true + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -7257,6 +7970,11 @@ packages: engines: {node: '>=8'} dev: true + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -7292,6 +8010,21 @@ packages: aggregate-error: 3.1.0 dev: true + /p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7325,7 +8058,6 @@ packages: /pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -7339,7 +8071,6 @@ packages: dependencies: color-name: 1.1.4 hex-rgb: 4.3.0 - dev: true /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -7458,6 +8189,18 @@ packages: engines: {node: '>=8.6'} dev: true + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -7471,6 +8214,49 @@ packages: engines: {node: '>=4'} dev: true + /postcss-calc@8.2.4(postcss@8.4.24): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@5.3.1(postcss@8.4.24): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@5.1.3(postcss@8.4.24): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-discard-comments@5.1.2(postcss@8.4.24): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + /postcss-discard-duplicates@5.1.0(postcss@8.4.24): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} @@ -7480,6 +8266,24 @@ packages: postcss: 8.4.24 dev: true + /postcss-discard-empty@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + + /postcss-discard-overridden@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + /postcss-load-config@3.1.4(postcss@8.4.24): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -7514,6 +8318,74 @@ packages: yaml: 2.3.1 dev: true + /postcss-merge-longhand@5.1.7(postcss@8.4.24): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.24) + dev: true + + /postcss-merge-rules@5.1.4(postcss@8.4.24): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-minify-font-values@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@5.1.4(postcss@8.4.24): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@5.2.1(postcss@8.4.24): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.24): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} @@ -7555,6 +8427,22 @@ packages: postcss: 8.4.24 dev: true + /postcss-modules@4.3.1(postcss@8.4.24): + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.4.24 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.24) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.24) + postcss-modules-scope: 3.0.0(postcss@8.4.24) + postcss-modules-values: 4.0.0(postcss@8.4.24) + string-hash: 1.1.3 + dev: true + /postcss-modules@6.0.0(postcss@8.4.24): resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} peerDependencies: @@ -7571,6 +8459,129 @@ packages: string-hash: 1.1.3 dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + + /postcss-normalize-display-values@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-ordered-values@5.1.3(postcss@8.4.24): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-reduce-initial@5.1.2(postcss@8.4.24): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + postcss: 8.4.24 + dev: true + + /postcss-reduce-transforms@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + /postcss-safe-parser@6.0.0(postcss@8.4.24): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} @@ -7588,9 +8599,29 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-svgo@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + + /postcss-unique-selectors@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss@8.4.24: resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} @@ -7617,6 +8648,13 @@ packages: hasBin: true dev: true + /pretty-bytes@3.0.1: + resolution: {integrity: sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} @@ -7651,6 +8689,11 @@ packages: optional: true dev: true + /promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + dev: true + /property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: true @@ -7731,6 +8774,12 @@ packages: engines: {node: '>=10'} dev: true + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -7938,6 +8987,11 @@ packages: unified: 10.1.2 dev: true + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -8003,6 +9057,96 @@ packages: glob: 7.2.3 dev: true + /rollup-plugin-bundle-size@1.0.3: + resolution: {integrity: sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==} + dependencies: + chalk: 1.1.3 + maxmin: 2.1.0 + dev: true + + /rollup-plugin-postcss@4.0.2(postcss@8.4.24): + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.4.24) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.4.24 + postcss-load-config: 3.1.4(postcss@8.4.24) + postcss-modules: 4.3.1(postcss@8.4.24) + promise.series: 0.2.0 + resolve: 1.22.2 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + dev: true + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.22.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.18.1 + dev: true + + /rollup-plugin-typescript2@0.32.1(rollup@2.79.1)(typescript@4.9.5): + resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + dependencies: + '@rollup/pluginutils': 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + resolve: 1.22.2 + rollup: 2.79.1 + tslib: 2.5.3 + typescript: 4.9.5 + dev: true + + /rollup-plugin-visualizer@5.9.2(rollup@2.79.1): + resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x + peerDependenciesMeta: + rollup: + optional: true + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + rollup: 2.79.1 + source-map: 0.7.4 + yargs: 17.7.2 + dev: true + + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rollup@3.25.1: resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -8043,6 +9187,10 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + dev: true + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -8084,7 +9232,6 @@ packages: resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} dependencies: ultrahtml: 1.2.0 - dev: true /satori@0.10.1: resolution: {integrity: sha512-F4bTCkDp931tLb7+UCNPBuSQwXhikrUkI4fBQo6fA8lF0Evqqgg3nDyUpRktQpR5Ry1DIiIVqLyEwkAms87ykg==} @@ -8100,7 +9247,6 @@ packages: parse-css-color: 0.2.1 postcss-value-parser: 4.2.0 yoga-wasm-web: 0.3.3 - dev: true /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} @@ -8158,6 +9304,12 @@ packages: - supports-color dev: true + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + /serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -8292,6 +9444,11 @@ packages: engines: {node: '>= 8'} dev: true + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: true @@ -8325,6 +9482,11 @@ packages: minipass: 3.3.6 dev: true + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -8354,6 +9516,18 @@ packages: /string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + + /string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 dev: true /string.prototype.trim@1.2.7: @@ -8404,6 +9578,13 @@ packages: character-entities-legacy: 3.0.0 dev: true + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -8439,12 +9620,32 @@ packages: acorn: 8.8.2 dev: true + /style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + dev: true + /style-to-object@0.4.1: resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} dependencies: inline-style-parser: 0.1.1 dev: true + /stylehacks@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -8464,7 +9665,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): + /svelte-check@3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} hasBin: true peerDependencies: @@ -8477,7 +9678,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + svelte-preprocess: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - '@babel/core' @@ -8514,7 +9715,7 @@ packages: svelte: 3.59.1 dev: true - /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): + /svelte-preprocess@5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -8552,6 +9753,7 @@ packages: typescript: optional: true dependencies: + '@babel/core': 7.22.5 '@types/pug': 2.0.6 detect-indent: 6.1.0 magic-string: 0.27.0 @@ -8568,6 +9770,20 @@ packages: engines: {node: '>= 8'} dev: true + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + /svgo@3.0.2: resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} engines: {node: '>=14.0.0'} @@ -8613,6 +9829,17 @@ packages: yallist: 4.0.0 dev: true + /terser@5.18.1: + resolution: {integrity: sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.3 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -8644,7 +9871,6 @@ packages: /tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - dev: true /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} @@ -8894,7 +10120,6 @@ packages: /ultrahtml@1.2.0: resolution: {integrity: sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==} - dev: true /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -8948,7 +10173,6 @@ packages: dependencies: pako: 0.2.9 tiny-inflate: 1.0.3 - dev: true /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -9337,39 +10561,6 @@ packages: fsevents: 2.3.2 dev: true - /vite@4.3.9(sass@1.63.4): - resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.17.19 - postcss: 8.4.24 - rollup: 3.25.1 - sass: 1.63.4 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vitefu@0.2.4(vite@4.3.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -9378,7 +10569,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) dev: true /vm2@3.9.19: @@ -9562,6 +10753,11 @@ packages: engines: {node: '>=0.4'} dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true @@ -9589,6 +10785,24 @@ packages: engines: {node: '>= 14'} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -9601,7 +10815,6 @@ packages: /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - dev: true /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} From 00af431a9e16e5b263f849490b94f47764d0bd26 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:13:21 -0300 Subject: [PATCH 16/47] =?UTF-8?q?chore(deps):=20=F0=9F=94=97=20remove=20sa?= =?UTF-8?q?tori=20from=20apps/www?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/package.json | 2 -- pnpm-lock.yaml | 83 +++++++++++++++++++++++++++++++++---------- 2 files changed, 64 insertions(+), 21 deletions(-) diff --git a/apps/www/package.json b/apps/www/package.json index 9089796..6048722 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -32,8 +32,6 @@ "mdsvex": "^0.10.6", "rehype-external-links": "^2.1.0", "sass": "^1.63.4", - "satori": "^0.10.1", - "satori-html": "^0.3.2", "svelte": "^3.59.1", "svelte-check": "^3.4.3", "svelte-preprocess": "^5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5bf9a80..411606a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -83,21 +83,15 @@ importers: sass: specifier: ^1.63.4 version: 1.63.4 - satori: - specifier: ^0.10.1 - version: 0.10.1 - satori-html: - specifier: ^0.3.2 - version: 0.3.2 svelte: specifier: ^3.59.1 version: 3.59.1 svelte-check: specifier: ^3.4.3 - version: 3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) + version: 3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) svelte-preprocess: specifier: ^5.0.4 - version: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + version: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) tslib: specifier: ^2.5.3 version: 2.5.3 @@ -121,7 +115,7 @@ importers: version: 0.2.8 vite: specifier: ^4.3.9 - version: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + version: 4.3.9(sass@1.63.4) packages/banners: dependencies: @@ -2306,7 +2300,7 @@ packages: dependencies: svelte: 3.59.1 svgo: 3.0.2 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) dev: true /@radix-ui/colors@0.1.8: @@ -2437,6 +2431,7 @@ packages: dependencies: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 + dev: false /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} @@ -2492,7 +2487,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) transitivePeerDependencies: - supports-color dev: true @@ -2508,7 +2503,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) transitivePeerDependencies: - supports-color dev: true @@ -2527,7 +2522,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -3048,7 +3043,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) transitivePeerDependencies: - rollup dev: true @@ -3703,6 +3698,7 @@ packages: /base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} engines: {node: '>= 0.4'} + dev: false /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3905,6 +3901,7 @@ packages: /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + dev: false /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} @@ -4223,13 +4220,16 @@ packages: /css-background-parser@0.1.0: resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} + dev: false /css-box-shadow@1.0.0-3: resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} + dev: false /css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} + dev: false /css-declaration-sorter@6.4.0(postcss@8.4.24): resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} @@ -4266,6 +4266,7 @@ packages: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 + dev: false /css-tree@1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} @@ -4683,6 +4684,7 @@ packages: /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} + dev: false /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5708,6 +5710,7 @@ packages: /fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + dev: false /figures@1.7.0: resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} @@ -6233,6 +6236,7 @@ packages: /hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} + dev: false /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -6883,6 +6887,7 @@ packages: dependencies: base64-js: 0.0.8 unicode-trie: 2.0.0 + dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -8071,6 +8076,7 @@ packages: dependencies: color-name: 1.1.4 hex-rgb: 4.3.0 + dev: false /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -9232,6 +9238,7 @@ packages: resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} dependencies: ultrahtml: 1.2.0 + dev: false /satori@0.10.1: resolution: {integrity: sha512-F4bTCkDp931tLb7+UCNPBuSQwXhikrUkI4fBQo6fA8lF0Evqqgg3nDyUpRktQpR5Ry1DIiIVqLyEwkAms87ykg==} @@ -9247,6 +9254,7 @@ packages: parse-css-color: 0.2.1 postcss-value-parser: 4.2.0 yoga-wasm-web: 0.3.3 + dev: false /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} @@ -9516,6 +9524,7 @@ packages: /string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + dev: false /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -9665,7 +9674,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): + /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} hasBin: true peerDependencies: @@ -9678,7 +9687,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - '@babel/core' @@ -9715,7 +9724,7 @@ packages: svelte: 3.59.1 dev: true - /svelte-preprocess@5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): + /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -9753,7 +9762,6 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.22.5 '@types/pug': 2.0.6 detect-indent: 6.1.0 magic-string: 0.27.0 @@ -9871,6 +9879,7 @@ packages: /tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + dev: false /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} @@ -10120,6 +10129,7 @@ packages: /ultrahtml@1.2.0: resolution: {integrity: sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==} + dev: false /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -10173,6 +10183,7 @@ packages: dependencies: pako: 0.2.9 tiny-inflate: 1.0.3 + dev: false /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -10561,6 +10572,39 @@ packages: fsevents: 2.3.2 dev: true + /vite@4.3.9(sass@1.63.4): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.1 + sass: 1.63.4 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vitefu@0.2.4(vite@4.3.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -10569,7 +10613,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(sass@1.63.4) dev: true /vm2@3.9.19: @@ -10815,6 +10859,7 @@ packages: /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + dev: false /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} From 23908cdc5bff4ef173c087ecaacd3dd151aee0a4 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:23:11 -0300 Subject: [PATCH 17/47] =?UTF-8?q?refactor:=20=E2=99=BB=EF=B8=8F=20move=20a?= =?UTF-8?q?nd=20refactor=20code=20to=20the=20package?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moved and refactored most of the banner creation code to the @marknow/banner package. --- .eslintrc.cjs | 1 + apps/www/.eslintignore | 2 - apps/www/src/routes/api.svg/+server.ts | 33 ++----- apps/www/src/routes/api.svg/Banner.html | 48 ---------- packages/banners/.eslintignore | 2 + .../src}/assets/Mona-Sans-Regular.woff | Bin .../src}/assets/Mona-Sans-SemiBold.woff | Bin packages/banners/src/fonts.js | 29 ++++++ packages/banners/src/html.js | 85 ++++++++++++++++++ packages/banners/src/index.d.ts | 3 + packages/banners/src/index.js | 43 +++++++++ packages/banners/src/types.d.ts | 46 ++++++++++ 12 files changed, 215 insertions(+), 77 deletions(-) delete mode 100644 apps/www/src/routes/api.svg/Banner.html rename {apps/www/src/lib => packages/banners/src}/assets/Mona-Sans-Regular.woff (100%) rename {apps/www/src/lib => packages/banners/src}/assets/Mona-Sans-SemiBold.woff (100%) create mode 100644 packages/banners/src/fonts.js create mode 100644 packages/banners/src/html.js create mode 100644 packages/banners/src/index.d.ts create mode 100644 packages/banners/src/index.js create mode 100644 packages/banners/src/types.d.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 204d07c..daf05fd 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -226,6 +226,7 @@ module.exports = { 'duotone', 'tsconfig', 'workspace', + 'woff', ], minLength: 4, }], diff --git a/apps/www/.eslintignore b/apps/www/.eslintignore index c191179..7c1958c 100644 --- a/apps/www/.eslintignore +++ b/apps/www/.eslintignore @@ -1,5 +1,3 @@ /src/lib/components.d.ts /src/lib/imports.d.ts /.eslint-auto-import.json -*.woff -*.woff2 diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index da95891..4457ad2 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -1,33 +1,12 @@ import type { RequestHandler } from '@sveltejs/kit'; -import satori from 'satori'; -import { html as satoriHtml } from 'satori-html'; -import Banner from './Banner.html?raw'; -import font400 from '$lib/assets/Mona-Sans-Regular.woff?url'; -import font600 from '$lib/assets/Mona-Sans-SemiBold.woff?url'; +import newBanner from '@marknow/banners'; -export const GET = (async ({ fetch }): Promise => { - const html = satoriHtml(Banner); +export const GET = (async (): Promise => { + const banner = await newBanner({ + title: 'Hello world', + }); - const banner = await satori(html, - { - width: 1000, - height: 180, - fonts: [ - { - name: 'Mona Sans', - weight: 400, - style: 'normal', - data: await (await fetch(font400)).arrayBuffer(), - }, - { - name: 'Mona Sans', - weight: 600, - style: 'normal', - data: await (await fetch(font600)).arrayBuffer(), - }], - }); - - return new Response(banner, { + return new Response(`${banner.toString()}`, { status: 200, headers: { 'Content-type': 'image/svg+xml', diff --git a/apps/www/src/routes/api.svg/Banner.html b/apps/www/src/routes/api.svg/Banner.html deleted file mode 100644 index a0066b4..0000000 --- a/apps/www/src/routes/api.svg/Banner.html +++ /dev/null @@ -1,48 +0,0 @@ -
-
-
- - - - - - -
-
-
-

Marknow

- - Create beautiful markdown for your projects with ease - -
-
-
-
diff --git a/packages/banners/.eslintignore b/packages/banners/.eslintignore index 9b1c8b1..090e4b1 100644 --- a/packages/banners/.eslintignore +++ b/packages/banners/.eslintignore @@ -1 +1,3 @@ /dist +*.woff +*.woff2 diff --git a/apps/www/src/lib/assets/Mona-Sans-Regular.woff b/packages/banners/src/assets/Mona-Sans-Regular.woff similarity index 100% rename from apps/www/src/lib/assets/Mona-Sans-Regular.woff rename to packages/banners/src/assets/Mona-Sans-Regular.woff diff --git a/apps/www/src/lib/assets/Mona-Sans-SemiBold.woff b/packages/banners/src/assets/Mona-Sans-SemiBold.woff similarity index 100% rename from apps/www/src/lib/assets/Mona-Sans-SemiBold.woff rename to packages/banners/src/assets/Mona-Sans-SemiBold.woff diff --git a/packages/banners/src/fonts.js b/packages/banners/src/fonts.js new file mode 100644 index 0000000..5604b0a --- /dev/null +++ b/packages/banners/src/fonts.js @@ -0,0 +1,29 @@ +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +/** + * @param {import('./types').Reader | undefined} reader + * @typedef {import('satori').SatoriOptions['fonts'][0]} Font + * @returns {Promise<{regular: Font, bold: Font}>} + */ +export async function getMonaSansFonts(reader) { + reader ||= (await import('node:fs/promises')).readFile; + + const __filename = fileURLToPath(import.meta.url); + const __dirname = dirname(__filename); + + return { + regular: { + name: 'Mona Sans', + weight: 400, + style: 'normal', + data: await reader(join(__dirname, './assets/Mona-Sans-Regular.woff')), + }, + bold: { + name: 'Mona Sans', + weight: 600, + style: 'normal', + data: await reader(join(__dirname, './assets/Mona-Sans-SemiBold.woff')), + }, + }; +} diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js new file mode 100644 index 0000000..eb40e1d --- /dev/null +++ b/packages/banners/src/html.js @@ -0,0 +1,85 @@ +/* eslint-disable complexity */ +/* eslint-disable @typescript-eslint/indent */ +/** + * Returns the html string of the banner to be used by satori. + * Use the params to customize and complete it. + * + * @param {'vertical' | 'horizontal'} layout + * @param {{width: number, height: number}} dimensions + * + * @return {string} + */ +export function generateBannerHtml(layout, dimensions) { + /** @type {boolean} */ + const horizontal = layout === 'horizontal'; + + return ` +
+
+
+ + + + + + +
+
+
+

+ %%MARKNOW-PLACEHOLDER-TITLE%% +

+ + %%MARKNOW-PLACEHOLDER-SUBTILE%% + +
+
+
+
+ `; +} diff --git a/packages/banners/src/index.d.ts b/packages/banners/src/index.d.ts new file mode 100644 index 0000000..3f1888b --- /dev/null +++ b/packages/banners/src/index.d.ts @@ -0,0 +1,3 @@ +import type { BannerOptions, Banner } from "./types"; + +export default async function banner(options: BannerOptions): Promise; diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js new file mode 100644 index 0000000..50705af --- /dev/null +++ b/packages/banners/src/index.js @@ -0,0 +1,43 @@ +import { html as htmlToVNodes } from 'satori-html'; +import satori from 'satori'; +import { generateBannerHtml } from './html'; +import { getMonaSansFonts } from './fonts'; + +/** + * @param {import('./types').BannerOptions} options + * @returns {Promise} + */ +export default async function banner({ + title, + subtitle = '', + layout = 'horizontal', + config, +}) { + const dimensions = { + width: 1000, + height: layout === 'horizontal' ? 180 : 680, + }; + + const bannerFonts = await getMonaSansFonts(config?.reader); + + const html = generateBannerHtml(layout, dimensions) + .replace('%%MARKNOW-PLACEHOLDER-TITLE%%', title) + .replace('%%MARKNOW-PLACEHOLDER-SUBTILE%%', subtitle); + + const vNodes = htmlToVNodes(html); + + const svg = await satori(vNodes, { + ...dimensions, + fonts: [ + bannerFonts.bold, + bannerFonts.regular, + ], + }); + + return { + html, + vNodes, + svg, + toString() { return svg; }, + }; +} diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts new file mode 100644 index 0000000..e632df3 --- /dev/null +++ b/packages/banners/src/types.d.ts @@ -0,0 +1,46 @@ +import type { Abortable } from "node:events"; +import type { OpenMode, PathLike } from "node:fs"; +import type { FileHandle } from "node:fs/promises"; + +export type Reader = ( + path: PathLike | FileHandle, +) => Promise + +/** + * Options object for creating a banner. + * + * @package `@marknow/banners` + */ +export interface BannerOptions { + title: string, + subtitle?: string, + layout?: 'horizontal' | 'vertical' = 'horizontal', + config?: { + reader?: Reader, + } +} + +/** + * + */ +export interface Banner { + toString(): string, + html: string, + svg: string, + vNodes: VNode, +} + +/** + * **Copied from the satori-html package,** + * React-element-like objects / VDOM object used in satori. + * + * @package `satori-html` + */ +export interface VNode { + type: string; + props: { + style?: Record; + children?: string | VNode | VNode[]; + [prop: string]: any; + }; +} From 04b5d9aa3831e2eb79ee3a7fffa7f137150bcd95 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 11:25:50 -0300 Subject: [PATCH 18/47] =?UTF-8?q?fix(banners):=20=F0=9F=90=9B=20truncate?= =?UTF-8?q?=20long=20titles=20and=20subtitles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 50705af..4df729f 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -13,6 +13,15 @@ export default async function banner({ layout = 'horizontal', config, }) { + if (layout === 'horizontal') { + title = truncateText(title, 45); + subtitle = truncateText(subtitle, 100); + } + else { + title = truncateText(title, 90); + subtitle = truncateText(subtitle, 200); + } + const dimensions = { width: 1000, height: layout === 'horizontal' ? 180 : 680, @@ -41,3 +50,8 @@ export default async function banner({ toString() { return svg; }, }; } + +/** @type {(string: string, maxChar: number) => string} */ +function truncateText(string, maxChar) { + return string.length > maxChar ? `${string.slice(0, maxChar)}...` : string; +} From 7e979862365de3f7b567063552d2d2b8f03f9714 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 12:44:53 -0300 Subject: [PATCH 19/47] =?UTF-8?q?fix(deps):=20=F0=9F=90=9B=20(temporally)?= =?UTF-8?q?=20fix=20satori=20deps=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It seems that the satori package of @marknow/banners is not being correctly bundled and transformed by Vite. The `satori > linebreak > unicode-trie` dependency is not transformed from commonjs to esm. But, installing satori as a dependency seems to fix it. --- apps/www/package.json | 3 +- pnpm-lock.yaml | 260 +++++++++++++++++++++++++++++++++--------- 2 files changed, 208 insertions(+), 55 deletions(-) diff --git a/apps/www/package.json b/apps/www/package.json index 6048722..7d9e2f6 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -31,7 +31,8 @@ "@unocss/extractor-svelte": "^0.52.7", "mdsvex": "^0.10.6", "rehype-external-links": "^2.1.0", - "sass": "^1.63.4", + "sass": "^1.63.6", + "satori": "^0.10.1", "svelte": "^3.59.1", "svelte-check": "^3.4.3", "svelte-preprocess": "^5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 411606a..8b512c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,10 +67,10 @@ importers: version: 1.20.2(svelte@3.59.1)(vite@4.3.9) '@typescript-eslint/eslint-plugin': specifier: ^5.59.11 - version: 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@5.1.3) + version: 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.43.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: ^5.59.11 - version: 5.59.11(eslint@8.42.0)(typescript@5.1.3) + version: 5.59.11(eslint@8.43.0)(typescript@5.1.3) '@unocss/extractor-svelte': specifier: ^0.52.7 version: 0.52.7 @@ -81,17 +81,20 @@ importers: specifier: ^2.1.0 version: 2.1.0 sass: - specifier: ^1.63.4 - version: 1.63.4 + specifier: ^1.63.6 + version: 1.63.6 + satori: + specifier: ^0.10.1 + version: 0.10.1 svelte: specifier: ^3.59.1 version: 3.59.1 svelte-check: specifier: ^3.4.3 - version: 3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) + version: 3.4.3(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1) svelte-preprocess: specifier: ^5.0.4 - version: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + version: 5.0.4(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) tslib: specifier: ^2.5.3 version: 2.5.3 @@ -115,7 +118,7 @@ importers: version: 0.2.8 vite: specifier: ^4.3.9 - version: 4.3.9(sass@1.63.4) + version: 4.3.9(sass@1.63.6) packages/banners: dependencies: @@ -2085,6 +2088,16 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.43.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.43.0 + eslint-visitor-keys: 3.4.1 + dev: true + /@eslint-community/regexpp@4.5.1: resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -2112,6 +2125,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@8.43.0: + resolution: {integrity: sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@fontsource-variable/fira-code@5.0.3: resolution: {integrity: sha512-OfishGTVN3fUM8M27P0NYV4UvugpLigP8DjMHnG9kars9ZRbRPTnfW4lGJELGCXFf6IQVJ2uRyjUKWNIx/Sd2w==} dev: true @@ -2300,7 +2318,7 @@ packages: dependencies: svelte: 3.59.1 svgo: 3.0.2 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(sass@1.63.6) dev: true /@radix-ui/colors@0.1.8: @@ -2431,7 +2449,6 @@ packages: dependencies: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 - dev: false /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} @@ -2487,7 +2504,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(sass@1.63.6) transitivePeerDependencies: - supports-color dev: true @@ -2503,7 +2520,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(sass@1.63.6) transitivePeerDependencies: - supports-color dev: true @@ -2522,7 +2539,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(sass@1.63.6) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -2739,6 +2756,34 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/type-utils': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + debug: 4.3.4 + eslint: 8.43.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.1 + tsutils: 3.21.0(typescript@5.1.3) + typescript: 5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@5.59.11(eslint@8.42.0)(typescript@5.1.3): resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2759,6 +2804,26 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@5.59.11(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) + debug: 4.3.4 + eslint: 8.43.0 + typescript: 5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@5.59.11: resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2787,6 +2852,26 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@5.59.11(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + debug: 4.3.4 + eslint: 8.43.0 + tsutils: 3.21.0(typescript@5.1.3) + typescript: 5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/types@5.59.11: resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2833,6 +2918,26 @@ packages: - typescript dev: true + /@typescript-eslint/utils@5.59.11(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) + eslint: 8.43.0 + eslint-scope: 5.1.1 + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/visitor-keys@5.59.11: resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3043,7 +3148,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(sass@1.63.6) transitivePeerDependencies: - rollup dev: true @@ -3084,9 +3189,9 @@ packages: find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.3.0 + mlly: 1.4.0 outdent: 0.8.0 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) vite-node: 0.28.5(@types/node@14.18.33) transitivePeerDependencies: - '@types/node' @@ -3285,7 +3390,7 @@ packages: cacache: 15.3.0 chalk: 4.1.2 chokidar: 3.5.3 - dotenv: 16.1.4 + dotenv: 16.3.1 esbuild: 0.17.6 esbuild-plugin-polyfill-node: 0.2.0(esbuild@0.17.6) execa: 5.1.1 @@ -3386,12 +3491,12 @@ packages: negotiator: 0.6.3 dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.9.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.9.0 dev: true /acorn-walk@8.2.0: @@ -3405,6 +3510,12 @@ packages: hasBin: true dev: true + /acorn@8.9.0: + resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -3698,7 +3809,6 @@ packages: /base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} engines: {node: '>= 0.4'} - dev: false /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3901,7 +4011,6 @@ packages: /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - dev: false /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} @@ -4220,16 +4329,13 @@ packages: /css-background-parser@0.1.0: resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} - dev: false /css-box-shadow@1.0.0-3: resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} - dev: false /css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} - dev: false /css-declaration-sorter@6.4.0(postcss@8.4.24): resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} @@ -4266,7 +4372,6 @@ packages: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - dev: false /css-tree@1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} @@ -4628,8 +4733,8 @@ packages: is-obj: 2.0.0 dev: true - /dotenv@16.1.4: - resolution: {integrity: sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: true @@ -4684,7 +4789,6 @@ packages: /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} - dev: false /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5472,6 +5576,54 @@ packages: - supports-color dev: true + /eslint@8.43.0: + resolution: {integrity: sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0) + '@eslint-community/regexpp': 4.5.1 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.43.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} dev: true @@ -5480,8 +5632,8 @@ packages: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.1 dev: true @@ -5710,7 +5862,6 @@ packages: /fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} - dev: false /figures@1.7.0: resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} @@ -6236,7 +6387,6 @@ packages: /hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} - dev: false /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -6887,7 +7037,6 @@ packages: dependencies: base64-js: 0.0.8 unicode-trie: 2.0.0 - dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -7359,8 +7508,8 @@ packages: /micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -7701,6 +7850,15 @@ packages: ufo: 1.1.2 dev: true + /mlly@1.4.0: + resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + dependencies: + acorn: 8.9.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -8076,7 +8234,6 @@ packages: dependencies: color-name: 1.1.4 hex-rgb: 4.3.0 - dev: false /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -9224,8 +9381,8 @@ packages: rimraf: 2.7.1 dev: true - /sass@1.63.4: - resolution: {integrity: sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==} + /sass@1.63.6: + resolution: {integrity: sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -9254,7 +9411,6 @@ packages: parse-css-color: 0.2.1 postcss-value-parser: 4.2.0 yoga-wasm-web: 0.3.3 - dev: false /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} @@ -9524,7 +9680,6 @@ packages: /string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} - dev: false /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -9674,7 +9829,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): + /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} hasBin: true peerDependencies: @@ -9687,7 +9842,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - '@babel/core' @@ -9724,7 +9879,7 @@ packages: svelte: 3.59.1 dev: true - /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): + /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -9766,7 +9921,7 @@ packages: detect-indent: 6.1.0 magic-string: 0.27.0 postcss: 8.4.24 - sass: 1.63.4 + sass: 1.63.6 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 3.59.1 @@ -9879,7 +10034,6 @@ packages: /tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - dev: false /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} @@ -10183,7 +10337,6 @@ packages: dependencies: pako: 0.2.9 tiny-inflate: 1.0.3 - dev: false /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -10522,12 +10675,12 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - '@types/node' - less @@ -10538,7 +10691,7 @@ packages: - terser dev: true - /vite@4.3.9(@types/node@14.18.33)(sass@1.63.4): + /vite@4.3.9(@types/node@14.18.33)(sass@1.63.6): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -10567,12 +10720,12 @@ packages: esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 - sass: 1.63.4 + sass: 1.63.6 optionalDependencies: fsevents: 2.3.2 dev: true - /vite@4.3.9(sass@1.63.4): + /vite@4.3.9(sass@1.63.6): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -10600,7 +10753,7 @@ packages: esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 - sass: 1.63.4 + sass: 1.63.6 optionalDependencies: fsevents: 2.3.2 dev: true @@ -10613,7 +10766,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(sass@1.63.6) dev: true /vm2@3.9.19: @@ -10621,7 +10774,7 @@ packages: engines: {node: '>=6.0'} hasBin: true dependencies: - acorn: 8.8.2 + acorn: 8.9.0 acorn-walk: 8.2.0 dev: true @@ -10859,7 +11012,6 @@ packages: /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - dev: false /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} From 950c6cbe8901b83aa09de8d16d67eb2f8dbbf3fe Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:13:19 -0300 Subject: [PATCH 20/47] =?UTF-8?q?refactor(banners):=20=E2=99=BB=EF=B8=8F?= =?UTF-8?q?=20rename=20`config`=20param=20to=20`libConfig`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/index.js | 2 +- packages/banners/src/types.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 4df729f..68b3006 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -11,7 +11,7 @@ export default async function banner({ title, subtitle = '', layout = 'horizontal', - config, + libConfig: config, }) { if (layout === 'horizontal') { title = truncateText(title, 45); diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index e632df3..16e03d8 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -15,7 +15,7 @@ export interface BannerOptions { title: string, subtitle?: string, layout?: 'horizontal' | 'vertical' = 'horizontal', - config?: { + libConfig?: { reader?: Reader, } } From af66581c4ef34c7b9d596499a34f81945ecfb077 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:21:37 -0300 Subject: [PATCH 21/47] =?UTF-8?q?feat(banners):=20=E2=9C=A8=20custom=20fon?= =?UTF-8?q?ts=20support=20#10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added custom fonts support for the package. This feature needed to be added earlier than 1.1, so the package could be more easily integrated in the app/web environment. --- apps/www/.eslintignore | 1 + apps/www/src/routes/api.svg/+server.ts | 17 ++++++++++++++++- apps/www/static/Mona-Sans-Regular.woff | Bin 0 -> 19832 bytes apps/www/static/Mona-Sans-SemiBold.woff | Bin 0 -> 19832 bytes packages/banners/src/fonts.js | 6 +++--- packages/banners/src/html.js | 12 ++++++++---- packages/banners/src/index.d.ts | 8 +++++--- packages/banners/src/index.js | 20 +++++++++++--------- packages/banners/src/types.d.ts | 4 ++++ 9 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 apps/www/static/Mona-Sans-Regular.woff create mode 100644 apps/www/static/Mona-Sans-SemiBold.woff diff --git a/apps/www/.eslintignore b/apps/www/.eslintignore index 7c1958c..4ea4c0c 100644 --- a/apps/www/.eslintignore +++ b/apps/www/.eslintignore @@ -1,3 +1,4 @@ /src/lib/components.d.ts /src/lib/imports.d.ts /.eslint-auto-import.json +/static diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index 4457ad2..347a0a3 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -1,9 +1,24 @@ import type { RequestHandler } from '@sveltejs/kit'; import newBanner from '@marknow/banners'; -export const GET = (async (): Promise => { +export const GET = (async ({ fetch }): Promise => { const banner = await newBanner({ title: 'Hello world', + subtitle: 'This is a test!', + font: { + title: { + data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), + name: 'Mona Sans', + weight: 600, + style: 'normal', + }, + subtitle: { + data: await (await fetch('/Mona-Sans-Regular.woff')).arrayBuffer(), + name: 'Mona Sans', + weight: 400, + style: 'normal', + }, + }, }); return new Response(`${banner.toString()}`, { diff --git a/apps/www/static/Mona-Sans-Regular.woff b/apps/www/static/Mona-Sans-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d31c6ed0ee68b64d87b3811fc390f1ce3b007b2f GIT binary patch literal 19832 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¨$-|_@;LxR| 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 CoZJ8a literal 0 HcmV?d00001 diff --git a/apps/www/static/Mona-Sans-SemiBold.woff b/apps/www/static/Mona-Sans-SemiBold.woff new file mode 100644 index 0000000000000000000000000000000000000000..b57fb154f4edde4319c05d83f31171a54906a32b GIT binary patch literal 19832 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 + * @returns {Promise<{subtitle: Font, title: Font}>} */ export async function getMonaSansFonts(reader) { reader ||= (await import('node:fs/promises')).readFile; @@ -13,13 +13,13 @@ export async function getMonaSansFonts(reader) { const __dirname = dirname(__filename); return { - regular: { + subtitle: { name: 'Mona Sans', weight: 400, style: 'normal', data: await reader(join(__dirname, './assets/Mona-Sans-Regular.woff')), }, - bold: { + title: { name: 'Mona Sans', weight: 600, style: 'normal', diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index eb40e1d..e1800a3 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -4,12 +4,15 @@ * Returns the html string of the banner to be used by satori. * Use the params to customize and complete it. * + * @typedef {import('satori').SatoriOptions['fonts'][0]} Font + * * @param {'vertical' | 'horizontal'} layout * @param {{width: number, height: number}} dimensions + * @param {{subtitle: Font, title: Font}} fonts * * @return {string} */ -export function generateBannerHtml(layout, dimensions) { +export function generateBannerHtml(layout, dimensions, fonts) { /** @type {boolean} */ const horizontal = layout === 'horizontal'; @@ -24,7 +27,6 @@ export function generateBannerHtml(layout, dimensions) {

; +/** + * @param {import('./types').BannerOptions} options + * @returns {Promise} + */ +export default function banner({ title, subtitle, icon, layout, config, }: import('./types').BannerOptions): Promise; diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 68b3006..a7bc97f 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -11,8 +11,14 @@ export default async function banner({ title, subtitle = '', layout = 'horizontal', + font: customFonts, libConfig: config, }) { + const dimensions = { + width: 1000, + height: 180, + }; + if (layout === 'horizontal') { title = truncateText(title, 45); subtitle = truncateText(subtitle, 100); @@ -20,16 +26,12 @@ export default async function banner({ else { title = truncateText(title, 90); subtitle = truncateText(subtitle, 200); + dimensions.height = 680; } - const dimensions = { - width: 1000, - height: layout === 'horizontal' ? 180 : 680, - }; + const bannerFonts = customFonts ?? await getMonaSansFonts(config?.reader); - const bannerFonts = await getMonaSansFonts(config?.reader); - - const html = generateBannerHtml(layout, dimensions) + const html = generateBannerHtml(layout, dimensions, bannerFonts) .replace('%%MARKNOW-PLACEHOLDER-TITLE%%', title) .replace('%%MARKNOW-PLACEHOLDER-SUBTILE%%', subtitle); @@ -38,8 +40,8 @@ export default async function banner({ const svg = await satori(vNodes, { ...dimensions, fonts: [ - bannerFonts.bold, - bannerFonts.regular, + bannerFonts.title, + bannerFonts.subtitle, ], }); diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index 16e03d8..2905fae 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -15,6 +15,10 @@ export interface BannerOptions { title: string, subtitle?: string, layout?: 'horizontal' | 'vertical' = 'horizontal', + font?: { + title: Font, + subtitle: Font, + }, libConfig?: { reader?: Reader, } From a22aae7c73e8d4809d1db5ee3857e97656ef9543 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:47:59 -0300 Subject: [PATCH 22/47] =?UTF-8?q?feat(banners):=20=E2=9C=A8=20custom=20col?= =?UTF-8?q?ors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Feature (Banners): Custom colors #9 --- apps/www/src/routes/api.svg/+server.ts | 4 ++++ packages/banners/src/html.js | 6 ++++-- packages/banners/src/index.js | 6 +++++- packages/banners/src/types.d.ts | 14 ++++++++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index 347a0a3..e7cd25a 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -5,6 +5,10 @@ export const GET = (async ({ fetch }): Promise => { const banner = await newBanner({ title: 'Hello world', subtitle: 'This is a test!', + colors: { + background: '#000000', + foreground: '#ffffff', + }, font: { title: { data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index e1800a3..7664053 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -9,10 +9,11 @@ * @param {'vertical' | 'horizontal'} layout * @param {{width: number, height: number}} dimensions * @param {{subtitle: Font, title: Font}} fonts + * @param {import('./types').Colors} colors * * @return {string} */ -export function generateBannerHtml(layout, dimensions, fonts) { +export function generateBannerHtml(layout, dimensions, fonts, colors) { /** @type {boolean} */ const horizontal = layout === 'horizontal'; @@ -27,7 +28,8 @@ export function generateBannerHtml(layout, dimensions, fonts) {
Date: Fri, 23 Jun 2023 13:48:36 -0300 Subject: [PATCH 23/47] =?UTF-8?q?chore(banners):=20=F0=9F=94=A7=20dev=20sc?= =?UTF-8?q?ript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/banners/package.json b/packages/banners/package.json index 66c04eb..3263fe7 100644 --- a/packages/banners/package.json +++ b/packages/banners/package.json @@ -19,7 +19,7 @@ "scripts": { "build:cjs": "microbundle --compress false --pkg-main false --strict --tsconfig ./jsconfig.json --generateTypes false -f cjs --target node", "build": "pnpm run build:cjs", - "dev": "microbundle -w --compress false" + "dev": "pnpm run build -w" }, "dependencies": { "satori": "^0.10.1", From 1759852c4038ee44bc2af1208e014d6225f60634 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 14:19:55 -0300 Subject: [PATCH 24/47] =?UTF-8?q?feat(banners):=20=E2=9C=A8=20right-to-lef?= =?UTF-8?q?t=20layout/lang=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/src/routes/api.svg/+server.ts | 1 + packages/banners/src/html.js | 40 ++++++++++++++++++++------ packages/banners/src/index.js | 5 +++- packages/banners/src/types.d.ts | 1 + 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index e7cd25a..6f6c90b 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -23,6 +23,7 @@ export const GET = (async ({ fetch }): Promise => { style: 'normal', }, }, + rtl: true, }); return new Response(`${banner.toString()}`, { diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index 7664053..d4658a0 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -6,14 +6,24 @@ * * @typedef {import('satori').SatoriOptions['fonts'][0]} Font * - * @param {'vertical' | 'horizontal'} layout - * @param {{width: number, height: number}} dimensions - * @param {{subtitle: Font, title: Font}} fonts - * @param {import('./types').Colors} colors + * @typedef {{ + * layout: 'vertical' | 'horizontal', + * dimensions: { width: number, height: number } + * fonts: { title: Font, subtitle: Font } + * colors: import('./types').Colors + * rtl: boolean + * }} Props + * @param {Props} properties * * @return {string} */ -export function generateBannerHtml(layout, dimensions, fonts, colors) { +export function generateBannerHtml({ + layout, + dimensions, + colors, + fonts, + rtl, +}) { /** @type {boolean} */ const horizontal = layout === 'horizontal'; @@ -35,8 +45,10 @@ export function generateBannerHtml(layout, dimensions, fonts, colors) { padding: ${horizontal ? '1.2' : '2.5'}em 2.5em; display: flex; ${horizontal - ? 'flex-direction: row;' - : 'flex-direction: column;' + ? rtl + ? 'flex-direction: row-reverse;' + : 'flex-direction: row;' + : 'flex-direction: column;' } align-items: center; min-width: 98%; @@ -69,7 +81,12 @@ export function generateBannerHtml(layout, dimensions, fonts, colors) { font-family: ${fonts.title.name}; text-overflow: ellipsis; max-width: 50em; - ${horizontal ? 'text-align: start;' : 'text-align: center;'} + display: flex; + flex-direction: ${rtl ? 'row-reverse' : 'row'}; + ${horizontal + ? 'text-align: start;' + : 'text-align: center;' + } "> %%MARKNOW-PLACEHOLDER-TITLE%%

@@ -79,7 +96,12 @@ export function generateBannerHtml(layout, dimensions, fonts, colors) { font-family: ${fonts.subtitle.name}; text-overflow: ellipsis; max-width: 50em; - ${horizontal ? 'text-align: start;' : 'text-align: center;'} + display: flex; + flex-direction: ${rtl ? 'row-reverse' : 'row'}; + ${horizontal + ? 'text-align: start;' + : 'text-align: center;' + } "> %%MARKNOW-PLACEHOLDER-SUBTILE%% diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 2c907b4..d22c434 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -16,6 +16,7 @@ export default async function banner({ }, layout = 'horizontal', font: customFonts, + rtl = false, libConfig: config, }) { const dimensions = { @@ -35,7 +36,9 @@ export default async function banner({ const bannerFonts = customFonts ?? await getMonaSansFonts(config?.reader); - const html = generateBannerHtml(layout, dimensions, bannerFonts, colors) + const htmlTemplate = generateBannerHtml({ layout, dimensions, fonts: bannerFonts, colors, rtl }); + + const html = htmlTemplate .replace('%%MARKNOW-PLACEHOLDER-TITLE%%', title) .replace('%%MARKNOW-PLACEHOLDER-SUBTILE%%', subtitle); diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index 869cfb4..07660da 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -29,6 +29,7 @@ export interface BannerOptions { subtitle: Font, } colors?: Colors, + rtl?: boolean, libConfig?: { reader?: Reader, } From 78ca4fc4ba72c81b23c721451e7dab9b2c896e97 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 15:41:17 -0300 Subject: [PATCH 25/47] =?UTF-8?q?fix(banners):=20=F0=9F=90=9B=20vertical?= =?UTF-8?q?=20layout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/html.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index d4658a0..b75039b 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -51,6 +51,7 @@ export function generateBannerHtml({ : 'flex-direction: column;' } align-items: center; + justify-content: center; min-width: 98%; min-height: 20%; gap: 1em; @@ -76,17 +77,13 @@ export function generateBannerHtml({ ">

%%MARKNOW-PLACEHOLDER-TITLE%%

@@ -99,8 +96,8 @@ export function generateBannerHtml({ display: flex; flex-direction: ${rtl ? 'row-reverse' : 'row'}; ${horizontal - ? 'text-align: start;' - : 'text-align: center;' + ? 'margin: 0;' + : 'margin: 0 auto;' } "> %%MARKNOW-PLACEHOLDER-SUBTILE%% From b2069b920fda72abf0a4eb52f3d0772bb1e9f734 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 15:46:24 -0300 Subject: [PATCH 26/47] =?UTF-8?q?fix(banners):=20=F0=9F=90=9B=20vertical/h?= =?UTF-8?q?orizontal=20layout=20toggle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/html.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index b75039b..fd68429 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -51,7 +51,10 @@ export function generateBannerHtml({ : 'flex-direction: column;' } align-items: center; - justify-content: center; + ${horizontal + ? 'justify-content: flex-start;' + : 'justify-content: center;' + } min-width: 98%; min-height: 20%; gap: 1em; From 4452ac2d2496c524448e70f404465081d61278e1 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 15:47:46 -0300 Subject: [PATCH 27/47] =?UTF-8?q?fix(banners):=20=F0=9F=90=9B=20vertical?= =?UTF-8?q?=20layout=20height?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index d22c434..3cee6dc 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -31,7 +31,7 @@ export default async function banner({ else { title = truncateText(title, 90); subtitle = truncateText(subtitle, 200); - dimensions.height = 680; + dimensions.height = 1300; } const bannerFonts = customFonts ?? await getMonaSansFonts(config?.reader); From 1bf5c1ff608722283b7749c28e115b551914d16d Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 16:04:38 -0300 Subject: [PATCH 28/47] =?UTF-8?q?feat(banners):=20=E2=9C=A8=20custom=20ico?= =?UTF-8?q?n=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/src/routes/api.svg/+server.ts | 5 ++- packages/banners/src/html.js | 12 ++--- packages/banners/src/icons.js | 62 ++++++++++++++++++++++++++ packages/banners/src/index.js | 14 ++++-- packages/banners/src/types.d.ts | 10 ++++- 5 files changed, 89 insertions(+), 14 deletions(-) create mode 100644 packages/banners/src/icons.js diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index 6f6c90b..e617b97 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -5,6 +5,7 @@ export const GET = (async ({ fetch }): Promise => { const banner = await newBanner({ title: 'Hello world', subtitle: 'This is a test!', + icon: 'https://raw.githubusercontent.com/LoredDev/.github/main/assets/designs/dots-icon-dark.svg', colors: { background: '#000000', foreground: '#ffffff', @@ -23,7 +24,9 @@ export const GET = (async ({ fetch }): Promise => { style: 'normal', }, }, - rtl: true, + libConfig: { + fetcher: fetch, + }, }); return new Response(`${banner.toString()}`, { diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index fd68429..dc35e30 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -63,16 +63,10 @@ export function generateBannerHtml({ align-items: center; display: flex; margin: ${horizontal ? '1.5' : '0'}em 0; + width: 3.5em; + height: 3.5em; "> - - - - - - + %%MARKNOW-PLACEHOLDER-ICON%%
getIcon(icon, config?.fetcher); + const dimensions = { width: 1000, height: 180, @@ -38,9 +42,12 @@ export default async function banner({ const htmlTemplate = generateBannerHtml({ layout, dimensions, fonts: bannerFonts, colors, rtl }); + const iconSvg = await config.iconHandler(icon); + const html = htmlTemplate .replace('%%MARKNOW-PLACEHOLDER-TITLE%%', title) - .replace('%%MARKNOW-PLACEHOLDER-SUBTILE%%', subtitle); + .replace('%%MARKNOW-PLACEHOLDER-SUBTILE%%', subtitle) + .replace('%%MARKNOW-PLACEHOLDER-ICON%%', iconSvg); const vNodes = htmlToVNodes(html); @@ -56,6 +63,7 @@ export default async function banner({ html, vNodes, svg, + icon: iconSvg, toString() { return svg; }, }; } diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index 07660da..5dedb02 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -10,6 +10,10 @@ export type Colors = { background: string; } +export type Fetcher = ( + input: RequestInfo | URL, + init?: RequestInit +) => Promise; export type Reader = ( path: PathLike | FileHandle, @@ -21,6 +25,7 @@ export type Reader = ( * @package `@marknow/banners` */ export interface BannerOptions { + icon?: string, title: string, subtitle?: string, layout?: 'horizontal' | 'vertical', @@ -31,7 +36,9 @@ export interface BannerOptions { colors?: Colors, rtl?: boolean, libConfig?: { + fetcher?: Fetcher = fetch, reader?: Reader, + iconHandler?: (icon: string) => string | Promise } } @@ -42,8 +49,9 @@ export interface Banner { toString(): string, html: string, svg: string, + icon: string, vNodes: VNode, -} +}; /** * **Copied from the satori-html package,** From c2d25da670a36d5de4c998ca14801f519b8f5ad3 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 16:15:02 -0300 Subject: [PATCH 29/47] =?UTF-8?q?refactor(banners):=20=E2=99=BB=EF=B8=8F?= =?UTF-8?q?=20improve=20code=20readability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.cjs | 2 +- apps/www/src/routes/api.svg/+server.ts | 4 ++-- packages/banners/src/html.js | 10 +++++----- packages/banners/src/index.js | 25 ++++++++----------------- packages/banners/src/types.d.ts | 2 +- 5 files changed, 17 insertions(+), 26 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index daf05fd..0682156 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -188,7 +188,7 @@ module.exports = { '@typescript-eslint/semi': ['error', 'always'], 'max-depth': ['error', 3], 'max-nested-callbacks': ['error', 3], - 'complexity': ['error', 4], + 'complexity': ['error', 8], 'no-tabs': ['error', { allowIndentationTabs: true }], 'spellcheck/spell-checker': ['error', { skipWords: [ diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index e617b97..1884ce0 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -5,12 +5,12 @@ export const GET = (async ({ fetch }): Promise => { const banner = await newBanner({ title: 'Hello world', subtitle: 'This is a test!', - icon: 'https://raw.githubusercontent.com/LoredDev/.github/main/assets/designs/dots-icon-dark.svg', + icon: 'solar:hand-shake-bold-duotone', colors: { background: '#000000', foreground: '#ffffff', }, - font: { + fonts: { title: { data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), name: 'Mona Sans', diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index dc35e30..2bbbfe3 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -7,11 +7,11 @@ * @typedef {import('satori').SatoriOptions['fonts'][0]} Font * * @typedef {{ - * layout: 'vertical' | 'horizontal', - * dimensions: { width: number, height: number } - * fonts: { title: Font, subtitle: Font } - * colors: import('./types').Colors - * rtl: boolean + * dimensions: { width: number, height: number }, + * fonts: { title: Font, subtitle: Font }, + * layout: 'vertical' | 'horizontal', + * colors: import('./types').Colors, + * rtl: boolean, * }} Props * @param {Props} properties * diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index b64d2a3..83bcc80 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -18,29 +18,20 @@ export default async function banner({ foreground: '#000000', }, libConfig: config = {}, - font: customFonts, + fonts, rtl = false, }) { config.iconHandler ||= icon => getIcon(icon, config?.fetcher); + fonts ||= await getMonaSansFonts(config?.reader); + title = truncateText(title, layout === 'horizontal' ? 45 : 90); + subtitle = truncateText(subtitle, layout === 'horizontal' ? 100 : 200); const dimensions = { width: 1000, - height: 180, + height: layout === 'horizontal' ? 180 : 1300, }; - if (layout === 'horizontal') { - title = truncateText(title, 45); - subtitle = truncateText(subtitle, 100); - } - else { - title = truncateText(title, 90); - subtitle = truncateText(subtitle, 200); - dimensions.height = 1300; - } - - const bannerFonts = customFonts ?? await getMonaSansFonts(config?.reader); - - const htmlTemplate = generateBannerHtml({ layout, dimensions, fonts: bannerFonts, colors, rtl }); + const htmlTemplate = generateBannerHtml({ layout, dimensions, fonts, colors, rtl }); const iconSvg = await config.iconHandler(icon); @@ -54,8 +45,8 @@ export default async function banner({ const svg = await satori(vNodes, { ...dimensions, fonts: [ - bannerFonts.title, - bannerFonts.subtitle, + fonts.title, + fonts.subtitle, ], }); diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index 5dedb02..e34a475 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -29,7 +29,7 @@ export interface BannerOptions { title: string, subtitle?: string, layout?: 'horizontal' | 'vertical', - font?: { + fonts?: { title: Font, subtitle: Font, } From fcaa77aceaedcb933057dc948e24a02ddafe4843 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Fri, 23 Jun 2023 16:26:28 -0300 Subject: [PATCH 30/47] =?UTF-8?q?refactor:=20=E2=99=BB=EF=B8=8F=20use=20im?= =?UTF-8?q?g=20tag=20instead=20of=20inline=20svg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/src/routes/+page.svelte | 16 +++++----------- apps/www/src/routes/+page.ts | 6 ------ 2 files changed, 5 insertions(+), 17 deletions(-) delete mode 100644 apps/www/src/routes/+page.ts diff --git a/apps/www/src/routes/+page.svelte b/apps/www/src/routes/+page.svelte index 12fee3d..d3cb2d7 100644 --- a/apps/www/src/routes/+page.svelte +++ b/apps/www/src/routes/+page.svelte @@ -1,28 +1,22 @@ - -
- {@html data.banner} +
- {@html data.banner} +
- {@html data.banner} +
- {@html data.banner} +
- {@html data.banner} +
diff --git a/apps/www/src/routes/+page.ts b/apps/www/src/routes/+page.ts deleted file mode 100644 index 472c77b..0000000 --- a/apps/www/src/routes/+page.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { PageLoad } from './$types'; - -export const load = (async ({ fetch }): Promise<{ banner: string }> => { - const banner = await (await fetch('/api.svg')).text(); - return { banner }; -}) satisfies PageLoad; From 3ebc02115f2506904393861770594426a49687ab Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 10:42:29 -0300 Subject: [PATCH 31/47] =?UTF-8?q?refactor(banners):=20=E2=99=BB=EF=B8=8F?= =?UTF-8?q?=20code=20readability=20improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/html.js | 5 ++--- packages/banners/src/icons.js | 40 +++++++++++++++++++-------------- packages/banners/src/index.d.ts | 2 ++ packages/banners/src/index.js | 27 +++++++++++----------- 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index 2bbbfe3..aa653ff 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -17,14 +17,13 @@ * * @return {string} */ -export function generateBannerHtml({ - layout, +export default function html({ dimensions, + layout, colors, fonts, rtl, }) { - /** @type {boolean} */ const horizontal = layout === 'horizontal'; return ` diff --git a/packages/banners/src/icons.js b/packages/banners/src/icons.js index 68fc0b9..9ff2234 100644 --- a/packages/banners/src/icons.js +++ b/packages/banners/src/icons.js @@ -5,20 +5,36 @@ * @return {Promise} */ export async function getIcon(icon, fetcher = fetch) { - if ((!isIconName(icon) && !isValidUrl(icon))) { + if (!isIconName(icon) && !isValidUrl(icon)) { return icon; } else if (isValidUrl(icon)) { const svg = (await fetcher(icon)).text(); - - return setIconDimensions(await svg); + return svg; } const [collection, iconName] = icon.split(':'); - const svg = (await fetcher(`https://api.iconify.design/${collection}/${iconName}.svg`)).text(); - return setIconDimensions(await svg); + return svg; +} + +export function setIconDimensions(svg, { width, height }) { + width = typeof width === 'number' + ? `width="${width}px"` + : !width + ? '' + : `width="${width}"`; + + height = typeof height === 'number' + ? `height="${height}px"` + : !height + ? '' + : `height="${height}"`; + + return svg + .replace(/width="([^"]*)"/, width) + .replace(/height="([^"]*)"/, height); } /** @@ -27,9 +43,9 @@ export async function getIcon(icon, fetcher = fetch) { * @param {string} iconName * @return {boolean} */ -function isIconName(iconName) { +function isIconName(string) { try { - const [collection, icon] = iconName.split(':'); + const [collection, icon] = string.split(':'); return Boolean(collection) && Boolean(icon); } catch (_) { @@ -50,13 +66,3 @@ function isValidUrl(string) { return false; } } - -/** - * @param {string} svg - * @return {string} - */ -function setIconDimensions(svg) { - return svg - .replace(/width="([^"]*)"/, 'width="3.5em"') - .replace(/height="([^"]*)"/, ''); -} diff --git a/packages/banners/src/index.d.ts b/packages/banners/src/index.d.ts index ede10f2..01e68c9 100644 --- a/packages/banners/src/index.d.ts +++ b/packages/banners/src/index.d.ts @@ -3,3 +3,5 @@ * @returns {Promise} */ export default function banner({ title, subtitle, icon, layout, config, }: import('./types').BannerOptions): Promise; + +export type { BannerOptions, Banner } from './types' diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 83bcc80..8c0367e 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -1,8 +1,8 @@ import { html as htmlToVNodes } from 'satori-html'; import satori from 'satori'; -import { generateBannerHtml } from './html'; +import bannerHtml from './html'; import { getMonaSansFonts } from './fonts'; -import { getIcon } from './icons'; +import { getIcon, setIconDimensions } from './icons'; /** * @param {import('./types').BannerOptions} options @@ -10,19 +10,20 @@ import { getIcon } from './icons'; */ export default async function banner({ title, - subtitle = '', + fonts, icon = '', + rtl = false, + subtitle = '', layout = 'horizontal', + libConfig: config = {}, colors = { background: '#ffffff', foreground: '#000000', }, - libConfig: config = {}, - fonts, - rtl = false, }) { - config.iconHandler ||= icon => getIcon(icon, config?.fetcher); fonts ||= await getMonaSansFonts(config?.reader); + config.iconHandler ||= icon => getIcon(icon, config?.fetcher); + title = truncateText(title, layout === 'horizontal' ? 45 : 90); subtitle = truncateText(subtitle, layout === 'horizontal' ? 100 : 200); @@ -31,9 +32,9 @@ export default async function banner({ height: layout === 'horizontal' ? 180 : 1300, }; - const htmlTemplate = generateBannerHtml({ layout, dimensions, fonts, colors, rtl }); + const htmlTemplate = bannerHtml({ layout, dimensions, fonts, colors, rtl }); - const iconSvg = await config.iconHandler(icon); + const iconSvg = setIconDimensions(await config.iconHandler(icon), { width: '3.5em' }); const html = htmlTemplate .replace('%%MARKNOW-PLACEHOLDER-TITLE%%', title) @@ -51,11 +52,11 @@ export default async function banner({ }); return { - html, - vNodes, - svg, - icon: iconSvg, toString() { return svg; }, + icon: iconSvg, + vNodes, + html, + svg, }; } From 00b4440751bd4c2e546dc48ec8d590cc7276a337 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 10:45:09 -0300 Subject: [PATCH 32/47] =?UTF-8?q?docs(banners):=20=F0=9F=93=9A=EF=B8=8F=20?= =?UTF-8?q?add=20JSDocs=20documentation=20and=20infos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.cjs | 4 + packages/banners/src/fonts.js | 7 +- packages/banners/src/html.js | 11 +- packages/banners/src/icons.js | 51 ++++++-- packages/banners/src/index.d.ts | 53 +++++++- packages/banners/src/index.js | 53 +++++++- packages/banners/src/types.d.ts | 225 +++++++++++++++++++++++++++----- 7 files changed, 349 insertions(+), 55 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 0682156..54ea248 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -227,6 +227,10 @@ module.exports = { 'tsconfig', 'workspace', 'woff', + 'marknow', + 'lored', + 'guz013', + 'xml', ], minLength: 4, }], diff --git a/packages/banners/src/fonts.js b/packages/banners/src/fonts.js index a2ba759..86c25ff 100644 --- a/packages/banners/src/fonts.js +++ b/packages/banners/src/fonts.js @@ -2,9 +2,14 @@ import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; /** - * @param {import('./types').Reader | undefined} reader + * @param {import('./types').Reader | undefined} [reader=import('node:fs').readFile] + * The function to be used as reader of the local files. + * * @typedef {import('satori').SatoriOptions['fonts'][0]} Font * @returns {Promise<{subtitle: Font, title: Font}>} + * + * @module \@marknow/banners + * @access protected */ export async function getMonaSansFonts(reader) { reader ||= (await import('node:fs/promises')).readFile; diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index aa653ff..8118b2a 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -1,11 +1,10 @@ /* eslint-disable complexity */ /* eslint-disable @typescript-eslint/indent */ /** - * Returns the html string of the banner to be used by satori. - * Use the params to customize and complete it. + * Constructor of the HTML banner converted to VNodes to be used in satori. + * Use the properties to customize and complete it. * * @typedef {import('satori').SatoriOptions['fonts'][0]} Font - * * @typedef {{ * dimensions: { width: number, height: number }, * fonts: { title: Font, subtitle: Font }, @@ -14,8 +13,12 @@ * rtl: boolean, * }} Props * @param {Props} properties + * Properties to be applied on the html. * - * @return {string} + * @returns {string} + * + * @module \@marknow/banners + * @access protected */ export default function html({ dimensions, diff --git a/packages/banners/src/icons.js b/packages/banners/src/icons.js index 9ff2234..1dc3be3 100644 --- a/packages/banners/src/icons.js +++ b/packages/banners/src/icons.js @@ -1,8 +1,20 @@ /** - * @param {string} icon - * @param {import('./types').Fetcher | undefined} fetcher +/** + * Utility function used to get a SVG icon from Iconify OR from an url passed as the icon. * - * @return {Promise} + * If the `icon` parameter is not a valid icon name or url, + * it returns the `icon` itself. + * + * @param {string} icon + * The icon's name or url endpoint. + * + * @param {import('./types').Fetcher | undefined} [fetcher=globalThis.fetch] + * Fetch function to be used. + * + * @returns {Promise} + * + * @module \@marknow/banners + * @access protected */ export async function getIcon(icon, fetcher = fetch) { if (!isIconName(icon) && !isValidUrl(icon)) { @@ -19,6 +31,20 @@ export async function getIcon(icon, fetcher = fetch) { return svg; } +/** + * Utility function used to set the icons SVG width and height to the specified dimensions. + * + * @param {string} svg + * The svg string. + * + * @param {{width?: string | number, height?: string | number}} dimensions + * The dimensions values, if type number it is converted to pixels. + * + * @returns {string} + * + * @module \@marknow/banners + * @access protected + */ export function setIconDimensions(svg, { width, height }) { width = typeof width === 'number' ? `width="${width}px"` @@ -38,10 +64,14 @@ export function setIconDimensions(svg, { width, height }) { } /** - * Checks if a given string is a valid [Iconify](https://iconify.design/)/[Icônes](https://icones.js.org/)-like icon name. + * Checks if a given string is a valid + * [Iconify](https://iconify.design/)/[Icônes](https://icones.js.org/)-like icon name. * - * @param {string} iconName - * @return {boolean} + * @param {string} string The string to be checked. + * @returns {boolean} + * + * @module \@marknow/banners + * @access package */ function isIconName(string) { try { @@ -54,8 +84,13 @@ function isIconName(string) { } /** - * @param {string} string - * @return {boolean} + * Checks if string is a valid URL. + * + * @param {string} string The string to be checked. + * @returns {boolean} + * + * @module \@marknow/banners + * @access package */ function isValidUrl(string) { try { diff --git a/packages/banners/src/index.d.ts b/packages/banners/src/index.d.ts index 01e68c9..060446a 100644 --- a/packages/banners/src/index.d.ts +++ b/packages/banners/src/index.d.ts @@ -1,7 +1,50 @@ -/** - * @param {import('./types').BannerOptions} options - * @returns {Promise} - */ -export default function banner({ title, subtitle, icon, layout, config, }: import('./types').BannerOptions): Promise; +/** + +/** + * The banner constructor function. Use the options to customize the + * appearance of the resulting banner. + * + * @param {import('./types').BannerOptions} options + * Options object for customizing the banner appearance. + * + * @returns {Promise} + * + * @example + * import newBanner from '@marknow/banners'; + * + * export async function GET({ fetch }) { + * const banner = await newBanner({ + * title: 'Hello world', + * subtitle: 'This is a example api endpoint.' + * icon: 'material-symbols:api' + * fonts: { + * title: { + * data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 600, + * }, + * subtitle: { + * data: await (await fetch('/Mona-Sans-Regular.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 400, + * }, + * }, + * libConfig: { + * fetcher: fetch, + * }, + * }); + * + * return new Response(banner.toString(), { + * status: 200, + * headers: { + * 'Content-type': 'image/svg+xml', + * }, + * }); + * } + * + * @module \@marknow/banners + * @access public + */ +export default function banner({ title, subtitle, icon, layout, config, }: import('./types').BannerOptions): Promise; export type { BannerOptions, Banner } from './types' diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 8c0367e..e100ede 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -5,8 +5,49 @@ import { getMonaSansFonts } from './fonts'; import { getIcon, setIconDimensions } from './icons'; /** + * The banner constructor function. Use the options to customize the + * appearance of the resulting banner. + * * @param {import('./types').BannerOptions} options + * Options object for customizing the banner appearance. + * * @returns {Promise} + * + * @example + * import newBanner from '@marknow/banners'; + * + * export async function GET({ fetch }) { + * const banner = await newBanner({ + * title: 'Hello world', + * subtitle: 'This is a example api endpoint.' + * icon: 'material-symbols:api' + * fonts: { + * title: { + * data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 600, + * }, + * subtitle: { + * data: await (await fetch('/Mona-Sans-Regular.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 400, + * }, + * }, + * libConfig: { + * fetcher: fetch, + * }, + * }); + * + * return new Response(banner.toString(), { + * status: 200, + * headers: { + * 'Content-type': 'image/svg+xml', + * }, + * }); + * } + * + * @module \@marknow/banners + * @access public */ export default async function banner({ title, @@ -60,7 +101,17 @@ export default async function banner({ }; } -/** @type {(string: string, maxChar: number) => string} */ +/** + * Small utility function used to truncate long texts on the banner + * + * @param {string} string - Text string to be truncated. + * @param {number} maxChar - Maximum number of characters. + * + * @returns {string} + * + * @module \@marknow/banners + * @access package + */ function truncateText(string, maxChar) { return string.length > maxChar ? `${string.slice(0, maxChar)}...` : string; } diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index e34a475..d20a321 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -3,6 +3,170 @@ import type { OpenMode, PathLike } from "node:fs"; import type { FileHandle } from "node:fs/promises"; import type { SatoriOptions } from "satori/wasm"; +/** + * Options object for customizing the banner appearance. + * + * @module \@marknow/banners + * @access public + */ +export interface BannerOptions { + /** + * **(REQUIRED)** Title to be displayed in the banner. + */ + title: string, + + /** + * (Optional) Set the text direction right-to-left. + */ + rtl?: boolean = false, + + /** + * (Optional) {@link https://iconify.design/ Iconify}/{@link https://icones.js.org/ Icônes}-like + * icon name OR url for svg file of the icon to be used in the banner. + */ + icon?: string = '', + + /** + * (Optional) Subtitle/legend to be displayed in the banner + * bellow the title. + */ + subtitle?: string = '', + + /** + * (Optional) Customize the colors of the banner. + * + * Customize the background color and foreground (title, subtitle + * and icon) colors. + */ + colors?: Colors = { background: '#ffffff', foreground: '#000000' }, + + /** + * (Optional) Customize the layout of the banner and position of elements. + */ + layout?: 'horizontal' | 'vertical' = 'horizontal', + + /** + * (Optional) Customize the fonts used on the banner. + * + * Changes the default font file used for the title and subtitle. + * Defaults is {@link https://github.com/github/mona-sans Github's Mona Sans} + * semi-bold and regular respectively. + * + * @see {@link https://github.com/vercel/satori#fonts} + */ + fonts?: { + title: Font, + subtitle: Font, + } + + /** + * (Optional) Customize the behavior of the package. + * + * Provide functions or polyfills to be used by the package + * for better compatibility or customization of the banner + * creation. + */ + libConfig?: { + /** + * (Optional) Fetch function used by the package to retrieve + * icons from {@link https://iconify.design/ Iconify} and custom + * icons provided as url. + * + * Default function used is the + * {@link https://developer.mozilla.org/en-US/docs/Web/API/fetch globalThis.fetch} + * function. Compatible with modern browsers, Node.js (version 18 and greater), + * Deno and Bun. + * + * @see {@link BannerOptions.icon} + * + * @param {RequestInfo} input - The request url/info. + * @param {RequestInit} - Request options. + * @returns {Promise} + */ + fetcher?: Fetcher = globalThis.fetch, + + /** + * (Optional) The function used to read the font files and return a Buffer or + * ArrayBuffer from them. + * + * Default function used is the {@link https://nodejs.org/api/fs.html#fsreadfilepath-options-callback fs.readFile} + * from the Node file system promises api ({@link https://nodejs.org/api/fs.html#file-system node:fs/promises}). + * Compatible with Node.js (version 10 and greater), Deno and Bun. + * + * @param {PathLike | FileHandle} path - The path to the font files. + * @returns {Promise} + */ + reader?: Reader = import ('node:fs/promises').readFile, + + /** + * (Optional) The function used to get the icon svg file from {@link https://iconify.design/ Iconify} + * or URL endpoint passed. + * + * @see {@link BannerOptions.icon} + * + * @param {string} icon - Icon name or URL. + * @returns {string | Promise} + */ + iconHandler?: (icon: string) => string | Promise + } +} + +/** + * The resulting banner object. + * + * Has a `toString()` function to be used in string literals + * that returns the svg string of the banner. + * + * @module \@marknow/banners + * @access public + */ +export interface Banner { + /** + * The resulting svg of the banner. + * @readonly + */ + svg: string, + /** + * The raw html used to create the banner. + * @readonly + */ + html: string, + /** + * The used icon's svg. + * @readonly + */ + icon: string, + /** + * React-element-like objects / VDOM used to create the banner. + * @readonly + */ + vNodes: VNode, + /** + * Returns the {@link Banner.svg svg string} of the banner. + * Useful when using the banner object directly on a string. + * + * @example + * import newBanner from '@marknow/banners'; + * + * const banner = await newBanner({ ... }); + * + * // Prints the resulting svg instead of the banner object itself. + * console.log(`Banner svg:\n${banner}`) + * + * @readonly + */ + toString(): string, +}; + +/** + * Font object for the banner passed to the `satori` package. + * + * @see {@link BannerOptions.fonts} + * @see {@link https://github.com/vercel/satori#fonts} + * + * @module \@marknow/banners > satori + * @access protected + */ export type Font = SatoriOptions['fonts'][0]; export type Colors = { @@ -10,54 +174,43 @@ export type Colors = { background: string; } +/** + * "Global Fetch"-like function used by the package to retrieve + * icons from [Iconify](https://iconify.design/) and custom + * icons provided as url. + * + * @param {RequestInfo} input - The request url/info. + * @param {RequestInit} - Request options. + * @returns {Promise} + * + * @module \@marknow/banners + * @access protected + */ export type Fetcher = ( input: RequestInfo | URL, init?: RequestInit ) => Promise; +/** + * "Node.js' `fs.readFile`"-like function used to read the font files + * and return a Buffer or ArrayBuffer from them. + * + * @param {RequestInfo} input - The request url/info. + * @param {RequestInit} - Request options. + * @returns {Promise} + * + * @module \@marknow/banners + * @access protected + */ export type Reader = ( path: PathLike | FileHandle, ) => Promise /** - * Options object for creating a banner. - * - * @package `@marknow/banners` - */ -export interface BannerOptions { - icon?: string, - title: string, - subtitle?: string, - layout?: 'horizontal' | 'vertical', - fonts?: { - title: Font, - subtitle: Font, - } - colors?: Colors, - rtl?: boolean, - libConfig?: { - fetcher?: Fetcher = fetch, - reader?: Reader, - iconHandler?: (icon: string) => string | Promise - } -} - -/** - * - */ -export interface Banner { - toString(): string, - html: string, - svg: string, - icon: string, - vNodes: VNode, -}; - -/** - * **Copied from the satori-html package,** * React-element-like objects / VDOM object used in satori. * - * @package `satori-html` + * @module \@marknow/banners > satori-html + * @access protected */ export interface VNode { type: string; From dd3a8595060c74742ab5f23ef869adfb13b97420 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 10:47:34 -0300 Subject: [PATCH 33/47] =?UTF-8?q?docs(banners):=20=F0=9F=93=9A=EF=B8=8F=20?= =?UTF-8?q?files=20documentations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/fonts.js | 13 +++++++++++++ packages/banners/src/html.js | 8 ++++++++ packages/banners/src/icons.js | 12 ++++++++++++ packages/banners/src/index.d.ts | 16 ++++++++++++++++ packages/banners/src/index.js | 15 +++++++++++++++ packages/banners/src/types.d.ts | 14 +++++++++++++- 6 files changed, 77 insertions(+), 1 deletion(-) diff --git a/packages/banners/src/fonts.js b/packages/banners/src/fonts.js index 86c25ff..12e14f6 100644 --- a/packages/banners/src/fonts.js +++ b/packages/banners/src/fonts.js @@ -1,3 +1,16 @@ +/** + * @file + * Utility functions used to retrieve and manipulate fonts' objects. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js index 8118b2a..ff24e5f 100644 --- a/packages/banners/src/html.js +++ b/packages/banners/src/html.js @@ -1,3 +1,11 @@ +/** + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + */ + /* eslint-disable complexity */ /* eslint-disable @typescript-eslint/indent */ /** diff --git a/packages/banners/src/icons.js b/packages/banners/src/icons.js index 1dc3be3..9c23d67 100644 --- a/packages/banners/src/icons.js +++ b/packages/banners/src/icons.js @@ -1,4 +1,16 @@ /** + * @file + * Utility functions used to retrieve and manipulate icons SVG strings. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + /** * Utility function used to get a SVG icon from Iconify OR from an url passed as the icon. * diff --git a/packages/banners/src/index.d.ts b/packages/banners/src/index.d.ts index 060446a..de1053e 100644 --- a/packages/banners/src/index.d.ts +++ b/packages/banners/src/index.d.ts @@ -1,4 +1,20 @@ /** + * @file + * This file contains all public functions and types declaration of the + * `@marknow/banners` package. Anything declared here can be accessed directly + * by the library consumers and has an @access public access level. + * + * The JSDocs of the functions are duplicated from the source files, so that + * it is more compatible with Typescript syntax and code documentation. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ /** * The banner constructor function. Use the options to customize the diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index e100ede..0748a74 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -1,3 +1,18 @@ +/** + * @file + * Main entry point of the `@marknow/banners` package. This file contains + * all ESModules exports of the public APIs and functions of the library. + * Anything exported here should have an @access public access level and + * declared on {@link ./index.d.ts types declaration} file. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ import { html as htmlToVNodes } from 'satori-html'; import satori from 'satori'; import bannerHtml from './html'; diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts index d20a321..c6e5cda 100644 --- a/packages/banners/src/types.d.ts +++ b/packages/banners/src/types.d.ts @@ -1,4 +1,16 @@ -import type { Abortable } from "node:events"; +/** + * @file + * Definitions of more complex or shared Typescript types used in the package. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + import type { OpenMode, PathLike } from "node:fs"; import type { FileHandle } from "node:fs/promises"; import type { SatoriOptions } from "satori/wasm"; From e74d3b6bc292a6763e7211a10269f34645ec0763 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 14:50:47 -0300 Subject: [PATCH 34/47] =?UTF-8?q?test(banners):=20=F0=9F=9A=A8=20add=20pac?= =?UTF-8?q?kage=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.cjs | 2 + .vscode/project.code-workspace | 4 + .vscode/settings.json | 3 +- package.json | 5 +- packages/banners/.eslintrc.cjs | 2 + packages/banners/package.json | 5 +- .../tests/__snapshots__/withComplete.svg | 1 + .../banners/tests/__snapshots__/withIcon.svg | 1 + .../tests/__snapshots__/withSubtitle.svg | 1 + .../banners/tests/__snapshots__/withTitle.svg | 1 + packages/banners/tests/results.edge.test.js | 34 ++ packages/banners/tests/results.node.test.js | 34 ++ packages/banners/vitest.config.js | 11 + pnpm-lock.yaml | 405 ++++++++++++++++-- turbo.json | 29 +- vitest.workspace.json | 4 + 16 files changed, 496 insertions(+), 46 deletions(-) create mode 100644 packages/banners/tests/__snapshots__/withComplete.svg create mode 100644 packages/banners/tests/__snapshots__/withIcon.svg create mode 100644 packages/banners/tests/__snapshots__/withSubtitle.svg create mode 100644 packages/banners/tests/__snapshots__/withTitle.svg create mode 100644 packages/banners/tests/results.edge.test.js create mode 100644 packages/banners/tests/results.node.test.js create mode 100644 packages/banners/vitest.config.js create mode 100644 vitest.workspace.json diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 54ea248..5c95226 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -231,6 +231,8 @@ module.exports = { 'lored', 'guz013', 'xml', + 'jsconfig', + 'vitest', ], minLength: 4, }], diff --git a/.vscode/project.code-workspace b/.vscode/project.code-workspace index 51af971..e3765c6 100644 --- a/.vscode/project.code-workspace +++ b/.vscode/project.code-workspace @@ -4,6 +4,10 @@ "path": "../apps/www", "name": "apps/www" }, + { + "path": "../packages/banners", + "name": "@marknow/banners" + }, { "path": "../", "name": "ROOT" diff --git a/.vscode/settings.json b/.vscode/settings.json index f54b539..285b8db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,6 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, - "unocss.root": "apps/www" + "unocss.root": "apps/www", + "vitest.enable": true } diff --git a/package.json b/package.json index 24f5674..852c960 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "keywords": [], "main": "index.js", "scripts": { + "test": "turbo run test", + "test:watch": "vitest watch", "prepare": "husky install", "lint": "eslint . && turbo run lint", "lint:fix": "eslint . --fix && turbo run lint -- --fix", @@ -24,6 +26,7 @@ "eslint-plugin-svelte": "^2.30.0", "husky": "^8.0.3", "turbo": "^1.10.3", - "vercel": "^30.2.2" + "vercel": "^30.2.2", + "vitest": "^0.32.2" } } diff --git a/packages/banners/.eslintrc.cjs b/packages/banners/.eslintrc.cjs index b053888..5ca8240 100644 --- a/packages/banners/.eslintrc.cjs +++ b/packages/banners/.eslintrc.cjs @@ -1,3 +1,5 @@ +process.env.ESLINT_TSCONFIG = 'jsconfig.json'; + module.exports = { root: false, }; diff --git a/packages/banners/package.json b/packages/banners/package.json index 3263fe7..d542722 100644 --- a/packages/banners/package.json +++ b/packages/banners/package.json @@ -17,9 +17,12 @@ "module": "./src/index.js", "types": "./src/index.d.ts", "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", "build:cjs": "microbundle --compress false --pkg-main false --strict --tsconfig ./jsconfig.json --generateTypes false -f cjs --target node", "build": "pnpm run build:cjs", - "dev": "pnpm run build -w" + "dev": "pnpm run build -w", + "lint": "eslint ." }, "dependencies": { "satori": "^0.10.1", diff --git a/packages/banners/tests/__snapshots__/withComplete.svg b/packages/banners/tests/__snapshots__/withComplete.svg new file mode 100644 index 0000000..621052c --- /dev/null +++ b/packages/banners/tests/__snapshots__/withComplete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withIcon.svg b/packages/banners/tests/__snapshots__/withIcon.svg new file mode 100644 index 0000000..ffaad23 --- /dev/null +++ b/packages/banners/tests/__snapshots__/withIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withSubtitle.svg b/packages/banners/tests/__snapshots__/withSubtitle.svg new file mode 100644 index 0000000..888aff2 --- /dev/null +++ b/packages/banners/tests/__snapshots__/withSubtitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withTitle.svg b/packages/banners/tests/__snapshots__/withTitle.svg new file mode 100644 index 0000000..e945ba8 --- /dev/null +++ b/packages/banners/tests/__snapshots__/withTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/results.edge.test.js b/packages/banners/tests/results.edge.test.js new file mode 100644 index 0000000..9bacd63 --- /dev/null +++ b/packages/banners/tests/results.edge.test.js @@ -0,0 +1,34 @@ +import { expect, it } from 'vitest'; +import banner from '../src/index'; + +it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withTitle.svg'); +}); + +it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withSubtitle.svg'); +}); + +it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withIcon.svg'); +}); + +it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withComplete.svg'); +}); diff --git a/packages/banners/tests/results.node.test.js b/packages/banners/tests/results.node.test.js new file mode 100644 index 0000000..9bacd63 --- /dev/null +++ b/packages/banners/tests/results.node.test.js @@ -0,0 +1,34 @@ +import { expect, it } from 'vitest'; +import banner from '../src/index'; + +it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withTitle.svg'); +}); + +it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withSubtitle.svg'); +}); + +it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withIcon.svg'); +}); + +it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withComplete.svg'); +}); diff --git a/packages/banners/vitest.config.js b/packages/banners/vitest.config.js new file mode 100644 index 0000000..c7b2366 --- /dev/null +++ b/packages/banners/vitest.config.js @@ -0,0 +1,11 @@ +import { defineProject } from 'vitest/config'; + +export default defineProject({ + test: { + environmentMatchGlobs: [ + ['**\/*{,.node}.test.{js,ts}', 'node'], + ['**\/*.edge.test.{js,ts}', 'edge-runtime'], + ], + include: ['./tests/**/*.test.js'], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b512c6..e80a530 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,9 @@ importers: vercel: specifier: ^30.2.2 version: 30.2.2(@types/node@14.18.33) + vitest: + specifier: ^0.32.2 + version: 0.32.2 apps/www: devDependencies: @@ -91,10 +94,10 @@ importers: version: 3.59.1 svelte-check: specifier: ^3.4.3 - version: 3.4.3(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1) + version: 3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1) svelte-preprocess: specifier: ^5.0.4 - version: 5.0.4(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) + version: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) tslib: specifier: ^2.5.3 version: 2.5.3 @@ -118,7 +121,7 @@ importers: version: 0.2.8 vite: specifier: ^4.3.9 - version: 4.3.9(sass@1.63.6) + version: 4.3.9(@types/node@14.18.33)(sass@1.63.6) packages/banners: dependencies: @@ -2318,7 +2321,7 @@ packages: dependencies: svelte: 3.59.1 svgo: 3.0.2 - vite: 4.3.9(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) dev: true /@radix-ui/colors@0.1.8: @@ -2504,7 +2507,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - supports-color dev: true @@ -2520,7 +2523,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - supports-color dev: true @@ -2539,7 +2542,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -2602,6 +2605,16 @@ packages: '@types/responselike': 1.0.0 dev: true + /@types/chai-subset@1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + dev: true + /@types/cookie@0.5.1: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true @@ -3148,7 +3161,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.9(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - rollup dev: true @@ -3191,7 +3204,7 @@ packages: lodash: 4.17.21 mlly: 1.4.0 outdent: 0.8.0 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33) vite-node: 0.28.5(@types/node@14.18.33) transitivePeerDependencies: - '@types/node' @@ -3259,7 +3272,7 @@ packages: dependencies: '@mapbox/node-pre-gyp': 1.0.10 '@rollup/pluginutils': 4.2.1 - acorn: 8.8.2 + acorn: 8.9.0 async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -3280,7 +3293,7 @@ packages: dependencies: '@mapbox/node-pre-gyp': 1.0.10 '@rollup/pluginutils': 4.2.1 - acorn: 8.8.2 + acorn: 8.9.0 async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -3475,6 +3488,45 @@ packages: ts-morph: 12.0.0 dev: true + /@vitest/expect@0.32.2: + resolution: {integrity: sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q==} + dependencies: + '@vitest/spy': 0.32.2 + '@vitest/utils': 0.32.2 + chai: 4.3.7 + dev: true + + /@vitest/runner@0.32.2: + resolution: {integrity: sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw==} + dependencies: + '@vitest/utils': 0.32.2 + concordance: 5.0.4 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.32.2: + resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} + dependencies: + magic-string: 0.30.0 + pathe: 1.1.1 + pretty-format: 27.5.1 + dev: true + + /@vitest/spy@0.32.2: + resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.32.2: + resolution: {integrity: sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.6 + pretty-format: 27.5.1 + dev: true + /@web3-storage/multipart-parser@1.0.0: resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} dev: true @@ -3504,12 +3556,6 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} @@ -3591,6 +3637,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -3674,6 +3725,10 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -3837,6 +3892,10 @@ packages: readable-stream: 3.6.2 dev: true + /blueimp-md5@2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + dev: true + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4025,6 +4084,19 @@ packages: resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} dev: true + /chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -4085,6 +4157,10 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -4241,6 +4317,20 @@ packages: source-map: 0.6.1 dev: true + /concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.3.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + md5-hex: 3.0.1 + semver: 7.5.1 + well-known-symbols: 2.0.0 + dev: true + /consola@3.1.0: resolution: {integrity: sha512-rrrJE6rP0qzl/Srg+C9x/AE5Kxfux7reVm1Wh0wCjuXvih6DqZgqDZe8auTD28fzJ9TF0mHlSDrPpWlujQRo1Q==} dev: true @@ -4490,6 +4580,13 @@ packages: engines: {node: '>= 6'} dev: true + /date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + dependencies: + time-zone: 1.0.0 + dev: true + /deasync@0.1.28: resolution: {integrity: sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg==} engines: {node: '>=0.11.0'} @@ -4547,6 +4644,13 @@ packages: mimic-response: 3.1.0 dev: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -4645,6 +4749,11 @@ packages: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: true + /diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -5818,6 +5927,10 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} @@ -6105,6 +6218,10 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: @@ -6896,6 +7013,11 @@ packages: hasBin: true dev: true + /js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -6968,7 +7090,7 @@ packages: resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 eslint-visitor-keys: 3.4.1 espree: 9.5.2 semver: 7.5.1 @@ -7111,6 +7233,12 @@ packages: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: true + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: true + /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} @@ -7180,6 +7308,13 @@ packages: pretty-bytes: 3.0.1 dev: true + /md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + dependencies: + blueimp-md5: 2.19.0 + dev: true + /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -7841,15 +7976,6 @@ packages: hasBin: true dev: true - /mlly@1.3.0: - resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} - dependencies: - acorn: 8.8.2 - pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.1.2 - dev: true - /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: @@ -8152,6 +8278,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -8323,6 +8456,10 @@ packages: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} dependencies: @@ -8368,7 +8505,7 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 dev: true @@ -8823,6 +8960,15 @@ packages: engines: {node: '>=6'} dev: true + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + /pretty-ms@7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} @@ -8968,6 +9114,10 @@ packages: unpipe: 1.0.0 dev: true + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -9518,6 +9668,10 @@ packages: object-inspect: 1.12.3 dev: true + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -9651,11 +9805,19 @@ packages: deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' dev: true + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} dev: true + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + dev: true + /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true @@ -9781,7 +9943,7 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 dev: true /style-inject@0.3.0: @@ -9829,7 +9991,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1): + /svelte-check@3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} hasBin: true peerDependencies: @@ -9842,7 +10004,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) + svelte-preprocess: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - '@babel/core' @@ -9879,7 +10041,7 @@ packages: svelte: 3.59.1 dev: true - /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3): + /svelte-preprocess@5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -9917,6 +10079,7 @@ packages: typescript: optional: true dependencies: + '@babel/core': 7.22.5 '@types/pug': 2.0.6 detect-indent: 6.1.0 magic-string: 0.27.0 @@ -9998,7 +10161,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 + acorn: 8.9.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -10025,6 +10188,11 @@ packages: convert-hrtime: 3.0.0 dev: true + /time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + dev: true + /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -10035,6 +10203,20 @@ packages: /tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + dev: true + + /tinypool@0.5.0: + resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -10103,7 +10285,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 14.18.33 - acorn: 8.8.2 + acorn: 8.9.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -10229,6 +10411,11 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -10358,7 +10545,7 @@ packages: fast-glob: 3.2.12 local-pkg: 0.4.3 magic-string: 0.30.0 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 pkg-types: 1.0.3 scule: 1.0.0 @@ -10552,7 +10739,7 @@ packages: /unplugin@1.3.1: resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -10680,7 +10867,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33) transitivePeerDependencies: - '@types/node' - less @@ -10691,6 +10878,60 @@ packages: - terser dev: true + /vite-node@0.32.2(@types/node@20.3.1): + resolution: {integrity: sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.3.9(@types/node@20.3.1) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@4.3.9(@types/node@14.18.33): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 14.18.33 + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vite@4.3.9(@types/node@14.18.33)(sass@1.63.6): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10725,7 +10966,7 @@ packages: fsevents: 2.3.2 dev: true - /vite@4.3.9(sass@1.63.6): + /vite@4.3.9(@types/node@20.3.1): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -10750,10 +10991,10 @@ packages: terser: optional: true dependencies: + '@types/node': 20.3.1 esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 - sass: 1.63.6 optionalDependencies: fsevents: 2.3.2 dev: true @@ -10766,7 +11007,72 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(sass@1.63.6) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) + dev: true + + /vitest@0.32.2: + resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 20.3.1 + '@vitest/expect': 0.32.2 + '@vitest/runner': 0.32.2 + '@vitest/snapshot': 0.32.2 + '@vitest/spy': 0.32.2 + '@vitest/utils': 0.32.2 + acorn: 8.9.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + concordance: 5.0.4 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.0 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 + tinypool: 0.5.0 + vite: 4.3.9(@types/node@20.3.1) + vite-node: 0.32.2(@types/node@20.3.1) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser dev: true /vm2@3.9.19: @@ -10819,6 +11125,11 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true + /well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + dev: true + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -10856,6 +11167,15 @@ packages: isexe: 2.0.0 dev: true + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -11010,6 +11330,11 @@ packages: engines: {node: '>=10'} dev: true + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} diff --git a/turbo.json b/turbo.json index 2074674..7cfcf07 100644 --- a/turbo.json +++ b/turbo.json @@ -2,16 +2,39 @@ "$schema": "https://turbo.build/schema.json", "pipeline": { "build": { - "outputs": ["dist/**"] + "dependsOn": [ + "^test", + "test" + ], + "outputs": [ + "dist/**" + ] }, "lint": {}, + "test": { + "dependsOn": [ + "^lint", + "lint" + ] + }, + "test:watch": { + "dependsOn": [ + "^lint", + "lint" + ], + "persistent": true + }, "dev": { - "dependsOn": ["^build"], + "dependsOn": [ + "^build" + ], "cache": false, "persistent": true }, "preview": { - "dependsOn": ["^build"], + "dependsOn": [ + "^build" + ], "persistent": true } } diff --git a/vitest.workspace.json b/vitest.workspace.json new file mode 100644 index 0000000..089b886 --- /dev/null +++ b/vitest.workspace.json @@ -0,0 +1,4 @@ +[ + "packages/*/vitest.config.{js,ts}", + "apps/*/vitest.config.{js,ts}" +] From afb5d3742e397e922be26fb04c8899787b87d54a Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 15:26:43 -0300 Subject: [PATCH 35/47] =?UTF-8?q?test(banners):=20=F0=9F=9A=A8=20remove=20?= =?UTF-8?q?edge=20test=20environments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/tests/results.edge.test.js | 34 --------------------- packages/banners/tests/results.node.test.js | 34 --------------------- packages/banners/vitest.config.js | 1 - 3 files changed, 69 deletions(-) delete mode 100644 packages/banners/tests/results.edge.test.js delete mode 100644 packages/banners/tests/results.node.test.js diff --git a/packages/banners/tests/results.edge.test.js b/packages/banners/tests/results.edge.test.js deleted file mode 100644 index 9bacd63..0000000 --- a/packages/banners/tests/results.edge.test.js +++ /dev/null @@ -1,34 +0,0 @@ -import { expect, it } from 'vitest'; -import banner from '../src/index'; - -it('With Title', async () => { - const result = await banner({ - title: 'Hello World', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withTitle.svg'); -}); - -it('With Subtitle', async () => { - const result = await banner({ - title: 'Hello World', - subtitle: 'This is a test', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withSubtitle.svg'); -}); - -it('With Icon', async () => { - const result = await banner({ - title: 'Hello World', - icon: 'solar:test-tube-bold-duotone', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withIcon.svg'); -}); - -it('With Subtitle and Icon', async () => { - const result = await banner({ - title: 'Hello World', - subtitle: 'This is a test', - icon: 'solar:test-tube-bold-duotone', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withComplete.svg'); -}); diff --git a/packages/banners/tests/results.node.test.js b/packages/banners/tests/results.node.test.js deleted file mode 100644 index 9bacd63..0000000 --- a/packages/banners/tests/results.node.test.js +++ /dev/null @@ -1,34 +0,0 @@ -import { expect, it } from 'vitest'; -import banner from '../src/index'; - -it('With Title', async () => { - const result = await banner({ - title: 'Hello World', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withTitle.svg'); -}); - -it('With Subtitle', async () => { - const result = await banner({ - title: 'Hello World', - subtitle: 'This is a test', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withSubtitle.svg'); -}); - -it('With Icon', async () => { - const result = await banner({ - title: 'Hello World', - icon: 'solar:test-tube-bold-duotone', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withIcon.svg'); -}); - -it('With Subtitle and Icon', async () => { - const result = await banner({ - title: 'Hello World', - subtitle: 'This is a test', - icon: 'solar:test-tube-bold-duotone', - }); - expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withComplete.svg'); -}); diff --git a/packages/banners/vitest.config.js b/packages/banners/vitest.config.js index c7b2366..90a689f 100644 --- a/packages/banners/vitest.config.js +++ b/packages/banners/vitest.config.js @@ -4,7 +4,6 @@ export default defineProject({ test: { environmentMatchGlobs: [ ['**\/*{,.node}.test.{js,ts}', 'node'], - ['**\/*.edge.test.{js,ts}', 'edge-runtime'], ], include: ['./tests/**/*.test.js'], }, From 5b5505612b58f433707fddb3c235a0049fec7af1 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 15:27:59 -0300 Subject: [PATCH 36/47] =?UTF-8?q?test(banners):=20=F0=9F=9A=A8=20tests=20f?= =?UTF-8?q?or=20vertical=20and=20rtl=20layouts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/__snapshots__/rtl-withComplete.svg | 1 + .../tests/__snapshots__/rtl-withIcon.svg | 1 + .../tests/__snapshots__/rtl-withSubtitle.svg | 1 + .../tests/__snapshots__/rtl-withTitle.svg | 1 + .../__snapshots__/vertical-withComplete.svg | 1 + .../tests/__snapshots__/vertical-withIcon.svg | 1 + .../__snapshots__/vertical-withSubtitle.svg | 1 + .../__snapshots__/vertical-withTitle.svg | 1 + packages/banners/tests/results.test.js | 36 +++++++++++++++++ packages/banners/tests/rtl-results.test.js | 40 +++++++++++++++++++ .../banners/tests/vertical-result.test.js | 40 +++++++++++++++++++ 11 files changed, 124 insertions(+) create mode 100644 packages/banners/tests/__snapshots__/rtl-withComplete.svg create mode 100644 packages/banners/tests/__snapshots__/rtl-withIcon.svg create mode 100644 packages/banners/tests/__snapshots__/rtl-withSubtitle.svg create mode 100644 packages/banners/tests/__snapshots__/rtl-withTitle.svg create mode 100644 packages/banners/tests/__snapshots__/vertical-withComplete.svg create mode 100644 packages/banners/tests/__snapshots__/vertical-withIcon.svg create mode 100644 packages/banners/tests/__snapshots__/vertical-withSubtitle.svg create mode 100644 packages/banners/tests/__snapshots__/vertical-withTitle.svg create mode 100644 packages/banners/tests/results.test.js create mode 100644 packages/banners/tests/rtl-results.test.js create mode 100644 packages/banners/tests/vertical-result.test.js diff --git a/packages/banners/tests/__snapshots__/rtl-withComplete.svg b/packages/banners/tests/__snapshots__/rtl-withComplete.svg new file mode 100644 index 0000000..801a0f9 --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withComplete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withIcon.svg b/packages/banners/tests/__snapshots__/rtl-withIcon.svg new file mode 100644 index 0000000..04a6dd2 --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withSubtitle.svg b/packages/banners/tests/__snapshots__/rtl-withSubtitle.svg new file mode 100644 index 0000000..34ec15c --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withSubtitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withTitle.svg b/packages/banners/tests/__snapshots__/rtl-withTitle.svg new file mode 100644 index 0000000..7fdf09b --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withComplete.svg b/packages/banners/tests/__snapshots__/vertical-withComplete.svg new file mode 100644 index 0000000..79f2357 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withComplete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withIcon.svg b/packages/banners/tests/__snapshots__/vertical-withIcon.svg new file mode 100644 index 0000000..ac05751 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg b/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg new file mode 100644 index 0000000..ba5030a --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withTitle.svg b/packages/banners/tests/__snapshots__/vertical-withTitle.svg new file mode 100644 index 0000000..06bf8c5 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/results.test.js b/packages/banners/tests/results.test.js new file mode 100644 index 0000000..2956a99 --- /dev/null +++ b/packages/banners/tests/results.test.js @@ -0,0 +1,36 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Horizontal Layout', async () => { + it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withTitle.svg'); + }); + + it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withSubtitle.svg'); + }); + + it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withIcon.svg'); + }); + + it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withComplete.svg'); + }); +}); diff --git a/packages/banners/tests/rtl-results.test.js b/packages/banners/tests/rtl-results.test.js new file mode 100644 index 0000000..6bb914e --- /dev/null +++ b/packages/banners/tests/rtl-results.test.js @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Horizontal Layout', async () => { + it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withTitle.svg'); + }); + + it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withSubtitle.svg'); + }); + + it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withIcon.svg'); + }); + + it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withComplete.svg'); + }); +}); diff --git a/packages/banners/tests/vertical-result.test.js b/packages/banners/tests/vertical-result.test.js new file mode 100644 index 0000000..bd804ca --- /dev/null +++ b/packages/banners/tests/vertical-result.test.js @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Vertical Layout', async () => { + it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withTitle.svg'); + }); + + it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withSubtitle.svg'); + }); + + it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withIcon.svg'); + }); + + it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withComplete.svg'); + }); +}); From 376c49e8c98a436260e7aa87d02813cd2ffd562e Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:02:51 -0300 Subject: [PATCH 37/47] =?UTF-8?q?fix(banners):=20=F0=9F=90=9B=20iconify's?= =?UTF-8?q?=20icon=20name=20resolution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/icons.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/banners/src/icons.js b/packages/banners/src/icons.js index 9c23d67..8223579 100644 --- a/packages/banners/src/icons.js +++ b/packages/banners/src/icons.js @@ -86,13 +86,7 @@ export function setIconDimensions(svg, { width, height }) { * @access package */ function isIconName(string) { - try { - const [collection, icon] = string.split(':'); - return Boolean(collection) && Boolean(icon); - } - catch (_) { - return false; - } + return /^[a-z0-9-]+:[a-z0-9-]+(\[\])?$/.test(string); } /** From 4ab529fd53e7cff8208726e5e52a274ff990c689 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:30:34 -0300 Subject: [PATCH 38/47] =?UTF-8?q?fix(banners):=20=F0=9F=90=9B=20vertical?= =?UTF-8?q?=20layout=20height?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/src/index.js | 2 +- packages/banners/tests/__snapshots__/vertical-withComplete.svg | 2 +- packages/banners/tests/__snapshots__/vertical-withIcon.svg | 2 +- packages/banners/tests/__snapshots__/vertical-withSubtitle.svg | 2 +- packages/banners/tests/__snapshots__/vertical-withTitle.svg | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 0748a74..da73e14 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -85,7 +85,7 @@ export default async function banner({ const dimensions = { width: 1000, - height: layout === 'horizontal' ? 180 : 1300, + height: layout === 'horizontal' ? 180 : 280, }; const htmlTemplate = bannerHtml({ layout, dimensions, fonts, colors, rtl }); diff --git a/packages/banners/tests/__snapshots__/vertical-withComplete.svg b/packages/banners/tests/__snapshots__/vertical-withComplete.svg index 79f2357..d9a8ac4 100644 --- a/packages/banners/tests/__snapshots__/vertical-withComplete.svg +++ b/packages/banners/tests/__snapshots__/vertical-withComplete.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withIcon.svg b/packages/banners/tests/__snapshots__/vertical-withIcon.svg index ac05751..ac34190 100644 --- a/packages/banners/tests/__snapshots__/vertical-withIcon.svg +++ b/packages/banners/tests/__snapshots__/vertical-withIcon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg b/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg index ba5030a..eef3e42 100644 --- a/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg +++ b/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withTitle.svg b/packages/banners/tests/__snapshots__/vertical-withTitle.svg index 06bf8c5..203ad30 100644 --- a/packages/banners/tests/__snapshots__/vertical-withTitle.svg +++ b/packages/banners/tests/__snapshots__/vertical-withTitle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 0ffa3aa3b1af68a4d069dd1f18a71e76f1ee497f Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:35:01 -0300 Subject: [PATCH 39/47] =?UTF-8?q?test(banners):=20=F0=9F=9A=A8=20different?= =?UTF-8?q?=20icon=20providing=20methods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__snapshots__/icons-withIconifyIcon.svg | 1 + packages/banners/tests/icons.test.js | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg create mode 100644 packages/banners/tests/icons.test.js diff --git a/packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg b/packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg new file mode 100644 index 0000000..dafc54d --- /dev/null +++ b/packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/icons.test.js b/packages/banners/tests/icons.test.js new file mode 100644 index 0000000..529c9fe --- /dev/null +++ b/packages/banners/tests/icons.test.js @@ -0,0 +1,44 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Iconify icons', async () => { + it('API\'s Iconify icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + // eslint-disable-next-line spellcheck/spell-checker + icon: 'solar:test-tube-minimalistic-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/icons-withIconifyIcon.svg'); + }); + + it('Local Iconify icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: ` + + + + + + + + `.toString(), + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/icons-withIconifyIcon.svg'); + }); + + it('URL Iconify icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'https://api.iconify.design/solar:test-tube-minimalistic-bold-duotone.svg', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/icons-withIconifyIcon.svg'); + }); +}); From 0794bebebff7bbe0b7ef5027907e50736e7c9433 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:35:31 -0300 Subject: [PATCH 40/47] =?UTF-8?q?test(banners):=20=F0=9F=9A=A8=20complex?= =?UTF-8?q?=20banner=20example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/__snapshots__/banner-horizontal.svg | 1 + .../tests/__snapshots__/banner-rtl.svg | 1 + .../tests/__snapshots__/banner-vertical.svg | 1 + packages/banners/tests/banner.test.ts | 57 +++++++++++++++++++ packages/banners/vitest.config.js | 2 +- 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 packages/banners/tests/__snapshots__/banner-horizontal.svg create mode 100644 packages/banners/tests/__snapshots__/banner-rtl.svg create mode 100644 packages/banners/tests/__snapshots__/banner-vertical.svg create mode 100644 packages/banners/tests/banner.test.ts diff --git a/packages/banners/tests/__snapshots__/banner-horizontal.svg b/packages/banners/tests/__snapshots__/banner-horizontal.svg new file mode 100644 index 0000000..de164d0 --- /dev/null +++ b/packages/banners/tests/__snapshots__/banner-horizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/banner-rtl.svg b/packages/banners/tests/__snapshots__/banner-rtl.svg new file mode 100644 index 0000000..a03bc43 --- /dev/null +++ b/packages/banners/tests/__snapshots__/banner-rtl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/banner-vertical.svg b/packages/banners/tests/__snapshots__/banner-vertical.svg new file mode 100644 index 0000000..2d98174 --- /dev/null +++ b/packages/banners/tests/__snapshots__/banner-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/banner.test.ts b/packages/banners/tests/banner.test.ts new file mode 100644 index 0000000..bb24967 --- /dev/null +++ b/packages/banners/tests/banner.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from 'vitest'; +import type { BannerOptions } from '../src/index'; +import banner from '../src/index'; + +describe('Complex banner', async () => { + const options: BannerOptions = { + title: '@marknow/banners', + subtitle: 'This is a more complex banner that uses most of the package settings', + icon: 'solar:inbox-unread-bold-duotone', + colors: { + foreground: '#feefec', + background: '#1d1412', + }, + fonts: { + title: { + // eslint-disable-next-line spellcheck/spell-checker + name: 'Quattrocento', + data: await (await fetch('https://fonts.bunny.net/quattrocento/files/quattrocento-latin-700-normal.woff')).arrayBuffer(), + weight: 700, + style: 'normal', + }, + subtitle: { + // eslint-disable-next-line spellcheck/spell-checker + name: 'Quattrocento Sans', + data: await (await fetch('https://fonts.bunny.net/quattrocento-sans/files/quattrocento-sans-latin-400-normal.woff')).arrayBuffer(), + weight: 400, + style: 'normal', + }, + }, + libConfig: { + fetcher: globalThis.fetch, + }, + }; + + it('Horizontal', async () => { + const result = await banner({ + ...options, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/banner-horizontal.svg'); + }); + + it('Horizontal RTL', async () => { + const result = await banner({ + ...options, + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/banner-rtl.svg'); + }); + + it('Vertical', async () => { + const result = await banner({ + ...options, + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/banner-vertical.svg'); + }); +}); diff --git a/packages/banners/vitest.config.js b/packages/banners/vitest.config.js index 90a689f..d9b0e85 100644 --- a/packages/banners/vitest.config.js +++ b/packages/banners/vitest.config.js @@ -5,6 +5,6 @@ export default defineProject({ environmentMatchGlobs: [ ['**\/*{,.node}.test.{js,ts}', 'node'], ], - include: ['./tests/**/*.test.js'], + include: ['./tests/**/*.test.{js,ts}'], }, }); From b35dfebfa9f8709c4e5acad31d33bdeb02247678 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:36:32 -0300 Subject: [PATCH 41/47] =?UTF-8?q?chore(banners):=20=F0=9F=94=A7=20markdown?= =?UTF-8?q?=20for=20easily=20preview=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/banners/tests/PREVIEWS.md | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 packages/banners/tests/PREVIEWS.md diff --git a/packages/banners/tests/PREVIEWS.md b/packages/banners/tests/PREVIEWS.md new file mode 100644 index 0000000..c020b22 --- /dev/null +++ b/packages/banners/tests/PREVIEWS.md @@ -0,0 +1,42 @@ + +### [`banner.test.ts`](./banner.test.ts) + +![horizontal](__snapshots__/banner-horizontal.svg) + +![vertical](__snapshots__/banner-vertical.svg) + +![rtl](__snapshots__/banner-rtl.svg) + +### [`results.test.js`](./results.test.js); +![withTitle](__snapshots__/withTitle.svg) + +![withSubtitle](__snapshots__/withSubtitle.svg) + +![withIcon](__snapshots__/withIcon.svg) + +![withComplete](__snapshots__/withComplete.svg) + +### [`vertical-results.test.js`](./vertical-results.test.js); + +![withTitle](__snapshots__/vertical-withTitle.svg) + +![withSubtitle](__snapshots__/vertical-withSubtitle.svg) + +![withIcon](__snapshots__/vertical-withIcon.svg) + +![withComplete](__snapshots__/vertical-withComplete.svg) + +### [`rtl-results.test.js`](./rtl-results.test.js); + +![withTitle](__snapshots__/rtl-withTitle.svg) + +![withSubtitle](__snapshots__/rtl-withSubtitle.svg) + +![withIcon](__snapshots__/rtl-withIcon.svg) + +![withComplete](__snapshots__/rtl-withComplete.svg) + +### [`icons.test.js`](./icons.test.js) + +![icons](__snapshots__/icons-withIconifyIcon.svg) + From 78d3c5b5a8ea5f661503944251abfe938c09f0a7 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:19:16 -0300 Subject: [PATCH 42/47] =?UTF-8?q?ci:=20=F0=9F=91=B7=20code=20testing=20wor?= =?UTF-8?q?kflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/actions/pnpm-setup/action.yml | 49 +++++++++++++++++++++++++++ .github/workflows/tests.yml | 22 ++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 .github/actions/pnpm-setup/action.yml create mode 100644 .github/workflows/tests.yml diff --git a/.github/actions/pnpm-setup/action.yml b/.github/actions/pnpm-setup/action.yml new file mode 100644 index 0000000..9e7998a --- /dev/null +++ b/.github/actions/pnpm-setup/action.yml @@ -0,0 +1,49 @@ +name: PNPM Setup + +inputs: + node-version: + required: false + type: number + default: 18 + pnpm-version: + required: false + type: number + default: 8 + install-deps: + required: false + type: boolean + default: true + +runs: + using: composite + steps: + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ inputs.node-version }} + + - name: Install PNPM + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: ${{ inputs.pnpm-version }} + run_install: false + + - name: Get store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - name: Setup pnpm cache + uses: actions/cache@v3 + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + if: inputs.install-deps + run: pnpm install + shell: bash diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..c225263 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,22 @@ +name: 🧪 Tests + +on: + push: + branches: + - dev + - main + pull_request: + types: [opened, synchronize, reopened] + +jobs: + setup-pnpm: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup environment + uses: ./.github/actions/pnpm-setup + + - name: Run tests + run: pnpm run test From 619bf853398fecde8db90d9e96db23fa4cd34293 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:21:52 -0300 Subject: [PATCH 43/47] =?UTF-8?q?ci:=20=F0=9F=91=B7=20rename=20"pnpm-setup?= =?UTF-8?q?"=20to=20"vitest"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c225263..8deea7f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,7 +9,7 @@ on: types: [opened, synchronize, reopened] jobs: - setup-pnpm: + vitest: runs-on: ubuntu-latest steps: - name: Checkout From 911c865e5ae75e0d9665f5c6a0bc3aba74c86466 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:23:13 -0300 Subject: [PATCH 44/47] =?UTF-8?q?chore:=20=F0=9F=94=A7=20add=20auto=20impo?= =?UTF-8?q?rt=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/www/.eslintrc-auto-import.json | 68 ++++++++++++++++++++++++++++ apps/www/.gitignore | 3 -- apps/www/src/lib/components.d.ts | 7 +++ apps/www/src/lib/imports.d.ts | 69 +++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 apps/www/.eslintrc-auto-import.json create mode 100644 apps/www/src/lib/components.d.ts create mode 100644 apps/www/src/lib/imports.d.ts diff --git a/apps/www/.eslintrc-auto-import.json b/apps/www/.eslintrc-auto-import.json new file mode 100644 index 0000000..f97c5a5 --- /dev/null +++ b/apps/www/.eslintrc-auto-import.json @@ -0,0 +1,68 @@ +{ + "globals": { + "afterUpdate": true, + "backIn": true, + "backInOut": true, + "backOut": true, + "beforeUpdate": true, + "blur": true, + "bounceIn": true, + "bounceInOut": true, + "bounceOut": true, + "circIn": true, + "circInOut": true, + "circOut": true, + "createEventDispatcher": true, + "crossfade": true, + "cubicIn": true, + "cubicInOut": true, + "cubicOut": true, + "derived": true, + "draw": true, + "elasticIn": true, + "elasticInOut": true, + "elasticOut": true, + "expoIn": true, + "expoInOut": true, + "expoOut": true, + "fade": true, + "flip": true, + "fly": true, + "get": true, + "getAllContexts": true, + "getContext": true, + "hasContext": true, + "linear": true, + "onDestroy": true, + "onMount": true, + "quadIn": true, + "quadInOut": true, + "quadOut": true, + "quartIn": true, + "quartInOut": true, + "quartOut": true, + "quintIn": true, + "quintInOut": true, + "quintOut": true, + "readable": true, + "scale": true, + "setContext": true, + "sineIn": true, + "sineInOut": true, + "sineOut": true, + "slide": true, + "spring": true, + "tick": true, + "tweened": true, + "writable": true, + "csr": true, + "ssr": true, + "render": true, + "banner": true, + "Banner": true, + "load": true, + "data": true, + "PageData": true, + "GET": true + } +} diff --git a/apps/www/.gitignore b/apps/www/.gitignore index bd8f920..6635cf5 100644 --- a/apps/www/.gitignore +++ b/apps/www/.gitignore @@ -8,6 +8,3 @@ node_modules !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* -/src/lib/imports.d.ts -/src/lib/components.d.ts -/.eslintrc-auto-import.json diff --git a/apps/www/src/lib/components.d.ts b/apps/www/src/lib/components.d.ts new file mode 100644 index 0000000..595d04b --- /dev/null +++ b/apps/www/src/lib/components.d.ts @@ -0,0 +1,7 @@ +// generated by unplugin-svelte-components +// We suggest you to commit this file into source control +declare global { + const Test: typeof import("./Test.svelte")["default"] +} + +export {} diff --git a/apps/www/src/lib/imports.d.ts b/apps/www/src/lib/imports.d.ts new file mode 100644 index 0000000..65a62ef --- /dev/null +++ b/apps/www/src/lib/imports.d.ts @@ -0,0 +1,69 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-auto-import +export {} +declare global { + const Banner: typeof import('./Banner')['default'] + const GET: typeof import('../routes/api.svg/+server')['GET'] + const afterUpdate: typeof import('svelte')['afterUpdate'] + const backIn: typeof import('svelte/easing')['backIn'] + const backInOut: typeof import('svelte/easing')['backInOut'] + const backOut: typeof import('svelte/easing')['backOut'] + const beforeUpdate: typeof import('svelte')['beforeUpdate'] + const blur: typeof import('svelte/transition')['blur'] + const bounceIn: typeof import('svelte/easing')['bounceIn'] + const bounceInOut: typeof import('svelte/easing')['bounceInOut'] + const bounceOut: typeof import('svelte/easing')['bounceOut'] + const circIn: typeof import('svelte/easing')['circIn'] + const circInOut: typeof import('svelte/easing')['circInOut'] + const circOut: typeof import('svelte/easing')['circOut'] + const createEventDispatcher: typeof import('svelte')['createEventDispatcher'] + const crossfade: typeof import('svelte/transition')['crossfade'] + const csr: typeof import('../routes/+page')['csr'] + const cubicIn: typeof import('svelte/easing')['cubicIn'] + const cubicInOut: typeof import('svelte/easing')['cubicInOut'] + const cubicOut: typeof import('svelte/easing')['cubicOut'] + const data: typeof import('../routes/+page.svelte')['data'] + const derived: typeof import('svelte/store')['derived'] + const draw: typeof import('svelte/transition')['draw'] + const elasticIn: typeof import('svelte/easing')['elasticIn'] + const elasticInOut: typeof import('svelte/easing')['elasticInOut'] + const elasticOut: typeof import('svelte/easing')['elasticOut'] + const expoIn: typeof import('svelte/easing')['expoIn'] + const expoInOut: typeof import('svelte/easing')['expoInOut'] + const expoOut: typeof import('svelte/easing')['expoOut'] + const fade: typeof import('svelte/transition')['fade'] + const flip: typeof import('svelte/animate')['flip'] + const fly: typeof import('svelte/transition')['fly'] + const get: typeof import('svelte/store')['get'] + const getAllContexts: typeof import('svelte')['getAllContexts'] + const getContext: typeof import('svelte')['getContext'] + const hasContext: typeof import('svelte')['hasContext'] + const linear: typeof import('svelte/easing')['linear'] + const load: typeof import('../routes/+page')['load'] + const onDestroy: typeof import('svelte')['onDestroy'] + const onMount: typeof import('svelte')['onMount'] + const quadIn: typeof import('svelte/easing')['quadIn'] + const quadInOut: typeof import('svelte/easing')['quadInOut'] + const quadOut: typeof import('svelte/easing')['quadOut'] + const quartIn: typeof import('svelte/easing')['quartIn'] + const quartInOut: typeof import('svelte/easing')['quartInOut'] + const quartOut: typeof import('svelte/easing')['quartOut'] + const quintIn: typeof import('svelte/easing')['quintIn'] + const quintInOut: typeof import('svelte/easing')['quintInOut'] + const quintOut: typeof import('svelte/easing')['quintOut'] + const readable: typeof import('svelte/store')['readable'] + const render: typeof import('./render')['default'] + const scale: typeof import('svelte/transition')['scale'] + const setContext: typeof import('svelte')['setContext'] + const sineIn: typeof import('svelte/easing')['sineIn'] + const sineInOut: typeof import('svelte/easing')['sineInOut'] + const sineOut: typeof import('svelte/easing')['sineOut'] + const slide: typeof import('svelte/transition')['slide'] + const spring: typeof import('svelte/motion')['spring'] + const ssr: typeof import('../routes/+page')['ssr'] + const tick: typeof import('svelte')['tick'] + const tweened: typeof import('svelte/motion')['tweened'] + const writable: typeof import('svelte/store')['writable'] +} From 536f19b353f7bcc617d0742ad637d0be2576f5a3 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:47:34 -0300 Subject: [PATCH 45/47] =?UTF-8?q?ci:=20=F0=9F=91=B7=20code=20testing=20and?= =?UTF-8?q?=20linting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/checks.yml | 43 ++++++++++++++++++++++++++++++++++++ .github/workflows/tests.yml | 22 ------------------ turbo.json | 12 ++++------ 3 files changed, 47 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/checks.yml delete mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 0000000..3fb2147 --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,43 @@ +name: 🧪 Code checking + +on: + push: + branches: + - dev + - main + pull_request: + types: [opened, synchronize, reopened] + +jobs: + linting: + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - name: Setup environment + uses: ./.github/actions/pnpm-setup + + - name: Run tests + run: pnpm run lint + vitest: + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - name: Setup environment + uses: ./.github/actions/pnpm-setup + + - name: Run tests + run: pnpm run test diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 8deea7f..0000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: 🧪 Tests - -on: - push: - branches: - - dev - - main - pull_request: - types: [opened, synchronize, reopened] - -jobs: - vitest: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup environment - uses: ./.github/actions/pnpm-setup - - - name: Run tests - run: pnpm run test diff --git a/turbo.json b/turbo.json index 7cfcf07..0cf6678 100644 --- a/turbo.json +++ b/turbo.json @@ -4,7 +4,7 @@ "build": { "dependsOn": [ "^test", - "test" + "^build" ], "outputs": [ "dist/**" @@ -13,15 +13,10 @@ "lint": {}, "test": { "dependsOn": [ - "^lint", - "lint" + "build" ] }, "test:watch": { - "dependsOn": [ - "^lint", - "lint" - ], "persistent": true }, "dev": { @@ -33,7 +28,8 @@ }, "preview": { "dependsOn": [ - "^build" + "^build", + "build" ], "persistent": true } From 7e453921dcfb1e10b19c40be87723145d7901b4f Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:50:11 -0300 Subject: [PATCH 46/47] =?UTF-8?q?ci:=20=F0=9F=91=B7=20rename=20steps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/checks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 3fb2147..41973b2 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -23,7 +23,7 @@ jobs: - name: Setup environment uses: ./.github/actions/pnpm-setup - - name: Run tests + - name: Run ESLint run: pnpm run lint vitest: env: @@ -39,5 +39,5 @@ jobs: - name: Setup environment uses: ./.github/actions/pnpm-setup - - name: Run tests + - name: Run Vitests run: pnpm run test From a59350ad77354a755c4ae76c1e9af554c78844e2 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Tue, 27 Jun 2023 16:27:14 -0300 Subject: [PATCH 47/47] =?UTF-8?q?ci:=20=F0=9F=91=B7=20add=20changesets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/README.md | 8 + .changeset/config.json | 15 + package.json | 1 + pnpm-lock.yaml | 680 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 690 insertions(+), 14 deletions(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..e5b6d8d --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..c171f55 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [], + "privatePackages": { + "version": true, + "tag": true + } +} diff --git a/package.json b/package.json index 852c960..52958a7 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "devDependencies": { "@antfu/eslint-config": "^0.39.5", + "@changesets/cli": "^2.26.2", "@commitlint/config-conventional": "^17.6.5", "@commitlint/types": "^17.4.4", "eslint": "^8.42.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e80a530..dbd52b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@antfu/eslint-config': specifier: ^0.39.5 version: 0.39.5(eslint@8.42.0)(typescript@5.1.3) + '@changesets/cli': + specifier: ^2.26.2 + version: 2.26.2 '@commitlint/config-conventional': specifier: ^17.6.5 version: 17.6.5 @@ -1628,6 +1631,190 @@ packages: to-fast-properties: 2.0.0 dev: true + /@changesets/apply-release-plan@6.1.4: + resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/config': 2.3.1 + '@changesets/get-version-range-type': 0.3.2 + '@changesets/git': 2.0.0 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.5.3 + dev: true + + /@changesets/assemble-release-plan@5.2.4: + resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + semver: 7.5.3 + dev: true + + /@changesets/changelog-git@0.1.14: + resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + dependencies: + '@changesets/types': 5.2.1 + dev: true + + /@changesets/cli@2.26.2: + resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} + hasBin: true + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/apply-release-plan': 6.1.4 + '@changesets/assemble-release-plan': 5.2.4 + '@changesets/changelog-git': 0.1.14 + '@changesets/config': 2.3.1 + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/get-release-plan': 3.0.17 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/pre': 1.0.14 + '@changesets/read': 0.5.9 + '@changesets/types': 5.2.1 + '@changesets/write': 0.2.3 + '@manypkg/get-packages': 1.1.3 + '@types/is-ci': 3.0.0 + '@types/semver': 7.5.0 + ansi-colors: 4.1.3 + chalk: 2.4.2 + enquirer: 2.3.6 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + is-ci: 3.0.1 + meow: 6.1.1 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.0.3 + resolve-from: 5.0.0 + semver: 7.5.3 + spawndamnit: 2.0.0 + term-size: 2.2.1 + tty-table: 4.2.1 + dev: true + + /@changesets/config@2.3.1: + resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} + dependencies: + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/logger': 0.0.5 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.5 + dev: true + + /@changesets/errors@0.1.4: + resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + dependencies: + extendable-error: 0.1.7 + dev: true + + /@changesets/get-dependents-graph@1.3.6: + resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} + dependencies: + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.5.3 + dev: true + + /@changesets/get-release-plan@3.0.17: + resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/assemble-release-plan': 5.2.4 + '@changesets/config': 2.3.1 + '@changesets/pre': 1.0.14 + '@changesets/read': 0.5.9 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + dev: true + + /@changesets/get-version-range-type@0.3.2: + resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + dev: true + + /@changesets/git@2.0.0: + resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.5 + spawndamnit: 2.0.0 + dev: true + + /@changesets/logger@0.0.5: + resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + dependencies: + chalk: 2.4.2 + dev: true + + /@changesets/parse@0.3.16: + resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + dependencies: + '@changesets/types': 5.2.1 + js-yaml: 3.14.1 + dev: true + + /@changesets/pre@1.0.14: + resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + dev: true + + /@changesets/read@0.5.9: + resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/parse': 0.3.16 + '@changesets/types': 5.2.1 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + dev: true + + /@changesets/types@4.1.0: + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + dev: true + + /@changesets/types@5.2.1: + resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} + dev: true + + /@changesets/write@0.2.3: + resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/types': 5.2.1 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + dev: true + /@commitlint/config-conventional@17.6.5: resolution: {integrity: sha512-Xl9H9KLl86NZm5CYNTNF9dcz1xelE/EbvhWIWcYxG/rn3UWYWdWmmnX2q6ZduNdLFSGbOxzUpIx61j5zxbeXxg==} engines: {node: '>=v14'} @@ -2247,6 +2434,26 @@ packages: resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} dev: true + /@manypkg/find-root@1.1.0: + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + dependencies: + '@babel/runtime': 7.22.5 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: true + + /@manypkg/get-packages@1.1.3: + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + dependencies: + '@babel/runtime': 7.22.5 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: true + /@mapbox/node-pre-gyp@1.0.10: resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} hasBin: true @@ -2258,7 +2465,7 @@ packages: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.5.1 + semver: 7.5.3 tar: 6.1.15 transitivePeerDependencies: - encoding @@ -2290,7 +2497,7 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.1 + semver: 7.5.3 dev: true /@npmcli/move-file@1.1.2: @@ -2662,6 +2869,12 @@ packages: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true + /@types/is-ci@3.0.0: + resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + dependencies: + ci-info: 3.8.0 + dev: true + /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true @@ -2690,6 +2903,10 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true + /@types/minimist@1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + dev: true + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true @@ -2701,6 +2918,10 @@ packages: form-data: 3.0.1 dev: true + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + /@types/node@14.18.33: resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==} dev: true @@ -2762,7 +2983,7 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.1 + semver: 7.5.3 tsutils: 3.21.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: @@ -2904,7 +3125,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.1 + semver: 7.5.3 tsutils: 3.21.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: @@ -2925,7 +3146,7 @@ packages: '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) eslint: 8.42.0 eslint-scope: 5.1.1 - semver: 7.5.1 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -2945,7 +3166,7 @@ packages: '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) eslint: 8.43.0 eslint-scope: 5.1.1 - semver: 7.5.1 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -3434,7 +3655,7 @@ packages: recast: 0.21.5 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 - semver: 7.5.1 + semver: 7.5.3 sort-package-json: 1.57.0 tar-fs: 2.1.1 tsconfig-paths: 4.2.0 @@ -3601,6 +3822,11 @@ packages: uri-js: 4.4.1 dev: true + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -3670,6 +3896,12 @@ packages: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -3725,6 +3957,11 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true @@ -3869,6 +4106,13 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + dependencies: + is-windows: 1.0.2 + dev: true + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true @@ -3940,6 +4184,12 @@ packages: fill-range: 7.0.1 dev: true + /breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + dependencies: + wcwidth: 1.0.1 + dev: true + /brotli-size@4.0.0: resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} engines: {node: '>= 10.16.0'} @@ -3987,7 +4237,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.1 + semver: 7.5.3 dev: true /busboy@1.6.0: @@ -4063,6 +4313,20 @@ packages: engines: {node: '>=6'} dev: true + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -4219,6 +4483,14 @@ packages: engines: {node: '>= 10'} dev: true + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -4327,7 +4599,7 @@ packages: js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 - semver: 7.5.1 + semver: 7.5.3 well-known-symbols: 2.0.0 dev: true @@ -4408,6 +4680,14 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -4575,6 +4855,28 @@ packages: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} dev: true + /csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: true + + /csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: true + + /csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: true + + /csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: true + /data-uri-to-buffer@3.0.1: resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} engines: {node: '>= 6'} @@ -4631,6 +4933,19 @@ packages: ms: 2.1.2 dev: true + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: @@ -4919,6 +5234,13 @@ packages: once: 1.4.0 dev: true + /enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + dev: true + /entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true @@ -5485,7 +5807,7 @@ packages: is-core-module: 2.12.1 minimatch: 3.1.2 resolve: 1.22.2 - semver: 7.5.1 + semver: 7.5.3 dev: true /eslint-plugin-no-only-tests@3.1.0: @@ -5559,7 +5881,7 @@ packages: regexp-tree: 0.1.27 regjsparser: 0.10.0 safe-regex: 2.1.1 - semver: 7.5.1 + semver: 7.5.3 strip-indent: 3.0.0 dev: true @@ -5589,7 +5911,7 @@ packages: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.13 - semver: 7.5.1 + semver: 7.5.3 vue-eslint-parser: 9.3.1(eslint@8.42.0) xml-name-validator: 4.0.0 transitivePeerDependencies: @@ -5914,6 +6236,10 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true + /extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + dev: true + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -6065,6 +6391,13 @@ packages: path-exists: 4.0.0 dev: true + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -6133,6 +6466,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -6413,6 +6755,11 @@ packages: duplexer: 0.1.2 dev: true + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + /has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} @@ -6562,6 +6909,10 @@ packages: - supports-color dev: true + /human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -6786,6 +7137,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + dependencies: + ci-info: 3.8.0 + dev: true + /is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: @@ -6883,6 +7241,11 @@ packages: engines: {node: '>=8'} dev: true + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -6936,6 +7299,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + dependencies: + better-path-resolve: 1.0.0 + dev: true + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} @@ -6965,6 +7335,11 @@ packages: call-bind: 1.0.2 dev: true + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -7022,6 +7397,14 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -7093,7 +7476,7 @@ packages: acorn: 8.9.0 eslint-visitor-keys: 3.4.1 espree: 9.5.2 - semver: 7.5.1 + semver: 7.5.3 dev: true /jsonc-parser@3.2.0: @@ -7120,6 +7503,11 @@ packages: json-buffer: 3.0.1 dev: true + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -7164,6 +7552,16 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + /loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -7213,6 +7611,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true @@ -7244,6 +7646,13 @@ packages: engines: {node: '>=8'} dev: true + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -7293,6 +7702,16 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + /markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -7492,6 +7911,23 @@ packages: engines: {node: '>= 0.6'} dev: true + /meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true @@ -7914,6 +8350,15 @@ packages: brace-expansion: 2.0.1 dev: true + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true @@ -7959,6 +8404,11 @@ packages: yallist: 4.0.0 dev: true + /mixme@0.5.9: + resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} + engines: {node: '>= 8.0.0'} + dev: true + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true @@ -8250,6 +8700,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + dev: true + /outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} dev: true @@ -8259,6 +8713,13 @@ packages: engines: {node: '>=8'} dev: true + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -8299,6 +8760,11 @@ packages: p-limit: 3.1.0 dev: true + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -8489,6 +8955,11 @@ packages: engines: {node: '>=8.6'} dev: true + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + /pify@5.0.0: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} engines: {node: '>=10'} @@ -8932,6 +9403,16 @@ packages: source-map-js: 1.0.2 dev: true + /preferred-pm@3.0.3: + resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -9035,6 +9516,10 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true + /pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} dependencies: @@ -9078,6 +9563,11 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -9142,6 +9632,16 @@ packages: type-fest: 0.6.0 dev: true + /read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + /readable-stream@1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} dependencies: @@ -9189,6 +9689,14 @@ packages: tslib: 2.5.3 dev: true + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + /regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} @@ -9314,6 +9822,10 @@ packages: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} dev: true + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true @@ -9597,6 +10109,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -9648,6 +10168,13 @@ packages: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -9655,6 +10182,11 @@ packages: shebang-regex: 3.0.0 dev: true + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -9695,6 +10227,19 @@ packages: engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true + /smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + array.prototype.flat: 1.3.1 + breakword: 1.0.6 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: true + /socks-proxy-agent@5.0.1: resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} engines: {node: '>= 6'} @@ -9771,6 +10316,13 @@ packages: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: true + /spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + dev: true + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -9793,6 +10345,10 @@ packages: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + /ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -9822,6 +10378,12 @@ packages: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true + /stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + dependencies: + mixme: 0.5.9 + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -10155,6 +10717,11 @@ packages: yallist: 4.0.0 dev: true + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true + /terser@5.18.1: resolution: {integrity: sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==} engines: {node: '>=10'} @@ -10254,6 +10821,11 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + /trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: true @@ -10336,6 +10908,20 @@ packages: typescript: 5.1.3 dev: true + /tty-table@4.2.1: + resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.7.2 + dev: true + /turbo-darwin-64@1.10.3: resolution: {integrity: sha512-IIB9IomJGyD3EdpSscm7Ip1xVWtYb7D0x7oH3vad3gjFcjHJzDz9xZ/iw/qItFEW+wGFcLSRPd+1BNnuLM8AsA==} cpu: [x64] @@ -10416,6 +11002,11 @@ packages: engines: {node: '>=4'} dev: true + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -11097,7 +11688,7 @@ packages: espree: 9.5.2 esquery: 1.5.0 lodash: 4.17.21 - semver: 7.5.1 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -11147,6 +11738,18 @@ packages: is-symbol: 1.0.4 dev: true + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} @@ -11159,6 +11762,13 @@ packages: is-typed-array: 1.1.10 dev: true + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -11187,6 +11797,15 @@ packages: engines: {node: '>=0.10.0'} dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -11270,11 +11889,19 @@ packages: engines: {node: '>=0.4'} dev: true + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true @@ -11302,11 +11929,36 @@ packages: engines: {node: '>= 14'} dev: true + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'}