prog
This commit is contained in:
@@ -4,11 +4,12 @@
|
|||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start:dev": "ts-node ./src/index.ts"
|
"start:dev": "nodemon --exec ts-node ./src/index.ts"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/express": "^5.0.6",
|
"@types/express": "^5.0.6",
|
||||||
"@types/node": "^25.5.0",
|
"@types/node": "^25.5.0",
|
||||||
|
"nodemon": "^3.1.14",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^5.9.3"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,11 +11,13 @@ export type Page = {
|
|||||||
|
|
||||||
export const pageRoute = (page:Page) => {
|
export const pageRoute = (page:Page) => {
|
||||||
return async (req:Request, res:Response) => {
|
return async (req:Request, res:Response) => {
|
||||||
|
console.log(`Got Request. Header Agent: ${req.headers['user-agent']}`);
|
||||||
try {
|
try {
|
||||||
const content = await templateRender({
|
const content = await templateRender({
|
||||||
page,
|
page,
|
||||||
template: TemplateDefault,
|
template: TemplateDefault,
|
||||||
request: req
|
request: req,
|
||||||
|
language: 'en'
|
||||||
});
|
});
|
||||||
|
|
||||||
res.status(200).send(content);
|
res.status(200).send(content);
|
||||||
|
|||||||
@@ -7,7 +7,16 @@ const HomePage:Page = {
|
|||||||
{
|
{
|
||||||
type: 'hero',
|
type: 'hero',
|
||||||
properties: {
|
properties: {
|
||||||
title: 'Welcome to Dom\'s Place',
|
title: 'Dominic Masters\nSoftware Developer and Tinkerer.',
|
||||||
|
subtitle: `I develop all manner of things, and tinker with tech new and old.`,
|
||||||
|
buttonLeft: {
|
||||||
|
text: `View the blog`,
|
||||||
|
url: `/blog`
|
||||||
|
},
|
||||||
|
buttonRight: {
|
||||||
|
text: `About me`,
|
||||||
|
url: `/about`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { Request } from 'express';
|
import { Request } from 'express';
|
||||||
import HeroSection from './sections/hero';
|
import HeroSection from './sections/hero';
|
||||||
import { Template } from './template';
|
import { Template } from './template';
|
||||||
|
import { LocaleLanguage } from './locale';
|
||||||
|
import { Page } from './page';
|
||||||
|
|
||||||
const SECTION_TYPES = <const>{
|
const SECTION_TYPES = <const>{
|
||||||
'hero': HeroSection
|
'hero': HeroSection
|
||||||
@@ -8,7 +10,7 @@ const SECTION_TYPES = <const>{
|
|||||||
|
|
||||||
export type Section<P> = {
|
export type Section<P> = {
|
||||||
properties:P;
|
properties:P;
|
||||||
render:(params:{ properties:P, template:Template }) => string;
|
validate:(properties:P) => P;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SectionType = keyof typeof SECTION_TYPES;
|
export type SectionType = keyof typeof SECTION_TYPES;
|
||||||
@@ -26,10 +28,30 @@ export type SectionData<T extends SectionType> = {
|
|||||||
properties:SectionProperties<T>;
|
properties:SectionProperties<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const sectionRender = async (p:{
|
export type SectionRenderer<T extends SectionType> = (p:{
|
||||||
request:Request,
|
properties:SectionProperties<T>;
|
||||||
section:SectionData<SectionType>;
|
|
||||||
template:Template;
|
template:Template;
|
||||||
|
language:LocaleLanguage;
|
||||||
|
request:Request;
|
||||||
|
page:Page;
|
||||||
|
}) => Promise<string>;
|
||||||
|
|
||||||
|
export const sectionRender = async <T extends SectionType>(p:{
|
||||||
|
request:Request,
|
||||||
|
section:SectionData<T>;
|
||||||
|
template:Template;
|
||||||
|
language:LocaleLanguage;
|
||||||
|
page:Page;
|
||||||
}):Promise<string> => {
|
}):Promise<string> => {
|
||||||
return '';
|
if(!p.template.sections[p.section.type]) {
|
||||||
|
console.warn(`No section renderer found for section type "${p.section.type}" in template "${p.template.name}".`);
|
||||||
|
return '';c
|
||||||
|
}
|
||||||
|
|
||||||
|
const renderer = p.template.sections[p.section.type] as SectionRenderer<T>;
|
||||||
|
const properties = p.section.properties;
|
||||||
|
return await renderer({
|
||||||
|
...p,
|
||||||
|
properties: p.section.properties
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@@ -2,19 +2,27 @@ import { Section } from "../section";
|
|||||||
|
|
||||||
type HeroProperties = {
|
type HeroProperties = {
|
||||||
title:string|null;
|
title:string|null;
|
||||||
|
subtitle:string|null;
|
||||||
|
buttonLeft?:{
|
||||||
|
text:string;
|
||||||
|
url:string;
|
||||||
|
};
|
||||||
|
buttonRight?:{
|
||||||
|
text:string;
|
||||||
|
url:string;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const HERO:Section<HeroProperties> = {
|
const HERO:Section<HeroProperties> = {
|
||||||
properties: {
|
properties: {
|
||||||
title: ''
|
title: '',
|
||||||
|
subtitle: '',
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
render: ({ properties, template }) => {
|
validate: props => {
|
||||||
return `
|
if(!props.title) throw new Error('Hero section must have a title.');
|
||||||
<section class="hero">
|
return props;
|
||||||
<h1>${properties.title}</h1>
|
|
||||||
</section>
|
|
||||||
`;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,27 @@
|
|||||||
import { Request } from "express";
|
import { Request } from "express";
|
||||||
import { Page } from "./page";
|
import { Page } from "./page";
|
||||||
|
import { LocaleLanguage } from "./locale";
|
||||||
|
import { Section, SectionRenderer, SectionType, SectionTypeFor } from "./section";
|
||||||
|
|
||||||
|
export type TemplateSections = {
|
||||||
|
[key in SectionType]?:SectionRenderer<key>;
|
||||||
|
};
|
||||||
|
|
||||||
export type Template = {
|
export type Template = {
|
||||||
name:string;
|
name:string;
|
||||||
|
sections:TemplateSections;
|
||||||
render:(p:{
|
render:(p:{
|
||||||
page:Page;
|
page:Page;
|
||||||
request:Request;
|
request:Request;
|
||||||
language:Language;
|
language:LocaleLanguage;
|
||||||
}) => Promise<string>;
|
}) => Promise<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const templateRender = (p:{
|
export const templateRender = (p:{
|
||||||
page:Page,
|
page:Page,
|
||||||
template:Template,
|
template:Template,
|
||||||
request:Request
|
request:Request,
|
||||||
|
language:LocaleLanguage
|
||||||
}):Promise<string> => {
|
}):Promise<string> => {
|
||||||
return p.template.render(p);
|
return p.template.render(p);
|
||||||
}
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
import { Template } from "../template";
|
|
||||||
|
|
||||||
const TEMPLATE_DEFAULT:Template = {
|
|
||||||
name: 'default',
|
|
||||||
render: async p => {
|
|
||||||
return [
|
|
||||||
`<!DOCTYPE html>`,
|
|
||||||
`<html>`,
|
|
||||||
`<head>`,
|
|
||||||
`<title>${p.page.title[language] || 'Untitled Page'}</title>`,
|
|
||||||
`</head>`,
|
|
||||||
`<body>`,
|
|
||||||
`body`,
|
|
||||||
`</body>`,
|
|
||||||
`</html>`
|
|
||||||
].join('\n');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default TEMPLATE_DEFAULT;
|
|
||||||
16
src/templates/default/hero.ts
Normal file
16
src/templates/default/hero.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { SectionRenderer } from "../../section";
|
||||||
|
|
||||||
|
const DefaultTemplateHeroSection:SectionRenderer<'hero'> = async ({
|
||||||
|
properties,
|
||||||
|
template,
|
||||||
|
language,
|
||||||
|
request
|
||||||
|
}) => {
|
||||||
|
return [
|
||||||
|
'<div>',
|
||||||
|
`<h1>${properties.title}</h1>`,
|
||||||
|
'</div>'
|
||||||
|
].join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DefaultTemplateHeroSection;
|
||||||
42
src/templates/default/index.ts
Normal file
42
src/templates/default/index.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import { sectionRender } from "../../section";
|
||||||
|
import { Template } from "../../template";
|
||||||
|
|
||||||
|
import DefaultTemplateHeroSection from "./hero";
|
||||||
|
|
||||||
|
const TEMPLATE_DEFAULT:Template = {
|
||||||
|
name: 'default',
|
||||||
|
sections: {
|
||||||
|
'hero': DefaultTemplateHeroSection
|
||||||
|
},
|
||||||
|
render: async ({ language, page, request }) => {
|
||||||
|
return [
|
||||||
|
`<!DOCTYPE html>`,
|
||||||
|
`<html>`,
|
||||||
|
`<head>`,
|
||||||
|
`<meta charset="UTF-8" />`,
|
||||||
|
`<title>${page.title ? page.title[language] : 'Untitled Page'}</title>`,
|
||||||
|
`<style type="text/css">`,
|
||||||
|
`body { font-family: Arial, sans-serif; margin: 0; padding: 0; }`,
|
||||||
|
`h1 { color: #333; }`,
|
||||||
|
`</style>`,
|
||||||
|
`</head>`,
|
||||||
|
|
||||||
|
`<body>`,
|
||||||
|
`header`,
|
||||||
|
...(await Promise.all(page.sections.map(async section => {
|
||||||
|
return await sectionRender({
|
||||||
|
language,
|
||||||
|
page,
|
||||||
|
request,
|
||||||
|
template: TEMPLATE_DEFAULT,
|
||||||
|
section
|
||||||
|
});
|
||||||
|
}))),
|
||||||
|
`footer`,
|
||||||
|
`</body>`,
|
||||||
|
`</html>`
|
||||||
|
].join('\n');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default TEMPLATE_DEFAULT;
|
||||||
16
src/templates/psp/hero.ts
Normal file
16
src/templates/psp/hero.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { SectionRenderer } from "../../section";
|
||||||
|
|
||||||
|
const PSPTemplateHeroSection:SectionRenderer<'hero'> = async ({
|
||||||
|
properties,
|
||||||
|
template,
|
||||||
|
language,
|
||||||
|
request
|
||||||
|
}) => {
|
||||||
|
return [
|
||||||
|
'<div>',
|
||||||
|
`<h1>${properties.title}</h1>`,
|
||||||
|
'</div>'
|
||||||
|
].join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PSPTemplateHeroSection;
|
||||||
42
src/templates/psp/index.ts
Normal file
42
src/templates/psp/index.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import { sectionRender } from "../../section";
|
||||||
|
import { Template } from "../../template";
|
||||||
|
|
||||||
|
import PSPTemplateHeroSection from "./hero";
|
||||||
|
|
||||||
|
const TEMPLATE_PSP:Template = {
|
||||||
|
name: 'psp',
|
||||||
|
sections: {
|
||||||
|
'hero': PSPTemplateHeroSection
|
||||||
|
},
|
||||||
|
render: async ({ language, page, request }) => {
|
||||||
|
return [
|
||||||
|
`<!DOCTYPE html>`,
|
||||||
|
`<html>`,
|
||||||
|
`<head>`,
|
||||||
|
`<meta charset="UTF-8" />`,
|
||||||
|
`<title>${page.title ? page.title[language] : 'Untitled Page'}</title>`,
|
||||||
|
`<style type="text/css">`,
|
||||||
|
`body { font-family: Arial, sans-serif; margin: 0; padding: 0; }`,
|
||||||
|
`h1 { color: #333; }`,
|
||||||
|
`</style>`,
|
||||||
|
`</head>`,
|
||||||
|
|
||||||
|
`<body>`,
|
||||||
|
`header`,
|
||||||
|
...(await Promise.all(page.sections.map(async section => {
|
||||||
|
return await sectionRender({
|
||||||
|
language,
|
||||||
|
page,
|
||||||
|
request,
|
||||||
|
template: TEMPLATE_PSP,
|
||||||
|
section
|
||||||
|
});
|
||||||
|
}))),
|
||||||
|
`footer`,
|
||||||
|
`</body>`,
|
||||||
|
`</html>`
|
||||||
|
].join('\n');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default TEMPLATE_PSP;
|
||||||
183
yarn.lock
183
yarn.lock
@@ -138,11 +138,29 @@ acorn@^8.11.0, acorn@^8.4.1:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a"
|
||||||
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
|
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
|
||||||
|
|
||||||
|
anymatch@~3.1.2:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
|
||||||
|
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
|
||||||
|
dependencies:
|
||||||
|
normalize-path "^3.0.0"
|
||||||
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
arg@^4.1.0:
|
arg@^4.1.0:
|
||||||
version "4.1.3"
|
version "4.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||||
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
||||||
|
|
||||||
|
balanced-match@^4.0.2:
|
||||||
|
version "4.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a"
|
||||||
|
integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
|
||||||
|
|
||||||
|
binary-extensions@^2.0.0:
|
||||||
|
version "2.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
|
||||||
|
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
|
||||||
|
|
||||||
body-parser@^2.2.1:
|
body-parser@^2.2.1:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.2.tgz#1a32cdb966beaf68de50a9dfbe5b58f83cb8890c"
|
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.2.tgz#1a32cdb966beaf68de50a9dfbe5b58f83cb8890c"
|
||||||
@@ -158,6 +176,20 @@ body-parser@^2.2.1:
|
|||||||
raw-body "^3.0.1"
|
raw-body "^3.0.1"
|
||||||
type-is "^2.0.1"
|
type-is "^2.0.1"
|
||||||
|
|
||||||
|
brace-expansion@^5.0.2:
|
||||||
|
version "5.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336"
|
||||||
|
integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^4.0.2"
|
||||||
|
|
||||||
|
braces@~3.0.2:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
||||||
|
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
|
||||||
|
dependencies:
|
||||||
|
fill-range "^7.1.1"
|
||||||
|
|
||||||
bytes@^3.1.2, bytes@~3.1.2:
|
bytes@^3.1.2, bytes@~3.1.2:
|
||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
|
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
|
||||||
@@ -179,6 +211,21 @@ call-bound@^1.0.2:
|
|||||||
call-bind-apply-helpers "^1.0.2"
|
call-bind-apply-helpers "^1.0.2"
|
||||||
get-intrinsic "^1.3.0"
|
get-intrinsic "^1.3.0"
|
||||||
|
|
||||||
|
chokidar@^3.5.2:
|
||||||
|
version "3.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
|
||||||
|
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
|
||||||
|
dependencies:
|
||||||
|
anymatch "~3.1.2"
|
||||||
|
braces "~3.0.2"
|
||||||
|
glob-parent "~5.1.2"
|
||||||
|
is-binary-path "~2.1.0"
|
||||||
|
is-glob "~4.0.1"
|
||||||
|
normalize-path "~3.0.0"
|
||||||
|
readdirp "~3.6.0"
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
content-disposition@^1.0.0:
|
content-disposition@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b"
|
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b"
|
||||||
@@ -204,7 +251,7 @@ create-require@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
||||||
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
||||||
|
|
||||||
debug@^4.4.0, debug@^4.4.3:
|
debug@^4, debug@^4.4.0, debug@^4.4.3:
|
||||||
version "4.4.3"
|
version "4.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
|
||||||
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
||||||
@@ -301,6 +348,13 @@ express@^5.2.1:
|
|||||||
type-is "^2.0.1"
|
type-is "^2.0.1"
|
||||||
vary "^1.1.2"
|
vary "^1.1.2"
|
||||||
|
|
||||||
|
fill-range@^7.1.1:
|
||||||
|
version "7.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
|
||||||
|
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
|
||||||
|
dependencies:
|
||||||
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
finalhandler@^2.1.0:
|
finalhandler@^2.1.0:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099"
|
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099"
|
||||||
@@ -323,6 +377,11 @@ fresh@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4"
|
resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4"
|
||||||
integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==
|
integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==
|
||||||
|
|
||||||
|
fsevents@~2.3.2:
|
||||||
|
version "2.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||||
|
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||||
|
|
||||||
function-bind@^1.1.2:
|
function-bind@^1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
||||||
@@ -352,11 +411,23 @@ get-proto@^1.0.1:
|
|||||||
dunder-proto "^1.0.1"
|
dunder-proto "^1.0.1"
|
||||||
es-object-atoms "^1.0.0"
|
es-object-atoms "^1.0.0"
|
||||||
|
|
||||||
|
glob-parent@~5.1.2:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||||
|
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||||
|
dependencies:
|
||||||
|
is-glob "^4.0.1"
|
||||||
|
|
||||||
gopd@^1.2.0:
|
gopd@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
||||||
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
|
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
|
||||||
|
|
||||||
|
has-flag@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
|
integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
|
||||||
|
|
||||||
has-symbols@^1.1.0:
|
has-symbols@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
||||||
@@ -387,6 +458,11 @@ iconv-lite@^0.7.0, iconv-lite@~0.7.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer ">= 2.1.2 < 3.0.0"
|
safer-buffer ">= 2.1.2 < 3.0.0"
|
||||||
|
|
||||||
|
ignore-by-default@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||||
|
integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
|
||||||
|
|
||||||
inherits@~2.0.4:
|
inherits@~2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
@@ -397,6 +473,30 @@ ipaddr.js@1.9.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
||||||
|
|
||||||
|
is-binary-path@~2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||||
|
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||||
|
dependencies:
|
||||||
|
binary-extensions "^2.0.0"
|
||||||
|
|
||||||
|
is-extglob@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
|
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
|
||||||
|
|
||||||
|
is-glob@^4.0.1, is-glob@~4.0.1:
|
||||||
|
version "4.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||||
|
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||||
|
dependencies:
|
||||||
|
is-extglob "^2.1.1"
|
||||||
|
|
||||||
|
is-number@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||||
|
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||||
|
|
||||||
is-promise@^4.0.0:
|
is-promise@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
|
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
|
||||||
@@ -434,6 +534,13 @@ mime-types@^3.0.0, mime-types@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mime-db "^1.54.0"
|
mime-db "^1.54.0"
|
||||||
|
|
||||||
|
minimatch@^10.2.1:
|
||||||
|
version "10.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde"
|
||||||
|
integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^5.0.2"
|
||||||
|
|
||||||
ms@^2.1.3:
|
ms@^2.1.3:
|
||||||
version "2.1.3"
|
version "2.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||||
@@ -444,6 +551,27 @@ negotiator@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
|
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
|
||||||
integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
|
integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
|
||||||
|
|
||||||
|
nodemon@^3.1.14:
|
||||||
|
version "3.1.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.14.tgz#8487ca379c515301d221ec007f27f24ecafa2b51"
|
||||||
|
integrity sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==
|
||||||
|
dependencies:
|
||||||
|
chokidar "^3.5.2"
|
||||||
|
debug "^4"
|
||||||
|
ignore-by-default "^1.0.1"
|
||||||
|
minimatch "^10.2.1"
|
||||||
|
pstree.remy "^1.1.8"
|
||||||
|
semver "^7.5.3"
|
||||||
|
simple-update-notifier "^2.0.0"
|
||||||
|
supports-color "^5.5.0"
|
||||||
|
touch "^3.1.0"
|
||||||
|
undefsafe "^2.0.5"
|
||||||
|
|
||||||
|
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
|
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||||
|
|
||||||
object-inspect@^1.13.3:
|
object-inspect@^1.13.3:
|
||||||
version "1.13.4"
|
version "1.13.4"
|
||||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
|
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
|
||||||
@@ -473,6 +601,11 @@ path-to-regexp@^8.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f"
|
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f"
|
||||||
integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==
|
integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==
|
||||||
|
|
||||||
|
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||||
|
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||||
|
|
||||||
proxy-addr@^2.0.7:
|
proxy-addr@^2.0.7:
|
||||||
version "2.0.7"
|
version "2.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
||||||
@@ -481,6 +614,11 @@ proxy-addr@^2.0.7:
|
|||||||
forwarded "0.2.0"
|
forwarded "0.2.0"
|
||||||
ipaddr.js "1.9.1"
|
ipaddr.js "1.9.1"
|
||||||
|
|
||||||
|
pstree.remy@^1.1.8:
|
||||||
|
version "1.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
|
||||||
|
integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
|
||||||
|
|
||||||
qs@^6.14.0, qs@^6.14.1:
|
qs@^6.14.0, qs@^6.14.1:
|
||||||
version "6.15.0"
|
version "6.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3"
|
||||||
@@ -503,6 +641,13 @@ raw-body@^3.0.1:
|
|||||||
iconv-lite "~0.7.0"
|
iconv-lite "~0.7.0"
|
||||||
unpipe "~1.0.0"
|
unpipe "~1.0.0"
|
||||||
|
|
||||||
|
readdirp@~3.6.0:
|
||||||
|
version "3.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
||||||
|
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||||
|
dependencies:
|
||||||
|
picomatch "^2.2.1"
|
||||||
|
|
||||||
router@^2.2.0:
|
router@^2.2.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef"
|
resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef"
|
||||||
@@ -519,6 +664,11 @@ router@^2.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
|
semver@^7.5.3:
|
||||||
|
version "7.7.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
|
||||||
|
integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
|
||||||
|
|
||||||
send@^1.1.0, send@^1.2.0:
|
send@^1.1.0, send@^1.2.0:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed"
|
resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed"
|
||||||
@@ -591,16 +741,42 @@ side-channel@^1.1.0:
|
|||||||
side-channel-map "^1.0.1"
|
side-channel-map "^1.0.1"
|
||||||
side-channel-weakmap "^1.0.2"
|
side-channel-weakmap "^1.0.2"
|
||||||
|
|
||||||
|
simple-update-notifier@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
|
||||||
|
integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
|
||||||
|
dependencies:
|
||||||
|
semver "^7.5.3"
|
||||||
|
|
||||||
statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2:
|
statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382"
|
||||||
integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==
|
integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==
|
||||||
|
|
||||||
|
supports-color@^5.5.0:
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
|
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
to-regex-range@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||||
|
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||||
|
dependencies:
|
||||||
|
is-number "^7.0.0"
|
||||||
|
|
||||||
toidentifier@~1.0.1:
|
toidentifier@~1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||||
|
|
||||||
|
touch@^3.1.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694"
|
||||||
|
integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==
|
||||||
|
|
||||||
ts-node@^10.9.2:
|
ts-node@^10.9.2:
|
||||||
version "10.9.2"
|
version "10.9.2"
|
||||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
|
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
|
||||||
@@ -634,6 +810,11 @@ typescript@^5.9.3:
|
|||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
|
||||||
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
|
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
|
||||||
|
|
||||||
|
undefsafe@^2.0.5:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
|
||||||
|
integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
|
||||||
|
|
||||||
undici-types@~7.18.0:
|
undici-types@~7.18.0:
|
||||||
version "7.18.2"
|
version "7.18.2"
|
||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9"
|
||||||
|
|||||||
Reference in New Issue
Block a user