mirror of
https://github.com/AderKonstantin/aderktech-chronark.com-.git
synced 2025-06-08 05:38:41 +03:00
redesign
This commit is contained in:
parent
f7765e018d
commit
d13531c222
@ -19,6 +19,9 @@ var Project = defineDocumentType(() => ({
|
|||||||
filePathPattern: "./projects/**/*.mdx",
|
filePathPattern: "./projects/**/*.mdx",
|
||||||
contentType: "mdx",
|
contentType: "mdx",
|
||||||
fields: {
|
fields: {
|
||||||
|
published: {
|
||||||
|
type: "boolean",
|
||||||
|
},
|
||||||
title: {
|
title: {
|
||||||
type: "string",
|
type: "string",
|
||||||
required: true,
|
required: true,
|
||||||
@ -91,4 +94,4 @@ var contentlayer_config_default = makeSource({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
export { Page, Project, contentlayer_config_default as default };
|
export { Page, Project, contentlayer_config_default as default };
|
||||||
//# sourceMappingURL=compiled-contentlayer-config-KFUTZ636.mjs.map
|
//# sourceMappingURL=compiled-contentlayer-config-AAEZAM7W.mjs.map
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"sources": ["../../../contentlayer.config.js"],
|
||||||
|
"sourcesContent": ["import { defineDocumentType, makeSource } from \"contentlayer/source-files\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypePrettyCode from \"rehype-pretty-code\";\nimport rehypeSlug from \"rehype-slug\";\nimport rehypeAutolinkHeadings from \"rehype-autolink-headings\";\n\n/** @type {import('contentlayer/source-files').ComputedFields} */\nconst computedFields = {\n\tpath: {\n\t\ttype: \"string\",\n\t\tresolve: (doc) => `/${doc._raw.flattenedPath}`,\n\t},\n\tslug: {\n\t\ttype: \"string\",\n\t\tresolve: (doc) => doc._raw.flattenedPath.split(\"/\").slice(1).join(\"/\"),\n\t},\n};\n\nexport const Project = defineDocumentType(() => ({\n\tname: \"Project\",\n\tfilePathPattern: \"./projects/**/*.mdx\",\n\tcontentType: \"mdx\",\n\n\tfields: {\n\t\tpublished: {\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\ttitle: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdate: {\n\t\t\ttype: \"date\",\n\t\t},\n\t\turl: {\n\t\t\ttype: \"string\",\n\t\t},\n\t\trepository: {\n\t\t\ttype: \"string\",\n\t\t},\n\t},\n\tcomputedFields,\n}));\n\nexport const Page = defineDocumentType(() => ({\n\tname: \"Page\",\n\tfilePathPattern: \"pages/**/*.mdx\",\n\tcontentType: \"mdx\",\n\tfields: {\n\t\ttitle: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: \"string\",\n\t\t},\n\t},\n\tcomputedFields,\n}));\n\nexport default makeSource({\n\tcontentDirPath: \"./content\",\n\tdocumentTypes: [Page, Project],\n\tmdx: {\n\t\tremarkPlugins: [remarkGfm],\n\t\trehypePlugins: [\n\t\t\trehypeSlug,\n\t\t\t[\n\t\t\t\trehypePrettyCode,\n\t\t\t\t{\n\t\t\t\t\ttheme: \"github-dark\",\n\t\t\t\t\tonVisitLine(node) {\n\t\t\t\t\t\t// Prevent lines from collapsing in `display: grid` mode, and allow empty\n\t\t\t\t\t\t// lines to be copy/pasted\n\t\t\t\t\t\tif (node.children.length === 0) {\n\t\t\t\t\t\t\tnode.children = [{ type: \"text\", value: \" \" }];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonVisitHighlightedLine(node) {\n\t\t\t\t\t\tnode.properties.className.push(\"line--highlighted\");\n\t\t\t\t\t},\n\t\t\t\t\tonVisitHighlightedWord(node) {\n\t\t\t\t\t\tnode.properties.className = [\"word--highlighted\"];\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\t[\n\t\t\t\trehypeAutolinkHeadings,\n\t\t\t\t{\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tclassName: [\"subheading-anchor\"],\n\t\t\t\t\t\tariaLabel: \"Link to section\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t],\n\t},\n});\n"],
|
||||||
|
"mappings": ";AAAA,SAAS,oBAAoB,kBAAkB;AAC/C,OAAO,eAAe;AACtB,OAAO,sBAAsB;AAC7B,OAAO,gBAAgB;AACvB,OAAO,4BAA4B;AAGnC,IAAM,iBAAiB;AAAA,EACtB,MAAM;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,IAAI,IAAI,KAAK;AAAA,EAChC;AAAA,EACA,MAAM;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,IAAI,KAAK,cAAc,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACtE;AACD;AAEO,IAAM,UAAU,mBAAmB,OAAO;AAAA,EAChD,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,aAAa;AAAA,EAEb,QAAQ;AAAA,IACP,WAAW;AAAA,MACV,MAAM;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EACA;AACD,EAAE;AAEK,IAAM,OAAO,mBAAmB,OAAO;AAAA,EAC7C,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,QAAQ;AAAA,IACP,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EACA;AACD,EAAE;AAEF,IAAO,8BAAQ,WAAW;AAAA,EACzB,gBAAgB;AAAA,EAChB,eAAe,CAAC,MAAM,OAAO;AAAA,EAC7B,KAAK;AAAA,IACJ,eAAe,CAAC,SAAS;AAAA,IACzB,eAAe;AAAA,MACd;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,OAAO;AAAA,UACP,YAAY,MAAM;AAGjB,gBAAI,KAAK,SAAS,WAAW,GAAG;AAC/B,mBAAK,WAAW,CAAC,EAAE,MAAM,QAAQ,OAAO,IAAI,CAAC;AAAA,YAC9C;AAAA,UACD;AAAA,UACA,uBAAuB,MAAM;AAC5B,iBAAK,WAAW,UAAU,KAAK,mBAAmB;AAAA,UACnD;AAAA,UACA,uBAAuB,MAAM;AAC5B,iBAAK,WAAW,YAAY,CAAC,mBAAmB;AAAA,UACjD;AAAA,QACD;AAAA,MACD;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,YAAY;AAAA,YACX,WAAW,CAAC,mBAAmB;AAAA,YAC/B,WAAW;AAAA,UACZ;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD,CAAC;",
|
||||||
|
"names": []
|
||||||
|
}
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"sources": ["../../../contentlayer.config.js"],
|
|
||||||
"sourcesContent": ["import { defineDocumentType, makeSource } from \"contentlayer/source-files\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypePrettyCode from \"rehype-pretty-code\";\nimport rehypeSlug from \"rehype-slug\";\nimport rehypeAutolinkHeadings from \"rehype-autolink-headings\";\n\n/** @type {import('contentlayer/source-files').ComputedFields} */\nconst computedFields = {\n\tpath: {\n\t\ttype: \"string\",\n\t\tresolve: (doc) => `/${doc._raw.flattenedPath}`,\n\t},\n\tslug: {\n\t\ttype: \"string\",\n\t\tresolve: (doc) => doc._raw.flattenedPath.split(\"/\").slice(1).join(\"/\"),\n\t},\n};\n\nexport const Project = defineDocumentType(() => ({\n\tname: \"Project\",\n\tfilePathPattern: \"./projects/**/*.mdx\",\n\tcontentType: \"mdx\",\n\n\tfields: {\n\t\ttitle: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdate: {\n\t\t\ttype: \"date\",\n\t\t},\n\t\turl: {\n\t\t\ttype: \"string\",\n\t\t},\n\t\trepository: {\n\t\t\ttype: \"string\",\n\t\t},\n\t},\n\tcomputedFields,\n}));\n\nexport const Page = defineDocumentType(() => ({\n\tname: \"Page\",\n\tfilePathPattern: \"pages/**/*.mdx\",\n\tcontentType: \"mdx\",\n\tfields: {\n\t\ttitle: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: \"string\",\n\t\t},\n\t},\n\tcomputedFields,\n}));\n\nexport default makeSource({\n\tcontentDirPath: \"./content\",\n\tdocumentTypes: [Page, Project],\n\tmdx: {\n\t\tremarkPlugins: [remarkGfm],\n\t\trehypePlugins: [\n\t\t\trehypeSlug,\n\t\t\t[\n\t\t\t\trehypePrettyCode,\n\t\t\t\t{\n\t\t\t\t\ttheme: \"github-dark\",\n\t\t\t\t\tonVisitLine(node) {\n\t\t\t\t\t\t// Prevent lines from collapsing in `display: grid` mode, and allow empty\n\t\t\t\t\t\t// lines to be copy/pasted\n\t\t\t\t\t\tif (node.children.length === 0) {\n\t\t\t\t\t\t\tnode.children = [{ type: \"text\", value: \" \" }];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonVisitHighlightedLine(node) {\n\t\t\t\t\t\tnode.properties.className.push(\"line--highlighted\");\n\t\t\t\t\t},\n\t\t\t\t\tonVisitHighlightedWord(node) {\n\t\t\t\t\t\tnode.properties.className = [\"word--highlighted\"];\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\t[\n\t\t\t\trehypeAutolinkHeadings,\n\t\t\t\t{\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tclassName: [\"subheading-anchor\"],\n\t\t\t\t\t\tariaLabel: \"Link to section\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t],\n\t},\n});\n"],
|
|
||||||
"mappings": ";AAAA,SAAS,oBAAoB,kBAAkB;AAC/C,OAAO,eAAe;AACtB,OAAO,sBAAsB;AAC7B,OAAO,gBAAgB;AACvB,OAAO,4BAA4B;AAGnC,IAAM,iBAAiB;AAAA,EACtB,MAAM;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,IAAI,IAAI,KAAK;AAAA,EAChC;AAAA,EACA,MAAM;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,IAAI,KAAK,cAAc,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACtE;AACD;AAEO,IAAM,UAAU,mBAAmB,OAAO;AAAA,EAChD,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,aAAa;AAAA,EAEb,QAAQ;AAAA,IACP,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EACA;AACD,EAAE;AAEK,IAAM,OAAO,mBAAmB,OAAO;AAAA,EAC7C,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,QAAQ;AAAA,IACP,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EACA;AACD,EAAE;AAEF,IAAO,8BAAQ,WAAW;AAAA,EACzB,gBAAgB;AAAA,EAChB,eAAe,CAAC,MAAM,OAAO;AAAA,EAC7B,KAAK;AAAA,IACJ,eAAe,CAAC,SAAS;AAAA,IACzB,eAAe;AAAA,MACd;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,OAAO;AAAA,UACP,YAAY,MAAM;AAGjB,gBAAI,KAAK,SAAS,WAAW,GAAG;AAC/B,mBAAK,WAAW,CAAC,EAAE,MAAM,QAAQ,OAAO,IAAI,CAAC;AAAA,YAC9C;AAAA,UACD;AAAA,UACA,uBAAuB,MAAM;AAC5B,iBAAK,WAAW,UAAU,KAAK,mBAAmB;AAAA,UACnD;AAAA,UACA,uBAAuB,MAAM;AAC5B,iBAAK,WAAW,YAAY,CAAC,mBAAmB;AAAA,UACjD;AAAA,QACD;AAAA,MACD;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,YAAY;AAAA,YACX,WAAW,CAAC,mBAAmB;AAAA,YAC/B,WAAW;AAAA,UACZ;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD,CAAC;",
|
|
||||||
"names": []
|
|
||||||
}
|
|
@ -0,0 +1,97 @@
|
|||||||
|
// contentlayer.config.js
|
||||||
|
import { defineDocumentType, makeSource } from "contentlayer/source-files";
|
||||||
|
import remarkGfm from "remark-gfm";
|
||||||
|
import rehypePrettyCode from "rehype-pretty-code";
|
||||||
|
import rehypeSlug from "rehype-slug";
|
||||||
|
import rehypeAutolinkHeadings from "rehype-autolink-headings";
|
||||||
|
var computedFields = {
|
||||||
|
path: {
|
||||||
|
type: "string",
|
||||||
|
resolve: (doc) => `/${doc._raw.flattenedPath}`,
|
||||||
|
},
|
||||||
|
slug: {
|
||||||
|
type: "string",
|
||||||
|
resolve: (doc) => doc._raw.flattenedPath.split("/").slice(1).join("/"),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
var Project = defineDocumentType(() => ({
|
||||||
|
name: "Project",
|
||||||
|
filePathPattern: "./projects/**/*.mdx",
|
||||||
|
contentType: "mdx",
|
||||||
|
fields: {
|
||||||
|
published: {
|
||||||
|
type: "boolean",
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: "string",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: "string",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
date: {
|
||||||
|
type: "date",
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
type: "string",
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
type: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computedFields,
|
||||||
|
}));
|
||||||
|
var Page = defineDocumentType(() => ({
|
||||||
|
name: "Page",
|
||||||
|
filePathPattern: "pages/**/*.mdx",
|
||||||
|
contentType: "mdx",
|
||||||
|
fields: {
|
||||||
|
title: {
|
||||||
|
type: "string",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computedFields,
|
||||||
|
}));
|
||||||
|
var contentlayer_config_default = makeSource({
|
||||||
|
contentDirPath: "./content",
|
||||||
|
documentTypes: [Page, Project],
|
||||||
|
mdx: {
|
||||||
|
remarkPlugins: [remarkGfm],
|
||||||
|
rehypePlugins: [
|
||||||
|
rehypeSlug,
|
||||||
|
[
|
||||||
|
rehypePrettyCode,
|
||||||
|
{
|
||||||
|
theme: "github-dark",
|
||||||
|
onVisitLine(node) {
|
||||||
|
if (node.children.length === 0) {
|
||||||
|
node.children = [{ type: "text", value: " " }];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onVisitHighlightedLine(node) {
|
||||||
|
node.properties.className.push("line--highlighted");
|
||||||
|
},
|
||||||
|
onVisitHighlightedWord(node) {
|
||||||
|
node.properties.className = ["word--highlighted"];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[
|
||||||
|
rehypeAutolinkHeadings,
|
||||||
|
{
|
||||||
|
properties: {
|
||||||
|
className: ["subheading-anchor"],
|
||||||
|
ariaLabel: "Link to section",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
export { Page, Project, contentlayer_config_default as default };
|
||||||
|
//# sourceMappingURL=compiled-contentlayer-config-RHAHPX7F.mjs.map
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"sources": ["../../../contentlayer.config.js"],
|
||||||
|
"sourcesContent": ["import { defineDocumentType, makeSource } from \"contentlayer/source-files\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypePrettyCode from \"rehype-pretty-code\";\nimport rehypeSlug from \"rehype-slug\";\nimport rehypeAutolinkHeadings from \"rehype-autolink-headings\";\n\n/** @type {import('contentlayer/source-files').ComputedFields} */\nconst computedFields = {\n\tpath: {\n\t\ttype: \"string\",\n\t\tresolve: (doc) => `/${doc._raw.flattenedPath}`,\n\t},\n\tslug: {\n\t\ttype: \"string\",\n\t\tresolve: (doc) => doc._raw.flattenedPath.split(\"/\").slice(1).join(\"/\"),\n\t},\n};\n\nexport const Project = defineDocumentType(() => ({\n\tname: \"Project\",\n\tfilePathPattern: \"./projects/**/*.mdx\",\n\tcontentType: \"mdx\",\n\n\tfields: {\n\t\tpublished:{\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\ttitle: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdate: {\n\t\t\ttype: \"date\",\n\t\t},\n\t\turl: {\n\t\t\ttype: \"string\",\n\t\t},\n\t\trepository: {\n\t\t\ttype: \"string\",\n\t\t},\n\t},\n\tcomputedFields,\n}));\n\nexport const Page = defineDocumentType(() => ({\n\tname: \"Page\",\n\tfilePathPattern: \"pages/**/*.mdx\",\n\tcontentType: \"mdx\",\n\tfields: {\n\t\ttitle: {\n\t\t\ttype: \"string\",\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: \"string\",\n\t\t},\n\t},\n\tcomputedFields,\n}));\n\nexport default makeSource({\n\tcontentDirPath: \"./content\",\n\tdocumentTypes: [Page, Project],\n\tmdx: {\n\t\tremarkPlugins: [remarkGfm],\n\t\trehypePlugins: [\n\t\t\trehypeSlug,\n\t\t\t[\n\t\t\t\trehypePrettyCode,\n\t\t\t\t{\n\t\t\t\t\ttheme: \"github-dark\",\n\t\t\t\t\tonVisitLine(node) {\n\t\t\t\t\t\t// Prevent lines from collapsing in `display: grid` mode, and allow empty\n\t\t\t\t\t\t// lines to be copy/pasted\n\t\t\t\t\t\tif (node.children.length === 0) {\n\t\t\t\t\t\t\tnode.children = [{ type: \"text\", value: \" \" }];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonVisitHighlightedLine(node) {\n\t\t\t\t\t\tnode.properties.className.push(\"line--highlighted\");\n\t\t\t\t\t},\n\t\t\t\t\tonVisitHighlightedWord(node) {\n\t\t\t\t\t\tnode.properties.className = [\"word--highlighted\"];\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\t[\n\t\t\t\trehypeAutolinkHeadings,\n\t\t\t\t{\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tclassName: [\"subheading-anchor\"],\n\t\t\t\t\t\tariaLabel: \"Link to section\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t],\n\t},\n});\n"],
|
||||||
|
"mappings": ";AAAA,SAAS,oBAAoB,kBAAkB;AAC/C,OAAO,eAAe;AACtB,OAAO,sBAAsB;AAC7B,OAAO,gBAAgB;AACvB,OAAO,4BAA4B;AAGnC,IAAM,iBAAiB;AAAA,EACtB,MAAM;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,IAAI,IAAI,KAAK;AAAA,EAChC;AAAA,EACA,MAAM;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,IAAI,KAAK,cAAc,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACtE;AACD;AAEO,IAAM,UAAU,mBAAmB,OAAO;AAAA,EAChD,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,aAAa;AAAA,EAEb,QAAQ;AAAA,IACP,WAAU;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EACA;AACD,EAAE;AAEK,IAAM,OAAO,mBAAmB,OAAO;AAAA,EAC7C,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,QAAQ;AAAA,IACP,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EACA;AACD,EAAE;AAEF,IAAO,8BAAQ,WAAW;AAAA,EACzB,gBAAgB;AAAA,EAChB,eAAe,CAAC,MAAM,OAAO;AAAA,EAC7B,KAAK;AAAA,IACJ,eAAe,CAAC,SAAS;AAAA,IACzB,eAAe;AAAA,MACd;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,OAAO;AAAA,UACP,YAAY,MAAM;AAGjB,gBAAI,KAAK,SAAS,WAAW,GAAG;AAC/B,mBAAK,WAAW,CAAC,EAAE,MAAM,QAAQ,OAAO,IAAI,CAAC;AAAA,YAC9C;AAAA,UACD;AAAA,UACA,uBAAuB,MAAM;AAC5B,iBAAK,WAAW,UAAU,KAAK,mBAAmB;AAAA,UACnD;AAAA,UACA,uBAAuB,MAAM;AAC5B,iBAAK,WAAW,YAAY,CAAC,mBAAmB;AAAA,UACjD;AAAA,QACD;AAAA,MACD;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,YAAY;AAAA,YACX,WAAW,CAAC,mBAAmB;AAAA,YAC/B,WAAW;AAAA,UACZ;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD,CAAC;",
|
||||||
|
"names": []
|
||||||
|
}
|
417
.contentlayer/.cache/v0.3.0/data-AAEZAM7W.json
Normal file
417
.contentlayer/.cache/v0.3.0/data-AAEZAM7W.json
Normal file
File diff suppressed because one or more lines are too long
417
.contentlayer/.cache/v0.3.0/data-RHAHPX7F.json
Normal file
417
.contentlayer/.cache/v0.3.0/data-RHAHPX7F.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -42,6 +42,9 @@ import projects__upstashReactUiMdx from "./projects__upstash-react-ui.mdx.json"
|
|||||||
import projects__upstashRedisMdx from "./projects__upstash-redis.mdx.json" assert {
|
import projects__upstashRedisMdx from "./projects__upstash-redis.mdx.json" assert {
|
||||||
type: "json",
|
type: "json",
|
||||||
};
|
};
|
||||||
|
import projects__upstashWebAnalyticsMdx from "./projects__upstash-web-analytics.mdx.json" assert {
|
||||||
|
type: "json",
|
||||||
|
};
|
||||||
|
|
||||||
export const allProjects = [
|
export const allProjects = [
|
||||||
projects__accessMdx,
|
projects__accessMdx,
|
||||||
@ -58,4 +61,5 @@ export const allProjects = [
|
|||||||
projects__upstashRatelimitMdx,
|
projects__upstashRatelimitMdx,
|
||||||
projects__upstashReactUiMdx,
|
projects__upstashReactUiMdx,
|
||||||
projects__upstashRedisMdx,
|
projects__upstashRedisMdx,
|
||||||
|
projects__upstashWebAnalyticsMdx,
|
||||||
];
|
];
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
.contentlayer/generated/types.d.ts
vendored
1
.contentlayer/generated/types.d.ts
vendored
@ -31,6 +31,7 @@ export type Project = {
|
|||||||
_id: string;
|
_id: string;
|
||||||
_raw: Local.RawDocumentData;
|
_raw: Local.RawDocumentData;
|
||||||
type: "Project";
|
type: "Project";
|
||||||
|
published?: boolean | undefined;
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description: string;
|
||||||
date?: IsoDateTimeString | undefined;
|
date?: IsoDateTimeString | undefined;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "dot-contentlayer",
|
"name": "dot-contentlayer",
|
||||||
"description": "This package is auto-generated by Contentlayer",
|
"description": "This package is auto-generated by Contentlayer",
|
||||||
"version": "0.0.0-KFUTZ636",
|
"version": "0.0.0-AAEZAM7W",
|
||||||
"exports": {
|
"exports": {
|
||||||
"./generated": {
|
"./generated": {
|
||||||
"import": "./generated/index.mjs"
|
"import": "./generated/index.mjs"
|
||||||
|
2
.env
Normal file
2
.env
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
UPSTASH_REDIS_REST_URL="https://eu2-leading-tortoise-32227.upstash.io"
|
||||||
|
UPSTASH_REDIS_REST_TOKEN="AX3jASQgNWE1ZWQ4ZWYtNTUwOC00NzQ3LWEwNjAtZmY4NzQwNzYwMWRiMDlkZTIyMmRiNWVhNDBhM2E2ZWYyZGZlYmQ4ZTk1Zjc="
|
@ -1,107 +0,0 @@
|
|||||||
"use client";
|
|
||||||
import { ArrowLeft } from "lucide-react";
|
|
||||||
import Link from "next/link";
|
|
||||||
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
||||||
import { usePathname } from "next/navigation";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
project: {
|
|
||||||
url?: string;
|
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
repository?: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Navigation: React.FC<Props> = ({ project }) => {
|
|
||||||
const pathname = usePathname();
|
|
||||||
const ref = useRef<HTMLElement>(null);
|
|
||||||
const [isIntersecting, setIntersecting] = useState(true);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!ref.current) return;
|
|
||||||
const observer = new IntersectionObserver(([entry]) =>
|
|
||||||
setIntersecting(entry.isIntersecting),
|
|
||||||
);
|
|
||||||
|
|
||||||
observer.observe(ref.current);
|
|
||||||
return () => observer.disconnect();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<header
|
|
||||||
ref={ref}
|
|
||||||
className="bg-gradient-to-tl from-black via-zinc-900 to-black"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
className={`fixed inset-x-0 top-0 z-50 backdrop-blur lg:backdrop-blur-none duration-200 border-b lg:bg-transparent ${
|
|
||||||
isIntersecting
|
|
||||||
? "bg-zinc-900/0 border-transparent"
|
|
||||||
: "bg-white/10 border-zinc-200 lg:border-transparent"
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
<div className="container flex flex-row-reverse items-center justify-between p-6 mx-auto">
|
|
||||||
<div className="flex justify-between gap-8">
|
|
||||||
<Link
|
|
||||||
target="_blank"
|
|
||||||
href="https://github.com/chronark/chronark.com"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
className={`duration-200 hover:font-medium ${
|
|
||||||
isIntersecting
|
|
||||||
? " text-zinc-400 hover:text-zinc-100"
|
|
||||||
: "text-zinc-600 hover:text-zinc-900"
|
|
||||||
} `}
|
|
||||||
>
|
|
||||||
GitHub
|
|
||||||
</span>
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Link
|
|
||||||
href="/projects"
|
|
||||||
className={`duration-200 hover:font-medium ${
|
|
||||||
isIntersecting
|
|
||||||
? " text-zinc-400 hover:text-zinc-100"
|
|
||||||
: "text-zinc-600 hover:text-zinc-900"
|
|
||||||
} `}
|
|
||||||
>
|
|
||||||
<ArrowLeft className="w-6 h-6 " />
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div className="relative px-6 lg:px-8">
|
|
||||||
<div className="max-w-3xl pt-20 pb-16 mx-auto sm:pt-48">
|
|
||||||
<div>
|
|
||||||
<h1 className="text-4xl font-bold uppercase text-zinc-100 sm:text-center sm:text-6xl font-display">
|
|
||||||
{project.title}
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center justify-center gap-4">
|
|
||||||
{project.url ? (
|
|
||||||
<Link
|
|
||||||
target="_blank"
|
|
||||||
className="px-4 py-2 font-semibold text-right duration-500 border-b border-transparent text-zinc-200 hover:border-zinc-100"
|
|
||||||
href={project.url}
|
|
||||||
>
|
|
||||||
Website
|
|
||||||
</Link>
|
|
||||||
) : null}
|
|
||||||
|
|
||||||
{project.repository ? (
|
|
||||||
<Link
|
|
||||||
target="_blank"
|
|
||||||
className="px-4 py-2 font-semibold text-left duration-500 border-b border-transparent text-zinc-200 hover:border-zinc-100"
|
|
||||||
href={`https://github.com/${project.repository}`}
|
|
||||||
>
|
|
||||||
Repository
|
|
||||||
</Link>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
);
|
|
||||||
};
|
|
43
app/components/card.tsx
Normal file
43
app/components/card.tsx
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
"use client";
|
||||||
|
import {
|
||||||
|
motion,
|
||||||
|
useMotionTemplate,
|
||||||
|
useMotionValue,
|
||||||
|
useSpring,
|
||||||
|
} from "framer-motion";
|
||||||
|
|
||||||
|
import { MouseEventHandler, PropsWithChildren } from "react";
|
||||||
|
|
||||||
|
export const Card: React.FC<PropsWithChildren> = ({ children }) => {
|
||||||
|
const mouseX = useSpring(0, { stiffness: 200, damping: 100 });
|
||||||
|
const mouseY = useSpring(0, { stiffness: 200, damping: 100 });
|
||||||
|
|
||||||
|
function onMouseMove({ currentTarget, clientX, clientY }: any) {
|
||||||
|
const { left, top } = currentTarget.getBoundingClientRect();
|
||||||
|
mouseX.set(clientX - left);
|
||||||
|
mouseY.set(clientY - top);
|
||||||
|
}
|
||||||
|
let maskImage = useMotionTemplate`radial-gradient(240px at ${mouseX}px ${mouseY}px, white, transparent)`;
|
||||||
|
let style = { maskImage, WebkitMaskImage: maskImage };
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
onMouseMove={onMouseMove}
|
||||||
|
className="overflow-hidden relative duration-700 border rounded-xl hover:bg-zinc-800/30 group md:gap-8 hover:border-zinc-400/50 border-zinc-600 "
|
||||||
|
>
|
||||||
|
<div className="pointer-events-none">
|
||||||
|
<div className="absolute inset-0 z-0 transition duration-1000 [mask-image:linear-gradient(black,transparent)]" />
|
||||||
|
<motion.div
|
||||||
|
className="absolute inset-0 z-10 bg-gradient-to-br opacity-100 via-zinc-100/10 transition duration-1000 group-hover:opacity-50 "
|
||||||
|
style={style}
|
||||||
|
/>
|
||||||
|
<motion.div
|
||||||
|
className="absolute inset-0 z-10 opacity-0 mix-blend-overlay transition duration-1000 group-hover:opacity-100"
|
||||||
|
style={style}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
@ -20,7 +20,7 @@ const components = {
|
|||||||
h2: ({ className, ...props }) => (
|
h2: ({ className, ...props }) => (
|
||||||
<h2
|
<h2
|
||||||
className={clsx(
|
className={clsx(
|
||||||
"mt-10 scroll-m-20 border-b border-b-zinc-200 pb-1 text-3xl font-semibold tracking-tight first:mt-0",
|
"mt-10 scroll-m-20 border-b border-b-zinc-800 pb-1 text-3xl font-semibold tracking-tight first:mt-0",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
import { Github, Mail, Twitter } from "lucide-react";
|
import { Github, Mail, Twitter } from "lucide-react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { Navigation } from "../components/nav";
|
import { Navigation } from "../components/nav";
|
||||||
|
import { Card } from "../components/card";
|
||||||
|
|
||||||
const socials = [
|
const socials = [
|
||||||
{
|
{
|
||||||
@ -25,26 +26,17 @@ const socials = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export default function Example() {
|
export default function Example() {
|
||||||
async function submit() {
|
|
||||||
const res = await fetch("/api/contact", {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify({
|
|
||||||
name: "John Doe",
|
|
||||||
email: "",
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className=" bg-gradient-to-tl from-zinc-900/0 via-zinc-900 to-zinc-900/0">
|
<div className=" bg-gradient-to-tl from-zinc-900/0 via-zinc-900 to-zinc-900/0">
|
||||||
<Navigation />
|
<Navigation />
|
||||||
<div className="container flex items-center justify-center min-h-screen px-4 mx-auto">
|
<div className="container flex items-center justify-center min-h-screen px-4 mx-auto">
|
||||||
<div className="grid w-full grid-cols-1 gap-8 mx-auto mt-32 sm:mt-0 sm:grid-cols-3 lg:gap-16">
|
<div className="grid w-full grid-cols-1 gap-8 mx-auto mt-32 sm:mt-0 sm:grid-cols-3 lg:gap-16">
|
||||||
{socials.map((s) => (
|
{socials.map((s) => (
|
||||||
|
<Card>
|
||||||
<Link
|
<Link
|
||||||
key={s.href}
|
href={s.href}
|
||||||
href="https://twitter.com/chronark_"
|
target="_blank"
|
||||||
className="relative flex flex-col items-center gap-4 p-8 pb-16 duration-700 border rounded-xl hover:bg-zinc-800/30 group md:gap-8 md:py-24 hover:border-zinc-600 lg:pb-48 border-zinc-700 md:p-16"
|
className="p-4 relative flex flex-col items-center gap-4 duration-700 group md:gap-8 md:py-24 lg:pb-48 md:p-16"
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
className="absolute w-px h-2/3 bg-gradient-to-b from-zinc-500 via-zinc-500/50 to-transparent"
|
className="absolute w-px h-2/3 bg-gradient-to-b from-zinc-500 via-zinc-500/50 to-transparent"
|
||||||
@ -62,6 +54,7 @@ export default function Example() {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</Link>
|
</Link>
|
||||||
|
</Card>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,44 +1,47 @@
|
|||||||
import Image from "next/image";
|
|
||||||
import Link from "next/link";
|
|
||||||
import "../global.css";
|
import "../global.css";
|
||||||
import { Inter, Hanken_Grotesk } from "@next/font/google";
|
import { Inter, Hanken_Grotesk } from "@next/font/google";
|
||||||
// import font from "@next/font/local";
|
import { Metadata } from "next";
|
||||||
// const pangea = font({
|
|
||||||
// src: [
|
|
||||||
// {
|
|
||||||
// path: "../public/fonts/PangeaAfrikanTrial-Light.woff2",
|
|
||||||
// weight: "100",
|
|
||||||
// style: "normal",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: "../public/fonts/PangeaAfrikanTrial-Regular.woff2",
|
|
||||||
// weight: "300",
|
|
||||||
// style: "normal",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: "../public/fonts/PangeaAfrikanTrial-Medium.woff2",
|
|
||||||
// weight: "500",
|
|
||||||
// style: "normal",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: "../public/fonts/PangeaAfrikanTrial-SemiBold.woff2",
|
|
||||||
// weight: "700",
|
|
||||||
// style: "normal",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: "../public/fonts/PangeaAfrikanTrial-Bold.woff2",
|
|
||||||
// weight: "900",
|
|
||||||
// style: "normal",
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// variable: "--font-pangea",
|
|
||||||
// });
|
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata: Metadata = {
|
||||||
|
title: {
|
||||||
|
default: "chronark.com",
|
||||||
|
template: "%s | chronark.com",
|
||||||
|
},
|
||||||
|
description: "software engineer at Upstash and founder of planetfall.io",
|
||||||
|
openGraph: {
|
||||||
title: "chronark.com",
|
title: "chronark.com",
|
||||||
description: "The personal website of chronark",
|
description: "software engineer at Upstash and founder of planetfall.io",
|
||||||
|
url: "https://chronark.com",
|
||||||
|
siteName: "chronark.com",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: "https://chronark.com/og.png",
|
||||||
|
width: 1920,
|
||||||
|
height: 1080,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
locale: "en-US",
|
||||||
|
type: "website",
|
||||||
|
},
|
||||||
|
robots: {
|
||||||
|
index: true,
|
||||||
|
follow: true,
|
||||||
|
googleBot: {
|
||||||
|
index: true,
|
||||||
|
follow: true,
|
||||||
|
"max-video-preview": -1,
|
||||||
|
"max-image-preview": "large",
|
||||||
|
"max-snippet": -1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
title: "Chronark",
|
||||||
|
card: "summary_large_image",
|
||||||
|
},
|
||||||
|
icons: {
|
||||||
|
shortcut: "/favicon.png",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const inter = Inter({
|
const inter = Inter({
|
||||||
subsets: ["latin"],
|
subsets: ["latin"],
|
||||||
variable: "--font-inter",
|
variable: "--font-inter",
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
import Image from "next/image";
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
const navigation = [
|
const navigation = [
|
||||||
// { name: "About", href: "/about" },
|
|
||||||
{ name: "Projects", href: "/projects" },
|
{ name: "Projects", href: "/projects" },
|
||||||
// { name: "Blog", href: "/blog" },
|
|
||||||
{ name: "Contact", href: "/contact" },
|
{ name: "Contact", href: "/contact" },
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -33,7 +30,7 @@ export default function Home() {
|
|||||||
<div className="hidden w-screen h-px animate-glow md:block animate-fade-right bg-gradient-to-r from-zinc-300/0 via-zinc-300/50 to-zinc-300/0" />
|
<div className="hidden w-screen h-px animate-glow md:block animate-fade-right bg-gradient-to-r from-zinc-300/0 via-zinc-300/50 to-zinc-300/0" />
|
||||||
<div className="my-16 text-center animate-fade-in">
|
<div className="my-16 text-center animate-fade-in">
|
||||||
<h2 className="text-sm text-zinc-500 ">
|
<h2 className="text-sm text-zinc-500 ">
|
||||||
Hi, I'm building serverless and open source solutions at{" "}
|
Hi, i'm building serverless and open source solutions at{" "}
|
||||||
<Link
|
<Link
|
||||||
href="https://upstash.com"
|
href="https://upstash.com"
|
||||||
className="underline duration-500 hover:text-zinc-300"
|
className="underline duration-500 hover:text-zinc-300"
|
||||||
@ -42,7 +39,7 @@ export default function Home() {
|
|||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
and{" "}
|
and working on my startup{" "}
|
||||||
<Link
|
<Link
|
||||||
href="https://planetfall.io"
|
href="https://planetfall.io"
|
||||||
className="underline duration-500 hover:text-zinc-300"
|
className="underline duration-500 hover:text-zinc-300"
|
||||||
|
113
app/projects/[slug]/header.tsx
Normal file
113
app/projects/[slug]/header.tsx
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
"use client";
|
||||||
|
import { ArrowLeft, Github, Twitter } from "lucide-react";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, { useEffect, useMemo, useRef, useState } from "react";
|
||||||
|
import { usePathname } from "next/navigation";
|
||||||
|
import Balancer from "react-wrap-balancer";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
project: {
|
||||||
|
url?: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
repository?: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export const Header: React.FC<Props> = ({ project }) => {
|
||||||
|
const pathname = usePathname();
|
||||||
|
const ref = useRef<HTMLElement>(null);
|
||||||
|
const [isIntersecting, setIntersecting] = useState(true);
|
||||||
|
|
||||||
|
const links: { label: string; href: string }[] = [];
|
||||||
|
if (project.repository) {
|
||||||
|
links.push({
|
||||||
|
label: "GitHub",
|
||||||
|
href: `https://github.com/${project.repository}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (project.url) {
|
||||||
|
links.push({
|
||||||
|
label: "Live",
|
||||||
|
href: project.url,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
useEffect(() => {
|
||||||
|
if (!ref.current) return;
|
||||||
|
const observer = new IntersectionObserver(([entry]) =>
|
||||||
|
setIntersecting(entry.isIntersecting),
|
||||||
|
);
|
||||||
|
|
||||||
|
observer.observe(ref.current);
|
||||||
|
return () => observer.disconnect();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<header
|
||||||
|
ref={ref}
|
||||||
|
className="relative isolate overflow-hidden bg-gradient-to-tl from-black via-zinc-900 to-black"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className={`fixed inset-x-0 top-0 z-50 backdrop-blur lg:backdrop-blur-none duration-200 border-b lg:bg-transparent ${
|
||||||
|
isIntersecting
|
||||||
|
? "bg-zinc-900/0 border-transparent"
|
||||||
|
: "bg-white/10 border-zinc-200 lg:border-transparent"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
<div className="container flex flex-row-reverse items-center justify-between p-6 mx-auto">
|
||||||
|
<div className="flex justify-between gap-8">
|
||||||
|
<Link target="_blank" href="https://twitter/chronark_">
|
||||||
|
<Twitter
|
||||||
|
className={`w-6 h-6 duration-200 hover:font-medium ${
|
||||||
|
isIntersecting
|
||||||
|
? " text-zinc-400 hover:text-zinc-100"
|
||||||
|
: "text-zinc-600 hover:text-zinc-900"
|
||||||
|
} `}
|
||||||
|
/>
|
||||||
|
</Link>
|
||||||
|
<Link target="_blank" href="https://github.com/chronark">
|
||||||
|
<Github
|
||||||
|
className={`w-6 h-6 duration-200 hover:font-medium ${
|
||||||
|
isIntersecting
|
||||||
|
? " text-zinc-400 hover:text-zinc-100"
|
||||||
|
: "text-zinc-600 hover:text-zinc-900"
|
||||||
|
} `}
|
||||||
|
/>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Link
|
||||||
|
href="/projects"
|
||||||
|
className={`duration-200 hover:font-medium ${
|
||||||
|
isIntersecting
|
||||||
|
? " text-zinc-400 hover:text-zinc-100"
|
||||||
|
: "text-zinc-600 hover:text-zinc-900"
|
||||||
|
} `}
|
||||||
|
>
|
||||||
|
<ArrowLeft className="w-6 h-6 " />
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="container mx-auto relative isolate overflow-hidden py-24 sm:py-32">
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8 text-center flex flex-col items-center">
|
||||||
|
<div className="mx-auto max-w-2xl lg:mx-0">
|
||||||
|
<h1 className="text-4xl font-bold tracking-tight text-white sm:text-6xl">
|
||||||
|
<Balancer>{project.title}</Balancer>
|
||||||
|
</h1>
|
||||||
|
<p className="mt-6 text-lg leading-8 text-zinc-300">
|
||||||
|
{project.description}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="mx-auto mt-10 max-w-2xl lg:mx-0 lg:max-w-none">
|
||||||
|
<div className="grid grid-cols-1 gap-y-6 gap-x-8 text-base font-semibold leading-7 text-white sm:grid-cols-2 md:flex lg:gap-x-10">
|
||||||
|
{links.map((link) => (
|
||||||
|
<Link target="_blank" key={link.label} href={link.href}>
|
||||||
|
{link.label} <span aria-hidden="true">→</span>
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
};
|
@ -1,24 +1,24 @@
|
|||||||
import { notFound } from "next/navigation";
|
import { notFound } from "next/navigation";
|
||||||
import { allProjects } from "contentlayer/generated";
|
import { allProjects } from "contentlayer/generated";
|
||||||
import { Mdx } from "@/app/components/mdx";
|
import { Mdx } from "@/app/components/mdx";
|
||||||
import { Navigation } from "@/app/components/article-nav";
|
import { Header } from "./header";
|
||||||
import "./mdx.css";
|
import "./mdx.css";
|
||||||
|
|
||||||
interface PostPageProps {
|
type Props = {
|
||||||
params: {
|
params: {
|
||||||
slug: string;
|
slug: string;
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|
||||||
export async function generateStaticParams(): Promise<
|
export async function generateStaticParams(): Promise<Props["params"][]> {
|
||||||
PostPageProps["params"][]
|
return allProjects
|
||||||
> {
|
.filter((p) => p.published)
|
||||||
return allProjects.map((p) => ({
|
.map((p) => ({
|
||||||
slug: p.slug,
|
slug: p.slug,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function PostPage({ params }: PostPageProps) {
|
export default async function PostPage({ params }: Props) {
|
||||||
const slug = params?.slug;
|
const slug = params?.slug;
|
||||||
const project = allProjects.find((project) => project.slug === slug);
|
const project = allProjects.find((project) => project.slug === slug);
|
||||||
|
|
||||||
@ -27,11 +27,11 @@ export default async function PostPage({ params }: PostPageProps) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-white ">
|
<div className="min-h-screen">
|
||||||
<Navigation project={project} />
|
<Header project={project} />
|
||||||
|
|
||||||
<main className=" bg-zinc-50">
|
<main className="bg-zinc-50">
|
||||||
<article className="px-4 py-12 mx-auto prose sm:prose-sm md:prose-md lg:prose-lg text-zinc-600 ">
|
<article className="px-4 py-12 mx-auto prose prose-zinc">
|
||||||
<Mdx code={project.body.code} />
|
<Mdx code={project.body.code} />
|
||||||
</article>
|
</article>
|
||||||
</main>
|
</main>
|
||||||
|
27
app/projects/article.tsx
Normal file
27
app/projects/article.tsx
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import type { Project } from "@/.contentlayer/generated";
|
||||||
|
import Link from "next/link";
|
||||||
|
export const Article = ({ project }: { project: Project }) => {
|
||||||
|
return (
|
||||||
|
<Link href={`/projects/${project.slug}`}>
|
||||||
|
<article className="p-4 md:p-8">
|
||||||
|
<span className="text-xs duration-1000 text-zinc-200 group-hover:text-white group-hover:border-zinc-200 drop-shadow-orange">
|
||||||
|
{project.date ? (
|
||||||
|
<time dateTime={new Date(project.date).toISOString()}>
|
||||||
|
{Intl.DateTimeFormat(undefined, { dateStyle: "medium" }).format(
|
||||||
|
new Date(project.date),
|
||||||
|
)}
|
||||||
|
</time>
|
||||||
|
) : (
|
||||||
|
<span>SOON</span>
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
<h2 className="z-20 text-xl font-medium duration-1000 lg:text-3xl text-zinc-200 group-hover:text-white font-display">
|
||||||
|
{project.title}
|
||||||
|
</h2>
|
||||||
|
<p className="z-20 mt-4 text-sm duration-1000 text-zinc-400 group-hover:text-zinc-200">
|
||||||
|
{project.description}
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
};
|
@ -1,74 +0,0 @@
|
|||||||
"use client";
|
|
||||||
import {
|
|
||||||
motion,
|
|
||||||
MotionValue,
|
|
||||||
useMotionTemplate,
|
|
||||||
useMotionValue,
|
|
||||||
} from "framer-motion";
|
|
||||||
|
|
||||||
import type { Project } from "contentlayer/generated";
|
|
||||||
import Link from "next/link";
|
|
||||||
|
|
||||||
const Flashlight: React.FC<{
|
|
||||||
x: MotionValue<number>;
|
|
||||||
y: MotionValue<number>;
|
|
||||||
}> = ({ x, y }) => {
|
|
||||||
let maskImage = useMotionTemplate`radial-gradient(320px at ${x}px ${y}px, white, transparent)`;
|
|
||||||
let style = { maskImage, WebkitMaskImage: maskImage };
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="pointer-events-none">
|
|
||||||
<div className="absolute inset-0 z-0 transition duration-300 [mask-image:linear-gradient(black,transparent)] group-hover:opacity-50" />
|
|
||||||
<motion.div
|
|
||||||
className="absolute inset-0 z-10 bg-gradient-to-br opacity-100 via-zinc-100/10 transition duration-1000 group-hover:opacity-50 "
|
|
||||||
style={style}
|
|
||||||
/>
|
|
||||||
<motion.div
|
|
||||||
className="absolute inset-0 z-10 opacity-0 mix-blend-overlay transition duration-1000 group-hover:opacity-100"
|
|
||||||
style={style}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Card: React.FC<{ project: Project }> = ({ project }) => {
|
|
||||||
const mouseX = useMotionValue(0); //randomBetween(rect?.left, rect?.right));
|
|
||||||
const mouseY = useMotionValue(0); //randomBetween(rect?.top, rect?.bottom));
|
|
||||||
|
|
||||||
function onMouseMove({ currentTarget, clientX, clientY }: any) {
|
|
||||||
const { left, top } = currentTarget.getBoundingClientRect();
|
|
||||||
mouseX.set(clientX - left);
|
|
||||||
mouseY.set(clientY - top);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Link
|
|
||||||
key={project._id}
|
|
||||||
onMouseMove={onMouseMove}
|
|
||||||
href={`/projects/${project.slug}`}
|
|
||||||
// className="group relative flex rounded-2xl bg-zinc-50 transition-shadow hover:shadow-md hover:shadow-zinc-900/5 dark:bg-white/2.5 dark:hover:shadow-black/5"
|
|
||||||
|
|
||||||
className="overflow-hidden relative p-4 duration-700 border rounded-xl hover:bg-zinc-800/30 group md:gap-8 hover:border-zinc-600 border-zinc-600 md:p-8"
|
|
||||||
>
|
|
||||||
<Flashlight x={mouseX} y={mouseY} />
|
|
||||||
|
|
||||||
<span className="text-xs duration-1000 text-zinc-200 group-hover:text-white group-hover:border-zinc-200 drop-shadow-orange">
|
|
||||||
{project.date ? (
|
|
||||||
<time dateTime={new Date(project.date).toISOString()}>
|
|
||||||
{Intl.DateTimeFormat(undefined, { dateStyle: "medium" }).format(
|
|
||||||
new Date(project.date),
|
|
||||||
)}
|
|
||||||
</time>
|
|
||||||
) : (
|
|
||||||
<span>SOON</span>
|
|
||||||
)}
|
|
||||||
</span>
|
|
||||||
<h2 className="z-20 text-xl font-medium duration-1000 lg:text-3xl text-zinc-200 group-hover:text-white font-display">
|
|
||||||
{project.title}
|
|
||||||
</h2>
|
|
||||||
<p className="z-20 mt-4 text-sm duration-1000 text-zinc-400 group-hover:text-zinc-200">
|
|
||||||
{project.description}
|
|
||||||
</p>
|
|
||||||
</Link>
|
|
||||||
);
|
|
||||||
};
|
|
@ -2,7 +2,8 @@ import Link from "next/link";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { allProjects } from "contentlayer/generated";
|
import { allProjects } from "contentlayer/generated";
|
||||||
import { Navigation } from "../components/nav";
|
import { Navigation } from "../components/nav";
|
||||||
import { Card } from "./card";
|
import { Card } from "../components/card";
|
||||||
|
import { Article } from "./article";
|
||||||
|
|
||||||
export default function ProjectsPage() {
|
export default function ProjectsPage() {
|
||||||
const featured = allProjects.find(
|
const featured = allProjects.find(
|
||||||
@ -11,6 +12,7 @@ export default function ProjectsPage() {
|
|||||||
const top2 = allProjects.find((project) => project.slug === "envshare")!;
|
const top2 = allProjects.find((project) => project.slug === "envshare")!;
|
||||||
const top3 = allProjects.find((project) => project.slug === "qstash")!;
|
const top3 = allProjects.find((project) => project.slug === "qstash")!;
|
||||||
const sorted = allProjects
|
const sorted = allProjects
|
||||||
|
.filter((p) => p.published)
|
||||||
.filter(
|
.filter(
|
||||||
(project) =>
|
(project) =>
|
||||||
project.slug !== featured.slug &&
|
project.slug !== featured.slug &&
|
||||||
@ -24,7 +26,7 @@ export default function ProjectsPage() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="relative">
|
<div className="relative pb-16">
|
||||||
<Navigation />
|
<Navigation />
|
||||||
<div className="px-6 pt-16 mx-auto space-y-8 max-w-7xl lg:px-8 md:space-y-16 md:pt-24 lg:pt-32">
|
<div className="px-6 pt-16 mx-auto space-y-8 max-w-7xl lg:px-8 md:space-y-16 md:pt-24 lg:pt-32">
|
||||||
<div className="max-w-2xl mx-auto lg:mx-0">
|
<div className="max-w-2xl mx-auto lg:mx-0">
|
||||||
@ -38,7 +40,9 @@ export default function ProjectsPage() {
|
|||||||
<div className="w-full h-px bg-zinc-800" />
|
<div className="w-full h-px bg-zinc-800" />
|
||||||
|
|
||||||
<div className="grid grid-cols-1 gap-8 mx-auto lg:grid-cols-2 ">
|
<div className="grid grid-cols-1 gap-8 mx-auto lg:grid-cols-2 ">
|
||||||
<article className="w-full max-w-2xl mx-auto lg:mx-0 lg:max-w-lg">
|
<Card>
|
||||||
|
<Link href={`/projects/${featured.slug}`}>
|
||||||
|
<article className="relative h-full w-full max-w-2xl mx-auto lg:mx-0 lg:max-w-lg p-4 md:p-8">
|
||||||
<div className="text-xs text-zinc-100">
|
<div className="text-xs text-zinc-100">
|
||||||
{featured.date ? (
|
{featured.date ? (
|
||||||
<time dateTime={new Date(featured.date).toISOString()}>
|
<time dateTime={new Date(featured.date).toISOString()}>
|
||||||
@ -59,7 +63,7 @@ export default function ProjectsPage() {
|
|||||||
<p className="mt-4 leading-8 duration-150 text-zinc-400 group-hover:text-zinc-300">
|
<p className="mt-4 leading-8 duration-150 text-zinc-400 group-hover:text-zinc-300">
|
||||||
{featured.description}
|
{featured.description}
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-4">
|
<div className="absolute bottom-4 md:bottom-8">
|
||||||
<Link
|
<Link
|
||||||
className="text-zinc-200 hover:text-zinc-50"
|
className="text-zinc-200 hover:text-zinc-50"
|
||||||
href={`/projects/${featured.slug}`}
|
href={`/projects/${featured.slug}`}
|
||||||
@ -68,9 +72,14 @@ export default function ProjectsPage() {
|
|||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
</Link>
|
||||||
|
</Card>
|
||||||
|
|
||||||
<div className="flex flex-col w-full max-w-2xl gap-8 pt-12 mx-auto border-t border-gray-900/10 sm:pt-16 lg:mx-0 lg:max-w-none lg:border-t-0 lg:pt-0">
|
<div className="flex flex-col w-full max-w-2xl gap-8 pt-12 mx-auto border-t border-gray-900/10 sm:pt-16 lg:mx-0 lg:max-w-none lg:border-t-0 lg:pt-0">
|
||||||
{[top2, top3].map((project) => (
|
{[top2, top3].map((project) => (
|
||||||
<Card key={project.slug} project={project} />
|
<Card key={project.slug}>
|
||||||
|
<Article project={project} />
|
||||||
|
</Card>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -81,21 +90,27 @@ export default function ProjectsPage() {
|
|||||||
{sorted
|
{sorted
|
||||||
.filter((_, i) => i % 3 === 0)
|
.filter((_, i) => i % 3 === 0)
|
||||||
.map((project) => (
|
.map((project) => (
|
||||||
<Card key={project.slug} project={project} />
|
<Card key={project.slug}>
|
||||||
|
<Article project={project} />
|
||||||
|
</Card>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid grid-cols-1 gap-4">
|
<div className="grid grid-cols-1 gap-4">
|
||||||
{sorted
|
{sorted
|
||||||
.filter((_, i) => i % 3 === 1)
|
.filter((_, i) => i % 3 === 1)
|
||||||
.map((project) => (
|
.map((project) => (
|
||||||
<Card key={project.slug} project={project} />
|
<Card key={project.slug}>
|
||||||
|
<Article project={project} />
|
||||||
|
</Card>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid grid-cols-1 gap-4">
|
<div className="grid grid-cols-1 gap-4">
|
||||||
{sorted
|
{sorted
|
||||||
.filter((_, i) => i % 3 === 2)
|
.filter((_, i) => i % 3 === 2)
|
||||||
.map((project) => (
|
.map((project) => (
|
||||||
<Card key={project.slug} project={project} />
|
<Card key={project.slug}>
|
||||||
|
<Article project={project} />
|
||||||
|
</Card>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,6 +3,7 @@ title: "@chronark/access"
|
|||||||
description: A minimal library for access control. It is designed to be used together with opaque access tokens by providing a simple interface to define roles with different access permissions and verifying requests to resources.
|
description: A minimal library for access control. It is designed to be used together with opaque access tokens by providing a simple interface to define roles with different access permissions and verifying requests to resources.
|
||||||
repository: chronark/access
|
repository: chronark/access
|
||||||
date: "2022-11-13"
|
date: "2022-11-13"
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
A minimal library for access control. It is designed to be used together with opaque access tokens by providing a simple interface to define roles with different access permissions and verifying requests to resources.
|
A minimal library for access control. It is designed to be used together with opaque access tokens by providing a simple interface to define roles with different access permissions and verifying requests to resources.
|
||||||
|
@ -4,7 +4,7 @@ description: EnvShare is a simple tool to share environment variables securely.
|
|||||||
date: "2023-01-16"
|
date: "2023-01-16"
|
||||||
url: https://envshare.dev
|
url: https://envshare.dev
|
||||||
repository: chronark/envshare
|
repository: chronark/envshare
|
||||||
|
published: true
|
||||||
---
|
---
|
||||||
|
|
||||||
EnvShare is a simple tool to share environment variables securely. It uses
|
EnvShare is a simple tool to share environment variables securely. It uses
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
---
|
---
|
||||||
title: planetfall.io
|
title: planetfall.io
|
||||||
description: I'm building a SAAS, that provides global latency monitoring for your APIs and websites from edge locations around the world. Have you ever wondered how fast your API is in any part of the world? Planetfall allows you to find out and monitor it continuously.
|
description: I'm building a SAAS providing global latency monitoring for your APIs and websites from edge locations around the world. Have you ever wondered how fast your API is in any part of the world? Planetfall allows you to find out and monitor it continuously.
|
||||||
date: "2023-04-01"
|
date: "2023-04-01"
|
||||||
url: https://planetfall.io
|
url: https://planetfall.io
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
I'm building a SAAS, that provides global latency monitoring for your APIs and websites from edge locations around the world. Have you ever wondered how fast your API is in any part of the world? Planetfall allows you to find out and monitor it continuously.
|
Planetfall is a SaaS platform that provides global latency monitoring and synthetic monitoring for APIs. With over 60 regions to monitor from, customers can gain insights into the true performance of their API by checking latency from around the world.
|
||||||
|
Planetfall offers custom timeouts, threshold notifications, and real-time alerts for potential performance issues. Additionally, customers can create custom status pages to share with their customers, which can display availability and latency for every region. Planetfall offers a free tier that includes 100k checks per month and scales as customers grow. Overall, Planetfall helps customers stay in control of their API's performance, improve communication with their customers, and build trust.
|
@ -3,6 +3,7 @@ title: QStash
|
|||||||
description: QStash is a fully managed serverless queue and messaging service designed for the serverless era.
|
description: QStash is a fully managed serverless queue and messaging service designed for the serverless era.
|
||||||
date: "2022-07-18"
|
date: "2022-07-18"
|
||||||
url: https://upstash.com/qstash
|
url: https://upstash.com/qstash
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: A Terraform provider for Vercel. It has been deprecated it when Ver
|
|||||||
date: "2021-03-16"
|
date: "2021-03-16"
|
||||||
repository: chronark/terraform-provider-vercel
|
repository: chronark/terraform-provider-vercel
|
||||||
url: https://registry.terraform.io/providers/chronark/vercel/latest
|
url: https://registry.terraform.io/providers/chronark/vercel/latest
|
||||||
|
published: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ title: Upstash Auth Analytics
|
|||||||
description: A library to record and analyse Auth.js user behaviour
|
description: A library to record and analyse Auth.js user behaviour
|
||||||
url: https://console.upstash.com/ratelimit
|
url: https://console.upstash.com/ratelimit
|
||||||
repository: upstash/auth-analytics
|
repository: upstash/auth-analytics
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
TODO:
|
TODO:
|
@ -4,6 +4,7 @@ description: A CLI to provision and manage Upstash resources, including Redis an
|
|||||||
date: "2022-05-16"
|
date: "2022-05-16"
|
||||||
url: https://upstash.com/cli
|
url: https://upstash.com/cli
|
||||||
repository: upstash/cli
|
repository: upstash/cli
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: Low level utilities to build analytics tools on top of Redis.
|
|||||||
date: "2023-02-13"
|
date: "2023-02-13"
|
||||||
url: https://console.upstash.com/ratelimit
|
url: https://console.upstash.com/ratelimit
|
||||||
repository: upstash/core-analytics
|
repository: upstash/core-analytics
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: Featues flags for your edge functions.
|
|||||||
date: "2022-12-12"
|
date: "2022-12-12"
|
||||||
url: https://upstash.com/edge-flags
|
url: https://upstash.com/edge-flags
|
||||||
repository: upstash/edge-flags
|
repository: upstash/edge-flags
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: A fully typed Kafka client built for Upstash Kafka and HTTP, perfec
|
|||||||
date: "2022-01-08"
|
date: "2022-01-08"
|
||||||
url: https://upstash.com/kafka
|
url: https://upstash.com/kafka
|
||||||
repository: upstash/upstash-kafka
|
repository: upstash/upstash-kafka
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: A typescript client and consumer for QStash.
|
|||||||
date: "2022-07-18"
|
date: "2022-07-18"
|
||||||
url: https://upstash.com/qstash
|
url: https://upstash.com/qstash
|
||||||
repository: upstash/sdk-qstash-ts
|
repository: upstash/sdk-qstash-ts
|
||||||
|
published: true
|
||||||
---
|
---
|
||||||
|
|
||||||
TODO:
|
TODO:
|
@ -4,6 +4,7 @@ description: Near realtime analytics for your ratelimits. Integrated into the @u
|
|||||||
repository: upstash/ratelimit
|
repository: upstash/ratelimit
|
||||||
date: "2023-03-01"
|
date: "2023-03-01"
|
||||||
website: https://console.upstash.com/ratelimit
|
website: https://console.upstash.com/ratelimit
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: Ratelimiting library for serverless and edge runtimes. Built on top
|
|||||||
date: "2022-06-06"
|
date: "2022-06-06"
|
||||||
url: https://upstash.com/ratelimit
|
url: https://upstash.com/ratelimit
|
||||||
repository: upstash/ratelimit
|
repository: upstash/ratelimit
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: A CLI React component to interact with Upstash Redis databases.
|
|||||||
date: "2023-02-05"
|
date: "2023-02-05"
|
||||||
url: https://upstash.com
|
url: https://upstash.com
|
||||||
repository: upstash/react-ui
|
repository: upstash/react-ui
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ description: A fully typed Redis client built for Upstash Redis and HTTP, perfec
|
|||||||
date: "2022-03-14"
|
date: "2022-03-14"
|
||||||
url: https://upstash.com/redis
|
url: https://upstash.com/redis
|
||||||
repository: upstash/upstash-redis
|
repository: upstash/upstash-redis
|
||||||
|
published: true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
title: Upstash Web Analytics
|
title: Upstash Web Analytics
|
||||||
description: A library to record and analyse web page traffic and user behaviour
|
description: A library to record and analyse web page traffic and user behaviour
|
||||||
repository: upstash/web-analytics
|
repository: upstash/web-analytics
|
||||||
|
published: true
|
||||||
---
|
---
|
||||||
|
|
||||||
TODO:
|
TODO:
|
@ -22,6 +22,9 @@ export const Project = defineDocumentType(() => ({
|
|||||||
contentType: "mdx",
|
contentType: "mdx",
|
||||||
|
|
||||||
fields: {
|
fields: {
|
||||||
|
published: {
|
||||||
|
type: "boolean",
|
||||||
|
},
|
||||||
title: {
|
title: {
|
||||||
type: "string",
|
type: "string",
|
||||||
required: true,
|
required: true,
|
||||||
|
41
middleware.ts
Normal file
41
middleware.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import { Redis } from "@upstash/redis";
|
||||||
|
import { NextRequest, NextResponse, NextFetchEvent } from "next/server";
|
||||||
|
|
||||||
|
const redis = Redis.fromEnv();
|
||||||
|
export const config = {
|
||||||
|
runtime: "experimental-edge",
|
||||||
|
matcher: "/projects/:slug*",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async function middleware(
|
||||||
|
req: NextRequest,
|
||||||
|
evt: NextFetchEvent,
|
||||||
|
): Promise<NextResponse> {
|
||||||
|
const path = new URL(req.url).pathname;
|
||||||
|
console.log({ path });
|
||||||
|
|
||||||
|
evt.waitUntil(incrementPageView(req.ip, path));
|
||||||
|
|
||||||
|
return NextResponse.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function incrementPageView(
|
||||||
|
identifier: string | undefined,
|
||||||
|
pathname: string,
|
||||||
|
): Promise<void> {
|
||||||
|
if (identifier) {
|
||||||
|
// deduplicate the ip for each slug
|
||||||
|
const isNew = await redis.set(
|
||||||
|
["deduplicate", identifier, pathname].join(":"),
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
nx: true,
|
||||||
|
ex: 24 * 60 * 60,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (!isNew) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await redis.incr(["pageviews", pathname].join(":"));
|
||||||
|
}
|
10
package.json
10
package.json
@ -11,18 +11,20 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@next/font": "^13.2.1",
|
"@next/font": "^13.2.1",
|
||||||
"@next/mdx": "^13.2.1",
|
"@next/mdx": "^13.2.1",
|
||||||
"@types/node": "18.15.5",
|
"@types/node": "18.15.10",
|
||||||
"@types/react": "18.0.28",
|
"@types/react": "18.0.29",
|
||||||
"@types/react-dom": "18.0.11",
|
"@types/react-dom": "18.0.11",
|
||||||
|
"@upstash/redis": "^1.20.1",
|
||||||
"@vercel/analytics": "^0.1.10",
|
"@vercel/analytics": "^0.1.10",
|
||||||
"contentlayer": "^0.3.0",
|
"contentlayer": "^0.3.0",
|
||||||
"framer-motion": "^10.8.5",
|
"framer-motion": "^10.9.1",
|
||||||
"lucide-react": "^0.127.0",
|
"lucide-react": "^0.127.0",
|
||||||
"markdown-wasm": "^1.2.0",
|
"markdown-wasm": "^1.2.0",
|
||||||
"next": "13.2.4",
|
"next": "13.2.4",
|
||||||
"next-contentlayer": "^0.3.0",
|
"next-contentlayer": "^0.3.0",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
|
"react-wrap-balancer": "^0.4.0",
|
||||||
"rehype-autolink-headings": "^6.1.1",
|
"rehype-autolink-headings": "^6.1.1",
|
||||||
"rehype-pretty-code": "^0.9.4",
|
"rehype-pretty-code": "^0.9.4",
|
||||||
"rehype-slug": "^5.1.0",
|
"rehype-slug": "^5.1.0",
|
||||||
@ -35,7 +37,7 @@
|
|||||||
"@tailwindcss/typography": "^0.5.9",
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.13",
|
||||||
"postcss": "^8.4.21",
|
"postcss": "^8.4.21",
|
||||||
"postcss-nesting": "^11.2.1",
|
"postcss-nesting": "^11.2.2",
|
||||||
"rome": "^11.0.0",
|
"rome": "^11.0.0",
|
||||||
"tailwindcss": "^3.2.7",
|
"tailwindcss": "^3.2.7",
|
||||||
"tailwindcss-debug-screens": "^2.2.1"
|
"tailwindcss-debug-screens": "^2.2.1"
|
||||||
|
310
pnpm-lock.yaml
generated
310
pnpm-lock.yaml
generated
@ -6,21 +6,23 @@ specifiers:
|
|||||||
'@opentelemetry/api': ^1.4.1
|
'@opentelemetry/api': ^1.4.1
|
||||||
'@tailwindcss/line-clamp': ^0.4.2
|
'@tailwindcss/line-clamp': ^0.4.2
|
||||||
'@tailwindcss/typography': ^0.5.9
|
'@tailwindcss/typography': ^0.5.9
|
||||||
'@types/node': 18.15.5
|
'@types/node': 18.15.10
|
||||||
'@types/react': 18.0.28
|
'@types/react': 18.0.29
|
||||||
'@types/react-dom': 18.0.11
|
'@types/react-dom': 18.0.11
|
||||||
|
'@upstash/redis': ^1.20.1
|
||||||
'@vercel/analytics': ^0.1.10
|
'@vercel/analytics': ^0.1.10
|
||||||
autoprefixer: ^10.4.13
|
autoprefixer: ^10.4.13
|
||||||
contentlayer: ^0.3.0
|
contentlayer: ^0.3.0
|
||||||
framer-motion: ^10.8.5
|
framer-motion: ^10.9.1
|
||||||
lucide-react: ^0.127.0
|
lucide-react: ^0.127.0
|
||||||
markdown-wasm: ^1.2.0
|
markdown-wasm: ^1.2.0
|
||||||
next: 13.2.4
|
next: 13.2.4
|
||||||
next-contentlayer: ^0.3.0
|
next-contentlayer: ^0.3.0
|
||||||
postcss: ^8.4.21
|
postcss: ^8.4.21
|
||||||
postcss-nesting: ^11.2.1
|
postcss-nesting: ^11.2.2
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
react-dom: 18.2.0
|
react-dom: 18.2.0
|
||||||
|
react-wrap-balancer: ^0.4.0
|
||||||
rehype-autolink-headings: ^6.1.1
|
rehype-autolink-headings: ^6.1.1
|
||||||
rehype-pretty-code: ^0.9.4
|
rehype-pretty-code: ^0.9.4
|
||||||
rehype-slug: ^5.1.0
|
rehype-slug: ^5.1.0
|
||||||
@ -33,18 +35,20 @@ specifiers:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@next/font': 13.2.4
|
'@next/font': 13.2.4
|
||||||
'@next/mdx': 13.2.4
|
'@next/mdx': 13.2.4
|
||||||
'@types/node': 18.15.5
|
'@types/node': 18.15.10
|
||||||
'@types/react': 18.0.28
|
'@types/react': 18.0.29
|
||||||
'@types/react-dom': 18.0.11
|
'@types/react-dom': 18.0.11
|
||||||
|
'@upstash/redis': 1.20.1
|
||||||
'@vercel/analytics': 0.1.11_react@18.2.0
|
'@vercel/analytics': 0.1.11_react@18.2.0
|
||||||
contentlayer: 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
contentlayer: 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
framer-motion: 10.8.5_biqbaboplfbrettd7655fr4n2y
|
framer-motion: 10.9.1_biqbaboplfbrettd7655fr4n2y
|
||||||
lucide-react: 0.127.0_react@18.2.0
|
lucide-react: 0.127.0_react@18.2.0
|
||||||
markdown-wasm: 1.2.0
|
markdown-wasm: 1.2.0
|
||||||
next: 13.2.4_756ubwvsgazzkcxtigvs4yqbci
|
next: 13.2.4_756ubwvsgazzkcxtigvs4yqbci
|
||||||
next-contentlayer: 0.3.0_fwtlsludu3mxobm5kzti3ccmlm
|
next-contentlayer: 0.3.0_4jrksbpguxv75tdufwflb7i7k4
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
react-dom: 18.2.0_react@18.2.0
|
react-dom: 18.2.0_react@18.2.0
|
||||||
|
react-wrap-balancer: 0.4.0_react@18.2.0
|
||||||
rehype-autolink-headings: 6.1.1
|
rehype-autolink-headings: 6.1.1
|
||||||
rehype-pretty-code: 0.9.4_shiki@0.14.1
|
rehype-pretty-code: 0.9.4_shiki@0.14.1
|
||||||
rehype-slug: 5.1.0
|
rehype-slug: 5.1.0
|
||||||
@ -57,7 +61,7 @@ devDependencies:
|
|||||||
'@tailwindcss/typography': 0.5.9_tailwindcss@3.2.7
|
'@tailwindcss/typography': 0.5.9_tailwindcss@3.2.7
|
||||||
autoprefixer: 10.4.14_postcss@8.4.21
|
autoprefixer: 10.4.14_postcss@8.4.21
|
||||||
postcss: 8.4.21
|
postcss: 8.4.21
|
||||||
postcss-nesting: 11.2.1_postcss@8.4.21
|
postcss-nesting: 11.2.2_postcss@8.4.21
|
||||||
rome: 11.0.0
|
rome: 11.0.0
|
||||||
tailwindcss: 3.2.7_postcss@8.4.21
|
tailwindcss: 3.2.7_postcss@8.4.21
|
||||||
tailwindcss-debug-screens: 2.2.1_tailwindcss@3.2.7
|
tailwindcss-debug-screens: 2.2.1_tailwindcss@3.2.7
|
||||||
@ -71,10 +75,10 @@ packages:
|
|||||||
regenerator-runtime: 0.13.11
|
regenerator-runtime: 0.13.11
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@contentlayer/cli/0.3.0_qmecdceofcvmurqim4ud7myj3a:
|
/@contentlayer/cli/0.3.0_e24fifms7lyt2dudodzemqbuwu:
|
||||||
resolution: {integrity: sha512-Mqb6NlIKINt2qsPKft+o8m5tJhJXVgVSd0zP1BH+CQRmvR/zwTT3maz1bDCPHBYGKgGCQKtvgM66IjvH+dmC6Q==}
|
resolution: {integrity: sha512-Mqb6NlIKINt2qsPKft+o8m5tJhJXVgVSd0zP1BH+CQRmvR/zwTT3maz1bDCPHBYGKgGCQKtvgM66IjvH+dmC6Q==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@contentlayer/core': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/core': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/utils': 0.3.0
|
'@contentlayer/utils': 0.3.0
|
||||||
clipanion: 3.2.0_typanion@3.12.1
|
clipanion: 3.2.0_typanion@3.12.1
|
||||||
typanion: 3.12.1
|
typanion: 3.12.1
|
||||||
@ -85,10 +89,10 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@contentlayer/client/0.3.0_qmecdceofcvmurqim4ud7myj3a:
|
/@contentlayer/client/0.3.0_e24fifms7lyt2dudodzemqbuwu:
|
||||||
resolution: {integrity: sha512-yzDYiZtqOJwWrsykieA1LMnhKbaYcJhAy7s8Xs7zU5wFfyBTO258gvmK5dVi4LuzmOOPVMJn6FpEofT/RAKVtg==}
|
resolution: {integrity: sha512-yzDYiZtqOJwWrsykieA1LMnhKbaYcJhAy7s8Xs7zU5wFfyBTO258gvmK5dVi4LuzmOOPVMJn6FpEofT/RAKVtg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@contentlayer/core': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/core': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@effect-ts/otel-node'
|
- '@effect-ts/otel-node'
|
||||||
- esbuild
|
- esbuild
|
||||||
@ -96,7 +100,7 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@contentlayer/core/0.3.0_qmecdceofcvmurqim4ud7myj3a:
|
/@contentlayer/core/0.3.0_e24fifms7lyt2dudodzemqbuwu:
|
||||||
resolution: {integrity: sha512-5cL4W0nK9kNqxgBkIgauUko0SRAHf8oPoxRhdsSPQ7FSCgZGz2crMeSJOFmj3a3govh863/mKhXfkoUJBoDgnA==}
|
resolution: {integrity: sha512-5cL4W0nK9kNqxgBkIgauUko0SRAHf8oPoxRhdsSPQ7FSCgZGz2crMeSJOFmj3a3govh863/mKhXfkoUJBoDgnA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
esbuild: 0.17.x
|
esbuild: 0.17.x
|
||||||
@ -110,10 +114,10 @@ packages:
|
|||||||
'@contentlayer/utils': 0.3.0
|
'@contentlayer/utils': 0.3.0
|
||||||
camel-case: 4.1.2
|
camel-case: 4.1.2
|
||||||
comment-json: 4.2.3
|
comment-json: 4.2.3
|
||||||
esbuild: 0.17.12
|
esbuild: 0.17.14
|
||||||
gray-matter: 4.0.3
|
gray-matter: 4.0.3
|
||||||
markdown-wasm: 1.2.0
|
markdown-wasm: 1.2.0
|
||||||
mdx-bundler: 9.2.1_esbuild@0.17.12
|
mdx-bundler: 9.2.1_esbuild@0.17.14
|
||||||
rehype-stringify: 9.0.3
|
rehype-stringify: 9.0.3
|
||||||
remark-frontmatter: 4.0.1
|
remark-frontmatter: 4.0.1
|
||||||
remark-parse: 10.0.1
|
remark-parse: 10.0.1
|
||||||
@ -126,10 +130,10 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@contentlayer/source-files/0.3.0_qmecdceofcvmurqim4ud7myj3a:
|
/@contentlayer/source-files/0.3.0_e24fifms7lyt2dudodzemqbuwu:
|
||||||
resolution: {integrity: sha512-6crNuRdWGYFec0Kn/DpbrzpOu8bttFmOmOpX1HIYQz4iPisg+8biybLBiNU7Y6aCUjEZLOnM7AaHpMFvhrYWsw==}
|
resolution: {integrity: sha512-6crNuRdWGYFec0Kn/DpbrzpOu8bttFmOmOpX1HIYQz4iPisg+8biybLBiNU7Y6aCUjEZLOnM7AaHpMFvhrYWsw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@contentlayer/core': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/core': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/utils': 0.3.0
|
'@contentlayer/utils': 0.3.0
|
||||||
chokidar: 3.5.3
|
chokidar: 3.5.3
|
||||||
fast-glob: 3.2.12
|
fast-glob: 3.2.12
|
||||||
@ -147,11 +151,11 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@contentlayer/source-remote-files/0.3.0_qmecdceofcvmurqim4ud7myj3a:
|
/@contentlayer/source-remote-files/0.3.0_e24fifms7lyt2dudodzemqbuwu:
|
||||||
resolution: {integrity: sha512-4PnaK5cfQiduMUEO6nzqsD4ttD5RG4ffcyeSp5MLhpU0DTEZcfGXFRO777ddEI8PZ0/NJuhfz9MGbdO90QYlsw==}
|
resolution: {integrity: sha512-4PnaK5cfQiduMUEO6nzqsD4ttD5RG4ffcyeSp5MLhpU0DTEZcfGXFRO777ddEI8PZ0/NJuhfz9MGbdO90QYlsw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@contentlayer/core': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/core': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/source-files': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/source-files': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/utils': 0.3.0
|
'@contentlayer/utils': 0.3.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@effect-ts/otel-node'
|
- '@effect-ts/otel-node'
|
||||||
@ -192,14 +196,12 @@ packages:
|
|||||||
type-fest: 3.6.1
|
type-fest: 3.6.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@csstools/selector-specificity/2.1.1_wajs5nedgkikc5pcuwett7legi:
|
/@csstools/selector-specificity/2.2.0_laljekdltgzr3kfi7r4exvsr5a:
|
||||||
resolution: {integrity: sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==}
|
resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==}
|
||||||
engines: {node: ^14 || ^16 || >=18}
|
engines: {node: ^14 || ^16 || >=18}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4
|
|
||||||
postcss-selector-parser: ^6.0.10
|
postcss-selector-parser: ^6.0.10
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss: 8.4.21
|
|
||||||
postcss-selector-parser: 6.0.11
|
postcss-selector-parser: 6.0.11
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@ -274,22 +276,22 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild-plugins/node-resolve/0.1.4_esbuild@0.17.12:
|
/@esbuild-plugins/node-resolve/0.1.4_esbuild@0.17.14:
|
||||||
resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==}
|
resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
esbuild: '*'
|
esbuild: '*'
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/resolve': 1.20.2
|
'@types/resolve': 1.20.2
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
esbuild: 0.17.12
|
esbuild: 0.17.14
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
resolve: 1.22.1
|
resolve: 1.22.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@esbuild/android-arm/0.17.12:
|
/@esbuild/android-arm/0.17.14:
|
||||||
resolution: {integrity: sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==}
|
resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [android]
|
os: [android]
|
||||||
@ -297,8 +299,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/android-arm64/0.17.12:
|
/@esbuild/android-arm64/0.17.14:
|
||||||
resolution: {integrity: sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==}
|
resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
@ -306,8 +308,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/android-x64/0.17.12:
|
/@esbuild/android-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==}
|
resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [android]
|
os: [android]
|
||||||
@ -315,8 +317,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/darwin-arm64/0.17.12:
|
/@esbuild/darwin-arm64/0.17.14:
|
||||||
resolution: {integrity: sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==}
|
resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
@ -324,8 +326,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/darwin-x64/0.17.12:
|
/@esbuild/darwin-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==}
|
resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
@ -333,8 +335,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/freebsd-arm64/0.17.12:
|
/@esbuild/freebsd-arm64/0.17.14:
|
||||||
resolution: {integrity: sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==}
|
resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
@ -342,8 +344,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/freebsd-x64/0.17.12:
|
/@esbuild/freebsd-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==}
|
resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
@ -351,8 +353,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-arm/0.17.12:
|
/@esbuild/linux-arm/0.17.14:
|
||||||
resolution: {integrity: sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==}
|
resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -360,8 +362,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-arm64/0.17.12:
|
/@esbuild/linux-arm64/0.17.14:
|
||||||
resolution: {integrity: sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==}
|
resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -369,8 +371,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-ia32/0.17.12:
|
/@esbuild/linux-ia32/0.17.14:
|
||||||
resolution: {integrity: sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==}
|
resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -378,8 +380,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-loong64/0.17.12:
|
/@esbuild/linux-loong64/0.17.14:
|
||||||
resolution: {integrity: sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==}
|
resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [loong64]
|
cpu: [loong64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -387,8 +389,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-mips64el/0.17.12:
|
/@esbuild/linux-mips64el/0.17.14:
|
||||||
resolution: {integrity: sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==}
|
resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [mips64el]
|
cpu: [mips64el]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -396,8 +398,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-ppc64/0.17.12:
|
/@esbuild/linux-ppc64/0.17.14:
|
||||||
resolution: {integrity: sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==}
|
resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -405,8 +407,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-riscv64/0.17.12:
|
/@esbuild/linux-riscv64/0.17.14:
|
||||||
resolution: {integrity: sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==}
|
resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -414,8 +416,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-s390x/0.17.12:
|
/@esbuild/linux-s390x/0.17.14:
|
||||||
resolution: {integrity: sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==}
|
resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -423,8 +425,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-x64/0.17.12:
|
/@esbuild/linux-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==}
|
resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -432,8 +434,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/netbsd-x64/0.17.12:
|
/@esbuild/netbsd-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==}
|
resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [netbsd]
|
os: [netbsd]
|
||||||
@ -441,8 +443,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/openbsd-x64/0.17.12:
|
/@esbuild/openbsd-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==}
|
resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [openbsd]
|
os: [openbsd]
|
||||||
@ -450,8 +452,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/sunos-x64/0.17.12:
|
/@esbuild/sunos-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==}
|
resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [sunos]
|
os: [sunos]
|
||||||
@ -459,8 +461,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/win32-arm64/0.17.12:
|
/@esbuild/win32-arm64/0.17.14:
|
||||||
resolution: {integrity: sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==}
|
resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -468,8 +470,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/win32-ia32/0.17.12:
|
/@esbuild/win32-ia32/0.17.14:
|
||||||
resolution: {integrity: sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==}
|
resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -477,8 +479,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/win32-x64/0.17.12:
|
/@esbuild/win32-x64/0.17.14:
|
||||||
resolution: {integrity: sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==}
|
resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -495,7 +497,7 @@ packages:
|
|||||||
engines: {node: ^8.13.0 || >=10.10.0}
|
engines: {node: ^8.13.0 || >=10.10.0}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@grpc/proto-loader': 0.7.5
|
'@grpc/proto-loader': 0.7.5
|
||||||
'@types/node': 18.15.5
|
'@types/node': 18.15.10
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@grpc/proto-loader/0.6.13:
|
/@grpc/proto-loader/0.6.13:
|
||||||
@ -530,13 +532,13 @@ packages:
|
|||||||
tslib: 2.5.0
|
tslib: 2.5.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@mdx-js/esbuild/2.3.0_esbuild@0.17.12:
|
/@mdx-js/esbuild/2.3.0_esbuild@0.17.14:
|
||||||
resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==}
|
resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
esbuild: '>=0.11.0'
|
esbuild: '>=0.11.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
'@mdx-js/mdx': 2.3.0
|
'@mdx-js/mdx': 2.3.0
|
||||||
esbuild: 0.17.12
|
esbuild: 0.17.14
|
||||||
node-fetch: 3.3.0
|
node-fetch: 3.3.0
|
||||||
vfile: 5.3.7
|
vfile: 5.3.7
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -1053,8 +1055,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
|
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@types/node/18.15.5:
|
/@types/node/18.15.10:
|
||||||
resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==}
|
resolution: {integrity: sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@types/parse5/6.0.3:
|
/@types/parse5/6.0.3:
|
||||||
@ -1068,14 +1070,14 @@ packages:
|
|||||||
/@types/react-dom/18.0.11:
|
/@types/react-dom/18.0.11:
|
||||||
resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
|
resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/react': 18.0.28
|
'@types/react': 18.0.29
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@types/react/18.0.28:
|
/@types/react/18.0.29:
|
||||||
resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
|
resolution: {integrity: sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/prop-types': 15.7.5
|
'@types/prop-types': 15.7.5
|
||||||
'@types/scheduler': 0.16.2
|
'@types/scheduler': 0.16.3
|
||||||
csstype: 3.1.1
|
csstype: 3.1.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
@ -1083,14 +1085,22 @@ packages:
|
|||||||
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
|
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@types/scheduler/0.16.2:
|
/@types/scheduler/0.16.3:
|
||||||
resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
|
resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@types/unist/2.0.6:
|
/@types/unist/2.0.6:
|
||||||
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
|
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@upstash/redis/1.20.1:
|
||||||
|
resolution: {integrity: sha512-mYwV8uvQROJnq5aOxmQH3KDa0E8+DRdU0zJ/VGQV84HrhQQNy0IsLFFTo97WEhZAlHcJnVbrbwqUK9disWqx/w==}
|
||||||
|
dependencies:
|
||||||
|
isomorphic-fetch: 3.0.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@vercel/analytics/0.1.11_react@18.2.0:
|
/@vercel/analytics/0.1.11_react@18.2.0:
|
||||||
resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==}
|
resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -1317,17 +1327,17 @@ packages:
|
|||||||
repeat-string: 1.6.1
|
repeat-string: 1.6.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/contentlayer/0.3.0_qmecdceofcvmurqim4ud7myj3a:
|
/contentlayer/0.3.0_e24fifms7lyt2dudodzemqbuwu:
|
||||||
resolution: {integrity: sha512-3LEF5HMHjSytlT8SErC3U59Pt2LP80a6Z2f/0mSIPeA4xty0LNChyHqzALySSM0osAEz32RY56Fifk5P+2dCIA==}
|
resolution: {integrity: sha512-3LEF5HMHjSytlT8SErC3U59Pt2LP80a6Z2f/0mSIPeA4xty0LNChyHqzALySSM0osAEz32RY56Fifk5P+2dCIA==}
|
||||||
engines: {node: '>=14.18'}
|
engines: {node: '>=14.18'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@contentlayer/cli': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/cli': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/client': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/client': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/core': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/core': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/source-files': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/source-files': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/source-remote-files': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/source-remote-files': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/utils': 0.3.0
|
'@contentlayer/utils': 0.3.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@effect-ts/otel-node'
|
- '@effect-ts/otel-node'
|
||||||
@ -1413,34 +1423,34 @@ packages:
|
|||||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/esbuild/0.17.12:
|
/esbuild/0.17.14:
|
||||||
resolution: {integrity: sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==}
|
resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@esbuild/android-arm': 0.17.12
|
'@esbuild/android-arm': 0.17.14
|
||||||
'@esbuild/android-arm64': 0.17.12
|
'@esbuild/android-arm64': 0.17.14
|
||||||
'@esbuild/android-x64': 0.17.12
|
'@esbuild/android-x64': 0.17.14
|
||||||
'@esbuild/darwin-arm64': 0.17.12
|
'@esbuild/darwin-arm64': 0.17.14
|
||||||
'@esbuild/darwin-x64': 0.17.12
|
'@esbuild/darwin-x64': 0.17.14
|
||||||
'@esbuild/freebsd-arm64': 0.17.12
|
'@esbuild/freebsd-arm64': 0.17.14
|
||||||
'@esbuild/freebsd-x64': 0.17.12
|
'@esbuild/freebsd-x64': 0.17.14
|
||||||
'@esbuild/linux-arm': 0.17.12
|
'@esbuild/linux-arm': 0.17.14
|
||||||
'@esbuild/linux-arm64': 0.17.12
|
'@esbuild/linux-arm64': 0.17.14
|
||||||
'@esbuild/linux-ia32': 0.17.12
|
'@esbuild/linux-ia32': 0.17.14
|
||||||
'@esbuild/linux-loong64': 0.17.12
|
'@esbuild/linux-loong64': 0.17.14
|
||||||
'@esbuild/linux-mips64el': 0.17.12
|
'@esbuild/linux-mips64el': 0.17.14
|
||||||
'@esbuild/linux-ppc64': 0.17.12
|
'@esbuild/linux-ppc64': 0.17.14
|
||||||
'@esbuild/linux-riscv64': 0.17.12
|
'@esbuild/linux-riscv64': 0.17.14
|
||||||
'@esbuild/linux-s390x': 0.17.12
|
'@esbuild/linux-s390x': 0.17.14
|
||||||
'@esbuild/linux-x64': 0.17.12
|
'@esbuild/linux-x64': 0.17.14
|
||||||
'@esbuild/netbsd-x64': 0.17.12
|
'@esbuild/netbsd-x64': 0.17.14
|
||||||
'@esbuild/openbsd-x64': 0.17.12
|
'@esbuild/openbsd-x64': 0.17.14
|
||||||
'@esbuild/sunos-x64': 0.17.12
|
'@esbuild/sunos-x64': 0.17.14
|
||||||
'@esbuild/win32-arm64': 0.17.12
|
'@esbuild/win32-arm64': 0.17.14
|
||||||
'@esbuild/win32-ia32': 0.17.12
|
'@esbuild/win32-ia32': 0.17.14
|
||||||
'@esbuild/win32-x64': 0.17.12
|
'@esbuild/win32-x64': 0.17.14
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/escalade/3.1.1:
|
/escalade/3.1.1:
|
||||||
@ -1575,8 +1585,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
|
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/framer-motion/10.8.5_biqbaboplfbrettd7655fr4n2y:
|
/framer-motion/10.9.1_biqbaboplfbrettd7655fr4n2y:
|
||||||
resolution: {integrity: sha512-qwvUAIwCc6fEZhg7ST+/z+f7Vt882jJvLiWZUHNdq2oZ/Y7gM6mLlpKi9xQg+pLu6DQVypikcKQ+MKnoFoXAJg==}
|
resolution: {integrity: sha512-fuCDRGKOu5n9gN2/R7O22mE+BHMGK5D57S3Oq8n2ITd4aYR7D22QM5I4VPD3CWahNt/lyDUs20u9Aw+6ah9oAQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^18.0.0
|
react: ^18.0.0
|
||||||
react-dom: ^18.0.0
|
react-dom: ^18.0.0
|
||||||
@ -1877,6 +1887,15 @@ packages:
|
|||||||
'@types/estree': 1.0.0
|
'@types/estree': 1.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/isomorphic-fetch/3.0.0:
|
||||||
|
resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==}
|
||||||
|
dependencies:
|
||||||
|
node-fetch: 2.6.9
|
||||||
|
whatwg-fetch: 3.6.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
dev: false
|
||||||
|
|
||||||
/js-tokens/4.0.0:
|
/js-tokens/4.0.0:
|
||||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -2181,17 +2200,17 @@ packages:
|
|||||||
'@types/mdast': 3.0.10
|
'@types/mdast': 3.0.10
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/mdx-bundler/9.2.1_esbuild@0.17.12:
|
/mdx-bundler/9.2.1_esbuild@0.17.14:
|
||||||
resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==}
|
resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==}
|
||||||
engines: {node: '>=14', npm: '>=6'}
|
engines: {node: '>=14', npm: '>=6'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
esbuild: 0.*
|
esbuild: 0.*
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.21.0
|
'@babel/runtime': 7.21.0
|
||||||
'@esbuild-plugins/node-resolve': 0.1.4_esbuild@0.17.12
|
'@esbuild-plugins/node-resolve': 0.1.4_esbuild@0.17.14
|
||||||
'@fal-works/esbuild-plugin-global-externals': 2.1.2
|
'@fal-works/esbuild-plugin-global-externals': 2.1.2
|
||||||
'@mdx-js/esbuild': 2.3.0_esbuild@0.17.12
|
'@mdx-js/esbuild': 2.3.0_esbuild@0.17.14
|
||||||
esbuild: 0.17.12
|
esbuild: 0.17.14
|
||||||
gray-matter: 4.0.3
|
gray-matter: 4.0.3
|
||||||
remark-frontmatter: 4.0.1
|
remark-frontmatter: 4.0.1
|
||||||
remark-mdx-frontmatter: 1.1.1
|
remark-mdx-frontmatter: 1.1.1
|
||||||
@ -2571,14 +2590,14 @@ packages:
|
|||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
/next-contentlayer/0.3.0_fwtlsludu3mxobm5kzti3ccmlm:
|
/next-contentlayer/0.3.0_4jrksbpguxv75tdufwflb7i7k4:
|
||||||
resolution: {integrity: sha512-vt+RaD3nIgZ6oXadtZH19a1mpxvGEoiifdtmXqBSz4rHMRcMA1YZCuSWyj+P9uX7MDmIL6JT6QSp+hvTBMaxiw==}
|
resolution: {integrity: sha512-vt+RaD3nIgZ6oXadtZH19a1mpxvGEoiifdtmXqBSz4rHMRcMA1YZCuSWyj+P9uX7MDmIL6JT6QSp+hvTBMaxiw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
next: ^12 || ^13
|
next: ^12 || ^13
|
||||||
react: '*'
|
react: '*'
|
||||||
react-dom: '*'
|
react-dom: '*'
|
||||||
dependencies:
|
dependencies:
|
||||||
'@contentlayer/core': 0.3.0_qmecdceofcvmurqim4ud7myj3a
|
'@contentlayer/core': 0.3.0_e24fifms7lyt2dudodzemqbuwu
|
||||||
'@contentlayer/utils': 0.3.0
|
'@contentlayer/utils': 0.3.0
|
||||||
next: 13.2.4_756ubwvsgazzkcxtigvs4yqbci
|
next: 13.2.4_756ubwvsgazzkcxtigvs4yqbci
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
@ -2650,6 +2669,18 @@ packages:
|
|||||||
engines: {node: '>=10.5.0'}
|
engines: {node: '>=10.5.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/node-fetch/2.6.9:
|
||||||
|
resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==}
|
||||||
|
engines: {node: 4.x || >=6.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
encoding: ^0.1.0
|
||||||
|
peerDependenciesMeta:
|
||||||
|
encoding:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
whatwg-url: 5.0.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/node-fetch/3.3.0:
|
/node-fetch/3.3.0:
|
||||||
resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==}
|
resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==}
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
@ -2782,13 +2813,13 @@ packages:
|
|||||||
postcss-selector-parser: 6.0.11
|
postcss-selector-parser: 6.0.11
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/postcss-nesting/11.2.1_postcss@8.4.21:
|
/postcss-nesting/11.2.2_postcss@8.4.21:
|
||||||
resolution: {integrity: sha512-E6Jq74Jo/PbRAtZioON54NPhUNJYxVWhwxbweYl1vAoBYuGlDIts5yhtKiZFLvkvwT73e/9nFrW3oMqAtgG+GQ==}
|
resolution: {integrity: sha512-aOTiUniAB1bcPE6GGiynWRa6PZFPhOTAm5q3q5cem6QeSijIHHkWr6gs65ukCZMXeak8yXeZVbBJET3VM+HlhA==}
|
||||||
engines: {node: ^14 || ^16 || >=18}
|
engines: {node: ^14 || ^16 || >=18}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4
|
postcss: ^8.4
|
||||||
dependencies:
|
dependencies:
|
||||||
'@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi
|
'@csstools/selector-specificity': 2.2.0_laljekdltgzr3kfi7r4exvsr5a
|
||||||
postcss: 8.4.21
|
postcss: 8.4.21
|
||||||
postcss-selector-parser: 6.0.11
|
postcss-selector-parser: 6.0.11
|
||||||
dev: true
|
dev: true
|
||||||
@ -2851,7 +2882,7 @@ packages:
|
|||||||
'@protobufjs/pool': 1.1.0
|
'@protobufjs/pool': 1.1.0
|
||||||
'@protobufjs/utf8': 1.1.0
|
'@protobufjs/utf8': 1.1.0
|
||||||
'@types/long': 4.0.2
|
'@types/long': 4.0.2
|
||||||
'@types/node': 18.15.5
|
'@types/node': 18.15.10
|
||||||
long: 4.0.0
|
long: 4.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
@ -2870,7 +2901,7 @@ packages:
|
|||||||
'@protobufjs/path': 1.1.2
|
'@protobufjs/path': 1.1.2
|
||||||
'@protobufjs/pool': 1.1.0
|
'@protobufjs/pool': 1.1.0
|
||||||
'@protobufjs/utf8': 1.1.0
|
'@protobufjs/utf8': 1.1.0
|
||||||
'@types/node': 18.15.5
|
'@types/node': 18.15.10
|
||||||
long: 5.2.1
|
long: 5.2.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
@ -2892,6 +2923,14 @@ packages:
|
|||||||
scheduler: 0.23.0
|
scheduler: 0.23.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/react-wrap-balancer/0.4.0_react@18.2.0:
|
||||||
|
resolution: {integrity: sha512-MUsROihHd7bFHCo9kCOifKDYBEZPgKTyGvfa8RcwRQKtT2cL7Um9Cc8A7GvuT8t3np7LAGsEkzdEyJdKrr5lVQ==}
|
||||||
|
peerDependencies:
|
||||||
|
react: ^18.0.0
|
||||||
|
dependencies:
|
||||||
|
react: 18.2.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/react/18.2.0:
|
/react/18.2.0:
|
||||||
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
|
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
@ -3238,6 +3277,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
|
resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/tr46/0.0.3:
|
||||||
|
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/trim-lines/3.0.1:
|
/trim-lines/3.0.1:
|
||||||
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
|
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -3407,6 +3450,21 @@ packages:
|
|||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/webidl-conversions/3.0.1:
|
||||||
|
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/whatwg-fetch/3.6.2:
|
||||||
|
resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/whatwg-url/5.0.0:
|
||||||
|
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
|
||||||
|
dependencies:
|
||||||
|
tr46: 0.0.3
|
||||||
|
webidl-conversions: 3.0.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
/wrap-ansi/7.0.0:
|
/wrap-ansi/7.0.0:
|
||||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
BIN
public/favicon.png
Normal file
BIN
public/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 759 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
public/og.png
Normal file
BIN
public/og.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 341 KiB |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="31" fill="none"><g opacity=".9"><path fill="url(#a)" d="M13 .4v29.3H7V6.3h-.2L0 10.5V5L7.2.4H13Z"/><path fill="url(#b)" d="M28.8 30.1c-2.2 0-4-.3-5.7-1-1.7-.8-3-1.8-4-3.1a7.7 7.7 0 0 1-1.4-4.6h6.2c0 .8.3 1.4.7 2 .4.5 1 .9 1.7 1.2.7.3 1.6.4 2.5.4 1 0 1.7-.2 2.5-.5.7-.3 1.3-.8 1.7-1.4.4-.6.6-1.2.6-2s-.2-1.5-.7-2.1c-.4-.6-1-1-1.8-1.4-.8-.4-1.8-.5-2.9-.5h-2.7v-4.6h2.7a6 6 0 0 0 2.5-.5 4 4 0 0 0 1.7-1.3c.4-.6.6-1.3.6-2a3.5 3.5 0 0 0-2-3.3 5.6 5.6 0 0 0-4.5 0 4 4 0 0 0-1.7 1.2c-.4.6-.6 1.2-.6 2h-6c0-1.7.6-3.2 1.5-4.5 1-1.3 2.2-2.3 3.8-3C25 .4 26.8 0 28.8 0s3.8.4 5.3 1.1c1.5.7 2.7 1.7 3.6 3a7.2 7.2 0 0 1 1.2 4.2c0 1.6-.5 3-1.5 4a7 7 0 0 1-4 2.2v.2c2.2.3 3.8 1 5 2.2a6.4 6.4 0 0 1 1.6 4.6c0 1.7-.5 3.1-1.4 4.4a9.7 9.7 0 0 1-4 3.1c-1.7.8-3.7 1.1-5.8 1.1Z"/></g><defs><linearGradient id="a" x1="20" x2="20" y1="0" y2="30.1" gradientUnits="userSpaceOnUse"><stop/><stop offset="1" stop-color="#3D3D3D"/></linearGradient><linearGradient id="b" x1="20" x2="20" y1="0" y2="30.1" gradientUnits="userSpaceOnUse"><stop/><stop offset="1" stop-color="#3D3D3D"/></linearGradient></defs></svg>
|
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>
|
|
Before Width: | Height: | Size: 629 B |
Loading…
x
Reference in New Issue
Block a user