From bae0ce97adabeb5371e9437058f6489123d9ee8e Mon Sep 17 00:00:00 2001 From: idylls Date: Tue, 24 Jan 2023 15:52:57 -0500 Subject: [PATCH] Initial commit --- .gitignore | 3 + build.sh | 7 + content/pages/about.html | 41 + content/pages/home.html | 3 + content/pages/index.html | 5 + content/pages/logs.html | 25 + content/pages/nav.html | 13 + content/pages/now.html | 7 + content/pages/uses.html | 80 ++ content/pages/work.html | 15 + content/static/images/author.png | Bin 0 -> 9048 bytes css/resume.less | 165 ++++ css/style.less | 171 +++++ deploy.sh | 5 + gen/main.ts | 18 + gen/pages/build.ts | 131 ++++ gen/pages/logs.ts | 165 ++++ gen/pages/now.ts | 95 +++ gen/pages/quote.ts | 18 + gen/pages/work.ts | 327 ++++++++ gen/util.ts | 11 + js/bundle.ts | 3 + js/quote.ts | 55 ++ package-lock.json | 1229 ++++++++++++++++++++++++++++++ package.json | 17 + prettier.config.cjs | 11 + tsconfig.json | 17 + 27 files changed, 2637 insertions(+) create mode 100644 .gitignore create mode 100755 build.sh create mode 100644 content/pages/about.html create mode 100644 content/pages/home.html create mode 100644 content/pages/index.html create mode 100644 content/pages/logs.html create mode 100644 content/pages/nav.html create mode 100644 content/pages/now.html create mode 100644 content/pages/uses.html create mode 100644 content/pages/work.html create mode 100644 content/static/images/author.png create mode 100644 css/resume.less create mode 100644 css/style.less create mode 100755 deploy.sh create mode 100644 gen/main.ts create mode 100644 gen/pages/build.ts create mode 100644 gen/pages/logs.ts create mode 100644 gen/pages/now.ts create mode 100644 gen/pages/quote.ts create mode 100644 gen/pages/work.ts create mode 100644 gen/util.ts create mode 100644 js/bundle.ts create mode 100644 js/quote.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 prettier.config.cjs create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..34558e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +node_modules/ +build/ diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..0bfc428 --- /dev/null +++ b/build.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +cp -r content/static build/ +npx lessc css/style.less build/style.css +npx lessc css/resume.less build/resume.css +npx esbuild --bundle js/bundle.ts --outfile=build/bundle.js +bun gen/main.ts diff --git a/content/pages/about.html b/content/pages/about.html new file mode 100644 index 0000000..76ec724 --- /dev/null +++ b/content/pages/about.html @@ -0,0 +1,41 @@ + + About the Author + + +

About the Author

+
+ + +

+Hello! My name is Nick. Currently I'm located in the Greater Philadelphia +area. +

+

+I work as a programmer, typically remotely. +I'm usually tinkering on some sort of project, some of which are available +publicly on my git service, and others +that I keep mostly private for myself and friends (though I'm typically +happy to demo/share source code on request). +

+ +

+You can see what I'm currently up to on my now page. +

+

+I maintain a list of the gear / tools I use here. +

+

Contact Me

+

+If you'd like to reach me, the best way to do so is by email. My email +address is nick at <this domain>. Please add my +address to your whitelist, otherwise any responses I send may be sent to +spam, or worse, silently dropped. I try to respond within 24 hours, +so if you haven't heard from me by then, either check your spam folder or +send me another email. +

+
diff --git a/content/pages/home.html b/content/pages/home.html new file mode 100644 index 0000000..c2336de --- /dev/null +++ b/content/pages/home.html @@ -0,0 +1,3 @@ + + Home + diff --git a/content/pages/index.html b/content/pages/index.html new file mode 100644 index 0000000..c6ce211 --- /dev/null +++ b/content/pages/index.html @@ -0,0 +1,5 @@ + + Hello + + + diff --git a/content/pages/logs.html b/content/pages/logs.html new file mode 100644 index 0000000..eea592b --- /dev/null +++ b/content/pages/logs.html @@ -0,0 +1,25 @@ + + Logs + + +

Logs

+

+I have a terrible memory, so I try to keep track of various media that I've +enjoyed here. Think of it kind of like Goodreads :) +

+ +

+Everything is rated out of 10, with the general scale as follows: +

10: All time favorite
+
9: Almost perfect
+
8: Really good
+
7: Good
+
6: Decent
+
5: Meh
+
4: Not my thing
+
3: Really not my thing
+
2: Bad, but maybe someone out there would like it
+
1: Awful
+

+ + diff --git a/content/pages/nav.html b/content/pages/nav.html new file mode 100644 index 0000000..0526722 --- /dev/null +++ b/content/pages/nav.html @@ -0,0 +1,13 @@ + + Sitemap + + +

Site map

+ + diff --git a/content/pages/now.html b/content/pages/now.html new file mode 100644 index 0000000..2d3a943 --- /dev/null +++ b/content/pages/now.html @@ -0,0 +1,7 @@ + + Now + + + +

Now

+ diff --git a/content/pages/uses.html b/content/pages/uses.html new file mode 100644 index 0000000..bfe5060 --- /dev/null +++ b/content/pages/uses.html @@ -0,0 +1,80 @@ + + Uses This + + +

Uses This

+

Inspired by usesthis.

+ +
+

Computing

+
+

Desktop

+

Built February 2022

+
    +
  • Case: Corsair 4000D Airflow
  • +
  • Motherboard: Asus PRIME Z690-P D4
  • +
  • Processor: i7-12700k
  • +
  • GPU: EVGA GeForce RTX 3060 Ti FTW Ultra Gaming
  • +
  • RAM: 32GB DDR4 @ 3600MHz
  • +
  • Cooler: Scythe FUMA 2
  • +
  • Power Supply: Corsair RM750x (2021)
  • +
  • Drive: Samsung 970 Evo Plus 1TB
  • +
  • Operating System: Arch Linux
  • +
  • Mouse: Pulsar Xlite V2 mini Wireless
  • +
  • Headphones: Sennheiser HD 560 S
  • +
  • Microphone: Samson Technologies Q2U Dynamic Microphone
  • +
  • Mouse pad: ARTISAN Raiden XL
  • +
+
+
+

Laptop

+

+Lenovo Thinkpad T440s, bought sometime in ~2013. Running Arch Linux. +Modded with a 3-button touchpad. Looking to replace this at some point +in the near future. +

+
+
+

Keyboard

+

+Self-built +Ferris Sweep, with +Choc Purpz. +

+

+
+

Tools

+
    +
  • Text editor: Emacs
  • +
  • Terminal emulator: kitty
  • +
  • Interactive shell: fish
  • +
  • Browser: Firefox
  • +
+
+
+ +
+

Art

+
    +
  • Digital art software: Krita
  • +
  • Tablet: Wacom Intuous S
  • +
  • Sketchbook: Some cheap hardcover notebooks from Amazon
  • +
  • Pens: Mr. Pen Multiliners
  • +
  • Mechanical Pencil: uni Kuru Toga Roulette
  • +
+
+ +
+

Other

+
+ +
+

Updates

+
    +
  • 2023-01-12: Created this page
  • +
+
+ +
+

Archive

+
diff --git a/content/pages/work.html b/content/pages/work.html new file mode 100644 index 0000000..e1677d5 --- /dev/null +++ b/content/pages/work.html @@ -0,0 +1,15 @@ + + Work + + +

Work

+ +

+I am currently looking for work! If you'd like to contact me, see +here. +

+

+My full résumé is available here. +

+ + diff --git a/content/static/images/author.png b/content/static/images/author.png new file mode 100644 index 0000000000000000000000000000000000000000..b19b0b2e00ef26d17e7e0808971d125fb00e5e2e GIT binary patch literal 9048 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 { + console.error(e); + process.exit(1); +}; + +const check = (p: Promise) => p.catch(abort); + +const gen = async () => { + const bp = check(buildPages()); + + await bp; + + console.log("Generation done"); +}; + +await gen(); diff --git a/gen/pages/build.ts b/gen/pages/build.ts new file mode 100644 index 0000000..215e40c --- /dev/null +++ b/gen/pages/build.ts @@ -0,0 +1,131 @@ +import { readdir, mkdir, stat, readFile, writeFile } from "node:fs/promises"; +import { HTMLElement, parse, NodeType } from "node-html-parser"; + +import { render as renderNow } from "./now"; +import { render as renderHomeQuote } from "./quote"; +import { render as renderLogs } from "./logs"; +import { render as renderWork, renderResume } from "./work"; + +const walkdir = async (path: string) => { + const paths = await readdir(path); + const out = [] as string[]; + + for (const p of paths) { + const p_ = `${path}/${p}`; + const st = await stat(p_); + if (st.isDirectory()) { + // TODO: do something special + continue; + } + + out.push(p_); + } + + return out; +}; + +const RENDERERS = { + "x-meta": () => "", + "x-now": renderNow, + "x-logs": renderLogs, + "x-home-quote": renderHomeQuote, + "x-work": renderWork, +}; +const renderElement = (el: HTMLElement) => { + if (el.nodeType == NodeType.TEXT_NODE) { + return el.rawText; + } + + const renderer = RENDERERS[el.tagName.toLowerCase()] ?? renderBasic; + + return renderer(el); +}; + +const renderBasic = (el: HTMLElement) => { + const tag = el.tagName.toLowerCase(); + + let out = `<${tag}`; + for (const attr in el.attributes) { + out += ` ${attr}="${el.attributes[attr]}"`; + } + out += ">"; + + const children = el.childNodes.map(renderElement).join(""); + out += children; + out += ``; + + return out; +}; + +const buildPage = async (pagePath: string) => { + const contents = (await readFile(pagePath)).toString(); + const parsed = parse(contents); + + const pageOpts = (() => { + const el = parsed.querySelector("x-meta"); + if (!el) { + return { + title: null, + }; + } + + const title = el.querySelector("title"); + + return { + title: title?.innerText ?? null, + }; + })(); + + const els = parsed.childNodes.map(renderElement).join(""); + const rendered = ` + + + + + + + +${ + pageOpts.title + ? `${pageOpts.title} - idylls.net` + : "idylls.net" +} + + + +
+${els} +
+ + +`; + + const [, p] = pagePath.split("content/pages/"); + const outPath = `build/${p}`; + + return writeFile(outPath, rendered); +}; + +export const buildPages = async () => { + await mkdir("build/", { recursive: true }); + + const paths = await walkdir("content/pages"); + + for (const p of paths) { + await buildPage(p); + } + + const resumeContent = renderResume(); + + await writeFile("build/resume.html", resumeContent); +}; diff --git a/gen/pages/logs.ts b/gen/pages/logs.ts new file mode 100644 index 0000000..cb2688f --- /dev/null +++ b/gen/pages/logs.ts @@ -0,0 +1,165 @@ +import { isoDateStr } from "../util"; + +type LogBase = { + name: string; + started?: Date; + finished?: Date; + dropped?: true; + rating?: number; + picUrl?: string; +}; + +const status = (log: LogBase) => { + if (log.dropped) { + return "dropped" as const; + } + + if (!log.started && !log.finished && !log.rating) { + return "wantTo" as const; + } + + if (log.started && !log.finished) { + return "inProgress" as const; + } + + if (log.finished || log.rating) { + return "finished" as const; + } + + throw new Error("unreachable"); +}; + +const byStatusSorted = (items: LogBase[]) => { + const inProgress = items.filter((i) => status(i) == "inProgress"); + inProgress.sort((a, b) => +(a.started ?? 0) - +(b.started ?? 0)); + + const finished = items.filter((i) => status(i) == "finished"); + finished.sort((a, b) => (b.rating ?? 0) - (a.rating ?? 0)); + + const wantTo = items.filter((i) => status(i) == "wantTo"); + wantTo.sort((a, b) => a.name.localeCompare(b.name)); + + const dropped = items.filter((i) => status(i) == "dropped"); + dropped.sort((a, b) => +((a.started ?? 0) > (b.started ?? 0))); + + return { dropped, wantTo, finished, inProgress }; +}; + +type Anime = LogBase & { season?: number }; +const ANIME: Anime[] = [ + { + name: "Violet Evergarden", + rating: 10, + }, + { + name: "Sugar Apple Fairy Tale", + started: new Date("2023-01-22"), + }, + { + name: "REVENGER", + started: new Date("2023-01-21"), + }, + { + name: "Ice Guy and the Cool Female Colleague", + }, + { + name: "High Card", + started: new Date("2023-01-21"), + }, + { + name: "Bocchi the Rock!", + started: new Date("2023-01-12"), + season: 1, + }, + { + name: "Blue Period", + started: new Date("2023-01-02"), + finished: new Date("2023-01-12"), + season: 1, + rating: 10, + }, + { + name: "Chainsaw Man", + started: new Date("2022-12-01"), + finished: new Date("2023-01-04"), + season: 1, + rating: 7.5, + }, + { + name: "Do it Yourself!!", + started: new Date("2022-12-01"), + season: 1, + }, + { + name: "Cyberpunk: Edgerunners", + season: 1, + rating: 10, + }, + { + name: "The Bear", + rating: 8, + }, + { + name: "The Witcher", + rating: 9, + }, + { + name: "Arcane", + rating: 10, + }, + { + name: "Castlevania", + rating: 10, + }, + { + name: "Over the Garden Wall", + rating: 10, + }, +]; +const renderAnime = () => { + const renderSection = (title: string, items: Anime[]) => { + let out = `

${title}

`; + for (const a of items) { + out += `

${a.name}`; + if (a.season) { + out += `, Season ${a.season}`; + } + out += "

"; + + if (a.started) { + out += `
Started: ${isoDateStr(a.started)}
`; + } + + if (a.finished) { + out += `
Finished: ${isoDateStr( + a.finished, + )}
`; + } + + if (a.rating) { + out += `
Rating: ${a.rating} / 10
`; + } + + out += "
"; + } + out += "
"; + + return out; + }; + + const { wantTo, dropped, finished, inProgress } = byStatusSorted(ANIME); + + return ` +
+

Anime / TV

+ ${renderSection("Currently Watching", inProgress)} + ${renderSection("Finished", finished)} + ${renderSection("Dropped", dropped)} + ${renderSection("Want to Watch", wantTo)} +
+ `; +}; + +export const render = () => { + return renderAnime(); +}; diff --git a/gen/pages/now.ts b/gen/pages/now.ts new file mode 100644 index 0000000..8476c2b --- /dev/null +++ b/gen/pages/now.ts @@ -0,0 +1,95 @@ +import { isoDateStr, dbg } from "../util"; + +type EntryKind = + | { + kind: "free"; + text: string; + } + | { + kind: "listeningTo"; + artist: string; + song: string; + url?: string; + } + | { + kind: "workingOn"; + what: string; + url?: string; + }; +type Entry = { + date: Date; + entries: EntryKind[]; +}; + +const ENTRIES: Entry[] = [ + { + date: new Date("2023-01-10"), + entries: [{ kind: "workingOn", what: "this site!" }], + }, + { + date: new Date("2023-01-18"), + entries: [ + { kind: "free", text: "Looking for work!" }, + { + kind: "listeningTo", + artist: "Saint Pepsi", + song: "Better", + url: "https://music.youtube.com/watch?v=WYvji5AXOfk", + }, + ], + }, + { + date: new Date("2023-01-12"), + entries: [ + { + kind: "listeningTo", + artist: "Darius (feat. Amaria)", + song: "FADED", + url: "https://music.youtube.com/watch?v=SfTOJ9PeQlY", + }, + ], + }, +]; + +export const render = () => { + const entries = [...ENTRIES]; + entries.sort((a, b) => +b.date - +a.date); + + let out = '
'; + for (const entry of entries) { + out += ` +
+
+ ${isoDateStr(entry.date)} +
`; + + for (const en of entry.entries) { + switch (en.kind) { + case "workingOn": + out += `
Working on: ${en.what}
`; + break; + case "free": + out += `
${en.text}
`; + break; + case "listeningTo": + out += ` + + `; + break; + } + } + + out += `
`; + } + + out += "
"; + + return out; +}; diff --git a/gen/pages/quote.ts b/gen/pages/quote.ts new file mode 100644 index 0000000..de39c00 --- /dev/null +++ b/gen/pages/quote.ts @@ -0,0 +1,18 @@ +// TODO: now that this is in typescript, maybe share quote list and +// dynamically pick one here? + +export const render = () => ` +
+
+ The world ain't all sunshine and rainbows. It's a very mean and + nasty place, and I don't care how tough you are it will beat you + to your knees and keep you there permanently if you let it. You, + me, or nobody is gonna hit as hard as life. But it ain't about + how hard you hit. It's about how hard you can get hit and keep + moving forward. How much you can take and keep moving forward. + That's how winning is done! + Rocky +
+ +
+`; diff --git a/gen/pages/work.ts b/gen/pages/work.ts new file mode 100644 index 0000000..9f8e9a4 --- /dev/null +++ b/gen/pages/work.ts @@ -0,0 +1,327 @@ +import { isoDateStr } from "../util"; + +type Info = { + name: string; + emailAddress: string; + website: string; +}; + +type Education = { + university: string; + college: string; + graduationYear: number; + degree: string; +}; + +type Timeframe = { start: Date; end?: Date } | string; + +type Skill = + | "TypeScript" + | "React" + | "Python" + | "Django" + | "CSS" + | "SCSS" + | "PostgreSQL" + | "Java" + | "Go" + | "MongoDB" + | "WordPress" + | "PHP" + | "Kotlin" + | "HTML" + | "Elixir" + | "Phoenix" + | "JavaScript" + | "Docker" + | "Rust" + | "C++" + | "C" + | "Haskell" + | "GraphQL"; + +type Experience = { + companyName: string; + title: string; + skills: Skill[]; + timeframe: Timeframe; + highlights: string[]; +}; + +type Project = { + name: string; + skills: Skill[]; + description: string; + link?: string; +}; + +type Resume = { + info: Info; + education: Education; + experiences: Experience[]; + selectedProjects: Project[]; + skills: Skill[]; +}; + +const RESUME: Resume = { + info: { + name: "Nick", + emailAddress: "hello@idylls.net", + website: "https://idylls.net", + }, + education: { + university: "Northeastern University", + college: "Khoury College of Computer Sciences", + degree: "Bachelor of Science in Computer Science with Honors, Cum Laude", + graduationYear: 2019, + }, + experiences: [ + { + companyName: "Massachusetts Bay Transportation Authority", + title: "Full Stack Software Engineer", + highlights: [ + "Led maintenance and development of critical, high-availability service delivering transit alerts to riders via both SMS and email", + "Developed and deployed various improvements to public-facing rider website", + ], + skills: [ + "Elixir", + "Phoenix", + "TypeScript", + "JavaScript", + "SCSS", + "Docker", + "PostgreSQL", + ], + timeframe: "2022", + }, + { + companyName: "KickUp", + title: "Full Stack Software Engineer", + highlights: [ + "Designed and implemented several features improving client abilities to visualize, analyze, and action teacher growth data", + "Led effort to integrate TypeScript into existing JavaScript codebase, as well as provided mentorship to other team members", + ], + skills: [ + "TypeScript", + "JavaScript", + "React", + "Python", + "Django", + "CSS", + "PostgreSQL", + "GraphQL", + ], + timeframe: { + start: new Date("2020-10-01"), + end: new Date("2022-02-01"), + }, + }, + { + companyName: "TripAdvisor", + title: "Full Stack Software Engineer", + highlights: [ + "Led design and implementation of project surfacing location outliers to suppliers, increasing sales and click-through rate on 10% of products", + "Implemented improved online photo editor, increasing the percentage of listings with owner-provided photos by 5%", + ], + timeframe: { + start: new Date("2019-09-01"), + end: new Date("2020-06-01"), + }, + skills: ["Java", "JavaScript", "React", "CSS", "PostgreSQL", "GraphQL"], + }, + { + companyName: "TripAdvisor, Rentals", + title: "Full Stack Engineering Co-op", + highlights: [ + "Assisted in redesigning the external calendar syncing system, reducing the time to update hundreds of thousands of external calendars from hours to fifteen minutes", + "Designed, developed, and tested endpoints for internal and external REST APIs in a large Java codebase, as well as modified user-facing web pages", + ], + timeframe: "Spring/Summer 2018", + skills: ["Java", "JavaScript", "CSS"], + }, + { + companyName: "clypd", + title: "Backend Engineering Co-op", + highlights: [ + "Acted as feature lead on redesign of large portions of existing API to surface additional data and improve ergonomics for major analytics project", + "Organized meetups originally related to Rust but later expanding to general code jams", + ], + skills: ["Go", "PostgreSQL"], + timeframe: "Spring/Summer 2017", + }, + { + companyName: "I'm From the Future", + title: "Junior Full Stack Software Engineer", + highlights: [ + "Led development on an internal marketing tool using React, D3.js, PhantomJS, and MongoDB", + ], + skills: ["PHP", "JavaScript", "React", "MongoDB", "CSS", "WordPress"], + timeframe: "Summer/Fall 2016", + }, + { + companyName: "ProTech Internet Group", + title: "Junior Web Developer", + skills: ["PHP", "JavaScript", "CSS", "WordPress"], + timeframe: { + start: new Date("2015-06-01"), + end: new Date("2016-06-01"), + }, + highlights: [], + }, + { + companyName: "SiteTechs", + title: "Web Content Admin", + skills: ["JavaScript", "HTML", "CSS", "WordPress"], + timeframe: { + start: new Date("2012-06-01"), + end: new Date("2015-09-01"), + }, + highlights: [], + }, + ], + selectedProjects: [ + { + name: "Pathos", + description: + "An Old School RuneScape plugin for displaying pathing information", + skills: ["Kotlin"], + link: "https://git.idylls.net/idylls/pathos", + }, + { + name: "Statue", + description: "A lightweight web host / service status monitor", + skills: ["Rust", "TypeScript"], + link: "https://status.idylls.net", + }, + ], + skills: ["Rust", "TypeScript", "C++", "C", "Haskell", "Java"], +}; + +export const renderResume = () => { + const renderInfo = () => ` +
+
${RESUME.info.name}
+ + +
+ `; + const renderExperiences = () => { + let out = `
Experience
`; + + for (const e of RESUME.experiences) { + out += `
`; + + out += `
${e.title}
`; + out += `
${e.companyName}
`; + out += `
${renderTimeframe(e.timeframe)}
`; + out += `
${e.skills.join(", ")}
`; + + out += `
    `; + for (const h of e.highlights) { + out += `
  • ${h}
  • `; + } + out += `
`; + + out += `
`; + } + + out += `
`; + + return out; + }; + const renderProjects = () => { + let out = `
Selected Projects
`; + out += ``; + + for (const p of RESUME.selectedProjects) { + out += `
`; + + out += `
${p.name}
`; + out += `
${p.skills.join(", ")}
`; + out += `
${p.description}
`; + + out += `
`; + } + + out += "
"; + + return out; + }; + const renderEducation = () => ` +
+
Education
+
${RESUME.education.university}
+
${RESUME.education.college} Class of ${RESUME.education.graduationYear}
+
${RESUME.education.degree}
+
+ `; + + const renderSkills = () => ` +
+
Skills
+
${RESUME.skills.join(", ")}
+
+ `; + + return ` + + + + + + +Résumé + + +${renderInfo()} +${renderExperiences()} +${renderProjects()} +${renderEducation()} +${renderSkills()} + + + `; +}; + +const renderTimeframe = (t: Timeframe) => { + if (typeof t == "string") { + return t; + } + + return `${t.start.getFullYear()} — ${ + t.end ? t.end.getFullYear() : "Present" + }`; +}; + +export const render = () => { + let out = ` +
+ + + + + + + + + +`; + + for (const e of RESUME.experiences) { + out += ` + + + + + +`; + } + + out += `
CompanyTitleTimeframe
${e.companyName}${e.title}${renderTimeframe(e.timeframe)}
`; + + return out; +}; diff --git a/gen/util.ts b/gen/util.ts new file mode 100644 index 0000000..43b3872 --- /dev/null +++ b/gen/util.ts @@ -0,0 +1,11 @@ +export const isoDateStr = (date: Date) => + `${date.getUTCFullYear()}-${`${date.getUTCMonth() + 1}`.padStart( + 2, + "0", + )}-${`${date.getUTCDate()}`.padStart(2, "0")}`; + +export const dbg = (a: T) => { + console.debug(a); + + return a; +}; diff --git a/js/bundle.ts b/js/bundle.ts new file mode 100644 index 0000000..f2978da --- /dev/null +++ b/js/bundle.ts @@ -0,0 +1,3 @@ +import { init as initQuote } from "./quote"; + +window["initQuote"] = initQuote; diff --git a/js/quote.ts b/js/quote.ts new file mode 100644 index 0000000..8b21bcb --- /dev/null +++ b/js/quote.ts @@ -0,0 +1,55 @@ +import { swel } from "swel"; + +const QUOTES = [ + [ + "The world ain't all sunshine and rainbows. It's a very mean and nasty place, and I don't care how tough you are it will beat you to your knees and keep you there permanently if you let it. You, me, or nobody is gonna hit as hard as life. But it ain't about how hard you hit. It's about how hard you can get hit and keep moving forward. How much you can take and keep moving forward. That's how winning is done!", + "Rocky", + ] as const, + [ + "Almost dead yesterday, maybe dead tomorrow, but alive, gloriously alive, today", + "Robert Jordan, Lord of Chaos", + ] as const, + [ + "Those who build walls are their own prisoners", + "Ursula K. Le Guin, The Dispossessed", + ] as const, + [ + "I have no right to call myself one who knows. I was one who \ + seeks, and I still am, but I no longer seek in the stars or in \ + the books; I’m beginning to hear the teachings of my blood \ + pulsing within me. My story isn’t pleasant. It’s not sweet and \ + harmonious like invented stories. It tastes of folly and \ + bewilderment, of madness and dream, like the life of all people \ + who no longer want to lie to themselves.", + "Herman Hesse", + ] as const, + [ + "In the depth of winter, I finally learned that within me there \ + lay and invincible summer", + "Albert Camus", + ] as const, + [ + "Life, although it may only be an accumulation of anguish, is \ + dear to me, and I will defend it.", + "Mary Shelley, Frankenstein", + ] as const, + [ + "Who but a god can go through life unmarked?", + "Aeschylus, Agamemnon", + ] as const, + ["Don't you dare go Hollow.", "Laurentius, Dark Souls"] as const, +]; + +export const init = () => { + const el = document.querySelector(".home-quote"); + if (!el) { + return; + } + + const [quote, cite] = QUOTES[Math.floor(Math.random() * QUOTES.length)]; + + const citeEl = swel("cite"); + citeEl.innerHTML = cite; + const bq = swel("blockquote", [quote, citeEl]); + el.replaceChildren(bq); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3a88539 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1229 @@ +{ + "name": "sike", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "sike", + "version": "0.0.0", + "devDependencies": { + "bun-types": "^0.5.0", + "esbuild": "^0.16.17", + "less": "^4.1.3", + "node-html-parser": "^6.1.4", + "swel": "file:../swel" + } + }, + "../swel": { + "version": "0.0.0", + "dev": true, + "license": "UNLICENSED" + }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bun-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-0.5.0.tgz", + "integrity": "sha512-W74XkTKdOP2HV1PbzL7k6+8TZlcJyj1IuD7y9wX2SiHIaVjlqVwM9fXgsCvTlQQqkkkyZxSPSDFF10J6qml2eA==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "optional": true + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.4.tgz", + "integrity": "sha512-3muP9Uy/Pz7bQa9TNYVQzWJhNZMqyCx7xJle8kz2/y1UgzAUyXXShc1IcPaJy6u07CE3K5rQcRwlvHzmlySRjg==", + "dev": true, + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swel": { + "resolved": "../swel", + "link": true + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "dev": true, + "optional": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bun-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-0.5.0.tgz", + "integrity": "sha512-W74XkTKdOP2HV1PbzL7k6+8TZlcJyj1IuD7y9wX2SiHIaVjlqVwM9fXgsCvTlQQqkkkyZxSPSDFF10J6qml2eA==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "optional": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + }, + "needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + } + }, + "node-html-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.4.tgz", + "integrity": "sha512-3muP9Uy/Pz7bQa9TNYVQzWJhNZMqyCx7xJle8kz2/y1UgzAUyXXShc1IcPaJy6u07CE3K5rQcRwlvHzmlySRjg==", + "dev": true, + "requires": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "swel": { + "version": "file:../swel" + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..36916a6 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "sike", + "type": "module", + "version": "0.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "devDependencies": { + "bun-types": "^0.5.0", + "esbuild": "^0.16.17", + "less": "^4.1.3", + "node-html-parser": "^6.1.4", + "swel": "file:../swel" + } +} diff --git a/prettier.config.cjs b/prettier.config.cjs new file mode 100644 index 0000000..13a984f --- /dev/null +++ b/prettier.config.cjs @@ -0,0 +1,11 @@ +module.exports = { + printWidth: 80, + useTabs: true, + semi: true, + singleQuote: false, + quoteProps: "as-needed", + trailingComma: "all", + bracketSpacing: true, + arrowParens: "always", + parser: "typescript", +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..551699e --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "noEmit": true, + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "exactOptionalPropertyTypes": true, + "noImplicitOverride": true, + "checkJs": true, + "allowJs": true, + "types": ["bun-types"] + }, + "include": ["gen/**/*.ts", "gen/**/*.js"], + "exclude": ["node_modules"] +}